diff --git a/src/ol/proj/proj4.js b/src/ol/proj/proj4.js index 1726c5d7ce..bd6b96bc00 100644 --- a/src/ol/proj/proj4.js +++ b/src/ol/proj/proj4.js @@ -2,6 +2,7 @@ * @module ol/proj/proj4 */ import Projection from './Projection.js'; +import Units from './Units.js'; import { addCoordinateTransforms, addEquivalentProjections, @@ -31,12 +32,16 @@ export function register(proj4) { const code = projCodes[i]; if (!get(code)) { const def = proj4.defs(code); + let units = def.units; + if (!units && def.projName === 'longlat') { + units = Units.DEGREES; + } addProjection( new Projection({ code: code, axisOrientation: def.axis, metersPerUnit: def.to_meter, - units: def.units, + units, }) ); } diff --git a/test/spec/ol/proj.test.js b/test/spec/ol/proj.test.js index 1a77c33894..c98c90c036 100644 --- a/test/spec/ol/proj.test.js +++ b/test/spec/ol/proj.test.js @@ -1,4 +1,5 @@ import Projection from '../../../src/ol/proj/Projection.js'; +import Units from '../../../src/ol/proj/Units.js'; import {HALF_SIZE} from '../../../src/ol/proj/epsg3857.js'; import { METERS_PER_UNIT, @@ -448,6 +449,20 @@ describe('ol.proj', function () { delete proj4.defs['EPSG:3739']; }); + it('creates ol.proj.Projection instance from EPSG:4258', function () { + proj4.defs( + 'EPSG:4258', + '+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs' + ); + register(proj4); + const proj = getProjection('EPSG:4258'); + expect(proj.getCode()).to.eql('EPSG:4258'); + expect(proj.getUnits()).to.eql('degrees'); + expect(proj.getMetersPerUnit()).to.eql(METERS_PER_UNIT[Units.DEGREES]); + + delete proj4.defs['EPSG:4258']; + }); + it('allows Proj4js projections to be used transparently', function () { register(proj4); const point = transform(