ArcGIS Runtime SDK for Android 入门(19):显示本地地图数据---mmpk移动地图包

      本文主要讲解如何借助ArcGIS Runtime SDK for Android显示本地mmpk移动地图包文件。

实现步骤:

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.READ_EXTERNAL_STORAGE"/>

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)获取mmpk文件路径

(3)通过路径创建MobileMapPackage移动地图包对象,并对其进行异步加载。

(4)获取MobileMapPackage移动地图包对象中的所有ArcGISMap地图对象,挑选一幅进行显示。

(5)将ArcGISMap地图在MapView控件中显示。

准备:在Android设备的内置SD卡中创建ArcGIS文件夹,放入Yellowstone.mmpk

步骤:

(1)变量准备:

    //MapView控件变量
    private MapView mainMapView;
    //移动地图包变量
    private MobileMapPackage mainMobileMapPackage;

(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) {
            //加载数据
            loadmmpk();
        } 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) {
            //加载数据
            loadmmpk();
        } else {
            Toast.makeText(MainActivity.this, "读写权限被拒绝", Toast.LENGTH_SHORT).show();
        }
    }
   
    //加载mmpk文件
    private void loadmmpk() {
        try {
            String mainMMPKPath = getSDCardPath()+"/ArcGIS/Yellowstone.mmpk";
            mainMapView = (MapView) findViewById(R.id.mainMapView);
            mainMobileMapPackage = new MobileMapPackage(mainMMPKPath);
            //移动地图包异步加载
            mainMobileMapPackage.loadAsync();
            mainMobileMapPackage.addDoneLoadingListener(new Runnable() {
                @Override
                public void run() {
                    LoadStatus mainLoadStatus = mainMobileMapPackage.getLoadStatus();
                    if (mainLoadStatus == LoadStatus.LOADED) {
                        //移动地图包中的所有地图
                        List<ArcGISMap> mainArcGISMapL = mainMobileMapPackage.getMaps();
                        //获取索引为0的地图
                        ArcGISMap mainArcGISMap = mainArcGISMapL.get(0);
                        //获取mmpk中的基础底图(备用)
                        Basemap mainBasemap = mainArcGISMap.getBasemap();
                        //获取mmpk中的业务图层(备用)
                        LayerList mainMMPKLL = mainArcGISMap.getOperationalLayers();
                        //设置地图在MapView中显示
                        mainMapView.setMap(mainArcGISMap);
                    }
                }
            });
        } catch (Exception e) {
        }
    }

    //获取SD卡路径
    public String getSDCardPath()
    {
        return Environment.getExternalStorageDirectory().getAbsolutePath()
                + File.separator;
    }

6.运行APP:可以对移动地图包中的地图进行简单的浏览

感谢luq老师的指导

猜你喜欢

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