>>> from env_helper import info; info()
页面更新时间: 2024-04-10 15:21:25
运行环境:
    Linux发行版本: Debian GNU/Linux 12 (bookworm)
    操作系统内核: Linux-6.1.0-18-amd64-x86_64-with-glibc2.36
    Python版本: 3.11.2

9.4. 绘制栅格影像

GDAL和栅格数据源允许你包含一幅地图上的栅格影像。有了数据源,就可以使用 RasterSymbolizer 将其显示在地图的图层上。

9.4.1. 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定义的海岸线的浅绿色背景之上。

9.4.2. 示例

>>> 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='/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')
栅格数据结果

图 9.3 栅格数据结果