获取Google StreetView API的POV

我目前正在使用embedded式Google街景全景图,并且希望获得特定地址的POV(更具体的标题)。

Google通过maps.google.com来做到这一点,在给定地址的情况下,它会让你进入街景,并且会面对正确的道路。 然而,我似乎无法找出/find一个方法来通过APIfindPOV标题的文档。

我可以使用LatLngembedded街景视图,但摄像机通常面向错误的方向。 有任何想法吗?

编辑 :清晰度

我想设置POV,但是我不知道将其设置为什么值…

所需地址的位置和全景位置(从拍摄图像的街景汽车的位置)的latLng不一样。 据我所知,API没有设置地址latlng的正确方向的标题,你将不得不自己设置它。

我是这样做的,我使用StreetViewService来查找最近的可用全景镜头,然后在这里使用computeHeading方法计算Pov标题

正是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's 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 } }); 

其原因是街景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); } }); } 

我发现这个网页非常有帮助,谢谢你们。 我仍然需要从这个和几个来源拼凑完整的解决scheme,所以我想我会把它包括在这里给你。

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

如果你想设置朝街道或90度右/左各自的街道,我已经实施了一个解决scheme。

谷歌街景标题问题

我希望这会有所帮助。

无法确定是否要获取或设置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 );