Skip to content

Commit c9dcc02

Browse files
committed
[BUGFIX] #67 Print - Scales not well manage
The code has to be refactoring to be more robust.
1 parent 4dbbc70 commit c9dcc02

File tree

2 files changed

+60
-171
lines changed

2 files changed

+60
-171
lines changed

lizmap/install/qgis/montpellier.qgs

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55
<mapcanvas>
66
<units>degrees</units>
77
<extent>
8-
<xmin>3.75405748394433703</xmin>
8+
<xmin>3.7453773602525553</xmin>
99
<ymin>43.52758744508426503</ymin>
10-
<xmax>3.99429656851635029</xmax>
10+
<xmax>4.00297669220813201</xmax>
1111
<ymax>43.69220097167266204</ymax>
1212
</extent>
1313
<projections>1</projections>
@@ -30,7 +30,7 @@
3030
<layer_coordinate_transform destAuthId="EPSG:4326" srcAuthId="EPSG:3857" srcDatumTransform="-1" destDatumTransform="-1" layerid="frmt_wms_openstreetmap_mapnik_tms20140610162910636"/>
3131
</layer_coordinate_transform_info>
3232
</mapcanvas>
33-
<legend updateDrawingOrder="true" activeLayer="frmt_wms_openstreetmap_mapquest_tms20140610162911446">
33+
<legend updateDrawingOrder="true">
3434
<legendgroup open="true" checked="Qt::Checked" name="Edition">
3535
<legendlayer drawingOrder="1" open="false" checked="Qt::Checked" name="points of interest" showFeatureCount="0">
3636
<filegroup open="false" hidden="false">
@@ -442,6 +442,12 @@
442442
<prop k="width_border" v="0.26"/>
443443
</layer>
444444
</symbol>
445+
<ComposerScaleBar penColor="#000000" style="Numeric" numMapUnitsPerScaleBarUnit="1" alignment="0" brushColor="#000000" numSegments="4" segmentMillimeters="11.5034" fontColor="#000000" font="Ubuntu,12,-1,5,50,0,0,0,0,0" numUnitsPerSegment="0.01" units="1" labelBarSpace="3" outlineWidth="1" numSegmentsLeft="2" height="3" mapId="0" boxContentSpace="1" unitLabel=" m">
446+
<ComposerItem width="34.092" x="200.908" transparency="0" y="114.833" height="7.76667" positionMode="0" frame="false" outlineWidth="0.3" zValue="7" itemRotation="0" lastValidViewScaleFactor="3.77953" uuid="{e7959b14-6bc8-4be4-aeaf-ea7b23ea37f1}" id="" background="true" blendMode="0" positionLock="false">
447+
<FrameColor alpha="255" red="0" blue="0" green="0"/>
448+
<BackgroundColor alpha="255" red="255" blue="255" green="255"/>
449+
</ComposerItem>
450+
</ComposerScaleBar>
445451
<ComposerPicture pictureRotation="0" pictureWidth="30" file="/usr/share/qgis/svg/arrows/Arrow_05.svg" pictureHeight="30" mapId="0">
446452
<ComposerItem width="30" x="5.25781" transparency="0" y="105" height="30" positionMode="0" frame="false" outlineWidth="0.3" zValue="6" itemRotation="0" lastValidViewScaleFactor="2.86256" uuid="{5fc27115-d5a9-44e3-aebe-e6199c6ac0fa}" id="" background="true" blendMode="0" positionLock="false">
447453
<FrameColor alpha="255" red="0" blue="0" green="0"/>
@@ -451,7 +457,7 @@
451457
<ComposerLabel valign="32" labelText="Description" htmlState="0" halign="1" margin="1">
452458
<LabelFont description="Cantarell,10,-1,5,50,0,0,0,0,0"/>
453459
<FontColor red="0" blue="0" green="0"/>
454-
<ComposerItem width="59" x="235" transparency="0" y="0" height="86" positionMode="0" frame="false" outlineWidth="0.3" zValue="5" itemRotation="0" lastValidViewScaleFactor="1.36982" uuid="{06e65314-c767-44f7-a174-12e1ae4baf0d}" id="description" background="true" blendMode="0" positionLock="false">
460+
<ComposerItem width="59" x="235" transparency="0" y="0" height="70.3" positionMode="0" frame="false" outlineWidth="0.3" zValue="5" itemRotation="0" lastValidViewScaleFactor="3.77953" uuid="{06e65314-c767-44f7-a174-12e1ae4baf0d}" id="description" background="true" blendMode="0" positionLock="false">
455461
<FrameColor alpha="255" red="0" blue="0" green="0"/>
456462
<BackgroundColor alpha="255" red="255" blue="255" green="255"/>
457463
</ComposerItem>
@@ -508,7 +514,7 @@
508514
</Annotation>
509515
</Grid>
510516
<AtlasMap fixedScale="0" atlasDriven="0" margin="0.10000000000000001"/>
511-
<ComposerItem width="59" x="235" transparency="0" y="86" height="45" positionMode="0" frame="false" outlineWidth="0.3" zValue="3" itemRotation="0" lastValidViewScaleFactor="1.36982" uuid="{2ebf76e3-6f6b-4c34-95f1-3d642932cfb3}" id="" background="true" blendMode="0" positionLock="false">
517+
<ComposerItem width="59" x="238" transparency="0" y="77.6" height="45" positionMode="0" frame="false" outlineWidth="0.3" zValue="3" itemRotation="0" lastValidViewScaleFactor="0.972936" uuid="{2ebf76e3-6f6b-4c34-95f1-3d642932cfb3}" id="" background="true" blendMode="0" positionLock="false">
512518
<FrameColor alpha="255" red="0" blue="0" green="0"/>
513519
<BackgroundColor alpha="255" red="255" blue="255" green="255"/>
514520
</ComposerItem>
@@ -1542,7 +1548,7 @@
15421548
</Annotation>
15431549
</Grid>
15441550
<AtlasMap fixedScale="0" atlasDriven="0" margin="0.10000000000000001"/>
1545-
<ComposerItem width="231.943" x="5.25781" transparency="0" y="18" height="104.6" positionMode="0" frame="false" outlineWidth="0.3" zValue="1" itemRotation="0" lastValidViewScaleFactor="2.86256" uuid="{2835ecbd-6089-4454-b22e-707b558ecef1}" id="" background="true" blendMode="0" positionLock="false">
1551+
<ComposerItem width="231.943" x="5.25781" transparency="0" y="18" height="104.6" positionMode="0" frame="false" outlineWidth="0.3" zValue="1" itemRotation="0" lastValidViewScaleFactor="3.77953" uuid="{2835ecbd-6089-4454-b22e-707b558ecef1}" id="" background="true" blendMode="0" positionLock="false">
15461552
<FrameColor alpha="255" red="0" blue="0" green="0"/>
15471553
<BackgroundColor alpha="255" red="255" blue="255" green="255"/>
15481554
</ComposerItem>

