Swift 的 geocodeAddressString 函数可以让地标和兴趣点更准确吗

问题描述 投票:0回答:1
使用 Swift 中的

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

,但它似乎给了我城市的位置,而不是指定的地标。我已经看到有指定区域的选项,但我还没有看到这有任何区别。有没有办法使此查找更加准确或指定正在搜索的地标或兴趣点?也有地标名称与城市名称相匹配的情况(安菲尔德是利物浦的一个地区,也是一个体育场的名称,例如曼彻斯特的老特拉福德球场)。

swift geolocation
1个回答
0
投票

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)
    
© www.soinside.com 2019 - 2024. All rights reserved.