You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在基于ArcGIS地图开发的Android应用中获取用户最后一次触屏的经纬度

解决方案

你当前获取的CENTER_AND_SCALE类型Viewpoint的targetGeometry属性本身就存储了地图视图中心点的坐标,按照如下步骤提取经纬度即可:

  1. 先将targetGeometry强转为Point类型,拿到当前中心点的原始坐标
  2. 如果你的地图使用的不是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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 07:06:02