Как получить адрес выбранного местоположения из маркера Google Place Picker - PullRequest
0 голосов
/ 10 января 2019

ОБНОВЛЕНИЕ - Нашли решение, и вот пример проекта, если кто-то ищет такое же решение. Это позволит получить город, страну, почтовый индекс и местный адрес (subLocality) из координат и близлежащих мест. https://github.com/SwiftGuides/Google_Place_Picker

В моем проекте реализован API выбора мест в Google, так что я могу перемещать его и получать информацию о ближайших местах, а также о точной улице, где находится мой сборщик.

Я хочу, чтобы вместо адреса (37 ° 19'1464 "с.ш. 122 ° 01'74.724" с.ш.) вместо обычного местоположения указателя места был выбран адрес (безымянная дорога, Панчкула, Индия).

В API Google Place Picker API, когда мы нажимаем «выбрать этот адрес» для пользовательского местоположения, оно отображает всплывающее окно и задает местоположение в строковом формате (безымянная дорога, Панчкула, Индия) вместо (37 ° 19'1464 "N 122 ° 01'74.724" W)

Я хочу что-то подобное

Вот изображение текущего статуса

https://ibb.co/HYD5TKP

Пожалуйста, помогите !!

import UIKit
import GooglePlaces
import GooglePlacePicker
import GoogleMaps

class ViewController: UIViewController,GMSPlacePickerViewControllerDelegate {

@IBOutlet weak var addressLabel: UILabel!
@IBOutlet weak var placeNameLabel: UILabel!
@IBOutlet weak var coordinatesLabel: UILabel!

override func viewDidLoad() {
    super.viewDidLoad()

}


// To receive the results from the place picker 'self' will need to conform to
// GMSPlacePickerViewControllerDelegate and implement this code.
func placePicker(_ viewController: GMSPlacePickerViewController, didPick place: GMSPlace) {


    // Dismiss the place picker, as it cannot dismiss itself.
    viewController.dismiss(animated: true, completion: nil)


    print("Place name \(place.name)")
    print("PostalCode\(place.addressComponents)")
    print("Place address \(place.formattedAddress)")
    print("Place attributions \(place.attributions)")

    placeNameLabel.text = place.formattedAddress



    //Get address Seperated like city,country,postalcode
    let arrays : Array = place.addressComponents!
    for i in 0..<arrays.count {

        let dics : GMSAddressComponent = arrays[i]
        let str : String = dics.type

        if (str == "country") {
            print("Country: \(dics.name)")
        }
        else if (str == "administrative_area_level_1") {
            print("State: \(dics.name)")
        }
        else if (str == "administrative_area_level_2") {
            print("City: \(dics.name)")
        }
        else if (str == "postal_code"){
            print("PostalCode:\(dics.name)")
            addressLabel.text = dics.name  // this is only to get postalcode of the selected nearby location

        }
    }
}



func placePickerDidCancel(_ viewController: GMSPlacePickerViewController) {
    // Dismiss the place picker, as it cannot dismiss itself.
    viewController.dismiss(animated: true, completion: nil)

    print("No place selected")
}



@IBAction func pickPlaceButton(_ sender: Any) {
    let config = GMSPlacePickerConfig(viewport: nil)
    let placePicker = GMSPlacePickerViewController(config: config)

    //This delegate has to be called here to proper working of cancle and selected location feature , it is not mentioned in the official documentation
    placePicker.delegate = self

    present(placePicker, animated: true, completion: nil)


}
}

1 Ответ

0 голосов
/ 12 января 2019

Просто получите местоположение от маркера и вызовите нижеприведенную функцию, которая вернет возвращаемую строку адреса

func getPlaceAddressFrom(location: CLLocationCoordinate2D, completion: @escaping (_ address: String) -> Void) {
        let geocoder = GMSGeocoder()
        geocoder.reverseGeocodeCoordinate(location) { response, error in
            if error != nil {
                print("reverse geodcode fail: \(error!.localizedDescription)")
            } else {
                guard let places = response?.results(),
                let place = places.first,
                    let lines = place.lines else {
                        completion("")
                        return
                }
                completion(lines.joined(separator: ","))
            }
        }
    }
...