@loaders.gl/flatgeobuf 4.1.0-alpha.5 → 4.1.0-alpha.7

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 (176) hide show
  1. package/dist/LICENSE +9 -0
  2. package/dist/flatgeobuf/3.27.2/LICENSE +29 -0
  3. package/dist/flatgeobuf/3.27.2/README.md +45 -0
  4. package/dist/flatgeobuf/3.27.2/column-meta.d.ts +14 -0
  5. package/dist/flatgeobuf/3.27.2/column-meta.d.ts.map +1 -0
  6. package/dist/flatgeobuf/3.27.2/column-meta.js +2 -0
  7. package/dist/flatgeobuf/3.27.2/column-meta.js.map +1 -0
  8. package/dist/flatgeobuf/3.27.2/config.d.ts +10 -0
  9. package/dist/flatgeobuf/3.27.2/config.d.ts.map +1 -0
  10. package/dist/flatgeobuf/3.27.2/config.js +16 -0
  11. package/dist/flatgeobuf/3.27.2/config.js.map +1 -0
  12. package/dist/flatgeobuf/3.27.2/constants.d.ts +3 -0
  13. package/dist/flatgeobuf/3.27.2/constants.d.ts.map +1 -0
  14. package/dist/flatgeobuf/3.27.2/constants.js +3 -0
  15. package/dist/flatgeobuf/3.27.2/constants.js.map +1 -0
  16. package/dist/flatgeobuf/3.27.2/crs-meta.d.ts +9 -0
  17. package/dist/flatgeobuf/3.27.2/crs-meta.d.ts.map +1 -0
  18. package/dist/flatgeobuf/3.27.2/crs-meta.js +2 -0
  19. package/dist/flatgeobuf/3.27.2/crs-meta.js.map +1 -0
  20. package/dist/flatgeobuf/3.27.2/dumptree.d.ts +2 -0
  21. package/dist/flatgeobuf/3.27.2/dumptree.d.ts.map +1 -0
  22. package/dist/flatgeobuf/3.27.2/dumptree.js +61 -0
  23. package/dist/flatgeobuf/3.27.2/dumptree.js.map +1 -0
  24. package/dist/flatgeobuf/3.27.2/feature.d.ts +2 -0
  25. package/dist/flatgeobuf/3.27.2/feature.d.ts.map +1 -0
  26. package/dist/flatgeobuf/3.27.2/feature.js +3 -0
  27. package/dist/flatgeobuf/3.27.2/feature.js.map +1 -0
  28. package/dist/flatgeobuf/3.27.2/flat-geobuf/column-type.d.ts +18 -0
  29. package/dist/flatgeobuf/3.27.2/flat-geobuf/column-type.d.ts.map +1 -0
  30. package/dist/flatgeobuf/3.27.2/flat-geobuf/column-type.js +19 -0
  31. package/dist/flatgeobuf/3.27.2/flat-geobuf/column-type.js.map +1 -0
  32. package/dist/flatgeobuf/3.27.2/flat-geobuf/column.d.ts +39 -0
  33. package/dist/flatgeobuf/3.27.2/flat-geobuf/column.d.ts.map +1 -0
  34. package/dist/flatgeobuf/3.27.2/flat-geobuf/column.js +121 -0
  35. package/dist/flatgeobuf/3.27.2/flat-geobuf/column.js.map +1 -0
  36. package/dist/flatgeobuf/3.27.2/flat-geobuf/crs.d.ts +29 -0
  37. package/dist/flatgeobuf/3.27.2/flat-geobuf/crs.d.ts.map +1 -0
  38. package/dist/flatgeobuf/3.27.2/flat-geobuf/crs.js +79 -0
  39. package/dist/flatgeobuf/3.27.2/flat-geobuf/crs.js.map +1 -0
  40. package/dist/flatgeobuf/3.27.2/flat-geobuf/feature.d.ts +29 -0
  41. package/dist/flatgeobuf/3.27.2/flat-geobuf/feature.d.ts.map +1 -0
  42. package/dist/flatgeobuf/3.27.2/flat-geobuf/feature.js +95 -0
  43. package/dist/flatgeobuf/3.27.2/flat-geobuf/feature.js.map +1 -0
  44. package/dist/flatgeobuf/3.27.2/flat-geobuf/geometry-type.d.ts +21 -0
  45. package/dist/flatgeobuf/3.27.2/flat-geobuf/geometry-type.d.ts.map +1 -0
  46. package/dist/flatgeobuf/3.27.2/flat-geobuf/geometry-type.js +22 -0
  47. package/dist/flatgeobuf/3.27.2/flat-geobuf/geometry-type.js.map +1 -0
  48. package/dist/flatgeobuf/3.27.2/flat-geobuf/geometry.d.ts +75 -0
  49. package/dist/flatgeobuf/3.27.2/flat-geobuf/geometry.d.ts.map +1 -0
  50. package/dist/flatgeobuf/3.27.2/flat-geobuf/geometry.js +214 -0
  51. package/dist/flatgeobuf/3.27.2/flat-geobuf/geometry.js.map +1 -0
  52. package/dist/flatgeobuf/3.27.2/flat-geobuf/header.d.ts +59 -0
  53. package/dist/flatgeobuf/3.27.2/flat-geobuf/header.d.ts.map +1 -0
  54. package/dist/flatgeobuf/3.27.2/flat-geobuf/header.js +166 -0
  55. package/dist/flatgeobuf/3.27.2/flat-geobuf/header.js.map +1 -0
  56. package/dist/flatgeobuf/3.27.2/flat-geobuf.d.ts +6 -0
  57. package/dist/flatgeobuf/3.27.2/flat-geobuf.d.ts.map +1 -0
  58. package/dist/flatgeobuf/3.27.2/flat-geobuf.js +6 -0
  59. package/dist/flatgeobuf/3.27.2/flat-geobuf.js.map +1 -0
  60. package/dist/flatgeobuf/3.27.2/generic/feature.d.ts +19 -0
  61. package/dist/flatgeobuf/3.27.2/generic/feature.d.ts.map +1 -0
  62. package/dist/flatgeobuf/3.27.2/generic/feature.js +220 -0
  63. package/dist/flatgeobuf/3.27.2/generic/feature.js.map +1 -0
  64. package/dist/flatgeobuf/3.27.2/generic/featurecollection.d.ts +18 -0
  65. package/dist/flatgeobuf/3.27.2/generic/featurecollection.d.ts.map +1 -0
  66. package/dist/flatgeobuf/3.27.2/generic/featurecollection.js +162 -0
  67. package/dist/flatgeobuf/3.27.2/generic/featurecollection.js.map +1 -0
  68. package/dist/flatgeobuf/3.27.2/generic/geometry.d.ts +33 -0
  69. package/dist/flatgeobuf/3.27.2/generic/geometry.d.ts.map +1 -0
  70. package/dist/flatgeobuf/3.27.2/generic/geometry.js +81 -0
  71. package/dist/flatgeobuf/3.27.2/generic/geometry.js.map +1 -0
  72. package/dist/flatgeobuf/3.27.2/generic/header.d.ts +5 -0
  73. package/dist/flatgeobuf/3.27.2/generic/header.d.ts.map +1 -0
  74. package/dist/flatgeobuf/3.27.2/generic/header.js +27 -0
  75. package/dist/flatgeobuf/3.27.2/generic/header.js.map +1 -0
  76. package/dist/flatgeobuf/3.27.2/generic.d.ts +16 -0
  77. package/dist/flatgeobuf/3.27.2/generic.d.ts.map +1 -0
  78. package/dist/flatgeobuf/3.27.2/generic.js +9 -0
  79. package/dist/flatgeobuf/3.27.2/generic.js.map +1 -0
  80. package/dist/flatgeobuf/3.27.2/geojson/feature.d.ts +8 -0
  81. package/dist/flatgeobuf/3.27.2/geojson/feature.d.ts.map +1 -0
  82. package/dist/flatgeobuf/3.27.2/geojson/feature.js +13 -0
  83. package/dist/flatgeobuf/3.27.2/geojson/feature.js.map +1 -0
  84. package/dist/flatgeobuf/3.27.2/geojson/featurecollection.d.ts +8 -0
  85. package/dist/flatgeobuf/3.27.2/geojson/featurecollection.d.ts.map +1 -0
  86. package/dist/flatgeobuf/3.27.2/geojson/featurecollection.js +54 -0
  87. package/dist/flatgeobuf/3.27.2/geojson/featurecollection.js.map +1 -0
  88. package/dist/flatgeobuf/3.27.2/geojson/geometry.d.ts +13 -0
  89. package/dist/flatgeobuf/3.27.2/geojson/geometry.d.ts.map +1 -0
  90. package/dist/flatgeobuf/3.27.2/geojson/geometry.js +118 -0
  91. package/dist/flatgeobuf/3.27.2/geojson/geometry.js.map +1 -0
  92. package/dist/flatgeobuf/3.27.2/geojson.d.ts +17 -0
  93. package/dist/flatgeobuf/3.27.2/geojson.d.ts.map +1 -0
  94. package/dist/flatgeobuf/3.27.2/geojson.js +10 -0
  95. package/dist/flatgeobuf/3.27.2/geojson.js.map +1 -0
  96. package/dist/flatgeobuf/3.27.2/header-meta.d.ts +17 -0
  97. package/dist/flatgeobuf/3.27.2/header-meta.d.ts.map +1 -0
  98. package/dist/flatgeobuf/3.27.2/header-meta.js +46 -0
  99. package/dist/flatgeobuf/3.27.2/header-meta.js.map +1 -0
  100. package/dist/flatgeobuf/3.27.2/header.d.ts +2 -0
  101. package/dist/flatgeobuf/3.27.2/header.d.ts.map +1 -0
  102. package/dist/flatgeobuf/3.27.2/header.js +3 -0
  103. package/dist/flatgeobuf/3.27.2/header.js.map +1 -0
  104. package/dist/flatgeobuf/3.27.2/http-reader.d.ts +41 -0
  105. package/dist/flatgeobuf/3.27.2/http-reader.d.ts.map +1 -0
  106. package/dist/flatgeobuf/3.27.2/http-reader.js +193 -0
  107. package/dist/flatgeobuf/3.27.2/http-reader.js.map +1 -0
  108. package/dist/flatgeobuf/3.27.2/index.d.ts +14 -0
  109. package/dist/flatgeobuf/3.27.2/index.d.ts.map +1 -0
  110. package/dist/flatgeobuf/3.27.2/index.js +16 -0
  111. package/dist/flatgeobuf/3.27.2/index.js.map +1 -0
  112. package/dist/flatgeobuf/3.27.2/logger.d.ts +15 -0
  113. package/dist/flatgeobuf/3.27.2/logger.d.ts.map +1 -0
  114. package/dist/flatgeobuf/3.27.2/logger.js +65 -0
  115. package/dist/flatgeobuf/3.27.2/logger.js.map +1 -0
  116. package/dist/flatgeobuf/3.27.2/packedrtree.d.ts +43 -0
  117. package/dist/flatgeobuf/3.27.2/packedrtree.d.ts.map +1 -0
  118. package/dist/flatgeobuf/3.27.2/packedrtree.js +138 -0
  119. package/dist/flatgeobuf/3.27.2/packedrtree.js.map +1 -0
  120. package/dist/flatgeobuf/3.27.2/streams/utils.d.ts +7 -0
  121. package/dist/flatgeobuf/3.27.2/streams/utils.d.ts.map +1 -0
  122. package/dist/flatgeobuf/3.27.2/streams/utils.js +67 -0
  123. package/dist/flatgeobuf/3.27.2/streams/utils.js.map +1 -0
  124. package/dist/flatgeobuf/3.27.2/types/jsts.d.ts +23 -0
  125. package/dist/flatgeobuf/3.27.2/types/slice.d.ts +16 -0
  126. package/dist/flatgeobuf-loader.js +1 -1
  127. package/dist/index.cjs +1547 -6
  128. package/dist/lib/binary-geometries.d.ts +1 -1
  129. package/dist/lib/binary-geometries.d.ts.map +1 -1
  130. package/dist/lib/binary-geometries.js.map +1 -1
  131. package/dist/lib/get-schema-from-fgb-header.d.ts +1 -1
  132. package/dist/lib/get-schema-from-fgb-header.d.ts.map +1 -1
  133. package/dist/lib/get-schema-from-fgb-header.js.map +1 -1
  134. package/dist/lib/parse-flatgeobuf.d.ts +1 -1
  135. package/dist/lib/parse-flatgeobuf.d.ts.map +1 -1
  136. package/dist/lib/parse-flatgeobuf.js +3 -3
  137. package/dist/lib/parse-flatgeobuf.js.map +1 -1
  138. package/package.json +8 -5
  139. package/src/LICENSE +9 -0
  140. package/src/flatgeobuf/3.27.2/LICENSE +29 -0
  141. package/src/flatgeobuf/3.27.2/README.md +45 -0
  142. package/src/flatgeobuf/3.27.2/column-meta.ts +14 -0
  143. package/src/flatgeobuf/3.27.2/config.ts +19 -0
  144. package/src/flatgeobuf/3.27.2/constants.ts +4 -0
  145. package/src/flatgeobuf/3.27.2/crs-meta.ts +8 -0
  146. package/src/flatgeobuf/3.27.2/dumptree.ts +82 -0
  147. package/src/flatgeobuf/3.27.2/feature.ts +3 -0
  148. package/src/flatgeobuf/3.27.2/flat-geobuf/column-type.ts +19 -0
  149. package/src/flatgeobuf/3.27.2/flat-geobuf/column.ts +170 -0
  150. package/src/flatgeobuf/3.27.2/flat-geobuf/crs.ts +114 -0
  151. package/src/flatgeobuf/3.27.2/flat-geobuf/feature.ts +140 -0
  152. package/src/flatgeobuf/3.27.2/flat-geobuf/geometry-type.ts +22 -0
  153. package/src/flatgeobuf/3.27.2/flat-geobuf/geometry.ts +382 -0
  154. package/src/flatgeobuf/3.27.2/flat-geobuf/header.ts +246 -0
  155. package/src/flatgeobuf/3.27.2/flat-geobuf.ts +7 -0
  156. package/src/flatgeobuf/3.27.2/generic/feature.ts +243 -0
  157. package/src/flatgeobuf/3.27.2/generic/featurecollection.ts +227 -0
  158. package/src/flatgeobuf/3.27.2/generic/geometry.ts +120 -0
  159. package/src/flatgeobuf/3.27.2/generic/header.ts +32 -0
  160. package/src/flatgeobuf/3.27.2/generic.ts +33 -0
  161. package/src/flatgeobuf/3.27.2/geojson/feature.ts +20 -0
  162. package/src/flatgeobuf/3.27.2/geojson/featurecollection.ts +101 -0
  163. package/src/flatgeobuf/3.27.2/geojson/geometry.ts +142 -0
  164. package/src/flatgeobuf/3.27.2/geojson.ts +37 -0
  165. package/src/flatgeobuf/3.27.2/header-meta.ts +66 -0
  166. package/src/flatgeobuf/3.27.2/header.ts +3 -0
  167. package/src/flatgeobuf/3.27.2/http-reader.ts +351 -0
  168. package/src/flatgeobuf/3.27.2/index.ts +19 -0
  169. package/src/flatgeobuf/3.27.2/logger.ts +51 -0
  170. package/src/flatgeobuf/3.27.2/packedrtree.ts +255 -0
  171. package/src/flatgeobuf/3.27.2/streams/utils.ts +80 -0
  172. package/src/flatgeobuf/3.27.2/types/jsts.d.ts +23 -0
  173. package/src/flatgeobuf/3.27.2/types/slice.d.ts +16 -0
  174. package/src/lib/binary-geometries.ts +2 -2
  175. package/src/lib/get-schema-from-fgb-header.ts +1 -1
  176. package/src/lib/parse-flatgeobuf.ts +4 -4
