@loaders.gl/wkt 4.0.0-alpha.9 → 4.0.0-beta.1

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 (231) hide show
  1. package/README.md +4 -1
  2. package/dist/dist.min.js +1449 -404
  3. package/dist/es5/hex-wkb-loader.js +64 -0
  4. package/dist/es5/hex-wkb-loader.js.map +1 -0
  5. package/dist/es5/index.js +76 -1
  6. package/dist/es5/index.js.map +1 -1
  7. package/dist/es5/lib/encode-twkb.js +269 -0
  8. package/dist/es5/lib/encode-twkb.js.map +1 -0
  9. package/dist/es5/lib/encode-wkb.js +12 -10
  10. package/dist/es5/lib/encode-wkb.js.map +1 -1
  11. package/dist/es5/lib/encode-wkt-crs.js +32 -0
  12. package/dist/es5/lib/encode-wkt-crs.js.map +1 -0
  13. package/dist/es5/lib/encode-wkt.js +1 -1
  14. package/dist/es5/lib/encode-wkt.js.map +1 -1
  15. package/dist/es5/lib/parse-hex-wkb.js +2 -0
  16. package/dist/es5/lib/parse-hex-wkb.js.map +1 -0
  17. package/dist/es5/lib/parse-twkb.js +263 -0
  18. package/dist/es5/lib/parse-twkb.js.map +1 -0
  19. package/dist/es5/lib/parse-wkb-header.js +114 -0
  20. package/dist/es5/lib/parse-wkb-header.js.map +1 -0
  21. package/dist/es5/lib/parse-wkb.js +59 -52
  22. package/dist/es5/lib/parse-wkb.js.map +1 -1
  23. package/dist/es5/lib/parse-wkt-crs.js +106 -0
  24. package/dist/es5/lib/parse-wkt-crs.js.map +1 -0
  25. package/dist/es5/lib/parse-wkt.js +210 -153
  26. package/dist/es5/lib/parse-wkt.js.map +1 -1
  27. package/dist/es5/lib/utils/base64-encoder.js +26 -0
  28. package/dist/es5/lib/utils/base64-encoder.js.map +1 -0
  29. package/dist/es5/lib/utils/binary-reader.js +98 -0
  30. package/dist/es5/lib/utils/binary-reader.js.map +1 -0
  31. package/dist/es5/lib/utils/binary-writer.js +2 -2
  32. package/dist/es5/lib/utils/binary-writer.js.map +1 -1
  33. package/dist/es5/lib/utils/hex-encoder.js +63 -0
  34. package/dist/es5/lib/utils/hex-encoder.js.map +1 -0
  35. package/dist/es5/lib/utils/hex-transcoder.js +41 -0
  36. package/dist/es5/lib/utils/hex-transcoder.js.map +1 -0
  37. package/dist/es5/lib/utils/version.js +1 -1
  38. package/dist/es5/lib/utils/version.js.map +1 -1
  39. package/dist/es5/twkb-loader.js +53 -0
  40. package/dist/es5/twkb-loader.js.map +1 -0
  41. package/dist/es5/twkb-writer.js +40 -0
  42. package/dist/es5/twkb-writer.js.map +1 -0
  43. package/dist/es5/wkb-loader.js +9 -9
  44. package/dist/es5/wkb-loader.js.map +1 -1
  45. package/dist/es5/wkb-writer.js +2 -3
  46. package/dist/es5/wkb-writer.js.map +1 -1
  47. package/dist/es5/wkt-crs-loader.js +47 -0
  48. package/dist/es5/wkt-crs-loader.js.map +1 -0
  49. package/dist/es5/wkt-crs-writer.js +49 -0
  50. package/dist/es5/wkt-crs-writer.js.map +1 -0
  51. package/dist/es5/wkt-loader.js +10 -6
  52. package/dist/es5/wkt-loader.js.map +1 -1
  53. package/dist/es5/wkt-writer.js +2 -3
  54. package/dist/es5/wkt-writer.js.map +1 -1
  55. package/dist/es5/workers/wkb-worker.js.map +1 -1
  56. package/dist/es5/workers/wkt-worker.js.map +1 -1
  57. package/dist/esm/hex-wkb-loader.js +37 -0
  58. package/dist/esm/hex-wkb-loader.js.map +1 -0
  59. package/dist/esm/index.js +10 -1
  60. package/dist/esm/index.js.map +1 -1
  61. package/dist/esm/lib/encode-twkb.js +180 -0
  62. package/dist/esm/lib/encode-twkb.js.map +1 -0
  63. package/dist/esm/lib/encode-wkb.js +4 -4
  64. package/dist/esm/lib/encode-wkb.js.map +1 -1
  65. package/dist/esm/lib/encode-wkt-crs.js +21 -0
  66. package/dist/esm/lib/encode-wkt-crs.js.map +1 -0
  67. package/dist/esm/lib/encode-wkt.js +1 -1
  68. package/dist/esm/lib/encode-wkt.js.map +1 -1
  69. package/dist/esm/lib/parse-hex-wkb.js +2 -0
  70. package/dist/esm/lib/parse-hex-wkb.js.map +1 -0
  71. package/dist/esm/lib/parse-twkb.js +256 -0
  72. package/dist/esm/lib/parse-twkb.js.map +1 -0
  73. package/dist/esm/lib/parse-wkb-header.js +105 -0
  74. package/dist/esm/lib/parse-wkb-header.js.map +1 -0
  75. package/dist/esm/lib/parse-wkb.js +59 -51
  76. package/dist/esm/lib/parse-wkb.js.map +1 -1
  77. package/dist/esm/lib/parse-wkt-crs.js +96 -0
  78. package/dist/esm/lib/parse-wkt-crs.js.map +1 -0
  79. package/dist/esm/lib/parse-wkt.js +204 -152
  80. package/dist/esm/lib/parse-wkt.js.map +1 -1
  81. package/dist/esm/lib/utils/base64-encoder.js +7 -0
  82. package/dist/esm/lib/utils/base64-encoder.js.map +1 -0
  83. package/dist/esm/lib/utils/binary-reader.js +67 -0
  84. package/dist/esm/lib/utils/binary-reader.js.map +1 -0
  85. package/dist/esm/lib/utils/binary-writer.js +1 -1
  86. package/dist/esm/lib/utils/binary-writer.js.map +1 -1
  87. package/dist/esm/lib/utils/hex-encoder.js +40 -0
  88. package/dist/esm/lib/utils/hex-encoder.js.map +1 -0
  89. package/dist/esm/lib/utils/hex-transcoder.js +34 -0
  90. package/dist/esm/lib/utils/hex-transcoder.js.map +1 -0
  91. package/dist/esm/lib/utils/version.js +1 -1
  92. package/dist/esm/lib/utils/version.js.map +1 -1
  93. package/dist/esm/twkb-loader.js +24 -0
  94. package/dist/esm/twkb-loader.js.map +1 -0
  95. package/dist/esm/twkb-writer.js +14 -0
  96. package/dist/esm/twkb-writer.js.map +1 -0
  97. package/dist/esm/wkb-loader.js +6 -4
  98. package/dist/esm/wkb-loader.js.map +1 -1
  99. package/dist/esm/wkb-writer.js +1 -1
  100. package/dist/esm/wkb-writer.js.map +1 -1
  101. package/dist/esm/wkt-crs-loader.js +19 -0
  102. package/dist/esm/wkt-crs-loader.js.map +1 -0
  103. package/dist/esm/wkt-crs-writer.js +19 -0
  104. package/dist/esm/wkt-crs-writer.js.map +1 -0
  105. package/dist/esm/wkt-loader.js +8 -3
  106. package/dist/esm/wkt-loader.js.map +1 -1
  107. package/dist/esm/wkt-writer.js +2 -2
  108. package/dist/esm/wkt-writer.js.map +1 -1
  109. package/dist/esm/workers/wkb-worker.js.map +1 -1
  110. package/dist/esm/workers/wkt-worker.js.map +1 -1
  111. package/dist/src/bundle.d.ts.map +1 -0
  112. package/dist/src/hex-wkb-loader.d.ts +17 -0
  113. package/dist/src/hex-wkb-loader.d.ts.map +1 -0
  114. package/dist/src/index.d.ts +15 -0
  115. package/dist/src/index.d.ts.map +1 -0
  116. package/dist/src/lib/encode-twkb.d.ts +6 -0
  117. package/dist/src/lib/encode-twkb.d.ts.map +1 -0
  118. package/dist/{lib → src/lib}/encode-wkb.d.ts +16 -3
  119. package/dist/src/lib/encode-wkb.d.ts.map +1 -0
  120. package/dist/src/lib/encode-wkt-crs.d.ts +10 -0
  121. package/dist/src/lib/encode-wkt-crs.d.ts.map +1 -0
  122. package/dist/{lib → src/lib}/encode-wkt.d.ts +1 -1
  123. package/dist/src/lib/encode-wkt.d.ts.map +1 -0
  124. package/dist/src/lib/parse-hex-wkb.d.ts +1 -0
  125. package/dist/src/lib/parse-hex-wkb.d.ts.map +1 -0
  126. package/dist/src/lib/parse-twkb.d.ts +9 -0
  127. package/dist/src/lib/parse-twkb.d.ts.map +1 -0
  128. package/dist/src/lib/parse-wkb-header.d.ts +39 -0
  129. package/dist/src/lib/parse-wkb-header.d.ts.map +1 -0
  130. package/dist/src/lib/parse-wkb.d.ts +5 -0
  131. package/dist/src/lib/parse-wkb.d.ts.map +1 -0
  132. package/dist/src/lib/parse-wkt-crs.d.ts +15 -0
  133. package/dist/src/lib/parse-wkt-crs.d.ts.map +1 -0
  134. package/dist/src/lib/parse-wkt.d.ts +30 -0
  135. package/dist/src/lib/parse-wkt.d.ts.map +1 -0
  136. package/dist/src/lib/utils/base64-encoder.d.ts +5 -0
  137. package/dist/src/lib/utils/base64-encoder.d.ts.map +1 -0
  138. package/dist/src/lib/utils/binary-reader.d.ts +18 -0
  139. package/dist/src/lib/utils/binary-reader.d.ts.map +1 -0
  140. package/dist/{lib → src/lib}/utils/binary-writer.d.ts +1 -1
  141. package/dist/src/lib/utils/binary-writer.d.ts.map +1 -0
  142. package/dist/src/lib/utils/hex-encoder.d.ts +15 -0
  143. package/dist/src/lib/utils/hex-encoder.d.ts.map +1 -0
  144. package/dist/src/lib/utils/hex-transcoder.d.ts +15 -0
  145. package/dist/src/lib/utils/hex-transcoder.d.ts.map +1 -0
  146. package/dist/src/lib/utils/version.d.ts.map +1 -0
  147. package/dist/src/twkb-loader.d.ts +16 -0
  148. package/dist/src/twkb-loader.d.ts.map +1 -0
  149. package/dist/src/twkb-writer.d.ts +7 -0
  150. package/dist/src/twkb-writer.d.ts.map +1 -0
  151. package/dist/src/wkb-loader.d.ts +16 -0
  152. package/dist/src/wkb-loader.d.ts.map +1 -0
  153. package/dist/src/wkb-writer.d.ts +7 -0
  154. package/dist/src/wkb-writer.d.ts.map +1 -0
  155. package/dist/src/wkt-crs-loader.d.ts +12 -0
  156. package/dist/src/wkt-crs-loader.d.ts.map +1 -0
  157. package/dist/src/wkt-crs-writer.d.ts +13 -0
  158. package/dist/src/wkt-crs-writer.d.ts.map +1 -0
  159. package/dist/src/wkt-loader.d.ts +18 -0
  160. package/dist/src/wkt-loader.d.ts.map +1 -0
  161. package/dist/src/wkt-writer.d.ts +10 -0
  162. package/dist/src/wkt-writer.d.ts.map +1 -0
  163. package/dist/{workers → src/workers}/wkb-worker.d.ts.map +1 -1
  164. package/dist/{workers → src/workers}/wkt-worker.d.ts.map +1 -1
  165. package/dist/tsconfig.tsbuildinfo +1 -0
  166. package/dist/wkt-worker.js +230 -186
  167. package/package.json +4 -4
  168. package/src/hex-wkb-loader.ts +61 -0
  169. package/src/index.ts +22 -1
  170. package/src/lib/encode-twkb.ts +304 -0
  171. package/src/lib/encode-wkb.ts +5 -5
  172. package/src/lib/encode-wkt-crs.ts +39 -0
  173. package/src/lib/encode-wkt.ts +3 -2
  174. package/src/lib/parse-hex-wkb.ts +0 -0
  175. package/src/lib/parse-twkb.ts +356 -0
  176. package/src/lib/parse-wkb-header.ts +172 -0
  177. package/src/lib/parse-wkb.ts +69 -58
  178. package/src/lib/parse-wkt-crs.ts +147 -0
  179. package/src/lib/parse-wkt.ts +275 -174
  180. package/src/lib/utils/base64-encoder.ts +153 -0
  181. package/src/lib/utils/binary-reader.ts +72 -0
  182. package/src/lib/utils/binary-writer.ts +1 -1
  183. package/src/lib/utils/hex-encoder.ts +58 -0
  184. package/src/lib/utils/hex-transcoder.ts +50 -0
  185. package/src/twkb-loader.ts +42 -0
  186. package/src/twkb-writer.ts +25 -0
  187. package/src/wkb-loader.ts +19 -8
  188. package/src/wkb-writer.ts +6 -4
  189. package/src/wkt-crs-loader.ts +33 -0
  190. package/src/wkt-crs-writer.ts +37 -0
  191. package/src/wkt-loader.ts +22 -6
  192. package/src/wkt-writer.ts +12 -5
  193. package/src/workers/wkb-worker.ts +2 -0
  194. package/src/workers/wkt-worker.ts +2 -0
  195. package/dist/bundle.d.ts.map +0 -1
  196. package/dist/bundle.js +0 -5
  197. package/dist/index.d.ts +0 -5
  198. package/dist/index.d.ts.map +0 -1
  199. package/dist/index.js +0 -13
  200. package/dist/lib/encode-wkb.d.ts.map +0 -1
  201. package/dist/lib/encode-wkb.js +0 -295
  202. package/dist/lib/encode-wkt.d.ts.map +0 -1
  203. package/dist/lib/encode-wkt.js +0 -46
  204. package/dist/lib/parse-wkb.d.ts +0 -3
  205. package/dist/lib/parse-wkb.d.ts.map +0 -1
  206. package/dist/lib/parse-wkb.js +0 -236
  207. package/dist/lib/parse-wkt.d.ts +0 -8
  208. package/dist/lib/parse-wkt.d.ts.map +0 -1
  209. package/dist/lib/parse-wkt.js +0 -227
  210. package/dist/lib/utils/binary-writer.d.ts.map +0 -1
  211. package/dist/lib/utils/binary-writer.js +0 -120
  212. package/dist/lib/utils/version.d.ts.map +0 -1
  213. package/dist/lib/utils/version.js +0 -7
  214. package/dist/wkb-loader.d.ts +0 -39
  215. package/dist/wkb-loader.d.ts.map +0 -1
  216. package/dist/wkb-loader.js +0 -34
  217. package/dist/wkb-writer.d.ts +0 -6
  218. package/dist/wkb-writer.d.ts.map +0 -1
  219. package/dist/wkb-writer.js +0 -26
  220. package/dist/wkt-loader.d.ts +0 -10
  221. package/dist/wkt-loader.d.ts.map +0 -1
  222. package/dist/wkt-loader.js +0 -33
  223. package/dist/wkt-writer.d.ts +0 -6
  224. package/dist/wkt-writer.d.ts.map +0 -1
  225. package/dist/wkt-writer.js +0 -23
  226. package/dist/workers/wkb-worker.js +0 -5
  227. package/dist/workers/wkt-worker.js +0 -5
  228. /package/dist/{bundle.d.ts → src/bundle.d.ts} +0 -0
  229. /package/dist/{lib → src/lib}/utils/version.d.ts +0 -0
  230. /package/dist/{workers → src/workers}/wkb-worker.d.ts +0 -0
  231. /package/dist/{workers → src/workers}/wkt-worker.d.ts +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-wkb-header.js","names":["EWKB_FLAG_Z","EWKB_FLAG_M","EWKB_FLAG_SRID","MAX_SRID","WKBGeometryType","exports","isWKB","arrayBuffer","dataView","DataView","byteOffset","endianness","getUint8","littleEndian","geometry","getUint32","geometryType","geometryFlags","srid","parseWKBHeader","target","wkbHeader","Object","assign","type","dimensions","coordinates","geometryCode","isoType","Error","concat","ewkbZ","ewkbM","ewkbSRID"],"sources":["../../../src/lib/parse-wkb-header.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nconst EWKB_FLAG_Z = 0x80000000;\nconst EWKB_FLAG_M = 0x40000000;\nconst EWKB_FLAG_SRID = 0x20000000;\n\nconst MAX_SRID = 10000; // TBD: Assume no more than 10K SRIDs are defined\n\n/**\n * Integer code for geometry types in WKB and related formats\n * Reference: https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry#Well-known_binary\n */\nexport enum WKBGeometryType {\n Point = 1,\n LineString = 2,\n Polygon = 3,\n MultiPoint = 4,\n MultiLineString = 5,\n MultiPolygon = 6,\n GeometryCollection = 7\n}\n\n/** Parsed WKB header */\nexport type WKBHeader = {\n /** WKB variant */\n type: 'wkb' | 'ewkb' | 'iso-wkb' | 'twkb';\n /** geometry type encoded in this WKB: point, line, polygon etc */\n geometryType: 1 | 2 | 3 | 4 | 5 | 6 | 7;\n /** Number of dimensions for coordinate data */\n dimensions: 2 | 3 | 4;\n /** Coordinate names, Z and M are controlled by flags */\n coordinates: 'xy' | 'xyz' | 'xym' | 'xyzm';\n srid?: number;\n /** true if binary data is stored as little endian */\n littleEndian: boolean;\n /** Offset to start of geometry */\n byteOffset: number;\n};\n\n/** Sanity checks that first to 5-9 bytes could represent a supported WKB dialect header */\nexport function isWKB(arrayBuffer: ArrayBuffer): boolean {\n const dataView = new DataView(arrayBuffer);\n let byteOffset = 0;\n\n const endianness = dataView.getUint8(byteOffset);\n byteOffset += 1;\n\n // Check valid endianness (only 0 or 1 are allowed)\n if (endianness > 1) {\n return false;\n }\n\n const littleEndian = endianness === 1;\n\n const geometry = dataView.getUint32(byteOffset, littleEndian);\n byteOffset += 4;\n\n // check valid geometry type (we don't support extension geometries)\n const geometryType = geometry & 0x07;\n if (geometryType === 0 || geometryType > 7) {\n return false;\n }\n\n const geometryFlags = geometry - geometryType;\n\n // Accept iso-wkb flags\n if (\n geometryFlags === 0 ||\n geometryFlags === 1000 ||\n geometryFlags === 2000 ||\n geometryFlags === 3000\n ) {\n return true;\n }\n\n // Accept ewkb flags but reject otherwise\n if ((geometryFlags & ~(EWKB_FLAG_Z | EWKB_FLAG_M | EWKB_FLAG_SRID)) !== 0) {\n return false;\n }\n\n if (geometryFlags & EWKB_FLAG_SRID) {\n const srid = dataView.getUint32(byteOffset, littleEndian);\n byteOffset += 4;\n\n if (srid > MAX_SRID) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Parses header and provides a byteOffset to start of geometry data\n * @param dataView\n * @param target optionally supply a WKBHeader object to avoid creating a new object for every call\n * @returns a header object describing the WKB data\n */\n// eslint-disable-next-line max-statements\nexport function parseWKBHeader(dataView: DataView, target?: WKBHeader): WKBHeader {\n const wkbHeader: WKBHeader = Object.assign(target || {}, {\n type: 'wkb',\n geometryType: 1,\n dimensions: 2,\n coordinates: 'xy',\n littleEndian: true,\n byteOffset: 0\n } as WKBHeader);\n\n // Check endianness of data\n wkbHeader.littleEndian = dataView.getUint8(wkbHeader.byteOffset) === 1;\n wkbHeader.byteOffset++;\n\n // 4-digit code representing dimension and type of geometry\n const geometryCode = dataView.getUint32(wkbHeader.byteOffset, wkbHeader.littleEndian);\n wkbHeader.byteOffset += 4;\n\n wkbHeader.geometryType = (geometryCode & 0x7) as 1 | 2 | 3 | 4 | 5 | 6 | 7;\n\n // Check if iso-wkb variant: iso-wkb adds 1000, 2000 or 3000 to the geometry code\n const isoType = (geometryCode - wkbHeader.geometryType) / 1000;\n switch (isoType) {\n case 0:\n break;\n case 1:\n wkbHeader.type = 'iso-wkb';\n wkbHeader.dimensions = 3;\n wkbHeader.coordinates = 'xyz';\n break;\n case 2:\n wkbHeader.type = 'iso-wkb';\n wkbHeader.dimensions = 3;\n wkbHeader.coordinates = 'xym';\n break;\n case 3:\n wkbHeader.type = 'iso-wkb';\n wkbHeader.dimensions = 4;\n wkbHeader.coordinates = 'xyzm';\n break;\n default:\n throw new Error(`WKB: Unsupported iso-wkb type: ${isoType}`);\n }\n\n // Check if EWKB variant. Uses bitmasks for Z&M dimensions as well as optional SRID field\n const ewkbZ = geometryCode & EWKB_FLAG_Z;\n const ewkbM = geometryCode & EWKB_FLAG_M;\n const ewkbSRID = geometryCode & EWKB_FLAG_SRID;\n\n if (ewkbZ && ewkbM) {\n wkbHeader.type = 'ewkb';\n wkbHeader.dimensions = 4;\n wkbHeader.coordinates = 'xyzm';\n } else if (ewkbZ) {\n wkbHeader.type = 'ewkb';\n wkbHeader.dimensions = 3;\n wkbHeader.coordinates = 'xyz';\n } else if (ewkbM) {\n wkbHeader.type = 'ewkb';\n wkbHeader.dimensions = 3;\n wkbHeader.coordinates = 'xym';\n }\n\n // If SRID present read four more bytes\n if (ewkbSRID) {\n wkbHeader.type = 'ewkb';\n // 4-digit code representing dimension and type of geometry\n wkbHeader.srid = dataView.getUint32(wkbHeader.byteOffset, wkbHeader.littleEndian);\n wkbHeader.byteOffset += 4;\n }\n\n return wkbHeader;\n}\n"],"mappings":";;;;;;;;AAEA,IAAMA,WAAW,GAAG,UAAU;AAC9B,IAAMC,WAAW,GAAG,UAAU;AAC9B,IAAMC,cAAc,GAAG,UAAU;AAEjC,IAAMC,QAAQ,GAAG,KAAK;AAAC,IAMXC,eAAe,aAAfA,eAAe;EAAfA,eAAe,CAAfA,eAAe;EAAfA,eAAe,CAAfA,eAAe;EAAfA,eAAe,CAAfA,eAAe;EAAfA,eAAe,CAAfA,eAAe;EAAfA,eAAe,CAAfA,eAAe;EAAfA,eAAe,CAAfA,eAAe;EAAfA,eAAe,CAAfA,eAAe;EAAA,OAAfA,eAAe;AAAA;AAAAC,OAAA,CAAAD,eAAA,GAAAA,eAAA;AA4BpB,SAASE,KAAKA,CAACC,WAAwB,EAAW;EACvD,IAAMC,QAAQ,GAAG,IAAIC,QAAQ,CAACF,WAAW,CAAC;EAC1C,IAAIG,UAAU,GAAG,CAAC;EAElB,IAAMC,UAAU,GAAGH,QAAQ,CAACI,QAAQ,CAACF,UAAU,CAAC;EAChDA,UAAU,IAAI,CAAC;EAGf,IAAIC,UAAU,GAAG,CAAC,EAAE;IAClB,OAAO,KAAK;EACd;EAEA,IAAME,YAAY,GAAGF,UAAU,KAAK,CAAC;EAErC,IAAMG,QAAQ,GAAGN,QAAQ,CAACO,SAAS,CAACL,UAAU,EAAEG,YAAY,CAAC;EAC7DH,UAAU,IAAI,CAAC;EAGf,IAAMM,YAAY,GAAGF,QAAQ,GAAG,IAAI;EACpC,IAAIE,YAAY,KAAK,CAAC,IAAIA,YAAY,GAAG,CAAC,EAAE;IAC1C,OAAO,KAAK;EACd;EAEA,IAAMC,aAAa,GAAGH,QAAQ,GAAGE,YAAY;EAG7C,IACEC,aAAa,KAAK,CAAC,IACnBA,aAAa,KAAK,IAAI,IACtBA,aAAa,KAAK,IAAI,IACtBA,aAAa,KAAK,IAAI,EACtB;IACA,OAAO,IAAI;EACb;EAGA,IAAI,CAACA,aAAa,GAAG,EAAEjB,WAAW,GAAGC,WAAW,GAAGC,cAAc,CAAC,MAAM,CAAC,EAAE;IACzE,OAAO,KAAK;EACd;EAEA,IAAIe,aAAa,GAAGf,cAAc,EAAE;IAClC,IAAMgB,IAAI,GAAGV,QAAQ,CAACO,SAAS,CAACL,UAAU,EAAEG,YAAY,CAAC;IACzDH,UAAU,IAAI,CAAC;IAEf,IAAIQ,IAAI,GAAGf,QAAQ,EAAE;MACnB,OAAO,KAAK;IACd;EACF;EAEA,OAAO,IAAI;AACb;AASO,SAASgB,cAAcA,CAACX,QAAkB,EAAEY,MAAkB,EAAa;EAChF,IAAMC,SAAoB,GAAGC,MAAM,CAACC,MAAM,CAACH,MAAM,IAAI,CAAC,CAAC,EAAE;IACvDI,IAAI,EAAE,KAAK;IACXR,YAAY,EAAE,CAAC;IACfS,UAAU,EAAE,CAAC;IACbC,WAAW,EAAE,IAAI;IACjBb,YAAY,EAAE,IAAI;IAClBH,UAAU,EAAE;EACd,CAAc,CAAC;EAGfW,SAAS,CAACR,YAAY,GAAGL,QAAQ,CAACI,QAAQ,CAACS,SAAS,CAACX,UAAU,CAAC,KAAK,CAAC;EACtEW,SAAS,CAACX,UAAU,EAAE;EAGtB,IAAMiB,YAAY,GAAGnB,QAAQ,CAACO,SAAS,CAACM,SAAS,CAACX,UAAU,EAAEW,SAAS,CAACR,YAAY,CAAC;EACrFQ,SAAS,CAACX,UAAU,IAAI,CAAC;EAEzBW,SAAS,CAACL,YAAY,GAAIW,YAAY,GAAG,GAAiC;EAG1E,IAAMC,OAAO,GAAG,CAACD,YAAY,GAAGN,SAAS,CAACL,YAAY,IAAI,IAAI;EAC9D,QAAQY,OAAO;IACb,KAAK,CAAC;MACJ;IACF,KAAK,CAAC;MACJP,SAAS,CAACG,IAAI,GAAG,SAAS;MAC1BH,SAAS,CAACI,UAAU,GAAG,CAAC;MACxBJ,SAAS,CAACK,WAAW,GAAG,KAAK;MAC7B;IACF,KAAK,CAAC;MACJL,SAAS,CAACG,IAAI,GAAG,SAAS;MAC1BH,SAAS,CAACI,UAAU,GAAG,CAAC;MACxBJ,SAAS,CAACK,WAAW,GAAG,KAAK;MAC7B;IACF,KAAK,CAAC;MACJL,SAAS,CAACG,IAAI,GAAG,SAAS;MAC1BH,SAAS,CAACI,UAAU,GAAG,CAAC;MACxBJ,SAAS,CAACK,WAAW,GAAG,MAAM;MAC9B;IACF;MACE,MAAM,IAAIG,KAAK,mCAAAC,MAAA,CAAmCF,OAAO,CAAE,CAAC;EAChE;EAGA,IAAMG,KAAK,GAAGJ,YAAY,GAAG3B,WAAW;EACxC,IAAMgC,KAAK,GAAGL,YAAY,GAAG1B,WAAW;EACxC,IAAMgC,QAAQ,GAAGN,YAAY,GAAGzB,cAAc;EAE9C,IAAI6B,KAAK,IAAIC,KAAK,EAAE;IAClBX,SAAS,CAACG,IAAI,GAAG,MAAM;IACvBH,SAAS,CAACI,UAAU,GAAG,CAAC;IACxBJ,SAAS,CAACK,WAAW,GAAG,MAAM;EAChC,CAAC,MAAM,IAAIK,KAAK,EAAE;IAChBV,SAAS,CAACG,IAAI,GAAG,MAAM;IACvBH,SAAS,CAACI,UAAU,GAAG,CAAC;IACxBJ,SAAS,CAACK,WAAW,GAAG,KAAK;EAC/B,CAAC,MAAM,IAAIM,KAAK,EAAE;IAChBX,SAAS,CAACG,IAAI,GAAG,MAAM;IACvBH,SAAS,CAACI,UAAU,GAAG,CAAC;IACxBJ,SAAS,CAACK,WAAW,GAAG,KAAK;EAC/B;EAGA,IAAIO,QAAQ,EAAE;IACZZ,SAAS,CAACG,IAAI,GAAG,MAAM;IAEvBH,SAAS,CAACH,IAAI,GAAGV,QAAQ,CAACO,SAAS,CAACM,SAAS,CAACX,UAAU,EAAEW,SAAS,CAACR,YAAY,CAAC;IACjFQ,SAAS,CAACX,UAAU,IAAI,CAAC;EAC3B;EAEA,OAAOW,SAAS;AAClB"}
