GDAL和栅格数据源允许你包含一幅地图上的栅格影像。有了数据源,就可以使用 RasterSymbolizer 将其显示在地图的图层上。
RasterSymbolizer
创建一个 RasterSymbolizer是非常简单。 RasterSymbolizer把图层中的栅格文件数据源中的内容自动绘制到地图上,RasterSymbolizer 支持以下用来控制显示栅格数据的选项:
symbolizer.opacity
控制栅格数据的透明度,值为 0.0
,则影像完全透明,
值为 1.0
,则影像完全不透明。在默认情况下,栅格影像是不透明的。
symbolizer.mode
属性告诉RasterSymbolizer怎样结合光栅数据呈现地图。
这些模式与在图形编辑器中显示图层的方式相似,例如Photoshop或者GIMP。
支持以下合并模式:
symbolizer.scaling
可以用来控制光栅图像的算法。
可用的选项是:fast(采用最近邻居算法),
bilinear(在所有四个颜色通道中使用双线性插值法),
和bilinear8(仅仅为一个颜色通道使用双线性插值法)。
注意:Mapnik目前不支持动态的栅格数据的重投影,
如果你生成一幅地图使用一个不同于栅格数据投影的投影方式,
你需要在它显示之前对栅格数据进行重新投影,例如,通过使用 gdalwarp
工具。
RasterSymbolizer的主要用途是展现shaded relief背景,如上面的图所显示的。这能给读者留下一个地形的基本印象。
前面的图像是使用来自国家高程数据集的一个Digital
Elevation Map(DEM文件格式)的数据文件创建的。该文件是使用
Hillshade选项gdaldem应用程序处理的来创建一幅地貌晕渲的灰度图像。
这个图像是使用RasterSymbolizer设置成hard_light
模式进行显示的,
平铺在由GSHHS shoreline database定义的海岸线的浅绿色背景之上。
import mapnik
m = mapnik.Map(600, 500, "+proj=latlong +datum=WGS84")
symbol = mapnik.RasterSymbolizer()
###############################################################################
s = mapnik.Style()
r = mapnik.Rule()
r.symbols.append(symbol)
s.rules.append(r)
m.append_style('My Style', s)
datasource = mapnik.Gdal(file='/data/gdata/geotiff_file.tif')
layer = mapnik.Layer("myLayer")
layer.datasource = datasource
layer.styles.append('My Style')
m.layers.append(layer)
###############################################################################
layer.envelope()
###############################################################################
m.zoom_to_box(layer.envelope())
mapnik.render_to_file(m, 'xx_mapnik_result.png', 'png')
from IPython.display import Image
Image('xx_mapnik_result.png')