目录

上一个主题

5.1. 了解样式化层描述符

下一个主题

5.3. 线状符号


5.2. 使用点符号

我们将从点要素的样式开始探索。 人口稠密的地方shapefile非常适合我们的目的。 如果您添加了默认值, 您应该看到它以红色小方块呈现,如以下屏幕截图所示:

image

图 5.3 image

要修改地图,需要添加新样式并将其与图层关联。对于设置点符号特性, 必须使用 <PointSymbolizer> 元素及其子元素。

5.2.1. 行动时间–创建简单的点样式

为了使您熟悉SLD文件的创建,我们将编写一个简单的样式, 用于使用应用于所有点特征的红色小圆圈:

1.打开您喜爱的文本编辑器。如前所述, 我们将认为您已经插入了XML声明和 StyledLayerDescriptor 部分代码。 所以开始插入 NamedLayer 元素。然后添加 Name 元素, 并在其中写入所需的层名称:

<NamedLayer>
    <Name>PopulatedPlaces</Name>
</NamedLayer>

2.现在您需要为层定义至少一种样式。 我们使用 Title 要为样式指定描述性名称的元素:

<NamedLayer>
    <Name> PopulatedPlaces </Name>
    <UserStyle>
        <Title>Geoserver Beginners Guide: Populated Places simple mark
        </Title>
    </UserStyle>
</NamedLayer>

3.要应用样式的数据是点,因此是矢量数据。 你需要插入 FeatureTypeStyle 元素和 a Rule 对于一个 PointSymbolizer 作为点数据样式的元素:

<NamedLayer>
    <Name> PopulatedPlaces </Name>
    <UserStyle>
    <Title>Geoserver Beginners Guide: Populated Places simple mark</Title>
    <FeatureTypeStyle>
        <Rule>
            <PointSymbolizer>
            </PointSymbolizer>
        </Rule>
    </FeatureTypeStyle>
    </UserStyle>
</NamedLayer>

4.你现在已经成为我们风格的核心。要添加的元素定义用于绘制点特征的符号。 使用预定义的图形 WellKnownName 元素(选项包括圆、正方形、三角形、星形、十字和x)。 一个 Fill 元素使用 CssParameter 元素。颜色采用#RRGGBB的形式。 最后,定义圆应该与 Size 元素:

<NamedLayer>
    <Name> PopulatedPlaces </Name>
    <UserStyle>
    <Title>Geoserver Beginners Guide: Populated Places simple mark</Title>
    <FeatureTypeStyle>
    <Rule>
        <PointSymbolizer>
            <Graphic>
            <Mark>
                <WellKnownName>circle</WellKnownName>
                <Fill>
                    <CssParameter name="fill">#FF0000</CssParameter>
                </Fill>
            </Mark>
            <Size>5</Size>
            </Graphic>
        </PointSymbolizer>
    </Rule>
    </FeatureTypeStyle>
    </UserStyle>
</NamedLayer>

5.现在将文档另存为 PopulatedPlaces.xml 并在GeoServer中打开样式编辑器。

6.选择 Add a new style 链接打开编辑器表单:

image126

图 5.4 image126

7.点击 Browse 按钮,转到包含文件的文件夹并选择它。

8.点击 Upload 链接到 Browse 按钮; 您的文件将加载到编辑器窗体中。

9.点击 Validate 检查你是否拼错了什么。 当它没有返回错误时,单击 提交 按钮。

10.现在去 Data 层 部分并单击 ne_50m_populated_places 打开图层的属性窗体。 切换到 publishing tab:

image127

图 5.5 image127

11.转到“样式”部分,并将“ PopulatedPlaces”设置为“默认样式”。 点击“保存”按钮:

image128

图 5.6 image128

12转到“图层预览”部分,并打开“ PopulatedPlaces”图层的OpenLayers预览。 现在,您的地图应如下图所示:

image129

图 5.7 image129

发生了什么事?

我们为一个简单的点符号创建了一个新样式,并将其指定为图层的默认样式。 我们刚刚开始创建自定义地图,您可以在其中决定绘制的方式和内容。

5.2.2. 动作时间–添加笔划值

现在,我们将通过更改形状和添加笔划值来继续探索点符号:

1.使用 PopulatedPlaces.xml 复制一份, 并命名为 PopulatedPlacesStroke.xml . 在文本编辑器中编辑新文件:

2.转到第9行并替换 Name 具有以下内容的元素:

<Name>PopulatedPlacesStroke</Name>

3.转到第11行并替换 Title 具有以下内容的元素:

<Title>Geoserver Beginners Guide: Populated Places square mark with stroke</Title>

4.现在我们将更改用于表示地图上的点的形状形式。 转到第17行并替换 WellKnownName 具有以下内容的元素:

<WellKnownName>square</WellKnownName>

