if (endpoint.geocodeRequest) endpoint.geocodeRequest.abort();
delete endpoint.geocodeRequest;
+ removeLatLng();
+ delete endpoint.value;
+ input.val("");
map.removeLayer(endpoint.marker);
};
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);
var viewbox = map.getBounds().toBBoxString(); // <sw lon>,<sw lat>,<ne lon>,<ne lat>
var geocodeUrl = OSM.NOMINATIM_URL + "search?q=" + encodeURIComponent(endpoint.value) + "&format=json&viewbox=" + viewbox;
+ if (endpoint.geocodeRequest) endpoint.geocodeRequest.abort();
endpoint.geocodeRequest = $.getJSON(geocodeUrl, function (json) {
delete endpoint.geocodeRequest;
if (json.length === 0) {
}
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;