MKLocalSearch 返回区域外的结果
Posted
技术标签:
【中文标题】MKLocalSearch 返回区域外的结果【英文标题】:MKLocalSearch returning results outside of region 【发布时间】:2014-11-12 09:58:07 【问题描述】:我正在使用 Apple Maps 获取本地地址列表。但是,它似乎返回了来自世界各地的结果,而不是我指定的地图区域。
我正在使用以下代码,并检查了该区域以确保它是“大致”整个伦敦(见附件),用于具有相同参数的 mapView。但是,在我的结果中,有时我会在德国、美国或南美找到地点。
任何人都可以看到我做错了什么?
MKLocalSearchRequest* request = [[MKLocalSearchRequest alloc] init];
request.naturalLanguageQuery = searchTerm;
CLLocationCoordinate2D cornerCoordinate = CLLocationCoordinate2DMake(51.5007282, -0.1246263);
request.region = MKCoordinateRegionMakeWithDistance(cornerCoordinate, 50000, 50000);
MKLocalSearch* search = [[MKLocalSearch alloc] initWithRequest:request];
[search startWithCompletionHandler:^(MKLocalSearchResponse *response, NSError *error)
//results come in here
];
地图区域:
【问题讨论】:
MKLocalSearch 区域属性的文档说:“指定区域并不能保证结果都在该区域内。它只是对搜索引擎的提示。”您可以手动检查生成的 MKMapItems (mapItem.placemark.coordinate) 的距离并根据需要进行过滤,但这并不理想。由于 MKLocalSearch 的这个和其他缺陷,请考虑替代方案(请参阅***.com/questions/25027729/…)。 【参考方案1】:根据文档:
指定一个区域并不能保证结果都是 区域内。这只是对搜索引擎的提示。
这很糟糕,但不幸的是,没有办法将结果限制在提供的区域内。
您可以考虑为此使用 Google Places API:https://developers.google.com/places/webservice/autocomplete
【讨论】:
【参考方案2】:试试这个解决方案。在这里,我认为问题是由于您指定的区域。
MKLocalSearchRequest *request = [[MKLocalSearchRequest alloc] init];
request.naturalLanguageQuery = searchTerm;
MKCoordinateSpan span = MKCoordinateSpanMake(.1, .1);
CLLocationCoordinate2D cornerCoordinate = CLLocationCoordinate2DMake(51.5007282, -0.1246263);
request.region = MKCoordinateRegionMake(cornerCoordinate, span);
MKLocalSearch *search = [[MKLocalSearch alloc] initWithRequest:request];
[search startWithCompletionHandler:^(MKLocalSearchResponse *response, NSError *error)
];
【讨论】:
不。刚刚尝试过,我得到了相同的结果。谢谢@Kampai。以上是关于MKLocalSearch 返回区域外的结果的主要内容,如果未能解决你的问题,请参考以下文章