@@ -4,57 +4,64 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.default = parseWKB;
7
+ exports.parseWKB = parseWKB;
8
+ exports.parseWKBToBinary = parseWKBToBinary;
8
9
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
10
+ var _gis = require("@loaders.gl/gis");
11
+ var _parseWkbHeader = require("./parse-wkb-header");
9
12
  function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
10
13
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
11
14
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
12
- var NUM_DIMENSIONS = {
13
- 0: 2,
14
- 1: 3,
15
- 2: 3,
16
- 3: 4
17
- };
18
- function parseWKB(arrayBuffer) {
19
- var view = new DataView(arrayBuffer);
20
- var offset = 0;
21
- var littleEndian = view.getUint8(offset) === 1;
22
- offset++;
23
- var geometryCode = view.getUint32(offset, littleEndian);
24
- offset += 4;
25
- var geometryType = geometryCode % 1000;
26
- var type = (geometryCode - geometryType) / 1000;
27
- var dimension = NUM_DIMENSIONS[type];
15
+ function parseWKB(arrayBuffer, options) {
16
+ var _options$wkb;
17
+ var binaryGeometry = parseWKBToBinary(arrayBuffer, options);
18
+ var shape = (options === null || options === void 0 ? void 0 : (_options$wkb = options.wkb) === null || _options$wkb === void 0 ? void 0 : _options$wkb.shape) || 'binary-geometry';
19
+ switch (shape) {
20
+ case 'binary-geometry':
21
+ return binaryGeometry;
22
+ case 'geometry':
23
+ return (0, _gis.binaryToGeometry)(binaryGeometry);
24
+ default:
25
+ throw new Error(shape);
26
+ }
27
+ }
28
+ function parseWKBToBinary(arrayBuffer, options) {
29
+ var dataView = new DataView(arrayBuffer);
30
+ var wkbHeader = (0, _parseWkbHeader.parseWKBHeader)(dataView);
31
+ var geometryType = wkbHeader.geometryType,
32
+ dimensions = wkbHeader.dimensions,
33
+ littleEndian = wkbHeader.littleEndian;
34
+ var offset = wkbHeader.byteOffset;
28
35
  switch (geometryType) {
29
- case 1:
30
- var point = parsePoint(view, offset, dimension, littleEndian);
36
+ case _parseWkbHeader.WKBGeometryType.Point:
37
+ var point = parsePoint(dataView, offset, dimensions, littleEndian);
31
38
  return point.geometry;
32
- case 2:
33
- var line = parseLineString(view, offset, dimension, littleEndian);
39
+ case _parseWkbHeader.WKBGeometryType.LineString:
40
+ var line = parseLineString(dataView, offset, dimensions, littleEndian);
34
41
  return line.geometry;
35
- case 3:
36
- var polygon = parsePolygon(view, offset, dimension, littleEndian);
42
+ case _parseWkbHeader.WKBGeometryType.Polygon:
43
+ var polygon = parsePolygon(dataView, offset, dimensions, littleEndian);
37
44
  return polygon.geometry;
38
- case 4:
39
- var multiPoint = parseMultiPoint(view, offset, dimension, littleEndian);
45
+ case _parseWkbHeader.WKBGeometryType.MultiPoint:
46
+ var multiPoint = parseMultiPoint(dataView, offset, dimensions, littleEndian);
40
47
  multiPoint.type = 'Point';
41
48
  return multiPoint;
42
- case 5:
43
- var multiLine = parseMultiLineString(view, offset, dimension, littleEndian);
49
+ case _parseWkbHeader.WKBGeometryType.MultiLineString:
50
+ var multiLine = parseMultiLineString(dataView, offset, dimensions, littleEndian);
44
51
  multiLine.type = 'LineString';
45
52
  return multiLine;
46
- case 6:
47
- var multiPolygon = parseMultiPolygon(view, offset, dimension, littleEndian);
53
+ case _parseWkbHeader.WKBGeometryType.MultiPolygon:
54
+ var multiPolygon = parseMultiPolygon(dataView, offset, dimensions, littleEndian);
48
55
  multiPolygon.type = 'Polygon';
49
56
  return multiPolygon;
50
57
  default:
51
58
  throw new Error("WKB: Unsupported geometry type: ".concat(geometryType));
52
59
  }
53
60
  }
54
- function parsePoint(view, offset, dimension, littleEndian) {
61
+ function parsePoint(dataView, offset, dimension, littleEndian) {
55
62
  var positions = new Float64Array(dimension);
56
63
  for (var i = 0; i < dimension; i++) {
57
- positions[i] = view.getFloat64(offset, littleEndian);
64
+ positions[i] = dataView.getFloat64(offset, littleEndian);
58
65
  offset += 8;
59
66
  }
60
67
  return {
@@ -68,12 +75,12 @@ function parsePoint(view, offset, dimension, littleEndian) {
68
75
  offset: offset
69
76
  };
70
77
  }
71
- function parseLineString(view, offset, dimension, littleEndian) {
72
- var nPoints = view.getUint32(offset, littleEndian);
78
+ function parseLineString(dataView, offset, dimension, littleEndian) {
79
+ var nPoints = dataView.getUint32(offset, littleEndian);
73
80
  offset += 4;
74
81
  var positions = new Float64Array(nPoints * dimension);
75
82
  for (var i = 0; i < nPoints * dimension; i++) {
76
- positions[i] = view.getFloat64(offset, littleEndian);
83
+ positions[i] = dataView.getFloat64(offset, littleEndian);
77
84
  offset += 8;
78
85
  }
79
86
  var pathIndices = [0];
@@ -100,12 +107,12 @@ var cumulativeSum = function cumulativeSum(sum) {
100
107
  return sum += value;
101
108
  };
102
109
  };
103
- function parsePolygon(view, offset, dimension, littleEndian) {
104
- var nRings = view.getUint32(offset, littleEndian);
110
+ function parsePolygon(dataView, offset, dimension, littleEndian) {
111
+ var nRings = dataView.getUint32(offset, littleEndian);
105
112
  offset += 4;
106
113
  var rings = [];
107
114
  for (var i = 0; i < nRings; i++) {
108
- var parsed = parseLineString(view, offset, dimension, littleEndian);
115
+ var parsed = parseLineString(dataView, offset, dimension, littleEndian);
109
116
  var positions = parsed.geometry.positions;
110
117
  offset = parsed.offset;
111
118
  rings.push(positions.value);
@@ -138,52 +145,52 @@ function parsePolygon(view, offset, dimension, littleEndian) {
138
145
  offset: offset
139
146
  };
140
147
  }
141
- function parseMultiPoint(view, offset, dimension, littleEndian) {
142
- var nPoints = view.getUint32(offset, littleEndian);
148
+ function parseMultiPoint(dataView, offset, dimension, littleEndian) {
149
+ var nPoints = dataView.getUint32(offset, littleEndian);
143
150
  offset += 4;
144
151
  var binaryPointGeometries = [];
145
152
  for (var i = 0; i < nPoints; i++) {
146
- var littleEndianPoint = view.getUint8(offset) === 1;
153
+ var littleEndianPoint = dataView.getUint8(offset) === 1;
147
154
  offset++;
148
- if (view.getUint32(offset, littleEndianPoint) % 1000 !== 1) {
155
+ if (dataView.getUint32(offset, littleEndianPoint) % 1000 !== 1) {
149
156
  throw new Error('WKB: Inner geometries of MultiPoint not of type Point');
150
157
  }
151
158
  offset += 4;
152
- var parsed = parsePoint(view, offset, dimension, littleEndianPoint);
159
+ var parsed = parsePoint(dataView, offset, dimension, littleEndianPoint);
153
160
  offset = parsed.offset;
154
161
  binaryPointGeometries.push(parsed.geometry);
155
162
  }
156
163
  return concatenateBinaryPointGeometries(binaryPointGeometries, dimension);
157
164
  }
158
- function parseMultiLineString(view, offset, dimension, littleEndian) {
159
- var nLines = view.getUint32(offset, littleEndian);
165
+ function parseMultiLineString(dataView, offset, dimension, littleEndian) {
166
+ var nLines = dataView.getUint32(offset, littleEndian);
160
167
  offset += 4;
161
168
  var binaryLineGeometries = [];
162
169
  for (var i = 0; i < nLines; i++) {
163
- var littleEndianLine = view.getUint8(offset) === 1;
170
+ var littleEndianLine = dataView.getUint8(offset) === 1;
164
171
  offset++;
165
- if (view.getUint32(offset, littleEndianLine) % 1000 !== 2) {
172
+ if (dataView.getUint32(offset, littleEndianLine) % 1000 !== 2) {
166
173
  throw new Error('WKB: Inner geometries of MultiLineString not of type LineString');
167
174
  }
168
175
  offset += 4;
169
- var parsed = parseLineString(view, offset, dimension, littleEndianLine);
176
+ var parsed = parseLineString(dataView, offset, dimension, littleEndianLine);
170
177
  offset = parsed.offset;
171
178
  binaryLineGeometries.push(parsed.geometry);
172
179
  }
173
180
  return concatenateBinaryLineGeometries(binaryLineGeometries, dimension);
174
181
  }
175
- function parseMultiPolygon(view, offset, dimension, littleEndian) {
176
- var nPolygons = view.getUint32(offset, littleEndian);
182
+ function parseMultiPolygon(dataView, offset, dimension, littleEndian) {
183
+ var nPolygons = dataView.getUint32(offset, littleEndian);
177
184
  offset += 4;
178
185
  var binaryPolygonGeometries = [];
179
186
  for (var i = 0; i < nPolygons; i++) {
180
- var littleEndianPolygon = view.getUint8(offset) === 1;
187
+ var littleEndianPolygon = dataView.getUint8(offset) === 1;
181
188
  offset++;
182
- if (view.getUint32(offset, littleEndianPolygon) % 1000 !== 3) {
189
+ if (dataView.getUint32(offset, littleEndianPolygon) % 1000 !== 3) {
183
190
  throw new Error('WKB: Inner geometries of MultiPolygon not of type Polygon');
184
191
  }
185
192
  offset += 4;
186
- var parsed = parsePolygon(view, offset, dimension, littleEndianPolygon);
193
+ var parsed = parsePolygon(dataView, offset, dimension, littleEndianPolygon);
187
194
  offset = parsed.offset;
188
195
  binaryPolygonGeometries.push(parsed.geometry);
189
196
  }
@@ -1 +1 @@
1
- {"version":3,"file":"parse-wkb.js","names":["NUM_DIMENSIONS","parseWKB","arrayBuffer","view","DataView","offset","littleEndian","getUint8","geometryCode","getUint32","geometryType","type","dimension","point","parsePoint","geometry","line","parseLineString","polygon","parsePolygon","multiPoint","parseMultiPoint","multiLine","parseMultiLineString","multiPolygon","parseMultiPolygon","Error","concat","positions","Float64Array","i","getFloat64","value","size","nPoints","pathIndices","push","Uint16Array","cumulativeSum","sum","nRings","rings","parsed","concatenatedPositions","concatTypedArrays","buffer","polygonIndices","length","primitivePolygonIndices","map","l","unshift","binaryPointGeometries","littleEndianPoint","concatenateBinaryPointGeometries","nLines","binaryLineGeometries","littleEndianLine","concatenateBinaryLineGeometries","nPolygons","binaryPolygonGeometries","littleEndianPolygon","concatenateBinaryPolygonGeometries","lines","polygons","primitivePolygons","_iterator","_createForOfIteratorHelper","_step","s","n","done","binaryPolygon","err","e","f","p","_i","_primitivePolygons","primitivePolygon","apply","_toConsumableArray2","default","filter","x","arrays","byteLength","Uint8Array","byteOffset","data","j"],"sources":["../../../src/lib/parse-wkb.ts"],"sourcesContent":["import type {\n TypedArray,\n BinaryGeometry,\n BinaryPointGeometry,\n BinaryLineGeometry,\n BinaryPolygonGeometry\n} from '@loaders.gl/schema';\n\nconst NUM_DIMENSIONS = {\n 0: 2, // 2D\n 1: 3, // 3D (Z)\n 2: 3, // 3D (M)\n 3: 4 // 4D (ZM)\n};\n\nexport default function parseWKB(arrayBuffer: ArrayBuffer): BinaryGeometry {\n const view = new DataView(arrayBuffer);\n let offset = 0;\n\n // Check endianness of data\n const littleEndian = view.getUint8(offset) === 1;\n offset++;\n\n // 4-digit code representing dimension and type of geometry\n const geometryCode = view.getUint32(offset, littleEndian);\n offset += 4;\n\n const geometryType = geometryCode % 1000;\n const type = ((geometryCode - geometryType) / 1000) as 0 | 1 | 2 | 3;\n const dimension = NUM_DIMENSIONS[type];\n\n switch (geometryType) {\n case 1:\n const point = parsePoint(view, offset, dimension, littleEndian);\n return point.geometry;\n case 2:\n const line = parseLineString(view, offset, dimension, littleEndian);\n return line.geometry;\n case 3:\n const polygon = parsePolygon(view, offset, dimension, littleEndian);\n return polygon.geometry;\n case 4:\n const multiPoint = parseMultiPoint(view, offset, dimension, littleEndian);\n multiPoint.type = 'Point';\n return multiPoint;\n case 5:\n const multiLine = parseMultiLineString(view, offset, dimension, littleEndian);\n multiLine.type = 'LineString';\n return multiLine;\n case 6:\n const multiPolygon = parseMultiPolygon(view, offset, dimension, littleEndian);\n multiPolygon.type = 'Polygon';\n return multiPolygon;\n // case 7:\n // TODO: handle GeometryCollections\n // return parseGeometryCollection(view, offset, dimension, littleEndian);\n default:\n throw new Error(`WKB: Unsupported geometry type: ${geometryType}`);\n }\n}\n\n// Primitives; parse point and linear ring\nfunction parsePoint(\n view: DataView,\n offset: number,\n dimension: number,\n littleEndian: boolean\n): {geometry: BinaryPointGeometry; offset: number} {\n const positions = new Float64Array(dimension);\n for (let i = 0; i < dimension; i++) {\n positions[i] = view.getFloat64(offset, littleEndian);\n offset += 8;\n }\n\n return {\n geometry: {type: 'Point', positions: {value: positions, size: dimension}},\n offset\n };\n}\n\nfunction parseLineString(\n view: DataView,\n offset: number,\n dimension: number,\n littleEndian: boolean\n): {geometry: BinaryLineGeometry; offset: number} {\n const nPoints = view.getUint32(offset, littleEndian);\n offset += 4;\n\n // Instantiate array\n const positions = new Float64Array(nPoints * dimension);\n for (let i = 0; i < nPoints * dimension; i++) {\n positions[i] = view.getFloat64(offset, littleEndian);\n offset += 8;\n }\n\n const pathIndices = [0];\n if (nPoints > 0) {\n pathIndices.push(nPoints);\n }\n\n return {\n geometry: {\n type: 'LineString',\n positions: {value: positions, size: dimension},\n pathIndices: {value: new Uint16Array(pathIndices), size: 1}\n },\n offset\n };\n}\n\n// https://stackoverflow.com/a/55261098\nconst cumulativeSum = (sum: number) => (value: number) => (sum += value);\n\nfunction parsePolygon(\n view: DataView,\n offset: number,\n dimension: number,\n littleEndian: boolean\n): {geometry: BinaryPolygonGeometry; offset: number} {\n const nRings = view.getUint32(offset, littleEndian);\n offset += 4;\n\n const rings: TypedArray[] = [];\n for (let i = 0; i < nRings; i++) {\n const parsed = parseLineString(view, offset, dimension, littleEndian);\n const {positions} = parsed.geometry;\n offset = parsed.offset;\n rings.push(positions.value);\n }\n\n const concatenatedPositions = new Float64Array(concatTypedArrays(rings).buffer);\n const polygonIndices = [0];\n if (concatenatedPositions.length > 0) {\n polygonIndices.push(concatenatedPositions.length / dimension);\n }\n const primitivePolygonIndices = rings.map((l) => l.length / dimension).map(cumulativeSum(0));\n primitivePolygonIndices.unshift(0);\n\n return {\n geometry: {\n type: 'Polygon',\n positions: {value: concatenatedPositions, size: dimension},\n polygonIndices: {\n value: new Uint16Array(polygonIndices),\n size: 1\n },\n primitivePolygonIndices: {value: new Uint16Array(primitivePolygonIndices), size: 1}\n },\n offset\n };\n}\n\nfunction parseMultiPoint(\n view: DataView,\n offset: number,\n dimension: number,\n littleEndian: boolean\n): BinaryPointGeometry {\n const nPoints = view.getUint32(offset, littleEndian);\n offset += 4;\n\n const binaryPointGeometries: BinaryPointGeometry[] = [];\n for (let i = 0; i < nPoints; i++) {\n // Byte order for point\n const littleEndianPoint = view.getUint8(offset) === 1;\n offset++;\n\n // Assert point type\n if (view.getUint32(offset, littleEndianPoint) % 1000 !== 1) {\n throw new Error('WKB: Inner geometries of MultiPoint not of type Point');\n }\n\n offset += 4;\n\n const parsed = parsePoint(view, offset, dimension, littleEndianPoint);\n offset = parsed.offset;\n binaryPointGeometries.push(parsed.geometry);\n }\n\n return concatenateBinaryPointGeometries(binaryPointGeometries, dimension);\n}\n\nfunction parseMultiLineString(\n view: DataView,\n offset: number,\n dimension: number,\n littleEndian: boolean\n): BinaryLineGeometry {\n const nLines = view.getUint32(offset, littleEndian);\n offset += 4;\n\n const binaryLineGeometries: BinaryLineGeometry[] = [];\n for (let i = 0; i < nLines; i++) {\n // Byte order for line\n const littleEndianLine = view.getUint8(offset) === 1;\n offset++;\n\n // Assert type LineString\n if (view.getUint32(offset, littleEndianLine) % 1000 !== 2) {\n throw new Error('WKB: Inner geometries of MultiLineString not of type LineString');\n }\n offset += 4;\n\n const parsed = parseLineString(view, offset, dimension, littleEndianLine);\n offset = parsed.offset;\n binaryLineGeometries.push(parsed.geometry);\n }\n\n return concatenateBinaryLineGeometries(binaryLineGeometries, dimension);\n}\n\nfunction parseMultiPolygon(\n view: DataView,\n offset: number,\n dimension: number,\n littleEndian: boolean\n): BinaryPolygonGeometry {\n const nPolygons = view.getUint32(offset, littleEndian);\n offset += 4;\n\n const binaryPolygonGeometries: BinaryPolygonGeometry[] = [];\n for (let i = 0; i < nPolygons; i++) {\n // Byte order for polygon\n const littleEndianPolygon = view.getUint8(offset) === 1;\n offset++;\n\n // Assert type Polygon\n if (view.getUint32(offset, littleEndianPolygon) % 1000 !== 3) {\n throw new Error('WKB: Inner geometries of MultiPolygon not of type Polygon');\n }\n offset += 4;\n\n const parsed = parsePolygon(view, offset, dimension, littleEndianPolygon);\n offset = parsed.offset;\n binaryPolygonGeometries.push(parsed.geometry);\n }\n\n return concatenateBinaryPolygonGeometries(binaryPolygonGeometries, dimension);\n}\n\n// TODO - move to loaders.gl/schema/gis\n\nfunction concatenateBinaryPointGeometries(\n binaryPointGeometries: BinaryPointGeometry[],\n dimension: number\n): BinaryPointGeometry {\n const positions: TypedArray[] = binaryPointGeometries.map((geometry) => geometry.positions.value);\n const concatenatedPositions = new Float64Array(concatTypedArrays(positions).buffer);\n\n return {\n type: 'Point',\n positions: {value: concatenatedPositions, size: dimension}\n };\n}\n\nfunction concatenateBinaryLineGeometries(\n binaryLineGeometries: BinaryLineGeometry[],\n dimension: number\n): BinaryLineGeometry {\n const lines: TypedArray[] = binaryLineGeometries.map((geometry) => geometry.positions.value);\n const concatenatedPositions = new Float64Array(concatTypedArrays(lines).buffer);\n const pathIndices = lines.map((line) => line.length / dimension).map(cumulativeSum(0));\n pathIndices.unshift(0);\n\n return {\n type: 'LineString',\n positions: {value: concatenatedPositions, size: dimension},\n pathIndices: {value: new Uint16Array(pathIndices), size: 1}\n };\n}\n\nfunction concatenateBinaryPolygonGeometries(\n binaryPolygonGeometries: BinaryPolygonGeometry[],\n dimension: number\n): BinaryPolygonGeometry {\n const polygons: TypedArray[] = [];\n const primitivePolygons: TypedArray[] = [];\n\n for (const binaryPolygon of binaryPolygonGeometries) {\n const {positions, primitivePolygonIndices} = binaryPolygon;\n polygons.push(positions.value);\n primitivePolygons.push(primitivePolygonIndices.value);\n }\n\n const concatenatedPositions = new Float64Array(concatTypedArrays(polygons).buffer);\n const polygonIndices = polygons.map((p) => p.length / dimension).map(cumulativeSum(0));\n polygonIndices.unshift(0);\n\n // Combine primitivePolygonIndices from each individual polygon\n const primitivePolygonIndices = [0];\n for (const primitivePolygon of primitivePolygons) {\n primitivePolygonIndices.push(\n ...primitivePolygon\n .filter((x: number) => x > 0)\n .map((x: number) => x + primitivePolygonIndices[primitivePolygonIndices.length - 1])\n );\n }\n\n return {\n type: 'Polygon',\n positions: {value: concatenatedPositions, size: dimension},\n polygonIndices: {value: new Uint16Array(polygonIndices), size: 1},\n primitivePolygonIndices: {value: new Uint16Array(primitivePolygonIndices), size: 1}\n };\n}\n\n// TODO: remove copy; import from typed-array-utils\n// modules/math/src/geometry/typed-arrays/typed-array-utils.js\nfunction concatTypedArrays(arrays: TypedArray[]): TypedArray {\n let byteLength = 0;\n for (let i = 0; i < arrays.length; ++i) {\n byteLength += arrays[i].byteLength;\n }\n const buffer = new Uint8Array(byteLength);\n\n let byteOffset = 0;\n for (let i = 0; i < arrays.length; ++i) {\n const data = new Uint8Array(arrays[i].buffer);\n byteLength = data.length;\n for (let j = 0; j < byteLength; ++j) {\n buffer[byteOffset++] = data[j];\n }\n }\n return buffer;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"parse-wkb.js","names":["_gis","require","_parseWkbHeader","_createForOfIteratorHelper","o","allowArrayLike","it","Symbol","iterator","Array","isArray","_unsupportedIterableToArray","length","i","F","s","n","done","value","e","_e","f","TypeError","normalCompletion","didErr","err","call","step","next","_e2","return","minLen","_arrayLikeToArray","Object","prototype","toString","slice","constructor","name","from","test","arr","len","arr2","parseWKB","arrayBuffer","options","_options$wkb","binaryGeometry","parseWKBToBinary","shape","wkb","binaryToGeometry","Error","dataView","DataView","wkbHeader","parseWKBHeader","geometryType","dimensions","littleEndian","offset","byteOffset","WKBGeometryType","Point","point","parsePoint","geometry","LineString","line","parseLineString","Polygon","polygon","parsePolygon","MultiPoint","multiPoint","parseMultiPoint","type","MultiLineString","multiLine","parseMultiLineString","MultiPolygon","multiPolygon","parseMultiPolygon","concat","dimension","positions","Float64Array","getFloat64","size","nPoints","getUint32","pathIndices","push","Uint16Array","cumulativeSum","sum","nRings","rings","parsed","concatenatedPositions","concatTypedArrays","buffer","polygonIndices","primitivePolygonIndices","map","l","unshift","binaryPointGeometries","littleEndianPoint","getUint8","concatenateBinaryPointGeometries","nLines","binaryLineGeometries","littleEndianLine","concatenateBinaryLineGeometries","nPolygons","binaryPolygonGeometries","littleEndianPolygon","concatenateBinaryPolygonGeometries","lines","polygons","primitivePolygons","_iterator","_step","binaryPolygon","p","_i","_primitivePolygons","primitivePolygon","apply","_toConsumableArray2","default","filter","x","arrays","byteLength","Uint8Array","data","j"],"sources":["../../../src/lib/parse-wkb.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nimport type {\n TypedArray,\n BinaryGeometry,\n BinaryPointGeometry,\n BinaryLineGeometry,\n BinaryPolygonGeometry,\n Geometry\n} from '@loaders.gl/schema';\nimport {binaryToGeometry} from '@loaders.gl/gis';\nimport type {WKBLoaderOptions} from '../wkb-loader';\n\nimport {parseWKBHeader, WKBGeometryType} from './parse-wkb-header';\n\nexport function parseWKB(\n arrayBuffer: ArrayBuffer,\n options?: WKBLoaderOptions\n): BinaryGeometry | Geometry {\n const binaryGeometry = parseWKBToBinary(arrayBuffer, options);\n const shape = options?.wkb?.shape || 'binary-geometry';\n switch (shape) {\n case 'binary-geometry':\n return binaryGeometry;\n case 'geometry':\n return binaryToGeometry(binaryGeometry);\n default:\n throw new Error(shape);\n }\n}\n\nexport function parseWKBToBinary(\n arrayBuffer: ArrayBuffer,\n options?: WKBLoaderOptions\n): BinaryGeometry {\n const dataView = new DataView(arrayBuffer);\n\n const wkbHeader = parseWKBHeader(dataView);\n\n const {geometryType, dimensions, littleEndian} = wkbHeader;\n const offset = wkbHeader.byteOffset;\n\n switch (geometryType) {\n case WKBGeometryType.Point:\n const point = parsePoint(dataView, offset, dimensions, littleEndian);\n return point.geometry;\n case WKBGeometryType.LineString:\n const line = parseLineString(dataView, offset, dimensions, littleEndian);\n return line.geometry;\n case WKBGeometryType.Polygon:\n const polygon = parsePolygon(dataView, offset, dimensions, littleEndian);\n return polygon.geometry;\n case WKBGeometryType.MultiPoint:\n const multiPoint = parseMultiPoint(dataView, offset, dimensions, littleEndian);\n multiPoint.type = 'Point';\n return multiPoint;\n case WKBGeometryType.MultiLineString:\n const multiLine = parseMultiLineString(dataView, offset, dimensions, littleEndian);\n multiLine.type = 'LineString';\n return multiLine;\n case WKBGeometryType.MultiPolygon:\n const multiPolygon = parseMultiPolygon(dataView, offset, dimensions, littleEndian);\n multiPolygon.type = 'Polygon';\n return multiPolygon;\n // case WKBGeometryType.GeometryCollection:\n // TODO: handle GeometryCollections\n // return parseGeometryCollection(dataView, offset, dimensions, littleEndian);\n default:\n throw new Error(`WKB: Unsupported geometry type: ${geometryType}`);\n }\n}\n\n// Primitives; parse point and linear ring\nfunction parsePoint(\n dataView: DataView,\n offset: number,\n dimension: number,\n littleEndian: boolean\n): {geometry: BinaryPointGeometry; offset: number} {\n const positions = new Float64Array(dimension);\n for (let i = 0; i < dimension; i++) {\n positions[i] = dataView.getFloat64(offset, littleEndian);\n offset += 8;\n }\n\n return {\n geometry: {type: 'Point', positions: {value: positions, size: dimension}},\n offset\n };\n}\n\nfunction parseLineString(\n dataView: DataView,\n offset: number,\n dimension: number,\n littleEndian: boolean\n): {geometry: BinaryLineGeometry; offset: number} {\n const nPoints = dataView.getUint32(offset, littleEndian);\n offset += 4;\n\n // Instantiate array\n const positions = new Float64Array(nPoints * dimension);\n for (let i = 0; i < nPoints * dimension; i++) {\n positions[i] = dataView.getFloat64(offset, littleEndian);\n offset += 8;\n }\n\n const pathIndices = [0];\n if (nPoints > 0) {\n pathIndices.push(nPoints);\n }\n\n return {\n geometry: {\n type: 'LineString',\n positions: {value: positions, size: dimension},\n pathIndices: {value: new Uint16Array(pathIndices), size: 1}\n },\n offset\n };\n}\n\n// https://stackoverflow.com/a/55261098\nconst cumulativeSum = (sum: number) => (value: number) => (sum += value);\n\nfunction parsePolygon(\n dataView: DataView,\n offset: number,\n dimension: number,\n littleEndian: boolean\n): {geometry: BinaryPolygonGeometry; offset: number} {\n const nRings = dataView.getUint32(offset, littleEndian);\n offset += 4;\n\n const rings: TypedArray[] = [];\n for (let i = 0; i < nRings; i++) {\n const parsed = parseLineString(dataView, offset, dimension, littleEndian);\n const {positions} = parsed.geometry;\n offset = parsed.offset;\n rings.push(positions.value);\n }\n\n const concatenatedPositions = new Float64Array(concatTypedArrays(rings).buffer);\n const polygonIndices = [0];\n if (concatenatedPositions.length > 0) {\n polygonIndices.push(concatenatedPositions.length / dimension);\n }\n const primitivePolygonIndices = rings.map((l) => l.length / dimension).map(cumulativeSum(0));\n primitivePolygonIndices.unshift(0);\n\n return {\n geometry: {\n type: 'Polygon',\n positions: {value: concatenatedPositions, size: dimension},\n polygonIndices: {\n value: new Uint16Array(polygonIndices),\n size: 1\n },\n primitivePolygonIndices: {value: new Uint16Array(primitivePolygonIndices), size: 1}\n },\n offset\n };\n}\n\nfunction parseMultiPoint(\n dataView: DataView,\n offset: number,\n dimension: number,\n littleEndian: boolean\n): BinaryPointGeometry {\n const nPoints = dataView.getUint32(offset, littleEndian);\n offset += 4;\n\n const binaryPointGeometries: BinaryPointGeometry[] = [];\n for (let i = 0; i < nPoints; i++) {\n // Byte order for point\n const littleEndianPoint = dataView.getUint8(offset) === 1;\n offset++;\n\n // Assert point type\n if (dataView.getUint32(offset, littleEndianPoint) % 1000 !== 1) {\n throw new Error('WKB: Inner geometries of MultiPoint not of type Point');\n }\n\n offset += 4;\n\n const parsed = parsePoint(dataView, offset, dimension, littleEndianPoint);\n offset = parsed.offset;\n binaryPointGeometries.push(parsed.geometry);\n }\n\n return concatenateBinaryPointGeometries(binaryPointGeometries, dimension);\n}\n\nfunction parseMultiLineString(\n dataView: DataView,\n offset: number,\n dimension: number,\n littleEndian: boolean\n): BinaryLineGeometry {\n const nLines = dataView.getUint32(offset, littleEndian);\n offset += 4;\n\n const binaryLineGeometries: BinaryLineGeometry[] = [];\n for (let i = 0; i < nLines; i++) {\n // Byte order for line\n const littleEndianLine = dataView.getUint8(offset) === 1;\n offset++;\n\n // Assert type LineString\n if (dataView.getUint32(offset, littleEndianLine) % 1000 !== 2) {\n throw new Error('WKB: Inner geometries of MultiLineString not of type LineString');\n }\n offset += 4;\n\n const parsed = parseLineString(dataView, offset, dimension, littleEndianLine);\n offset = parsed.offset;\n binaryLineGeometries.push(parsed.geometry);\n }\n\n return concatenateBinaryLineGeometries(binaryLineGeometries, dimension);\n}\n\nfunction parseMultiPolygon(\n dataView: DataView,\n offset: number,\n dimension: number,\n littleEndian: boolean\n): BinaryPolygonGeometry {\n const nPolygons = dataView.getUint32(offset, littleEndian);\n offset += 4;\n\n const binaryPolygonGeometries: BinaryPolygonGeometry[] = [];\n for (let i = 0; i < nPolygons; i++) {\n // Byte order for polygon\n const littleEndianPolygon = dataView.getUint8(offset) === 1;\n offset++;\n\n // Assert type Polygon\n if (dataView.getUint32(offset, littleEndianPolygon) % 1000 !== 3) {\n throw new Error('WKB: Inner geometries of MultiPolygon not of type Polygon');\n }\n offset += 4;\n\n const parsed = parsePolygon(dataView, offset, dimension, littleEndianPolygon);\n offset = parsed.offset;\n binaryPolygonGeometries.push(parsed.geometry);\n }\n\n return concatenateBinaryPolygonGeometries(binaryPolygonGeometries, dimension);\n}\n\n// TODO - move to loaders.gl/schema/gis\n\nfunction concatenateBinaryPointGeometries(\n binaryPointGeometries: BinaryPointGeometry[],\n dimension: number\n): BinaryPointGeometry {\n const positions: TypedArray[] = binaryPointGeometries.map((geometry) => geometry.positions.value);\n const concatenatedPositions = new Float64Array(concatTypedArrays(positions).buffer);\n\n return {\n type: 'Point',\n positions: {value: concatenatedPositions, size: dimension}\n };\n}\n\nfunction concatenateBinaryLineGeometries(\n binaryLineGeometries: BinaryLineGeometry[],\n dimension: number\n): BinaryLineGeometry {\n const lines: TypedArray[] = binaryLineGeometries.map((geometry) => geometry.positions.value);\n const concatenatedPositions = new Float64Array(concatTypedArrays(lines).buffer);\n const pathIndices = lines.map((line) => line.length / dimension).map(cumulativeSum(0));\n pathIndices.unshift(0);\n\n return {\n type: 'LineString',\n positions: {value: concatenatedPositions, size: dimension},\n pathIndices: {value: new Uint16Array(pathIndices), size: 1}\n };\n}\n\nfunction concatenateBinaryPolygonGeometries(\n binaryPolygonGeometries: BinaryPolygonGeometry[],\n dimension: number\n): BinaryPolygonGeometry {\n const polygons: TypedArray[] = [];\n const primitivePolygons: TypedArray[] = [];\n\n for (const binaryPolygon of binaryPolygonGeometries) {\n const {positions, primitivePolygonIndices} = binaryPolygon;\n polygons.push(positions.value);\n primitivePolygons.push(primitivePolygonIndices.value);\n }\n\n const concatenatedPositions = new Float64Array(concatTypedArrays(polygons).buffer);\n const polygonIndices = polygons.map((p) => p.length / dimension).map(cumulativeSum(0));\n polygonIndices.unshift(0);\n\n // Combine primitivePolygonIndices from each individual polygon\n const primitivePolygonIndices = [0];\n for (const primitivePolygon of primitivePolygons) {\n primitivePolygonIndices.push(\n ...primitivePolygon\n .filter((x: number) => x > 0)\n .map((x: number) => x + primitivePolygonIndices[primitivePolygonIndices.length - 1])\n );\n }\n\n return {\n type: 'Polygon',\n positions: {value: concatenatedPositions, size: dimension},\n polygonIndices: {value: new Uint16Array(polygonIndices), size: 1},\n primitivePolygonIndices: {value: new Uint16Array(primitivePolygonIndices), size: 1}\n };\n}\n\n// TODO: remove copy; import from typed-array-utils\n// modules/math/src/geometry/typed-arrays/typed-array-utils.js\nfunction concatTypedArrays(arrays: TypedArray[]): TypedArray {\n let byteLength = 0;\n for (let i = 0; i < arrays.length; ++i) {\n byteLength += arrays[i].byteLength;\n }\n const buffer = new Uint8Array(byteLength);\n\n let byteOffset = 0;\n for (let i = 0; i < arrays.length; ++i) {\n const data = new Uint8Array(arrays[i].buffer);\n byteLength = data.length;\n for (let j = 0; j < byteLength; ++j) {\n buffer[byteOffset++] = data[j];\n }\n }\n return buffer;\n}\n"],"mappings":"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"}
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.parseWKTCRS = parseWKTCRS;
7
+ function parseWKTCRS(wkt, options) {
8
+ if (options !== null && options !== void 0 && options.debug) {
9
+ console.log('[wktcrs] parse starting with\n', wkt);
10
+ }
11
+ wkt = wkt.replace(/[A-Z][A-Z\d_]+\[/gi, function (match) {
12
+ return "[\"".concat(match.substr(0, match.length - 1), "\",");
13
+ });
14
+ wkt = wkt.replace(/, ?([A-Z][A-Z\d_]+[,\]])/gi, function (match, p1) {
15
+ var varname = p1.substr(0, p1.length - 1);
16
+ return ',' + "\"".concat(options !== null && options !== void 0 && options.raw ? 'raw:' : '').concat(varname, "\"").concat(p1[p1.length - 1]);
17
+ });
18
+ if (options !== null && options !== void 0 && options.raw) {
19
+ wkt = wkt.replace(/, {0,2}(-?[\.\d]+)(?=,|\])/g, function (match, p1) {
20
+ return ',' + "\"".concat(options !== null && options !== void 0 && options.raw ? 'raw:' : '').concat(p1, "\"");
21
+ });
22
+ }
23
+ if (options !== null && options !== void 0 && options.debug) {
24
+ console.log("[wktcrs] json'd wkt: '".concat(wkt, "'"));
25
+ }
26
+ var data;
27
+ try {
28
+ data = JSON.parse(wkt);
29
+ } catch (error) {
30
+ console.error("[wktcrs] failed to parse '".concat(wkt, "'"));
31
+ throw error;
32
+ }
33
+ if (options !== null && options !== void 0 && options.debug) {
34
+ console.log("[wktcrs] json parsed: '".concat(wkt, "'"));
35
+ }
36
+ function process(data, parent) {
37
+ var kw = data[0];
38
+ data.forEach(function (it) {
39
+ if (Array.isArray(it)) {
40
+ process(it, data);
41
+ }
42
+ });
43
+ var kwarr = "MULTIPLE_".concat(kw);
44
+ if (kwarr in parent) {
45
+ parent[kwarr].push(data);
46
+ } else if (kw in parent) {
47
+ parent[kwarr] = [parent[kw], data];
48
+ delete parent[kw];
49
+ } else {
50
+ parent[kw] = data;
51
+ }
52
+ return parent;
53
+ }
54
+ var result = process(data, [data]);
55
+ if (options !== null && options !== void 0 && options.debug) {
56
+ console.log('[wktcrs] parse returning', result);
57
+ }
58
+ if (options !== null && options !== void 0 && options.sort) {
59
+ sort(result, options);
60
+ }
61
+ return result;
62
+ }
63
+ function sort(data, options) {
64
+ var keys = Object.keys(data).filter(function (k) {
65
+ return !/\d+/.test(k);
66
+ });
67
+ var keywords = (options === null || options === void 0 ? void 0 : options.keywords) || [];
68
+ if (!(options !== null && options !== void 0 && options.keywords)) {
69
+ var counts = {};
70
+ if (Array.isArray(data)) {
71
+ data.forEach(function (it) {
72
+ if (Array.isArray(it) && it.length >= 2 && typeof it[1] === 'string') {
73
+ var k = it[0];
74
+ if (!counts[k]) counts[k] = 0;
75
+ counts[k]++;
76
+ }
77
+ });
78
+ for (var k in counts) {
79
+ if (counts[k] > 0) keywords.push(k);
80
+ }
81
+ }
82
+ }
83
+ keys.forEach(function (key) {
84
+ data[key] = sort(data[key]);
85
+ });
86
+ keywords.forEach(function (key) {
87
+ var indices = [];
88
+ var params = [];
89
+ data.forEach(function (item, i) {
90
+ if (Array.isArray(item) && item[0] === key) {
91
+ indices.push(i);
92
+ params.push(item);
93
+ }
94
+ });
95
+ params.sort(function (a, b) {
96
+ a = a[1].toString();
97
+ b = b[1].toString();
98
+ return a < b ? -1 : a > b ? 1 : 0;
99
+ });
100
+ params.forEach(function (param, i) {
101
+ data[indices[i]] = param;
102
+ });
103
+ });
104
+ return data;
105
+ }
106
+ //# sourceMappingURL=parse-wkt-crs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-wkt-crs.js","names":["parseWKTCRS","wkt","options","debug","console","log","replace","match","concat","substr","length","p1","varname","raw","data","JSON","parse","error","process","parent","kw","forEach","it","Array","isArray","kwarr","push","result","sort","keys","Object","filter","k","test","keywords","counts","key","indices","params","item","i","a","b","toString","param"],"sources":["../../../src/lib/parse-wkt-crs.ts"],"sourcesContent":["// loaders.gl, MIT license\n// parse-wkt-crs was forked from https://github.com/DanielJDufour/wkt-crs under Creative Commons CC0 1.0 license.\n\n/* eslint-disable no-console */ // TODO switch to options.log\n\nexport type ParseWKTCRSOptions = {\n sort?: boolean;\n keywords?: string[];\n raw?: boolean;\n debug?: boolean;\n};\n\nexport type WKTCRS = any;\n\n/**\n *\n * @param wkt\n * @param options\n * @returns\n */\nexport function parseWKTCRS(wkt: string, options?: ParseWKTCRSOptions): WKTCRS {\n if (options?.debug) {\n console.log('[wktcrs] parse starting with\\n', wkt);\n }\n\n // move all keywords into first array item slot\n // from PARAM[12345, 67890] to [\"PARAM\", 12345, 67890]\n wkt = wkt.replace(/[A-Z][A-Z\\d_]+\\[/gi, (match) => `[\"${match.substr(0, match.length - 1)}\",`);\n\n // wrap variables in strings\n // from [...,NORTH] to [...,\"NORTH\"]\n wkt = wkt.replace(/, ?([A-Z][A-Z\\d_]+[,\\]])/gi, (match, p1) => {\n const varname = p1.substr(0, p1.length - 1);\n return ',' + `\"${options?.raw ? 'raw:' : ''}${varname}\"${p1[p1.length - 1]}`;\n });\n\n if (options?.raw) {\n // replace all numbers with strings\n wkt = wkt.replace(/, {0,2}(-?[\\.\\d]+)(?=,|\\])/g, function (match, p1) {\n return ',' + `\"${options?.raw ? 'raw:' : ''}${p1}\"`;\n });\n }\n\n // str should now be valid JSON\n if (options?.debug) {\n console.log(`[wktcrs] json'd wkt: '${wkt}'`);\n }\n\n let data;\n try {\n data = JSON.parse(wkt);\n } catch (error) {\n console.error(`[wktcrs] failed to parse '${wkt}'`);\n throw error;\n }\n\n if (options?.debug) {\n console.log(`[wktcrs] json parsed: '${wkt}'`);\n }\n\n function process(data, parent) {\n const kw = data[0];\n\n // after removing the first element with .shift()\n // data is now just an array of attributes\n\n data.forEach(function (it) {\n if (Array.isArray(it)) {\n process(it, data);\n }\n });\n\n const kwarr = `MULTIPLE_${kw}`;\n\n if (kwarr in parent) {\n parent[kwarr].push(data);\n } else if (kw in parent) {\n parent[kwarr] = [parent[kw], data];\n delete parent[kw];\n } else {\n parent[kw] = data;\n }\n return parent;\n }\n\n const result = process(data, [data]);\n if (options?.debug) {\n console.log('[wktcrs] parse returning', result);\n }\n\n if (options?.sort) {\n sort(result, options);\n }\n\n return result;\n}\n\nfunction sort(data: string[], options?: {keywords?: string[]}) {\n const keys = Object.keys(data).filter((k) => !/\\d+/.test(k));\n\n const keywords: string[] = options?.keywords || [];\n if (!options?.keywords) {\n // try to find multiples\n const counts = {};\n if (Array.isArray(data)) {\n data.forEach((it) => {\n if (Array.isArray(it) && it.length >= 2 && typeof it[1] === 'string') {\n const k = it[0];\n if (!counts[k]) counts[k] = 0;\n counts[k]++;\n }\n });\n for (const k in counts) {\n if (counts[k] > 0) keywords.push(k);\n }\n }\n }\n\n keys.forEach((key) => {\n data[key] = sort(data[key]);\n });\n\n keywords.forEach((key) => {\n const indices: number[] = [];\n const params: string[] = [];\n\n data.forEach((item, i) => {\n if (Array.isArray(item) && item[0] === key) {\n indices.push(i);\n params.push(item);\n }\n });\n\n params.sort((a, b) => {\n a = a[1].toString();\n b = b[1].toString();\n return a < b ? -1 : a > b ? 1 : 0;\n });\n\n // replace in order\n params.forEach((param, i) => {\n data[indices[i]] = param;\n });\n });\n\n return data;\n}\n"],"mappings":"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"}