如何在Android中查看ArcGIS图层图例?
How to view ArcGIS layer legend in Android?
我的 ArcGIS Feature Server 中有 3 个图层(Drainage、Bridge 和 Slope)。我的 Android 应用程序查看 ArcGISmap
上的每个图层,并根据复选框勾选设置图层可见性。我正在为 Android(版本 100.1)使用 ArcGIS Runtime SDK。
我的问题是,是否可以在我的图层对话框中查看要素服务器中的图层图例?意思是更换3个可爱的图标。
Android App(中间层对话框)
特征服务器(左侧的图层图例)
提前致谢!
更新
感谢 to use Create Swatch!这是我的工作代码
// Loop each layer
for (int x=0; x<featureLayer.length; x++)
{
try
{
// Try get each layer legend
final ListenableFuture<List<LegendInfo>> layerLegend = featureLayer[x].fetchLegendInfosAsync();
final int finalX = x;
layerLegend.addDoneListener(new Runnable()
{
@Override
public void run()
{
try
{
// Get each layer legend
List<LegendInfo> legendInfo = layerLegend.get();
Symbol legendSymbol = legendInfo.get(0).getSymbol();
ListenableFuture<Bitmap> symbolSwatch = legendSymbol.createSwatchAsync(MainActivity.this, Color.TRANSPARENT);
// Set each layer legend
Bitmap symbolBitmap = symbolSwatch.get();
ImageView swatchImg = (ImageView) drawerDialog.findViewById(layerImageViewId[finalX]);
swatchImg.setImageBitmap(symbolBitmap);
}
catch (InterruptedException e)
{
//showMessage("Animation interrupted");
}
catch (ExecutionException e)
{
// Deal with exception during animation...
}
}
});
}
catch (Exception e)
{
// Ignore changing layer legend
}
}
Android App(更新图层对话框,中间有所需的图例)
我认为 Create Swatch 会满足您的需求。
仅展示一种使用方法:
float density = InstrumentationRegistry.getContext().getResources().getDisplayMetrics().density;
for (FeatureType type : featureTable.getFeatureTypes()) {
for (FeatureTemplate template : type.getTemplates()) {
Geometry geometry = //create whatever shape you want the swatch to be
Feature feature = featureTable.createFeature(template, geometry);
Symbol symbol = featureLayer.getRenderer().getSymbol(feature);
ListenableFuture<Bitmap> symbolSwatch = symbol.createSwatchAsync(24, 24,
density,color,feature.getGeometry());
Bitmap swatch = symbolSwatch.get();
}
}
我的 ArcGIS Feature Server 中有 3 个图层(Drainage、Bridge 和 Slope)。我的 Android 应用程序查看 ArcGISmap
上的每个图层,并根据复选框勾选设置图层可见性。我正在为 Android(版本 100.1)使用 ArcGIS Runtime SDK。
我的问题是,是否可以在我的图层对话框中查看要素服务器中的图层图例?意思是更换3个可爱的图标。
Android App(中间层对话框)
特征服务器(左侧的图层图例)
提前致谢!
更新
感谢
// Loop each layer
for (int x=0; x<featureLayer.length; x++)
{
try
{
// Try get each layer legend
final ListenableFuture<List<LegendInfo>> layerLegend = featureLayer[x].fetchLegendInfosAsync();
final int finalX = x;
layerLegend.addDoneListener(new Runnable()
{
@Override
public void run()
{
try
{
// Get each layer legend
List<LegendInfo> legendInfo = layerLegend.get();
Symbol legendSymbol = legendInfo.get(0).getSymbol();
ListenableFuture<Bitmap> symbolSwatch = legendSymbol.createSwatchAsync(MainActivity.this, Color.TRANSPARENT);
// Set each layer legend
Bitmap symbolBitmap = symbolSwatch.get();
ImageView swatchImg = (ImageView) drawerDialog.findViewById(layerImageViewId[finalX]);
swatchImg.setImageBitmap(symbolBitmap);
}
catch (InterruptedException e)
{
//showMessage("Animation interrupted");
}
catch (ExecutionException e)
{
// Deal with exception during animation...
}
}
});
}
catch (Exception e)
{
// Ignore changing layer legend
}
}
Android App(更新图层对话框,中间有所需的图例)
我认为 Create Swatch 会满足您的需求。
仅展示一种使用方法:
float density = InstrumentationRegistry.getContext().getResources().getDisplayMetrics().density;
for (FeatureType type : featureTable.getFeatureTypes()) {
for (FeatureTemplate template : type.getTemplates()) {
Geometry geometry = //create whatever shape you want the swatch to be
Feature feature = featureTable.createFeature(template, geometry);
Symbol symbol = featureLayer.getRenderer().getSymbol(feature);
ListenableFuture<Bitmap> symbolSwatch = symbol.createSwatchAsync(24, 24,
density,color,feature.getGeometry());
Bitmap swatch = symbolSwatch.get();
}
}