查询异步任务类:
package com.example.administrator.arcgis1029.task;
import android.os.AsyncTask;
import android.text.TextUtils;
import android.widget.TextView;
import com.esri.core.geometry.Point;
import com.esri.core.geometry.SpatialReference;
import com.esri.core.map.FeatureResult;
import com.esri.core.map.Field;
import com.esri.core.tasks.ags.query.Query;
import com.esri.core.tasks.query.QueryParameters;
import com.esri.core.tasks.query.QueryTask;
import com.example.administrator.arcgis1029.constant.AppConstant;
import java.util.List;
/**
* Created by xiaoyehai on 2018/3/19 0019.
*/
public class AsyncQueryTask extends AsyncTask<Object, Void, FeatureResult> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected FeatureResult doInBackground(Object... params) {
String url = (String) params[0];
Point point = (Point) params[1];
String whereClause = (String) params[2];
//创建查询参数对象
QueryParameters parameters = new QueryParameters();
//设置识别位置
if (point != null) {
parameters.setGeometry(point);
}
//指定是否返回几何对象
parameters.setReturnGeometry(true);
//设置查询条件
if (!TextUtils.isEmpty(whereClause)) {
parameters.setWhere(whereClause);
}
//设置空间参考坐标系
//SpatialReference sr = SpatialReference.create(4326);
//设置输出坐标系
//parameters.setOutSpatialReference(sr);
//设置返回字段内容
parameters.setOutFields(new String[]{"*"});
// parameters.setOutFields(new String[] { "县名称_1", "乡名称_1", "村名称_1",
// "地块名称", "统一编号" });
//查询
QueryTask queryTask = new QueryTask(url);
try {
FeatureResult featureResult = queryTask.execute(parameters);
return featureResult;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onProgressUpdate(Void... values) {
super.onProgressUpdate(values);
}
@Override
protected void onPostExecute(FeatureResult result) {
super.onPostExecute(result);
//接口回调返回数据
if (onReturnDataListener != null) {
onReturnDataListener.onReturnData(result);
}
}
public interface OnReturnDataListener {
void onReturnData(FeatureResult result);
}
private OnReturnDataListener onReturnDataListener;
public void setOnReturnDataListener(OnReturnDataListener onReturnDataListener) {
this.onReturnDataListener = onReturnDataListener;
}
}
使用:
/**
* 点击某点,选中该点所在区域,高亮显示
*/
public class Main9Activity extends AppCompatActivity {
private MapView mMapView;
private String url1 = "http://192.168.1.228:6080/arcgis/rest/services/jcsj/dzdt/MapServer";
/**
* 指定查询的服务图层
* "http://192.168.1.228:6080/arcgis/rest/services/jcsj/xzqh/MapServer/2"
*/
private String url2 = "http://192.168.1.228:6080/arcgis/rest/services/jcsj/xzqh/MapServer";
private ArcGISTiledMapServiceLayer mArcGISTiledMapServiceLayer;
private GraphicsLayer mGraphicsLayer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main9);
mMapView = (MapView) findViewById(R.id.mapview);
addTiledLayer(url1);
mGraphicsLayer = new GraphicsLayer();
mMapView.addLayer(mGraphicsLayer);
addDynamicLayer(url2, 2);
mMapView.setOnSingleTapListener(new OnSingleTapListener() {
@Override
public void onSingleTap(float v, float v1) {
Point point = mMapView.toMapPoint(v, v1);
AsyncQueryTask asyncQueryTask = new AsyncQueryTask();
asyncQueryTask.execute(url2 + "/2", point, null);
asyncQueryTask.setOnReturnDataListener(new AsyncQueryTask.OnReturnDataListener() {
@Override
public void onReturnData(FeatureResult result) {
if (result != null) {
Iterator<Object> iterator = result.iterator();
if (iterator.hasNext()) {
Feature feature = (Feature) iterator.next();
Map<String, Object> attributes = feature.getAttributes();
Symbol symbol = feature.getSymbol();
Geometry geometry = feature.getGeometry();
printAttributes(attributes);
//自定义高亮显示样式
//SimpleLineSymbol lineSymbol = new SimpleLineSymbol(Color.RED, 3, SimpleLineSymbol.STYLE.SOLID);
//SimpleFillSymbol fillSymbol = new SimpleFillSymbol(Color.parseColor("#ECC8AC"));
// fillSymbol.setOutline(lineSymbol);
Graphic graphic = new Graphic(geometry, symbol, attributes);
//设置高亮显示的颜色
SimpleRenderer sr = new SimpleRenderer(new SimpleFillSymbol(Color.RED));
mGraphicsLayer.setRenderer(sr);
mGraphicsLayer.removeAll();
mGraphicsLayer.addGraphic(graphic);
}
}
}
});
}
});
}
private void printAttributes(Map<String, Object> attributes) {
Set<String> set = attributes.keySet();
for (String key : set) {
Log.e("xyh", "key==" + key + "; value==" + attributes.get(key));
}
}
/**
* 添加底图
*
* @param url
*/
public void addTiledLayer(String url) {
mArcGISTiledMapServiceLayer = new ArcGISTiledMapServiceLayer(url);
mMapView.addLayer(mArcGISTiledMapServiceLayer);
}
/**
* 添加动态图层
*
* @param url
*/
public void addDynamicLayer(String url, int layer_table) {
ArcGISDynamicMapServiceLayer dynamicLayer = new ArcGISDynamicMapServiceLayer(url, new int[]{layer_table});
mMapView.addLayer(dynamicLayer);
}
@Override
protected void onPause() {
super.onPause();
mMapView.pause();
}
@Override
protected void onResume() {
super.onResume();
mMapView.unpause();
}
}
查询结果:
18760/com.example.administrator.arcgis1029 E/xyh: key==OBJECTID; value==156
04-18 16:57:28.215 18760-18760/com.example.administrator.arcgis1029 E/xyh: key==BSM; value==120000271
04-18 16:57:28.215 18760-18760/com.example.administrator.arcgis1029 E/xyh: key==YSDM; value==1000600100
04-18 16:57:28.215 18760-18760/com.example.administrator.arcgis1029 E/xyh: key==XZQDM; value==460106104208
04-18 16:57:28.215 18760-18760/com.example.administrator.arcgis1029 E/xyh: key==XZQMC; value==美仁坡村
04-18 16:57:28.215 18760-18760/com.example.administrator.arcgis1029 E/xyh: key==XZQQC; value==美仁坡村委会
04-18 16:57:28.215 18760-18760/com.example.administrator.arcgis1029 E/xyh: key==SSZJDM; value==460106104
04-18 16:57:28.215 18760-18760/com.example.administrator.arcgis1029 E/xyh: key==SSZJMC; value==龙泉镇
04-18 16:57:28.215 18760-18760/com.example.administrator.arcgis1029 E/xyh: key==SSXZQDM; value==460106
04-18 16:57:28.215 18760-18760/com.example.administrator.arcgis1029 E/xyh: key==SSXZQMC; value==龙华区
04-18 16:57:28.215 18760-18760/com.example.administrator.arcgis1029 E/xyh: key==KZMJ; value==7505805.69
04-18 16:57:28.215 18760-18760/com.example.administrator.arcgis1029 E/xyh: key==JSMJ; value==7505805.69
04-18 16:57:28.215 18760-18760/com.example.administrator.arcgis1029 E/xyh: key==MSSM; value==00
04-18 16:57:28.215 18760-18760/com.example.administrator.arcgis1029 E/xyh: key==是否主城区_1; value==0
04-18 16:57:28.215 18760-18760/com.example.administrator.arcgis1029 E/xyh: key==ZCQMJ; value==0.0
04-18 16:57:28.215 18760-18760/com.example.administrator.arcgis1029 E/xyh: key==ZCQYWMJ; value==7506646.20575
04-18 16:57:28.216 18760-18760/com.example.administrator.arcgis1029 E/xyh: key==SHAPE.AREA; value==7506646.2057457
04-18 16:57:28.216 18760-18760/com.example.administrator.arcgis1029 E/xyh: key==SHAPE.LEN; value==21640.3050074288
高亮显示: