两点之间的距离。东西+南北

时间:2010-07-10 22:59:17

标签: mysql geolocation distance

我需要计算两点之间的距离,但不是常规方式。我需要知道'东西距离'+'从北到南的距离'。我想这比普通的“乌鸦飞行计算”更简单,但我仍然无法弄清楚如何去做。

我想使用MySQL查询执行此操作,并且最好以km为单位返回结果。其中一个点将是查询中的常量,另一个点是来自DB的点,所以类似SELECT abs(经度-39.12345)... + abs(纬度... AS距离商店WHERE shopname ='Bingo '。

提前致谢!

5 个答案:

答案 0 :(得分:4)

北 - 南距离与纬度差异成正比。这是每分钟大约1海里的弧度(地球的周长约为21600海里)。

东西距离与经度的差异成正比,但它也随纬度变化(例如在极点处为零):我认为它与纬度的余弦成正比。

答案 1 :(得分:0)

您可以使用Great-Circle Distance确定任意两个地理编码点之间的距离。这是关于这个主题的另一个decent article

以下是C#中的示例,其中显示了如何执行此操作:

var earth_radius = Constants.EarthRadius; // 6377.8 km

var dLat = ToRadians(fromLatitude - toLatitude);
var dLon = ToRadians(fromLongitude - toLongitude);

var a = 
    Math.Sin(dLat / 2) * 
    Math.Sin(dLat / 2) +
    Math.Cos(ToRadians(fromLatitude)) *
    Math.Cos(ToRadians(toLatitude)) *
    Math.Sin(dLon / 2) * 
    Math.Sin(dLon / 2);

var c = 2 * Math.Asin(Math.Min(1, Math.Sqrt(a)));

var distanceInKilometers = earth_radius * c;

答案 2 :(得分:0)

您的答案取决于答案所需的准确性。如果您不需要比球形地球模型更准确的答案,您可以使用类似于汤姆船长给出的解决方案。如果你需要更高的精确度,你需要假设地球是一个扁球体。有关几种解决方案,请参阅http://en.wikipedia.org/wiki/Vincenty%27s_formulae

答案 3 :(得分:0)

不同纬度的两点之间的东西差异是经度的不同数字,但是将其转换为英里是有问题的,因为每度的里程根据纬度而变化。例如,洛杉矶和纽约市的经度相差44.3度,但将其转换为英里将导致洛杉矶纬度比纽约纬度更大,因为纬度线在赤道最长,在极点处缩小到零。

合理的约定是将E-W距离计算为在两个纬度计算的两个距离的平均值。

答案 4 :(得分:-2)

使用简单的trig。正常的“乌鸦飞行”距离是直角三角形的斜边,形成于斜边两端的两个点。

看看这个http://en.wikipedia.org/wiki/Hypotenuse,解决方案应该变得清晰。