diff options
author | Matthew Somerville <matthew@mysociety.org> | 2012-12-03 10:46:54 +0000 |
---|---|---|
committer | Matthew Somerville <matthew@mysociety.org> | 2012-12-03 10:53:09 +0000 |
commit | 2cf8ba561104a67d5d6e8d2eca0d0a6fe91ccff5 (patch) | |
tree | f845e720323ba7243f1b0e45b35ed2d4756bf035 /web/js/OpenLayers.Projection.CH1903.js | |
parent | 9479d41f7b004f48f0a73c075ea454c23e7d9036 (diff) |
Simplify projection logic, and use X/Y same way round as everywhere else.
Diffstat (limited to 'web/js/OpenLayers.Projection.CH1903.js')
-rw-r--r-- | web/js/OpenLayers.Projection.CH1903.js | 141 |
1 files changed, 47 insertions, 94 deletions
diff --git a/web/js/OpenLayers.Projection.CH1903.js b/web/js/OpenLayers.Projection.CH1903.js index cb62a0168..34a0500fa 100644 --- a/web/js/OpenLayers.Projection.CH1903.js +++ b/web/js/OpenLayers.Projection.CH1903.js @@ -5,117 +5,70 @@ * * Maths courtesy of the Swiss Federal Office of Topography: * http://www.swisstopo.admin.ch/internet/swisstopo/en/home/products/software/products/skripts.html + * Simplifed a bit, and with x/y swapped the normal way round. */ - OpenLayers.Projection.CH1903 = { - // Convert SEX DMS angle to DEC - SEXtoDEC: function(angle) { - - // Extract DMS - var deg = parseInt(angle, 10); - var min = parseInt((angle - deg) * 100, 10); - var sec = (((angle - deg) * 100) - min) * 100; - - // Result in degrees sex (dd.mmss) - return deg + ((sec / 60 + min) / 60); - - }, - - // Convert DEC angle to SEX DMS - DECtoSEX: function(angle) { - - // Extract DMS - var deg = parseInt(angle, 10); - var min = parseInt((angle - deg) * 60, 10); - var sec = (((angle - deg) * 60) - min) * 60; - - // Result in degrees sex (dd.mmss) - return deg + (min / 100) + (sec / 10000); - - }, - - // Convert Degrees angle to seconds - DEGtoSEC: function(angle) { - - // Extract DMS - var deg = parseInt( angle ); - var min = parseInt( (angle - deg) * 100 ); - var sec = (((angle - deg) * 100) - min) * 100; - - // Result in degrees sex (dd.mmss) - return sec + (min * 60) + (deg * 3600); - - }, - - // Convert WGS lat/long (° dec) to CH y - WGStoCHy: function(lat, lng) { - - // Converts degrees dec to sex - lat = OpenLayers.Projection.CH1903.DECtoSEX(lat); - lng = OpenLayers.Projection.CH1903.DECtoSEX(lng); + // Convert WGS lat/long (° dec) to CH x + WGStoCHx: function(lat, lng) { - // Converts degrees to seconds (sex) - lat = OpenLayers.Projection.CH1903.DEGtoSEC(lat); - lng = OpenLayers.Projection.CH1903.DEGtoSEC(lng); + // Converts degrees dec to seconds + lat = lat * 3600; + lng = lng * 3600; - // Axiliary values (% Bern) + // Auxiliary values (% Bern) var lat_aux = (lat - 169028.66) / 10000; var lng_aux = (lng - 26782.5) / 10000; - // Process Y - y = 600072.37; - y = y + (211455.93 * lng_aux); - y = y - (10938.51 * lng_aux * lat_aux); - y = y - (0.36 * lng_aux * Math.pow(lat_aux, 2)); - y = y - (44.54 * Math.pow(lng_aux, 3)); + // Process X + var x = 600072.37; + x = x + (211455.93 * lng_aux); + x = x - (10938.51 * lng_aux * lat_aux); + x = x - (0.36 * lng_aux * Math.pow(lat_aux, 2)); + x = x - (44.54 * Math.pow(lng_aux, 3)); - return y; + return x; }, - // Convert WGS lat/long (° dec) to CH x - WGStoCHx: function(lat, lng) { - - // Converts degrees dec to sex - lat = OpenLayers.Projection.CH1903.DECtoSEX(lat); - lng = OpenLayers.Projection.CH1903.DECtoSEX(lng); + // Convert WGS lat/long (° dec) to CH y + WGStoCHy: function(lat, lng) { - // Converts degrees to seconds (sex) - lat = OpenLayers.Projection.CH1903.DEGtoSEC(lat); - lng = OpenLayers.Projection.CH1903.DEGtoSEC(lng); + // Converts degrees dec to seconds + lat = lat * 3600; + lng = lng * 3600; - // Axiliary values (% Bern) + // Auxiliary values (% Bern) var lat_aux = (lat - 169028.66)/10000; var lng_aux = (lng - 26782.5)/10000; - // Process X - x = 200147.07; - x = x + (308807.95 * lat_aux); - x = x + (3745.25 * Math.pow(lng_aux, 2)); - x = x + (76.63 * Math.pow(lat_aux, 2)); - x = x - (194.56 * Math.pow(lng_aux, 2) * lat_aux); - x = x + (119.79 * Math.pow(lat_aux, 3)); + // Process Y + var y = 200147.07; + y = y + (308807.95 * lat_aux); + y = y + (3745.25 * Math.pow(lng_aux, 2)); + y = y + (76.63 * Math.pow(lat_aux, 2)); + y = y - (194.56 * Math.pow(lng_aux, 2) * lat_aux); + y = y + (119.79 * Math.pow(lat_aux, 3)); - return x; + return y; }, - // Convert CH y/x to WGS lat - chToWGSlat: function(y, x) { + // Convert CH x/y to WGS lat + chToWGSlat: function(x, y) { // Converts militar to civil and to unit = 1000km // Axiliary values (% Bern) - var y_aux = (y - 600000) / 1000000; - var x_aux = (x - 200000) / 1000000; + var x_aux = (x - 600000) / 1000000; + var y_aux = (y - 200000) / 1000000; // Process lat var lat = 16.9023892; - lat = lat + (3.238272 * x_aux); - lat = lat - (0.270978 * Math.pow(y_aux, 2)); - lat = lat - (0.002528 * Math.pow(x_aux, 2)); - lat = lat - (0.0447 * Math.pow(y_aux, 2) * x_aux); - lat = lat - (0.0140 * Math.pow(x_aux, 3)); + lat = lat + (3.238272 * y_aux); + lat = lat - (0.270978 * Math.pow(x_aux, 2)); + lat = lat - (0.002528 * Math.pow(y_aux, 2)); + lat = lat - (0.0447 * Math.pow(x_aux, 2) * y_aux); + lat = lat - (0.0140 * Math.pow(y_aux, 3)); // Unit 10000" to 1 " and converts seconds to degrees (dec) lat = lat * 100 / 36; @@ -124,20 +77,20 @@ OpenLayers.Projection.CH1903 = { }, - // Convert CH y/x to WGS long - chToWGSlng: function(y, x) { + // Convert CH x/y to WGS long + chToWGSlng: function(x, y) { // Converts militar to civil and to unit = 1000km // Axiliary values (% Bern) - var y_aux = (y - 600000) / 1000000; - var x_aux = (x - 200000) / 1000000; + var x_aux = (x - 600000) / 1000000; + var y_aux = (y - 200000) / 1000000; // Process long var lng = 2.6779094; - lng = lng + (4.728982 * y_aux); - lng = lng + (0.791484 * y_aux * x_aux); - lng = lng + (0.1306 * y_aux * Math.pow(x_aux, 2)); - lng = lng - (0.0436 * Math.pow(y_aux, 3)); + lng = lng + (4.728982 * x_aux); + lng = lng + (0.791484 * x_aux * y_aux); + lng = lng + (0.1306 * x_aux * Math.pow(y_aux, 2)); + lng = lng - (0.0436 * Math.pow(x_aux, 3)); // Unit 10000" to 1 " and converts seconds to degrees (dec) lng = lng * 100 / 36; @@ -150,8 +103,8 @@ OpenLayers.Projection.CH1903 = { projectForwardSwiss: function(point) { var x = OpenLayers.Projection.CH1903.WGStoCHx(point.y, point.x), y = OpenLayers.Projection.CH1903.WGStoCHy(point.y, point.x); - point.x = y; // x/y are geometrically swapped by the conversion functions - point.y = x; + point.x = x; + point.y = y; return point; }, |