CQL功能

cql函数允许在映射文件中指定数据转换和条件行为。其中一些函数是由应用程序模式插件专门为此目的提供的。

词汇翻译

本节介绍如何使用应用程序模式映射文件中的一些函数表达式提供词汇表翻译。如果您不熟悉应用程序模式映射文件,请阅读 映射文件 .

重新编码

这和 if_then_else 函数,除非没有默认子句。必须为每个词汇表键指定翻译值。

句法 ::

Recode(COLUMN_NAME, key1, value1, key2, value2,...)
  • COLUMN_NAME :要从中获取值的列名称

例子 ::

<AttributeMapping>
  <targetAttribute>gml:name</targetAttribute>
  <sourceExpression>
      <OCQL>Recode(ABBREVIATION, '1GRAV', 'urn:cgi:classifier:CGI:SimpleLithology:2008:gravel',
                                 '1TILL', 'urn:cgi:classifier:CGI:SimpleLithology:2008:diamictite',
                                 '6ALLU', 'urn:cgi:classifier:CGI:SimpleLithology:2008:sediment')
      </OCQL>
  </sourceExpression>
</AttributeMapping>

上面的示例将映射 GML:名称 价值到 urn:cgi:分类器:cgi:单一岩性:2008:砾石 如果缩写列值为 1格拉夫 .

分类

这更适用于数字键,其中转换值由键在阈值内的位置决定。

句法 ::

Categorize(COLUMN_NAME, default_value, threshold 1, value 1, threshold 2, value 2, ..., [preceding/succeeding])
  • COLUMN_NAME :数据源列名

  • default_value :如果列名称值不在阈值内,则要映射的默认值

  • 阈值(N) :阈值

  • 值(N) :满足阈值时要映射的值

  • preceding/succeeding
    • 可选,如果未指定,默认情况下使用successing。

    • 不区分大小写。

    • 前面:如果列名称值>阈值,则值在阈值范围内

    • 成功:如果列的名称值大于等于阈值,则值在阈值范围内

例子 ::

<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, properties file)
  • COLUMN_NAME :要从中获取值的列名称

  • 属性文件 :属性文件的绝对路径

例子:

属性文件:

1GRAV=urn:cgi:classifier:CGI:SimpleLithology:2008:gravel
1TILL=urn:cgi:classifier:CGI:SimpleLithology:2008:diamictite
6ALLU=urn:cgi:classifier:CGI:SimpleLithology:2008:sediment

映射文件:

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

上面的示例将映射 GML:名称urn:cgi:分类器:cgi:单一岩性:2008:砾石 如果缩写值为 1格拉夫 .

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

几何图形创建

到直接位置

此函数将双精度值转换为 DirectPosition 几何类型。当数据存储没有几何类型列时,需要这样做。此函数期望:

字面意义的

'SRS_NAME' (可选)

表情

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

表情

指向第一个双精度值的列的名称

表情

指向第二个双精度值的列的名称(可选,仅适用于2d)

ToEnvelope

ToEnvelope 函数可以接受以下参数集,并作为 EnvelopeReferencedEnvelope 类型:

选项1(1d信封) ::

ToEnvelope(minx,maxx)

选项2(带crsname的1d信封) ::

ToEnvelope(minx,maxx,crsname)

选项3(二维信封) ::

ToEnvelope(minx,maxx,miny,maxy)

选项4(带CRSName的二维信封) ::

ToEnvelope(minx,maxx,miny,maxy,crsname)

拓朴

此函数将双精度值转换为二维点几何图形类型。当数据存储没有几何类型列时,需要这样做。此函数期望:

字面意义的

'SRS_NAME' (可选)

表情

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

表情

指向第一个双精度值的列的名称

表情

指向第二个双精度值的列的名称

表情

gml:id表达式(可选)

托林字符串

此函数将双精度值转换为一维LineString几何类型。这需要用自定义(非EPSG)CRS来表示1d钻孔间隔。

字面意义的

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

表情

指向第一个双精度值的列的名称

表情

指向第二个双精度值的列的名称

参考文献

毒性链接

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

表情

引用值(可以是另一个函数或文本)

日期/时间格式

FormatDateTimezone

使用 SimpleDateFormat pattern 在一个 time zone supported by Java .此功能改进 dateFormat ,它格式化服务器时区中的日期/时间,并可能产生意外的结果。注意,“日期”这个术语是从Java类名派生出来的;这个类代表日期/时间,而不仅仅是一天。

句法 ::

FormatDateTimezone(pattern, date, timezone)
模式

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

日期

例如,要格式化的日期/时间或其字符串表示形式 '1948-01-01T00:00:00Z' .如果日期格式不正确(且不为空),将返回异常。建议使用包含时区信息的数据库类型。

时区

JAVA支持的时区名称,例如 'UTC''Canada/Mountain' .请注意,未识别的时区将自动转换为UTC。

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

此示例设置列中日期/时间的格式 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>