WMS和WFS服务的区别

一、简介

Web 地图服务 (WMS) 支持对从地理数据生成的地图图像(和其他格式)的请求。

Web 要素服务 (WFS) 支持对地理要素数据(具有矢量几何和属性)的请求。

二、WMS

OGC Web 地图服务 (WMS) 规范定义了一个 HTTP 接口,用于从服务器请求地理配准地图图像。GeoServer 支持 WMS 1.1.1(使用最广泛的 WMS 版本)以及 WMS 1.3.0。请求示例如下所示:

http://localhost:9090/geoserver/guangdong/ows?width=1024&height=1024&bbox=12027333.502473481%2C2022946.0019450812%2C13204320.26724153%2C3199932.7667131284&crs=EPSG%3A3857&format=image%2Fpng&request=GetMap&service=WMS&styles=&transparent=true&version=1.3.0&layers=guangdong

WMS 提供了用于请求地理空间地图图像的标准接口。这样做的好处是,WMS 客户端可以从多个 WMS 服务器请求影像,然后将它们合并到一个视图中供用户使用。该标准保证这些图像都可以像实际情况一样相互叠加。许多服务器和客户端都支持 WMS。

WMS 请求可以执行以下操作:

操作 描述
Exceptions 如果发生异常
GetCapabilities 检索有关服务的元数据,包括支持的操作和参数,以及可用图层的列表
GetMap 检索指定区域和内容的地图图像
GetFeatureInfo(可选) 检索地图上像素位置的基础数据,包括几何和属性值
DescribeLayer(可选) 指示 WFS 或 WCS 以检索有关图层的其他信息。
GetLegendGraphic(可选) 检索为地图生成的图例

GetCapabilities

GetCapabilities 操作请求有关 WMS 服务器提供的操作、服务和数据(“功能”)的元数据。

GetCapabilities 操作的参数包括:

参数 必填? 描述
service 是的 服务名称。值为 。WMS
version 是的 服务版本。值是 、 、 、 之一。1.0.0``1.1.0``1.1.1``1.3.0
request 是的 操作名称。值为 。GetCapabilities

GeoServer 为 GetCapabilities 操作提供了以下特定于服务的参数。

参数 必填? 描述
namespace 限制对给定命名空间中层的响应
format 请求特定格式的功能文档
rootLayer 标志以启用/禁用标准根顶级图层元素。值为真或假。当为 false 时,仅当有多个顶层层时才会包含 Root 元素,如果只有一个,则它将是根层本身。指定后,将覆盖相同行为的全局 WMS 设置或图层/组设置。

GetCapabilities 请求的一个示例是:

http://localhost:8080/geoserver/wms?
service=wms&
version=1.1.1&
request=GetCapabilities

有三个参数要传递到 WMS 服务器,、 和 。该参数告诉 WMS 服务器即将发出 WMS 请求。该参数是指所请求的 WMS 版本。该参数指定 GetCapabilities 操作。WMS 标准要求请求始终包含这三个参数。GeoServer 放宽了这些要求(如果省略,则通过设置默认版本),但对于符合标准,应始终指定这些要求。service=wms``version=1.1.1``request=GetCapabilities``service``version``request

响应是一个功能 XML 文档,其中包含 WMS 服务的详细说明。它包含三个主要部分:

服务 包含服务元数据,如运行服务器的组织的服务名称、关键字和联系信息。
请求 描述 WMS 服务提供的操作以及每个操作的参数和输出格式。如果需要,可以将 GeoServer 配置为禁用对某些 WMS 操作的支持。
列出可用的坐标系和图层。在 GeoServer 中,图层以“命名空间:图层”的形式命名。每一层都提供服务元数据,如标题、摘要和关键字。

GetMap

GetMap 操作请求服务器生成映射。核心参数指定要显示在地图上的一个或多个图层和样式、地图范围的边界框、目标空间参考系统以及输出的宽度、高度和格式。为参数(如 )指定值所需的信息,可以从“功能”文档中获取。layers``styles``srs

