2014-10-29 11 views
7

Ho una casella di ricerca l'indirizzo utilizzando la biblioteca Google map completamento automatico:Google map pone getPlace API() restituire solo attributo nome per alcuni indirizzi

var autocompleter = new google.maps.places.Autocomplete(item); 

C'è un'occasione strano che un indirizzo restituisce solo un attributo name :

Object {name: "138 Manukau Road, Pukekohe, New Zealand"} 

Ma altri indirizzi stanno dando più dati, come ad esempio:

Object {address_components: Array[7], adr_address: "<span class="street-address">430 Queen St</span>, …n>, <span class="country-name">New Zealand</span>", formatted_address: "430 Queen St, Auckland, Auckland 1010, New Zealand", geometry: Object, icon: "http://maps.gstatic.com/mapfiles/place_api/icons/geocode-71.png"…}address_components: Array[7]adr_address: "<span class="street-address">430 Queen St</span>, <span class="extended-address">Auckland</span>, <span class="locality">Auckland</span> <span class="postal-code">1010</span>, <span class="country-name">New Zealand</span>"formatted_address: "430 Queen St, Auckland, Auckland 1010, New Zealand"geometry: Objecthtml_attributions: Array[0]icon: "http://maps.gstatic.com/mapfiles/place_api/icons/geocode-71.png"id: "00fce9b1c43ac960068949cbf32eecb587b0b020"name: "430 Queen St"place_id: "ChIJQfHW8OVHDW0RyHgQRLy8fKc"reference: "CqQBlgAAAIDnkWNQ4cmU624FV6l_bAxmI27czZoytmzrrEWVaXgR5LcZuFqt1cL3WIMzoWhmZNhftRzhLUVwpFjqmw3qwKIqugj02HrvU5x6PtUvepPNPV-08pin_PvRU-__mMMH3N2vILIOLM_AnYFMqNG5MArF4ChZXJxZj6vk7PI3ORJe1W6QjIXoPgesL379E4WUCjrZ0fjv3KgqzB-G4f-8A5MSEN5S47-QZqkY5sl37cIQFWQaFLg4InSVLpYGg8n1gGO958TcA4UK"scope: "GOOGLE"types: Array[1]url: "https://maps.google.com/maps/place?q=430+Queen+St,+Auckland,+Auckland+1010,+New+Zealand&ftid=0x6d0d47e5f0d6f141:0xa77cbcbc441078c8"vicinity: "Auckland"__proto__: Object 

Ho trovato uno similar issue sollevato da qualcuno nel 2012 e sembra che non sia stato visitato.

+0

Il codice funziona sul 99% di posizioni. Tuttavia, non funziona in modo coerente su un determinato sottoinsieme di destinazioni.Silver Peak è uno, El Paso TX è un altro. Se eseguo console.log sull'oggetto google go, ecco i risultati: Oggetto {nome: "Silver Peak, NV, Stati Uniti"} – CHawk

risposta

2

Sorprendentemente lo stesso indirizzo che ora restituisce i dati corretti, Google deve osservare questi errori e correggerli il prima possibile.

1

Forse il servizio google non è in grado di geocodificare il tuo indirizzo e restituire solo il nome dell'indirizzo trovato. Il motivo potrebbe essere che il servizio non ha dati aggiuntivi da fornire per tali indirizzi. Si può solo non mostrare quelli indirizzo incompleto per l'utente o cercare di geocoding che l'indirizzo da un altro servizio come OSM Geocoder http://wiki.openstreetmap.org/wiki/Nominatim

+0

Google a volte restituisce dati per questi indirizzi, quindi so che è disponibile. Questi ID luogo provengono da un risultato di completamento automatico di Google, come potrei essere in grado di filtrarli all'utente? – CHawk

+0

È possibile eseguire questa operazione modificando il codice sorgente se è possibile oppure è possibile associare i propri dati di reqiest geocoder a diversi servizi di geocoder. Oppure puoi anche creare il tuo servizio di geocoder con i tuoi scopi usando PostgreSQL/postGIS per esempio. Magari arrivi alla massima richiesta e non ti mando l'intero dato. –

1

Da Google Maps Autocomplete Reference:

restituisce i dettagli del POI selezionato dall'utente se i dettagli sono stati recuperati . In caso contrario, restituisce un oggetto Punto stub, con la proprietà nome impostata sul valore corrente del campo di input.

Quindi la risposta è che il metodo getPlace fallisce solo in determinati luoghi. Non sei sicuro di come risolvere questo problema, ma ci avvicini di un passo alla risposta.

MODIFICA: FISSO!

Per la mia app, sto caricando più librerie per google maps (geometrie e luoghi). Commutare l'ordine di caricamento delle librerie ha risolto il problema e non so perché.

Cambio:

maps.googleapis.com/maps/api/js?v=3&key=[KEY]&libraries=geometry,places 

a

maps.googleapis.com/maps/api/js?v=3&key=[KEY]&libraries=places,geometry 
3

Questo problema stava accadendo in modo intermittente per me e di solito di punto in bianco.

Si scopre che se si ottiene un risultato da Completamento automatico con solo una proprietà nome, è possibile utilizzare google.maps.places.AutocompleteService per completare il processo.

Ad esempio, chiamare questa se si ottiene solo un nome indietro (invio l'elemento di input a el)

 function getPlace(result, el, callback) { 
      var autocompleteService = new google.maps.places.AutocompleteService(); 
      if (result.name.length > 0) { 
       var d = { input: result.name, offset: result.name.length }; 
       autocompleteService.getPlacePredictions(d, function (list, status) { 
        if (list == null || list.length == 0) callback(null); 

        var placesService = new google.maps.places.PlacesService(el); 
        var ref = { 'reference': list[0].reference } 

        placesService.getDetails(ref, function (detailsResult, placesServiceStatus) { 
         if (placesServiceStatus == google.maps.GeocoderStatus.OK) { 
          callback(detailsResult); 
         } 
         else { 
          callback(null); 
         } 
        }); 
       }); 
      } 
     } 

Questo mi ha aiutato molto http://plnkr.co/edit/GF3nM3XfYX9El2w11pGo?p=preview

+0

Fwiw, questo funziona bene in JS di serie, ma è un po 'problematico in Typescript. I documenti (https://developers.google.com/maps/documentation/javascript/reference#PlacesService) mostrano che PlacesService.getDetails dovrebbe aspettarsi una PlaceDetailsRequest, ma tale interfaccia non ha "riferimento" su di essa. Non sei sicuro di come rendere felice TS. – leff

+0

Ok, per Typescript è possibile aggirare il fatto che 'reference' come opzione per' getDetails() 'non è documentato. Non è grandioso, ma sembra 'const ref = {'reference': list [0] .reference}' – leff

Problemi correlati