目录

  1. IdentifyTask

    1. 功能介绍
    2. 示例
  2. QueryTask
    1. 功能介绍
    2. 示例

查询检索在ArcGIS Runtime for Android中是不可或缺的一部分,本节将介绍两种常用的查询检索任务:IdentifyTask和QueryTask。IdentifyTask是用来识别图层中的要素的,而QueryTask是用来做图层要素查询的。

1   IdentifyTask

1.1功能介绍

IdentifyTask通过字面理解就是一个识别任务类,简单来说就是当我们通过手指点击地图时获取地上的要素信息,当然如果想正常获取要素的相关信息,在识别操作前必须为IdentifyTask事先设置好一组参数信息,IdentifyTask接受的输入参数必须是IdentifyParameters类型的对象,在参数IdentifyParameters对象中我们可以设置相应的识别条件。

IdentifyTask是针对于服务中的多个图层的识别,返回的结果是IdentifyResult[]数组,并且该任务存在三种模式:

l  ALL_LAYERS

该模式表示在识别时检索服务上的所有图层的要素。

l  VISIBLE_LAYERS

该模式表示在识别时只检索服务上的可见图层的要素。

l  TOP_MOST_LAYER

该模式表示在识别时只检索服务上最顶层的要素。

IdentifyParameters常用接口介绍:

序号

接口

说明

1

setDPI(int dpi)

设置map的分辨率值

2

setGeometry(Geometry geometry)

设置空间几何对象

3

setLayerMode(int layerMode)

设置模型,主要有三种模型:ALL_LAYERS、VISIBLE_LAYERS和TOP_MOST_LAYER

4

setLayers(int[] layers)

设置识别的图层数组

5

setMapExtent(Envelope extent)

设置当前地图的范围

6

setMapHeight(int height)

设置地图的高

7

setMapWidth(int width)

设置地图的宽

8

setReturnGeometry(boolean returnGeometry)

指定是否返回几何对象

9

setSpatialReference(SpatialReference spatialReference)

设置空间参考

10

setTolerance(int tolerance)

设置识别的容差值

1.2 示例

下面我们通过示例代码来介绍IdentifyTask的具体用法:

params = new IdentifyParameters();//识别任务所需参数对象params.setTolerance(20);//设置容差params.setDPI(98);//设置地图的DPIparams.setLayers(new int[]{4});//设置要识别的图层数组params.setLayerMode(IdentifyParameters.ALL_LAYERS);//设置识别模式//为地图添加点击事件监听器map.setOnSingleTapListener(new OnSingleTapListener() {    private static final long serialVersionUID = 1L;                    public void onSingleTap(final float x, final float y) {            if(!map.isLoaded()){return;}//establish the identify parameters    Point identifyPoint = map.toMapPoint(x, y);                params.setGeometry(identifyPoint);//设置识别位置params.setSpatialReference(map.getSpatialReference());//设置坐标系                                    params.setMapHeight(map.getHeight());//设置地图像素高params.setMapWidth(map.getWidth());//设置地图像素宽Envelope env = new Envelope();map.getExtent().queryEnvelope(env);params.setMapExtent(env);//设置当前地图范围                    MyIdentifyTask mTask = new MyIdentifyTask(identifyPoint);mTask.execute(params);                    }});
………………………
private class MyIdentifyTask extends AsyncTask<IdentifyParameters, Void, IdentifyResult[]> {IdentifyTask mIdentifyTask;Point mAnchor;MyIdentifyTask(Point anchorPoint) {mAnchor = anchorPoint;}@Overrideprotected IdentifyResult[] doInBackground(IdentifyParameters... params) {IdentifyResult[] mResult = null;if (params != null && params.length > 0) {IdentifyParameters mParams = params[0];try {mResult = mIdentifyTask.execute(mParams);//执行识别任务} catch (Exception e) {// TODO Auto-generated catch block
                    e.printStackTrace();}}return mResult;}@Overrideprotected void onPreExecute() {mIdentifyTask = new IdentifyTask("http://services.arcgisonline.com/ArcGIS/rest/services/Demographics/USA_Average_Household_Size/MapServer");//
        }        }

