有這樣一個需求粤铭,要求查詢指定 geometry 附近的其他要素渡八。
先看代碼:
public class PrjNearAsyncQueryTask extends AsyncTask<String, Void, FeatureResult> {
// 指定的圖形
Geometry geometry;
public PrjNearAsyncQueryTask(Geometry geometry) {
this.geometry = geometry;
}
@Override
protected void onPreExecute() {
// 查詢前執(zhí)行
}
@SuppressWarnings("null")
@Override
protected FeatureResult doInBackground(String... params) {
FeatureResult fs = null;
if(params == null && params.length <= 1){
return null;
}
try {
// 由于是查詢所有的圖形迂求,所有這里沒有設(shè)置查詢條件,有需要可以自己設(shè)置 where條件語句
QueryParameters queryParameters = new QueryParameters();
queryParameters.setReturnGeometry(true);
queryParameters.setOutFields(new String[] { "*" });
// 關(guān)鍵點
// 1欢嘿、新建一個 Envelope
Envelope envelope = new Envelope();
// 2衰琐、將指定的圖形的envelope復(fù)制給新建的Envelope
geometry.queryEnvelope(envelope);
// 3、獲取新的范圍 在原 envelope 的基礎(chǔ)上炼蹦,params[1] -- 參數(shù)2 就是指定的范圍
double newMaxX = envelope.getXMax()+Double.parseDouble(params[1]);
double newMaxY = envelope.getYMax()+Double.parseDouble(params[1]);
double newMinX = envelope.getXMin()-Double.parseDouble(params[1]);
double newMinY = envelope.getYMin()-Double.parseDouble(params[1]);
// 4羡宙、給 envelope 指定新的范圍
envelope.setCoords(newMinX,newMinY,newMaxX,newMaxY);
// 5、將新的查詢范圍設(shè)置到查詢參數(shù)中
queryParameters.setGeometry(envelope);
// 獲取坐標系框弛,根據(jù)自己實際情況 獲取自己使用的坐標系
SpatialReference sr;
if(Constants.Map_Gis_Type == 0){
sr = SpatialReference.create(Constants.Map_Gis_Type_Str);
}else{
sr = SpatialReference.create(Constants.Map_Gis_Type);
}
// 給查詢參數(shù) 設(shè)置查詢坐標系 和 查詢圖層(params[0] -- 參數(shù)1 就是圖層url)
queryParameters.setOutSpatialReference(sr);
QueryTask queryTask = new QueryTask(params[0]);
// 開始查詢 得到查詢結(jié)果后 返回查詢結(jié)果 fs
fs = queryTask.execute(queryParameters);
} catch (Exception e) {
e.printStackTrace();
}
return fs;
}
@Override
protected void onPostExecute(FeatureResult result) {
// 查詢完成后執(zhí)行辛辨,可以通過 handler 或 EventBus 等將結(jié)果 傳遞到需要的地方
}
}
詳細的注釋都寫到上面代碼中了捕捂。僅供參考瑟枫,不同的地方根據(jù)自己實際需求修改斗搞。
在Activity中使用的時候:
PrjNearAsyncQueryTask task = new PrjNearAsyncQueryTask(prjBeanGeometry);
// 參數(shù)params 第一個是待查詢的圖層 ; 第二個是 查詢附近距離(偏移距離)
String[] params = {layerUrl, prjinfoSearchKey};
task.execute(params);