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

相关文章

Java中使用Java Mail实现邮件服务功能示例

《Java中使用JavaMail实现邮件服务功能示例》:本文主要介绍Java中使用JavaMail实现邮件服务功能的相关资料,文章还提供了一个发送邮件的示例代码,包括创建参数类、邮件类和执行结... 目录前言一、历史背景二编程、pom依赖三、API说明(一)Session (会话)(二)Message编程客

windos server2022的配置故障转移服务的图文教程

《windosserver2022的配置故障转移服务的图文教程》本文主要介绍了windosserver2022的配置故障转移服务的图文教程,以确保服务和应用程序的连续性和可用性,文中通过图文介绍的非... 目录准备环境:步骤故障转移群集是 Windows Server 2022 中提供的一种功能,用于在多个

解决systemctl reload nginx重启Nginx服务报错:Job for nginx.service invalid问题

《解决systemctlreloadnginx重启Nginx服务报错:Jobfornginx.serviceinvalid问题》文章描述了通过`systemctlstatusnginx.se... 目录systemctl reload nginx重启Nginx服务报错:Job for nginx.javas

Python 标准库time时间的访问和转换问题小结

《Python标准库time时间的访问和转换问题小结》time模块为Python提供了处理时间和日期的多种功能,适用于多种与时间相关的场景,包括获取当前时间、格式化时间、暂停程序执行、计算程序运行时... 目录模块介绍使用场景主要类主要函数 - time()- sleep()- localtime()- g

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、