本文主要讲解如何借助ArcGIS Runtime SDK for Android显示本地vtpk缓存切片文件。
实现步骤:
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)获取vtpk文件路径
(3)通过路径创建ArcGISVectorTiledLayer矢量切片图层对象。
(4)将ArcGISVectorTiledLayer矢量切片图层加入Basemap底图。
(5)将Basemap底图加入ArcGISMap地图中。
(6)将ArcGISMap地图在MapView控件中显示。准备:在Android设备的内置SD卡中创建ArcGIS文件夹,放入china.vtpk矢量切片文件。
准备:在Android设备的内置SD卡中创建ArcGIS文件夹,放入china.vtpk
步骤:
(1)变量准备:
//MapView地图控件
private MapView mainMapView;
(2)onCreate方法:
//请求设备读写权限并加载数据
requestWritePermission();
(3)方法支持:
//请求设备读写权限并加载数据
private void requestWritePermission() {
// 定义请求权限
String[] reqPermission = new String[] { Manifest.permission.READ_EXTERNAL_STORAGE };
int requestCode = 2;
// 在API23版本以上中,权限需要在运行时进行请求
if (ContextCompat.checkSelfPermission(MainActivity.this,
reqPermission[0]) == PackageManager.PERMISSION_GRANTED) {
//加载数据
loadvtpk();
} 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) {
//加载数据
loadvtpk();
} else {
Toast.makeText(MainActivity.this, "读写权限被拒绝", Toast.LENGTH_SHORT).show();
}
}
//加载vtpk
private void loadvtpk() {
try {
String theOfflineTiledLayers = getSDCardPath()+"/ArcGIS/china.vtpk";
mainMapView = (MapView) findViewById(R.id.mainMapView);
ArcGISVectorTiledLayer mainArcGISVectorTiledLayer = new ArcGISVectorTiledLayer(theOfflineTiledLayers);
Basemap mainBasemap = new Basemap(mainArcGISVectorTiledLayer);
ArcGISMap mainArcGISMap = new ArcGISMap(mainBasemap);
mainMapView.setMap(mainArcGISMap);
}
catch (Exception e)
{
String eResult = e.getMessage();
}
}
//获取SD卡路径
public String getSDCardPath()
{
return Environment.getExternalStorageDirectory().getAbsolutePath()+ File.separator;
}
6.运行APP:可以对矢量切片地图进行简单的浏览
感谢luq老师的指导