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

相关文章

使用Node.js制作图片上传服务的详细教程

《使用Node.js制作图片上传服务的详细教程》在现代Web应用开发中,图片上传是一项常见且重要的功能,借助Node.js强大的生态系统,我们可以轻松搭建高效的图片上传服务,本文将深入探讨如何使用No... 目录准备工作搭建 Express 服务器配置 multer 进行图片上传处理图片上传请求完整代码示例

Spring LDAP目录服务的使用示例

《SpringLDAP目录服务的使用示例》本文主要介绍了SpringLDAP目录服务的使用示例... 目录引言一、Spring LDAP基础二、LdapTemplate详解三、LDAP对象映射四、基本LDAP操作4.1 查询操作4.2 添加操作4.3 修改操作4.4 删除操作五、认证与授权六、高级特性与最佳

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

Go标准库常见错误分析和解决办法

《Go标准库常见错误分析和解决办法》Go语言的标准库为开发者提供了丰富且高效的工具,涵盖了从网络编程到文件操作等各个方面,然而,标准库虽好,使用不当却可能适得其反,正所谓工欲善其事,必先利其器,本文将... 目录1. 使用了错误的time.Duration2. time.After导致的内存泄漏3. jsO

Linux上设置Ollama服务配置(常用环境变量)

《Linux上设置Ollama服务配置(常用环境变量)》本文主要介绍了Linux上设置Ollama服务配置(常用环境变量),Ollama提供了多种环境变量供配置,如调试模式、模型目录等,下面就来介绍一... 目录在 linux 上设置环境变量配置 OllamPOgxSRJfa手动安装安装特定版本查看日志在

SpringCloud之LoadBalancer负载均衡服务调用过程

《SpringCloud之LoadBalancer负载均衡服务调用过程》:本文主要介绍SpringCloud之LoadBalancer负载均衡服务调用过程,具有很好的参考价值,希望对大家有所帮助,... 目录前言一、LoadBalancer是什么?二、使用步骤1、启动consul2、客户端加入依赖3、以服务

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

C++ Primer 标准库vector示例详解

《C++Primer标准库vector示例详解》该文章主要介绍了C++标准库中的vector类型,包括其定义、初始化、成员函数以及常见操作,文章详细解释了如何使用vector来存储和操作对象集合,... 目录3.3标准库Vector定义和初始化vector对象通列表初始化vector对象创建指定数量的元素值

Nginx配置系统服务&设置环境变量方式

《Nginx配置系统服务&设置环境变量方式》本文介绍了如何将Nginx配置为系统服务并设置环境变量,以便更方便地对Nginx进行操作,通过配置系统服务,可以使用系统命令来启动、停止或重新加载Nginx... 目录1.Nginx操作问题2.配置系统服android务3.设置环境变量总结1.Nginx操作问题

springboot的调度服务与异步服务使用详解

《springboot的调度服务与异步服务使用详解》本文主要介绍了Java的ScheduledExecutorService接口和SpringBoot中如何使用调度线程池,包括核心参数、创建方式、自定... 目录1.调度服务1.1.JDK之ScheduledExecutorService1.2.spring