关于arcgis for android 中的QueryTask这个例子的一些问题

在下面的源码中我主要有几点不明白 请各位大神能够帮助解答

第一、这个个例子中是什么时候开始对地图进行初始化的啊? 在xml文件中的url="http://www.arcgis.com/home/webmap/viewer.html?webmap=58e58acce685442aa4c73f91fbb3a387"这句话是对该地图进行初始化吗? 为什么不是一个mapserver啊?
代码片段,双击复制
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/map" android:layout_width="fill_parent"
android:layout_height="fill_parent"
url="http://www.arcgis.com/home/webmap/viewer.html?webmap=58e58acce685442aa4c73f91fbb3a387"
>

第二 、对于代码中的以下部分不明白

if (source == mv && status == STATUS.INITIALIZED) {
gl = new GraphicsLayer();
SimpleRenderer sr = new SimpleRenderer(
new SimpleFillSymbol(Color.RED));
gl.setRenderer(sr);//设置渲染图形层
mv.addLayer(gl);
boolean doQuery = false;
for (Layer lv : mv.getLayers()) {
if (lv instanceof ArcGISTiledMapServiceLayer) {
ArcGISTiledMapServiceLayer tLayer = (ArcGISTiledMapServiceLayer) lv;

        if (tLayer.getUrl().equals(targetServerURL)) {
            doQuery = true;
            break;
        }
    }
}

那个for循环中的的代码是用来干什么的啊?

以下是程序源码

package com.esri.arcgis.android.samples.querytask;

import android.app.Activity;
import android.app.ProgressDialog;
import android.graphics.Color;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import com.esri.android.map.GraphicsLayer;
import com.esri.android.map.Layer;
import com.esri.android.map.MapView;
import com.esri.android.map.ags.ArcGISTiledMapServiceLayer;
import com.esri.android.map.event.OnStatusChangedListener;
import com.esri.arcgis.android.samples.attributequery.R;
import com.esri.core.geometry.Envelope;
import com.esri.core.geometry.SpatialReference;
import com.esri.core.map.FeatureSet;
import com.esri.core.map.Graphic;
import com.esri.core.renderer.SimpleRenderer;
import com.esri.core.symbol.SimpleFillSymbol;
import com.esri.core.tasks.ags.query.Query;
import com.esri.core.tasks.ags.query.QueryTask;

public class AttributeQuery extends Activity {

    /** Called when the activity is first created. */
    MapView mv;
    GraphicsLayer gl;
    Graphic graphic;
    Graphic fillGraphic;
    Button querybt;
    String targetServerURL = "http://services.arcgisonline.com/ArcGIS/rest/services/Demographics/USA_Average_Household_Size/MapServer";
    boolean blQuery = true;
    ProgressDialog progress;

    final static int HAS_RESULTS = 1;
    final static int NO_RESULT = 2;
    final static int CLEAR_RESULT = 3;

    public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            mv = (MapView) findViewById(R.id.map);


            mv.setOnStatusChangedListener(new OnStatusChangedListener() {

                    private static final long serialVersionUID = 1L;

                    public void onStatusChanged(Object source, STATUS status) {
                            if (source == mv && status == STATUS.INITIALIZED) {
                                    gl = new GraphicsLayer();
                                    SimpleRenderer sr = new SimpleRenderer(
                                                    new SimpleFillSymbol(Color.RED));
                                    gl.setRenderer(sr);//设置渲染图形层
                                    mv.addLayer(gl);
                                    boolean doQuery = false;
                                    for (Layer lv : mv.getLayers()) {
                                            if (lv instanceof ArcGISTiledMapServiceLayer) {
                                                    ArcGISTiledMapServiceLayer tLayer = (ArcGISTiledMapServiceLayer) lv;

                                                    if (tLayer.getUrl().equals(targetServerURL)) {
                                                            doQuery = true;
                                                            break;
                                                    }
                                            }
                                    }
                                    if (!doQuery) {
                                            Toast toast = Toast.makeText(AttributeQuery.this,
                                                            "URL for query does not exist any more",
                                                            Toast.LENGTH_LONG);
                                            toast.show();
                                    } else {
                                            querybt.setEnabled(true);
                                    }
                            }
                    }
            });

            querybt = (Button) findViewById(R.id.queryButton);
            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");

                            }
                    }
            });
    }

    /**
     * 
     * Query Task executes asynchronously.
     * 
     */
    private class AsyncQueryTask extends AsyncTask<String, Void, FeatureSet> {

            protected void onPreExecute() {
                    progress = ProgressDialog.show(AttributeQuery.this, "",
                                    "Please wait....query task is executing");

            }

            /**
             * First member in parameter array is the query URL; second member is
             * the where clause.
             */
            protected FeatureSet doInBackground(String... queryParams) {
                    if (queryParams == null || queryParams.length <= 1)
                            return null;

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

                    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;

            }

    }


    @Override
    protected void onPause() {
            super.onPause();
            mv.pause();

}
@Override protected void onResume() {
super.onResume();
mv.unpause();
}

}

