2013-02-10 16 views
14

Obecnie coraz więcej firm korzysta z widoku ulicy, aby wyświetlać apartamenty z wnętrza.Jak sprawdzić, czy panorama ulicy jest w środku lub na zewnątrz?

Mój program umożliwia wyświetlanie widoku ulicy zgodnie z wybraną firmą. Ale nie chcę pokazywać w domu. Tylko na zewnątrz. Ponieważ Indoors blokuje mi ruch, tylko po to, by obrócić się o 360 stopni.

Czy ktoś wie, jak pobrać z widoku ulicy API, jeśli mam zamiar wyświetlać w pomieszczeniu lub na zewnątrz?

Dziękuję bardzo,

To jest moje fragmenty kodu tak dalece, że otwarte widok ulicy zgodnie z wybranym adresem:

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

Główną ideą było uzyskać Panorama lokalizację i sprawdzić odległość do najbliższe miejsca wokół 360 stopni.

+1

Wygląda na to, że podobne żądania zostały zgłoszone jako błędy/ulepszenia: http://code.google.com/p/gmaps-api-issues/issues/list? can = 2 & q = indoor & colspec = ID + Type + Status + Wprowadzony + Fixed + Summary + Stars + ApiType + Internal & cells = tiles – JSuar

+2

Nie zamieszczam tego jako odpowiedzi może się zmienić każdego dnia, ale na razie odkryłem, że każda właściwość pliku panorama.links ma właściwość opisową (zawierającą nazwę ulicy), jeśli lokalizacja panoramy znajduje się na zewnątrz i jest pusta, jeśli znajduje się w pomieszczeniu, więc na jej podstawie można sprawdzić, czy ' (panorama.links.length === 0 || panorama.links [0] .description == "") ', powinien zwrócić wartość true, jeśli znajduje się w pomieszczeniu. Powinienem dodać, że nie przetestowałem go zbyt szeroko, więc nie jestem pewien, czy to się uda. Wierzę, że to się wkrótce zmieni – yoelp

+0

Dzięki, pozwól mi przetestować swoją drogę –

Odpowiedz

9

Nie mogę znaleźć dla tego formalnego API (może w przyszłości będą je implementować) i nie sądzę, że możesz mieć pewność, że wewnętrzne kafelki będą opatrzone pustym opisem.

Co znalazłem się pracować dla mnie jest za pomocą tego API: Run HTTP GET na ten adres: „http://cbk0.google.com/cbk?output=xml&ll=52.358445,4.88103” z LL = długie, LAT

Jest to API wewnętrzne stosowane znaleźć cel lokalizacja pano_id. Daje nam również trochę informacji na temat tego, co możemy z nim zrobić: poziomy powiększenia, ulice, na których się znajdujesz itd.

Zauważyłem, że wszystkie wyniki dla współrzędnych, które mają obrazy z widokiem z ulicy, mają scene="_number" level_id="_id" w znacznik data_properties panoramy. I tak, dla każdej lokalizacji można uruchomić tę prośbę i szukać tych wartości w data_properties z XML wynik

kilka przykładów:

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 

Źródło: Hacking google street view

Aktualizacja

Wygląda na to, że aby lokalne firmy miały prawa do pano_id, musisz dodać &it=all do żądania przykład:

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

tego prawo pano_id w tym miejscu, można zweryfikować za pomocą tego interfejsu API

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

Jeśli w ciągu następnych 2 dni - żadnych innych opcji, 50 punktów do ciebie, dzięki –

+0

Świetny towarzysz pracy, :) dziękuję! –

2

Oto prośba cecha I złożony z Google:
„Możliwość wyłączenia kryte widoki ulicy”
https://code.google.com/p/gmaps-api-issues/issues/detail?id=4831

Zapraszam do obsady bilet tam, aby pomóc mu trochę uwagi

(Czy to OK etykietowe mądry? ... nie jest to prawdziwa odpowiedź (jeszcze), ale wydaje się godne dzielenia się tutaj, aby zainteresowane strony mogły zarejestrować/śledzić bilet).

+0

Tak, to jest dobra informacja. Irytująca brakująca funkcja, bilet oznaczony gwiazdką. Mam nadzieję, że zwróci na to uwagę. – mahalie