复杂的特征

要理解复杂的特性以及为什么要使用它们,首先需要了解一些简单的特性。

简单功能

geoserver wfs的一个常见用途是连接到数据库等数据源并访问一个或多个表,其中每个表都被视为wfs简单功能类型。简单功能包含一个属性列表,每个属性都有一条简单信息,如字符串或数字。(特别规定了几何对象,这些对象被视为简单数据的单个项目。)开放地理空间联盟(OGC)定义了三个简单的特征轮廓:SF-0、SF-1和SF-2。geoserver的简单功能与最简单的ogc配置文件ogc sf-0非常接近。

geoserver wfs简单功能提供了从数据库表或类似结构到“平面”XML表示的简单映射,其中表的每一列都映射到通常不包含进一步结构的XML元素。geoserver wfs之所以如此易于与简单的特性一起使用,一个原因是,从数据库表中的列到XML元素的转换是自动的。每个元素的名称都是列的名称,位于数据存储的命名空间中。功能类型的名称默认为表的名称。geoserver wfs可以为它服务的每个简单特征类型创建一个xsd类型定义。提交DescribeFeatureType请求以查看它。

简单功能的好处

  • 易于实施

  • 快的

  • 支持对属性的查询,包括对几何图形的空间查询

简单功能的缺点

  • 当geoserver自动生成XSD时,XML格式将绑定到数据库模式。

  • 要与GeoServer简单功能共享数据,参与者必须使用相同的数据库模式或在不同的模式之间转换。

  • 即使一个社区可以在一个数据库模式上达成一致,当更多具有不同数据的数据所有者添加到一个社区中时,表中的列数将变得不可管理。

  • 互操作性很困难,因为简单的特性不允许只修改模式的一部分。

简单功能示例

例如,如果我们有一个数据库表 stations 包含GPS站点信息:

| id | code |      name      |         location         |
+----+------+----------------+--------------------------+
| 27 | ALIC | Alice Springs  | POINT(133.8855 -23.6701) |
| 4  | NORF | Norfolk Island | POINT(167.9388 -29.0434) |
| 12 | COCO | Cocos          | POINT(96.8339 -12.1883)  |
| 31 | ALBY | Albany         | POINT(117.8102 -34.9502) |

然后,geoserver将能够创建以下简单功能WFS响应片段:

<gps:stations gml:id="stations.27">
    <gps:code>ALIC</gps:code>
    <gps:name>Alice Springs</gps:name>
    <gps:location>
        <gml:Point srsName="urn:x-ogc:def:crs:EPSG:4326">
            <gml:pos>-23.6701 133.8855</gml:pos>
        </gml:Point>
    </gps:location>
</gps:stations>
  • 表中的每一行都被转换为一个特征。

  • 表中的每一列都将转换为一个元素,该元素包含该行的值。

  • 每个元素都在数据存储的命名空间中。

  • 自动转换应用于一些特殊类型,如具有内部结构的几何体,并包含在GML中定义的元素。

复杂的特征

复杂功能包含的属性可以包含任意深度的进一步嵌套属性。特别是,复杂特征可以包含其他复杂特征的属性。复杂特性可以用来表示信息,而不是作为单个表的XML视图,而是作为不同类型的相关对象的集合。

简单功能

复杂特征

属性是单个数据项,例如文本、数字、几何图形

属性可以是复杂的,包括复杂的特性

单个表的XML视图

相关可识别对象集合

根据数据库自动生成架构

社区同意的模式

一个大的类型

多种不同类型

直截了当

丰富的数据标准

互操作性依赖于简单性和定制

通过标准化实现互操作性

复杂功能的好处

  • 可以将信息模型定义为面向对象的结构, 应用程序架构 .

  • 信息不是作为一个单独的表来建模,而是作为相关对象的集合来建模,这些对象的关联和类型可能因特性(多态性)的不同而不同,从而允许丰富的内容表达。

  • 通过将模式分解为独立类型的集合,社区只需要扩展它们需要修改的类型。这简化了治理,并允许相关社区之间的互操作性,这些社区可以在公共基础类型上达成一致,但不需要在特定于应用程序的子类型上达成一致。

