page.replace_html :sidebar_title, 'Export' page.replace_html :sidebar_content, :partial => 'start' page << < 0.25) { $("format_osm").disabled = true; $("format_osm").checked = false; formatChanged(); } else { $("format_osm").disabled = false; } var max_zoom = maxOsmarenderZoom(); var max_scale = maxMapnikScale(); $("mapnik_max_scale").innerHTML = roundScale(max_scale); mapnikScaleChanged(); for (var o = 0; o < $("osmarender_zoom").options.length; o++) { var option = $("osmarender_zoom").options[o]; if (option.value > max_zoom) { option.disabled = true; } else { option.disabled = false; } } if ($("osmarender_zoom").options.selectedIndex + 4 > max_zoom) { $("osmarender_zoom").options.selectedIndex = max_zoom - 4; } } function maxMapnikScale() { var bounds = new OpenLayers.Bounds($("minlon").value, $("minlat").value, $("maxlon").value, $("maxlat").value); var epsg4326 = new OpenLayers.Projection("EPSG:4326"); var epsg900913 = new OpenLayers.Projection("EPSG:900913"); bounds.transform(epsg4326, epsg900913); return Math.floor(Math.sqrt(bounds.getWidth() * bounds.getHeight() / 0.3136)); } function mapnikImageSize(scale) { var bounds = new OpenLayers.Bounds($("minlon").value, $("minlat").value, $("maxlon").value, $("maxlat").value); var epsg4326 = new OpenLayers.Projection("EPSG:4326"); var epsg900913 = new OpenLayers.Projection("EPSG:900913"); bounds.transform(epsg4326, epsg900913); return new OpenLayers.Size(Math.round(bounds.getWidth() / scale / 0.00028), Math.round(bounds.getHeight() / scale / 0.00028)); } function maxOsmarenderZoom() { var bounds = new OpenLayers.Bounds($("minlon").value, $("minlat").value, $("maxlon").value, $("maxlat").value); var xzoom = Math.LOG2E * Math.log(2000 * 1.40625 / bounds.getWidth()); var ymin = bounds.bottom * Math.PI / 180; var ymax = bounds.top * Math.PI / 180; var yzoom = Math.LOG2E * (Math.log(2000 * 2 * Math.PI) - Math.log(Math.log((Math.tan(ymax) + 1 / Math.cos(ymax)) / (Math.tan(ymin) + 1 / Math.cos(ymin))))) return Math.floor(Math.min(xzoom, yzoom)); } function roundScale(scale) { var precision = 5 * Math.pow(10, Math.floor(Math.LOG10E * Math.log(scale)) - 2); return precision * Math.ceil(scale / precision); } function mapnikSizeChanged() { var size = mapnikImageSize($("mapnik_scale").value); $("mapnik_image_width").innerHTML = size.w; $("mapnik_image_height").innerHTML = size.h; } function mapnikScaleChanged() { mapnikSizeChanged(); if ($("mapnik_scale").value < maxMapnikScale()) { $("export_commit").disabled = true; } else { $("export_commit").disabled = false; } } $("mapnik_scale").onchange = mapnikScaleChanged; startExport(); EOJ