Ich habe eine Karte, die korrekt angezeigt wird. Jetzt möchte ich nur noch die Zoomstufe beim Laden einstellen. Gibt es eine Möglichkeit, dies zu tun?
Vielen Dank
Ich habe eine Lösung gefunden, die sehr einfach ist und den Trick macht. Verwenden Sie diese MKCoordinateRegionMakeWithDistance
Option, um den Abstand in Metern vertikal und horizontal einzustellen und den gewünschten Zoom zu erzielen. Und wenn Sie dann Ihren Standort aktualisieren, erhalten Sie natürlich die richtigen Koordinaten, oder Sie können sie direkt CLLocationCoordinate2D
beim Start angeben , wenn Sie dies tun müssen:
CLLocationCoordinate2D noLocation;
MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(noLocation, 500, 500);
MKCoordinateRegion adjustedRegion = [self.mapView regionThatFits:viewRegion];
[self.mapView setRegion:adjustedRegion animated:YES];
self.mapView.showsUserLocation = YES;
Schnell:
let location = ...
let region = MKCoordinateRegion( center: location.coordinate, latitudinalMeters: CLLocationDistance(exactly: 5000)!, longitudinalMeters: CLLocationDistance(exactly: 5000)!)
mapView.setRegion(mapView.regionThatFits(region), animated: true)
MKCoordinateRegionMakeWithDistance
es noch in Swift. Diese Lösung funktioniert!Basierend auf der Tatsache, dass Längengradlinien an jedem Punkt der Karte gleichmäßig voneinander beabstandet sind, gibt es eine sehr einfache Implementierung, um centerCoordinate und zoomLevel festzulegen:
quelle
- (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));
Es ist nicht eingebaut, aber ich habe diesen Code gesehen / verwendet . Dies ermöglicht Ihnen Folgendes:
Hinweis: Dies ist nicht mein Code, ich habe ihn nicht geschrieben und kann ihn daher nicht gutschreiben
quelle
Sie können auch zoomen, indem Sie MKCoordinateRegion verwenden und das Delta für Breite, Breite und Länge einstellen. Unten finden Sie eine Kurzreferenz und hier die iOS-Referenz. Es macht nichts Besonderes, sollte es Ihnen aber ermöglichen, den Zoom beim Zeichnen der Karte einzustellen.
Bearbeiten 1:
quelle
Eine einfache Swift-Implementierung, wenn Sie Steckdosen verwenden.
Basierend auf der Antwort von @ Carnal.
quelle
Schnelle Implementierung
quelle
IBOutlet
zu Ihrer erstellenmap
, definieren Sie es als eineMapViewWithZoom
anstelle einer einfachenMKMapView
. Dann können Sie einfach diemap.zoomLevel = 1
map.zoomLevel = 0.5
mapView.zoomLevel -= 2
Für Swift 3 ist es ziemlich schnell vorwärts:
Definieren Sie einfach die Lat-, Long-Meter
<CLLocationDistance>
und die mapView passt die Zoomstufe an Ihre Werte an.quelle
Basierend auf der großartigen Antwort von @ AdilSoomro . Ich habe mir Folgendes ausgedacht:
quelle
Ich hoffe, das folgende Codefragment würde Ihnen helfen.
Sie können einen beliebigen Wert anstelle von 0,5 wählen, um die Zoomstufe zu verringern oder zu erhöhen. Ich habe diese Methoden beim Klicken auf zwei Schaltflächen verwendet.
quelle
Eine Swift 2.0-Antwort mit NSUserDefaults zum Speichern und Wiederherstellen des Zooms und der Position der Karte.
Funktion zum Speichern der Kartenposition und zum Zoomen:
Führen Sie die Funktion jedes Mal aus, wenn die Karte verschoben wird:
Funktion zum Speichern des Kartenzooms und der Position:
Fügen Sie dies zu viewDidLoad hinzu:
quelle
Ich weiß, dass dies eine späte Antwort ist, aber ich wollte nur das Problem der Einstellung der Zoomstufe selbst ansprechen. Die Antwort von Goldmine ist großartig, aber ich fand, dass sie in meiner Bewerbung nicht gut genug funktioniert.
Bei näherer Betrachtung stellt Goldmine fest, dass "Längengrade an jedem Punkt der Karte gleich weit voneinander entfernt sind". Dies ist nicht wahr, es sind tatsächlich Breitengradlinien, die gleichmäßig von -90 (Südpol) bis +90 (Nordpol) beabstandet sind. Längengradlinien sind am Äquator am breitesten beabstandet und konvergieren zu einem Punkt an den Polen.
Die Implementierung, die ich übernommen habe, besteht daher darin, die Breitengradberechnung wie folgt zu verwenden:
Hoffe, es hilft in diesem späten Stadium.
quelle
Schnell:
locValue ist Ihre Koordinate.
quelle
Hier stelle ich meine Antwort und ihre Arbeit für schnelle 4.2 .
MKMapView zentrieren und vergrößern
quelle
Basierend auf der Antwort von Quentinadam
Swift 5.1
quelle
MKMapView
Erweiterung basierend auf dieser Antwort (+ Genauigkeit der Gleitkommazoomstufe):quelle