说明一下,什么时候加载高德地图,什么时候加载天地图

使用原生定位或者使用arcgis提供的LocationDisplay的定位时,需要加载天地图,因为原生定位返回的坐标是wgs84的坐标,而高德地图是火星坐标系(gcj02)是经过偏移的,定位显示会有偏移

使用百度定位或者高德定位,定位返回坐标设置为gcj02时,直接加载高德地图,定位就不会有偏移

废话不多说,上才艺

准备

先自定义TianDiTuTiledLayerClass

import com.esri.arcgisruntime.arcgisservices.LevelOfDetail;

import com.esri.arcgisruntime.arcgisservices.TileInfo;

import com.esri.arcgisruntime.geometry.Envelope;

import com.esri.arcgisruntime.geometry.Point;

import com.esri.arcgisruntime.geometry.SpatialReference;

import com.esri.arcgisruntime.layers.WebTiledLayer;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.List;

/**

* 天地图

*/

public class TianDiTuTiledLayerClass {

//需要自己去申请,绑定包名和SHA1,我这个你们用不了

private static final String key = "11fc0ecfe024734754f0fb5952aa5c6f";

private static final List SubDomain =

Arrays.asList(new String[]{"t0", "t1", "t2", "t3", "t4", "t5", "t6", "t7"});

private static final int DPI = 96;

private static final int minZoomLevel = 1;

private static final int maxZoomLevel = 18;

private static final int tileWidth = 256;

private static final int tileHeight = 256;

private static final SpatialReference SRID_MERCATOR = SpatialReference.create(102100);

private static final double X_MIN_MERCATOR = -20037508.3427892;

private static final double Y_MIN_MERCATOR = -20037508.3427892;

private static final double X_MAX_MERCATOR = 20037508.3427892;

private static final double Y_MAX_MERCATOR = 20037508.3427892;

private static final Point ORIGIN_MERCATOR =

new Point(-20037508.3427892, 20037508.3427892, SRID_MERCATOR);

private static final Envelope ENVELOPE_MERCATOR =

new Envelope(X_MIN_MERCATOR,

Y_MIN_MERCATOR,

X_MAX_MERCATOR,

Y_MAX_MERCATOR,

SRID_MERCATOR);

private static final SpatialReference SRID_2000 = SpatialReference.create(4490);

private static final double X_MIN_2000 = -180;

private static final double Y_MIN_2000 = -90;

private static final double X_MAX_2000 = 180;

private static final double Y_MAX_2000 = 90;

private static final Point ORIGIN_2000 = new Point(-180, 90, SRID_2000);

private static final Envelope ENVELOPE_2000 =

new Envelope(X_MIN_2000,

Y_MIN_2000,

X_MAX_2000,

Y_MAX_2000,

SRID_2000);

private static final double[] SCALES = {

2.958293554545656E8, 1.479146777272828E8,

7.39573388636414E7, 3.69786694318207E7,

1.848933471591035E7, 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,

1128.4994333441375

};

private static final double[] RESOLUTIONS_MERCATOR = {

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.5971642834779395,

0.298582141738970};

private static final double[] RESOLUTIONS_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};

