page.replace_html :sidebar_title, 'Export' page.replace_html :sidebar_content, :partial => 'start' page << < 0.25) { $("format_osm").disabled = true; $("format_osm").checked = false; $("export_osm").style.display = "none"; } else { $("format_osm").disabled = false; } var max_scale = maxMapnikScale(); if ($("format_mapnik").checked && $("mapnik_scale").value < max_scale) { $("export_commit").disabled = true; } else { $("export_commit").disabled = false; } $("mapnik_max_scale").innerHTML = roundScale(max_scale); var max_zoom = maxOsmarenderZoom(); 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 htmlBoundsChanged() { var bounds = new OpenLayers.Bounds($("minlon").value, $("minlat").value, $("maxlon").value, $("maxlat").value); var projBounds = bounds.clone().transform(new OpenLayers.Projection("EPSG:4326"), new OpenLayers.Projection("EPSG:900913")); var zoom = map.getZoomForExtent(projBounds); var center = bounds.getCenterLonLat(); var url = "http://#{SERVER_URL}/export/embed.html?lat=" + center.lat.toFixed(5) + "&lon=" + center.lon.toFixed(5) + "&zoom=" + zoom; if ($("html_marker").checked) { url += "&marker=true"; } var html = ''; $("export_html_text").value = html; if ($("format_html").checked) { $("export_html_text").select(); } } $("html_marker").onclick = htmlBoundsChanged; function formatChanged() { $("export_commit").style.display = "inline"; if ($("format_osm").checked) { $("export_osm").style.display = "inline"; } else { $("export_osm").style.display = "none"; } if ($("format_mapnik").checked) { $("mapnik_scale").value = roundScale(map.getScale()); $("export_mapnik").style.display = "inline"; } else { $("export_mapnik").style.display = "none"; } if ($("format_osmarender").checked) { var zoom = Math.min(map.getZoom(), maxOsmarenderZoom()); $("osmarender_zoom").options.selectedIndex = zoom - 4; $("export_osmarender").style.display = "inline"; } else { $("export_osmarender").style.display = "none"; } if ($("format_html").checked) { $("export_html").style.display = "inline"; $("export_commit").style.display = "none"; $("export_html_text").select(); } else { $("export_html").style.display = "none"; } validateControls(); } $("format_osm").onclick = formatChanged; $("format_mapnik").onclick = formatChanged; $("format_osmarender").onclick = formatChanged; $("format_html").onclick = formatChanged; 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(); validateControls(); } $("mapnik_scale").onchange = mapnikScaleChanged; startExport(); EOJ