@loaders.gl/gis 4.3.4 → 4.4.0-alpha.10

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 (209) hide show
  1. package/dist/index.cjs +2411 -469
  2. package/dist/index.cjs.map +4 -4
  3. package/dist/index.d.ts +31 -12
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +39 -15
  6. package/dist/index.js.map +1 -0
  7. package/dist/lib/binary-geometry-api/binary-geometry-info.d.ts +21 -0
  8. package/dist/lib/binary-geometry-api/binary-geometry-info.d.ts.map +1 -0
  9. package/dist/lib/binary-geometry-api/binary-geometry-info.js +49 -0
  10. package/dist/lib/binary-geometry-api/binary-geometry-info.js.map +1 -0
  11. package/dist/lib/binary-geometry-api/concat-binary-geometry.d.ts +5 -0
  12. package/dist/lib/binary-geometry-api/concat-binary-geometry.d.ts.map +1 -0
  13. package/dist/lib/binary-geometry-api/concat-binary-geometry.js +51 -0
  14. package/dist/lib/binary-geometry-api/concat-binary-geometry.js.map +1 -0
  15. package/dist/lib/{binary-features/transform.d.ts → binary-geometry-api/transform-coordinates.d.ts} +1 -2
  16. package/dist/lib/binary-geometry-api/transform-coordinates.d.ts.map +1 -0
  17. package/dist/lib/{binary-features/transform.js → binary-geometry-api/transform-coordinates.js} +1 -1
  18. package/dist/lib/binary-geometry-api/transform-coordinates.js.map +1 -0
  19. package/dist/lib/feature-collection-converters/convert-binary-features-to-geojson.d.ts +16 -0
  20. package/dist/lib/feature-collection-converters/convert-binary-features-to-geojson.d.ts.map +1 -0
  21. package/dist/lib/{binary-features/binary-to-geojson.js → feature-collection-converters/convert-binary-features-to-geojson.js} +4 -90
  22. package/dist/lib/feature-collection-converters/convert-binary-features-to-geojson.js.map +1 -0
  23. package/dist/lib/{binary-features/flat-geojson-to-binary.d.ts → feature-collection-converters/convert-flat-geojson-to-binary-features.d.ts} +6 -9
  24. package/dist/lib/feature-collection-converters/convert-flat-geojson-to-binary-features.d.ts.map +1 -0
  25. package/dist/lib/{binary-features/flat-geojson-to-binary.js → feature-collection-converters/convert-flat-geojson-to-binary-features.js} +6 -5
  26. package/dist/lib/feature-collection-converters/convert-flat-geojson-to-binary-features.js.map +1 -0
  27. package/dist/lib/feature-collection-converters/convert-geoarrow-to-binary-features.d.ts +74 -0
  28. package/dist/lib/feature-collection-converters/convert-geoarrow-to-binary-features.d.ts.map +1 -0
  29. package/dist/lib/feature-collection-converters/convert-geoarrow-to-binary-features.js +378 -0
  30. package/dist/lib/feature-collection-converters/convert-geoarrow-to-binary-features.js.map +1 -0
  31. package/dist/lib/{binary-features/geojson-to-binary.d.ts → feature-collection-converters/convert-geojson-to-binary-features.d.ts} +2 -2
  32. package/dist/lib/feature-collection-converters/convert-geojson-to-binary-features.d.ts.map +1 -0
  33. package/dist/lib/feature-collection-converters/convert-geojson-to-binary-features.js +25 -0
  34. package/dist/lib/feature-collection-converters/convert-geojson-to-binary-features.js.map +1 -0
  35. package/dist/lib/{binary-features/geojson-to-flat-geojson.d.ts → feature-collection-converters/convert-geojson-to-flat-geojson.d.ts} +2 -2
  36. package/dist/lib/feature-collection-converters/convert-geojson-to-flat-geojson.d.ts.map +1 -0
  37. package/dist/lib/{binary-features/geojson-to-flat-geojson.js → feature-collection-converters/convert-geojson-to-flat-geojson.js} +5 -1
  38. package/dist/lib/feature-collection-converters/convert-geojson-to-flat-geojson.js.map +1 -0
  39. package/dist/lib/feature-collection-converters/helpers/flat-geojson-to-binary-types.d.ts.map +1 -0
  40. package/dist/lib/feature-collection-converters/helpers/flat-geojson-to-binary-types.js +5 -0
  41. package/dist/lib/feature-collection-converters/helpers/flat-geojson-to-binary-types.js.map +1 -0
  42. package/dist/lib/geometry-api/geometry-info.d.ts +21 -0
  43. package/dist/lib/geometry-api/geometry-info.d.ts.map +1 -0
  44. package/dist/lib/{binary-features/extract-geometry-info.js → geometry-api/geometry-info.js} +5 -1
  45. package/dist/lib/geometry-api/geometry-info.js.map +1 -0
  46. package/dist/lib/geometry-converters/convert-binary-geometry-to-geojson.d.ts +4 -0
  47. package/dist/lib/geometry-converters/convert-binary-geometry-to-geojson.d.ts.map +1 -0
  48. package/dist/lib/geometry-converters/convert-binary-geometry-to-geojson.js +92 -0
  49. package/dist/lib/geometry-converters/convert-binary-geometry-to-geojson.js.map +1 -0
  50. package/dist/lib/geometry-converters/convert-geoarrow-to-geojson.d.ts +13 -0
  51. package/dist/lib/geometry-converters/convert-geoarrow-to-geojson.d.ts.map +1 -0
  52. package/dist/lib/geometry-converters/convert-geoarrow-to-geojson.js +165 -0
  53. package/dist/lib/geometry-converters/convert-geoarrow-to-geojson.js.map +1 -0
  54. package/dist/lib/geometry-converters/convert-to-geojson.d.ts +6 -0
  55. package/dist/lib/geometry-converters/convert-to-geojson.d.ts.map +1 -0
  56. package/dist/lib/geometry-converters/convert-to-geojson.js +40 -0
  57. package/dist/lib/geometry-converters/convert-to-geojson.js.map +1 -0
  58. package/dist/lib/geometry-converters/wkb/convert-geometry-to-twkb.d.ts +6 -0
  59. package/dist/lib/geometry-converters/wkb/convert-geometry-to-twkb.d.ts.map +1 -0
  60. package/dist/lib/geometry-converters/wkb/convert-geometry-to-twkb.js +196 -0
  61. package/dist/lib/geometry-converters/wkb/convert-geometry-to-twkb.js.map +1 -0
  62. package/dist/lib/geometry-converters/wkb/convert-geometry-to-wkb.d.ts +9 -0
  63. package/dist/lib/geometry-converters/wkb/convert-geometry-to-wkb.d.ts.map +1 -0
  64. package/dist/lib/geometry-converters/wkb/convert-geometry-to-wkb.js +274 -0
  65. package/dist/lib/geometry-converters/wkb/convert-geometry-to-wkb.js.map +1 -0
  66. package/dist/lib/geometry-converters/wkb/convert-geometry-to-wkt.d.ts +8 -0
  67. package/dist/lib/geometry-converters/wkb/convert-geometry-to-wkt.d.ts.map +1 -0
  68. package/dist/lib/geometry-converters/wkb/convert-geometry-to-wkt.js +45 -0
  69. package/dist/lib/geometry-converters/wkb/convert-geometry-to-wkt.js.map +1 -0
  70. package/dist/lib/geometry-converters/wkb/convert-twkb-to-geometry.d.ts +10 -0
  71. package/dist/lib/geometry-converters/wkb/convert-twkb-to-geometry.d.ts.map +1 -0
  72. package/dist/lib/geometry-converters/wkb/convert-twkb-to-geometry.js +255 -0
  73. package/dist/lib/geometry-converters/wkb/convert-twkb-to-geometry.js.map +1 -0
  74. package/dist/lib/geometry-converters/wkb/convert-wkb-to-binary-geometry.d.ts +3 -0
  75. package/dist/lib/geometry-converters/wkb/convert-wkb-to-binary-geometry.d.ts.map +1 -0
  76. package/dist/lib/geometry-converters/wkb/convert-wkb-to-binary-geometry.js +165 -0
  77. package/dist/lib/geometry-converters/wkb/convert-wkb-to-binary-geometry.js.map +1 -0
  78. package/dist/lib/geometry-converters/wkb/convert-wkb-to-geometry.d.ts +11 -0
  79. package/dist/lib/geometry-converters/wkb/convert-wkb-to-geometry.d.ts.map +1 -0
  80. package/dist/lib/geometry-converters/wkb/convert-wkb-to-geometry.js +10 -0
  81. package/dist/lib/geometry-converters/wkb/convert-wkb-to-geometry.js.map +1 -0
  82. package/dist/lib/geometry-converters/wkb/convert-wkt-to-geometry.d.ts +16 -0
  83. package/dist/lib/geometry-converters/wkb/convert-wkt-to-geometry.d.ts.map +1 -0
  84. package/dist/lib/geometry-converters/wkb/convert-wkt-to-geometry.js +259 -0
  85. package/dist/lib/geometry-converters/wkb/convert-wkt-to-geometry.js.map +1 -0
  86. package/dist/lib/geometry-converters/wkb/helpers/parse-wkb-header.d.ts +43 -0
  87. package/dist/lib/geometry-converters/wkb/helpers/parse-wkb-header.d.ts.map +1 -0
  88. package/dist/lib/geometry-converters/wkb/helpers/parse-wkb-header.js +175 -0
  89. package/dist/lib/geometry-converters/wkb/helpers/parse-wkb-header.js.map +1 -0
  90. package/dist/lib/geometry-converters/wkb/helpers/wkb-types.d.ts +64 -0
  91. package/dist/lib/geometry-converters/wkb/helpers/wkb-types.d.ts.map +1 -0
  92. package/dist/lib/geometry-converters/wkb/helpers/wkb-types.js +47 -0
  93. package/dist/lib/geometry-converters/wkb/helpers/wkb-types.js.map +1 -0
  94. package/dist/lib/geometry-converters/wkb/helpers/wkb-utils.d.ts +21 -0
  95. package/dist/lib/geometry-converters/wkb/helpers/wkb-utils.d.ts.map +1 -0
  96. package/dist/lib/geometry-converters/wkb/helpers/wkb-utils.js +65 -0
  97. package/dist/lib/geometry-converters/wkb/helpers/wkb-utils.js.map +1 -0
  98. package/dist/lib/geometry-converters/wkb/helpers/write-wkb-header.d.ts +8 -0
  99. package/dist/lib/geometry-converters/wkb/helpers/write-wkb-header.d.ts.map +1 -0
  100. package/dist/lib/geometry-converters/wkb/helpers/write-wkb-header.js +34 -0
  101. package/dist/lib/geometry-converters/wkb/helpers/write-wkb-header.js.map +1 -0
  102. package/dist/lib/table-converters/convert-geoarrow-table.d.ts +27 -0
  103. package/dist/lib/table-converters/convert-geoarrow-table.d.ts.map +1 -0
  104. package/dist/lib/table-converters/convert-geoarrow-table.js +155 -0
  105. package/dist/lib/table-converters/convert-geoarrow-table.js.map +1 -0
  106. package/dist/lib/table-converters/convert-wkb-table-to-geojson.d.ts +4 -0
  107. package/dist/lib/table-converters/convert-wkb-table-to-geojson.d.ts.map +1 -0
  108. package/dist/lib/{tables/convert-table-to-geojson.js → table-converters/convert-wkb-table-to-geojson.js} +11 -16
  109. package/dist/lib/table-converters/convert-wkb-table-to-geojson.js.map +1 -0
  110. package/dist/lib/table-converters/make-arrow-batch-iterator.d.ts +6 -0
  111. package/dist/lib/table-converters/make-arrow-batch-iterator.d.ts.map +1 -0
  112. package/dist/lib/table-converters/make-arrow-batch-iterator.js +36 -0
  113. package/dist/lib/table-converters/make-arrow-batch-iterator.js.map +1 -0
  114. package/dist/lib/utils/base64-encoder.d.ts +5 -0
  115. package/dist/lib/utils/base64-encoder.d.ts.map +1 -0
  116. package/dist/lib/utils/base64-encoder.js +154 -0
  117. package/dist/lib/utils/base64-encoder.js.map +1 -0
  118. package/dist/lib/utils/binary-reader.d.ts +18 -0
  119. package/dist/lib/utils/binary-reader.d.ts.map +1 -0
  120. package/dist/lib/utils/binary-reader.js +70 -0
  121. package/dist/lib/utils/binary-reader.js.map +1 -0
  122. package/dist/lib/utils/binary-writer.d.ts +30 -0
  123. package/dist/lib/utils/binary-writer.d.ts.map +1 -0
  124. package/dist/lib/utils/binary-writer.js +128 -0
  125. package/dist/lib/utils/binary-writer.js.map +1 -0
  126. package/dist/lib/utils/concat-typed-arrays.d.ts +3 -0
  127. package/dist/lib/utils/concat-typed-arrays.d.ts.map +1 -0
  128. package/dist/lib/utils/concat-typed-arrays.js +19 -0
  129. package/dist/lib/utils/concat-typed-arrays.js.map +1 -0
  130. package/dist/lib/utils/hex-encoder.d.ts +15 -0
  131. package/dist/lib/utils/hex-encoder.d.ts.map +1 -0
  132. package/dist/lib/utils/hex-encoder.js +55 -0
  133. package/dist/lib/utils/hex-encoder.js.map +1 -0
  134. package/dist/lib/utils/hex-transcoder.d.ts +15 -0
  135. package/dist/lib/utils/hex-transcoder.d.ts.map +1 -0
  136. package/dist/lib/utils/hex-transcoder.js +51 -0
  137. package/dist/lib/utils/hex-transcoder.js.map +1 -0
  138. package/dist/lib/wkt-crs/encode-wkt-crs.d.ts +10 -0
  139. package/dist/lib/wkt-crs/encode-wkt-crs.d.ts.map +1 -0
  140. package/dist/lib/wkt-crs/encode-wkt-crs.js +36 -0
  141. package/dist/lib/wkt-crs/encode-wkt-crs.js.map +1 -0
  142. package/dist/lib/wkt-crs/parse-wkt-crs.d.ts +15 -0
  143. package/dist/lib/wkt-crs/parse-wkt-crs.d.ts.map +1 -0
  144. package/dist/lib/wkt-crs/parse-wkt-crs.js +121 -0
  145. package/dist/lib/wkt-crs/parse-wkt-crs.js.map +1 -0
  146. package/package.json +7 -5
  147. package/src/index.ts +87 -14
  148. package/src/lib/binary-geometry-api/binary-geometry-info.ts +75 -0
  149. package/src/lib/binary-geometry-api/concat-binary-geometry.ts +78 -0
  150. package/src/lib/{binary-features/transform.ts → binary-geometry-api/transform-coordinates.ts} +0 -1
  151. package/src/lib/{binary-features/binary-to-geojson.ts → feature-collection-converters/convert-binary-features-to-geojson.ts} +5 -142
  152. package/src/lib/{binary-features/flat-geojson-to-binary.ts → feature-collection-converters/convert-flat-geojson-to-binary-features.ts} +14 -9
  153. package/src/lib/feature-collection-converters/convert-geoarrow-to-binary-features.ts +496 -0
  154. package/src/lib/{binary-features/geojson-to-binary.ts → feature-collection-converters/convert-geojson-to-binary-features.ts} +11 -7
  155. package/src/lib/{binary-features/geojson-to-flat-geojson.ts → feature-collection-converters/convert-geojson-to-flat-geojson.ts} +5 -1
  156. package/src/lib/{binary-features → feature-collection-converters/helpers}/flat-geojson-to-binary-types.ts +4 -0
  157. package/src/lib/{binary-features/extract-geometry-info.ts → geometry-api/geometry-info.ts} +20 -2
  158. package/src/lib/geometry-converters/convert-binary-geometry-to-geojson.ts +148 -0
  159. package/src/lib/geometry-converters/convert-geoarrow-to-geojson.ts +193 -0
  160. package/src/lib/geometry-converters/convert-to-geojson.ts +52 -0
  161. package/src/lib/geometry-converters/wkb/convert-geometry-to-twkb.ts +308 -0
  162. package/src/lib/geometry-converters/wkb/convert-geometry-to-wkb.ts +365 -0
  163. package/src/lib/geometry-converters/wkb/convert-geometry-to-wkt.ts +54 -0
  164. package/src/lib/geometry-converters/wkb/convert-twkb-to-geometry.ts +366 -0
  165. package/src/lib/geometry-converters/wkb/convert-wkb-to-binary-geometry.ts +238 -0
  166. package/src/lib/geometry-converters/wkb/convert-wkb-to-geometry.ts +23 -0
  167. package/src/lib/geometry-converters/wkb/convert-wkt-to-geometry.ts +294 -0
  168. package/src/lib/geometry-converters/wkb/helpers/parse-wkb-header.ts +213 -0
  169. package/src/lib/geometry-converters/wkb/helpers/wkb-types.ts +82 -0
  170. package/src/lib/geometry-converters/wkb/helpers/wkb-utils.ts +85 -0
  171. package/src/lib/geometry-converters/wkb/helpers/write-wkb-header.ts +41 -0
  172. package/src/lib/table-converters/convert-geoarrow-table.ts +218 -0
  173. package/src/lib/{tables/convert-table-to-geojson.ts → table-converters/convert-wkb-table-to-geojson.ts} +10 -23
  174. package/src/lib/table-converters/make-arrow-batch-iterator.ts +53 -0
  175. package/src/lib/utils/base64-encoder.ts +157 -0
  176. package/src/lib/utils/binary-reader.ts +76 -0
  177. package/src/lib/utils/binary-writer.ts +136 -0
  178. package/src/lib/utils/concat-typed-arrays.ts +24 -0
  179. package/src/lib/utils/hex-encoder.ts +60 -0
  180. package/src/lib/utils/hex-transcoder.ts +54 -0
  181. package/src/lib/wkt-crs/encode-wkt-crs.ts +41 -0
  182. package/src/lib/wkt-crs/parse-wkt-crs.ts +149 -0
  183. package/dist/lib/binary-features/binary-to-geojson.d.ts +0 -18
  184. package/dist/lib/binary-features/binary-to-geojson.d.ts.map +0 -1
  185. package/dist/lib/binary-features/extract-geometry-info.d.ts +0 -8
  186. package/dist/lib/binary-features/extract-geometry-info.d.ts.map +0 -1
  187. package/dist/lib/binary-features/flat-geojson-to-binary-types.d.ts.map +0 -1
  188. package/dist/lib/binary-features/flat-geojson-to-binary-types.js +0 -1
  189. package/dist/lib/binary-features/flat-geojson-to-binary.d.ts.map +0 -1
  190. package/dist/lib/binary-features/geojson-to-binary.d.ts.map +0 -1
  191. package/dist/lib/binary-features/geojson-to-binary.js +0 -21
  192. package/dist/lib/binary-features/geojson-to-flat-geojson.d.ts.map +0 -1
  193. package/dist/lib/binary-features/transform.d.ts.map +0 -1
  194. package/dist/lib/geo/geoarrow-metadata.d.ts +0 -27
  195. package/dist/lib/geo/geoarrow-metadata.d.ts.map +0 -1
  196. package/dist/lib/geo/geoarrow-metadata.js +0 -70
  197. package/dist/lib/geo/geoparquet-metadata-schema.d.ts +0 -79
  198. package/dist/lib/geo/geoparquet-metadata-schema.d.ts.map +0 -1
  199. package/dist/lib/geo/geoparquet-metadata-schema.js +0 -69
  200. package/dist/lib/geo/geoparquet-metadata.d.ts +0 -45
  201. package/dist/lib/geo/geoparquet-metadata.d.ts.map +0 -1
  202. package/dist/lib/geo/geoparquet-metadata.js +0 -117
  203. package/dist/lib/tables/convert-table-to-geojson.d.ts +0 -5
  204. package/dist/lib/tables/convert-table-to-geojson.d.ts.map +0 -1
  205. package/src/lib/geo/geoarrow-metadata.ts +0 -100
  206. package/src/lib/geo/geoparquet-metadata-schema.json +0 -60
  207. package/src/lib/geo/geoparquet-metadata-schema.ts +0 -71
  208. package/src/lib/geo/geoparquet-metadata.ts +0 -191
  209. /package/dist/lib/{binary-features → feature-collection-converters/helpers}/flat-geojson-to-binary-types.d.ts +0 -0