1
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
(二一)ArcGIS JS QueryTask查询图层所有数据
前言 &amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;之前写过一次不通过查询、通过featureLayer来获取图层中所有数据,详见 &amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;https://blog.csdn.net/idomyway/arti
利用QueryTask获取服务的图层对应信息
http://localhost:6080/arcgis/rest/services/XMSLFH/XMSLFH/MapServer这个服务下有  var queryTask_find = new esri.tasks.QueryTask("http://localhost:6080/arcgis/rest/services/XMSLFH/XMSLFH/MapServer"); 查询结果:r
(二三)ArcGIS JS QueryTask和FindTask实现模糊查询
queryTask实现模糊查询: query.where=&amp;quot;字段 like %&amp;quot;+&amp;quot;'某一个值+'&amp;quot;%'&amp;quot;;//模糊查询 require([ &amp;quot;esri/tasks/QueryTask&amp;quot;, &amp;quot;esri/tasks/query&amp;quot;, &amp;quot;dojo/d
Arcgis for Js QueryTask查询结果集的定位
通常我们在对服务查询到结果集后,需要把视域定位到结果集上,这时可以使用到 graphicsUtils来实现    var queryTask = new esri.tasks.QueryTask(             "http://localhost:6080/arcgis/rest/services/gzhb/FeatureServer/0");     var query =
ArcGIS API For Javascript中queryTask查询返回结果限制为1000的解决办法
更改ArcGIS Server目录下的某个文件即可
arcgis 执行查询任务(QueryTask)还有ExecuteAsync?需进一步了解
url = string.Format(&quot;http://{0}/arcgis2/rest/services/baidu/MapServer/{1}&quot;, ip, layerID);                 QueryTask queryTask = new QueryTask(url);                 queryTask.ExecuteCompleted += new Ev...
ArcGis for flex 中QueryTask查询结果限制(1000)问题
ArcGis  中QueryTask查询结果限制(1000)问题 转载于:http://www.cnblogs.com/pandy/archive/2011/08/29/2157307.html 查询官网得到解决方案如下: To prevent queries that request unlimited numbers of features (e.g., empty WH
ArcGis for JS 利用QueryTask查询实现对地图的定位功能
一、首先我们要把地图map加载到我们的页面中,然后就是根据已知的信息内容实现在map上的定位操作。   二、实现点击已知的信息内容在地图上定位,这就是一般的DOM操作。(我们是把DOM操作和arcgis的操作分离的,需要的时候直接调用函数方法就可以了。)   三、我们现在只帖出来arcgis的js代码。
arcgis api for javascript 之QueryTask查询
共享作业 arcgis api for javascript 之QueryTask查询
自己构建Ajax请求进行模拟QueryTask进行查询
ArcGIS JS API中用Query和QueryTask进行查询的时候其实是进行的Ajax请求,只不过是将该Ajax请求进行了封装,更好的方便二次开发人员调用而已。有时候我们用QueryTask进行查询的时候,传的参数的数据可能比较大,比如query.geometry经过序列化后超过了2KB,那么就需要执行post请求,这样就会造成ajax的跨域访问问题。一般的解决办法是使用ArcGIS所提供
ArcGIS api for javascript——加载查询结果,悬停显示信息窗口
转自原文 ArcGIS api for javascript——加载查询结果,悬停显示信息窗口 描述 本例在开始和地图交互前执行一个查询任务并加在查询结果。这允许用户鼠标悬停在任意郡县时立即见到InfoWindow。本例改变了信息窗口的默认行为,仅在鼠标单击时显示信息窗口。 QueryTask构造函数接受被查询的图层,即 ESRI sample server上ESRI_Census_USA服...
Flex开发ArcGIS问题集锦九:怎样使用QueryTask执行空间查询和属性查询
Flex开发ArcGIS问题集锦九:怎样使用QueryTask执行空间查询和属性查询 代码 <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:mx="library://ns.adobe.com/flex/mx" xmlns:esri="http://www.esri.com/2008/ag
ArcGIS查询总结
ArcGIS查询主要是三个类:IdentifyTask,.FindTask,QueryTask 1.IdentifyTask    仅仅是空间查询,对一个地图服务多个图层(全部,或者指定几个ID索引)做空间识别查询,IdentifyTask仅仅用于空间信息查询 用法简介: //identifyTask 是对一个地图服务多个图层(全部,或者指定几个ID索引)做空间识别查询
queryTask,geometryService操作,通过画矩形获得外接图形
Convex Hull html, body { height: 100%; width: 100%; margin: 0; padding: 0; } #mapu { padding:0; } #titlePane { width:200px; height:300px; }
QueryTask查询结果最多500条的问题
参考:http://dingtao-wgs.blog.163.com/blog/static/5026071420129813059865/ 上面文章中给出的解决方法:今天在做querytask的时候,本应查询出的记录为1600条,可是实际返回的记录为500条,花了很多时间来检查,发现绝不是sql语句的问题。打开arcgis安装目录下的server->user->cfg目录,找到你发布服务的配置文
ArcGIS中Featurelayer的简单写法
map.graphics.add(feature); FeatureLayer的模式选择 快照模式 mode_snapshot 选择模式 mode_selection 按需模式 mode_ondemand var featureLayer = new FeatureLayer("http://sampleserver5.arcgisonlin.com/0",{mode:Featu
ArcGIS中的三种查询
ArcGIS runtime SDK for WPF/Silverlight中的三种常用的查询:QueryTask、FindTask、IdentifyTask都是继承自ESRI.ArcGIS.Client.Tasks,
基于ArcGISServer进行分页矢量查询的方案进阶
1.    背景        在空间查询中,我们对查询结果要求以分页形式进行展示。Geoserver的WFS服务提供了maxFeatures 、startIndex以及sortBy这样的参数,通过设置这些参数的值即可实现分页。但是arcgisserver中目前没有这类可以实现分页查询的参数,那么该如何解决这个问题?这里我给出三个不断优化的解决思路。 2.方案1——获取所有查询结果前端分页 ...
android arcgis(100.0.0)ArcGISMapImageLayer 图片图层点击查询要素属性
需求:使用ArcGISMapImageLayer加载业务图层,当点击图层任意一点时,如何获取当前点的数据 注意:mTable.queryFeaturesAsync(query, ServiceFeatureTable.QueryFeatureFields.LOAD_ALL);方法可设置返回数据的全部字段还是部分字段,未设置会默认返回三个字段(一把辛酸泪) mainMapView.setOnTouc...
关于使用Notification遇到的一些问题
昨天在用小米6X测试通知栏发现MIUI的通知栏是无法显示BigTextStyle()中的bigText、SummaryText以及InboxStyle()中的addLine、SummaryText,但是该二者中的bigContentTitle却有效果。以后使用Notification注意style的问题。...
ArcGIS for Android 10.2.9(4):在线服务图层查询,并且选中该点所在区域,高亮显示
查询异步任务类: package com.example.administrator.arcgis1029.task; import android.os.AsyncTask; import android.text.TextUtils; import android.widget.TextView; import com.esri.core.geometry.Point; import...
Arcgis api for Javascript中多图层查询(上)
在使用arcgis for javascript api 进行地图要素查询的过程中,发现使用QueryTask查询,单次只能查询单个图层;如果需要查询多个图层,就必须要新建多个QueryTask对象来执行多次查询。 有没有一个方法,可以单次对多个图层进行属性字段的查询呢?答案是有。官方api中提供了FindTask这一多个图层执行查询操作的方法。通过定义FindParameter。SearchTe
selectFeatures不能查找到数据
使用了Query的distance缓冲区查询方式引起了selectFeature方式不能查找到数据,由于数据在发布时不支持这种查找方式。
arcgis android 通过getExtent得到当前地图范围四个点的坐标
困扰了我很久的问题终于要得到解决了,先欢喜一下。 我的目的是想做一个当程序完全退出后,再次打开程序地图直接显示上次程序退出前地图的范围。arcgis for android官方软件就有这个功能。网上搜索了一些关于activity保存状态的方法,但是这些方法只能保存非销毁后的Activity,即当程序完全退出后,采用这种方法程序是不能保存Activity状态的。所以想着用数据库保存状态的方法。
ArcGIS教程:为地图册创建定位器地图
详细地图的空间位置很难确定时,定位器地图可为地图用户提供参考。定位器地图还可用于在某个区域内追踪当前页面所在的位置。
ArcGIS Android离线数据包
ArcGis Android离线数据包,.tpk,.mmpk,.geodatabase
使用"esri/tasks/IdentifyTask"进行多个图层的查询与多个属性弹窗翻页显示
之前只是简单的点击图层,显示该图层的属性弹窗 但是有时候会遇到查询多个图层,然后显示出所有对应的属性弹窗,此时就需要用到map.infoWindow属性来实现 先来看效果: 点击国睿大厦范围之外的地方: 只有一页,显示的layer[1]的江苏省行政区划图层属性 点击国睿大厦范围上时: 第一页:是layer[0]的建筑层属性,第二页:是layer[1]的江苏省行政区划图属性 一...
ArcGIS Runtime SDK for Android教程——(一)介绍以及环境搭建
ArcGIS Android SDK 非常强大,使用它可以让我们做出具有制图、地理编码、导航、地理处理等能力的apps,并且可以结合ArcGISOnline或者自己的ArcGIS server的空间分析能力。学习SDK最好的方法就是去读官方的文档以及尝试去使用官方的例子。   使用ArcGIS RuntimeSDK for Android,你可以制作这样的apps: ①为你的apps添
arcgis for android 空间查询 - 点击某点,选中该点所在单位区域。
编码过程: 1.注册 mapView的单击事件   mMapView.setOnSingleTapListener(mOnSingleTapListener); 2.实现单击的时间的监听器   OnSingleTapListener mOnSingleTapListener = new OnSingleTapListener() {     @Override     p
AndroiWearTimer
Android wear中关于时钟的例子,值得一看
ArcGIS API for JS中遇到的问题记录
1、JS传递对象参数问题 通过拼接HTML代码实现onclick事件调用JS函数,传递feature对象,由于拼接的HTML代码调用JS函数,不能传递对象参数,所以先将feature转换成JSON对象,传递参数时使用JSON.stringify()函数将JSON对象字符化,再传递给先前定义好的moveEdit()函数。(拼接注意单双引号的组合使用) 2、require函数内部定义的函数...
ArcGIS API for Android解惑:Callout不能调整弹出框大小
本文主要讲解了 ArcGIS API for Android 开发中 Callout 不能调整弹出框大小的问题及解决办法
ArcGIS for Android FeatureLayer的属性更新
ArcGIS for Android FeatureLayer的属性更新的简单例子
ArcGIS For Android 利用线对面进行分割
ArcGIS For Android 中的分割操作
arcgis api for js入门开发系列四地图查询(含源代码)
上一篇实现了demo的地图工具栏,本篇新增地图查询功能,包括属性查询和空间查询两大块,截图如下: 属性查询效果图: 空间查询效果图:   谈核心代码实现之前,我大概的讲一讲arcgis for js的地图查询方式,一般来说,总共有三种查询方式:FindTask、IdentifyTask、QueryTask (1)FindTask查询模式:基于关键字来模糊查询地图图层,属于文本
ArcEngine添加Feature时报错:这个集合中找不到此项目
在新增feature时出现“这个集合中找不到此项目”的错误,代码如下: IPoint pPoint = new ESRI.ArcGIS.Geometry.Point(); pPoint.X = jg.X; pPoint.Y = jg.Y; pPoint.Z = 0; IFeatureBuffer buffer = pFC.CreateFeatureBuffer(); buffer.Shape
logic标签的问题及解答
关于struts学习中遇到的关于logic标签的一些问题和解答,logic标签的一些问题和解答。
arcgis js - 空间查询应用示例
空间查询应用示例 一、预备知识: 1.一个很重要的类:Query (1)类的描述以及构造器 (2)类的一些重要属性   outFields Attribute fields to include in the FeatureSet. Fields must exist in the map layer. You must list the a
LR问题汇总
关于在LoadRunner11中的一些问题汇总
ArcGIS for Android环境配置
关于ArcGIS for Android环境配置的环境配置的说明
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 大数据学习中的一些问题 关于大数据培训