Могут ли какие-нибудь специалисты по тригам или 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
offsetMeters: 1000
подшипник: 0 (север)
newLatitude возвращает -0,36726592610659514 (неверно).
Есть предложения? Я закодировал эту конкретную формулу до сих пор, и эта поставила меня в тупик. Я также пытался перевести другую формулу из PHP безрезультатно. Я полагаю, что это именно то, что мне нужно, если это можно настроить.
Спасибо,
б.дот