响应是地图图像或其他地图输出工件,具体取决于请求的格式。

GetMap 操作的标准参数包括:

参数 必填? 描述
service 是的 服务名称。值为 WMS
version 是的 服务版本。值是 、 、 、 之一。1.0.0``1.1.0``1.1.1``1.3.0
request 是的 操作名称。值为 GetMap
layers 是的 要在地图上显示的图层。值是以逗号分隔的图层名称列表。
styles 是的 要在其中渲染图层的样式。Value 是以逗号分隔的样式名称列表,如果需要默认样式,则值为空。样式名称在列表中可能为空,以使用默认图层样式。
srs crs 是的 用于地图输出的空间参考系统。价值是形式 。 是 WMS 1.3.0 中使用的参数键。EPSG:nnn``crs
bbox 是的 地图范围的边界框。值以 SRS 为单位。minx,miny,maxx,maxy
width 是的 地图输出的宽度,以像素为单位。
height 是的 地图输出的高度,以像素为单位。
format 是的 地图输出的格式。
transparent 地图背景是否应为透明。值为 或 。默认值为true``false``false
bgcolor 地图图像的背景色。值的格式为 。默认值为(白色)。RRGGBB``FFFFFF
exceptions 报告异常的格式。缺省值为 。application/vnd.ogc.se_xml
time 地图数据的时间值或范围。
sld 引用 StyledLayerDescriptor XML 文件的 URL,该文件控制或增强地图图层和样式
sld_body URL 编码的 StyledLayerDescriptor XML 文档,用于控制或增强地图图层和样式

GeoServer 为 GetMap 操作提供了许多特定于供应商的有用参数。

WMS 请求在 SRS EPGS:4326 中将图层输出为 PNG 地图图像并使用默认样式的示例为:topp:states

http://localhost:8080/geoserver/wms?
request=GetMap
&service=WMS
&version=1.1.1
&layers=topp%3Astates
&styles=population
&srs=EPSG%3A4326
&bbox=-145.15104058007,21.731919794922,-57.154894212888,58.961058642578&
&width=780
&height=330
&format=image%2Fpng

该标准将许多参数指定为必需参数,GeoServer 提供了 WMS 反射器以允许选择性地指定其中的许多参数。

试验此功能是了解 GetMap 参数的好方法。

使用 GetMap XML 文档的示例 WMS 请求如下:

<?xml version="1.0" encoding="UTF-8"?>
<ogc:GetMap xmlns:ogc="http://www.opengis.net/ows"
            xmlns:gml="http://www.opengis.net/gml"
   version="1.1.1" service="WMS">
   <StyledLayerDescriptor version="1.0.0">
      <NamedLayer>
        <Name>topp:states</Name>
        <NamedStyle><Name>population</Name></NamedStyle>
      </NamedLayer>
   </StyledLayerDescriptor>
   <BoundingBox srsName="http://www.opengis.net/gml/srs/epsg.xml#4326">
      <gml:coord><gml:X>-130</gml:X><gml:Y>24</gml:Y></gml:coord>
      <gml:coord><gml:X>-55</gml:X><gml:Y>50</gml:Y></gml:coord>
   </BoundingBox>
   <Output>
      <Format>image/png</Format>
      <Size><Width>550</Width><Height>250</Height></Size>
   </Output>
</ogc:GetMap>

时间

从 GeoServer 2.2.0 开始,GeoServer 支持 WMS GetMap 请求的 TIME 属性,如 WMS 规范版本 1.3.0 中所述。此参数允许按时态切片以及用于渲染的空间切片筛选数据集。


GetFeatureInfo

GetFeatureInfo 操作请求地图上给定位置的要素的空间和属性数据。它类似于 WFS GetFeature 操作,但在输入和输出方面都不太灵活。由于 GeoServer 提供 WFS 服务,因此建议尽可能使用它,而不是尽可能使用它。GetFeatureInfo

