Ошибка вычисления прямоугольника пространственной ограничительной рамки: неверная широта

Могут ли мне помочь какие-нибудь специалисты по тригам или GPS? Я пытаюсь создать вычисление гео-пространственного ограничивающего прямоугольника (прямоугольника), возвращая максимальную широту и долготу, используя следующий метод, который я получил. Я называю метод один раз для каждого из подшипников: север, юг, восток и запад. С этими четырьмя значениями я собираюсь запросить в моем Базовом хранилище данных все объекты в блоке.

  -(CLLocation*) offsetLocation:(CLLocation*)startLocation:(double)offsetMeters:(double)bearing {


    double EARTH_MEAN_RADIUS_METERS = 6372796.99;
    double newLatitude = asin( sin(startLocation.coordinate.latitude) * cos(offsetMeters/EARTH_MEAN_RADIUS_METERS) + cos(startLocation.coordinate.latitude) * sin(offsetMeters/EARTH_MEAN_RADIUS_METERS) * cos(bearing) );
    double newLongitude = startLocation.coordinate.longitude + atan2( sin(bearing) * sin(offsetMeters/EARTH_MEAN_RADIUS_METERS) * cos(startLocation.coordinate.latitude), cos(offsetMeters/EARTH_MEAN_RADIUS_METERS) - sin(startLocation.coordinate.latitude) * sin(newLatitude));


    CLLocation *tempLocation = [[CLLocation alloc] initWithLatitude:newLatitude longitude:newLongitude];
    [tempLocation autorelease];
    return tempLocation;
}

Проблема в том, что вычисление для смещения newLatitude определенно неверно. Учитывая следующее:

startLocation: широта 37.331688999999997, долгота -122.030731 смещениеМетры: 1000 азимут: 0 (север)

newLatitude возвращает -0,36726592610659514 (неверно).

Какие-либо предложения? Я закодировал эту конкретную формулу до сих пор, и эта поставила меня в тупик. Я также пытался перевести другую формулу из PHP безрезультатно. Я полагаю, что выше, это именно то, что мне нужно, если это можно настроить.

Спасибо, б.дот

Ответы на вопрос(3)

Ваш ответ на вопрос