geocodeAddressString
函数,可以指定地址,但我发现它对于地标并不可靠,包括法国巴黎埃菲尔铁塔等众所周知的地标。我尝试扩展地址以不仅仅包含城市和国家的地标名称,但在匹配时它会给出相同的输出。
geocoder.geocodeAddressString(addressString) { (placemarks, error) in
if error == nil {
if let placemark = placemarks?[0] {
let location = placemark.location!
completionHandler(CGFloat(250), CGFloat(250), location.coordinate, nil)
}
} else {
print(addressString, error)
}
}
位置作为字符串传递,然后应将位置传递给completionHandler,但并非所有地标都会返回正确的位置。例如,温布利球场确实有效。传递的字符串是“Wembley Stadium, London”,位置的输出是:
+51.55695420,-0.27957620
对于“埃菲尔铁塔,巴黎”,我实际上得到了一个错误,但是对于“埃菲尔铁塔,巴黎,法国”,位置是:
+48.85678790,+2.35107680
埃菲尔铁塔的实际坐标是48.858200,2.294610
,但它似乎给了我城市的位置,而不是指定的地标。我已经看到有指定区域的选项,但我还没有看到这有任何区别。有没有办法使此查找更加准确或指定正在搜索的地标或兴趣点?也有地标名称与城市名称相匹配的情况(安菲尔德是利物浦的一个地区,也是一个体育场的名称,例如曼彻斯特的老特拉福德球场)。
LocalSearch
更准确。
let request : MKLocalSearch.Request = .init()
request.region = region
request.naturalLanguageQuery = "Eiffel Tower, Paris"
let search = MKLocalSearch(request: request)
let results = try await search.start()
let result = results.mapItems.first
结果=
"Eiffel Tower, Paris, France" (latitude: 48.8582583, longitude: 2.2944877)
"Eiffel Tower, Paris" (latitude: 48.8582583, longitude: 2.2944877)
"Wembley Stadium, London" (latitude: 51.5560557, longitude: -0.2795251)