MKLocalSearch
マップ内の検索に使いたい。この機能は、iOS 6.1 以降で利用できます。誰かがこれを使用する方法を知っていますか、または誰かが使用方法の例を挙げることができますMKLocalSearch
か?
質問する
16022 次
3 に答える
24
の APIMKLocalSearch
は非常に理解しやすいものです。最も基本的に、あなたは
alloc-init
をMKLocalSearchRequest
naturalLanguageQuery
いくつかの検索語に設定します- 検索リクエストを使用して
MKLocalSearch
オブジェクトを初期化する - ローカル検索に開始を指示し、完了ハンドラを渡します
MKMapItem
応答内 のオブジェクトの配列で何かをする
カフェを検索:
// Create a search request with a string
MKLocalSearchRequest *searchRequest = [[MKLocalSearchRequest alloc] init];
[searchRequest setNaturalLanguageQuery:@"Cafe"];
// Create the local search to perform the search
MKLocalSearch *localSearch = [[MKLocalSearch alloc] initWithRequest:searchRequest];
[localSearch startWithCompletionHandler:^(MKLocalSearchResponse *response, NSError *error) {
if (!error) {
for (MKMapItem *mapItem in [response mapItems]) {
NSLog(@"Name: %@, Placemark title: %@", [mapItem name], [[mapItem placemark] title]);
}
} else {
NSLog(@"Search Request Error: %@", [error localizedDescription]);
}
}];
次のように、検索の地域を指定できます。
// Search for Cafes in Paris
MKLocalSearchRequest *searchRequest = [[MKLocalSearchRequest alloc] init];
[searchRequest setNaturalLanguageQuery:@"Cafe"];
CLLocationCoordinate2D parisCenter = CLLocationCoordinate2DMake(48.8566667, 2.3509871);
MKCoordinateRegion parisRegion = MKCoordinateRegionMakeWithDistance(parisCenter, 15000, 15000);
[searchRequest setRegion:parisRegion];
MKMapView
ユーザーがズームインしたから領域を取得することもできます。これにより、より良い結果が得られます。
[searchRequest setRegion:self.mapView.region];
応答オブジェクト には、オブジェクトMKLocalSearchResponse
の配列MKMapItem
( mapItems
) と、すべての結果を含む領域であるMKCoordinateRegion
呼び出された が含まれています。boundingRegion
これを使用して、すべての結果を表示するマップ ビューを設定できます。
[self.mapView setRegion:response.boundingRegion];
オブジェクトの配列をMKMapItem
マップに配置することはできません (マップ アプリへの送信に使用されます) が、それぞれにマップに追加できるplacemark
プロパティが含まれています。
[localSearch startWithCompletionHandler:^(MKLocalSearchResponse *response, NSError *error) {
if (!error) {
for (MKMapItem *mapItem in [response mapItems]) {
NSLog(@"Name: %@, MKAnnotation title: %@", [mapItem name], [[mapItem placemark] title]);
NSLog(@"Coordinate: %f %f", [[mapItem placemark] coordinate].latitude, [[mapItem placemark] coordinate].longitude);
// Should use a weak copy of self
[self.mapView addAnnotation:[mapItem placemark]];
}
} else {
NSLog(@"Search Request Error: %@", [error localizedDescription]);
}
}];
ダブリンを検索すると、マップ ビューにピンが配置され、ログが記録されます。
Name: Dublin, Co. Dublin, MKAnnotation title: Dublin, Co. Dublin, Ireland
Coordinate: 53.344104 -6.267494
返されたオブジェクトには、特にビジネスを検索する場合に、追加の詳細が多数含まれています。ここにいくつかあります:
[localSearch startWithCompletionHandler:^(MKLocalSearchResponse *response, NSError *error) {
if (!error) {
NSLog(@"Results: %@", [response mapItems]);
MKMapItem *mapItem = [[response mapItems] objectAtIndex:0];
NSLog(@"Name:%@ Phone:%@ URL:%@", [mapItem name], [mapItem phoneNumber], [mapItem url]);
NSLog(@"Placemark: %@", [mapItem placemark]);
MKPlacemark *placemark = [mapItem placemark];
NSLog(@"Placemark Address: %@", [placemark addressDictionary]);
MKCoordinateRegion boundingRegion = [response boundingRegion];
NSLog(@"Bounds: %f %f", boundingRegion.span.latitudeDelta, boundingRegion.span.longitudeDelta);
}
于 2014-04-29T14:51:41.197 に答える
0
Localsearch のチュートリアルはこちら
于 2013-04-09T06:59:15.370 に答える