其一个优点是请求使用返回的 WMS 影像中的 (x,y) 像素值。对于无法执行真正地理参考的天真客户端来说,这更易于使用。GetFeatureInfo

GetFeatureInfo 操作的标准参数为:

参数 必填? 描述
service 是的 服务名称。值为 。WMS
version 是的 服务版本。值是 、 、 、 之一。1.0.0``1.1.0``1.1.1``1.3.0
request 是的 操作名称。值为 。GetFeatureInfo
layers 是的
styles 是的
srs crs 是的
bbox 是的
width 是的
height 是的
query_layers 是的 要查询的一个或多个图层的逗号分隔列表。
info_format 功能信息响应的格式。有关值,请参见下文。
feature_count 要返回的最大要素数。默认值为 1。
xi 是的 地图上查询点的 X 纵坐标,以像素为单位。0 表示左侧。 是 WMS 1.3.0 中使用的参数键。i
yj 是的 地图上查询点的 Y 纵坐标,以像素为单位。0 是顶部。 是 WMS 1.3.0 中使用的参数键。j
exceptions 报告异常的格式。缺省值为 。application/vnd.ogc.se_xml

注意:如果要针对图层组发送 GetFeatureInfo 请求,则必须将该图层组中的所有图层设置为“可查询”才能获得结果

GeoServer 支持多种响应输出格式。服务器样式的 HTML 是最常用的格式。为了获得最大的控制和自定义,客户端应使用GML3并设置原始数据本身的样式。支持的格式包括:GetFeatureInfo

格式 语法 笔记
TEXT info_format=text/plain 简单文本输出。(默认格式)
GML2 info_format=application/vnd.ogc.gml 仅适用于简单功能
GML3 info_format=application/vnd.ogc.gml/3.1.1 适用于简单和复杂功能
HTML info_format=text/html 使用在服务器上定义的 HTML 模板。
JSON info_format=application/json 简单的 Json 表示形式。
JSONP info_format=text/javascript 以以下格式返回 JsonP:parseResponse(...json...)

GeoServer 为 GetFeatureInfo 操作提供了以下特定的参数。

参数 必填? 描述
buffer 查询点周围搜索半径的宽度(以像素为单位)。
cql_filter 以 ECQL 格式筛选返回的数据
filter 以 OGC 过滤器格式过滤返回的数据
propertyName 要返回的功能属性
exclude_nodata_result 设置为 true 时,当要素查询的像素值为 nodata 时,将返回 NaN

WMS 输出格式

WMS 以多种可能的格式返回图像。此页面显示输出格式的列表。设置输出格式的语法为:

format=<format>

其中 是以下任何选项。<format>

注意 GeoServer 实例支持的输出格式列表可以通过 WMS GetCapabilities 请求找到。

格式 语法 笔记
PNG format=image/png Default
PNG8 format=image/png8 与 PNG 相同,但计算出最佳的 256 色(8 位)调色板,因此图像大小通常较小
JPEG format=image/jpeg
JPEG-PNG format=image/vnd.jpeg-png 一种自定义格式,它将根据图像内容动态决定是否最好使用 JPEG 或 PNG 压缩。如果图像完全不透明且未采用调色板,则以 JPEG 格式返回。为了以有意义的方式使用此格式,GetMap必须包含“&transparent=TRUE”参数,因为如果没有它,GeoServer会生成具有默认/请求背景色的不透明图像,使此格式始终返回JPEG图像(或者始终返回PNG,如果它们是调色板)。使用图层预览测试此格式时,请记住将“&transparent=TRUE”添加到预览 URL,因为通常预览会生成非透明图像。
JPEG-PNG8 format=image/vnd.jpeg-png8 与 JPEG-PNG 相同,但如果选择了 PNG 格式,则会生成调色板输出
GIF format=image/gif
TIFF format=image/tiff
TIFF8 format=image/tiff8 与 TIFF 相同,但计算出最佳的 256 色(8 位)调色板,因此图像大小通常较小
GeoTIFF format=image/geotiff 与 TIFF 相同,但包含额外的 GeoTIFF 元数据
GeoTIFF 8 format=image/geotiff8 与 TIFF 相同,但包含额外的 GeoTIFF 元数据并计算最佳的 256 色(8 位)调色板,因此图像大小通常较小
SVG format=image/svg
PDF format=application/pdf
GeoRSS format=rss
KML format=kml
KMZ format=kmz
OpenLayers format=application/openlayers 生成一个 OpenLayers HTML 应用程序。
UTFGrid format=application/json;type=utfgrid 生成 UTFGrid 1.3 JSON 响应。需要矢量输出,可以是矢量图层,也可以是通过渲染转换转换为矢量的栅格图层。