通过上面代码我们可以知道,在执行识别任务我们需要以下几个步骤:

1)      创建识别任务所需的参数对象IdentifyParameters

2)      为参数对象设置识别条件

3)      定义MyIdentifyTask类并继承AsyncTask

4)      在MyIdentifyTask的doInBackground()方法中执IdentifyTask的execute();

注:在上面示例中,我们的识别任务是在AsyncTask的子类中执行的,因为识别任务请求是一个不定时操作,为了不影响UI中的操作所以使用该类来异步执行识别任务。

2 QueryTask

2.1 功能介绍

QueryTask指的是一个查询任务,这也是我开发过程中经常使用的一种查询方式,QueryTask查询任务使用非常简单,而且该任务只是针对服务中的一个图层进行查询。在执行QueryTask任务前它需要一个Query参数对象,该参数主要包含了查询的一些条件设置。通过QueryTask我们可以对图层进行属性查询、空间查询以及属性与空间联合查询。

Query常用接口介绍:

序号

接口

说明

1

setGeometry(Geometry geometry)

设置空间几何对象

2

setInSpatialReference(SpatialReference inSR)

设置输入的空间参考

3

setObjectIds(int[] objectIds)

设置要查询要素的ObjectID数组

4

setOutFields(String[] outFields)

设置返回字段的数组

5

setOutSpatialReference(SpatialReference outSR)

设置输出的空间参考

6

setReturnGeometry(boolean returnGeometry)

设置是否返回几何对象

7

setReturnIdsOnly(boolean returnIdsOnly)

设置是否只返回ObjiectID字段

8

setSpatialRelationship(SpatialRelationship spatialRelationship)

设置查询的空间关系

9

setWhere(String where)

设置设置查询的条件

2.2 示例

下面通过示例代码我来看一下QueryTask的使用方法:

targetServerURL = "http://services.arcgisonline.com/ArcGIS/rest/services/Demographics/USA_Average_Household_Size/MapServer";
String targetLayer = targetServerURL.concat("/3");//服务图层String[] queryParams = { targetLayer, "AVGHHSZ_CY>3.5" };AsyncQueryTask ayncQuery = new AsyncQueryTask();ayncQuery.execute(queryParams);
private class AsyncQueryTask extends AsyncTask<String, Void, FeatureSet> {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;}}}

通过上面代码我们可以清晰的了解的QueryTask查询任务使用起来非常简单,步骤如下:

1)      创建Query参数对象

2)      为参数对象设定查询条件

3)      通过AsyncTask的子类来执行查询任务

原文链接:http://blog.csdn.net/arcgis_mobile/article/details/8263412

转载于:https://www.cnblogs.com/dwf07223/archive/2013/05/18/3085907.html

