Montag, Juni 1, 2020

iOS MKMapView setCenterCoordinate nicht Ehren die exakte Koordinate

Ich habe den folgenden code, um center auf den aktuellen Standort des Benutzers, wenn die locate-Taste gedrückt wird:

- (void)locate
{
    if (self.curLocation) {
        [self.googleMapView setCenterCoordinate:self.curLocation.coordinate animated:YES];
        NSLog(@"setting center (%f,%f), but got (%f,%f)", self.curLocation.coordinate.latitude, self.curLocation.coordinate.longitude, self.googleMapView.centerCoordinate.latitude, self.googleMapView.centerCoordinate.longitude);
    }
}

Den Ausgang des NSLog ist “ – Einstellung center (37.785834,-122.406417), bekam aber (37.785826,-122.406406)“

Was bedeutet, dass setCenterCoordinate zog eine Ungefähre koordinieren, statt angewiesen. Dies ist sehr unpraktisch, weil wenn ich die Umsetzung der zoom-Stufe, Zoom out, an der gleichen Stelle, dann Zoomen zurück (da setRegion änderungen der center-Koordinate wie gut) wird sich bewegen, Weg vom alten Standort. Dies ist kontraintuitiv, und die Android-Plattform-API nicht zeigen dieses Fehlverhalten auf.

Könnte mir jemand erklären, warum setCenterCoordinate nicht auf die exakte Koordinate, und wenn möglich, die Art und Weise, um sicherzustellen, Zoom out und in haben das gleiche Zentrum. Danke.

  • ändern Sie den Rahmen der MKMapView?
  • Ich denke nicht so… ich zog alle anderen mapview-code, und dies ist die einzige Sache-Links.
InformationsquelleAutor Eric Chen | 2012-04-21

2 Kommentare

  1. 4

    Speichern Sie Ihre original – „gut“ center-Koordinate in einem ivar, dann verwenden Sie, dass jedes mal, wenn Sie zoom in. So sollte es immer gehen zurück zu, wo es begann. Ich nehme an, du bist Zoomen mit einer Taste oder durch aufrufen einer Methode.

    Zentrum koordinieren, scheint nicht zuverlässig zu sein. Es wird zuverlässiger, da Sie die Ansicht vergrößern, aber es scheint nie eingestellt werden, um genau das, was Sie Fragen. Auch über den center-Koordinate zurückgegeben, die von regionThatFits: nicht geben eine genaue übereinstimmung, die es sollte. Sie können -mapView:regionDidChangeAnimated: Experimentieren Sie mit dieser:

    - (void)viewDidAppear:(BOOL)animated
    {
        MKCoordinateSpan span = MKCoordinateSpanMake(0.0001f, 0.0001f);
        CLLocationCoordinate2D coordinate = {35.67106,139.764909};
        MKCoordinateRegion region = {coordinate, span};
    
        MKCoordinateRegion regionThatFits = [self.mapView regionThatFits:region];
        NSLog(@"Fit Region %f %f", regionThatFits.center.latitude, regionThatFits.center.longitude);
    
        [self.mapView setRegion:regionThatFits animated:YES];
    // [self.mapView setRegion:region animated:YES];
    // [self.mapView setCenterCoordinate:coordinate animated:NO];
    }
    
    - (void)mapView:(MKMapView *)myMapView regionDidChangeAnimated:(BOOL)animated
    {
        NSLog(@"Center: %f %f", myMapView.region.center.latitude,myMapView.region.center.longitude);
    }
    • Also sollte ich sparen (37.785826,-122.406406), die Koordinate mapview tatsächlich Zentren auf, statt meine Fragen zu koordinieren, um sicherzustellen, gehen Sie zurück zu, wo es begann?
    • Ja, speichern, dass so etwas wie CLLocationCoordinate2D centerCoordinate und jedes mal, wenn die Karte gezoomt wird, legen Sie es als das Zentrum koordinieren (kombiniert mit dem, was region Sie brauchen, um den zoom der Karte).
  2. 0

    Den letzten parameter in setCenterCoordinate ist „animiert“. Sie sind Einstellung, JA so ist es vielleicht eine Sekunde oder so zu bekommen, an die richtige Stelle. Seit das passiert in einem anderen thread die NSLog-Linie passiert wird, bevor die Karte erreicht die Ziel-Koordinaten. Entweder warten Sie einen Augenblick oder zwei vor dem Lesen der center, oder aktivieren Sie Ihren NSLog-Anweisung über die Taste auf dem Bildschirm, so können Sie sicher sein, dass Sie es tun, nachdem die Karte nicht mehr bewegt.

    • Habe versucht, Ihren Vorschlag. Gibt mir immer noch (37.785826,-122.406406).
    • Ich habe, sieht diese zwei Koordinaten und Sie scheinen weniger als 2m auseinander. Angesichts der Genauigkeit der GPS-integrierten in das Mobiltelefon finden Sie möglicherweise, dass die Bewegung unerheblich ist Ihre app.
    • Hi Craig, das GPS ist irrelevant für mein problem hier. Ich bin ausdrücklich aufgefordert, das Zentrum zu einem gewissen Punkt (37.785834,-122.406417), aber nicht geehrt. Der Grund, warum ich muss Kampf-dieses Verhalten ist, denn wenn setCenterCoordinate drifts, Zoom out (setRegion) auf Straße X, später dann Zoomen zurück in den landen, die mich auf eine andere Straße Y, obwohl ich es nie geändert, das Zentrum zu koordinieren.

Kostenlose Online-Tests