如何获取坐标以在Mapkit Swift上显示图钉

问题描述 投票:0回答:1

嗨,如何使用地址解析器快速将address转换为坐标(经度和纬度)?我希望能够固定保存在变量中的地址的位置。

let address = GlobalVariable.eventClicked.address
@IBOutlet var EventsMapView: MKMapView!

    override func viewDidLoad() {
        super.viewDidLoad()
        self.EventsMapView.delegate = self
    }

我正在使用此代码获取坐标,但是我无法将其保存在此完成块之外,因此我是新手。

let geoCoder = CLGeocoder()
        geoCoder.geocodeAddressString(address) { (placemarks, err) in
        guard err == nil,
            let allPlacemarks = placemarks,
            let place = allPlacemarks.first,
            let loc = place.location else {
                return
            }
        print("log \(loc.coordinate)")
}

所以我的问题是如何保存坐标,然后在地图上添加图钉?谢谢

swift geolocation mapkit
1个回答
0
投票

您可以使用一个块,有关块编程的更多信息在这里:Blocks Programming Topics

首先是进行地理编码的方法:

func geocodeAddress(addressString: String, locationHandler: @escaping (String, CLLocation?, Error?) -> Void){
    let geoCoder = CLGeocoder()
    geoCoder.geocodeAddressString(addressString) { (placeMarks, error) in
        if let placeMark: CLPlacemark = placeMarks?.first{
            locationHandler(addressString, placeMark.location, error)
        }else{
            locationHandler(addressString, nil, error)
        }
    }
}

通常,通用地理编码器类应具有此方法。此方法接收地址字符串和完成地理编码后将被调用的块。

第二,完成地理编码时要调用的方法:

func geocodingReturned(_ addressStr: String, _ loc: CLLocation?, _ err: Error?){
    if nil != loc{
        print("Address geocoded: \(addressStr): \(loc!.coordinate.latitude)--\(loc!.coordinate.longitude)")
    }else{
        if nil != err{
            // handle error
            print(err!.localizedDescription)
        }
    }
}

您绘制地图图钉的类将具有此方法。此方法将接收地址字符串,成功进行地址解析的位置以及错误(如果可用)。地理编码完成后,会自动调用此方法。

现在实现上述方法:

 geocodeAddress(addressString: "123 front street, new york", locationHandler: geocodingReturned(_:_:_:))
© www.soinside.com 2019 - 2024. All rights reserved.