--- title: WMS简述 date: 2020-03-27 author: ac tags: - WMS categories: - GIS --- ## 1. WMS(Web Map Service) 对于经常变动的空间数据通常将其发布成动态地图服务,`WMS`则是一个动态数据、定制地图(需结合`SLD`标准)的理想解决方案,根据请求范围在服务端动态生成数据渲染的图片返回客户端。 `GeoServer`为`WMS`提供1.1.1和1.3.0版本的支持。 版本1.1.1和1.3.0之间的主要区别是: 1. 在1.1.1中,使用`EPSG`名称空间指定的地理坐标系被定义为具有经度/纬度的轴顺序。在1.3.0中,顺序为纬度/经度。 2. 在`GetMap`操作中,`srs`参数在1.3.0中被`crs`替换。无论版本如何,`GeoServer`都支持这两个参数。 3. 在`GetFeatureInfo`操作的x和y参数在1.3.0版中被称为i和j。除处于CITE兼容模式下外,`GeoServer`均支持两个参数,而与版本无关。 ```javascript 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&… ``` `WMS`可以分为两类: 1. `Basic WMS`(就是最常被提及的`WMS`,支持`GetCapabilities`/ `GetMap`操作) 2. `Queryable WFS`(是在`Basic WMS`基础上加上`GetFeatureInfo`操作) ## 2. WMS支持的操作 `WMS`除了可以动态生成当前地图视图范围内的图层服务的图片并响应到前端供地图展示,还提供根据地图上像素点获取图层要素信息的查询操作接口。 | 接口 | 描述 | | --------------- | ------------------------------------ | | GetCapabilities | 获取服务中的要素类及支持的操作 | | GetMap | 获取服务器生成的地图图片 | | GetFeatureInfo | 根据地图上的像素点获取详细的要素信息 | > 以下的示例数据为`GeoServer`自带的示例数据服务。 ` WMS`中只规定了`KVP`格式的请求。(`OWS`规范中的HTTP请求参数编码有`KVP`和`XML`两种) ### 2.1 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 | **响应示例**: 响应是功能XML文档,该文档是`WMS`服务的详细说明。它包含三个主要部分: 1. Service(服务)。包含服务元数据,例如服务于服务器的组织的服务名称,关键字和联系信息。 2. Request(请求)。描述`WMS`服务提供的操作以及每个操作的参数和输出格式。 3. Layer(层)。 列出可用的坐标系和图层。在`GeoServer`中,图层以“名称空间:图层”的形式命名。每一层都提供服务元数据,例如标题,摘要和关键字。 ![在这里插入图片描述](./images/20200315123643938.png) ### 2.2 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 ![在这里插入图片描述](./images/20200315125102393.png) `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 | | | > layers参数中的值和styles样式参数中的值之间存在一一对应关系。 **版本差异** `GeoServer`中`WMS`版本1.1.1和1.3.0之间的主要区别是: 1. 在1.1.1中,使用EPSG名称空间指定的地理坐标系被定义为具有经度/纬度的轴顺序。在1.3.0中,顺序为纬度/经度。 2. 在GetMap操作中,srs参数在1.3.0中被crs替换。无论版本如何,GeoServer都支持这两个参数。 3. 在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.3 **GetFeatureInfo** `GetFeatureInfo`操作请求地图上给定位置的要素的空间和属性数据。 与`WFS` `GetFeature`操作类似,但是在输入和输出方面都不太灵活。因为GetFeatureInfo请求使用的参数是getMap操作返回的WMS图像的(x,y)像素值。 操作示例: 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 **参数列表**: | 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 | **响应结果**: ![在这里插入图片描述](./images/20200315131534351.png)