三、WFS

web地图服务,是一个OGC的标准服务,主要是用来请求地图相关的数据,可以根据用户设置不同的参数,返回对应的地图数据。该服务是一个基于HTTP协议的,所支持的操作都是由URL决定的。请求示例如下所示:

http://localhost:9090/geoserver/guangdong/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=guangdong%3Aguangdong&maxFeatures=50&outputFormat=application%2Fjson

WFS 标准定义了一个框架,用于以独立于基础数据源的方式提供对离散地理要素的访问并支持其上的事务。通过发现、查询、锁定和事务操作的组合,用户可以访问源空间和属性数据,从而能够查询、设置样式、编辑(创建、更新和删除)以及下载各个要素。WFS 的事务性功能还支持协作制图应用程序的开发和部署。

所有版本的 WFS 都支持以下操作:

操作 描述
GetCapabilities 生成描述服务器提供的 WFS 服务以及有效的 WFS 操作和参数的元数据文档
DescribeFeatureType 返回 WFS 服务支持的要素类型的说明
GetFeature 从数据源中返回所选要素,包括几何和属性值
LockFeature 防止通过永久功能锁定编辑功能
Transaction 通过创建、更新和删除来编辑现有要素类型

以下操作仅在版本 2.0.0 中可用:

操作 描述
GetPropertyValue 从数据存储中检索使用查询表达式标识的一组要素的功能属性的值或复杂功能属性的一部分值
GetFeatureWithLock 返回所选功能,并在这些功能上应用锁定
CreateStoredQuery 在 WFS 服务器上创建存储查询
DropStoredQuery 从 WFS 服务器中删除存储的查询
ListStoredQueries 返回 WFS 服务器上存储的查询的列表
DescribeStoredQueries 返回描述 WFS 服务器上存储的查询的元数据文档

以下操作仅在版本 1.1.0 中可用:

操作 描述
GetGMLObject 从 WFS 中按 ID 检索要素和元素

GetCapabilities

GetCapabilities 操作是向 WFS 服务器请求该服务器支持的操作和服务或功能的列表。
要使用 HTTP 发出 GET 请求,请执行以下操作:

http://example.com/geoserver/wfs?service=wfs&version=1.1.0&request=GetCapabilities

使用 POST 的等效请求:

<GetCapabilities
 service="WFS"
 xmlns="http://www.opengis.net/wfs"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.opengis.net/wfs
 http://schemas.opengis.net/wfs/1.1.0/wfs.xsd"/>

GET 请求最容易解码,但 POST 请求是等效的。

GetCapabilities 的参数包括:

参数 必填? 描述
service 是的 服务名称 - 值为WFS
version 是的 服务版本 - 值是当前版本号。必须提供完整的版本号(“1.1.0”、“1.0.0”),而不是缩写形式(“1”或“1.1”)。
request 是的 操作名称 - 值为GetCapabilities

尽管根据规范,上述所有参数在技术上都是必需的,但如果请求中省略了任何参数,GeoServer 将提供默认值。

