ArcGIS for Android FindTask的简单使用

在ArcGIS  for Android(10.1.1) 查找使用FindTask这个类,给它传入FindParameters的参数,可以执行查找操作,并返回FindResult类型的List集合,跟QueryTask和IdentifyTask都有点像,但它们三个还是有差别的:

QueryTask所查找的对象为一个MapServer的只图层,并可以可以不用加载进来就可以直接进行查询,可以进行空间查询和属性查询。

IdentifyTask识别的对象为一个MapServer,进行的是空间识别。

FindTask的查找对象也是一个MapServer,可以根据设置查找的字符串,进行属性的查找,

进行的是属性查询

 

以下代码,是在一个MapServer的layerID为2的图层中,查找所有字段指中与“island”相匹配的斑块并显示出来。


public class FindTaskTestActivity extends Activity {
	
	private List<FindResult> res;
	private GraphicsLayer gl;

	MapView mMapView;

	/** 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.map);
		ArcGISDynamicMapServiceLayer basemap = new ArcGISDynamicMapServiceLayer(
				"http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StatesCitiesRivers_USA/MapServer");
		mMapView.addLayer(basemap);
		mMapView.setExtent(new Envelope(-159.267600772764,11.2206525667169,
				-32.0310878479893, 62.5140046432286));
		gl=new GraphicsLayer();
		mMapView.addLayer(gl);
		mMapView.setOnSingleTapListener(new MyOnSingleTagLis());

	}

	class MyOnSingleTagLis implements OnSingleTapListener {

		public void onSingleTap(float arg0, float arg1) {
			//定义各种查找参数
			final FindParameters paras = new FindParameters();
			paras.setReturnGeometry(true);//需要返回Geometry
			paras.setSearchText("island");//搜索关键字为island
			paras.setLayerIds(new int[]{2});//查找图层(默认为查找所有图层)
			//paras.setSearchFields(new String[]{});//搜索自动化,没有设置默认为搜索全部字段
			final FindTask findtask = new FindTask(
					"http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StatesCitiesRivers_USA/MapServer");
			new Thread() {
				public void run() {
					try {
						//在子线程中执行操作
						 res=findtask.execute(paras);
						 proResult(res);
					} catch (Exception e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
			}.start();
		}
	}
	
	
	/**
	 * 处理查找结果,把结果显示出来
	 */
	private void proResult(final List<FindResult> res){
		if(res==null || res.size()==0){
			return;
		}
		runOnUiThread(new Runnable() {
			
			public void run() {
				for(FindResult fr: res){
					Geometry g=fr.getGeometry();
					
					//由于知道我们查找的图层是个面图层,可以定义面的符号,如果不知道图层的类型,可以通过fr.getGeometryType()判断
					SimpleFillSymbol sfs=new SimpleFillSymbol(Color.RED);
					//把查找的图型显示出来
					gl.addGraphic(new Graphic(g, sfs));
					
					//获取所有属性,并遍历出来
					Map<String, Object> atts= fr.getAttributes();
					Set<Entry<String, Object>> entrys= atts.entrySet();
					for(Entry<String, Object> entry :entrys){
						Log.i(entry.getKey(), entry.getValue().toString());
					}
					Log.i("Attributes", "----------------------------------------");
					
					//由于上面的设置查找的结果只有一个FindResult,可以把地图缩放到这个查找的结果范围,便于观察
					//如果有多个返回结果,就不适合这样弄啦
					mMapView.setExtent(g,100);
				}
			}
		});
		
	}

	@Override
	protected void onDestroy() {
		super.onDestroy();
	}

	@Override
	protected void onPause() {
		super.onPause();
		mMapView.pause();
	}

	@Override
	protected void onResume() {
		super.onResume();
		mMapView.unpause();
	}

}

结果



下载全部代码


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值