2016-03-28 16 views
0

Ich suche eine Wegbeschreibung zwischen zwei Punkten zu erstellen, wenn einer oder beide Punkte keine Straße direkt dazu haben, aber in der Nähe. Wenn Sie beispielsweise den DirectionsService verwenden, versuchen Sie, zwischen Moab, UT und Zion National Park, UT eine Fahrstrecke zu erstellen. Sie erhalten Zero_Results zurück, da es keine Straße zum CENTER gibt (der lat, lng, der von google zurückgegeben wurde) Zion Nation Park. Wenn Sie das gleiche auf google.com/maps tun, sehen Sie eine Fahrstrecke von Moab zum Osteingang des Zion National Park und einen Spaziergang zum Zentrum des Parks (wo die Nadel platziert ist). Wie haben sie festgestellt, wohin der Zion-Nationalpark fahren soll?Google Wegbeschreibungen zur nächsten Straße

+1

Willkommen bei Stackoverflow! Für Ihre Frage, welche Art von Ansätzen/Algorithmen haben Sie versucht? Die Leute hier sind froh zu helfen, aber wir wollen nicht unbedingt die Forschung/Codierung für Sie tun. Sie erhalten großartige Antworten, wenn Sie zeigen, welche Forschung/Ansätze Sie bereits ausprobiert haben usw. – Castaglia

+0

Ich möchte keinen Code. Ich habe eine Menge geschrieben, um es herauszufinden. Ich bin mehr auf der Suche nach einer Idee, wie man das macht. Soweit ich das beurteilen kann, gibt es in der API keine Möglichkeit, dem RouteService mitzuteilen, dass er beim Erstellen eines Laufwerks die nächstgelegene Straße finden soll. Dies bedeutet, dass eine benutzerdefinierte Lösung benötigt wird. Ich habe versucht, die nahegelegene Suche mit einem angemessenen Radius zu verwenden, aber das Problem dort ist, dass Sie nicht wirklich wissen, welcher Endpunkt ZERO_RESULTS verursacht. Ich versuche nur herauszufinden, ob es eine Anforderungsoption gibt, die ich verpasst habe oder ob jemand eine gute Idee hat, wie das geht. Dafür ist kein Code erforderlich. –

Antwort

1

Wenn Sie reverse geocode die Koordinaten zurückgegeben durch den Geocoder für Zion National Park (37.2982022, -113.0263005), wird das erste Ergebnis der nächste Ort auf der Straße sein.

proof of concept fiddle

Code-Schnipsel:

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>

Verwandte Themen