javascript - places - title html attribute
Cómo saber si el panorama de la calle es interior o exterior. (3)
Hoy en día, cada vez más empresas utilizan la vista de la calle para mostrar apartamentos desde el interior.
Mi programa ofrece la capacidad de mostrar la vista de la calle según el negocio seleccionado. Pero no quiero mostrar dentro. Sólo al aire libre. Porque Indoors me bloquea para moverme, solo para girar 360 grados.
¿Alguien sabe cómo obtener de Street View API algún valor si voy a mostrar en interiores o exteriores?
Muchas gracias,
Estos son mis fragmentos de código hasta ahora que abren Street View según la dirección seleccionada:
function load_map_and_street_view_from_address(address) {
var geocoder = new google.maps.Geocoder();
geocoder.geocode( {
''address'': address
}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
var gps = results[0].geometry.location;
create_map_and_streetview(gps.lat(), gps.lng(), ''map_canvas'', ''pano'');
}
});
}
function create_map_and_streetview(lat, lng, map_id, street_view_id) {
var googlePos = new google.maps.LatLng(lat,lng);
addLatLng = new google.maps.LatLng(lat,lng);
var service = new google.maps.StreetViewService();
service.getPanoramaByLocation(addLatLng, 50, showPanoData);
}
function showPanoData(panoData, status) {
if (status != google.maps.StreetViewStatus.OK) {
$(''#pano'').html(''No StreetView Picture Available'').attr(''style'', ''text-align:center;font-weight:bold'').show();
return;
}
$(''#pano'').show();
var angle = computeAngle(addLatLng, panoData.location.latLng);
var panoOptions = {
position: addLatLng,
addressControl: false,
linksControl: false,
panControl: false,
zoomControlOptions: {
style: google.maps.ZoomControlStyle.SMALL
},
pov: {
heading: angle,
pitch: 10,
zoom: 1
},
enableCloseButton: true,
visible:true
};
panorama.setOptions(panoOptions);
}
function computeAngle(endLatLng, startLatLng) {
var DEGREE_PER_RADIAN = 57.2957795;
var RADIAN_PER_DEGREE = 0.017453;
var dlat = endLatLng.lat() - startLatLng.lat();
var dlng = endLatLng.lng() - startLatLng.lng();
var yaw = Math.atan2(dlng * Math.cos(endLatLng.lat() * RADIAN_PER_DEGREE), dlat)
* DEGREE_PER_RADIAN;
return wrapAngle(yaw);
}
function wrapAngle(angle) {
if (angle >= 360) {
angle -= 360;
} else if (angle < 0) {
angle += 360;
}
return angle;
};
La idea principal era obtener la ubicación de Panorama y verificar la distancia a los lugares más cercanos alrededor de 360 grados.
Aquí hay una solicitud de función que presenté con Google:
"Opción para deshabilitar vistas de la calle interior"
https://code.google.com/p/gmaps-api-issues/issues/detail?id=4831
Siéntete libre de comenzar el boleto allí para ayudarlo a llamar la atención.
(¿Es esto correcto en cuanto a la etiqueta? ... no es una respuesta real (todavía), pero parece digno de compartir aquí para que las partes interesadas puedan iniciar / rastrear el boleto)
La capacidad de filtrar las panorámicas interiores de Street View se implementó en la API de JavaScript de Google Maps hace algún tiempo.
Puede usar StreetViewService para buscar solo panoramas exteriores. En la solicitud debe especificar la fuente como exterior.
https://developers.google.com/maps/documentation/javascript/reference/3/#StreetViewSource
Eche un vistazo al siguiente código de ejemplo que muestra cómo obtener solo panoramas exteriores
var panorama;
function initialize() {
var svService = new google.maps.StreetViewService();
var panoRequest = {
location: new google.maps.LatLng(37.800953,-122.436738),
preference: google.maps.StreetViewPreference.NEAREST,
radius: 50,
source: google.maps.StreetViewSource.OUTDOOR
};
svService.getPanorama(panoRequest, function(panoData, status){
if (status === google.maps.StreetViewStatus.OK) {
panorama = new google.maps.StreetViewPanorama(
document.getElementById(''street-view''),
{
pano: panoData.location.pano,
pov: {
heading: 10,
pitch: 10
}
});
} else {
//Handle other statuses here
}
});
}
html, body {
height: 100%;
margin: 0;
padding: 0;
}
#street-view {
height: 100%;
}
<div id="street-view"></div>
<script async defer
src="https://maps.googleapis.com/maps/api/js?key=AIzaSyDztlrk_3CnzGHo7CFvLFqE_2bUKEq1JEU&callback=initialize">
</script>
¡Espero que esto ayude!
Parece que no puedo encontrar ninguna API formal para esto (tal vez en el futuro implementarán una), y no creo que pueda estar seguro de que los mosaicos interiores estarán con una descripción vacía.
Lo que encontré que funciona para mí es usar esta API: ejecute un HTTP GET en esta dirección: " http://cbk0.google.com/cbk?output=xml&ll=52.358445,4.88103 " con el ll = LONG, LAT
Esta es una API interna utilizada para encontrar una ubicación de destino pano_id. También nos brinda información sobre lo que podemos hacer con él: niveles de zoom, en qué calles estás, etc.
Me he dado cuenta de que todos los resultados de las coordenadas que tienen imágenes interiores de street view tienen scene="_number" level_id="_id"
en la etiqueta data_properties
del panorama. Y así, para cada ubicación puede ejecutar esta solicitud y buscar estos valores en las propiedades de datos del XML resultante
algunos ejemplos:
indoors:
http://cbk0.google.com/cbk?output=xml&ll=52.358445,4.88103
http://maps.google.com/cbk?output=xml&ll=32.051626,34.7613
outdoors:
http://cbk0.google.com/cbk?output=xml&ll=52.358766,4.880494
http://maps.google.com/cbk?output=xml&ll=32.07782,34.785789
Fuente: hacking google street view
Actualizar
Parece que para obtener el derecho pano_id de las empresas locales es necesario agregar &it=all
al ejemplo de solicitud:
http://cbk0.google.com/cbk?output=xml&hl=x-local&ll=34.058593,-118.240673&it=all
Este es el pano_id correcto para este lugar, puede verificarlo usando esta API
http://cbk0.google.com/cbk?output=tile&panoid=70o9Pukc2KSjO-PfeHussw&zoom=3&x=5&y=1