结构

下面是一个包含单个特征样式内单个规则的ysld样式的简单示例:

name: style_example
title: An example of YSLD styling
abstract: Used in the User Manual of GeoServer
feature-styles:
- rules:
  - name: all
    title: Every feature will be styled this way
    symbolizers:
    - polygon:
        fill-color: '#808080'
        fill-opacity: 0.5
        stroke-color: '#000000'
        stroke-opacity: 0.75

这将使用给定的RGB颜色代码(填充为中灰色,轮廓为黑色)为给定层中的每个多边形特征设置样式,填充和笔画的给定阴影均以小数表示百分比(因此0.5是50%不透明)。

备注

有关语法的详细信息,请参阅 symbolizers .

典型的ysld文件结构如下:

结构

描述

Variable definitions

用于常用样式设置

Scale grid / zoom levels

用于基于瓦片集缩放级别定义样式

style header

文档名称、标题和摘要,后跟要素样式

../../../_images/structure_header.svg

feature style

可以包含一个或多个规则的独立块。

../../../_images/structure_feature_style.svg

rule

可以包含一个或多个的指令 symbolizers .

../../../_images/structure_rule_all.svg

filter

规则“包括”所有功能,除非通过使用 filter .

../../../_images/structure_rule.svg

symbolizers

包含单个功能的实际可视化说明的样式的基本单位。

结构ysld文件使用缩进概述。

../../../_images/structure_example.svg

ysld样式的结构示例

属性语法

ysld样式文档中的单个语句(或指令)设计为以下形式的键值或属性值对:

<property>: <value>

这个 <property> 是表示属性名的字符串,而 <value> 可以是多种不同类型中的一种,具体取决于上下文。这些不同的类型需要稍微不同的标记,如下表所示:

类型

句法

例子

笔记

整数

仅限值

12

也允许使用引号

浮标

仅限值

0.75

也允许使用引号

文本

引用

Title

允许使用空格、冒号和其他特殊字符。如果值不明确,请使用单引号。

颜色

  • '+六位数'(十六进制)

  • RGB(R,G,B)(十进制)

  • 文本(命名颜色)

  • '#FF00FF'

  • rgb(255,0,255)

  • fuchsia

用于指定RGB颜色。对于十六进制,使用 '#RRGGBB' 每个两个字符对的值来自 00FF .对于十进制,请使用 rgb(rrr,ggg,bbb) 每个坐标的值来自 0255 .使用时不需要引号 named colors .

元组

括号

[0,15000]

使用两个单引号表示元组中的空白条目(例如: ['#FFFFFF',0,0,'']

Filter 或其他表达式

$<表达式>

${type = road}

如果属性名不明确,请用括号括起来(例如: ${{[type] = road}} )。如果值不明确,请使用单引号 (${{type = 'road'}}

表达

在整个参考指南中,都有对以下值的引用: <expression> . 安 表达 是一个灵活的术语,意思是值可以是下列对象之一:

  • 文字(标量或字符串)

  • 属性名

  • Function

如果使用函数,它的计算结果必须与属性预期的类型匹配。

映射和列表

备注

下面的讨论摘自基本的yaml语法。请参阅 YAML specification 如有必要。

YSLD文档中有三种类型的对象:

  1. 标量 ,一个简单值

  2. 映射 ,键值(属性值)对的集合

  3. List ,任何对象集合。列表可以包含映射、标量,甚至其他列表。

列表要求每个条目都有破折号,而映射则不需要。 .

例如,a symbolizer 块是一个列表,因此每个条目都需要自己的破折号:

- symbolizer:
  - polygon:
      ...
  - text:
      ...

这个 point:text: 对象(单个符号本身)是映射,因此内容不需要短划线,只需要缩进:

- polygon:
    stroke-color: '#808080'
    fill-color: '#FF0000'

旁边的破折号 polygon 表示项本身包含在列表中,而不是包含列表。和 破折号的位置与列表标题的缩进级别相同。

有时,对象应该是列表(并使用破折号)还是映射(而不是使用破折号)并不明显,因此如果不确定,请参阅此表:

对象

类型

Feature style

Rule

Symbolizer

个别符号(内容)

映射

Transform

映射

颜色表(用于栅格符号)

缩进

压痕在YSLD中非常重要。所有指令都必须缩进到适当的位置,以确保正确的层次结构。 不正确的缩进将导致样式呈现不正确,或者根本不正确。

例如,多边形符号,因为它是一个映射,所以在它内部包含一些参数,例如填充和笔划的颜色。这些必须缩进,使它们“在”多边形块内。

在本例中,以下标记是 对的 ::

- polygon:
    fill-color: '#808080'
    fill-opacity: 0.5
    stroke-color: black
    stroke-opacity: 0.75

多边形(符号)内的参数是缩进的,这意味着它们引用的是符号,而不是“在它外面”。

与以下内容比较 不正确的 标记:

- polygon:
  fill-color: '#808080'
  fill-opacity: 0.5
  stroke-color: black
  stroke-opacity: 0.75

这里与多边形块相关的参数需要包含在该块中。如果不缩进参数,则它们与多边形块处于同一“级别”,因此无法正确解释。

备注

有关符号语法的详细信息,请参阅 symbolizers .

换行

长行可以通过缩进文本块中的每个后续行来换行。新行字符将转换为空格,因此每行不应以空格结尾。

所以在一个有长值的情况下:

- name: shortname
  title: Longer name
  abstract: This is a really long abstract that in no way is ever likely to fit on a single line on most people's displays.

可以将其更改为:

- name: shortname
  title: Longer name
  abstract: This is a really long abstract that in no way
            is ever likely to fit on a single line on most
            people's displays.

在这两种情况下, abstract 没有变化。

换行也可以在属性和值之间进行。所以这一行:

stroke-width: ${roadwidth / 500}

可以修改为:

stroke-width:
  ${roadwidth / 500}

使用换行的唯一约束是后续行需要缩进。

评论

在ysld中允许使用注释,这是出于描述性原因,并且可以删除某些样式指令而不直接删除它们。注释由a表示 # 作为行中第一个非空白字符。例如::

# This is a line symbolizer
- line:
    stroke-color: '#000000'
    stroke-width: 2
#   stroke-width: 3

上面将显示宽度为 2 ;显示宽度为 3 被注释掉。

注释块不存在,因此注释的每一行都需要这样指示::

- line:
    stroke-color: '#000000'
    stroke-width: 2
#- line:
#    stroke-color: '#FF0000'
#    stroke-width: 3

备注

转换为SLD时不保留注释。

Previous: YSLD参考