python操作多个图层的mapnik

2 篇文章 1 订阅

操作单个图层的见之前的文章

vc调用python接口操作mapnik

0.准备工作

1.见之前的文章
2.中国地图包(文件夹里CHN_adm0为国界,CHN_adm1为省界,CHN_adm2为市界)

1.流程

1.新建map
2.创建新图层,包括数据源、样式和规则
3.添加新图层的样式、规则
4.向地图添加刚创建的图层
5.重复2-4步骤添加其他图层
6.渲染到文件

注意:mapnik采用的“画家规则”,即最后添加的图层覆盖之前添加的图层。

2.Python代码

import mapnik
#----------create map---------------------
m = mapnik.Map(800,600);
m.background = mapnik.Color('steelblue');
#----------create layer 1-----------------
Boundries_layer = mapnik.Layer('Boundries');
#----------create layer 1 datasource------
Boundries_layer.datasource = mapnik.Shapefile(file='C:\mapnik-v2.2.0\demo\map\CHN_adm0.shp');
#----------get layer 1 style & rule------
Boundries_style = mapnik.Style();
Boundries_rule = mapnik.Rule();
#----------set layer 1 Polygon & Line color------
Boundries_rule.symbols.append(mapnik.PolygonSymbolizer(mapnik.Color('#f2eff9')));
Boundries_rule.symbols.append(mapnik.LineSymbolizer(mapnik.Color('rgb(50%,50%,50%)'),0.1));
#----------set layer 1 style & rule------
Boundries_style.rules.append(Boundries_rule);
#----------append layer 1 style----------
m.append_style('Boundries Style',Boundries_style);
Boundries_layer.styles.append('Boundries Style');
#----------append layer1 to map----------
m.layers.append(Boundries_layer);


#----------create layer 2-----------------
Province_layer = mapnik.Layer('Province');
#----------create layer 2 datasource------
Province_layer.datasource = mapnik.Shapefile(file='C:\mapnik-v2.2.0\demo\map\CHN_adm2.shp');
#----------get layer 2 style & rule-------
Province_style = mapnik.Style();
Province_rule = mapnik.Rule();
#----------set layer 2 Line color---------
Province_rule.symbols.append(mapnik.LineSymbolizer(mapnik.Color('rgb(50%,50%,50%)'),0.1));
Province_style.rules.append(Province_rule);

m.append_style('Province Style',Province_style);
Province_layer.styles.append('Province Style');
#----------append layer 2 to map----------
m.layers.append(Province_layer);



#----------create layer 3-----------------
City_layer = mapnik.Layer('City');
#----------create layer 3 datasource------
City_layer.datasource = mapnik.Shapefile(file='C:\mapnik-v2.2.0\demo\map\CHN_adm1.shp');
#----------get layer 3 style & rule-------
City_style = mapnik.Style();
City_rule = mapnik.Rule();
#----------set layer 3 Line color---------
City_rule.symbols.append(mapnik.LineSymbolizer(mapnik.Color('#ea5506'),0.5));
City_style.rules.append(City_rule);

m.append_style('City Style',City_style);
City_layer.styles.append('City Style');
#----------append layer 3 to map----------
m.layers.append(City_layer);

m.zoom_all();

mapnik.render_to_file(m,"CHN_0+1+2.png", 'png');

3.得到结果图片

3层渲染结果

4.特殊说明

1.city图层边界包含有province边界。
2.图层province和city所指向的文件本来应该分别对应CHN_adm1和CHN_adm2,但这样的话后渲染的city图层曲线将会覆盖掉之前画的province图层,因此代码里改了顺序,先渲染city曲线,再渲染province曲线,这样就能看清楚province边界了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值