4

我的代码实际上与以下示例相同:

https://github.com/iamamused/Example-MKLocalSearch.git

以下是重要的部分:

@interface ViewController : UIViewController
@property (strong, nonatomic) IBOutlet MKMapView *ibMapView;
@end

@implementation ViewController {
    MKLocalSearch *localSearch;
    MKLocalSearchResponse *results;
}

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {
    [localSearch cancel];
    MKLocalSearchRequest *request = [[MKLocalSearchRequest alloc] init];
    request.naturalLanguageQuery = searchBar.text;
    request.region = self.ibMapView.region;    
    localSearch = [[MKLocalSearch alloc] initWithRequest:request];
    [localSearch startWithCompletionHandler:^(MKLocalSearchResponse *response, NSError *error){
        [self.resultTable reloadData];
    }
}

当 Sutter 和 Mason aka 600 Sutter St. 位于地图区域内时,搜索“600 Sutte”将包括明显的结果“600 Sutter St.”,这似乎是合理的。我就是无法让它发挥作用。我尝试了许多不同的街道,并且在获得直接在地图区域中的结果之前,我经常得到州外的结果。

另外,“600 Sut”返回不相关的结果,而“600 Su”返回错误 4.真的没有找到以“600 Su”开头的任何内容吗?

我使用这个 API 是完全错误的,还是不是我想要用它做的?

为所有查询映射区域: 地图区域

600 苏特 600 苏特

600苏 600苏

4

3 回答 3

3

我最终放弃了 Apple 本地搜索 API 并转而使用 Google。他们的 Place API 正是我所需要的。它可以快速找到相关结果,每天多达 10 万个请求不需要任何成本。

自动完成: https ://developers.google.com/places/documentation/autocomplete

详细信息(经纬度需要这个): https ://developers.google.com/places/documentation/details

在JSONModel的帮助下,我在几个小时内将它构建到了我的 iOS 应用程序中。

结果正是我希望看到的:

在此处输入图像描述

于 2014-08-14T21:53:41.967 回答
1

@borisz - 直接评论的点太少了..注意在您的 IOS 应用程序中使用 Google Places API。Google 在其条款和条件中声明,任何显示从 Google Places API 获取的数据的地图都必须是 Google Map。因此,如果您仍希望使用他们的 API 和搜索,只需确保您也在使用 Google Map 而不是 Apple 的本地地图。希望这有帮助,祝你好运!

于 2014-11-05T02:32:19.820 回答
-1

为那些仍然有类似问题的人发布这个。您不应该使用 MKLocalSearchRequest() 而是使用 MKLocalSearchCompleter,它可以提供更好的结果并用于当前的 Apple 地图。

您可以在此答案中学习如何实施

于 2018-12-17T21:30:28.773 回答