google maps - tutorial - Obteniendo el POV para Google StreetView API
google street view (6)
El latLng de la dirección requerida y el latLng de la ubicación del panorama (la posición del automóvil de Street View desde donde se toman las imágenes) no son lo mismo. Hasta donde yo sé, la API no establece el encabezado en la dirección correcta de la dirección latlng, tendrá que configurarlo usted mismo.
Así es como lo hice, utilicé el StreetViewService para encontrar la toma panorámica más cercana disponible y luego calculé el encabezado Pov usando el método computeHeading here
Actualmente estoy usando el incrustador Panorama de Google Street View y quiero obtener el POV (más específicamente el encabezado) para una dirección particular.
Google hace esto a través de maps.google.com , donde, dada una dirección, lo llevará a la vista de la calle y se verá en la dirección correcta. Sin embargo, parece que no puedo encontrar / encontrar documentación para encontrar el rumbo del POV a través de la API.
Puedo hacer que la incrustación de Street View funcione bien con un LatLng
, pero la cámara por lo general está orientada en la dirección incorrecta. ¿Algunas ideas?
editar : claridad
Quiero configurar el punto de vista, pero no sé qué valor para configurarlo ...
Encontré esta página muy útil, gracias chicos. Aún necesitaba reconstruir la solución completa de esta y algunas fuentes, así que pensé que la incluiría aquí para usted.
<script>
var panorama;
function loadStreetView() {
var _lat = your_lat;
var _lng = your_long;
var target = new google.maps.LatLng(_lat,_lng);
var sv = new google.maps.StreetViewService();
panorama = new google.maps.StreetViewPanorama(document.getElementById(''hero-street-view''));
var pano = sv.getPanoramaByLocation(target, 50, function(result, status) {
if (status == google.maps.StreetViewStatus.OK) {
var heading = google.maps.geometry.spherical.computeHeading(result.location.latLng, target);
panorama.setPosition(result.location.latLng);
panorama.setPov({
heading: heading,
pitch: 0,
zoom: 1
});
panorama.setVisible(true);
}
else {
console.log("Cannot find a street view for this property.");
return;
}
});
}
</script>
<script async defer
src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=geometry&callback=loadStreetView">
</script>
Justo lo que dijo manubkk, estoy usando el siguiente código para obtener el rumbo SV correcto
var $this = $(this),
_lat = $this.data("lat"),
_lng = $this.data("lng"),
streetViewMaxDistance = 100;
var point = new google.maps.LatLng(_lat,_lng);
var streetViewService = new google.maps.StreetViewService();
var panorama = spaces.map.map.getStreetView();
// We get the map''s default panorama and set up some defaults.
// Note that we don''t yet set it visible.
//panorama = spaces.map.map.getStreetView();
streetViewService.getPanoramaByLocation(point, streetViewMaxDistance, function (streetViewPanoramaData, status) {
if(status === google.maps.StreetViewStatus.OK){
var oldPoint = point;
point = streetViewPanoramaData.location.latLng;
var heading = google.maps.geometry.spherical.computeHeading(point,oldPoint);
panorama.setPosition(point);
panorama.setPov({
heading: heading,
zoom: 1,
pitch: 0
});
panorama.setVisible(true);
}else{
$this.text("Sorry! Street View is not available.");
// no street view available in this range, or some error occurred
}
});
La razón de esto es que el POV de la vista de la calle es, de forma predeterminada, la dirección que el camión estaba mirando cuando se tomó la imagen (vaya figura). Necesita obtener la ubicación del camión y la ubicación de la casa y calcular un "rumbo" desde el primer lugar hasta el segundo:
// adrloc=target address
// svwloc=street-view truck location
svwService.getPanoramaByLocation(adrloc,svwdst,function(dta,sts) {
if(sts==google.maps.StreetViewStatus.OK) {
var svwloc=dta.location.latLng;
var svwhdg=google.maps.geometry.spherical.computeHeading(svwloc,adrloc);
var svwmap=avwMap.getStreetView();
svwmap.setPosition(svwloc);
svwmap.setPov({ heading: svwhdg, pitch: 0 });
svwMarker=new google.maps.Marker({ map:svwmap, position: adrloc });
svwmap.setVisible(true);
}
else {
...
}
Otro truco / trampa al usar street view es que necesita obtener la vista de calle más cercana a su ubicación de dirección llamando repetidamente getPanoramaByLocation
con una distancia creciente hasta que tenga éxito o alcance una distancia máxima. Resuelvo esto usando este código:
var SVW_MAX=100; // maximum street-view distance in meters
var SVW_INC=10; // increment street-view distance in meters
var svwService=new google.maps.StreetViewService(); // street view service
var svwMarker=null; // street view marker
// NOTE: avwMap is the aerial view map, code not shown
...
resolveStreetView(avwMap.getCenter(),SVW_INC);
...
var resolveStreetView=function(adrloc,svwdst) {
svwService.getPanoramaByLocation(adrloc,svwdst,function(dta,sts) {
if(sts==google.maps.StreetViewStatus.OK) {
var svwloc=dta.location.latLng;
var svwhdg=google.maps.geometry.spherical.computeHeading(svwloc,adrloc);
var svwmap=avwMap.getStreetView();
svwmap.setPosition(svwloc);
svwmap.setPov({ heading: svwhdg, pitch: 0 });
svwMarker=new google.maps.Marker({ map:svwmap, position: adrloc });
svwmap.setVisible(true);
}
else if(svwdst<SVW_MAX) {
resolveStreetView(adrloc,svwdst+SVW_INC);
}
});
}
No puedo decir si quieres obtener o configurar POV
para establecer, siga las instrucciones aquí: http://code.google.com/apis/maps/documentation/javascript/services.html#StreetViewPanoramas
var panoramaOptions = {
position: fenway,
pov: {
heading: 34,
pitch: 10,
zoom: 1
}
};
Llegar:
alert( panoramaOptions.pov.heading );
Si desea establecer el punto de vista hacia la calle o 90 grados a la derecha / izquierda con respecto a esa calle, he implementado una solución.
Problema del encabezado de Google Street View
Espero que le ayudará.