@@ -1,4 +1,4 @@
1
- import { Geometry as FGBGeometry, Feature as FGBFeature } from 'flatgeobuf';
1
+ import { Geometry as FGBGeometry, Feature as FGBFeature } from '../flatgeobuf/3.27.2';
2
2
  export declare enum GeometryType {
3
3
  Unknown = 0,
4
4
  Point = 1,
@@ -1 +1 @@
1
- {"version":3,"file":"binary-geometries.d.ts","sourceRoot":"","sources":["../../src/lib/binary-geometries.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,QAAQ,IAAI,WAAW,EAAE,OAAO,IAAI,UAAU,EAAC,MAAM,YAAY,CAAC;AAG1E,MAAM,CAAC,OAAO,MAAM,YAAY;IAC9B,OAAO,IAAI;IACX,KAAK,IAAI;IACT,UAAU,IAAI;IACd,OAAO,IAAI;IACX,UAAU,IAAI;IACd,eAAe,IAAI;IACnB,YAAY,IAAI;IAChB,kBAAkB,IAAI;IACtB,cAAc,IAAI;IAClB,aAAa,IAAI;IACjB,YAAY,KAAK;IACjB,UAAU,KAAK;IACf,YAAY,KAAK;IACjB,KAAK,KAAK;IACV,OAAO,KAAK;IACZ,iBAAiB,KAAK;IACtB,GAAG,KAAK;IACR,QAAQ,KAAK;CACd;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,UAAU,GAAG,IAAI,EAAE,IAAI,EAAE,YAAY;;;;;;;;;;;;;;;;;;SAGjF;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI,EAAE,IAAI,EAAE,YAAY;;;;;;;;;;;;;;;;;;SAkBnF"}
1
+ {"version":3,"file":"binary-geometries.d.ts","sourceRoot":"","sources":["../../src/lib/binary-geometries.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,QAAQ,IAAI,WAAW,EAAE,OAAO,IAAI,UAAU,EAAC,MAAM,sBAAsB,CAAC;AAGpF,MAAM,CAAC,OAAO,MAAM,YAAY;IAC9B,OAAO,IAAI;IACX,KAAK,IAAI;IACT,UAAU,IAAI;IACd,OAAO,IAAI;IACX,UAAU,IAAI;IACd,eAAe,IAAI;IACnB,YAAY,IAAI;IAChB,kBAAkB,IAAI;IACtB,cAAc,IAAI;IAClB,aAAa,IAAI;IACjB,YAAY,KAAK;IACjB,UAAU,KAAK;IACf,YAAY,KAAK;IACjB,KAAK,KAAK;IACV,OAAO,KAAK;IACZ,iBAAiB,KAAK;IACtB,GAAG,KAAK;IACR,QAAQ,KAAK;CACd;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,UAAU,GAAG,IAAI,EAAE,IAAI,EAAE,YAAY;;;;;;;;;;;;;;;;;;SAGjF;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI,EAAE,IAAI,EAAE,YAAY;;;;;;;;;;;;;;;;;;SAkBnF"}
@@ -1 +1 @@
1
- {"version":3,"file":"binary-geometries.js","names":["fgbToBinaryFeature","geometry","type","fgbGeometry","fgbToBinaryGeometry","GeometryType","Point","MultiPoint","parsePoint","LineString","MultiLineString","parseLines","Polygon","parsePolygons","MultiPolygon","parseMultiPolygons","Error","xy","xyArray","z","zArray","positions","blitArrays","ends","endsArray","Array","from","length","unshift","pathIndices","value","Uint16Array","size","primitivePolygonIndices","polygonIndices","parsedParts","nPositions","nPrimitivePolygonIndices","nPolygonIndices","i","partsLength","part","parts","polygon","push","concatPositions","Float64Array","concatPrimitivePolygonIndices","Uint32Array","concatPolygonIndices","positionCounter","primitivePolygonIndicesCounter","polygonIndicesCounter","positionSize","parsedPart","set","subarray","map","x","totalLength","xyz"],"sources":["../../src/lib/binary-geometries.ts"],"sourcesContent":["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {Geometry as FGBGeometry, Feature as FGBFeature} from 'flatgeobuf';\n// import {GeometryType} from 'flatgeobuf/generic';\n// Copy geometry type as it is hard to access the export\nexport declare enum GeometryType {\n Unknown = 0,\n Point = 1,\n LineString = 2,\n Polygon = 3,\n MultiPoint = 4,\n MultiLineString = 5,\n MultiPolygon = 6,\n GeometryCollection = 7,\n CircularString = 8,\n CompoundCurve = 9,\n CurvePolygon = 10,\n MultiCurve = 11,\n MultiSurface = 12,\n Curve = 13,\n Surface = 14,\n PolyhedralSurface = 15,\n TIN = 16,\n Triangle = 17\n}\n\nexport function fgbToBinaryFeature(geometry: FGBFeature | null, type: GeometryType) {\n const fgbGeometry: FGBGeometry | null = geometry?.geometry() || null;\n return fgbToBinaryGeometry(fgbGeometry, type);\n}\n\nexport function fgbToBinaryGeometry(geometry: FGBGeometry | null, type: GeometryType) {\n if (geometry === null) {\n return null;\n }\n switch (type) {\n case GeometryType.Point:\n case GeometryType.MultiPoint:\n return parsePoint(geometry);\n case GeometryType.LineString:\n case GeometryType.MultiLineString:\n return parseLines(geometry);\n case GeometryType.Polygon:\n return parsePolygons(geometry);\n case GeometryType.MultiPolygon:\n return parseMultiPolygons(geometry);\n default:\n throw new Error(`Unimplemented geometry type: ${type}`);\n }\n}\n\n// Parse Point to flat array\nfunction parsePoint(geometry: FGBGeometry) {\n const xy = geometry.xyArray();\n const z = geometry.zArray();\n // @ts-expect-error TODO handle null geometries\n const positions = blitArrays(xy, z);\n return {positions};\n}\n\nfunction parseLines(geometry: FGBGeometry) {\n const xy = geometry.xyArray();\n const z = geometry.zArray();\n const positions = blitArrays(xy!, z!);\n\n // If endsArray is null, a single LineString. Otherwise, contains the end\n // indices of each part of the MultiLineString. geometry.endsArray() omits the\n // initial 0 that we have in our internal format.\n // @ts-expect-error TODO handle null geometries\n const ends = (geometry.endsArray() && Array.from(geometry.endsArray())) || [xy.length / 2];\n ends.unshift(0);\n\n const pathIndices = {value: new Uint16Array(ends), size: 1};\n\n return {\n positions,\n pathIndices\n };\n}\n\nfunction parsePolygons(geometry: FGBGeometry) {\n const xy = geometry.xyArray();\n const z = geometry.zArray();\n // @ts-expect-error TODO handle null geometries\n const positions = blitArrays(xy, z);\n\n // If endsArray is null, a simple Polygon with no inner rings. Otherwise,\n // contains the end indices of each ring of the Polygon. geometry.endsArray()\n // omits the initial 0 that we have in our internal format.\n // @ts-expect-error TODO handle null geometries\n const ends = (geometry.endsArray() && Array.from(geometry.endsArray())) || [xy.length / 2];\n ends.unshift(0);\n\n const primitivePolygonIndices = {value: new Uint16Array(ends), size: 1};\n const polygonIndices = {value: new Uint16Array([0, xy!.length / 2]), size: 1};\n\n return {\n positions,\n primitivePolygonIndices,\n polygonIndices\n };\n}\n\n// eslint-disable-next-line max-statements\nfunction parseMultiPolygons(geometry: FGBGeometry) {\n // Create arrays for each geometry part, then concatenate\n const parsedParts: any[] = [];\n let nPositions = 0;\n let nPrimitivePolygonIndices = 1;\n let nPolygonIndices = 1;\n\n for (let i = 0; i < geometry.partsLength(); i++) {\n const part = geometry.parts(i);\n // @ts-expect-error TODO handle null geometries\n const polygon = parsePolygons(part);\n\n nPositions += polygon.positions.value.length;\n nPrimitivePolygonIndices += polygon.primitivePolygonIndices.value.length - 1;\n nPolygonIndices += polygon.polygonIndices.value.length - 1;\n\n parsedParts.push(polygon);\n }\n\n const concatPositions = new Float64Array(nPositions);\n const concatPrimitivePolygonIndices = new Uint32Array(nPrimitivePolygonIndices);\n const concatPolygonIndices = new Uint32Array(nPolygonIndices);\n\n let positionCounter = 0;\n let primitivePolygonIndicesCounter = 1;\n let polygonIndicesCounter = 1;\n\n // Assumes all parts of the multipolygon have the same size\n const positionSize = parsedParts[0].positions.size;\n\n for (const parsedPart of parsedParts) {\n concatPositions.set(parsedPart.positions.value, positionCounter * positionSize);\n\n // For indices, need to add positionCounter so that position indices are\n // correct in the concatenated positions\n concatPrimitivePolygonIndices.set(\n // eslint-disable-next-line\n parsedPart.primitivePolygonIndices.value.subarray(1).map((x) => x + positionCounter),\n primitivePolygonIndicesCounter\n );\n concatPolygonIndices.set(\n // eslint-disable-next-line\n parsedPart.polygonIndices.value.subarray(1).map((x) => x + positionCounter),\n polygonIndicesCounter\n );\n\n positionCounter += parsedPart.positions.value.length / positionSize;\n primitivePolygonIndicesCounter += parsedPart.primitivePolygonIndices.value.length - 1;\n polygonIndicesCounter += parsedPart.polygonIndices.value.length - 1;\n }\n\n return {\n positions: {value: concatPositions, size: positionSize},\n primitivePolygonIndices: {value: concatPrimitivePolygonIndices, size: 1},\n polygonIndices: {value: concatPolygonIndices, size: 1}\n };\n}\n\n// Combine xy and z arrays\nfunction blitArrays(xy: Float64Array, z: Float64Array): {value: Float64Array; size: number} {\n if (!z) {\n return {value: xy, size: 2};\n }\n\n if (z.length * 2 !== xy.length) {\n throw new Error('Z array must be half XY array\\'s length');\n }\n const totalLength = xy.length + z.length;\n\n const xyz = new Float64Array(totalLength);\n for (let i = 0; i < xy.length / 2; i++) {\n xyz[i * 3 + 0] = xy[i * 2 + 0];\n xyz[i * 3 + 1] = xy[i * 2 + 1];\n xyz[i * 3 + 2] = z[i];\n }\n return {value: xyz, size: 3};\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"binary-geometries.js","names":["fgbToBinaryFeature","geometry","type","fgbGeometry","fgbToBinaryGeometry","GeometryType","Point","MultiPoint","parsePoint","LineString","MultiLineString","parseLines","Polygon","parsePolygons","MultiPolygon","parseMultiPolygons","Error","xy","xyArray","z","zArray","positions","blitArrays","ends","endsArray","Array","from","length","unshift","pathIndices","value","Uint16Array","size","primitivePolygonIndices","polygonIndices","parsedParts","nPositions","nPrimitivePolygonIndices","nPolygonIndices","i","partsLength","part","parts","polygon","push","concatPositions","Float64Array","concatPrimitivePolygonIndices","Uint32Array","concatPolygonIndices","positionCounter","primitivePolygonIndicesCounter","polygonIndicesCounter","positionSize","parsedPart","set","subarray","map","x","totalLength","xyz"],"sources":["../../src/lib/binary-geometries.ts"],"sourcesContent":["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {Geometry as FGBGeometry, Feature as FGBFeature} from '../flatgeobuf/3.27.2';\n// import {GeometryType} from '../flatgeobuf/generic';\n// Copy geometry type as it is hard to access the export\nexport declare enum GeometryType {\n Unknown = 0,\n Point = 1,\n LineString = 2,\n Polygon = 3,\n MultiPoint = 4,\n MultiLineString = 5,\n MultiPolygon = 6,\n GeometryCollection = 7,\n CircularString = 8,\n CompoundCurve = 9,\n CurvePolygon = 10,\n MultiCurve = 11,\n MultiSurface = 12,\n Curve = 13,\n Surface = 14,\n PolyhedralSurface = 15,\n TIN = 16,\n Triangle = 17\n}\n\nexport function fgbToBinaryFeature(geometry: FGBFeature | null, type: GeometryType) {\n const fgbGeometry: FGBGeometry | null = geometry?.geometry() || null;\n return fgbToBinaryGeometry(fgbGeometry, type);\n}\n\nexport function fgbToBinaryGeometry(geometry: FGBGeometry | null, type: GeometryType) {\n if (geometry === null) {\n return null;\n }\n switch (type) {\n case GeometryType.Point:\n case GeometryType.MultiPoint:\n return parsePoint(geometry);\n case GeometryType.LineString:\n case GeometryType.MultiLineString:\n return parseLines(geometry);\n case GeometryType.Polygon:\n return parsePolygons(geometry);\n case GeometryType.MultiPolygon:\n return parseMultiPolygons(geometry);\n default:\n throw new Error(`Unimplemented geometry type: ${type}`);\n }\n}\n\n// Parse Point to flat array\nfunction parsePoint(geometry: FGBGeometry) {\n const xy = geometry.xyArray();\n const z = geometry.zArray();\n // @ts-expect-error TODO handle null geometries\n const positions = blitArrays(xy, z);\n return {positions};\n}\n\nfunction parseLines(geometry: FGBGeometry) {\n const xy = geometry.xyArray();\n const z = geometry.zArray();\n const positions = blitArrays(xy!, z!);\n\n // If endsArray is null, a single LineString. Otherwise, contains the end\n // indices of each part of the MultiLineString. geometry.endsArray() omits the\n // initial 0 that we have in our internal format.\n // @ts-expect-error TODO handle null geometries\n const ends = (geometry.endsArray() && Array.from(geometry.endsArray())) || [xy.length / 2];\n ends.unshift(0);\n\n const pathIndices = {value: new Uint16Array(ends), size: 1};\n\n return {\n positions,\n pathIndices\n };\n}\n\nfunction parsePolygons(geometry: FGBGeometry) {\n const xy = geometry.xyArray();\n const z = geometry.zArray();\n // @ts-expect-error TODO handle null geometries\n const positions = blitArrays(xy, z);\n\n // If endsArray is null, a simple Polygon with no inner rings. Otherwise,\n // contains the end indices of each ring of the Polygon. geometry.endsArray()\n // omits the initial 0 that we have in our internal format.\n // @ts-expect-error TODO handle null geometries\n const ends = (geometry.endsArray() && Array.from(geometry.endsArray())) || [xy.length / 2];\n ends.unshift(0);\n\n const primitivePolygonIndices = {value: new Uint16Array(ends), size: 1};\n const polygonIndices = {value: new Uint16Array([0, xy!.length / 2]), size: 1};\n\n return {\n positions,\n primitivePolygonIndices,\n polygonIndices\n };\n}\n\n// eslint-disable-next-line max-statements\nfunction parseMultiPolygons(geometry: FGBGeometry) {\n // Create arrays for each geometry part, then concatenate\n const parsedParts: any[] = [];\n let nPositions = 0;\n let nPrimitivePolygonIndices = 1;\n let nPolygonIndices = 1;\n\n for (let i = 0; i < geometry.partsLength(); i++) {\n const part = geometry.parts(i);\n // @ts-expect-error TODO handle null geometries\n const polygon = parsePolygons(part);\n\n nPositions += polygon.positions.value.length;\n nPrimitivePolygonIndices += polygon.primitivePolygonIndices.value.length - 1;\n nPolygonIndices += polygon.polygonIndices.value.length - 1;\n\n parsedParts.push(polygon);\n }\n\n const concatPositions = new Float64Array(nPositions);\n const concatPrimitivePolygonIndices = new Uint32Array(nPrimitivePolygonIndices);\n const concatPolygonIndices = new Uint32Array(nPolygonIndices);\n\n let positionCounter = 0;\n let primitivePolygonIndicesCounter = 1;\n let polygonIndicesCounter = 1;\n\n // Assumes all parts of the multipolygon have the same size\n const positionSize = parsedParts[0].positions.size;\n\n for (const parsedPart of parsedParts) {\n concatPositions.set(parsedPart.positions.value, positionCounter * positionSize);\n\n // For indices, need to add positionCounter so that position indices are\n // correct in the concatenated positions\n concatPrimitivePolygonIndices.set(\n // eslint-disable-next-line\n parsedPart.primitivePolygonIndices.value.subarray(1).map((x) => x + positionCounter),\n primitivePolygonIndicesCounter\n );\n concatPolygonIndices.set(\n // eslint-disable-next-line\n parsedPart.polygonIndices.value.subarray(1).map((x) => x + positionCounter),\n polygonIndicesCounter\n );\n\n positionCounter += parsedPart.positions.value.length / positionSize;\n primitivePolygonIndicesCounter += parsedPart.primitivePolygonIndices.value.length - 1;\n polygonIndicesCounter += parsedPart.polygonIndices.value.length - 1;\n }\n\n return {\n positions: {value: concatPositions, size: positionSize},\n primitivePolygonIndices: {value: concatPrimitivePolygonIndices, size: 1},\n polygonIndices: {value: concatPolygonIndices, size: 1}\n };\n}\n\n// Combine xy and z arrays\nfunction blitArrays(xy: Float64Array, z: Float64Array): {value: Float64Array; size: number} {\n if (!z) {\n return {value: xy, size: 2};\n }\n\n if (z.length * 2 !== xy.length) {\n throw new Error('Z array must be half XY array\\'s length');\n }\n const totalLength = xy.length + z.length;\n\n const xyz = new Float64Array(totalLength);\n for (let i = 0; i < xy.length / 2; i++) {\n xyz[i * 3 + 0] = xy[i * 2 + 0];\n xyz[i * 3 + 1] = xy[i * 2 + 1];\n xyz[i * 3 + 2] = z[i];\n }\n return {value: xyz, size: 3};\n}\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { Schema } from '@loaders.gl/schema';
2
- import * as fgb from 'flatgeobuf';
2
+ import * as fgb from '../flatgeobuf/3.27.2';
3
3
  /**
4
4
  * @param fgbHeader
5
5
  * geometryType: GeometryType;
@@ -1 +1 @@
1
- {"version":3,"file":"get-schema-from-fgb-header.d.ts","sourceRoot":"","sources":["../../src/lib/get-schema-from-fgb-header.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,MAAM,EAAkB,MAAM,oBAAoB,CAAC;AAChE,OAAO,KAAK,GAAG,MAAM,YAAY,CAAC;AAElC;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,GAAG,CAAC,UAAU,GAAG,MAAM,CAcxE"}
1
+ {"version":3,"file":"get-schema-from-fgb-header.d.ts","sourceRoot":"","sources":["../../src/lib/get-schema-from-fgb-header.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,MAAM,EAAkB,MAAM,oBAAoB,CAAC;AAChE,OAAO,KAAK,GAAG,MAAM,sBAAsB,CAAC;AAE5C;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,GAAG,CAAC,UAAU,GAAG,MAAM,CAcxE"}
@@ -1 +1 @@
1
- {"version":3,"file":"get-schema-from-fgb-header.js","names":["getSchemaFromFGBHeader","fgbHeader","_fgbHeader$envelope","_fgbHeader$columns","metadata","title","description","crs","JSON","stringify","geometryType","String","indexNodeSize","featureCount","featuresCount","bounds","envelope","join","fields","columns","map","column","getFieldFromFGBColumn","fgbColumn","width","precision","scale","unique","primary_key","name","type","getTypeFromFGBType","nullable","fgbColumnType","fgbType","Byte","UByte","Bool","Short","UShort","Int","UInt","Long","ULong","Float","Double","Json","DateTime","Binary"],"sources":["../../src/lib/get-schema-from-fgb-header.ts"],"sourcesContent":["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {Schema, Field, DataType} from '@loaders.gl/schema';\nimport * as fgb from 'flatgeobuf';\n\n/**\n * @param fgbHeader\n * geometryType: GeometryType;\n * columns: ColumnMeta[] | null;\n * envelope: Float64Array | null;\n * featuresCount: number;\n * indexNodeSize: number;\n * crs: CrsMeta | null;\n * title: string | null;\n * description: string | null;\n * metadata: string | null;\n */\nexport function getSchemaFromFGBHeader(fgbHeader: fgb.HeaderMeta): Schema {\n const metadata: Record<string, string> = {\n title: fgbHeader.title || '',\n description: fgbHeader.description || '',\n crs: JSON.stringify(fgbHeader.crs) || '',\n metadata: fgbHeader.metadata || '',\n geometryType: String(fgbHeader.geometryType),\n indexNodeSize: String(fgbHeader.indexNodeSize),\n featureCount: String(fgbHeader.featuresCount),\n bounds: fgbHeader.envelope?.join(',') || ''\n };\n\n const fields: Field[] = fgbHeader.columns?.map((column) => getFieldFromFGBColumn(column)) || [];\n return {metadata, fields};\n}\n\n/**\n * name: string;\n * type: ColumnType;\n * title: string | null;\n * description: string | null;\n * width: number;\n * precision: number;\n * scale: number;\n * nullable: boolean;\n * unique: boolean;\n * primary_key: boolean;\n */\nfunction getFieldFromFGBColumn(fgbColumn: fgb.ColumnMeta): Field {\n const metadata: Record<string, string> = {\n title: fgbColumn.title || '',\n description: fgbColumn.description || '',\n width: String(fgbColumn.width),\n precision: String(fgbColumn.precision),\n scale: String(fgbColumn.scale),\n unique: String(fgbColumn.unique),\n primary_key: String(fgbColumn.primary_key)\n };\n\n return {\n name: fgbColumn.name,\n type: getTypeFromFGBType(fgbColumn.type as unknown as fgbColumnType),\n nullable: fgbColumn.nullable,\n metadata\n };\n}\n\n/** Note: fgb.ColumType does not appear to be exported */\nenum fgbColumnType {\n Byte = 0,\n UByte = 1,\n Bool = 2,\n Short = 3,\n UShort = 4,\n Int = 5,\n UInt = 6,\n Long = 7,\n ULong = 8,\n Float = 9,\n Double = 10,\n String = 11,\n Json = 12,\n DateTime = 13,\n Binary = 14\n}\n\n/** Convert FGB types to arrow like types */\nfunction getTypeFromFGBType(fgbType: fgbColumnType /* fgb.ColumnMeta['type'] */): DataType {\n switch (fgbType) {\n case fgbColumnType.Byte:\n return 'int8';\n case fgbColumnType.UByte:\n return 'uint8';\n case fgbColumnType.Bool:\n return 'bool';\n case fgbColumnType.Short:\n return 'int16';\n case fgbColumnType.UShort:\n return 'uint16';\n case fgbColumnType.Int:\n return 'int32';\n case fgbColumnType.UInt:\n return 'uint32';\n case fgbColumnType.Long:\n return 'int64';\n case fgbColumnType.ULong:\n return 'uint64';\n case fgbColumnType.Float:\n return 'float32';\n case fgbColumnType.Double:\n return 'float64';\n case fgbColumnType.String:\n return 'utf8';\n case fgbColumnType.Json:\n return 'null';\n case fgbColumnType.DateTime:\n return 'date-millisecond';\n case fgbColumnType.Binary:\n return 'binary';\n default:\n return 'null';\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"get-schema-from-fgb-header.js","names":["getSchemaFromFGBHeader","fgbHeader","_fgbHeader$envelope","_fgbHeader$columns","metadata","title","description","crs","JSON","stringify","geometryType","String","indexNodeSize","featureCount","featuresCount","bounds","envelope","join","fields","columns","map","column","getFieldFromFGBColumn","fgbColumn","width","precision","scale","unique","primary_key","name","type","getTypeFromFGBType","nullable","fgbColumnType","fgbType","Byte","UByte","Bool","Short","UShort","Int","UInt","Long","ULong","Float","Double","Json","DateTime","Binary"],"sources":["../../src/lib/get-schema-from-fgb-header.ts"],"sourcesContent":["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {Schema, Field, DataType} from '@loaders.gl/schema';\nimport * as fgb from '../flatgeobuf/3.27.2';\n\n/**\n * @param fgbHeader\n * geometryType: GeometryType;\n * columns: ColumnMeta[] | null;\n * envelope: Float64Array | null;\n * featuresCount: number;\n * indexNodeSize: number;\n * crs: CrsMeta | null;\n * title: string | null;\n * description: string | null;\n * metadata: string | null;\n */\nexport function getSchemaFromFGBHeader(fgbHeader: fgb.HeaderMeta): Schema {\n const metadata: Record<string, string> = {\n title: fgbHeader.title || '',\n description: fgbHeader.description || '',\n crs: JSON.stringify(fgbHeader.crs) || '',\n metadata: fgbHeader.metadata || '',\n geometryType: String(fgbHeader.geometryType),\n indexNodeSize: String(fgbHeader.indexNodeSize),\n featureCount: String(fgbHeader.featuresCount),\n bounds: fgbHeader.envelope?.join(',') || ''\n };\n\n const fields: Field[] = fgbHeader.columns?.map((column) => getFieldFromFGBColumn(column)) || [];\n return {metadata, fields};\n}\n\n/**\n * name: string;\n * type: ColumnType;\n * title: string | null;\n * description: string | null;\n * width: number;\n * precision: number;\n * scale: number;\n * nullable: boolean;\n * unique: boolean;\n * primary_key: boolean;\n */\nfunction getFieldFromFGBColumn(fgbColumn: fgb.ColumnMeta): Field {\n const metadata: Record<string, string> = {\n title: fgbColumn.title || '',\n description: fgbColumn.description || '',\n width: String(fgbColumn.width),\n precision: String(fgbColumn.precision),\n scale: String(fgbColumn.scale),\n unique: String(fgbColumn.unique),\n primary_key: String(fgbColumn.primary_key)\n };\n\n return {\n name: fgbColumn.name,\n type: getTypeFromFGBType(fgbColumn.type as unknown as fgbColumnType),\n nullable: fgbColumn.nullable,\n metadata\n };\n}\n\n/** Note: fgb.ColumType does not appear to be exported */\nenum fgbColumnType {\n Byte = 0,\n UByte = 1,\n Bool = 2,\n Short = 3,\n UShort = 4,\n Int = 5,\n UInt = 6,\n Long = 7,\n ULong = 8,\n Float = 9,\n Double = 10,\n String = 11,\n Json = 12,\n DateTime = 13,\n Binary = 14\n}\n\n/** Convert FGB types to arrow like types */\nfunction getTypeFromFGBType(fgbType: fgbColumnType /* fgb.ColumnMeta['type'] */): DataType {\n switch (fgbType) {\n case fgbColumnType.Byte:\n return 'int8';\n case fgbColumnType.UByte:\n return 'uint8';\n case fgbColumnType.Bool:\n return 'bool';\n case fgbColumnType.Short:\n return 'int16';\n case fgbColumnType.UShort:\n return 'uint16';\n case fgbColumnType.Int:\n return 'int32';\n case fgbColumnType.UInt:\n return 'uint32';\n case fgbColumnType.Long:\n return 'int64';\n case fgbColumnType.ULong:\n return 'uint64';\n case fgbColumnType.Float:\n return 'float32';\n case fgbColumnType.Double:\n return 'float64';\n case fgbColumnType.String:\n return 'utf8';\n case fgbColumnType.Json:\n return 'null';\n case fgbColumnType.DateTime:\n return 'date-millisecond';\n case fgbColumnType.Binary:\n return 'binary';\n default:\n return 'null';\n }\n}\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import type { FlatGeobufLoaderOptions } from '../flatgeobuf-loader';
2
2
  import type { Table } from '@loaders.gl/schema';
3
- import * as fgb from 'flatgeobuf';
3
+ import * as fgb from '../flatgeobuf/3.27.2';
4
4
  export declare function parseFlatGeobuf(arrayBuffer: ArrayBuffer, options?: FlatGeobufLoaderOptions): Table;
5
5
  export declare function parseFlatGeobufInBatches(stream: any, options: FlatGeobufLoaderOptions): any[] | AsyncGenerator<fgb.IFeature, any, unknown> | AsyncGenerator<any, void, unknown>;
6
6
  //# sourceMappingURL=parse-flatgeobuf.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"parse-flatgeobuf.d.ts","sourceRoot":"","sources":["../../src/lib/parse-flatgeobuf.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAC,uBAAuB,EAAC,MAAM,sBAAsB,CAAC;AAClE,OAAO,KAAK,EAAe,KAAK,EAAS,MAAM,oBAAoB,CAAC;AAKpE,OAAO,KAAK,GAAG,MAAM,YAAY,CAAC;AAgClC,wBAAgB,eAAe,CAC7B,WAAW,EAAE,WAAW,EACxB,OAAO,CAAC,EAAE,uBAAuB,GAChC,KAAK,CAoBP;AAyDD,wBAAgB,wBAAwB,CAAC,MAAM,KAAA,EAAE,OAAO,EAAE,uBAAuB,2FAUhF"}
1
+ {"version":3,"file":"parse-flatgeobuf.d.ts","sourceRoot":"","sources":["../../src/lib/parse-flatgeobuf.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAC,uBAAuB,EAAC,MAAM,sBAAsB,CAAC;AAClE,OAAO,KAAK,EAAe,KAAK,EAAS,MAAM,oBAAoB,CAAC;AAKpE,OAAO,KAAK,GAAG,MAAM,sBAAsB,CAAC;AAgC5C,wBAAgB,eAAe,CAC7B,WAAW,EAAE,WAAW,EACxB,OAAO,CAAC,EAAE,uBAAuB,GAChC,KAAK,CAoBP;AAyDD,wBAAgB,wBAAwB,CAAC,MAAM,KAAA,EAAE,OAAO,EAAE,uBAAuB,2FAUhF"}
@@ -2,9 +2,9 @@ import { Proj4Projection } from '@math.gl/proj4';
2
2
  import { transformGeoJsonCoords } from '@loaders.gl/gis';
3
3
  import { fgbToBinaryGeometry } from "./binary-geometries.js";
4
4
  import { getSchemaFromFGBHeader } from "./get-schema-from-fgb-header.js";
5
- import * as geojson from 'flatgeobuf/lib/mjs/geojson.js';
6
- import * as generic from 'flatgeobuf/lib/mjs/generic.js';
7
- import { parseProperties as parsePropertiesBinary } from 'flatgeobuf/lib/mjs/generic/feature';
5
+ import * as geojson from '../flatgeobuf/3.27.2/geojson.js';
6
+ import * as generic from '../flatgeobuf/3.27.2/generic.js';
7
+ import { parseProperties as parsePropertiesBinary } from "../flatgeobuf/3.27.2/generic/feature.js";
8
8
  const deserializeGeoJson = geojson.deserialize;
9
9
  const deserializeGeneric = generic.deserialize;
10
10
  function binaryFromFeature(feature, header) {
@@ -1 +1 @@
1
- {"version":3,"file":"parse-flatgeobuf.js","names":["Proj4Projection","transformGeoJsonCoords","fgbToBinaryGeometry","getSchemaFromFGBHeader","geojson","generic","parseProperties","parsePropertiesBinary","deserializeGeoJson","deserialize","deserializeGeneric","binaryFromFeature","feature","header","geometry","geometryType","type","parsedGeometry","properties","columns","parseFlatGeobuf","arrayBuffer","options","_options$flatgeobuf","shape","flatgeobuf","parseFlatGeobufToGeoJSONTable","binary","parseFlatGeobufToBinary","data","Error","arguments","length","undefined","array","Uint8Array","byteLength","features","reproject","_targetCrs","gis","arr","fgbHeader","schema","headerMeta","crs","projection","from","wkt","to","e","coords","project","parseFlatGeobufInBatches","stream","_options$flatgeobuf2","parseFlatGeobufInBatchesToBinary","parseFlatGeobufInBatchesToGeoJSON","iterator","firstRecord"],"sources":["../../src/lib/parse-flatgeobuf.ts"],"sourcesContent":["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {Proj4Projection} from '@math.gl/proj4';\nimport {transformGeoJsonCoords} from '@loaders.gl/gis';\n\nimport type {FlatGeobufLoaderOptions} from '../flatgeobuf-loader';\nimport type {GeoJSONTable, Table, Schema} from '@loaders.gl/schema';\n\nimport {fgbToBinaryGeometry} from './binary-geometries';\nimport {getSchemaFromFGBHeader} from './get-schema-from-fgb-header';\n\nimport * as fgb from 'flatgeobuf';\nimport * as geojson from 'flatgeobuf/lib/mjs/geojson.js';\nimport * as generic from 'flatgeobuf/lib/mjs/generic.js';\nimport {parseProperties as parsePropertiesBinary} from 'flatgeobuf/lib/mjs/generic/feature';\n\nconst deserializeGeoJson = geojson.deserialize;\nconst deserializeGeneric = generic.deserialize;\n// const parsePropertiesBinary = FlatgeobufFeature.parseProperties;\n\n// TODO: reproject binary features\nfunction binaryFromFeature(feature: fgb.Feature, header: fgb.HeaderMeta) {\n const geometry = feature.geometry();\n\n // FlatGeobuf files can only hold a single geometry type per file, otherwise\n // GeometryType is GeometryCollection\n // I believe geometry.type() is null (0) except when the geometry type isn't\n // known in the header?\n const geometryType = header.geometryType || geometry?.type();\n const parsedGeometry = fgbToBinaryGeometry(geometry, geometryType!);\n // @ts-expect-error this looks wrong\n parsedGeometry.properties = parsePropertiesBinary(feature, header.columns);\n\n // TODO: wrap binary data either in points, lines, or polygons key\n return parsedGeometry;\n}\n\n/*\n * Parse FlatGeobuf arrayBuffer and return GeoJSON.\n *\n * @param arrayBuffer A FlatGeobuf arrayBuffer\n * @return A GeoJSON geometry object\n */\nexport function parseFlatGeobuf(\n arrayBuffer: ArrayBuffer,\n options?: FlatGeobufLoaderOptions\n): Table {\n const shape = options?.flatgeobuf?.shape;\n\n switch (shape) {\n case 'geojson-table': {\n return parseFlatGeobufToGeoJSONTable(arrayBuffer, options);\n }\n\n case 'columnar-table': // binary + some JS arrays\n const binary = parseFlatGeobufToBinary(arrayBuffer, options);\n // @ts-expect-error\n return {shape: 'columnar-table', data: binary};\n\n case 'binary':\n // @ts-expect-error\n return parseFlatGeobufToBinary(arrayBuffer, options);\n\n default:\n throw new Error(shape);\n }\n}\n\nfunction parseFlatGeobufToBinary(arrayBuffer: ArrayBuffer, options: FlatGeobufLoaderOptions = {}) {\n // TODO: reproject binary features\n // const {reproject = false, _targetCrs = 'WGS84'} = (options && options.gis) || {};\n\n const array = new Uint8Array(arrayBuffer);\n // @ts-expect-error\n return deserializeGeneric(array, fgbToBinaryGeometry);\n}\n\nfunction parseFlatGeobufToGeoJSONTable(\n arrayBuffer: ArrayBuffer,\n options: FlatGeobufLoaderOptions = {}\n): GeoJSONTable {\n if (arrayBuffer.byteLength === 0) {\n return {shape: 'geojson-table', type: 'FeatureCollection', features: []};\n }\n\n const {reproject = false, _targetCrs = 'WGS84'} = (options && options.gis) || {};\n\n const arr = new Uint8Array(arrayBuffer);\n\n let fgbHeader;\n let schema: Schema | undefined;\n\n // @ts-expect-error this looks wrong\n let {features} = deserializeGeoJson(arr, undefined, (headerMeta) => {\n fgbHeader = headerMeta;\n schema = getSchemaFromFGBHeader(fgbHeader);\n });\n\n const crs = fgbHeader && fgbHeader.crs;\n let projection;\n if (reproject && crs) {\n // Constructing the projection may fail for some invalid WKT strings\n try {\n projection = new Proj4Projection({from: crs.wkt, to: _targetCrs});\n } catch (e) {\n // no op\n }\n }\n\n if (projection) {\n features = transformGeoJsonCoords(features, (coords) => projection.project(coords));\n }\n\n return {shape: 'geojson-table', schema, type: 'FeatureCollection', features};\n}\n\n/*\n * Parse FlatGeobuf arrayBuffer and return GeoJSON.\n *\n * @param {ReadableStream} _ A FlatGeobuf arrayBuffer\n * @return A GeoJSON geometry object iterator\n */\n// eslint-disable-next-line complexity\nexport function parseFlatGeobufInBatches(stream, options: FlatGeobufLoaderOptions) {\n const shape = options.flatgeobuf?.shape;\n switch (shape) {\n case 'binary':\n return parseFlatGeobufInBatchesToBinary(stream, options);\n case 'geojson-table':\n return parseFlatGeobufInBatchesToGeoJSON(stream, options);\n default:\n throw new Error(shape);\n }\n}\n\nfunction parseFlatGeobufInBatchesToBinary(stream, options: FlatGeobufLoaderOptions) {\n // TODO: reproject binary streaming features\n // const {reproject = false, _targetCrs = 'WGS84'} = (options && options.gis) || {};\n\n // @ts-expect-error\n const iterator = deserializeGeneric(stream, binaryFromFeature);\n return iterator;\n}\n\n/**\n * @todo this does not return proper GeoJSONTable batches\n * @param stream\n * @param options\n */\n// eslint-disable-next-line complexity\nasync function* parseFlatGeobufInBatchesToGeoJSON(stream, options: FlatGeobufLoaderOptions) {\n const {reproject = false, _targetCrs = 'WGS84'} = (options && options.gis) || {};\n\n let fgbHeader;\n // let schema: Schema | undefined;\n const iterator = deserializeGeoJson(stream, undefined, (headerMeta) => {\n fgbHeader = headerMeta;\n // schema = getSchemaFromFGBHeader(fgbHeader);\n });\n\n let projection;\n let firstRecord = true;\n // @ts-expect-error this looks wrong\n for await (const feature of iterator) {\n if (firstRecord) {\n const crs = fgbHeader && fgbHeader.crs;\n if (reproject && crs) {\n projection = new Proj4Projection({from: crs.wkt, to: _targetCrs});\n }\n\n firstRecord = false;\n }\n\n if (reproject && projection) {\n // eslint-disable-next-line\n yield transformGeoJsonCoords([feature], (coords) => projection.project(coords));\n } else {\n yield feature;\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"parse-flatgeobuf.js","names":["Proj4Projection","transformGeoJsonCoords","fgbToBinaryGeometry","getSchemaFromFGBHeader","geojson","generic","parseProperties","parsePropertiesBinary","deserializeGeoJson","deserialize","deserializeGeneric","binaryFromFeature","feature","header","geometry","geometryType","type","parsedGeometry","properties","columns","parseFlatGeobuf","arrayBuffer","options","_options$flatgeobuf","shape","flatgeobuf","parseFlatGeobufToGeoJSONTable","binary","parseFlatGeobufToBinary","data","Error","arguments","length","undefined","array","Uint8Array","byteLength","features","reproject","_targetCrs","gis","arr","fgbHeader","schema","headerMeta","crs","projection","from","wkt","to","e","coords","project","parseFlatGeobufInBatches","stream","_options$flatgeobuf2","parseFlatGeobufInBatchesToBinary","parseFlatGeobufInBatchesToGeoJSON","iterator","firstRecord"],"sources":["../../src/lib/parse-flatgeobuf.ts"],"sourcesContent":["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {Proj4Projection} from '@math.gl/proj4';\nimport {transformGeoJsonCoords} from '@loaders.gl/gis';\n\nimport type {FlatGeobufLoaderOptions} from '../flatgeobuf-loader';\nimport type {GeoJSONTable, Table, Schema} from '@loaders.gl/schema';\n\nimport {fgbToBinaryGeometry} from './binary-geometries';\nimport {getSchemaFromFGBHeader} from './get-schema-from-fgb-header';\n\nimport * as fgb from '../flatgeobuf/3.27.2';\nimport * as geojson from '../flatgeobuf/3.27.2/geojson.js';\nimport * as generic from '../flatgeobuf/3.27.2/generic.js';\nimport {parseProperties as parsePropertiesBinary} from '../flatgeobuf/3.27.2/generic/feature';\n\nconst deserializeGeoJson = geojson.deserialize;\nconst deserializeGeneric = generic.deserialize;\n// const parsePropertiesBinary = FlatgeobufFeature.parseProperties;\n\n// TODO: reproject binary features\nfunction binaryFromFeature(feature: fgb.Feature, header: fgb.HeaderMeta) {\n const geometry = feature.geometry();\n\n // FlatGeobuf files can only hold a single geometry type per file, otherwise\n // GeometryType is GeometryCollection\n // I believe geometry.type() is null (0) except when the geometry type isn't\n // known in the header?\n const geometryType = header.geometryType || geometry?.type();\n const parsedGeometry = fgbToBinaryGeometry(geometry, geometryType!);\n // @ts-expect-error this looks wrong\n parsedGeometry.properties = parsePropertiesBinary(feature, header.columns);\n\n // TODO: wrap binary data either in points, lines, or polygons key\n return parsedGeometry;\n}\n\n/*\n * Parse FlatGeobuf arrayBuffer and return GeoJSON.\n *\n * @param arrayBuffer A FlatGeobuf arrayBuffer\n * @return A GeoJSON geometry object\n */\nexport function parseFlatGeobuf(\n arrayBuffer: ArrayBuffer,\n options?: FlatGeobufLoaderOptions\n): Table {\n const shape = options?.flatgeobuf?.shape;\n\n switch (shape) {\n case 'geojson-table': {\n return parseFlatGeobufToGeoJSONTable(arrayBuffer, options);\n }\n\n case 'columnar-table': // binary + some JS arrays\n const binary = parseFlatGeobufToBinary(arrayBuffer, options);\n // @ts-expect-error\n return {shape: 'columnar-table', data: binary};\n\n case 'binary':\n // @ts-expect-error\n return parseFlatGeobufToBinary(arrayBuffer, options);\n\n default:\n throw new Error(shape);\n }\n}\n\nfunction parseFlatGeobufToBinary(arrayBuffer: ArrayBuffer, options: FlatGeobufLoaderOptions = {}) {\n // TODO: reproject binary features\n // const {reproject = false, _targetCrs = 'WGS84'} = (options && options.gis) || {};\n\n const array = new Uint8Array(arrayBuffer);\n // @ts-expect-error\n return deserializeGeneric(array, fgbToBinaryGeometry);\n}\n\nfunction parseFlatGeobufToGeoJSONTable(\n arrayBuffer: ArrayBuffer,\n options: FlatGeobufLoaderOptions = {}\n): GeoJSONTable {\n if (arrayBuffer.byteLength === 0) {\n return {shape: 'geojson-table', type: 'FeatureCollection', features: []};\n }\n\n const {reproject = false, _targetCrs = 'WGS84'} = (options && options.gis) || {};\n\n const arr = new Uint8Array(arrayBuffer);\n\n let fgbHeader;\n let schema: Schema | undefined;\n\n // @ts-expect-error this looks wrong\n let {features} = deserializeGeoJson(arr, undefined, (headerMeta) => {\n fgbHeader = headerMeta;\n schema = getSchemaFromFGBHeader(fgbHeader);\n });\n\n const crs = fgbHeader && fgbHeader.crs;\n let projection;\n if (reproject && crs) {\n // Constructing the projection may fail for some invalid WKT strings\n try {\n projection = new Proj4Projection({from: crs.wkt, to: _targetCrs});\n } catch (e) {\n // no op\n }\n }\n\n if (projection) {\n features = transformGeoJsonCoords(features, (coords) => projection.project(coords));\n }\n\n return {shape: 'geojson-table', schema, type: 'FeatureCollection', features};\n}\n\n/*\n * Parse FlatGeobuf arrayBuffer and return GeoJSON.\n *\n * @param {ReadableStream} _ A FlatGeobuf arrayBuffer\n * @return A GeoJSON geometry object iterator\n */\n// eslint-disable-next-line complexity\nexport function parseFlatGeobufInBatches(stream, options: FlatGeobufLoaderOptions) {\n const shape = options.flatgeobuf?.shape;\n switch (shape) {\n case 'binary':\n return parseFlatGeobufInBatchesToBinary(stream, options);\n case 'geojson-table':\n return parseFlatGeobufInBatchesToGeoJSON(stream, options);\n default:\n throw new Error(shape);\n }\n}\n\nfunction parseFlatGeobufInBatchesToBinary(stream, options: FlatGeobufLoaderOptions) {\n // TODO: reproject binary streaming features\n // const {reproject = false, _targetCrs = 'WGS84'} = (options && options.gis) || {};\n\n // @ts-expect-error\n const iterator = deserializeGeneric(stream, binaryFromFeature);\n return iterator;\n}\n\n/**\n * @todo this does not return proper GeoJSONTable batches\n * @param stream\n * @param options\n */\n// eslint-disable-next-line complexity\nasync function* parseFlatGeobufInBatchesToGeoJSON(stream, options: FlatGeobufLoaderOptions) {\n const {reproject = false, _targetCrs = 'WGS84'} = (options && options.gis) || {};\n\n let fgbHeader;\n // let schema: Schema | undefined;\n const iterator = deserializeGeoJson(stream, undefined, (headerMeta) => {\n fgbHeader = headerMeta;\n // schema = getSchemaFromFGBHeader(fgbHeader);\n });\n\n let projection;\n let firstRecord = true;\n // @ts-expect-error this looks wrong\n for await (const feature of iterator) {\n if (firstRecord) {\n const crs = fgbHeader && fgbHeader.crs;\n if (reproject && crs) {\n projection = new Proj4Projection({from: crs.wkt, to: _targetCrs});\n }\n\n firstRecord = false;\n }\n\n if (reproject && projection) {\n // eslint-disable-next-line\n yield transformGeoJsonCoords([feature], (coords) => projection.project(coords));\n } else {\n yield feature;\n }\n }\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@loaders.gl/flatgeobuf",
3
3
  "description": "Loader for FlatGeobuf",
4
- "version": "4.1.0-alpha.5",
4
+ "version": "4.1.0-alpha.7",
5
5
  "license": "MIT",
6
6
  "type": "module",
7
7
  "publishConfig": {
@@ -43,10 +43,13 @@
43
43
  "build-worker": "# esbuild src/workers/flatgeobuf-worker.ts --bundle --outfile=dist/flatgeobuf-worker.js --define:__VERSION__=\\\"$npm_package_version\\\""
44
44
  },
45
45
  "dependencies": {
46
- "@loaders.gl/gis": "4.1.0-alpha.5",
47
- "@loaders.gl/loader-utils": "4.1.0-alpha.5",
46
+ "@loaders.gl/gis": "4.1.0-alpha.7",
47
+ "@loaders.gl/loader-utils": "4.1.0-alpha.7",
48
48
  "@math.gl/proj4": "^4.0.0",
49
- "flatgeobuf": "3.27.0"
49
+ "flatgeobuf": "3.27.2"
50
50
  },
51
- "gitHead": "3250842d8cc0fc8b76a575168c1fd57e5a66b6ba"
51
+ "devDependencies": {
52
+ "stream-buffers": "3.0.2"
53
+ },
54
+ "gitHead": "3dfa49bc4ec68b3c599082c1790da4156b7e5b34"
52
55
  }
package/src/LICENSE ADDED
@@ -0,0 +1,9 @@
1
+ Copyright (c) 2018, Björn Harrtell
2
+
3
+ Redistribution and use in source and binary forms, with or without
4
+ modification, are permitted provided that the following conditions are met:
5
+
6
+ 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
7
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
8
+
9
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -0,0 +1,29 @@
1
+ Copyright (c) 2018, Björn Harrtell
2
+
3
+ Redistribution and use in source and binary forms, with or without
4
+ modification, are permitted provided that the following conditions are met:
5
+
6
+ 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
7
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
8
+
9
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
10
+
11
+ ---
12
+
13
+ This license was in the original source code wfolder ithout reference to what it covers.
14
+
15
+ ISC License
16
+
17
+ Copyright (c) 2018, Vladimir Agafonkin
18
+
19
+ Permission to use, copy, modify, and/or distribute this software for any purpose
20
+ with or without fee is hereby granted, provided that the above copyright notice
21
+ and this permission notice appear in all copies.
22
+
23
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
24
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
25
+ FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
26
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
27
+ OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
28
+ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
29
+ THIS SOFTWARE.
@@ -0,0 +1,45 @@
1
+ # FlatGeobuf for JavaScript / TypeScript
2
+
3
+ ## Building
4
+
5
+ ### Prerequisites
6
+
7
+ You must have [`yarn`](https://yarnpkg.com) installed.
8
+
9
+ ### Install FlatGeobuf dependencies
10
+
11
+ yarn install
12
+
13
+ ### Build
14
+
15
+ To compile the typescript into a javascript bundle
16
+
17
+ yarn run build
18
+
19
+ See the `scripts` section in [package.json](../../package.json) for other actions.
20
+
21
+ ### Testing the examples locally.
22
+
23
+ The examples are hard coded to pull in the publicly released artifact.
24
+ If you'd like to test against your local changes, after running `yarn build`,
25
+ update the `<script src=` tags in the examples.
26
+
27
+ For example:
28
+
29
+ ```diff
30
+ diff --git a/examples/leaflet/filtered.html b/examples/leaflet/filtered.html
31
+ index 2e13dfc..da4b07e 100644
32
+ --- a/examples/leaflet/filtered.html
33
+ +++ b/examples/leaflet/filtered.html
34
+ @@ -4,7 +4,7 @@
35
+ <link rel="stylesheet" href="/examples/site.css" />
36
+ <script src="https://unpkg.com/underscore@1.13.1/underscore-min.js"></script>
37
+ <script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"></script>
38
+ - <script src="https://unpkg.com/flatgeobuf@3.27.2/dist/flatgeobuf-geojson.min.js"></script>
39
+ + <script src="/dist/flatgeobuf-geojson.min.js"></script>
40
+ <script src="https://unpkg.com/json-formatter-js"></script>
41
+ ```
42
+
43
+ You can start the built in http server with: `yarn serve`.
44
+
45
+ Then, open the example in your browser. For example: `open http://localhost:8000/examples/leaflet/filtered.html`.
@@ -0,0 +1,14 @@
1
+ import {ColumnType} from './flat-geobuf/column-type.js';
2
+
3
+ export default interface ColumnMeta {
4
+ name: string;
5
+ type: ColumnType;
6
+ title: string | null;
7
+ description: string | null;
8
+ width: number;
9
+ precision: number;
10
+ scale: number;
11
+ nullable: boolean;
12
+ unique: boolean;
13
+ primary_key: boolean;
14
+ }
@@ -0,0 +1,19 @@
1
+ export default class Config {
2
+ static global = new Config();
3
+
4
+ private _extraRequestThreshold = 256 * 1024;
5
+
6
+ /**
7
+ * Fetch up to this many extra bytes if it will eliminate an extra request
8
+ */
9
+ public extraRequestThreshold(): number {
10
+ return this._extraRequestThreshold;
11
+ }
12
+
13
+ public setExtraRequestThreshold(bytes: number): void {
14
+ if (bytes < 0) {
15
+ throw new Error('extraRequestThreshold cannot be negative');
16
+ }
17
+ this._extraRequestThreshold = bytes;
18
+ }
19
+ }
@@ -0,0 +1,4 @@
1
+ export const magicbytes: Uint8Array = new Uint8Array([
2
+ 0x66, 0x67, 0x62, 0x03, 0x66, 0x67, 0x62, 0x00
3
+ ]);
4
+ export const SIZE_PREFIX_LEN = 4;
@@ -0,0 +1,8 @@
1
+ export default interface CrsMeta {
2
+ org: string | null;
3
+ code: number;
4
+ name: string | null;
5
+ description: string | null;
6
+ wkt: string | null;
7
+ code_string: string | null;
8
+ }
@@ -0,0 +1,82 @@
1
+ // tool to dump spatial index tree
2
+ // run with fx. TS_NODE_PROJECT=config/tsconfig.test.json node --loader ts-node/esm.mjs src/ts/dumptree.ts
3
+
4
+ import flatbuffers from 'flatbuffers';
5
+ import Envelope from 'jsts/org/locationtech/jts/geom/Envelope.js';
6
+ import GeometryFactory from 'jsts/org/locationtech/jts/geom/GeometryFactory.js';
7
+ import GeoJSONWriter from 'jsts/org/locationtech/jts/io/GeoJSONWriter.js';
8
+ import {readFileSync, writeFileSync} from 'fs';
9
+
10
+ import {magicbytes, SIZE_PREFIX_LEN} from './constants.js';
11
+ import {fromByteBuffer} from './header-meta.js';
12
+ import {calcTreeSize, generateLevelBounds} from './packedrtree.js';
13
+
14
+ const buffer = readFileSync('./test/data/tiger_roads.fgb');
15
+ const bytes = new Uint8Array(buffer);
16
+
17
+ if (!bytes.subarray(0, 3).every((v, i) => magicbytes[i] === v))
18
+ throw new Error('Not a FlatGeobuf file');
19
+
20
+ const bb = new flatbuffers.ByteBuffer(bytes);
21
+ const headerLength = bb.readUint32(magicbytes.length);
22
+ bb.setPosition(magicbytes.length + SIZE_PREFIX_LEN);
23
+
24
+ const headerMeta = fromByteBuffer(bb);
25
+
26
+ if (headerMeta.indexNodeSize === 0) throw new Error('No index found');
27
+
28
+ let offset = magicbytes.length + SIZE_PREFIX_LEN + headerLength;
29
+ const numItems = headerMeta.featuresCount;
30
+ const nodeSize = headerMeta.indexNodeSize;
31
+ const envelope = headerMeta.envelope;
32
+
33
+ console.log(`Number of items in tree: ${numItems}`);
34
+ console.log(`Envelope: ${envelope}`);
35
+ console.log(`Tree node index size: ${nodeSize}`);
36
+ console.log(`Offset: ${offset}`);
37
+
38
+ const treeSize = calcTreeSize(numItems, nodeSize);
39
+ const levelBounds = generateLevelBounds(numItems, nodeSize).reverse();
40
+
41
+ console.log('Level bounds:');
42
+ for (const levelBound of levelBounds) console.log(` ${levelBound}`);
43
+
44
+ console.log(`Size: ${treeSize}`);
45
+
46
+ const items: any[] = [];
47
+
48
+ function readNode(level: number) {
49
+ const minx = buffer.readDoubleLE(offset + 0);
50
+ const miny = buffer.readDoubleLE(offset + 8);
51
+ const maxx = buffer.readDoubleLE(offset + 16);
52
+ const maxy = buffer.readDoubleLE(offset + 24);
53
+ items.push([level, minx, miny, maxx, maxy]);
54
+ offset += 40;
55
+ }
56
+
57
+ let level = 0;
58
+ for (const levelBound of levelBounds) {
59
+ for (let i = levelBound[0]; i < levelBound[1]; i++) readNode(level);
60
+ level++;
61
+ }
62
+
63
+ const writer = new GeoJSONWriter();
64
+ const factory = new GeometryFactory();
65
+
66
+ const geojsonfeatures = items.map((i) => {
67
+ const geometry = factory.toGeometry(new Envelope(i[1], i[3], i[2], i[4]));
68
+ return {
69
+ type: 'Feature',
70
+ geometry: writer.write(geometry),
71
+ properties: {
72
+ level: i[0]
73
+ }
74
+ };
75
+ });
76
+
77
+ const geojson = {
78
+ type: 'FeatureCollection',
79
+ features: geojsonfeatures
80
+ };
81
+
82
+ writeFileSync('out.geojson', JSON.stringify(geojson));
@@ -0,0 +1,3 @@
1
+ // automatically generated by the FlatBuffers compiler, do not modify
2
+
3
+ export * as FlatGeobuf from './flat-geobuf.js';
@@ -0,0 +1,19 @@
1
+ // automatically generated by the FlatBuffers compiler, do not modify
2
+
3
+ export enum ColumnType {
4
+ Byte = 0,
5
+ UByte = 1,
6
+ Bool = 2,
7
+ Short = 3,
8
+ UShort = 4,
9
+ Int = 5,
10
+ UInt = 6,
11
+ Long = 7,
12
+ ULong = 8,
13
+ Float = 9,
14
+ Double = 10,
15
+ String = 11,
16
+ Json = 12,
17
+ DateTime = 13,
18
+ Binary = 14
19
+ }