安卓智能地图开发与实施八:离线业务图层(浏览查询)
来源:互联网 发布:开源wiki系统 java 编辑:程序博客网 时间:2024/05/21 19:29
离线业务图层
离线业务图层,在很大程度上减少了对网络的依附。无论是哪个行业的外业核查,都需要详细的原有信息进行支撑,而涉及地图、位置的信息核查,通过离线数据可以在本端形成对比核实能力。
离线业务图层 - Geodatabase文件(FeatureLayer)
离线FeatureLayer(Geodatabase文件)通过GeodatabaseFeatureTable来解析Geodatabase文件。添加FeatureLayer,理论上或者说代码层面是可以不需要基础底图(Basemap),展示的结果就只是业务图层。但是ArcGISMap对象是需要新建出来的。
package hymn.esrichina.displayamapusinggeodatabase;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import com.esri.arcgisruntime.data.Geodatabase;import com.esri.arcgisruntime.data.GeodatabaseFeatureTable;import com.esri.arcgisruntime.data.TileCache;import com.esri.arcgisruntime.layers.ArcGISTiledLayer;import com.esri.arcgisruntime.layers.FeatureLayer;import com.esri.arcgisruntime.mapping.ArcGISMap;import com.esri.arcgisruntime.mapping.Basemap;import com.esri.arcgisruntime.mapping.LayerList;import com.esri.arcgisruntime.mapping.view.MapView;import java.util.List;public class MainActivity extends AppCompatActivity { private MapView mainMapView; private ArcGISMap mainArcGISMap; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); try { String mainGeodatabaseFilePath = "/sdcard/Hymn/operation_read/ZhuanTi.geodatabase"; mainMapView = (MapView) findViewById(R.id.mainMapView); TileCache vTileCache = new TileCache("/sdcard/Hymn/basemap/ImageBasemap.tpk"); ArcGISTiledLayer mainArcGISTiledLayer = new ArcGISTiledLayer(vTileCache); Basemap mainBasemap = new Basemap(mainArcGISTiledLayer); mainArcGISMap = new ArcGISMap(mainBasemap); mainMapView.setMap(mainArcGISMap); final Geodatabase mainGeodatabase = new Geodatabase(mainGeodatabaseFilePath); mainGeodatabase.loadAsync(); mainGeodatabase.addDoneLoadingListener(new Runnable() { @Override public void run() { List<GeodatabaseFeatureTable> resultsGFT = mainGeodatabase.getGeodatabaseFeatureTables(); int valueCount = resultsGFT.size(); for (int i = valueCount - 1; i > -1; i--) { FeatureLayer valueFL = new FeatureLayer(resultsGFT.get(i)); valueFL.setVisible(true); LayerList mainLayerList = mainArcGISMap.getOperationalLayers(); mainLayerList.add(valueFL); } } }); } catch (Exception e) { } }}
Geodatabase 文件有两种生产方式,针对移动端查询浏览类的这里先只描述通过ArcGIS
Desktop生产。准备好需要作为基础底图的Mxd文档,与基础底图不同的是,图层不能包含子图层。当然只有一个图层也是可以的。
Geodatabase 文件生产
1、在ArcMap中,开启ArcGIS Runtime工具
2、分享Mxd文档中的图层为.geodatabase文件
(为了能够查询,可使用默认参数)
4、修改“ArcGIS Runtime Content”存储的位置。
5、点击“分析(Analyze)”,无错误后,点击“分享(Share)”。
6、等待完成,到相应的文件夹找到.geodatabase文件。
7、文件名称可以随意修改,建议用英文字母。
8、放入安卓手机中。
注:也可以调用工具(Create Runtime Content)生产。
创建运行时内容工具使用参考:
http://desktop.arcgis.com/zh-cn/arcmap/latest/tools/data-management-toolbox/create-runtime-content.htm
离线业务图层 - MMPK文件(FeatureLayer)
MMPK不仅可是生产基础底图(Basemap)还可以生产业务图层(OperationalLayers),当然两者不能同时包含在一个MMPK文件中。
与Geodatabase文件相比,MobileMapPackage(MMPK)文件的优势在于对要素量较大的数据来说加载效果和效率好。从各自内部包含的图层来看,MMPK明显做过了调优,考虑了图层索引顺序问题,也就是说MMPK中的业务图层的图层索引编号是倒置过的。而Geodatabase文件中获取的图层,往ArcGISMap中添加时,为了保证和生产该文件的图层顺序相同,需要从末位倒序加入。
小图片展示的是2015年7月西安周边的大气气溶胶分布情况,越红越污染大,明显可以看出靠近秦岭环境好,而且从红色蔓延的趋势来看,污染是从东北方向来的。
package hymn.esrichina.displayamapusinggeodatabasemmpk;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import com.esri.arcgisruntime.layers.ArcGISTiledLayer;import com.esri.arcgisruntime.layers.FeatureLayer;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 Basemap mainBasemap; private ArcGISMap mainArcGISMap; private LayerList mainLayerList; private MobileMapPackage mainMobileMapPackage; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); try { mainMapView = (MapView) findViewById(R.id.mainMapView); mainBasemap = new Basemap(new ArcGISTiledLayer( "http://map.geoq.cn/arcgis/rest/services/ChinaOnlineCommunity/MapServer")); mainArcGISMap = new ArcGISMap(mainBasemap); mainMapView.setMap(mainArcGISMap); String mainMMPKPath = "/sdcard/Hymn/operation_read/气溶胶.mmpk"; 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 mainArcGISMapMMPK = mainArcGISMapL.get(0); Basemap mainBasemapMMPK = mainArcGISMapMMPK.getBasemap(); LayerList mainMMPKLL = mainArcGISMapMMPK.getOperationalLayers(); mainLayerList = mainArcGISMap.getOperationalLayers(); FeatureLayer mainFeatureLayer = (FeatureLayer) mainMMPKLL.get(0); mainFeatureLayer.setOpacity(0.8f); mainArcGISMapMMPK.getOperationalLayers().remove(0); mainLayerList.add(mainFeatureLayer); } } }); } catch (Exception e) { String eStr = e.toString(); } }}
MMPK文件加载(loadAsync)完成后,得到的是ArcGISMap对象,要将其中的业务图层(FeatureLayer)加载到其他ArcGISMap 当中,需要从原ArcGISMap对象中移除:
mainArcGISMapMMPK.getOperationalLayers().remove(0);
如何生产MMPK,可以参考:
http://pro.arcgis.com/zh-cn/pro-app/tool-reference/data-management/create-mobile-map-package.htm
结尾
源程序包含:
DisplayAMapUsingGeodatabase
DisplayAMapUsinggeodatabaseMMPK
请自行下载:
链接:http://pan.baidu.com/s/1c2emBjM 密码:dtm9
若失效,可发邮件给韩源萌(polyline@126.com)索要。
- 安卓智能地图开发与实施八:离线业务图层(浏览查询)
- 安卓智能地图开发与实施七:在线业务图层(浏览查询)
- 安卓智能地图开发与实施十一:业务数据查询
- 安卓智能地图开发与实施六:离线基础底图
- 安卓智能地图开发与实施十:图层管理
- 安卓智能地图开发与实施二十:栅格图层展示
- 安卓智能地图开发与实施十五:离线与同步
- 安卓智能地图开发与实施一:配置离线SDK
- 安卓智能地图开发与实施十四:业务数据编辑
- 安卓智能地图开发与实施十六:三维地图
- 安卓智能地图开发与实施十二:空间查询与模糊搜索
- 安卓智能地图开发与实施十三:空间查询与展示
- 安卓智能地图开发与实施五:在线基础底图
- 安卓智能地图开发与实施十七:使用天地图
- 安卓智能地图开发与实施四:二维地图的MapView与Layers
- 安卓智能地图开发与实施九:地图缩放与旋转
- 安卓智能地图开发与实施三:创建第一个地图程序
- 安卓智能地图开发与实施二:开发环境准备
- Android中关于ScrollView嵌套listView,ListView Item只显示一行的解决方法
- 【机器学习】SVM浅谈
- HashMap的工作原理
- 详解Java解析XML的四种方法
- ros-qt环境搭建
- 安卓智能地图开发与实施八:离线业务图层(浏览查询)
- 战旗直播平台弹幕登录分析
- Linux入门(一)根目录介绍
- HashMap和Hashtable的区别
- 一致性哈希算法
- 一元多项式的乘法与加法运算
- 前端同学大福利,最全的面试题目整理
- 常用的分布式事务解决方案(1)
- webapp高德地图