これは、上記の溶液に「improvment」です。標高情報が追加されます。リンゴが返す標高はメートルであるようです。飛行または軌道には適していませんが、他の人のすぐ上の15階、近くの山などに誰かがいる場合はうまくいきます。広範囲にテストされていません。それはあなたが20km以上離れて何かのために高度を気にしないと仮定します。その後、相手に近づくにつれて高度補正を行います。したがって、互いに20m離れた2人の人にとって、100m高いと、約102mの距離になります。最後に、私は戻ってくるためにkmに切り替える。また、元のコードでは、ナンバーが見つかりました。
#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
}
質問を解析できません。句読点を追加できますか? – mik01aj