@sakuzu/maplibre-gl-draw 1.0.0
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.
- package/CHANGELOG.md +43 -0
- package/LICENSE +661 -0
- package/README.ja.md +248 -0
- package/README.md +255 -0
- package/THIRD_PARTY_NOTICES.md +275 -0
- package/dist/api/api.d.ts +1259 -0
- package/dist/api/api.js +86 -0
- package/dist/api/context.d.ts +173 -0
- package/dist/api/context.js +193 -0
- package/dist/api/display-api.d.ts +1 -0
- package/dist/api/display-api.js +23 -0
- package/dist/api/event-api.d.ts +13 -0
- package/dist/api/event-api.js +17 -0
- package/dist/api/extension-api.d.ts +46 -0
- package/dist/api/extension-api.js +85 -0
- package/dist/api/feature-api.d.ts +11 -0
- package/dist/api/feature-api.js +101 -0
- package/dist/api/geometry/apply.d.ts +51 -0
- package/dist/api/geometry/apply.js +114 -0
- package/dist/api/geometry/boolean.d.ts +28 -0
- package/dist/api/geometry/boolean.js +65 -0
- package/dist/api/geometry/buffer.d.ts +11 -0
- package/dist/api/geometry/buffer.js +105 -0
- package/dist/api/geometry/split.d.ts +16 -0
- package/dist/api/geometry/split.js +75 -0
- package/dist/api/geometry/targets.d.ts +76 -0
- package/dist/api/geometry/targets.js +158 -0
- package/dist/api/geometry/types.d.ts +31 -0
- package/dist/api/geometry/types.js +3 -0
- package/dist/api/geometry-operations.d.ts +162 -0
- package/dist/api/geometry-operations.js +94 -0
- package/dist/api/group-api.d.ts +10 -0
- package/dist/api/group-api.js +78 -0
- package/dist/api/import-export/constants.d.ts +29 -0
- package/dist/api/import-export/constants.js +40 -0
- package/dist/api/import-export/embedded-file.d.ts +13 -0
- package/dist/api/import-export/embedded-file.js +31 -0
- package/dist/api/import-export/file-name.d.ts +10 -0
- package/dist/api/import-export/file-name.js +20 -0
- package/dist/api/import-export/format-detection.d.ts +12 -0
- package/dist/api/import-export/format-detection.js +29 -0
- package/dist/api/import-export/geojson-export.d.ts +19 -0
- package/dist/api/import-export/geojson-export.js +262 -0
- package/dist/api/import-export/geojson-import.d.ts +34 -0
- package/dist/api/import-export/geojson-import.js +538 -0
- package/dist/api/import-export/geometry-validation.d.ts +20 -0
- package/dist/api/import-export/geometry-validation.js +107 -0
- package/dist/api/import-export/image-import.d.ts +12 -0
- package/dist/api/import-export/image-import.js +53 -0
- package/dist/api/import-export/index.d.ts +9 -0
- package/dist/api/import-export/index.js +107 -0
- package/dist/api/import-export/native-format.d.ts +15 -0
- package/dist/api/import-export/native-format.js +126 -0
- package/dist/api/import-export/native-validation.d.ts +28 -0
- package/dist/api/import-export/native-validation.js +212 -0
- package/dist/api/import-export/own-property.d.ts +10 -0
- package/dist/api/import-export/own-property.js +19 -0
- package/dist/api/import-export/style-validation.d.ts +27 -0
- package/dist/api/import-export/style-validation.js +49 -0
- package/dist/api/import-export/types.d.ts +26 -0
- package/dist/api/import-export/types.js +3 -0
- package/dist/api/index.d.ts +15 -0
- package/dist/api/index.js +3 -0
- package/dist/api/input-api.d.ts +158 -0
- package/dist/api/input-api.js +144 -0
- package/dist/api/instance-api.d.ts +38 -0
- package/dist/api/instance-api.js +136 -0
- package/dist/api/layer-api.d.ts +12 -0
- package/dist/api/layer-api.js +62 -0
- package/dist/api/selection-api.d.ts +7 -0
- package/dist/api/selection-api.js +78 -0
- package/dist/api/snapping-api.d.ts +125 -0
- package/dist/api/snapping-api.js +50 -0
- package/dist/api/topology-api.d.ts +30 -0
- package/dist/api/topology-api.js +16 -0
- package/dist/api/tracing-api.d.ts +31 -0
- package/dist/api/tracing-api.js +16 -0
- package/dist/dispatcher/hit-test/box-strategies.d.ts +19 -0
- package/dist/dispatcher/hit-test/box-strategies.js +275 -0
- package/dist/dispatcher/hit-test/box-strategy.d.ts +59 -0
- package/dist/dispatcher/hit-test/box-strategy.js +37 -0
- package/dist/dispatcher/hit-test/globe-shape.d.ts +46 -0
- package/dist/dispatcher/hit-test/globe-shape.js +70 -0
- package/dist/dispatcher/hit-test/index.d.ts +14 -0
- package/dist/dispatcher/hit-test/index.js +9 -0
- package/dist/dispatcher/hit-test/local-frame.d.ts +77 -0
- package/dist/dispatcher/hit-test/local-frame.js +112 -0
- package/dist/dispatcher/hit-test/segment-grid.d.ts +32 -0
- package/dist/dispatcher/hit-test/segment-grid.js +79 -0
- package/dist/dispatcher/hit-test/service.d.ts +120 -0
- package/dist/dispatcher/hit-test/service.js +333 -0
- package/dist/dispatcher/hit-test/strategies/base.d.ts +136 -0
- package/dist/dispatcher/hit-test/strategies/base.js +66 -0
- package/dist/dispatcher/hit-test/strategies/circle.d.ts +10 -0
- package/dist/dispatcher/hit-test/strategies/circle.js +56 -0
- package/dist/dispatcher/hit-test/strategies/image.d.ts +22 -0
- package/dist/dispatcher/hit-test/strategies/image.js +115 -0
- package/dist/dispatcher/hit-test/strategies/index.d.ts +11 -0
- package/dist/dispatcher/hit-test/strategies/index.js +10 -0
- package/dist/dispatcher/hit-test/strategies/line.d.ts +17 -0
- package/dist/dispatcher/hit-test/strategies/line.js +30 -0
- package/dist/dispatcher/hit-test/strategies/multi.d.ts +44 -0
- package/dist/dispatcher/hit-test/strategies/multi.js +141 -0
- package/dist/dispatcher/hit-test/strategies/point.d.ts +20 -0
- package/dist/dispatcher/hit-test/strategies/point.js +29 -0
- package/dist/dispatcher/hit-test/strategies/polygon.d.ts +52 -0
- package/dist/dispatcher/hit-test/strategies/polygon.js +138 -0
- package/dist/dispatcher/hit-test/topmost.d.ts +48 -0
- package/dist/dispatcher/hit-test/topmost.js +157 -0
- package/dist/dispatcher/hit-test/visibility-lookup.d.ts +23 -0
- package/dist/dispatcher/hit-test/visibility-lookup.js +40 -0
- package/dist/dispatcher/index.d.ts +15 -0
- package/dist/dispatcher/index.js +3 -0
- package/dist/dispatcher/input-router.d.ts +1 -0
- package/dist/dispatcher/input-router.js +288 -0
- package/dist/dispatcher/normalizer.d.ts +1 -0
- package/dist/dispatcher/normalizer.js +513 -0
- package/dist/dispatcher/types.d.ts +144 -0
- package/dist/dispatcher/types.js +15 -0
- package/dist/display/chunk-set.d.ts +24 -0
- package/dist/display/chunk-set.js +533 -0
- package/dist/display/chunk.d.ts +1 -0
- package/dist/display/chunk.js +104 -0
- package/dist/display/columnar/index.d.ts +12 -0
- package/dist/display/columnar/index.js +13 -0
- package/dist/display/columnar/prepare.d.ts +42 -0
- package/dist/display/columnar/prepare.js +116 -0
- package/dist/display/columnar/source.d.ts +1 -0
- package/dist/display/columnar/source.js +531 -0
- package/dist/display/columnar/table.d.ts +1 -0
- package/dist/display/columnar/table.js +471 -0
- package/dist/display/columnar/types.d.ts +223 -0
- package/dist/display/columnar/types.js +3 -0
- package/dist/display/dataset.d.ts +2 -0
- package/dist/display/dataset.js +891 -0
- package/dist/display/index.d.ts +13 -0
- package/dist/display/index.js +3 -0
- package/dist/display/interaction.d.ts +1 -0
- package/dist/display/interaction.js +90 -0
- package/dist/display/manager.d.ts +1 -0
- package/dist/display/manager.js +440 -0
- package/dist/display/packed-rtree.d.ts +1 -0
- package/dist/display/packed-rtree.js +244 -0
- package/dist/display/partition.d.ts +1 -0
- package/dist/display/partition.js +226 -0
- package/dist/display/provider.d.ts +1 -0
- package/dist/display/provider.js +342 -0
- package/dist/display/retained.d.ts +40 -0
- package/dist/display/retained.js +898 -0
- package/dist/display/selection.d.ts +13 -0
- package/dist/display/selection.js +226 -0
- package/dist/display/source.d.ts +1 -0
- package/dist/display/source.js +119 -0
- package/dist/display/spatial.d.ts +1 -0
- package/dist/display/spatial.js +71 -0
- package/dist/display/style.d.ts +1 -0
- package/dist/display/style.js +126 -0
- package/dist/display/thinning.d.ts +65 -0
- package/dist/display/thinning.js +910 -0
- package/dist/display/triangulation.d.ts +1 -0
- package/dist/display/triangulation.js +0 -0
- package/dist/display/types.d.ts +561 -0
- package/dist/display/types.js +43 -0
- package/dist/extension/feature-handler.d.ts +182 -0
- package/dist/extension/feature-handler.js +3 -0
- package/dist/extension/index.d.ts +9 -0
- package/dist/extension/index.js +3 -0
- package/dist/extension/renderers.d.ts +208 -0
- package/dist/extension/renderers.js +3 -0
- package/dist/geometry/angle.d.ts +47 -0
- package/dist/geometry/angle.js +44 -0
- package/dist/geometry/bbox.d.ts +48 -0
- package/dist/geometry/bbox.js +83 -0
- package/dist/geometry/boolean.d.ts +162 -0
- package/dist/geometry/boolean.js +331 -0
- package/dist/geometry/buffer.d.ts +72 -0
- package/dist/geometry/buffer.js +218 -0
- package/dist/geometry/circle.d.ts +55 -0
- package/dist/geometry/circle.js +107 -0
- package/dist/geometry/coords.d.ts +97 -0
- package/dist/geometry/coords.js +149 -0
- package/dist/geometry/distance.d.ts +79 -0
- package/dist/geometry/distance.js +111 -0
- package/dist/geometry/errors.d.ts +74 -0
- package/dist/geometry/errors.js +104 -0
- package/dist/geometry/index.d.ts +28 -0
- package/dist/geometry/index.js +38 -0
- package/dist/geometry/measure.d.ts +81 -0
- package/dist/geometry/measure.js +236 -0
- package/dist/geometry/predicates.d.ts +62 -0
- package/dist/geometry/predicates.js +132 -0
- package/dist/geometry/simplify.d.ts +74 -0
- package/dist/geometry/simplify.js +159 -0
- package/dist/geometry/split.d.ts +68 -0
- package/dist/geometry/split.js +430 -0
- package/dist/geometry/types.d.ts +95 -0
- package/dist/geometry/types.js +3 -0
- package/dist/geometry/units.d.ts +35 -0
- package/dist/geometry/units.js +41 -0
- package/dist/index.d.ts +72 -0
- package/dist/index.js +20 -0
- package/dist/maplibre-gl-draw.d.ts +47 -0
- package/dist/maplibre-gl-draw.js +407 -0
- package/dist/messages.d.ts +64 -0
- package/dist/messages.js +36 -0
- package/dist/modes/cursor.d.ts +1 -0
- package/dist/modes/cursor.js +72 -0
- package/dist/modes/draw/circle.d.ts +1 -0
- package/dist/modes/draw/circle.js +222 -0
- package/dist/modes/draw/commit-layer.d.ts +26 -0
- package/dist/modes/draw/commit-layer.js +31 -0
- package/dist/modes/draw/freehand.d.ts +1 -0
- package/dist/modes/draw/freehand.js +264 -0
- package/dist/modes/draw/image.d.ts +1 -0
- package/dist/modes/draw/image.js +60 -0
- package/dist/modes/draw/index.d.ts +9 -0
- package/dist/modes/draw/index.js +11 -0
- package/dist/modes/draw/line.d.ts +1 -0
- package/dist/modes/draw/line.js +363 -0
- package/dist/modes/draw/point.d.ts +1 -0
- package/dist/modes/draw/point.js +87 -0
- package/dist/modes/draw/polygon.d.ts +1 -0
- package/dist/modes/draw/polygon.js +378 -0
- package/dist/modes/draw/trace-support.d.ts +79 -0
- package/dist/modes/draw/trace-support.js +161 -0
- package/dist/modes/handler.d.ts +285 -0
- package/dist/modes/handler.js +3 -0
- package/dist/modes/index.d.ts +7 -0
- package/dist/modes/index.js +3 -0
- package/dist/modes/manager.d.ts +15 -0
- package/dist/modes/manager.js +196 -0
- package/dist/modes/select/box-selection.d.ts +52 -0
- package/dist/modes/select/box-selection.js +140 -0
- package/dist/modes/select/click-handler.d.ts +32 -0
- package/dist/modes/select/click-handler.js +166 -0
- package/dist/modes/select/cursor-handler.d.ts +15 -0
- package/dist/modes/select/cursor-handler.js +59 -0
- package/dist/modes/select/drag/auxiliary.d.ts +26 -0
- package/dist/modes/select/drag/auxiliary.js +56 -0
- package/dist/modes/select/drag/intermediate-writes.d.ts +1 -0
- package/dist/modes/select/drag/intermediate-writes.js +171 -0
- package/dist/modes/select/drag/move.d.ts +24 -0
- package/dist/modes/select/drag/move.js +59 -0
- package/dist/modes/select/drag/operation.d.ts +30 -0
- package/dist/modes/select/drag/operation.js +18 -0
- package/dist/modes/select/drag/radius.d.ts +15 -0
- package/dist/modes/select/drag/radius.js +49 -0
- package/dist/modes/select/drag/transform.d.ts +17 -0
- package/dist/modes/select/drag/transform.js +155 -0
- package/dist/modes/select/drag/vertex.d.ts +17 -0
- package/dist/modes/select/drag/vertex.js +163 -0
- package/dist/modes/select/drag-handler.d.ts +1 -0
- package/dist/modes/select/drag-handler.js +254 -0
- package/dist/modes/select/hit-helpers.d.ts +40 -0
- package/dist/modes/select/hit-helpers.js +51 -0
- package/dist/modes/select/mode.d.ts +1 -0
- package/dist/modes/select/mode.js +397 -0
- package/dist/modes/select/shortcut-handler.d.ts +40 -0
- package/dist/modes/select/shortcut-handler.js +128 -0
- package/dist/operations/index.d.ts +9 -0
- package/dist/operations/index.js +3 -0
- package/dist/operations/layer-operations.d.ts +1 -0
- package/dist/operations/layer-operations.js +350 -0
- package/dist/operations/resize.d.ts +71 -0
- package/dist/operations/resize.js +252 -0
- package/dist/operations/rotate.d.ts +17 -0
- package/dist/operations/rotate.js +166 -0
- package/dist/operations/selection-operations.d.ts +20 -0
- package/dist/operations/selection-operations.js +159 -0
- package/dist/operations/shared-vertex.d.ts +1 -0
- package/dist/operations/shared-vertex.js +210 -0
- package/dist/operations/trace-graph.d.ts +96 -0
- package/dist/operations/trace-graph.js +283 -0
- package/dist/operations/vertex.d.ts +1 -0
- package/dist/operations/vertex.js +538 -0
- package/dist/plugins/index.d.ts +10 -0
- package/dist/plugins/index.js +3 -0
- package/dist/plugins/mutation-hooks.d.ts +28 -0
- package/dist/plugins/mutation-hooks.js +84 -0
- package/dist/plugins/plugin-context.d.ts +1 -0
- package/dist/plugins/plugin-context.js +367 -0
- package/dist/plugins/plugin-manager.d.ts +103 -0
- package/dist/plugins/plugin-manager.js +316 -0
- package/dist/plugins/plugin.d.ts +529 -0
- package/dist/plugins/plugin.js +3 -0
- package/dist/shared/config/constants.d.ts +66 -0
- package/dist/shared/config/constants.js +60 -0
- package/dist/shared/config/feature-style.d.ts +155 -0
- package/dist/shared/config/feature-style.js +154 -0
- package/dist/shared/config/index.d.ts +17 -0
- package/dist/shared/config/index.js +8 -0
- package/dist/shared/config/rendering.d.ts +107 -0
- package/dist/shared/config/rendering.js +33 -0
- package/dist/shared/config/selection-highlight.d.ts +29 -0
- package/dist/shared/config/selection-highlight.js +35 -0
- package/dist/shared/config/selection.d.ts +273 -0
- package/dist/shared/config/selection.js +266 -0
- package/dist/shared/config/topology.d.ts +33 -0
- package/dist/shared/config/topology.js +17 -0
- package/dist/shared/config/trace.d.ts +40 -0
- package/dist/shared/config/trace.js +17 -0
- package/dist/shared/math/angle.d.ts +21 -0
- package/dist/shared/math/angle.js +34 -0
- package/dist/shared/math/circle.d.ts +6 -0
- package/dist/shared/math/circle.js +10 -0
- package/dist/shared/math/constants.d.ts +48 -0
- package/dist/shared/math/constants.js +59 -0
- package/dist/shared/math/distance.d.ts +78 -0
- package/dist/shared/math/distance.js +147 -0
- package/dist/shared/math/globe-subdivision.d.ts +62 -0
- package/dist/shared/math/globe-subdivision.js +99 -0
- package/dist/shared/math/index.d.ts +17 -0
- package/dist/shared/math/index.js +21 -0
- package/dist/shared/math/intersection.d.ts +63 -0
- package/dist/shared/math/intersection.js +236 -0
- package/dist/shared/math/longitude.d.ts +20 -0
- package/dist/shared/math/longitude.js +31 -0
- package/dist/shared/math/mercator-plane.d.ts +27 -0
- package/dist/shared/math/mercator-plane.js +26 -0
- package/dist/shared/math/obb.d.ts +65 -0
- package/dist/shared/math/obb.js +107 -0
- package/dist/shared/math/rotation.d.ts +93 -0
- package/dist/shared/math/rotation.js +186 -0
- package/dist/shared/math/segment-grid.d.ts +69 -0
- package/dist/shared/math/segment-grid.js +159 -0
- package/dist/shared/math/transform.d.ts +140 -0
- package/dist/shared/math/transform.js +189 -0
- package/dist/shared/types/events.d.ts +128 -0
- package/dist/shared/types/events.js +3 -0
- package/dist/shared/types/model.d.ts +950 -0
- package/dist/shared/types/model.js +3 -0
- package/dist/shared/types/selection-box.d.ts +23 -0
- package/dist/shared/types/selection-box.js +3 -0
- package/dist/shared/types/style.d.ts +68 -0
- package/dist/shared/types/style.js +3 -0
- package/dist/shared/utils/color.d.ts +49 -0
- package/dist/shared/utils/color.js +180 -0
- package/dist/shared/utils/coordinates.d.ts +52 -0
- package/dist/shared/utils/coordinates.js +75 -0
- package/dist/shared/utils/embedded-image.d.ts +34 -0
- package/dist/shared/utils/embedded-image.js +161 -0
- package/dist/shared/utils/event-emitter.d.ts +262 -0
- package/dist/shared/utils/event-emitter.js +44 -0
- package/dist/shared/utils/feature-bbox.d.ts +8 -0
- package/dist/shared/utils/feature-bbox.js +207 -0
- package/dist/shared/utils/feature-segments.d.ts +23 -0
- package/dist/shared/utils/feature-segments.js +179 -0
- package/dist/shared/utils/id.d.ts +1 -0
- package/dist/shared/utils/id.js +35 -0
- package/dist/shared/utils/image.d.ts +34 -0
- package/dist/shared/utils/image.js +106 -0
- package/dist/shared/utils/index.d.ts +15 -0
- package/dist/shared/utils/index.js +24 -0
- package/dist/shared/utils/map.d.ts +26 -0
- package/dist/shared/utils/map.js +35 -0
- package/dist/shared/utils/name-generator.d.ts +197 -0
- package/dist/shared/utils/name-generator.js +337 -0
- package/dist/shared/utils/pixel-ratio.d.ts +111 -0
- package/dist/shared/utils/pixel-ratio.js +85 -0
- package/dist/shared/utils/property.d.ts +88 -0
- package/dist/shared/utils/property.js +140 -0
- package/dist/shared/utils/vertex-ref.d.ts +23 -0
- package/dist/shared/utils/vertex-ref.js +20 -0
- package/dist/snapping/custom-targets.d.ts +1 -0
- package/dist/snapping/custom-targets.js +21 -0
- package/dist/snapping/geometry.d.ts +1 -0
- package/dist/snapping/geometry.js +61 -0
- package/dist/snapping/index.d.ts +14 -0
- package/dist/snapping/index.js +4 -0
- package/dist/snapping/indicator.d.ts +19 -0
- package/dist/snapping/indicator.js +145 -0
- package/dist/snapping/providers/display.d.ts +72 -0
- package/dist/snapping/providers/display.js +268 -0
- package/dist/snapping/providers/guide.d.ts +69 -0
- package/dist/snapping/providers/guide.js +187 -0
- package/dist/snapping/providers/intersection.d.ts +1 -0
- package/dist/snapping/providers/intersection.js +92 -0
- package/dist/snapping/providers/shared.d.ts +39 -0
- package/dist/snapping/providers/shared.js +146 -0
- package/dist/snapping/providers/store.d.ts +1 -0
- package/dist/snapping/providers/store.js +132 -0
- package/dist/snapping/service.d.ts +1 -0
- package/dist/snapping/service.js +272 -0
- package/dist/snapping/types.d.ts +267 -0
- package/dist/snapping/types.js +66 -0
- package/dist/store/change-merger.d.ts +1 -0
- package/dist/store/change-merger.js +102 -0
- package/dist/store/draw-store.d.ts +1 -0
- package/dist/store/draw-store.js +396 -0
- package/dist/store/event-bridge.d.ts +1 -0
- package/dist/store/event-bridge.js +161 -0
- package/dist/store/index.d.ts +12 -0
- package/dist/store/index.js +4 -0
- package/dist/store/local-visibility.d.ts +21 -0
- package/dist/store/local-visibility.js +27 -0
- package/dist/store/lock.d.ts +67 -0
- package/dist/store/lock.js +54 -0
- package/dist/store/memory/change-bus.d.ts +60 -0
- package/dist/store/memory/change-bus.js +232 -0
- package/dist/store/memory/file-store.d.ts +15 -0
- package/dist/store/memory/file-store.js +33 -0
- package/dist/store/memory/frozen.d.ts +21 -0
- package/dist/store/memory/frozen.js +51 -0
- package/dist/store/memory/ui-state.d.ts +51 -0
- package/dist/store/memory/ui-state.js +223 -0
- package/dist/store/memory.d.ts +26 -0
- package/dist/store/memory.js +708 -0
- package/dist/store/spatial/index.d.ts +6 -0
- package/dist/store/spatial/index.js +4 -0
- package/dist/store/spatial/spatial-index.d.ts +90 -0
- package/dist/store/spatial/spatial-index.js +148 -0
- package/dist/store/spatial/store-spatial-index.d.ts +60 -0
- package/dist/store/spatial/store-spatial-index.js +125 -0
- package/dist/store/store.d.ts +417 -0
- package/dist/store/store.js +3 -0
- package/dist/store/types.d.ts +8 -0
- package/dist/store/types.js +3 -0
- package/dist/store/writable-layer.d.ts +35 -0
- package/dist/store/writable-layer.js +20 -0
- package/dist/view/cache/buffer.d.ts +28 -0
- package/dist/view/cache/buffer.js +176 -0
- package/dist/view/cache/earcut.d.ts +1 -0
- package/dist/view/cache/earcut.js +122 -0
- package/dist/view/cache/style-rule.d.ts +1 -0
- package/dist/view/cache/style-rule.js +97 -0
- package/dist/view/cache/terrain-fill.d.ts +30 -0
- package/dist/view/cache/terrain-fill.js +60 -0
- package/dist/view/cache/texture.d.ts +14 -0
- package/dist/view/cache/texture.js +292 -0
- package/dist/view/coordinator.d.ts +27 -0
- package/dist/view/coordinator.js +72 -0
- package/dist/view/feature-companion.d.ts +173 -0
- package/dist/view/feature-companion.js +108 -0
- package/dist/view/globe-subdivision.d.ts +78 -0
- package/dist/view/globe-subdivision.js +128 -0
- package/dist/view/index.d.ts +47 -0
- package/dist/view/index.js +20 -0
- package/dist/view/layer/attach.d.ts +20 -0
- package/dist/view/layer/attach.js +47 -0
- package/dist/view/layer/blend.d.ts +57 -0
- package/dist/view/layer/blend.js +14 -0
- package/dist/view/layer/custom-layer.d.ts +1 -0
- package/dist/view/layer/custom-layer.js +509 -0
- package/dist/view/layer/depth-state.d.ts +14 -0
- package/dist/view/layer/depth-state.js +44 -0
- package/dist/view/layer/display-list.d.ts +1 -0
- package/dist/view/layer/display-list.js +111 -0
- package/dist/view/layer/drape-planner.d.ts +139 -0
- package/dist/view/layer/drape-planner.js +726 -0
- package/dist/view/layer/frame-render.d.ts +57 -0
- package/dist/view/layer/frame-render.js +209 -0
- package/dist/view/layer/frame-state.d.ts +147 -0
- package/dist/view/layer/frame-state.js +484 -0
- package/dist/view/layer/gl-state.d.ts +77 -0
- package/dist/view/layer/gl-state.js +132 -0
- package/dist/view/layer/index.d.ts +6 -0
- package/dist/view/layer/index.js +5 -0
- package/dist/view/layer/render-scope.d.ts +30 -0
- package/dist/view/layer/render-scope.js +28 -0
- package/dist/view/layer/render.d.ts +87 -0
- package/dist/view/layer/render.js +187 -0
- package/dist/view/layer/renderers.d.ts +81 -0
- package/dist/view/layer/renderers.js +142 -0
- package/dist/view/layer/slot-manager.d.ts +26 -0
- package/dist/view/layer/slot-manager.js +133 -0
- package/dist/view/layer/slots.d.ts +33 -0
- package/dist/view/layer/slots.js +50 -0
- package/dist/view/layer/store-retained-bbox.d.ts +36 -0
- package/dist/view/layer/store-retained-bbox.js +188 -0
- package/dist/view/layer/store-retained-chunk.d.ts +97 -0
- package/dist/view/layer/store-retained-chunk.js +94 -0
- package/dist/view/layer/store-retained-classify.d.ts +34 -0
- package/dist/view/layer/store-retained-classify.js +88 -0
- package/dist/view/layer/store-retained-collect.d.ts +24 -0
- package/dist/view/layer/store-retained-collect.js +121 -0
- package/dist/view/layer/store-retained-coord-patch.d.ts +119 -0
- package/dist/view/layer/store-retained-coord-patch.js +168 -0
- package/dist/view/layer/store-retained-immediate.d.ts +63 -0
- package/dist/view/layer/store-retained-immediate.js +49 -0
- package/dist/view/layer/store-retained-invalidation.d.ts +96 -0
- package/dist/view/layer/store-retained-invalidation.js +192 -0
- package/dist/view/layer/store-retained.d.ts +198 -0
- package/dist/view/layer/store-retained.js +430 -0
- package/dist/view/layer/terrain-resolver.d.ts +1 -0
- package/dist/view/layer/terrain-resolver.js +174 -0
- package/dist/view/renderers/batch-manager.d.ts +61 -0
- package/dist/view/renderers/batch-manager.js +718 -0
- package/dist/view/renderers/draw-factors.d.ts +60 -0
- package/dist/view/renderers/draw-factors.js +35 -0
- package/dist/view/renderers/drawer.d.ts +1 -0
- package/dist/view/renderers/drawer.js +346 -0
- package/dist/view/renderers/image.d.ts +1 -0
- package/dist/view/renderers/image.js +255 -0
- package/dist/view/renderers/line/dash.d.ts +31 -0
- package/dist/view/renderers/line/dash.js +152 -0
- package/dist/view/renderers/line/line-geometry.d.ts +39 -0
- package/dist/view/renderers/line/line-geometry.js +460 -0
- package/dist/view/renderers/line/line-gl.d.ts +1 -0
- package/dist/view/renderers/line/line-gl.js +236 -0
- package/dist/view/renderers/line/line-shader.d.ts +1 -0
- package/dist/view/renderers/line/line-shader.js +364 -0
- package/dist/view/renderers/line/line-types.d.ts +43 -0
- package/dist/view/renderers/line/line-types.js +3 -0
- package/dist/view/renderers/line/line-uniforms.d.ts +1 -0
- package/dist/view/renderers/line/line-uniforms.js +390 -0
- package/dist/view/renderers/line/sdf-line.d.ts +92 -0
- package/dist/view/renderers/line/sdf-line.js +567 -0
- package/dist/view/renderers/point/billboard-depth.d.ts +10 -0
- package/dist/view/renderers/point/billboard-depth.js +56 -0
- package/dist/view/renderers/point/point-instance.d.ts +124 -0
- package/dist/view/renderers/point/point-instance.js +738 -0
- package/dist/view/renderers/point/point-sdf.d.ts +58 -0
- package/dist/view/renderers/point/point-sdf.js +170 -0
- package/dist/view/renderers/point/point-shape.d.ts +99 -0
- package/dist/view/renderers/point/point-shape.js +504 -0
- package/dist/view/renderers/point/point-style.d.ts +1 -0
- package/dist/view/renderers/point/point-style.js +46 -0
- package/dist/view/renderers/polygon/batch.d.ts +26 -0
- package/dist/view/renderers/polygon/batch.js +336 -0
- package/dist/view/renderers/polygon/earcut-input.d.ts +37 -0
- package/dist/view/renderers/polygon/earcut-input.js +55 -0
- package/dist/view/renderers/polygon/earcut-sliced.d.ts +69 -0
- package/dist/view/renderers/polygon/earcut-sliced.js +960 -0
- package/dist/view/renderers/polygon/fill.d.ts +74 -0
- package/dist/view/renderers/polygon/fill.js +251 -0
- package/dist/view/renderers/polygon/sdf-polygon.d.ts +62 -0
- package/dist/view/renderers/polygon/sdf-polygon.js +919 -0
- package/dist/view/renderers/polygon/terrain-cull.d.ts +3 -0
- package/dist/view/renderers/polygon/terrain-cull.js +14 -0
- package/dist/view/renderers/polygon/triangulator.d.ts +41 -0
- package/dist/view/renderers/polygon/triangulator.js +3 -0
- package/dist/view/renderers/retained.d.ts +43 -0
- package/dist/view/renderers/retained.js +3 -0
- package/dist/view/renderers/stroke.d.ts +121 -0
- package/dist/view/renderers/stroke.js +621 -0
- package/dist/view/shaders/frame.d.ts +8 -0
- package/dist/view/shaders/frame.js +37 -0
- package/dist/view/shaders/helpers.d.ts +238 -0
- package/dist/view/shaders/helpers.js +611 -0
- package/dist/view/shaders/initializer.d.ts +27 -0
- package/dist/view/shaders/initializer.js +125 -0
- package/dist/view/shaders/projection.d.ts +123 -0
- package/dist/view/shaders/projection.js +299 -0
- package/dist/view/shaders/quad-grid.d.ts +77 -0
- package/dist/view/shaders/quad-grid.js +128 -0
- package/dist/view/shaders/quad.d.ts +189 -0
- package/dist/view/shaders/quad.js +582 -0
- package/dist/view/shaders/retained-origin.d.ts +50 -0
- package/dist/view/shaders/retained-origin.js +67 -0
- package/dist/view/shaders/terrain-shade.d.ts +23 -0
- package/dist/view/shaders/terrain-shade.js +93 -0
- package/dist/view/style-rule.d.ts +166 -0
- package/dist/view/style-rule.js +300 -0
- package/dist/view/terrain/anchor.d.ts +135 -0
- package/dist/view/terrain/anchor.js +226 -0
- package/dist/view/terrain/context.d.ts +132 -0
- package/dist/view/terrain/context.js +437 -0
- package/dist/view/terrain/dem-atlas.d.ts +97 -0
- package/dist/view/terrain/dem-atlas.js +534 -0
- package/dist/view/terrain/detect.d.ts +126 -0
- package/dist/view/terrain/detect.js +198 -0
- package/dist/view/terrain/drape/bin-store.d.ts +179 -0
- package/dist/view/terrain/drape/bin-store.js +529 -0
- package/dist/view/terrain/drape/binning.d.ts +259 -0
- package/dist/view/terrain/drape/binning.js +604 -0
- package/dist/view/terrain/drape/edge-constrain.d.ts +37 -0
- package/dist/view/terrain/drape/edge-constrain.js +175 -0
- package/dist/view/terrain/drape/geometry.d.ts +95 -0
- package/dist/view/terrain/drape/geometry.js +260 -0
- package/dist/view/terrain/drape/mesh.d.ts +50 -0
- package/dist/view/terrain/drape/mesh.js +86 -0
- package/dist/view/terrain/drape/pass.d.ts +122 -0
- package/dist/view/terrain/drape/pass.js +379 -0
- package/dist/view/terrain/drape/quad-glyphs.d.ts +64 -0
- package/dist/view/terrain/drape/quad-glyphs.js +117 -0
- package/dist/view/terrain/drape/quad.d.ts +249 -0
- package/dist/view/terrain/drape/quad.js +835 -0
- package/dist/view/terrain/drape/renderer.d.ts +184 -0
- package/dist/view/terrain/drape/renderer.js +706 -0
- package/dist/view/terrain/drape/shared.d.ts +80 -0
- package/dist/view/terrain/drape/shared.js +173 -0
- package/dist/view/terrain/drape/stitch.d.ts +155 -0
- package/dist/view/terrain/drape/stitch.js +228 -0
- package/dist/view/terrain/ground.d.ts +72 -0
- package/dist/view/terrain/ground.js +151 -0
- package/dist/view/terrain/metrics.d.ts +180 -0
- package/dist/view/terrain/metrics.js +231 -0
- package/dist/view/terrain/occlusion.d.ts +11 -0
- package/dist/view/terrain/occlusion.js +129 -0
- package/dist/view/terrain/polygon.d.ts +86 -0
- package/dist/view/terrain/polygon.js +301 -0
- package/dist/view/terrain/shade.d.ts +48 -0
- package/dist/view/terrain/shade.js +45 -0
- package/dist/view/terrain/state.d.ts +99 -0
- package/dist/view/terrain/state.js +186 -0
- package/dist/view/terrain/tessellation.d.ts +265 -0
- package/dist/view/terrain/tessellation.js +924 -0
- package/dist/view/terrain/tiling.d.ts +56 -0
- package/dist/view/terrain/tiling.js +155 -0
- package/dist/view/terrain/upstream-terrain.d.ts +82 -0
- package/dist/view/terrain/upstream-terrain.js +116 -0
- package/dist/view/ui/auxiliary-handles.d.ts +151 -0
- package/dist/view/ui/auxiliary-handles.js +22 -0
- package/dist/view/ui/bounds.d.ts +53 -0
- package/dist/view/ui/bounds.js +149 -0
- package/dist/view/ui/box-selection.d.ts +1 -0
- package/dist/view/ui/box-selection.js +83 -0
- package/dist/view/ui/handle-test.d.ts +1 -0
- package/dist/view/ui/handle-test.js +437 -0
- package/dist/view/ui/handle-thinning.d.ts +122 -0
- package/dist/view/ui/handle-thinning.js +430 -0
- package/dist/view/ui/handles.d.ts +25 -0
- package/dist/view/ui/handles.js +673 -0
- package/dist/view/ui/helper.d.ts +19 -0
- package/dist/view/ui/helper.js +76 -0
- package/dist/view/ui/index.d.ts +15 -0
- package/dist/view/ui/index.js +15 -0
- package/dist/view/ui/selection-scope.d.ts +25 -0
- package/dist/view/ui/selection-scope.js +34 -0
- package/dist/view/ui/selection-ui/bounding-box.d.ts +44 -0
- package/dist/view/ui/selection-ui/bounding-box.js +240 -0
- package/dist/view/ui/selection-ui/extension-registry.d.ts +76 -0
- package/dist/view/ui/selection-ui/extension-registry.js +78 -0
- package/dist/view/ui/selection-ui/index.d.ts +12 -0
- package/dist/view/ui/selection-ui/index.js +12 -0
- package/dist/view/ui/selection-ui/renderer.d.ts +29 -0
- package/dist/view/ui/selection-ui/renderer.js +227 -0
- package/dist/view/ui/selection-ui/types.d.ts +55 -0
- package/dist/view/ui/selection-ui/types.js +3 -0
- package/dist/view/ui/selection-ui-drawer.d.ts +52 -0
- package/dist/view/ui/selection-ui-drawer.js +329 -0
- package/dist/view/ui/tentative.d.ts +1 -0
- package/dist/view/ui/tentative.js +320 -0
- package/dist/view/viewport.d.ts +119 -0
- package/dist/view/viewport.js +254 -0
- package/package.json +113 -0
|
@@ -0,0 +1,471 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
/** The number of offset arrays of each geometry type */
|
|
4
|
+
const OFFSET_LEVELS = {
|
|
5
|
+
Point: 0,
|
|
6
|
+
LineString: 1,
|
|
7
|
+
MultiPoint: 1,
|
|
8
|
+
Polygon: 2,
|
|
9
|
+
MultiLineString: 2,
|
|
10
|
+
MultiPolygon: 3,
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Whether a column is a dictionary
|
|
14
|
+
*
|
|
15
|
+
* @internal
|
|
16
|
+
*/
|
|
17
|
+
export function isDictionaryColumn(column) {
|
|
18
|
+
return (typeof column === 'object' &&
|
|
19
|
+
column !== null &&
|
|
20
|
+
!Array.isArray(column) &&
|
|
21
|
+
!ArrayBuffer.isView(column) &&
|
|
22
|
+
'codes' in column);
|
|
23
|
+
}
|
|
24
|
+
/** The number of rows a column holds */
|
|
25
|
+
function columnLength(column) {
|
|
26
|
+
return isDictionaryColumn(column) ? column.codes.length : column.length;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* The value of a column at a row
|
|
30
|
+
*
|
|
31
|
+
* A number of a typed array (null for NaN in a floating point column: the way a missing number
|
|
32
|
+
* is usually held), the value of a dictionary (null for a code outside it) or the element of a
|
|
33
|
+
* plain array.
|
|
34
|
+
*
|
|
35
|
+
* @internal
|
|
36
|
+
*/
|
|
37
|
+
export function columnValue(column, row) {
|
|
38
|
+
if (isDictionaryColumn(column)) {
|
|
39
|
+
const code = column.codes[row];
|
|
40
|
+
return code >= 0 && code < column.dictionary.length ? column.dictionary[code] : null;
|
|
41
|
+
}
|
|
42
|
+
const value = column[row];
|
|
43
|
+
if ((column instanceof Float64Array || column instanceof Float32Array) && Number.isNaN(value)) {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
return value;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* A validated geometry column of a single type: the geometry of a table of one type, or one child
|
|
50
|
+
* of a mixed geometry column
|
|
51
|
+
*
|
|
52
|
+
* @internal
|
|
53
|
+
*/
|
|
54
|
+
export class ColumnarGeometryColumn {
|
|
55
|
+
/**
|
|
56
|
+
* @param rows The number of rows (the length of the table), or undefined for a child of a mixed
|
|
57
|
+
* column, whose number of rows is read from its arrays
|
|
58
|
+
* @param path Where the column is in the input (`geometry` or `geometry.children[k]`), for the
|
|
59
|
+
* error messages
|
|
60
|
+
* @throws when the shape of the column does not add up
|
|
61
|
+
*/
|
|
62
|
+
constructor(geometry, rows, path) {
|
|
63
|
+
Object.defineProperty(this, "type", {
|
|
64
|
+
enumerable: true,
|
|
65
|
+
configurable: true,
|
|
66
|
+
writable: true,
|
|
67
|
+
value: void 0
|
|
68
|
+
});
|
|
69
|
+
Object.defineProperty(this, "coords", {
|
|
70
|
+
enumerable: true,
|
|
71
|
+
configurable: true,
|
|
72
|
+
writable: true,
|
|
73
|
+
value: void 0
|
|
74
|
+
});
|
|
75
|
+
/** The number of values per coordinate (2 or 3) */
|
|
76
|
+
Object.defineProperty(this, "dimensions", {
|
|
77
|
+
enumerable: true,
|
|
78
|
+
configurable: true,
|
|
79
|
+
writable: true,
|
|
80
|
+
value: void 0
|
|
81
|
+
});
|
|
82
|
+
Object.defineProperty(this, "offsets", {
|
|
83
|
+
enumerable: true,
|
|
84
|
+
configurable: true,
|
|
85
|
+
writable: true,
|
|
86
|
+
value: void 0
|
|
87
|
+
});
|
|
88
|
+
/** The number of rows the column holds */
|
|
89
|
+
Object.defineProperty(this, "length", {
|
|
90
|
+
enumerable: true,
|
|
91
|
+
configurable: true,
|
|
92
|
+
writable: true,
|
|
93
|
+
value: void 0
|
|
94
|
+
});
|
|
95
|
+
// The messages about the geometry of a table of one type keep their short form
|
|
96
|
+
const at = rows === undefined ? `${path}: ` : '';
|
|
97
|
+
if (!geometry || !(geometry.type in OFFSET_LEVELS)) {
|
|
98
|
+
throw new Error(`Columnar input: ${at}unknown geometry type "${geometry?.type}"`);
|
|
99
|
+
}
|
|
100
|
+
if (!(geometry.coords instanceof Float64Array)) {
|
|
101
|
+
throw new Error(`Columnar input: ${path}.coords must be a Float64Array`);
|
|
102
|
+
}
|
|
103
|
+
const dimensions = geometry.dimensions ?? 2;
|
|
104
|
+
if (dimensions !== 2 && dimensions !== 3) {
|
|
105
|
+
throw new Error(`Columnar input: ${at}dimensions must be 2 or 3 (got ${dimensions})`);
|
|
106
|
+
}
|
|
107
|
+
const offsets = geometry.offsets ?? [];
|
|
108
|
+
const levels = OFFSET_LEVELS[geometry.type];
|
|
109
|
+
if (offsets.length !== levels) {
|
|
110
|
+
throw new Error(`Columnar input: ${at}a ${geometry.type} ${rows === undefined ? 'column' : 'table'} has ${levels} offset arrays (got ${offsets.length})`);
|
|
111
|
+
}
|
|
112
|
+
const vertexCount = Math.floor(geometry.coords.length / dimensions);
|
|
113
|
+
let length = rows;
|
|
114
|
+
if (length === undefined) {
|
|
115
|
+
const first = offsets[0];
|
|
116
|
+
length = levels === 0 ? vertexCount : first instanceof Int32Array ? first.length - 1 : 0;
|
|
117
|
+
length = Math.max(0, length);
|
|
118
|
+
}
|
|
119
|
+
// Each level splits the elements of the level above it
|
|
120
|
+
let elements = length;
|
|
121
|
+
for (let level = 0; level < levels; level++) {
|
|
122
|
+
const array = offsets[level];
|
|
123
|
+
if (!(array instanceof Int32Array)) {
|
|
124
|
+
throw new Error(`Columnar input: ${at}offsets[${level}] must be an Int32Array`);
|
|
125
|
+
}
|
|
126
|
+
if (array.length < elements + 1) {
|
|
127
|
+
throw new Error(`Columnar input: ${at}offsets[${level}] has ${array.length} entries for ${elements} elements`);
|
|
128
|
+
}
|
|
129
|
+
elements = array[elements];
|
|
130
|
+
}
|
|
131
|
+
if (elements > vertexCount) {
|
|
132
|
+
throw new Error(`Columnar input: ${at}the offsets reach coordinate ${elements} of ${vertexCount} coordinates`);
|
|
133
|
+
}
|
|
134
|
+
this.type = geometry.type;
|
|
135
|
+
this.coords = geometry.coords;
|
|
136
|
+
this.dimensions = dimensions;
|
|
137
|
+
this.offsets = offsets;
|
|
138
|
+
this.length = length;
|
|
139
|
+
}
|
|
140
|
+
/** The first coordinate of the run of a row */
|
|
141
|
+
vertexStart(row) {
|
|
142
|
+
let at = row;
|
|
143
|
+
for (let level = 0; level < this.offsets.length; level++)
|
|
144
|
+
at = this.offsets[level][at];
|
|
145
|
+
return at;
|
|
146
|
+
}
|
|
147
|
+
/** Coordinate `v` as `[lng, lat]` */
|
|
148
|
+
position(v) {
|
|
149
|
+
const at = v * this.dimensions;
|
|
150
|
+
return [this.coords[at], this.coords[at + 1]];
|
|
151
|
+
}
|
|
152
|
+
/** The coordinates `[from, to)` as an array of positions */
|
|
153
|
+
positions(from, to) {
|
|
154
|
+
const out = new Array(to - from);
|
|
155
|
+
for (let v = from; v < to; v++)
|
|
156
|
+
out[v - from] = this.position(v);
|
|
157
|
+
return out;
|
|
158
|
+
}
|
|
159
|
+
/** The coordinates of a row, shaped as for its geometry type */
|
|
160
|
+
coordinatesOf(row) {
|
|
161
|
+
const o = this.offsets;
|
|
162
|
+
switch (this.type) {
|
|
163
|
+
case 'Point':
|
|
164
|
+
return this.position(row);
|
|
165
|
+
case 'LineString':
|
|
166
|
+
case 'MultiPoint':
|
|
167
|
+
return this.positions(o[0][row], o[0][row + 1]);
|
|
168
|
+
case 'Polygon':
|
|
169
|
+
case 'MultiLineString': {
|
|
170
|
+
const rings = [];
|
|
171
|
+
for (let r = o[0][row]; r < o[0][row + 1]; r++) {
|
|
172
|
+
rings.push(this.positions(o[1][r], o[1][r + 1]));
|
|
173
|
+
}
|
|
174
|
+
return rings;
|
|
175
|
+
}
|
|
176
|
+
case 'MultiPolygon': {
|
|
177
|
+
const polygons = [];
|
|
178
|
+
for (let p = o[0][row]; p < o[0][row + 1]; p++) {
|
|
179
|
+
const rings = [];
|
|
180
|
+
for (let r = o[1][p]; r < o[1][p + 1]; r++) {
|
|
181
|
+
rings.push(this.positions(o[2][r], o[2][r + 1]));
|
|
182
|
+
}
|
|
183
|
+
polygons.push(rings);
|
|
184
|
+
}
|
|
185
|
+
return polygons;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
/** Whether a geometry column is the mixed form */
|
|
191
|
+
function isMixedGeometry(geometry) {
|
|
192
|
+
return geometry?.type === 'Mixed';
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* A validated columnar table
|
|
196
|
+
*
|
|
197
|
+
* @internal
|
|
198
|
+
*/
|
|
199
|
+
export class ColumnarTable {
|
|
200
|
+
/**
|
|
201
|
+
* @throws when the shape of the input does not add up (a wrong type, an offset array of the
|
|
202
|
+
* wrong length, a column shorter than the table, a row of a mixed column pointing outside its
|
|
203
|
+
* child)
|
|
204
|
+
*/
|
|
205
|
+
constructor(input) {
|
|
206
|
+
Object.defineProperty(this, "input", {
|
|
207
|
+
enumerable: true,
|
|
208
|
+
configurable: true,
|
|
209
|
+
writable: true,
|
|
210
|
+
value: input
|
|
211
|
+
});
|
|
212
|
+
Object.defineProperty(this, "length", {
|
|
213
|
+
enumerable: true,
|
|
214
|
+
configurable: true,
|
|
215
|
+
writable: true,
|
|
216
|
+
value: void 0
|
|
217
|
+
});
|
|
218
|
+
/**
|
|
219
|
+
* The geometry columns of a single type: the one column of a table of one type, or the children
|
|
220
|
+
* of a mixed geometry column
|
|
221
|
+
*/
|
|
222
|
+
Object.defineProperty(this, "children", {
|
|
223
|
+
enumerable: true,
|
|
224
|
+
configurable: true,
|
|
225
|
+
writable: true,
|
|
226
|
+
value: void 0
|
|
227
|
+
});
|
|
228
|
+
/** The child of every row (null for a table of one type: every row is in child 0) */
|
|
229
|
+
Object.defineProperty(this, "childTypes", {
|
|
230
|
+
enumerable: true,
|
|
231
|
+
configurable: true,
|
|
232
|
+
writable: true,
|
|
233
|
+
value: void 0
|
|
234
|
+
});
|
|
235
|
+
/** The row within its child of every row (null for a table of one type: the same row) */
|
|
236
|
+
Object.defineProperty(this, "childRows", {
|
|
237
|
+
enumerable: true,
|
|
238
|
+
configurable: true,
|
|
239
|
+
writable: true,
|
|
240
|
+
value: void 0
|
|
241
|
+
});
|
|
242
|
+
/** Whether every geometry of the table is a Point or a MultiPoint */
|
|
243
|
+
Object.defineProperty(this, "onlyPoints", {
|
|
244
|
+
enumerable: true,
|
|
245
|
+
configurable: true,
|
|
246
|
+
writable: true,
|
|
247
|
+
value: void 0
|
|
248
|
+
});
|
|
249
|
+
Object.defineProperty(this, "validity", {
|
|
250
|
+
enumerable: true,
|
|
251
|
+
configurable: true,
|
|
252
|
+
writable: true,
|
|
253
|
+
value: void 0
|
|
254
|
+
});
|
|
255
|
+
Object.defineProperty(this, "ids", {
|
|
256
|
+
enumerable: true,
|
|
257
|
+
configurable: true,
|
|
258
|
+
writable: true,
|
|
259
|
+
value: void 0
|
|
260
|
+
});
|
|
261
|
+
Object.defineProperty(this, "columns", {
|
|
262
|
+
enumerable: true,
|
|
263
|
+
configurable: true,
|
|
264
|
+
writable: true,
|
|
265
|
+
value: void 0
|
|
266
|
+
});
|
|
267
|
+
/** The names of the columns (the key order of `columns`) */
|
|
268
|
+
Object.defineProperty(this, "columnNames", {
|
|
269
|
+
enumerable: true,
|
|
270
|
+
configurable: true,
|
|
271
|
+
writable: true,
|
|
272
|
+
value: void 0
|
|
273
|
+
});
|
|
274
|
+
const { length, geometry } = input;
|
|
275
|
+
if (!Number.isInteger(length) || length < 0) {
|
|
276
|
+
throw new Error(`Columnar input: length must be a non-negative integer (got ${length})`);
|
|
277
|
+
}
|
|
278
|
+
if (isMixedGeometry(geometry)) {
|
|
279
|
+
this.children = readMixedChildren(geometry, length);
|
|
280
|
+
this.childTypes = geometry.types;
|
|
281
|
+
this.childRows = geometry.offsets;
|
|
282
|
+
}
|
|
283
|
+
else {
|
|
284
|
+
this.children = [new ColumnarGeometryColumn(geometry, length, 'geometry')];
|
|
285
|
+
this.childTypes = null;
|
|
286
|
+
this.childRows = null;
|
|
287
|
+
}
|
|
288
|
+
this.onlyPoints = this.children.every((child) => child.type === 'Point' || child.type === 'MultiPoint');
|
|
289
|
+
if (input.validity && input.validity.length < Math.ceil(length / 8)) {
|
|
290
|
+
throw new Error('Columnar input: validity is shorter than the table');
|
|
291
|
+
}
|
|
292
|
+
if (input.ids && columnLength(input.ids) < length) {
|
|
293
|
+
throw new Error('Columnar input: ids is shorter than the table');
|
|
294
|
+
}
|
|
295
|
+
const columns = input.columns ?? {};
|
|
296
|
+
for (const [name, column] of Object.entries(columns)) {
|
|
297
|
+
if (columnLength(column) < length) {
|
|
298
|
+
throw new Error(`Columnar input: column "${name}" is shorter than the table`);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
this.length = length;
|
|
302
|
+
this.validity = input.validity;
|
|
303
|
+
this.ids = input.ids;
|
|
304
|
+
this.columns = columns;
|
|
305
|
+
this.columnNames = Object.keys(columns);
|
|
306
|
+
}
|
|
307
|
+
/** Whether the validity bitmap marks the row as having a geometry */
|
|
308
|
+
isValid(row) {
|
|
309
|
+
const validity = this.validity;
|
|
310
|
+
return validity === undefined || (validity[row >> 3] & (1 << (row & 7))) !== 0;
|
|
311
|
+
}
|
|
312
|
+
/** The index of the child that holds the geometry of a row (-1 for a row without one) */
|
|
313
|
+
childOf(row) {
|
|
314
|
+
const types = this.childTypes;
|
|
315
|
+
if (types === null)
|
|
316
|
+
return 0;
|
|
317
|
+
const child = types[row];
|
|
318
|
+
return child < 0 ? -1 : child;
|
|
319
|
+
}
|
|
320
|
+
/** The row within its child of a row */
|
|
321
|
+
childRowOf(row) {
|
|
322
|
+
return this.childRows === null ? row : this.childRows[row];
|
|
323
|
+
}
|
|
324
|
+
/** The geometry column of a row (undefined for a row without a geometry) */
|
|
325
|
+
columnOf(row) {
|
|
326
|
+
const child = this.childOf(row);
|
|
327
|
+
return child < 0 ? undefined : this.children[child];
|
|
328
|
+
}
|
|
329
|
+
/** The value of a column at a row (undefined when the table has no such column) */
|
|
330
|
+
value(name, row) {
|
|
331
|
+
const column = this.columns[name];
|
|
332
|
+
return column === undefined ? undefined : columnValue(column, row);
|
|
333
|
+
}
|
|
334
|
+
/** The id of a row */
|
|
335
|
+
idOf(row) {
|
|
336
|
+
if (!this.ids)
|
|
337
|
+
return String(row);
|
|
338
|
+
return String(columnValue(this.ids, row));
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* Computes the bbox of every row, `[minX, minY, maxX, maxY]` per row (NaN for a row without a
|
|
342
|
+
* geometry)
|
|
343
|
+
*/
|
|
344
|
+
computeBounds() {
|
|
345
|
+
const n = this.length;
|
|
346
|
+
const bounds = new Float64Array(n * 4);
|
|
347
|
+
for (let row = 0; row < n; row++) {
|
|
348
|
+
const at = row * 4;
|
|
349
|
+
let minX = Number.POSITIVE_INFINITY;
|
|
350
|
+
let minY = Number.POSITIVE_INFINITY;
|
|
351
|
+
let maxX = Number.NEGATIVE_INFINITY;
|
|
352
|
+
let maxY = Number.NEGATIVE_INFINITY;
|
|
353
|
+
const column = this.columnOf(row);
|
|
354
|
+
if (column !== undefined && this.isValid(row)) {
|
|
355
|
+
const r = this.childRowOf(row);
|
|
356
|
+
const end = column.vertexStart(r + 1);
|
|
357
|
+
const coords = column.coords;
|
|
358
|
+
const stride = column.dimensions;
|
|
359
|
+
for (let v = column.vertexStart(r); v < end; v++) {
|
|
360
|
+
const x = coords[v * stride];
|
|
361
|
+
const y = coords[v * stride + 1];
|
|
362
|
+
if (x < minX)
|
|
363
|
+
minX = x;
|
|
364
|
+
if (x > maxX)
|
|
365
|
+
maxX = x;
|
|
366
|
+
if (y < minY)
|
|
367
|
+
minY = y;
|
|
368
|
+
if (y > maxY)
|
|
369
|
+
maxY = y;
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
if (minX === Number.POSITIVE_INFINITY || Number.isNaN(minX) || Number.isNaN(minY)) {
|
|
373
|
+
bounds[at] = Number.NaN;
|
|
374
|
+
bounds[at + 1] = Number.NaN;
|
|
375
|
+
bounds[at + 2] = Number.NaN;
|
|
376
|
+
bounds[at + 3] = Number.NaN;
|
|
377
|
+
}
|
|
378
|
+
else {
|
|
379
|
+
bounds[at] = minX;
|
|
380
|
+
bounds[at + 1] = minY;
|
|
381
|
+
bounds[at + 2] = maxX;
|
|
382
|
+
bounds[at + 3] = maxY;
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
return bounds;
|
|
386
|
+
}
|
|
387
|
+
/** The number of coordinates of every row (the estimate of the work of the splitting) */
|
|
388
|
+
computeVertexCounts() {
|
|
389
|
+
const n = this.length;
|
|
390
|
+
const counts = new Int32Array(n);
|
|
391
|
+
for (let row = 0; row < n; row++) {
|
|
392
|
+
const column = this.columnOf(row);
|
|
393
|
+
if (column === undefined)
|
|
394
|
+
continue;
|
|
395
|
+
const r = this.childRowOf(row);
|
|
396
|
+
counts[row] = column.vertexStart(r + 1) - column.vertexStart(r);
|
|
397
|
+
}
|
|
398
|
+
return counts;
|
|
399
|
+
}
|
|
400
|
+
/** The coordinates of a row, shaped as for its geometry type (a NaN point without a geometry) */
|
|
401
|
+
coordinatesOf(row) {
|
|
402
|
+
const column = this.columnOf(row);
|
|
403
|
+
return column === undefined
|
|
404
|
+
? [Number.NaN, Number.NaN]
|
|
405
|
+
: column.coordinatesOf(this.childRowOf(row));
|
|
406
|
+
}
|
|
407
|
+
/** The value of every column at a row */
|
|
408
|
+
propertiesOf(row) {
|
|
409
|
+
const properties = {};
|
|
410
|
+
for (const name of this.columnNames) {
|
|
411
|
+
properties[name] = columnValue(this.columns[name], row);
|
|
412
|
+
}
|
|
413
|
+
return properties;
|
|
414
|
+
}
|
|
415
|
+
/**
|
|
416
|
+
* Materializes one row as a feature
|
|
417
|
+
*
|
|
418
|
+
* A row of a mixed column that names no child is a Point with NaN coordinates.
|
|
419
|
+
*
|
|
420
|
+
* @param hasGeometry Whether the row has a geometry (a row without one is not visible)
|
|
421
|
+
*/
|
|
422
|
+
featureAt(row, hasGeometry) {
|
|
423
|
+
return {
|
|
424
|
+
id: this.idOf(row),
|
|
425
|
+
type: this.columnOf(row)?.type ?? 'Point',
|
|
426
|
+
coordinates: this.coordinatesOf(row),
|
|
427
|
+
layerId: '',
|
|
428
|
+
properties: this.propertiesOf(row),
|
|
429
|
+
locked: false,
|
|
430
|
+
visible: hasGeometry,
|
|
431
|
+
};
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
/**
|
|
435
|
+
* Validates the children of a mixed geometry column and the child and child row of every row
|
|
436
|
+
*
|
|
437
|
+
* @throws when an array has the wrong type or is shorter than the table, or when a row names a
|
|
438
|
+
* child that does not exist or a row past the end of its child
|
|
439
|
+
*/
|
|
440
|
+
function readMixedChildren(geometry, length) {
|
|
441
|
+
const { types, offsets, children } = geometry;
|
|
442
|
+
if (!(types instanceof Int8Array)) {
|
|
443
|
+
throw new Error('Columnar input: geometry.types must be an Int8Array');
|
|
444
|
+
}
|
|
445
|
+
if (!(offsets instanceof Int32Array)) {
|
|
446
|
+
throw new Error('Columnar input: geometry.offsets must be an Int32Array');
|
|
447
|
+
}
|
|
448
|
+
if (!Array.isArray(children)) {
|
|
449
|
+
throw new Error('Columnar input: geometry.children must be an array');
|
|
450
|
+
}
|
|
451
|
+
if (types.length < length) {
|
|
452
|
+
throw new Error('Columnar input: geometry.types is shorter than the table');
|
|
453
|
+
}
|
|
454
|
+
if (offsets.length < length) {
|
|
455
|
+
throw new Error('Columnar input: geometry.offsets is shorter than the table');
|
|
456
|
+
}
|
|
457
|
+
const columns = children.map((child, k) => new ColumnarGeometryColumn(child, undefined, `geometry.children[${k}]`));
|
|
458
|
+
for (let row = 0; row < length; row++) {
|
|
459
|
+
const child = types[row];
|
|
460
|
+
if (child < 0)
|
|
461
|
+
continue;
|
|
462
|
+
if (child >= columns.length) {
|
|
463
|
+
throw new Error(`Columnar input: geometry.types[${row}] is ${child}, but there are ${columns.length} children`);
|
|
464
|
+
}
|
|
465
|
+
const at = offsets[row];
|
|
466
|
+
if (at < 0 || at >= columns[child].length) {
|
|
467
|
+
throw new Error(`Columnar input: geometry.offsets[${row}] is ${at}, but geometry.children[${child}] has ${columns[child].length} rows`);
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
return columns;
|
|
471
|
+
}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The columnar input of a dataset
|
|
3
|
+
*
|
|
4
|
+
* The rows are given as columns of typed arrays in the layout of GeoArrow (the native encoding
|
|
5
|
+
* with separated offsets), so a reader of GeoParquet, Arrow or FlatGeobuf can hand what it reads
|
|
6
|
+
* over without building an object per row, and a Worker can send it to the main thread without a
|
|
7
|
+
* copy.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* The geometry type of a geometry column of a single type. A table whose rows have different
|
|
11
|
+
* types gives a {@link DatasetColumnarMixedGeometry}, made of columns of these types.
|
|
12
|
+
*/
|
|
13
|
+
export type DatasetColumnarGeometryType = 'Point' | 'LineString' | 'Polygon' | 'MultiPoint' | 'MultiLineString' | 'MultiPolygon';
|
|
14
|
+
/**
|
|
15
|
+
* The geometry column of a columnar table, in the layout of GeoArrow: interleaved coordinates
|
|
16
|
+
* and the offset arrays, outermost first.
|
|
17
|
+
*
|
|
18
|
+
* Every row owns a contiguous run of the coordinates, so the offsets only say where each row,
|
|
19
|
+
* part and ring starts:
|
|
20
|
+
*
|
|
21
|
+
* | Type | `offsets` |
|
|
22
|
+
* | --- | --- |
|
|
23
|
+
* | Point | none: row `i` is coordinate `i` |
|
|
24
|
+
* | LineString, MultiPoint | `[row → coordinate]` |
|
|
25
|
+
* | Polygon | `[row → ring, ring → coordinate]` |
|
|
26
|
+
* | MultiLineString | `[row → part, part → coordinate]` |
|
|
27
|
+
* | MultiPolygon | `[row → polygon, polygon → ring, ring → coordinate]` |
|
|
28
|
+
*
|
|
29
|
+
* An offset array has one more entry than the level it splits (the first entry is the start of
|
|
30
|
+
* the first element, the last is the end of the last), and its values never decrease.
|
|
31
|
+
*
|
|
32
|
+
* A row without a geometry has an empty run (two equal offsets), or NaN coordinates for a Point,
|
|
33
|
+
* or a 0 bit in {@link DatasetColumnarInput.validity}. It is neither drawn nor hit.
|
|
34
|
+
*
|
|
35
|
+
* @example A table of two lines
|
|
36
|
+
* ```ts
|
|
37
|
+
* const geometry: DatasetColumnarGeometry = {
|
|
38
|
+
* type: 'LineString',
|
|
39
|
+
* coords: new Float64Array([139.70, 35.68, 139.71, 35.69, 139.72, 35.66, 139.73, 35.67]),
|
|
40
|
+
* offsets: [new Int32Array([0, 2, 4])],
|
|
41
|
+
* };
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export interface DatasetColumnarGeometry {
|
|
45
|
+
/** The geometry type of every row */
|
|
46
|
+
type: DatasetColumnarGeometryType;
|
|
47
|
+
/**
|
|
48
|
+
* The coordinates in degrees, interleaved: `[lng0, lat0, lng1, lat1, ...]`, or
|
|
49
|
+
* `[lng0, lat0, z0, ...]` with `dimensions: 3`
|
|
50
|
+
*/
|
|
51
|
+
coords: Float64Array;
|
|
52
|
+
/**
|
|
53
|
+
* The number of values per coordinate: 2 (`xy`, the default) or 3 (`xyz`; the third value is
|
|
54
|
+
* skipped)
|
|
55
|
+
*/
|
|
56
|
+
dimensions?: 2 | 3;
|
|
57
|
+
/** The offset arrays, outermost first (see the table above). Omitted or empty for Point */
|
|
58
|
+
offsets?: Int32Array[];
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* The geometry column of a table whose rows have different geometry types, in the layout of the
|
|
62
|
+
* mixed geometry of GeoArrow (a dense union of Arrow): a geometry column of a single type per
|
|
63
|
+
* child, and for every row of the table the child and the row within it.
|
|
64
|
+
*
|
|
65
|
+
* The geometry of row `i` is row `offsets[i]` of `children[types[i]]`, and row `i` behaves exactly
|
|
66
|
+
* as the feature of that child's type with those coordinates. The rows of a child can be in any
|
|
67
|
+
* order; the draw order is the order of the table rows. A row with a negative `types[i]` has no
|
|
68
|
+
* geometry (as a 0 bit in {@link DatasetColumnarInput.validity}, which still applies on top). The
|
|
69
|
+
* number of rows of a child is read from its arrays: the coordinates for a Point column,
|
|
70
|
+
* `offsets[0].length - 1` for the others.
|
|
71
|
+
*
|
|
72
|
+
* @example A point, a line and a polygon, the polygon first in the table
|
|
73
|
+
* ```ts
|
|
74
|
+
* const geometry: DatasetColumnarMixedGeometry = {
|
|
75
|
+
* type: 'Mixed',
|
|
76
|
+
* types: new Int8Array([2, 0, 1]),
|
|
77
|
+
* offsets: new Int32Array([0, 0, 0]),
|
|
78
|
+
* children: [
|
|
79
|
+
* { type: 'Point', coords: new Float64Array([139.70, 35.68]) },
|
|
80
|
+
* {
|
|
81
|
+
* type: 'LineString',
|
|
82
|
+
* coords: new Float64Array([139.71, 35.69, 139.72, 35.70]),
|
|
83
|
+
* offsets: [new Int32Array([0, 2])],
|
|
84
|
+
* },
|
|
85
|
+
* {
|
|
86
|
+
* type: 'Polygon',
|
|
87
|
+
* coords: new Float64Array([139.73, 35.66, 139.75, 35.66, 139.75, 35.68, 139.73, 35.66]),
|
|
88
|
+
* offsets: [new Int32Array([0, 1]), new Int32Array([0, 4])],
|
|
89
|
+
* },
|
|
90
|
+
* ],
|
|
91
|
+
* };
|
|
92
|
+
* ```
|
|
93
|
+
*/
|
|
94
|
+
export interface DatasetColumnarMixedGeometry {
|
|
95
|
+
/** Marks the mixed form */
|
|
96
|
+
type: 'Mixed';
|
|
97
|
+
/**
|
|
98
|
+
* For every row, the child column that holds its geometry (an index into `children`; negative
|
|
99
|
+
* for a row without a geometry)
|
|
100
|
+
*/
|
|
101
|
+
types: Int8Array;
|
|
102
|
+
/** For every row, the row within its child column */
|
|
103
|
+
offsets: Int32Array;
|
|
104
|
+
/** The geometry columns of a single type */
|
|
105
|
+
children: DatasetColumnarGeometry[];
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* The integer arrays that can hold the codes of a {@link DatasetDictionaryColumn}.
|
|
109
|
+
*/
|
|
110
|
+
export type DatasetDictionaryCodes = Int8Array | Uint8Array | Int16Array | Uint16Array | Int32Array | Uint32Array;
|
|
111
|
+
/**
|
|
112
|
+
* An attribute column encoded as a dictionary (the dictionary type of Arrow): the value of row
|
|
113
|
+
* `i` is `dictionary[codes[i]]`. A negative code, or one past the end of the dictionary, means
|
|
114
|
+
* no value (`null`).
|
|
115
|
+
*
|
|
116
|
+
* @example
|
|
117
|
+
* ```ts
|
|
118
|
+
* const category: DatasetDictionaryColumn = {
|
|
119
|
+
* codes: new Int32Array([0, 1, 0, -1]),
|
|
120
|
+
* dictionary: ['cafe', 'school'],
|
|
121
|
+
* }; // 'cafe', 'school', 'cafe', null
|
|
122
|
+
* ```
|
|
123
|
+
*/
|
|
124
|
+
export interface DatasetDictionaryColumn {
|
|
125
|
+
/** The code of each row */
|
|
126
|
+
codes: DatasetDictionaryCodes;
|
|
127
|
+
/** The distinct values */
|
|
128
|
+
dictionary: readonly (string | number | boolean | null)[];
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* An attribute column of a columnar table: a typed array of numbers, a dictionary, or a plain
|
|
132
|
+
* array of values. Row `i` of the table is element `i` of the column. In a `Float64Array` or a
|
|
133
|
+
* `Float32Array`, NaN means no value (`null`).
|
|
134
|
+
*/
|
|
135
|
+
export type DatasetColumn = Float64Array | Float32Array | Int32Array | Uint32Array | Int16Array | Uint16Array | Int8Array | Uint8Array | DatasetDictionaryColumn | readonly unknown[];
|
|
136
|
+
/**
|
|
137
|
+
* The rows of a dataset given as columns, the counterpart of an array of
|
|
138
|
+
* {@link DatasetFeatureInput}. Pass it as `columnar` to
|
|
139
|
+
* {@link MapLibreGLDraw.addDataset} or to {@link Dataset.setColumnar}.
|
|
140
|
+
*
|
|
141
|
+
* Nothing is copied: the dataset keeps and reads the arrays, so do not change them while the
|
|
142
|
+
* dataset holds them (replace the table with `setColumnar` instead). Every array can be sent
|
|
143
|
+
* from a Worker without a copy; `columnarTransferables` from
|
|
144
|
+
* `@sakuzu/maplibre-gl-draw/columnar` lists their buffers.
|
|
145
|
+
*
|
|
146
|
+
* Row `i` behaves as the feature `{ id, type: geometry.type, coordinates, properties }` where
|
|
147
|
+
* `coordinates` are read from the geometry column, `properties` holds the value of every column at
|
|
148
|
+
* row `i`, and `id` is `String(ids[i])` (or `String(i)` without `ids`). With a
|
|
149
|
+
* {@link DatasetColumnarMixedGeometry}, `type` and `coordinates` are those of the row's child
|
|
150
|
+
* column. The rows have no individual style; the style rule and the base style of the dataset
|
|
151
|
+
* color them.
|
|
152
|
+
*
|
|
153
|
+
* @example
|
|
154
|
+
* ```ts
|
|
155
|
+
* const places: DatasetColumnarInput = {
|
|
156
|
+
* length: 3,
|
|
157
|
+
* geometry: {
|
|
158
|
+
* type: 'Point',
|
|
159
|
+
* coords: new Float64Array([139.70, 35.68, 139.71, 35.69, 139.72, 35.66]),
|
|
160
|
+
* },
|
|
161
|
+
* columns: {
|
|
162
|
+
* name: ['Shinjuku', 'Yoyogi', 'Shibuya'],
|
|
163
|
+
* visitors: new Float64Array([3.5, 0.7, 3.0]),
|
|
164
|
+
* },
|
|
165
|
+
* };
|
|
166
|
+
* draw.addDataset({ id: 'places', columnar: places });
|
|
167
|
+
* ```
|
|
168
|
+
*/
|
|
169
|
+
export interface DatasetColumnarInput {
|
|
170
|
+
/** The number of rows */
|
|
171
|
+
length: number;
|
|
172
|
+
/**
|
|
173
|
+
* The geometry column: of one type, or {@link DatasetColumnarMixedGeometry} for rows of
|
|
174
|
+
* different types
|
|
175
|
+
*/
|
|
176
|
+
geometry: DatasetColumnarGeometry | DatasetColumnarMixedGeometry;
|
|
177
|
+
/**
|
|
178
|
+
* Which rows have a geometry, as the validity bitmap of Arrow: bit `i % 8` of byte `i >> 3` (the
|
|
179
|
+
* lowest bit first) is 1 for a row with a geometry. Every row has one when omitted
|
|
180
|
+
*/
|
|
181
|
+
validity?: Uint8Array;
|
|
182
|
+
/**
|
|
183
|
+
* The id of each row, turned into a string with `String()` (the row number as a string when
|
|
184
|
+
* omitted). The ids must be unique within the table
|
|
185
|
+
*/
|
|
186
|
+
ids?: DatasetColumn;
|
|
187
|
+
/**
|
|
188
|
+
* The attribute columns by name. They become the `properties` of the rows, which the style
|
|
189
|
+
* rule reads. Passing only the columns that the rule and the host read is enough
|
|
190
|
+
*/
|
|
191
|
+
columns?: Record<string, DatasetColumn>;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* What `prepareDatasetColumnar` (from `@sakuzu/maplibre-gl-draw/columnar`) computes from a
|
|
195
|
+
* columnar table so that the main thread does not have to: the bbox of each row, the spatial
|
|
196
|
+
* chunks and the spatial index of the hit testing.
|
|
197
|
+
*
|
|
198
|
+
* Every field is a typed array, so it can be sent from a Worker without a copy. Treat it as
|
|
199
|
+
* opaque: pass it with the same table to {@link Dataset.setColumnar} or as `prepared` to
|
|
200
|
+
* {@link MapLibreGLDraw.addDataset}.
|
|
201
|
+
*/
|
|
202
|
+
export interface DatasetColumnarPrepared {
|
|
203
|
+
/** The number of rows it was computed for (it must equal the `length` of the table) */
|
|
204
|
+
readonly length: number;
|
|
205
|
+
/** The bbox of each row, `[minX, minY, maxX, maxY]` (NaN for a row without a geometry) */
|
|
206
|
+
readonly bounds: Float64Array;
|
|
207
|
+
/** The rows of every chunk, chunk after chunk */
|
|
208
|
+
readonly chunkRows: Int32Array;
|
|
209
|
+
/** Where each chunk starts in `chunkRows` (the chunk count + 1 entries) */
|
|
210
|
+
readonly chunkOffsets: Int32Array;
|
|
211
|
+
/** The bbox of each chunk, `[minX, minY, maxX, maxY]` */
|
|
212
|
+
readonly chunkBounds: Float64Array;
|
|
213
|
+
/** The number of entries of one node of the spatial index */
|
|
214
|
+
readonly indexNodeSize: number;
|
|
215
|
+
/** The number of leaves of the spatial index (the rows with a geometry) */
|
|
216
|
+
readonly indexItemCount: number;
|
|
217
|
+
/** The boxes of the spatial index */
|
|
218
|
+
readonly indexBoxes: Float64Array;
|
|
219
|
+
/** The rows and child positions of the spatial index */
|
|
220
|
+
readonly indexEntries: Int32Array;
|
|
221
|
+
/** The end of each level of the spatial index */
|
|
222
|
+
readonly indexLevels: Int32Array;
|
|
223
|
+
}
|