我想让我的iOS应用的用户搜索附近的位置(主要是街道和POI)。在本机Apple Maps App中搜索地址时,行为应该非常相似。我首先尝试使用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 maps API实现此功能。由于我目前正在使用Apple地图(MKMapView),我可能也必须更换地图本身,因为Google不允许在Apple地图上显示他们的地理编码器结果,我是对的吗?
如果我无法在欧洲使用MapKit这个功能,那将会是一个巨大的失望,但它可能在美国运作得非常完美。