GetCapabilities 响应是一个冗长的 XML 文档,其格式对于每个受支持的版本都是不同的。GetCapabilities 文档中有五个主要组件:

元件 描述
ServiceIdentification 包含请求的基本标头信息,如 和 。指示支持哪些版本的 WFS。Title``ServiceType``ServiceType
ServiceProvider 提供有关发布 WFS 服务的公司的联系信息,包括电话、网站和电子邮件。
OperationsMetadata 描述 WFS 服务器支持的操作以及每个操作的参数。WFS 服务器可能配置为不响应上面列出的操作。
FeatureTypeList 列出 WFS 服务器发布的要素类型。要素类型在 窗体中列出。还会列出要素类型的默认投影以及所述投影中数据的边界框。namespace:featuretype
Filter_Capabilities 列出可用于形成查询谓词的筛选器或表达式。筛选器本身不包括在 GetCapabilities 文档中。

DescribeFeatureType

DescribeFeatureType在请求实际数据之前请求有关单个要素类型的信息。具体而言,该操作将请求给定要素类型的要素和属性列表,或列出可用的要素类型。

DescribeFeatureType 的参数包括:

参数 必填? 描述
service 是的 服务名称 - 值为WFS
version 是的 服务版本 - 值是当前版本号
request 是的 操作名称 - 值为DescribeFeatureType
typeNames 是的 要描述的要素类型的名称(对于 WFS 1.1.0 及更早版本)typeName
exceptions 报告异常的格式 - 默认值为application/vnd.ogc.se_xml
outputFormat 定义用于描述要素类型的方案描述语言

要返回要素类型的列表,GET 请求将如下所示。此请求将返回按命名空间排序的要素类型列表:

http://example.com/geoserver/wfs?
  service=wfs&
  version=2.0.0&
  request=DescribeFeatureType

要列出有关名为 的特定要素类型的信息,GET 请求将是:namespace:featuretype

http://example.com/geoserver/wfs?
  service=wfs&
  version=2.0.0&
  request=DescribeFeatureType&
  typeNames=namespace:featuretype

GetFeature

GetFeature 操作从数据源返回一系列功能。

此请求将为给定层执行 GetFeature 请求:namespace:featuretype

http://example.com/geoserver/wfs?
  service=wfs&
  version=2.0.0&
  request=GetFeature&
  typeNames=namespace:featuretype

执行此命令将返回给定要素类型中所有要素的几何,可能返回大量数据。若要限制输出,可以通过包含其他参数并提供特定功能的 ID,将 GetFeature 请求限制为单个功能。在这种情况下,GET 请求将是:featureID

http://example.com/geoserver/wfs?
  service=wfs&
  version=2.0.0&
  request=GetFeature&
  typeNames=namespace:featuretype&
  featureID=feature

如果要素的 ID 未知,但仍要限制返回的要素数,请使用 WFS 2.0.0 的参数或早期 WFS 版本的参数。在下面的示例中,表示要返回的要素数:count``maxFeatures``N

http://example.com/geoserver/wfs?
  service=wfs&
  version=2.0.0&
  request=GetFeature&
  typeNames=namespace:featuretype&
  count=N
http://example.com/geoserver/wfs?
  service=wfs&
  version=1.1.0&
  request=GetFeature&
  typeName=namespace:featuretype&
  maxFeatures=N

究竟将返回哪些 N 个特征取决于数据的内部结构。但是,您可以根据属性值对返回的选择进行排序。在下面的示例中,使用参数在请求中包含一个属性(替换为您希望作为排序依据的属性):sortBy=attribute``attribute

http://example.com/geoserver/wfs?
   service=wfs&
   version=2.0.0&
   request=GetFeature&
   typeNames=namespace:featuretype&
   count=N&
   sortBy=attribute

默认排序操作是按升序排序。某些 WFS 服务器需要指定排序顺序,即使需要升序排序也是如此。在这种情况下,请将 a 追加到请求中。相反,将 添加 到请求中以降序排序,如下所示:+A``+D

