安卓智能地图开发与实施八:离线业务图层(浏览查询) - ArcGIS Runtime SDK for Android(Version 100.0.0)

0
分享 2017-08-21
离线业务图层
离线业务图层,在很大程度上减少了对网络的依附。无论是哪个行业的外业核查,都需要详细的原有信息进行支撑,而涉及地图、位置的信息核查,通过离线数据可以在本端形成对比核实能力。
离线业务图层 - 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-c ... t.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 ... 6quot;));
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/pr ... e.htm

结尾



源程序包含:
DisplayAMapUsingGeodatabase 
DisplayAMapUsinggeodatabaseMMPK 
请自行下载: 
链接:http://pan.baidu.com/s/1c2emBjM 密码:dtm9 
若失效,可发邮件给韩源萌(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/71451499

0 个评论

要回复文章请先登录注册