2013-08-12 2 views
1

Я работаю над приложением iOS, и я пытаюсь достичь этого, учитывая ряд местоположений (широта и долгота), я хочу автоматически увеличить масштаб своей карты и переместите мой вид карты, чтобы включить все местоположения.Автоматическое масштабирование и позиционирование с учетом количества местоположений на карте iOS

Решение, с которым я столкнулся, было задано любым количеством мест, я могу использовать цикл for, чтобы найти самую высокую и наименьшую широту и долготу. Центральная точка должна быть центральным положением между самым высоким/самым низким значением lat/lng. И используя MKCoordinateRegionMakeWithDistance, в сочетании с каркасом размещения ядра (distanceFromLocation), я могу рассчитать расстояние между самыми удаленными местоположениями и центральным местоположением и отобразить этот регион на карте.

Мой вопрос в том, есть ли какие-либо лучшие решения или рамки, которые могут справиться с этим? и есть ли какой-нибудь пример, который я могу найти, который может это достичь?

ответ

2

Если вы знаете наивысшие и низкие значения широты и долготы, вы могли бы по крайней мере немного упростите ситуацию, используя MKCoordinateRegionMake вместо MKCoordinateRegionMakeWithDistance. Возможно, что-то вроде этого:

CLLocationDegrees highestLatitude; 
CLLocationDegrees lowestLatitude; 
CLLocationDegrees highestLongitude; 
CLLocationDegrees lowestLongitude; 

// Calculate the above variable values... 

// These calculations would have to be more complex if you need to handle the fact that longitude values wrap 
CLLocationDegrees latitudeDelta = highestLatitude - lowestLatitude; 
CLLocationDegrees longitudeDelta = highestLongitude - lowestLongitude; 
CLLocationCoordinate2D center = CLLocationCoordinate2DMake(lowestLatitude + (latitudeDelta/2.0f), lowestLongitude + (longitudeDelta/2.0f)); 
MKCoordinateSpan span = MKCoordinateSpanMake(latitudeDelta, longitudeDelta); 
MKCoordinateRegionMake(center, span); 
1

Вы также можете использовать setRegion, который использует longitudeSpan и latitudeSpan, это проще, потому что это позволяет избежать расчета расстояния.

Расчет мин и макс лат и долготы. затем calc latSpan и longSpan из: max - min, затем вычислить центр, используя среднюю точку (minLat + latSpan/2.0, minLon + lonSpan/2.0)

Смежные вопросы