L.OSM.share = function (options) { var control = L.control(options), marker = L.marker([0, 0], {draggable: true}), locationFilter = new L.LocationFilter({ enableButton: false, adjustButton: false }); control.onAdd = function (map) { var $container = $('
') .attr('class', 'deemphasize') .text(I18n.t('javascripts.share.paste_html')) .appendTo($embedSection); // Image var $imageSection = $('
') .attr('class', 'deemphasize') .html(I18n.t('javascripts.share.image_size') + ' x ') .appendTo($form); $('') .attr('type', 'submit') .attr('value', I18n.t('javascripts.share.download')) .appendTo($form); locationFilter .on('change', update) .addTo(map); map.on('moveend layeradd layerremove', update); options.sidebar.addPane($ui); function toggle(e) { e.stopPropagation(); e.preventDefault(); $('#mapnik_scale').val(getScale()); marker.setLatLng(map.getCenter()); update(); options.sidebar.togglePane($ui); } function toggleMarker() { if ($(this).is(':checked')) { map.addLayer(marker); } else { map.removeLayer(marker); } update(); } function toggleFilter() { if ($(this).is(':checked')) { if (!locationFilter.getBounds().isValid()) { locationFilter.setBounds(map.getBounds().pad(-0.2)); } locationFilter.enable(); } else { locationFilter.disable(); } update(); } function update() { // Link $shortLink.attr('href', map.getShortUrl()); $longLink.attr('href', map.getUrl()); // Embed var bounds = map.getBounds(), center = bounds.getCenter(), params = { bbox: bounds.toBBoxString(), layer: map.getMapBaseLayerId() }, linkParams = { lat: center.lat, lon: center.lng, zoom: map.getBoundsZoom(bounds), layers: map.getLayersCode() }; if (map.hasLayer(marker)) { var m = marker.getLatLng(); params.marker = m.lat + ',' + m.lng; linkParams.mlat = m.lat; linkParams.mlon = m.lng; } $('#embed_html').val( '' + '' + I18n.t('export.start_rjs.view_larger_map') + ''); // Image if (locationFilter.isEnabled()) { bounds = locationFilter.getBounds(); } var scale = $("#mapnik_scale").val(), size = L.bounds(L.CRS.EPSG3857.project(bounds.getSouthWest()), L.CRS.EPSG3857.project(bounds.getNorthEast())).getSize(), maxScale = Math.floor(Math.sqrt(size.x * size.y / 0.3136)); $('#mapnik_minlon').val(bounds.getWest()); $('#mapnik_minlat').val(bounds.getSouth()); $('#mapnik_maxlon').val(bounds.getEast()); $('#mapnik_maxlat').val(bounds.getNorth()); if (scale < maxScale) { scale = roundScale(maxScale); $("#mapnik_scale").val(scale); } $("#mapnik_image_width").text(Math.round(size.x / scale / 0.00028)); $("#mapnik_image_height").text(Math.round(size.y / scale / 0.00028)); } function select() { $(this).select(); } function getScale() { var bounds = map.getBounds(), centerLat = bounds.getCenter().lat, halfWorldMeters = 6378137 * Math.PI * Math.cos(centerLat * Math.PI / 180), meters = halfWorldMeters * (bounds.getEast() - bounds.getWest()) / 180, pixelsPerMeter = map.getSize().x / meters, metersPerPixel = 1 / (92 * 39.3701); return Math.round(1 / (pixelsPerMeter * metersPerPixel)); } function roundScale(scale) { var precision = 5 * Math.pow(10, Math.floor(Math.LOG10E * Math.log(scale)) - 2); return precision * Math.ceil(scale / precision); } return $container[0]; }; return control; };