Запрашивать панорамы главной дороги / обочины StreetView вместо переулков от API

Есть ли способ запрашивать данные панорамы Google StreetView на главной дороге вместо данных панорамы переулка для заданного местоположения (широта / долгота)?

Я использую API Google Maps Javascript для получения панорамы просмотра улиц с домашнего адреса, предоставленного нашими пользователями. Это работает довольно хорошо для большинства адресов, которые я пробовал, но я заметил, что у многих свойств в Калифорнии также есть представления улиц для переулков, и API-швы, чтобы последовательно возвращать панораму переулка вместо главной дороги (фронт имущества) панорама.

Я не хочу показывать пользователю панораму своего дома, а вместо этого панораму главной дороги. Если я смотрю на тот же адрес на maps.google.com, я вижу перед домом, но когда я запрашиваю тот же адрес через API, я получаю переулок.

Процесс, который я сейчас использую:

  1. Адрес геокодирования
  2. Получить панораму с учетом геокодирования (широта / долгота)
  3. Вычислить заголовок и отобразить панораму на странице

Тестовые адреса:

  1. 325 S Peck Dr, Беверли Хиллз, Калифорния, США, 90212
  2. 333 S Rodeo Dr, Беверли Хиллз, Калифорния, США, 90212

Любые идеи или предложения будут с благодарностью. Спасибо!

1 ответ

Решение

Воспользуйтесь сервисом маршрутов, чтобы проложить маршрут от нужного до себя адреса. Используйте это местоположение вместо результата геокодера для местоположения просмотра улиц. Используйте результат геокодера (надеюсь, результат точности ROOFTOP) для того места, на которое нужно смотреть "на".

связанный с этим вопрос: Обращение к целевому зданию с помощью Google StreetView Примеры:

фрагмент кода:

var sv = new google.maps.StreetViewService();
var geocoder = new google.maps.Geocoder();
var directionsService = new google.maps.DirectionsService();
var panorama;
var address = "333 S Rodeo Dr, Beverly Hills, CA, USA, 90212";
var myLatLng;

function initialize() {

  panorama = new google.maps.StreetViewPanorama(document.getElementById("pano"));

  geocoder.geocode({
    'address': address
  }, function(results, status) {
    if (status == google.maps.GeocoderStatus.OK) {
      myLatLng = results[0].geometry.location;

      // find a Streetview location on the road
      var request = {
        origin: address,
        destination: address,
        travelMode: google.maps.DirectionsTravelMode.DRIVING
      };
      directionsService.route(request, directionsCallback);
    } else {
      alert("Geocode was not successful for the following reason: " + status);
    }
  });
}
google.maps.event.addDomListener(window, 'load', initialize);

function processSVData(data, status) {
  if (status == google.maps.StreetViewStatus.OK) {

    panorama.setPano(data.location.pano);

    var heading = google.maps.geometry.spherical.computeHeading(data.location.latLng, myLatLng);
    panorama.setPov({
      heading: heading,
      pitch: 0,
      zoom: 1
    });
    panorama.setVisible(true);

  } else {
    alert("Street View data not found for this location.");
  }
}

function directionsCallback(response, status) {
  if (status == google.maps.DirectionsStatus.OK) {
    var latlng = response.routes[0].legs[0].start_location;
    sv.getPanoramaByLocation(latlng, 50, processSVData);
  } else {
    alert("Directions service not successfull for the following reason:" + status);
  }
}
<script src="https://maps.googleapis.com/maps/api/js?libraries=geometry"></script>
<div id="pano" style="width: 425px; height: 400px;float:left"></div>

Другие вопросы по тегам