geoserver——CQL函数

CQL函数

CQL函数支持在映射文件中指定数据转换和条件行为。其中一些功能由app-schema插件专门为此目的提供。

 

重新编码

这与if_then_else函数类似,只是没有default子句。您必须为每个词汇表键指定翻译值。

语法

重新编码(COLUMN_NAME , key1 , value1 , key2 , value2 ,... 
  • COLUMN_NAME:要从中获取值的列名称

示例

< AttributeMapping > 
  < targetAttribute > GML :名称</ targetAttribute > 
  < sourceExpression > 
    <OCQL>Vocab(ABBREVIATION, strconcat('${config.parent}', '/mapping.properties'))</OCQL>
  </ sourceExpression > 
</AttributeMapping >

上面的示例将gml:name值映射到urn:cgi:classifier:CGI:SimpleLithology:2008:gravel如果ABBREVIATION列值为1GRAV

分类

这更适用于数字键,其中翻译值由键在阈值内的位置确定。

语法

分类(COLUMN_NAME , DEFAULT_VALUE , 阈 1 , 值 1 , 阈 2 , 值 2 ... , [ 前述/ 后续])
  • COLUMN_NAME:数据源列名称
  • default_value:如果COLUMN_NAME值不在阈值范围内,则映射的默认值
  • threshold(n):阈值
  • value(n):满足阈值时要映射的值
  • 前/后

    • 如果未指定,则默认使用可选,成功。
    • 不区分大小写。
    • before:如果COLUMN_NAME值>阈值,则值在阈值内
    • 成功:如果COLUMN_NAME值> =阈值,则值在阈值内

示例

< AttributeMapping > 
  < targetAttribute > gml :description </ targetAttribute > 
  < sourceExpression > 
      < OCQL > Categorize (CGI_LOWER_RANGE , 'missing_value' 1000 'minor' 5000 'significant' </ OCQL > 
  </ sourceExpression > 
</ AttributeMapping >

以上示例表示gml:如果CGI_LOWER_RANGE列值> = 5000,描述值将是重要的

词汇

此功能对于更大的词汇对更有用。您可以将它们保存在单独的属性文件中,而不是在函数中编写长键 – 值对。属性文件用作函数的查找表。它没有标题,只包含“<key> = <value>”格式的对。

语法

Vocab (COLUMN_NAME , 属性 文件)
  • COLUMN_NAME:要从中获取值的列名称
  • 属性文件属性文件的绝对路径

例:

属性文件:

1 GRAV = urn :cgi :分类器:CGI :SimpleLithology :2008 :gravel 
1 TILL = urn :cgi :分类器:CGI :SimpleLithology :2008 :diamictite 
6 ALLU = urn :cgi :分类器:CGI :SimpleLithology :2008 :沉积物

映射文件:

< AttributeMapping > 
  < targetAttribute > GML :名称</ targetAttribute > 
  < sourceExpression > 
      < OCQL > 翻译(ABBREVIATION , strconcat ('$ {config.parent} ' '/mapping.properties' ))</ OCQL > 
  </ sourceExpression > 
</ AttributeMapping >

上面的例子将gml:name映射到urn:cgi:classifier:CGI:SimpleLithology:2008:gravel如果ABBREVIATION值是1GRAV

此示例使用config.parent预定义插值属性在与映射文件相同的目录中指定词汇表属性文件。有关详细信息,请参见属性插值

几何创建

toDirectPosition 

此函数将double值转换为DirectPosition几何类型。当数据存储没有几何类型列时,需要这样做。此功能需要:

文字

'SRS_NAME' (可选的)

表达

SRS名称的表达式if 'SRS_NAME'作为第一个参数出现

表达

指向第一个double值的列的名称

表达

指向第二个double值的列的名称(可选,仅用于2D)

ToEnvelope 

ToEnvelope函数可以接受以下参数集并返回为Envelope或者ReferencedEnvelope输入:

选项1(1D信封)

ToEnvelope (疯丫头,MAXX )

选项2(带有crsname的1D信封)

ToEnvelope (疯丫头,MAXX ,crsname )

选项3(2D信封)

ToEnvelope (疯丫头,MAXX ,MINY ,MAXY )

选项4(带有crsname的2D信封)

ToEnvelope (疯丫头,MAXX ,MINY ,MAXY ,crsname )

尖山

此函数将double值转换为2D Point几何类型。当数据存储没有几何类型列时,需要这样做。此功能需要:

文字

'SRS_NAME' (可选的)

表达

SRS名称的表达式if 'SRS_NAME'作为第一个参数出现

表达

指向第一个double值的列的名称

表达

指向第二个double值的列的名称

表达

表达式gml:id(可选)

toLineString 

此函数将double值转换为1D LineString几何类型。这需要用定制(非EPSG)CRS表示1D钻孔间隔。

文字

'SRS_NAME' (EPSG代码或自定义SRS)

表达

指向第一个double值的列的名称

表达

指向第二个double值的列的名称

参考

toXlinkHref 

此函数将要编码的属性重定向为xlink:href,而不是编码为完整属性。这在多态中很有用,其中当编码是有条件的时,不能使用静态客户端属性。此功能需要:

表达

REFERENCE_VALUE(可能是另一个函数或文字)

日期/时间格式

FormatDateTimezone 

Java支持时区中使用SimpleDateFormat模式格式化日期/时间的函数。此功能改进了,它在服务器时区中格式化日期/时间并可能产生意外结果。请注意,术语“日期”是从Java类名称派生的; 这个类代表一个日期/时间,而不仅仅是一天。dateFormat

语法

FormatDateTimezone (模式, 日期, 时区)

模式

例如,SimpleDateFormat支持的格式化模式'yyyy-MM-dd'。例如,使用两个单引号在CQL字符串文字中包含文字单引号'yyyy-MM-dd''T''HH:mm:ss''Z'''

日期

例如,要格式化的日期/时间或其字符串表示'1948-01-01T00:00:00Z'。如果日期格式错误(而不是null),则会返回异常。建议使用带有时区信息的数据库类型。

时区

例如,'UTC'或Java支持的时区的名称'Canada/Mountain'。请注意,无法识别的时区将无声地转换为UTC。

如果任何参数为null,则此函数返回null。

此示例POSITION以UTC 格式的列格式化日期/时间,以包含在csml:TimeSeries

< AttributeMapping > 
    < targetAttribute > csml :timePositionList </ targetAttribute > 
    < sourceExpression > 
        < OCQL > FormatDateTimezone ('yyyy-MM-dd''T''HH:mm:ss''Z''' , POSITION , 'UTC' </ OCQL > 
    </ sourceExpression > 
    < isList > true </ isList > 
</ AttributeMapping >

转载自:https://blog.csdn.net/qq_36178899/article/details/81351897

You may also like...