diff --git a/package.json b/package.json index 19d032e567..6593987714 100644 --- a/package.json +++ b/package.json @@ -55,7 +55,7 @@ "mocha-phantomjs": "3.5.1", "mustache": "2.1.3", "phantomjs": "1.9.10", - "proj4": "2.3.6", + "proj4": "2.3.12", "resemblejs": "1.2.0", "sinon": "1.10.3", "slimerjs-edge": "0.10.0-pre-2", diff --git a/src/ol/proj/proj.js b/src/ol/proj/proj.js index 8aec4aaf24..cfb7c9faa9 100644 --- a/src/ol/proj/proj.js +++ b/src/ol/proj/proj.js @@ -153,8 +153,9 @@ ol.proj.Projection = function(options) { } if (options.units === undefined) { var units = def.units; - if (units === undefined) { - if (def.to_meter !== undefined) { + if (def.to_meter !== undefined) { + if (units === undefined || + ol.proj.METERS_PER_UNIT[units] === undefined) { units = def.to_meter.toString(); ol.proj.METERS_PER_UNIT[units] = def.to_meter; } diff --git a/test/spec/ol/proj/proj.test.js b/test/spec/ol/proj/proj.test.js index 6b8dfb4fd1..a7dfe204ee 100644 --- a/test/spec/ol/proj/proj.test.js +++ b/test/spec/ol/proj/proj.test.js @@ -495,11 +495,28 @@ describe('ol.proj', function() { '+lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000.0000101599 ' + '+y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 ' + '+units=us-ft +no_defs'); + proj4.defs('EPSG:4269', 'GEOGCS["NAD83",' + + 'DATUM["North_American_Datum_1983",' + + 'SPHEROID["GRS 1980",6378137,298.257222101,' + + 'AUTHORITY["EPSG","7019"]],' + + 'AUTHORITY["EPSG","6269"]],' + + 'PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],' + + 'UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],' + + 'AUTHORITY["EPSG","4269"]]'); + proj4.defs('EPSG:4279', 'GEOGCS["OS(SN)80",DATUM["OS_SN_1980",' + + 'SPHEROID["Airy 1830",6377563.396,299.3249646,' + + 'AUTHORITY["EPSG","7001"]],' + + 'AUTHORITY["EPSG","6279"]],' + + 'PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],' + + 'UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],' + + 'AUTHORITY["EPSG","4279"]]'); }); afterEach(function() { delete proj4.defs['EPSG:26782']; delete proj4.defs['EPSG:3739']; + delete proj4.defs['EPSG:4269']; + delete proj4.defs['EPSG:4279']; }); it('returns value in meters', function() { @@ -517,6 +534,15 @@ describe('ol.proj', function() { expect(epsg3739.getMetersPerUnit()).to.eql(1200 / 3937); }); + it('works for proj4js OGC WKT GEOGCS projections', function() { + var epsg4269 = ol.proj.get('EPSG:4269'); + expect(epsg4269.getMetersPerUnit()).to.eql( + 6378137 * 0.01745329251994328); + var epsg4279 = ol.proj.get('EPSG:4279'); + expect(epsg4279.getMetersPerUnit()).to.eql( + 6377563.396 * 0.01745329251994328); + }); + }); });