如何从OSMDroid规划路径中提取密集坐标以获取行程海拔数据
解决方法
核心思路
你不需要用到Projection相关API,OSMR返回的Road对象本身就携带了完整的高精度路径坐标集,只需要对路径段做固定间隔插值就能满足10英尺的采样要求,具体实现如下:
步骤1:确认路径原始点集来源
OSRMRoadManager请求返回的Road实例中,road.mRouteHigh字段存储了整条路径的连续高精度坐标点(不是仅路口的mNodes节点),这是我们做采样的基础数据源。
步骤2:单位转换与采样逻辑实现
10英尺约等于3.048米,我们设置3米为采样间隔即可满足要求。以下是采样工具方法和衔接你现有代码的实现:
import org.osmdroid.util.GeoPoint; import java.util.ArrayList; import java.util.List; // 采样间隔:10英尺≈3.048米,这里取3米 private static final double SAMPLE_INTERVAL_METER = 3; /** * 对路径做固定间隔采样 * @param rawPath 原始路径点列表,取road.mRouteHigh即可 * @return 采样后的坐标点列表 */ private List<GeoPoint> samplePathByInterval(List<GeoPoint> rawPath) { List<GeoPoint> sampledPoints = new ArrayList<>(); if (rawPath == null || rawPath.size() < 2) { return rawPath; } // 加入第一个点 sampledPoints.add(rawPath.get(0)); GeoPoint lastSamplePoint = rawPath.get(0); double remainingDistance = SAMPLE_INTERVAL_METER; for (int i = 1; i < rawPath.size(); i++) { GeoPoint currentPoint = rawPath.get(i); double segmentDistance = lastSamplePoint.distanceTo(currentPoint); while (segmentDistance >= remainingDistance) { // 计算插值点 double ratio = remainingDistance / segmentDistance; double lat = lastSamplePoint.getLatitude() + ratio * (currentPoint.getLatitude() - lastSamplePoint.getLatitude()); double lon = lastSamplePoint.getLongitude() + ratio * (currentPoint.getLongitude() - lastSamplePoint.getLongitude()); GeoPoint interpolatedPoint = new GeoPoint(lat, lon); sampledPoints.add(interpolatedPoint); lastSamplePoint = interpolatedPoint; segmentDistance -= remainingDistance; remainingDistance = SAMPLE_INTERVAL_METER; } remainingDistance -= segmentDistance; lastSamplePoint = currentPoint; } // 最后加入终点,避免遗漏 sampledPoints.add(rawPath.get(rawPath.size() - 1)); return sampledPoints; }
步骤3:衔接你现有代码的调用示例
你在拿到Road实例之后,直接调用上面的方法即可得到符合要求的采样点:
// ... 你的原有代码不变 Road road = roadManager.getRoad(waypoints); // 新增采样逻辑 List<GeoPoint> sampledPoints = samplePathByInterval(road.mRouteHigh); // 拿到sampledPoints之后即可传给你的海拔获取模块,生成海拔变化图表 // ... 你的原有绘图逻辑不变
性能说明
你的使用场景最长路径仅1英里,采样后最多生成约540个点,完全不会有性能问题,不需要做额外优化。
内容的提问来源于stack exchange,提问作者Bobabooy114
相关产品推荐
相关产品推荐

