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()
}
})
2 回目の試行では、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 で動作させることができなければ、非常に残念ですが、米国では完璧に動作する可能性があります。