ArcGIS for Android FeatureLayer的属性更新
2013-07-24 17:50
302 查看
参考api中所给的属性编辑的例子,写了一个非常简单的属性编辑的程序,单击地图中FeatureLayer的图斑,可以实现选中图斑,并在log中打印出该图斑的所有属性信息,之后点击修改按钮,可以将选中图斑中字段为field_name的值改为“哈哈”。(更新其他属性也可原理类似,可以参考api中提供的AttributeEditor的例子)
代码如下:
打印出来的Log:
下载全部代码
代码如下:
public class AttributeEditTestActivity extends Activity { MapView mMapView ; ArcGISFeatureLayer afl; Map<String,Object> atts; String obID; ArcGISDynamicMapServiceLayer dmsl ; boolean hasSelected=false; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mMapView = (MapView) findViewById(R.id.mapV); Envelope initextent = new Envelope(-10868502.895856911, 4470034.144641369, -10837928.084542884, 4492965.25312689); mMapView.setExtent(initextent, 0); ArcGISTiledMapServiceLayer tmsl = new ArcGISTiledMapServiceLayer( "http://services.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer"); mMapView.addLayer(tmsl); dmsl = new ArcGISDynamicMapServiceLayer("http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/Petroleum/KSFields/MapServer"); mMapView.addLayer(dmsl); afl=new ArcGISFeatureLayer("http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/Petroleum/KSFields/FeatureServer/0", ArcGISFeatureLayer.MODE.SELECTION); mMapView.addLayer(afl); mMapView.setOnStatusChangedListener(new OnStatusChangedListener() { public void onStatusChanged(Object arg0, STATUS arg1) { if(arg0==mMapView && arg1==STATUS.INITIALIZED) mMapView.setOnSingleTapListener(new mySingleTagLis()); //为ArcGISFeatureLayer设置被选中的颜色 SimpleFillSymbol selectSym=new SimpleFillSymbol( Color.BLUE); selectSym.setAlpha(50); selectSym.setOutline(new SimpleLineSymbol(Color.RED, 3)); afl.setSelectionSymbol(selectSym); } }); } /** * 单击地图的监听 */ class mySingleTagLis implements OnSingleTapListener{ public void onSingleTap(float arg0, float arg1) { Point p=mMapView.toMapPoint(arg0 ,arg1); Query q=new Query(); //设置Query的各个参数 q.setInSpatialReference(mMapView.getSpatialReference()); q.setReturnGeometry(true); q.setSpatialRelationship(SpatialRelationship.INTERSECTS); q.setGeometry(p); //执行选择 afl.selectFeatures(q, SELECTION_METHOD.NEW, new qCallBackLis()); } } /** * *执行选择ArcGISFeatureLayer的回调 */ class qCallBackLis implements CallbackListener<FeatureSet>{ public void onCallback(FeatureSet fet) { if(fet.getGraphics().length>0){ hasSelected=true; Graphic g=fet.getGraphics()[0];//得到选择的Graphic obID= g.getAttributeValue(afl.getObjectIdField()).toString();//保存ObjectID的值 atts= g.getAttributes(); //得到包含所有属性的Map集合,并进行遍历之后将属性和属性值打印在Log的上 Set<Entry<String ,Object>> ents= atts.entrySet(); for(Entry<String ,Object> ent:ents){ Log.i("Attribute ",ent.getKey()+" : "+ent.getValue()); } } } public void onError(Throwable arg0) { Log.i("AttributeEditTestActivity", "qCallBackLis 出错啦"+arg0.getMessage()); } } public void btn_click(View v){ if(!hasSelected){ return; } Toast.makeText(getApplicationContext(), "开始提交", 0).show(); atts.put("field_name", "哈哈"); //atts.put(afl.getObjectIdField(), obID);//这里可以不用给objectID赋值,因为atts中已经有该值了, //但在其他情况下一定要记得给objectID赋值,这样server才知道更新那个Graphic的属性 Graphic g=new Graphic(null, null, atts, null); afl.applyEdits(null, null, new Graphic[]{g}, new myEditLis()); } //执行更新操作的回调 class myEditLis implements CallbackListener<FeatureEditResult[][]>{ public void onCallback(FeatureEditResult[][] fets) { if(fets[2]!=null && fets[2][0]!=null && fets[2][0].isSuccess()){ Log.i("AttributeEditTestActivity", "edit 成功啦"); runOnUiThread( new Runnable() {//需要在主线程中才能根系UI public void run() { dmsl.refresh(); Toast.makeText(getApplicationContext(), "edit 成功啦", 0).show(); } }); } } public void onError(final Throwable arg0) { Log.i("AttributeEditTestActivity", "edit 出错啦"+arg0.getMessage()); runOnUiThread( new Runnable() { public void run() { Toast.makeText(getApplicationContext(), "edit 出错啦"+arg0.getMessage(), 0).show(); } }); } } @Override protected void onDestroy() { super.onDestroy(); } @Override protected void onPause() { super.onPause(); mMapView.pause(); } @Override protected void onResume() { super.onResume(); mMapView.unpause(); }
打印出来的Log:
下载全部代码
相关文章推荐
- ArcGIS for Android示例解析之FeatureLayer服务-----SelectFeatures
- Arcgis for Js之featurelayer实现空间查询和属性查询
- ArcGIS for Android 获取webmap的popup window(FeatureLayer)
- Arcgis for Javascript之featureLayer图和属性的互操作
- arcgis for android featurelayer 数据删除无效的原因
- Arcgis for Js之featurelayer实现空间查询和属性查询
- Arcgis for Js之featurelayer实现空间查询和属性查询
- 关于ArcGIS与Silverlight开发中FeatureLayer没有FeatureSymbol属性的解决方法
- ArcGIS for Android示例解析之离线地图-----LocalTiledLayer
- ArcGIS Runtime SDK For Android 10.2.x版本空间查询和属性查询
- Arcgis server for js 只FeatureLayer显示label的问题
- arcgis api for js featurelayer 两种查询方式
- 【ArcGIS for Android】基于位置查询Graphic和Feature
- ArcGIS for Android 之本地离线地图添加(LocalTitledLayer)
- ArcGis for Android 添加及更新GraphicsLayer图层
- 记录我在百度地图开发和ArcGIS for Android开发时出现的一些错误及解决方案(后续更新)
- arcgis for android 学习 - 属性查询。检索图层上某个要素,并高亮显示它。
- ArcGIS API for JavaScript——要素服务(FeatureLayer)
- ArcGIS API for android 重写TiledMapServiceLayer [一]
- ArcGIS For Android 在地图上显示属性图形信息和属性文本信息