Geoserver学习笔记-3、服务标准(WFS)

2024-05-16 05:18

本文主要是介绍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、参数列表

paramo/m
servicemust(值为WFS)
versionmust
requestmust

注意: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、参数列表

paramo/m
servicemust
versionmust
requestmust
typeNamesmust
exceptionsoption
outputFormateoption

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、参数列表

paramo/m
versionmust
servicemust
requset=GetFeaturemust
typenamemust
outputformatoption
bboxoption
filteroption
sortByoption
maxFeaturesoption
propertyNameoption
srsNameoption
featueIdoption
expiryoption
resultTypeoption
featureVersionoption

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)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/993982

相关文章

sysmain服务可以禁用吗? 电脑sysmain服务关闭后的影响与操作指南

《sysmain服务可以禁用吗?电脑sysmain服务关闭后的影响与操作指南》在Windows系统中,SysMain服务(原名Superfetch)作为一个旨在提升系统性能的关键组件,一直备受用户关... 在使用 Windows 系统时,有时候真有点像在「开盲盒」。全新安装系统后的「默认设置」,往往并不尽编

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

Nginx中配置使用非默认80端口进行服务的完整指南

《Nginx中配置使用非默认80端口进行服务的完整指南》在实际生产环境中,我们经常需要将Nginx配置在其他端口上运行,本文将详细介绍如何在Nginx中配置使用非默认端口进行服务,希望对大家有所帮助... 目录一、为什么需要使用非默认端口二、配置Nginx使用非默认端口的基本方法2.1 修改listen指令

SysMain服务可以关吗? 解决SysMain服务导致的高CPU使用率问题

《SysMain服务可以关吗?解决SysMain服务导致的高CPU使用率问题》SysMain服务是超级预读取,该服务会记录您打开应用程序的模式,并预先将它们加载到内存中以节省时间,但它可能占用大量... 在使用电脑的过程中,CPU使用率居高不下是许多用户都遇到过的问题,其中名为SysMain的服务往往是罪魁

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

解决若依微服务框架启动报错的问题

《解决若依微服务框架启动报错的问题》Invalidboundstatement错误通常由MyBatis映射文件未正确加载或Nacos配置未读取导致,需检查XML的namespace与方法ID是否匹配,... 目录ruoyi-system模块报错报错详情nacos文件目录总结ruoyi-systnGLNYpe

Nginx进行平滑升级的实战指南(不中断服务版本更新)

《Nginx进行平滑升级的实战指南(不中断服务版本更新)》Nginx的平滑升级(也称为热升级)是一种在不停止服务的情况下更新Nginx版本或添加模块的方法,这种升级方式确保了服务的高可用性,避免了因升... 目录一.下载并编译新版Nginx1.下载解压2.编译二.替换可执行文件,并平滑升级1.替换可执行文件

Python标准库datetime模块日期和时间数据类型解读

《Python标准库datetime模块日期和时间数据类型解读》文章介绍Python中datetime模块的date、time、datetime类,用于处理日期、时间及日期时间结合体,通过属性获取时间... 目录Datetime常用类日期date类型使用时间 time 类型使用日期和时间的结合体–日期时间(

Python标准库之数据压缩和存档的应用详解

《Python标准库之数据压缩和存档的应用详解》在数据处理与存储领域,压缩和存档是提升效率的关键技术,Python标准库提供了一套完整的工具链,下面小编就来和大家简单介绍一下吧... 目录一、核心模块架构与设计哲学二、关键模块深度解析1.tarfile:专业级归档工具2.zipfile:跨平台归档首选3.