2013-04-19 18 views
7

Sto utilizzando l'API di Google Street View Image per visualizzare un'immagine di un indirizzo. Sebbene la maggior parte delle immagini sia incredibilmente accurata, ho notato alcune che sono dall'angolo sbagliato come una casa all'angolo in cui l'immagine proviene dalla strada laterale, non dalla strada principale. Quando controllo Google Maps, l'immagine mostrata nella parte superiore del pannello di sinistra è corretta.Perché alcune immagini di viste stradali sono dall'angolo sbagliato?

Esempio; Di seguito un'immagine che utilizza i parametri URL dal API instructions; http://maps.googleapis.com/maps/api/streetview?size=300x200&location=39.408751,-104.917738&sensor=false

enter image description here

seguito è un'immagine della stessa posizione che visualizza nel pannello di sinistra di Google Maps,

https://cbks0.google.com/cbk?output=thumbnail&cb_client=maps_sv&thumb=2&thumbfov=60&ll=39.408554,-104.917506&yaw=317.7&thumbpegman=1&w=300&h=118

enter image description here

C'è un modo per ottenere il angolo "migliore" usando l'API?

+1

Penso che tu stia chiedendo troppo. (Sii solo grato che non ci siano ubriachi nella grondaia.) –

+0

Penso che spostino tutti gli ubriachi nei garage di questo quartiere. Su una nota tecnica, ho letto che l'angolo è calcolato in base alla telecamera più vicina misurata dalle coordinate dell'indirizzo alla telecamera. In questo caso, la strada laterale deve essere leggermente più vicina ai geocoordinati dell'indirizzo. Se è vero, come fa Google Maps a sapere che l'inquadratura frontale è migliore? Forse perché è stato preso dalla strada dei dischi? – SteveO7

risposta

4

Se si conosce l'indirizzo, e un risultato TETTO geocoder è disponibile, è possibile trovare la posizione più vicina sulla strada, quindi utilizzare tale per richiedere la streetview:

http://www.geocodezip.com/v3_Streetview_lookAtB.html?snaptoroad=5175%20Buena%20Vista%20Boulevard,%20Castle%20Rock,%20CO%2080109,%20USA

(se si don' t conosce l'indirizzo, è possibile invertire la posizione geocoding per farlo come ho fatto qui)

esempio funzionante da questa domanda: Using google street view with a marker, how do I point the POV at a marker?

Working fiddle

codice funzionante frammento:

var geocoder = new google.maps.Geocoder(); 
 
var myStreetView = null; 
 
var marker = null; 
 

 
function geocodeAddress() { 
 
    var address = document.getElementById('address').value; 
 
    geocoder.geocode({ 
 
    'address': address 
 
    }, function(results, status) { 
 
    //alert (results); 
 
    if (status == google.maps.GeocoderStatus.OK) { 
 
     //alert(results[0].geometry.location); 
 
     myStreetView = new google.maps.StreetViewPanorama(document.getElementById("map_canvas")); 
 
     myStreetView.setPosition(results[0].geometry.location); 
 
     google.maps.event.addListenerOnce(myStreetView, 'status_changed', function() { 
 
     var SVstatus = myStreetView.getStatus() 
 
     document.getElementById('info').innerHTML = "Street View Status="+SVstatus; 
 
     var heading = google.maps.geometry.spherical.computeHeading(myStreetView.getLocation().latLng, results[0].geometry.location); 
 
     myStreetView.setPov({ 
 
      heading: heading, 
 
      pitch: 0 
 
     }); 
 
     setTimeout(function() { 
 
      marker = new google.maps.Marker({ 
 
      position: results[0].geometry.location, 
 
      map: myStreetView, 
 
      title: address 
 
      }); 
 
      if (marker && marker.setMap) marker.setMap(myStreetView); 
 
     }, 500); 
 
     }); 
 

 
    } else { 
 
     alert("Geocode was not successful for the following reason: " + status); 
 
    } 
 
    }); 
 
    google.maps.event.addDomListener(document.getElementById('geoBtn'), 'click', geocodeAddress); 
 
} 
 
google.maps.event.addDomListener(window, 'load', geocodeAddress);
html, 
 
body, 
 
#map_canvas { 
 
    height: 100%; 
 
    width: 100%; 
 
}
<script src="http://maps.google.com/maps/api/js?libraries=geometry"></script> 
 
<input id="address" type="text" value="5175 Buena Vista Boulevard, Castle Rock, CO 80109, USA" /> 
 
<input id="geoBtn" type="button" value="Go" /> 
 
<div id="info"></div> 
 
<div id="map_canvas"></div>

+0

La tua risposta è utile, ma sono ancora in perdita per ottenere l'immagine singola migliore, al contrario dell'immagine del cursore Streetview nel tuo esempio. Sto iniziando con un indirizzo, poi ho ricevuto il codice geografico da Google. Sulla base della documentazione di Google, il codice geografico restituito è un ROOFTOP. È divertente, quando clicco il link nella tua risposta, ottengo un'immagine divisa nel riquadro di destra, in parte dalla strada laterale e in parte forma la via anteriore più desiderabile. Se clicco su di esso e faccio scorrere a mala pena l'immagine, corregge la vista frontale. – SteveO7

4

Ho notato che anche Google sembra essere utilizzando un algoritmo diverso per visualizzare l'immagine (nel pannello di sinistra) sul suo sito e è più preciso in quanto è nella parte anteriore della posizione.

Non esiste un modo diretto per ottenere quell'angolo con la loro "API di immagini Street View", ma è possibile utilizzare l'API javascript per calcolare tale angolo e trasmetterlo all'API di immagini.

La domanda qui è come possiamo sapere quale è la parte anteriore dell'edificio ?, bene il fronte è di solito dove l'ingresso è dalla strada. Quindi, puoi usare il DirectionService per ottenere il punto di partenza per il trasporto più vicino, che di solito è la strada all'ingresso dell'edificio, utilizzando questo percorso ora puoi calcolare facilmente l'intestazione usando i loro metodi di utilità geometrica e passare questo alla tua Image API .

+0

Wow, un'altra risposta molto utile, ma io sono pigro e speravo in un modo "facile" per ottenere l'angolo migliore dall'API, diamine che ovviamente il sito di Maps ne fosse a conoscenza! Maps ha ricevuto alcuni aggiornamenti importanti ultimamente, forse alla fine metteranno gli stessi algoritmi nell'API Image di Street View. – SteveO7

+0

Sembra che abbiano fatto un passo indietro nelle loro nuove mappe di google, si ottiene la stessa angolazione (zoom peggiore) che si ottiene nell'API immagine - [https://cbks0.google.com/cbk?cb_client=maps_sv.tactile&authuser = 0 & hl = it & output = miniature & pollice = 2 & panoid = rU9xiEfU3A03ZgXck2k6pA & w = 374 & h = 75 & imbardata = 77,896,156 mila & passo = 0 & ll = 39,40871043542365, -104,91798281738517] (https://cbks0.google.com/cbk?cb_client=maps_sv.tactile&authuser=0&hl=en&output=thumbnail&thumb= 2 & panoid = rU9xiEfU3A03ZgXck2k6pA & w = 374 & h = 75 & imbardata = 77.896156 & pitch = 0 & ll = 39.40871043542365, -104.91798281738517) – manubkk

+0

Wow, è un peccato. Ho inviato un rapporto di errore per tale indirizzo e ho preso nota della regressione dalla vecchia app delle mappe. Vedremo se prenderanno nota. – SteveO7

Problemi correlati