Google Maps在iOS Swift中按纬度和经度放置信息

时间:2018-10-11 07:54:42

标签: ios swift google-maps swift4 google-places-api

我在地图上有一个标记。滚动地图时,标记也会移动。我可以找到标记的坐标,但是如何使用该坐标查找位置信息?

当前位置的地点信息

func locate() {
        placesClient.currentPlace(callback: { (placeLikelihoodList, error) -> Void in
            if let error = error {
                print("Pick Place error: \(error.localizedDescription)")
                return
            }

            let placeInfo = getCurrentPlaceInformation()
            self.placeNameLbl.text = placeInfo.name
            self.placeAddressLbl.text = placeInfo.address

            if let placeLikelihoodList = placeLikelihoodList {
                let place = placeLikelihoodList.likelihoods.first?.place
                if let place = place {
                    print("LOG: place name : \(place.name), place Address : \(place.formattedAddress)")

                    PLACE_NAME = place.name
                    PLACE_ADDRESS = place.formattedAddress ?? ""

                    let placeInfo = getCurrentPlaceInformation()
                    self.placeNameLbl.text = placeInfo.name
                    self.placeAddressLbl.text = placeInfo.address
                }
            }
        })
    }

如何查找自定义坐标以查找地点信息?

2 个答案:

答案 0 :(得分:3)

Apple反向地理编码API

import CoreLocation
let geocoder = CLGeocoder()
geocoder.reverseGeocodeLocation(<#T##location: CLLocation##CLLocation#>, completionHandler: <#T##CLGeocodeCompletionHandler##CLGeocodeCompletionHandler##([CLPlacemark]?, Error?) -> Void#>)

Google反向Geocode API

将GoogleMaps添加到项目中(可以使用Pod)

let geocoder = GMSGeocoder()
geocoder.reverseGeocodeCoordinate(position) { response, error in
  //
if error != nil {
                print("reverse geodcode fail: \(error!.localizedDescription)")
            } else {
                if let places = response?.results() {
                    if let place = places.first {


                        if let lines = place.lines {
                            print("GEOCODE: Formatted Address: \(lines)")
                        }

                    } else {
                        print("GEOCODE: nil first in places")
                    }
                } else {
                    print("GEOCODE: nil in places")
                }
            }
}

答案 1 :(得分:0)

    func getAddrFrmLtLng(latitude:Any, longitude:Any){

        let geoCoder = CLGeocoder()
        let location = CLLocation(latitude: latitude as! CLLocationDegrees, longitude: longitude as! CLLocationDegrees)

        geoCoder.reverseGeocodeLocation(location, completionHandler: { (placemarks, error) -> Void in

            var placeMark: CLPlacemark!
            placeMark = placemarks?[0]
            self.displayLocationInfo(placemark: placeMark)

        })
    }

    func displayLocationInfo(placemark: CLPlacemark?) -> String    {

        var locality =  ""
        var postalCode =  ""
        var administrativeArea = ""
        var country = ""
        var sublocality = ""
        var throughfare = ""

        var name = ""

        if let containsPlacemark = placemark {
            //stop updating location to save battery life
            //            locationManager.stopUpdatingLocation()
            locality = (containsPlacemark.locality != nil) ? containsPlacemark.locality! : ""
            postalCode = (containsPlacemark.postalCode != nil) ? containsPlacemark.postalCode! : ""
            administrativeArea = (containsPlacemark.administrativeArea != nil) ? containsPlacemark.administrativeArea! : ""
            country = (containsPlacemark.country != nil) ? containsPlacemark.country! : ""
            sublocality = (containsPlacemark.subLocality != nil) ? containsPlacemark.subLocality! : ""
            throughfare = (containsPlacemark.thoroughfare != nil) ? containsPlacemark.thoroughfare! : ""

        }

        var adr: String  = ""

        if throughfare != "" {

            adr = throughfare + ", "

        }
        if sublocality != "" {

            adr = adr + sublocality + ", "

        }
        if locality != "" {

            adr = adr + locality + ", "

        }
        if administrativeArea != "" {

            adr = adr + administrativeArea + ", "

        }
        if postalCode != "" {

            adr = adr + postalCode + ", "

        }
        if country != "" {

            adr = adr + country
        }

        print(adr)

        return adr
    }