ArcGIS Runtime for Android中能调整图层顺序吗?

我在ArcGIS Runtime for Android 100.6中添加了很多本地矢量图层,请问有没有办法来调整加载的图层顺序?
比如,我用mMapView.getMap().getOperationalLayers()获取到了已有图层的列表,我想把第1个和第2个交换一下位置,除了remove掉重新add()之外,有其他办法吗?
我用Collections.swap()mMapView.getMap().getOperationalLayers().set()都会报如下错误:

com.esri.arcgisruntime.ArcGISRuntimeException: Object already owned.: Already owned.
at com.esri.arcgisruntime.internal.jni.CoreVector.nativeInsert(Native Method)
at com.esri.arcgisruntime.internal.jni.CoreVector.a(SourceFile:158)
at com.esri.arcgisruntime.internal.p.u.set(SourceFile:129)


已邀请:

张佳期

赞同来自:

以下代码使用runtime for android100.10,可以实现,
// 加载本地的shp1
ShapefileFeatureTable shapefileFeatureTable = new ShapefileFeatureTable(
getExternalFilesDir(null) + getString(R.string.water_path2));

// create a feature layer to display the shapefile
FeatureLayer shapefileFeatureLayer = new FeatureLayer(shapefileFeatureTable);
mMapView.getMap().getOperationalLayers().add(shapefileFeatureLayer);

shapefileFeatureTable.addDoneLoadingListener(() -> {
if (shapefileFeatureTable.getLoadStatus() == LoadStatus.LOADED) {
// zoom the map to the extent of the shapefile
mMapView.setViewpointAsync(new Viewpoint(shapefileFeatureLayer.getFullExtent()));

//shp1替换成shp2
ShapefileFeatureTable shapefileFeatureTable2 = new ShapefileFeatureTable(
getExternalFilesDir(null) + getString(R.string.bj3857_path1));

FeatureLayer shapefileFeatureLayer2 = new FeatureLayer(shapefileFeatureTable2);

SimpleLineSymbol lineSymbol = new SimpleLineSymbol(SimpleLineSymbol.Style.SOLID, Color.RED, 1.0f);
SimpleFillSymbol fillSymbol = new SimpleFillSymbol(SimpleFillSymbol.Style.SOLID, Color.YELLOW, lineSymbol);

SimpleRenderer renderer = new SimpleRenderer(fillSymbol);

shapefileFeatureLayer2.setRenderer(renderer);

mMapView.getMap().getOperationalLayers().set(0, shapefileFeatureLayer2);


} else {
String error = "Shapefile feature table failed to load: " + shapefileFeatureTable.getLoadError().toString();
Toast.makeText(MainActivity.this, error, Toast.LENGTH_LONG).show();
Log.e(TAG, error);
}
});

// 加载本地的shp2
ShapefileFeatureTable shapefileFeatureTable1 = new ShapefileFeatureTable(
getExternalFilesDir(null) + getString(R.string.bj3857_path1));
FeatureLayer shapefileFeatureLayer1 = new FeatureLayer(shapefileFeatureTable1);

// create the Symbol
SimpleLineSymbol lineSymbol = new SimpleLineSymbol(SimpleLineSymbol.Style.SOLID, Color.RED, 1.0f);
SimpleFillSymbol fillSymbol = new SimpleFillSymbol(SimpleFillSymbol.Style.SOLID, Color.YELLOW, lineSymbol);

// create the Renderer
SimpleRenderer renderer = new SimpleRenderer(fillSymbol);
shapefileFeatureLayer1.setRenderer(renderer);
mMapView.getMap().getOperationalLayers().add(shapefileFeatureLayer1);

shapefileFeatureTable1.addDoneLoadingListener(() -> {
if (shapefileFeatureTable1.getLoadStatus() == LoadStatus.LOADED) {
// zoom the map to the extent of the shapefile
mMapView.setViewpointAsync(new Viewpoint(shapefileFeatureLayer1.getFullExtent()));
//shp2替换成shp1
ShapefileFeatureTable shapefileFeatureTable3 = new ShapefileFeatureTable(
getExternalFilesDir(null) + getString(R.string.water_path2));

FeatureLayer shapefileFeatureLayer3 = new FeatureLayer(shapefileFeatureTable3);

mMapView.getMap().getOperationalLayers().set(1, shapefileFeatureLayer3);
} else {
String error = "Shapefile feature table failed to load: " + shapefileFeatureTable1.getLoadError().toString();
Toast.makeText(MainActivity.this, error, Toast.LENGTH_LONG).show();
Log.e(TAG, error);
}
});

要回复问题请先登录注册