Поместите вид улицы на главную улицу, а не в переулок
Следующий код помещает камеру на дорогу, ближайшую к маркеру, однако это закоулок и вид бесполезен для навигации.
Есть ли способ разместить камеру на ближайшей главной улице (в данном случае "Восточный проспект"), не меняя положение маркера, а вместо этого проверяя программно выбирая самую близкую главную улицу над любой ближайшей улицей.
var panorama, myPlace;
function initialize() {
myPlace = {
lat: 33.976827,
lng: -118.163889
};
var map = new google.maps.Map(document.getElementById('map'), {
center: myPlace,
zoom: 18
});
panorama = new google.maps.StreetViewPanorama(document.getElementById('pano'), {
position: myPlace
});
var marker = new google.maps.Marker({
position: myPlace,
map: map
});
map.setStreetView(panorama);
var sv = new google.maps.StreetViewService();
sv.getPanorama({
location: myPlace,
radius: 50
}, processSVData);
}
function processSVData(data, status) {
if (status === google.maps.StreetViewStatus.OK) {
var marker_pano = new google.maps.Marker({
position: myPlace,
map: panorama
});
var heading = google.maps.geometry.spherical.computeHeading(data.location.latLng, marker_pano.getPosition());
panorama.setPov({
heading: heading,
pitch: 0
});
}
}
google.maps.event.addDomListener(window, 'load', initialize);
1 ответ
Решение
Используя ответ из запроса "Просматривать панорамы главной дороги / обочины" вместо обратных переулков из API с вашим адресом (чтобы получить адрес, я геокодировал ваши координаты, затем корректировал, как казалось, он хотел указать на здание по соседству).
var sv = new google.maps.StreetViewService();
var geocoder = new google.maps.Geocoder();
var directionsService = new google.maps.DirectionsService();
var panorama;
var address = "6327 Eastern Avenue, Bell, CA 90201, USA";
var myLatLng;
function initialize() {
myPlace = {
lat: 33.976827,
lng: -118.163889
};
var map = new google.maps.Map(document.getElementById('map'), {
center: myPlace,
zoom: 18
});
var marker = new google.maps.Marker({
position: myPlace,
map: map
});
panorama = new google.maps.StreetViewPanorama(document.getElementById("pano"));
map.setStreetView(panorama);
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);
}
}
html,
body {
height: 100%;
margin: 0;
padding: 0;
}
#map,
#pano {
width: 100%;
height: 50%;
}
<script src="https://maps.googleapis.com/maps/api/js?libraries=geometry"></script>
<div id="map"></div>
<div id="pano"></div>