hasGeocode didn't actually indicated if an endpoint has a value acquired from a geocoder. It was set to true when at least one call to a geocoder finished successfully, including getting an empty result. getRoute doesn't need to know what calls were made, it only needs coordinates. It also doesn't get to decide when to fetch coordinates, this is done in drag/change callbacks.
$.getJSON(OSM.NOMINATIM_URL + "search?q=" + encodeURIComponent(endpoint.value) + "&format=json&viewbox=" + viewbox, function (json) {
endpoint.awaitingGeocode = false;
- endpoint.hasGeocode = true;
if (json.length === 0) {
input.addClass("is-invalid");
alert(I18n.t("javascripts.directions.errors.no_place", { place: endpoint.value }));
};
function setLatLng(ll) {
- endpoint.hasGeocode = true;
endpoint.latlng = ll;
endpoint.marker
.setLatLng(ll)
// Cancel any route that is already in progress
if (routeRequest) routeRequest.abort();
- // go fetch geocodes for any endpoints which have not already
- // been geocoded.
- for (var ep_i = 0; ep_i < 2; ++ep_i) {
- var endpoint = endpoints[ep_i];
- if (!endpoint.hasGeocode && !endpoint.awaitingGeocode) {
- endpoint.getGeocode();
- }
- }
- if (endpoints[0].awaitingGeocode || endpoints[1].awaitingGeocode) {
- return;
- }
-
var o = endpoints[0].latlng,
d = endpoints[1].latlng;