ArcGIS Runtime SDK for Android100.5.0端加载天地图服务(II)

书接上文,前面我们通过获取和返回图片的二进制字节流实现了天地图服务的加载,接下来,我们补充一下如何直接通过WebTiledLayer进行天地图服务的加载。仍然以加载空间参考是4490的天地图vec服务为例。

关键问题解决方案

问题的关键在于请求的header,我们可以通过全局修改请求header的方式,来解决这一问题。

Map<String, String> hm =  new HashMap<String, String>();
hm.put("referer","https://androidapp");

RequestConfiguration requestConfiguration = RequestConfiguration.getGlobalRequestConfiguration();
requestConfiguration.setHeaders(hm);
RequestConfiguration.setGlobalRequestConfiguration(requestConfiguration);

WebTiledLayer加载方式

TileInfo的构建

ArrayList<LevelOfDetail> levels = new ArrayList<LevelOfDetail>();
        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));

templateUri的构建

templateUri的构建有多种方式,基本方式分为两大类:

方式1

String templateUri = "http://{subDomain}.tianditu.gov.cn/vec_c/wmts?tk=6dfd31e3b55a8466f34997aee5551a9c&service=wmts&request=GetTile&version=1.0.0&LAYER=vec&tileMatrixSet=c&TileMatrix={level}&TileRow={row}&TileCol={col}&style=default&format=tiles"

方式2

String templateUri = "http://{subDomain}.tianditu.gov.cn/DataServer?T=vec_c&x={col}&y={row}&l={level}&tk=6dfd31e3b55a8466f34997aee5551a9c"

这里的subDomain包含了t0,t1,t2,t3,t4,t5,t6共7个分发节点。

WebTiledLayer的构建

 webTiledLayer = new WebTiledLayer(templateUri, Arrays.asList("t0","t1","t2","t3","t4","t5","t6"), tileInfo, fullExtent);

服务加载

map.getBasemap().getBaseLayers().add(webTiledLayer);

以上抛砖引玉,希望大家都能够顺利实现服务的加载和显示。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值