39

我目前正在使用Google Street View Panorama 嵌入,我想获取特定地址的 POV(更具体地说是标题)。

谷歌通过maps.google.com做到这一点,在那里,给定一个地址,它会把你带到街景中,它会面向正确的方向。但是,我似乎无法找出/找到通过 API 查找 POV 标题的方法的文档。

我可以让街景嵌入与 一起正常工作LatLng,但相机通常朝向错误的方向。有任何想法吗?

编辑:清晰度

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

4

6 回答 6

45

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

我就是这样做的,我使用 StreetViewService 找到最近的可用全景照片,然后使用此处的 computeHeading 方法计算 Pov 航向

于 2011-09-08T07:31:16.287 回答
36

正如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
    }
});
于 2011-12-05T06:50:07.330 回答
4

原因是街景 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);
            }
        });
    }
于 2013-10-03T00:43:08.450 回答
3

我发现这个页面很有帮助,谢谢大家。我仍然需要从这个和一些来源中拼凑出完整的解决方案,所以我想我会把它包括在这里给你。

<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>
于 2016-08-08T13:09:43.077 回答
-1

如果您想将 POV 设置为朝向街道或与该街道相对应的 90 度右/左,我已经实施了一个解决方案。

谷歌街景标题问题

我希望这会有所帮助。

于 2012-08-14T11:06:22.557 回答
-4

不知道您是否要获取或设置 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 );
于 2011-08-15T18:00:31.557 回答