runtime for android加载天地图服务

本文详细介绍了如何在Android应用程序中集成天地图SDK,包括获取SHA1、解决密钥库文件不存在的问题、配置请求头以及设置地图层级细节等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

环境:

runtime for android100.7

效果图:

代码:

需要去天地图官网申请token,类型为android,其中SHA1通过链接(https://blog.youkuaiyun.com/qq_29269233/article/details/53725865)中的方法进行获取,包名是android程序的包名,例如:com.example.myapplication

如果报java.lang.Exception: 密钥库文件不存在: debug.keystore的错误,则通过链接(https://blog.youkuaiyun.com/zhangxing52077/article/details/53997893)的方法来解决。

package com.example.myapplication;

import android.os.Bundle;

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.io.RequestConfiguration;
import com.esri.arcgisruntime.layers.WebTiledLayer;
import com.esri.arcgisruntime.mapping.ArcGISMap;
import com.esri.arcgisruntime.mapping.view.MapView;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

    private MapView mMapView;
    private Envelope fullExtent;
    private TileInfo tileInfo;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mMapView = (MapView) findViewById(R.id.mapView);
        ArcGISMap map = new ArcGISMap();

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

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

        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));

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

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

        mMapView.setMap(map);
    }

    @Override
    protected void onPause() {
        super.onPause();
        mMapView.pause();
    }

    @Override
    protected void onResume() {
        super.onResume();
        mMapView.resume();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mMapView.dispose();
    }
}

参考资料:

https://blog.youkuaiyun.com/zssai2015/article/details/98945628

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值