【问题标题】:Nearest Street View Photo to Coordinates与坐标最近的街景照片
【发布时间】:2015-06-16 14:09:05
【问题描述】:

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

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

有没有办法避免这些用户照片?从 Google Maps API 的角度来看,它们与 Google 驱动程序制作的具有“步行”功能的真实照片有何不同?我需要一种方法,使用来自 Google 汽车的“正确”街景照片跳到下一个最近的点。

另一个问题:有没有一种方法/算法可以找到离给定坐标最近的街景点?

这里是当前代码sn-p:

      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) 你可以重新创建问题,您会看到照片,而不是街景。然而,这个城市和这一点都被街景所覆盖。

【问题讨论】:

    标签: javascript google-maps google-maps-api-3 google-street-view


    【解决方案1】:

    问题可能是您的呼叫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);
                }
            }
        }
      });
    

    【讨论】:

    • 谢谢,看起来简单明了,我对streetview api不是很熟悉。感谢您暗示我实际上并不需要 getPanoramaByLocation()。马上颁奖!
    • 但是,我刚刚发现:如果您只是偶然进入用户照片的重点,它仍然会显示。例如坐标 (54.799999, 35.933334),由于某种原因,它被视为市中心。在这一点上有一张用户照片,并使用您的示例显示它
    【解决方案2】:

    你可以尝试使用Roads APIsnapToRoads方法。

    此方法获取沿路线收集的 GPS 点,然后将捕捉到的点返回到车辆最可能行驶的道路

    【讨论】:

    • 感谢您的回复,但如果我将 (53.366669,55.933334) 的唯一点提交给函数,它会返回带有一个元素的 snappedPoints,在这种情况下是 (53.366852266166525,55.93332654318978) 如果我将 getPanoramaByLocation() 设置为这个确切的点,它仍然显示用户提交的图像。附近有道路被覆盖,但它捕捉到的这条道路没有。
    猜你喜欢
    • 2012-04-10
    • 1970-01-01
    • 2013-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多