2017-02-27 1 views
4

Pourquoi CLGeocoder reverseGeocodeLocation renvoie un repère avec lat/long différent lorsqu'il recherche l'adresse? Contexte: En termes d'un utilisateur "appui long" sur la carte pour laisser tomber une épingle, mais mon code inverse Géocodage pour pouvoir mettre un nom de zone sur la broche, mais le code PIN est tombé dans un autre emplacement (c.-à-d. pas une bonne expérience utilisateur). Donc je cherche un moyen d'utiliser le lat/long que l'utilisateur a effectivement sélectionné, mais il suffit de chercher le nom de l'emplacement.CLGeocoder reverseGeocodeLocation renvoie un repère avec lat/long différent? (exemple de terrain de jeu joint)

Exemple: Avec le code ci-dessous je vois:

  • Entrée: -28,7780218895614, 152,978574011267
  • SORTIE: -28,864405, 153,0001191

code:

import UIKit 
import CoreLocation 
import PlaygroundSupport 

// Initial Test Co-ordinate 
let locInput = CLLocation(latitude: -28.778021889561444, longitude: 152.97857401126666) 
print("Input: \(locInput.coordinate.latitude), \(locInput.coordinate.longitude)") 

// Initiate Reverse Geocoding 
let geocoder: CLGeocoder = CLGeocoder() 
print("About to call reverse geocoding function") 
geocoder.reverseGeocodeLocation(locInput) { placemarks, error in 
    guard let placemarks = placemarks else {fatalError("No Placemarks Provided \(error?.localizedDescription)")} 
    for p in placemarks { 
     print("OUTPUT: \(p.location!.coordinate.latitude), \(p.location!.coordinate.longitude)") 
    } 
} 

// Enable Asynch 
PlaygroundPage.current.needsIndefiniteExecution = true 
+0

PS. Ou est l'approche dans ce cas pour prendre le repère renvoyé par reverseGeocodeLocation et utiliser la localité, la sublocalité, les chaînes de pays mais pas son emplacement/coordonnée, mais utiliser plutôt la coordonnée de la "presse longue"? – Greg

Répondre

1

Il y a comportement correct. Le repère renvoie son emplacement associé. Ce qui pourrait évidemment différer de l'entrée. Lorsque vous fournissez un emplacement au géocodeur, celui-ci "infère" le repère que vous souhaitez obtenir.

Supposons que ce:

 
a: Associated location with the empire state building. 
b: Location you provided from an long press for instance. 

    ------- 
    |  | 
    | a | --> CLPlacemark: Empire state building, location: a 
    | b| 
    ------- 

Vous aviez raison dans vos hypothèses. :)