Прямое геокодирование MapKit, основанное не только на адресах?

#swift #coordinates #mapkit #geocode #clgeocoder

#swift #координаты #mapkit #геокодирование #clgeocoder

Вопрос:

Итак, я создал супер простую функцию прямого геокодирования с помощью MapKit:

 func getCoordinates(from address: String) {
    CLGeocoder().geocodeAddressString(address) { placemark, error in
        guard error == nil amp;amp; placemark != nil else {
            return
        }
        for index in 0..<placemark!.count {
            let number = index   1
            print("Location (number): (placemark?[index].location?.coordinate)")
        }
    }
}
 

Теперь 2 вещи: первая заключается в том, что (просто для уточнения) функция геокодирования mapkit возвращает только верхний хит для введенной строки, она не возвращает массив результатов — есть ли способ это изменить? Второе, что я заметил, это то, что эта функция не работает для местоположений «Точек интереса» — например, если вы введете «McDonalds» в качестве строки, вы не получите никаких результатов, потому что технически это не адрес. У кого-нибудь есть какие-либо предложения?

Ответ №1:

Попробуйте использовать MKLocalSearch вместо:

 let request = MKLocalSearch.Request()
request.region = region
request.naturalLanguageQuery =  "McDonalds"
let search = MKLocalSearch(request: request)
search.start { (response, error) in

}