最接近坐标的街景照片

Nearest Street View Photo to Coordinates

我正在使用 Google Maps V3 API 开发 proof-of-concept 应用程序。我有一个数据库,其中包含 (lat,lng) 格式的所有城市及其中心点的列表。当我从数据库中打开一个随机城市时,地图以中心点为中心并切换到街景视图。

问题是:在这种情况下,有时用户提交的照片没有"walk"功能。以下是此类照片的示例,它也是街景图层的一部分:

有没有办法避免这些用户照片?从 Google 具有 "walk" 功能的司机拍摄的真实照片来看,它们与 Google 地图 API 的观点不同吗?我需要一种使用 Google 汽车的 "proper" 街景照片跳到下一个最近点的方法。

再问:有没有way/algorithm找距离给定坐标最近的街景点?

这是当前的代码片段:

      var point = new google.maps.LatLng(data[0].lat, data[0].lng);

      var webService = new google.maps.StreetViewService();
      var checkaround = 5000;
      webService.getPanoramaByLocation(point,checkaround ,function(panoData) {
        if(panoData){

             if(panoData.location){

                if(panoData.location.latLng){
                      window.map.setCenter(panoData.location.latLng);
                      window.map.setZoom(14);
                      var panoramaOptions = {
                        position: panoData.location.latLng,
                        pov: {
                          heading: 34,
                          pitch: 10
                        }
                      };
                      var panorama = new google.maps.StreetViewPanorama(document.getElementById('pano'), panoramaOptions);
                      map.setStreetView(panorama);
                }
            }
        }
      });

我无法在 jsfiddle 上发布它,因为有一个带数据库的 php 后端,但是有上面的代码和一个测试点 (lat,lng) = ( 54.226978, 49.568459) 你可以重现这个问题,你会看到照片而不是街景。然而,这个城市和这个点都被街景覆盖了。

你可以尝试使用Roads APIsnapToRoads方法

此方法采用沿路线收集的 GPS 点,returns 将这些点捕捉到车辆最有可能行驶的道路

问题可能是您的来电 getPanoramaByLocation()。如果您省略它可能会起作用,只需执行以下操作:

  var point = new google.maps.LatLng(54.226978, 49.568459);

  window.map.setCenter(point);
  window.map.setZoom(14);
  var panoramaOptions = {
    position: point,
    pov: {
      heading: 34,
      pitch: 10
    }
  };
  var panorama = new google.maps.StreetViewPanorama(document.getElementById('pano'), panoramaOptions);
  map.setStreetView(panorama);

或者,如果您想 getPanoramaByLocation(),您应该在回调中调用 setPano(),如下所示:

  var point = new google.maps.LatLng(data[0].lat, data[0].lng);

  var panorama = new google.maps.StreetViewPanorama(document.getElementById('pano'));

  var webService = new google.maps.StreetViewService();
  var checkaround = 5000;
  webService.getPanoramaByLocation(point,checkaround ,function(panoData) {
    if(panoData){

         if(panoData.location){

            if(panoData.location.latLng){
                  window.map.setCenter(panoData.location.latLng);
                  window.map.setZoom(14);

                  panorama.setPano(panoDdata.location.pano);
                  panorama.setPov({
                    heading: 34,
                    pitch: 10
                  });
                  panorama.setVisible(true);

                  map.setStreetView(panorama);
            }
        }
    }
  });