【问题标题】:Calculating co-ordinate of a point on a path given a distance计算给定距离的路径上点的坐标
【发布时间】:2010-06-03 11:49:27
【问题描述】:

我正在开展一个项目,该项目使用连接到坚固型 PC 的经过校准的行车电脑来调查道路或高速公路的状况。操作员在缺陷代码沿预定路线行驶时键入缺陷代码。

我需要在地图屏幕上显示一个指示车辆当前位置的指示器,同时考虑到来自行车电脑的距离数据。

我知道每个路段起点的确切纬度坐标,而道路是由一系列点组成的。

问题是:假设车辆继续沿路线行驶并行驶了一定距离(例如 1.4 公里),我如何计算车辆的经纬度坐标。坐标将被“锁定”在道路线上,如下图蓝色所示。

谢谢, 亚历克斯

【问题讨论】:

  • 您可以为给定的路段插入车辆的位置。因此,首先计算车辆完成了多少路段,以及车辆在当前路段的哪个位置。

标签: geometry latitude-longitude


【解决方案1】:

这是一些 Java 风格的伪代码,给出了使用点之间的线性插值的解决方案。

inputs: distance, points

// construct a list of segments from the points
segments = [];
for(point in points) {
  if(not first point) {
    seg = new segment(last_point, point)
    add seg to segments
  }
  last_point = point
}

// calculate current lat and lon
for(segment in segments) {
  if(distance < segment.length) {
    alpha = distance / segment.length
    lat = segment.start.lat * (1.0 - alpha) + segment.end.lat * alpha
    lon = segment.start.lon * (1.0 - alpha) + segment.end.lon * alpha
    return (lat, lon)
  } else {
    distance = distance - segment.length
  }
}

您可能还想考虑样条插值,这可能更准确。这将需要更多的数学运算,但仍然可以应用上述想法。

【讨论】:

  • 非常好,稍加调整就可以完美运行。该点直接锁定在线,因此准确度非常准确。我不得不将 lat lon 计算中的 [* (1.0 - alpha)] 和 [* alpha] 切换到最后,否则它会倒退并在每个线段之间跳跃。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-27
  • 2011-07-19
  • 1970-01-01
  • 2016-02-03
  • 1970-01-01
  • 1970-01-01
  • 2021-04-30
相关资源
最近更新 更多