我正在使用leaflet-rails gem(0.7.4),我需要计算轨道距离以防路径来回。在我们的应用程序中,我们上传GPX文件并使用传单显示点。我们通过第一个和最后一个点来计算轨道距离,但是在来回路径的情况下,该轨道距离变为零。这里points
是一个坐标数组(纬度和经度)。
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
提前致谢。