Apple CLGeocoder,MKLocalSearch结果与设备映射结果不同

时间:2016-11-29 07:46:05

标签: ios objective-c mapkit clgeocoder mklocalsearch

在我的应用程序搜索中使用位置字符串,它将返回5结果,但与默认设备地图应用程序不匹配。

我的代码1:CLGeocoder

CLGeocoder *geocoder = [[CLGeocoder alloc] init];
[geocoder geocodeAddressString:searchKey completionHandler:^(NSArray* placemarks, NSError* error){
    dispatch_async(dispatch_get_main_queue(), ^{
        if (placemarks.count > 0) {
            searchLocations = placemarks;
        } else {
            searchLocations = nil;
        }
        [searchTableView reloadData];

        for (CLPlacemark *placemark in placemarks) {
            NSLog(@"place dic %@",placemark.addressDictionary);
        }
    });
}];

代码2:MKLocalSearch

CLLocation *userLoc = (CLLocation *)[[MYLocationManager defaultManager] currentLocation];
MKLocalSearchRequest *request = [[MKLocalSearchRequest alloc] init];
request.region = MKCoordinateRegionMakeWithDistance(userLoc.coordinate, 100000, 100000);
request.naturalLanguageQuery = searchKey;
MKLocalSearch *search = [[MKLocalSearch alloc] initWithRequest:request];
[search startWithCompletionHandler:^(MKLocalSearchResponse * _Nullable response, NSError * _Nullable error) {
    NSMutableArray *locs = [[NSMutableArray alloc]init];
    for (MKMapItem *placeM in response.mapItems) {
        [locs addObject:placeM.placemark];
    }
    if (locs.count > 0) {
        searchLocations = locs;
    } else {
        searchLocations = nil;
    }


    dispatch_async(dispatch_get_main_queue(), ^{
    [searchTableView reloadData];
    });
}];

两者都返回相同的结果 CLGeocoder result

设备地图应用结果:

DEvice map result

设备地图结果与编码地理结果不同。请帮忙解决这个问题。 我的问题是什么类型的搜索方法使用默认的地图应用程序? 以及如何在编码中得到相同的结果?

2 个答案:

答案 0 :(得分:0)

请参阅this回答。它描述了复制上述结果所需的所有步骤。我在模拟器上测试了这个。

答案 1 :(得分:0)

查询的结果取决于您要搜索的区域。

这是MKLocalSearch中的“本地”。

您的代码示例中的位置是用户在边长10 km的区域中的位置。

内置地图搜索的区域应该等于或取决于您此时在应用程序中显示的区域。

Apples App中的区域可能与App中的显式区域大不相同。