已被阅读 2819 次 | 文章分类:gis随笔 | 2018-12-07 00:02
Mapnik是一个开源的Python/Node.js/C++地图渲染引擎,其功能是把一些地理对象,如地图、层、数据源、特征和地理几何数据等,通过一个样式表的定义,渲染成位图格式等切片,用来提供网络地图服务;本篇通过python语言使用mapnik
一: mapnik与python安装包下载
1. 下载mapnik 2.2.0,下载地址https://mapnik.org/pages/downloads.html
2. 将安装包解压到c盘根目录,这个目录可以自选;可以看到mapink 2.2.0支持python2.7
3. mapink 2.2.0是32位;所以下载python2.7 32位,64位运行mapnik会出错;并解压到C盘根目录;下载地址https://www.python.org/downloads/windows/
4. 环境变量配置;配置以下四个环境变量
设置环境变量path: C:\Python27 ; C:\mapnik-v2.2.0\lib; C:\mapnik-v2.2.0\bin;
新建系统变量:PYTHONPATH 值为 : C:\mapnik-v2.2.0\python\2.7\site-packages
打开终端,输入python;可以看到版本信息
打开终端,输入mapnik-config -v ;看到mapnik版本信息,至此配置完成
二:测试文件
运行mapnik中的测试文件;打开终端到C:\mapnik-v2.2.0\demo\python;执行以下命令,出现一下结果说明mapnik和python成功
三:实例操作-基于binding方式
1. 这里渲染一个shape格式的矢量文件,初始效果如下
2. 然后在shape文件所在的目录,新建一个python文件 render.py;实现渲染shape文件
# coding=utf-8 声明编码
# 引入mapnik模块
import mapnik
# 定义一个地图,变量为m,地图的背景色为orange
m = mapnik.Map(256,256)
m.background = mapnik.Color('orange')
# 定义样式s和规则r
s = mapnik.Style()
r = mapnik.Rule()
# 定义多边形符号polygon_symbolizer
# 地图上的多边形填充#f2eff9
# 把符号绑定在规则r上
polygon_symbolizer = mapnik.PolygonSymbolizer()
polygon_symbolizer.fill = mapnik.Color('#6ab9de')
r.symbols.append(polygon_symbolizer)
# 定义线符号line_symbolizer,颜色为rgb(50%,50%,50%),宽度为1
# 同样把这个符号绑定在规则r上
line_symbolizer = mapnik.LineSymbolizer()
line_symbolizer.stroke_color = mapnik.Color('#ff0000')
line_symbolizer.stroke_width = 1
r.symbols.append(line_symbolizer)
# 把规则绑定在样式上
s.rules.append(r)
# 样式命名为‘My Style’绑定在map上
m.append_style('My Style',s)
# 定义数据源
ds = mapnik.Shapefile(file='shandong.shp')
# 定义layer,将layer绑定数据源和样式
layer = mapnik.Layer('shandong')
layer.datasource = ds
layer.styles.append('My Style')
# 把layer绑定到map上,并放大
m.layers.append(layer)
m.zoom_all()
mapnik.render_to_file(m,'shandong.png', 'png')
print "rendered image to 'shandong.png'"
这样就通过基于python语言实现了一个mapnik的简单应用,接口文档见官网
四:实例操作-使用xml文件格式
上面通过python动态设置矢量数据样式,简单样式没有问题,但是如果对分级比较细致的矢量数据,必然代码显得难以管理和阅读;所以提供另一种加载xml的方式;
1. 同样在shape文件所在的目录新建两个文件:test.xml、test.py
// text.py
import mapnik
m = mapnik.Map(256,256)
mapnik.load_map(m, "test.xml")
m.zoom_all()
mapnik.render_to_file(m, "the_image.png")
// text.xml
<Map background-color="blue" srs="+init=epsg:4326">
<Style name="My Style">
<Rule>
<PolygonSymbolizer fill="#f2eff9" />
<LineSymbolizer stroke="rgb(50%,50%,50%)" stroke-width="0.1" />
</Rule>
</Style>
<Layer name="shandong" srs="+init=epsg:4326">
<StyleName>My Style</StyleName>
<Datasource>
<Parameter name="file">shandong.shp</Parameter>
<Parameter name="type">shape</Parameter>
</Datasource>
</Layer>
</Map>
可以看到xml中静态以一定的格式定义了map、layer、style、rule等属性,简单直观;官方的配色效果
QQ:3410192267 | 技术支持 微信:popstarqqsmall
Copyright ©2017 xiaobaigis.com . 版权所有 鲁ICP备17027716号