1.注册mapView的单击事件
mMapView.setOnSingleTapListener(mOnSingleTapListener);
2.实现单击的时间的监听器
OnSingleTapListenermOnSingleTapListener=newOnSingleTapListener(){
@Override
publicvoidonSingleTap(floatx,floaty){
newAsyncQueryTask().execute(x,y);
}
};
我们具体在一个AsyncQueryTask里异步执行查询和显示。
在上面的onSingleTap方法里有有两个参数(floatx,floaty),这个是一个坐标点,表示里你点击的位置,是个屏幕坐标,在查询时,我们需要将其转成地图坐标点,使用方法
mMapView.toMapPoint(x,y)
classAsyncQueryTaskextendsAsyncTask<Float,Void,FeatureSet>{
StringerrMsg=null;
@Override
protectedFeatureSetdoInBackground(Float...params){
floatx=params[0];
floaty=params[1];
if(mMapView.isLoaded()){
//AlertMsg("单击,屏幕像素坐标点:x=%s,y=%s",x,y);
//PointmapPoint=mMapView.toMapPoint(newPoint(x,y));
Pointpt=mMapView.toMapPoint(x,y);
Queryquery=newQuery();
query.setGeometry(pt);
query.setReturnGeometry(true);
//query.setOutFields(newString[]{"*"});
query.setOutFields(newString[]{"县名称_1","乡名称_1","村名称_1","地块名称","统一编号"});
QueryTaskqueryTask=newQueryTask(mMapServiceUrl+"/4");//这里参数是地图的服务地址,后面的4,标识了是其中某一个图层。
try{
FeatureSetfs=queryTask.execute(query);
returnfs;
}catch(Exceptione){
e.printStackTrace();
errMsg=e.getMessage();
}
}
returnnull;
}
我们构建一个query和queryTask进行查询,查询条件:query.setGeometry(pt);
返回的字段内容:query.setOutFields(newString[]{"县名称_1","乡名称_1","村名称_1","地块名称","统一编号"});
返回的结果是FeatureSet就是想要获得区域。
3.从返回的结果中拿到grphics并绘制在一个自定义的图层上,并指定绘制方式。
@Override
protectedvoidonPostExecute(FeatureSetfs){
if(fs==null){
if(errMsg!=null){
Toast.makeText(CT_Area_ViewActivity.this,errMsg,0).show();
}
Toast.makeText(CT_Area_ViewActivity.this,"查询的结果为空",0).show();
return;
}
try{
Toast.makeText(CT_Area_ViewActivity.this,"查询到"+fs.getGraphics().length+"个结果",0).show();
SimpleFillSymbolsymbol=newSimpleFillSymbol(Color.RED);
CT_Area_ViewActivity.this.gLayer
.setRenderer(newSimpleRenderer(symbol));
CT_Area_ViewActivity.this.gLayer.removeAll();
CT_Area_ViewActivity.this.gLayer.addGraphics(fs.getGraphics());
if(fs.getGraphics().length>0){
Graphicgraphic=fs.getGraphics()[0];
//String[]names=graphic.getAttributeNames();
Stringxian=getValue(graphic,"县名称_1","");
Stringxiang=getValue(graphic,"乡名称_1","");
Stringcun=getValue(graphic,"村名称_1","");
Stringdikuai=getValue(graphic,"地块名称","");
Stringid=getValue(graphic,"统一编号","");
ShowDialog_Detail(xian+xiang+cun+"\n"+dikuai,id);
}
}catch(Exceptione){
e.printStackTrace();
Toast.makeText(CT_Area_ViewActivity.this,e.getMessage(),0)
.show();
}
}
StringgetValue(Graphicgraphic,Stringkey,StringdefaultVal){
Objectobj=graphic.getAttributeValue(key);
if(obj==null)
returndefaultVal;
else
returnobj.toString();
}
}
别忘了声明一些类变量:
com.esri.android.map.MapViewmMapView;
ArcGISDynamicMapServiceLayeragmServiceLayer; GraphicsLayergLayer;