点击图片上方蓝色字体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元左右,上不封顶)