多边形¶
多边形是包含外缘(或“笔划”)和内缘(或“填充”)的二维形状。多边形可以被认为是一个不规则形状的点,其样式与点类似。
警告
本页所示的代码示例为 不是完整的SLD代码 ,因为为了简洁起见,它们省略了SLD的页眉和页脚信息。请使用链接下载每个示例的完整SLD。
多边形层示例¶
这个 polygons layer
下面使用的是一个虚构国家的县信息。作为参考,下面包含了多边形的属性表。
fid (功能ID) |
name (县名) |
pop (人口) |
polygon.1 |
反讽县 |
412234 |
polygon.2 |
跟踪县 |
235421 |
polygon.3 |
德古拉县 |
135022 |
polygon.4 |
保利县 |
1567879 |
polygon.5 |
轴承县 |
201989 |
polygon.6 |
基督山县 |
152734 |
polygon.7 |
大县 |
67123 |
polygon.8 |
伦布县 |
198029 |
简单多边形¶
此示例显示一个用蓝色填充的多边形。
代码¶
View and download the full "Simple polygon" SLD
1 <FeatureTypeStyle>
2 <Rule>
3 <PolygonSymbolizer>
4 <Fill>
5 <CssParameter name="fill">#000080</CssParameter>
6 </Fill>
7 </PolygonSymbolizer>
8 </Rule>
9 </FeatureTypeStyle>
细节¶
有一个 <Rule>
在一个 <FeatureTypeStyle>
对于这种样式,这是最简单的可能情况。(除非另有规定,否则所有后续示例都将共享此特性。)造型多边形通过 <PolygonSymbolizer>
( lines 3-7 ) 第5行 指定深蓝色 (#000080
)作为多边形的填充颜色。
备注
图中多边形周围的浅色边界是由相邻的多边形引起的渲染器的伪影。这种样式没有边框。
带笔划的简单多边形¶
此示例将2像素的白色笔画添加到 简单多边形 例子。
代码¶
View and download the full "Simple polygon with stroke" SLD
1 <FeatureTypeStyle>
2 <Rule>
3 <PolygonSymbolizer>
4 <Fill>
5 <CssParameter name="fill">#000080</CssParameter>
6 </Fill>
7 <Stroke>
8 <CssParameter name="stroke">#FFFFFF</CssParameter>
9 <CssParameter name="stroke-width">2</CssParameter>
10 </Stroke>
11 </PolygonSymbolizer>
12 </Rule>
13 </FeatureTypeStyle>
细节¶
此示例与 简单多边形 上面的例子,加上 <Stroke>
标签(标签) lines 7-10 ) 第8行 将笔划颜色设置为白色 (#FFFFFF
) 第9行 将笔划的宽度设置为2像素。
透明多边形¶
此示例基于 带笔划的简单多边形 示例并通过将不透明度设置为50%使填充部分透明。
代码¶
View and download the full "Transparent polygon" SLD
1 <FeatureTypeStyle>
2 <Rule>
3 <PolygonSymbolizer>
4 <Fill>
5 <CssParameter name="fill">#000080</CssParameter>
6 <CssParameter name="fill-opacity">0.5</CssParameter>
7 </Fill>
8 <Stroke>
9 <CssParameter name="stroke">#FFFFFF</CssParameter>
10 <CssParameter name="stroke-width">2</CssParameter>
11 </Stroke>
12 </PolygonSymbolizer>
13 </Rule>
14 </FeatureTypeStyle>
细节¶
此示例与 带笔划的简单多边形 示例,保存以定义填充的不透明度 第6行 .0.5的值会导致部分透明的填充,即50%不透明。不透明度值为1将填充绘制为100%不透明,而不透明度值为0将导致完全透明(0%不透明)填充。在本例中,由于背景是白色,所以深蓝色看起来更亮。如果将这些点设置在深色背景上,则生成的颜色将更暗。
偏移内部线条¶
演示如何在多边形内绘制内部缓冲线。
代码¶
View and download the full "Inner offset lines" SLD
1 <FeatureTypeStyle>
2 <Rule>
3 <PolygonSymbolizer>
4 <Stroke>
5 <CssParameter name="stroke">#000000</CssParameter>
6 <CssParameter name="stroke-width">2</CssParameter>
7 </Stroke>
8 </PolygonSymbolizer>
9 <LineSymbolizer>
10 <Stroke>
11 <CssParameter name="stroke">#AAAAAA</CssParameter>
12 <CssParameter name="stroke-width">3</CssParameter>
13 </Stroke>
14 <PerpendicularOffset>-2</PerpendicularOffset>
15 </LineSymbolizer>
16 </Rule>
17 </FeatureTypeStyle>
细节¶
此示例与 带笔划的简单多边形 示例,保存以定义添加 <LineSymbolizer>>
在 第9行 ,其中浅灰色( 第11行 )3像素宽( 第12行 )线条作为多边形内部的内部缓冲区绘制。 第14行 控制缓冲距离,将内部缓冲设置为2个像素。
图形填充¶
此示例使用瓦片图形填充多边形。
代码¶
View and download the full "Graphic fill" SLD
1 <FeatureTypeStyle>
2 <Rule>
3 <PolygonSymbolizer>
4 <Fill>
5 <GraphicFill>
6 <Graphic>
7 <ExternalGraphic>
8 <OnlineResource
9 xlink:type="simple"
10 xlink:href="colorblocks.png" />
11 <Format>image/png</Format>
12 </ExternalGraphic>
13 <Size>93</Size>
14 </Graphic>
15 </GraphicFill>
16 </Fill>
17 </PolygonSymbolizer>
18 </Rule>
19 </FeatureTypeStyle>
细节¶
此样式用瓦片图形填充多边形。这被称为 <ExternalGraphic>
在SLD中,将其与渲染器“内部”的常用形状(如正方形和圆形)区分开来。 Lines 7-12 指定图形的详细信息,使用 第10行 设置图形的路径和文件名 第11行 指示图形的文件格式(mime类型) (image/png
)。尽管可以根据需要指定完整的URL,但在 第11行 因为这个图形和SLD包含在同一个目录中。 第13行 确定以像素为单位显示的图形的高度;如果该值与图形的高度不同,则在保持纵横比的同时将相应地缩放该值。
填充图案填充¶
此示例使用图案填充图案填充多边形。
备注
这个例子利用了geoserver中的SLD扩展。图案填充不属于标准SLD 1.0规范的一部分。
代码¶
View and download the full "Hatching fill" SLD
1 <FeatureTypeStyle>
2 <Rule>
3 <PolygonSymbolizer>
4 <Fill>
5 <GraphicFill>
6 <Graphic>
7 <Mark>
8 <WellKnownName>shape://times</WellKnownName>
9 <Stroke>
10 <CssParameter name="stroke">#990099</CssParameter>
11 <CssParameter name="stroke-width">1</CssParameter>
12 </Stroke>
13 </Mark>
14 <Size>16</Size>
15 </Graphic>
16 </GraphicFill>
17 </Fill>
18 </PolygonSymbolizer>
19 </Rule>
20 </FeatureTypeStyle>
细节¶
在这个例子中,有一个 <GraphicFill>
标记为 图形填充 示例,但是 <Mark>
( lines 7-13 )使用而不是 <ExternalGraphic>
. 第8行 指定在整个多边形中瓦片一个“时间”符号(“X”)。 Line 10 将颜色设置为紫色 (#990099
) 第11行 将图案填充的宽度设置为1像素,以及 第14行 将瓦片的大小设置为16像素。因为图案填充瓦片总是方形的, <Size>
设置宽度和高度。
带默认标签的多边形¶
此示例显示多边形上的文本标签。在没有任何其他自定义的情况下,这就是标签的显示方式。
代码¶
View and download the full "Polygon with default label" SLD
1 <FeatureTypeStyle>
2 <Rule>
3 <PolygonSymbolizer>
4 <Fill>
5 <CssParameter name="fill">#40FF40</CssParameter>
6 </Fill>
7 <Stroke>
8 <CssParameter name="stroke">#FFFFFF</CssParameter>
9 <CssParameter name="stroke-width">2</CssParameter>
10 </Stroke>
11 </PolygonSymbolizer>
12 <TextSymbolizer>
13 <Label>
14 <ogc:PropertyName>name</ogc:PropertyName>
15 </Label>
16 </TextSymbolizer>
17 </Rule>
18 </FeatureTypeStyle>
细节¶
在这个例子中有一个 <PolygonSymbolizer>
和A <TextSymbolizer>
. Lines 3-11 包括 <PolygonSymbolizer>
.多边形的填充设置为 第5行 变成浅绿色 (#40FF40
)当多边形的笔划设置为 lines 8-9 变白 (#FFFFFF
)厚度为2像素。标签设置在 <TextSymbolizer>
在 lines 12-16 用 第14行 确定要显示的文本,在本例中是“name”属性的值。(请参阅中的属性表 多边形层示例 如有必要,请参见节。)有关标签的所有其他详细信息都设置为渲染器默认值,这里是Times New Roman字体、字体颜色黑色和字体大小为10像素。
标签光环¶
这个例子改变了 带默认标签的多边形 在标签上添加白色光晕。
代码¶
View and download the full "Label halo" SLD
1 <FeatureTypeStyle>
2 <Rule>
3 <PolygonSymbolizer>
4 <Fill>
5 <CssParameter name="fill">#40FF40</CssParameter>
6 </Fill>
7 <Stroke>
8 <CssParameter name="stroke">#FFFFFF</CssParameter>
9 <CssParameter name="stroke-width">2</CssParameter>
10 </Stroke>
11 </PolygonSymbolizer>
12 <TextSymbolizer>
13 <Label>
14 <ogc:PropertyName>name</ogc:PropertyName>
15 </Label>
16 <Halo>
17 <Radius>3</Radius>
18 <Fill>
19 <CssParameter name="fill">#FFFFFF</CssParameter>
20 </Fill>
21 </Halo>
22 </TextSymbolizer>
23 </Rule>
24 </FeatureTypeStyle>
细节¶
此示例与 带默认标签的多边形 ,在标签周围添加光环 lines 16-21 .光环在标签周围创建颜色缓冲区,以提高标签的易读性。 第17行 设置光晕的半径,围绕标签边缘扩展光晕3个像素,以及 第19行 将光晕的颜色设置为白色 (#FFFFFF
)。由于当设置为相对于文本颜色的鲜明对比度时,光晕最有用,因此本示例在黑色文本周围使用白色光晕以确保最佳可读性。
带样式标签的多边形¶
此示例改进了 带默认标签的多边形 示例:将标签置于多边形的中心,指定不同的字体名称和大小,并设置其他标签放置优化。
备注
下面讨论的标签放置优化 <VendorOption>
标签)是对geoserver自定义的SLD扩展。它们不是SLD 1.0规范的一部分。
代码¶
View and download the full "Polygon with styled label" SLD
1 <FeatureTypeStyle>
2 <Rule>
3 <PolygonSymbolizer>
4 <Fill>
5 <CssParameter name="fill">#40FF40</CssParameter>
6 </Fill>
7 <Stroke>
8 <CssParameter name="stroke">#FFFFFF</CssParameter>
9 <CssParameter name="stroke-width">2</CssParameter>
10 </Stroke>
11 </PolygonSymbolizer>
12 <TextSymbolizer>
13 <Label>
14 <ogc:PropertyName>name</ogc:PropertyName>
15 </Label>
16 <Font>
17 <CssParameter name="font-family">Arial</CssParameter>
18 <CssParameter name="font-size">11</CssParameter>
19 <CssParameter name="font-style">normal</CssParameter>
20 <CssParameter name="font-weight">bold</CssParameter>
21 </Font>
22 <LabelPlacement>
23 <PointPlacement>
24 <AnchorPoint>
25 <AnchorPointX>0.5</AnchorPointX>
26 <AnchorPointY>0.5</AnchorPointY>
27 </AnchorPoint>
28 </PointPlacement>
29 </LabelPlacement>
30 <Fill>
31 <CssParameter name="fill">#000000</CssParameter>
32 </Fill>
33 <VendorOption name="autoWrap">60</VendorOption>
34 <VendorOption name="maxDisplacement">150</VendorOption>
35 </TextSymbolizer>
36 </Rule>
37 </FeatureTypeStyle>
细节¶
此示例与 带默认标签的多边形 例如,在 <TextSymbolizer>
在线 12-35 . Lines 16-21 设置字体样式。 第17行 将字体系列设置为Arial, 第18行 将字体大小设置为11像素, 第19行 将字体样式设置为“普通”(与“斜体”或“斜体”相反),以及 第20行 将字体粗细设置为“粗体”(而不是“普通”)。
这个 <LabelPlacement>
标记 lines 22-29 影响相对于多边形质心放置标签的位置。 第21行 通过沿多边形的质心水平放置标签50%(或0.5),使标签居中。 第22行 以完全相同的方式垂直居中标签。
最后,还有两个附加的标签放置优化: 第33行 通过将标签上的换行设置为60像素,确保长标签跨多行拆分,以及 第34行 允许标签最多替换150像素。这样可以确保标签被压缩,并且不太可能溢出多边形边界。注意角落里有一个巨大的小县,它的标签现在已经显示出来了。”
基于属性的多边形¶
此示例根据“pop”(population)属性对多边形进行不同的样式设置。
代码¶
View and download the full "Attribute-based polygon" SLD
1 <FeatureTypeStyle>
2 <Rule>
3 <Name>SmallPop</Name>
4 <Title>Less Than 200,000</Title>
5 <ogc:Filter>
6 <ogc:PropertyIsLessThan>
7 <ogc:PropertyName>pop</ogc:PropertyName>
8 <ogc:Literal>200000</ogc:Literal>
9 </ogc:PropertyIsLessThan>
10 </ogc:Filter>
11 <PolygonSymbolizer>
12 <Fill>
13 <CssParameter name="fill">#66FF66</CssParameter>
14 </Fill>
15 </PolygonSymbolizer>
16 </Rule>
17 <Rule>
18 <Name>MediumPop</Name>
19 <Title>200,000 to 500,000</Title>
20 <ogc:Filter>
21 <ogc:And>
22 <ogc:PropertyIsGreaterThanOrEqualTo>
23 <ogc:PropertyName>pop</ogc:PropertyName>
24 <ogc:Literal>200000</ogc:Literal>
25 </ogc:PropertyIsGreaterThanOrEqualTo>
26 <ogc:PropertyIsLessThan>
27 <ogc:PropertyName>pop</ogc:PropertyName>
28 <ogc:Literal>500000</ogc:Literal>
29 </ogc:PropertyIsLessThan>
30 </ogc:And>
31 </ogc:Filter>
32 <PolygonSymbolizer>
33 <Fill>
34 <CssParameter name="fill">#33CC33</CssParameter>
35 </Fill>
36 </PolygonSymbolizer>
37 </Rule>
38 <Rule>
39 <Name>LargePop</Name>
40 <Title>Greater Than 500,000</Title>
41 <ogc:Filter>
42 <ogc:PropertyIsGreaterThan>
43 <ogc:PropertyName>pop</ogc:PropertyName>
44 <ogc:Literal>500000</ogc:Literal>
45 </ogc:PropertyIsGreaterThan>
46 </ogc:Filter>
47 <PolygonSymbolizer>
48 <Fill>
49 <CssParameter name="fill">#009900</CssParameter>
50 </Fill>
51 </PolygonSymbolizer>
52 </Rule>
53 </FeatureTypeStyle>
细节¶
我们虚构国家中的每个多边形都有一个人口,由人口(“pop”)属性表示。此样式包含三个规则,根据“pop”属性的值更改填充,较小的值生成较浅的颜色,较大的值生成较深的颜色。
三条规则设计如下:
规则顺序 |
规则名称 |
人口 (pop) |
Color |
1 |
SmallPop |
20万以下 |
|
2 |
MediumPop |
200000至500000 |
|
3 |
LargePop |
大于500000 |
|
在这种情况下,规则的顺序并不重要,因为每个形状仅由单个规则呈现。
第一条规则,关于 lines 2-16 ,指定填充属性小于200000的多边形的样式。 Lines 5-10 设置此筛选器,使用 lines 6-9 设置“小于”过滤器, 第7行 表示属性(“pop”),以及 第8行 价值20万。多边形填充的颜色设置为浅绿色。 (#66FF66
)打开 第13行 .
第二条规则 lines 17-37 ,类似,为人口属性大于或等于200000但小于500000的多边形指定样式。过滤器已开启 lines 20-31 .此筛选器比第一个规则中的筛选器长,因为需要指定两个条件而不是一个:“大于或等于”和“小于”筛选器。注意 And
在 第21行 和 第30行 .这要求两个过滤器都必须为真,规则才能适用。多边形填充的颜色设置为中绿色 (#33CC33
)打开 第34行 .
第三条规则 lines 38-52 ,指定填充属性大于或等于500000的多边形的样式。过滤器已开启 lines 41-46 .多边形填充的颜色是该规则中唯一的其他差异,它设置为深绿色。 (#009900
)打开 第49行 .
基于缩放的多边形¶
此示例在不同缩放级别更改多边形的样式。
代码¶
View and download the full "Zoom-based polygon" SLD
1 <FeatureTypeStyle>
2 <Rule>
3 <Name>Large</Name>
4 <MaxScaleDenominator>100000000</MaxScaleDenominator>
5 <PolygonSymbolizer>
6 <Fill>
7 <CssParameter name="fill">#0000CC</CssParameter>
8 </Fill>
9 <Stroke>
10 <CssParameter name="stroke">#000000</CssParameter>
11 <CssParameter name="stroke-width">7</CssParameter>
12 </Stroke>
13 </PolygonSymbolizer>
14 <TextSymbolizer>
15 <Label>
16 <ogc:PropertyName>name</ogc:PropertyName>
17 </Label>
18 <Font>
19 <CssParameter name="font-family">Arial</CssParameter>
20 <CssParameter name="font-size">14</CssParameter>
21 <CssParameter name="font-style">normal</CssParameter>
22 <CssParameter name="font-weight">bold</CssParameter>
23 </Font>
24 <LabelPlacement>
25 <PointPlacement>
26 <AnchorPoint>
27 <AnchorPointX>0.5</AnchorPointX>
28 <AnchorPointY>0.5</AnchorPointY>
29 </AnchorPoint>
30 </PointPlacement>
31 </LabelPlacement>
32 <Fill>
33 <CssParameter name="fill">#FFFFFF</CssParameter>
34 </Fill>
35 </TextSymbolizer>
36 </Rule>
37 <Rule>
38 <Name>Medium</Name>
39 <MinScaleDenominator>100000000</MinScaleDenominator>
40 <MaxScaleDenominator>200000000</MaxScaleDenominator>
41 <PolygonSymbolizer>
42 <Fill>
43 <CssParameter name="fill">#0000CC</CssParameter>
44 </Fill>
45 <Stroke>
46 <CssParameter name="stroke">#000000</CssParameter>
47 <CssParameter name="stroke-width">4</CssParameter>
48 </Stroke>
49 </PolygonSymbolizer>
50 </Rule>
51 <Rule>
52 <Name>Small</Name>
53 <MinScaleDenominator>200000000</MinScaleDenominator>
54 <PolygonSymbolizer>
55 <Fill>
56 <CssParameter name="fill">#0000CC</CssParameter>
57 </Fill>
58 <Stroke>
59 <CssParameter name="stroke">#000000</CssParameter>
60 <CssParameter name="stroke-width">1</CssParameter>
61 </Stroke>
62 </PolygonSymbolizer>
63 </Rule>
64 </FeatureTypeStyle>
细节¶
在创建自然外观的地图时,通常需要在更高的缩放级别上使形状更大。此示例根据缩放级别更改线条的厚度。多边形本质上是二维的,但根据缩放级别调整多边形样式的另一种方法是调整笔划的厚度(随着地图的放大而变大),或者将标签限制为特定的缩放级别。这可以确保笔划和标签的大小和数量保持清晰,并且不会使多边形本身蒙上阴影。
缩放级别(或更准确地说,缩放分母)是指地图的比例。比例尺分母为10000表示地图的比例尺为1:10000,以地图投影的单位表示。
备注
确定要使用的适当比例分母(缩放级别)超出了本例的范围。
此样式包含三个规则,定义如下:
规则顺序 |
规则名称 |
比例分母 |
笔画宽度 |
标签显示? |
1 |
大 |
1:100000000或以下 |
7 |
是的 |
2 |
培养基 |
1:100000000至1:200000000 |
4 |
不 |
3 |
小的 |
大于1:200000000 |
2 |
不 |
第一条规则,关于 lines 2-36 ,表示最小比例分母,对应于视图“放大”的时间。比例规则设置为 第40行 这样规则只适用于比例分母小于等于100000000的情况。 第7行 将填充定义为蓝色 (#0000CC
)。请注意,无论比例分母是什么,填充在所有规则中都保持不变。就像在 带默认标签的多边形 或 带样式标签的多边形 例如,规则还包含 <TextSymbolizer>
在 lines 14-35 用于在多边形顶部绘制文本标签。 Lines 19-22 将字体信息设置为Arial、14像素和粗体,不带斜体。通过设置,标签沿多边形的质心水平和垂直居中。 <AnchorPointX>
和 <AnchorPointY>
均为0.5(或50%),在 lines 27-28 .最后,字体的颜色设置为白色。 (#FFFFFF
在 第33行 .
第二条规则 lines 37-50 ,表示中间刻度分母,对应于视图“部分缩放”的时间。比例规则在 lines 39-40 设置规则,使其适用于比例尺分母在100000000到200000000之间的任何地图。(以下简称 <MinScaleDenominator>
具有包容性, <MaxScaleDenominator>
是独占的,因此精确到200000000的缩放级别将 not 在这里应用。)除比例外,此规则与第一个规则有两个不同之处:在 第47行 和A <TextSymbolizer>
不存在,因此不会显示任何标签。
第三条规则 lines 51-63 ,表示最大比例分母,对应于地图“缩小”的时间。比例规则设置为 第53行 使该规则适用于比例尺分母为200000000或更大的任何地图。同样,此规则与其他规则之间的唯一区别是线条的宽度,在 第60行 以及 <TextSymbolizer>
这样就不会显示任何标签。
生成的样式生成一个多边形笔划,当放大时该笔划会变大,只有放大到足够的级别时才会显示标签。