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

作者: 曾经的追风少年 | 来源:发表于2017-04-14 16:36 被阅读99次

    有这样一个需求,要求查询指定 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);
    

    相关文章

      网友评论

      • 奇梦人:朋友能发一下 demo吗 1443678932@qq.com

      本文标题:使用QueryTask查询指定图形附近区域

      本文链接:https://www.haomeiwen.com/subject/jlzwattx.html