Как рассчитать географию ограничительной рамки в 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 это может (или не может) помочь:

https://github.com/wpearse/ios-geotools

Другие вопросы по тегам