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(); } }
效果
下载全部代码
- ArcGIS for Android 获取FeatureLayer的图例
- ArcGIS for Android 获取webmap的popup window(FeatureLayer)
- ArcGIS for Android FeatureLayer的属性更新
- arcgis for android 图例
- arcgis for android featurelayer 数据删除无效的原因
- ArcGIS API for JavaScript——获取FeatureLayer的属性值
- ArcGIS for Android 离线数据图例加载
- ArcGIS for Android示例解析之FeatureLayer服务-----SelectFeatures
- 【ArcGIS API For JS】关于FeatureLayer的批量编辑
- Arcgis server for js 只FeatureLayer显示label的问题
- ArcGIS featureLayer的查询语句
- ArcGIS for Flex4 点击FeatureLayer 渲染InfoSymbol
- arcgis for js FeatureLayer文字标注
- Arcgis for Silverlight的图例Legend默认折叠
- Android Arcgis(14)、FeatureLayer之范围查询
- Arcgis for Javascript之featureLayer图和属性的互操作
- Arcgis for Javascript之featureLayer图和属性的互操作
- ArcGIS中Featurelayer的简单写法
- Android ListView页眉页脚效果
- SAM格式详解
- 一个小老板的日常管理,希望能让创业朋友学到东西
- 日本に入国してから現在までの活動説明
- 错误累积
- ArcGIS for Android 获取FeatureLayer的图例
- 输出指定日期范围内,为"星期一"的所有日期
- EAS BOS 绑定QUERY的列表界面,代码添加合计脚
- .Net remoting, Webservice,WCF基础
- 使类的成员函数成为回调函数
- Ubuntu如何备份和恢复系统(1)
- 1013. Battle Over Cities @ PAT (Advanced Level) Practise
- 一个最简单的Objective C 程序
- 数据库的敲门砖~