From 1803e7b28dc527badfcb9b15a52991f9ab3b1edb Mon Sep 17 00:00:00 2001 From: Bruno Binet Date: Wed, 6 Mar 2013 10:27:50 +0100 Subject: [PATCH 1/4] Add getMetersPerUnit instance method to ol.Projection --- src/ol/projection.js | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/ol/projection.js b/src/ol/projection.js index bf6586e7ee..15d42cc50a 100644 --- a/src/ol/projection.js +++ b/src/ol/projection.js @@ -33,6 +33,15 @@ ol.ProjectionUnits = { }; +/** + * @const {Object.} Meters per unit lookup table. + */ +ol.METERS_PER_UNIT = {}; +ol.METERS_PER_UNIT[ol.ProjectionUnits.DEGREES] = 2 * Math.PI * 6378000 / 360; +ol.METERS_PER_UNIT[ol.ProjectionUnits.FEET] = 0.02540005080010160020; +ol.METERS_PER_UNIT[ol.ProjectionUnits.METERS] = 1; + + /** * @constructor @@ -109,6 +118,14 @@ ol.Projection.prototype.getUnits = function() { }; +/** + * @return {number} Meters. + */ +ol.Projection.prototype.getMetersPerUnit = function() { + return ol.METERS_PER_UNIT[this.units_]; +}; + + /** * @return {string} Axis orientation. */ From 097d59c41a5b72f613cb81e200a08eb347d83727 Mon Sep 17 00:00:00 2001 From: Bruno Binet Date: Wed, 6 Mar 2013 10:28:22 +0100 Subject: [PATCH 2/4] Add test for ol.Projection getMetersPerUnit method --- test/spec/ol/projection.test.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/test/spec/ol/projection.test.js b/test/spec/ol/projection.test.js index c961d41819..bed25be849 100644 --- a/test/spec/ol/projection.test.js +++ b/test/spec/ol/projection.test.js @@ -205,7 +205,6 @@ describe('ol.projection', function() { }); - describe('ol.projection.getTransformFromCodes()', function() { it('returns a function', function() { @@ -305,6 +304,15 @@ describe('ol.projection', function() { }); + describe('ol.Projection.prototype.getMetersPerUnit()', function() { + + it('returns value in meters', function() { + var epsg4326 = ol.projection.getFromCode('EPSG:4326'); + expect(epsg4326.getMetersPerUnit()).toEqual(111317.09969219835); + }); + + }); + }); goog.require('goog.array'); From f4aa08ee90fb9d7328cf9ee367451d2b42ded742 Mon Sep 17 00:00:00 2001 From: Bruno Binet Date: Wed, 6 Mar 2013 12:18:37 +0100 Subject: [PATCH 3/4] Use ol.sphere.NORMAL.radius instead of 6378000 to be consistent. --- src/ol/projection.js | 3 ++- test/spec/ol/projection.test.js | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/ol/projection.js b/src/ol/projection.js index 15d42cc50a..132a7434cf 100644 --- a/src/ol/projection.js +++ b/src/ol/projection.js @@ -37,7 +37,8 @@ ol.ProjectionUnits = { * @const {Object.} Meters per unit lookup table. */ ol.METERS_PER_UNIT = {}; -ol.METERS_PER_UNIT[ol.ProjectionUnits.DEGREES] = 2 * Math.PI * 6378000 / 360; +ol.METERS_PER_UNIT[ol.ProjectionUnits.DEGREES] = + 2 * Math.PI * ol.sphere.NORMAL.radius / 360; ol.METERS_PER_UNIT[ol.ProjectionUnits.FEET] = 0.02540005080010160020; ol.METERS_PER_UNIT[ol.ProjectionUnits.METERS] = 1; diff --git a/test/spec/ol/projection.test.js b/test/spec/ol/projection.test.js index bed25be849..2284c7b220 100644 --- a/test/spec/ol/projection.test.js +++ b/test/spec/ol/projection.test.js @@ -308,7 +308,7 @@ describe('ol.projection', function() { it('returns value in meters', function() { var epsg4326 = ol.projection.getFromCode('EPSG:4326'); - expect(epsg4326.getMetersPerUnit()).toEqual(111317.09969219835); + expect(epsg4326.getMetersPerUnit()).toEqual(111194.87428468118); }); }); From 1ff3c79ff6ab20c8ef0facd945972845712ab039 Mon Sep 17 00:00:00 2001 From: Bruno Binet Date: Wed, 6 Mar 2013 12:26:30 +0100 Subject: [PATCH 4/4] Use correct value to convert from foot to meters (was using value for converting to inches). Thanks @twpayne --- src/ol/projection.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ol/projection.js b/src/ol/projection.js index 132a7434cf..938c75a64f 100644 --- a/src/ol/projection.js +++ b/src/ol/projection.js @@ -39,7 +39,7 @@ ol.ProjectionUnits = { ol.METERS_PER_UNIT = {}; ol.METERS_PER_UNIT[ol.ProjectionUnits.DEGREES] = 2 * Math.PI * ol.sphere.NORMAL.radius / 360; -ol.METERS_PER_UNIT[ol.ProjectionUnits.FEET] = 0.02540005080010160020; +ol.METERS_PER_UNIT[ol.ProjectionUnits.FEET] = 0.3048; ol.METERS_PER_UNIT[ol.ProjectionUnits.METERS] = 1;