Ticket #1036: projection-displayprojection.patch
| File projection-displayprojection.patch, 10.2 kB (added by crschmidt, 1 year ago) |
|---|
-
tests/Control/test_MousePosition.html
old new 1 1 <html> 2 2 <head> 3 3 <script src="../../lib/OpenLayers.js"></script> 4 <script type="text/javascript"> 5 6 function test_ MousePosition_constructor(t) {7 t.plan( 2);4 <script type="text/javascript"><!-- 5 var map, control; 6 function test_01_Control_MousePosition_constructor (t) { 7 t.plan( 2 ); 8 8 9 varcontrol = new OpenLayers.Control.MousePosition();10 t.ok( control instanceof OpenLayers.Control.MousePosition, "new OpenLayers.Control.MousePosition returns object");11 t.eq( control.displayClass, "olControlMousePosition", "displayClass set correctly");9 control = new OpenLayers.Control.MousePosition(); 10 t.ok( control instanceof OpenLayers.Control.MousePosition, "new OpenLayers.Control returns object" ); 11 t.eq( control.displayClass, "olControlMousePosition", "displayClass is correct" ); 12 12 } 13 13 function test_02_Control_MousePosition_redraw_noLayer_displayProjection(t) { 14 t.plan(2); 15 control = new OpenLayers.Control.MousePosition({'displayProjection': new OpenLayers.Projection("WGS84")}); 16 map = new OpenLayers.Map('map'); 17 map.addControl(control); 18 control.redraw({'xy': new OpenLayers.Pixel(10,10)}); 19 control.redraw({'xy': new OpenLayers.Pixel(12,12)}); 20 t.eq(control.div.innerHTML, "", "innerHTML set correctly"); 21 l = new OpenLayers.Layer('name', {'isBaseLayer': true}); 22 map.addLayer(l); 23 map.zoomToMaxExtent(); 24 control.redraw({'xy': new OpenLayers.Pixel(10,10)}); 25 control.redraw({'xy': new OpenLayers.Pixel(12,12)}); 26 t.eq(control.div.innerHTML, "-175.78125, 85.78125", "innerHTML set correctly when triggered."); 27 } 14 28 function test_MousePosition_destroy(t) { 15 29 t.plan(1); 16 30 … … 36 50 t.eq(parseInt(control.div.style.zIndex), map.Z_INDEX_BASE['Control'] + 5, "Control div zIndexed properly" ); 37 51 t.eq(parseInt(map.viewPortDiv.lastChild.style.zIndex), map.Z_INDEX_BASE['Control'] + 5, "Viewport div contains control div"); 38 52 } 39 53 // --> 40 54 </script> 41 55 </head> 42 56 <body> -
lib/OpenLayers/Control/MousePosition.js
old new 50 50 * {<OpenLayers.LonLat>} 51 51 */ 52 52 lastXy: null, 53 54 /** 55 * APIProperty: displayProjection 56 * {<OpenLayers.Projection>} A projection that the 57 * mousecontrol will display. 58 */ 59 displayProjection: null, 53 60 54 61 /** 55 62 * Constructor: OpenLayers.Control.MousePosition … … 107 114 return; 108 115 } 109 116 110 lonLat = this.map.getLonLatFromPixel(evt.xy); 117 var lonLat = this.map.getLonLatFromPixel(evt.xy); 118 if (!lonLat) { 119 // map has not yet been properly initialized 120 return; 121 } 122 if (this.displayProjection) { 123 var mapPosition = OpenLayers.Projection.transform( 124 { x: lonLat.lon, y: lonLat.lat }, 125 this.map.getProjectionObject(), 126 this.displayProjection ); 127 lonLat.lon = mapPosition.x; 128 lonLat.lat = mapPosition.y; 129 } 111 130 this.lastXy = evt.xy; 131 112 132 } 113 133 114 134 var digits = parseInt(this.numdigits); -
lib/OpenLayers/Control/Permalink.js
old new 25 25 */ 26 26 base: '', 27 27 28 /** 29 * APIProperty: displayProjection 30 * {<OpenLayers.Projection>} Requires proj4js support. Projection used 31 * when creating the coordinates in the link. This will reproject the 32 * map coordinates into display coordinates. If you are using this 33 * functionality, the permalink which is last added to the map will 34 * determine the coordinate type which is read from the URL, which 35 * means you should not add permalinks with different 36 * displayProjections to the same map. 37 */ 38 displayProjection: null, 39 28 40 /** 29 41 * Constructor: OpenLayers.Control.Permalink 30 42 * … … 67 79 for(var i=0; i< this.map.controls.length; i++) { 68 80 var control = this.map.controls[i]; 69 81 if (control.CLASS_NAME == "OpenLayers.Control.ArgParser") { 82 83 // If a permalink is added to the map, and an ArgParser already 84 // exists, we override the displayProjection to be the one 85 // on the permalink. 86 if (control.displayProjection != this.displayProjection) { 87 this.displayProjection = control.displayProjection; 88 } 89 70 90 break; 71 91 } 72 92 } 73 93 if (i == this.map.controls.length) { 74 this.map.addControl(new OpenLayers.Control.ArgParser()); 94 this.map.addControl(new OpenLayers.Control.ArgParser( 95 { 'displayProjection': this.displayProjection })); 75 96 } 76 97 77 98 }, … … 113 134 var params = OpenLayers.Util.getParameters(this.base); 114 135 115 136 params.zoom = this.map.getZoom(); 116 params.lat = Math.round(center.lat*100000)/100000; 117 params.lon = Math.round(center.lon*100000)/100000; 118 137 var lat = center.lat; 138 var lon = center.lon; 139 140 if (this.displayProjection) { 141 var mapPosition = OpenLayers.Projection.transform( 142 { x: lon, y: lat }, 143 this.map.getProjectionObject(), 144 this.displayProjection ); 145 lon = mapPosition.x; 146 lat = mapPosition.y; 147 } 148 params.lat = Math.round(lat*100000)/100000; 149 params.lon = Math.round(lon*100000)/100000; 150 119 151 params.layers = ''; 120 152 for(var i=0; i< this.map.layers.length; i++) { 121 153 var layer = this.map.layers[i]; -
lib/OpenLayers/Control/ArgParser.js
old new 30 30 * {Array(<OpenLayers.Layer>)} 31 31 */ 32 32 layers: null, 33 34 /** 35 * APIProperty: displayProjection 36 * {<OpenLayers.Projection>} Requires proj4js support. 37 * Projection used when reading the coordinates from the URL. This will 38 * reproject the map coordinates from the URL into the map's 39 * projection. 40 * 41 * If you are using this functionality, be aware that any permalink 42 * which is added to the map will determine the coordinate type which 43 * is read from the URL, which means you should not add permalinks with 44 * different displayProjections to the same map. 45 */ 46 displayProjection: null, 33 47 34 48 /** 35 49 * Constructor: OpenLayers.Control.ArgParser … … 56 70 var control = this.map.controls[i]; 57 71 if ( (control != this) && 58 72 (control.CLASS_NAME == "OpenLayers.Control.ArgParser") ) { 73 74 // If a second argparser is added to the map, then we 75 // override the displayProjection to be the one added to the 76 // map. 77 if (control.displayProjection != this.displayProjection) { 78 this.displayProjection = control.displayProjection; 79 } 80 59 81 break; 60 82 } 61 83 } … … 97 119 //dont need to listen for this one anymore 98 120 this.map.events.unregister('changebaselayer', this, 99 121 this.setCenter); 100 122 123 if (this.displayProjection) { 124 var mapPosition = OpenLayers.Projection.transform( 125 { x: this.center.lon, y: this.center.lat }, 126 this.displayProjection, 127 this.map.getProjectionObject()); 128 this.center.lon = mapPosition.x; 129 this.center.lat = mapPosition.y; 130 } 131 101 132 this.map.setCenter(this.center, this.zoom); 102 133 } 103 134 }, -
lib/OpenLayers/Map.js
old new 232 232 * stylesheets or style declarations directly in your page. 233 233 */ 234 234 theme: null, 235 236 /** 237 * APIProperty: displayProjection 238 * {<OpenLayers.Projection>} Requires proj4js support.Projection used by 239 * several controls to display data to user. If this property is set, 240 * it will be set on any control which has a null displayProjection 241 * property at the time the control is added to the map. 242 */ 243 displayProjection: null, 235 244 236 245 /** 237 246 * APIProperty: fallThrough … … 751 760 // If a control doesn't have a div at this point, it belongs in the 752 761 // viewport. 753 762 control.outsideViewport = (control.div != null); 763 764 // If the map has a displayProjection, and the control doesn't, set 765 // the display projection. 766 if (this.displayProjection && !control.displayProjection) { 767 control.displayProjection = this.displayProjection; 768 } 769 754 770 control.setMap(this); 755 771 var div = control.draw(px); 756 772 if (div) {
