ArcGIS Runtime SDK for Android 入门(18):显示本地地图数据---vtpk矢量切片

      本文主要讲解如何借助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老师的指导

猜你喜欢

转载自blog.csdn.net/smart3s/article/details/81137045