1. 功能简介
WMS服务,WMS是OGC标准中比较简单也是比较重要的标准之一。它全称是“Web Map Service”(网络地图服务);利用具有地理空间位置信息的数据制作地图。其中将地图定义为地理数据可视的表现。这个规范定义了三个操作:GetCapabilities返回服务级元数据,它是对服务信息内容和要求参数的一种描述; GetMap返回一个地图影像,其地理空间参考和大小参数是明确定义了的;GetFeatureInfo(可选)返回显示在地图上的某些特殊要素的信息;
可能大家会混淆和WMTS服务的区别; WMTS提供了一种采用预定义图块方法发布数字地图服务的标准化解决方案。WMTS弥补了WMS不能提供分块地图的不足。WMS针对提供可定制地图的服务,是一个动态数据或用户定制地图(需结合SLD标准)的理想解决办法。WMTS牺牲了提供定制地图的灵活性,代之以通过提供静态数据(基础地图)来增强伸缩性,这些静态数据的范围框和比例尺被限定在各个图块内。这些固定的图块集使得对WMTS服务的实现可以使用一个仅简单返回已有文件的Web服务器即可,同时使得可以利用一些标准的诸如分布式缓存的网络机制实现伸缩性。
WMTS相比WMS,牺牲掉灵活性来换取性能,返回的都是基础地图,所有静态数据的范围框和比例尺统统被限定在各个图块(瓦片)中。然后这些图块集使得对WMTS的实现只需要一个仅仅返回简单已有文件的web服务器即可。WFS与两者都不同,返回的是矢量数据,用于增删改操作。
我们今天来讲一下用PIESDK如何加载一份WMS服务数据
2. 功能实现说明
2.1 . 实现思路及原理说明
第一步 |
设置WMS服务路径URL |
第二步 |
根据URL得到WMS图层WMSLayer |
第三步 |
得到服务包含的图层的并选择需要要显示的图层的名称layerName |
第四步 |
利用IWMSLayer接口的SerLayer方法将图层位layerName添加到地图控件中并设置显示范围 |
2.2 . 核心接口与方法
接口/类 |
方法 |
说明 |
PIE.Carto.IWMSLayer |
GetWMSCapabilities |
得到图层的信息(获取服务元数据信息) |
SetLayers |
设置图层的集合 |
2.3 . 示例代码
视频路径 |
百度云盘地址下/PIE视频教程/03.数据加载/15.打开WMS服务数据.avi |
示例代码 |
|
1 /// <summary> 2 /// WMS服务加载 3 /// </summary> 4 public override void OnClick() 5 { 6 string url = "http://172.16.10.114:8080/geoserver/World/wms"; 7 IWMSLayer wmsLayer = new WMSLayer(url); 8 if (wmsLayer == null) return; 9 10 IList<WMSCapabilities> list = wmsLayer.GetWMSCapabilities(); 11 List<string> layerList = new List<string>(); 12 //得到服务的图层列表 13 foreach (WMSCapabilities item in list) 14 { 15 layerList.Add(item.Layer); 16 } 17 string layerName = ""; 18 for (int i = 0; i < layerList.Count; i++) 19 { 20 layerName = layerList[i]; 21 if (string.IsNullOrEmpty(layerName)) continue; 22 break; 23 } 24 25 wmsLayer.SetLayers(layerName);//加载服务的第一个图层 26 ILayer layer = wmsLayer as ILayer; 27 layer.Name = "WMS服务"; 28 m_HookHelper.ActiveView.FocusMap.AddLayer(layer); 29 m_HookHelper.ActiveView.PartialRefresh(ViewDrawPhaseType.ViewAll); 30 } |
2.4 . 示例截图