MKMapView zoom i Region

głosy
83

Znam za pomocą Google Maps Javascript API. Ostatnio zacząłem używać ramy MapKit dla projektu iPhone, ale mam twardy czas, aby dowiedzieć się powiększanie i wyznaczając obszar na mapie.

W Google Maps API Ja używałem całkowitych poziomów powiększenia jak 8, 9, 10 wraz z prostą funkcją setzoom (). Jedyna metoda równoważna widzę w ramach MapKit jest setRegion: animowane. Jak rozumiem, muszę ustawić szerokości i długości geograficznej wartości „delta” w regionie rozpiętości, aby określić stopień powiększenia. Ale ja naprawdę nie mam pojęcia, co te wartości reprezentują (I przeczytać dokumentację).

Kiedy używać delegata MKMapView i śladowe wartości rozpiętości w regionDidChange wyników metody delegat nie wydaje się korelować ze sobą. Jest ok, kiedy pomniejszyć i zobaczyć rozpiętość wartości delta rosną w sposób określony w dokumentacji. Ale nagle przeciągnąć mapę bez powiększania i wartości delta stać 0.0.

Może ktoś proszę wyjaśnić co jest punktem odniesienia dla tych rozpiętości i delta? Czy jest jakiś algorytm do konwersji poziomu powiększenia liczby całkowitej (jak 9) do tych wartości delta?

Jako pytanie premiowej jest jakiś sposób, aby określić minimalny, maksymalny poziom powiększenia na MKMapView :)

Dzięki

Utwórz 22/07/2009 o 17:16
źródło użytkownik
W innych językach...                            


5 odpowiedzi

głosy
133

Przede wszystkim MKMapView nie używa / mają predefiniowany zestaw poziomach zbliżenia, takich jak Mapy Google robi.

Zamiast tego obszar widoczny MKMapView opisane jest MKCoordinateRegion , który składa się z dwóch wartości:

  1. środek (punkt środkowy region) i
  2. Okres (rozmiar widzialnym obszarze wokół środka).

Punkt środkowy powinno być oczywiste (to punkt środkowy region).

Jednak, zakres (co jest MKCoordinateSpan ) składa się z:

  1. latitudeDelta (odległość pionowa reprezentuje region) i
  2. longitudeDelta (odległość pozioma reprezentuje regionu).

Krótki przykład. Oto MKCoordinateRegion zabawki:

  1. Centrum:
    • szerokość: 0
    • Długość: 0
  2. przęsło:
    • latitudeDelta: 8
    • longitudeDelta: 6

Region może być opisana za pomocą jej wartości minimalne i maksymalne współrzędne w następujący sposób:

  1. współrzędnych min (dolny punkt lewy)
    • szerokość: -4
    • Długość: -3
  2. maks współrzędnych (górny punkt prawy)
    • szerokość: 4
    • Długość: 3

Tak więc, można określić poziom powiększenia wokół punktu centralnego za pomocą odpowiedniej wielkości MKCoordinateSpan. Jako przybliżenie numerycznych poziomach powiększenia Google, można odwrócić inżynier rozmiary rozpiętości, które Google wykorzystuje do danego poziomu powiększenia i stworzyć rozpiętości, odpowiednio. (Google opisuje ich zdaniem regionów w taki sam sposób, MKMapView robi, jako centrum + przęsła, więc można wyciągnąć te wartości z Google Maps).

Jeśli chodzi o ograniczenie obszaru, można grać w / tej metody delegata:

mapView:regionWillChangeAnimated

na przykład poprzez zmianę rozmiaru region z powrotem do swoich dopuszczalnych poziomów powiększenia. (Niby jak, jak widoki tabeli pozwoli przejść obok krawędzi, ale wtedy gumka z powrotem na miejsce). Jednak może się wahać, ponieważ nie zostały wykorzystane do tego celu.

btw, istnieją konkretne poprawki / ulepszenia w OS 3.1 do aspektów MapKit że dawali mi kłopotów w 3,0.

Odpowiedział 22/07/2009 o 20:36
źródło użytkownik

głosy
117

Jeśli wolisz korzystać wyraźnych poziomów powiększenia zamiast definiowania MKCoordinateSpan pisałem kategorię, która dodaje wsparcie dla określenia poziomu powiększenia danego MKMapView. Kod można znaleźć tutaj .

Odpowiedział 23/01/2010 o 03:49
źródło użytkownik

głosy
4

Przęsło jest stopni szerokości geograficznej i szerokości geograficznej. Jest to metoda konstruowania MKCoordinateRegion konstrukcjom, które trwa dystans, zamiast. Może okazać się, że używasz MKCoordinateRegionMakeWithDistance określić zakres, a następnie po sprawdzeniu go w regionDidChange, widzisz na długość / szerokość geograficzna przęsła, czyli jak to jest przechowywane w struct MKCoordinateRegion.

O ile mi wiadomo, poziomy całkowitą powiększenia nie są dostępne lub w ogóle przydatna podczas pracy z MKMapKit. Ja osobiście wolę za pomocą danych liczbowych rozpiętości, jego bardziej elastyczne.

Nie można określić min, max zoom, a ja nie wiem o sposób włamać go. MKMapKit jest rzeczywiście dość słaby teraz, jestem bardzo rozczarowany brakiem cech.

Odpowiedział 22/07/2009 o 19:09
źródło użytkownik

głosy
3

Szybkie porównanie poziomów powiększenia dla lokalizacji za pomocą maps.google.com sprawdzając łącza ciągu kwerendy wynika, że ​​dx i dy wzrost wartości zakresowe przez współczynnik 2:

 (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
  ...
Odpowiedział 11/12/2009 o 01:30
źródło użytkownik

głosy
2

kategoria Brant w sprawie MKMapView działa dobrze. Okazuje się jednak, że nie został zaktualizowany do wsparcia nowszych urządzeniach z ekranami Retina przy obliczaniu mapSizeInPixels.

To może być ustalona poprzez zastąpienie tej linii:

CGSize mapSizeInPixels = mapView.bounds.size;

Z tej linii:

CGSize mapSizeInPixels = CGSizeMake(mapView.bounds.size.width * [UIScreen mainScreen].scale, mapView.bounds.size.height * [UIScreen mainScreen].scale);
Odpowiedział 19/06/2014 o 16:43
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more