• ArcGIS for Android示例解析之空间查询-----QueryTask


    转自:http://blog.csdn.net/wozaifeiyang0/article/details/7331450

    QueryTask

    查询功能在GIS中是一个不可或缺的重要功能,示例中提供了一个属性查询的Demo,下面来看一下在Android中我们怎样实现一个查询功能,

    1、              我们在布局文件中添加了一个按钮,并且在代码中添加了这个按钮的点击事件监听;

    2、              自定义一个 AsyncTask的扩展类,在此类中我们实现了查询功能。

    3、              在按钮的事件监听类中执行我们自定义的异步类。

    相关代码如下:

    querybt.setOnClickListener(new View.OnClickListener() {

                

                     public void onClick(View v) {

     

                          if (blQuery) {

                                String targetLayer = targetServerURL.concat("/3");

                                String[] queryParams = { targetLayer, "AVGHHSZ_CY>3.5" };

                                AsyncQueryTask ayncQuery = new AsyncQueryTask();

                                ayncQuery.execute(queryParams);

                          } else {

                                gl.removeAll();                       

                                blQuery = true;

                                querybt.setText("Average Household > 3.5");

     

                          }

                     }

               });

    上面代码中定义了一个按钮的点击事件监听,并在监听中执行我们自定义的异步类,异步类中实现了查询功能,下面我们来看一下这个类都做了什么,代码如下:

    private class AsyncQueryTask extends AsyncTask<String, Void, FeatureSet> {

                  

               protected void onPreExecute() {

                     //在未查询出结果时显示一个进度条

                     progress = ProgressDialog.show(AttributeQuery.this, "",

                                "Please wait....query task is executing");

     

               }

               protected FeatureSet doInBackground(String... queryParams) {

                     if (queryParams == null || queryParams.length <= 1)

                          return null;

                     //查询条件和URL参数

                     String url = queryParams[0];

                     //查询所需的参数类

                     Query query = new Query();

                     String whereClause = queryParams[1];

                     SpatialReference sr = SpatialReference.create(102100);

                     query.setGeometry(new Envelope(-20147112.9593773, 557305.257274575,

                                -6569564.7196889, 11753184.6153385));//设置查询空间范围

                     query.setOutSpatialReference(sr);//设置查询输出的坐标系

                     query.setReturnGeometry(true);//是否返回空间信息

                     query.setWhere(whereClause);//where条件

     

                     QueryTask qTask = new QueryTask(url);//查询任务类

                     FeatureSet fs = null;

     

                     try {

                          fs = qTask.execute(query);//执行查询,返回查询结果

                     } catch (Exception e) {

                          // TODO Auto-generated catch block

                          e.printStackTrace();

                          return fs;

                     }

                     return fs;

     

               }

     

               protected void onPostExecute(FeatureSet result) {

                    

                     String message = "No result comes back";

                     if (result != null) {

                          Graphic[] grs = result.getGraphics();

     

                          if (grs.length > 0) {

                                gl.addGraphics(grs);  //将查询结果添加到图层上                    

                                message = (grs.length == 1 ? "1 result has " : Integer

                                           .toString(grs.length) + " results have ")

                                           + "come back";

                          }

     

                     }

                     progress.dismiss();//停止进度条

     

                     Toast toast = Toast.makeText(AttributeQuery.this, message,

                                Toast.LENGTH_LONG);

                     toast.show();

                     querybt.setText("Clear graphics");

                     blQuery = false;

     

               }

     

          }

    通过注释和代码可以看出,要做一个查询其实一点都不麻烦,只需要配置好两个类:Query和QueryTask。Query是要查询的因子,QureyTask是查询任务的执行者,我们只需给Query设定好要查询的相关参数,并给QureyTask指定查询的URL路径,查询功能就可以顺利完成。

  • 相关阅读:
    Oracle 用户密码过期及修改密码有效期
    .Net Core 3.x Api开发笔记 -- 读取配置文件信息(四)
    .Net Core 3.x Api开发笔记 -- IOC,使用Autofac实现依赖注入(三)
    .Net Core 3.x Api开发笔记 -- Starup入门(二)
    .Net Core 3.x Api开发笔记 -- 创建新的Api项目(一)
    Docker学习笔记之--借助Docker Compose进行多容器部署(环境:centos7)
    Docker学习笔记之--查看部署在docker的应用运行日志(环境:centos7)
    Docker学习笔记之--Nginx反向代理绑定域名及ssl证书(环境:centos7)
    Docker学习笔记之--安装mysql 并持久化数据到本地,最后使用Navicat连接测试(环境:centos7)
    Docker学习笔记之--.Net Core应用容器通过网桥连接Redis容器(环境:centos7)
  • 原文地址:https://www.cnblogs.com/cugwx/p/3781459.html
Copyright © 2020-2023  润新知