2013-04-19 22 views
7

Używam interfejsu Google Street View Image API do wyświetlania obrazu adresu. Chociaż większość zdjęć jest niesamowicie dokładna, zauważyłem kilka, które są pod niewłaściwym kątem, jak dom na rogu, gdzie obraz pochodzi z bocznej ulicy, a nie z pierwszej ulicy. Kiedy sprawdzam Mapy Google, obraz wyświetlany na górze lewego panelu jest poprawny.Dlaczego niektóre zdjęcia z ulicy są pod niewłaściwym kątem?

Przykład; Poniżej znajduje się obraz z parametrami adresu URL z API instructions; http://maps.googleapis.com/maps/api/streetview?size=300x200&location=39.408751,-104.917738&sensor=false

enter image description here

Poniżej znajduje się obraz w tym samym miejscu, który wyświetla w lewym panelu 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

Czy istnieje sposób, aby uzyskać "lepszy" kąt za pomocą interfejsu API?

+1

Myślę, że za dużo żądasz. (Po prostu bądźcie wdzięczni, że w rynsztoku nie ma pijaków.) –

+0

Myślę, że przenoszą wszystkich pijaków do garażów w tej okolicy. W notatce technicznej przeczytałem, że kąt jest obliczany na podstawie najbliższej kamery mierzonej od współrzędnych adresu do kamery. W tym przypadku boczna ulica musi znajdować się nieco bliżej współrzędnych geograficznych adresu. Jeśli to prawda, w jaki sposób Mapy Google wiedzą, że przednie ujęcie jest lepsze? Może dlatego, że został zabrany z ulicy rekordu? – SteveO7

Odpowiedz

4

Jeśli znasz adres, a wynik ROOFTOP geocoder jest dostępny, można znaleźć najbliższą lokalizację na drodze, a następnie używać, aby zwrócić się do StreetView:

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

(jeśli nie” t znać adres, można odwrócić Geokodując lokalizację, aby ją tak jak ja tutaj)

przykład pracę z tym pytanie: Using google street view with a marker, how do I point the POV at a marker?

Working fiddle

kod działa urywek:

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

Twoja odpowiedź jest pomocna, ale nadal nie jestem w stanie uzyskać lepszego pojedynczego obrazu, w przeciwieństwie do obrazu z suwakiem z ulicy w twoim przykładzie. Zaczynam od adresu, a następnie otrzymuję geocode od Google. W oparciu o dokumentację Google zwróconym geokodem jest ROOFTOP. To zabawne, gdy kliknę link w Twojej odpowiedzi, otrzymuję podzielony obraz w prawym okienku, częściowo z bocznej ulicy i częściowo z bardziej pożądanej frontowej ulicy. Jeśli kliknę i ledwo przesuniemy obraz, poprawi się on do widoku z przodu. – SteveO7

4

I zostały zauważyć, że zbyt, Google wydaje się być za pomocą innego algorytmu do wyświetlania tego obrazu (w lewym panelu) na swoim miejscu jest bardziej dokładny, jak na początku zdjęcia.

Nie ma bezpośredniego sposobu na uzyskanie tego kąta dzięki "Street View Image API", ale można użyć interfejsu API javascript, aby obliczyć ten kąt i przekazać go do interfejsu Image API.

Pytanie, w jaki sposób możemy dowiedzieć się, co jest przed budynkiem ?, dobrze z przodu jest zwykle tam, gdzie wejście jest od ulicy. Tak więc możesz użyć usługi DirectionService, aby uzyskać najbliższą lokalizację początkową transportu, która zwykle jest drogą przy wejściu do budynku, korzystając z tej lokalizacji, możesz teraz łatwo obliczyć nagłówek przy użyciu metod narzędziowych geometrii i przekazać to do swojego Image API .

+0

Wow, kolejna bardzo pomocna odpowiedź, ale jestem leniwy i liczyłem na "łatwy" sposób, aby uzyskać lepszy kąt od API, heck na stronie Mapy oczywiście wie o tym! Mapy ostatnio zdobyły wiele ważnych aktualizacji, może ostatecznie zastosują te same algorytmy w interfejsie Street View Image API. – SteveO7

+0

Wydaje się, że cofnęli się o krok w swoich nowych mapach google, masz ten sam kąt (gorszy zoom), który dostajesz w interfejsie Image API - [https://cbks0.google.com/cbk?cb_client=maps_sv.tactile&authuser = 0 & hl = en & output = thumbnail & thumb = 2 & panoid = rU9xiEfU3A03ZgXck2k6pA & w = 374 & h = 75 & yaw = 77.896156 & ton = 0 & ll = 39,40871043542365, -104,91998281738517] (https://cbks0.google.com/cbk?cb_client=maps_sv.tactile&authuser=0&hl=en&output=thumbi&thumb= 2 & panoid = rU9xiEfU3A03ZgXck2k6pA & w = 374 & h = 75 & yaw = 77.896156 i tonacja = 0 & ll = 39,40871043542365, -104,9, 98 81738517) – manubkk

+0

Wow, to jest bummer. Przesłałem raport o błędzie dla tego adresu i odnotowałem regresję ze starej aplikacji map. Zobaczymy, czy zauważą. – SteveO7

Powiązane problemy