2017-03-23 4 views
0

Ich versuche eine MKCoordinateRegion zu erstellen, wo sich der Benutzerstandort in der Mitte befindet und eine andere Koordinate innerhalb der Region sichtbar sein sollte. Einfach gesagt, ich versuche, den Benutzerstandort zu zentrieren, während eine bestimmte Anzahl von Anmerkungen sichtbar ist. Meine Herangehensweise besteht darin, nach der Position der N-ten entferntesten Koordinate zu suchen und zu versuchen, eine Entfernung oder Koordinatenregion zu dieser Koordinate aus der Benutzerpositionskoordinate zu berechnen.Breiten-/Längenunterschied in Metern zwischen zwei Koordinaten?

var topLeftCoord = CLLocationCoordinate2D(latitude: -90.0, longitude: 180.0) 
    var bottomRightCoord = CLLocationCoordinate2D(latitude: 90.0, longitude: -180.0) 

    topLeftCoord.longitude = fmin(topLeftCoord.longitude, outerLongitude) 
    topLeftCoord.latitude = fmax(topLeftCoord.latitude, outerLatitude) 
    bottomRightCoord.longitude = fmax(bottomRightCoord.longitude, outerLongitude) 
    bottomRightCoord.latitude = fmin(bottomRightCoord.latitude, outerLatitude) 

    topLeftCoord.longitude = fmin(topLeftCoord.longitude, userCoordinates.longitude) 
    topLeftCoord.latitude = fmax(topLeftCoord.latitude, userCoordinates.latitude) 
    bottomRightCoord.longitude = fmax(bottomRightCoord.longitude, userCoordinates.longitude) 
    bottomRightCoord.latitude = fmin(bottomRightCoord.latitude, userCoordinates.latitude) 

    let regionSpan = MKCoordinateSpanMake(fabs((topLeftCoord.latitude - bottomRightCoord.latitude)), fabs((bottomRightCoord.longitude - topLeftCoord.longitude))) 
    var region = MKCoordinateRegion(center: userCoordinates, span: regionSpan) 

    region = self.mapView.regionThatFits(region) 
    self.mapView.setRegion(region, animated: true) 

Diese Art von Arbeiten, aber ich bekomme ein bisschen abgesetzt. Ich glaube, das Problem ist, dass ich hier nicht in Betracht ziehe, dass der Benutzerstandort in der Mitte sein sollte, so stellt dieser Code einfach sicher, dass der Benutzer und die Koordinaten von outerLatitude und outerLongitude innerhalb der Spanne sind. Wenn Sie jedoch auf die Benutzerkoordinate zentrieren, ist die äußere Koordinate nicht mehr sichtbar.

Ich kann nicht für das Leben von mir dies herausfinden. Ich habe auch versucht, so zu tun:

let outerLocation = CLLocation(latitude: outerLatitude, longitude: outerLongitude) 
    let userLocation = CLLocation(latitude: userCoordinates.latitude, longitude: userCoordinates.longitude) 

    let distance = userLocation.distance(from: outerLocation) 
    var region = MKCoordinateRegionMakeWithDistance(userCoordinates, distance, distance) 

    region = self.mapView.regionThatFits(region) 
    self.mapView.setRegion(region, animated: true) 

Aber ich am Ende mit dem gleichen Ergebnis, das ich wirklich nicht verstehe. Ich bekomme eine Entfernung von ca. 340m (was ziemlich vernünftig ist). Aber fragt nach latitudinalMeters und longitudinalMeters wo ich einfach die distance von Koordinate A nach B senden. Ich kann keinen Weg finden, die Komponenten in und longitudinalMeters zu teilen, ich kann einfach 1 Abstand zwischen den beiden bekommen.

Antwort

0

ich nicht einen Weg finden, können die Komponenten in latitudinalMeters und longitudinalMeters zu spalten, kann ich einfach ein Abstand zwischen den beiden

Versuchen Sie einen neuen Punkt mit dem gleichen Breitengrad wie Sie Ihren Benutzer Standort zu schaffen und die gleiche Länge wie Ihre äußere Position und verwenden Sie diese, um die "Breitengrad"

Dann erstellen Sie einen Punkt mit der gleichen Logitud wie die Benutzerposition und die gleiche Breite wie die äußere Position und verwenden Sie diese, um die Längsdistanz zu erhalten .

Hinweis: Wenn der äußere Punkt näher am Äquator liegt als der Benutzerpunkt, möchten Sie möglicherweise den Breitengrad ermitteln, indem Sie den Breitengrad des äußeren Punkts für die zwei neuen Punkte verwenden.

+0

Das Ergebnis war ziemlich das Gleiche. Ich muss hier etwas falsch machen. – ClockWise

0

Es gibt eine andere Art und Weise

var region = MKCoordinateRegionMake(userLocation!, MKCoordinateSpanMake(4 * abs(destination.latitude - userLocation!.latitude), 4 * abs(destination.longitude - userLocation!.longitude))) 
self.mapView.setRegion(region2, animated: true) 

Ich hatte mit den Multiplikatoren ein wenig zu spielen, um den Bereich richtig zu machen - aber MKCoordinateSpanMake wird auf der lat/lon Differenz arbeiten, die Sie zur Verfügung tun haben. Es sieht so aus, als müssten Sie die berechnete Winkeldifferenz mindestens verdoppeln, wenn Sie Ihre Benutzerposition zentrieren möchten, und wir sollten wahrscheinlich etwas tun, um herauszufinden, welche von lat/lon die größere ist, und diese für beide verwenden.

Dies sollte Sie in die richtige Richtung bewegen.

Verwandte Themen