@math.gl/projection 0.0.0-stage → 5.0.0-alpha.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1297) hide show
  1. package/APACHE-2.0-LICENSE.txt +55 -0
  2. package/PROJ-LICENSE.txt +37 -0
  3. package/PROJ4-LICENSE.md +29 -0
  4. package/README.md +27 -2
  5. package/THIRD-PARTY-NOTICES.md +163 -0
  6. package/dist/deformation.cjs +189 -0
  7. package/dist/deformation.cjs.map +6 -0
  8. package/dist/deformation.d.ts +3 -0
  9. package/dist/deformation.d.ts.map +1 -0
  10. package/dist/deformation.js +5 -0
  11. package/dist/deformation.js.map +1 -0
  12. package/dist/experimental/catalogue-kernel.d.ts +7 -0
  13. package/dist/experimental/catalogue-kernel.d.ts.map +1 -0
  14. package/dist/experimental/catalogue-kernel.js +36 -0
  15. package/dist/experimental/catalogue-kernel.js.map +1 -0
  16. package/dist/experimental/common/adjust_lat.d.ts +2 -0
  17. package/dist/experimental/common/adjust_lat.d.ts.map +1 -0
  18. package/dist/experimental/common/adjust_lat.js +10 -0
  19. package/dist/experimental/common/adjust_lat.js.map +1 -0
  20. package/dist/experimental/common/adjust_lon.d.ts +2 -0
  21. package/dist/experimental/common/adjust_lon.d.ts.map +1 -0
  22. package/dist/experimental/common/adjust_lon.js +13 -0
  23. package/dist/experimental/common/adjust_lon.js.map +1 -0
  24. package/dist/experimental/common/asinhy.d.ts +2 -0
  25. package/dist/experimental/common/asinhy.d.ts.map +1 -0
  26. package/dist/experimental/common/asinhy.js +12 -0
  27. package/dist/experimental/common/asinhy.js.map +1 -0
  28. package/dist/experimental/common/asinz.d.ts +2 -0
  29. package/dist/experimental/common/asinz.d.ts.map +1 -0
  30. package/dist/experimental/common/asinz.js +11 -0
  31. package/dist/experimental/common/asinz.js.map +1 -0
  32. package/dist/experimental/common/authlat.d.ts +2 -0
  33. package/dist/experimental/common/authlat.d.ts.map +1 -0
  34. package/dist/experimental/common/authlat.js +9 -0
  35. package/dist/experimental/common/authlat.js.map +1 -0
  36. package/dist/experimental/common/authset.d.ts +2 -0
  37. package/dist/experimental/common/authset.d.ts.map +1 -0
  38. package/dist/experimental/common/authset.js +24 -0
  39. package/dist/experimental/common/authset.js.map +1 -0
  40. package/dist/experimental/common/clens.d.ts +2 -0
  41. package/dist/experimental/common/clens.d.ts.map +1 -0
  42. package/dist/experimental/common/clens.js +18 -0
  43. package/dist/experimental/common/clens.js.map +1 -0
  44. package/dist/experimental/common/clens_cmplx.d.ts +5 -0
  45. package/dist/experimental/common/clens_cmplx.d.ts.map +1 -0
  46. package/dist/experimental/common/clens_cmplx.js +34 -0
  47. package/dist/experimental/common/clens_cmplx.js.map +1 -0
  48. package/dist/experimental/common/constants.d.ts +9 -0
  49. package/dist/experimental/common/constants.d.ts.map +1 -0
  50. package/dist/experimental/common/constants.js +14 -0
  51. package/dist/experimental/common/constants.js.map +1 -0
  52. package/dist/experimental/common/cosh.d.ts +2 -0
  53. package/dist/experimental/common/cosh.d.ts.map +1 -0
  54. package/dist/experimental/common/cosh.js +10 -0
  55. package/dist/experimental/common/cosh.js.map +1 -0
  56. package/dist/experimental/common/e0fn.d.ts +2 -0
  57. package/dist/experimental/common/e0fn.d.ts.map +1 -0
  58. package/dist/experimental/common/e0fn.js +8 -0
  59. package/dist/experimental/common/e0fn.js.map +1 -0
  60. package/dist/experimental/common/e1fn.d.ts +2 -0
  61. package/dist/experimental/common/e1fn.d.ts.map +1 -0
  62. package/dist/experimental/common/e1fn.js +8 -0
  63. package/dist/experimental/common/e1fn.js.map +1 -0
  64. package/dist/experimental/common/e2fn.d.ts +2 -0
  65. package/dist/experimental/common/e2fn.d.ts.map +1 -0
  66. package/dist/experimental/common/e2fn.js +8 -0
  67. package/dist/experimental/common/e2fn.js.map +1 -0
  68. package/dist/experimental/common/e3fn.d.ts +2 -0
  69. package/dist/experimental/common/e3fn.d.ts.map +1 -0
  70. package/dist/experimental/common/e3fn.js +8 -0
  71. package/dist/experimental/common/e3fn.js.map +1 -0
  72. package/dist/experimental/common/fL.d.ts +2 -0
  73. package/dist/experimental/common/fL.d.ts.map +1 -0
  74. package/dist/experimental/common/fL.js +9 -0
  75. package/dist/experimental/common/fL.js.map +1 -0
  76. package/dist/experimental/common/gN.d.ts +2 -0
  77. package/dist/experimental/common/gN.d.ts.map +1 -0
  78. package/dist/experimental/common/gN.js +9 -0
  79. package/dist/experimental/common/gN.js.map +1 -0
  80. package/dist/experimental/common/gatg.d.ts +2 -0
  81. package/dist/experimental/common/gatg.d.ts.map +1 -0
  82. package/dist/experimental/common/gatg.js +18 -0
  83. package/dist/experimental/common/gatg.js.map +1 -0
  84. package/dist/experimental/common/hypot.d.ts +2 -0
  85. package/dist/experimental/common/hypot.d.ts.map +1 -0
  86. package/dist/experimental/common/hypot.js +12 -0
  87. package/dist/experimental/common/hypot.js.map +1 -0
  88. package/dist/experimental/common/imlfn.d.ts +2 -0
  89. package/dist/experimental/common/imlfn.d.ts.map +1 -0
  90. package/dist/experimental/common/imlfn.js +21 -0
  91. package/dist/experimental/common/imlfn.js.map +1 -0
  92. package/dist/experimental/common/invlatiso.d.ts +2 -0
  93. package/dist/experimental/common/invlatiso.d.ts.map +1 -0
  94. package/dist/experimental/common/invlatiso.js +20 -0
  95. package/dist/experimental/common/invlatiso.js.map +1 -0
  96. package/dist/experimental/common/iqsfnz.d.ts +2 -0
  97. package/dist/experimental/common/iqsfnz.d.ts.map +1 -0
  98. package/dist/experimental/common/iqsfnz.js +44 -0
  99. package/dist/experimental/common/iqsfnz.js.map +1 -0
  100. package/dist/experimental/common/latiso.d.ts +2 -0
  101. package/dist/experimental/common/latiso.d.ts.map +1 -0
  102. package/dist/experimental/common/latiso.js +19 -0
  103. package/dist/experimental/common/latiso.js.map +1 -0
  104. package/dist/experimental/common/log1py.d.ts +2 -0
  105. package/dist/experimental/common/log1py.d.ts.map +1 -0
  106. package/dist/experimental/common/log1py.js +10 -0
  107. package/dist/experimental/common/log1py.js.map +1 -0
  108. package/dist/experimental/common/mlfn.d.ts +2 -0
  109. package/dist/experimental/common/mlfn.d.ts.map +1 -0
  110. package/dist/experimental/common/mlfn.js +8 -0
  111. package/dist/experimental/common/mlfn.js.map +1 -0
  112. package/dist/experimental/common/msfnz.d.ts +2 -0
  113. package/dist/experimental/common/msfnz.d.ts.map +1 -0
  114. package/dist/experimental/common/msfnz.js +9 -0
  115. package/dist/experimental/common/msfnz.js.map +1 -0
  116. package/dist/experimental/common/phi2z.d.ts +2 -0
  117. package/dist/experimental/common/phi2z.d.ts.map +1 -0
  118. package/dist/experimental/common/phi2z.js +21 -0
  119. package/dist/experimental/common/phi2z.js.map +1 -0
  120. package/dist/experimental/common/pj_enfn.d.ts +2 -0
  121. package/dist/experimental/common/pj_enfn.d.ts.map +1 -0
  122. package/dist/experimental/common/pj_enfn.js +28 -0
  123. package/dist/experimental/common/pj_enfn.js.map +1 -0
  124. package/dist/experimental/common/pj_inv_mlfn.d.ts +2 -0
  125. package/dist/experimental/common/pj_inv_mlfn.d.ts.map +1 -0
  126. package/dist/experimental/common/pj_inv_mlfn.js +26 -0
  127. package/dist/experimental/common/pj_inv_mlfn.js.map +1 -0
  128. package/dist/experimental/common/pj_mlfn.d.ts +2 -0
  129. package/dist/experimental/common/pj_mlfn.d.ts.map +1 -0
  130. package/dist/experimental/common/pj_mlfn.js +10 -0
  131. package/dist/experimental/common/pj_mlfn.js.map +1 -0
  132. package/dist/experimental/common/qsfnz.d.ts +2 -0
  133. package/dist/experimental/common/qsfnz.d.ts.map +1 -0
  134. package/dist/experimental/common/qsfnz.js +16 -0
  135. package/dist/experimental/common/qsfnz.js.map +1 -0
  136. package/dist/experimental/common/sign.d.ts +2 -0
  137. package/dist/experimental/common/sign.d.ts.map +1 -0
  138. package/dist/experimental/common/sign.js +8 -0
  139. package/dist/experimental/common/sign.js.map +1 -0
  140. package/dist/experimental/common/sinh.d.ts +2 -0
  141. package/dist/experimental/common/sinh.d.ts.map +1 -0
  142. package/dist/experimental/common/sinh.js +10 -0
  143. package/dist/experimental/common/sinh.js.map +1 -0
  144. package/dist/experimental/common/srat.d.ts +2 -0
  145. package/dist/experimental/common/srat.d.ts.map +1 -0
  146. package/dist/experimental/common/srat.js +8 -0
  147. package/dist/experimental/common/srat.js.map +1 -0
  148. package/dist/experimental/common/tsfnz.d.ts +2 -0
  149. package/dist/experimental/common/tsfnz.d.ts.map +1 -0
  150. package/dist/experimental/common/tsfnz.js +12 -0
  151. package/dist/experimental/common/tsfnz.js.map +1 -0
  152. package/dist/experimental/common/vincenty.d.ts +29 -0
  153. package/dist/experimental/common/vincenty.d.ts.map +1 -0
  154. package/dist/experimental/common/vincenty.js +134 -0
  155. package/dist/experimental/common/vincenty.js.map +1 -0
  156. package/dist/experimental/core.cjs +2868 -0
  157. package/dist/experimental/core.cjs.map +6 -0
  158. package/dist/experimental/core.d.ts +13 -0
  159. package/dist/experimental/core.d.ts.map +1 -0
  160. package/dist/experimental/core.js +9 -0
  161. package/dist/experimental/core.js.map +1 -0
  162. package/dist/experimental/crs/datum-table.d.ts +8 -0
  163. package/dist/experimental/crs/datum-table.d.ts.map +1 -0
  164. package/dist/experimental/crs/datum-table.js +1365 -0
  165. package/dist/experimental/crs/datum-table.js.map +1 -0
  166. package/dist/experimental/crs/ellipsoid-table.d.ts +8 -0
  167. package/dist/experimental/crs/ellipsoid-table.d.ts.map +1 -0
  168. package/dist/experimental/crs/ellipsoid-table.js +229 -0
  169. package/dist/experimental/crs/ellipsoid-table.js.map +1 -0
  170. package/dist/experimental/crs/normalize.d.ts +8 -0
  171. package/dist/experimental/crs/normalize.d.ts.map +1 -0
  172. package/dist/experimental/crs/normalize.js +277 -0
  173. package/dist/experimental/crs/normalize.js.map +1 -0
  174. package/dist/experimental/crs/primemeridian-table.d.ts +3 -0
  175. package/dist/experimental/crs/primemeridian-table.d.ts.map +1 -0
  176. package/dist/experimental/crs/primemeridian-table.js +20 -0
  177. package/dist/experimental/crs/primemeridian-table.js.map +1 -0
  178. package/dist/experimental/crs/projjson.cjs +1847 -0
  179. package/dist/experimental/crs/projjson.cjs.map +6 -0
  180. package/dist/experimental/crs/projjson.d.ts +4 -0
  181. package/dist/experimental/crs/projjson.d.ts.map +1 -0
  182. package/dist/experimental/crs/projjson.js +12 -0
  183. package/dist/experimental/crs/projjson.js.map +1 -0
  184. package/dist/experimental/crs/spatial-reference.d.ts +11 -0
  185. package/dist/experimental/crs/spatial-reference.d.ts.map +1 -0
  186. package/dist/experimental/crs/spatial-reference.js +91 -0
  187. package/dist/experimental/crs/spatial-reference.js.map +1 -0
  188. package/dist/experimental/crs/structured.d.ts +8 -0
  189. package/dist/experimental/crs/structured.d.ts.map +1 -0
  190. package/dist/experimental/crs/structured.js +481 -0
  191. package/dist/experimental/crs/structured.js.map +1 -0
  192. package/dist/experimental/crs/types.d.ts +58 -0
  193. package/dist/experimental/crs/types.d.ts.map +1 -0
  194. package/dist/experimental/crs/types.js +21 -0
  195. package/dist/experimental/crs/types.js.map +1 -0
  196. package/dist/experimental/crs/units-table.d.ts +64 -0
  197. package/dist/experimental/crs/units-table.d.ts.map +1 -0
  198. package/dist/experimental/crs/units-table.js +27 -0
  199. package/dist/experimental/crs/units-table.js.map +1 -0
  200. package/dist/experimental/crs/wkt.cjs +2507 -0
  201. package/dist/experimental/crs/wkt.cjs.map +6 -0
  202. package/dist/experimental/crs/wkt.d.ts +3 -0
  203. package/dist/experimental/crs/wkt.d.ts.map +1 -0
  204. package/dist/experimental/crs/wkt.js +181 -0
  205. package/dist/experimental/crs/wkt.js.map +1 -0
  206. package/dist/experimental/datum.d.ts +17 -0
  207. package/dist/experimental/datum.d.ts.map +1 -0
  208. package/dist/experimental/datum.js +160 -0
  209. package/dist/experimental/datum.js.map +1 -0
  210. package/dist/experimental/deformation.d.ts +25 -0
  211. package/dist/experimental/deformation.d.ts.map +1 -0
  212. package/dist/experimental/deformation.js +98 -0
  213. package/dist/experimental/deformation.js.map +1 -0
  214. package/dist/experimental/entries/projections/aea.cjs +367 -0
  215. package/dist/experimental/entries/projections/aea.cjs.map +6 -0
  216. package/dist/experimental/entries/projections/aea.d.ts +2 -0
  217. package/dist/experimental/entries/projections/aea.d.ts.map +1 -0
  218. package/dist/experimental/entries/projections/aea.js +5 -0
  219. package/dist/experimental/entries/projections/aea.js.map +1 -0
  220. package/dist/experimental/entries/projections/aeqd.cjs +461 -0
  221. package/dist/experimental/entries/projections/aeqd.cjs.map +6 -0
  222. package/dist/experimental/entries/projections/aeqd.d.ts +2 -0
  223. package/dist/experimental/entries/projections/aeqd.d.ts.map +1 -0
  224. package/dist/experimental/entries/projections/aeqd.js +5 -0
  225. package/dist/experimental/entries/projections/aeqd.js.map +1 -0
  226. package/dist/experimental/entries/projections/bonne.cjs +359 -0
  227. package/dist/experimental/entries/projections/bonne.cjs.map +6 -0
  228. package/dist/experimental/entries/projections/bonne.d.ts +2 -0
  229. package/dist/experimental/entries/projections/bonne.d.ts.map +1 -0
  230. package/dist/experimental/entries/projections/bonne.js +5 -0
  231. package/dist/experimental/entries/projections/bonne.js.map +1 -0
  232. package/dist/experimental/entries/projections/cass.cjs +347 -0
  233. package/dist/experimental/entries/projections/cass.cjs.map +6 -0
  234. package/dist/experimental/entries/projections/cass.d.ts +2 -0
  235. package/dist/experimental/entries/projections/cass.d.ts.map +1 -0
  236. package/dist/experimental/entries/projections/cass.js +5 -0
  237. package/dist/experimental/entries/projections/cass.js.map +1 -0
  238. package/dist/experimental/entries/projections/cea.cjs +283 -0
  239. package/dist/experimental/entries/projections/cea.cjs.map +6 -0
  240. package/dist/experimental/entries/projections/cea.d.ts +2 -0
  241. package/dist/experimental/entries/projections/cea.d.ts.map +1 -0
  242. package/dist/experimental/entries/projections/cea.js +5 -0
  243. package/dist/experimental/entries/projections/cea.js.map +1 -0
  244. package/dist/experimental/entries/projections/eck6.cjs +306 -0
  245. package/dist/experimental/entries/projections/eck6.cjs.map +6 -0
  246. package/dist/experimental/entries/projections/eck6.d.ts +2 -0
  247. package/dist/experimental/entries/projections/eck6.d.ts.map +1 -0
  248. package/dist/experimental/entries/projections/eck6.js +5 -0
  249. package/dist/experimental/entries/projections/eck6.js.map +1 -0
  250. package/dist/experimental/entries/projections/eqc.cjs +119 -0
  251. package/dist/experimental/entries/projections/eqc.cjs.map +6 -0
  252. package/dist/experimental/entries/projections/eqc.d.ts +2 -0
  253. package/dist/experimental/entries/projections/eqc.d.ts.map +1 -0
  254. package/dist/experimental/entries/projections/eqc.js +5 -0
  255. package/dist/experimental/entries/projections/eqc.js.map +1 -0
  256. package/dist/experimental/entries/projections/eqdc.cjs +377 -0
  257. package/dist/experimental/entries/projections/eqdc.cjs.map +6 -0
  258. package/dist/experimental/entries/projections/eqdc.d.ts +2 -0
  259. package/dist/experimental/entries/projections/eqdc.d.ts.map +1 -0
  260. package/dist/experimental/entries/projections/eqdc.js +5 -0
  261. package/dist/experimental/entries/projections/eqdc.js.map +1 -0
  262. package/dist/experimental/entries/projections/eqearth.cjs +292 -0
  263. package/dist/experimental/entries/projections/eqearth.cjs.map +6 -0
  264. package/dist/experimental/entries/projections/eqearth.d.ts +2 -0
  265. package/dist/experimental/entries/projections/eqearth.d.ts.map +1 -0
  266. package/dist/experimental/entries/projections/eqearth.js +5 -0
  267. package/dist/experimental/entries/projections/eqearth.js.map +1 -0
  268. package/dist/experimental/entries/projections/equi.cjs +222 -0
  269. package/dist/experimental/entries/projections/equi.cjs.map +6 -0
  270. package/dist/experimental/entries/projections/equi.d.ts +2 -0
  271. package/dist/experimental/entries/projections/equi.d.ts.map +1 -0
  272. package/dist/experimental/entries/projections/equi.js +5 -0
  273. package/dist/experimental/entries/projections/equi.js.map +1 -0
  274. package/dist/experimental/entries/projections/etmerc.cjs +618 -0
  275. package/dist/experimental/entries/projections/etmerc.cjs.map +6 -0
  276. package/dist/experimental/entries/projections/etmerc.d.ts +2 -0
  277. package/dist/experimental/entries/projections/etmerc.d.ts.map +1 -0
  278. package/dist/experimental/entries/projections/etmerc.js +5 -0
  279. package/dist/experimental/entries/projections/etmerc.js.map +1 -0
  280. package/dist/experimental/entries/projections/geocent.cjs +161 -0
  281. package/dist/experimental/entries/projections/geocent.cjs.map +6 -0
  282. package/dist/experimental/entries/projections/geocent.d.ts +2 -0
  283. package/dist/experimental/entries/projections/geocent.d.ts.map +1 -0
  284. package/dist/experimental/entries/projections/geocent.js +5 -0
  285. package/dist/experimental/entries/projections/geocent.js.map +1 -0
  286. package/dist/experimental/entries/projections/geos.cjs +328 -0
  287. package/dist/experimental/entries/projections/geos.cjs.map +6 -0
  288. package/dist/experimental/entries/projections/geos.d.ts +2 -0
  289. package/dist/experimental/entries/projections/geos.d.ts.map +1 -0
  290. package/dist/experimental/entries/projections/geos.js +5 -0
  291. package/dist/experimental/entries/projections/geos.js.map +1 -0
  292. package/dist/experimental/entries/projections/gnom.cjs +274 -0
  293. package/dist/experimental/entries/projections/gnom.cjs.map +6 -0
  294. package/dist/experimental/entries/projections/gnom.d.ts +2 -0
  295. package/dist/experimental/entries/projections/gnom.d.ts.map +1 -0
  296. package/dist/experimental/entries/projections/gnom.js +5 -0
  297. package/dist/experimental/entries/projections/gnom.js.map +1 -0
  298. package/dist/experimental/entries/projections/gstmerc.cjs +266 -0
  299. package/dist/experimental/entries/projections/gstmerc.cjs.map +6 -0
  300. package/dist/experimental/entries/projections/gstmerc.d.ts +2 -0
  301. package/dist/experimental/entries/projections/gstmerc.d.ts.map +1 -0
  302. package/dist/experimental/entries/projections/gstmerc.js +5 -0
  303. package/dist/experimental/entries/projections/gstmerc.js.map +1 -0
  304. package/dist/experimental/entries/projections/krovak.cjs +301 -0
  305. package/dist/experimental/entries/projections/krovak.cjs.map +6 -0
  306. package/dist/experimental/entries/projections/krovak.d.ts +2 -0
  307. package/dist/experimental/entries/projections/krovak.d.ts.map +1 -0
  308. package/dist/experimental/entries/projections/krovak.js +5 -0
  309. package/dist/experimental/entries/projections/krovak.js.map +1 -0
  310. package/dist/experimental/entries/projections/laea.cjs +477 -0
  311. package/dist/experimental/entries/projections/laea.cjs.map +6 -0
  312. package/dist/experimental/entries/projections/laea.d.ts +2 -0
  313. package/dist/experimental/entries/projections/laea.d.ts.map +1 -0
  314. package/dist/experimental/entries/projections/laea.js +5 -0
  315. package/dist/experimental/entries/projections/laea.js.map +1 -0
  316. package/dist/experimental/entries/projections/lcc.cjs +368 -0
  317. package/dist/experimental/entries/projections/lcc.cjs.map +6 -0
  318. package/dist/experimental/entries/projections/lcc.d.ts +2 -0
  319. package/dist/experimental/entries/projections/lcc.d.ts.map +1 -0
  320. package/dist/experimental/entries/projections/lcc.js +5 -0
  321. package/dist/experimental/entries/projections/lcc.js.map +1 -0
  322. package/dist/experimental/entries/projections/merc.cjs +201 -0
  323. package/dist/experimental/entries/projections/merc.cjs.map +6 -0
  324. package/dist/experimental/entries/projections/merc.d.ts +2 -0
  325. package/dist/experimental/entries/projections/merc.d.ts.map +1 -0
  326. package/dist/experimental/entries/projections/merc.js +5 -0
  327. package/dist/experimental/entries/projections/merc.js.map +1 -0
  328. package/dist/experimental/entries/projections/mill.cjs +217 -0
  329. package/dist/experimental/entries/projections/mill.cjs.map +6 -0
  330. package/dist/experimental/entries/projections/mill.d.ts +2 -0
  331. package/dist/experimental/entries/projections/mill.d.ts.map +1 -0
  332. package/dist/experimental/entries/projections/mill.js +5 -0
  333. package/dist/experimental/entries/projections/mill.js.map +1 -0
  334. package/dist/experimental/entries/projections/moll.cjs +257 -0
  335. package/dist/experimental/entries/projections/moll.cjs.map +6 -0
  336. package/dist/experimental/entries/projections/moll.d.ts +2 -0
  337. package/dist/experimental/entries/projections/moll.d.ts.map +1 -0
  338. package/dist/experimental/entries/projections/moll.js +5 -0
  339. package/dist/experimental/entries/projections/moll.js.map +1 -0
  340. package/dist/experimental/entries/projections/nzmg.cjs +346 -0
  341. package/dist/experimental/entries/projections/nzmg.cjs.map +6 -0
  342. package/dist/experimental/entries/projections/nzmg.d.ts +2 -0
  343. package/dist/experimental/entries/projections/nzmg.d.ts.map +1 -0
  344. package/dist/experimental/entries/projections/nzmg.js +5 -0
  345. package/dist/experimental/entries/projections/nzmg.js.map +1 -0
  346. package/dist/experimental/entries/projections/ob_tran.cjs +233 -0
  347. package/dist/experimental/entries/projections/ob_tran.cjs.map +6 -0
  348. package/dist/experimental/entries/projections/ob_tran.d.ts +2 -0
  349. package/dist/experimental/entries/projections/ob_tran.d.ts.map +1 -0
  350. package/dist/experimental/entries/projections/ob_tran.js +5 -0
  351. package/dist/experimental/entries/projections/ob_tran.js.map +1 -0
  352. package/dist/experimental/entries/projections/omerc.cjs +479 -0
  353. package/dist/experimental/entries/projections/omerc.cjs.map +6 -0
  354. package/dist/experimental/entries/projections/omerc.d.ts +2 -0
  355. package/dist/experimental/entries/projections/omerc.d.ts.map +1 -0
  356. package/dist/experimental/entries/projections/omerc.js +5 -0
  357. package/dist/experimental/entries/projections/omerc.js.map +1 -0
  358. package/dist/experimental/entries/projections/ortho.cjs +276 -0
  359. package/dist/experimental/entries/projections/ortho.cjs.map +6 -0
  360. package/dist/experimental/entries/projections/ortho.d.ts +2 -0
  361. package/dist/experimental/entries/projections/ortho.d.ts.map +1 -0
  362. package/dist/experimental/entries/projections/ortho.js +5 -0
  363. package/dist/experimental/entries/projections/ortho.js.map +1 -0
  364. package/dist/experimental/entries/projections/poly.cjs +326 -0
  365. package/dist/experimental/entries/projections/poly.cjs.map +6 -0
  366. package/dist/experimental/entries/projections/poly.d.ts +2 -0
  367. package/dist/experimental/entries/projections/poly.d.ts.map +1 -0
  368. package/dist/experimental/entries/projections/poly.js +5 -0
  369. package/dist/experimental/entries/projections/poly.js.map +1 -0
  370. package/dist/experimental/entries/projections/qsc.cjs +455 -0
  371. package/dist/experimental/entries/projections/qsc.cjs.map +6 -0
  372. package/dist/experimental/entries/projections/qsc.d.ts +2 -0
  373. package/dist/experimental/entries/projections/qsc.d.ts.map +1 -0
  374. package/dist/experimental/entries/projections/qsc.js +5 -0
  375. package/dist/experimental/entries/projections/qsc.js.map +1 -0
  376. package/dist/experimental/entries/projections/robin.cjs +331 -0
  377. package/dist/experimental/entries/projections/robin.cjs.map +6 -0
  378. package/dist/experimental/entries/projections/robin.d.ts +2 -0
  379. package/dist/experimental/entries/projections/robin.d.ts.map +1 -0
  380. package/dist/experimental/entries/projections/robin.js +5 -0
  381. package/dist/experimental/entries/projections/robin.js.map +1 -0
  382. package/dist/experimental/entries/projections/sinu.cjs +330 -0
  383. package/dist/experimental/entries/projections/sinu.cjs.map +6 -0
  384. package/dist/experimental/entries/projections/sinu.d.ts +2 -0
  385. package/dist/experimental/entries/projections/sinu.d.ts.map +1 -0
  386. package/dist/experimental/entries/projections/sinu.js +5 -0
  387. package/dist/experimental/entries/projections/sinu.js.map +1 -0
  388. package/dist/experimental/entries/projections/somerc.cjs +228 -0
  389. package/dist/experimental/entries/projections/somerc.cjs.map +6 -0
  390. package/dist/experimental/entries/projections/somerc.d.ts +2 -0
  391. package/dist/experimental/entries/projections/somerc.d.ts.map +1 -0
  392. package/dist/experimental/entries/projections/somerc.js +5 -0
  393. package/dist/experimental/entries/projections/somerc.js.map +1 -0
  394. package/dist/experimental/entries/projections/stere.cjs +379 -0
  395. package/dist/experimental/entries/projections/stere.cjs.map +6 -0
  396. package/dist/experimental/entries/projections/stere.d.ts +2 -0
  397. package/dist/experimental/entries/projections/stere.d.ts.map +1 -0
  398. package/dist/experimental/entries/projections/stere.js +5 -0
  399. package/dist/experimental/entries/projections/stere.js.map +1 -0
  400. package/dist/experimental/entries/projections/sterea.cjs +328 -0
  401. package/dist/experimental/entries/projections/sterea.cjs.map +6 -0
  402. package/dist/experimental/entries/projections/sterea.d.ts +2 -0
  403. package/dist/experimental/entries/projections/sterea.d.ts.map +1 -0
  404. package/dist/experimental/entries/projections/sterea.js +5 -0
  405. package/dist/experimental/entries/projections/sterea.js.map +1 -0
  406. package/dist/experimental/entries/projections/tmerc.cjs +618 -0
  407. package/dist/experimental/entries/projections/tmerc.cjs.map +6 -0
  408. package/dist/experimental/entries/projections/tmerc.d.ts +2 -0
  409. package/dist/experimental/entries/projections/tmerc.d.ts.map +1 -0
  410. package/dist/experimental/entries/projections/tmerc.js +5 -0
  411. package/dist/experimental/entries/projections/tmerc.js.map +1 -0
  412. package/dist/experimental/entries/projections/tpers.cjs +340 -0
  413. package/dist/experimental/entries/projections/tpers.cjs.map +6 -0
  414. package/dist/experimental/entries/projections/tpers.d.ts +2 -0
  415. package/dist/experimental/entries/projections/tpers.d.ts.map +1 -0
  416. package/dist/experimental/entries/projections/tpers.js +5 -0
  417. package/dist/experimental/entries/projections/tpers.js.map +1 -0
  418. package/dist/experimental/entries/projections/utm.cjs +644 -0
  419. package/dist/experimental/entries/projections/utm.cjs.map +6 -0
  420. package/dist/experimental/entries/projections/utm.d.ts +2 -0
  421. package/dist/experimental/entries/projections/utm.d.ts.map +1 -0
  422. package/dist/experimental/entries/projections/utm.js +5 -0
  423. package/dist/experimental/entries/projections/utm.js.map +1 -0
  424. package/dist/experimental/entries/projections/vandg.cjs +301 -0
  425. package/dist/experimental/entries/projections/vandg.cjs.map +6 -0
  426. package/dist/experimental/entries/projections/vandg.d.ts +2 -0
  427. package/dist/experimental/entries/projections/vandg.d.ts.map +1 -0
  428. package/dist/experimental/entries/projections/vandg.js +5 -0
  429. package/dist/experimental/entries/projections/vandg.js.map +1 -0
  430. package/dist/experimental/exact-helmert.d.ts +9 -0
  431. package/dist/experimental/exact-helmert.d.ts.map +1 -0
  432. package/dist/experimental/exact-helmert.js +32 -0
  433. package/dist/experimental/exact-helmert.js.map +1 -0
  434. package/dist/experimental/flat-projection.d.ts +13 -0
  435. package/dist/experimental/flat-projection.d.ts.map +1 -0
  436. package/dist/experimental/flat-projection.js +61 -0
  437. package/dist/experimental/flat-projection.js.map +1 -0
  438. package/dist/experimental/grids/geotiff.cjs +180 -0
  439. package/dist/experimental/grids/geotiff.cjs.map +6 -0
  440. package/dist/experimental/grids/geotiff.d.ts +23 -0
  441. package/dist/experimental/grids/geotiff.d.ts.map +1 -0
  442. package/dist/experimental/grids/geotiff.js +59 -0
  443. package/dist/experimental/grids/geotiff.js.map +1 -0
  444. package/dist/experimental/grids/grid.d.ts +4 -0
  445. package/dist/experimental/grids/grid.d.ts.map +1 -0
  446. package/dist/experimental/grids/grid.js +111 -0
  447. package/dist/experimental/grids/grid.js.map +1 -0
  448. package/dist/experimental/grids/gtx.cjs +91 -0
  449. package/dist/experimental/grids/gtx.cjs.map +6 -0
  450. package/dist/experimental/grids/gtx.d.ts +7 -0
  451. package/dist/experimental/grids/gtx.d.ts.map +1 -0
  452. package/dist/experimental/grids/gtx.js +30 -0
  453. package/dist/experimental/grids/gtx.js.map +1 -0
  454. package/dist/experimental/grids/ntv2.cjs +181 -0
  455. package/dist/experimental/grids/ntv2.cjs.map +6 -0
  456. package/dist/experimental/grids/ntv2.d.ts +8 -0
  457. package/dist/experimental/grids/ntv2.d.ts.map +1 -0
  458. package/dist/experimental/grids/ntv2.js +56 -0
  459. package/dist/experimental/grids/ntv2.js.map +1 -0
  460. package/dist/experimental/grids/scalar-geotiff.d.ts +58 -0
  461. package/dist/experimental/grids/scalar-geotiff.d.ts.map +1 -0
  462. package/dist/experimental/grids/scalar-geotiff.js +147 -0
  463. package/dist/experimental/grids/scalar-geotiff.js.map +1 -0
  464. package/dist/experimental/grids/types.d.ts +35 -0
  465. package/dist/experimental/grids/types.d.ts.map +1 -0
  466. package/dist/experimental/grids/types.js +2 -0
  467. package/dist/experimental/grids/types.js.map +1 -0
  468. package/dist/experimental/grids/velocity-geotiff.cjs +247 -0
  469. package/dist/experimental/grids/velocity-geotiff.cjs.map +6 -0
  470. package/dist/experimental/grids/velocity-geotiff.d.ts +11 -0
  471. package/dist/experimental/grids/velocity-geotiff.d.ts.map +1 -0
  472. package/dist/experimental/grids/velocity-geotiff.js +61 -0
  473. package/dist/experimental/grids/velocity-geotiff.js.map +1 -0
  474. package/dist/experimental/grids/velocity.d.ts +21 -0
  475. package/dist/experimental/grids/velocity.d.ts.map +1 -0
  476. package/dist/experimental/grids/velocity.js +29 -0
  477. package/dist/experimental/grids/velocity.js.map +1 -0
  478. package/dist/experimental/grids/vertical-geotiff.cjs +195 -0
  479. package/dist/experimental/grids/vertical-geotiff.cjs.map +6 -0
  480. package/dist/experimental/grids/vertical-geotiff.d.ts +6 -0
  481. package/dist/experimental/grids/vertical-geotiff.d.ts.map +1 -0
  482. package/dist/experimental/grids/vertical-geotiff.js +20 -0
  483. package/dist/experimental/grids/vertical-geotiff.js.map +1 -0
  484. package/dist/experimental/grids/vertical.cjs +80 -0
  485. package/dist/experimental/grids/vertical.cjs.map +6 -0
  486. package/dist/experimental/grids/vertical.d.ts +22 -0
  487. package/dist/experimental/grids/vertical.d.ts.map +1 -0
  488. package/dist/experimental/grids/vertical.js +73 -0
  489. package/dist/experimental/grids/vertical.js.map +1 -0
  490. package/dist/experimental/helmert-flat.d.ts +4 -0
  491. package/dist/experimental/helmert-flat.d.ts.map +1 -0
  492. package/dist/experimental/helmert-flat.js +53 -0
  493. package/dist/experimental/helmert-flat.js.map +1 -0
  494. package/dist/experimental/index.cjs +10062 -0
  495. package/dist/experimental/index.cjs.map +6 -0
  496. package/dist/experimental/index.d.ts +49 -0
  497. package/dist/experimental/index.d.ts.map +1 -0
  498. package/dist/experimental/index.js +48 -0
  499. package/dist/experimental/index.js.map +1 -0
  500. package/dist/experimental/kernel.d.ts +36 -0
  501. package/dist/experimental/kernel.d.ts.map +1 -0
  502. package/dist/experimental/kernel.js +80 -0
  503. package/dist/experimental/kernel.js.map +1 -0
  504. package/dist/experimental/kernels/aea.d.ts +25 -0
  505. package/dist/experimental/kernels/aea.d.ts.map +1 -0
  506. package/dist/experimental/kernels/aea.js +136 -0
  507. package/dist/experimental/kernels/aea.js.map +1 -0
  508. package/dist/experimental/kernels/aeqd.d.ts +10 -0
  509. package/dist/experimental/kernels/aeqd.d.ts.map +1 -0
  510. package/dist/experimental/kernels/aeqd.js +176 -0
  511. package/dist/experimental/kernels/aeqd.js.map +1 -0
  512. package/dist/experimental/kernels/bonne.d.ts +12 -0
  513. package/dist/experimental/kernels/bonne.d.ts.map +1 -0
  514. package/dist/experimental/kernels/bonne.js +128 -0
  515. package/dist/experimental/kernels/bonne.js.map +1 -0
  516. package/dist/experimental/kernels/cass.d.ts +10 -0
  517. package/dist/experimental/kernels/cass.d.ts.map +1 -0
  518. package/dist/experimental/kernels/cass.js +122 -0
  519. package/dist/experimental/kernels/cass.js.map +1 -0
  520. package/dist/experimental/kernels/cea.d.ts +6 -0
  521. package/dist/experimental/kernels/cea.d.ts.map +1 -0
  522. package/dist/experimental/kernels/cea.js +63 -0
  523. package/dist/experimental/kernels/cea.js.map +1 -0
  524. package/dist/experimental/kernels/eck6.d.ts +13 -0
  525. package/dist/experimental/kernels/eck6.d.ts.map +1 -0
  526. package/dist/experimental/kernels/eck6.js +23 -0
  527. package/dist/experimental/kernels/eck6.js.map +1 -0
  528. package/dist/experimental/kernels/eqdc.d.ts +19 -0
  529. package/dist/experimental/kernels/eqdc.d.ts.map +1 -0
  530. package/dist/experimental/kernels/eqdc.js +117 -0
  531. package/dist/experimental/kernels/eqdc.js.map +1 -0
  532. package/dist/experimental/kernels/eqearth.d.ts +10 -0
  533. package/dist/experimental/kernels/eqearth.d.ts.map +1 -0
  534. package/dist/experimental/kernels/eqearth.js +103 -0
  535. package/dist/experimental/kernels/eqearth.js.map +1 -0
  536. package/dist/experimental/kernels/equi.d.ts +9 -0
  537. package/dist/experimental/kernels/equi.d.ts.map +1 -0
  538. package/dist/experimental/kernels/equi.js +41 -0
  539. package/dist/experimental/kernels/equi.js.map +1 -0
  540. package/dist/experimental/kernels/etmerc.d.ts +13 -0
  541. package/dist/experimental/kernels/etmerc.d.ts.map +1 -0
  542. package/dist/experimental/kernels/etmerc.js +145 -0
  543. package/dist/experimental/kernels/etmerc.js.map +1 -0
  544. package/dist/experimental/kernels/gauss.d.ts +12 -0
  545. package/dist/experimental/kernels/gauss.d.ts.map +1 -0
  546. package/dist/experimental/kernels/gauss.js +64 -0
  547. package/dist/experimental/kernels/gauss.js.map +1 -0
  548. package/dist/experimental/kernels/geos.d.ts +17 -0
  549. package/dist/experimental/kernels/geos.d.ts.map +1 -0
  550. package/dist/experimental/kernels/geos.js +153 -0
  551. package/dist/experimental/kernels/geos.js.map +1 -0
  552. package/dist/experimental/kernels/gnom.d.ts +12 -0
  553. package/dist/experimental/kernels/gnom.d.ts.map +1 -0
  554. package/dist/experimental/kernels/gnom.js +95 -0
  555. package/dist/experimental/kernels/gnom.js.map +1 -0
  556. package/dist/experimental/kernels/gstmerc.d.ts +13 -0
  557. package/dist/experimental/kernels/gstmerc.d.ts.map +1 -0
  558. package/dist/experimental/kernels/gstmerc.js +57 -0
  559. package/dist/experimental/kernels/gstmerc.js.map +1 -0
  560. package/dist/experimental/kernels/krovak.d.ts +23 -0
  561. package/dist/experimental/kernels/krovak.d.ts.map +1 -0
  562. package/dist/experimental/kernels/krovak.js +128 -0
  563. package/dist/experimental/kernels/krovak.js.map +1 -0
  564. package/dist/experimental/kernels/laea.d.ts +23 -0
  565. package/dist/experimental/kernels/laea.d.ts.map +1 -0
  566. package/dist/experimental/kernels/laea.js +278 -0
  567. package/dist/experimental/kernels/laea.js.map +1 -0
  568. package/dist/experimental/kernels/lcc.d.ts +10 -0
  569. package/dist/experimental/kernels/lcc.d.ts.map +1 -0
  570. package/dist/experimental/kernels/lcc.js +131 -0
  571. package/dist/experimental/kernels/lcc.js.map +1 -0
  572. package/dist/experimental/kernels/mill.d.ts +6 -0
  573. package/dist/experimental/kernels/mill.d.ts.map +1 -0
  574. package/dist/experimental/kernels/mill.js +49 -0
  575. package/dist/experimental/kernels/mill.js.map +1 -0
  576. package/dist/experimental/kernels/moll.d.ts +6 -0
  577. package/dist/experimental/kernels/moll.d.ts.map +1 -0
  578. package/dist/experimental/kernels/moll.js +89 -0
  579. package/dist/experimental/kernels/moll.js.map +1 -0
  580. package/dist/experimental/kernels/nzmg.d.ts +28 -0
  581. package/dist/experimental/kernels/nzmg.d.ts.map +1 -0
  582. package/dist/experimental/kernels/nzmg.js +209 -0
  583. package/dist/experimental/kernels/nzmg.js.map +1 -0
  584. package/dist/experimental/kernels/omerc.d.ts +30 -0
  585. package/dist/experimental/kernels/omerc.d.ts.map +1 -0
  586. package/dist/experimental/kernels/omerc.js +260 -0
  587. package/dist/experimental/kernels/omerc.js.map +1 -0
  588. package/dist/experimental/kernels/ortho.d.ts +9 -0
  589. package/dist/experimental/kernels/ortho.d.ts.map +1 -0
  590. package/dist/experimental/kernels/ortho.js +91 -0
  591. package/dist/experimental/kernels/ortho.js.map +1 -0
  592. package/dist/experimental/kernels/poly.d.ts +13 -0
  593. package/dist/experimental/kernels/poly.d.ts.map +1 -0
  594. package/dist/experimental/kernels/poly.js +141 -0
  595. package/dist/experimental/kernels/poly.js.map +1 -0
  596. package/dist/experimental/kernels/qsc.d.ts +10 -0
  597. package/dist/experimental/kernels/qsc.d.ts.map +1 -0
  598. package/dist/experimental/kernels/qsc.js +379 -0
  599. package/dist/experimental/kernels/qsc.js.map +1 -0
  600. package/dist/experimental/kernels/robin.d.ts +6 -0
  601. package/dist/experimental/kernels/robin.d.ts.map +1 -0
  602. package/dist/experimental/kernels/robin.js +166 -0
  603. package/dist/experimental/kernels/robin.js.map +1 -0
  604. package/dist/experimental/kernels/sinu.d.ts +12 -0
  605. package/dist/experimental/kernels/sinu.d.ts.map +1 -0
  606. package/dist/experimental/kernels/sinu.js +104 -0
  607. package/dist/experimental/kernels/sinu.js.map +1 -0
  608. package/dist/experimental/kernels/somerc.d.ts +13 -0
  609. package/dist/experimental/kernels/somerc.d.ts.map +1 -0
  610. package/dist/experimental/kernels/somerc.js +81 -0
  611. package/dist/experimental/kernels/somerc.js.map +1 -0
  612. package/dist/experimental/kernels/stere.d.ts +15 -0
  613. package/dist/experimental/kernels/stere.d.ts.map +1 -0
  614. package/dist/experimental/kernels/stere.js +195 -0
  615. package/dist/experimental/kernels/stere.js.map +1 -0
  616. package/dist/experimental/kernels/sterea.d.ts +11 -0
  617. package/dist/experimental/kernels/sterea.d.ts.map +1 -0
  618. package/dist/experimental/kernels/sterea.js +65 -0
  619. package/dist/experimental/kernels/sterea.js.map +1 -0
  620. package/dist/experimental/kernels/tmerc.d.ts +9 -0
  621. package/dist/experimental/kernels/tmerc.d.ts.map +1 -0
  622. package/dist/experimental/kernels/tmerc.js +201 -0
  623. package/dist/experimental/kernels/tmerc.js.map +1 -0
  624. package/dist/experimental/kernels/tpers.d.ts +22 -0
  625. package/dist/experimental/kernels/tpers.d.ts.map +1 -0
  626. package/dist/experimental/kernels/tpers.js +156 -0
  627. package/dist/experimental/kernels/tpers.js.map +1 -0
  628. package/dist/experimental/kernels/vandg.d.ts +8 -0
  629. package/dist/experimental/kernels/vandg.d.ts.map +1 -0
  630. package/dist/experimental/kernels/vandg.js +132 -0
  631. package/dist/experimental/kernels/vandg.js.map +1 -0
  632. package/dist/experimental/kinematic-helmert-flat.d.ts +4 -0
  633. package/dist/experimental/kinematic-helmert-flat.d.ts.map +1 -0
  634. package/dist/experimental/kinematic-helmert-flat.js +60 -0
  635. package/dist/experimental/kinematic-helmert-flat.js.map +1 -0
  636. package/dist/experimental/kinematic-helmert.d.ts +11 -0
  637. package/dist/experimental/kinematic-helmert.d.ts.map +1 -0
  638. package/dist/experimental/kinematic-helmert.js +103 -0
  639. package/dist/experimental/kinematic-helmert.js.map +1 -0
  640. package/dist/experimental/lazy-projection.d.ts +11 -0
  641. package/dist/experimental/lazy-projection.d.ts.map +1 -0
  642. package/dist/experimental/lazy-projection.js +138 -0
  643. package/dist/experimental/lazy-projection.js.map +1 -0
  644. package/dist/experimental/lazy-projections/aea.cjs +79 -0
  645. package/dist/experimental/lazy-projections/aea.cjs.map +6 -0
  646. package/dist/experimental/lazy-projections/aea.d.ts +3 -0
  647. package/dist/experimental/lazy-projections/aea.d.ts.map +1 -0
  648. package/dist/experimental/lazy-projections/aea.js +7 -0
  649. package/dist/experimental/lazy-projections/aea.js.map +1 -0
  650. package/dist/experimental/lazy-projections/aeqd.cjs +79 -0
  651. package/dist/experimental/lazy-projections/aeqd.cjs.map +6 -0
  652. package/dist/experimental/lazy-projections/aeqd.d.ts +3 -0
  653. package/dist/experimental/lazy-projections/aeqd.d.ts.map +1 -0
  654. package/dist/experimental/lazy-projections/aeqd.js +8 -0
  655. package/dist/experimental/lazy-projections/aeqd.js.map +1 -0
  656. package/dist/experimental/lazy-projections/bonne.cjs +79 -0
  657. package/dist/experimental/lazy-projections/bonne.cjs.map +6 -0
  658. package/dist/experimental/lazy-projections/bonne.d.ts +3 -0
  659. package/dist/experimental/lazy-projections/bonne.d.ts.map +1 -0
  660. package/dist/experimental/lazy-projections/bonne.js +7 -0
  661. package/dist/experimental/lazy-projections/bonne.js.map +1 -0
  662. package/dist/experimental/lazy-projections/cass.cjs +79 -0
  663. package/dist/experimental/lazy-projections/cass.cjs.map +6 -0
  664. package/dist/experimental/lazy-projections/cass.d.ts +3 -0
  665. package/dist/experimental/lazy-projections/cass.d.ts.map +1 -0
  666. package/dist/experimental/lazy-projections/cass.js +7 -0
  667. package/dist/experimental/lazy-projections/cass.js.map +1 -0
  668. package/dist/experimental/lazy-projections/cea.cjs +79 -0
  669. package/dist/experimental/lazy-projections/cea.cjs.map +6 -0
  670. package/dist/experimental/lazy-projections/cea.d.ts +3 -0
  671. package/dist/experimental/lazy-projections/cea.d.ts.map +1 -0
  672. package/dist/experimental/lazy-projections/cea.js +8 -0
  673. package/dist/experimental/lazy-projections/cea.js.map +1 -0
  674. package/dist/experimental/lazy-projections/eck6.cjs +79 -0
  675. package/dist/experimental/lazy-projections/eck6.cjs.map +6 -0
  676. package/dist/experimental/lazy-projections/eck6.d.ts +3 -0
  677. package/dist/experimental/lazy-projections/eck6.d.ts.map +1 -0
  678. package/dist/experimental/lazy-projections/eck6.js +7 -0
  679. package/dist/experimental/lazy-projections/eck6.js.map +1 -0
  680. package/dist/experimental/lazy-projections/eqc.cjs +82 -0
  681. package/dist/experimental/lazy-projections/eqc.cjs.map +6 -0
  682. package/dist/experimental/lazy-projections/eqc.d.ts +3 -0
  683. package/dist/experimental/lazy-projections/eqc.d.ts.map +1 -0
  684. package/dist/experimental/lazy-projections/eqc.js +11 -0
  685. package/dist/experimental/lazy-projections/eqc.js.map +1 -0
  686. package/dist/experimental/lazy-projections/eqdc.cjs +79 -0
  687. package/dist/experimental/lazy-projections/eqdc.cjs.map +6 -0
  688. package/dist/experimental/lazy-projections/eqdc.d.ts +3 -0
  689. package/dist/experimental/lazy-projections/eqdc.d.ts.map +1 -0
  690. package/dist/experimental/lazy-projections/eqdc.js +8 -0
  691. package/dist/experimental/lazy-projections/eqdc.js.map +1 -0
  692. package/dist/experimental/lazy-projections/eqearth.cjs +79 -0
  693. package/dist/experimental/lazy-projections/eqearth.cjs.map +6 -0
  694. package/dist/experimental/lazy-projections/eqearth.d.ts +3 -0
  695. package/dist/experimental/lazy-projections/eqearth.d.ts.map +1 -0
  696. package/dist/experimental/lazy-projections/eqearth.js +7 -0
  697. package/dist/experimental/lazy-projections/eqearth.js.map +1 -0
  698. package/dist/experimental/lazy-projections/equi.cjs +79 -0
  699. package/dist/experimental/lazy-projections/equi.cjs.map +6 -0
  700. package/dist/experimental/lazy-projections/equi.d.ts +3 -0
  701. package/dist/experimental/lazy-projections/equi.d.ts.map +1 -0
  702. package/dist/experimental/lazy-projections/equi.js +7 -0
  703. package/dist/experimental/lazy-projections/equi.js.map +1 -0
  704. package/dist/experimental/lazy-projections/etmerc.cjs +79 -0
  705. package/dist/experimental/lazy-projections/etmerc.cjs.map +6 -0
  706. package/dist/experimental/lazy-projections/etmerc.d.ts +3 -0
  707. package/dist/experimental/lazy-projections/etmerc.d.ts.map +1 -0
  708. package/dist/experimental/lazy-projections/etmerc.js +8 -0
  709. package/dist/experimental/lazy-projections/etmerc.js.map +1 -0
  710. package/dist/experimental/lazy-projections/geocent.cjs +79 -0
  711. package/dist/experimental/lazy-projections/geocent.cjs.map +6 -0
  712. package/dist/experimental/lazy-projections/geocent.d.ts +3 -0
  713. package/dist/experimental/lazy-projections/geocent.d.ts.map +1 -0
  714. package/dist/experimental/lazy-projections/geocent.js +7 -0
  715. package/dist/experimental/lazy-projections/geocent.js.map +1 -0
  716. package/dist/experimental/lazy-projections/geos.cjs +79 -0
  717. package/dist/experimental/lazy-projections/geos.cjs.map +6 -0
  718. package/dist/experimental/lazy-projections/geos.d.ts +3 -0
  719. package/dist/experimental/lazy-projections/geos.d.ts.map +1 -0
  720. package/dist/experimental/lazy-projections/geos.js +7 -0
  721. package/dist/experimental/lazy-projections/geos.js.map +1 -0
  722. package/dist/experimental/lazy-projections/gnom.cjs +79 -0
  723. package/dist/experimental/lazy-projections/gnom.cjs.map +6 -0
  724. package/dist/experimental/lazy-projections/gnom.d.ts +3 -0
  725. package/dist/experimental/lazy-projections/gnom.d.ts.map +1 -0
  726. package/dist/experimental/lazy-projections/gnom.js +7 -0
  727. package/dist/experimental/lazy-projections/gnom.js.map +1 -0
  728. package/dist/experimental/lazy-projections/gstmerc.cjs +79 -0
  729. package/dist/experimental/lazy-projections/gstmerc.cjs.map +6 -0
  730. package/dist/experimental/lazy-projections/gstmerc.d.ts +3 -0
  731. package/dist/experimental/lazy-projections/gstmerc.d.ts.map +1 -0
  732. package/dist/experimental/lazy-projections/gstmerc.js +8 -0
  733. package/dist/experimental/lazy-projections/gstmerc.js.map +1 -0
  734. package/dist/experimental/lazy-projections/index.cjs +3177 -0
  735. package/dist/experimental/lazy-projections/index.cjs.map +6 -0
  736. package/dist/experimental/lazy-projections/index.d.ts +39 -0
  737. package/dist/experimental/lazy-projections/index.d.ts.map +1 -0
  738. package/dist/experimental/lazy-projections/index.js +41 -0
  739. package/dist/experimental/lazy-projections/index.js.map +1 -0
  740. package/dist/experimental/lazy-projections/krovak.cjs +87 -0
  741. package/dist/experimental/lazy-projections/krovak.cjs.map +6 -0
  742. package/dist/experimental/lazy-projections/krovak.d.ts +3 -0
  743. package/dist/experimental/lazy-projections/krovak.d.ts.map +1 -0
  744. package/dist/experimental/lazy-projections/krovak.js +15 -0
  745. package/dist/experimental/lazy-projections/krovak.js.map +1 -0
  746. package/dist/experimental/lazy-projections/laea.cjs +79 -0
  747. package/dist/experimental/lazy-projections/laea.cjs.map +6 -0
  748. package/dist/experimental/lazy-projections/laea.d.ts +3 -0
  749. package/dist/experimental/lazy-projections/laea.d.ts.map +1 -0
  750. package/dist/experimental/lazy-projections/laea.js +8 -0
  751. package/dist/experimental/lazy-projections/laea.js.map +1 -0
  752. package/dist/experimental/lazy-projections/lcc.cjs +89 -0
  753. package/dist/experimental/lazy-projections/lcc.cjs.map +6 -0
  754. package/dist/experimental/lazy-projections/lcc.d.ts +3 -0
  755. package/dist/experimental/lazy-projections/lcc.d.ts.map +1 -0
  756. package/dist/experimental/lazy-projections/lcc.js +18 -0
  757. package/dist/experimental/lazy-projections/lcc.js.map +1 -0
  758. package/dist/experimental/lazy-projections/merc.cjs +88 -0
  759. package/dist/experimental/lazy-projections/merc.cjs.map +6 -0
  760. package/dist/experimental/lazy-projections/merc.d.ts +3 -0
  761. package/dist/experimental/lazy-projections/merc.d.ts.map +1 -0
  762. package/dist/experimental/lazy-projections/merc.js +16 -0
  763. package/dist/experimental/lazy-projections/merc.js.map +1 -0
  764. package/dist/experimental/lazy-projections/mill.cjs +79 -0
  765. package/dist/experimental/lazy-projections/mill.cjs.map +6 -0
  766. package/dist/experimental/lazy-projections/mill.d.ts +3 -0
  767. package/dist/experimental/lazy-projections/mill.d.ts.map +1 -0
  768. package/dist/experimental/lazy-projections/mill.js +8 -0
  769. package/dist/experimental/lazy-projections/mill.js.map +1 -0
  770. package/dist/experimental/lazy-projections/moll.cjs +79 -0
  771. package/dist/experimental/lazy-projections/moll.cjs.map +6 -0
  772. package/dist/experimental/lazy-projections/moll.d.ts +3 -0
  773. package/dist/experimental/lazy-projections/moll.d.ts.map +1 -0
  774. package/dist/experimental/lazy-projections/moll.js +7 -0
  775. package/dist/experimental/lazy-projections/moll.js.map +1 -0
  776. package/dist/experimental/lazy-projections/nzmg.cjs +79 -0
  777. package/dist/experimental/lazy-projections/nzmg.cjs.map +6 -0
  778. package/dist/experimental/lazy-projections/nzmg.d.ts +3 -0
  779. package/dist/experimental/lazy-projections/nzmg.d.ts.map +1 -0
  780. package/dist/experimental/lazy-projections/nzmg.js +8 -0
  781. package/dist/experimental/lazy-projections/nzmg.js.map +1 -0
  782. package/dist/experimental/lazy-projections/ob_tran.cjs +90 -0
  783. package/dist/experimental/lazy-projections/ob_tran.cjs.map +6 -0
  784. package/dist/experimental/lazy-projections/ob_tran.d.ts +5 -0
  785. package/dist/experimental/lazy-projections/ob_tran.d.ts.map +1 -0
  786. package/dist/experimental/lazy-projections/ob_tran.js +18 -0
  787. package/dist/experimental/lazy-projections/ob_tran.js.map +1 -0
  788. package/dist/experimental/lazy-projections/omerc.cjs +91 -0
  789. package/dist/experimental/lazy-projections/omerc.cjs.map +6 -0
  790. package/dist/experimental/lazy-projections/omerc.d.ts +3 -0
  791. package/dist/experimental/lazy-projections/omerc.d.ts.map +1 -0
  792. package/dist/experimental/lazy-projections/omerc.js +19 -0
  793. package/dist/experimental/lazy-projections/omerc.js.map +1 -0
  794. package/dist/experimental/lazy-projections/ortho.cjs +79 -0
  795. package/dist/experimental/lazy-projections/ortho.cjs.map +6 -0
  796. package/dist/experimental/lazy-projections/ortho.d.ts +3 -0
  797. package/dist/experimental/lazy-projections/ortho.d.ts.map +1 -0
  798. package/dist/experimental/lazy-projections/ortho.js +7 -0
  799. package/dist/experimental/lazy-projections/ortho.js.map +1 -0
  800. package/dist/experimental/lazy-projections/poly.cjs +79 -0
  801. package/dist/experimental/lazy-projections/poly.cjs.map +6 -0
  802. package/dist/experimental/lazy-projections/poly.d.ts +3 -0
  803. package/dist/experimental/lazy-projections/poly.d.ts.map +1 -0
  804. package/dist/experimental/lazy-projections/poly.js +7 -0
  805. package/dist/experimental/lazy-projections/poly.js.map +1 -0
  806. package/dist/experimental/lazy-projections/qsc.cjs +82 -0
  807. package/dist/experimental/lazy-projections/qsc.cjs.map +6 -0
  808. package/dist/experimental/lazy-projections/qsc.d.ts +3 -0
  809. package/dist/experimental/lazy-projections/qsc.d.ts.map +1 -0
  810. package/dist/experimental/lazy-projections/qsc.js +11 -0
  811. package/dist/experimental/lazy-projections/qsc.js.map +1 -0
  812. package/dist/experimental/lazy-projections/robin.cjs +79 -0
  813. package/dist/experimental/lazy-projections/robin.cjs.map +6 -0
  814. package/dist/experimental/lazy-projections/robin.d.ts +3 -0
  815. package/dist/experimental/lazy-projections/robin.d.ts.map +1 -0
  816. package/dist/experimental/lazy-projections/robin.js +7 -0
  817. package/dist/experimental/lazy-projections/robin.js.map +1 -0
  818. package/dist/experimental/lazy-projections/sinu.cjs +79 -0
  819. package/dist/experimental/lazy-projections/sinu.cjs.map +6 -0
  820. package/dist/experimental/lazy-projections/sinu.d.ts +3 -0
  821. package/dist/experimental/lazy-projections/sinu.d.ts.map +1 -0
  822. package/dist/experimental/lazy-projections/sinu.js +7 -0
  823. package/dist/experimental/lazy-projections/sinu.js.map +1 -0
  824. package/dist/experimental/lazy-projections/somerc.cjs +79 -0
  825. package/dist/experimental/lazy-projections/somerc.cjs.map +6 -0
  826. package/dist/experimental/lazy-projections/somerc.d.ts +3 -0
  827. package/dist/experimental/lazy-projections/somerc.d.ts.map +1 -0
  828. package/dist/experimental/lazy-projections/somerc.js +8 -0
  829. package/dist/experimental/lazy-projections/somerc.js.map +1 -0
  830. package/dist/experimental/lazy-projections/stere.cjs +87 -0
  831. package/dist/experimental/lazy-projections/stere.cjs.map +6 -0
  832. package/dist/experimental/lazy-projections/stere.d.ts +3 -0
  833. package/dist/experimental/lazy-projections/stere.d.ts.map +1 -0
  834. package/dist/experimental/lazy-projections/stere.js +15 -0
  835. package/dist/experimental/lazy-projections/stere.js.map +1 -0
  836. package/dist/experimental/lazy-projections/sterea.cjs +87 -0
  837. package/dist/experimental/lazy-projections/sterea.cjs.map +6 -0
  838. package/dist/experimental/lazy-projections/sterea.d.ts +3 -0
  839. package/dist/experimental/lazy-projections/sterea.d.ts.map +1 -0
  840. package/dist/experimental/lazy-projections/sterea.js +16 -0
  841. package/dist/experimental/lazy-projections/sterea.js.map +1 -0
  842. package/dist/experimental/lazy-projections/tmerc.cjs +89 -0
  843. package/dist/experimental/lazy-projections/tmerc.cjs.map +6 -0
  844. package/dist/experimental/lazy-projections/tmerc.d.ts +3 -0
  845. package/dist/experimental/lazy-projections/tmerc.d.ts.map +1 -0
  846. package/dist/experimental/lazy-projections/tmerc.js +18 -0
  847. package/dist/experimental/lazy-projections/tmerc.js.map +1 -0
  848. package/dist/experimental/lazy-projections/tpers.cjs +79 -0
  849. package/dist/experimental/lazy-projections/tpers.cjs.map +6 -0
  850. package/dist/experimental/lazy-projections/tpers.d.ts +3 -0
  851. package/dist/experimental/lazy-projections/tpers.d.ts.map +1 -0
  852. package/dist/experimental/lazy-projections/tpers.js +8 -0
  853. package/dist/experimental/lazy-projections/tpers.js.map +1 -0
  854. package/dist/experimental/lazy-projections/utm.cjs +79 -0
  855. package/dist/experimental/lazy-projections/utm.cjs.map +6 -0
  856. package/dist/experimental/lazy-projections/utm.d.ts +3 -0
  857. package/dist/experimental/lazy-projections/utm.d.ts.map +1 -0
  858. package/dist/experimental/lazy-projections/utm.js +8 -0
  859. package/dist/experimental/lazy-projections/utm.js.map +1 -0
  860. package/dist/experimental/lazy-projections/vandg.cjs +79 -0
  861. package/dist/experimental/lazy-projections/vandg.cjs.map +6 -0
  862. package/dist/experimental/lazy-projections/vandg.d.ts +3 -0
  863. package/dist/experimental/lazy-projections/vandg.d.ts.map +1 -0
  864. package/dist/experimental/lazy-projections/vandg.js +7 -0
  865. package/dist/experimental/lazy-projections/vandg.js.map +1 -0
  866. package/dist/experimental/mutable-projection.d.ts +6 -0
  867. package/dist/experimental/mutable-projection.d.ts.map +1 -0
  868. package/dist/experimental/mutable-projection.js +53 -0
  869. package/dist/experimental/mutable-projection.js.map +1 -0
  870. package/dist/experimental/numeric-flat.d.ts +8 -0
  871. package/dist/experimental/numeric-flat.d.ts.map +1 -0
  872. package/dist/experimental/numeric-flat.js +54 -0
  873. package/dist/experimental/numeric-flat.js.map +1 -0
  874. package/dist/experimental/parameters.d.ts +7 -0
  875. package/dist/experimental/parameters.d.ts.map +1 -0
  876. package/dist/experimental/parameters.js +30 -0
  877. package/dist/experimental/parameters.js.map +1 -0
  878. package/dist/experimental/projection-descriptor.d.ts +13 -0
  879. package/dist/experimental/projection-descriptor.d.ts.map +1 -0
  880. package/dist/experimental/projection-descriptor.js +52 -0
  881. package/dist/experimental/projection-descriptor.js.map +1 -0
  882. package/dist/experimental/projection-pipeline.d.ts +142 -0
  883. package/dist/experimental/projection-pipeline.d.ts.map +1 -0
  884. package/dist/experimental/projection-pipeline.js +746 -0
  885. package/dist/experimental/projection-pipeline.js.map +1 -0
  886. package/dist/experimental/projection-scratch.d.ts +9 -0
  887. package/dist/experimental/projection-scratch.d.ts.map +1 -0
  888. package/dist/experimental/projection-scratch.js +18 -0
  889. package/dist/experimental/projection-scratch.js.map +1 -0
  890. package/dist/experimental/projections/aea.d.ts +3 -0
  891. package/dist/experimental/projections/aea.d.ts.map +1 -0
  892. package/dist/experimental/projections/aea.js +17 -0
  893. package/dist/experimental/projections/aea.js.map +1 -0
  894. package/dist/experimental/projections/aeqd.d.ts +3 -0
  895. package/dist/experimental/projections/aeqd.d.ts.map +1 -0
  896. package/dist/experimental/projections/aeqd.js +15 -0
  897. package/dist/experimental/projections/aeqd.js.map +1 -0
  898. package/dist/experimental/projections/bonne.d.ts +3 -0
  899. package/dist/experimental/projections/bonne.d.ts.map +1 -0
  900. package/dist/experimental/projections/bonne.js +16 -0
  901. package/dist/experimental/projections/bonne.js.map +1 -0
  902. package/dist/experimental/projections/cass.d.ts +3 -0
  903. package/dist/experimental/projections/cass.d.ts.map +1 -0
  904. package/dist/experimental/projections/cass.js +13 -0
  905. package/dist/experimental/projections/cass.js.map +1 -0
  906. package/dist/experimental/projections/cea.d.ts +3 -0
  907. package/dist/experimental/projections/cea.d.ts.map +1 -0
  908. package/dist/experimental/projections/cea.js +15 -0
  909. package/dist/experimental/projections/cea.js.map +1 -0
  910. package/dist/experimental/projections/eck6.d.ts +3 -0
  911. package/dist/experimental/projections/eck6.d.ts.map +1 -0
  912. package/dist/experimental/projections/eck6.js +13 -0
  913. package/dist/experimental/projections/eck6.js.map +1 -0
  914. package/dist/experimental/projections/eqdc.d.ts +3 -0
  915. package/dist/experimental/projections/eqdc.d.ts.map +1 -0
  916. package/dist/experimental/projections/eqdc.js +17 -0
  917. package/dist/experimental/projections/eqdc.js.map +1 -0
  918. package/dist/experimental/projections/eqearth.d.ts +3 -0
  919. package/dist/experimental/projections/eqearth.d.ts.map +1 -0
  920. package/dist/experimental/projections/eqearth.js +13 -0
  921. package/dist/experimental/projections/eqearth.js.map +1 -0
  922. package/dist/experimental/projections/equi.d.ts +3 -0
  923. package/dist/experimental/projections/equi.d.ts.map +1 -0
  924. package/dist/experimental/projections/equi.js +15 -0
  925. package/dist/experimental/projections/equi.js.map +1 -0
  926. package/dist/experimental/projections/equidistant-cylindrical.d.ts +4 -0
  927. package/dist/experimental/projections/equidistant-cylindrical.d.ts.map +1 -0
  928. package/dist/experimental/projections/equidistant-cylindrical.js +30 -0
  929. package/dist/experimental/projections/equidistant-cylindrical.js.map +1 -0
  930. package/dist/experimental/projections/geocentric.d.ts +3 -0
  931. package/dist/experimental/projections/geocentric.d.ts.map +1 -0
  932. package/dist/experimental/projections/geocentric.js +26 -0
  933. package/dist/experimental/projections/geocentric.js.map +1 -0
  934. package/dist/experimental/projections/geos.d.ts +3 -0
  935. package/dist/experimental/projections/geos.d.ts.map +1 -0
  936. package/dist/experimental/projections/geos.js +20 -0
  937. package/dist/experimental/projections/geos.js.map +1 -0
  938. package/dist/experimental/projections/gnom.d.ts +3 -0
  939. package/dist/experimental/projections/gnom.d.ts.map +1 -0
  940. package/dist/experimental/projections/gnom.js +13 -0
  941. package/dist/experimental/projections/gnom.js.map +1 -0
  942. package/dist/experimental/projections/gstmerc.d.ts +3 -0
  943. package/dist/experimental/projections/gstmerc.d.ts.map +1 -0
  944. package/dist/experimental/projections/gstmerc.js +13 -0
  945. package/dist/experimental/projections/gstmerc.js.map +1 -0
  946. package/dist/experimental/projections/krovak.d.ts +3 -0
  947. package/dist/experimental/projections/krovak.d.ts.map +1 -0
  948. package/dist/experimental/projections/krovak.js +32 -0
  949. package/dist/experimental/projections/krovak.js.map +1 -0
  950. package/dist/experimental/projections/laea.d.ts +3 -0
  951. package/dist/experimental/projections/laea.d.ts.map +1 -0
  952. package/dist/experimental/projections/laea.js +15 -0
  953. package/dist/experimental/projections/laea.js.map +1 -0
  954. package/dist/experimental/projections/lcc.d.ts +3 -0
  955. package/dist/experimental/projections/lcc.d.ts.map +1 -0
  956. package/dist/experimental/projections/lcc.js +32 -0
  957. package/dist/experimental/projections/lcc.js.map +1 -0
  958. package/dist/experimental/projections/mercator.d.ts +4 -0
  959. package/dist/experimental/projections/mercator.d.ts.map +1 -0
  960. package/dist/experimental/projections/mercator.js +71 -0
  961. package/dist/experimental/projections/mercator.js.map +1 -0
  962. package/dist/experimental/projections/mill.d.ts +3 -0
  963. package/dist/experimental/projections/mill.d.ts.map +1 -0
  964. package/dist/experimental/projections/mill.js +13 -0
  965. package/dist/experimental/projections/mill.js.map +1 -0
  966. package/dist/experimental/projections/moll.d.ts +3 -0
  967. package/dist/experimental/projections/moll.d.ts.map +1 -0
  968. package/dist/experimental/projections/moll.js +13 -0
  969. package/dist/experimental/projections/moll.js.map +1 -0
  970. package/dist/experimental/projections/nzmg.d.ts +3 -0
  971. package/dist/experimental/projections/nzmg.d.ts.map +1 -0
  972. package/dist/experimental/projections/nzmg.js +20 -0
  973. package/dist/experimental/projections/nzmg.js.map +1 -0
  974. package/dist/experimental/projections/ob-tran.d.ts +4 -0
  975. package/dist/experimental/projections/ob-tran.d.ts.map +1 -0
  976. package/dist/experimental/projections/ob-tran.js +119 -0
  977. package/dist/experimental/projections/ob-tran.js.map +1 -0
  978. package/dist/experimental/projections/omerc.d.ts +3 -0
  979. package/dist/experimental/projections/omerc.d.ts.map +1 -0
  980. package/dist/experimental/projections/omerc.js +60 -0
  981. package/dist/experimental/projections/omerc.js.map +1 -0
  982. package/dist/experimental/projections/ortho.d.ts +3 -0
  983. package/dist/experimental/projections/ortho.d.ts.map +1 -0
  984. package/dist/experimental/projections/ortho.js +13 -0
  985. package/dist/experimental/projections/ortho.js.map +1 -0
  986. package/dist/experimental/projections/poly.d.ts +3 -0
  987. package/dist/experimental/projections/poly.d.ts.map +1 -0
  988. package/dist/experimental/projections/poly.js +13 -0
  989. package/dist/experimental/projections/poly.js.map +1 -0
  990. package/dist/experimental/projections/qsc.d.ts +3 -0
  991. package/dist/experimental/projections/qsc.d.ts.map +1 -0
  992. package/dist/experimental/projections/qsc.js +13 -0
  993. package/dist/experimental/projections/qsc.js.map +1 -0
  994. package/dist/experimental/projections/robin.d.ts +3 -0
  995. package/dist/experimental/projections/robin.d.ts.map +1 -0
  996. package/dist/experimental/projections/robin.js +13 -0
  997. package/dist/experimental/projections/robin.js.map +1 -0
  998. package/dist/experimental/projections/sinu.d.ts +3 -0
  999. package/dist/experimental/projections/sinu.d.ts.map +1 -0
  1000. package/dist/experimental/projections/sinu.js +13 -0
  1001. package/dist/experimental/projections/sinu.js.map +1 -0
  1002. package/dist/experimental/projections/somerc.d.ts +3 -0
  1003. package/dist/experimental/projections/somerc.d.ts.map +1 -0
  1004. package/dist/experimental/projections/somerc.js +13 -0
  1005. package/dist/experimental/projections/somerc.js.map +1 -0
  1006. package/dist/experimental/projections/stere.d.ts +3 -0
  1007. package/dist/experimental/projections/stere.d.ts.map +1 -0
  1008. package/dist/experimental/projections/stere.js +20 -0
  1009. package/dist/experimental/projections/stere.js.map +1 -0
  1010. package/dist/experimental/projections/sterea.d.ts +3 -0
  1011. package/dist/experimental/projections/sterea.d.ts.map +1 -0
  1012. package/dist/experimental/projections/sterea.js +22 -0
  1013. package/dist/experimental/projections/sterea.js.map +1 -0
  1014. package/dist/experimental/projections/tpers.d.ts +3 -0
  1015. package/dist/experimental/projections/tpers.d.ts.map +1 -0
  1016. package/dist/experimental/projections/tpers.js +19 -0
  1017. package/dist/experimental/projections/tpers.js.map +1 -0
  1018. package/dist/experimental/projections/transverse-mercator.d.ts +6 -0
  1019. package/dist/experimental/projections/transverse-mercator.d.ts.map +1 -0
  1020. package/dist/experimental/projections/transverse-mercator.js +39 -0
  1021. package/dist/experimental/projections/transverse-mercator.js.map +1 -0
  1022. package/dist/experimental/projections/utm.d.ts +3 -0
  1023. package/dist/experimental/projections/utm.d.ts.map +1 -0
  1024. package/dist/experimental/projections/utm.js +31 -0
  1025. package/dist/experimental/projections/utm.js.map +1 -0
  1026. package/dist/experimental/projections/vandg.d.ts +3 -0
  1027. package/dist/experimental/projections/vandg.d.ts.map +1 -0
  1028. package/dist/experimental/projections/vandg.js +13 -0
  1029. package/dist/experimental/projections/vandg.js.map +1 -0
  1030. package/dist/experimental/scalar-output.d.ts +8 -0
  1031. package/dist/experimental/scalar-output.d.ts.map +1 -0
  1032. package/dist/experimental/scalar-output.js +46 -0
  1033. package/dist/experimental/scalar-output.js.map +1 -0
  1034. package/dist/experimental/types.d.ts +54 -0
  1035. package/dist/experimental/types.d.ts.map +1 -0
  1036. package/dist/experimental/types.js +5 -0
  1037. package/dist/experimental/types.js.map +1 -0
  1038. package/dist/experimental/typescript-projection.d.ts +67 -0
  1039. package/dist/experimental/typescript-projection.d.ts.map +1 -0
  1040. package/dist/experimental/typescript-projection.js +429 -0
  1041. package/dist/experimental/typescript-projection.js.map +1 -0
  1042. package/dist/experimental/vertical-datum.d.ts +4 -0
  1043. package/dist/experimental/vertical-datum.d.ts.map +1 -0
  1044. package/dist/experimental/vertical-datum.js +43 -0
  1045. package/dist/experimental/vertical-datum.js.map +1 -0
  1046. package/dist/grids/velocity.cjs +92 -0
  1047. package/dist/grids/velocity.cjs.map +6 -0
  1048. package/dist/grids/velocity.d.ts +3 -0
  1049. package/dist/grids/velocity.d.ts.map +1 -0
  1050. package/dist/grids/velocity.js +5 -0
  1051. package/dist/grids/velocity.js.map +1 -0
  1052. package/dist/index.cjs +10158 -0
  1053. package/dist/index.cjs.map +6 -0
  1054. package/dist/index.d.ts +4 -0
  1055. package/dist/index.d.ts.map +1 -0
  1056. package/dist/index.js +6 -0
  1057. package/dist/index.js.map +1 -0
  1058. package/dist/lib/projection.d.ts +24 -0
  1059. package/dist/lib/projection.d.ts.map +1 -0
  1060. package/dist/lib/projection.js +107 -0
  1061. package/dist/lib/projection.js.map +1 -0
  1062. package/dist/operations.cjs +255 -0
  1063. package/dist/operations.cjs.map +6 -0
  1064. package/dist/operations.d.ts +67 -0
  1065. package/dist/operations.d.ts.map +1 -0
  1066. package/dist/operations.js +272 -0
  1067. package/dist/operations.js.map +1 -0
  1068. package/dist/pipeline.cjs +3347 -0
  1069. package/dist/pipeline.cjs.map +6 -0
  1070. package/dist/pipeline.d.ts +2 -0
  1071. package/dist/pipeline.d.ts.map +1 -0
  1072. package/dist/pipeline.js +5 -0
  1073. package/dist/pipeline.js.map +1 -0
  1074. package/package.json +970 -3
  1075. package/src/deformation.ts +5 -0
  1076. package/src/experimental/catalogue-kernel.ts +54 -0
  1077. package/src/experimental/common/adjust_lat.ts +11 -0
  1078. package/src/experimental/common/adjust_lon.ts +14 -0
  1079. package/src/experimental/common/asinhy.ts +14 -0
  1080. package/src/experimental/common/asinz.ts +11 -0
  1081. package/src/experimental/common/authlat.ts +9 -0
  1082. package/src/experimental/common/authset.ts +25 -0
  1083. package/src/experimental/common/clens.ts +20 -0
  1084. package/src/experimental/common/clens_cmplx.ts +43 -0
  1085. package/src/experimental/common/constants.ts +15 -0
  1086. package/src/experimental/common/cosh.ts +10 -0
  1087. package/src/experimental/common/e0fn.ts +8 -0
  1088. package/src/experimental/common/e1fn.ts +8 -0
  1089. package/src/experimental/common/e2fn.ts +8 -0
  1090. package/src/experimental/common/e3fn.ts +8 -0
  1091. package/src/experimental/common/fL.ts +10 -0
  1092. package/src/experimental/common/gN.ts +9 -0
  1093. package/src/experimental/common/gatg.ts +20 -0
  1094. package/src/experimental/common/hypot.ts +13 -0
  1095. package/src/experimental/common/imlfn.ts +23 -0
  1096. package/src/experimental/common/invlatiso.ts +20 -0
  1097. package/src/experimental/common/iqsfnz.ts +45 -0
  1098. package/src/experimental/common/latiso.ts +21 -0
  1099. package/src/experimental/common/log1py.ts +11 -0
  1100. package/src/experimental/common/mlfn.ts +8 -0
  1101. package/src/experimental/common/msfnz.ts +9 -0
  1102. package/src/experimental/common/phi2z.ts +22 -0
  1103. package/src/experimental/common/pj_enfn.ts +29 -0
  1104. package/src/experimental/common/pj_inv_mlfn.ts +28 -0
  1105. package/src/experimental/common/pj_mlfn.ts +10 -0
  1106. package/src/experimental/common/qsfnz.ts +17 -0
  1107. package/src/experimental/common/sign.ts +8 -0
  1108. package/src/experimental/common/sinh.ts +10 -0
  1109. package/src/experimental/common/srat.ts +8 -0
  1110. package/src/experimental/common/tsfnz.ts +13 -0
  1111. package/src/experimental/common/vincenty.ts +180 -0
  1112. package/src/experimental/core.ts +48 -0
  1113. package/src/experimental/crs/datum-table.ts +1370 -0
  1114. package/src/experimental/crs/ellipsoid-table.ts +230 -0
  1115. package/src/experimental/crs/normalize.ts +303 -0
  1116. package/src/experimental/crs/primemeridian-table.ts +22 -0
  1117. package/src/experimental/crs/projjson.ts +12 -0
  1118. package/src/experimental/crs/spatial-reference.ts +115 -0
  1119. package/src/experimental/crs/structured.ts +521 -0
  1120. package/src/experimental/crs/types.ts +80 -0
  1121. package/src/experimental/crs/units-table.ts +27 -0
  1122. package/src/experimental/crs/wkt.ts +192 -0
  1123. package/src/experimental/datum.ts +185 -0
  1124. package/src/experimental/deformation.ts +134 -0
  1125. package/src/experimental/entries/projections/aea.ts +5 -0
  1126. package/src/experimental/entries/projections/aeqd.ts +5 -0
  1127. package/src/experimental/entries/projections/bonne.ts +5 -0
  1128. package/src/experimental/entries/projections/cass.ts +5 -0
  1129. package/src/experimental/entries/projections/cea.ts +5 -0
  1130. package/src/experimental/entries/projections/eck6.ts +5 -0
  1131. package/src/experimental/entries/projections/eqc.ts +5 -0
  1132. package/src/experimental/entries/projections/eqdc.ts +5 -0
  1133. package/src/experimental/entries/projections/eqearth.ts +5 -0
  1134. package/src/experimental/entries/projections/equi.ts +5 -0
  1135. package/src/experimental/entries/projections/etmerc.ts +5 -0
  1136. package/src/experimental/entries/projections/geocent.ts +5 -0
  1137. package/src/experimental/entries/projections/geos.ts +5 -0
  1138. package/src/experimental/entries/projections/gnom.ts +5 -0
  1139. package/src/experimental/entries/projections/gstmerc.ts +5 -0
  1140. package/src/experimental/entries/projections/krovak.ts +5 -0
  1141. package/src/experimental/entries/projections/laea.ts +5 -0
  1142. package/src/experimental/entries/projections/lcc.ts +5 -0
  1143. package/src/experimental/entries/projections/merc.ts +5 -0
  1144. package/src/experimental/entries/projections/mill.ts +5 -0
  1145. package/src/experimental/entries/projections/moll.ts +5 -0
  1146. package/src/experimental/entries/projections/nzmg.ts +5 -0
  1147. package/src/experimental/entries/projections/ob_tran.ts +5 -0
  1148. package/src/experimental/entries/projections/omerc.ts +5 -0
  1149. package/src/experimental/entries/projections/ortho.ts +5 -0
  1150. package/src/experimental/entries/projections/poly.ts +5 -0
  1151. package/src/experimental/entries/projections/qsc.ts +5 -0
  1152. package/src/experimental/entries/projections/robin.ts +5 -0
  1153. package/src/experimental/entries/projections/sinu.ts +5 -0
  1154. package/src/experimental/entries/projections/somerc.ts +5 -0
  1155. package/src/experimental/entries/projections/stere.ts +5 -0
  1156. package/src/experimental/entries/projections/sterea.ts +5 -0
  1157. package/src/experimental/entries/projections/tmerc.ts +5 -0
  1158. package/src/experimental/entries/projections/tpers.ts +5 -0
  1159. package/src/experimental/entries/projections/utm.ts +5 -0
  1160. package/src/experimental/entries/projections/vandg.ts +5 -0
  1161. package/src/experimental/exact-helmert.ts +58 -0
  1162. package/src/experimental/flat-projection.ts +70 -0
  1163. package/src/experimental/grids/geotiff.ts +88 -0
  1164. package/src/experimental/grids/grid.ts +141 -0
  1165. package/src/experimental/grids/gtx.ts +31 -0
  1166. package/src/experimental/grids/ntv2.ts +71 -0
  1167. package/src/experimental/grids/scalar-geotiff.ts +231 -0
  1168. package/src/experimental/grids/types.ts +35 -0
  1169. package/src/experimental/grids/velocity-geotiff.ts +82 -0
  1170. package/src/experimental/grids/velocity.ts +58 -0
  1171. package/src/experimental/grids/vertical-geotiff.ts +28 -0
  1172. package/src/experimental/grids/vertical.ts +99 -0
  1173. package/src/experimental/helmert-flat.ts +76 -0
  1174. package/src/experimental/index.ts +59 -0
  1175. package/src/experimental/kernel.ts +139 -0
  1176. package/src/experimental/kernels/aea.ts +170 -0
  1177. package/src/experimental/kernels/aeqd.ts +182 -0
  1178. package/src/experimental/kernels/bonne.ts +141 -0
  1179. package/src/experimental/kernels/cass.ts +140 -0
  1180. package/src/experimental/kernels/cea.ts +71 -0
  1181. package/src/experimental/kernels/eck6.ts +36 -0
  1182. package/src/experimental/kernels/eqdc.ts +137 -0
  1183. package/src/experimental/kernels/eqearth.ts +136 -0
  1184. package/src/experimental/kernels/equi.ts +53 -0
  1185. package/src/experimental/kernels/etmerc.ts +190 -0
  1186. package/src/experimental/kernels/gauss.ts +79 -0
  1187. package/src/experimental/kernels/geos.ts +183 -0
  1188. package/src/experimental/kernels/gnom.ts +113 -0
  1189. package/src/experimental/kernels/gstmerc.ts +74 -0
  1190. package/src/experimental/kernels/krovak.ts +166 -0
  1191. package/src/experimental/kernels/laea.ts +297 -0
  1192. package/src/experimental/kernels/lcc.ts +147 -0
  1193. package/src/experimental/kernels/mill.ts +60 -0
  1194. package/src/experimental/kernels/moll.ts +105 -0
  1195. package/src/experimental/kernels/nzmg.ts +249 -0
  1196. package/src/experimental/kernels/omerc.ts +343 -0
  1197. package/src/experimental/kernels/ortho.ts +106 -0
  1198. package/src/experimental/kernels/poly.ts +156 -0
  1199. package/src/experimental/kernels/qsc.ts +369 -0
  1200. package/src/experimental/kernels/robin.ts +189 -0
  1201. package/src/experimental/kernels/sinu.ts +116 -0
  1202. package/src/experimental/kernels/somerc.ts +112 -0
  1203. package/src/experimental/kernels/stere.ts +221 -0
  1204. package/src/experimental/kernels/sterea.ts +80 -0
  1205. package/src/experimental/kernels/tmerc.ts +227 -0
  1206. package/src/experimental/kernels/tpers.ts +187 -0
  1207. package/src/experimental/kernels/vandg.ts +147 -0
  1208. package/src/experimental/kinematic-helmert-flat.ts +85 -0
  1209. package/src/experimental/kinematic-helmert.ts +132 -0
  1210. package/src/experimental/lazy-projection.ts +146 -0
  1211. package/src/experimental/lazy-projections/aea.ts +10 -0
  1212. package/src/experimental/lazy-projections/aeqd.ts +11 -0
  1213. package/src/experimental/lazy-projections/bonne.ts +10 -0
  1214. package/src/experimental/lazy-projections/cass.ts +10 -0
  1215. package/src/experimental/lazy-projections/cea.ts +11 -0
  1216. package/src/experimental/lazy-projections/eck6.ts +10 -0
  1217. package/src/experimental/lazy-projections/eqc.ts +14 -0
  1218. package/src/experimental/lazy-projections/eqdc.ts +11 -0
  1219. package/src/experimental/lazy-projections/eqearth.ts +10 -0
  1220. package/src/experimental/lazy-projections/equi.ts +10 -0
  1221. package/src/experimental/lazy-projections/etmerc.ts +11 -0
  1222. package/src/experimental/lazy-projections/geocent.ts +10 -0
  1223. package/src/experimental/lazy-projections/geos.ts +10 -0
  1224. package/src/experimental/lazy-projections/gnom.ts +10 -0
  1225. package/src/experimental/lazy-projections/gstmerc.ts +12 -0
  1226. package/src/experimental/lazy-projections/index.ts +42 -0
  1227. package/src/experimental/lazy-projections/krovak.ts +18 -0
  1228. package/src/experimental/lazy-projections/laea.ts +11 -0
  1229. package/src/experimental/lazy-projections/lcc.ts +21 -0
  1230. package/src/experimental/lazy-projections/merc.ts +19 -0
  1231. package/src/experimental/lazy-projections/mill.ts +11 -0
  1232. package/src/experimental/lazy-projections/moll.ts +10 -0
  1233. package/src/experimental/lazy-projections/nzmg.ts +11 -0
  1234. package/src/experimental/lazy-projections/ob_tran.ts +25 -0
  1235. package/src/experimental/lazy-projections/omerc.ts +22 -0
  1236. package/src/experimental/lazy-projections/ortho.ts +10 -0
  1237. package/src/experimental/lazy-projections/poly.ts +10 -0
  1238. package/src/experimental/lazy-projections/qsc.ts +14 -0
  1239. package/src/experimental/lazy-projections/robin.ts +10 -0
  1240. package/src/experimental/lazy-projections/sinu.ts +10 -0
  1241. package/src/experimental/lazy-projections/somerc.ts +11 -0
  1242. package/src/experimental/lazy-projections/stere.ts +18 -0
  1243. package/src/experimental/lazy-projections/sterea.ts +19 -0
  1244. package/src/experimental/lazy-projections/tmerc.ts +21 -0
  1245. package/src/experimental/lazy-projections/tpers.ts +11 -0
  1246. package/src/experimental/lazy-projections/utm.ts +11 -0
  1247. package/src/experimental/lazy-projections/vandg.ts +10 -0
  1248. package/src/experimental/mutable-projection.ts +63 -0
  1249. package/src/experimental/numeric-flat.ts +73 -0
  1250. package/src/experimental/parameters.ts +35 -0
  1251. package/src/experimental/projection-descriptor.ts +79 -0
  1252. package/src/experimental/projection-pipeline.ts +1053 -0
  1253. package/src/experimental/projection-scratch.ts +19 -0
  1254. package/src/experimental/projections/aea.ts +19 -0
  1255. package/src/experimental/projections/aeqd.ts +18 -0
  1256. package/src/experimental/projections/bonne.ts +23 -0
  1257. package/src/experimental/projections/cass.ts +19 -0
  1258. package/src/experimental/projections/cea.ts +20 -0
  1259. package/src/experimental/projections/eck6.ts +19 -0
  1260. package/src/experimental/projections/eqdc.ts +19 -0
  1261. package/src/experimental/projections/eqearth.ts +19 -0
  1262. package/src/experimental/projections/equi.ts +20 -0
  1263. package/src/experimental/projections/equidistant-cylindrical.ts +35 -0
  1264. package/src/experimental/projections/geocentric.ts +34 -0
  1265. package/src/experimental/projections/geos.ts +31 -0
  1266. package/src/experimental/projections/gnom.ts +19 -0
  1267. package/src/experimental/projections/gstmerc.ts +19 -0
  1268. package/src/experimental/projections/krovak.ts +41 -0
  1269. package/src/experimental/projections/laea.ts +18 -0
  1270. package/src/experimental/projections/lcc.ts +40 -0
  1271. package/src/experimental/projections/mercator.ts +79 -0
  1272. package/src/experimental/projections/mill.ts +19 -0
  1273. package/src/experimental/projections/moll.ts +19 -0
  1274. package/src/experimental/projections/nzmg.ts +27 -0
  1275. package/src/experimental/projections/ob-tran.ts +161 -0
  1276. package/src/experimental/projections/omerc.ts +66 -0
  1277. package/src/experimental/projections/ortho.ts +26 -0
  1278. package/src/experimental/projections/poly.ts +19 -0
  1279. package/src/experimental/projections/qsc.ts +19 -0
  1280. package/src/experimental/projections/robin.ts +19 -0
  1281. package/src/experimental/projections/sinu.ts +19 -0
  1282. package/src/experimental/projections/somerc.ts +19 -0
  1283. package/src/experimental/projections/stere.ts +29 -0
  1284. package/src/experimental/projections/sterea.ts +30 -0
  1285. package/src/experimental/projections/tpers.ts +31 -0
  1286. package/src/experimental/projections/transverse-mercator.ts +68 -0
  1287. package/src/experimental/projections/utm.ts +33 -0
  1288. package/src/experimental/projections/vandg.ts +19 -0
  1289. package/src/experimental/scalar-output.ts +74 -0
  1290. package/src/experimental/types.ts +61 -0
  1291. package/src/experimental/typescript-projection.ts +545 -0
  1292. package/src/experimental/vertical-datum.ts +39 -0
  1293. package/src/grids/velocity.ts +5 -0
  1294. package/src/index.ts +7 -0
  1295. package/src/lib/projection.ts +167 -0
  1296. package/src/operations.ts +358 -0
  1297. package/src/pipeline.ts +4 -0
