从 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。然后你可以应用一些数学来计算你需要什么。我会这样做:
- 计算两个转折点之间的距离(以英尺为单位)。 Calculate distance between 2 GPS coordinates
- 将距离除以 10 英尺(如您 post 中所述)并减去 1。您将得到 2 个转折点之间的点数。
- 应用更多数学运算来获取道路上每个点的纬度和经度。您可以在这里激发灵感。 How to calculate the points between two given points and given distance? or
- 您现在可以使用高程 API 作为点。别忘了获取转折点的高程。
- 获得接下来的 2 个转折点并重复。 :-)
我正在尝试创建一个 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。然后你可以应用一些数学来计算你需要什么。我会这样做:
- 计算两个转折点之间的距离(以英尺为单位)。 Calculate distance between 2 GPS coordinates
- 将距离除以 10 英尺(如您 post 中所述)并减去 1。您将得到 2 个转折点之间的点数。
- 应用更多数学运算来获取道路上每个点的纬度和经度。您可以在这里激发灵感。 How to calculate the points between two given points and given distance? or
- 您现在可以使用高程 API 作为点。别忘了获取转折点的高程。
- 获得接下来的 2 个转折点并重复。 :-)