Как получить поля countryShortName, Division, StateShortName, subLocality и т. Д. Из обратного геокодирования из текущего местоположения в Maps Swift - PullRequest
0 голосов
/ 04 июня 2018

Я показываю карту в моем приложении для текущего местоположения.Итак, я пытаюсь получить обратное геокодирование из текущего местоположения, чтобы получить данные для текущего местоположения в MKMapView.

 func getAddressFromLatLon(coords: CLLocation) {
        let loc: CLLocation = CLLocation(latitude:coords.coordinate.latitude, longitude: coords.coordinate.longitude)

        let ceo: CLGeocoder = CLGeocoder()

        ceo.reverseGeocodeLocation(loc, completionHandler:
            {(placemarks, error) in
                if (error != nil)
                {
                    print("reverse geodcode fail: \(error!.localizedDescription)")
                }
                var placeMark: CLPlacemark!

                let pm = placemarks! as [CLPlacemark]
                print(placemarks![0] as Any)
                placeMark = placemarks?[0]
                print(placeMark.addressDictionary! as Any)

                if pm.count > 0 {
                    let pm = placemarks![0]
//                    print(pm.country)
//                    print(pm.locality)
//                    print(pm.subLocality)
//                    print(pm.thoroughfare)
//                    print(pm.postalCode)
//                    print(pm.subThoroughfare)

                    var addressString : String = ""
                    if pm.subLocality != nil {
                        addressString = addressString + pm.subLocality! + ", "
                    }
                    if pm.thoroughfare != nil {
                        addressString = addressString + pm.thoroughfare! + ", "
                    }
                    if pm.locality != nil {
                        addressString = addressString + pm.locality! + ", "
                    }
                    if pm.country != nil {
                        addressString = addressString + pm.country! + ", "
                    }
                    if pm.postalCode != nil {
                        addressString = addressString + pm.postalCode! + " "
                    }


                    print(addressString)
                    self.addressTextField.text = addressString
                    self.locationCommentsTextField.text = pm.thoroughfare

                }
        })

    }

Но его печать выполняется только после

Optional([AnyHashable("Street"): Infinite Loop, AnyHashable("ZIP"): 95014, AnyHashable("Country"): United States, AnyHashable("City"): Cupertino, AnyHashable("State"): CA, AnyHashable("Name"): Apple Inc., AnyHashable("SubAdministrativeArea"): Santa Clara, AnyHashable("Thoroughfare"): Infinite Loop, AnyHashable("FormattedAddressLines"): <__NSArrayM 0x60400204b040>(
Apple Inc.,
Infinite Loop,
Cupertino, CA  95014,
United States
)
, AnyHashable("CountryCode"): US])

Но мне также нужны следующие поля, только несколько данных, которые я могу получить.

Город, комментарии, страна, countryShortName, подразделение, платформа, регион, resolvedAddress, штат, stateShortName, улица, streetNumber, subLocality, userAddress, zipCode

Любые предложения.

1 Ответ

0 голосов
/ 04 июня 2018

Я наконец нашел документы Apple, большинство полей я получил.Это может быть полезно кому-то в будущем.

func getAddressFromLatLon(coords: CLLocation) {
        let loc: CLLocation = CLLocation(latitude:coords.coordinate.latitude, longitude: coords.coordinate.longitude)

        let ceo: CLGeocoder = CLGeocoder()

        ceo.reverseGeocodeLocation(loc, completionHandler:
            {(placemarks, error) in
                if (error != nil)
                {
                    print("reverse geodcode fail: \(error!.localizedDescription)")
                }
                var placeMark: CLPlacemark!

                let pm = placemarks! as [CLPlacemark]
                print(placemarks![0] as Any)
                placeMark = placemarks?[0]
                print(placeMark.addressDictionary! as Any)

                if pm.count > 0 {
                    let pm = placemarks![0]
                    var addressString : String = ""
                    if pm.subLocality != nil {
                        addressString = addressString + pm.subLocality! + ", "
                        self.reverseGeoCodeDic["subLocality"] = pm.subLocality //neighborhood, common name
                    }
                    if pm.thoroughfare != nil {
                        addressString = addressString + pm.thoroughfare! + ", "
                        self.reverseGeoCodeDic["thoroughfare"] = pm.thoroughfare // street name
                    }
                    if pm.locality != nil {
                        addressString = addressString + pm.locality! + ", "
                        self.reverseGeoCodeDic["locality"] = pm.locality //// city
                    }
                    if pm.country != nil {
                        addressString = addressString + pm.country! + ", "
                        self.reverseGeoCodeDic["country"] = pm.country //country
                    }
                    if pm.postalCode != nil {
                        addressString = addressString + pm.postalCode! + " "
                        self.reverseGeoCodeDic["postalCode"] = pm.postalCode // zip/postal code
                    }
                    if pm.subLocality != nil {
                        addressString = addressString + pm.subLocality! + " "
                        self.reverseGeoCodeDic["subLocality"] = pm.subLocality // neighborhood
                    }
                    if pm.administrativeArea != nil {
                        addressString = addressString + pm.subAdministrativeArea! + ", "
                        self.reverseGeoCodeDic["administrativeArea"] = pm.administrativeArea // state
                    }
                    if pm.subAdministrativeArea != nil {
                        addressString = addressString + pm.subAdministrativeArea! + ", "
                        self.reverseGeoCodeDic["subAdministrativeArea"] = pm.subAdministrativeArea subAdministrativeArea // county
                    }

                    print(addressString)
                    print(self.reverseGeoCodeDic)
                    self.addressTextField.text = addressString
                    self.locationCommentsTextField.text = pm.thoroughfare

                }
        })

    }
...