ArcGIS Runtime for Android开发教程V2.0(9)基础篇-----查询检索相关推荐

  1. 【Android开发教程】一、基础概念

    Android操作系统 Android是一个基于Linux.使用java作为程序接口的操作系统.他提供了一些工具,比如编译器.调试器.还有他自己的仿真器(DVM - Dalvik Virtual Ma ...

  2. “.NET研究”【Android开发教程】一、基础概念

    Android操作系统 Android是一个基于Linux.使用java作为程序接口的操作系统.他提供了一些工具,比如编译器.调试器.还有他自己的仿真器(DVM - Dalvik Virtual Ma ...

  3. 《ArcGIS Engine+C#实例开发教程》第三讲 MapControl与PageLayoutControl同步

    <ArcGIS Engine+C#实例开发教程>第三讲 MapControl与PageLayoutControl同步 原文:<ArcGIS Engine+C#实例开发教程>第三 ...

  4. 《ArcGIS Engine+C#实例开发教程》第七讲 图层符号选择器的实现2

    <ArcGIS Engine+C#实例开发教程>第七讲 图层符号选择器的实现2 原文:<ArcGIS Engine+C#实例开发教程>第七讲 图层符号选择器的实现2 摘要:在第 ...

  5. 做了一个系列的Android开发教程列表

    做了一个系列的Android开发教程列表.花了半天多的专题 里面包含了 4个系列的教程. 也包含了很多Android开发资料. 喜欢的人可以收藏哦:http://dev.apkbus.com/

  6. 《ArcGIS Engine+C#实例开发教程》第一讲桌面GIS应用程序框架的建立

    原文:<ArcGIS Engine+C#实例开发教程>第一讲桌面GIS应用程序框架的建立 摘要:本讲主要是使用MapControl.PageLayoutControl.ToolbarCon ...

  7. Android开发教程之--sql语句一、创建/删除表Stringsql=Createtable

    Android开发教程之--sql语句 一.创建/删除表 String sql="Create table "+TABLE_NAME+"("+FIELD_ID+ ...

  8. Unity3D For Android 开发教程【转http://game.ceeger.com/Unity/Doc/2011/Unity3D_For_Android.html】...

    Unity3D For Android 开发教程 Date:2011-08-01 04:33 我自认为抵挡诱惑的能力还是很强大的,关键的时候还能把持住自己.今天逛了一下南京的丹凤街,终于受不住Andr ...

  9. android开发教程21篇(强烈推荐,几乎每一篇都是精华教程)

    qianqianlianmeng android开发教程21篇(强烈推荐,几乎每一篇都是精华教程) 推荐hellogv 的二十一篇android开发教程,说句真心话,几乎是每一篇都是精华,值得很多开发 ...

最新文章

  1. cudart64_101.dll not found
  2. Ribbon 负载均衡调用04——ribbon 负载均衡算法||手写轮询算法(原理+JUC)CAS+自旋锁
  3. 打包python程序
  4. Linux下kafka的部署
  5. botley编程机器人测评_浅谈少儿编程教育启蒙----教具篇
  6. OpenStack Weekly Rank 2015.08.24
  7. Linux基础_合并,归档,压缩,dump,编辑器
  8. 内容分发网络(CDN)关键技术、架构与应用(一)
  9. 代码审计工具Fortify 17.10及Mac平台license版本
  10. python批量提取word指定内容_python 批量提取word应聘登记表数据+情感分析
  11. 堆的实现(大量注释)
  12. IPS和IDS的区别
  13. Microsoft Recruit in Suzhou Branch (微软苏州招聘)
  14. 意在寥廓观鸿蒙 什么意思,“滴滴寒露凋芙蓉”的意思及全诗出处和翻译赏析...
  15. 【HAL库系列】0.STM32CubeIDE介绍
  16. Dice Loss与mIoU
  17. 苹果笔的代替笔有哪些?Ipad好用电容笔测评
  18. 局域网通信软件MTalk
  19. 编写dylib_iOS逆向-无需越狱注入动态库
  20. linux文件目录详解

热门文章

  1. c语言 vscode代码自动补全_借助C/C++ Extension实现VSCode C++代码补全
  2. deap软件结果分析_绿港科技之窗:基于InDel标记的黄瓜种质资源遗传多样性分析...
  3. java优化上传速度慢怎么办_网站建设中影响网站优化的一些因素
  4. android system读写权限设置,当然需要root访问权限才能写入Android的system目录
  5. 主板有几种尺寸_工控机主板哪个牌子好?2019工控主板十大品牌排行榜
  6. 嵌入式linux屏幕录制,在MAC系统上进行屏幕录制
  7. JAVA线程并发数量控制_Java并发工具类(三):控制并发线程数的Semaphore
  8. u盘解密软件_【精彩文章】基于STM32的指纹识别U盘设计
  9. java吃豆人代码讲解_在吃豆人的这一关里,隐藏着来自程序员的深深恶意
  10. java获取数据库当前时间_java中获取系统的当前时间