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

0
分享 2017-08-21
离线基础底图(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/pr ... e.htm
  • ArcGIS Desktop


http://desktop.arcgis.com/zh-c ... e.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/pr ... e.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/pr ... e.htm

结尾



源程序包含:
DisplayAMapUsingMMPKBasemap 
DisplayAMapUsingTPK 
DisplayAMapUsingVTPK 
请自行下载: 
链接:http://pan.baidu.com/s/1o8BbX1K 密码:0162 
若失效,可发邮件给韩源萌(polyline@126.com)索要。
 
 安卓智能地图开发与实施一:配置离线SDK - ArcGIS Runtime SDK for Android(Version 100.0.0) :http://zhihu.esrichina.com.cn/article/3304
 安卓智能地图开发与实施二:开发环境准备 - ArcGIS Runtime SDK for Android(Version 100.0.0) :http://zhihu.esrichina.com.cn/article/3303
 安卓智能地图开发与实施三:创建第一个地图程序 - ArcGIS Runtime SDK for Android(Version 100.0.0) :http://zhihu.esrichina.com.cn/article/3302
 安卓智能地图开发与实施四:二维地图的MapView与Layers - ArcGIS Runtime SDK for Android(Version 100.0.0) :http://zhihu.esrichina.com.cn/article/3305
 安卓智能地图开发与实施五:在线基础底图 - ArcGIS Runtime SDK for Android(Version 100.0.0) :http://zhihu.esrichina.com.cn/article/3309
 安卓智能地图开发与实施六:离线基础底图 - ArcGIS Runtime SDK for Android(Version 100.0.0) :http://zhihu.esrichina.com.cn/article/3299
 安卓智能地图开发与实施七:在线业务图层(浏览查询) - ArcGIS Runtime SDK for Android(Version 100.0.0) :http://zhihu.esrichina.com.cn/article/3298
 安卓智能地图开发与实施八:离线业务图层(浏览查询) - ArcGIS Runtime SDK for Android(Version 100.0.0) :http://zhihu.esrichina.com.cn/article/3297
 安卓智能地图开发与实施九:地图缩放与旋转 - ArcGIS Runtime SDK for Android(Version 100.0.0) :http://zhihu.esrichina.com.cn/article/3296
 安卓智能地图开发与实施十:图层管理 - ArcGIS Runtime SDK for Android(Version 100.0.0) :http://zhihu.esrichina.com.cn/article/3295
 安卓智能地图开发与实施十一:业务数据查询 - ArcGIS Runtime SDK for Android(Version 100.0.0) :http://zhihu.esrichina.com.cn/article/3294
 安卓智能地图开发与实施十二:空间查询与模糊搜索 - ArcGIS Runtime SDK for Android(Version 100.0.0) :http://zhihu.esrichina.com.cn/article/3293
 安卓智能地图开发与实施十三:空间查询与展示 - ArcGIS Runtime SDK for Android(Version 100.0.0) :http://zhihu.esrichina.com.cn/article/3308
 安卓智能地图开发与实施十四:业务数据编辑 - ArcGIS Runtime SDK for Android(Version 100.0.0) :http://zhihu.esrichina.com.cn/article/3307
 安卓智能地图开发与实施十五:离线与同步 - ArcGIS Runtime SDK for Android(Version 100.0.0) :http://zhihu.esrichina.com.cn/article/3306
 安卓智能地图开发与实施十六:三维地图 - ArcGIS Runtime SDK for Android(Version 100.1.0) :http://zhihu.esrichina.com.cn/article/3289
 安卓智能地图开发与实施十七:使用天地图 - ArcGIS Runtime SDK for Android(Version 100.1.0) :http://zhihu.esrichina.com.cn/article/3288
 安卓智能地图开发与实施十八:空间要素绘制 - ArcGIS Runtime SDK for Android(Version 100.1.0) :http://zhihu.esrichina.com.cn/article/3287
 安卓智能地图开发与实施十九:符号与渲染器 - ArcGIS Runtime SDK for Android(Version 100.1.0) :http://zhihu.esrichina.com.cn/article/3286
文章来源:http://blog.csdn.net/allenlu2008/article/details/71159736

1 个评论

求教,为什么ArcGISMap加载TPK离线地图只能用set,以前的10.2.9的版本都是用map.addLayer直接添加多个TPK离线地图都可以
现在怎么才能添加多个TPK离线地图呢

要回复文章请先登录注册