5.若要向形状添加笔划,必须添加 脑卒中 元素位于 Fill 元素。 在 CssParameter 元素设置笔划的颜色和宽度:

<Stroke>
    <CssParameter name="stroke">#000000</CssParameter>
    <CssParameter name="stroke-width">1</CssParameter>
</Stroke>

6.现在保存您的文档并将其上载到GeoServer中的样式编辑器。

7.点击 Validate 检查你是否拼错了什么。当它没有返回错误时, 单击 Submit 按钮。

8.现在去 Data|layers 部分并单击 ne_50m_populated_places 打开图层的属性窗体。 切换到 Publishing 标签。

9.转到 style 部分,然后将 PopulatedPlacesStroke 添加到 Selected Styles 列表中。 点击 保存

image130

图 5.8 image130

10.打开“图层预览”地图。 您的地图仍在显示简单标记, 确实,您没有更改默认样式。单击地图左上角的按钮以显示选项工具栏:

image131

图 5.9 image131

11.从 风格 下拉列表,选择 PopulatedPlacesStrokes . 您的地图将突然更新为新的点符号。如果缩放到北美,应如以下屏幕截图所示:

image132

图 5.10 image132

刚刚发生了什么?

我们通过添加笔划修改了一个简单的样式。 您还了解到,一个图层可能与多个样式关联, 您可以决定使用哪个样式来渲染贴图。

5.2.3. 行动时间-处理角度和透明度

当表示点标记时,可以将旋转角度添加到有意义的形状。也可以设置“不透明度”, 使填充、笔划或两者或多或少透明。让我们创建一个新样式来尝试这些功能:

1.拿着 PopulatedPlacesStrokes.xml 归档,复制一份, 并命名为 PopulatedRotateTransparent.xml . 在文本编辑器中编辑新文件。

2.转到第9行并替换 Name 具有以下内容的元素:

<Name>PopulatedRotateTransparent</Name>

3.转到第11行并替换 书名 具有以下内容的元素:

<Title>Geoserver Beginners Guide: Populated Places rotated mark with transparency</Title>

4.现在我们将更改marker的大小。 转到第26行并替换 Size 具有以下内容的元素:

<Size>9</Size>

5.要旋转标记,请在 Size 设置角度的元素 45 度:

<Rotation>45</Rotation>

6.After the CssParameter element’s fill color setting, add the following line to set transparency:

<CssParameter name="fill-opacity">0.35</CssParameter>

7.保存文档并将其上载到GeoServer中的样式编辑器。

8.点击 验证 检查你是否拼错了什么。 当它没有返回错误时,单击 提交 按钮。

9.现在去 Data层 部分并单击 ne_50m_populated_places 打开图层属性窗体。 切换到 发布 标签。

10.Go to the Style section and add PopulatedRotateTransparent to the Selected Styles list. Click on Save.

11.Open the Layer Preview map, and change the style used to PopulatedRotateTransparent 就像你在上一节所做的那样。

地图现在显示了带有透明填充的旋转方形标记。

image133

图 5.11 image133

刚刚发生了什么?

您学习了如何设置标记的旋转角度和设置透明度。 一步一步地,你会发现SLD是多么的灵活,你可以从非常简单的形状中创建多少不同的符号。 你想知道你能不能把它们混合起来?你可以,我们跳到下一节。

5.2.4. 行动时间-组成简单的形状

你知道你可以指定 WellKnownName 作为一个标记, 但如果你需要更复杂的东西, 你总是可以合并两个或更多的基本形状来创建一个新的标记。 在以下步骤中,您将了解如何执行此操作:

1.拿着 PopulatedPlacesStrokes.xml 归档、 复制并命名为 PopulatedPlacesComplex.xml . 在文本编辑器中编辑新文件。

2.转到第9行并替换 Name 具有以下内容的元素:

<Name>PopulatedPlacesComplex</Name>

3.转到第11行并替换 书名 具有以下内容的元素:

<Title>Geoserver Beginners Guide: mark composed of three basic shapes</Title>

4.现在我们将更改方形标记的大小。 转到第26行并替换 Size 具有以下内容的元素:

<Size>10</Size>

5.要组合复杂标记,需要像在一堆中一样添加其他标记。 请记住,GeoServer将按相反的顺序绘制标记; 因此,您在规则中插入的第一个标记将位于地图中其他标记的底部。 我们想要一个带有黑色笔划的绿色圆圈,其中包含方形标记。 插入新的 PointSymbolizerRule 第13行元素:

<PointSymbolizer>
    <Graphic>
        <Mark>
        <WellKnownName>circle</WellKnownName>
        <Fill>
            <CssParameter name="fill">#00FF00</CssParameter>
        </Fill>
        <Stroke>
            <CssParameter name="stroke">#000000</CssParameter>
            <CssParameter name="stroke-width">1</CssParameter>
        </Stroke>
    </Mark>
    <Size>16</Size>
    </Graphic>
