Запросите основные дорожные/обходные панорамы StreetView вместо задних аллей API

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

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

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

В настоящее время я использую следующий процесс:

  • Адрес геокода
  • Получить панораму с учетом местоположения геокода (lat/long)
  • Вычислить заголовок и панораму на странице

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

  • 325 S Peck Dr, Beverly Hills, CA, USA, 90212
  • 333 S Rodeo Dr, Beverly Hills, CA, USA, 90212

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

5
02 июля '15 в 8:36
источник поделиться
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&key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk"></script>
<div id="pano" style="width: 425px; height: 400px;float:left"></div>
7
02 июля '15 в 16:33
источник

Посмотрите другие вопросы по меткам или Задайте вопрос