public static WebTiledLayer CreateTianDiTuTiledLayer(LayerType layerType) {

String type = "";

String tilematrixset = "";

WebTiledLayer webTiledLayer = null;

String mainUrl;

TileInfo mainTileInfo;

Envelope mainEnvelope;

try {

switch (layerType) {

case TIANDITU_VECTOR_MERCATOR:

type = "vec";

tilematrixset = "w";

break;

case TIANDITU_VECTOR_MERCATOR_LABLE:

type = "cva";

tilematrixset = "w";

break;

case TIANDITU_VECTOR_2000:

type = "vec";

tilematrixset = "c";

break;

case TIANDITU_VECTOR_2000_LABLE:

type = "cva";

tilematrixset = "c";

break;

case TIANDITU_IMAGE_MERCATOR:

type = "img";

tilematrixset = "w";

break;

case TIANDITU_IMAGE_MERCATOR_LABLE:

type = "cia";

tilematrixset = "w";

break;

case TIANDITU_IMAGE_2000:

type = "img";

tilematrixset = "c";

break;

case TIANDITU_IMAGE_2000_LABLE:

type = "cia";

tilematrixset = "c";

break;

case TIANDITU_TERRAIN_MERCATOR:

type = "ter";

tilematrixset = "w";

break;

case TIANDITU_TERRAIN_MERCATOR_LABLE:

type = "cta";

tilematrixset = "w";

break;

case TIANDITU_TERRAIN_2000:

type = "ter";

tilematrixset = "c";

break;

case TIANDITU_TERRAIN_2000_LABLE:

type = "cta";

tilematrixset = "c";

break;

}

mainUrl = "http://t0.tianditu.gov.cn/"

+ type + "_" + tilematrixset + "/wmts?" +

"service=wmts" +

"&request=gettile" +

"&version=1.0.0" +

"&layer=" + type +

"&format=tiles" +

"&STYLE=default" +

"&tilematrixset=" + tilematrixset +

"&tilecol={col}" +

"&tilerow={row}" +

"&tilematrix={level}" +

"&tk=" + key;

List mainLevelOfDetail = new ArrayList();

Point mainOrigin;

if (tilematrixset.equals("c")) {

for (int i = minZoomLevel; i <= maxZoomLevel; i++) {

LevelOfDetail item =

new LevelOfDetail(i, RESOLUTIONS_2000[i - 1], SCALES[i - 1]);

mainLevelOfDetail.add(item);

}

mainEnvelope = ENVELOPE_2000;

mainOrigin = ORIGIN_2000;

} else {

for (int i = minZoomLevel; i <= maxZoomLevel; i++) {

LevelOfDetail item =

new LevelOfDetail(i, RESOLUTIONS_MERCATOR[i - 1], SCALES[i - 1]);

mainLevelOfDetail.add(item);

}

mainEnvelope = ENVELOPE_MERCATOR;

mainOrigin = ORIGIN_MERCATOR;

}

mainTileInfo = new TileInfo(

DPI,

TileInfo.ImageFormat.PNG24,

mainLevelOfDetail,

mainOrigin,

mainOrigin.getSpatialReference(),

tileHeight,

tileWidth

);

webTiledLayer = new WebTiledLayer(

mainUrl,

SubDomain,

mainTileInfo,

mainEnvelope);

webTiledLayer.setName(type);

webTiledLayer.loadAsync();

} catch (Exception e) {

e.getCause();

}

return webTiledLayer;

}

public enum LayerType {

/**

* 天地图矢量墨卡托投影地图服务

*/

TIANDITU_VECTOR_MERCATOR,

TIANDITU_VECTOR_MERCATOR_LABLE,

/**

* 天地图矢量2000地图服务

*/

TIANDITU_VECTOR_2000,

TIANDITU_VECTOR_2000_LABLE,

/**

* 天地图影像墨卡托地图服务

*/

TIANDITU_IMAGE_MERCATOR,

TIANDITU_IMAGE_MERCATOR_LABLE,

/**

* 天地图影像2000地图服务

*/

TIANDITU_IMAGE_2000,

TIANDITU_IMAGE_2000_LABLE,

/**

* 天地图地形墨卡托地图服务

*/

TIANDITU_TERRAIN_MERCATOR,

TIANDITU_TERRAIN_MERCATOR_LABLE,

/**

* 天地图地形2000地图服务

*/

TIANDITU_TERRAIN_2000,

TIANDITU_TERRAIN_2000_LABLE,

}

}

地址拼接是看的天地图官网给的例子,天地图API传送门

天地图官方例子

注意

天地图现在要去官网申请一个key才能用

申请key

申请后替换上面类里的key

使用方法

使用的kotlin代码,应该能看懂吧

//去除水印

ArcGISRuntimeEnvironment.setLicense("runtimelite,1000,rud4449636536,none,NKMFA0PL4S0DRJE15166")

//去除logo

mapView.isAttributionTextVisible = false

//默认底图

val webTiledLayer =

TianDiTuTiledLayerClass.CreateTianDiTuTiledLayer(

TianDiTuTiledLayerClass.LayerType.TIANDITU_VECTOR_MERCATOR

)

//标注图层

val webTiledLayerLable =

TianDiTuTiledLayerClass.CreateTianDiTuTiledLayer(

TianDiTuTiledLayerClass.LayerType.TIANDITU_VECTOR_MERCATOR_LABLE

)

val basemap = Basemap()

basemap.baseLayers.add(webTiledLayer)

basemap.baseLayers.add(webTiledLayerLable)

val arcGISMap = ArcGISMap(basemap)

mapView.map = arcGISMap

至此就大功告成,需要添加三个权限,读写文件是运行时权限,别忘了

我自定义类里只写了六种常用的底图类型,官方提供了

官方提供底图

官方提供底图

可自由扩展,添加LayerType的枚举类型和

public static WebTiledLayer CreateTianDiTuTiledLayer(LayerType layerType)

方法中的case就行,

代码中的

对应官网的

代码中的

对应官网的

