mapnik设置中文字体显示
Mapnik 是一个开源的 Python/C++ 地图渲染引擎,他的功能是把数据形式的地图,包含一些地理对象,如地图、层、数据源、特征和地理几何等,通过一个样式表的定义,渲染成位图格式,用来提供 WMS 服务。其核心是一个 C++ 的共享库提供空间数据访问和可视化的算法和模式。该共享库支持多种操作系统,可以在多线程环境下很好的运行,主要面向一些提供 GIS 服务的 Web 应用开发
1、shp中文设置
shp图形需要报存为utf-8格式,arcgis报存的格式为utf-8,通常来说大部分的shp
报存的格式为utf-8
2、code
# coding:utf-8
import mapnik
stylesheet="textstyle.xml"
m=mapnik.Map(1200,800)
mapnik.load_map(m,stylesheet)
m.zoom_all()
mapnik.render_to_file(m,"map.png")
3、配置文件设置
<Map background-color="#c4dff6">
<Style name="style">
<Rule>
<PolygonSymbolizer fill="#f2eff9" />
<LineSymbolizer stroke="rgb(50%,50%,50%)" stroke-width="0.1" />
<TextSymbolizer face-name="SimHei Regular" size="12">
[NAME]
</TextSymbolizer>
</Rule>
</Style>
<Layer>
<StyleName>style</StyleName>
<Datasource>
<Parameter name="type">shape</Parameter>
<Parameter name="encoding">GBK</Parameter>
<Parameter name="file">../data/擦汗ina_region.shp</Parameter>
</Datasource>
</Layer>
</Map>
4、成果
tip:使用ogr可以避免编码问题
<Layer>
<StyleName>polygon_style</StyleName>
<Datasource>
<Parameter name="type">ogr</Parameter>
<Parameter name="file">../data/china_region.shp</Parameter>
<Parameter name="layer">china_region</Parameter>
</Datasource>
</Layer>
5、写在最后
本文为自己实践所得结果,解决在实践过程中遇到的问题,文章存在错误请指正,谢谢你的阅读,转载请注征求我的同意,谢谢你的阅读!
linux下需安装SimHei字体库,直接copy到 usr\share\fonts 下使用
windows遇到的问题:
实践中遇到问题:windows下shape数据不能显示中文字体,同一字体Linux下可以显示中文字体
注:shape格式不支持中文字体!解析原因:
mapnik使用的版本为2.2.0(window下最高版本),使用gdal读取矢量数据时,不支持中文导致的,
解决方案:
- 修改源码,使gdal支持中文数据;(需自己编译代码)
- 使用一下代码解决:
<Datasource>
<Parameter name="type">shape</Parameter>
<Parameter name="file">../data/280cc7ff4866polygon.shp</Parameter>
</Datasource>
效果如图: