process.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. function mapit(obj, key, value) {
  2. if (Array.isArray(key)) {
  3. value.unshift(key);
  4. key = null;
  5. }
  6. var thing = key ? {} : obj;
  7. var out = value.reduce(function(newObj, item) {
  8. sExpr(item, newObj);
  9. return newObj
  10. }, thing);
  11. if (key) {
  12. obj[key] = out;
  13. }
  14. }
  15. export function sExpr(v, obj) {
  16. if (!Array.isArray(v)) {
  17. obj[v] = true;
  18. return;
  19. }
  20. var key = v.shift();
  21. if (key === 'PARAMETER') {
  22. key = v.shift();
  23. }
  24. if (v.length === 1) {
  25. if (Array.isArray(v[0])) {
  26. obj[key] = {};
  27. sExpr(v[0], obj[key]);
  28. return;
  29. }
  30. obj[key] = v[0];
  31. return;
  32. }
  33. if (!v.length) {
  34. obj[key] = true;
  35. return;
  36. }
  37. if (key === 'TOWGS84') {
  38. obj[key] = v;
  39. return;
  40. }
  41. if (key === 'AXIS') {
  42. if (!(key in obj)) {
  43. obj[key] = [];
  44. }
  45. obj[key].push(v);
  46. return;
  47. }
  48. if (!Array.isArray(key)) {
  49. obj[key] = {};
  50. }
  51. var i;
  52. switch (key) {
  53. case 'UNIT':
  54. case 'PRIMEM':
  55. case 'VERT_DATUM':
  56. obj[key] = {
  57. name: v[0].toLowerCase(),
  58. convert: v[1]
  59. };
  60. if (v.length === 3) {
  61. sExpr(v[2], obj[key]);
  62. }
  63. return;
  64. case 'SPHEROID':
  65. case 'ELLIPSOID':
  66. obj[key] = {
  67. name: v[0],
  68. a: v[1],
  69. rf: v[2]
  70. };
  71. if (v.length === 4) {
  72. sExpr(v[3], obj[key]);
  73. }
  74. return;
  75. case 'PROJECTEDCRS':
  76. case 'PROJCRS':
  77. case 'GEOGCS':
  78. case 'GEOCCS':
  79. case 'PROJCS':
  80. case 'LOCAL_CS':
  81. case 'GEODCRS':
  82. case 'GEODETICCRS':
  83. case 'GEODETICDATUM':
  84. case 'EDATUM':
  85. case 'ENGINEERINGDATUM':
  86. case 'VERT_CS':
  87. case 'VERTCRS':
  88. case 'VERTICALCRS':
  89. case 'COMPD_CS':
  90. case 'COMPOUNDCRS':
  91. case 'ENGINEERINGCRS':
  92. case 'ENGCRS':
  93. case 'FITTED_CS':
  94. case 'LOCAL_DATUM':
  95. case 'DATUM':
  96. v[0] = ['name', v[0]];
  97. mapit(obj, key, v);
  98. return;
  99. default:
  100. i = -1;
  101. while (++i < v.length) {
  102. if (!Array.isArray(v[i])) {
  103. return sExpr(v, obj[key]);
  104. }
  105. }
  106. return mapit(obj, key, v);
  107. }
  108. }