2017-09-19 2 views
0

Dans mon projet j'utilise LocationSearchTable/MKLocalSearch. Lorsqu'un utilisateur clique sur un élément, ma méthode d'annotation add est appelée dans MapViewController:Annotation.coordinate ne correspond pas coordonnée.latitude et coordonnée.longitude

func dropPinZoomIn(placemark: MKPlacemark) { 

    // cache the pin 
    selectedPin = placemark 

    // create the pin 
    let annotation = MKPointAnnotation() 
    annotation.coordinate = placemark.coordinate 
    annotation.title = placemark.name 
    if let streetNumber = placemark.subThoroughfare, 
     let city = placemark.locality, 
     let state = placemark.administrativeArea { 
     annotation.subtitle = "\(streetNumber) \(city) \(state)" 
    } 

    // add the pin the the mapView 
    mapView.addAnnotation(annotation) 
    let span = MKCoordinateSpanMake(0.01, 0.01) 
    let region = MKCoordinateRegionMake(annotation.coordinate, span) 
    mapView.setRegion(region, animated: true) 

    print(placemark.coordinate) 
    print(placemark.coordinate.latitude) 
    print(placemark.coordinate.longitude) 

A la fin, quand j'imprimer les coordonnées, je reçois une version plus longue alors que lorsque j'imprime séparément la latitude et la longitude, il arrondit le nombre près de la fin. Cela me cause des problèmes plus tard quand j'ai besoin de comparer les coordonnées. Comment puis-je empêcher cet arrondissement? À titre d'exemple, voici mes résultats:

CLLocationCoordinate2D (latitude: 37,331413259110334, longitude: -122,03048408031462) CLLocationCoordinate2D (latitude:.. 37,3314132591103, longitude: -122,030484080315)

Répondre

1

Essayez le code suivant pour éviter arrondit le nombre.

print(coordinate) 
print(coordinate.latitude.debugDescription) 
print(coordinate.longitude.debugDescription) 

Résultat:

CLLocationCoordinate2D (latitude: -33,499989999999997, longitude: 150,255) -33,499989999999997 150,255

Note:

T Le type de coordonnées.latitude/coordonnée.longitude est CLLocationDegrees. Ce type est un alias pour Double. Comparer les valeurs Double ou Float avec == ne donnera pas le résultat escompté dans la plupart des langages de programmation, ce qui signifie que les nombres que vous pensez être égaux sont en fait légèrement différents. Calculez plutôt la différence absolue et gérez les nombres égaux si la différence est inférieure à un certain seuil. Voir Compare double to zero using epsilon pour plus d'explications.

+0

Cela a fonctionné! C'est tout ce dont j'avais besoin pour ajouter debugDescription à ma latitude et longitude et tout le reste se mettra en place plus tard. Merci Kosuke :) – zachenn