2013-02-10 9 views
14

Heute nutzen immer mehr Unternehmen Street View, um Wohnungen von innen zu zeigen.Woher weiß man, ob Street View Panorama drinnen oder draußen ist?

Mein Programm bietet die Möglichkeit, die Straßenansicht entsprechend dem ausgewählten Geschäft anzuzeigen. Aber ich möchte nicht drinnen zeigen. Nur im Freien. Weil Drinnen mich blockiert, nur um 360 Grad zu drehen.

Kann jemand von Street View API etwas Wert holen, wenn ich drinnen oder draußen zeigen werde?

Vielen Dank,

Das ist mein Code-Schnipsel ist so weit, dass freie Aussicht Straße gewählte Adresse nach:

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

Die Hauptidee Panorama Lage zu bekommen war, und überprüfen Sie Abstand zu nächstgelegene Orte um 360 Grad.

+1

Sieht aus, als wären ähnliche Anfragen als Bugs/Verbesserungen eingereicht worden: http://code.google.com/p/gmaps-api-Probleme/Probleme/Liste? Kann = 2 & q = indoor & colspec = ID + Typ + Status + Eingeführt + Fixed + Zusammenfassung + Sterne + ApiType + Interne & Zellen = Kacheln – JSuar

+2

Ich poste dies nicht als Antwort als Es kann sich jeden Tag ändern, aber für den Moment habe ich festgestellt, dass jede Eigenschaft von panorama.links eine Beschreibungseigenschaft (mit dem Straßennamen) hat, wenn der Panorama-Ort im Freien ist und leer ist, wenn er drinnen ist (panorama.links.length === 0 || panorama.links [0] .description == ""), sollte es im Innenbereich "true" ergeben. Ich sollte hinzufügen, dass ich es nicht ausgiebig getestet habe, so bin ich nicht sicher, dass es halten wird. Und ich glaube, das wird sich bald ändern – yoelp

+0

Danke, lass mich deinen Weg testen –

Antwort

9

Ich kann anscheinend keine formale API dafür finden (vielleicht in der Zukunft werden sie eine implementieren), und ich glaube nicht, dass Sie sicher sein können, dass Innenfliesen mit leerer Beschreibung sein werden.

Was ich für mich zu arbeiten, wird mit dieser API: Führen Sie eine HTTP an diese Adresse GET: „http://cbk0.google.com/cbk?output=xml&ll=52.358445,4.88103“ mit dem ll = LANG, LAT

Dies ist eine interne API verwendet, um ein Ziel zu finden Standort pano_id. Es gibt uns auch einige Informationen darüber, was wir damit machen können: Zoom-Level, welche Straßen du liegst usw.

Ich habe festgestellt, dass alle Ergebnisse für Koordinaten, die Innenansichten von Straßenansichten haben, scene="_number" level_id="_id" in das data_properties Tag des Panoramas. Und so, für jeden Standort können Sie diese Anforderung laufen und suchen diese Werte in den data_properties des Ergebnisses XML

einige Beispiele:

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 

Quelle: Hacking google street view

aktualisieren

Es scheint, dass, um lokale Unternehmen richtig pano_id zu bekommen, müssen Sie &it=all zu der Anfrage hinzufügen Beispiel:

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

dies der richtige pano_id für diesen Ort, können Sie überprüfen es diese API

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

Wenn während der nächsten 2 Tage - keine andere Wahl, 50 Punkte deins, danke –

+0

Great work mate, :) danke! –

2

Hier ist ein Feature-Request ich mit Google eingereicht:
"Option Innen-Blick auf die Straße zu sperren"
https://code.google.com/p/gmaps-api-issues/issues/detail?id=4831

Fühlen sie sich frei dort das Ticket Stern es einige Aufmerksamkeit

(Ist das OK etiquette- helfen weise? ... keine echte Antwort (noch), aber scheint es wert, hier geteilt zu werden, damit interessierte Parteien das Ticket markieren/verfolgen können)

+0

Ja, das sind gute Informationen. Ärgerlich fehlende Funktion, Ticket markiert. Hoffe, dass es Aufmerksamkeit bekommt. – mahalie

Verwandte Themen