OSM.router.route("/directions?" + Qs.stringify({
from: lat + "," + lng,
- to: $("#route_to").val()
+ to: getDirectionsEndpointCoordinatesFromInput($("#route_to"))
}));
}
});
lng = latlng.lng.toFixed(precision);
OSM.router.route("/directions?" + Qs.stringify({
- from: $("#route_from").val(),
+ from: getDirectionsEndpointCoordinatesFromInput($("#route_from")),
to: lat + "," + lng
}));
}
else map.contextmenu.enable();
});
+ function getDirectionsEndpointCoordinatesFromInput(input) {
+ if (input.attr("data-lat") && input.attr("data-lon")) {
+ return input.attr("data-lat") + "," + input.attr("data-lon");
+ } else {
+ return $(input).val();
+ }
+ }
+
var updateMenu = function updateMenu() {
map.contextmenu.setDisabled(2, map.getZoom() < 12);
map.contextmenu.setDisabled(4, map.getZoom() < 14);
};
function markerDragListener(e) {
- var latlng = e.target.getLatLng();
+ var latlng = convertLatLngToZoomPrecision(e.target.getLatLng());
setLatLng(latlng);
setInputValueFromLatLng(latlng);
endpoint.setValue = function (value, latlng) {
endpoint.value = value;
- delete endpoint.latlng;
+ removeLatLng();
input.removeClass("is-invalid");
input.val(value);
}
function setLatLng(ll) {
+ input
+ .attr("data-lat", ll.lat)
+ .attr("data-lon", ll.lng);
endpoint.latlng = ll;
endpoint.marker
.setLatLng(ll)
.addTo(map);
}
+ function removeLatLng() {
+ input
+ .removeAttr("data-lat")
+ .removeAttr("data-lon");
+ delete endpoint.latlng;
+ }
+
function setInputValueFromLatLng(latlng) {
+ input.val(latlng.lat + ", " + latlng.lng);
+ }
+
+ function convertLatLngToZoomPrecision(latlng) {
var precision = OSM.zoomPrecision(map.getZoom());
- input.val(latlng.lat.toFixed(precision) + ", " + latlng.lng.toFixed(precision));
+ return L.latLng(latlng.lat.toFixed(precision), latlng.lng.toFixed(precision));
}
return endpoint;
var ll = map.containerPointToLatLng(pt);
var precision = OSM.zoomPrecision(map.getZoom());
var value = ll.lat.toFixed(precision) + ", " + ll.lng.toFixed(precision);
- endpoints[type === "from" ? 0 : 1].setValue(value, ll);
+ var llWithPrecision = L.latLng(ll.lat.toFixed(precision), ll.lng.toFixed(precision));
+ endpoints[type === "from" ? 0 : 1].setValue(value, llWithPrecision);
});
endpoints[0].enable();