【1】点样式

361 阅读12分钟

1.简单点

将点的样式设置为直径为 6 像素的红色圆圈

image.png

 1    <FeatureTypeStyle>
 2      <Rule>
 3        <PointSymbolizer>
 4          <Graphic>
 5            <Mark>
 6              <WellKnownName>circle</WellKnownName>
 7              <Fill>
 8                <CssParameter name="fill">#FF0000</CssParameter>
 9              </Fill>
10            </Mark>
11            <Size>6</Size>
12          </Graphic>
13        </PointSymbolizer>
14      </Rule>
15    </FeatureTypeStyle>

。样式点通过(第 6-8 行)完成。第 6 行将符号的形状指定为圆形,第 11 行将填充颜色确定为红色 ()。第 <> 行将图形的大小(直径)设置为 <> 像素。<Rule>``<FeatureTypeStyle>``<Rule>``<FeatureTypeStyle>``<PointSymbolizer>``#FF0000

2.描边的简单点

本示例在简单点周围添加一个描边(或边框),描边涂成黑色,粗细为 2 像素。

image.png

1    <FeatureTypeStyle>
 2      <Rule>
 3        <PointSymbolizer>
 4          <Graphic>
 5            <Mark>
 6              <WellKnownName>circle</WellKnownName>
 7              <Fill>
 8                <CssParameter name="fill">#FF0000</CssParameter>
 9              </Fill>
10              <Stroke>
11                <CssParameter name="stroke">#000000</CssParameter>
12                <CssParameter name="stroke-width">2</CssParameter>
13              </Stroke>
14            </Mark>
15            <Size>6</Size>
16          </Graphic>
17        </PointSymbolizer>
18      </Rule>
19    </FeatureTypeStyle>

第 10-13 行指定描边,第 11 行将颜色设置为黑色 (),第 12 行将宽度设置为 2 像素。#000000

3.透明三角形

本示例绘制一个三角形,创建与“带描边的简单点示例相同的黑色描边,并将三角形的填充设置为不透明度的 20%(大部分是透明的)。

image.png

1    <FeatureTypeStyle>
 2      <Rule>
 3        <PointSymbolizer>
 4          <Graphic>
 5            <Mark>
 6              <WellKnownName>triangle</WellKnownName>
 7              <Fill>
 8                <CssParameter name="fill">#009900</CssParameter>
 9                <CssParameter name="fill-opacity">0.2</CssParameter>
10              </Fill>
11              <Stroke>
12                <CssParameter name="stroke">#000000</CssParameter>
13                <CssParameter name="stroke-width">2</CssParameter>
14              </Stroke>
15            </Mark>
16            <Size>12</Size>
17          </Graphic>
18        </PointSymbolizer>
19      </Rule>
20    </FeatureTypeStyle>

第 6 行再次将形状 三角形 设置。第 8 行将填充颜色设置为深绿色 (),第 9 行将不透明度设置为 0.2(20% 不透明度)。不透明度值 1 表示绘制的形状 100% 不透明,而不透明度值 0 表示绘制的形状不透明度为 0% 或完全透明。值 0.2(20% 不透明)表示点的填充部分采用其下方绘制的任何颜色和样式。在此示例中,由于背景为白色,因此深绿色看起来更亮。如果将点强加在深色背景上,则生成的颜色会更暗。第 12-13 行将描边颜色设置为黑色 (),宽度设置为 2 像素。最后,第 16 行将点的大小设置为直径为 12 像素。#009900``#000000

点为图形

本示例将每个点的样式设置为图形,而不是简单形状。

../../../_images/point_pointasgraphic.png

点为图形

法典

View and download the full "Point as graphic" SLD

 1    <FeatureTypeStyle>
 2      <Rule>
 3        <PointSymbolizer>
 4          <Graphic>
 5            <ExternalGraphic>
 6              <OnlineResource
 7                xlink:type="simple"
 8                xlink:href="smileyface.png" />
 9              <Format>image/png</Format>
10            </ExternalGraphic>
11            <Size>32</Size>
12          </Graphic>
13        </PointSymbolizer>
14      </Rule>
15    </FeatureTypeStyle>

此样式使用图形而不是简单形状来呈现点。在 SLD 中,这称为 ,以将其与渲染器“内部”常用的形状(如正方形和圆形)区分开来。第 5-10 行指定此图形的详细信息。第 8 行设置图形的路径和文件名,而第 9 行指示图形的格式(MIME 类型)(图像/png)。在此示例中,图形包含在与 SLD 相同的目录中,因此第 8 行中不需要路径信息,尽管如果需要,可以使用完整的 URL。第 11 行确定所显示图形的大小;这可以独立于图形本身的尺寸进行设置,尽管在这种情况下它们是相同的(32 像素)。如果图形为矩形,则该值将仅应用于图形的高度, 宽度按比例缩放。<ExternalGraphic>``<Size>