@@ -0,0 +1,175 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ import { EWKB_FLAG_Z, EWKB_FLAG_M, EWKB_FLAG_SRID, MAX_SRID, WKT_MAGIC_STRINGS, WKT_MAGIC_BYTES } from "./wkb-types.js";
5
+ /**
6
+ * Check if a string is WKT.
7
+ * @param input A potential WKT geometry string
8
+ * @return `true` if input appears to be a WKT geometry string, `false` otherwise
9
+
10
+ * @note We only support the "geojson" subset of the OGC simple features standard
11
+ * @todo Does not handle leading spaces which appear to be permitted per the spec:
12
+ * "A WKT string contains no white space outside of double quotes.
13
+ * However padding with white space to improve human readability is permitted;
14
+ * the examples of WKT that are included in this document have
15
+ * spaces and line feeds inserted to improve clarity. Any padding is stripped out or ignored by parsers."
16
+ */
17
+ export function isWKT(input) {
18
+ return getWKTGeometryType(input) !== null;
19
+ }
20
+ /**
21
+ * Get the geometry type of a WKT string.
22
+ * @param input A potential WKT geometry string
23
+ * @return `true` if input appears to be a WKT geometry string, `false` otherwise
24
+
25
+ * @note We only support the "geojson" subset of the OGC simple features standard
26
+ * @todo Does not handle leading spaces which appear to be permitted per the spec:
27
+ * "A WKT string contains no white space outside of double quotes.
28
+ * However padding with white space to improve human readability is permitted;
29
+ * the examples of WKT that are included in this document have
30
+ * spaces and line feeds inserted to improve clarity. Any padding is stripped out or ignored by parsers."
31
+ */
32
+ export function getWKTGeometryType(input) {
33
+ if (typeof input === 'string') {
34
+ const index = WKT_MAGIC_STRINGS.findIndex((magicString) => input.startsWith(magicString));
35
+ return index >= 0 ? (index + 1) : null;
36
+ }
37
+ const inputArray = new Uint8Array(input);
38
+ const index = WKT_MAGIC_BYTES.findIndex((magicBytes) => magicBytes.every((value, index) => value === inputArray[index]));
39
+ return index >= 0 ? (index + 1) : null;
40
+ }
41
+ /**
42
+ * Check if an array buffer might be a TWKB array buffer
43
+ * @param arrayBuffer The array buffer to check
44
+ * @returns false if this is definitely not a TWKB array buffer, true if it might be a TWKB array buffer
45
+ */
46
+ export function isTWKB(arrayBuffer) {
47
+ const dataView = new DataView(arrayBuffer);
48
+ const byteOffset = 0;
49
+ const type = dataView.getUint8(byteOffset);
50
+ const geometryType = type & 0x0f;
51
+ // Only geometry types 1 to 7 (point to geometry collection are currently defined)
52
+ if (geometryType < 1 || geometryType > 7) {
53
+ return false;
54
+ }
55
+ return true;
56
+ }
57
+ /** Sanity checks that first to 5-9 bytes could represent a supported WKB dialect header */
58
+ export function isWKB(arrayBuffer) {
59
+ const dataView = new DataView(arrayBuffer);
60
+ let byteOffset = 0;
61
+ const endianness = dataView.getUint8(byteOffset);
62
+ byteOffset += 1;
63
+ // Check valid endianness (only 0 or 1 are allowed)
64
+ if (endianness > 1) {
65
+ return false;
66
+ }
67
+ const littleEndian = endianness === 1;
68
+ const geometry = dataView.getUint32(byteOffset, littleEndian);
69
+ byteOffset += 4;
70
+ // check valid geometry type (we don't support extension geometries)
71
+ const geometryType = geometry & 0x07;
72
+ if (geometryType === 0 || geometryType > 7) {
73
+ return false;
74
+ }
75
+ const geometryFlags = geometry - geometryType;
76
+ // Accept iso-wkb flags
77
+ if (geometryFlags === 0 ||
78
+ geometryFlags === 1000 ||
79
+ geometryFlags === 2000 ||
80
+ geometryFlags === 3000) {
81
+ return true;
82
+ }
83
+ // Accept ewkb flags but reject otherwise
84
+ if ((geometryFlags & ~(EWKB_FLAG_Z | EWKB_FLAG_M | EWKB_FLAG_SRID)) !== 0) {
85
+ return false;
86
+ }
87
+ if (geometryFlags & EWKB_FLAG_SRID) {
88
+ const srid = dataView.getUint32(byteOffset, littleEndian);
89
+ byteOffset += 4;
90
+ if (srid > MAX_SRID) {
91
+ return false;
92
+ }
93
+ }
94
+ return true;
95
+ }
96
+ /**
97
+ * Parses header and provides a byteOffset to start of geometry data
98
+ * @param dataView
99
+ * @param target optionally supply a WKBHeader object to avoid creating a new object for every call
100
+ * @returns a header object describing the WKB data
101
+ */
102
+ // eslint-disable-next-line max-statements, complexity
103
+ export function parseWKBHeader(dataView, target) {
104
+ const wkbHeader = Object.assign(target || {}, {
105
+ type: 'wkb',
106
+ variant: 'wkb',
107
+ geometryType: 1,
108
+ dimensions: 2,
109
+ coordinates: 'xy',
110
+ littleEndian: true,
111
+ byteOffset: 0
112
+ });
113
+ if (isWKT(dataView.buffer)) {
114
+ // TODO - WKB header could include WKT type
115
+ throw new Error('WKB: Cannot parse WKT data');
116
+ }
117
+ // Check endianness of data
118
+ wkbHeader.littleEndian = dataView.getUint8(wkbHeader.byteOffset) === 1;
119
+ wkbHeader.byteOffset++;
120
+ // 4-digit code representing dimension and type of geometry
121
+ const geometryCode = dataView.getUint32(wkbHeader.byteOffset, wkbHeader.littleEndian);
122
+ wkbHeader.byteOffset += 4;
123
+ wkbHeader.geometryType = (geometryCode & 0x7);
124
+ // Check if iso-wkb variant: iso-wkb adds 1000, 2000 or 3000 to the geometry code
125
+ const isoType = (geometryCode - wkbHeader.geometryType) / 1000;
126
+ switch (isoType) {
127
+ case 0:
128
+ break;
129
+ case 1:
130
+ wkbHeader.variant = 'iso-wkb';
131
+ wkbHeader.dimensions = 3;
132
+ wkbHeader.coordinates = 'xyz';
133
+ break;
134
+ case 2:
135
+ wkbHeader.variant = 'iso-wkb';
136
+ wkbHeader.dimensions = 3;
137
+ wkbHeader.coordinates = 'xym';
138
+ break;
139
+ case 3:
140
+ wkbHeader.variant = 'iso-wkb';
141
+ wkbHeader.dimensions = 4;
142
+ wkbHeader.coordinates = 'xyzm';
143
+ break;
144
+ default:
145
+ throw new Error(`WKB: Unsupported iso-wkb type: ${isoType}`);
146
+ }
147
+ // Check if EWKB variant. Uses bitmasks for Z&M dimensions as well as optional SRID field
148
+ const ewkbZ = geometryCode & EWKB_FLAG_Z;
149
+ const ewkbM = geometryCode & EWKB_FLAG_M;
150
+ const ewkbSRID = geometryCode & EWKB_FLAG_SRID;
151
+ if (ewkbZ && ewkbM) {
152
+ wkbHeader.variant = 'ewkb';
153
+ wkbHeader.dimensions = 4;
154
+ wkbHeader.coordinates = 'xyzm';
155
+ }
156
+ else if (ewkbZ) {
157
+ wkbHeader.variant = 'ewkb';
158
+ wkbHeader.dimensions = 3;
159
+ wkbHeader.coordinates = 'xyz';
160
+ }
161
+ else if (ewkbM) {
162
+ wkbHeader.variant = 'ewkb';
163
+ wkbHeader.dimensions = 3;
164
+ wkbHeader.coordinates = 'xym';
165
+ }
166
+ // If SRID present read four more bytes
167
+ if (ewkbSRID) {
168
+ wkbHeader.variant = 'ewkb';
169
+ // 4-digit code representing dimension and type of geometry
170
+ wkbHeader.srid = dataView.getUint32(wkbHeader.byteOffset, wkbHeader.littleEndian);
171
+ wkbHeader.byteOffset += 4;
172
+ }
173
+ return wkbHeader;
174
+ }
175
+ //# sourceMappingURL=parse-wkb-header.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-wkb-header.js","sourceRoot":"","sources":["../../../../../src/lib/geometry-converters/wkb/helpers/parse-wkb-header.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Integer codes for geometry types in WKB and related formats
3
+ * @see: https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry#Well-known_binary
4
+ */
5
+ export declare enum WKBGeometryType {
6
+ Point = 1,
7
+ LineString = 2,
8
+ Polygon = 3,
9
+ MultiPoint = 4,
10
+ MultiLineString = 5,
11
+ MultiPolygon = 6,
12
+ GeometryCollection = 7
13
+ }
14
+ /** Parsed WKB header */
15
+ export type WKBHeader = {
16
+ /** WKB or TWKB */
17
+ type: 'wkb' | 'twkb';
18
+ /** WKB variant */
19
+ variant: 'wkb' | 'ewkb' | 'iso-wkb' | 'twkb';
20
+ /** geometry type encoded in this WKB: point, line, polygon etc */
21
+ geometryType: 1 | 2 | 3 | 4 | 5 | 6 | 7;
22
+ /** Number of dimensions for coordinate data */
23
+ dimensions: 2 | 3 | 4;
24
+ /** Coordinate names, Z and M are controlled by flags */
25
+ coordinates: 'xy' | 'xyz' | 'xym' | 'xyzm';
26
+ /** WKB Geometry has a spatial coordinate reference system id */
27
+ srid?: number;
28
+ /** true if binary data is stored as little endian */
29
+ littleEndian: boolean;
30
+ /** Offset to start of geometry */
31
+ byteOffset: number;
32
+ };
33
+ /**
34
+ * Options for writing WKB
35
+ */
36
+ export type WKBOptions = {
37
+ /** Does the GeoJSON input have Z values? */
38
+ hasZ?: boolean;
39
+ /** Does the GeoJSON input have M values? */
40
+ hasM?: boolean;
41
+ /** Spatial reference for input GeoJSON */
42
+ srid?: any;
43
+ };
44
+ /** WKB Geometry has a z coordinate */
45
+ export declare const EWKB_FLAG_Z = 2147483648;
46
+ /** WKB Geometry has an m coordinate */
47
+ export declare const EWKB_FLAG_M = 1073741824;
48
+ /** WKB Geometry has a spatial coordinate reference system id */
49
+ export declare const EWKB_FLAG_SRID = 536870912;
50
+ /** @todo: Assume no more than 10K SRIDs are defined */
51
+ export declare const MAX_SRID = 10000;
52
+ /**
53
+ * @see: https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry#Well-known_binary
54
+ * @note Order matches WKBGeometryType enum (need to add 1)
55
+ * @note: We only support this "geojson" subset of the OGC simple features standard
56
+ */
57
+ export declare const WKT_MAGIC_STRINGS: string[];
58
+ /**
59
+ * @see: https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry#Well-known_binary
60
+ * @note Order matches WKBGeometryType enum (need to add 1)
61
+ * @note: We only support this "geojson" subset of the OGC simple features standard
62
+ */
63
+ export declare const WKT_MAGIC_BYTES: Uint8Array[];
64
+ //# sourceMappingURL=wkb-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wkb-types.d.ts","sourceRoot":"","sources":["../../../../../src/lib/geometry-converters/wkb/helpers/wkb-types.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,oBAAY,eAAe;IACzB,KAAK,IAAI;IACT,UAAU,IAAI;IACd,OAAO,IAAI;IACX,UAAU,IAAI;IACd,eAAe,IAAI;IACnB,YAAY,IAAI;IAChB,kBAAkB,IAAI;CACvB;AAED,wBAAwB;AACxB,MAAM,MAAM,SAAS,GAAG;IACtB,kBAAkB;IAClB,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC;IACrB,kBAAkB;IAClB,OAAO,EAAE,KAAK,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;IAC7C,kEAAkE;IAClE,YAAY,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACxC,+CAA+C;IAC/C,UAAU,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACtB,wDAAwD;IACxD,WAAW,EAAE,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;IAC3C,gEAAgE;IAChE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qDAAqD;IACrD,YAAY,EAAE,OAAO,CAAC;IACtB,kCAAkC;IAClC,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,4CAA4C;IAC5C,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,4CAA4C;IAC5C,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,0CAA0C;IAC1C,IAAI,CAAC,EAAE,GAAG,CAAC;CACZ,CAAC;AAEF,sCAAsC;AACtC,eAAO,MAAM,WAAW,aAAa,CAAC;AACtC,uCAAuC;AACvC,eAAO,MAAM,WAAW,aAAa,CAAC;AACtC,gEAAgE;AAChE,eAAO,MAAM,cAAc,YAAa,CAAC;AACzC,uDAAuD;AACvD,eAAO,MAAM,QAAQ,QAAQ,CAAC;AAE9B;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,UAQ7B,CAAC;AAIF;;;;GAIG;AACH,eAAO,MAAM,eAAe,cAAgE,CAAC"}
@@ -0,0 +1,47 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ /**
5
+ * Integer codes for geometry types in WKB and related formats
6
+ * @see: https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry#Well-known_binary
7
+ */
8
+ export var WKBGeometryType;
9
+ (function (WKBGeometryType) {
10
+ WKBGeometryType[WKBGeometryType["Point"] = 1] = "Point";
11
+ WKBGeometryType[WKBGeometryType["LineString"] = 2] = "LineString";
12
+ WKBGeometryType[WKBGeometryType["Polygon"] = 3] = "Polygon";
13
+ WKBGeometryType[WKBGeometryType["MultiPoint"] = 4] = "MultiPoint";
14
+ WKBGeometryType[WKBGeometryType["MultiLineString"] = 5] = "MultiLineString";
15
+ WKBGeometryType[WKBGeometryType["MultiPolygon"] = 6] = "MultiPolygon";
16
+ WKBGeometryType[WKBGeometryType["GeometryCollection"] = 7] = "GeometryCollection";
17
+ })(WKBGeometryType || (WKBGeometryType = {}));
18
+ /** WKB Geometry has a z coordinate */
19
+ export const EWKB_FLAG_Z = 0x80000000;
20
+ /** WKB Geometry has an m coordinate */
21
+ export const EWKB_FLAG_M = 0x40000000;
22
+ /** WKB Geometry has a spatial coordinate reference system id */
23
+ export const EWKB_FLAG_SRID = 0x20000000;
24
+ /** @todo: Assume no more than 10K SRIDs are defined */
25
+ export const MAX_SRID = 10000;
26
+ /**
27
+ * @see: https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry#Well-known_binary
28
+ * @note Order matches WKBGeometryType enum (need to add 1)
29
+ * @note: We only support this "geojson" subset of the OGC simple features standard
30
+ */
31
+ export const WKT_MAGIC_STRINGS = [
32
+ 'POINT(',
33
+ 'LINESTRING(',
34
+ 'POLYGON(',
35
+ 'MULTIPOINT(',
36
+ 'MULTILINESTRING(',
37
+ 'MULTIPOLYGON(',
38
+ 'GEOMETRYCOLLECTION('
39
+ ];
40
+ const textEncoder = new TextEncoder();
41
+ /**
42
+ * @see: https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry#Well-known_binary
43
+ * @note Order matches WKBGeometryType enum (need to add 1)
44
+ * @note: We only support this "geojson" subset of the OGC simple features standard
45
+ */
46
+ export const WKT_MAGIC_BYTES = WKT_MAGIC_STRINGS.map((string) => textEncoder.encode(string));
47
+ //# sourceMappingURL=wkb-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wkb-types.js","sourceRoot":"","sources":["../../../../../src/lib/geometry-converters/wkb/helpers/wkb-types.ts"],"names":[],"mappings":"AAAA,aAAa;AACb,+BAA+B;AAC/B,oCAAoC;AAEpC;;;GAGG;AACH,MAAM,CAAN,IAAY,eAQX;AARD,WAAY,eAAe;IACzB,uDAAS,CAAA;IACT,iEAAc,CAAA;IACd,2DAAW,CAAA;IACX,iEAAc,CAAA;IACd,2EAAmB,CAAA;IACnB,qEAAgB,CAAA;IAChB,iFAAsB,CAAA;AACxB,CAAC,EARW,eAAe,KAAf,eAAe,QAQ1B;AAkCD,sCAAsC;AACtC,MAAM,CAAC,MAAM,WAAW,GAAG,UAAU,CAAC;AACtC,uCAAuC;AACvC,MAAM,CAAC,MAAM,WAAW,GAAG,UAAU,CAAC;AACtC,gEAAgE;AAChE,MAAM,CAAC,MAAM,cAAc,GAAG,UAAU,CAAC;AACzC,uDAAuD;AACvD,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,CAAC;AAE9B;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,QAAQ;IACR,aAAa;IACb,UAAU;IACV,aAAa;IACb,kBAAkB;IAClB,eAAe;IACf,qBAAqB;CACtB,CAAC;AAEF,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;AAEtC;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { WKBOptions } from "./wkb-types.js";
2
+ import { WKBGeometryType } from "./wkb-types.js";
3
+ declare const WKBGeometryTypeNames: {
4
+ readonly Point: WKBGeometryType.Point;
5
+ readonly LineString: WKBGeometryType.LineString;
6
+ readonly Polygon: WKBGeometryType.Polygon;
7
+ readonly MultiPoint: WKBGeometryType.MultiPoint;
8
+ readonly MultiLineString: WKBGeometryType.MultiLineString;
9
+ readonly MultiPolygon: WKBGeometryType.MultiPolygon;
10
+ readonly GeometryCollection: WKBGeometryType.GeometryCollection;
11
+ };
12
+ /** Convert a WKB geometry type integer to GeoJSON style geometry type string*/
13
+ export declare function getGeometryTypeFromWKBType(wkbGeometryType: WKBGeometryType): keyof typeof WKBGeometryTypeNames;
14
+ /** Convert a GeoJSON style geometry type string to a WKB geometry type integer*/
15
+ export declare function getWKBTypeFromGeometryType(geometryType: keyof typeof WKBGeometryTypeNames): WKBGeometryType;
16
+ /** Sanity: Adjust Z/M dimensions with actual point size */
17
+ export declare function matchWKBOptionsToPointSize(pointSize: number, options?: WKBOptions): Required<WKBOptions>;
18
+ /** Get coordinate size given Z/M dimensions */
19
+ export declare function getCoordinateByteSize(options?: WKBOptions): number;
20
+ export {};
21
+ //# sourceMappingURL=wkb-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wkb-utils.d.ts","sourceRoot":"","sources":["../../../../../src/lib/geometry-converters/wkb/helpers/wkb-utils.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,UAAU,EAAC,uBAAoB;AAC5C,OAAO,EAAC,eAAe,EAAC,uBAAoB;AAE5C,QAAA,MAAM,oBAAoB;;;;;;;;CAQ0B,CAAC;AAErD,+EAA+E;AAC/E,wBAAgB,0BAA0B,CACxC,eAAe,EAAE,eAAe,GAC/B,MAAM,OAAO,oBAAoB,CAOnC;AAED,iFAAiF;AACjF,wBAAgB,0BAA0B,CACxC,YAAY,EAAE,MAAM,OAAO,oBAAoB,GAC9C,eAAe,CAEjB;AAED,2DAA2D;AAC3D,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,UAAU,GACnB,QAAQ,CAAC,UAAU,CAAC,CA8BtB;AAED,+CAA+C;AAC/C,wBAAgB,qBAAqB,CAAC,OAAO,CAAC,EAAE,UAAU,GAAG,MAAM,CAWlE"}
@@ -0,0 +1,65 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ import { WKBGeometryType } from "./wkb-types.js";
5
+ const WKBGeometryTypeNames = {
6
+ Point: WKBGeometryType.Point,
7
+ LineString: WKBGeometryType.LineString,
8
+ Polygon: WKBGeometryType.Polygon,
9
+ MultiPoint: WKBGeometryType.MultiPoint,
10
+ MultiLineString: WKBGeometryType.MultiLineString,
11
+ MultiPolygon: WKBGeometryType.MultiPolygon,
12
+ GeometryCollection: WKBGeometryType.GeometryCollection
13
+ };
14
+ /** Convert a WKB geometry type integer to GeoJSON style geometry type string*/
15
+ export function getGeometryTypeFromWKBType(wkbGeometryType) {
16
+ for (const key in WKBGeometryTypeNames) {
17
+ if (WKBGeometryTypeNames[key] === wkbGeometryType) {
18
+ return key;
19
+ }
20
+ }
21
+ throw new Error(String(wkbGeometryType));
22
+ }
23
+ /** Convert a GeoJSON style geometry type string to a WKB geometry type integer*/
24
+ export function getWKBTypeFromGeometryType(geometryType) {
25
+ return WKBGeometryTypeNames[geometryType];
26
+ }
27
+ /** Sanity: Adjust Z/M dimensions with actual point size */
28
+ export function matchWKBOptionsToPointSize(pointSize, options) {
29
+ const wkbOptions = { hasZ: false, hasM: false, srid: undefined, ...options };
30
+ // Align options with actual point size
31
+ switch (pointSize) {
32
+ case 4:
33
+ wkbOptions.hasZ = true;
34
+ wkbOptions.hasM = true;
35
+ break;
36
+ case 3:
37
+ // Prefer Z over M
38
+ if (wkbOptions.hasZ && wkbOptions.hasM) {
39
+ wkbOptions.hasM = false;
40
+ }
41
+ if (!wkbOptions.hasZ && !wkbOptions.hasM) {
42
+ wkbOptions.hasZ = true;
43
+ }
44
+ break;
45
+ case 2:
46
+ wkbOptions.hasZ = false;
47
+ wkbOptions.hasM = false;
48
+ break;
49
+ default:
50
+ // ignore - broken input data?
51
+ }
52
+ return wkbOptions;
53
+ }
54
+ /** Get coordinate size given Z/M dimensions */
55
+ export function getCoordinateByteSize(options) {
56
+ let coordinateByteSize = 16;
57
+ if (options?.hasZ) {
58
+ coordinateByteSize += 8;
59
+ }
60
+ if (options?.hasM) {
61
+ coordinateByteSize += 8;
62
+ }
63
+ return coordinateByteSize;
64
+ }
65
+ //# sourceMappingURL=wkb-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wkb-utils.js","sourceRoot":"","sources":["../../../../../src/lib/geometry-converters/wkb/helpers/wkb-utils.ts"],"names":[],"mappings":"AAAA,aAAa;AACb,+BAA+B;AAC/B,oCAAoC;AAGpC,OAAO,EAAC,eAAe,EAAC,uBAAoB;AAE5C,MAAM,oBAAoB,GAAG;IAC3B,KAAK,EAAE,eAAe,CAAC,KAAK;IAC5B,UAAU,EAAE,eAAe,CAAC,UAAU;IACtC,OAAO,EAAE,eAAe,CAAC,OAAO;IAChC,UAAU,EAAE,eAAe,CAAC,UAAU;IACtC,eAAe,EAAE,eAAe,CAAC,eAAe;IAChD,YAAY,EAAE,eAAe,CAAC,YAAY;IAC1C,kBAAkB,EAAE,eAAe,CAAC,kBAAkB;CACJ,CAAC;AAErD,+EAA+E;AAC/E,MAAM,UAAU,0BAA0B,CACxC,eAAgC;IAEhC,KAAK,MAAM,GAAG,IAAI,oBAAoB,EAAE,CAAC;QACvC,IAAI,oBAAoB,CAAC,GAAG,CAAC,KAAK,eAAe,EAAE,CAAC;YAClD,OAAO,GAAwC,CAAC;QAClD,CAAC;IACH,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,0BAA0B,CACxC,YAA+C;IAE/C,OAAO,oBAAoB,CAAC,YAAY,CAAC,CAAC;AAC5C,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,0BAA0B,CACxC,SAAiB,EACjB,OAAoB;IAEpB,MAAM,UAAU,GAAyB,EAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,OAAO,EAAC,CAAC;IAEjG,uCAAuC;IACvC,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,CAAC;YACJ,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC;YACvB,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC;YACvB,MAAM;QAER,KAAK,CAAC;YACJ,kBAAkB;YAClB,IAAI,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;gBACvC,UAAU,CAAC,IAAI,GAAG,KAAK,CAAC;YAC1B,CAAC;YACD,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;gBACzC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC;YACzB,CAAC;YACD,MAAM;QAER,KAAK,CAAC;YACJ,UAAU,CAAC,IAAI,GAAG,KAAK,CAAC;YACxB,UAAU,CAAC,IAAI,GAAG,KAAK,CAAC;YACxB,MAAM;QAER,QAAQ;QACR,8BAA8B;IAChC,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,+CAA+C;AAC/C,MAAM,UAAU,qBAAqB,CAAC,OAAoB;IACxD,IAAI,kBAAkB,GAAG,EAAE,CAAC;IAE5B,IAAI,OAAO,EAAE,IAAI,EAAE,CAAC;QAClB,kBAAkB,IAAI,CAAC,CAAC;IAC1B,CAAC;IACD,IAAI,OAAO,EAAE,IAAI,EAAE,CAAC;QAClB,kBAAkB,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,OAAO,kBAAkB,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { BinaryWriter } from "../../../utils/binary-writer.js";
2
+ import type { WKBOptions } from "./wkb-types.js";
3
+ /**
4
+ * Construct and write WKB integer code
5
+ * Reference: https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry#Well-known_binary
6
+ */
7
+ export declare function writeWkbHeader(writer: BinaryWriter, geometryType: number, options?: WKBOptions): void;
8
+ //# sourceMappingURL=write-wkb-header.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write-wkb-header.d.ts","sourceRoot":"","sources":["../../../../../src/lib/geometry-converters/wkb/helpers/write-wkb-header.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,YAAY,EAAC,wCAAqC;AAC1D,OAAO,KAAK,EAAC,UAAU,EAAC,uBAAoB;AAE5C;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,YAAY,EACpB,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,UAAU,GACnB,IAAI,CAyBN"}
@@ -0,0 +1,34 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ /**
5
+ * Construct and write WKB integer code
6
+ * Reference: https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry#Well-known_binary
7
+ */
8
+ export function writeWkbHeader(writer, geometryType, options) {
9
+ // little endian
10
+ writer.writeInt8(1);
11
+ const { hasZ, hasM, srid } = options || {};
12
+ let dimensionType = 0;
13
+ if (!srid) {
14
+ if (hasZ && hasM) {
15
+ dimensionType += 3000;
16
+ }
17
+ else if (hasZ) {
18
+ dimensionType += 1000;
19
+ }
20
+ else if (hasM) {
21
+ dimensionType += 2000;
22
+ }
23
+ }
24
+ else {
25
+ if (hasZ) {
26
+ dimensionType |= 0x80000000;
27
+ }
28
+ if (hasM) {
29
+ dimensionType |= 0x40000000;
30
+ }
31
+ }
32
+ writer.writeUInt32LE((dimensionType + geometryType) >>> 0);
33
+ }
34
+ //# sourceMappingURL=write-wkb-header.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write-wkb-header.js","sourceRoot":"","sources":["../../../../../src/lib/geometry-converters/wkb/helpers/write-wkb-header.ts"],"names":[],"mappings":"AAAA,aAAa;AACb,+BAA+B;AAC/B,oCAAoC;AAKpC;;;GAGG;AACH,MAAM,UAAU,cAAc,CAC5B,MAAoB,EACpB,YAAoB,EACpB,OAAoB;IAEpB,gBAAgB;IAChB,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACpB,MAAM,EAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAC,GAAG,OAAO,IAAI,EAAE,CAAC;IAEzC,IAAI,aAAa,GAAG,CAAC,CAAC;IAEtB,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;YACjB,aAAa,IAAI,IAAI,CAAC;QACxB,CAAC;aAAM,IAAI,IAAI,EAAE,CAAC;YAChB,aAAa,IAAI,IAAI,CAAC;QACxB,CAAC;aAAM,IAAI,IAAI,EAAE,CAAC;YAChB,aAAa,IAAI,IAAI,CAAC;QACxB,CAAC;IACH,CAAC;SAAM,CAAC;QACN,IAAI,IAAI,EAAE,CAAC;YACT,aAAa,IAAI,UAAU,CAAC;QAC9B,CAAC;QACD,IAAI,IAAI,EAAE,CAAC;YACT,aAAa,IAAI,UAAU,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,MAAM,CAAC,aAAa,CAAC,CAAC,aAAa,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7D,CAAC"}
@@ -0,0 +1,27 @@
1
+ import * as arrow from 'apache-arrow';
2
+ import type { Table, ArrayRowTable, ColumnarTable, ObjectRowTable, GeoJSONTable, ArrowTable } from '@loaders.gl/schema';
3
+ /**
4
+ * * Convert a loaders.gl Table to an Apache Arrow Table
5
+ * @param mesh
6
+ * @param metadata
7
+ * @param batchSize
8
+ * @returns
9
+ */
10
+ export declare function convertTableToArrow(table: Table, options?: {
11
+ batchSize?: number;
12
+ }): arrow.Table;
13
+ export declare function makeTableToArrowBatchesIterator(table: Table, options?: {
14
+ batchSize?: number;
15
+ }): IterableIterator<arrow.RecordBatch>;
16
+ /**
17
+ * Convert an Apache Arrow table to a loaders.gl Table
18
+ * @note Currently does not convert schema
19
+ */
20
+ export declare function convertGeoArrowToTable(arrow: arrow.Table, shape: 'arrow-table'): ArrowTable;
21
+ export declare function convertGeoArrowToTable(arrow: arrow.Table, shape: 'columnar-table'): ColumnarTable;
22
+ export declare function convertGeoArrowToTable(arrow: arrow.Table, shape: 'object-row-table'): ObjectRowTable;
23
+ export declare function convertGeoArrowToTable(arrow: arrow.Table, shape: 'array-row-table'): ArrayRowTable;
24
+ export declare function convertGeoArrowToTable(arrow: arrow.Table, shape: 'geojson-table'): GeoJSONTable;
25
+ export declare function convertGeoArrowToTable(arrow: arrow.Table, shape: 'columnar-table'): ColumnarTable;
26
+ export declare function convertGeoArrowToTable(arrow: arrow.Table, shape: Table['shape']): Table;
27
+ //# sourceMappingURL=convert-geoarrow-table.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convert-geoarrow-table.d.ts","sourceRoot":"","sources":["../../../src/lib/table-converters/convert-geoarrow-table.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,EACV,KAAK,EACL,aAAa,EACb,aAAa,EACb,cAAc,EACd,YAAY,EACZ,UAAU,EAEX,MAAM,oBAAoB,CAAC;AAa5B;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAC,GAAG,KAAK,CAAC,KAAK,CAe7F;AAED,wBAAiB,+BAA+B,CAC9C,KAAK,EAAE,KAAK,EACZ,OAAO,CAAC,EAAE;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAC,GAC7B,gBAAgB,CAAC,KAAK,CAAC,WAAW,CAAC,CAoCrC;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,aAAa,GAAG,UAAU,CAAC;AAC7F,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,gBAAgB,GAAG,aAAa,CAAC;AACnG,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,KAAK,EAAE,kBAAkB,GACxB,cAAc,CAAC;AAClB,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,iBAAiB,GAAG,aAAa,CAAC;AACpG,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,eAAe,GAAG,YAAY,CAAC;AACjG,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,gBAAgB,GAAG,aAAa,CAAC;AACnG,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC"}
@@ -0,0 +1,155 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ import * as arrow from 'apache-arrow';
5
+ import { convertTable, convertArrowToSchema, convertSchemaToArrow, getTableLength, getTableNumCols, getTableCellAt } from '@loaders.gl/schema-utils';
6
+ import { getGeometryColumnsFromSchema } from '@loaders.gl/geoarrow';
7
+ import { convertGeoArrowGeometryToGeoJSON } from "../geometry-converters/convert-geoarrow-to-geojson.js";
8
+ /**
9
+ * * Convert a loaders.gl Table to an Apache Arrow Table
10
+ * @param mesh
11
+ * @param metadata
12
+ * @param batchSize
13
+ * @returns
14
+ */
15
+ export function convertTableToArrow(table, options) {
16
+ switch (table.shape) {
17
+ case 'arrow-table':
18
+ return table.data;
19
+ case 'columnar-table':
20
+ // TODO - optimized implementation is possible
21
+ // return convertColumnarTableToArrow(table, options);
22
+ // fall through
23
+ default:
24
+ const arrowBatchIterator = makeTableToArrowBatchesIterator(table, options);
25
+ return new arrow.Table(arrowBatchIterator);
26
+ }
27
+ }
28
+ export function* makeTableToArrowBatchesIterator(table, options) {
29
+ const arrowSchema = convertSchemaToArrow(table.schema);
30
+ const length = getTableLength(table);
31
+ const numColumns = getTableNumCols(table);
32
+ const batchSize = options?.batchSize || length;
33
+ const builders = arrowSchema?.fields.map((arrowField) => arrow.makeBuilder(arrowField));
34
+ const structField = new arrow.Struct(arrowSchema.fields);
35
+ let batchLength = 0;
36
+ for (let rowIndex = 0; rowIndex < length; rowIndex++) {
37
+ for (let columnIndex = 0; columnIndex < numColumns; ++columnIndex) {
38
+ const value = getTableCellAt(table, rowIndex, columnIndex);
39
+ const builder = builders[columnIndex];
40
+ builder.append(value);
41
+ batchLength++;
42
+ if (batchLength >= batchSize) {
43
+ const datas = builders.map((builder) => builder.flush());
44
+ const structData = new arrow.Data(structField, 0, batchLength, 0, undefined, datas);
45
+ yield new arrow.RecordBatch(arrowSchema, structData);
46
+ batchLength = 0;
47
+ }
48
+ }
49
+ }
50
+ if (batchLength > 0) {
51
+ const datas = builders.map((builder) => builder.flush());
52
+ const structData = new arrow.Data(structField, 0, batchLength, 0, undefined, datas);
53
+ yield new arrow.RecordBatch(arrowSchema, structData);
54
+ batchLength = 0;
55
+ }
56
+ builders.map((builder) => builder.finish());
57
+ }
58
+ /**
59
+ * Convert an Apache Arrow table to a loaders.gl Table
60
+ * @note Currently does not convert schema
61
+ */
62
+ export function convertGeoArrowToTable(arrowTable, shape) {
63
+ switch (shape) {
64
+ case 'arrow-table':
65
+ return convertArrowToArrowTable(arrowTable);
66
+ case 'array-row-table':
67
+ return convertArrowToArrayRowTable(arrowTable);
68
+ case 'object-row-table':
69
+ return convertArrowToObjectRowTable(arrowTable);
70
+ case 'columnar-table':
71
+ return convertArrowToColumnarTable(arrowTable);
72
+ case 'geojson-table':
73
+ return convertArrowToGeoJSONTable(arrowTable);
74
+ default:
75
+ throw new Error(shape);
76
+ }
77
+ }
78
+ /**
79
+ * Wrap an apache arrow table in a loaders.gl table wrapper.
80
+ * From this additional conversions are available.
81
+ * @param arrowTable
82
+ * @returns
83
+ */
84
+ function convertArrowToArrowTable(arrowTable) {
85
+ return {
86
+ shape: 'arrow-table',
87
+ schema: convertArrowToSchema(arrowTable.schema),
88
+ data: arrowTable
89
+ };
90
+ }
91
+ function convertArrowToArrayRowTable(arrowTable) {
92
+ const columnarTable = convertArrowToColumnarTable(arrowTable);
93
+ return convertTable(columnarTable, 'array-row-table');
94
+ }
95
+ function convertArrowToObjectRowTable(arrowTable) {
96
+ const columnarTable = convertArrowToColumnarTable(arrowTable);
97
+ return convertTable(columnarTable, 'object-row-table');
98
+ }
99
+ /**
100
+ * Convert an Apache Arrow table to a ColumnarTable
101
+ * @note Currently does not convert schema
102
+ */
103
+ function convertArrowToColumnarTable(arrowTable) {
104
+ // TODO - avoid calling `getColumn` on columns we are not interested in?
105
+ // Add options object?
106
+ const columns = {};
107
+ for (const field of arrowTable.schema.fields) {
108
+ // This (is intended to) coalesce all record batches into a single typed array
109
+ const arrowColumn = arrowTable.getChild(field.name);
110
+ const values = arrowColumn?.toArray();
111
+ columns[field.name] = values;
112
+ }
113
+ const schema = convertArrowToSchema(arrowTable.schema);
114
+ return {
115
+ shape: 'columnar-table',
116
+ schema,
117
+ data: columns
118
+ };
119
+ }
120
+ /**
121
+ * Convert an Apache Arrow table to a GeoJSONTable
122
+ * @note Currently does not convert schema
123
+ */
124
+ function convertArrowToGeoJSONTable(arrowTable) {
125
+ const schema = convertArrowToSchema(arrowTable.schema);
126
+ const geometryColumns = getGeometryColumnsFromSchema(schema);
127
+ // get encoding from geometryColumns['geometry']
128
+ const encoding = geometryColumns.geometry.encoding;
129
+ const features = [];
130
+ // Remove geometry columns
131
+ const propertyColumnNames = arrowTable.schema.fields
132
+ .map((field) => field.name)
133
+ // TODO - this deletes all geometry columns
134
+ .filter((name) => !(name in geometryColumns));
135
+ const propertiesTable = arrowTable.select(propertyColumnNames);
136
+ const arrowGeometryColumn = arrowTable.getChild('geometry');
137
+ for (let row = 0; row < arrowTable.numRows; row++) {
138
+ // get the geometry value from arrow geometry column
139
+ // Note that type can vary
140
+ const arrowGeometry = arrowGeometryColumn?.get(row);
141
+ // parse arrow geometry to geojson feature
142
+ const feature = convertGeoArrowGeometryToGeoJSON(arrowGeometry, encoding);
143
+ if (feature) {
144
+ const properties = propertiesTable.get(row)?.toJSON() || {};
145
+ features.push({ type: 'Feature', geometry: feature, properties });
146
+ }
147
+ }
148
+ return {
149
+ shape: 'geojson-table',
150
+ type: 'FeatureCollection',
151
+ schema,
152
+ features
153
+ };
154
+ }
155
+ //# sourceMappingURL=convert-geoarrow-table.js.map