Ruby on rails 计算传单中来回的轨迹距离

Ruby on rails 计算传单中来回的轨迹距离,ruby-on-rails,ruby,leaflet,Ruby On Rails,Ruby,Leaflet,我使用的是传单轨道gem(0.7.4),我需要计算轨道距离,以防路径来回。在我们的应用程序中,我们上传GPX文件并使用传单显示点。我们通过第一个点和最后一个点计算轨迹距离,但在往返路径的情况下,该轨迹距离为零。这里的点是一个坐标数组(纬度和经度) 提前感谢。这是ruby代码。您是想在后端还是前端完成这项工作?您的标题表明您希望在传单中这样做。你们知道传单有计算点之间距离的工具吗?()后端。是的,我知道传单上提供了一些工具,但在来回路径的情况下,我没有得到正确的距离。我曾想过使用传单gpx插件,但

我使用的是传单轨道gem(0.7.4),我需要计算轨道距离,以防路径来回。在我们的应用程序中,我们上传GPX文件并使用传单显示点。我们通过第一个点和最后一个点计算轨迹距离,但在往返路径的情况下,该轨迹距离为零。这里的
是一个坐标数组(纬度和经度)


提前感谢。

这是ruby代码。您是想在后端还是前端完成这项工作?您的标题表明您希望在传单中这样做。你们知道传单有计算点之间距离的工具吗?()后端。是的,我知道传单上提供了一些工具,但在来回路径的情况下,我没有得到正确的距离。我曾想过使用传单gpx插件,但我没有存储在我的服务器上的gpx文件。此外,我更喜欢传单rails而不是其他插件。
def deg2rad deg
  return deg * Math::PI / 180;
end

def fetch_track_distance
 distance = 0
 start_point = self.points.first
 end_point = self.points.last

 if start_point.present? && end_point.present?
  dLat = self.deg2rad(end_point.latitude - start_point.latitude)
  dLon = self.deg2rad(end_point.longitude - start_point.longitude)

  r = Math::sin(dLat/2) *
    Math::sin(dLat/2) +
    Math::cos(self.deg2rad(start_point.latitude)) *
    Math::cos(self.deg2rad(end_point.latitude)) *
    Math::sin(dLon/2) *
    Math::sin(dLon/2);
  c = 2 * Math::atan2(Math.sqrt(r), Math::sqrt(1-r));
  mdist = RADIAN * c;
  distance = (mdist/1000) if mdist.present?
 end

 return distance.round(3)
end