如何在基于ArcGIS地图开发的Android应用中获取用户最后一次触屏的经纬度
解决方案
你当前获取的CENTER_AND_SCALE类型Viewpoint的targetGeometry属性本身就存储了地图视图中心点的坐标,按照如下步骤提取经纬度即可:
- 先将
targetGeometry强转为Point类型,拿到当前中心点的原始坐标 - 如果你的地图使用的不是WGS84坐标系(WKID=4326),需要用
GeometryEngine做投影转换,才能得到标准经纬度值
完整代码示例
import com.esri.arcgisruntime.geometry.GeometryEngine import com.esri.arcgisruntime.geometry.Point import com.esri.arcgisruntime.geometry.SpatialReference import com.esri.arcgisruntime.mapping.Viewpoint fun getLocation() { var viewPoint = mapView.getCurrentViewpoint(Viewpoint.Type.CENTER_AND_SCALE) var scale = viewPoint.targetScale // 提取视图中心点原始坐标 val centerPoint = viewPoint.targetGeometry as Point // 投影转换为WGS84标准经纬度 val wgs84Point = GeometryEngine.project(centerPoint, SpatialReference.create(4326)) as Point val longitude = wgs84Point.x // 经度 val latitude = wgs84Point.y // 纬度 }
补充说明
如果你需要获取的是用户点击屏幕任意位置的经纬度,而非地图视图中心点坐标,可以通过触屏监听+screenToLocation方法实现:
mapView.onTouchListener = object : DefaultMapViewOnTouchListener(this, mapView) { override fun onSingleTapUp(e: MotionEvent): Boolean { val screenPoint = android.graphics.Point(e.x.toInt(), e.y.toInt()) val mapPoint = mapView.screenToLocation(screenPoint) // 同样做投影转换后即可拿到经纬度 val wgs84Point = GeometryEngine.project(mapPoint, SpatialReference.create(4326)) as Point val clickLong = wgs84Point.x val clickLat = wgs84Point.y return super.onSingleTapUp(e) } }
内容的提问来源于stack exchange,提问作者nivnaory
相关产品推荐
相关产品推荐

