2016-10-04 1 views
0

Ich habe bereits einen Geocode-API auf Google-Konsole erstellt. Ich habe ein Suchfeld mit der Google Autocomplete in meiner Website eingegeben und ich möchte eine bestimmte Stadt zu meinem Geocode API und integrieren sie in meine Web-App. Die stadt ist: toulouse, Land: Frankreich.Google automatische Vervollständigung zu einer bestimmten Stadt

Wenn der Kunde seine Adresse in das Suchfeld eingibt, möchte ich nur alle Adressen in der Stadt Toulouse suchen, basierend auf dem Zentrum von Toulouse mit einer Entfernung von 20 km.

Hier ist mein Code auf der Datei-basierte function.php

public function geoCoding($lat='',$lng='') 
{      
    $protocol = isset($_SERVER["https"]) ? 'https' : 'http'; 
    if ($protocol=="http"){ 
     $url = "https://maps.googleapis.com/maps/api/geocode/json?latlng=".$lat.",".$lng."&sensor=true"; 
    } else $url = "https://maps.googleapis.com/maps/api/geocode/json?latlng=".$lat.",".$lng."&sensor=true"; 

    $google_geo_api_key=getOptionA('google_geo_api_key'); 
    if (!empty($google_geo_api_key)){ 
     $url=$url."&key=".urlencode($google_geo_api_key); 
    } 

    $data = @file_get_contents($url); 
    if (!empty($data)){ 
     $result = json_decode($data,true);     
     //dump($result); 
     if (!isset($result['results'])){ 
      return false; 
     } 
     if (is_array($result['results']) && count($result['results'])>=2){ 
      $location = array(); 
      foreach ($result['results'][0]['address_components'] as $component) { 
       switch ($component['types']) { 
        case in_array('street_number', $component['types']): 
        $location['street_number'] = $component['long_name']; 
        break; 
        case in_array('route', $component['types']): 
        $location['street'] = $component['long_name']; 
        break; 
        case in_array('neighborhood', $component['types']): 
        $location['street2'] = $component['long_name']; 
        break; 
        case in_array('sublocality', $component['types']): 
        $location['sublocality'] = $component['long_name']; 
        break; 
        case in_array('locality', $component['types']): 
        $location['locality'] = $component['long_name']; 
        break; 
        case in_array('administrative_area_level_2', $component['types']): 
        $location['admin_2'] = $component['long_name']; 
        break; 
        case in_array('administrative_area_level_1', $component['types']): 
        $location['admin_1'] = $component['long_name']; 
        break; 
        case in_array('postal_code', $component['types']): 
        $location['postal_code'] = $component['long_name']; 
        break; 
        case in_array('country', $component['types']): 
        $location['country'] = $component['long_name']; 
        $location['country_code'] = $component['short_name']; 
        break; 
       } 
      }         
      return $location; 
     } 
    } 
    return false; 
} 
+0

Es gibt einen Parameter 'Radius'. - Definiert den Abstand (in Metern), innerhalb dessen die Ergebnisse zurückgegeben werden. Der maximal zulässige Radius beträgt 50 000 Meter. Beachten Sie, dass der Radius nicht enthalten sein muss, wenn rankby = Abstand (wie unter Optionale Parameter unten beschrieben) angegeben ist. Überprüfen Sie diesen Link https://developers.google.com/places/web-service/search – Stallion

+0

Ich glaube nicht, dass dies mit dem Radius-Parameter in Places API verwandt ist, der obige Code verwendet nur die Geocodierungs-API, und es ist nicht klar zu mir, was OP bedeutet mit "Google Autocomplete", aber der Code zeigt keine Spur der Verwendung der Places Autocomplete API. – miguev

Antwort

1

Ihre Beschreibung klingt wie Sie das Search Box Widget in der Maps JavaScript API Places-Bibliothek verwenden, aber Ihr Code zeigt nur die Verwendung von reverse geocoding in der Geokodierungs-API-Webdienst.

Da ich glaube, nur der ehemalige Sinn macht, werde ich wagen Sie in den folgenden Feature-Anfragen interessiert sein werden, dass Sie die automatische Vervollständigung in eine Stadt zu beschränken erlauben würde:

  • Issue 8606: Orte gebunden beschränken
  • Issue 4433: allow componentRestrictions gleichen Komponenten wie das Geocoding API Service

Vorerst zu filtern, die Optionen, die ich kenne, sind:

  • das Suchfeld bounds denen der Stadt setzen und sich auf das Widget (nicht beschränken) Vorschläge innerhalb dieser Grenzen zu bevorzugen (die Sie von Geocoding API bekommen), oder
  • Bauen Sie Ihr eigenes Widget mit AutocompleteService.getQueryPredictions() und machen Sie Ihre eigene nachträgliche Filterung, um Vorschläge zu entfernen, aber das wäre sehr schwierig, weil der Name der Stadt nicht unbedingt immer Teil des Vorschlags sein wird.
Verwandte Themen