【问题标题】:Algorithm to find Points of Interest along a route?沿路线查找兴趣点的算法?
【发布时间】:2017-09-07 07:50:23
【问题描述】:

给定起点和终点之间的路线,如何沿着这条路线在最大距离 D_max 处有效地找到兴趣点 (POI)(由它们的长/纬度坐标给出)?

一个天真的方法是沿着这条路线移动一个半径为 D_max 的圆,并在这个圆内寻找 POI;但是如果圆圈不重叠我们可能会忘记POI,如果它们重叠,我们会多次找到相同的POI,因此效率不高。

什么是更好的方法?

(注意:我不知道 SO 是否是这个问题的最佳位置,或者我是否应该将其发布在 CS、软件工程或其他地方?)

【问题讨论】:

  • 所以你需要找到离折线在给定距离(和更近)的点?
  • 就是这样。很好的重新表述:)

标签: algorithm routing geolocation


【解决方案1】:

您需要在纬度/经度坐标和给定点中找到与折线的距离,并将其与最大距离进行比较。

可以得到每条路段的跨轨距离(GI在图片)from here

Formula:    dxt = asin( sin(δ13) ⋅ sin(θ13−θ12) ) ⋅ R
where    δ13 is (angular) distance from start point to third point
 θ13 is (initial) bearing from start point to third point
 θ12 is (initial) bearing from start point to end point
 R is the earth’s radius
JavaScript: var dXt = Math.asin(Math.sin(d13/R)*Math.sin(θ13-θ12)) * R;

以及沿轨道距离(BI在图片):

Formula:    dat = acos( cos(δ13) / cos(δxt) ) ⋅ R
where    δ13 is (angular) distance from start point to third point
 δxt is (angular) cross-track distance
 R is the earth’s radius
JavaScript: var dAt = Math.acos(Math.cos(d13/R)/Math.cos(dXt/R)) * R;

将沿轨距离与起点距离进行比较(如果为负数或更大,则最近点为段的终点-BH图片中的情况,此处HC为最小距离ot BC 段)

方位和距离计算在同一页面上。

如果您正在使用一些地理库,它们应该包含此类任务的功能。

【讨论】:

  • 我想用这个公式来指向a路径附近。我不清楚如何制定公式。假设用户从 B 到 C,并想检查 G 离 BC 路径近还是远。有没有办法获得 GI 距离?
  • @ Janaka 是的,我的第一个引文指明了方向。您还需要角距离和方位角 - 链接包含相应的公式。
【解决方案2】:

假设您的 POI 点在某个空间分区数据结构中作为 k-d 树或四叉树进行索引,那么实现 find-points-near-polyline 算法应该不会太困难。

  1. 从折线获取符合它的线段集。
  2. 递归地进入您的空间分区数据结构,按到空间分区封闭框的距离在每个级别过滤段集。
  3. 到达最终节点后,使用蛮力检查该点集合中剩余向量与分区中 POI 之间的距离。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多