2012-12-10 23 views

答えて

21

MKLocalSearchのAPIはかなりわかりやすいです。そのnaturalLanguageQueryを渡し、起動するローカル検索を知らせるMKLocalSearchオブジェクト

  • を初期化するために、検索要求を使用し
  • いくつかの検索用語にを設定してその最も基本的な、あなた

    1. alloc-initMKLocalSearchRequest
    2. で完了ハンドラ
    3. 応答内にMKMapItemオブジェクトの配列を持つものを実行します。
    4. カフェのための210

    検索:

    // 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)と呼ばれるboundingRegionMKCoordinateRegionのアレイを含みます。あなたはすべての結果を表示するマップビューを設定するためにそれを使用することができます:

    [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); 
        } 
    
    6

    ためのチュートリアルである所定の場所約1キロ半径カフェを検索する例である:

    MKLocalSearchRequest *request = [[MKLocalSearchRequest alloc] init]; 
    CLLocationCoordinate2D location = CLLocationCoordinate2DMake(11.567898, 104.894430); 
    request.naturalLanguageQuery = @"cafe"; 
    request.region = MKCoordinateRegionMakeWithDistance(location, 1000, 1000); 
    MKLocalSearch *search = [[MKLocalSearch alloc] initWithRequest:request]; 
    [search startWithCompletionHandler:^(MKLocalSearchResponse *response, NSError *error){ 
        for (MKMapItem *item in response.mapItems) { 
         NSLog(@"%@", item.name); 
        } 
    }]; 
    

    検索に失敗した場合、空のリストは返されませんが、ドメインMKErrorDomainのエラーが返されますコード4

    関連する問題