projString.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. var D2R = 0.01745329251994329577;
  2. var PrimeMeridian = require('./constants/PrimeMeridian');
  3. module.exports = function(defData) {
  4. var self = {};
  5. var paramObj = {};
  6. defData.split("+").map(function(v) {
  7. return v.trim();
  8. }).filter(function(a) {
  9. return a;
  10. }).forEach(function(a) {
  11. var split = a.split("=");
  12. split.push(true);
  13. paramObj[split[0].toLowerCase()] = split[1];
  14. });
  15. var paramName, paramVal, paramOutname;
  16. var params = {
  17. proj: 'projName',
  18. datum: 'datumCode',
  19. rf: function(v) {
  20. self.rf = parseFloat(v);
  21. },
  22. lat_0: function(v) {
  23. self.lat0 = v * D2R;
  24. },
  25. lat_1: function(v) {
  26. self.lat1 = v * D2R;
  27. },
  28. lat_2: function(v) {
  29. self.lat2 = v * D2R;
  30. },
  31. lat_ts: function(v) {
  32. self.lat_ts = v * D2R;
  33. },
  34. lon_0: function(v) {
  35. self.long0 = v * D2R;
  36. },
  37. lon_1: function(v) {
  38. self.long1 = v * D2R;
  39. },
  40. lon_2: function(v) {
  41. self.long2 = v * D2R;
  42. },
  43. alpha: function(v) {
  44. self.alpha = parseFloat(v) * D2R;
  45. },
  46. lonc: function(v) {
  47. self.longc = v * D2R;
  48. },
  49. x_0: function(v) {
  50. self.x0 = parseFloat(v);
  51. },
  52. y_0: function(v) {
  53. self.y0 = parseFloat(v);
  54. },
  55. k_0: function(v) {
  56. self.k0 = parseFloat(v);
  57. },
  58. k: function(v) {
  59. self.k0 = parseFloat(v);
  60. },
  61. a: function(v) {
  62. self.a = parseFloat(v);
  63. },
  64. b: function(v) {
  65. self.b = parseFloat(v);
  66. },
  67. r_a: function() {
  68. self.R_A = true;
  69. },
  70. zone: function(v) {
  71. self.zone = parseInt(v, 10);
  72. },
  73. south: function() {
  74. self.utmSouth = true;
  75. },
  76. towgs84: function(v) {
  77. self.datum_params = v.split(",").map(function(a) {
  78. return parseFloat(a);
  79. });
  80. },
  81. to_meter: function(v) {
  82. self.to_meter = parseFloat(v);
  83. },
  84. from_greenwich: function(v) {
  85. self.from_greenwich = v * D2R;
  86. },
  87. pm: function(v) {
  88. self.from_greenwich = (PrimeMeridian[v] ? PrimeMeridian[v] : parseFloat(v)) * D2R;
  89. },
  90. nadgrids: function(v) {
  91. if (v === '@null') {
  92. self.datumCode = 'none';
  93. }
  94. else {
  95. self.nadgrids = v;
  96. }
  97. },
  98. axis: function(v) {
  99. var legalAxis = "ewnsud";
  100. if (v.length === 3 && legalAxis.indexOf(v.substr(0, 1)) !== -1 && legalAxis.indexOf(v.substr(1, 1)) !== -1 && legalAxis.indexOf(v.substr(2, 1)) !== -1) {
  101. self.axis = v;
  102. }
  103. }
  104. };
  105. for (paramName in paramObj) {
  106. paramVal = paramObj[paramName];
  107. if (paramName in params) {
  108. paramOutname = params[paramName];
  109. if (typeof paramOutname === 'function') {
  110. paramOutname(paramVal);
  111. }
  112. else {
  113. self[paramOutname] = paramVal;
  114. }
  115. }
  116. else {
  117. self[paramName] = paramVal;
  118. }
  119. }
  120. if(typeof self.datumCode === 'string' && self.datumCode !== "WGS84"){
  121. self.datumCode = self.datumCode.toLowerCase();
  122. }
  123. return self;
  124. };