之前的文章写了怎么渲染shp格式的矢量地图,这里记录下怎么渲染栅格图tiff格式。
0.环境配置参考
1.mapnik的demo运行
2.python支持下的mapnik安装
3.几个shape格式、tiff格式地图免费下载网站
4.vc调用python接口操作mapnik
5.python操作多个图层的mapnik
1.需要的文件
1.shp格式1:50m全球海岸线
2.1:50m全球栅格图
注意
文件下载后解压缩的文件名为数字开头,并且有下划线,这些在python里做文件路径的时候跟在\后 ,容易形成转义字符,这里为了方便,改成Coastline.shp Coastline.tiff
2.python代码
import mapnik
#----------create map---------------------
m = mapnik.Map(10800,5400);
m.background = mapnik.Color('white');
#----------create layer 1-----------------
SHP_layer = mapnik.Layer('SHP');
#----------create layer 1 datasource------
SHP_layer.datasource = mapnik.Shapefile(file='C:\coastline\coastline.shp');
#----------get layer 1 style & rule------
SHP_style = mapnik.Style();
SHP_rule = mapnik.Rule();
#----------set layer 1 Polygon & Line color------
SHP_rule.symbols.append(mapnik.PolygonSymbolizer(mapnik.Color('#FFF5EE')));
SHP_rule.symbols.append(mapnik.LineSymbolizer(mapnik.Color('rgb(50%,50%,50%)'),0.1));
#----------set layer 1 style & rule------
SHP_style.rules.append(SHP_rule);
#----------append layer 1 style----------
m.append_style('SHP Style',SHP_style);
SHP_layer.styles.append('SHP Style');
#----------append layer1 to map----------
m.layers.append(SHP_layer);
#----------create layer 2-----------------
RASTER_layer = mapnik.Layer('RASTER');
#----------create layer 2 datasource------
RASTER_layer.datasource = mapnik.Gdal(file='C:\coastline\coastline.tif',band = 1);
RASTER_style = mapnik.Style();
RASTER_rule = mapnik.Rule();
RASTERsym = mapnik.RasterSymbolizer();
RASTERsym.colorizer = mapnik.RasterColorizer(mapnik.COLORIZER_DISCRETE ,mapnik.Color("transparent"))
for value, color in [
( 20, "#7FFFD4"),
( 30, "#76EEC6"),
( 40, "#66CDAA"),
( 50, "#458B74"),
( 60, "#DAA520"),
( 70, "#EEDD82"),
( 80, "#7FFFD4"),
( 90, "#76EEC6"),
( 100, "#66CDAA"),
( 110, "#458B74"),
( 200, "transparent"),
]:
RASTERsym.colorizer.add_stop(value, mapnik.Color(color))
RASTER_rule.symbols.append(RASTERsym);
RASTER_style.rules.append(RASTER_rule);
#----------append layer 1 style----------
m.append_style('RASTER Style',RASTER_style);
RASTER_layer.styles.append('RASTER Style');
#----------append layer 2 to map----------
m.layers.append(RASTER_layer);
m.zoom_all();
mapnik.render_to_file(m,"SHPandRASTER.png", 'png');
3.结果截图
4.结果说明
这里可以看到图片的颜色与原版差别很大,这是因为不知道原版用的渲染color数组,实在没办法还原。这里提现个大意即可。