环境:
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