从 OSMDroid 路由获取个人坐标,用于查找旅途中的海拔高度

Getting individual coordinates from OSMDroid routing, to use in finding elevations on trip

我正在尝试创建一个 hill finder 应用程序

喜欢this

用户输入起始位置和结束位置。最终目标是显示包含行程中道路标高的图表

目前,我已经设法让它在 A 点和 B 点之间创建一条路线。我需要使用路由,因为在我的用例中,用户必须留在路上,不能只是画画一条直线

到目前为止的代码:

RoadManager roadManager = new OSRMRoadManager(requireContext(), "MY_USER_AGENT");
ArrayList<GeoPoint> waypoints = new ArrayList<>();
waypoints.add(startPoint);
GeoPoint endPoint = new GeoPoint(48.069842, -1.712637);
waypoints.add(endPoint);
Road road = roadManager.getRoad(waypoints);
Polyline roadOverlay = RoadManager.buildRoadOverlay(road);
map.getOverlays().add(roadOverlay);
map.invalidate();
Drawable nodeIcon = getResources().getDrawable(R.drawable.ic_baseline_location_on_24);
for (int i=0; i<road.mNodes.size(); i++){
    RoadNode node = road.mNodes.get(i);
    Marker nodeMarker = new Marker(map);
    nodeMarker.setPosition(node.mLocation);
    nodeMarker.setIcon(nodeIcon);
    nodeMarker.setTitle("Step "+i);
    map.getOverlays().add(nodeMarker);
}

这是从 osmdroid 奖励包 github 页面

上的指南中获取的

我已经有一个系统可以从应用程序其他地方的坐标加载高程。我只需要从路线中获取坐标。至少每隔 10 英尺左右,不只是交叉路口

我希望 osmdroid 可以做到这一点,尤其是因为这是用 google 的 api 完成的。但是,那个代码没有开放,我不想按使用量收费

我最好的猜测是 projection(),但我几乎不知道如何使用它

注意:我不会在长距离使用它,用户最多可能需要一英里

我不认为 omsdroid 可以开箱即用。但是你可以解决这个问题:

roadOverlay.getPoints() 将为您提供包含“转折”点的 ArrayList。然后你可以应用一些数学来计算你需要什么。我会这样做:

  1. 计算两个转折点之间的距离(以英尺为单位)。 Calculate distance between 2 GPS coordinates
  2. 将距离除以 10 英尺(如您 post 中所述)并减去 1。您将得到 2 个转折点之间的点数。
  3. 应用更多数学运算来获取道路上每个点的纬度和经度。您可以在这里激发灵感。 How to calculate the points between two given points and given distance? or
  4. 您现在可以使用高程 API 作为点。别忘了获取转折点的高程。
  5. 获得接下来的 2 个转折点并重复。 :-)