</PointSymbolizer>

6.现在我们想在正方形里面有一个黑色的小圆圈。 在 PointSymbolizer 元素,在第43行, 添加一个新的 PointSymbolizer 章节:

<PointSymbolizer>
    <Graphic>
        <Mark>
            <WellKnownName>circle</WellKnownName>
            <Fill>
            <CssParameter name="fill">#000000</CssParameter>
            </Fill>
        </Mark>
        <Size>5</Size>
    </Graphic>
</PointSymbolizer>

7.保存文档并将其上载到GeoServer中的样式编辑器中。

8.点击 validate 检查你是否拼错了什么。 当它没有返回错误时,单击 提交 按钮。

9.现在去 Data|layers 部分并单击 ne_50m_populated_places 打开图层属性窗体。 切换到 publishing 标签。

10.转到 Style 部分,然后将 PopulatedPlacesComplex 添加到 Selected Styles 列表中。 单击 保存 按钮。

11.打开“图层预览”地图,然后从下拉列表中选择 PopulatedPlacesComplex 样式。 该符号很大,因此您可能需要稍微缩小一下才能看到它而不会重叠。 image134

刚刚发生了什么?

我们创建了一个合并三个基本标记的复杂符号。玩弄尺寸、颜色和位置, 你可能会想到很多这种技术的可能性。但最终你会发现一些很难用记号笔模仿的东西。 那么你怎么办?是时候使用外部图形了。继续下一节。

5.2.5. 行动时间-使用外部图形

当合并标记、设置颜色和透明度无法帮助您实现所需的符号时,是时候使用外部图形了。 外部图形是包含复杂图像的矢量或栅格文件。 支持的格式是您在web应用程序(如PNG、JPG和SVG)中使用的常用图形文件。 资源由URL引用,因此可以将其存储在GeoServer中 data 文件夹, 如本例中所示,或从联机资源获取:

1.拿着 town.svg 将源代码中的文件复制到 /data/styles 文件夹。

2.拿着 PopulatedPlacesStrokes.xml 归档、 复制并命名为 PopulatedPlacesGraphics.xml . 在文本编辑器中编辑新文件。

3.转到第9行并替换 Name 具有以下内容的元素:

<Name>PopulatedPlacesGraphic</Name>

4.转到第11行并替换 书名 具有以下内容的元素:

<Title>Geoserver Beginners Guide: Populated Places with external graphics</Title>

5.移除 Mark 分段(从第16行到第25行)并插入 ExternalGraphic 元素:

<ExternalGraphic> <OnlineResource xlink:type="simple" xlink:href="town.svg" />
<Format>image/svg+xml</Format>
</ExternalGraphic>

6.将大小更改为 20

<Size>20</Size>

7.保存文档并将其上载到GeoServer中的样式编辑器。

8.点击 Validate 检查你是否拼错了什么。 当它没有返回错误时,单击 提交 按钮。

9.现在去 Data | layers 部分并单击 ne_50m_populated_places 打开图层属性窗体。 切换到 Publishing 标签。

10.转到 Style 部分,然后将 PopulatedPlacesGraphic 添加到 Selected Styles 列表中。 点击 保存

11.打开“图层预览”地图,然后从下拉列表中选择 PopulatedPlacesGraphic 样式。 如上一节中所述,符号很大。 稍微放大地球上一个人口稠密的区域,您的地图将如下图所示:

image135

图 5.12 image135

刚刚发生了什么?

我们用一个小矢量文件在地图上添加一个复杂的符号。 使用外部图形将打开您的地图到无限多种符号。 你可以自己绘制或在网上搜索资源文件,当然要注意版权。

在探索SLD提供的渲染点特征之后,您就可以跳到线特征了。 在我们继续之前,值得停下来复习一下你通过几项测试学到的东西。

小测验-造型要点

问题1。有办法修改基点符号吗?

1.不,您只能使用外部资源。

2.是的,但仅与绘图特性有关,例如颜色、大小和倾斜。

3.是的,您可以插入代码来重塑基本标记。

问题2。你能在一条规则里有不止一个符号吗?

1.不,你可能只有一个 PointSymbolizer 每个规则的元素

2.是的,例如,您可以合并两个 PointSymbolizer 组成符号的元素

3.是,但仅当您添加查询以筛选每个 PointSymbolizer

试一试-组成你的象征

你喜欢在地图上添加外部图形的可能性吗?你可以自己作曲。 创建/修改图形文件的一个伟大的开源工具是 Inkscape . 它可以在Linux和Windows的二进制软件包中使用,并且它有一套处理矢量图形的优秀工具。 您可以将创建的内容保存在SVG中,SVG是W3C针对矢量图形的基于XML的规范。 你准备好发挥你的创造力了吗?那就去 http://inkscape.org/ 试试看。