11

Goal: voglio avere una funzione di ricerca personalizzato (geocode) ed essere in grado di elencare e fare clic su ogni risultato e visualizzarlo sulla mappa.Google Maps API v3 - Geocoder risultati questione con limiti

Cercasi: Regolare mappa limiti/livello di zoom conseguenza, ad esempio la ricerca di "MA, Stati Uniti d'America" ​​dovrebbe ingrandire la mappa per farmi vedere tutto lo stato del Massachusetts, mentre la ricerca di "Boston, MA, Stati Uniti d'America" ​​dovrebbe zoom su l'area di Boston. Quando si elencano più risultati, lo stesso dovrebbe valere quando si fa clic su un risultato.

: È possibile utilizzare l'oggetto geometry.bounds con fitBounds, ma alcuni risultati ottenuti con il geocoder non hanno questo oggetto geometry.bounds.

Un esempio veloce: la ricerca di "Boston" restituisce

Boston, MA, USA
Boston, MA, USA
Boston, KY, USA
Boston, GA 31626, Stati Uniti d'America
Boston, Salem , VA 22713, USA
Boston, NY 14025, USA

Sia "Boston, KY" che "Boston NY 14025" non hanno limiti.

Domanda: C'è un modo affidabile per visualizzare qualsiasi risultato geocodificatore su una mappa al livello di zoom appropriato?

In questo momento sto usando qualcosa di simile, ma trovo questo brutto e non risolve il problema dello zoom

if (results[0].geometry.bounds) { 

    map.fitBounds(results[0].geometry.bounds); 

} else { 

    map.setCenter(results[0].geometry.location); 
    // eventually set zoom here to some middle-range value (ugly) 
} 
+0

Avete provato a utilizzare l'oggetto 'viewport'. – andresf

+1

Quali valori dovrei cercare nell'oggetto viewport? Non sembra che vi siano dei limiti restituiti. Grazie. – MrUpsidown

risposta

15

Giusto. Dopo aver provato entrambi i metodi e test, emerge che:

  1. l'oggetto geometry.bounds è "Opzionalmente restituito", come il dottore dice
  2. noi non sappiamo esattamente ciò che l'oggetto geometry.bounds si basa su
  3. geometry.bounds "potrebbe non corrispondere al viewport consigliato" e spesso non
  4. geometry.bounds restituisce un quadrato o un rettangolo di qualsiasi dimensione e forma mentre le funzioni di visualizzazione restituiscono sempre un rettangolo con le stesse proporzioni (attorno a 1,43), indipendentemente dalle dimensioni del contenitore della mappa sono, per quanto ho provato.

Di seguito è riportato l'esempio di San Francisco, CA, menzionato nel doc.
In rosso utilizzando geometry.bounds e in blu utilizzando le funzioni di visualizzazione.

San Francisco, CA

La soluzione è abbastanza semplice ed è affidabile.

var resultBounds = new google.maps.LatLngBounds(

    results[0].geometry.viewport.getSouthWest(), 
    results[0].geometry.viewport.getNorthEast() 
); 

map.fitBounds(resultBounds); 
+0

Sai se queste proprietà sono ancora valide? Vale a dire le proporzioni sul rapporto aspetto sul viewport? Anche fonte di informazioni? –

+0

Non riesci a testarlo? Non penso di aver avuto un violino per quello. – MrUpsidown

1

L'oggetto finestra ha le informazioni necessarie per fare un oggetto limiti. Qualcosa di simile a questo:

var bounds = new google.maps.LatLngBounds(
    new google.maps.LatLng(results[0].geometry.viewport.southwest.lat, results[0].geometry.viewport.southwest.lng), 
    new google.maps.LatLng(results[0].geometry.viewport.northeast.lat, results[0].geometry.viewport.northeast.lng) 
); 

quindi è possibile utilizzare fitBounds su quell'oggetto nuovi limiti, proprio come si sta facendo per l'oggetto limiti restituito. Come questo:

map.fitBounds(bounds); 
+0

Lo testerò tra un minuto, ma, se capisco bene, tutti i risultati avranno questi 4 valori di viewport. Quindi, se hanno, perché alcuni risultati verranno forniti con l'oggetto geometry.bounds e altri no? Strano, penso ... – MrUpsidown

+0

Non sono del tutto sicuro, ma ecco la spiegazione di Google presa da http://code.google.com/apis/maps/documentation/geocoding/#Results: "i limiti (facoltativamente restituiti) memorizzano il bounding box che può contenere completamente il risultato restituito.Si noti che questi limiti potrebbero non corrispondere alla viewport consigliata. (Ad esempio, San Francisco include le isole Farallon, che tecnicamente fanno parte della città, ma probabilmente non dovrebbero essere restituite nella finestra.) " –

+0

Mmhh ... interessante! Ho intenzione di provare in entrambi i modi, disegnare alcuni rettangoli sulla mia mappa, controllare le eventuali differenze e riportare qui. – MrUpsidown

Problemi correlati