使用OpenStreetMap的MapView如何设置点击监听器获取经纬度
osmdroid MapView 点击获取经纬度实现方案
osmdroid 的 MapView 不支持直接设置普通的 View.OnClickListener,需要通过添加自定义 Overlay 监听点击手势实现需求,修改步骤如下:
- 先在 Activity 头部补充导入依赖:
import android.view.MotionEvent; import org.osmdroid.views.overlay.Overlay;
- 在
onCreate方法内,完成 mapView 初始化的代码之后,添加以下点击监听逻辑:
// 新增地图点击获取经纬度逻辑 mapView.getOverlays().add(new Overlay(this) { @Override public boolean onSingleTapUp(MotionEvent e, MapView mapView) { // 将屏幕点击坐标转换为地图经纬度坐标 GeoPoint clickPosition = (GeoPoint) mapView.getProjection().fromPixels((int) e.getX(), (int) e.getY()); double lat = clickPosition.getLatitude(); double lon = clickPosition.getLongitude(); // 填充到表单输入框,保留6位小数保证精度 et_lat.setText(String.format("%.6f", lat)); et_long.setText(String.format("%.6f", lon)); // 可选:点击后自动将地图中心点移动到点击位置 mapController.animateTo(clickPosition); return true; } });
- 注意修正布局文件的小错误:你当前布局中
edit_lat_etape的hint属性值误写为"Longitude (Appuyez sur la carte à l'emplacement souhaité)",需要改为纬度对应的提示文本,避免用户混淆。
修改完成后点击地图任意点位,经纬度会自动填充到对应表单字段中。
内容的提问来源于stack exchange,提问作者NeoKerd
相关产品推荐
相关产品推荐

