0

我使用命令行安装了 mapnik

sudo apt-get install -y python-software-properties
echo 'yes' | sudo add-apt-repository ppa:mapnik/v2.1.0
sudo apt-get update
# install core mapnik
sudo apt-get install -y libmapnik mapnik-utils python-mapnik
# install the python binding
sudo apt-get install -y python-mapnik
# confirm mapnik-config returns 2.1.0
mapnik-config -v

当我运行 python 代码时,import mapnik它工作得很好。当我尝试使用形状文件生成图像时,它会输出结果。但是当我尝试使用 osm 文件并使用此链接http://wiki.openstreetmap.org/wiki/Mapnik_Example中给出的样式表 osm.xml 时,它会给我错误

Traceback (most recent call last): File "render.py", line 6, in <module> mapnik.load_map(m, stylesheet) RuntimeError: Failed to parse expression: "NAME" in style 'CountryLabels' in TextSymbolizer at line 33 of 'mapnik_style2.xml'

这里我使用 TextSymbolizer 来显示国家名称。

我在这里做错什么了吗。任何帮助将不胜感激。提前致谢。

4

1 回答 1

3

您引用的示例不是最新的。

它用于mapnik 0.7

(注意:此示例中使用的代码不是最新的,用于 mapnik 0.7。尝试使用 mapnik 2.0+ 使用以下工作流程复制此图像将不起作用。]

即使是样式格式,2.1 版也有很大的变化。xml样式文件的“NAME”解析错误就是由此而来。从 Mapnik 2.0 开始,使用了 TextSymbolizer 的新语法:

<TextSymbolizer name="[label]" />

变成

<TextSymbolizer>[label]</TextSymbolizer>

进行此更改是为了与更高版本中引入的文本格式更改向前兼容。

而且您的 xml 样式文件可能更旧(这是在您不熟悉的页面中):

<TextSymbolizer name="name" face_name="DejaVu Sans Bold" size="10" fill="#734a08" dy="18" halo_radius="1" wrap_width="0"/>

注意:节点 TextSymbolizer 的属性“名称”没有方括号。所以如果你想改变你的 XML 样式文件,你需要将 [] 添加到 name -> name="[name]"。如果您需要更多关于 TextSymbolizer 的信息,可以参考:https ://github.com/mapnik/mapnik/wiki/TextSymbolizer

如果您需要另一个示例样式文件来测试,也许这个 osm.xml 可以帮助: https ://trac.openstreetmap.org/browser/subversion/applications/rendering/mapnik/osm.xml?order=name

于 2013-08-22T09:01:04.167 回答