5

Esiste un modo per richiedere i dati panoramici di Google StreetView sulla strada principale anziché i dati panoramici del vicolo cieco per una determinata posizione (latitudine/longitudine)?Richiedi strada principale/porta a porta StreetView panorami invece di vicoli dall'API

Sto utilizzando l'API JavaScript di Google Maps per recuperare un panorama di una strada da un indirizzo di casa fornito dai nostri utenti. Funziona abbastanza bene per la maggior parte degli indirizzi che ho provato, ma sto notando che molte proprietà in California hanno anche viste stradali per vicoli, e le cuciture API devono essere costantemente restituire il panorama vicolo al posto della strada principale (fronte di proprietà) panorama.

Non voglio mostrare all'utente un panorama posteriore della loro casa, ma invece il panorama stradale principale. Se cerco lo stesso indirizzo su maps.google.com, vedo la parte anteriore della casa, ma quando richiedo lo stesso indirizzo tramite l'API, ottengo il vicolo posteriore.

Il processo Attualmente sto usando è:

  1. indirizzo Geocode
  2. Prendi panorama data la posizione geocode (latitudine/longitudine)
  3. Compute voce e la visualizzazione panoramica a pagina

Indirizzo test:

  1. 325 S Peck Dr, Beverly Hills, CA, Stati Uniti d'America, 90212
  2. 333 S Rodeo Dr, Beverly Hills, CA, Stati Uniti d'America, 90212

Tutte le idee o suggerimenti sarebbe molto apprezzato. Grazie!

+2

Vuoi dire come questo: [325 S Peck Dr, Beverly Hills, CA, Stati Uniti d'America, 90212] (http://www.geocodezip.com/v3_StreetView_lookAtB.html?snaptoroad=325%20S%20Peck%20Dr, % 20everamente% 20Hills,% 20CA,% 20USA,% 2090212) e questo: [333 S Rodeo Dr, Beverly Hills, CA, USA, 90212] (http://www.geocodezip.com/v3_StreetView_lookAtB.html?snaptoroad=333 % 20S% 20Riodeo% 20Dr,% 20Beventemente% 20Hills,% 20CA,% 20USA,% 2090212) – geocodezip

+0

Oh wow !! Esattamente come quello. Brillante!! – dbrown428

+0

@geocodezip Sto utilizzando l'API di completamento automatico di Places, quindi ho già un oggetto posto quando l'utente seleziona l'opzione di completamento automatico desiderata. C'è qualcosa che posso fare solo con l'oggetto Place senza dover chiamare un'altra API?Attualmente sto ottenendo le coordinate sul tetto 'autocomplete.getPlace(). Geometry.location'. –

risposta

5

Utilizzare il servizio di indicazioni stradali per ottenere indicazioni stradali dall'indirizzo desiderato. Utilizzare tale posizione invece del risultato del geocoder per la posizione della vista stradale. Usa il risultato del geocoder (si spera che sia un risultato di accuratezza ROOFTOP) per il posto dove guardare "a".

related question: Facing the targeted building with Google StreetView Esempi:

frammento di codice:

var sv = new google.maps.StreetViewService(); 
 
var geocoder = new google.maps.Geocoder(); 
 
var directionsService = new google.maps.DirectionsService(); 
 
var panorama; 
 
var address = "333 S Rodeo Dr, Beverly Hills, CA, USA, 90212"; 
 
var myLatLng; 
 

 
function initialize() { 
 

 
    panorama = new google.maps.StreetViewPanorama(document.getElementById("pano")); 
 

 
    geocoder.geocode({ 
 
    'address': address 
 
    }, function(results, status) { 
 
    if (status == google.maps.GeocoderStatus.OK) { 
 
     myLatLng = results[0].geometry.location; 
 

 
     // find a Streetview location on the road 
 
     var request = { 
 
     origin: address, 
 
     destination: address, 
 
     travelMode: google.maps.DirectionsTravelMode.DRIVING 
 
     }; 
 
     directionsService.route(request, directionsCallback); 
 
    } else { 
 
     alert("Geocode was not successful for the following reason: " + status); 
 
    } 
 
    }); 
 
} 
 
google.maps.event.addDomListener(window, 'load', initialize); 
 

 
function processSVData(data, status) { 
 
    if (status == google.maps.StreetViewStatus.OK) { 
 

 
    panorama.setPano(data.location.pano); 
 

 
    var heading = google.maps.geometry.spherical.computeHeading(data.location.latLng, myLatLng); 
 
    panorama.setPov({ 
 
     heading: heading, 
 
     pitch: 0, 
 
     zoom: 1 
 
    }); 
 
    panorama.setVisible(true); 
 

 
    } else { 
 
    alert("Street View data not found for this location."); 
 
    } 
 
} 
 

 
function directionsCallback(response, status) { 
 
    if (status == google.maps.DirectionsStatus.OK) { 
 
    var latlng = response.routes[0].legs[0].start_location; 
 
    sv.getPanoramaByLocation(latlng, 50, processSVData); 
 
    } else { 
 
    alert("Directions service not successfull for the following reason:" + status); 
 
    } 
 
}
<script src="https://maps.googleapis.com/maps/api/js?libraries=geometry"></script> 
 
<div id="pano" style="width: 425px; height: 400px;float:left"></div>

+0

Basta modificare il mio codice per utilizzare il servizio di indicazioni stradali. Grazie per aver incluso anche uno snippet di codice. Stupefacente! Ti risponderò tra poco. :) – dbrown428

+0

Il tuo suggerimento ha funzionato perfettamente. Grazie!!! Ho notato nel tuo frammento di codice la funzione "geocoderCallback" e "var berkeley" sono entrambi inutilizzati e possono probabilmente essere rimossi per maggiore chiarezza. Apprezzo molto che tu abbia dedicato del tempo per pubblicare il tuo suggerimento e il codice di esempio di lavoro. :) – dbrown428

+0

@geocodezip Sto utilizzando l'API di completamento automatico di Places, quindi ho già un oggetto posto quando l'utente seleziona l'opzione di completamento automatico desiderata. C'è qualcosa che posso fare solo con l'oggetto Place senza dover chiamare un'altra API? Attualmente sto ottenendo le coordinate sul tetto 'autocomplete.getPlace(). Geometry.location'. –