ArcGIS for Android Runtime100 基本操作(三)——离线数据空间查询

原创 2017年09月11日 18:39:10

      空间查询是地理信息中的一个概念,指的是通过空间数据进行空间数据库的查询操作。

      在ArcGIS for Android里,通常采用FeatureTable类来展示空间数据,每个空间表包含了一系列的字段,一个图形和一个空间参考系。而空间数据的来源主要包括在线获取,离线的geodatabase数据、VTPK数据和MMPK数据的读取等。

      目前来说离线数据还是以geodatabase数据,所以我们以geodatabase数据为例说明下如何在ArcGIS for Android Runtime 100里进行空间查询。


      之前我写过一篇基于Runtime 10.2.9的空间查询的例子,博客地址是:http://blog.csdn.net/bit_kaki/article/details/76429910,可以参考下。其实在Runtime 100里,对于空间查询的方法变化并不大,最大的变化就是在Runtime 100里对于异步统一采用了ListenableFuture接口来进行表达。


Query方法查询(对FeatureTable类查询)

      

      用Query方法查询是ArcGIS for Android里最常用的查询方法,在Runtime 100里,依然是通过先构造一个QueryParameters实例,然后对其填充所需的查询参数,最后把这些参数传递给一个对FeatureTable类的Query查询方法即可。其官方API如下:



      简单示例如下:

mMapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, mMapView) {
    @Override
    public boolean  onSingleTapConfirmed(MotionEvent v) {
        android.graphics.Point screenPoint=new android.graphics.Point(Math.round(v.getX()), Math.round(v.getY()));
        Point clickPoint = mMapView.screenToLocation(screenPoint);
        QueryParameters query = new QueryParameters();
        query.setGeometry(clickPoint);// 设置空间几何对象
        FeatureTable mTable = dataFeatureLayer.getFeatureTable();//得到查询属性表
        final ListenableFuture<FeatureQueryResult> featureQueryResult
                = mTable.queryFeaturesAsync(query);
        featureQueryResult.addDoneListener(new Runnable() {
            @Override
            public void run() {
                try {
                    FeatureQueryResult featureResul = featureQueryResult.get();
                    for (Object element : featureResul) {
                        if (element instanceof Feature) {
                            Feature mFeatureGrafic = (Feature) element;
                            Map<String, Object> mQuerryString = mFeatureGrafic.getAttributes();
                            for(String key : mQuerryString.keySet()){
                                Log.i("==============="+key,String.valueOf(mQuerryString.get(key)));
                            }
                        }
                    }
                }catch (Exception e){
                    e.printStackTrace();
                }
            }
        });
        return true;
    }
});

      运行的结果贴图:



Select方法查询(FeatureLayer类查询


      前面我们说了在ArcGIS for Android里,通常采用FeatureTable类来展示空间数据,而直接加载geodatabase数据的却是一个要素图层FeatureLayer。对于它,我们也可以通过Select的方法进行查询,其方法依然是通过先构造一个QueryParameters实例,然后对其填充所需的查询参数,最后把这些参数传递给一个对FeatureLayer类的Select查询方法即可

mMapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, mMapView) {
    @Override
    public boolean  onSingleTapConfirmed(MotionEvent v) {
        android.graphics.Point screenPoint=new android.graphics.Point(Math.round(v.getX()), Math.round(v.getY()));
        Point clickPoint = mMapView.screenToLocation(screenPoint);
        QueryParameters query = new QueryParameters();
        query.setGeometry(clickPoint);// 设置空间几何对象
        final ListenableFuture<FeatureQueryResult> featureQueryResult
                = dataFeatureLayer.selectFeaturesAsync(query, FeatureLayer.SelectionMode.ADD);
        featureQueryResult.addDoneListener(new Runnable() {
            @Override
            public void run() {
                try {
                    FeatureQueryResult featureResul = featureQueryResult.get();
                    for (Object element : featureResul) {
                        if (element instanceof Feature) {
                            Feature mFeatureGrafic = (Feature) element;
                            Map<String, Object> mQuerryString = mFeatureGrafic.getAttributes();
                            for(String key : mQuerryString.keySet()){
                                Log.i("==============="+key,String.valueOf(mQuerryString.get(key)));
                            }
                        }
                    }
                }catch (Exception e){
                    e.printStackTrace();
                }
            }
        });
        return true;
    }
});

      效果图和Query完全相同。

      不过注意的是它有三种Select模式,分别是ADD,NEW和SUBTRACT,代表向选择集增加图形,新建选择集以及删除当前选择集图形。


