Skip to content

Commit e1c270c

Browse files
authored
Merge pull request #30 from ftoromanoff/parseSubCrs
Parse sub crs
2 parents d61e880 + 32f8e5d commit e1c270c

File tree

3 files changed

+121
-26
lines changed

3 files changed

+121
-26
lines changed

Diff for: index.js

+20-7
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ var D2R = 0.01745329251994329577;
22
import parser from './parser';
33
import {sExpr} from './process';
44

5-
5+
var knownTypes = ['PROJECTEDCRS', 'PROJCRS', 'GEOGCS', 'GEOCCS', 'PROJCS', 'LOCAL_CS', 'GEODCRS',
6+
'GEODETICCRS', 'GEODETICDATUM', 'ENGCRS', 'ENGINEERINGCRS'];
67

78
function rename(obj, params) {
89
var outName = params[0];
@@ -20,10 +21,25 @@ function d2r(input) {
2021
}
2122

2223
function cleanWKT(wkt) {
24+
var keys = Object.keys(wkt);
25+
for (var i = 0, ii = keys.length; i <ii; ++i) {
26+
var key = keys[i];
27+
// the followings are the crs defined in
28+
// https://github.com/proj4js/proj4js/blob/1da4ed0b865d0fcb51c136090569210cdcc9019e/lib/parseCode.js#L11
29+
if (knownTypes.indexOf(key) !== -1) {
30+
setPropertiesFromWkt(wkt[key]);
31+
}
32+
if (typeof wkt[key] === 'object') {
33+
cleanWKT(wkt[key]);
34+
}
35+
}
36+
}
37+
38+
function setPropertiesFromWkt(wkt) {
2339
if (wkt.AUTHORITY) {
2440
var authority = Object.keys(wkt.AUTHORITY)[0];
2541
if (authority && authority in wkt.AUTHORITY) {
26-
wkt.title = `${authority}:${wkt.AUTHORITY[authority]}`;
42+
wkt.title = authority + ':' + wkt.AUTHORITY[authority];
2743
}
2844
}
2945
if (wkt.type === 'GEOGCS') {
@@ -200,12 +216,9 @@ function cleanWKT(wkt) {
200216
}
201217
export default function(wkt) {
202218
var lisp = parser(wkt);
203-
var type = lisp.shift();
204-
var name = lisp.shift();
205-
lisp.unshift(['name', name]);
206-
lisp.unshift(['type', type]);
219+
var type = lisp[0];
207220
var obj = {};
208221
sExpr(lisp, obj);
209222
cleanWKT(obj);
210-
return obj;
223+
return obj[type];
211224
}

Diff for: process.js

+17-11
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,21 @@ export function sExpr(v, obj) {
7777
sExpr(v[3], obj[key]);
7878
}
7979
return;
80+
case 'EDATUM':
81+
case 'ENGINEERINGDATUM':
82+
case 'LOCAL_DATUM':
83+
case 'DATUM':
84+
case 'VERT_CS':
85+
case 'VERTCRS':
86+
case 'VERTICALCRS':
87+
v[0] = ['name', v[0]];
88+
mapit(obj, key, v);
89+
return;
90+
case 'COMPD_CS':
91+
case 'COMPOUNDCRS':
92+
case 'FITTED_CS':
93+
// the followings are the crs defined in
94+
// https://github.com/proj4js/proj4js/blob/1da4ed0b865d0fcb51c136090569210cdcc9019e/lib/parseCode.js#L11
8095
case 'PROJECTEDCRS':
8196
case 'PROJCRS':
8297
case 'GEOGCS':
@@ -86,20 +101,11 @@ export function sExpr(v, obj) {
86101
case 'GEODCRS':
87102
case 'GEODETICCRS':
88103
case 'GEODETICDATUM':
89-
case 'EDATUM':
90-
case 'ENGINEERINGDATUM':
91-
case 'VERT_CS':
92-
case 'VERTCRS':
93-
case 'VERTICALCRS':
94-
case 'COMPD_CS':
95-
case 'COMPOUNDCRS':
96-
case 'ENGINEERINGCRS':
97104
case 'ENGCRS':
98-
case 'FITTED_CS':
99-
case 'LOCAL_DATUM':
100-
case 'DATUM':
105+
case 'ENGINEERINGCRS':
101106
v[0] = ['name', v[0]];
102107
mapit(obj, key, v);
108+
obj[key].type = key;
103109
return;
104110
default:
105111
i = -1;

Diff for: test-fixtures.json

+84-8
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
"type": "PROJCS",
55
"name": "NZGD49 / New Zealand Map Grid",
66
"GEOGCS": {
7+
"type": "GEOGCS",
78
"name": "NZGD49",
89
"DATUM": {
910
"name": "New_Zealand_Geodetic_Datum_1949",
@@ -41,7 +42,25 @@
4142
},
4243
"AUTHORITY": {
4344
"EPSG": "4272"
44-
}
45+
},
46+
"title": "EPSG:4272",
47+
"projName": "longlat",
48+
"units": "degree",
49+
"to_meter": 111323.87156969598,
50+
"datumCode": "nzgd49",
51+
"ellps": "intl",
52+
"a": 6378388,
53+
"rf": 297,
54+
"datum_params": [
55+
59.47,
56+
-5.04,
57+
187.44,
58+
0.47,
59+
-0.1,
60+
1.024,
61+
-4.5993
62+
],
63+
"srsCode": "NZGD49"
4564
},
4665
"UNIT": {
4766
"name": "metre",
@@ -89,6 +108,7 @@
89108
"type": "PROJCS",
90109
"name": "NAD83 / Massachusetts Mainland",
91110
"GEOGCS": {
111+
"type": "GEOGCS",
92112
"name": "NAD83",
93113
"DATUM": {
94114
"name": "North_American_Datum_1983",
@@ -120,7 +140,16 @@
120140
},
121141
"AUTHORITY": {
122142
"EPSG": "4269"
123-
}
143+
},
144+
"title": "EPSG:4269",
145+
"projName": "longlat",
146+
"units": "degree",
147+
"to_meter": 111319.49079327348,
148+
"datumCode": "north_american_datum_1983",
149+
"ellps": "GRS 1980",
150+
"a": 6378137,
151+
"rf": 298.257222101,
152+
"srsCode": "NAD83"
124153
},
125154
"UNIT": {
126155
"name": "metre",
@@ -166,6 +195,7 @@
166195
"type": "PROJCS",
167196
"name": "ETRS89 / ETRS-LAEA",
168197
"GEOGCS": {
198+
"type": "GEOGCS",
169199
"name": "ETRS89",
170200
"DATUM": {
171201
"name": "European_Terrestrial_Reference_System_1989",
@@ -197,7 +227,17 @@
197227
},
198228
"AUTHORITY": {
199229
"EPSG": "4258"
200-
}
230+
},
231+
"title": "EPSG:4258",
232+
"projName": "longlat",
233+
"units": "degree",
234+
"to_meter": 111319.49079327348,
235+
"datumCode": "european_terrestrial_reference_system_1989",
236+
"ellps": "GRS 1980",
237+
"a": 6378137,
238+
"rf": 298.257222101,
239+
"srsCode": "ETRS89"
240+
201241
},
202242
"UNIT": {
203243
"name": "metre",
@@ -304,8 +344,10 @@
304344
"type": "COMPD_CS",
305345
"name": "unknown",
306346
"PROJCS": {
347+
"type": "PROJCS",
307348
"name": "NAD83 / Texas North Central",
308349
"GEOGCS": {
350+
"type": "GEOGCS",
309351
"name": "NAD83",
310352
"DATUM": {
311353
"name": "North_American_Datum_1983",
@@ -334,7 +376,16 @@
334376
},
335377
"AUTHORITY": {
336378
"EPSG": "4269"
337-
}
379+
},
380+
"title": "EPSG:4269",
381+
"projName": "longlat",
382+
"units": "degree",
383+
"to_meter": 111319.4907932736,
384+
"datumCode": "north_american_datum_1983",
385+
"ellps": "GRS 1980",
386+
"a": 6378137,
387+
"rf": 298.257222101004,
388+
"srsCode": "NAD83"
338389
},
339390
"PROJECTION": "Lambert_Conformal_Conic_2SP",
340391
"latitude_of_origin": 31.6666666666667,
@@ -362,7 +413,23 @@
362413
],
363414
"AUTHORITY": {
364415
"EPSG": "32138"
365-
}
416+
},
417+
"title": "EPSG:32138",
418+
"projName": "Lambert_Conformal_Conic_2SP",
419+
"axis": "enu",
420+
"units": "us survey foot",
421+
"to_meter": 0.304800609601219,
422+
"datumCode": "north_american_datum_1983",
423+
"ellps": "GRS 1980",
424+
"a": 6378137,
425+
"rf": 298.257222101004,
426+
"x0": 599999.9999999997,
427+
"y0": 1999999.9999999998,
428+
"long0": -1.7191493132144147,
429+
"lat0": 0.5526875964648716,
430+
"lat1": 0.5608324663075106,
431+
"lat2": 0.5928301692607412,
432+
"srsCode": "NAD83 / Texas North Central"
366433
},
367434
"VERT_CS": {
368435
"name": "NAVD88 height (ftUS)",
@@ -389,8 +456,7 @@
389456
"AUTHORITY": {
390457
"EPSG": "6360"
391458
}
392-
},
393-
"srsCode": "unknown"
459+
}
394460
}
395461
},
396462
{
@@ -399,6 +465,7 @@
399465
"type": "PROJCS",
400466
"name": "WGS 84 / Antarctic Polar Stereographic",
401467
"GEOGCS": {
468+
"type": "GEOGCS",
402469
"name": "WGS 84",
403470
"DATUM": {
404471
"name": "WGS_1984",
@@ -430,7 +497,16 @@
430497
},
431498
"AUTHORITY": {
432499
"EPSG": "4326"
433-
}
500+
},
501+
"title": "EPSG:4326",
502+
"projName": "longlat",
503+
"units": "degree",
504+
"to_meter": 111319.49079327348,
505+
"datumCode": "wgs84",
506+
"ellps": "WGS 84",
507+
"a": 6378137,
508+
"rf": 298.257223563,
509+
"srsCode": "WGS 84"
434510
},
435511
"UNIT": {
436512
"name": "metre",

0 commit comments

Comments
 (0)