Как проверить доступность и отображение сообщения в Google Street View?

Я передаю переменные lat и lng и отображаю google sreet view в div. Проблема в том, что, когда StreetView недоступен, ничего не отображается. Я хотел бы проверить, есть ли просмотр улиц для данных lat и lng и выводить сообщение. Вот мой код:

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

Может быть, я должен использовать что-то вроде: Event.addListener(myPano, "error", errorMessage());

Любые идеи?

Ответы

Ответ 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
    }
});

Ответ 2

Вы можете проверить следующую ссылку:

Определение того, является ли дорога поддержкой Street View визуальной проверкой GStreetviewOverlay, не всегда возможно или желательно с точки зрения пользователя. По этой причине API предоставляет услугу, которая программно запрашивает и получает данные Street View. Эта услуга облегчается с помощью объекта 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>

Ответ 3

Обновление для API JavaScript Карт Google v3.25 +: В v3.25 (текущая версия выпуска) и v3.26 (текущая экспериментальная версия), getPanoramaByLocation() по-прежнему доступен, но больше не документирован.

@принятый ответ 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
    }
});

Опустите source в StreetViewLocationRequest, если вы не хотите, чтобы панорамный поиск ограничивался наружными.