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

在Android Studio中基于OSM实现当前位置到目标点路线查询的方法

Android Studio 基于OSM实现两点路线查询方案

1. 环境准备与依赖配置

  • 首先在模块级build.gradle文件中引入osmdroid核心库、OSRM路线规划依赖,同步项目生效
  • 在AndroidManifest.xml中声明两个必要权限:
    • android.permission.ACCESS_FINE_LOCATION:用于获取用户当前位置
    • android.permission.INTERNET:用于加载OSM地图瓦片和请求路线数据

2. 坐标参数准备

  • 用户当前位置:通过系统LocationManager或者融合位置服务获取用户实时经纬度,存入currentLat、currentLon两个变量
  • 目标点位置:直接读取数据库中提前存储的latitude(目标纬度)、longitude(目标经度)变量即可

3. 核心路线查询与绘制逻辑

注意:路线网络请求必须在子线程执行,禁止直接在主线程调用,避免触发ANR错误
核心代码示例:

// 1. 构造起点、终点GeoPoint对象
GeoPoint startPoint = new GeoPoint(currentLat, currentLon);
GeoPoint endPoint = new GeoPoint(latitude, longitude);

// 2. 初始化路线管理器,可根据需求选择驾车/步行/骑行模式
RoadManager roadManager = new OSRMRoadManager(context, "your-custom-user-agent");
// 设置路线规划模式,可选值:OSRMRoadManager.MEAN_BY_FOOT/MEAN_BY_BIKE/MEAN_BY_CAR
roadManager.setMean(OSRMRoadManager.MEAN_BY_CAR);

// 3. 构造途径点列表,仅起点终点的话直接添加两个点即可
ArrayList<GeoPoint> wayPoints = new ArrayList<>();
wayPoints.add(startPoint);
wayPoints.add(endPoint);

// 4. 异步请求路线数据
new Thread(() -> {
    Road route = roadManager.getRoad(wayPoints);
    if (route.mStatus == Road.STATUS_OK) {
        // 路线请求成功,构建路线覆盖物
        Polyline routeOverlay = RoadManager.buildRoadOverlay(route, Color.parseColor("#2196F3"), 12f);
        // 将路线添加到地图
        runOnUiThread(() -> {
            mapView.getOverlays().add(routeOverlay);
            // 自动调整地图视野,让起点和终点同时显示在可视区域内
            mapView.zoomToBoundingBox(new BoundingBox.fromGeoPoints(wayPoints), 80);
            mapView.invalidate();
        });
    }
}).start();

4. 异常场景处理

  • 获取当前位置为空时,优先提示用户检查位置权限是否开启、GPS服务是否正常,也可支持用户手动选择起点
  • 路线请求返回失败状态时,可先检查网络连接是否正常,重试1-2次后仍失败则给用户友好提示
  • 调用前先校验目标点latitude、longitude是否在合法经纬度范围内,避免非法参数导致崩溃

内容的提问来源于stack exchange,提问作者chanaka_ayesh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 22:45:04