Как проверить доступность Google Street View и показать сообщение? - PullRequest
18 голосов
/ 20 апреля 2010

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

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

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

Есть идеи?

Ответы [ 3 ]

41 голосов
/ 18 сентября 2011

В 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
    }
});
17 голосов
/ 20 апреля 2010

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

Определение того, поддерживает ли дорога просмотр улиц, путем визуального осмотра 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>
1 голос
/ 12 октября 2016

Обновление для Google Maps JavaScript API 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, если вы не хотите, чтобы поиск панорамы ограничивался только наружными.

...