使用QueryTask查询指定图形附近区域

有这样一个需求,要求查询指定 geometry 附近的其他要素。
先看代码:

public class PrjNearAsyncQueryTask extends AsyncTask<String, Void, FeatureResult> {
    // 指定的图形
    Geometry geometry;

    public PrjNearAsyncQueryTask(Geometry geometry) {
        this.geometry = geometry;
    }

    @Override
    protected void onPreExecute() {
        // 查询前执行
    }


    @SuppressWarnings("null")
    @Override
    protected FeatureResult doInBackground(String... params) {
        FeatureResult fs = null;
        if(params == null && params.length <= 1){
            return null;
        }
        try {
            // 由于是查询所有的图形,所有这里没有设置查询条件,有需要可以自己设置 where条件语句
            QueryParameters queryParameters = new QueryParameters();
            queryParameters.setReturnGeometry(true);
            queryParameters.setOutFields(new String[] { "*" });
            // 关键点
            // 1、新建一个 Envelope
            Envelope envelope = new Envelope(); 
            // 2、将指定的图形的envelope复制给新建的Envelope
            geometry.queryEnvelope(envelope); 
            // 3、获取新的范围 在原 envelope 的基础上,params[1] -- 参数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、将新的查询范围设置到查询参数中
            queryParameters.setGeometry(envelope);
            // 获取坐标系,根据自己实际情况 获取自己使用的坐标系
            SpatialReference sr;
            if(Constants.Map_Gis_Type == 0){
                sr = SpatialReference.create(Constants.Map_Gis_Type_Str);
            }else{
                sr = SpatialReference.create(Constants.Map_Gis_Type);
            }
            // 给查询参数 设置查询坐标系 和 查询图层(params[0] -- 参数1 就是图层url)
            queryParameters.setOutSpatialReference(sr);
            QueryTask queryTask = new QueryTask(params[0]);
            // 开始查询 得到查询结果后 返回查询结果 fs
            fs = queryTask.execute(queryParameters);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return fs;
    }

    @Override
    protected void onPostExecute(FeatureResult result) {
       // 查询完成后执行,可以通过 handler 或 EventBus 等将结果 传递到需要的地方
    }
}

详细的注释都写到上面代码中了。仅供参考,不同的地方根据自己实际需求修改。

在Activity中使用的时候:

PrjNearAsyncQueryTask task = new PrjNearAsyncQueryTask(prjBeanGeometry);
// 参数params 第一个是待查询的图层 ; 第二个是 查询附近距离(偏移距离)
String[] params = {layerUrl, prjinfoSearchKey};
task.execute(params);
    原文作者:曾经的追风少年
    原文地址: https://www.jianshu.com/p/68a5cdc524d8
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