Почему MKMetersBetweenMapPoints дает мне разные результаты при обмене параметрами - PullRequest
11 голосов
/ 11 января 2012

Я на самом деле пытаюсь вычислить расстояние между максимальной и минимальной точкой в ​​координатах x и y для MKMapPoints.

Для этого я делаю это (максимальное расстояние по оси Y):

MKMapPoint test1, test2;
double dist;
test1.x = 0.0;
test1.y = 0.0;
test2.x = 0.0;
test2.y = MKMapSizeWorld.height;
dist = MKMetersBetweenMapPoints(test2, test1);
NSLog(@"Distance %f",dist);

Я получаю 18997878.291251 в консоли. Но когда я изменяю расчет расстояния на:

dist = MKMetersBetweenMapPoints(test1, test2);

Я получаю 18873651.664238, поэтому я не понимаю, в чем разница. Я даже не знаю, правильно ли я поступаю, чтобы получить максимальные значения расстояния по осям x и y.

Любая помощь будет оценена.

1 Ответ

4 голосов
/ 27 января 2012

Я думаю, это проблема алгоритма. Некоторое приближение, которое останавливается при достижении определенной точности. Вот почему там нет коммутации. Вы можете попробовать пример кода, чтобы получить расстояние между двумя точками на карте, не используя MKMapPoints:

- (float) distanceToLPU {

        useDelegate

        CLLocationCoordinate2D pointACoordinate = appDelegate.usrLoc;
        CLLocation *pointALocation = [[CLLocation alloc] initWithLatitude:pointACoordinate.latitude longitude:pointACoordinate.longitude];

        CLLocationCoordinate2D pointBCoordinate;
        pointBCoordinate.latitude = [self.latitude doubleValue];
        pointBCoordinate.longitude = [self.longitude doubleValue];

        CLLocation *pointBLocation = [[CLLocation alloc] initWithLatitude:pointBCoordinate.latitude longitude:pointBCoordinate.longitude];  

        float distanceMeters = [pointALocation distanceFromLocation:pointBLocation];  

        [pointALocation release];
        [pointBLocation release];  

        NSString *dist = [NSString stringWithFormat:@" (%.0f м)", distanceMeters];
        NSLog(@"Distance to this LPU:%@", dist);

        return distanceMeters;
    }
...