筛选器语法

筛选器限制受规则属性影响的功能集。简单过滤器有几种类型,可以组合起来为规则提供更复杂的过滤器。

组合过滤器

组合是以通常的CSS方式完成的。两个过滤器之间用逗号分隔的规则会影响任何匹配的功能 任何一个 筛选,而只有空白分隔的两个筛选的规则只影响匹配的功能 both 过滤器。下面是一个使用基本属性过滤器的示例(如下所述):

/* Matches places where the lake is flooding */
[rainfall>12] [lakes>1] {
    fill: black;
}

/* Matches wet places */
[rainfall>12], [lakes>1] {
    fill: blue;
}

在编写同时使用这两种方法的选择器时 andor 组合器,记住 and 组合器具有更高的优先级。例如::

restricted [cat='2'], [cat='3'], [cat='4'] [@sd <= 200k] [@sd > 100k] {
  fill: #EE0000;
}

上述选择器应为:

  • typename is 'restricted' and cat='2' or

  • cat='3' or

  • cat='4' 规模在10万到20万之间

如果目的是合并使用三个cat过滤器,那么正确的语法应该是:

restricted [cat='2' or cat='3' or cat='4'] [@sd <= 200k] [@sd > 100k] {
  fill: #EE0000;
}

应理解为:

  • 类型名为“受限” and

  • (cat='2'cat='3'cat='4'and

  • 规模在10万到20万之间

过滤数据属性

属性筛选器匹配数据的某些属性(例如,数据库表中的列)。这可能是最常见的过滤器类型。属性过滤器采用属性名和数据值的形式,由某些谓词运算符(如小于运算符)分隔 <

支持的谓词运算符包括:

算符

意义

=

属性必须精确 equal 到指定的值。

<>

属性不能完全等于指定的值。

>

属性必须大于(或按字母顺序晚于)指定的值。

>=

属性必须大于或等于指定的值。

<

属性必须小于(或按字母顺序早于)指定的值。

<=

属性必须小于或等于指定的值。

LIKE

属性必须与指定值描述的模式匹配。模式使用 _ 表示单个未指定的字符和 % 以指示未知数量的未指定字符。

例如,要仅为名称以字母开头的州呈现字母表前半部分的大纲,规则如下:

[STATE_NAME<='M'] {
    stroke: black;
}

备注

属性过滤器的当前实现使用ECQL语法,如 GeoTools documentation .

筛选类型

当处理来自多个源的数据时,提供仅影响其中一个源的规则可能会很有用。这非常简单;只需将层的名称指定为过滤器:

states {
    stroke: black;
}

按ID筛选

对于提供功能级别标识符的层,您可以通过指定ID来设置特定功能的样式。这可以通过用哈希符号预先固定ID来实现。 (# ):

#states.2 {
    stroke: black;
}

备注

在CSS中, . 元素ID中不允许有字符;并且 #states.foo 选择器将元素与ID匹配 states 只有当它也有班级的时候 foo .由于这种形式的标识符在地理服务器层中出现的频率很高,因此CSS模块在这方面与标准CSS略有不同。未来的修订可能会使用某种形式的咀嚼来避免这种偏差。

通过渲染上下文过滤(比例)

通常,地图的某些方面应该根据查看地图的上下文进行更改。例如,在州级别查看时,路线图可能会省略住宅道路,但会在邻里级别突出显示它们。比例级别等详细信息显示为伪属性;它们看起来像属性筛选器,但属性名称以 @ 符号::

[roadtype = 'Residential'][@sd > 100k] {
    stroke: black;
}

提供的上下文详细信息如下:

伪属性

意义

@标准偏差

当前渲染的比例分母。更明确地说,这是实际距离与屏幕/渲染距离的比率。

@比例

与上面相同,当前渲染的比例分母(不是比例)。支持向后兼容性

刻度值可以用普通数字表示,为了简洁易读,可以使用后缀k(kilo)、m(mega)、g(giga),例如:

[@sd > 100k]
[@sd < 12M]
[@sd < 1G]

备注

虽然属性过滤器(当前)使用更复杂的ECQL语法,但伪属性不能使用复杂表达式,必须采用<property><operator><literal>的形式。

过滤符号

当使用符号以内联方式创建图形时,您可能需要对它们应用一些样式设置选项。您可以使用一些特殊的选择器为内置符号指定样式属性:

PseudoSelector

意义

:mark

指定规则应用于用作点标记的符号

:stroke

指定规则应用于用作笔划模式的符号

:fill

指定规则应用于用作填充图案的符号

:symbol

指定规则应用于任何符号,而不管它在哪个上下文中使用

:nth-mark(n)

指定规则应用于要素上用于第n个堆叠点标记的符号。

:nth-stroke(n)

指定规则应用于特征上用于第n个堆叠笔划图案的符号。

:nth-fill(n)

指定规则应用于要素上用于第n个堆积填充图案的符号。

:nth-symbol(n)

指定规则应用于要素上第n个堆叠符号所用的符号,而不管该符号在哪个上下文中使用。

有关使用这些选择器的更多讨论,请参阅 样式化标记 .

全局规则

有时,有一个与所有功能匹配的规则很有用,例如,为地图提供一些默认样式(记住,默认情况下不渲染任何内容)。这是用一个星号完成的。 * 代替常规过滤器。此“全部捕获”规则可用于复杂表达式,如果希望规则为某些功能提供默认值和重写值,则此规则可能很有用:

* {
    stroke: black;
}