1.功能简介
自定义服务数据,将符合要求的矢量数据和栅格数据集等数据以服务的方式发布,将数据存储在某服务器中,在有网络的情况下可以根据URL就可以访问,比较常见的服务数据类型的有ArcGIS Server,天地图在线地图,百度在线地图,高德在线地图等,如果没有他们大型的服务器可以发布就可以自己自定义发布并调用。
2. 功能实现说明
2.1. 实现思路及原理说明
第一步 |
设置自定义服务URL(即服务链接地址) |
第二步 |
根据URL得到自定义图层tiledLayer |
第三步 |
设置瓦片信息并设置为自定义图层tiledLayer的瓦片信息 |
第四步 |
将tiledLayer添加到地图控件中并设置显示范围 |
2.2 . 核心接口与方法
接口/类 |
方法 |
说明 |
PIE.Carto.CustomerOnlineTiledLayer |
SetTileInfo |
设置瓦片信息 |
Name |
图层名称 |
|
PIE.Carto.TileInfo |
Format |
瓦片图像格式 |
DPI |
每英寸点数 |
|
CompressionQuality |
压缩的质量 |
|
LODInfos |
LOD信息 |
|
SpatialReference |
空间参考 |
|
InitialExtent |
初始化范围 |
|
FullExtent |
全图范围 |
|
TileWidth |
瓦片宽度 |
|
TileHeight |
瓦片高度 |
|
PIE.Carto.LODInfo |
Level |
瓦片级别 |
Resolution |
瓦片分辨率 |
|
Scale |
瓦片比例尺 |
2.3. 示例代码
项目路径 |
百度云盘地址下/PIE示例程序/03.数据加载/14. 打开自定义服务数据 |
视频路径 |
百度云盘地址下/PIE视频教程/03.数据加载/14.打开自定义服务数据.avi |
示例代码 |
|
1 /// <summary> 2 /// 自定义服务影像图加载 3 /// </summary> 4 /// <param name="sender"></param> 5 /// <param name="e"></param> 6 private void toolStripButton1_CustomerServer_Click(object sender, EventArgs e) 7 { 8 string strUrl = "http://imageservices.cresda.com/seis/v3/wmts/tile/1027/131?service=WMTS&request=GetTile&version=1.0.0&layer=&style=&tilematrixSet=&format=image%2Fpng&transparent=false&width=256&height=256&token=guest&zIndex=0&maxNativeZoom=10&srs=EPSG%3A4326&tilematrix=[$Level]&tilerow=[$Row]&tilecol=[$Column]"; 9 //根据url字符串得到自定义在线地图图层 10 CustomerOnlineTiledLayer tiledLayer = new CustomerOnlineTiledLayer(strUrl); 11 tiledLayer.Name = "自定义服务影像"; 12 //设置瓦片信息 13 TileInfo tileInfo = new TileInfo(); 14 tileInfo.Format = TileImageFormat.Png; 15 tileInfo.DPI = 96; 16 tileInfo.CompressionQuality = 75; 17 tileInfo.LODInfos = new List<LODInfo>(); 18 double dResolution = 1.40625; 19 double dScale = 5.90995197141668E8; 20 for (int i = 0; i < 16; ++i)//显示16级数据 21 { 22 LODInfo lodInfo = new LODInfo(); 23 lodInfo.Level = i; 24 lodInfo.Resolution = dResolution / Math.Pow(2.0, i); 25 lodInfo.Scale = dScale / Math.Pow(2.0, i); ; 26 tileInfo.LODInfos.Add(lodInfo); 27 } 28 //设置瓦片开始位置 29 ISpatialReference spatialReference = SpatialReferenceFactory.CreateSpatialReference(4326); 30 tileInfo.SpatialReference = spatialReference; 31 IPoint point = new PIE.Geometry.Point(); 32 point.PutCoords(-180, 90);//开始点切片 33 (point as IGeometry).SpatialReference = spatialReference; 34 tileInfo.Origin = point; 35 36 //设置瓦片显示范围 37 IEnvelope envelope = new Envelope(); 38 envelope.PutCoords(-180, -90, 180, 90); 39 tileInfo.InitialExtent = envelope; 40 tileInfo.FullExtent = envelope; 41 tileInfo.TileWidth = 256; 42 tileInfo.TileHeight = 256; 43 tiledLayer.SetTileInfo(tileInfo); 44 45 //加载影像并设置地图显示范围 46 mapControlMain.FocusMap.AddLayer(tiledLayer); 47 IEnvelope envelop = new Envelope(); 48 envelop.PutCoords(60, 10, 160, 60); 49 mapControlMain.ActiveView.Extent = envelop; mapControlMain.ActiveView.PartialRefresh(ViewDrawPhaseType.ViewAll); 50 } |
2.4 . 示例截图
注明:
1、如果想加载自定义注记图(效果如上图所示),可以将代码的URL修改为:
stringstrUrl= "http://t0.tianditu.gov.cn/cva_c/wmts?service=WMTS&request=GetTile&version=1.0.0&layer=cva&style=&tilematrixSet=c&format=tiles&transparent=false&width=256&height=256&zIndex=200&tk=f2b11a204a2f84fc62bc5af15e483b48&token=guest&srs=EPSG%3A4326&tilematrix=[$Level]&tilerow=[$Row]&tilecol=[$Column]";
上述链接用浏览器打开报错为: 400 Bad Request,原因是,为了用加载一个URL加载全球的服务数据将链接在请求服务信息中的返回瓦片比例尺级别和行列号用了模糊查找,如果为了测试可以将链接中的[$Level]、[$Row] 和[$Column] 换成你要浏览的参数即可,例如level为10,row为150, column为858,下图左为注记图,右为影像图,
2、本文提供的链接为资源卫星中心发布的服务,示例中URL的token为guest,如果大家想用自己的token,可以自己注册一个(token为用户获取令牌)。
来源:https://www.cnblogs.com/PIESat/p/10795679.html