geocodeAddressString 函数可以使地标和兴趣点更准确吗

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

使用

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 core-location
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.