../../../_images/笑脸.png

用于点的图形

带有默认标签的点

本示例显示“简单”点上的文本标签,该标签显示该点的“name”属性。这是在没有任何其他自定义的情况下标签的显示方式。

../../../_images/point_pointwithdefaultlabel.png

带有默认标签的点

法典

View and download the full "Point with default label" SLD

 1    <FeatureTypeStyle>
 2      <Rule>
 3        <PointSymbolizer>
 4          <Graphic>
 5            <Mark>
 6              <WellKnownName>circle</WellKnownName>
 7              <Fill>
 8                <CssParameter name="fill">#FF0000</CssParameter>
 9              </Fill>
10            </Mark>
11            <Size>6</Size>
12          </Graphic>
13        </PointSymbolizer>
14        <TextSymbolizer>
15          <Label>
16            <ogc:PropertyName>name</ogc:PropertyName>
17          </Label>
18          <Fill>
19            <CssParameter name="fill">#000000</CssParameter>
20          </Fill>
21        </TextSymbolizer>
22      </Rule>
23    </FeatureTypeStyle>

包含 的第 3-13 行与上面的简单点示例相同。标签设置在第 14-27 行中。第 15-17 行确定要在标签中显示的文本,在本例中为“name”属性的值。(如有必要,请参阅示例点图层部分中的属性表。第 19 行设置文本颜色。有关标签的所有其他详细信息都设置为渲染器默认值,此处为Times New Roman字体,字体颜色为黑色,字体大小为10像素。标签的左下角与点的中心对齐。<PointSymbolizer>``<TextSymbolizer>

带有样式标签的点

本示例改进了“带默认标签的点”示例的标签样式,方法是将标签居中置于点上方,并提供不同的字体名称和大小。

../../../_images/point_pointwithstyledlabel.png

带有样式标签的点

法典

View and download the full "Point with styled label" SLD

 1    <FeatureTypeStyle>
 2      <Rule>
 3        <PointSymbolizer>
 4          <Graphic>
 5            <Mark>
 6              <WellKnownName>circle</WellKnownName>
 7              <Fill>
 8                <CssParameter name="fill">#FF0000</CssParameter>
 9              </Fill>
10            </Mark>
11            <Size>6</Size>
12          </Graphic>
13        </PointSymbolizer>
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">12</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.0</AnchorPointY>
29              </AnchorPoint>
30              <Displacement>
31                <DisplacementX>0</DisplacementX>
32                <DisplacementY>5</DisplacementY>
33              </Displacement>
34            </PointPlacement>
35          </LabelPlacement>
36          <Fill>
37            <CssParameter name="fill">#000000</CssParameter>
38          </Fill>
39        </TextSymbolizer>
40      </Rule>
41    </FeatureTypeStyle>

在此示例中,第 3-13 行与上面的简单点示例相同。第 14-39 行包含的有关标签样式的更多详细信息,而不是上一个示例“具有默认标签的点”。第 15-17 行再次将“name”属性指定为要显示的文本。第 18-23 行设置字体信息:第 19 行将字体系列设置为“Arial”,第 20 行将字体大小设置为 12,第 21 行将字体样式设置为“正常”(而不是“斜体”或“倾斜”),第 22 将字体粗细设置为“粗体****”(而不是“正常”)。第 24-35 行 () 确定标签相对于点的位置。(第 26-29 行)设置标签和点之间的交点,此处(第 27-28 行)将点设置为水平轴居中 (0.5) 和底部与标签垂直对齐 (0.0)。还有(第 30-33 行),它设置标签相对于线条的偏移量,在本例中,水平方向为 0 像素(第 31 行),垂直方向为 5 像素(第 32 行)。最后,第 37 行将标签的字体颜色设置为黑色 ()。<TextSymbolizer>``<LabelPlacement>``<AnchorPoint>``<Displacement>``#000000

结果是放置在每个点上方的居中粗体标签。

带有旋转标签的点

本示例以上一个示例“带样式标签的点”为基础,将标签旋转 45 度,将标签定位到远离点的位置,并将标签的颜色更改为紫色。

../../../_images/point_pointwithrotatedlabel.png

带有旋转标签的点

法典

View and download the full "Point with rotated label" SLD

 1    <FeatureTypeStyle>
 2      <Rule>
 3        <PointSymbolizer>
 4          <Graphic>
 5            <Mark>
 6              <WellKnownName>circle</WellKnownName>
 7              <Fill>
 8                <CssParameter name="fill">#FF0000</CssParameter>
 9              </Fill>
10            </Mark>
11            <Size>6</Size>
12          </Graphic>
13        </PointSymbolizer>
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">12</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.0</AnchorPointY>
29              </AnchorPoint>
30              <Displacement>
31                <DisplacementX>0</DisplacementX>
32                <DisplacementY>25</DisplacementY>
33              </Displacement>
34              <Rotation>-45</Rotation>
35            </PointPlacement>
36          </LabelPlacement>
37          <Fill>
38            <CssParameter name="fill">#990099</CssParameter>
39          </Fill>
40        </TextSymbolizer>
41      </Rule>
42    </FeatureTypeStyle>

此示例类似于带有样式标签的点,但存在三个重要区别。第 32 行指定 25 像素的垂直位移。第 34 行指定逆时针旋转“-45”或 45 度。(旋转值顺时针增加,这就是该值为负的原因。最后,第 38 行将字体颜色设置为紫色阴影 ()。#99099

请注意,在渲染期间,置换在旋转之前生效,因此在此示例中,25 像素的垂直置换本身旋转了 45 度。

基于属性的点

本示例根据人口 (“pop”) 属性的值更改符号的大小。

../../../_images/point_attributebasedpoint.png

基于属性的点

法典

View and download the full "Attribute-based point" SLD

 1    <FeatureTypeStyle>
 2      <Rule>
 3        <Name>SmallPop</Name>
 4        <Title>1 to 50000</Title>
 5        <ogc:Filter>
 6          <ogc:PropertyIsLessThan>
 7            <ogc:PropertyName>pop</ogc:PropertyName>
 8            <ogc:Literal>50000</ogc:Literal>
 9          </ogc:PropertyIsLessThan>
10        </ogc:Filter>
11        <PointSymbolizer>
12          <Graphic>
13            <Mark>
14              <WellKnownName>circle</WellKnownName>
15              <Fill>
16                <CssParameter name="fill">#0033CC</CssParameter>
17              </Fill>
18            </Mark>
19            <Size>8</Size>
20          </Graphic>
21        </PointSymbolizer>
22      </Rule>
23      <Rule>
24        <Name>MediumPop</Name>
25        <Title>50000 to 100000</Title>
26        <ogc:Filter>
27          <ogc:And>
28            <ogc:PropertyIsGreaterThanOrEqualTo>
29              <ogc:PropertyName>pop</ogc:PropertyName>
30              <ogc:Literal>50000</ogc:Literal>
31            </ogc:PropertyIsGreaterThanOrEqualTo>
32            <ogc:PropertyIsLessThan>
33              <ogc:PropertyName>pop</ogc:PropertyName>
34              <ogc:Literal>100000</ogc:Literal>
35            </ogc:PropertyIsLessThan>
36          </ogc:And>
37        </ogc:Filter>
38        <PointSymbolizer>
39          <Graphic>
40            <Mark>
41              <WellKnownName>circle</WellKnownName>
42              <Fill>
43                <CssParameter name="fill">#0033CC</CssParameter>
44              </Fill>
45            </Mark>
46            <Size>12</Size>
47          </Graphic>
48        </PointSymbolizer>
49      </Rule>
50      <Rule>
51        <Name>LargePop</Name>
52        <Title>Greater than 100000</Title>
53        <ogc:Filter>
54          <ogc:PropertyIsGreaterThanOrEqualTo>
55            <ogc:PropertyName>pop</ogc:PropertyName>
56            <ogc:Literal>100000</ogc:Literal>
57          </ogc:PropertyIsGreaterThanOrEqualTo>
58        </ogc:Filter>
59        <PointSymbolizer>
60          <Graphic>
61            <Mark>
62              <WellKnownName>circle</WellKnownName>
63              <Fill>
64                <CssParameter name="fill">#0033CC</CssParameter>
65              </Fill>
66            </Mark>
67            <Size>16</Size>
68          </Graphic>
69        </PointSymbolizer>
70      </Rule>
71    </FeatureTypeStyle>

注意

 

请参阅示例点图层以查看此数据的属性。此示例避免了标签以简化样式,但您可以参考示例带样式标签的点以查看哪些属性对应于哪些点。

此样式包含三个规则。每个点都会根据每个点的人口值 (“pop”) 属性来改变样式,值越小,圆圈越大,圆圈越大。<Rule>

这三条规则的设计如下:

规则顺序规则名称人口(“人口”)大小
1小流行音乐少于 50,0008
2中流行50,000 至 100,00012
3大流行音乐大于 100,00016

在这种情况下,规则的顺序无关紧要,因为每个形状仅由单个规则呈现。

第一条规则位于第 2-22 行,用于指定人口属性小于 50,000 的点的样式。第 5-10 行设置此筛选器,第 6-9 行设置“小于”筛选器,第 7 行表示属性(“pop”),第 8 行设置值 50,000。符号为圆形(第 14 行),颜色为深蓝色(第 16 行),大小为直径 8 像素( 19 行)。****#0033CC

第二条规则位于第 23-49 行,用于指定人口属性大于或等于 50,000 且小于 100,000 的点的样式。人口过滤器设置在第 26-37 行。此筛选器比第一个规则中的筛选器长,因为需要指定两个条件而不是一个:“大于或等于”筛选器和“小于”筛选器。请注意第 27 行和第 36 行。这要求两个筛选器都必须为 true 才能应用规则。图形的大小在第 12 行设置为 46 像素。所有其他样式指令都与第一条规则相同。And

第三条规则位于第 50-70 行,用于指定人口属性大于或等于 100,000 的点的样式。人口过滤器设置在第 53-58 行,唯一的其他区别是圆的大小,在此规则(第 67 行)中为 16 像素。

这种风格的结果是人口较多的城市具有更大的点。

基于缩放的点

本示例更改不同缩放级别的点样式。

../../../_images/point_zoombasedpointlarge.png

基于缩放的点:放大

../../../_images/point_zoombasedpointmedium.png

基于缩放的点:部分缩放

../../../_images/point_zoombasedpointsmall.png

基于缩放的点:缩小

法典

View and download the full "Zoom-based point" SLD

 1    <FeatureTypeStyle>
 2      <Rule>
 3        <Name>Large</Name>
 4        <MaxScaleDenominator>160000000</MaxScaleDenominator>
 5        <PointSymbolizer>
 6          <Graphic>
 7            <Mark>
 8              <WellKnownName>circle</WellKnownName>
 9              <Fill>
10                <CssParameter name="fill">#CC3300</CssParameter>
11              </Fill>
12            </Mark>
13            <Size>12</Size>
14          </Graphic>
15        </PointSymbolizer>
16      </Rule>
17      <Rule>
18        <Name>Medium</Name>
19        <MinScaleDenominator>160000000</MinScaleDenominator>
20        <MaxScaleDenominator>320000000</MaxScaleDenominator>
21        <PointSymbolizer>
22          <Graphic>
23            <Mark>
24              <WellKnownName>circle</WellKnownName>
25              <Fill>
26                <CssParameter name="fill">#CC3300</CssParameter>
27              </Fill>
28            </Mark>
29            <Size>8</Size>
30          </Graphic>
31        </PointSymbolizer>
32      </Rule>
33      <Rule>
34        <Name>Small</Name>
35        <MinScaleDenominator>320000000</MinScaleDenominator>
36        <PointSymbolizer>
37          <Graphic>
38            <Mark>
39              <WellKnownName>circle</WellKnownName>
40              <Fill>
41                <CssParameter name="fill">#CC3300</CssParameter>
42              </Fill>
43            </Mark>
44            <Size>4</Size>
45          </Graphic>
46        </PointSymbolizer>
47      </Rule>
48    </FeatureTypeStyle>

创建外观自然的地图时,通常需要在较高的缩放级别下使形状变大。本示例设置点的样式,使其大小根据缩放级别(或更准确地说,比例分母)而变化。比例分母是指地图的比例。比例分母为 10,000 表示地图的比例为 1:10,000(以地图投影为单位)。

注意

 

确定要使用的适当比例分母(缩放级别)超出了此示例的范围。

此样式包含三个规则。这三条规则的设计如下:

规则顺序规则名称刻度分母点大小
11:160,000,000以下12
2中等1:160,000,000 至 1:320,000,0008
3大于 1:320,000,0004

这些规则的顺序无关紧要,因为每个规则中计价的刻度不重叠。

第一条规则(第 2-16 行)适用于最小比例分母,对应于视图“放大”的时间。比例规则设置在第 4 行,因此该规则将应用于比例分母为 160,000,000 或更小的任何地图。该规则绘制一个圆(第 8 行),颜色为红色(第 10 行),大小为 12 像素(第 13 行)。****#CC3300

第二条规则(第 17-32 行)是中间比例分母,对应于视图“部分缩放”的时间。比例规则设置在第 19-20 行,因此该规则将应用于比例分母介于 160,000,000 和 320,000,000 之间的任何地图。(包含和排除,因此正好 320,000,000 的缩放级别在这里适用。除了比例之外,此规则与第一个规则之间的唯一区别是符号的大小,在第 8 行设置为 29 像素。<MinScaleDenominator>``<MaxScaleDenominator>

第三条规则(第 33-47 行)是最大比例分母,对应于地图“缩小”的时间。比例规则设置在第 35 行,因此该规则将应用于比例分母为 320,000,000 或更大的任何地图。同样,此规则与其他规则之间的唯一其他区别是符号的大小,在第 4 行设置为 44 像素。

这种样式的结果是,点在放大时绘制得更大,在缩小时绘制得更小。

原链接地址:地理服务器 2.22.x 用户手册 (geoserver.org)