美文网首页ArcGIS runtime for Android
Arcgis runtime for Android 100.5

Arcgis runtime for Android 100.5

作者: _执_念__ | 来源:发表于2020-07-16 16:21 被阅读0次

(八) 业务图层管理

查询方法

  • MapView 的 identifyLayerAsync方法:查询指定图层
  • MapView 的 identifyLayersAsync方法:查询所有图层
  • MapView 的 identifyGraphicsOverlayAsync方法:查询指定图层Graphic
  • MapView 的 identifyGraphicsOverlaysAsync方法:查询所有图层Graphic
  • FeatureTable 的 queryFeaturesAsync 方法
  • FeatureLayer 的 selectFeaturesAsync方法

异步查询指定图层中的GeoElements

identifyLayerAsync (Layer layer,Point screenPoint,double tolerance,boolean returnPopupsOnly,int maximumResults)
参数1:要查询的图层
参数1:屏幕坐标
参数1:以screenPoint为中心的圆的密度无关像素(dp)中的半径,用于识别GeoElements。值0将仅识别screenPoint处物理像素处的GeoElements。允许的最大值为100dp
参数1:如果包含弹出窗口,但识别结果中没有地理元素,则为true; false表示包含地理元素和弹出窗口
参数1:要返回的地理元素和/或弹出窗口的最大数量; 必须大于零,但-1可用于表示无限结果
代码

mapView.onTouchListener = object : DefaultMapViewOnTouchListener(this, mapView)   
   override fun onSingleTapConfirmed(e: MotionEvent): Boolean {
         //点击的位置
         val point =android.graphics.Point(e.x.toInt(), e.y.toInt())
         val listListenableFuture = mapView.identifyLayerAsync(
                operationalLayers[0],
                point,
                15.0,
                false,
                -1
            )
         listListenableFuture.addDoneListener {
            //查询到的  elements 
            val elements = listListenableFuture.get().elements
             for (element in elements) {
                    //打印出element 的所有属性
                    Log.e("test", element.attributes.keys.toString())
                    //打印出element 的所有值
                    Log.e("test", element.attributes.values.toString())
             }
        }
   return super.onSingleTapConfirmed(e)
   }
}

异步查询指定图层中最顶层的可见GeoElement

identifyLayerAsync (Layer layer,Point screenPoint,double tolerance,boolean returnPopupsOnly)

异步查询地图中所有显示图层上的GeoElements

identifyLayersAsync (Point screenPoint,double tolerance,boolean returnPopupsOnly,int maximumResults)

mapView.onTouchListener = object : DefaultMapViewOnTouchListener(this, mapView)   
   override fun onSingleTapConfirmed(e: MotionEvent): Boolean {
         //点击的位置
         val point =android.graphics.Point(e.x.toInt(), e.y.toInt())
         val listListenableFuture = mapView.identifyLayersAsync (
                point,
                15.0,
                false,
                -1
            )
         listListenableFuture.addDoneListener {
            //IdentifyLayerResult:每个图层的返回结果
            List<IdentifyLayerResult> identifyLayerResults = listListenableFuture.get();
            for(identifyLayerResult in identifyLayerResults ){
            val elements = identifyLayerResults[i].elements
                 for (element in elements) {
                    //打印出element 的所有属性
                    Log.e("test", element.attributes.keys.toString())
                    //打印出element 的所有值
                    Log.e("test", element.attributes.values.toString())
                 }
            }
        }
   return super.onSingleTapConfirmed(e)
   }
}

异步查询地图中所有显示图层上最顶部的可见GeoElement

identifyLayersAsync (Point screenPoint,double tolerance,boolean returnPopupsOnly)

查询Graphic

跟上边用法差不多,只不过查询结果中获取到的是graphic

val graphics = listListenableFuture.get().graphics
  1. identifyGraphicsOverlaysAsync(Point screenPoint,double tolerance,boolean returnPopupsOnly,int maximumResults)
    在此视图中的所有图形叠加层中,在给定屏幕点异步识别可见图形。

  2. identifyGraphicsOverlaysAsync(Point screenPoint,double tolerance,boolean returnPopupsOnly)
    在给定的屏幕点,异步识别此视图中每个图形叠加层中最顶部的可见图形。

  3. identifyGraphicsOverlayAsync( GraphicsOverlay graphicsOverlay,Point screenPoint,double tolerance,boolean returnPopupsOnly,int maximumResults)
    在给定的屏幕点,异步识别给定图形叠加层中的可见图形。

  4. identifyGraphicsOverlayAsync( GraphicsOverlay graphicsOverlay,Point screenPoint,double tolerance,boolean returnPopupsOnly)
    在给定的屏幕点,异步识别给定图形叠加层中最顶部的可见图形。

