使用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);

相关文章

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

    有这样一个需求,要求查询指定 geometry 附近的其他要素。先看代码: 详细的注释都写到上面代码中了。仅供参考...

  • ArcGIS API for JavaScript 之查询功能

    在ArcGIS API中查询功能是经常使用的,常用的三个查询分别是FindTask,QueryTask,Ident...

  • DSL结构化查询

    查询的分类 Leaf query Cluase 叶子查询(简单查询) 这种查询可以单独使用,针对指定的字段查询指定...

  • 使用PIL指定区域截图

    使用PIL指定区域截图

  • 7 MongoDB查询文档

    query,可选项,使用查询操作符指定查询条件projection,可选项,使用投影操作符指定返回键值,若查询时返...

  • 查询

    普通查询 实际开发慎用 查询指定列 查询指定行 查询部门号为20的员工信息,且工资大于1500 别名的使用 查询中...

  • neo4j:Cypher查询入门(三)

    neo4j使用使用Cypher查询图形数据,Cypher是描述性的图形查询语言,语法简单,功能强大。 和SQL很相...

  • iOS开发·CALayer,CATextLayer,CAShap

    CATextLayer简单使用 CAShapeLayer简单使用专门用来绘制矢量图形的图形子类,可以指定线宽和颜色...

  • 使用@TableField(select=false)后又想查询

    使用@TableField(select=false)后又想查询指定字段图片.png1.查询所有 --------...

  • 4. 查询

    使用find进行查询 空文档查询, 匹配集合所有元素 指定条件查询 指定需要返回的键有的时候我们不想看到不关心的键...

网友评论

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

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

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