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,则意味着将不适用于任何的伽玛校正。
import os
import mapnik
stylesheet = '/data/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( -108, 26.6, -134.6, 50.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> 2025-03-31 06:24:42: Unable to process some data while parsing '/data/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
from IPython.display import Image
Image('xx_map_poly2.png')
!cat /data/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="sy1.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">/data/gdata/GSHHS_c.shp</Parameter> </Datasource> </Layer> </Map>