去年的Esri大会,随着最新的ArcGIS 10.5产品的发布,全新的ArcGIS Runtime 100.0也随之发布。ArcGIS Runtime 100.0 可谓是有了个天翻地覆的改进,比如跨平台、3D地图的加载以及多样的地图离线选择等。其实这里面我最感兴趣的是可以加载MMPK数据,MMPK是一种全新的移动地图包,有很多创新和优势,总结起来是一下几点:
- 数据存储于压缩的Mobile GDB中,相比起切片数据,体积小了很多;
- 保存了所有的fearture要素,底图上展示的都是要素,可供查询和分析;
- 可以将所有地图和数据资源打包,
总结下,就是通过一个文件实现了之前TPK和geodatabase加起来实现的功能,并且体积更小,速度更快。这对于经常要用多个切片数据,时常面临着移动端内存卡空间不足的我来说,绝对是个福音。
然而,Rumtime100里对大量的接口,类和方法就行了更改,如果直接移植到我们的产品上,那绝对是万里江山一片红,而且性能的稳定性也没经过太多测试,于是,我想慢慢实践、测试下,了解后再移植到产品里。
本篇是一篇初步实践篇,通过将之前我写的空间分析的demo为例(博客地址http://blog.csdn.net/bit_kaki/article/details/76581848)进行移植尝试,获取对于ArcGIS Runtime 100.0的初步印象。
一、环境配置
和之前ArcGIS所需环境差不多,在project的build.gradle里添加url:
allprojects { repositories { jcenter() maven { url 'http://esri.bintray.com/arcgis' } } }
然后在module的build.gradle里添加compile:
dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:25.3.1' // compile 'com.esri.arcgis.android:arcgis-android:10.2.8' compile 'com.esri.arcgisruntime:arcgis-android:100.0.0' }
注意下面个是Runtime100,被我注释掉的是之前用的10.2.8
二、导入包
等gradle更新完毕了以后,进入我们的主activity页面会看到这样的情况:
祖国江山一片红,可谓凄惨。
不过没关系,这主要是原来10.2版本的包名和现在的包名不一样导致的。我们需要将以前导入的类删掉,重新导入一下:
重新导入包以后,我们会发现,呃,好像好了一点,但依然是祖国江山半壁红。
其实是Runtime100里很多类和方法都进行了更改,比如上图里我们可以看到之前常用的Line和GraphicsLayer类都已经不存在了,只能用其他类替代;另外改变了很多方法,也新增了很多方法,所以我们就一步一步来看看吧。
三、地图和图层的加载(MapView和Layer)
首先我们先回顾下10.2里的MapView和Layer的关系。
在10.2里MapView直接继承于ViewGroup类,本身就是地图内容的展示容器,使用时候直接在MapView可以加载各种基础底图、业务图层和绘制图层。
但是在Runtime100里,增加了3D地图显示的功能。为了满足大多数人的使用习惯,Esri依然采用MapView类作为2D地图的展示容器,新增了SceneView类作为3D地图的展示容器,然后这两个类共同继承于一个叫GeoView的基类。