【问题标题】:Why are some street-view images from the wrong angle?为什么有些街景图片的角度不对?
【发布时间】:2013-04-19 18:52:54
【问题描述】:

我正在使用 Google Street View Image API 来显示地址的图像。尽管大多数图像都非常准确,但我注意到有一些是从错误的角度拍摄的,例如拐角处的房子,图像来自小街,而不是前街。当我检查谷歌地图时,左侧面板顶部显示的图像是正确的。

示例; 下面是使用来自API instructions 的 URL 参数的图像; http://maps.googleapis.com/maps/api/streetview?size=300x200&location=39.408751,-104.917738&sensor=false

下面是显示在 Google 地图左侧面板中的同一位置的图像,

https://cbks0.google.com/cbk?output=thumbnail&cb_client=maps_sv&thumb=2&thumbfov=60&ll=39.408554,-104.917506&yaw=317.7&thumbpegman=1&w=300&h=118

有没有办法使用 API 获得“更好”的角度?

【问题讨论】:

  • 我想他们把所有醉汉都搬到了这附近的车库里。在技​​术说明中,我读到该角度是根据从地址坐标到相机测量的最近相机计算的。在这种情况下,小街必须稍微靠近地址的地理坐标。如果这是真的,谷歌地图怎么知道正面拍摄更好?也许是因为它是从记录的街道上拍下来的?

标签: google-maps google-street-view


【解决方案1】:

我也注意到了,谷歌似乎使用不同的算法在其网站上显示该图像(在左侧面板中),并且它更准确,因为它位于该位置的正面。

没有直接的方法可以通过他们的“街景图像 API”获得该角度,但您可以使用 javascript API 计算该角度并将其传递给图像 API。

这里的问题是我们怎么知道哪个是建筑物的前面?前面通常是街道入口的位置。因此,您可以使用 DirectionService 来获取 最近的运输起点位置,通常是建筑物入口处的道路,使用此位置,您现在可以使用其几何实用程序方法轻松计算航向,并将其传递给您的 Image API。

【讨论】:

【解决方案2】:

如果您知道地址,并且 ROOFTOP 地理编码器结果可用,您可以找到道路上最近的位置,然后使用它来请求街景:

http://www.geocodezip.com/v3_Streetview_lookAtB.html?snaptoroad=5175%20Buena%20Vista%20Boulevard,%20Castle%20Rock,%20CO%2080109,%20USA

(如果你不知道地址,你可以像我在这里做的那样反向地理编码来获取它)

来自这个问题的工作示例:Using google street view with a marker, how do I point the POV at a marker?

Working fiddle

工作代码sn-p:

var geocoder = new google.maps.Geocoder();
var myStreetView = null;
var marker = null;

function geocodeAddress() {
  var address = document.getElementById('address').value;
  geocoder.geocode({
    'address': address
  }, function(results, status) {
    //alert (results);
    if (status == google.maps.GeocoderStatus.OK) {
      //alert(results[0].geometry.location);
      myStreetView = new google.maps.StreetViewPanorama(document.getElementById("map_canvas"));
      myStreetView.setPosition(results[0].geometry.location);
      google.maps.event.addListenerOnce(myStreetView, 'status_changed', function() {
        var SVstatus = myStreetView.getStatus()
        document.getElementById('info').innerHTML = "Street View Status="+SVstatus;
        var heading = google.maps.geometry.spherical.computeHeading(myStreetView.getLocation().latLng, results[0].geometry.location);
        myStreetView.setPov({
          heading: heading,
          pitch: 0
        });
        setTimeout(function() {
          marker = new google.maps.Marker({
            position: results[0].geometry.location,
            map: myStreetView,
            title: address
          });
          if (marker && marker.setMap) marker.setMap(myStreetView);
        }, 500);
      });

    } else {
      alert("Geocode was not successful for the following reason: " + status);
    }
  });
  google.maps.event.addDomListener(document.getElementById('geoBtn'), 'click', geocodeAddress);
}
google.maps.event.addDomListener(window, 'load', geocodeAddress);
html,
body,
#map_canvas {
  height: 100%;
  width: 100%;
}
<script src="http://maps.google.com/maps/api/js?libraries=geometry"></script>
<input id="address" type="text" value="5175 Buena Vista Boulevard, Castle Rock, CO 80109, USA" />
<input id="geoBtn" type="button" value="Go" />
<div id="info"></div>
<div id="map_canvas"></div>

【讨论】:

  • 您的回答很有帮助,但与您示例中的街景滑块图像相反,我仍然无法获得更好的单张图像。我从一个地址开始,然后我从谷歌获得地理编码。根据 Google 文档,返回的地理编码是 ROOFTOP。有趣的是,当我单击您答案中的链接时,我会在右侧窗格中看到一个分割图像,部分来自小街,部分来自更理想的前街。如果我点击它并且几乎不滑动图像,它会更正到前视图。
猜你喜欢
  • 1970-01-01
  • 2023-04-07
  • 2013-05-13
  • 1970-01-01
  • 1970-01-01
  • 2020-02-25
  • 2019-06-24
  • 2016-10-01
相关资源
最近更新 更多