9

MKLocalSearchマップ内の検索に使いたい。この機能は、iOS 6.1 以降で利用できます。誰かがこれを使用する方法を知っていますか、または誰かが使用方法の例を挙げることができますMKLocalSearchか?

MKLocalSearchResponse ドキュメント

4

3 に答える 3

24

の APIMKLocalSearchは非常に理解しやすいものです。最も基本的に、あなたは

  1. alloc-initMKLocalSearchRequest
  2. naturalLanguageQueryいくつかの検索語に設定します
  3. 検索リクエストを使用してMKLocalSearchオブジェクトを初期化する
  4. ローカル検索に開始を指示し、完了ハンドラを渡します
  5. 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 のチュートリアルはこちら

http://jeffreysambells.com/2013/01/28/mklocalsearch-example

于 2013-04-09T06:59:15.370 に答える