С лице към целевата сграда с Google StreetView

Въпросът ми е много ясен.

Нуждая се от стойността heading, за да знам как да насоча POV.

sv.getPanoramaByLocation() в този случай връща променлива data, съдържаща heading и на двете стрелки, в която посока можете да продължите.

Това обаче не ми дава стойността heading за това откъде да гледам сградата. Въпреки това е възможно да използвате маркер в streetview за насочване към вашата сграда! пример

Може ли някой да ми помогне с това? Мога да направя каквото си поискате.


person Sem    schedule 19.09.2012    source източник


Отговори (1)


Геокодирайте адреса на сградата, която искате да „разгледате“. Използвайте геометрична библиотека computeHeading(from:LatLng, to:LatLng) функция за изчисляване на посоката между местоположението на StreetView и сградата.

(предполага, че геокодерът връща геокод „на покрива“)

пример (Статуя на свободата)

Друга опция, използвайте услугата за упътвания:

свързан въпрос: Заявете панорами на главния път StreetView вместо задни алеи от API

кодов фрагмент, който използва услугата за упътвания, за да получи местоположение на пътя, което да използва за местоположение на „камера“ за уличен изглед (работи по-добре сега, когато можете да получите върнати местоположения за „вътрешен“ изглед на улица):

var map;
var berkeley = new google.maps.LatLng(37.869085, -122.254775);
var sv = new google.maps.StreetViewService();
var geocoder = new google.maps.Geocoder();
var directionsService = new google.maps.DirectionsService();
var panorama;
var myLatLng;
var address = "525 Beacon St. Boston, MA";

function initialize() {

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


  directionsService.route({
    origin: address,
    destination: address,
    travelMode: google.maps.TravelMode.DRIVING
  }, function(response, status) {
    if (status == google.maps.DirectionsStatus.OK) {
      // myLatLng = response.routes[0].legs[0].start_location;
      sv.getPanoramaByLocation(response.routes[0].legs[0].start_location, 50, processSVData);

      var marker = new google.maps.Marker({
      position: response.routes[0].legs[0].start_location,
      map: map,
      title: "Directions"
    });
      map.setCenter(myLatLng);

} else document.getElementById('info').innerHTML += "status:"+status+"<br>";
  });

  geocoder.geocode({
    'address': address
  }, geocoderCallback);
  
  // Set up the map
  var myOptions = {
    zoom: 15
  };

  map = new google.maps.Map(document.getElementById('map_canvas'),
    myOptions);
}
google.maps.event.addDomListener(window, 'load', initialize);

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

    panorama.setPano(data.location.pano);
    var camera = new google.maps.Marker({
      position: data.location.latLng,
      map: map,
      draggable: true,
      title: "camera"
    });
    var heading = google.maps.geometry.spherical.computeHeading(data.location.latLng, myLatLng);
    document.getElementById('info').innerHTML += "heading:"+heading+"<br>"
    + "location: "+myLatLng.toUrlValue(6)+"<br>"
    + "camera:"+data.location.latLng.toUrlValue(6)+"<br>";
    
    
    // alert(data.location.latLng+":"+myLatLng+":"+heading);
    panorama.setPov({
      heading: heading,
      pitch: 0,
      zoom: 1
    });
    panorama.setVisible(true);
  } else {
    alert("Street View data not found for this location.");
  }
}

function geocoderCallback(results, status) {
  if (status == google.maps.GeocoderStatus.OK) {
    myLatLng = results[0].geometry.location;
    map.setCenter(myLatLng);
    if (results[0].geometry.viewport) map.fitBounds(results[0].geometry.viewport);
    else if (results[0].geometry.bounds) map.fitBounds(results[0].geometry.bounds);
    else map.setZoom(15);
    var marker = new google.maps.Marker({
      position: myLatLng,
      map: map,
      title: address
    });    

  } else {
    alert("Geocode was not successful for the following reason: " + status);
  }
};
html,
body {
  height: 100%;
  margin: 0;
  padding: 0;
}
#map_canvas {
  height: 100%;
}
<script src="http://maps.googleapis.com/maps/api/js?libraries=geometry"></script>

<div id="pano" style="width: 425px; height: 400px;float:left"></div>
<div id="info"></div>

<div id="map_canvas" style="width: 425px; height: 400px;float:left"></div>
<div id="map_center"></div>
<div id="streetview_pov"></div>

person geocodezip    schedule 20.09.2012
comment
google.maps.geometry.spherical.computeHeading(); е идеалното решение за това, благодаря! - person Sem; 24.09.2012
comment
Но как да получа местоположението на StreetView? Имам ширина и дължина за моя геокодиран адрес, но не знам каква ДРУГА LatLng да изпратя на computeHeading(); - person Kenny Wyland; 03.05.2015
comment
Местоположението на панорамата - person geocodezip; 04.05.2015