5
anfragen

Gibt es eine Möglichkeit, Google StreetView-Panoramadaten für Hauptstraßen anzufordern, anstatt für einen gegebenen Standort (Breitengrad/Längengrad) Panoramas zu suchen?Hauptstrasse/Straßenrand StreetView-Panoramen statt hinter Gassen von API

Ich benutze die Google Maps JavaScript API, um ein Street View-Panorama von einer von unseren Benutzern bereitgestellten Privatadresse abzurufen. Es funktioniert ziemlich gut für die meisten Adressen, die ich ausprobiert habe, aber ich merke, dass eine Menge von Eigenschaften in Kalifornien auch Straßenansichten für Hintergassen haben, und die API Nähte, um das Hintergassenpanorama beständig anstelle der Hauptstraße (Vorderseite) zurückzugeben von Eigentum) Panorama.

Ich möchte dem Benutzer kein Hintergassenpanorama ihres Hauses zeigen, sondern stattdessen das Hauptstraßenpanorama. Wenn ich die gleiche Adresse auf maps.google.com suche, sehe ich die Vorderseite des Hauses, aber wenn ich die gleiche Adresse über die API anfordere, komme ich in die Sackgasse.

Der Prozess, den ich zur Zeit bin mit ist:

  1. Geocode Adresse
  2. Holen Sie sich das geocode Lage Panorama gegeben (lat/long)
  3. Compute Überschrift und Panorama-Anzeige auf Seite

Testadressen:

  1. 325 S Peck Dr, Beverly Hills, CA, USA, 90212
  2. 333 S Rodeo Dr, Beverly Hills, CA, USA, 90212

Irgendwelche Ideen oder Anregungen würde sehr geschätzt werden. Vielen Dank!

+2

Sie meinen, wie folgt aus: [325 S Peck Dr, Beverly Hills, CA, USA, 90212] (http://www.geocodezip.com/v3_StreetView_lookAtB.html?snaptoroad=325%20S%20Peck%20Dr, % 20Heverly% 20Hills,% 20CA,% 20USA,% 2090212) und dies: [333 S Rodeo Dr, Beverly Hills, CA, USA, 90212] (http://www.geocodezip.com/v3_StreetView_lookAtB.html?snaptoroad=333 % 20S% 20Rodeo% 20Dr,% 20Beverly% 20Hills,% 20CA,% 20USA,% 2090212) – geocodezip

+0

Oh wow !! Genau wie das. Brillant!! – dbrown428

+0

@geocodezip Ich verwende die Places-Autovervollständigungs-API, daher habe ich bereits ein Platzobjekt, wenn der Benutzer die gewünschte Auto-Vervollständigen-Option auswählt. Gibt es irgendetwas, was ich nur mit dem Place-Objekt tun kann, ohne eine andere API aufrufen zu müssen?Momentan bekomme ich die Dachkoordinaten 'autocomplete.getPlace() .geometry.location'. –

Antwort

5

Verwenden Sie den Routenplaner-Service, um Wegbeschreibungen von der gewünschten Adresse zu sich selbst zu erhalten. Verwenden Sie diesen Ort anstelle des Geocodierergebnisses für den Standort der Straßenansicht. Verwenden Sie das Geocoder-Ergebnis (hoffentlich ein ROOFTOP-Genauigkeitsergebnis), damit der Ort "at" aussieht.

related question: Facing the targeted building with Google StreetView Beispiele:

Codefragment:

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>

+0

Ändern Sie einfach meinen Code, um den Routenplanerdienst zu verwenden. Danke, dass Sie auch ein Code-Snippet eingefügt haben. Tolle! Ich melde mich kurz bei dir. :) – dbrown428

+0

Ihr Vorschlag hat perfekt funktioniert. Vielen Dank!!! Ich habe bemerkt, dass in Ihrem Code-Snippet die Funktion "geocoderCallback" und "var berkeley" beide unbenutzt sind und wahrscheinlich aus Gründen der Klarheit entfernt werden können. Ich schätze es sehr, dass Sie sich die Zeit genommen haben, Ihren Vorschlag und den Beispielcode zu posten. :) – dbrown428

+0

@geocodezip Ich verwende die Places-Auto-Vervollständigen-API, also habe ich bereits ein Place-Objekt, wenn der Benutzer die gewünschte Auto-Vervollständigen-Option auswählt. Gibt es irgendetwas, was ich nur mit dem Place-Objekt tun kann, ohne eine andere API aufrufen zu müssen? Momentan bekomme ich die Dachkoordinaten 'autocomplete.getPlace() .geometry.location'. –