我一直在关注我的 webgis 项目的 openlayers 初学者指南。我有一个疑问:假设 openlayers 地图客户端向 wms 服务器发出“基本”类型图层的请求,该请求将在所有缩放级别显示。因此,在每个缩放级别都不同。生成瓷砖,并且不会损失图像的分辨率。所以这里我的问题是“在 wms 服务器中,这些图像是如何呈现的?......它是根据我们的要求从单个高分辨率图像中生成图块,还是在服务器中预先保存具有不同分辨率的图块??我希望你了解我的问题..谢谢!
2 回答
在 WMS 中,瓷砖或多或少地预先保存在服务器上。您当然可以从一张高分辨率图像计算切片金字塔,但这些切片随后会保存到服务器(如在缓存地图服务中)。我认为出于性能原因,这些图块是在服务器上预渲染的,请参见示例Bing Maps。
每次请求生成图块会花费太多时间。如果您有高分辨率光栅图像,请尝试使用gdal2tiles为 TMS(瓷砖地图服务)创建自己的瓷砖金字塔,看看这需要多长时间。
OGC WMS(Web 地图服务)是一种服务,可根据客户端的请求提供地图,例如使用 OpenLayers 构建的地图。用作源的数据可以是栅格或矢量或某种组合。虽然一些 WMS 还提供缓存,但需要注意的是,在标准配置中,WMS 会生成应请求发送的地图。这与OGC WMTS(Web Map Tile Service)或 TMS 不同。
WMS 的动态特性可以在对 GetCapabilities 请求的响应中看到,例如:
http://ogc.bgs.ac.uk/cgi-bin/BGS_BGS-HPA_Radon_Potential/wms?service=WMS&request=GetCapabilities&
查看这部分内容,我们可以看到:
您可以请求多种地图图像格式
<GetMap>
<Format>image/png</Format>
<Format>image/jpeg</Format>
<Format>image/png; mode=8bit</Format>
<Format>application/x-pdf</Format>
<Format>image/svg+xml</Format>
<Format>image/tiff</Format>
<Format>application/vnd.google-earth.kml+xml</Format>
<Format>application/vnd.google-earth.kmz</Format>
您可以在许多不同的投影中请求图层:
<CRS>CRS:84</CRS>
<CRS>EPSG:27700</CRS>
<CRS>EPSG:3034</CRS>
<CRS>EPSG:3413</CRS>
<CRS>EPSG:3857</CRS>
<CRS>EPSG:4258</CRS>
<CRS>EPSG:4326</CRS>
<CRS>EPSG:900913</CRS>
并且您还可以通过 SLD 提供您自己的样式来更改默认符号:
<sld:UserDefinedSymbolization SupportSLD="1" UserLayer="0" UserStyle="1" RemoteWFS="0" InlineFeature="0" RemoteWCS="0"/>
考虑这个例子:
通过您请求地图的某些客户端,客户端会生成 GetMap 请求,例如:
给出:
在客户端中,您单击某个点位置以获取有关创建地图的数据的信息,例如:
从这里您可以看到基础数据(在本例中为矢量数据集,保存在数据库中)具有包含地质历史值的属性。
我们想知道地图中的其他区域来自三叠纪,因此我们创建了一个根据查询为地图着色的 SLD,并将该 SLD 作为 GetMap 请求的一部分发送回服务器,例如:
生成的 SLD:
完整的 GetMap 请求:
给出: