2017-05-14 1 views
1

Ich möchte die Orte in UITextField suchen, ich benutze GMSAutocompleteViewController, wenn ich auf die UITextField klicken, es ist zu anderen Ansicht Controller navigieren, aber ich möchte Suchliste in der gleichen Ansicht und Ich möchte die Orte aus einer bestimmten Stadt, jetzt zeigt es Orte aus der ganzen Welt, die Sie in Screenshots sehen können. Das ist mein Geschenk Code:Ich möchte Orte aus bestimmten Stadt mit Google API suchen

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    GMSAutocompleteViewController *acController = [[GMSAutocompleteViewController alloc] init]; 
    acController.delegate = self; 

    [self presentViewController:acController animated:YES completion:nil]; 

    return true; 
} 


- (void)viewController:(GMSAutocompleteViewController *)viewController 
didAutocompleteWithPlace:(GMSPlace *)place { 
    // Do something with the selected place. 
    NSLog(@"Place name %@", place.name); 
    NSLog(@"Place address %@", place.formattedAddress); 
    NSLog(@"Place attributions %@", place.attributions.string); 
    NSLog(@"lat and log%f", place.coordinate.latitude); 
    NSLog(@"lang %f", place.coordinate.longitude); 

    _searchTextField.text = place.name; 

    [self dismissViewControllerAnimated:YES completion:nil]; 
} 

- (void)viewController:(GMSAutocompleteViewController *)viewController 
didFailAutocompleteWithError:(NSError *)error { 
    // TODO: handle the error. 
    NSLog(@"error: %ld", (long)[error code]); 
    [self dismissViewControllerAnimated:YES completion:nil]; 
} 

// User canceled the operation. 
- (void)wasCancelled:(GMSAutocompleteViewController *)viewController { 
    NSLog(@"Autocomplete was cancelled."); 
    [self dismissViewControllerAnimated:YES completion:nil]; 
} 

Screenshot_1

Screenshot_2

Antwort

0

GMSAutoCompleteViewController ist verantwortlich für Umgang mit Benutzereingaben zusammen mit der automatischen Vervollständigung Erzielen von Ergebnissen und deren Anzeige.

Um einen benutzerdefinierten ViewController zu haben, müssen Sie alle oben genannten Schritte selbst durchführen. Folgen Sie dieser link, um programmgesteuert die Ergebnisse der automatischen Vervollständigung von den Google-APIs abzurufen.

0

Die beste Möglichkeit, die Suche in einem bestimmten Bereich zu beschränken, besteht darin, einen Pfad zu erstellen und zu überprüfen, ob die angeforderten Lat- oder Lng-Werte darin enthalten sind oder nicht. Auch dieser Ansatz kann für die automatische Vervollständigung der API verwendet werden. Sobald der Benutzer ein Ergebnis aus der Zeile ausgewählt hat, können wir dessen lat, lng ermitteln und prüfen, ob sich diese in unserem Stadt/Land-Pfad befinden. enter image description here Unten ist ein Code zum besseren Verständnis. Zum Beispiel möchte ich, dass Benutzer in UAE einschränken. Zuerst erhalten Sie die Grenzkoordinaten der UAE und speichern diese in der Liste. Der folgende Code kann verwendet werden, um Grenzkoordinaten zu erhalten.

func mapView(_ mapView: GMSMapView, didTapAt coordinate: CLLocationCoordinate2D) { 

    self.view.endEditing(true) 

    if(isDrawing == true) 
    { 
     self.viewMap.clear() 
     path.add(coordinate) 
     let polyline = GMSPolyline(path: path) 
     polyline.strokeColor = .blue 
     polyline.strokeWidth = 3.0 
     polyline.map = self.viewMap 
     points.add(String(format:"%f,%f",coordinate.latitude,coordinate.longitude)) 
    } 

} 

Sobald Sie ganze Grenzpunkte markiert haben, dann können diese wie diese

let strPoints:String! = points.componentsJoined(by: "|") 
print(strPoints) 

speichern, die Sie in der Konsole so etwas wie dieses

