本文主要是介绍Geoserver学习笔记-3、服务标准(WFS),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、WFS(Web Feature Service)
Web要素服务,支持对地理要素的插入、更新、删除、检索和发现服务。该服务根据HTTP客户请求返回GML(Geography Markup Language、地理标识语言)数据;也可以通过OGC Filter构造查询条件,并支持基于空间几何关系的查询和基于属性的查询以及基于空间关系和属性域的共同查询。
WFS标准定义了一些操作,这些操作允许用户在分布式的环境下通过HTTP对空间数据进行查询、编辑等操作。
WFS服务要求服务的接口必须由XML描述,另外数据交互必须由GML进行,数据过滤采用CQL语言。
https://docs.geoserver.org/latest/en/user/filter/index.html#filtering
https://docs.geoserver.org/latest/en/user/filter/ecql_reference.html
GeoServer对网络要素服务(WFS)的提供了1.0.0,1.1.0和2.0.0三个版本的支持。
版本的差异:
1) WFS 2.0.0请求以默认格式返回GML 3.2,
WFS 1.1.0请求以默认格式返回GML 3,
WFS 1.0.0请求以默认格式返回GML 2。
地理标记语言(GML)是开放地理空间联盟(OGC)定义的基于XML的规范,用于表达地理特征。较旧的GML标准GML 2对地理信息进行编码,包括空间和非空间属性。GML3将GML2支持范围扩展到3D形状(曲面和实体)以及其他高级功能。GML3采用不同的方式指定几何要素。GeoServer支持GML3和GML2格式的请求。对几何字段的xml表示方式不同,有很多标签不一样,比如 MultiLineString 在GML3中已经没有了,详细差异可以对比相关规范
http://www.doc88.com/p-9611908996292.html
2)GeoServer 对于每种支持的GML格式,可以选择不同的SRS格式。
SRS Style:对返回数据的轴顺序有影响,对几何字段的坐标也会有影响。
EPSG Code:以格式EPSG:XXXX(例如EPSG:4326)返回典型的EPSG号。以经度/纬度(x / y)的顺序格式化地理坐标。
以经度/纬度(x / y)的顺序格式化地理坐标WFS 1.0.0-->GML 2-->OGC HTTP URL ("http://www.opengis.net/gml/srs/epsg.xml#4326")以地理和制图系统的传统轴顺序(即纬度/经度(y / x))格式化数据。WFS 1.1.0-->GML 3-->OGC Experimental URN(urn:x-ogc:def:crs:EPSG:4326) WFS 1.1.1,WFS 2.0.0-->GML 3.2-->OGC URN (urn:ogc:def:crs:EPSG::4326)
3)WFS 1.1.0和2.0.0支持动态重新投影数据,这支持在本机SRS以外的SRS中返回数据。
4)WFS 2.0.0引入了新版本的过滤器编码规范,增加了对时间过滤器的支持。
5)WFS 2.0.0支持通过GetFeature请求进行联接。
6)WFS 2.0.0增加了通过startIndex和count参数分页GetFeature请求的结果的功能。GeoServer现在在WFS 1.0.0和1.1.0中支持此功能。
7)WFS 2.0.0支持存储的查询,这是存储在服务器上的常规WFS查询,因此可以通过将适当的标识符与WFS请求一起传递来调用它们。
8)WFS 2.0.0支持SOAP(简单对象访问协议)作为OGC接口的替代方法。
WFS可以分为三类:
1. Basic WFS(就是最常被提及的WFS,必须支持GetCapabilities/ DescribeFeatureType/ GetFeature操作,在功能上意味着是一个只读的数据服务)
2. XLink WFS(必须在Basic WFS基础上加上GetGmlObject操作)
3. Transaction WFS(也有称为WFS-T,必须在Basic WFS基础上加上Transaction操作以支持编辑数据,另外也可以加上GetGmlObject/LockFeature 操作)
二、WFS支持的操作:
WFS的所有版本都支持以下操作
1)GetCapabilities:生成描述服务器中的WFS服务以及有效的WFS操作和参数的元数据文档
2)DescribeFeatureType:返回WFS服务支持的功能类型的描述
3)GetFeature:从数据源返回一组选择的特征,包括几何和属性值
4)LockFeature:防止通过持久功能锁定来编辑功能
5)Transaction:通过创建,更新和删除来编辑现有要素类型
仅在1.1.0版中可用,GetGMLObject 通过ID从WFS检索功能和元素。
请求流程:
当一个客户端想要访问WFS服务时,一般会涉及到以下的流程:
1. 通过操作获取WFS服务支持的操作和要素类(FeatureType,可以理解为WFS中的数据集) 。
2. (可能)通过操作获取WFS服务支持的要素类的定义。
3. 客户端发送某个操作的请求。
4. WFS服务处理请求。
5. WFS服务返回处理的结果和状态。
上面几个步骤中所提到的“操作”包括:
1. GetCapabilities(获取服务中的要素类及支持的操作)
2. DescribeFeatureType(描述要素类的信息)
3. GetFeature(获取要素)
4. GetGmlObject(通过XLink获取GML对象)
5. Transaction(创建、更新、删除数据的事务操作)
6. LockFeature(在事务过程中锁定要素)
GetCapabilities:
1、参数列表
param | o/m |
---|---|
service | must(值为WFS) |
version | must |
request | must |
注意:version(必须完成的版本号)
2、操作示例
KVP格式:http://localhost:8080/geoserver/wfs?service=wfs&version=1.1.0&request=GetCapabilities
POST的等效请求:
<?xml version="1.0" ?>
<GetCapabilitiesservice="WFS"xmlns="http://www.opengis.net/wfs"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.opengis.net/wfshttp://schemas.opengis.net/wfs/1.1.0/wfs.xsd"/>
3、响应示例
DescribeFeatureType:
DescribeFeatureType:返回所指定的WFS服务支持的要素类型的描述(图层属性字段等)
1、参数列表
param | o/m |
---|---|
service | must |
version | must |
request | must |
typeNames | must |
exceptions | option |
outputFormate | option |
typeNames指定所要描述的要素服务(typeName对于WFS 1.1.0和更早版本);
报告异常的格式-默认值为 application/vnd.ogc.se_xml
2、操作示例
KVP格式:
http://localhost:8080/geoserver/wfs?service=wfs&version=2.0.0&request=DescribeFeatureType&typeNames=topp:states
POST等效请求:
<?xml version="1.0" ?>
<DescribeFeatureTypeservice="WFS"version="2.0.2"xmlns="http://www.opengis.net/wfs/2.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.opengis.net/wfs/2.0 http://schemas.opengis.net/wfs/2.0/wfs.xsd"><TypeName>topp:states</TypeName>
</DescribeFeatureType>
3、响应示例
GetFeature
GetFeature:返回指定图层符合条件的要素
https://docs.geoserver.org/latest/en/user/filter/filter_reference.html
1、参数列表
param | o/m |
---|---|
version | must |
service | must |
requset=GetFeature | must |
typename | must |
outputformat | option |
bbox | option |
filter | option |
sortBy | option |
maxFeatures | option |
propertyName | option |
srsName | option |
featueId | option |
expiry | option |
resultType | option |
featureVersion | option |
2、操作示例
POST请求示例
<?xml version="1.0" ?>
<GetFeatureversion="2.0.2"service="WFS"resultType="results"outputFormat="json"xmlns="http://www.opengis.net/wfs/2.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.opengis.net/wfs/2.0 http://schemas.opengis.net/wfs/2.0/wfs.xsd">
<Query typeNames="basemap:ditiezhandian"/>
</GetFeature>
3、响应示例
Transaction
Transaction操作可以创建,修改和删除由WFS服务中的要素。
每个Transaction可以包含零个或多个Insert,Update和Delete元素,每个事务元素按顺序执行。
每个GeoServer事务都是原子的,这意味着如果任何元素失败,则事务将被放弃,并且数据将保持不变。
支持事务的 WFS服务器有时也称为WFS-T服务器。
操作示例:
-----------------插入-----------------
--------------点<?xml version="1.0"?>
<wfs:Transactionversion="2.0.2"service="WFS"xmlns:gml="http://www.opengis.net/gml/3.2"xmlns:wfs="http://www.opengis.net/wfs/2.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.opengis.net/wfs/2.0http://schemas.opengis.net/wfs/2.0.02.0/wfs.xsdhttp://www.opengis.net/gml/3.2http://schemas.opengis.net/gml/3.2.1/gml.xsd"><wfs:Insert><ditiezhandian><geom><gml:MultiPoint srsName="http://www.opengis.net/def/crs/EPSG/0/2435"><gml:Point><gml:pos>27554.435382730742 43494.32271040513</gml:pos></gml:Point></gml:MultiPoint></geom><name>测试点</name></ditiezhandian></wfs:Insert>
</wfs:Transaction>以图层名称为insert的子元素,属性名元素(区分大小写)配置其值,空间要素类型要与表中的字段类型匹配
(gml:Point、gml:MultiPoint、gml:LineString、gml:MultiLineString、gml:Polygon、gml:MultiPolygon、gml:Box、gml:Envelope),
注意:坐标顺序是Y、X--------------线-<?xml version="1.0"?>
<wfs:Transactionversion="2.0.2"service="WFS"xmlns:gml="http://www.opengis.net/gml/3.2"xmlns:wfs="http://www.opengis.net/wfs/2.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.opengis.net/wfs/2.0http://schemas.opengis.net/wfs/2.0.02.0/wfs.xsdhttp://www.opengis.net/gml/3.2http://schemas.opengis.net/gml/3.2.1/gml.xsd"><wfs:Insert><ditiexian><geom><gml:MultiLineString srsName="http://www.opengis.net/def/crs/EPSG/0/2435"><gml:LineString><gml:posList>27633.240501038006 43258.39232970535 27652.34980592328 43594.596662530676 27571.732425938524 44154.140996202674 27492.309377509093 44046.05399044533 27473.200072623815 43691.33751851239 27466.6312490695 43419.62708967487</gml:posList></gml:LineString></gml:MultiLineString></geom><name>线测试1</name></ditiexian></wfs:Insert>
</wfs:Transaction>坐标顺序是Y、X--------------面<?xml version="1.0"?>
<wfs:Transactionversion="2.0.2"service="WFS"xmlns:gml="http://www.opengis.net/gml/3.2"xmlns:wfs="http://www.opengis.net/wfs/2.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.opengis.net/wfs/2.0http://schemas.opengis.net/wfs/2.0.02.0/wfs.xsdhttp://www.opengis.net/gml/3.2http://schemas.opengis.net/gml/3.2.1/gml.xsd"><wfs:Insert><slg_rv><geom><gml:MultiPolygon><gml:polygonMember><gml:Polygon><gml:exterior><gml:LinearRing><gml:posList>40927.05946997714 28923.714796715758 40554.42823108966 24901.20834616119 46440.090876081624 27977.80472877062 40927.05946997714 28923.714796715758</gml:posList></gml:LinearRing></gml:exterior></gml:Polygon></gml:polygonMember></gml:MultiPolygon></geom><rvnm>面测试</rvnm></slg_rv></wfs:Insert>
</wfs:Transaction>
注意:插入面要素时出现,srid未指定与源数据叠加无法显示问题
坐标顺序是X、Y-----------------修改-----------------<?xml version="1.0"?>
<wfs:Transactionversion="2.0.2"service="WFS"xmlns:gml="http://www.opengis.net/gml/3.2"xmlns:wfs="http://www.opengis.net/wfs/2.0"xmlns:fes="http://www.opengis.net/fes/2.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.opengis.net/wfs/2.0
http://schemas.opengis.net/wfs/2.0.0/wfs.xsd
http://www.opengis.net/gml/3.2
http://schemas.opengis.net/gml/3.2.1/gml.xsd"><wfs:Update typeName="ps:ditiexian"><wfs:Property><wfs:ValueReference>name</wfs:ValueReference><wfs:Value>地铁一号线修改测试</wfs:Value></wfs:Property><fes:Filter><fes:PropertyIsEqualTo><fes:ValueReference>user_type</fes:ValueReference><fes:Literal>19101</fes:Literal></fes:PropertyIsEqualTo></fes:Filter></wfs:Update>
</wfs:Transaction>fes命名空间:过滤器编码标准-----------------删除------------------------<?xml version="1.0"?>
<wfs:Transactionversion="2.0.2"service="WFS"xmlns:gml="http://www.opengis.net/gml/3.2"xmlns:wfs="http://www.opengis.net/wfs/2.0"xmlns:fes="http://www.opengis.net/fes/2.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.opengis.net/wfs/2.0
http://schemas.opengis.net/wfs/2.0.0/wfs.xsd
http://www.opengis.net/gml/3.2
http://schemas.opengis.net/gml/3.2.1/gml.xsd"><wfs:Delete typeName="ps:ditiexian"><fes:Filter><fes:PropertyIsEqualTo><fes:ValueReference>name</fes:ValueReference><fes:Literal>线测试1</fes:Literal></fes:PropertyIsEqualTo></fes:Filter></wfs:Delete>
</wfs:Transaction>
这篇关于Geoserver学习笔记-3、服务标准(WFS)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!