【问题标题】:How to check if Google Street View available and display message?如何检查谷歌街景是否可用并显示消息?
【发布时间】:2010-04-20 12:29:01
【问题描述】:

我正在传递 lat 和 lng 变量并在 div 中显示 google sreet 视图。问题是当街景不可用时,什么都不会显示。我想检查给定的 lat 和 lng 是否有街景并显示一条消息。这是我的代码:

var myPano = new GStreetviewPanorama(document.getElementById("street2"), panoOpts);
var location = new GLatLng(lat,lng)
myPano.setLocationAndPOV(location);

也许我应该使用类似:Event.addListener(myPano, "error", errorMessage());

有什么想法吗?

【问题讨论】:

  • 应该改变接受的答案!

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


【解决方案1】:

在 v3 中,这发生了一些变化。查看http://code.google.com/apis/maps/documentation/javascript/reference.html#StreetViewService的文档

更新后的代码是:

var streetViewService = new google.maps.StreetViewService();
var STREETVIEW_MAX_DISTANCE = 100;
var latLng = new google.maps.LatLng(40.7140, -74.0062);
streetViewService.getPanoramaByLocation(latLng, STREETVIEW_MAX_DISTANCE, function (streetViewPanoramaData, status) {
    if (status === google.maps.StreetViewStatus.OK) {
        // ok
    } else {
        // no street view available in this range, or some error occurred
    }
});

【讨论】:

  • 请记住,getPanoramaByLocation 是异步的。这意味着您想要作为检查结果执行的任何操作都必须进入回调函数。
【解决方案2】:

您可能需要查看以下参考资料:

通过目视检查GStreetviewOverlay 来确定道路是否支持街景通常是不可行的,或者从用户的角度来看是不可取的。出于这个原因,API 提供了一种以编程方式请求和检索街景数据的服务。通过使用GStreetviewClient 对象可以促进这项服务。

基本上,您可以使用GStreetviewClient 类的getNearestPanoramaLatLng() 方法,该方法将返回您可以查看街景的最近点的GLatLng。然后,您可以使用distanceFrom() 方法检查最近的街景点是否在距离源点的某个阈值范围内。

这是一个完整的例子,我认为应该是不言自明的:

<!DOCTYPE html>
<html> 
<head> 
    <meta http-equiv="content-type" content="text/html; charset=UTF-8"/> 
    <title>Google Maps API - Street View Availability</title> 
    <script src="http://maps.google.com/maps?file=api&amp;v=2&amp;sensor=false"
            type="text/javascript"></script> 
  </head> 
  <body> 
    <script type="text/javascript"> 
       var testPoint = new GLatLng(40.7140, -74.0062);   // Broadway, New York
       var svClient = new GStreetviewClient();

       svClient.getNearestPanoramaLatLng(testPoint, function (nearest) {
          if ((nearest !== null) && (testPoint.distanceFrom(nearest) <= 100)) {
             alert('Street View Available');             // Within 100 meters
          }
          else {
             alert('Street View Noet Available');        // Not within 100 meters
          }
       });
    </script> 
  </body> 
</html>

【讨论】:

  • 这个答案已经过时了。查看 V3 答案and docs
【解决方案3】:

Google Maps JavaScript API v3.25+ 的更新: 在 v3.25(当前发布版本)和 v3.26(当前实验版本)中,getPanoramaByLocation() 仍然可用,但 not documented anymore

@arthur-clemens 接受的答案仍然有效,但如果您想要更好的兼容性,请使用 getPanorama()StreetViewLocationRequest

var gstService = new google.maps.StreetViewService();

gstService.getPanorama({
    location: new google.maps.LatLng(40.7140, -74.0062),
    source: google.maps.StreetViewSource.OUTDOOR
}, function (data, status) {
    if (status === google.maps.StreetViewStatus.OK) {
        // OK
    } else {
        // error or no results
    }
});

如果您不希望全景搜索仅限于户外搜索,请在 StreetViewLocationRequest 中省略 source

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-04
    • 1970-01-01
    相关资源
    最近更新 更多