WebGIS开发:常见地图服务介绍
山已几202007 2024-09-03 08:33:10 阅读 77
目录
WMS(Web Map Service)服务功能和特点核心组成GetMapGetCapabilitiesGetFeatureInfo
WFS(Web Feature Service)服务功能和特点核心组成GetFeatureTransaction
栅格瓦片服务TMS(Tile Map Service)、WMTS(Web Map Tile Service)相同点不同点
矢量切片(Vector tile)简单介绍与栅格切片的不同点
引用
地图服务是指通过互联网或局域网等网络技术,将地理空间数据以标准化格式发布和提供访问的服务。这些服务能够将复杂的地理信息数据转化为易于理解和操作的地图形式,使用户能够在地图上直观地浏览、查询、分析和交互地理信息。将常见的栅格和矢量数据发布为地图服务后,可以通过网络进行分发和共享。不同用户可以同时访问同一份数据,实现数据的共享和协作,避免了数据副本的管理和同步问题。
地图服务通常通过标准的Web服务接口来提供访问,常见的包括WMS(Web Map Service)、WFS(Web Feature Service)、栅格瓦片【TMS(Tile Map Servcie)、WMTS(Web Map Tile Service)】、矢量切片(Vector tile)等。
WMS(Web Map Service)服务
WMS(Web Map Service)是一种用于在Web上发布地图的标准化服务,允许客户端动态请求地图图像,并以图像形式返回地图数据的服务接口,支持各种地理空间数据的动态显示和交互,是构建现代WebGIS应用不可或缺的基础技术之一。
功能和特点
地图图层服务: WMS服务允许用户请求特定的地图图层,并返回由服务器动态生成的地图图像。这些图像可以是矢量数据(如点、线、面)、栅格数据(如影像)或符号化的数据。
标准化接口: WMS定义了一组标准的HTTP请求和响应参数,使得不同的地图服务器和客户端能够按照同一套规范进行数据交换。这样可以实现跨平台和跨系统的互操作性。
动态地图生成: 每次客户端请求地图时,WMS服务器都会根据请求的参数(如地图范围、分辨率、图层样式等)动态生成地图图像。这种方式使得地图可以根据用户需求进行实时更新和定制。
核心组成
GetMap
GetMap请求用于获取特定地理区域和缩放级别的地图图像,这个操作也是WMS服务最主要的功能。不难想象,为了保证正确的输出结果,我们必须配置足够多的参数,比如地理范围,空间参考、输出宽高以及格式等。
请求参数
SERVICE:必须参数,值为“WMS”。
REQUEST:必须参数,值为“GetMap”。
VERSION:可选参数,指定WMS协议的版本。
LAYERS:必须参数,指定要显示的图层名称(用逗号分隔)。
STYLES:可选参数,指定每个图层的样式(用逗号分隔)。如果未指定,则使用默认样式。
CRS(或SRS):必须参数,指定坐标参考系统(CRS)或空间参考系统(SRS)。
BBOX:必须参数,指定地图的地理边界框,格式为“minx,miny,maxx,maxy”。
WIDTH:必须参数,指定图像的宽度(像素)。
HEIGHT:必须参数,指定图像的高度(像素)。
FORMAT:可选参数,指定图像格式(如image/png、image/jpeg等)。
TRANSPARENT:可选参数,指定图像是否透明(仅对支持透明的格式有效,如PNG)。
请求样例
http://ip:端口/geoserver/workspace/wms?
&request=GetMap
&layers=workspace:layerName
&SERVICE=WMS
&VERSION=1.3.0
&FORMAT=image/png
&TRANSPARENT=true
&BBOX=12502412.8429975,3442429.2023363034,12502528.022852553,3442544.382191355
&CRS=EPSG:3857
&STYLES=
FORMAT: image/png
&WIDTH=1077
&HEIGHT=1307
响应内容
GetMap请求返回一个图像文件,通常是PNG、JPEG或GIF格式的图像。这张图像显示了指定区域的地图数据,并可能包括多个图层的叠加效果。
GetCapabilities
这是WMS服务的核心请求,用于获取WMS服务的元数据信息,包括支持的地图图层、坐标系统、图像格式、地图范围等。
请求参数
SERVICE:必须参数,值为“WMS”。
REQUEST:必须参数,值为“GetCapabilities”。
VERSION:可选参数,指定WMS协议的版本(例如1.1.1、1.3.0)
请求样例
http://ip:端口/geoserver/workspace/layerName/wms?service=WMS&version=1.1.0&request=GetCapabilities
响应内容
GetCapabilities请求返回的是一个XML文档,包含了以下信息:
服务描述:服务的标题、描述、服务提供者信息等。
版本信息:WMS服务所支持的版本。
图层信息:每个图层的详细描述,包括图层的名称、标题、摘要、坐标参考系统(CRS)、样式信息、服务范围等。
支持的操作:列出服务支持的请求类型(如GetMap、GetFeatureInfo等)。
坐标参考系统:服务支持的坐标参考系统(CRS)及其投影信息。
GetFeatureInfo
GetFeatureInfo请求用于获取地图上某个特定位置的详细信息。用户通常在地图上点击某个位置,使用此请求获取该位置的属性数据和矢量信息(但是不完全)。GetFeatureInfo请求参数包含了GetMap请求的大部分参数,主要因为要获取地图某一点的要素信息,就先得把地图给获取了。
请求参数
SERVICE:必须参数,值为“WMS”。
REQUEST:必须参数,值为“GetFeatureInfo”。
VERSION:可选参数,指定WMS协议的版本。
QUERY_LAYERS:必要参数,要查询的层级列表,以逗号分隔。
STYLES:可选参数,指定每个图层的样式(用逗号分隔)。
CRS(或SRS):必须参数,指定坐标参考系统(CRS)或空间参考系统(SRS)。
BBOX:必须参数,指定地图的地理边界框。
WIDTH:必须参数,指定图像的宽度(像素)。
HEIGHT:必须参数,指定图像的高度(像素)。
I:必须参数,指定点击位置在图像中的X坐标(像素)。
J:必须参数,指定点击位置在图像中的Y坐标(像素)。
INFO_FORMAT:可选参数,指定返回的信息格式(如text/html、application/json、application/vnd.ogc.gml等)。
请求样例
http://ip:端口/geoserver/workspace/wms?
SERVICE: WMS
&VERSION=1.3.0
&REQUEST=GetFeatureInfo
&LAYERS=workspace:layerName
&QUERY_LAYERS=workspace:layerName
&BBOX=12502412.8429975,3442429.2023363034,12502528.022852553,3442544.382191355
&INFO_FORMAT=application/json
&STYLES=
&FORMAT=image/png
&I=50
&J=50
&CRS=EPSG:3857
&WIDTH=101
&HEIGHT=101
响应内容
GetFeatureInfo请求返回一个包含特定位置的属性数据的文档,格式根据INFO_FORMAT参数确定。通常返回的内容包括该位置的详细信息,如属性值、描述等。
WFS(Web Feature Service)服务
WFS(Web Feature Service)是另一种由开放地理空间信息联盟(OGC)制定的标准,用于通过互联网提供地理空间数据的要素。与WMS不同,WFS主要提供原始的地理数据要素,允许用户访问、查询和操作地理信息。以下是WFS的功能、特点和核心组成的详细介绍:
功能和特点
地理数据访问:WFS提供对地理空间数据要素的访问,用户可以获取原始的地理数据(如点、线、多边形)。
数据查询:用户可以执行空间和属性查询,以检索符合特定条件的地理数据要素。例如,可以查询某个区域内的所有建筑物。
数据操作:支持对地理数据要素的操作,包括获取、插入、更新和删除(操作能力依赖于服务提供者是否支持这些操作)。
核心组成
GetFeature
GetFeature请求用于获取符合指定条件的地理要素数据。用户可以根据空间位置、属性值等条件进行查询。根据GetFeature可以快速获取到符合信息数据的全部信息,包括属性值、完整的矢量信息等。
请求样例
请求方式:POST请求
url:http://ip:端口/geoserver/workspace/wfs
data传入xml信息:ididValue
响应内容
一个包含符合条件的地理要素数据的文档,通常以GML格式返回,也可以是其他格式如JSON。
Transaction
Transaction请求用于执行对地理数据的操作,包括插入、更新和删除等,此请求允许客户端修改服务中的地理数据。在使用GeoServer执行WFS的Transaction请求时,通常需要进行身份验证。
请求样例
请求方式:POST请求
auth:账户密码
url:http://ip:端口/geoserver/workspace/wfs
data传入xml信息:ididValueotherotherValuegeom
{多边形的顶点坐标}
响应内容
一个XML文档,描述操作的结果,如成功或失败信息
栅格瓦片服务TMS(Tile Map Service)、WMTS(Web Map Tile Service)
其实在栅格瓦片地图服务(tms和wmts)之前,为了解决影像数据的显示,大家使用的都是WMS服务,在前端渲染地图时,会把当前显示的地理范围传递给服务器,然后服务器去影像数据上搜索这个范围并导出为合适分辨率的图片,然后返回给前端进行显示,但是这种策略耗时不稳定,有时长有时短,因而促生了栅格瓦片地图服务。
两种类型的栅格瓦片地图服务的共同目标都是通过瓦片(Tiles)技术来高效地提供地图数据。它们通过将地图分割成小块,使得客户端只需按需加载这些小块,从而提高了地图加载速度和用户体验。同时两种都采用类似的瓦片结构,将地图按缩放级别分割成固定大小的瓦片(如256x256像素),然后都通过HTTP请求来获取特定的瓦片图像,客户端根据缩放级别、行号和列号来构建请求URL。
相同点
1)瓦片尺寸相同
实际上,TMS定义的是正方形,WMTS定义的瓦片尺寸是矩形,但是绝大多数的瓦片尺寸都是256x256,少数是512x512,很少见不是正方形的瓦片,这也是一种约定俗成的标准:无论哪种栅格瓦片地图服务都使用正方形瓦片,主要原因是简化地图系统的处理和渲染过程,并提高地图数据的可管理性和效率,使得地图服务在不同平台和应用中更容易实现和交换。
2)两者的地图切片原理是相同的(都是瓦片金字塔),并存储为png或者jpeg
不同点
1)原点和轴向(主要原点和Y轴方向不同)
TMS:原点在左下角,Y轴自下向上,X轴自左向右
WMTS:原点在左上角,Y轴自上向下,X轴自左向右
2)url模板
WMTS:http://t0.tianditu.gov.cn/img_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=img&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}
其中,TileMatrixSet代表坐标系,TileMatrix代表瓦片层级,TileRow和TileCol代表瓦片在TileMatrix层级下的行列号
TMS:https://tile.openstreetmap.org/{z}/{x}/{y}.png
其中,{z}代表瓦片层级,{x}{y}代表瓦片在z层级下的位置
3)定义组织不同
OGC中文名为开放地理空间信息联盟,这个组织就和前端的W3C一样,是一个标准制定组织。它定义了wmts、wfs、wms、3dtiles等地图服务标准,其官网地址:https://www.ogc.org/
OSGeo中文名为开源空间信息基金会,是一个全球性非营利性组织,目标是支持全球性的合作,建立和推广高品质的空间信息开源软件。GIS领域的许多知名软件和库比如:GDAL、PostGIS、QGIS等等都是这个组织搞出来的,其官网地址:https://www.osgeo.org/,那为啥它要定义一个tms呢,因为当年还没有wmts,其实就和前端一样,某个特性或者”标准“大家已经约定俗成了,但是标准制定组织还没想好怎么定义呢或者还没纳入它的标准中呢,标准指定组织落后了拖后腿,那你没有我就自己定义了,当你定义的栅格瓦片地图服务标准wmts出现以后,我的标准tms已经广为流传了,就导致了今天的局面:tms和wmts并存。
矢量切片(Vector tile)
简单介绍
由于栅格瓦片服务返回的数据本身是一张图片,真正的几何要素在服务器预渲染的过程丢失了,因此在客户端想要获取几何或属性信息时又需要向后端服务再次请求。同时切片的样式和数据没有分离,如果需要多个样式的地图就需要生成多个对应的切片数据集。数据需要在服务端预先切分,现实地物发生变化后,服务器端重新生成切片需要时间,难以快速更新。随着用户对数据实时性、美观性以及交互性的要求越来越高,栅格瓦片服务逐渐难以满足用户的需要,矢量切片技术应运而生。
矢量切片,也是基于四叉树金字塔模型对地图数据切分得到的,切分的不是图片而是矢量数据本身。在切分过程中,原始的矢量数据分层分块被裁剪到对应的矩形区域内,并按照切片所在的切分层级,进行相应的抽稀简化等操作。切片通常为GeoJSON、TopoJSON或MVT三种格式,其中MVT格式的矢量切片压缩率较高、体积更小,较为常用。MVT的矢量切片在使用时通常会被编码为 Google Protobufs (PBF)格式,因此也有些矢量切片服务返回的是.pbf后缀名的数据。矢量数据被切分为切片数据集并部署在服务器端后,客户端就可以通过分别请求当前视口范围内对应的矢量瓦片、所需的标注字体、图标以及样式文件等,在客户端进行渲染输出地图。无论是Mapbox还是高德地图、百度地图,如今打开F12看到的数据源请求不是当年传统的一张张图片切片,而是一种protobuf格式的压缩的二进制数据。
与栅格切片的不同点
由上图可知,栅格切片技术是重服务端得,将地理数据的配色、渲染和切片都放在服务端进行处理,客户端几乎什么都不要做的;而矢量切片技术是重客户端得,服务端就做下数据切片即可,也就是说栅格切片到矢量切片得转换本质上是将地图渲染从服务端迁移到客户端渲染。
技术上来说,矢量切片直接复用了基于XYZ的地图切片技术原理进行数据切片(这一点和栅格切片是一样的思路),切片数据使用谷歌的Protobuf进行数据压缩以优化网络传输效率,然后在客户端结合WebGL技术进行大量地理数据的渲染。Protobuf和WebGL自2015年以来在web地图领域已成为主流技术的核心部分,而在栅格切片的年代,前端还没有进入H5和WebGL的年代,受制于当时的技术用图片直接拼图就成了必然的选择了。
从用户需求上来说,普通用户(移动端为主)需要地图体验更好,流畅平滑,总不能买个7,8000的手机,就只能看看地图图片吧,很明显这么原始的app和如今我这个高端手机格格不入,所以需要优化产品和体验,要对得起用户的好手机对得起用户的身份。而对企业用户来说,底图是必须的,但有时候我用不到这么复杂的地物,东西太多我的业务就不突出了感觉很乱,我也不喜欢这个底图样式,花花绿绿的不符合我这个企业业务展示需求,不够凸显业务主题等等,能控制下图层的显隐,能改下底图的样式吗?
简单对比下矢量切片和栅格切片比较明显的差异有如下几点:
浏览时,由于地图有缩放级别,在放大缩小时,比如从地图级别8放大到9,矢量切片由于渲染在前端,可以在8、8.1、8.2…9之间渲染,给人感觉就是“无极缩放”,顺畅平滑,用户体验好;而栅格切片直接从8跳到9显示,给人感觉就是地图突然一蹦的感觉,突兀。交互时,矢量都是可点击的,栅格可能还要从客户端发送请求到服务端查询,这现在少了很多请求可以对服务器减压。
图层控制能力,可以在客户端控制哪些图层要显示哪些图层不能显示;而栅格切片是要么都显示要么不显示。
主题定制能力,由于客户端可以直接访问到矢量数据,地图要素可以渲染的非常复杂和精细,样式可以在客户端控制,呈现的样式可以更加丰富多样,矢量切片是一份数据+多套样式主题,可以根据业务要求随时切换,也会支持用户自定义设计,业务友好型;而栅格切片就是我就这样了,你爱用不用哦。。。
数据生成成本,矢量瓦片的数据体积较小,生成速度更快,样式与数据解耦,减少了服务器端存储的数据体积,减少了预切片的时间,更有利于地图数据的快速更新。由于底图地理数据变化很快,栅格切片方案生产流程复杂点,对服务器资源要求更高,矢量切片将渲染交给客户端实现,服务端反而减负了,有利于互联网地图商节约设备成本。
引用
网络地图服务(WMS)详解
网络要素服务(WFS)详解
Web地图服务规范之栅格瓦片地图服务:WMTS(WebMapTileService,网络地图瓦片服务)、TMS(TileMapService,瓦片地图服务)和XYZ
矢量切片简介及前端加载
PostGIS矢量切片技术助力GIS可视化
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。