本文主要讲解如何借助ArcGIS Runtime SDK for Android显示本地tpk缓存切片文件。
实现步骤:
1.创建Android项目
2.添加Runtime SDK依赖
前两步本文省略,初学者可参照ArcGIS Runtime SDK for Android 入门(1):第一个地图应用程序(二维)
3.添加权限及OpenGL ES支持
在AndroidManifest.xml中添加:
<!--联网权限-->
<uses-permission android:name="android.permission.INTERNET" />
<!--写入外部存储权限-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!--OpenGL ES支持 -->
<uses-feature android:glEsVersion="0x00020000" android:required="true" />
4.设置界面布局
布局XML代码:
<!-- MapView控件 -->
<com.esri.arcgisruntime.mapping.view.MapView
android:id="@+id/mapView"
android:layout_width="match_parent"
android:layout_height="match_parent">
</com.esri.arcgisruntime.mapping.view.MapView>
5.编写代码:
思路:
(1)请求文件读写权限(Android 6.0及以上版本)
(2)获取tpk文件路径
(3)通过路径创建TileCache切片缓存对象。
(4)通过TileCache切片缓存对象创建ArcGISTiledLayer切片图层。
(5)将ArcGISTiledLayer切片图层加入Basemap底图。
(6)将Basemap底图加入ArcGISMap地图中。
(7)将ArcGISMap地图在MapView控件中显示。
准备:在Android设备的内置SD卡中创建ArcGIS文件夹,放入china.tpk
步骤:
(1)变量准备:
//MapView控件变量
private MapView mainMapView;
(2)onCreate方法:
//请求设备读写权限并加载数据
requestWritePermission()
(3)方法支持:
//请求设备读写权限并加载数据
private void requestWritePermission() {
// define permission to request
// 定义请求权限
String[] reqPermission = new String[] { Manifest.permission.READ_EXTERNAL_STORAGE };
int requestCode = 2;
// For API level 23+ request permission at runtime
// 在API23版本以上中,权限需要在运行时进行请求
if (ContextCompat.checkSelfPermission(MainActivity.this,
reqPermission[0]) == PackageManager.PERMISSION_GRANTED) {
//加载数据
loadtpk();
} else {
// 请求权限
ActivityCompat.requestPermissions(MainActivity.this, reqPermission, requestCode);
}
}
//处理权限请求响应,用户选择完权限后响应
public void onRequestPermissionsResult(int requestCode,
@NonNull String[] permissions,
@NonNull int[] grantResults) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//加载数据
loadtpk();
} else {
Toast.makeText(MainActivity.this, "读写权限被拒绝", Toast.LENGTH_SHORT).show();
}
}
//加载tpk方法
private void loadtpk() {
try {
String theOfflineTiledLayers =getSDCardPath()+ "/ArcGIS/china.tpk";
mainMapView = (MapView) findViewById(R.id.mainMapView);
TileCache mainTileCache = new TileCache(theOfflineTiledLayers);
ArcGISTiledLayer mainArcGISTiledLayer = new ArcGISTiledLayer(mainTileCache);
Basemap mainBasemap = new Basemap(mainArcGISTiledLayer);
ArcGISMap mainArcGISMap = new ArcGISMap(mainBasemap);
mainMapView.setMap(mainArcGISMap);
}
catch (Exception e) {
}
}
//获取SD卡路径
public String getSDCardPath()
{
return Environment.getExternalStorageDirectory().getAbsolutePath()
+ File.separator;
}
6.运行APP:确认权限后可以对切片地图进行简单的浏览
感谢luq老师的指导