queryFeaturesAsync

queryFeaturesAsync(QueryParameters query)

查询参数
QueryParameters(com.esri.arcgisruntime.data.QueryParameters)是queryFeaturesAsync、selectFeaturesAsync的查询参数

val query = QueryParameters()
setGeometry:进行空间范围查询的Geometry对象
setMaxFeatures:最大返回值
setOutSpatialReference:查询返回结果的空间参考
setReturnGeometry:是否在查询结果中包含结合对象
setSpatialRelationship:进行空间查询的空间关系设置
setWhereClause:查询语句

private fun queryByEnvelope(envelope: Envelope) {
    val queryParameters = QueryParameters()
    queryParameters.geometry = envelope
    //要查询的图层
    val dataFeatureLayer: FeatureLayer = mapView.map.operationalLayers[0] as FeatureLayer
    //获取属性表
    val mTable = dataFeatureLayer.featureTable
    val featureQueryResult = mTable.queryFeaturesAsync(queryParameters)
    featureQueryResult.addDoneListener {
          val featureResult = featureQueryResult.get()
          Toast.makeText(this, "查询到${featureResult.toList().size} 个元素", Toast.LENGTH_LONG)
               .show()
          for (element in featureResult) {
              if(element  is Feature){
                   Log.e("test", "${element.attributes.keys}")
              }
          }
    }
}

selectFeaturesAsync

selectFeaturesAsync(QueryParameters query, FeatureLayer.SelectionMode selectionMode)

FeatureLayer的selectFeaturesAsync方法实际上是要素选择,但从实现结果上来说相当于空间查询。同时,查询的结果会被高亮显示。高亮显示可以通过FeatureLayer设置颜色和宽度(厚度)

setSelectionColor:设置选中要素的颜色
setSelectionWidth:设置选中要素的边缘宽度

private fun queryByEnvelope(envelope: Envelope) {
    val queryParameters = QueryParameters()
    queryParameters.geometry = envelope
    val dataFeatureLayer: FeatureLayer = mapView.map.operationalLayers as FeatureLayer
    val featureQueryResult =
                dataFeatureLayer.selectFeaturesAsync(
                queryParameters,
                FeatureLayer.SelectionMode.NEW
                )
    featureQueryResult.addDoneListener {
          val result = featureQueryResult.get()
          Toast.makeText(this, "查询到${result.toList().size} 个元素", Toast.LENGTH_LONG)
               .show()
          for (element in featureResult) {
              if(element  is Feature){
                   Log.e("test", "${element.attributes.keys}")
              }
         }
    }
}

(十) Callout

相关文章

  • Arcgis runtime for Android 100.5

    加载天地图说明一下,什么时候加载高德地图,什么时候加载天地图 使用原生定位或者使用arcgis提供的Locatio...

  • Arcgis runtime for Android 100.5

    加载高德地图 说明一下,什么时候加载高德地图,什么时候加载天地图 使用原生定位或者使用arcgis提供的Locat...

  • Arcgis runtime for Android 100.5

    (一) 环境配置 上篇介绍了开发环境的配置,现在写个最基本的用法 布局文件中使用 代码中 运行需要网络权限运行效果...

  • Arcgis runtime for Android 100.5

    引入 先在project 下的build.gradle中添加仓库 在app下的build.gradle中引入sdk...

  • Arcgis runtime for Android 100.5

    (二) 基本用例 在上篇基本用例中,已经说明了如何添加arcgis提供的地图,下面讲一下其他添加地图的方式 1. ...

  • Arcgis runtime for Android 100.5

    (五) 绘制点、线、面、文字、图片 Arcgis没有提供指南针控件,如果需要,可以自定义一个,很简单 去阿里图标库...

  • Arcgis runtime for Android 100.5

    (四) 地图基本操作 想要在地图上绘制,需要一个GraphicsOverlay临时绘制图层100版本单独把绘制图层...

  • Arcgis runtime for Android 100.5

    (三) 加载基础地图 地图上的监听事件 1. 地图加载完成监听 2. 地图缩放基本监听 3. 地图旋转监听 4. ...

  • Arcgis runtime for Android 100.5

    (七) GPS定位 我们已经知道,业务图层现在归ArcGISMap管理,因此,我们可以从它获取业务图层这里用一个a...

  • Arcgis runtime for Android 100.5

    (六) 自定义指南针 Arcgis 提供了定位功能,LocationDisplay类 注意定位权限需要动态获取,这...

网友评论

    本文标题:Arcgis runtime for Android 100.5

    本文链接:https://www.haomeiwen.com/subject/sbbphktx.html