我想让我的 iOS 应用程序的用户能够搜索附近的位置(主要是街道和 POI)。该行为应该与在本机 Apple 地图应用程序中搜索地址时的行为几乎相同。我首先尝试使用MKLocalSearch来实现这一点,但我只收到 POI 作为结果,并且无法搜索例如附近的街道。我看不出有任何可能改变 MKLocalSearch 的搜索行为。
这是我的代码:
let request = MKLocalSearchRequest()
request.region = mapRegion!
request.naturalLanguageQuery = searchText
let localSearch = MKLocalSearch(request: request)
localSearch.startWithCompletionHandler({(response: MKLocalSearchResponse?, error: NSError?) -> Void in
if error != nil {
print("Error during local search: \(error!)")
}
if response != nil {
self.placemarks = response!.mapItems
self.tableView.reloadData()
}
})
在我的第二次尝试中,我尝试使用CLGeocoder,但与本机应用程序结果相比,结果非常糟糕。尽管我在欧洲,但大多数顶级成绩都位于美国赛事中。我再次检查了我当前位置的值,它绝对是使用 1000 米的圆形搜索半径设置为我的位置。
这是代码:
let region = CLCircularRegion.init(center: currentLocation, radius: 1000, identifier: "")
geoCoder.geocodeAddressString(searchText, inRegion: region, completionHandler:{(response: [CLPlacemark]?, error: NSError?) -> Void in
if error != nil {
print("Error during local search: \(error!)")
}
if let result = response {
self.placemarks = result
self.tableView.reloadData()
}
})
我做错了什么还是两个 API 真的那么糟糕?我最后一次尝试是通过使用 Google 地图 API 来实现此功能。由于我目前正在使用 Apple 地图 (MKMapView),因此我可能还必须更换地图本身,因为 Google 不允许在 Apple 地图上显示其地理编码结果,对吗?
如果我不能让这个功能在欧洲与 MapKit 一起工作,那将是一个巨大的失望,但也许它在美国工作得刚刚好。