Python与开源GIS:Mapnik制图快速开始

首先我们来看如何使用Mapnik来渲染一幅世界地图。要开始本节的编程,需要一点基础数据。这个数据是Shapefile,名称为world_borders.shp 。

安装 Mapnik

让我们开始吧!在终端中打开Python的一个编译器。然后导入python绑定:

>>> import mapnik2 as mapnik

建立地图对象

首先要建立Mapnik对象。

>>> import mapnik
>>> m = mapnik.Map(6000,3000,"+proj=latlong +datum=WGS84")
>>> m.background = mapnik.Color('steelblue')

'map.srs' 为你希望要生成地图的投影,

创建一个给定宽度和高度的地图,设置背景 的颜色为“steelblue”。

创建样式

使用样式来决定数据是如何渲染的。

>>> s = mapnik.Style()
>>> r=mapnik.Rule()
>>> polygon_symbolizer = mapnik.PolygonSymbolizer(mapnik.Color('#f2eff9'))
>>> r.symbols.append(polygon_symbolizer)
>>> line_symbolizer = mapnik.LineSymbolizer(mapnik.Color('rgb(50%,50%,50%)'),0.1
>>> r.symbols.append(line_symbolizer)
>>> s.rules.append(r)
>>> m.append_style('My Style',s)

上面 s 与 r ,分别是地图对象的样式与规则,polygon_symbolizer 与 line_symbolizer 分别定义了多边形与线状要素的样式;然后,符号添加到规则中,规则添加到样式中,样式再加入到地图中。

创建数据源

在上面的第二步中你需要下载一个世界边界的样本面的shapefile.现在我们就用 Python 把他转成一个 Mapnik 数据源。如果你的 Python 编译器和你下载的 shape 文件在同一个目录,那么你可以创建一个相对路径来创建数据源,不然就使用绝对路径。

>>> ds = mapnik.Shapefile(file='/gdata/world_borders.shp')

创建图层

Mapnik层包含了周围的数据源,存储有用的属性,现在让我们创建一个层,把数据源加进去。名称为 world ,当然也可以是其他有效的名字。

>>> layer = mapnik.Layer('world')

现在把数据集加到层里面。最后我们需要确定我们上面创建的样式也适用于层,根据其字符串参考

>>> layer.datasource = ds
>>> layer.styles.append('My Style')

地图渲染

最后把图层加到地图里,然后显示图层的全部范围,如果你不把图层全部显示,那么输出很可能是空白的。可以使用 zoom_all 函数,来计算 map 所以相关的图层的最大范围。

m.layers.append(layer)
m.zoom_all()

最后渲染地图。把数据写成png格式然后保存到当前目录的 world.png 。

mapnik.render_to_file(m,'xworld.png', 'png')
exit()