Получение POV для Google StreetView API
В настоящее время я использую Google Street View Panorama embed, и я хочу получить POV (более конкретно заголовок) для определенного адреса.
Google делает это через maps.google.com, где, учитывая адрес, он выведет вас на улицу, и он окажется справа путь. Однако я не могу найти/найти документацию для поиска заголовка POV через API.
Я могу использовать встроенную функцию Street View для работы с LatLng
, но камера обычно сталкивается с неправильным направлением. Любые идеи?
изменить: ясность
Я хочу установить POV, но я не знаю, какое значение его установить...
Ответы
Ответ 1
Записанный адрес и местонахождение панорамы (позиция автомобиля с видом на улицу, где снимаются изображения) не совпадают. Насколько мне известно, API не устанавливает заголовок в правильном направлении адреса latlng, вам нужно будет установить его самостоятельно.
Вот как я это сделал, я использовал StreetViewService, чтобы найти ближайший панорамный снимок, а затем вычислил заголовок Pov, используя метод computeHeading здесь
Ответ 2
Просто, что сказал manubkk, я использую следующий код, чтобы получить правильный заголовок SV
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 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
}
});
Ответ 3
Причиной этого является то, что POV с видом на улицу - это по умолчанию направление, в котором находился грузовик, когда изображение было снято (рисунок). Вам нужно найти местонахождение грузовика и расположение дома и рассчитать "заголовок" от первого места до второго:
// 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 {
...
}
Другой трюк/ловушка, использующий уличный вид, заключается в том, что вам нужно получить ближайший вид улиц в адресное место, неоднократно называя getPanoramaByLocation
с увеличением расстояния до тех пор, пока вы не добьетесь успеха или не достигнете максимального расстояния. Я решаю это с помощью этого кода:
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);
}
});
}
Ответ 4
Я нашел эту страницу очень полезной, спасибо вам, ребята. Мне все еще нужно было собрать полное решение из этого и нескольких источников, поэтому я подумал, что я включу его здесь для вас.
<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>
Ответ 5
Если вы хотите установить POV на улицу или 90 градусов справа/слева, соответствующие этой улице, я внедрил решение.
Проблема заголовка Google Street View
Я надеюсь, что это поможет.
Ответ 6
Невозможно определить, хотите ли вы получить или установить POV
чтобы установить следующие инструкции: http://code.google.com/apis/maps/documentation/javascript/services.html#StreetViewPanoramas
var panoramaOptions = {
position: fenway,
pov: {
heading: 34,
pitch: 10,
zoom: 1
}
};
чтобы получить:
alert( panoramaOptions.pov.heading );