当我尝试使用反向地理编码时,出现此错误消息.
Geocode error: Error Domain=GEOErrorDomain Code=-3 “(null)”
我的代码如下:
import CoreLocation geocoder.reverseGeocodeLocation(location) { (placemarks,error) in if let placemarks = placemarks { reverseGeocodeLocations[hash] = placemarks } callback(placemarks,error) }
这只是不时工作,我每秒多次请求reverseGeocode.所以我猜这个错误信息与请求的限制有什么关系?
有没有关于apple的地理编码请求的文档?
谢谢你提前.
更新
这是我的整个代码请求
import CoreLocation fileprivate struct ReverseGeocodeRequest { private static let geocoder = CLGeocoder() private static var reverseGeocodeLocations = [Int: [CLPlacemark]]() private static let reverseGeocodeQueue = dispatchQueue(label: "ReverseGeocodeRequest.reverseGeocodeQueue") private static var nextPriority: UInt = 0 fileprivate static func request(location: CLLocation,callback: @escaping ([CLPlacemark]?,Error?)->Void) { let hash = location.hash if let value = reverseGeocodeLocations[hash] { callback(value,nil) } else { reverseGeocodeQueue.async { guard let value = reverseGeocodeLocations[hash] else { geocoder.reverseGeocodeLocation(location) { (placemarks,error) in if let placemarks = placemarks { reverseGeocodeLocations[hash] = placemarks } callback(placemarks,error) } return } callback(value,nil) } } } let priority: UInt let location: CLLocation let handler : ([CLPlacemark]?,Error?)->Void private init (location: CLLocation,handler: @escaping ([CLPlacemark]?,Error?)->Void) { ReverseGeocodeRequest.nextPriority += 1 self.priority = ReverseGeocodeRequest.nextPriority self.location = location self.handler = handler } } extension ReverseGeocodeRequest: Comparable { static fileprivate func < (lhs: ReverseGeocodeRequest,rhs: ReverseGeocodeRequest) -> Bool { return lhs.priority < rhs.priority } static fileprivate func == (lhs: ReverseGeocodeRequest,rhs: ReverseGeocodeRequest) -> Bool { return lhs.priority == rhs.priority } } extension CLLocation { func reverseGeocodeLocation(callback: @escaping ([CLPlacemark]?,Error?)->Void) { ReverseGeocodeRequest.request(location: self,callback: callback) } func getPlaceName(callback: @escaping (Error?,String?)->Void) { self.reverseGeocodeLocation { (placemarks,error) in guard let placemarks = placemarks,error == nil else { callback(error,nil) return } guard let placemark = placemarks.first else { callback(nil,"MysterIoUs place") return } if let areaOfInterest = placemark.areasOfInterest?.first { callback(nil,areaOfInterest) } else if let locality = placemark.locality { callback(nil,locality) } else { callback(nil,"On the Earth") } } } }
解决方法
在搜索到答案后,它在Apples文档中! :/
https://developer.apple.com/reference/corelocation/clgeocoder/1423621-reversegeocodelocation
Geocoding requests are rate-limited for each app,so making too many requests in a short period of time may cause some of the requests to fail. When the maximum rate is exceeded,the geocoder passes an error object with the value network to your completion handler.
希望这有助于某人!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。