>>> from env_helper import info; info()
页面更新时间: 2022-12-28 08:26:20
运行环境:
Linux发行版本: Debian GNU/Linux 11 (bullseye)
操作系统内核: Linux-5.10.0-20-amd64-x86_64-with-glibc2.31
Python版本: 3.9.2
8.6. 绘制多边形¶
绘制多边形有两个symbolizer绘制线条,也有两个symbolizers绘制多边形的内部:PolygonSymbolizer
和 PolygonPatternSymbolizer
。
现在让我们来了解一下这两个symbolizers:
8.6.1. PolygonSymbolizer的基本属性设置¶
用一种单一的颜色填充一个 PolygonSymbolizer 多边形的内部。
常用属性
你可以用下面的方式创建一个 PolygonSymbolizer :
>>> import mapnik
>>> symbolizer = mapnik.PolygonSymbolizer()
让我们来看一下如何控制绘制多边形的各种选项。
在默认情况下,一个 PolygonSymbolizer 可以把多边形的内部绘制为灰色。 要想改变填充多边形的内部颜色,需要将 PolygonSymbolizer’s fill属性设置为想要的 Mapnik 颜色对象:
>>> symbolizer.fill = mapnik.Color("red")
在默认情况下,多边形将是完全不透明的。 你可以通过设置PolygonSymbolizer的
opacity
属性表来改变这种状况:
透明度的范围是0.0(完全透明)到1.0(完全透明)。在前面的图中,左边图形的透明度为0.5。
>>> symbolizer.fill_opacity = 0.5
伽玛校正是一个不隐晦的概念,而且有时也是非常有用的。 如果你绘制两个恰好是以相同的颜色相交的多边形,你能在两个多边形之间看到一条线,正如下图所示: 这是因为Mapnik的多边形边缘抗重叠的方式。 如果你想要这些在相邻多边形之间的线消失,你可以添加一个伽玛校正系数:
>>> symbolizer.gamma = 0.63
这样会导致两个多边形以同一个方式出现。
使用0.5到0.7的伽玛值大致会移除两个相邻多边形的重叠线。 默认的值为1.0,则意味着将不适用于任何的伽玛校正。
8.6.2. PolygonPatternSymbolizer的用法¶
使用 PolygonPatternSymbolizer 提供的图像文件填充多边形的内部:
图像将被平铺,也就是说反复绘制以填补整个多边形的内部。
因为图块的右侧将会出现与相邻的图块左侧相接,图块的底部将会直接出现在下面的图块上面(反之亦然),
当以这种方式绘制时,你需要选择一个看起来比较合适的图像。 使用
PolygonPatternSymbolizer
是比较简单的,就如同
LinePatternSymbolizer
一样。
你创建一个新的实例,然后给他一个图像文件的名称,文件的格式(PNG 或者
TIFF)和图像的宽度和高度:
>>> import os
>>> import mapnik
>>>
>>> stylesheet = '/gdata/world_map_poly.xml'
>>> image = 'xx_world_style_from_xml.png'
>>> m = mapnik.Map(600, 300)
>>> mapnik.load_map(m, stylesheet)
>>> m.zoom_all()
>>> m.background = mapnik.Color('steelblue')
>>>
>>> bbox = mapnik.Box2d(118, 36.6, 124.6, 40.7)
>>> bbox = mapnik.Box2d(70, 20, 135, 57)
>>> m.zoom_to_box(bbox)
>>>
>>> mapnik.render_to_file(m,'xx_map_poly2.png', 'png')
---------------------------------------------------------------------------
RuntimeError Traceback (most recent call last)
<ipython-input-6-06630233498a> in <module>
5 image = 'xx_world_style_from_xml.png'
6 m = mapnik.Map(600, 300)
----> 7 mapnik.load_map(m, stylesheet)
8 m.zoom_all()
9 m.background = mapnik.Color('steelblue')
RuntimeError: file could not be found: '/gdata/sy1.png' in style 'My Style' in PolygonPatternSymbolizer at line 6 of '/gdata/world_map_poly.xml'