复杂特征的缺点

  • 实施起来更复杂

  • 如果每个功能需要更多的数据库查询,复杂的响应可能会变慢。

  • 标准化应用程序模式需要信息建模。虽然这是有益的,但它需要用户社区的努力。

复杂特征示例

让我们回到我们的 stations 表并用一个外键进行补充 gu_id 它描述了GPS站与其物理附着的地质单元之间的关系:

| id | code |      name      |         location         | gu_id |
+----+------+----------------+--------------------------+-------+
| 27 | ALIC | Alice Springs  | POINT(133.8855 -23.6701) | 32785 |
| 4  | NORF | Norfolk Island | POINT(167.9388 -29.0434) | 10237 |
| 12 | COCO | Cocos          | POINT(96.8339 -12.1883)  | 19286 |
| 31 | ALBY | Albany         | POINT(117.8102 -34.9502) | 92774 |

地质单位存储在表中 geologicunit **

| gu_id |                       urn             |         text        |
+-------+---------------------------------------+---------------------+
| 32785 | urn:x-demo:feature:GeologicUnit:32785 | Metamorphic bedrock |
...

简单的特性方法是加入 stations 带有的表 geologicunit 表转换为一个视图,然后传递包含两个视图的所有属性的“平面”XML。复杂的特性方法是将两个表作为单独的特性类型交付。这允许实体之间的关系在保留其个人身份的同时被表示出来。

例如,我们可以将GPS站映射到 sa:SamplingPoint 用一个 gsml:GeologicUnit .这些类型分别在以下应用程序模式中定义:

复杂功能WFS响应片段随后可以编码为::

<sa:SamplingPoint gml:id="stations.27>
  <gml:name codeSpace="urn:x-demo:SimpleName">Alice Springs</gml:name>
  <gml:name codeSpace="urn:x-demo:IGS:ID">ALIC</gml:name>
  <sa:sampledFeature>
     <gsml:GeologicUnit gml:id="geologicunit.32785">
         <gml:description>Metamorphic bedrock</gml:description>
         <gml:name codeSpace="urn:x-demo:Feature">urn:x-demo:feature:GeologicUnit:32785</gml:name>
     </gsml:GeologicUnit>
  </sa:sampledFeature>
  <sa:relatedObservation xlink:href="urn:x-demo:feature:GeologicUnit:32785" />
  <sa:position>
      <gml:Point srsName="urn:x-ogc:def:crs:EPSG:4326">
          <gml:pos>-23.6701 133.8855</gml:pos>
      </gml:Point>
  </sa:position>
</sa:SamplingPoint>
  • 财产 sa:sampledFeature 可以引用任何其他特性类型,内联(包含在响应中)或通过引用(一个 xlink:href URL或URN)。这是使用多态性的一个例子。

  • 财产 sa:relatedObservation 指的是与 sa:sampledFeature ,但通过引用。

  • 新类型的派生提供了一个扩展点,允许以支持向后兼容性的方式重用和扩展信息模型。

  • 多个采样点可以共享一个地质单元。应用程序模式还可以定义多值属性来支持多对一或多对多的关联。

  • 每一个地质学家都可以有进一步的特性来详细描述岩石的特性,如颜色、风化、岩性或相关的地质事件。

  • 地质特征类型可以单独提供,并且可以通过其属性唯一地标识为采样点中看到的相同实例。

描绘复杂特征(SF0)

描述模式是具有平面属性的标准化模式,也称为简单功能级别0(sf0)。因为仍然需要一个社区模式(例如geosciml defeatal),所以仍使用app-schema插件将数据库列映射到属性。

  • WFS CSV output format 对于具有描述模式的复杂功能支持。目前,csv outputformat还不支持propertyname选择,因此它始终返回完整的属性集。

  • 不支持具有嵌套和多值属性的复杂功能 WFS CSV output format .

Next: 安装