Desidero consentire agli utenti di cercare il nome di una via e visualizzare i risultati in UITableView. Per il momento la regione non è importante, può provenire da qualsiasi regione.Objective-C - Ricerca di strade in base alla query immessa dall'utente
Non ho trovato nessun esempio pertinente nelle mie ricerche e non so se dovrei usare CLLocation o MKLocalSearch.
Sulla base di documenti, dovrei usare MKLocalSearch:
Anche se la ricerca locale e geocodifica sono simili, supportano diversi casi d'uso. Utilizzare la geocodifica quando si desidera convertire tra le coordinate della mappa e un indirizzo strutturato, ad esempio l'indirizzo della Rubrica . Utilizzare la ricerca locale quando si desidera trovare un set di posizioni corrispondenti all'ingresso dell'utente.
Ma ho provato entrambi i metodi e mi dà solo 1 risultato (anche-se c'è restituito un NSArray
Questo è l'approccio CLGeocoder:.
CLGeocoder *geocoding = [[CLGeocoder alloc] init];
[geocoding geocodeAddressString:theTextField.text completionHandler:^(NSArray *placemarks, NSError *error) {
if (error) {
NSLog(@"%@", error);
} else {
NSLog(@"%i", [placemarks count]);
for(CLPlacemark *myStr in placemarks) {
NSLog(@"%@", myStr);
}
}
}];
E questo è il mio MKLocalSearch provare:
MKLocalSearchRequest *request = [[MKLocalSearchRequest alloc] init];
request.naturalLanguageQuery = theTextField.text;
request.region = self.region;
localSearch = [[MKLocalSearch alloc] initWithRequest:request];
[localSearch startWithCompletionHandler:^(MKLocalSearchResponse *response, NSError *error){
if (error != nil) {
[[[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Map Error",nil)
message:[error localizedDescription]
delegate:nil
cancelButtonTitle:NSLocalizedString(@"OK",nil) otherButtonTitles:nil] show];
return;
}
if ([response.mapItems count] == 0) {
[[[UIAlertView alloc] initWithTitle:NSLocalizedString(@"No Results",nil)
message:nil
delegate:nil
cancelButtonTitle:NSLocalizedString(@"OK",nil) otherButtonTitles:nil] show];
return;
}
self.streets = response;
[self.streetsTableView reloadData];
}];
MKLocalSearch sembra tornare più di 1 risposta in alcuni casi, ma questi sono legati alla pla ces non ricerche di nomi di strade.
Grazie in anticipo.
hai provato a impostare la regione su zero? o puoi condividere più dettagli sulla tua self.region? –
Ho un MapView e sto usando MapView.region come self.region – CristiC
dalla mia esperienza MKLocalSearch è molto primitivo. Ti opporresti all'utilizzo dell'API di Google Places per qualsiasi motivo? –