87 lines
2.3 KiB
JavaScript
87 lines
2.3 KiB
JavaScript
OSM.Export = function(map) {
|
|
var page = {};
|
|
|
|
var locationFilter = new L.LocationFilter({
|
|
enableButton: false,
|
|
adjustButton: false
|
|
}).on("change", update);
|
|
|
|
function getBounds() {
|
|
return L.latLngBounds(
|
|
L.latLng($("#minlat").val(), $("#minlon").val()),
|
|
L.latLng($("#maxlat").val(), $("#maxlon").val()));
|
|
}
|
|
|
|
function boundsChanged() {
|
|
var bounds = getBounds();
|
|
map.fitBounds(bounds);
|
|
locationFilter.setBounds(bounds);
|
|
locationFilter.enable();
|
|
validateControls();
|
|
}
|
|
|
|
function enableFilter(e) {
|
|
e.preventDefault();
|
|
|
|
$("#drag_box").hide();
|
|
|
|
locationFilter.setBounds(map.getBounds().pad(-0.2));
|
|
locationFilter.enable();
|
|
validateControls();
|
|
}
|
|
|
|
function update() {
|
|
setBounds(locationFilter.isEnabled() ? locationFilter.getBounds() : map.getBounds());
|
|
validateControls();
|
|
}
|
|
|
|
function setBounds(bounds) {
|
|
var precision = OSM.zoomPrecision(map.getZoom());
|
|
$("#minlon").val(bounds.getWest().toFixed(precision));
|
|
$("#minlat").val(bounds.getSouth().toFixed(precision));
|
|
$("#maxlon").val(bounds.getEast().toFixed(precision));
|
|
$("#maxlat").val(bounds.getNorth().toFixed(precision));
|
|
|
|
$("#export_overpass").attr("href",
|
|
"http://overpass-api.de/api/map?bbox=" +
|
|
$("#minlon").val() + "," + $("#minlat").val() + "," +
|
|
$("#maxlon").val() + "," + $("#maxlat").val());
|
|
}
|
|
|
|
function validateControls() {
|
|
$("#export_osm_too_large").toggle(getBounds().getSize() > OSM.MAX_REQUEST_AREA);
|
|
$("#export_commit").toggle(getBounds().getSize() < OSM.MAX_REQUEST_AREA);
|
|
}
|
|
|
|
function checkSubmit(e) {
|
|
if (getBounds().getSize() > OSM.MAX_REQUEST_AREA) e.preventDefault();
|
|
}
|
|
|
|
page.pushstate = page.popstate = function(path) {
|
|
$("#export_tab").addClass("current");
|
|
OSM.loadSidebarContent(path, page.load);
|
|
};
|
|
|
|
page.load = function() {
|
|
map
|
|
.addLayer(locationFilter)
|
|
.on("moveend", update);
|
|
|
|
$("#maxlat, #minlon, #maxlon, #minlat").change(boundsChanged);
|
|
$("#drag_box").click(enableFilter);
|
|
$(".export_form").on("submit", checkSubmit);
|
|
|
|
update();
|
|
return map.getState();
|
|
};
|
|
|
|
page.unload = function() {
|
|
map
|
|
.removeLayer(locationFilter)
|
|
.off("moveend", update);
|
|
|
|
$("#export_tab").removeClass("current");
|
|
};
|
|
|
|
return page;
|
|
};
|