ArcGIS for Android 获取FeatureLayer的图例

来源:互联网 发布:影视类毕业设计 知乎 编辑:程序博客网 时间:2024/05/21 10:25

要获得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;       }        @Overrideprotected 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的Holderclass 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();    } }


效果

 


下载全部代码