通过python语言使用mapnik渲染shape文件

已被阅读 2383 次 | 文章分类: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

小白GIS

2. 将安装包解压到c盘根目录,这个目录可以自选;可以看到mapink 2.2.0支持python2.7

小白GIS

3. mapink 2.2.0是32位;所以下载python2.7 32位,64位运行mapnik会出错;并解压到C盘根目录;下载地址https://www.python.org/downloads/windows/

小白GIS

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;可以看到版本信息

小白GIS

打开终端,输入mapnik-config -v ;看到mapnik版本信息,至此配置完成

二:测试文件

运行mapnik中的测试文件;打开终端到C:\mapnik-v2.2.0\demo\python;执行以下命令,出现一下结果说明mapnik和python成功

小白GIS

三:实例操作-基于binding方式

1. 这里渲染一个shape格式的矢量文件,初始效果如下

小白GIS

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'"

                                        
                                    

小白GIS

这样就通过基于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等属性,简单直观;官方的配色效果

小白GIS

QQ:3410192267 | 技术支持 微信:popstarqqsmall

Copyright ©2017 xiaobaigis.com . 版权所有 鲁ICP备17027716号