Skip to content

Commit aa235a0

Browse files
committed
Create Projections using well known names (WGS84, Mercator, Aitoff, ect...)
1 parent 0b5496f commit aa235a0

File tree

2 files changed

+41
-6
lines changed

2 files changed

+41
-6
lines changed

src/main/groovy/geoscript/proj/Projection.groovy

Lines changed: 34 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -190,15 +190,20 @@ class Projection {
190190
*/
191191
private static CoordinateReferenceSystem parse(String str) {
192192
CoordinateReferenceSystem crs
193-
try {
194-
crs = CRS.decode(str)
193+
if (wellKnownProjections.containsKey(str)) {
194+
crs = CRS.parseWKT(wellKnownProjections[str])
195195
}
196-
catch(Exception ex1) {
196+
else {
197197
try {
198-
crs = CRS.parseWKT(str)
198+
crs = CRS.decode(str)
199199
}
200-
catch(Exception ex2) {
201-
throw new Exception("Unable to determine projection from ${str}!")
200+
catch (Exception ex1) {
201+
try {
202+
crs = CRS.parseWKT(str)
203+
}
204+
catch (Exception ex2) {
205+
throw new Exception("Unable to determine projection from ${str}!")
206+
}
202207
}
203208
}
204209
crs
@@ -245,4 +250,27 @@ class Projection {
245250
}
246251
projections
247252
}
253+
254+
/**
255+
* A Map (name:wkt) of Well Known Projections
256+
*/
257+
private static final Map wellKnownProjections = [
258+
"WGS84": 'GEOGCS["WGS84", DATUM["WGS84", SPHEROID["WGS84", 6378137.0, 298.257223563]], PRIMEM["Greenwich", 0.0], UNIT["degree",0.017453292519943295], AXIS["Longitude",EAST], AXIS["Latitude",NORTH]]',
259+
"Aitoff": 'PROJCS["Aitoff", GEOGCS["WGS84", DATUM["WGS84", SPHEROID["WGS84", 6378137.0, 298.257223563]], PRIMEM["Greenwich", 0.0], UNIT["degree",0.017453292519943295], AXIS["Longitude",EAST], AXIS["Latitude",NORTH]], PROJECTION["Aitoff"], UNIT["m", 1.0], AXIS["Easting", EAST], AXIS["Northing", NORTH]]',
260+
"AlbersEqualArea": 'PROJCS["Albers", GEOGCS["WGS84", DATUM["WGS84", SPHEROID["WGS84", 6378137.0, 298.257223563]], PRIMEM["Greenwich", 0.0], UNIT["degree",0.017453292519943295], AXIS["Longitude",EAST], AXIS["Latitude",NORTH]], PROJECTION["Albers_Conic_Equal_Area"], PARAMETER["central_meridian", -88.0], PARAMETER["latitude_of_origin", 14.5], PARAMETER["false_easting", 328.08333333], PARAMETER["false_northing", 192109.19583333], UNIT["feet", 0.304800609601219], PARAMETER["standard_parallel_1", -20.0], PARAMETER["standard_parallel_2", -33.0], AXIS["x",EAST], AXIS["y",NORTH]]',
261+
"Cassini": 'PROJCS["Cassini_Soldner", GEOGCS["WGS84", DATUM["WGS84", SPHEROID["WGS84", 6378137.0, 298.257223563]], PRIMEM["Greenwich", 0.0], UNIT["degree",0.017453292519943295], AXIS["Longitude",EAST], AXIS["Latitude",NORTH]], PROJECTION["Cassini_Soldner"], UNIT["m", 1.0], AXIS["Easting", EAST], AXIS["Northing", NORTH]]',
262+
"EckertIV": 'PROJCS["Eckert_IV", GEOGCS["WGS84", DATUM["WGS84", SPHEROID["WGS84", 6378137.0, 298.257223563]], PRIMEM["Greenwich", 0.0], UNIT["degree",0.017453292519943295], AXIS["Longitude",EAST], AXIS["Latitude",NORTH]], PROJECTION["Eckert_IV"], UNIT["m", 1.0], AXIS["Easting", EAST], AXIS["Northing", NORTH]]',
263+
"EquidistantConic": 'PROJCS["World_Equidistant_Conic", GEOGCS["WGS84", DATUM["WGS84", SPHEROID["WGS84", 6378137.0, 298.257223563]], PRIMEM["Greenwich", 0.0], UNIT["degree",0.017453292519943295], AXIS["Longitude",EAST], AXIS["Latitude",NORTH]] ,PROJECTION["Equidistant_Conic"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Standard_Parallel_1",60.0],PARAMETER["Standard_Parallel_2",60.0],PARAMETER["Latitude_Of_Origin",0.0],UNIT["Meter",1.0]]',
264+
"LambertConfic": 'PROJCS["Lambert", GEOGCS["WGS84", DATUM["WGS84", SPHEROID["WGS84", 6378137.0, 298.257223563]], PRIMEM["Greenwich", 0.0], UNIT["degree",0.017453292519943295], AXIS["Longitude",EAST], AXIS["Latitude",NORTH]], PROJECTION["Lambert_Conformal_Conic_1SP"], PARAMETER["central_meridian", -50.0], PARAMETER["latitude_of_origin", 30.0], PARAMETER["scale_factor", 1.0], PARAMETER["false_easting", 0.0], PARAMETER["false_northing", 0.0], UNIT["metre",1.0], AXIS["x",EAST], AXIS["y",NORTH]]',
265+
"Mercator": 'PROJCS["WGS 84 / Pseudo-Mercator", GEOGCS["WGS 84", DATUM["World Geodetic System 1984", SPHEROID["WGS 84", 6378137.0, 298.257223563, AUTHORITY["EPSG","7030"]], AUTHORITY["EPSG","6326"]], PRIMEM["Greenwich", 0.0, AUTHORITY["EPSG","8901"]], UNIT["degree", 0.017453292519943295], AXIS["Geodetic longitude", EAST], AXIS["Geodetic latitude", NORTH], AUTHORITY["EPSG","4326"]], PROJECTION["Popular Visualisation Pseudo Mercator", AUTHORITY["EPSG","1024"]], PARAMETER["semi-minor axis", 6378137.0], PARAMETER["Latitude of false origin", 0.0], PARAMETER["Longitude of natural origin", 0.0], PARAMETER["Scale factor at natural origin", 1.0], PARAMETER["False easting", 0.0], PARAMETER["False northing", 0.0], UNIT["m", 1.0], AXIS["Easting", EAST], AXIS["Northing", NORTH], AUTHORITY["EPSG","3857"]]',
266+
"Mollweide": 'PROJCS["Mollweide", GEOGCS["WGS84", DATUM["WGS84", SPHEROID["WGS84", 6378137.0, 298.257223563]], PRIMEM["Greenwich", 0.0], UNIT["degree",0.017453292519943295], AXIS["Longitude",EAST], AXIS["Latitude",NORTH]], PROJECTION["Mollweide"], UNIT["m", 1.0], AXIS["Easting", EAST], AXIS["Northing", NORTH]]',
267+
"NAD27": 'GEOGCS["NAD27", DATUM["North American Datum 1927", SPHEROID["Clarke 1866", 6378206.4, 294.9786982138982, AUTHORITY["EPSG","7008"]], TOWGS84[2.478, 149.752, 197.726, 0.526, -0.498, 0.501, 0.685], AUTHORITY["EPSG","6267"]], PRIMEM["Greenwich", 0.0, AUTHORITY["EPSG","8901"]], UNIT["degree", 0.017453292519943295], AXIS["Geodetic longitude", EAST], AXIS["Geodetic latitude", NORTH], AUTHORITY["EPSG","4267"]]',
268+
"NAD83": 'GEOGCS["NAD83", DATUM["North American Datum 1983", SPHEROID["GRS 1980", 6378137.0, 298.257222101, AUTHORITY["EPSG","7019"]], TOWGS84[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], AUTHORITY["EPSG","6269"]], PRIMEM["Greenwich", 0.0, AUTHORITY["EPSG","8901"]], UNIT["degree", 0.017453292519943295], AXIS["Geodetic longitude", EAST], AXIS["Geodetic latitude", NORTH], AUTHORITY["EPSG","4269"]]',
269+
"Robinson": 'PROJCS["Robinson", GEOGCS["WGS84", DATUM["WGS84", SPHEROID["WGS84", 6378137.0, 298.257223563]], PRIMEM["Greenwich", 0.0], UNIT["degree",0.017453292519943295], AXIS["Longitude",EAST], AXIS["Latitude",NORTH]], PROJECTION["Robinson"], UNIT["m", 1.0], AXIS["Easting", EAST], AXIS["Northing", NORTH]]',
270+
"Sinusoidal": 'PROJCS["MODIS Sinusoidal",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563 ] ], PRIMEM["Greenwich",0.0], UNIT["degree",0.01745329251994328 ]],PROJECTION["Sinusoidal"],UNIT["m",1.0] ]',
271+
"WagnerIV": 'PROJCS["Wagner_IV", GEOGCS["WGS84", DATUM["WGS84", SPHEROID["WGS84", 6378137.0, 298.257223563]], PRIMEM["Greenwich", 0.0], UNIT["degree",0.017453292519943295], AXIS["Longitude",EAST], AXIS["Latitude",NORTH]], PROJECTION["Wagner_IV"], UNIT["m", 1.0], AXIS["Easting", EAST], AXIS["Northing", NORTH]]',
272+
//"WagnerV": 'PROJCS["Wagner_V", GEOGCS["WGS84", DATUM["WGS84", SPHEROID["WGS84", 6378137.0, 298.257223563]], PRIMEM["Greenwich", 0.0], UNIT["degree",0.017453292519943295], AXIS["Longitude",EAST], AXIS["Latitude",NORTH]], PROJECTION["Wagner_V"], UNIT["m", 1.0], AXIS["Easting", EAST], AXIS["Northing", NORTH]]',
273+
"WinkeTripel": 'PROJCS["WinkeTripel", GEOGCS["WGS84", DATUM["WGS84", SPHEROID["WGS84", 6378137.0, 298.257223563]], PRIMEM["Greenwich", 0.0], UNIT["degree",0.017453292519943295], AXIS["Longitude",EAST], AXIS["Latitude",NORTH]], PROJECTION["Winkel Tripel"], UNIT["m", 1.0], AXIS["Easting", EAST], AXIS["Northing", NORTH]]',
274+
"WorldVanderGrintenI": 'PROJCS["World_Van_der_Grinten_I",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Van_der_Grinten_I"],PARAMETER["False_Easting",0],PARAMETER["False_Northing",0],PARAMETER["Central_Meridian",0],UNIT["Meter",1]]'
275+
]
248276
}

src/test/groovy/geoscript/proj/ProjectionTestCase.groovy

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,13 @@ class ProjectionTestCase {
2828

2929
}
3030

31+
@Test void createFromWellKnownName() {
32+
assertNotNull(new Projection("WGS84"))
33+
assertNotNull(new Projection("Mollweide"))
34+
assertNotNull(new Projection("WagnerIV"))
35+
assertNotNull(new Projection("WorldVanderGrintenI"))
36+
}
37+
3138
@Test(expected = Exception) void parseError() {
3239
new Projection("BAD PROJECTION STRING")
3340
}

0 commit comments

Comments
 (0)