android arcgis(100.0.0)載入MMPK和GEODATABASE資料型別的離線圖層
阿新 • • 發佈:2018-12-03
arcgis版本:arcgis-android:100.0.0
圖層型別:使用FeatureLayer
資料型別:MMPK,GEODATABASE
//圖層載入類 LayerUtil{ private static ArrayList<FeatureLayer> mFeatureLayerList; public interface LayerResult { void getLayer(); } //type為離線資料型別,path離線資料存放的位置 public static void loadLayer(LayerType type, String path, LayerResult layerResult) { mFeatureLayerList = new ArrayList<FeatureLayer>(); switch (type) { case OPERATIONALLAYER_MMPK: final MobileMapPackage mobileMapPackage = new MobileMapPackage( path); mobileMapPackage.loadAsync(); mobileMapPackage.addDoneLoadingListener(new Runnable() { @Override public void run() { LoadStatus mainLoadStatus = mobileMapPackage.getLoadStatus(); if (mainLoadStatus == LoadStatus.LOADED) { List<ArcGISMap> mArcGisMaps = mobileMapPackage.getMaps(); for (ArcGISMap mArcGisMap : mArcGisMaps) { LayerList mmpkOperationalLayers = mArcGisMap.getOperationalLayers(); for (Layer layer : mmpkOperationalLayers) { if (layer instanceof FeatureLayer) { FeatureLayer mFeatureLayer = (FeatureLayer) layer; mFeatureLayerList.add(mFeatureLayer); } mLayerResult.getLayer(); } mmpkOperationalLayers.clear(); } } } }); break; case GEODATABASE: final Geodatabase geodatabase = new Geodatabase(path); geodatabase.loadAsync(); geodatabase.addDoneLoadingListener(new Runnable() { @Override public void run() { List<GeodatabaseFeatureTable> featureTables = geodatabase.getGeodatabaseFeatureTables(); int dataCount = featureTables.size(); for (int i = dataCount - 1; i > -1; i--) { FeatureLayer featureLayer = new FeatureLayer(featureTables.get(i)); mFeatureLayerList.add(featureLayer); } mLayerResult.getLayer(); } }); break; } } public static ArrayList<FeatureLayer> getFeatureLayerList() { return mFeatureLayerList; } }
//使用上述方法載入離線圖層 MapView mainMapView = (MapView) findViewById(R.id.mapView);//esri地圖控制元件 LayerList mainLayerList = mainMapView.getMap().getOperationalLayers(); //獲取當前地圖載入的業務圖層集合 LayerUtil layerUtil = new LayerUtil(); layerUtil.loadLayer(LayerType.GEODATABASE, path, new LayerManagerUtil.LayerResult() { @Override public void getLayer() { mLayerList = layerUtil .getFeatureLayerList(); for (int i = 0; i < mLayerList.size(); i++) { FeatureLayer featureLayer = (FeatureLayer) mLayerList.get(i); if (!featureLayer.isLabelsEnabled()) { featureLayer.setLabelsEnabled(true); } mainLayerList.add(featureLayer); featureLayer.addDoneLoadingListener(new Runnable() { @Override public void run() { Toast.makeText(MainActivity.getApplicationContext(), "載入成功", Toast.LENGTH_SHORT).show(); } }); } } });