"26.050692,56.086607|26.117957,54.749640|25.901079,53.631803|24.620641,51.447101|24.274502,51.575709|22.926947,52.593388|22.777518,53.985706|22.645116,55.149715|22.701870,55.227998|23.016172,55.222406|23.375945,55.401338|23.698908,55.574679|23.842193,55.524355|23.949552,55.501988|24.046609,55.787162|24.061928,56.010827|24.184407,55.982869|24.220108,55.966095|24.204809,55.837486|24.255799,55.764795|24.403556,55.848670|24.540967,55.775979|24.637573,55.809528|24.759496,55.837486|24.916802,55.820711|24.967504,55.871037|24.987778,55.960503|24.967504,56.061152|24.876227,56.072336|24.886372,55.977278|24.754418,56.066744|24.769651,56.206535|24.835637,56.234493|24.932015,56.351918|24.972573,56.379876|25.256102,57.028506|25.896649,56.732150|26.368532,56.687416|26.488706,56.268043|26.348491,55.943728|26.388570,55.233589|26.413612,54.322151|26.183019,54.350110|26.107726,54.355701|26.027361,54.361293" 

Kopieren Sie es sehen und in Ihrem Code speichern

path = GMSMutablePath() 
    points = NSMutableArray() 
    let pointsStr:String! = "26.050692,56.086607|26.117957,54.749640|25.901079,53.631803|24.620641,51.447101|24.274502,51.575709|22.926947,52.593388|22.777518,53.985706|22.645116,55.149715|22.701870,55.227998|23.016172,55.222406|23.375945,55.401338|23.698908,55.574679|23.842193,55.524355|23.949552,55.501988|24.046609,55.787162|24.061928,56.010827|24.184407,55.982869|24.220108,55.966095|24.204809,55.837486|24.255799,55.764795|24.403556,55.848670|24.540967,55.775979|24.637573,55.809528|24.759496,55.837486|24.916802,55.820711|24.967504,55.871037|24.987778,55.960503|24.967504,56.061152|24.876227,56.072336|24.886372,55.977278|24.754418,56.066744|24.769651,56.206535|24.835637,56.234493|24.932015,56.351918|24.972573,56.379876|25.256102,57.028506|25.896649,56.732150|26.368532,56.687416|26.488706,56.268043|26.348491,55.943728|26.388570,55.233589|26.413612,54.322151|26.183019,54.350110|26.107726,54.355701|26.027361,54.361293" 
    let pp = pointsStr.components(separatedBy: "|") 
    for item in pp { 

     let coor = item.components(separatedBy: ",") 
     let lat:Double! = (coor[0] as AnyObject).doubleValue 
     let lng:Double! = (coor[1] as AnyObject).doubleValue 
     let coordinate:CLLocationCoordinate2D! = CLLocationCoordinate2D(latitude: lat, longitude: lng) 
     path.add(coordinate) 
    } 

    if(self.isCoordinateInside(coordinate: CLLocationCoordinate2D(latitude: selectedPlace.lat, longitude: selectedPlace.lng)) == true) 
    { 

    } 



func isCoordinateInside(coordinate: CLLocationCoordinate2D)->Bool{ 

    if (GMSGeometryContainsLocation(coordinate, path, true) == true) 
    { 

     print("locationPoint is in polygonPath.") 
     return true 

    } 
    else 
    { 

     print("locationPoint is NOT in polygonPath.") 
     return false 

    } 
} 
0

Gehen Sie zunächst zu "Google Places API" und Sie erhalten Ihren API-Schlüssel.

Dann unten erwähnt Code Verwenden Anfrage

var url: String = 
"https://maps.googleapis.com/maps/api/place/search/json?location=\ 
(lat),\(lang)&radius=100&sensor=true&key=\(GOOGLE_API_KEY)" 

var googleRequestURL = URL(string: url) 

var request = NSMutableURLRequest(url: googleRequestURL!) 

request.httpMethod = "GET" 

request.setValue("application/json", forHTTPHeaderField: "Content- 
Type") 

ändern Sie den Radius nach Ihrem Bedarf zu erstellen. Bitte geben Sie Ihren aktuellen Standort in Lats und Longs ein.

Verwandte Themen