lizmap/www/js/map.js

Lines changed: 48 additions & 165 deletions
Original file line numberDiff line numberDiff line change
@@ -1678,7 +1678,6 @@ var lizMap = function() {
16781678
else
16791679
$('#nominatim-search').remove();
16801680

1681-
//addComplexPrintControl();
16821681
}
16831682

16841683
function deactivateToolControls( evt ) {
@@ -1778,25 +1777,44 @@ var lizMap = function() {
17781777
return info;
17791778
}
17801779

1781-
function getPrintScale( scale ) {
1782-
if (scale >= 9500 && scale <= 950000) {
1783-
scale = Math.round(scale / 1000) * 1000;
1784-
} else if (scale >= 950000) {
1785-
scale = Math.round(scale / 1000000) * 1000000;
1786-
} else {
1787-
scale = Math.round(scale);
1788-
}
1789-
return scale;
1780+
function getPrintScale( aScales ) {
1781+
var scale = map.getScale();
1782+
var scaleIdx = aScales.indexOf( scale );
1783+
if ( scaleIdx == -1 ) {
1784+
var s=0, slen=aScales.length;
1785+
while ( scaleIdx == -1 && s<slen ) {
1786+
if ( scale > aScales[s] )
1787+
scaleIdx = s;
1788+
else
1789+
s++;
1790+
}
1791+
if( s == slen ) {
1792+
scale = aScales[slen-1];
1793+
} else {
1794+
scale = aScales[scaleIdx];
1795+
}
1796+
}
1797+
return scale;
1798+
}
1799+
1800+
function drawPrintBox( aLayout, aLayer, aScale ) {
1801+
var center = map.getCenter();
1802+
var size = aLayout.size;
1803+
var units = map.getUnits();
1804+
var unitsRatio = OpenLayers.INCHES_PER_UNIT[units];
1805+
var w = size.width / 72 / unitsRatio * aScale / 2;
1806+
var h = size.height / 72 / unitsRatio * aScale / 2;
1807+
var bounds = new OpenLayers.Bounds(center.lon - w, center.lat - h,
1808+
center.lon + w, center.lat + h);
1809+
var geom = bounds.toGeometry();
1810+
var feat = aLayer.features[0];
1811+
geom.id = feat.geometry.id;
1812+
feat.geometry = geom;
1813+
aLayer.drawFeature(feat);
1814+
return true;
17901815
}
17911816

17921817
function addPrintControl() {
1793-
// if no composers removed print
1794-
/*
1795-
if (composers.length == 0 ) {
1796-
$('#togglePrint').parent().remove();
1797-
return false;
1798-
}
1799-
*/
18001818
if ( !config['printTemplates'] || config.printTemplates.length == 0 ) {
18011819
$('#togglePrint').parent().remove();
18021820
return false;
@@ -1823,7 +1841,7 @@ var lizMap = function() {
18231841

18241842
var scaleOptions = '';
18251843
for( var i=0, len=scales.length; i<len; i++ ){
1826-
var scale = getPrintScale( scales[i] );
1844+
var scale = scales[i];
18271845
printCapabilities.scales.push(scale);
18281846
var scaleText = scale;
18291847
if (scale >= 9500 && scale <= 950000) {
@@ -1930,30 +1948,12 @@ var lizMap = function() {
19301948
deactivateToolControls(evt);
19311949

19321950
var layout = this.layout;
1933-
var units = map.getUnits();
1934-
// get scale and update the select
1935-
var res = map.getResolution()/2;
1936-
var scale = OpenLayers.Util.getScaleFromResolution(res, units);
1937-
scale = getPrintScale( scale );
1938-
var scaleIdx = printCapabilities.scales.indexOf( scale );
1939-
if ( scaleIdx == -1 ) {
1940-
res = map.getResolution();
1941-
scale = OpenLayers.Util.getScaleFromResolution(res, units);
1942-
scale = getPrintScale( scale );
1943-
}
1951+
// get print scale
1952+
var scale = getPrintScale( printCapabilities.scales );
1953+
// update the select
19441954
$('#print-menu select.btn-print-scales').val(scale);
1945-
1946-
var center = map.getCenter();
1947-
var size = layout.size;
1948-
var unitsRatio = OpenLayers.INCHES_PER_UNIT[units];
1949-
var w = size.width / 72 / unitsRatio * scale / 2;
1950-
var h = size.height / 72 / unitsRatio * scale / 2;
1951-
var bounds = new OpenLayers.Bounds(center.lon - w, center.lat - h,
1952-
center.lon + w, center.lat + h);
1953-
var geom = bounds.toGeometry();
1954-
var feat = layer.features[0];
1955-
geom.id = feat.geometry.id;
1956-
feat.geometry = geom;
1955+
// draw print box
1956+
drawPrintBox( layout, layer, scale );
19571957

19581958
$('#togglePrint').parent().addClass('active');
19591959
$('#print-menu .title .text').html(layout.name);
@@ -2020,20 +2020,9 @@ var lizMap = function() {
20202020
$('#print-menu select.btn-print-scales').change(function() {
20212021
if ( dragCtrl.active && layer.getVisibility() ) {
20222022
var self = $(this);
2023-
var units = map.getUnits();
20242023
var scale = parseFloat(self.val());
2025-
var center = map.getCenter();
2026-
var size = dragCtrl.layout.size;
2027-
var unitsRatio = OpenLayers.INCHES_PER_UNIT[units];
2028-
var w = size.width / 72 / unitsRatio * scale / 2;
2029-
var h = size.height / 72 / unitsRatio * scale / 2;
2030-
var bounds = new OpenLayers.Bounds(center.lon - w, center.lat - h,
2031-
center.lon + w, center.lat + h);
2032-
var geom = bounds.toGeometry();
2033-
var feat = layer.features[0];
2034-
geom.id = feat.geometry.id;
2035-
feat.geometry = geom;
2036-
layer.drawFeature(feat);
2024+
// draw print box
2025+
drawPrintBox( dragCtrl.layout, layer, scale );
20372026
}
20382027
});
20392028
$('#print-menu button.btn-print-launch').click(function() {
@@ -2084,121 +2073,15 @@ var lizMap = function() {
20842073
map.events.on({
20852074
"zoomend": function() {
20862075
if ( dragCtrl.active && layer.getVisibility() ) {
2087-
var units = map.getUnits();
2088-
var res = map.getResolution()/2;
2089-
var scale = OpenLayers.Util.getScaleFromResolution(res, units);
2090-
scale = getPrintScale( scale );
2091-
var scaleIdx = printCapabilities.scales.indexOf( scale );
2092-
if ( scaleIdx == -1 ) {
2093-
res = map.getResolution();
2094-
scale = OpenLayers.Util.getScaleFromResolution(res, units);
2095-
scale = getPrintScale( scale );
2096-
}
2076+
// get scale
2077+
var scale = getPrintScale( printCapabilities.scales );
2078+
// update the select
20972079
$('#print-menu select.btn-print-scales').val(scale);
2098-
var center = map.getCenter();
2099-
var size = printCapabilities.layouts[0].size;
2100-
var unitsRatio = OpenLayers.INCHES_PER_UNIT[units];
2101-
var w = size.width / 72 / unitsRatio * scale / 2;
2102-
var h = size.height / 72 / unitsRatio * scale / 2;
2103-
var bounds = new OpenLayers.Bounds(center.lon - w, center.lat - h,
2104-
center.lon + w, center.lat + h);
2105-
var geom = bounds.toGeometry();
2106-
var feat = layer.features[0];
2107-
geom.id = feat.geometry.id;
2108-
feat.geometry = geom;
2109-
layer.drawFeature(feat);
2110-
}
2111-
}
2112-
});
2113-
}
2114-
2115-
function addComplexPrintControl() {
2116-
var ptTomm = 0.35277; //conversion pt to mm
2117-
var printCapabilities = {scales:[],layouts:[]};
2118-
for (var i=0, len=composers.length; i<len; i++) {
2119-
var composer = composers[i];
2120-
var composerMap = composer.getElementsByTagName('ComposerMap');
2121-
if (composerMap.length != 0) {
2122-
composerMap = composerMap[0];
2123-
var mapWidth = Number(composer.getElementsByTagName('ComposerMap')[0].getAttribute('width')) / ptTomm;
2124-
var mapHeight = Number(composer.getElementsByTagName('ComposerMap')[0].getAttribute('height')) / ptTomm;
2125-
//for some strange reason we need to provide a "map" and a "size" object with identical content
2126-
printCapabilities.layouts.push({
2127-
"name": composer.getAttribute('name'),
2128-
"map": {
2129-
"width": mapWidth,
2130-
"height": mapHeight
2131-
},
2132-
"size": {
2133-
"width": mapWidth,
2134-
"height": mapHeight
2135-
},
2136-
"rotation": true
2137-
});
2138-
}
2139-
}
2140-
var layer = map.getLayersByName('Print');
2141-
if ( layer.length == 0 ) {
2142-
layer = new OpenLayers.Layer.Vector('Print');
2143-
map.addLayer(layer);
2144-
layer.setVisibility(false);
2145-
} else
2146-
layer = layer[0];
2147-
if ( layer.features.length == 0 )
2148-
layer.addFeatures([
2149-
new OpenLayers.Feature.Vector(
2150-
new OpenLayers.Geometry.Polygon([
2151-
new OpenLayers.Geometry.LinearRing([
2152-
new OpenLayers.Geometry.Point(-1, -1),
2153-
new OpenLayers.Geometry.Point(1, -1),
2154-
new OpenLayers.Geometry.Point(1, 1),
2155-
new OpenLayers.Geometry.Point(-1, 1)
2156-
])
2157-
])
2158-
)
2159-
]);
2160-
var transformCtrl = new OpenLayers.Control.TransformFeature(layer,{
2161-
preserveAspectRatio: true,
2162-
rotate: true,
2163-
geometryTypes: ['OpenLayers.Geometry.Polygon'],
2164-
eventListeners: {
2165-
"activate": function(e) {
2166-
var units = map.getUnits();
2167-
var res = map.getResolution()/2;
2168-
var scale = OpenLayers.Util.getScaleFromResolution(res, units);
2169-
var center = map.getCenter();
2170-
var size = printCapabilities.layouts[0].size;
2171-
var unitsRatio = OpenLayers.INCHES_PER_UNIT[units];
2172-
var w = size.width / 72 / unitsRatio * scale / 2;
2173-
var h = size.height / 72 / unitsRatio * scale / 2;
2174-
var bounds = new OpenLayers.Bounds(center.lon - w, center.lat - h,
2175-
center.lon + w, center.lat + h);
2176-
var geom = bounds.toGeometry();
2177-
var feat = layer.features[0];
2178-
geom.id = feat.geometry.id;
2179-
feat.geometry = geom;
2180-
layer.setVisibility(true);
2181-
//e.object.setFeature(feat);
2182-
},
2183-
"deactivate": function(e) {
2184-
//layer.destroyFeatures();
2185-
layer.setVisibility(false);
2186-
},
2187-
"beforesetfeature": function(e) {
2188-
},
2189-
"setfeature": function(e) {
2190-
},
2191-
"beforetransform": function(e) {
2192-
},
2193-
"transformcomplete": function(e) {
2080+
// draw print box
2081+
drawPrintBox( dragCtrl.layout, layer, scale );
21942082
}
21952083
}
21962084
});
2197-
map.addControls([transformCtrl]);
2198-
controls['printTransform'] = transformCtrl;
2199-
//pour activer il suffit de faire un setFeature
2200-
//transformCtrl.setFeature(layer.features[0]);
2201-
return true;
22022085
}
22032086

22042087
function addEditionControls() {

0 commit comments

Comments
 (0)