像Apple的Maps App那样在iOS上转发地理编码用户输入

时间:2015-09-05 20:00:45

标签: ios google-maps mapkit clgeocoder mklocalsearch

我想让我的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这个功能,那将会是一个巨大的失望,但它可能在美国运作得非常完美。

0 个答案:

没有答案