2010-04-20 7 views
16

Sto passando le variabili lat e lng e visualizzo la vista di google sreet in un div. Il problema è che quando StreetView non è visualizzabile, non viene visualizzato nulla. Vorrei verificare se c'è una streetview per un dato lat and lng e visualizzare un messaggio. Ecco il mio codice:Come verificare se Google Street View è disponibile e visualizzare il messaggio?

var myPano = new GStreetviewPanorama(document.getElementById("street2"), panoOpts); 
var location = new GLatLng(lat,lng) 
myPano.setLocationAndPOV(location); 

forse dovrei usare qualcosa come: Event.addListener(myPano, "error", errorMessage());

Tutte le idee?

+0

La risposta accettata dovrebbe essere cambiata! –

risposta

35

In v3 questo ha cambiato un po '. Controlla la documentazione all'indirizzo http://code.google.com/apis/maps/documentation/javascript/reference.html#StreetViewService

Il codice aggiornato è:

var streetViewService = new google.maps.StreetViewService(); 
var STREETVIEW_MAX_DISTANCE = 100; 
var latLng = new google.maps.LatLng(40.7140, -74.0062); 
streetViewService.getPanoramaByLocation(latLng, STREETVIEW_MAX_DISTANCE, function (streetViewPanoramaData, status) { 
    if (status === google.maps.StreetViewStatus.OK) { 
     // ok 
    } else { 
     // no street view available in this range, or some error occurred 
    } 
}); 
+0

Questo è stato un aiuto fantastico per me. Grazie mille!!! – jeffkee

+0

Ricorda che 'getPanoramaByLocation' è asincrono. Significa che tutto ciò che vuoi fare come risultato del controllo deve entrare nella funzione di richiamata. – hitautodestruct

+0

Perfetto, grazie – AhammadaliPK

17

Si consiglia di controllare il seguente riferimento:

Determinare se una strada supporta Street View mediante ispezione visiva della GStreetviewOverlay spesso non è fattibile o desiderabile dal la prospettiva di un utente. Per questo motivo, l'API fornisce un servizio che richiede e recupera programmaticamente i dati di Street View. Questo servizio è facilitato attraverso l'uso dell'oggetto GStreetviewClient.

Fondamentalmente si può utilizzare il metodo della classe GStreetviewClient, che restituirà un GLatLng del punto più vicino in cui vista stradale è disponibile getNearestPanoramaLatLng(). È quindi possibile utilizzare il metodo distanceFrom() per verificare se il punto di vista stradale più vicino si trova entro una certa soglia dal punto di origine.

Ecco un esempio completo, che a mio avviso dovrebbe essere autoesplicativo:

<!DOCTYPE html> 
<html> 
<head> 
    <meta http-equiv="content-type" content="text/html; charset=UTF-8"/> 
    <title>Google Maps API - Street View Availability</title> 
    <script src="http://maps.google.com/maps?file=api&amp;v=2&amp;sensor=false" 
      type="text/javascript"></script> 
    </head> 
    <body> 
    <script type="text/javascript"> 
     var testPoint = new GLatLng(40.7140, -74.0062); // Broadway, New York 
     var svClient = new GStreetviewClient(); 

     svClient.getNearestPanoramaLatLng(testPoint, function (nearest) { 
      if ((nearest !== null) && (testPoint.distanceFrom(nearest) <= 100)) { 
      alert('Street View Available');    // Within 100 meters 
      } 
      else { 
      alert('Street View Noet Available');  // Not within 100 meters 
      } 
     }); 
    </script> 
    </body> 
</html> 
+0

Davvero bello, grazie mille! – Vonder

+2

Questa risposta è obsoleta. Vedi la risposta V3 [e i documenti] (http://code.google.com/apis/maps/documentation/javascript/reference.html#StreetViewService) – hitautodestruct

0

aggiornamento per Google Maps API JavaScript v3.25 +: In v3.25 (versione corrente) e v3.26 (corrente sperimentale versione), getPanoramaByLocation() è ancora disponibile ma not documented anymore.

@ Arthur-Clemens di risposta accettata funziona ancora, ma utilizzare getPanorama() con un StreetViewLocationRequest, invece, se si desidera una migliore compatibilità:

var gstService = new google.maps.StreetViewService(); 

gstService.getPanorama({ 
    location: new google.maps.LatLng(40.7140, -74.0062), 
    source: google.maps.StreetViewSource.OUTDOOR 
}, function (data, status) { 
    if (status === google.maps.StreetViewStatus.OK) { 
     // OK 
    } else { 
     // error or no results 
    } 
}); 

Ometti source nel StreetViewLocationRequest se non si desidera che la ricerca panorama a essere limitato a quelli esterni.

Problemi correlati