Как проверить доступность и отображение сообщения в 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&v=2&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
, если вы не хотите, чтобы панорамный поиск ограничивался наружными.