两个地理位置之间的距离
如何获得给定两个地理点(两个经度/纬度对)的精确距离(以米为单位)?
可能重复:
两个GEO位置之间的距离
计算地理位置的距离
Android计算两个位置之间的距离
如何从两个位置的经度和纬度找到距离?
如果你想从两个坐标得到距离,你可以使用这个片段:
#include <math.h>
#define DEG2RAD(degrees) (degrees * 0.01745327)
#define RADIUS_OF_EARTH 6378.1
+ (float) getDistanceFromStartCoords:(CLLocationCoordinate2D)start andEndCoords:(CLLocationCoordinate2D)end
{
float dist = acos((cos(DEG2RAD(start.latitude))*
cos(DEG2RAD(end.latitude))*
cos((-1*DEG2RAD(end.longitude))-
(-1*DEG2RAD(start.longitude)))) +
(sin(DEG2RAD(start.latitude))*
sin(DEG2RAD(end.latitude)))) *
RADIUS_OF_EARTH;
return dist;
}
iPhone上没有距离测量功能,可以给你2米的分辨率。 您可以使用核心位置的-[CLLocation distanceFromLocation: otherLocation]
方法在两个位置之间获得以米为单位的位移,但请记住:
这是对上述解决方案的“改进”。 它增加了高度信息。 看起来苹果返回的高度以米为单位。 不适合飞行或轨道或类似的情况,但如果有人在另一个人的正上方15层,附近的山上等,则可以工作。未经广泛测试。 它假定你不关心20公里以外的高度。 然后,当您靠近另一个人时,它会进行高度更正。 因此,对于距离彼此20米,但高100米的两个人,你会得到约102米的距离。 最后,我切换到公里返回。 还在原始代码中发现了一个南方虫。
#define DEG2RAD(degrees) (degrees * 0.01745329251)
#define RADIUS_OF_EARTH 6371000.0
// km
+ (double)getDistanceFromStartCoords:(CLLocationCoordinate2D)start altStart:(double)altStart andEndCoords:(CLLocationCoordinate2D)end altEnd:(double)altEnd;
{
double argument = (cos(DEG2RAD(start.latitude))*
cos(DEG2RAD(end.latitude))*
cos((-1*DEG2RAD(end.longitude))-
(-1*DEG2RAD(start.longitude)))) +
(sin(DEG2RAD(start.latitude))*
sin(DEG2RAD(end.latitude)));
double dist = 0.0;
if (argument < 1.0 && argument > -1.0) // acos will return nan for very small (0) distance
dist = acos(argument)*RADIUS_OF_EARTH;
// else
// NSLog(@"found bug, %f", acos(argument));
// Altitude hack.
// blend in an altitude correction (blend for smoothness)
// add in altitude difference
double altDiff = fabs(altStart - altEnd); // altdiff
double factor = 1.0 - dist/20000.0;
if (factor < 0.0)
factor = 0.0;
dist += sqrt(dist*dist + factor*altDiff*altDiff);
//NSLog(@"distance found, %f", dist);
return dist/1000.0; // return km
}
链接地址: http://www.djcxy.com/p/70971.html
下一篇: Calculate second point knowing the starting point and distance