Mam mapę, która pokazuje się poprawnie, jedyne, co chcę teraz zrobić, to ustawić poziom powiększenia podczas ładowania. Czy jest na to sposób?
Dzięki
Znalazłem rozwiązanie, które jest bardzo proste i załatwia sprawę. Użyj MKCoordinateRegionMakeWithDistance
, aby ustawić odległość w metrach w pionie i poziomie, aby uzyskać żądany zoom. A potem, oczywiście, kiedy zaktualizujesz swoją lokalizację, otrzymasz właściwe współrzędne lub możesz określić je bezpośrednio w CLLocationCoordinate2D
przy starcie, jeśli to jest to, co musisz zrobić:
CLLocationCoordinate2D noLocation;
MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(noLocation, 500, 500);
MKCoordinateRegion adjustedRegion = [self.mapView regionThatFits:viewRegion];
[self.mapView setRegion:adjustedRegion animated:YES];
self.mapView.showsUserLocation = YES;
Szybki:
let location = ...
let region = MKCoordinateRegion( center: location.coordinate, latitudinalMeters: CLLocationDistance(exactly: 5000)!, longitudinalMeters: CLLocationDistance(exactly: 5000)!)
mapView.setRegion(mapView.regionThatFits(region), animated: true)
MKCoordinateRegionMakeWithDistance
wciąż jest w Swift. To rozwiązanie działa!Biorąc pod uwagę fakt, że linie długości geograficznej są równomiernie oddalone od siebie w dowolnym punkcie mapy, istnieje bardzo prosta implementacja ustawiania centerCoordinate i zoomLevel:
źródło
- (void)setCenterCoordinate:(CLLocationCoordinate2D)centerCoordinate zoomLevel:(NSUInteger)zoomLevel animated:(BOOL)animated { MKCoordinateSpan span = MKCoordinateSpanMake(0, 360/pow(2, zoomLevel)*self.frame.size.width/256); [self setRegion:MKCoordinateRegionMake(centerCoordinate, span) animated:animated]; }
double z = log2(360 * ((self.mapView.frame.size.width/256) / self.mapView.region.span.longitudeDelta));
Nie jest wbudowany, ale widziałem / użyłem tego kodu. Pozwala to na użycie tego:
Uwaga: to nie jest mój kod, nie napisałem go, więc nie mogę tego przypisać
źródło
Możesz również powiększyć, używając MKCoordinateRegion i ustawiając jego deltę szerokości i długości geograficznej. Poniżej znajduje się krótkie odniesienie, a tutaj odniesienie do systemu iOS. Nie zrobi nic wymyślnego, ale powinien pozwolić ci ustawić powiększenie podczas rysowania mapy.
Edycja 1:
źródło
Prosta implementacja Swift, jeśli używasz gniazd.
Na podstawie odpowiedzi @ Carnal.
źródło
Szybka realizacja
źródło
IBOutlet
do swojegomap
, definiujesz go jakoMapViewWithZoom
zamiast prostegoMKMapView
. Następnie możesz po prostu ustawić poziom powiększenia za pomocąmap.zoomLevel = 1
lubmap.zoomLevel = 0.5
mapView.zoomLevel -= 2
W przypadku Swift 3 jest dość szybko do przodu:
Wystarczy zdefiniować szerokość i długość metrów,
<CLLocationDistance>
a mapView dopasuje poziom powiększenia do Twoich wartości.źródło
Na podstawie świetnej odpowiedzi @ AdilSoomro . Wymyśliłem to:
źródło
Mam nadzieję, że poniższy fragment kodu Ci pomoże.
Możesz wybrać dowolną wartość zamiast 0,5, aby zmniejszyć lub zwiększyć poziom powiększenia. Użyłem tych metod po kliknięciu dwóch przycisków.
źródło
Odpowiedź Swift 2.0 wykorzystująca NSUserDefaults do zapisywania i przywracania powiększenia i pozycji mapy.
Funkcja zapisywania pozycji mapy i powiększania:
Uruchom funkcję za każdym razem, gdy mapa jest przenoszona:
Funkcja zapisywania powiększenia i pozycji mapy:
Dodaj to do widokuDidLoad:
źródło
Wiem, że to spóźniona odpowiedź, ale po prostu chciałem sam rozwiązać problem ustawiania poziomu powiększenia. Odpowiedź goldmine jest świetna, ale okazało się, że nie działa wystarczająco dobrze w mojej aplikacji.
Przy bliższym przyjrzeniu się Goldmine stwierdza, że „linie długości geograficznej są równomiernie oddalone od siebie w każdym punkcie mapy”. To nieprawda, w rzeczywistości są to linie szerokości geograficznej rozmieszczone w równych odstępach od -90 (biegun południowy) do +90 (biegun północny). Linie długości geograficznej są rozmieszczone w najszerszych odstępach na równiku, zbiegając się do punktu na biegunach.
Wdrożenie, które przyjąłem, polega zatem na zastosowaniu obliczenia szerokości geograficznej w następujący sposób:
Mam nadzieję, że to pomoże na tak późnym etapie.
źródło
Szybki:
locValue to Twoje współrzędne.
źródło
Tutaj umieściłem moją odpowiedź i działa na szybkie 4.2 .
MKMapWyświetl centrum i powiększ
źródło
Na podstawie odpowiedzi quentinadama
Swift 5.1
źródło
MKMapView
rozszerzenie oparte na tej odpowiedzi (+ dokładność powiększenia zmiennoprzecinkowego):źródło