作者zonble (zonble)
看板MacDev
标题Re: [问题] 座标位置
时间Wed Oct 5 14:05:46 2011
※ 引述《SlimeEditor (菜瓜布)》之铭言:
: ※ 引述《starkite (可乐果)》之铭言:
: 假设a点 经纬度是 lat_a, lng_a
: b点 经纬度是 lat_b, lng_b
: 彼此间的距离d = sqrt(pow(lat_a-lat_b, 2)+pow(lng_a-lng_b, 2))
: 理论上用d做排序来塞array应该就可了吧?
地球是圆的,所以这样算会有问题。
简单贴一下之前用过的 code…
static CGFloat degreeToRadian(CGFloat degree)
{
return (CGFloat)(degree * M_PI / 180.0);
}
static CGFloat distanceKM(CGFloat lat1, CGFloat lon1, CGFloat lat2, CGFloat lon2)
{
CGFloat theta = lon1 - lon2;
CGFloat dist = sin(degreeToRadian(lat1)) * sin(degreeToRadian(lat2)) + cos(degreeToRadian(lat1)) * cos(degreeToRadian(lat2)) * cos(degreeToRadian(theta));
dist = acos(dist) * 6373.0;
return dist;
}
static CGFloat distanceMile(CGFloat lat1, CGFloat lon1, CGFloat lat2, CGFloat lon2)
{
CGFloat theta = lon1 - lon2;
CGFloat dist = sin(degreeToRadian(lat1)) * sin(degreeToRadian(lat2)) + cos(degreeToRadian(lat1)) * cos(degreeToRadian(lat2)) * cos(degreeToRadian(theta));
dist = acos(dist) * 3960.0;
}
--
zonble.net
cocoa.zonble.net
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 203.69.67.252
1F:→ SlimeEditor:最後*3960.0是指? 我本来以为是地球半径 0_0a 10/05 14:31
2F:→ SlimeEditor:阿 我知道了 我没看到Mile ~ 10/05 14:33
3F:→ starkite:还要考虑地球是圆的@@ 快研究去 谢谢大大们!! 10/06 09:29