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