Identify方法查询(FeatureLayer类查询


      我们都知道,FeatureLayer是加载在MapView上的,所以我们也可以对MapView进行查询,而对MapView进行控件查询的方法就是Identify。因为一个MapView会加载多层FeatureLayer,所以在查询的方法里需要加入数据的层数来判断是对那个FeatureLayer进行查询,其API是:


      

      以其中一个方法为例子是:

mMapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, mMapView) {
    @Override
    public boolean  onSingleTapConfirmed(MotionEvent v) {
        android.graphics.Point screenPoint=new android.graphics.Point(Math.round(v.getX()), Math.round(v.getY()));
        Point clickPoint = mMapView.screenToLocation(screenPoint);
        QueryParameters query = new QueryParameters();
        query.setGeometry(clickPoint);// 设置空间几何对象
        final ListenableFuture<IdentifyLayerResult> featureQueryResult
                = mMapView.identifyLayerAsync(dataFeatureLayer,screenPoint,0,false);
        featureQueryResult.addDoneListener(new Runnable() {
            @Override
            public void run() {
                try {
                    for (Object element : featureQueryResult.get().getElements()) {
                        if (element instanceof Feature) {
                            Feature mFeatureGrafic = (Feature) element;
                            Map<String, Object> mQuerryString = mFeatureGrafic.getAttributes();
                            for(String key : mQuerryString.keySet()){
                                Log.i("==============="+key,String.valueOf(mQuerryString.get(key)));
                            }
                        }
                    }
                }catch (Exception e){
                    e.printStackTrace();
                }
            }
        });
        return true;
    }
});

      效果图依然如上所示。

版权声明:本文为博主原创文章,未经博主允许不得转载。

Android内存泄漏总结

本文转自https://github.com/francistao/LearningNotes/blob/master/Part1/Android/Android%E5%86%85%E5%AD%98%...

ArcGIS for Android Runtime100 基本操作(四)——GPS定位

对于定位大家应该都不陌生,在Android设备里,主要存在GPS定位、网络基站定位、AGPS定位等。在这里我们不对各位定位方式做深入阐述,默认以AGPS来说明下如何在Runtime100实现定位。 ...

《ArcGIS Runtime SDK for Android开发笔记》——(9)、空间数据的容器-地图MapView

1、前言 在上一篇内容里介绍了 关于ArcGIS Android开发的未来(“Quartz”版Beta)相关内容,期间也提到了关于API接口的重构,开发思路的调整,根据2015UC资料也可以知道新版...
  • esricd
  • esricd
  • 2015年11月30日 12:28
  • 2469

安卓智能地图开发与实施八:离线业务图层(浏览查询) - ArcGIS Runtime SDK for Android(Version 100.0.0)

离线业务图层离线业务图层,在很大程度上减少了对网络的依附。无论是哪个行业的外业核查,都需要详细的原有信息进行支撑,而涉及地图、位置的信息核查,通过离线数据可以在本端形成对比核实能力。...

ArcGIS for Android 离线数据空间分析--叠加分析

上一章我们以I查询为例讲述了在ArcGIS for Android里如何进行离线数据空间查询,通过ArcGIS 10.2以上的SDK里中QueryParamters类里设置查询参数,然后到对应空间数...

安卓智能地图开发与实施十五:离线与同步 - ArcGIS Runtime SDK for Android(Version 100.0.0)

离线与同步(GeodatabaseSyncTask)针对编辑,上一节中凡事离线的,各种添加、更新、删除等都是针对终端上存储的离线数据。可以在没有网络的环境下完成,当具备网络时,还需同步到ArcGIS ...

安卓智能地图开发与实施一:配置离线SDK - ArcGIS Runtime SDK for Android(Version 100.0.0)

一、配置离线Maven1、 下载安装并配置JDK 官网下载: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-d...

安卓智能地图开发与实施六:离线基础底图 - ArcGIS Runtime SDK for Android(Version 100.0.0)

离线基础底图(Offline Tiled Layers)离线基础底图最传统的方式是直接拷贝ArcGIS Server服务的切片成果,存在的问题是无论使用松散型还是紧凑型都包含太多碎小文件,部署不便。T...

ArcGIS Runtime SDK For Android 10.2.x版本支持的空间数据类型

ArcGIS Runtime SDK for Android支持的空间数据源有多种,主要分为3大类:ArcGIS在线数据源、ArcGIS离线数据源(自10.2版本起),以及第三方数据源。...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ArcGIS for Android Runtime100 基本操作(三)——离线数据空间查询
举报原因:
原因补充:

(最多只允许输入30个字)