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

问题描述

关于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();
}

}

时间: 2024-08-08 05:47:32

arcgis android query- 关于arcgis for android 中的QueryTask这个例子的一些问题的相关文章

android 邮件-android通过代码获取当前系统中安装的所有邮件应用列表

问题描述 android通过代码获取当前系统中安装的所有邮件应用列表 想通过代码得到当前系统所有可以收发邮件的应用,通过列表显示出来,求大神指导,有知道的朋友请知道下获取的方法,目前我能想到的就是获取当前所有安装的应用通过关键字过滤,不过感觉这种方法不是很好,不能保证所有过滤出来的都是邮件应用.

android技巧:如何在android应用中插入百度广告

1.介绍 现在游戏中的广告基本上已经成为了游戏创作者的一个重要的收入来源.其实插入广告还是挺简单的,本文选择百度广告联盟作为案例(总觉得百度不会拖欠工资).注:不过,插入广告程序会稍微卡一些,而且真的很耗流量. (本文并不是照抄百度的文档,会很直白哦) 2.代码部分 首先肯定是注册百度广告联盟的账号,和下载sdk.地址:http://munion.baidu.com/ 第二步,打开eclipse,把里面的jar文件导入库中. 将百度推广的jar包复制到您工程的Libs目录下,并按如下步骤将其导入

Android 通过onDraw实现在View中绘图操作的示例

以下是对Android通过onDraw实现在View中绘图操作的示例代码进行了详细的分析介绍,需要的朋友可以过来参考下   Android绘图操作,通过继承View实现,在onDraw函数中实现绘图.下面是一个简单的例子: 复制代码 代码如下: public class AndroidTest extends Activity {     /** Called when the activity is first created. */     @Override     public void

Android使用Sensor感应器实现线程中刷新UI创建android测力计的功能_Android

本文实例讲述了Android使用Sensor感应器实现线程中刷新UI创建android测力计的功能.分享给大家供大家参考,具体如下: 前面一篇<Android基于Sensor感应器获取重力感应加速度的方法>我们介绍了sensor的基本知识以及一个使用其中加速度感应器获取数据的例子. 前面提到过一个问题,就是说感应器刷新频率太快,假如我们要做一个UI中,需要根据方向数据绘制一个一个移动的箭头,那么就要太过频繁的刷新绘制界面,占用很多的资源,体验性也会很差,<android 2高级编程>

设计-Android studio 在XML布局文件中编辑好代码,为什么Design界面创建的控件会重叠?

问题描述 Android studio 在XML布局文件中编辑好代码,为什么Design界面创建的控件会重叠? 新手表示每次都要在Design界面一个一个拖来调整位置,但看教程上并不需要拖.求各位指点~ 解决方案 应该 是因为你在xml并没有排列好控件的布局,重叠很有可能是你把控件都放在了relativelayout里,relativelayout需要手动设置控件的位置 解决方案二: 尽量不要采取拖动方式,使用代码控制会比较好 解决方案三: 默认是相对布局 相对布局的控件式会重叠的

android创建快捷方式来打开应用中特定的Activity

有段时间没有记录过了. 这也是换工作以后写的第一篇吧,现在公司是在做sdk的接入,对于我来说,能接触到更多不同于以前应用的很多东西,提供自己的服务给更多的人. 虽然是只是进行迭代,但是我觉得对我也有很大的帮助. 现在sdk应设计的要求要在使用了我们sdk的游戏在安装打开以后就要创建一个快捷方式,然后这个快捷方式不是用来打开应用,是为了进行静默下载所创建的,但是我们知道android里边快捷方式是与应用绑定的,他只能打开Activity,我一开始的设想是我捕捉到快捷方式的点击事件,然后开一个ser

代码混淆-android混淆代码后崩溃日志中不显示行号的问题

问题描述 android混淆代码后崩溃日志中不显示行号的问题 android混淆代码后崩溃日志中不显示行号,找崩溃的地方很不方便,如何解决,求大神指点,谢谢! 解决方案 问题已解决.原因是在混淆代码时默认会去掉class文件中的调试信息(源码的行号.源文件信息等),需要在混淆配置文件中申明保持这些信息: -renamesourcefileattribute SourceFile -keepattributes SourceFile,LineNumberTable 解决方案二: tks, 这个问题

我的Android进阶之旅------&amp;gt; Android为TextView组件中显示的文本添加背景色

通过上一篇文章 我的Android进阶之旅------> Android在TextView中显示图片方法 (地址:http://blog.csdn.net/ouyang_peng/article/details/46916963)      我们学会了在TextView中显示图片的方法,现在我们来学习如何为TextView组件中显示的文本添加背景色.要求完成的样子如图所示: 首先来学习使用BackgroundColorSpan对象设置文字背景色,代码如下: TextView textView=(

获取Android SDK 源代码并在Eclipse中关联查看的方法

转: http://618119.com/archives/2010/12/29/198.html 在Google搜索"Android Eclipse 源代码"得到的结果并不合适,因为Google的Eclipse Android开发插件已经更新到了ADT 8.0.1.相应的lib关联java源代码的方式也变了.以下是获取Android的Java源代码并在Eclipse中关联的最新操作方法和步骤:1.首先下载Android的SDK安装文件:http://dl.google.com/and