@@ -0,0 +1,1053 @@
1
+ // math.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // SPDX-FileCopyrightText: Copyright (c) vis.gl contributors
4
+ // SPDX-FileComment: Original typed orchestration inspired by PROJ's explicit pipeline model. Projection, geocentric and static Helmert equations reuse the proj4js adaptations in this package; see datum.ts and ../../PROJ4-LICENSE.md. The separate exact Helmert matrix is adapted from PROJ; see exact-helmert.ts and ../../PROJ-LICENSE.txt.
5
+ import type {DeformationModel} from './deformation';
6
+ import {CORE_PARAMETERS, normalizeCRS} from './crs/normalize';
7
+ import {unsupportedStage} from './crs/types';
8
+ import {
9
+ applyDatumGrids,
10
+ createHelmert,
11
+ geocentricToGeodeticInPlace,
12
+ geodeticToGeocentricInPlace
13
+ } from './datum';
14
+ import {projectionOperation} from './mutable-projection';
15
+ import {ProjectionScratch} from './projection-scratch';
16
+ import {createNumericFlat} from './numeric-flat';
17
+ import type {NumericStep, NumericFlatOperation} from './numeric-flat';
18
+ import {validateScalarOutput, writeScalarOutput} from './scalar-output';
19
+ import type {ProjectionCoordinate, ProjectionOutput} from './scalar-output';
20
+ export type {ProjectionCoordinate, ProjectionOutput} from './scalar-output';
21
+ import {createHelmertFlat} from './helmert-flat';
22
+ import {createExactHelmert} from './exact-helmert';
23
+ import {createKinematicHelmert} from './kinematic-helmert';
24
+ import {getLoadedProjection, preloadProjection} from './projection-descriptor';
25
+ import {compileVerticalGrid} from './vertical-datum';
26
+ import type {ProjectionDescriptor} from './projection-descriptor';
27
+ import type {ProjectionParameters, ProjectionPlugin, ProjectionPoint} from './types';
28
+ import type {ProjectionArray} from './typescript-projection';
29
+ import type {DatumGridCollection, VerticalGridCollection} from './grids/types';
30
+
31
+ /** Decimal years; a flat call accepts one epoch or one per coordinate record. */
32
+ export type PipelineEpochs = number | Float32Array | Float64Array;
33
+ export type PipelineHelmertRates = {
34
+ /** Metres per decimal year. */
35
+ readonly translation?: readonly [number, number, number];
36
+ /** Arcseconds per decimal year, using the step's rotation convention. */
37
+ readonly rotation?: readonly [number, number, number];
38
+ /** Parts per million per decimal year. */
39
+ readonly scalePPM?: number;
40
+ };
41
+ export type PipelineUnit = 'deg' | 'rad' | 'm' | 'ft' | 'us-ft';
42
+ export type PipelineCoordinateSystem = {
43
+ readonly space: 'geographic' | 'projected' | 'geocentric';
44
+ /** Units in stored X/Y/Z order. Geographic steps require longitude/latitude order. */
45
+ readonly units: readonly [PipelineUnit, PipelineUnit, PipelineUnit];
46
+ };
47
+ export type PipelineEllipsoid = Readonly<
48
+ Partial<Record<'ellps' | 'a' | 'b' | 'rf' | 'f' | 'R', string>>
49
+ >;
50
+ export type PipelineProjectionOutput =
51
+ | {readonly space: 'geographic'; readonly unit: 'deg' | 'rad'}
52
+ | {readonly space: 'projected'; readonly unit: 'm'};
53
+ type Direction = {
54
+ readonly inverse?: boolean;
55
+ /** Omit this step when calling project/projectFlat. */
56
+ readonly omitForward?: boolean;
57
+ /** Omit this step when calling unproject/unprojectFlat. */
58
+ readonly omitInverse?: boolean;
59
+ };
60
+ export type PipelineStep = Direction &
61
+ (
62
+ | {
63
+ readonly type: 'unitconvert';
64
+ readonly xy?: {readonly from: PipelineUnit; readonly to: PipelineUnit};
65
+ readonly z?: {readonly from: PipelineUnit; readonly to: PipelineUnit};
66
+ }
67
+ | {
68
+ readonly type: 'axisswap';
69
+ readonly order: readonly [number, number] | readonly [number, number, number];
70
+ }
71
+ | {
72
+ readonly type: 'projection';
73
+ readonly name: string;
74
+ readonly parameters?: ProjectionParameters;
75
+ /** Required for ob_tran; geographic helper output can be degrees or radians. */
76
+ readonly output?: PipelineProjectionOutput;
77
+ }
78
+ | {readonly type: 'cart'; readonly ellipsoid?: PipelineEllipsoid}
79
+ | {
80
+ readonly type: 'helmert';
81
+ readonly translation: readonly [number, number, number];
82
+ readonly rotation?: readonly [number, number, number];
83
+ readonly scalePPM?: number;
84
+ readonly convention?: 'position_vector' | 'coordinate_frame';
85
+ /** Use a full rotation matrix and its mathematical inverse. Default false. */
86
+ readonly exact?: boolean;
87
+ /** Decimal year at which the base parameters apply. Required with rates. */
88
+ readonly referenceEpoch?: number;
89
+ readonly rates?: PipelineHelmertRates;
90
+ }
91
+ | {
92
+ readonly type: 'deformation';
93
+ readonly model: DeformationModel;
94
+ /** 'coordinate' uses the separate scalar/batch/per-record epoch argument. */
95
+ readonly sourceEpoch: number | 'coordinate';
96
+ readonly targetEpoch: number;
97
+ }
98
+ | {readonly type: 'push' | 'pop'; readonly components: readonly (1 | 2 | 3)[]}
99
+ | {readonly type: 'hgridshift'; readonly grids: string}
100
+ | {readonly type: 'vgridshift'; readonly grids: string; readonly multiplier?: number}
101
+ );
102
+ type Registration = ProjectionPlugin | ProjectionDescriptor;
103
+ type Result<P, T> = Extract<P, ProjectionDescriptor> extends never ? T : Promise<T>;
104
+ export type ProjectionPipelineOptions<P extends Registration = ProjectionPlugin> = {
105
+ readonly input: PipelineCoordinateSystem;
106
+ readonly steps: readonly PipelineStep[];
107
+ readonly projections?: readonly P[];
108
+ readonly datumGrids?: DatumGridCollection;
109
+ readonly verticalGrids?: VerticalGridCollection;
110
+ };
111
+ type Operation = (point: ProjectionPoint, stack: Float64Array, epoch?: number) => void;
112
+ type StackEntry = {unit: PipelineUnit; space: PipelineCoordinateSystem['space']; slot: number};
113
+ type State = {
114
+ space: PipelineCoordinateSystem['space'];
115
+ units: [PipelineUnit, PipelineUnit, PipelineUnit];
116
+ stacks: StackEntry[][];
117
+ };
118
+ const EMPTY_STACK = new Float64Array(0);
119
+ // Typed-array buffers are ordinary or shared. The intrinsic getter checks the
120
+ // backing-store brand across realms and cannot be fooled by Symbol.toStringTag.
121
+ const ordinaryByteLength = Object.getOwnPropertyDescriptor(ArrayBuffer.prototype, 'byteLength').get;
122
+ function sharedBuffer(buffer: ArrayBufferLike): boolean {
123
+ try {
124
+ ordinaryByteLength.call(buffer);
125
+ return false;
126
+ } catch {
127
+ return true;
128
+ }
129
+ }
130
+
131
+ type Pair = {
132
+ forward: Operation;
133
+ inverse: Operation;
134
+ forwardNumeric?: NumericStep;
135
+ inverseNumeric?: NumericStep;
136
+ forwardFlat?: NumericFlatOperation;
137
+ inverseFlat?: NumericFlatOperation;
138
+ };
139
+ function compileFlat(pairs: readonly Pair[]): NumericFlatOperation | undefined {
140
+ if (pairs.length === 1 && pairs[0].forwardFlat) return pairs[0].forwardFlat;
141
+ // Pure axis measurements were inconsistent; retain general dispatch for that subset.
142
+ return pairs.every(pair => pair.forwardNumeric) &&
143
+ pairs.some(pair => pair.forwardNumeric[0] !== 2)
144
+ ? createNumericFlat(pairs.map(pair => pair.forwardNumeric))
145
+ : undefined;
146
+ }
147
+ type Factory = () => Pair;
148
+ const factors: Record<PipelineUnit, number> = {
149
+ deg: Math.PI / 180,
150
+ rad: 1,
151
+ m: 1,
152
+ ft: 0.3048,
153
+ 'us-ft': 1200 / 3937
154
+ };
155
+ const geometryKeys = ['ellps', 'a', 'b', 'rf', 'f', 'R'];
156
+ const angular = (unit: PipelineUnit): boolean => unit === 'deg' || unit === 'rad';
157
+ const own = (value: object, name: string): boolean =>
158
+ Object.prototype.hasOwnProperty.call(value, name);
159
+ function keys(value: object, allowed: readonly string[]): void {
160
+ if (!value || typeof value !== 'object' || Array.isArray(value))
161
+ throw new Error('Expected operation object');
162
+ for (const name of Object.keys(value))
163
+ if (!allowed.includes(name)) unsupportedStage('Unsupported pipeline parameter: ' + name);
164
+ }
165
+ function definition(name: string, parameters: ProjectionParameters = {}): string {
166
+ if (!/^[a-z][a-z0-9_]*$/i.test(name)) throw new Error('Invalid projection name');
167
+ return (
168
+ '+proj=' +
169
+ name +
170
+ Object.entries(parameters)
171
+ .map(([key, value]) => {
172
+ if (
173
+ !/^[a-z][a-z0-9_]*$/i.test(key) ||
174
+ (value !== undefined &&
175
+ (typeof value !== 'string' ||
176
+ !value ||
177
+ /[\s=]/.test(value) ||
178
+ /\+/.test(value.slice(1).replace(/[eE]\+/g, ''))))
179
+ )
180
+ throw new Error('Invalid pipeline projection parameter: ' + key);
181
+ return ' +' + key + (value === undefined ? '' : '=' + value);
182
+ })
183
+ .join('')
184
+ );
185
+ }
186
+ function finite(point: ProjectionPoint): void {
187
+ if (!Number.isFinite(point.x) || !Number.isFinite(point.y) || !Number.isFinite(point.z))
188
+ throw new Error('Pipeline coordinate must be finite');
189
+ }
190
+ function triple(values: readonly number[]): void {
191
+ if (!Array.isArray(values) || values.length !== 3 || !values.every(Number.isFinite))
192
+ throw new Error('Expected three finite Helmert parameters');
193
+ }
194
+
195
+ /** Explicit forward/reverse operations; no CRS/epoch inference or string pipeline parser.
196
+ * General execution reuses guarded scratch; specialized flat stages use numeric
197
+ * locals and never allocate coordinate arrays inside the flat loop. M and additional ordinates are preserved, never interpreted.
198
+ */
199
+ export class ProjectionPipeline<P extends Registration = ProjectionPlugin> {
200
+ readonly input: PipelineCoordinateSystem;
201
+ readonly output: PipelineCoordinateSystem;
202
+ private readonly forwardFactories: Factory[] = [];
203
+ private readonly inverseFactories: Factory[] = [];
204
+ private stackSize = 0;
205
+ private readonly coordinateScratch = new ProjectionScratch();
206
+ private coordinateStack?: Float64Array;
207
+ private readonly required: Registration[] = [];
208
+ private readonly deferred: boolean;
209
+ private requiresZ = false;
210
+ private requiresEpoch = false;
211
+ private compiled?: {
212
+ forward: Operation[];
213
+ inverse: Operation[];
214
+ forwardFlat?: NumericFlatOperation;
215
+ inverseFlat?: NumericFlatOperation;
216
+ };
217
+ private pending?: Promise<this>;
218
+
219
+ constructor(options: ProjectionPipelineOptions<P>) {
220
+ keys(options, ['input', 'steps', 'projections', 'datumGrids', 'verticalGrids']);
221
+ keys(options.input, ['space', 'units']);
222
+ const {space, units} = options.input;
223
+ if (
224
+ !['geographic', 'projected', 'geocentric'].includes(space) ||
225
+ !Array.isArray(units) ||
226
+ units.length !== 3 ||
227
+ units.some(unit => !own(factors, unit)) ||
228
+ angular(units[2]) ||
229
+ (space === 'geographic'
230
+ ? !angular(units[0]) || !angular(units[1])
231
+ : angular(units[0]) || angular(units[1]))
232
+ )
233
+ throw new Error('Invalid pipeline input space/units');
234
+ if (!Array.isArray(options.steps) || options.steps.length === 0)
235
+ throw new Error('Pipeline requires at least one step');
236
+ this.requiresZ = space === 'geocentric';
237
+ this.input = Object.freeze({
238
+ space,
239
+ units: Object.freeze([...units]) as PipelineCoordinateSystem['units']
240
+ });
241
+ const state: State = {space, units: [...units] as State['units'], stacks: [[], [], []]};
242
+ const projections = [...(options.projections || [])];
243
+ this.deferred = projections.some(projection => !('create' in projection));
244
+ // Each direction has its own validated metadata and stack layout. Share equation
245
+ // implementations by step so custom plugin factories still run once per step.
246
+ const caches = options.steps.map(() => ({}) as {pair?: Pair});
247
+ for (const [index, step] of options.steps.entries()) {
248
+ for (const name of ['inverse', 'omitForward', 'omitInverse'] as const)
249
+ if (step?.[name] !== undefined && typeof step[name] !== 'boolean')
250
+ throw new Error('Invalid pipeline ' + name + ' flag');
251
+ if (step?.omitForward && step.omitInverse)
252
+ throw new Error('A pipeline step cannot omit both directions');
253
+ if (!step?.omitForward)
254
+ this.forwardFactories.push(
255
+ this.prepare(step, state, {...options, projections}, caches[index])
256
+ );
257
+ }
258
+ this.balanced(state);
259
+ this.output = Object.freeze({
260
+ space: state.space,
261
+ units: Object.freeze([...state.units]) as PipelineCoordinateSystem['units']
262
+ });
263
+ const reverse: State = {space: state.space, units: [...state.units], stacks: [[], [], []]};
264
+ for (let index = options.steps.length - 1; index >= 0; index--) {
265
+ const step = options.steps[index];
266
+ if (!step.omitInverse)
267
+ this.inverseFactories.push(
268
+ this.prepare(
269
+ {...step, inverse: !step.inverse},
270
+ reverse,
271
+ {...options, projections},
272
+ caches[index]
273
+ )
274
+ );
275
+ }
276
+ this.balanced(reverse);
277
+ if (reverse.space !== space || reverse.units.some((unit, index) => unit !== units[index]))
278
+ throw new Error('Inverse pipeline output does not match declared input space/units');
279
+ if (this.required.every(projection => getLoadedProjection(projection))) this.compile();
280
+ this.project = this.project.bind(this);
281
+ this.unproject = this.unproject.bind(this);
282
+ this.projectSync = this.projectSync.bind(this);
283
+ this.unprojectSync = this.unprojectSync.bind(this);
284
+ this.projectTo = this.projectTo.bind(this);
285
+ this.unprojectTo = this.unprojectTo.bind(this);
286
+ this.projectToSync = this.projectToSync.bind(this);
287
+ this.unprojectToSync = this.unprojectToSync.bind(this);
288
+ this.projectFlat = this.projectFlat.bind(this);
289
+ this.unprojectFlat = this.unprojectFlat.bind(this);
290
+ this.projectFlatSync = this.projectFlatSync.bind(this);
291
+ this.unprojectFlatSync = this.unprojectFlatSync.bind(this);
292
+ }
293
+
294
+ /** Load only implementations named by pipeline steps; failures can be retried. */
295
+ preload(): Promise<this> {
296
+ if (this.compiled) return Promise.resolve(this);
297
+ this.pending ||= Promise.all(this.required.map(preloadProjection))
298
+ .then(() => {
299
+ this.compile();
300
+ return this;
301
+ })
302
+ .catch(error => {
303
+ this.pending = undefined;
304
+ throw error;
305
+ });
306
+ return this.pending;
307
+ }
308
+ project(coordinate: readonly number[], epoch?: number): Result<P, number[]> {
309
+ return (
310
+ this.deferred
311
+ ? this.preload().then(() => this.projectSync(coordinate, epoch))
312
+ : this.projectSync(coordinate, epoch)
313
+ ) as Result<P, number[]>;
314
+ }
315
+ unproject(coordinate: readonly number[], epoch?: number): Result<P, number[]> {
316
+ return (
317
+ this.deferred
318
+ ? this.preload().then(() => this.unprojectSync(coordinate, epoch))
319
+ : this.unprojectSync(coordinate, epoch)
320
+ ) as Result<P, number[]>;
321
+ }
322
+ /** Reuse a scalar output; the epoch remains separate from all coordinate ordinates. */
323
+ projectTo<T extends ProjectionOutput>(
324
+ coordinate: ProjectionCoordinate,
325
+ output: T,
326
+ epoch?: number
327
+ ): Result<P, T> {
328
+ return (
329
+ this.deferred
330
+ ? this.scalarToLoaded(coordinate, output, false, epoch)
331
+ : this.projectToSync(coordinate, output, epoch)
332
+ ) as Result<P, T>;
333
+ }
334
+ unprojectTo<T extends ProjectionOutput>(
335
+ coordinate: ProjectionCoordinate,
336
+ output: T,
337
+ epoch?: number
338
+ ): Result<P, T> {
339
+ return (
340
+ this.deferred
341
+ ? this.scalarToLoaded(coordinate, output, true, epoch)
342
+ : this.unprojectToSync(coordinate, output, epoch)
343
+ ) as Result<P, T>;
344
+ }
345
+ projectToSync<T extends ProjectionOutput>(
346
+ coordinate: ProjectionCoordinate,
347
+ output: T,
348
+ epoch?: number
349
+ ): T {
350
+ validateScalarOutput(coordinate, output, coordinate.length);
351
+ return this.scalar(coordinate, false, epoch, output);
352
+ }
353
+ unprojectToSync<T extends ProjectionOutput>(
354
+ coordinate: ProjectionCoordinate,
355
+ output: T,
356
+ epoch?: number
357
+ ): T {
358
+ validateScalarOutput(coordinate, output, coordinate.length);
359
+ return this.scalar(coordinate, true, epoch, output);
360
+ }
361
+ private scalarToLoaded<T extends ProjectionOutput>(
362
+ coordinate: ProjectionCoordinate,
363
+ output: T,
364
+ inverse: boolean,
365
+ epoch?: number
366
+ ): Promise<T> {
367
+ validateScalarOutput(coordinate, output, coordinate.length);
368
+ const input = coordinate.slice();
369
+ return this.preload().then(() =>
370
+ inverse
371
+ ? this.unprojectToSync(input, output, epoch)
372
+ : this.projectToSync(input, output, epoch)
373
+ );
374
+ }
375
+ projectFlat<T extends ProjectionArray>(
376
+ coordinates: T,
377
+ dimension = 2,
378
+ epochs?: PipelineEpochs
379
+ ): Result<P, T> {
380
+ return (
381
+ this.deferred
382
+ ? this.preload().then(() => this.projectFlatSync(coordinates, dimension, epochs))
383
+ : this.projectFlatSync(coordinates, dimension, epochs)
384
+ ) as Result<P, T>;
385
+ }
386
+ unprojectFlat<T extends ProjectionArray>(
387
+ coordinates: T,
388
+ dimension = 2,
389
+ epochs?: PipelineEpochs
390
+ ): Result<P, T> {
391
+ return (
392
+ this.deferred
393
+ ? this.preload().then(() => this.unprojectFlatSync(coordinates, dimension, epochs))
394
+ : this.unprojectFlatSync(coordinates, dimension, epochs)
395
+ ) as Result<P, T>;
396
+ }
397
+ projectSync(coordinate: readonly number[], epoch?: number): number[] {
398
+ return this.scalar(coordinate, false, epoch);
399
+ }
400
+ unprojectSync(coordinate: readonly number[], epoch?: number): number[] {
401
+ return this.scalar(coordinate, true, epoch);
402
+ }
403
+ projectFlatSync<T extends ProjectionArray>(
404
+ coordinates: T,
405
+ dimension = 2,
406
+ epochs?: PipelineEpochs
407
+ ): T {
408
+ return this.flat(coordinates, dimension, false, epochs);
409
+ }
410
+ unprojectFlatSync<T extends ProjectionArray>(
411
+ coordinates: T,
412
+ dimension = 2,
413
+ epochs?: PipelineEpochs
414
+ ): T {
415
+ return this.flat(coordinates, dimension, true, epochs);
416
+ }
417
+
418
+ private compile(): void {
419
+ if (this.compiled) return;
420
+ for (const registration of this.required)
421
+ if (!getLoadedProjection(registration))
422
+ unsupportedStage('Pipeline projection requires preload(): ' + registration.name);
423
+ const forward = this.forwardFactories.map(factory => factory()),
424
+ inverse = this.inverseFactories.map(factory => factory());
425
+ this.compiled = {
426
+ forward: forward.map(pair => pair.forward),
427
+ inverse: inverse.map(pair => pair.forward),
428
+ forwardFlat: compileFlat(forward),
429
+ inverseFlat: compileFlat(inverse)
430
+ };
431
+ }
432
+ private operations(inverse: boolean): Operation[] {
433
+ this.compile();
434
+ return inverse ? this.compiled.inverse : this.compiled.forward;
435
+ }
436
+ private scalar<T extends ProjectionOutput = number[]>(
437
+ coordinate: ProjectionCoordinate,
438
+ inverse: boolean,
439
+ epoch?: number,
440
+ output?: T
441
+ ): T {
442
+ this.coordinateEpoch(epoch);
443
+ if (coordinate.length < (this.requiresZ ? 3 : 2))
444
+ throw new Error('Pipeline requires ' + (this.requiresZ ? 'XYZ' : 'XY') + ' coordinates');
445
+ const operations = this.operations(inverse);
446
+ const point = this.coordinateScratch.acquire();
447
+ try {
448
+ point.x = coordinate[0];
449
+ point.y = coordinate[1];
450
+ point.z = coordinate.length >= 3 ? coordinate[2] : 0;
451
+ let stack: Float64Array = EMPTY_STACK;
452
+ if (this.stackSize) {
453
+ if (point === this.coordinateScratch.point) {
454
+ this.coordinateStack ||= new Float64Array(this.stackSize);
455
+ stack = this.coordinateStack;
456
+ } else {
457
+ stack = new Float64Array(this.stackSize);
458
+ }
459
+ }
460
+ this.run(point, operations, stack, epoch);
461
+ if (output) return writeScalarOutput(coordinate, output, point, coordinate.length);
462
+ const result = [...coordinate];
463
+ result[0] = point.x;
464
+ result[1] = point.y;
465
+ if (coordinate.length >= 3) result[2] = point.z;
466
+ return result as T;
467
+ } finally {
468
+ this.coordinateScratch.release(point);
469
+ }
470
+ }
471
+ private flat<T extends ProjectionArray>(
472
+ coordinates: T,
473
+ dimension: number,
474
+ inverse: boolean,
475
+ epochs?: PipelineEpochs
476
+ ): T {
477
+ if (
478
+ !(coordinates instanceof Float32Array || coordinates instanceof Float64Array) ||
479
+ !Number.isSafeInteger(dimension) ||
480
+ dimension < (this.requiresZ ? 3 : 2) ||
481
+ coordinates.length % dimension
482
+ )
483
+ throw new Error('Pipeline requires Float32Array/Float64Array and a valid XY/XYZ stride');
484
+ if (epochs === undefined) this.coordinateEpoch(undefined);
485
+ else if (typeof epochs === 'number') this.coordinateEpoch(epochs);
486
+ else {
487
+ if (
488
+ !(epochs instanceof Float32Array || epochs instanceof Float64Array) ||
489
+ epochs.length !== coordinates.length / dimension
490
+ )
491
+ throw new Error('Epoch buffer requires one Float32/Float64 value per coordinate record');
492
+ if (
493
+ epochs.byteOffset < coordinates.byteOffset + coordinates.byteLength &&
494
+ coordinates.byteOffset < epochs.byteOffset + epochs.byteLength &&
495
+ (epochs.buffer === coordinates.buffer ||
496
+ (sharedBuffer(epochs.buffer) && sharedBuffer(coordinates.buffer)))
497
+ )
498
+ throw new Error('Epoch and coordinate buffers must not overlap or alias shared storage');
499
+ }
500
+ const operations = this.operations(inverse);
501
+ const specialized = inverse ? this.compiled.inverseFlat : this.compiled.forwardFlat;
502
+ if (specialized) {
503
+ specialized(coordinates, dimension, epochs);
504
+ return coordinates;
505
+ }
506
+ const point = this.coordinateScratch.acquire();
507
+ try {
508
+ const float32 = coordinates instanceof Float32Array;
509
+ let stack: Float64Array = EMPTY_STACK;
510
+ if (this.stackSize) {
511
+ if (point === this.coordinateScratch.point) {
512
+ this.coordinateStack ||= new Float64Array(this.stackSize);
513
+ stack = this.coordinateStack;
514
+ } else stack = new Float64Array(this.stackSize);
515
+ }
516
+ const epochBuffer = typeof epochs === 'number' ? undefined : epochs;
517
+ let epoch = typeof epochs === 'number' ? epochs : undefined;
518
+ for (let i = 0; i < coordinates.length; i += dimension) {
519
+ point.x = coordinates[i];
520
+ point.y = coordinates[i + 1];
521
+ point.z = dimension >= 3 ? coordinates[i + 2] : 0;
522
+ if (epochBuffer) {
523
+ epoch = epochBuffer[i / dimension];
524
+ this.coordinateEpoch(epoch);
525
+ }
526
+ this.run(point, operations, stack, epoch);
527
+ if (
528
+ float32 &&
529
+ Math.max(Math.abs(point.x), Math.abs(point.y), Math.abs(point.z)) > 3.4028234663852886e38
530
+ )
531
+ throw new Error('Pipeline output exceeds Float32 range');
532
+ coordinates[i] = point.x;
533
+ coordinates[i + 1] = point.y;
534
+ if (dimension >= 3) coordinates[i + 2] = point.z;
535
+ }
536
+ return coordinates;
537
+ } finally {
538
+ this.coordinateScratch.release(point);
539
+ }
540
+ }
541
+ private coordinateEpoch(epoch: number | undefined): void {
542
+ if (epoch === undefined) {
543
+ if (this.requiresEpoch) throw new Error('Pipeline requires an explicit coordinate epoch');
544
+ } else if (typeof epoch !== 'number' || !Number.isFinite(epoch))
545
+ throw new Error('Coordinate epoch must be a finite decimal year');
546
+ }
547
+ private run(
548
+ point: ProjectionPoint,
549
+ operations: readonly Operation[],
550
+ stack: Float64Array,
551
+ epoch?: number
552
+ ): void {
553
+ finite(point);
554
+ for (const operation of operations) {
555
+ operation(point, stack, epoch);
556
+ finite(point);
557
+ }
558
+ }
559
+ private balanced(state: State): void {
560
+ if (state.stacks.some(stack => stack.length))
561
+ throw new Error('Pipeline stack has unbalanced push/pop operations');
562
+ }
563
+ private prepare(
564
+ step: PipelineStep,
565
+ state: State,
566
+ options: ProjectionPipelineOptions<Registration>,
567
+ cache: {pair?: Pair}
568
+ ): Factory {
569
+ const allowed: Record<PipelineStep['type'], string[]> = {
570
+ unitconvert: ['xy', 'z'],
571
+ axisswap: ['order'],
572
+ projection: ['name', 'parameters', 'output'],
573
+ cart: ['ellipsoid'],
574
+ helmert: [
575
+ 'translation',
576
+ 'rotation',
577
+ 'scalePPM',
578
+ 'convention',
579
+ 'exact',
580
+ 'referenceEpoch',
581
+ 'rates'
582
+ ],
583
+ deformation: ['model', 'sourceEpoch', 'targetEpoch'],
584
+ push: ['components'],
585
+ pop: ['components'],
586
+ hgridshift: ['grids'],
587
+ vgridshift: ['grids', 'multiplier']
588
+ };
589
+ if (!step || !own(allowed, step.type))
590
+ unsupportedStage('Unsupported pipeline operation: ' + step?.type);
591
+ keys(step, ['type', 'inverse', 'omitForward', 'omitInverse', ...allowed[step.type]]);
592
+ if (step.inverse !== undefined && typeof step.inverse !== 'boolean')
593
+ throw new Error('Invalid pipeline inverse flag');
594
+ const inverse = Boolean(step.inverse);
595
+ const orient = (pair: Pair): Pair =>
596
+ inverse
597
+ ? {
598
+ forward: pair.inverse,
599
+ inverse: pair.forward,
600
+ forwardNumeric: pair.inverseNumeric,
601
+ inverseNumeric: pair.forwardNumeric,
602
+ forwardFlat: pair.inverseFlat,
603
+ inverseFlat: pair.forwardFlat
604
+ }
605
+ : pair;
606
+ const pair =
607
+ (
608
+ forward: Operation,
609
+ backward: Operation,
610
+ forwardNumeric?: NumericStep,
611
+ inverseNumeric?: NumericStep,
612
+ forwardFlat?: NumericFlatOperation,
613
+ inverseFlat?: NumericFlatOperation
614
+ ): Factory =>
615
+ () => {
616
+ cache.pair ||= {
617
+ forward,
618
+ inverse: backward,
619
+ forwardNumeric,
620
+ inverseNumeric,
621
+ forwardFlat,
622
+ inverseFlat
623
+ };
624
+ return orient(cache.pair);
625
+ };
626
+ const requireState = (
627
+ space: PipelineCoordinateSystem['space'],
628
+ expected: readonly PipelineUnit[]
629
+ ) => {
630
+ if (state.space !== space || expected.some((unit, index) => state.units[index] !== unit))
631
+ throw new Error(
632
+ 'Pipeline step ' + step.type + ' requires ' + space + ' ' + expected.join('/')
633
+ );
634
+ };
635
+ switch (step.type) {
636
+ case 'unitconvert': {
637
+ if (!step.xy && !step.z) throw new Error('Empty unit conversion');
638
+ const scale = [1, 1, 1];
639
+ for (const [conversion, indices] of [
640
+ [step.xy, [0, 1]],
641
+ [step.z, [2]]
642
+ ] as const) {
643
+ if (!conversion) continue;
644
+ keys(conversion, ['from', 'to']);
645
+ const {from, to} = conversion;
646
+ if (!own(factors, from) || !own(factors, to) || angular(from) !== angular(to))
647
+ throw new Error('Incompatible pipeline units');
648
+ for (const index of indices) {
649
+ if (state.units[index] !== (inverse ? to : from))
650
+ throw new Error('Pipeline unit mismatch');
651
+ state.units[index] = inverse ? from : to;
652
+ scale[index] = factors[from] / factors[to];
653
+ }
654
+ }
655
+ this.requiresZ ||= Boolean(step.z);
656
+ const [xScale, yScale, zScale] = scale;
657
+ return pair(
658
+ p => {
659
+ p.x *= xScale;
660
+ p.y *= yScale;
661
+ p.z *= zScale;
662
+ },
663
+ p => {
664
+ p.x /= xScale;
665
+ p.y /= yScale;
666
+ p.z /= zScale;
667
+ },
668
+ [0, xScale, yScale, zScale],
669
+ [1, xScale, yScale, zScale]
670
+ );
671
+ }
672
+ case 'axisswap': {
673
+ const order = [...step.order];
674
+ if (
675
+ ![2, 3].includes(order.length) ||
676
+ order.some(
677
+ index =>
678
+ !Number.isInteger(index) || Math.abs(index) < 1 || Math.abs(index) > order.length
679
+ ) ||
680
+ new Set(order.map(Math.abs)).size !== order.length
681
+ )
682
+ throw new Error('Axis order must be a signed permutation');
683
+ if (order.length === 2) order.push(3);
684
+ this.requiresZ ||= step.order.length === 3;
685
+ const reverse = [0, 0, 0];
686
+ order.forEach((index, target) => {
687
+ reverse[Math.abs(index) - 1] = Math.sign(index) * (target + 1);
688
+ });
689
+ const selected = inverse ? reverse : order;
690
+ state.units = selected.map(index => state.units[Math.abs(index) - 1]) as typeof state.units;
691
+ const operation = (indices: number[]): Operation => {
692
+ const [a, b, c] = indices.map(Math.abs);
693
+ const [sx, sy, sz] = indices.map(Math.sign);
694
+ return p => {
695
+ const {x, y, z} = p;
696
+ p.x = sx * (a === 1 ? x : a === 2 ? y : z);
697
+ p.y = sy * (b === 1 ? x : b === 2 ? y : z);
698
+ p.z = sz * (c === 1 ? x : c === 2 ? y : z);
699
+ };
700
+ };
701
+ return pair(
702
+ operation(order),
703
+ operation(reverse),
704
+ [2, order[0], order[1], order[2]],
705
+ [2, reverse[0], reverse[1], reverse[2]]
706
+ );
707
+ }
708
+ case 'projection': {
709
+ const output: PipelineProjectionOutput =
710
+ step.output === undefined ? {space: 'projected', unit: 'm'} : {...step.output};
711
+ keys(output, ['space', 'unit']);
712
+ if (
713
+ output.space === 'geographic'
714
+ ? !['rad', 'deg'].includes(output.unit)
715
+ : output.space !== 'projected' || output.unit !== 'm'
716
+ )
717
+ throw new Error('Invalid projection output space/unit contract');
718
+ requireState(
719
+ inverse ? output.space : 'geographic',
720
+ inverse ? [output.unit, output.unit] : ['rad', 'rad']
721
+ );
722
+ state.space = inverse ? 'geographic' : output.space;
723
+ state.units[0] = state.units[1] = inverse ? 'rad' : output.unit;
724
+ const key = (name: string) => name.toLowerCase().replace(/[\s_-]/g, '');
725
+ if (typeof step.name !== 'string') throw new Error('Invalid projection name');
726
+ const registration = options.projections?.find(p =>
727
+ [p.name, ...(p.aliases || [])].some(name => key(name) === key(step.name))
728
+ );
729
+ if (!registration) unsupportedStage('Pipeline projection is not registered: ' + step.name);
730
+ if (!this.required.includes(registration)) this.required.push(registration);
731
+ const parameters = {...step.parameters};
732
+ for (const name of Object.keys(parameters))
733
+ if (CORE_PARAMETERS.includes(name) && !geometryKeys.includes(name) && name !== 'over')
734
+ unsupportedStage('Unsupported pipeline parameter: ' + name);
735
+ const oblique = key(registration.name) === 'obtran';
736
+ const geographicChild = ['longlat', 'latlong', 'latlon', 'lonlat', 'identity'].includes(
737
+ key(parameters['o_proj'] || '')
738
+ );
739
+ if (oblique && (!step.output || !parameters['o_proj']))
740
+ unsupportedStage(
741
+ 'Oblique helper pipelines require an explicit output-unit contract and o_proj'
742
+ );
743
+ if ((oblique && geographicChild) !== (output.space === 'geographic'))
744
+ throw new Error('Projection output contract does not match its algorithm');
745
+ const scale = geographicChild && output.unit === 'rad' ? Math.PI / 180 : 1;
746
+ const normalized = normalizeCRS(definition(registration.name, parameters));
747
+ if (normalized.kind !== 'projected')
748
+ unsupportedStage('Use a cart step for geocentric conversion');
749
+ return () => {
750
+ if (cache.pair) return orient(cache.pair);
751
+ const plugin = getLoadedProjection(registration);
752
+ if (!plugin)
753
+ unsupportedStage('Pipeline projection requires preload(): ' + registration.name);
754
+ if ((key(plugin.name) === 'obtran') !== oblique)
755
+ unsupportedStage(
756
+ 'Pipeline projection requires a matching projected-metre output contract: ' +
757
+ plugin.name
758
+ );
759
+ if (
760
+ [
761
+ 'geocent',
762
+ 'geocentric',
763
+ 'identity',
764
+ 'longlat',
765
+ 'latlong',
766
+ 'latlon',
767
+ 'lonlat'
768
+ ].includes(key(plugin.name))
769
+ )
770
+ unsupportedStage(
771
+ 'Pipeline projection requires a projected-metre output contract: ' + plugin.name
772
+ );
773
+ keys(parameters, [...geometryKeys, 'over', ...plugin.parameters]);
774
+ for (const [name, value] of Object.entries(parameters)) {
775
+ const flag = name === 'over' || plugin.flags?.includes(name);
776
+ if (flag && value !== undefined)
777
+ throw new Error('Expected a flag without a value: ' + name);
778
+ if (!flag && value === undefined)
779
+ throw new Error('Pipeline parameter requires a value: ' + name);
780
+ }
781
+ const implementation = plugin.create({
782
+ parameters: {...normalized.parameters, proj: plugin.name},
783
+ semiMajorAxis: normalized.ellipsoid.semiMajorAxis,
784
+ semiMinorAxis: normalized.ellipsoid.semiMinorAxis,
785
+ eccentricitySquared: normalized.ellipsoid.eccentricitySquared
786
+ });
787
+ const forward = projectionOperation(implementation, false),
788
+ backward = projectionOperation(implementation, true);
789
+ cache.pair = oblique
790
+ ? {
791
+ forward: p => {
792
+ if (Math.abs(p.y) > Math.PI / 2) throw new Error('Invalid geographic latitude');
793
+ forward(p);
794
+ p.x *= scale;
795
+ p.y *= scale;
796
+ },
797
+ inverse: p => {
798
+ if (geographicChild && Math.abs(p.y) > (output.unit === 'deg' ? 90 : Math.PI / 2))
799
+ throw new Error('Invalid rotated geographic latitude');
800
+ p.x /= scale;
801
+ p.y /= scale;
802
+ backward(p);
803
+ }
804
+ }
805
+ : {forward, inverse: backward};
806
+ return orient(cache.pair);
807
+ };
808
+ }
809
+ case 'cart': {
810
+ requireState(
811
+ inverse ? 'geocentric' : 'geographic',
812
+ inverse ? ['m', 'm', 'm'] : ['rad', 'rad', 'm']
813
+ );
814
+ state.space = inverse ? 'geographic' : 'geocentric';
815
+ state.units = inverse ? ['rad', 'rad', 'm'] : ['m', 'm', 'm'];
816
+ this.requiresZ = true;
817
+ keys(step.ellipsoid || {}, geometryKeys);
818
+ const ellipsoid = normalizeCRS(definition('longlat', step.ellipsoid)).ellipsoid;
819
+ return pair(
820
+ p => geodeticToGeocentricInPlace(p, ellipsoid),
821
+ p => geocentricToGeodeticInPlace(p, ellipsoid)
822
+ );
823
+ }
824
+ case 'helmert': {
825
+ requireState('geocentric', ['m', 'm', 'm']);
826
+ this.requiresZ = true;
827
+ triple(step.translation);
828
+ if (step.rotation) triple(step.rotation);
829
+ if ((step.rotation || step.rates?.rotation) && !step.convention)
830
+ throw new Error('Helmert rotation requires a convention');
831
+ if (
832
+ step.convention !== undefined &&
833
+ !['position_vector', 'coordinate_frame'].includes(step.convention)
834
+ )
835
+ throw new Error('Invalid Helmert convention');
836
+ const scale = step.scalePPM ?? 0;
837
+ if (!Number.isFinite(scale) || scale <= -1e6)
838
+ throw new Error('Helmert requires positive finite scale');
839
+ if (step.exact !== undefined && typeof step.exact !== 'boolean')
840
+ throw new Error('Invalid exact Helmert flag');
841
+ if (step.rates !== undefined) {
842
+ keys(step.rates, ['translation', 'rotation', 'scalePPM']);
843
+ if (
844
+ step.rates.translation === undefined &&
845
+ step.rates.rotation === undefined &&
846
+ step.rates.scalePPM === undefined
847
+ )
848
+ throw new Error('Helmert rates require at least one parameter');
849
+ if (step.rates.translation !== undefined) triple(step.rates.translation);
850
+ if (step.rates.rotation !== undefined) triple(step.rates.rotation);
851
+ if (step.rates.scalePPM !== undefined && !Number.isFinite(step.rates.scalePPM))
852
+ throw new Error('Helmert scale rate must be finite');
853
+ if (typeof step.referenceEpoch !== 'number' || !Number.isFinite(step.referenceEpoch))
854
+ throw new Error('Helmert rates require a finite referenceEpoch');
855
+ this.requiresEpoch = true;
856
+ const operation = createKinematicHelmert(
857
+ step.translation,
858
+ step.rotation || [0, 0, 0],
859
+ scale,
860
+ step.rates,
861
+ step.referenceEpoch,
862
+ step.convention === 'coordinate_frame',
863
+ Boolean(step.exact)
864
+ );
865
+ return pair(
866
+ (p, _stack, epoch) => operation.forward(p, epoch),
867
+ (p, _stack, epoch) => operation.inverse(p, epoch),
868
+ undefined,
869
+ undefined,
870
+ operation.forwardFlat,
871
+ operation.inverseFlat
872
+ );
873
+ }
874
+ if (step.referenceEpoch !== undefined)
875
+ throw new Error('Helmert referenceEpoch requires rates');
876
+ if (step.exact) {
877
+ const exact = createExactHelmert(
878
+ step.translation,
879
+ step.rotation || [0, 0, 0],
880
+ scale,
881
+ step.convention === 'coordinate_frame'
882
+ );
883
+ return pair(
884
+ exact.forward,
885
+ exact.inverse,
886
+ undefined,
887
+ undefined,
888
+ createHelmertFlat(exact.coefficients, false, true),
889
+ createHelmertFlat(exact.coefficients, true, true)
890
+ );
891
+ }
892
+ const sign = step.convention === 'coordinate_frame' ? -1 : 1;
893
+ const values = [
894
+ ...step.translation,
895
+ ...(step.rotation || [0, 0, 0]).map(value => sign * value),
896
+ scale
897
+ ];
898
+ const radians = Math.PI / (180 * 3600);
899
+ const coefficients = [
900
+ (values[3] || 0) * radians,
901
+ (values[4] || 0) * radians,
902
+ (values[5] || 0) * radians,
903
+ 0,
904
+ 0,
905
+ 0,
906
+ 0,
907
+ 0,
908
+ 0,
909
+ values[0],
910
+ values[1],
911
+ values[2],
912
+ 1 + (values[6] || 0) / 1e6
913
+ ];
914
+ return pair(
915
+ createHelmert(values, false),
916
+ createHelmert(values, true),
917
+ undefined,
918
+ undefined,
919
+ createHelmertFlat(coefficients, false, false),
920
+ createHelmertFlat(coefficients, true, false)
921
+ );
922
+ }
923
+ case 'deformation': {
924
+ requireState('geocentric', ['m', 'm', 'm']);
925
+ this.requiresZ = true;
926
+ const source = step.sourceEpoch,
927
+ target = step.targetEpoch;
928
+ if (
929
+ (source !== 'coordinate' && (typeof source !== 'number' || !Number.isFinite(source))) ||
930
+ typeof target !== 'number' ||
931
+ !Number.isFinite(target)
932
+ )
933
+ throw new Error('Explicit finite deformation source/target epochs required');
934
+ if (
935
+ !step.model ||
936
+ typeof step.model.forward !== 'function' ||
937
+ typeof step.model.inverse !== 'function'
938
+ )
939
+ throw new Error('Prepared deformation model required');
940
+ this.requiresEpoch ||= source === 'coordinate';
941
+ const forward = step.model.forward.bind(step.model),
942
+ backward = step.model.inverse.bind(step.model);
943
+ return pair(
944
+ (p, _stack, epoch) => forward(p, source === 'coordinate' ? epoch : source, target),
945
+ (p, _stack, epoch) => backward(p, source === 'coordinate' ? epoch : source, target)
946
+ );
947
+ }
948
+ case 'push':
949
+ case 'pop': {
950
+ if (
951
+ !Array.isArray(step.components) ||
952
+ !step.components.length ||
953
+ step.components.some(
954
+ component => !Number.isInteger(component) || component < 1 || component > 3
955
+ ) ||
956
+ new Set(step.components).size !== step.components.length
957
+ )
958
+ throw new Error('Stack components must be distinct ordinates 1, 2 or 3');
959
+ const components = [...step.components];
960
+ this.requiresZ ||= components.includes(3);
961
+ const pushing = (step.type === 'push') !== inverse;
962
+ const entries = components.map(component => {
963
+ const index = component - 1;
964
+ if (pushing) {
965
+ const entry = {unit: state.units[index], space: state.space, slot: this.stackSize++};
966
+ state.stacks[index].push(entry);
967
+ return entry;
968
+ }
969
+ const entry = state.stacks[index].pop();
970
+ if (!entry) throw new Error('Pipeline stack underflow for ordinate ' + component);
971
+ return entry;
972
+ });
973
+ if (!pushing) {
974
+ const horizontal = components
975
+ .map((component, index) => ({component, entry: entries[index]}))
976
+ .filter(({component}) => component < 3);
977
+ const space = horizontal[0]?.entry.space || state.space;
978
+ if (
979
+ horizontal.some(({entry}) => entry.space !== space) ||
980
+ (horizontal.length === 1 && space !== state.space)
981
+ )
982
+ throw new Error('Stack restore would mix horizontal coordinate spaces');
983
+ state.space = space;
984
+ components.forEach((component, index) => {
985
+ state.units[component - 1] = entries[index].unit;
986
+ });
987
+ }
988
+ const save: Operation = (p, stack) => {
989
+ for (let index = 0; index < components.length; index++)
990
+ stack[entries[index].slot] =
991
+ components[index] === 1 ? p.x : components[index] === 2 ? p.y : p.z;
992
+ };
993
+ const restore: Operation = (p, stack) => {
994
+ for (let index = 0; index < components.length; index++) {
995
+ const value = stack[entries[index].slot];
996
+ if (components[index] === 1) p.x = value;
997
+ else if (components[index] === 2) p.y = value;
998
+ else p.z = value;
999
+ }
1000
+ };
1001
+ // Unlike equations, stack slots are direction-local and must not use the
1002
+ // shared pair cache. Their matching push is known at construction.
1003
+ return () =>
1004
+ pushing ? {forward: save, inverse: restore} : {forward: restore, inverse: save};
1005
+ }
1006
+ case 'hgridshift': {
1007
+ requireState('geographic', ['rad', 'rad']);
1008
+ if (typeof step.grids !== 'string') throw new Error('Horizontal grid names required');
1009
+ const crs = normalizeCRS(definition('longlat', {nadgrids: step.grids}));
1010
+ // Normalization collapses sole null/@null lists to no datum-grid metadata.
1011
+ if (!crs.datum.grids)
1012
+ return pair(
1013
+ () => {},
1014
+ () => {}
1015
+ );
1016
+ const grids = crs.datum.grids.map(reference => {
1017
+ const grid = own(options.datumGrids || {}, reference.name)
1018
+ ? options.datumGrids[reference.name]
1019
+ : undefined;
1020
+ if (reference.name !== 'null' && !grid && !reference.optional)
1021
+ unsupportedStage('Required datum grid is not registered: ' + reference.name);
1022
+ if (grid && typeof grid.shift !== 'function')
1023
+ throw new Error('Invalid datum grid: ' + reference.name);
1024
+ return {...reference, grid};
1025
+ });
1026
+ const datum = {...crs.datum, grids};
1027
+ return pair(
1028
+ p => applyDatumGrids(p, datum, false),
1029
+ p => applyDatumGrids(p, datum, true)
1030
+ );
1031
+ }
1032
+ case 'vgridshift': {
1033
+ requireState('geographic', ['rad', 'rad', 'm']);
1034
+ this.requiresZ = true;
1035
+ if (typeof step.grids !== 'string') throw new Error('Vertical grid names required');
1036
+ const offset = compileVerticalGrid(step.grids, options.verticalGrids);
1037
+ const multiplier = step.multiplier ?? -1;
1038
+ if (!Number.isFinite(multiplier))
1039
+ throw new Error('Vertical grid multiplier must be finite');
1040
+ return pair(
1041
+ p => {
1042
+ p.z += multiplier * offset(p.x, p.y);
1043
+ },
1044
+ p => {
1045
+ p.z -= multiplier * offset(p.x, p.y);
1046
+ }
1047
+ );
1048
+ }
1049
+ default:
1050
+ throw new Error('Unsupported pipeline step');
1051
+ }
1052
+ }
1053
+ }