ArcGIS for Android 获取FeatureLayer的图例

本文介绍了一种通过FeatureLayer的FeatureType或FeatureTemplate获取图例的方法,并提供了一个Android应用程序示例,展示了如何在MapView中显示特定FeatureLayer的图例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

要获得FeatureLayer的图例,可以从FeatureLayer的FeatureType中FeatureTemplate中获取,如果该FeatureLayer不包含FeatureType,可以直接从FeatureLayer的FeatureTemplate中获取。

 

以下代码展示了,长按屏幕,弹出对话框,对话框中显示MapView中FeatureLayer的图例:(绝大部分代码来自API中的GeometryEditor例子)

public class GetLegendActivity extends Activity {
   
    MapView mMapView ;
    private List<Legend> gends=new ArrayList<Legend>();
    private ListView lv;
 
    /** Calledwhen the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
       mMapView = new MapView(this);
       ArcGISTiledMapServiceLayer atm=new ArcGISTiledMapServiceLayer("http://services.arcgisonline.com/ArcGIS/rest/services/ESRI_StreetMap_World_2D/MapSer       ver");
       ArcGISFeatureLayer afl=new ArcGISFeatureLayer("http://sampleserver5.arcgisonline.com/ArcGIS/rest/services/LocalGovernment/Recreation/FeatureServer/       0", ArcGISFeatureLayer.MODE.ONDEMAND);
       mMapView.addLayer(atm);
       mMapView.addLayer(afl);
       setContentView(mMapView);
       mMapView.setOnStatusChangedListener(new OnStatusChangedListener() {
           private static final long serialVersionUID = 1L;
           public void onStatusChanged(Object arg0, STATUS arg1) {
              if(arg0==mMapView && arg1==STATUS.INITIALIZED){//地图加载成功
                  Toast.makeText(GetLegendActivity.this, "地图加载成功", Toast.LENGTH_SHORT).show();
                  //添加长按地图事件
                  mMapView.setOnLongPressListener(new MyOnLongPressListener());
                 
              }
             
           }
       });
    }
   
    //取得图例,并将取得的图例放到List<Legend> 中返回
    private List<Legend> getLends(){
    List<Legend>  ls=new ArrayList<Legend>();
    Layer[]layers=  mMapView.getLayers();
    for(Layer l: layers){
        if(l instanceofArcGISFeatureLayer){
            ArcGISFeatureLayeraf=(ArcGISFeatureLayer) l;
            FeatureType[]types= af.getTypes();
            Renderer<Graphic> renders=   af.getRenderer();
            for(FeatureType type:types){
               FeatureTemplate[]tems= type.getTemplates();
               for(FeatureTemplatetem:tems){
                   Stringname=tem.getName();
                   Graphicg= af.createFeatureWithTemplate(tem, null);
                   Symbols=renders.getSymbol(g);
              
                   //由于该FeatureLayer是个点图层,所以可以直接new Point(20, 20),如下:
                   //Bitmap bitmap= af.createSymbolImage(s, new Point(20,20), 40, 40, Color.WHITE);
                   //如果不知道FeatureLayer是的类型,就要需要使用FeatureTemplate.DRAWING_TOOL,如下createSymbolBitmap方法:
                   Bitmap bitmap= createSymbolBitmap(af, tem);
                   Legendle=new Legend(name, bitmap, s);
                   ls.add(le);
               }
            }
            if(ls.size()==0){//该FeatureLayer不包含FeatureType
                FeatureTemplate[]templates= af.getTemplates();
                for(FeatureTemplatetemplate : templates){
                    Graphicgra=af.createFeatureWithTemplate(template, null);
                    Symbolsymbol=renders.getSymbol(gra);
                    //Bitmap bitm=af.createSymbolImage(symbol,new Point(20,20), 40, 40,  Color.WHITE);
                    Bitmapbitm=createSymbolBitmap(af, template);
                    Legendle=new Legend(template.getName(), bitm, symbol);
                   ls.add(le);
                }
             }
        }
       
    }
    Log.i("GetLegendActivity", "共有图例"+ls.size());
    return ls;
    }
   
    //长按地图事件
   class MyOnLongPressListener implements OnLongPressListener{
    private static final long serialVersionUID = 1L;
 
    public void onLongPress(float arg0, float arg1) {
       showDialog(0);
    }
   }
  
   //如果不知道FeatureLayer的类型,可以通过 FeatureTemplate.DRAWING_TOOL来判断
    private Bitmap createSymbolBitmap(ArcGISFeatureLayerfeaturelayer, FeatureTemplate featureTemplate) {
        // determine feature type
       FeatureTemplate.DRAWING_TOOL drawing_tool =featureTemplate.getDrawingTool();
        Geometry geometry = null;
        if (drawing_tool ==DRAWING_TOOL.POLYGON) {
          Polygon polygon = new Polygon();
         polygon.startPath(0,0);
          polygon.lineTo(0,40);
         polygon.lineTo(40,40);
          polygon.lineTo(40,0);
          polygon.lineTo(0,0);
          geometry = polygon;
        } else if (drawing_tool ==DRAWING_TOOL.LINE) {
          Polyline polyline = new Polyline();
          polyline.startPath(1,1);
          polyline.lineTo(39, 39);
          geometry = polyline;
        } else if (drawing_tool ==DRAWING_TOOL.POINT)
          geometry = new Point(20,20);
 
        Graphic g =featurelayer.createFeatureWithTemplate(featureTemplate, null);
        Renderer<Graphic>renderer = featurelayer.getRenderer();
        Symbol symbol =renderer.getSymbol(g);    
        Bitmap bitmap =featurelayer.createSymbolImage(symbol, geometry, 40, 40, Color.WHITE);
        return bitmap;
       }
  
 
 
    @Override
protected Dialog onCreateDialog(int id) {
    lv=new ListView(this);
    gends=getLends();
    Builder builder=new Builder(this);
    builder.setView(lv);
    lv.setAdapter(new MyAdapter());
    return builder.create();
}
 
    //ListView的适配器
class MyAdapter extends BaseAdapter{
    public int getCount() {
       return gends.size();
    }
 
    public Object getItem(int position) {
       return gends.get(position);
    }
 
    public long getItemId(int position) {
       return position;
    }
 
    public View getView(int position, View convertView, ViewGroupparent) {
       ListViewHolder holder;
       if(convertView==null){
           convertView=View.inflate(GetLegendActivity.this, R.layout.apdapter,null);
           holder=new ListViewHolder();
           holder.legendview=(ImageView) convertView.findViewById(R.id.adapter_image);
           holder.textview=(TextView) convertView.findViewById(R.id.adapter_text);
          
       }else{
           holder=(ListViewHolder) convertView.getTag();
       }
       Legend l=(Legend) getItem(position);
       holder.legendview.setImageBitmap(l.getBitmap());
       holder.textview.setText(l.getName());
       convertView.setTag(holder);
       return convertView;
    }
 
}
 
//ListView adapter的Holder
class ListViewHolder{
    ImageView legendview;
    TextView textview;
}
@Override
    protected void onDestroy() {
       super.onDestroy();
 }
    @Override
    protected void onPause() {
       super.onPause();
       mMapView.pause();
 }
    @Override protected void onResume() {
       super.onResume();
       mMapView.unpause();
    }
 
}


效果

 


下载全部代码



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值