Die API für MKLocalSearch
ist ziemlich einfach zu verstehen. Am einfachsten, Sie
alloc-init
ein MKLocalSearchRequest
- Legen Sie seine
naturalLanguageQuery
zu einem gewissen Suchbegriff
- Verwenden Sie die Suchanfrage ein
MKLocalSearch
Objekt
- Sagen Sie die lokale Suche zu initialisieren zu starten, ist es vorbei ein Vervollständigungshandler
- Machen Sie etwas mit dem Array
MKMapItem
Objekte in der Antwort
Suche nach Cafes:
// 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];
Sie können auch nehmen Sie die Region von einem MKMapView
dass der Benutzer:
// 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]);
}
}];
Sie einen Bereich für die Suche wie folgt angeben herangezoomt. Dies wird bessere Ergebnisse:
[searchRequest setRegion:self.mapView.region];
Antwortobjekt ein MKLocalSearchResponse
, enthält ein Array von MKMapItem
Objekten (mapItems
) und einem MKCoordinateRegion
boundingRegion
genannt, die eine Region ist, dass alle Ergebnisse enthält.Sie können es verwenden eine Kartenansicht setzen alle Ergebnisse zeigen:
[self.mapView setRegion:response.boundingRegion];
Das Array von MKMapItem
Objekte nicht auf der Karte platziert werden können (sie an die Maps-App für das Senden gewohnt sind), aber jedes enthält eine placemark
Eigenschaft, die kann zu einer Karte hinzugefügt werden:
[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]);
}
}];
Suche nach Dublin legt einen Stift auf der Karte anzeigen und Protokolle:
Name: Dublin, Co. Dublin, MKAnnotation title: Dublin, Co. Dublin, Ireland
Coordinate: 53.344104 -6.267494
Es gibt eine Menge zusätzlicher Details in den zurückgegebenen Objekten, insbesondere wenn Sie nach Unternehmen suchen. Hier sind ein paar:
[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);
}