无法使用 CLGeocoder 快速获取正确的城市名称
Posted
技术标签:
【中文标题】无法使用 CLGeocoder 快速获取正确的城市名称【英文标题】:Can't get correct city name in swift with CLGeocoder 【发布时间】:2016-05-09 08:27:50 【问题描述】:我试图用 swift 获取当前的城市名称和国家名称。 这是我的源代码。 // 然后在 CLLocationManagerDelegate 方法中可以获取用户当前的位置坐标:
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
let locValue:CLLocationCoordinate2D = manager.location!.coordinate
print("locations = \(locValue.latitude) \(locValue.longitude)")
self.locationManager.stopUpdatingLocation()
getAddressFromGeocodeCoordinate(manager.location!)
func getAddressFromGeocodeCoordinate(locationObj: CLLocation)
let geocoder = CLGeocoder()
geocoder.reverseGeocodeLocation(locationObj, completionHandler: (placemarks, error) -> Void in
// Place details
var placeMark: CLPlacemark!
placeMark = placemarks?[0]
// Address dictionary
print(placeMark.addressDictionary)
// City
if let city = placeMark.addressDictionary!["City"] as? NSString
print("city:",city)
// Country
if let country = placeMark.addressDictionary!["Country"] as? NSString
print("country", country)
)
但是当我想打印 city 时,它返回 nil。
我也尝试过placeMark.subAdministrativeArea
,但它也返回 nil。
我目前在丹东市。
我的代码可以很好地打印国家/地区。像country China
但城市。
谁知道解决办法?
【问题讨论】:
你能给我们一些坐标吗? @JulienQuere Np,纬度 = 40.025411910838,经度 = 124.343855400189 【参考方案1】:检查是否有任何错误或获取print(placeMark.addressDictionary)
的响应是什么
geocoder.reverseGeocodeLocation(newLocation, completionHandler: (stuff, error)->Void in
if error
println("reverse geodcode fail: \(error.localizedDescription)")
return
if stuff.count > 0
self.placemark = CLPlacemark(placemark: stuff[0] as CLPlacemark)
self.addressLabel.text = String(format:"%@ %@\n%@ %@ %@\n%@",
self.placemark.subThoroughfare ? self.placemark.subThoroughfare : "" ,
self.placemark.thoroughfare ? self.placemark.thoroughfare : "",
self.placemark.locality ? self.placemark.locality : "",
self.placemark.postalCode ? self.placemark.postalCode : "",
self.placemark.administrativeArea ? self.placemark.administrativeArea : "",
self.placemark.country ? self.placemark.country : "")
else
println("No Placemarks!")
return
)
【讨论】:
以上是关于无法使用 CLGeocoder 快速获取正确的城市名称的主要内容,如果未能解决你的问题,请参考以下文章