86] 4)地图和标注数据分开,矢量地图和影像地图提供中英文标注,地形图仅提供中 文标注。
[0087] 本发明实施例中,在本地服务器通过WMTS接口访问各个GIS平台的地图服务器。其 中,ArcGIS产品,包括桌面产品、Web APIs、化tive SDKs都提供了对WMTS的支持,Supermap、 中地服务与ArcGIS产品类似。本发明实施例中WArcGIS为例,可W通过运些接口来访问天 地图的WMTS服务。但是实际情况要复杂一些,经过测试发现,使用ArcGIS的WMTS接口访问天 地图,会出现偏差,如下图2所示。经过研究发现,产生偏差的根本原因在于=ArcGIS WMTS接 口中使用的DPI与天地图使用的DPI不一致。
[008引 OGC WMTS标准中规定,通过getcapati 1 ities请求可W获得WMTS的元数据。图3是天地 图2.0 WMTS元数据的部分截图(亂格式)。元数据中包含各个级别的比例尺数据(如图3中框中 所示的内容)。在访问WMTS时,需要通过运些元数据采用式1 Scsfe 1: (Rewh血m; * 计算出分辨率。
[0089] OGC歷TS规范中DPI采用90.71(即采用0.028mm作为一个像素的物理宽度),而天 地图使用的DPI采用国家标准规定的96(见《电子地图规范》)。由于ArcGIS WMTS接口实现均 遵循OGC歷TS标准,使用90.71作为DPI来计算分辨率,导致ArcGIS通过歷TS接口访问天地 图时,图片物理尺寸变大,使得地图看上去向右下方偏移。
[0090] 根据上述分析,由于DPI不同时采用ArcGIS WMTS接口访问天地图产生偏移的主要 原因,可W有针对性的对ArcGIS接口进行扩展,来实现对天地图的访问。
[0091] 具体而言,ArcGIS接口可W扩展。WArcGIS Runtime SDK for Android为例,提供 了 Ti IedServiceLayer类。运是访问切片服务的基础类,通过扩展运个类,就可W访问天地 图的WMTS服务了。扩展之前,需要了解一下天地图服务的一些参数,包括:
[0092] (1)比例尺
[0093] 在两种坐标系(墨卡托坐标系和国家2000坐标系)下天地图的比例尺一致,W18级 比例尺为例,各比例尺的具体数值如下。
[0094] private static final doub I e [ ] SCALES = { 2.958293554545656E8 , 1.479146777272828E8,7.39573388636414E7,3.69786694318207E7, 1.84893347159103祀7,9244667.357955175,4622333.678977588,2311166.839488794, 1155583.419744397,577791.7098721985,288895.85493609926,144447.92746804963, 72223.96373402482,36111.98186701241,18055.990933506204,9027.995466753102, 4513.997733376551,2256.998866688275};
[009引 (2)分辨率
[0096] 在两种坐标系下,天地图的分辨率不同。其中,在墨卡托坐标系下的分辨率如下:
[0097] private static final double [ ] RE SOLUT I 0NS_MERCAT0R = {78271.51696402048,39135.75848201024,19567.87924100512,9783.93962050256, 4891.96981025128,2445.98490512564,1222.99245256282,611.49622628141 , 305.748113140705,152.8740565703525,76.43702828517625,38.21851414258813, 19.109257071294063,9.554628535647032,4.777314267823516,2.388657133911758, 1.194328566955879,0.59716428:34779395};
[0098] 在国家2000坐标系下的分辨率如下:
[0099] private static final double[]RES0LUTI0NS_2000={0.7031249999891485, 0.35156249999999994,0.17578124999999997,0.08789062500000014, 0.04394531250000007,0.021972656250000007,0.01098632812500002, 0.00549316406250001,0.0027465820312500017,0.0013732910156250009, 0.000686645507812499,0.0003433227539062495,0.00017166137695312503, 0.00008583068847656251,0.000042915344238281406,0.000021457672119140645, 0.000010728836059570307,0.000005364418029785169};
[0100] (3)起始点
[0101] 在国家2000坐标系下的起始点如下:
[0102] private s1:atic final Point 0RIGIN_2000 = new Point(-180,90);
[0103] 在墨卡托坐标系下的起始点如下:
[0104] private static final Point ORIGIN_MERCAT0R = new Point(-20037508. :3427892,20037508.3427892);
[0105] (4)地图范围
[0106] 在国家2000坐标系下的地图范围如下:
[0107] private static final double X_MIN_2000 = -180 ;
[0108] private static final double Y_MIN_2000 = -90 ;
[0109] private s1:atic final double X_MAX_2000 = 180;
[0110] private s1:atic final double Y_MAX_2000 = 90;
[0111] 在墨卡托坐标系下的地图范围如下:
[0112] private static final double X_MIN_MERCAT0R = -20037508.:3427892;
[0113] private static final double Y_MIN_MERCAT0R = -20037508.:3427892;
[0114] private static final double X_MAX_MERCAT0R=20037508.3427892;
[0115] private static final double Y_MAX_MERCAT0R=20037508.3427892;
[0116] 其中,根据上述的天地图的比例尺、分辨率、起始点和地图范围等信息,扩展 TiledServiceLayer,来实现通过上式1对天地图的瓦片的分辨率进行转换,W实现通过 ArcGIS访问天地图,核屯、代码如下所示:
[0117]
[om]
[0119]
[0120] 最后,采用W下代码可W使用扩展后的TianDi化Layer来显示天地图服务。 [0121 ] mapMercator 二(MapView)化is .f indViewById(R. id.mapMercator);
[0122] L过yer m过pL过yer
[0123] 二new TianDiTuLayer(TianDiTuLayerTypes.TIANDITU_VECTOR_MERCATOR);
[0124] this.mapMercator.addLayer(mapLayer);
[0125] L曰yer 曰nnot曰tionL曰yer = new Ti曰nDiTuL曰yer