123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- function mapit(obj, key, value) {
- if (Array.isArray(key)) {
- value.unshift(key);
- key = null;
- }
- var thing = key ? {} : obj;
- var out = value.reduce(function(newObj, item) {
- sExpr(item, newObj);
- return newObj
- }, thing);
- if (key) {
- obj[key] = out;
- }
- }
- export function sExpr(v, obj) {
- if (!Array.isArray(v)) {
- obj[v] = true;
- return;
- }
- var key = v.shift();
- if (key === 'PARAMETER') {
- key = v.shift();
- }
- if (v.length === 1) {
- if (Array.isArray(v[0])) {
- obj[key] = {};
- sExpr(v[0], obj[key]);
- return;
- }
- obj[key] = v[0];
- return;
- }
- if (!v.length) {
- obj[key] = true;
- return;
- }
- if (key === 'TOWGS84') {
- obj[key] = v;
- return;
- }
- if (key === 'AXIS') {
- if (!(key in obj)) {
- obj[key] = [];
- }
- obj[key].push(v);
- return;
- }
- if (!Array.isArray(key)) {
- obj[key] = {};
- }
- var i;
- switch (key) {
- case 'UNIT':
- case 'PRIMEM':
- case 'VERT_DATUM':
- obj[key] = {
- name: v[0].toLowerCase(),
- convert: v[1]
- };
- if (v.length === 3) {
- sExpr(v[2], obj[key]);
- }
- return;
- case 'SPHEROID':
- case 'ELLIPSOID':
- obj[key] = {
- name: v[0],
- a: v[1],
- rf: v[2]
- };
- if (v.length === 4) {
- sExpr(v[3], obj[key]);
- }
- return;
- case 'PROJECTEDCRS':
- case 'PROJCRS':
- case 'GEOGCS':
- case 'GEOCCS':
- case 'PROJCS':
- case 'LOCAL_CS':
- case 'GEODCRS':
- case 'GEODETICCRS':
- case 'GEODETICDATUM':
- case 'EDATUM':
- case 'ENGINEERINGDATUM':
- case 'VERT_CS':
- case 'VERTCRS':
- case 'VERTICALCRS':
- case 'COMPD_CS':
- case 'COMPOUNDCRS':
- case 'ENGINEERINGCRS':
- case 'ENGCRS':
- case 'FITTED_CS':
- case 'LOCAL_DATUM':
- case 'DATUM':
- v[0] = ['name', v[0]];
- mapit(obj, key, v);
- return;
- default:
- i = -1;
- while (++i < v.length) {
- if (!Array.isArray(v[i])) {
- return sExpr(v, obj[key]);
- }
- }
- return mapit(obj, key, v);
- }
- }
|