2010-07-10 71 views
0

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

我想使用MySQL查询来做到这一点,最好有结果以km为单位返回。其中一点是查询中的常量,另一点是数据库中的点,例如SELECT abs(经度-39.12345)... + abs(纬度... AS距离商店WHERE shopname ='Bingo ”。

提前感谢!

+0

我觉得这个问题措辞不清。一个更好的解释会有所帮助,一个例子可能更是如此。 – 2010-07-10 23:38:25

+0

是的,也许你是对的,但ChrisW明白我想知道的。 – Marreone 2010-07-11 17:50:53

回答

4

北到南的距离与纬度的差异成比例。它大约每分钟1海里(地球的圆周大约是21600海里)。

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

+1

你是对的,给定delta_longitude的东西距离与cos(纬度)成正比。 – 2010-07-10 23:51:32

-2

使用简单的三角函数,正常的‘直线距离’的距离是与你的斜边的任一端心里有两点形成的直角三角形的斜边。

只要看看这个http://en.wikipedia.org/wiki/Hypotenuse和解决方案应该变得清晰起来。

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; 
+0

很好的计算 - 但它不是问题的答案。 – 2010-07-11 00:48:58

0

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

0

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

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