复杂的特征¶
要理解复杂的特性以及为什么要使用它们,首先需要了解一些简单的特性。
简单功能¶
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
.这些类型分别在以下应用程序模式中定义:
http://schemas.opengis.net/sampling/1.0.0/sampling.xsd
文件:OGC 07-002R3:http://portal.opengeospatial.org/files/?工件编号=22467
http://www.geosciml.org/geosciml/2.0/xsd/geosciml.xsd
复杂功能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 .