Как рассчитать географию ограничительной рамки в iOS?
Я хотел бы сделать расчет географической ограничительной рамки в iOS. Это может быть приблизительно.
Входные параметры:
Текущее местоположение (пример: 41.145495, −73.994901)
Радиус в метрах: (пример: 2000)
Требуемый выход:
MinLong: (пример: 41.9995495)
MinLat: (пример: -74.004901)
MaxLong: (пример: 41.0005495)
MaxLat: (пример: −73.004901)
Требование: нет сетевого вызова
Есть идеи? Mapkit / CoreLocation, кажется, не предлагают такого рода вещи?
Любой другой Geographic SDK, который я мог бы использовать?
Спасибо
2 ответа
Я думаю, что вы можете использовать стандартные функции MapKit: MKCoordinateRegionMakeWithDistance, это вернет MKCoordinateRegion, который на самом деле является просто центральной точкой (широта, долгота) и пролеты в широтном и продольном направлении в градусах. Добавьте / вычтите половину диапазона из широты и долготы соответственно, и у вас есть значения, которые вы ищете.
CLLocationCoordinate2D centerCoord = CLLocationCoordinate2DMake(41.145495, −73.994901);
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(centerCoord, 2000, 2000);
double latMin = region.center.latitude - .5 * startRegion.span.latitudeDelta;
double latMax = region.center.latitude + .5 * startRegion.span.latitudeDelta;
double lonMin = region.center.longitude - .5 * startRegion.span.longitudeDelta;
double lonMax = region.center.longitude + .5 * startRegion.span.longitudeDelta;
Между прочим: это только репрезентативно для долготы для маленьких промежутков, порядка нескольких километров. Процитировать Apple:
latitudeDelta
Величина расстояния с севера на юг (в градусах), используемая для пролета. В отличие от продольных расстояний, которые варьируются в зависимости от широты, один градус широты всегда составляет приблизительно 111 километров (69 миль).longitudeDelta
Величина расстояния восток-запад (измеряется в градусах), используемая для пролета. Количество километров, охватываемых долготным диапазоном, зависит от текущей широты. Например, один градус долготы охватывает расстояние около 111 километров (69 миль) на экваторе, но сокращается до 0 километров на полюсах.
Я знаю, что немного опоздал на вечеринку, но я только построил класс GTBoundingBox
это может (или не может) помочь: