geocodePostalAddress - 从邮政编码获取地址

Posted

技术标签:

【中文标题】geocodePostalAddress - 从邮政编码获取地址【英文标题】:geocodePostalAddress - get Address from zip code 【发布时间】:2019-11-06 19:10:52 【问题描述】:

我正在尝试从邮政编码中获取地址,但我收到了错误并且没有地标。设备似乎找不到该位置。这是为什么呢?

语言环境无所谓,有无我都试过了,结果都是一样的。

let geocoder = CLGeocoder()

let postalAddress = CNMutablePostalAddress()
postalAddress.postalCode = zipCode

geocoder.geocodePostalAddress(postalAddress, preferredLocale: Locale(identifier: "en_US"))  (placemarks, err) in
        if let placemark = placemarks?[0] 
            completionHandler(placemark)
            return
        
        completionHandler(nil)

err = (Error?)  domain: "kCLErrorDomain" - code: 8

【问题讨论】:

developer.apple.com/documentation/corelocation/clerror/… 一个邮政编码可能太模糊了? 试过这个postalAddress.isoCountryCode = "US",但是一样 请尝试 geocodeAddressString。 @matt 我试过但结果相同,只是注意到它在模拟器上工作但在设备上没有。仍在寻找问题。 哇真的很有趣,感谢您的实验。设备是否在进行地理编码?很奇怪。 【参考方案1】:

我猜你的测试程序或设备有问题,因为我无法重现问题。我没有完成处理程序,所以我将代码更改为:

    let geocoder = CLGeocoder()
    let postalAddress = CNMutablePostalAddress()
    postalAddress.postalCode = "93023"
    geocoder.geocodePostalAddress(postalAddress, preferredLocale: Locale(identifier: "en_US"))  (placemarks, err) in
            if let placemark = placemarks?[0] 
                print(placemark)
                return
            
            print(err)
    

我明白了

93023, Ojai, CA  93023, United States...

这是正确的。也许你一直在敲击地理编码器,所以你被限制了?或者您的设备上可能有一些不好的设置?或者它可能是更微妙的东西。

【讨论】:

是的,我猜我的设备出了点问题。有什么我会跟进的。 您在美国吗?也许有一些我们不知道的规则。 他们也为我工作——在设备、模拟器和(令人惊讶的!)在操场上。我假设您在设备和模拟器上使用了相同的 zip? 是的,但可能设备工作方式不同。这才是最重要的。【参考方案2】:

CLGeocoder 也适用于我,但如果它不适合您,请尝试使用 MKLocalSearch Playground:

import UIKit
import MapKit

let searchRequest = MKLocalSearch.Request()
searchRequest.naturalLanguageQuery = "93023"
let search = MKLocalSearch(request: searchRequest)
search.start  response, error in
    guard let response = response else 
        print(error?.localizedDescription ?? "This should be impossible")
        return
    
  print(response.mapItems.first?.placemark.title ?? "No Placemarks")

输出:

Ojai, CA  93023, United States

【讨论】:

以上是关于geocodePostalAddress - 从邮政编码获取地址的主要内容,如果未能解决你的问题,请参考以下文章