Ticket #1036: displayProjection.patch
| File displayProjection.patch, 9.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 … … 56 70 t.eq(control.div.innerHTML, "-175.78125, 85.78125", "innerHTML set correctly when triggered."); 57 71 map.destroy(); 58 72 } 59 73 // --> 60 74 </script> 61 75 </head> 62 76 <body> -
lib/OpenLayers/Map.js
old new 238 238 * stylesheets or style declarations directly in your page. 239 239 */ 240 240 theme: null, 241 242 /** 243 * APIProperty: displayProjection 244 * {<OpenLayers.Projection>} Requires proj4js support.Projection used by 245 * several controls to display data to user. If this property is set, 246 * it will be set on any control which has a null displayProjection 247 * property at the time the control is added to the map. 248 */ 249 displayProjection: null, 241 250 242 251 /** 243 252 * APIProperty: fallThrough … … 915 924 // If a control doesn't have a div at this point, it belongs in the 916 925 // viewport. 917 926 control.outsideViewport = (control.div != null); 927 928 // If the map has a displayProjection, and the control doesn't, set 929 // the display projection. 930 if (this.displayProjection && !control.displayProjection) { 931 control.displayProjection = this.displayProjection; 932 } 933 918 934 control.setMap(this); 919 935 var div = control.draw(px); 920 936 if (div) { -
lib/OpenLayers/Control/MousePosition.js
old new 51 51 * {<OpenLayers.LonLat>} 52 52 */ 53 53 lastXy: null, 54 55 /** 56 * APIProperty: displayProjection 57 * {<OpenLayers.Projection>} A projection that the 58 * mousecontrol will display. 59 */ 60 displayProjection: null, 54 61 55 62 /** 56 63 * Constructor: OpenLayers.Control.MousePosition … … 113 120 // map has not yet been properly initialized 114 121 return; 115 122 } 123 if (this.displayProjection) { 124 lonLat.transform(this.map.getProjectionObject(), 125 this.displayProjection ); 126 } 116 127 this.lastXy = evt.xy; 128 117 129 } 118 130 119 131 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 }, … … 112 133 var params = OpenLayers.Util.getParameters(this.base); 113 134 114 135 params.zoom = this.map.getZoom(); 115 params.lat = Math.round(center.lat*100000)/100000; 116 params.lon = Math.round(center.lon*100000)/100000; 117 136 var lat = center.lat; 137 var lon = center.lon; 138 139 if (this.displayProjection) { 140 var mapPosition = OpenLayers.Projection.transform( 141 { x: lon, y: lat }, 142 this.map.getProjectionObject(), 143 this.displayProjection ); 144 lon = mapPosition.x; 145 lat = mapPosition.y; 146 } 147 params.lat = Math.round(lat*100000)/100000; 148 params.lon = Math.round(lon*100000)/100000; 149 118 150 params.layers = ''; 119 151 for(var i=0; i< this.map.layers.length; i++) { 120 152 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 this.center.transform(this.displayProjection, 125 this.map.getProjectionObject()); 126 } 127 101 128 this.map.setCenter(this.center, this.zoom); 102 129 } 103 130 },