http://example.com/geoserver/wfs?
  service=wfs&
  version=2.0.0&
  request=GetFeature&
  typeNames=namespace:featuretype&
  count=N&
  sortBy=attribute+D

没有义务在 GetFeature 请求中使用,但可以将它们一起使用,以更有效地管理返回的功能选择。sortBy``count

要按属性而不是功能限制 GetFeature 请求,请使用格式中的键。您可以指定单个属性,也可以指定用逗号分隔的多个属性。要在所有要素中搜索单个属性,需要以下请求:propertyName``propertyName=attribute

http://example.com/geoserver/wfs?
  service=wfs&
  version=2.0.0&
  request=GetFeature&
  typeNames=namespace:featuretype&
  propertyName=attribute

对于仅来自一个功能的单个属性,请同时使用 和 :featureID``propertyName

http://example.com/geoserver/wfs?
  service=wfs&
  version=2.0.0&
  request=GetFeature&
  typeNames=namespace:featuretype&
  featureID=feature&
  propertyName=attribute

对于单个功能的多个属性,请使用逗号分隔的值列表:propertyName

http://example.com/geoserver/wfs?
  service=wfs&
  version=2.0.0&
  request=GetFeature&
  typeNames=namespace:featuretype&
  featureID=feature&
  propertyName=attribute1,attribute2

虽然 GetFeature 请求的上述排列侧重于非空间参数,但也可以基于几何查询要素。虽然用于空间查询的 GET 请求中可用的选项有限(使用过滤器的 POST 请求中提供了更多选项),但支持按边界框过滤 (BBOX)。

BBOX 参数允许您搜索在用户定义坐标框中包含(或部分包含)的要素。可选参数用于为 bbox 坐标命名 CRS(如果它们与 featureTypes 本机 CRS 不同)。传递给 BBOX 参数的坐标的顺序取决于所使用的坐标系(这就是坐标语法不用 或 表示的原因)。bbox=a1,b1,a2,b2,[crs]``a1``b1``a2``b2``crs``x``y

要为返回的要素指定坐标系,请追加到 WFS 请求,其中是要使用的坐标参考系。srsName=CRS``CRS

至于要指定边界框的哪些角,唯一的要求是首先提供底角(左或右)。例如,左下角和右上角,或右下角和左上角。

基于边界框返回要素的示例请求(使用 featureTypes 本机 CRS):

http://example.com/geoserver/wfs?
  service=wfs&
  version=2.0.0&
  request=GetFeature&
  typeNames=namespace:featuretype&
  srsName=CRS&
  bbox=a1,b1,a2,b2

要使用具有与要素类型本机 CRS 不同的 CRS 的边界框来请求要素,请执行以下操作:

http://example.com/geoserver/wfs?
  service=wfs&
  version=2.0.0&
  request=GetFeature&
  typeNames=namespace:featuretype&
  srsName=CRS&
  bbox=a1,b1,a2,b2,CRS

暂时介绍这经常用的三个请求类型。


WFS 输出格式

WFS 以多种格式返回要素和要素信息。指定输出格式的语法为:

outputFormat=<format>

其中 是以下选项之一:<format>

格式 语法 笔记
GML2 outputFormat=GML2 WFS 1.0.0 的默认选项
GML3 outputFormat=GML3 WFS 1.1.0 和 2.0.0 的默认选项
Shapefile outputFormat=shape-zip 将生成包含 shapefile 的 ZIP 存档。
JSON outputFormat=application/json 返回 GeoJSON 或 JSON 输出。注意仅支持 getFeature(为了向后兼容)。outputFormat=json
JSONP outputFormat=text/javascript parseResponse(...json...)
CSV outputFormat=csv 返回 CSV(逗号分隔值)文件
posted @ 2022-07-29 22:58  槑孒  阅读(368)  评论(0编辑  收藏  举报