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為用戶獲取令牌)。
