PIE SDK加载自定义服务数据

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         }
View Code

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为用户获取令牌)。

posted @ 2019-04-30 14:10  PIESAT  阅读(803)  评论(5编辑  收藏  举报