Jestem zaznajomiony z korzystaniem z Google Maps Javascript API. Niedawno zacząłem używać frameworka MapKit dla projektu iPhone'a, ale mam trudności ze zrozumieniem powiększenia i ustawienia regionu na mapie.
W Google Maps API użyłem całkowitych poziomów powiększenia, takich jak 8, 9, 10 wraz z prostą funkcją setZoom (). Jedyną równoważną metodą, jaką widzę w środowisku MapKit, jest setRegion: animated. Jak rozumiem, muszę ustawić wartości „delta” szerokości i długości geograficznej zakresu obszaru, aby określić poziom powiększenia. Ale naprawdę nie mam pojęcia, co reprezentują te wartości (czytam dokumentację).
Kiedy używam delegata MKMapView i śledzę wartości zakresu w wynikach metody delegata regionDidChange, nie wydaje się, aby były ze sobą skorelowane. Jest w porządku, gdy pomniejszam i widzę, że wartości delta zakresu rosną, jak określono w dokumentacji. Ale nagle przeciągam mapę bez powiększania i wartości delta wynoszą 0,0.
Czy ktoś może wyjaśnić, jaki jest punkt odniesienia do tych rozpiętości i delty? Czy jest jakiś algorytm konwertujący całkowity poziom powiększenia (taki jak 9) na te wartości delta?
Jako pytanie dodatkowe, czy istnieje sposób, aby określić minimalny-maksymalny poziom powiększenia w MKMapView :)
Dzięki
źródło
Jeśli wolisz używać jawnych poziomów powiększenia zamiast definiować MKCoordinateSpan, napisałem kategorię, która dodaje obsługę określania poziomu powiększenia MKMapView. Kod można znaleźć tutaj .
źródło
Rozpiętość jest wyrażona w stopniach szerokości i długości geograficznej. Istnieje metoda konstruowania struktur MKCoordinateRegion, która zamiast tego przyjmuje odległość. Może się zdarzyć, że używasz MKCoordinateRegionMakeWithDistance do określenia zakresu, a następnie, gdy sprawdzisz go w regionDidChange, zobaczysz szerokość / długą rozpiętość, która jest tak przechowywana w strukturze MKCoordinateRegion.
O ile wiem, całkowite poziomy powiększenia nie są dostępne lub w ogóle przydatne podczas pracy z MKMapKit. Osobiście wolę używać liczb rozpiętości, jest bardziej elastyczny.
Nie możesz określić maksymalnego i minimalnego zoomu, a nie wiem, jak go włamać. MKMapKit jest obecnie dość słaby, jestem dość rozczarowany brakiem funkcji.
źródło
Szybkie porównanie poziomów powiększenia dla lokalizacji przy użyciu maps.google.com, sprawdzając kwerendę linków, pokazuje, że wartości dx i dy span rosną dwukrotnie:
(0.005334, 0.011834) starting span (0.010668, 0.023668) dx: x2, dy: x2 (0.021335, 0.047337) dx: x2, dy: x2 (0.042671, 0.094671) dx: x2, dy: x2 ...
źródło
Kategoria Branta w MKMapView działa dobrze. Wygląda jednak na to, że nie został zaktualizowany, aby obsługiwał nowsze urządzenia z ekranami siatkówki podczas obliczania mapSizeInPixels.
Można to naprawić, zastępując tę linię:
CGSize mapSizeInPixels = mapView.bounds.size;
W tej linii:
CGSize mapSizeInPixels = CGSizeMake(mapView.bounds.size.width * [UIScreen mainScreen].scale, mapView.bounds.size.height * [UIScreen mainScreen].scale);
źródło