2013-02-10 14 views
14

Oggi un numero sempre maggiore di aziende utilizza la visualizzazione stradale per mostrare gli appartamenti da interni.Come sapere se il panorama di una strada è all'interno o all'esterno

Il mio programma fornisce la possibilità di mostrare la vista stradale in base all'attività selezionata. Ma non voglio mostrare in casa. Solo all'aperto. Perché Indoors mi impedisce di spostarmi, solo per girare a 360 gradi.

Qualcuno sa come recuperare dall'API di Street View un qualche valore se sto per mostrare in interni o all'aperto?

La ringrazio molto,

Questa è la mia frammenti di codice finora apribili vista stradale secondo l'indirizzo selezionato:

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; 
}; 

L'idea principale è stato quello di ottenere la posizione Panorama e verificare la distanza posti più vicini intorno a 360 gradi.

+1

Sembra che richieste simili siano state presentate come bug/miglioramenti: http://code.google.com/p/gmaps-api-issues/issues/list? can = 2 & q = indoor & colspec = ID + Tipo + Status + Introdotto + Fisso + Riepilogo + Stelle + ApiType + Interno e celle = tessere – JSuar

+2

Non sto postando questa risposta come può cambiare in qualsiasi giorno, ma per ora ho scoperto che ogni proprietà di panorama.links ha una proprietà description (contenente il nome della via) se la posizione panoramica è esterna ed è vuota se è all'interno, quindi in base a questo è possibile verificare se ' (panorama.links.length === 0 || panorama.links [0] .description == "") ', dovrebbe restituire true se in ambienti chiusi. Devo aggiungere che non l'ho testato in modo estensivo, quindi non sono sicuro che manterrà. E credo che questo cambierà presto – yoelp

+0

Grazie, fammi testare la tua strada –

risposta

9

Non riesco a trovare alcuna API formale per questo (forse in futuro ne implementeranno una), e non penso che si possa essere sicuri che le tessere interne saranno con una descrizione vuota.

Quello che ho trovato a lavorare per me sta utilizzando questa API: Eseguire un HTTP GET a questo indirizzo: "http://cbk0.google.com/cbk?output=xml&ll=52.358445,4.88103" con il ll = LONG, LAT

Si tratta di un'API interna utilizzato per trovare un bersaglio posizione pano_id. Ci dà anche alcune informazioni su cosa possiamo fare con esso: livelli di zoom, su quali strade ci si trova, ecc.

Ho notato che tutti i risultati per le coordinate che hanno immagini di Street View al coperto, hanno scene="_number" level_id="_id" in il tag data_properties del panorama. E così, per ogni luogo è possibile eseguire questa richiesta e cercare questi valori nelle data_properties del XML risultato

alcuni esempi:

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 

Fonte: Hacking google street view

Aggiornamento

Sembra che per ottenere le aziende locali a destra pano_id è necessario aggiungere &it=all alla richiesta esempio:

http://cbk0.google.com/cbk?output=xml&hl=x-local&ll=34.058593,-118.240673&it=all 

questo il il pano_id giusto per questo luogo, è possibile verificare utilizzando questa API

http://cbk0.google.com/cbk?output=tile&panoid=70o9Pukc2KSjO-PfeHussw&zoom=3&x=5&y=1 
+0

Se durante i prossimi 2 giorni - nessuna altra scelta, 50 punti la tua, grazie –

+0

Ottimo compagno di lavoro, :) grazie! –

2

Ecco una richiesta di funzionalità ho presentato con Google:
"Opzione per disabilitare vedute interne di strada"
https://code.google.com/p/gmaps-api-issues/issues/detail?id=4831

Sentitevi liberi di recitare il biglietto lì per aiutarlo a ottenere una certa attenzione

(è questo Etichettatrici OK saggio? ... non è una vera risposta (ancora), ma sembra degno di condividere qui così le parti interessate possono star/rintracciare il biglietto)

+0

Sì, questa è una buona informazione. Fastidiosa caratteristica mancante, biglietto con protagonista. Spero che abbia un po 'di attenzione. – mahalie

Problemi correlati