geoserver——CQL函数
目录
CQL函数
CQL函数支持在映射文件中指定数据转换和条件行为。其中一些功能由app-schema插件专门为此目的提供。
-
uDig手册包含一系列CQL函数:
-
例如,CQL字符串文字用单引号括起来
'urn:ogc:def:nil:OGC:missing'
。 -
单引号在CQL字符串文字中表示为两个单引号,就像在SQL中一样。例如,
'yyyy-MM-dd''T''HH:mm:ss''Z'''
对于字符串yyyy-MM-dd'T'HH:mm:ss'Z'
。
重新编码
这与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