arcgis android 天地图,Arcgis runtime for Android 100.5 加载天地图相关推荐

  1. 填坑 ---- arcgis api for javascript 加载天地图

    写在前面 首先要感谢 arcgis api for javascript 加载天地图 这篇文章,帮助我完成了在网页中加载天地图. 在此就不再描述加载天地图的方法与过程,只记录我遇到的一个坑与填坑方法. ...

  2. arcgis for Android 100.1 在线加载天地图和谷歌地图

    距离上一篇arcgis for Android 已经很久.其实年初的时候就测试了arcgis for Android 100.1版本.搜集网上各篇文章,最后自已测试代码.修改代码.这一篇来讲一下加载在 ...

  3. Android Arcgis入门(12)、加载天地图

    在项目中可以经常需要动态加载一些图层,像投影地图服务.投影地图服务器.其实网上有大量这样的服务,比如天地图官网, . 随便点开一个服务,里面有相关的信息.那如何加载这样图层服务呢. 一.首先感谢这篇博 ...

  4. 基于ArcGIS API for JavaScript加载天地图

    文章目录 前言 效果图 详细代码 总结 参考链接 前言 该篇主要介绍如何用ArcGIS JS API加载天地图,具体应用场景以及需求分析等,在上篇基于ArcGIS API for JavaScript ...

  5. (转)Arcgis for js加载天地图

    http://blog.csdn.net/gisshixisheng/article/details/44494715 综述:本节讲述的是用Arcgis for js加载天地图的切片资源. 天地图的切 ...

  6. (转载)arcgis for js - 解决加载天地图和WMTS服务,WMTS服务不显示的问题,以及wmts服务密钥。...

    1 arcgis加载天地图和wmts服务 arcgis for js加载天地图的例子网上有很多,这里先不写了,后期有空再贴代码,这里主要分析下WMTS服务为什么不显示,怎么解决. 条件:这里的WMTS ...

  7. 【ArcGis for javascript从零开始】之一 ArcGis加载天地图

    最近做项目需要用到ArcGis来进行数据展示和数据分析.以前从来没有接触过与Gis有关的东西,一切需要从头开始学.没有时间从头系统地学习了,只能用到哪个学习哪里了,本系列只是对学习的路径进行记录.Ar ...

  8. arcgis加载天地图_【arcgis地图实战】之天地图在线服务加载

    经常用arcgis的童鞋都知道,元数据是基础也是数据分析的根本.而在线地图能够快速的显示数据所在的位置,是数据校验不可多得的工具.arcgis地图实战系列教程将就各种在线地图进行介绍和分享. 在线地图 ...

  9. ArcGIS使用(二)ArcGIS加载天地图

    ArcGIS引入天地图作为底图: 1.引入这两个类:WebTileLayer 和 TileInfo "esri/layers/WebTileLayer", "esri/l ...

最新文章

  1. 职场笔记[0702]:用户体验和创业
  2. tp3.2.3权限控制一之详解及demo
  3. Linux中的文件特殊权限
  4. Microsoft Visual C++ Runtime Library Runtime Error的解决的方法
  5. highgui基础 OpenCV trackbar
  6. 【leetcode❤python】172. Factorial Trailing Zeroes
  7. 数楼梯(洛谷-P1255)
  8. Container ViewController自定义转场控制器。
  9. 利用bloom filter算法处理大规模数据过滤
  10. 10月24日杨力祥老师谈话有感
  11. Passthrough技术简介
  12. Iostream通用输入/输出流类
  13. Golang Time互转秒、毫秒
  14. LocalDate 获取英文月份
  15. 【数据分析】什么是数据分析? 分析和管理数据以做出决策
  16. 北京理工大学计算机学院乔磊,余月_北京理工大学计算机学院
  17. HTML+CSS+JavaScript实现全国三级城市select选择
  18. 【解决方案】如何通过EasyNVR+EasyNVS搭建一套高清智能化的高速公路视频监控管理系统?
  19. VMware Fusion Pro 10 for Mac
  20. 6.3 图解BERT模型:从零开始构建BERT

热门文章

  1. 基于iView-Cascader的多选级联选择器:cascader-multi
  2. 【Excel 函数】Office 365 之Excel函数之Right
  3. JS如何根据今天的日期获取本周的周一和周日的日期
  4. AUTOCAD——对齐标注命令
  5. MySQL数据库——案例:电子商务网站设计
  6. 记一次php、sql注入学习后的一道ctf代码审计题复盘
  7. cie规定的标准光源_标准光源
  8. 21. WebAR那些事: ARDemo之《天马行空》
  9. Android 下简单的 MP3 播放(代码分析)
  10. etch下面,用wine可以安装超星阅览器