geoserver标准地图服务
# WMS
对于经常变动的空间数据通常将其发布成动态地图服务(WMS),WMS是一个动态数据、定制地图的理想解决方案,它会根据请求范围在服务端动态生成数据渲染的图片返回给客户端。
GeoServer
为WMS
提供1.1.1和1.3.0版本的支持。
版本1.1.1和1.3.0之间的主要区别是:
- 在1.1.1中,使用
EPSG
名称空间指定的地理坐标系被定义为具有经度/纬度的轴顺序。在1.3.0中,顺序为纬度/经度。 - 在
GetMap
操作中,srs
参数在1.3.0中被crs
替换。无论版本如何,GeoServer
都支持这两个参数。 - 在
GetFeatureInfo
操作的x和y参数在1.3.0版中被称为i和j。除处于CITE兼容模式下外,GeoServer
均支持两个参数,而与版本无关。
geoserver/wms?VERSION=1.1.1&REQUEST=GetMap&SRS=epsg:4326&BBOX=-180,-90,180,90&…
geoserver/wms?VERSION=1.3.0&REQUEST=GetMap&CRS=epsg:4326&BBOX=-90,-180,90,180&…
2
WMS
可以分为两类:
Basic WMS
(就是最常被提及的WMS
,支持GetCapabilities
/GetMap
操作)Queryable WFS
(是在Basic WMS
基础上加上GetFeatureInfo
操作)
WMS
除了可以动态生成当前地图视图范围内的图层服务的图片并响应到前端供地图展示,还提供根据地图上像素点获取图层要素信息的查询操作接口。
接口 | 描述 |
---|---|
GetCapabilities | 获取服务中的要素类及支持的操作 |
GetMap | 获取服务器生成的地图图片 |
GetFeatureInfo | 根据地图上的像素点获取详细的要素信息 |
# GetCapabilities
http://localhost:8080/geoserver/wms?service=wms&version=1.1.1&request=GetCapabilities
参数列表:
param | o/m |
---|---|
version | option |
service=wms | must |
request=GetCapabilities | must |
format | option |
updatesequence | option |
- Service(服务)。包含服务元数据,例如服务于服务器的组织的服务名称,关键字和联系信息。
- Request(请求)。描述
WMS
服务提供的操作以及每个操作的参数和输出格式。 - Layer(层)。 列出可用的坐标系和图层。在
GeoServer
中,图层以“名称空间:图层”的形式命名。每一层都提供服务元数据,例如标题,摘要和关键字。
# GetMap
http://localhost:8080/geoserver/tiger/wms?SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&LAYERS=tiger:tiger_roads&exceptions=application/nd.ogc.se_inimage&SRS=EPSG%3A4326&STYLES=&WIDTH=476&HEIGHT=768&BBOX=-74.036865234375,40.6549072265625,-73.87344360351562,40.9185791015625
GetMap
操作的核心参数是指定要在地图上显示的一个或多个图层和样式,地图范围的边界框,目标空间参考系统以及输出的宽度,高度和格式。
参数列表:
参数 | 是否必须 | 说明 |
version | 是 | WMS服务版本,默认1.3.0 |
request=GetMap | 是 | 请求类型 |
layers | 是 | 逗号分隔的一个或多个图层列表 |
styles | 是 | 逗号分隔的一个或多个图层的样式列表。 |
crs | 是 | 坐标参考(1.1.1是srs,1.3.0是crs) |
bbox | 是 | CRS下的边框角(左下,右上) |
width | 是 | 输出的地图图片宽度 |
height | 是 | 输出的地图图片高度 |
format | 是 | 指定请求响应的输出格式 |
transparent | 图层是否透明,默认true | |
bgcolor | 响应图片的背景色(十六进制的rgb颜色值) | |
exceptions | 异常的输出格式,默认XML | |
time | ||
elevation |
# GeoFeatureInfo
http://localhost:8080/geoserver/wms?request=GetFeatureInfo&service=WMS&version=1.1.1&layers=topp:states&styles=&srs=EPSG:4326&format=image/png&bbox=-145.151041,21.73192,-57.154894,58.961059&width=780&height=330&query_layers=topp:states&info_format=application/json&feature_count=50&x=353&y=145&exceptions=application/vnd.ogc.se_xml
GetFeatureInfo
操作请求地图上给定位置的要素的空间和属性数据。
与WFS
GetFeature
操作类似,但是在输入和输出方面都不太灵活。因为GetFeatureInfo请求使用的参数是getMap操作返回的WMS图像的(x,y)像素值。
参数列表:
param | o/m |
---|---|
version | must |
request=GetFeatureInfo | must |
GetMap 参数 | must |
query_layers | must |
info_format | must |
feature_count | option |
x(i) | must |
y(j) | must |
exceptions | option |
# WFS
Web Feature Service(WFS),支持对地理要素的插入、更新、删除、检索和发现服务。该服务可根据HTTP客户端请求返回GML语言,也可以通过OGC Filter构造查询条件,并支持基于空间几何关系的查询和基于属性的查询以及基于空间关系和属性域的共同查询。
WFS标准定义了一些操作,这些操作允许用户在分布式的环境下通过HTTP请求对空间数据进行查询和编辑等操作。WFS服务要求服务的接口必须由XML描述,另外数据交互必须由GML进行,数据过滤采用CQL语言。
GeoServer
对WFS服务的提供了1.0.0,1.1.0和2.0.0三个版本的支持。
版本的差异:
WFS 2.0.0请求以默认格式返回GML 3.2;WFS 1.1.0请求以默认格式返回GML 3;WFS 1.0.0请求以默认格式返回GML 2。
GeoServer 对于每种支持的GML格式,可以选择不同的SRS格式。
SRS Style:对返回数据的轴顺序有影响,对几何字段的坐标也会有影响。 EPSG Code:以格式EPSG:XXXX(例如EPSG:4326)返回典型的EPSG号。以经度/纬度(x / y)的顺序格式化地理坐标。
WFS 1.1.0和2.0.0支持动态重新投影数据,这支持在本机SRS以外的SRS中返回数据。
WFS 2.0.0引入了新版本的过滤器编码规范,增加了对时间过滤器的支持。
WFS 2.0.0支持通过GetFeature请求进行联接。
WFS 2.0.0增加了通过startIndex和count参数分页GetFeature请求的结果的功能。GeoServer现在在WFS 1.0.0和1.1.0中支持此功能。
WFS 2.0.0支持存储的查询,这是存储在服务器上的常规WFS查询,因此可以通过将适当的标识符与WFS请求一起传递来调用它们。
WFS 2.0.0支持SOAP(简单对象访问协议)作为OGC接口的替代方法。
在GeoServer中,将WFS服务划分为三个级别:
- Basic WFS:常用的WFS,支持GetCapabilities、 DescribeFeatureType、GetFeature操作,在功能上意味着是一个只读的数据服务;
- Transaction WFS:也成为WFS-T,必须在Basic WFS基础上加上Transaction操作以支持编辑数据(包含创建、删除、更新等操作);
- Complete WFS:支持包括对事务级别操作的LockFeature接口,LockFeature操作通过处理一个或多个功能类型实例上的锁定请求来帮助解决相关资源之间的链接。
在服务的"发布"tab页中的WFS设置中可以设置:
接口 | 操作类型 | 说明 |
---|---|---|
GetCapabilities | discovery | 获取该WFS服务支持的操作和服务的元数据文档 |
DescribeFeatureType | discovery | 获取WFS服务支持的功能类型的描述(图层属性字段等) |
GetPropertyValue | query | 根据要素属性值或部分属性值进行查询,返回符合表达式的要素 |
GetFeature | query | 从数据源中,获取指定图层符合条件的数据要素集 |
GetFeatureWithLock | query & locking | 返回并锁定指定图层的符合要求的要素,默认锁300s |
LockFeature | locking | 对指定的要素进行锁定,以保证一致性 |
Transaction | transaction | 对要素服务中的数据要素进行增删改的操作 |
CreateStoredQuery | stored query | 在服务端创建一个存储查询表达式 |
DropStoredQuery | stored query | 在服务端删除一个存储查询表达式 |
ListStoredQueries | stored query | 获取服务器上的存储查询变量列表 |
DescribeStoredQueries | stored query | 获取服务器上的每个存储查询表达式的详细元数据。 |
**请求流程:**当一个客户端想要访问WFS服务时,一般会涉及到以下的流程。
- 通过操作获取WFS服务支持的操作和要素类
- (可能)通过操作获取WFS服务支持的要素类的定义
- 客户端发送某个操作的请求
- WFS服务处理请求
- WFS服务返回处理的结果和状态
上面几个步骤中所提到的操作包括:
- GetCapabilities(获取该WFS服务支持的操作和服务的元数据文档)
- DescribeFeatureType(获取描述要素类的信息)
- GetFeature(获取要素)或GetGmlObject(通过XLink获取GML对象)
- Transaction(创建、更新、删除数据的事务操作)
- LookFeature(在事务过程中锁定要素)
# GetFeature
GetFeature操作返回的是选择的数据源信息和要素集,所以请求是针对特定的图层名称来执行GetFeature请求的。GetFeature操作可用使用CQL filters(cql_filter参数)来指定ECQL(Extended Common Query Language)格式的过滤器,通过过滤器筛选符合条件的要素集。
请求示例
http://localhost:8080/geoserver/wfs?request=GetFeature&version=1.1.0&typeName=topp:states&outputFormat=GML2&FILTER=%3CFilter%20xmlns=%22http://www.opengis.net/ogc%22%3E%3CFeatureId%20fid=%22states.23%22/%3E%3C/Filter%3E
参数 | 是否必须 | 说明 |
---|---|---|
version | 是 | 服务版本,默认1.1.0 |
service | 是 | WFS |
request=GetFeature | 是 | 请求接口 |
typename | 是 | 指定操作的图层名称(命名空间+图层名) |
outputformat | 输出的文本格式(GML2、GML3、JSON、CSV、JSONP、Shapefile) | |
bbox | 边界 | |
filter | 查询条件,xml文本(CQL/ECQL) | |
sortby | 排序,1.1.0及以上版本才有效 | |
maxfeatures | 返回要素集的最大记录数 | |
propertyname | ||
srsname | ||
faetureid | 要素id |
# GetCapabilities
请求示例
http://localhost:8080/geoserver/wfs?service=wfs&version=1.1.0&request=GetCapabilities
参数列表
param | o/m |
---|---|
service | must(值为WFS) |
version | must |
request | must |
响应示例
# DescribeFeatureType
返回所指定的WFS服务支持的要素类型的描述(图层属性字段等)。
请求示例
http://localhost:8080/geoserver/wfs?service=wfs&version=2.0.0&request=DescribeFeatureType&typeNames=topp:states
参数列表
param | o/m |
---|---|
service | must |
version | must |
request | must |
typeNames | must |
exceptions | option |
outputFormate | option |
响应示例
# Transaction
在OWS规范中知道,Web服务体系规范的HTTP接口参数有XML和KVP两种形式,但WFS要求服务的Transaction
接口必须由XML描述,另外空间数据交互必须由GML进行,数据过滤采用CQL语言。
每个事务将由零个或者多个插入、更新和删除元素组成,每个事务元素按顺序执行。
每个GeoServer事务都是原子的,这意味着如果任何元素失败,则事务将被放弃,并且数据将保持不变。 支持事务的 WFS服务器有时也称为WFS-T服务器。
Insert
<?xml version="1.0"?> <wfs:Transaction version="1.1.0" service="WFS" xmlns="http://www.someserver.com/myns" xmlns:gml="http://www.opengis.net/gml" xmlns:ogc="http://www.opengis.net/ogc" xmlns:test="http://localhost:8080/test" xmlns:wfs="http://www.opengis.net/wfs" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.someserver.com/myns http://www.someserver.com/wfs/cwwfs.cgi? http://www.opengis.net/wfs ../wfs/1.1.0/WFS.xsd"> <wfs:Insert inputFormat="text/xml;subtype=2.1.2" idgen="UseExisting"> <test:tiger_roads gml:id="10002"> <cfcc>A94</cfcc> <name>测试</name> <geom> <MultiLineString srsName="EPSG:3857"> <lineStringMember> <LineString> <coordinates>-8237795.685217111,4980323.905513588 -8238827.585098961,4978584.963120101</coordinates> </LineString> </lineStringMember> </MultiLineString> </geom> </test:tiger_roads> </wfs:Insert> </wfs:Transaction>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29Update
<?xml version="1.0"?> <wfs:Transaction version="1.1.0" service="WFS" xmlns="http://www.someserver.com/myns" xmlns:gml="http://www.opengis.net/gml" xmlns:ogc="http://www.opengis.net/ogc" xmlns:test="http://localhost:8080/test" xmlns:wfs="http://www.opengis.net/wfs" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.someserver.com/myns http://www.someserver.com/wfs/cwwfs.cgi? http://www.opengis.net/wfs ../wfs/1.1.0/WFS.xsd"> <wfs:Update typeName="tiger_roads"> <wfs:Property> <wfs:Name>name</wfs:Name> <wfs:Value>测试Insert312</wfs:Value> </wfs:Property> <ogc:Filter> <ogc:GmlObjectId gml:id="tiger_roads.8338"/> </ogc:Filter> </wfs:Update> </wfs:Transaction>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23Delete
<?xml version="1.0" ?> <wfs:Transaction version="1.1.0" service="WFS" xmlns="http://www.someserver.com/myns" xmlns:ogc="http://www.opengis.net/ogc" xmlns:wfs="http://www.opengis.net/wfs" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wfs ../wfs/1.1.0/WFS.xsd"> <wfs:Delete typeName="tiger_roads"> <ogc:Filter> <ogc:GmlObjectId gml:id="tiger_roads.8337"/> </ogc:Filter> </wfs:Delete> </wfs:Transaction>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# WCS
WCS全称是Web Coverage Services,即网络覆盖服务。从"覆盖"二字大体可以知道它应该和连续性数据有关。
GIS大体有两种数据模型:
- 一种是离散数据模型,即矢量数据模型,它的数据结构是由离散的点组织而成。离散数据模型适用于表示离散的地理事物,比如河流、道路、房屋建筑等。
- 另一种是连续数据模型,即栅格数据模型,它的数据结构是由一个个像元组织而成。连续数据模型适用于表示高程、海拔、雨水量这些在地理层面连续的特征或者信息。
WCS就是一种与连续数据模型(栅格数据模型)相关的WebGIS规范,它可以发布卫星影像、数字高程数据等数据。WebGIS服务器基于WCS规范发布栅格数据服务,WebGIS客户端就能基于WCS规范使用对应的栅格数据服务。
WCS和WMS从WebGIS服务器返回的都是图像,但是WCS具有多维的信息,它能够返回更多的详细信息。
WCS服务支持以下操作:
- GetCapabilities —— 请求服务的元数据
- DescribeCoverage —— 请求服务的完整描述
- GetCoverage —— 请求服务的数据
下图是AbstractCoverage
接口的类图:
# GetCapabilities
GetCapabilities操作能够获取WCS服务的元数据,它支持如下参数:
当安装完GeoServer后,会发现其实它默认包含了如下WCS服务示例:
我们就来尝试请求这些WCS服务的元数据:
http://localhost:8080/geoserver/ows?service=WCS&version=2.0.1&request=GetCapabilities
将会返回一个包含元数据的XML文档,主要包含如下信息:
以上告诉我们也可以使用WMS访问WCS发布的栅格图像,同时说明了当前GeoServer实现了以下版本的WCS:2.0.1、1.1.1、1.1.0。
可以使用如上的格式请求WCS发布的栅格图像。
<wcs:Contents></wcs:Contents>中包含如上所示的多个<wcs:CoverageSummary></wcs:CoverageSummary>,每个<wcs:CoverageSummary></wcs:CoverageSummary>包含一个WCS服务的工作区、图层名、边界框、空间参考系统等信息。
# DescribeCoverage
DescribeCoverage操作可以请求WCS服务的完整描述,它支持如下参数:
http://localhost:8080/geoserver/ows?service=WCS&version=2.0.1&request=DescribeCoverage&coverageId=sf:sfdem
请求返回的XML文档中包含如下信息:
详细来说,<gml:boundedBy></gml:boundedBy>
包含栅格数据在坐标系中的范围信息(左下角坐标和右上角坐标):
<gml:domainSet></gml:domainSet>
包含栅格信息
<gmlcov:rangeType></gmlcov:rangeType>
包含像素深度信息:
<wcs:ServiceParameters></wcs:ServiceParameters>
包含如下信息:
# GetCoverage
GetCoverage操作能够请求WCS服务的数据,它支持如下参数:
http://localhost:8080/geoserver/ows?service=WCS&version=2.0.1&request=GetCoverage&coverageId=sf__sfdem&format=image/tiff
直接返回一个sf_sfdem的geotiff格式的栅格数据,在桌面端打开显示如下:
# WMTS
为了更快的将地图数据在前端显示,可以为一些数据不会变更或变动较小的服务创建地图缓存(Cache)。WMTS是一种采用图像金字塔的方式将地图服务按照预先设置的某种切图策略创建的地图缓存服务。
# 地图缓存
地图缓存是一个包含了不同比例尺下整个地图范围的地图切片目录,是预先按照显示切图等级、比例尺、切图原点、DPI、图片大小等参数创建的静态图片,用于提高地图服务的响应速度。数据格式通常采用PNG
或JPG
。
当前端向地图服务器请求时可以直接根据切图等级、行号、列号获取已缓存的图片,不用像动态地图服务那样根据地图当前范围动态地生成图片再响应到前端。
GeoServer
创建缓存的方式有两种:
- 一种是当用户查看地图时创建浏览的地图范围及相应等级下的部分缓存,主要优点是,它不需要预处理,并且仅缓存已请求的数据,因此也可节省磁盘空间。该方法的缺点是地图查看只会间歇性地加速,从而降低了用户体验的质量;
- 另一种方式是通过Seed创建,缺点是Seed可能是非常耗时和磁盘消耗的过程。
# GetCapabilities
获取元数据信息,包含服务支持的操作、提供wmts服务的图层及其拥有的切图策略、输出格式等等信息。
http://localhost:8080/geoserver/gwc/service/wmts?service=WMTS&version=1.0.0&request=GetCapabilities
# GetTile
获取缓存的瓦片。
http://localhost:8080/geoserver/gwc/service/wmts?layer=topp%3Astates&style=&tilematrixset=EPSG%3A4326&Service=WMTS&Request=GetTile&Version=1.0.0&Format=image%2Fpng&TileMatrix=EPSG%3A4326%3A5&TileCol=12&TileRow=8
# GetFeatureInfo
获取点选的要素信息,其中的参数J为所在图块中的行号,I为列号。
http://localhost:8080/geoserver/gwc/service/wmts?VERSION=1.0.0&LAYER=topp:states&STYLE=&TILEMATRIX=EPSG:4326:5&TILEMATRIXSET=EPSG:4326&SERVICE=WMTS&FORMAT=image/png&SERVICE=WMTS&REQUEST=GetFeatureInfo&INFOFORMAT=text/html&TileCol=12&TileRow=9&I=213&J=11