ArcGIS Runtime SDK for Android 读取tpk、vtpk

前言

    tpk是ArcGIS 10.1推出的一种新的数据文件类型,主要用于将切片文件打包行程离线地图包,tpk可以在ArcGIS Runtime或ArcGIS for Android/IOS中作为切片底图被加载。从地图或底图生成切片,并将切片进行打包从而创建单个压缩的 .tpk 文件。切片包(.tpk)是在地图或栅格数据集中能作为 Web 切片或 Web 高程图层发布的一组切片(图像)。

ArcGIS Runtime SDK for Android 读取tpk、vtpk_第1张图片

    arcgis生成的tpk修改后缀为zip后: 

ArcGIS Runtime SDK for Android 读取tpk、vtpk_第2张图片

    矢量切片(vtpk)是一种利用协议缓冲(Protocol Buffers)技术的紧凑的二进制格式用来传递信息。通俗的说,就是将矢量数据以建立金字塔的方式,像栅格切片那样分割成一个一个描述性文件,以GeoJson格式或者以pbf等自定义格式组织,然后在前端根据显示需要按需请求不同的矢量瓦片数据进行Web绘图。[更多详情]

    目前根据ESCAGE博主所知道的矢量切片生成方式共有以下几种:1)ArcGIS 系列产品:利用ArcGIS Pro生成矢量切片,然后发布在ArcGIS Online上;2)Mapbox;3)GeoServer,在2.11beta版中出现了对矢量切片的支持;4)自己编写切片工具

    arcgis pro生成的vtpk修改后缀为zip后: 

创建tpk/vtpk

    ArcGIS切片包(tpk)的创建

    ArcGIS Pro 生成vtpk  [其他链接]

 

实践

    1.创建Android项目

ArcGIS Runtime SDK for Android 读取tpk、vtpk_第3张图片

 

    2.添加Runtime SDK依赖

        ESRI提供了两种SDK方式,一种是本地方式,但此种方式较为麻烦,另一种是联网方式,这里采用的是联网方式。

        在Project的./build.gradle中添加:

allprojects {
  repositories {
    google()
    jcenter()
    // 添加Esri公共Bintray Maven repository
    maven {
        url 'https://esri.bintray.com/arcgis'
    }
  }
}

        在./app/build.gradle中添加:

dependencies {
    [其他implementation]

    //添加Runtime依赖
    implementation 'com.esri.arcgisruntime:arcgis-android:100.3.0'
    implementation fileTree(dir: 'libs', include: ['*.jar'])
}

    注:若出现“Manifest merger failed : uses-sdk:minSdkVersion 15 cannot be smaller than version 19 declared in library [com.esri.arcgisruntime:arcgis-android:100.3.0]”等类似的错误,则需要修改AndroidSDK版本,方法:

    在Module的Build.gradle中修改:

minSdkVersion 19

 

    3.添加权限及OpenGL ES支持

        在./app/src/main/AndroidManifest.xml中添加:









 

    4.设置界面布局

          在./app/src/main/res/layout中的activity_main.xml中添加MapView控件:

 
    
    

 

    5.编写代码

        思路:MapView用于显示地图(ArcGISMap),而地图(ArcGISMap)需要设置底图(Basemap),底图(Basemap)需要图层(ArcGISTiledLayer / ArcGISVectorTiledLayer)。

        步骤:在上步布局相应的Activty的onCreate方法中:

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

public class MainActivity extends AppCompatActivity {
    MapView mapView;
    ArcGISTiledLayer tiledLayer;
    ArcGISMap map;
    Basemap basemap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        mapView = (MapView) findViewById(R.id.mapView);
        String fileTPK = Environment.getExternalStorageDirectory().getAbsolutePath()+"/myTestTPK.tpk";
        tiledLayer = new ArcGISTiledLayer(fileTPK); // tpk
        // tiledLayer = new ArcGISVectorTiledLayer(fileVTPK); //vtpk
        basemap = new Basemap(tiledLayer);
        map = new ArcGISMap(basemap);
        mapView.setMap(map);

    }
}

 

    6.运行APP:可以进行简单的2D地图的浏览与缩放

ArcGIS Runtime SDK for Android 读取tpk、vtpk_第4张图片

 

生成apk

    AndroidStudio项目生成APK文件

    Android Studio打包没有Generate signed apk选项

    apk生成位置:/设置的工程存储路径/项目名/app/release(或是debug)/xxx.apk

 

其他

    推荐该博主的一系列入门教程:ArcGIS Runtime SDK for Android 入门(1):第一个地图应用程序(二维)

    Android Studio入门项目编写

    Android Studio将本地计算机文件上传到模拟器scard文件中

    Android Studio 3.0找不到Android Device Monitor

    Arcgis for Android加载tpk文件遇到的错误

    WebGIS中矢量切图的初步研究

你可能感兴趣的:(GIS)