>>> from env_helper import info; info()
页面更新时间: 2024-07-23 22:54:43
运行环境:
Linux发行版本: Debian GNU/Linux 12 (bookworm)
操作系统内核: Linux-6.1.0-23-amd64-x86_64-with-glibc2.36
Python版本: 3.11.2
9.6. 绘制多边形¶
绘制多边形有两个symbolizer绘制线条,也有两个symbolizers绘制多边形的内部:PolygonSymbolizer
和 PolygonPatternSymbolizer
。
现在让我们来了解一下这两个symbolizers:
9.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,则意味着将不适用于任何的伽玛校正。
9.6.2. 多边形Pattern Symbolizer的用法¶
使用 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')
Mapnik LOG> 2024-07-23 22:54:45: Unable to process some data while parsing '/gdata/world_map_poly.xml':
* attribute 'height' with value '6' at line 6
* attribute 'type' with value 'png' at line 6
* attribute 'width' with value '6' at line 6
>>> !cat /gdata/world_map_poly.xml
<Map background-color="#efefef" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
<Style name="My Style">
<Rule>
<PolygonSymbolizer fill="#ffffff"/>
<LineSymbolizer stroke="rgb(50%,50%,50%)" stroke-width="1" stroke-dasharray="8,20"/>
<PolygonPatternSymbolizer width="6" height="6" type="png" file="tri.png" />
</Rule>
</Style>
<Layer name="world" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
<StyleName>My Style</StyleName>
<Datasource>
<Parameter name="type">shape</Parameter>
<Parameter name="file">/gdata/GSHHS_c.shp</Parameter>
</Datasource>
</Layer>
</Map>