PIE SDK加载2020年最新天地图服务数据

1.功能简介

2020年04月17日中华人民共和国自然资源部发布《自然资源部关于启用地理信息公共服务平台2020版的公告》,新的天地图服务更新了2米分辨率遥感影像1000万平方千米、优于1米分辨率遥感影像537万平方千米;更新了道路、水系、居民地和地名地址等地理信息[http://gi.mnr.gov.cn/202004/t20200423_2509479.html]。这些极大的优化了数据显示的精度和效果,那么在PIESDK怎么快速加载最新的天地图服务呢?

PIESDK支持用户自定义瓦片数据的加载显示,支持数据服务器的自动切换,我们只要了解自定义切图图层类的应用,就可以快速的把天地图服务加到我们的地图中,废话少说,我们直接上代码来说明。

2.功能实现说明

2.1加载天地图经纬度投影的影像服务:

/// <summary>

/// 加载天地图影像服务-经纬度投影

/// </summary>

public void AddTDTServerLayer_Img_WGS84()

{

string str = "http://t[$Host].tianditu.gov.cn/img_c/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=img&STYLE=default&TILEMATRIXSET=c&FORMAT=tiles&TILEMATRIX=[$Level]&TILEROW=[$Row]&TILECOL=[$Column]&tk=19d104158f9689146523c3872c81318b";

ISpatialReference spatialReference=SpatialReferenceFactory.CreateSpatialReference(4326);

PIE.Carto.CustomerOnlineTiledLayer layer = new CustomerOnlineTiledLayer(str);

layer.Name = "天地图自定义瓦片地图-经纬度投影";

// 设置自定义在线图层的可访问主机列表

IList<int> hostList = new List<int>();

for (int i = 0; i < 8; i++)

{

hostList.Add(i);

}

layer.SetHostList(hostList);

// 定义图层的瓦片信息

PIE.Carto.TileInfo tileInfo = new TileInfo();

tileInfo.Format = (PIE.Carto.TileImageFormat)5;

tileInfo.DPI = 96;

tileInfo.CompressionQuality = 75;

// 设置每一瓦片的分辨率和比例尺信息

tileInfo.LODInfos = new List<LODInfo>();

double dResolution = 1.40625;

double dScale = 5.90995197141668E8;

for (int i = 0; i < 16; ++i)

{

PIE.Carto.LODInfo lodInfo = new LODInfo();

lodInfo.Level = i;

lodInfo.Resolution = dResolution / Math.Pow(2.0, i);

lodInfo.Scale = dScale / Math.Pow(2.0, i); ;

tileInfo.LODInfos.Add(lodInfo);

}

// 设置瓦片信息的坐标系信息

tileInfo.SpatialReference = spatialReference;

// 设置服务切图的起始点信息

IPoint point = new PIE.Geometry.Point();

point.PutCoords(-180, 90);

(point as IGeometry).SpatialReference = spatialReference;

tileInfo.Origin = point;

// 设置瓦片信息的范围和瓦片大小信息

IEnvelope envelope = new Envelope();

envelope.PutCoords(-180, -90, 180, 90);

tileInfo.InitialExtent = envelope;

tileInfo.FullExtent = envelope;

tileInfo.TileWidth = 256;

tileInfo.TileHeight = 256;

layer.SetTileInfo(tileInfo);

m_HookHelper.FocusMap.AddLayer(layer);

m_HookHelper.ActiveView.PartialRefresh(ViewDrawPhaseType.ViewAll);

}

服务路径如下所示:

http://t[$Host].tianditu.gov.cn/img_c/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=img&STYLE=default&TILEMATRIXSET=c&FORMAT=tiles&TILEMATRIX=[$Level]&TILEROW=[$Row]&TILECOL=[$Column]&tk=19d104158f9689146523c3872c81318b

应用中需要把19d104158f9689146523c3872c81318b调整成自己申请的天地图服务Key,服务路径下的img_cimg标识要加载影像底图服务,调整为其他即可加载对应的数据:

标识

说明

标识

说明

标识

说明

vec_c

矢量底图

cva_c

矢量注记

eva_c

矢量英文注记

img_c

影像底图

cia_c

影像注记

eia_c

影像英文注记

ter_c

地形晕渲

cta_c

地形注记

ibo_c

全球境界

参考:http://lbs.tianditu.gov.cn/server/MapService.html

2.2加载天地图球面墨卡托投影的影像服务:

/// <summary>

/// 加载天地图影像服务-球面墨卡托投影

/// </summary>

public void AddTDTServerLayer_Img_Mercator()

{

string str = "http://t[$Host].tianditu.gov.cn/img_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=img&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX=[$Level]&TILEROW=[$Row]&TILECOL=[$Column]&tk=19d104158f9689146523c3872c81318b";

ISpatialReference spatialReference=SpatialReferenceFactory.CreateSpatialReference(3857);

PIE.Carto.CustomerOnlineTiledLayer layer = new CustomerOnlineTiledLayer(str);

layer.Name = "天地图自定义瓦片地图-球面墨卡托";

// 设置自定义在线图层的可访问主机列表

IList<int> hostList = new List<int>();

for (int i = 0; i < 8; i++)

{

hostList.Add(i);

}

layer.SetHostList(hostList);

// 定义图层的瓦片信息

PIE.Carto.TileInfo tileInfo = new TileInfo();

tileInfo.Format = (PIE.Carto.TileImageFormat)5;

tileInfo.DPI = 96;

tileInfo.CompressionQuality = 75;

// 设置每一瓦片的分辨率和比例尺信息

tileInfo.LODInfos = new List<LODInfo>();

double dResolution = 156543.033928041;

double dScale = 591658710.909131;

for (int i = 0; i < 16; ++i)

{

PIE.Carto.LODInfo lodInfo = new LODInfo();

lodInfo.Level = i;

lodInfo.Resolution = dResolution / Math.Pow(2.0, i);

lodInfo.Scale = dScale / Math.Pow(2.0, i); ;

tileInfo.LODInfos.Add(lodInfo);

}

// 设置瓦片信息的坐标系信息

tileInfo.SpatialReference = spatialReference;

// 设置服务切图的起始点信息

IPoint point = new PIE.Geometry.Point();

point.PutCoords(-20037508.3427892, 20037508.3427892);

(point as IGeometry).SpatialReference = spatialReference;

tileInfo.Origin = point;

// 设置瓦片信息的范围和瓦片大小信息

IEnvelope envelope = new Envelope();

envelope.PutCoords(-20037508.3427892, -20037508.3427892, 20037508.3427892, 20037508.3427892);

tileInfo.InitialExtent = envelope;

tileInfo.FullExtent = envelope;

tileInfo.TileWidth = 256;

tileInfo.TileHeight = 256;

layer.SetTileInfo(tileInfo);

m_HookHelper.FocusMap.AddLayer(layer);

m_HookHelper.ActiveView.PartialRefresh(ViewDrawPhaseType.ViewAll);

}

服务路径如下所示:

http://t[$Host].tianditu.gov.cn/img_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=img&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX=[$Level]&TILEROW=[$Row]&TILECOL=[$Column]&tk=19d104158f9689146523c3872c81318b

应用中需要把19d104158f9689146523c3872c81318b调整成自己申请的天地图服务Key,服务路径下的img_wimg标识要加载影像底图服务,调整为其他即可加载对应的数据:

标识

说明

标识

说明

标识

说明

vec_w

矢量底图

cva_w

矢量注记

eva_w

矢量英文注记

img_w

影像底图

cia_w

影像注记

eia_w

影像英文注记

ter_w

地形晕渲

cta_w

地形注记

ibo_w

全球境界

参考:http://lbs.tianditu.gov.cn/server/MapService.html

2.3示例截图

1 加载天地图经纬度投影的影像服务

2 加载天地图球面墨卡托投影的影像服务

3.快速加载方案

PIE-SDK For .Net也提供了无编码的加载方式,加载方案为到"航天宏图杯"二次开发大赛培训群众下载【2020年天地图在线服务数据加载扩展包】,解压到PIESDK安装目录下,同名文件夹覆盖,启动PIESDK桌面,点击[地理信息]->[自定义切片服务],在弹出的窗体中选择对应的服务,点击[加载]按钮,即可实现天地图在线数据服务的加载。

3 服务类型选择和加载

4 天地图在线服务加载

原文地址:https://www.cnblogs.com/PIESat/p/12790751.html