19

我正在传递 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());

有任何想法吗?

4

3 回答 3

41

在 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
    }
});
于 2011-09-17T22:58:37.940 回答
17

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

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

基本上您可以使用该类的getNearestPanoramaLatLng()方法,该方法GStreetviewClient将返回您可以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>
于 2010-04-20T15:29:54.130 回答
1

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

@arthur-clemens 接受的答案仍然有效,但如果您想要更好的兼容性,请使用getPanorama()a代替: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
    }
});

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

于 2016-10-12T10:49:51.750 回答