点击图片上方蓝色字体GIS点滴即可订阅

我们都知道,天地图服务的调用都需要获取授权。在这种模式下,之前通过WebTiledLayer加载的方式在Android端就无法显示了,由下图可知,虽然正确发送了切片请求,但是,Runtime Android端返回的Content-Type是text/html,而不是能够解析的image/png。

![Web

基于此,我们将通过继承ImageTiledLayer并扩展protected abstract byte[]getTile(TileKey tileKey)方法直接返回获得的图片字节流,从而构建天地图类,进而实现天地图的加载。

闲话少叙,直接上代码片段。

构建TianDiTuLayer类

public class TianDiTuLayer extends ImageTiledLayer {    private String preTemplateURL;    private Envelope fullExtent;    private TileInfo tileInfo;protected TianDiTuLayer(String preTemplateURL, TileInfo tileInfo, Envelope fullExtent) {        super(tileInfo, fullExtent);        this.preTemplateURL = preTemplateURL;    }    @Override    protected byte[] getTile(TileKey tileKey) {        int level = tileKey.getLevel();        int column = tileKey.getColumn();        int row = tileKey.getRow();        String tileURL = preTemplateURL + "&TileMatrix=" + level + "&TileCol=" + column + "&TileRow=" + row;        // Log.i("TemplateURL", "The URL is:" + tileURL);              try {            ByteArrayOutputStream bos = new ByteArrayOutputStream();            URL url = new URL(tileURL);            HttpURLConnection conn = (HttpURLConnection) url.openConnection();            conn.setRequestMethod("GET");            conn.setConnectTimeout(5 * 1000);            InputStream inStream = conn.getInputStream();            byte[] btImg= readInputStream(inStream);            return btImg;        }catch(Exception e){            e.printStackTrace();        }         return null;    }    public static byte[] readInputStream(InputStream inStream) throws Exception {        ByteArrayOutputStream outStream = new ByteArrayOutputStream();        byte[] buffer = new byte[1024];        int len = 0;        while ((len = inStream.read(buffer)) != -1) {            outStream.write(buffer, 0, len);        }        inStream.close();        outStream.flush();        return outStream.toByteArray();     }}

构建TianDiTuLayer对象

ArrayList levels = new ArrayList();        levels.add(new LevelOfDetail(1,0.703125,295497593.05875003));        levels.add(new LevelOfDetail(2,0.3515625,147748796.52937502));        levels.add(new LevelOfDetail(3, 0.17578125, 73874398.264687508));        levels.add(new LevelOfDetail(4, 0.087890625, 36937199.132343754));        levels.add(new LevelOfDetail(5, 0.0439453125, 18468599.566171877));        levels.add(new LevelOfDetail(6, 0.02197265625, 9234299.7830859385));        levels.add(new LevelOfDetail(7, 0.010986328125, 4617149.8915429693));        levels.add(new LevelOfDetail(8, 0.0054931640625, 2308574.9457714846));        levels.add(new LevelOfDetail(8, 0.00274658203125, 1154287.4728857423));        levels.add(new LevelOfDetail(10, 0.001373291015625, 577143.73644287116));        levels.add(new LevelOfDetail(11, 0.0006866455078125, 288571.86822143558));        levels.add(new LevelOfDetail(12, 0.00034332275390625, 144285.93411071779));        levels.add(new LevelOfDetail(13, 0.000171661376953125, 72142.967055358895));        levels.add(new LevelOfDetail(14, 8.58306884765625e-005, 36071.483527679447));        levels.add(new LevelOfDetail(15, 4.291534423828125e-005, 18035.741763839724));        levels.add(new LevelOfDetail(16, 2.1457672119140625e-005, 9017.8708819198619));        levels.add(new LevelOfDetail(17, 1.0728836059570313e-005, 4508.9354409599309));        levels.add(new LevelOfDetail(18, 5.3644180297851563e-006, 2254.4677204799655));        levels.add(new LevelOfDetail(19, 2.6822090148925781e-006, 1127.2338602399827));        levels.add(new LevelOfDetail(20, 1.3411045074462891e-006, 563.61693011999137));        int iDPI = 96;        int iTileWidth = 256;        int iTileHeight = 256;        tileInfo = new TileInfo(iDPI, TileInfo.ImageFormat.MIXED, levels, new Point(-180, 90, SpatialReference.create(4490)), SpatialReference.create(4490), iTileHeight, iTileWidth);        fullExtent = new Envelope(-180.0,-90.0,180.0,90.0, SpatialReference.create(4490));        String preTemplateURL = "http://t0.tianditu.com/vec_c/wmts?tk=6dfd31e3b55a8466f34997aee5551a9c&service=wmts&request=GetTile&version=1.0.0&LAYER=vec&tileMatrixSet=c&&style=default&format=tiles";        TianDiTuLayer tianDiTuLayer = new TianDiTuLayer(preTemplateURL, tileInfo, fullExtent);

前端加载

arcGISMap.getBasemap().getBaseLayers().add(tianDiTuLayer);

由于本文主要目的是测试逻辑是否可行,代码细节并未过多考虑。请自行优化。

转载于CSDN「8O13是我 」

版权归原作者所有,如有侵权请告知删除

学习交流群

QQ群一:310968219(已满)

QQ群二:713208949(已满)

QQ群三:982967721(已满)

QQ群四:539689164

QQ群五:548044709

往期精彩推荐

武汉 加油

数据获取(一)

矢量数据获取(二)

矢量数据获取(三)

MODIS数据获取(四)

ERDAS资源

ARCGIS小技巧视频教程系列

土地利用变化模拟预测软件及教程

土地利用变化分析(一)

土地利用变化分析(二)


公开课

2020·02·08

第一期:基于GIS的疫情专题图制作

2020·02·15

第二期:疫情实时地图在线制作

2020·03·21

第三期:地图制图之数据符号化

2020·03·28

第四期:GIS数据酷炫可视化攻略

2020·04·11

第五期:数据分析 01

2020.04.18

第六期:土地利用变化分析的GIS范式

2020.04.25

第七期:数据分析02

2020.05.02

第八期:三维激光扫描点云数据处理

未完待续

......


在线视频课程

GIS应用初级教程

GIS应用进阶课程


合作信息·永久有效

【GIS点滴】长期有奖征稿启动(每篇500元左右,上不封顶)

arcgis加载天地图_ArcGIS Runtime SDK for Android100.5.0端加载天地图服务相关推荐

  1. ArcGIS Runtime SDK for .Net 100.6 如何加载本地数据

    由于ArcGIS Engine的32位.部署繁重.不适应新一代Web GIS的发展等缺点,Esri推出了ArcGIS Runtime产品,该产品因其64位.部署轻便.跨平台.更好地适应新一代Web G ...

  2. ArcGIS Runtime SDK for .NET 100.0中如何执行.gpk(一)

    ArcGIS Runtime 100.0 SDKs 于2016年11月发布,是ArcGIS Runtime采用全新架构下的第一个商业版本,新架构下的Runtime采用了统一的API,方便用户使用的同时 ...

  3. ArcGIS Runtime SDK for .NET 100.0中如何执行.gpk(二)

    接上文,在编写代码之前我们先回忆一下ArcMap中执行该脚本工具的过程,首先我把一个Dem影像添加进来,然后我在该影像范围内使用人机交互的方式画了一条线,那么我们在Runtime中也可以采用该思路:即 ...

  4. ArcGIS Runtime SDK for Android100.9语音路径导航

    使用ArcGIS for Android Runtime100.9实现语音导航 效果图: 参考资料: https://developers.arcgis.com/android/latest/java ...

  5. 《ArcGIS Runtime SDK for Android开发笔记》——(3)、ArcGIS Runtime SDK概述

    1.前言 ArcGIS Runtime SDK是一整套用于构建原生及跨平台的地图应用程序的开发包,包括移动设备的Android.iOS.Windows Phone,针对桌面的.Net.Java.OSX ...

  6. 《ArcGIS Runtime SDK for Android开发笔记》——(11)、ArcGIS Runtime SDK常见空间数据加载...

    ArcGIS Runtime SDK for Android 支持多种类型空间数据源.每一种都提供了相应的图层来直接加载,图层Layer是空间数据的载体,其主要继承关系及类型说明如下图所示: 转载请注 ...

  7. 《ArcGIS Runtime SDK for .NET开发笔记》--三维功能

    介绍 在ArcGIS Runtim SDK for .NET 10.2.6中,新添加了三维地图功能.在ArcGIS中,我们将三维地图称为Scene(场景),所以在Runtime SDK SDK for ...

  8. 《ArcGIS Runtime SDK for Android开发笔记》——离在线一体化技术:离线矢量数据同步...

    1.前言 上一篇文章中我们实现了离线要素的编辑操作,这一篇中主要介绍离在线一体化技术中最后一个环节离线数据的同步功能,通过对数据的上传,服务器端的版本化管理,实现数据生产管理的整个流程. 转载请注明出 ...

  9. 《ArcGIS Runtime SDK for Android开发笔记》——离在线一体化技术:离线矢量数据编辑...

    1.前言 在上一篇我们已经实现了离线地理数据库的下载,这一篇我们着重介绍离线数据库的加载与编辑. 由于ArcGIS Runtime SDK for Android 10.2.X版本并没提供要素绘制功能 ...

最新文章

  1. Python找出序列中出现最多的元素
  2. 如何去掉文章里的非关键词c++_平台运营|阿里国际站代码查找产品三个关键词的方法...
  3. android jni 调用java_Android JNI开发系列(九)JNI调用Java的静态方法实例方法
  4. 转载 cFos vs cFosSpeed
  5. Redis实战(二):Redis 的 String 类型 bitmap
  6. 机器学习第五篇:详解决策树-CART算法
  7. 6月,回忆我失去的爱情
  8. 洛谷P2085ssl1411OJ1370-最小函数值【堆,贪心】
  9. arrylist和linked list区别
  10. raft算法mysql主从复制_mysql主从复制原理
  11. 斜角地图逻辑原理解析和Isometric地图编辑器设计方案(转)
  12. AxureRP和Markman新手入门心得
  13. 2022年高压电工判断题及答案
  14. 求两个数的最小公倍数; 两种方法
  15. 选取网页内容后弹出提示框,类似于微博的快捷转发功能。
  16. HDU-1238 Substrings
  17. linux无人值守批量安装系统
  18. 小白,想入门程序员,应该从什么开始学,顺序是什么?
  19. 荣耀V40最新消息 升级系统该如何更新
  20. Matlab求解线性方程组(一)共轭梯度法

热门文章

  1. VS2008 快捷键总结
  2. 漂亮表格的CSS定义
  3. 大牛带你学优化~案例进阶Mysql优化
  4. 深度学习:向人工智能迈进
  5. FFmpeg avio_alloc_context函数剖析
  6. Mongodb账号密码模式的基本认证
  7. 告别2013拥抱2014
  8. 转载: 快速理解Docker - 容器级虚拟化解决方案
  9. navigator对象介绍
  10. Nginx服务的命令行控制