纬度/经度距离计算

5
关于经纬度计算的一个问题。
我想取一个值,例如纬度:55.123456,经度:-6.123456,并计算出离该点任意距离的四个点。
如给定正方形,我希望计算出左右两侧的纬度值。因此,红线距起点1.5公里,同样地,对于经度,蓝线距起点1.5公里,输出将是4个点,所有距离以公里为单位。
简而言之:纬度+Y=距离X公里的纬度值
目前正在使用iPhone进行非常粗略的数据库计算。
编辑:澄清一下,距离很短,所以曲率(和准确性)不是问题。

1
你知道地球更像是个球体,而不是平面,对吧? - Matt Ball
继续Matt的评论,我认为你需要的是大圆距离 - rickerbh
@Matt,非常了解这个领域:D 距离非常短(小于3公里),这不应该成为问题。我只是想添加一个浮点值到现有的点上,以便给我一个距离设定距离的纬度或经度点。 - Colin
3个回答

6
在OBJ-C中,这应该是一个不错的解决方案:
float r_earth = 6378 * 1000; //Work in meters for everything
float dy = 3000; //A point 3km away
float dx = 3000; //A point 3km away
float new_latitude  = latitude  + (dy / r_earth) * (180 / M_PI);
float new_longitude = longitude + (dx / r_earth) * (180 / M_PI) / cos(latitude * 180/M_PI);

已经更正,但这只是一个例子,因此距离是任意的。 - Colin

3

对于相对较小距离(小于100公里)的粗略计算,您可以假设每纬度1度有111,111米,每经度1度有111,111*cos(纬度)米。这是因为一米被定义为巴黎子午线的1/40,000,000部分。

否则,您应该使用大圆距离,如评论中所述。对于高精度计算,您还需要考虑到地球是一个略微扁球体而不是一个球体。


谢谢begemotv2718。但这与浮点值有什么关系呢?我不想转换为度、分和秒,只想转换回浮点数。 - Colin
抱歉,无法理解您的意思。点向北3公里的纬度将是LatitudeInitial + (3km / 111.111km) 的浮点数。点向东3公里的经度将是LongitudeInitial + (3km / (111.111km * cos(LatitudeInitial)))。对于初始点55.123456 Long -6.123456,这将是55.123456 + 3/111.111 = 55.150456,而经度为-6.123456 + 3/(111.111*cos(55.123456)) = -6.123456 + 0.0472185 = -6.0762375。 - begemotv2718

1
// parameter: offset in meters
float offsetM = 1500; // 1.5km

// degrees / earth circumfence
float degreesPerMeter = 360.0 / 40 000 000;
float toRad = 180 / M_PI;

float latOffsetMeters = offsetM * degreesPerMeter;
float lonOffsetMeters = offsetM * degreesPerMeter * cos (centerLatitude * toRad);

现在只需将+/- latOffsetMeters和+/- lonOffsetMeters添加到您的centerLatitude/centerLongitude即可。
该公式适用于百公里范围内。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接