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

      效果图依然如上所示。

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

相关文章推荐

使用UrhoSharp

使用UrhoSharp PDF用于离线使用 下载PDF 互动: 行星地球工作簿 探索协调工作簿 让我们知道你对此的感受 UrhoSharp引擎概述 在您编写...

安卓智能地图开发与实施十一:业务数据查询 - ArcGIS Runtime SDK for Android(Version 100.0.0)

业务数据查询地图通常能够结合诸多资源,无论是符号化、注记还是图例往往不能够满足对信息的表达,为了更多更细节地承载信息,通过查询和地图上的弹出式窗口能够完整的展示资源的属性信息。

js replace

以前很少用到replace 今天发现居然普通的replace只能替换第一个字符蛋疼。百度了下 /g全局匹配 \s匹配空 replace(/\"/g, "\\\"").replace(/\s/g...

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

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

安卓智能地图开发与实施十四:业务数据编辑 - ArcGIS Runtime SDK for Android(Version 100.0.0)

业务图层(OperationalLayers)编辑除了对业务成果的地图可视化展示,外业数据调绘采集是移动地图应用很大一部分内容。从外业数据调绘采集的功能上来说包括添加、删除、更新,更新包括属性更新、几...

ReferenceError: Invalid assignment left-hand side

jquery 中,对元素的属性赋值,常见的错误是:$('#uid').attr('value')=id;这种错误的写法会导致浏览器报错: referenceerror: Invalid assig...

jquery 修改父节点的class 报错ReferenceError: Invalid left-hand side in assignment

今天做一个demo,遇到修改父节点的class,先看html: ( ...

Uncaught ReferenceError: Invalid left-hand side in assignment

用谷歌调试出现该错误,可能是由于下面问题引起的 if(1=1){ //错误的判断,少了一个“=”号 alert(1); } if(1==1){//正确的 alert(1); ...
  • ty0415
  • ty0415
  • 2013-04-27 17:30
  • 9453

js跳转锚点

location.hash="anchor";
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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