2016-03-28 6 views
0

Я ищу, чтобы создать маршруты движения между двумя точками, где одна или обе точки не имеют дороги непосредственно к ней, но рядом с ней.Google Направления движения Ближайшая дорога

Например, если вы используете DirectionsService, попробуйте создать линию электропередачи между Moab, UT и Национальным парком Zion, UT вы получите Zero_Results, так как нет пути к CENTER (lat, lng, возвращенному google) из Национальный парк Сион. Если вы сделаете то же самое на google.com/maps, вы увидите линию электропередач от Моава до Восточного входа в Национальный парк Сиона и прогулку до центра парка (где размещается булавка). Как они определили, куда ехать в Национальный парк Сион?

+1

Добро пожаловать в StackOverflow! На ваш вопрос, какие подходы/алгоритмы вы пробовали? Люди здесь рады помочь, но мы не обязательно хотим делать исследование/кодирование для вас. Вы получите отличные ответы, если вы покажете, какие исследования/подходы вы уже пробовали, и т. Д. – Castaglia

+0

Я не хочу код. Я написал тонну, чтобы попытаться понять это. Я больше ищу идею, как это сделать. Насколько я могу судить, в API API никак не может сказать DirectionsService найти ближайшую дорогу при создании Диска. Это означает, что требуется специальное решение. Я попытался использовать близлежащее приложение с приличным радиусом, но проблема в том, что вы действительно не знаете, какая конечная точка вызывает возврат ZERO_RESULTS. Я просто пытаюсь выяснить, есть ли опция запроса, которую я пропустил, или если у кого-то есть хорошая идея, как это сделать. Для этого не требуется никакого кода. –

ответ

1

Если вы указали reverse geocode координаты, которые geocoder для Zion National Park (37.2982022, -113.0263005), то первый результат будет ближайшим к нему местом на дороге.

proof of concept fiddle

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

var geocoder; 
 
var directionsService = new google.maps.DirectionsService(); 
 
var directionsDisplay = new google.maps.DirectionsRenderer(); 
 

 
function initialize() { 
 
    var map = new google.maps.Map(
 
    document.getElementById("map_canvas"), { 
 
     center: new google.maps.LatLng(37.4419, -122.1419), 
 
     zoom: 13, 
 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
 
    }); 
 
    var start = "Moab, UT"; 
 
    directionsDisplay.setMap(map); 
 
    geocodeAddress("Zion National Park", start); 
 
} 
 

 
function geocodeAddress(address, start) { 
 
    var geocoder = new google.maps.Geocoder(); 
 
    geocoder.geocode({ 
 
    'address': address 
 
    }, function(results, status) { 
 
    if (status === google.maps.GeocoderStatus.OK) { 
 
     geocoder.geocode({ 
 
     'location': results[0].geometry.location 
 
     }, function(results, status) { 
 
     if (status === google.maps.GeocoderStatus.OK) { 
 
      calculateAndDisplayRoute(start, results[0].geometry.location) 
 
     } else { 
 
      window.alert('Reverse Geocode failed due to: ' + status); 
 
     } 
 
     }); 
 
    } else { 
 
     alert('Geocode was not successful for the following reason: ' + status); 
 
    } 
 
    }); 
 
} 
 

 
function calculateAndDisplayRoute(start, end) { 
 
    directionsService.route({ 
 
    origin: start, 
 
    destination: end, 
 
    travelMode: google.maps.TravelMode.DRIVING 
 
    }, function(response, status) { 
 
    if (status === google.maps.DirectionsStatus.OK) { 
 
     directionsDisplay.setDirections(response); 
 
    } else { 
 
     window.alert('Directions request failed due to ' + status); 
 
    } 
 
    }); 
 
} 
 
google.maps.event.addDomListener(window, "load", initialize);
html, 
 
body, 
 
#map_canvas { 
 
    height: 100%; 
 
    width: 100%; 
 
    margin: 0px; 
 
    padding: 0px 
 
}
<script src="https://maps.googleapis.com/maps/api/js"></script> 
 
<div id="map_canvas"></div>

Смежные вопросы