安卓智能地图开发与实施六:离线基础底图 - ArcGIS Runtime SDK for Android(Version 100.0.0)

本文介绍了离线地图技术的不同实现方式,包括TPK、VTPK及MMPK等格式的特点与应用场景,并提供了生成这些离线地图包的具体步骤。

离线基础底图(Offline Tiled Layers)

这里写图片描述

离线基础底图最传统的方式是直接拷贝ArcGIS Server服务的切片成果,存在的问题是无论使用松散型还是紧凑型都包含太多碎小文件,部署不便。TPK文件便是为了解决多碎小文件问题。但是依然存在文件太大的问题,动辄十G甚至几十G。而矢量切片(VTPK)在于解决文件太大的问题。

TPK

这里写图片描述

对于TPK的生产,建议使用ArcGIS Desktop进行生成,对于自定义切片级别(Level of Detail)较为自如。ArcGIS Desktop也可以通过模型构建器将两个工具合为一个。使用ArcGIS Pro,若想自定义切片级别(Level of Detail)需要找个地图服务来支持。

TPK和服务切片文件夹调用类似,只是文件路径不同。
TPK:/sdcard/Hymn/basemap/basemap.tpk
服务切片文件夹:/sdcard/Hymn/basemap/gxksl2016

这里写图片描述

package hymn.esrichina.displayamapusingtpk;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import com.esri.arcgisruntime.data.TileCache;
import com.esri.arcgisruntime.layers.ArcGISTiledLayer;
import com.esri.arcgisruntime.mapping.ArcGISMap;
import com.esri.arcgisruntime.mapping.Basemap;
import com.esri.arcgisruntime.mapping.view.MapView;

public class MainActivity extends AppCompatActivity {
    private MapView mainMapView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        try {
            String theOfflineTiledLayers = "/sdcard/Hymn/basemap/ImageBasemap.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)
        {

        }
    }
}

如何生产TPK参考:

  • ArcGIS Pro

http://pro.arcgis.com/zh-cn/pro-app/tool-reference/data-management/create-map-tile-package.htm

  • ArcGIS Desktop

http://desktop.arcgis.com/zh-cn/arcmap/latest/tools/data-management-toolbox/create-map-tile-package.htm

VTPK

这里写图片描述

和上章节“在线矢量切片”使用类似,只是将在线地址更换为了本地文件。例如:
/sdcard/nxgt/basemap/dzzhdjfb.vtpk

这里写图片描述


package hymn.esrichina.displayamapusingvtpk;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import com.esri.arcgisruntime.layers.ArcGISTiledLayer;
import com.esri.arcgisruntime.layers.ArcGISVectorTiledLayer;
import com.esri.arcgisruntime.mapping.ArcGISMap;
import com.esri.arcgisruntime.mapping.Basemap;
import com.esri.arcgisruntime.mapping.view.MapView;

public class MainActivity extends AppCompatActivity {
    private MapView mainMapView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        try {
            String theOfflineTiledLayers = "/sdcard/Hymn/basemap/dzzhdjfb.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();
        }
    }
}

如何生产VTPK参考:

http://pro.arcgis.com/zh-cn/pro-app/tool-reference/data-management/create-vector-tile-package.htm

MMPK(Basemap)

这里写图片描述

通过ArcGIS Pro可以制作包含基础底图(Basemap)的MMPK,MMPK文件解析后,基础底图(Basemap)中的图层会解析为MobileBasemapLayer,只提供浏览功能。当然,亚洲字符的支持情况在安卓端不是特别好。

这里写图片描述

package hymn.esrichina.displayamapusingmmpkbasemap;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import com.esri.arcgisruntime.loadable.LoadStatus;
import com.esri.arcgisruntime.mapping.ArcGISMap;
import com.esri.arcgisruntime.mapping.Basemap;
import com.esri.arcgisruntime.mapping.LayerList;
import com.esri.arcgisruntime.mapping.MobileMapPackage;
import com.esri.arcgisruntime.mapping.view.MapView;

import java.util.List;

public class MainActivity extends AppCompatActivity {
    private MapView mainMapView;
    private MobileMapPackage mainMobileMapPackage;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        try {
            String mainMMPKPath = "/sdcard/Hymn/basemap/MobileBasemapLayer.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();
                        ArcGISMap mainArcGISMap = mainArcGISMapL.get(0);
                        Basemap mainBasemap = mainArcGISMap.getBasemap();
                        LayerList mainMMPKLL = mainArcGISMap.getOperationalLayers();
                        mainMapView.setMap(mainArcGISMap);
                    }
                }
            });
        } catch (Exception e) {

        }
    }
}

解析结果以MobileBasemapLayer对象包含在ArcGISMap对象的Basemap中。

如何生产MMPK,可以参考:

http://pro.arcgis.com/zh-cn/pro-app/tool-reference/data-management/create-mobile-map-package.htm

结尾

源程序包含:

DisplayAMapUsingMMPKBasemap
DisplayAMapUsingTPK
DisplayAMapUsingVTPK
请自行下载:
链接:http://pan.baidu.com/s/1o8BbX1K 密码:0162
若失效,可发邮件给韩源萌(polyline@126.com)索要。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

虾神说D

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值