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

本文介绍如何在ArcGIS Runtime SDK for Android 100.5.0中加载天地图服务,由于需要授权,传统的WebTiledLayer方式不再适用。作者提供了一种通过继承ImageTiledLayer并覆盖getTile方法返回图片字节流的方法,从而成功加载天地图。此外,文章还提及了相关学习资源和历史课程内容。
摘要由CSDN通过智能技术生成

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

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

![Web

b7e72e5d05047ef589a9ef29f200667d.png

基于此,我们将通过继承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);
59c009c2389edde563fe21b7a87d87b7.png 由 于本文主要目的是测试逻辑是否可行,代码细节并未过多考虑。 请自行优化。

转载于CSDN「8O13是我 」

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

f5ef729b3aec25be0d31cfebe7d816d3.png

26fda17fabab761e838512c51fc54253.png

学习交流群

QQ群一:310968219(已满)

QQ群二:713208949(已满)

QQ群三:982967721(已满)

QQ群四:539689164

QQ群五:548044709

f5ef729b3aec25be0d31cfebe7d816d3.png

7802a3c1c8e811bd83b1b6e0b03a20bf.png

往期精彩推荐

武汉 加油

数据获取(一)

矢量数据获取(二)

矢量数据获取(三)

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应用进阶课程

1e955af9ae04546b379f06e1d6291fa0.png

合作信息·永久有效

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值