@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 @@
|
|
|
1
|
+
export {};
|
|
Binary file
|
|
@@ -0,0 +1,561 @@
|
|
|
1
|
+
import type { BoundingBox, Coordinate, Feature, StyleRule } from '../shared/types/model.js';
|
|
2
|
+
import type { StyleRuleChannel } from '../view/style-rule.js';
|
|
3
|
+
import type { DatasetColumnarInput, DatasetColumnarPrepared } from './columnar/types.js';
|
|
4
|
+
import type { DatasetCollisionThinning, DatasetThinningStats, ResolvedCollisionThinning } from './thinning.js';
|
|
5
|
+
/**
|
|
6
|
+
* The default style of a dataset, per geometry channel.
|
|
7
|
+
*
|
|
8
|
+
* It holds a subset of FeatureStyle per channel (the same vocabulary as the rule colors). The
|
|
9
|
+
* features of a dataset often have no individual style, so this is the mechanism
|
|
10
|
+
* for giving a default such as "the lines of this dataset are 1px light blue" per dataset.
|
|
11
|
+
*
|
|
12
|
+
* The precedence is "the individual style of a feature > the rule color (color only) >
|
|
13
|
+
* baseStyle > the core default".
|
|
14
|
+
*/
|
|
15
|
+
export type DatasetBaseStyle = Partial<Record<StyleRuleChannel, Feature['style']>>;
|
|
16
|
+
/**
|
|
17
|
+
* A feature passed to a dataset.
|
|
18
|
+
*
|
|
19
|
+
* It accepts the same coordinate shapes as a feature of the Store (including Multi and holes).
|
|
20
|
+
* It is not put into the Store, so the layer it belongs to, the lock and the visibility can be
|
|
21
|
+
* omitted (when omitted they are treated as an empty string, false and true respectively).
|
|
22
|
+
* `Feature` satisfies this type, so a feature taken out of the Store can be passed as it is.
|
|
23
|
+
* Positions with a third element (an elevation from GeoJSON) are truncated to `[lng, lat]`.
|
|
24
|
+
*/
|
|
25
|
+
export interface DatasetFeatureInput {
|
|
26
|
+
/** The feature id, unique within the dataset */
|
|
27
|
+
id: string;
|
|
28
|
+
/** The geometry type, the same values as a feature of the Store */
|
|
29
|
+
type: Feature['type'];
|
|
30
|
+
/** The coordinates in `[lng, lat]` degrees, shaped as for `type` (holes and Multi included) */
|
|
31
|
+
coordinates: Feature['coordinates'];
|
|
32
|
+
/** The attributes the style rule reads (`{}` when omitted) */
|
|
33
|
+
properties?: Record<string, unknown>;
|
|
34
|
+
/** The individual style; it wins over the rule color and the base style */
|
|
35
|
+
style?: Feature['style'];
|
|
36
|
+
/** The layer id (`''` when omitted). Kept on the feature; the dataset does not use it */
|
|
37
|
+
layerId?: string;
|
|
38
|
+
/** The group id. Kept on the feature; the dataset does not use it */
|
|
39
|
+
groupId?: string;
|
|
40
|
+
/** The lock flag (`false` when omitted). Kept on the feature; nothing is edited here */
|
|
41
|
+
locked?: boolean;
|
|
42
|
+
/** `false` hides this feature (`true` when omitted) */
|
|
43
|
+
visible?: boolean;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Where a dataset is drawn relative to the layers of the Store.
|
|
47
|
+
*
|
|
48
|
+
* below-store / above-store refer to the position relative to all of the layers of the Store.
|
|
49
|
+
* layer-order means "taking part in the same stacking order as the layers of the Store".
|
|
50
|
+
*
|
|
51
|
+
* - below-store: behind all of the layers of the Store (the default)
|
|
52
|
+
* - above-store: in front of all of the layers of the Store (behind the selection UI)
|
|
53
|
+
* - layer-order: drawn at the position where its own dataset id is placed within the
|
|
54
|
+
* stacking order of the Store (`store.getLayerOrder()`). While it is not on the order it is
|
|
55
|
+
* not drawn
|
|
56
|
+
*/
|
|
57
|
+
export type DatasetOrder = 'below-store' | 'above-store' | 'layer-order';
|
|
58
|
+
/**
|
|
59
|
+
* The destination of {@link MapLibreGLDraw.moveDataset}: a side and a position
|
|
60
|
+
* within it.
|
|
61
|
+
*
|
|
62
|
+
* order is the side (in front of or behind the Store) and index is the position within that
|
|
63
|
+
* side. index 0 is the backmost and out-of-range values are clamped. Both can be omitted.
|
|
64
|
+
*
|
|
65
|
+
* When it is moved to order: 'layer-order', the stacking order is decided by the layer order of
|
|
66
|
+
* the Store alone and index takes no part in it.
|
|
67
|
+
*/
|
|
68
|
+
export interface DatasetPlacement {
|
|
69
|
+
/** The side to move to. When omitted, the current side is kept */
|
|
70
|
+
order?: DatasetOrder;
|
|
71
|
+
/**
|
|
72
|
+
* The position within the side (0 = the backmost)
|
|
73
|
+
*
|
|
74
|
+
* When omitted, it goes to the front of the destination if the side changes, and keeps its
|
|
75
|
+
* position if it does not.
|
|
76
|
+
*/
|
|
77
|
+
index?: number;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Fetches the features of a dataset for the displayed range.
|
|
81
|
+
*
|
|
82
|
+
* It is called, debounced by 200 ms, when the displayed range changes. `bbox` is the range in
|
|
83
|
+
* degrees rounded out to the boundaries of the tiles at the integer zoom, and `zoom` is the
|
|
84
|
+
* zoom at the time of the call. A result is cached per rounded range, so a small pan or zoom
|
|
85
|
+
* causes no call; {@link Dataset.invalidateProviderCache} discards the cache. Only
|
|
86
|
+
* the result of the last request is applied, and a rejected promise is logged with
|
|
87
|
+
* `console.error` and leaves the features shown as they are.
|
|
88
|
+
*
|
|
89
|
+
* @example
|
|
90
|
+
* ```ts
|
|
91
|
+
* const provider: DatasetFeatureProvider = async (bbox, zoom) => {
|
|
92
|
+
* const url = `/api/parcels?bbox=${bbox.minX},${bbox.minY},${bbox.maxX},${bbox.maxY}&z=${zoom}`;
|
|
93
|
+
* const response = await fetch(url);
|
|
94
|
+
* return response.json(); // DatasetFeatureInput[]
|
|
95
|
+
* };
|
|
96
|
+
* draw.addDataset({ id: 'parcels', provider });
|
|
97
|
+
* ```
|
|
98
|
+
*/
|
|
99
|
+
export type DatasetFeatureProvider = (bbox: BoundingBox, zoom: number) => Promise<DatasetFeatureInput[]>;
|
|
100
|
+
/**
|
|
101
|
+
* Returns the size and opacity factors of a dataset for a zoom.
|
|
102
|
+
*
|
|
103
|
+
* They are evaluated exactly once per frame, right before drawing. scale is the size factor (it
|
|
104
|
+
* applies to the diameter of a point, the line width and the outline width of a polygon) and
|
|
105
|
+
* opacity is the opacity factor (0..1).
|
|
106
|
+
*
|
|
107
|
+
* They are uniforms multiplied into the baked sizes at draw time, so changing a value never
|
|
108
|
+
* rebuilds a retained batch. They are factors per dataset and do not affect the rendering of
|
|
109
|
+
* the Store (the drawn features). A return value of NaN or a negative number does not break the
|
|
110
|
+
* rendering (it is clamped into a safe range).
|
|
111
|
+
*
|
|
112
|
+
* @example
|
|
113
|
+
* ```ts
|
|
114
|
+
* // Shrink and fade the markers below zoom 12
|
|
115
|
+
* const zoomScale: DatasetZoomScale = (zoom) =>
|
|
116
|
+
* zoom >= 12 ? { scale: 1, opacity: 1 } : { scale: 0.5, opacity: 0.6 };
|
|
117
|
+
* ```
|
|
118
|
+
*/
|
|
119
|
+
export type DatasetZoomScale = (zoom: number) => {
|
|
120
|
+
scale: number;
|
|
121
|
+
opacity: number;
|
|
122
|
+
};
|
|
123
|
+
/**
|
|
124
|
+
* The options of {@link MapLibreGLDraw.addDataset}.
|
|
125
|
+
*
|
|
126
|
+
* Only `id` is required. Give at most one of `features` (static), `columnar` (static, as
|
|
127
|
+
* columns of typed arrays) and `provider` (fetched for the displayed range).
|
|
128
|
+
*/
|
|
129
|
+
export interface DatasetOptions {
|
|
130
|
+
/**
|
|
131
|
+
* The dataset id. It must be unique among the datasets of the draw
|
|
132
|
+
* instance; a duplicate makes `addDataset` throw. With `order: 'layer-order'` it is
|
|
133
|
+
* also the id placed in the layer order of the Store
|
|
134
|
+
*/
|
|
135
|
+
id: string;
|
|
136
|
+
/**
|
|
137
|
+
* The static features, drawn in array order (the last in front). Cannot be given together
|
|
138
|
+
* with `columnar` or `provider` (it throws). Replace them later with
|
|
139
|
+
* {@link Dataset.setFeatures}
|
|
140
|
+
*/
|
|
141
|
+
features?: DatasetFeatureInput[];
|
|
142
|
+
/**
|
|
143
|
+
* The static rows as columns of typed arrays, drawn in row order (the last in front); the
|
|
144
|
+
* fast way in for a large table, read in a Worker if need be. Cannot be given together with
|
|
145
|
+
* `features` or `provider` (it throws). Replace them later with
|
|
146
|
+
* {@link Dataset.setColumnar}
|
|
147
|
+
*/
|
|
148
|
+
columnar?: DatasetColumnarInput;
|
|
149
|
+
/**
|
|
150
|
+
* What `prepareDatasetColumnar` computed for `columnar` (in a Worker, say). The dataset then
|
|
151
|
+
* computes none of it on the main thread. Only with `columnar` (it throws otherwise)
|
|
152
|
+
*/
|
|
153
|
+
prepared?: DatasetColumnarPrepared;
|
|
154
|
+
/**
|
|
155
|
+
* Fetches the features for the displayed range. Cannot be given together with `features` or
|
|
156
|
+
* `columnar` (it throws)
|
|
157
|
+
*/
|
|
158
|
+
provider?: DatasetFeatureProvider;
|
|
159
|
+
/**
|
|
160
|
+
* The attribute-driven color, the same type as the `styleRule` of a layer. None when omitted
|
|
161
|
+
*/
|
|
162
|
+
styleRule?: StyleRule;
|
|
163
|
+
/** The default style per geometry channel. None when omitted */
|
|
164
|
+
baseStyle?: DatasetBaseStyle;
|
|
165
|
+
/**
|
|
166
|
+
* Whether the hit test events are fired (false by default)
|
|
167
|
+
*
|
|
168
|
+
* Even with false it blocks hits while it is visible (the features below cannot be grabbed).
|
|
169
|
+
* The only difference is whether click / hover are fired.
|
|
170
|
+
*/
|
|
171
|
+
interactive?: boolean;
|
|
172
|
+
/** Where it is drawn relative to the Store (`'below-store'` by default) */
|
|
173
|
+
order?: DatasetOrder;
|
|
174
|
+
/** The size and opacity factors per zoom (no factors when omitted) */
|
|
175
|
+
zoomScale?: DatasetZoomScale;
|
|
176
|
+
/**
|
|
177
|
+
* Collision thinning of the point markers (disabled when omitted = everything drawn as before)
|
|
178
|
+
*
|
|
179
|
+
* When it is enabled, point markers that overlap on screen are not drawn (they are removed
|
|
180
|
+
* from both the rendering and the hit testing). The test uses the size actually drawn, so
|
|
181
|
+
* making the markers bigger makes the thinning coarser as well.
|
|
182
|
+
*/
|
|
183
|
+
collisionThinning?: DatasetCollisionThinning;
|
|
184
|
+
/**
|
|
185
|
+
* Predicate that picks out the points drawn by an external renderer (core draws every point
|
|
186
|
+
* when omitted)
|
|
187
|
+
*
|
|
188
|
+
* core does not draw a `Point` feature for which it returns true (the contract is that an
|
|
189
|
+
* external renderer draws it). It is only not drawn; it stays a target of the collision
|
|
190
|
+
* thinning, the hit testing and the selection. The test applies only to the Point channel;
|
|
191
|
+
* `MultiPoint` is out of scope.
|
|
192
|
+
*
|
|
193
|
+
* What the predicate does inside (what it looks at to return true) is none of core's business;
|
|
194
|
+
* core only reads whether the result is true.
|
|
195
|
+
*/
|
|
196
|
+
externalPointRender?: (feature: Feature) => boolean;
|
|
197
|
+
}
|
|
198
|
+
export type { DatasetClickEventPayload } from '../shared/types/events.js';
|
|
199
|
+
/**
|
|
200
|
+
* The payload of the `click` event of a {@link Dataset}.
|
|
201
|
+
*/
|
|
202
|
+
export interface DatasetClickPayload {
|
|
203
|
+
/** Dataset id */
|
|
204
|
+
datasetId: string;
|
|
205
|
+
/** The feature that was hit, as normalized by the dataset */
|
|
206
|
+
feature: Feature;
|
|
207
|
+
/**
|
|
208
|
+
* The row of the feature: its index in the features given to the dataset (or in the result
|
|
209
|
+
* of the provider), or its row in the columnar table. A host that keeps its own columns reads
|
|
210
|
+
* the values of the row from them
|
|
211
|
+
*/
|
|
212
|
+
row: number;
|
|
213
|
+
/** The clicked position `[lng, lat]` in degrees */
|
|
214
|
+
lngLat: Coordinate;
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* The payload of the `hover` event of a {@link Dataset}.
|
|
218
|
+
*
|
|
219
|
+
* It fires only when the hovered target changes. When the pointer leaves the target, feature
|
|
220
|
+
* becomes null (so that the host can detect that it left the dataset).
|
|
221
|
+
*/
|
|
222
|
+
export interface DatasetHoverPayload {
|
|
223
|
+
/** Dataset id */
|
|
224
|
+
datasetId: string;
|
|
225
|
+
/** The feature being hovered. null when the pointer left the target */
|
|
226
|
+
feature: Feature | null;
|
|
227
|
+
/** The row of the feature (see {@link DatasetClickPayload.row}). null when it left the target */
|
|
228
|
+
row: number | null;
|
|
229
|
+
/** The pointer position `[lng, lat]` in degrees */
|
|
230
|
+
lngLat: Coordinate;
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* The payload of the `change` event of a {@link Dataset}.
|
|
234
|
+
*
|
|
235
|
+
* It reports to the outside that the contents, the style or the visibility of a dataset
|
|
236
|
+
* changed. It exists so that a host that builds another representation from the contents of a
|
|
237
|
+
* dataset, such as label rendering, gets a trigger to rebuild it.
|
|
238
|
+
*
|
|
239
|
+
* - features: the features were replaced (setFeatures, setColumnar, or a provider result
|
|
240
|
+
* applied). The rows are new, and so are the drawn rows
|
|
241
|
+
* - style: the style rule or the base style changed (the drawn rows may have changed with it)
|
|
242
|
+
* - visibility: it was actually switched between shown and hidden
|
|
243
|
+
* - selection: the selected features actually changed
|
|
244
|
+
* - thinning: the rows the collision thinning draws changed, and nothing else did. When a
|
|
245
|
+
* frame changed them (the zoom entered another band), it is sent right after that frame,
|
|
246
|
+
* which drew them; when the host did (`setCollisionThinning`, `setZoomScale`), it is sent at
|
|
247
|
+
* once and the next frame draws them
|
|
248
|
+
*
|
|
249
|
+
* Every change of the drawn rows also advances {@link Dataset.getDrawnRowsRevision}.
|
|
250
|
+
*/
|
|
251
|
+
export interface DatasetChangePayload {
|
|
252
|
+
/** What changed (see the list above) */
|
|
253
|
+
reason: 'features' | 'style' | 'visibility' | 'selection' | 'thinning';
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* The events of a {@link Dataset} and their payloads.
|
|
257
|
+
*/
|
|
258
|
+
export interface DatasetEventMap {
|
|
259
|
+
/** A feature was clicked. Fires only with `interactive: true` */
|
|
260
|
+
click: DatasetClickPayload;
|
|
261
|
+
/** The hovered feature changed. Fires only with `interactive: true` */
|
|
262
|
+
hover: DatasetHoverPayload;
|
|
263
|
+
/** The features, the style, the visibility, the selection or the thinning changed */
|
|
264
|
+
change: DatasetChangePayload;
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* A set of features drawn fast with attribute-driven styles, outside the Store.
|
|
268
|
+
*
|
|
269
|
+
* It is meant for overlaying tens of thousands of read-only records, such as parcels or a
|
|
270
|
+
* table of places. The features never enter the Store, so none of the following applies to
|
|
271
|
+
* them: editing, undo / redo, the `draw.feature.*` events, the selection UI, and
|
|
272
|
+
* `getAllFeatures()` / `export()`. A caller who wants to edit one copies it into the Store with
|
|
273
|
+
* `addFeature`; the library does not relate the two. Create one with
|
|
274
|
+
* {@link MapLibreGLDraw.addDataset}.
|
|
275
|
+
*
|
|
276
|
+
* @example
|
|
277
|
+
* ```ts
|
|
278
|
+
* const parcels = draw.addDataset({
|
|
279
|
+
* id: 'parcels',
|
|
280
|
+
* features: [
|
|
281
|
+
* {
|
|
282
|
+
* id: 'p1',
|
|
283
|
+
* type: 'Polygon',
|
|
284
|
+
* coordinates: [[[139.76, 35.68], [139.77, 35.68], [139.77, 35.69], [139.76, 35.68]]],
|
|
285
|
+
* properties: { population: 4200 },
|
|
286
|
+
* },
|
|
287
|
+
* ],
|
|
288
|
+
* styleRule: {
|
|
289
|
+
* kind: 'graduated',
|
|
290
|
+
* property: 'population',
|
|
291
|
+
* breaks: [1000, 5000],
|
|
292
|
+
* colors: ['#eff3ff', '#6baed6', '#2171b5'],
|
|
293
|
+
* other: '#cccccc',
|
|
294
|
+
* },
|
|
295
|
+
* interactive: true,
|
|
296
|
+
* });
|
|
297
|
+
*
|
|
298
|
+
* const unsubscribe = parcels.on('click', ({ feature }) => {
|
|
299
|
+
* console.log(feature.id, feature.properties);
|
|
300
|
+
* });
|
|
301
|
+
*
|
|
302
|
+
* parcels.setVisible(false); // hide without discarding the features
|
|
303
|
+
* parcels.remove(); // the same as draw.removeDataset('parcels')
|
|
304
|
+
* ```
|
|
305
|
+
*/
|
|
306
|
+
export interface Dataset {
|
|
307
|
+
/** The dataset id given at creation */
|
|
308
|
+
readonly id: string;
|
|
309
|
+
/**
|
|
310
|
+
* Where it is drawn relative to the Store (the current side)
|
|
311
|
+
*
|
|
312
|
+
* When the side is changed with `moveDataset`, this value becomes the new side.
|
|
313
|
+
*/
|
|
314
|
+
readonly order: DatasetOrder;
|
|
315
|
+
/** Whether click / hover are fired (hits are blocked even with false) */
|
|
316
|
+
readonly interactive: boolean;
|
|
317
|
+
/** Whether it is shown (true by default) */
|
|
318
|
+
readonly visible: boolean;
|
|
319
|
+
/**
|
|
320
|
+
* Switches between shown and hidden
|
|
321
|
+
*
|
|
322
|
+
* While it is hidden, neither the rendering nor the hit testing happens, but the features held
|
|
323
|
+
* and the GPU resources stay as they are (showing it again takes effect immediately).
|
|
324
|
+
*/
|
|
325
|
+
setVisible(visible: boolean): void;
|
|
326
|
+
/**
|
|
327
|
+
* Replaces all the features that are shown (there is no partial update). The selection
|
|
328
|
+
* drops the ids that disappear
|
|
329
|
+
*/
|
|
330
|
+
setFeatures(features: DatasetFeatureInput[]): void;
|
|
331
|
+
/**
|
|
332
|
+
* Replaces all the rows that are shown with a columnar table (there is no partial update).
|
|
333
|
+
* The selection drops the ids that disappear
|
|
334
|
+
*
|
|
335
|
+
* The arrays are kept and read as they are, not copied. The rows are packed straight into the
|
|
336
|
+
* GPU arrays, and a row becomes a feature only when it is asked for (a hit, the selection,
|
|
337
|
+
* `getFeatures`, `collectVisible`). The bboxes, the spatial chunks and the spatial index of the
|
|
338
|
+
* hit testing are computed here unless `prepared` brings them.
|
|
339
|
+
*
|
|
340
|
+
* @param input The table
|
|
341
|
+
* @param prepared What `prepareDatasetColumnar` (from `@sakuzu/maplibre-gl-draw/columnar`)
|
|
342
|
+
* computed for this table, typically in the Worker that read it
|
|
343
|
+
* @throws when the shape of the table does not add up, or when `prepared` was made for a table
|
|
344
|
+
* of another length
|
|
345
|
+
*/
|
|
346
|
+
setColumnar(input: DatasetColumnarInput, prepared?: DatasetColumnarPrepared): void;
|
|
347
|
+
/** Replaces the style rule (undefined clears it) */
|
|
348
|
+
setStyleRule(rule: StyleRule | undefined): void;
|
|
349
|
+
/**
|
|
350
|
+
* Replaces the zoom-dependent drawing factors (null clears them)
|
|
351
|
+
*
|
|
352
|
+
* The factors are only multiplied in at draw time, so the retained batches are not rebuilt
|
|
353
|
+
* (they take effect from the next frame). With the collision thinning on, the footprints of
|
|
354
|
+
* the points change with the scale: the winners are picked again at once and, when they
|
|
355
|
+
* changed, the next frame rebuilds the points alone.
|
|
356
|
+
*/
|
|
357
|
+
setZoomScale(zoomScale: DatasetZoomScale | null): void;
|
|
358
|
+
/** The zoom-dependent drawing factors in effect (null when not set) */
|
|
359
|
+
getZoomScale(): DatasetZoomScale | null;
|
|
360
|
+
/** Replaces the base style (undefined clears it) */
|
|
361
|
+
setBaseStyle(style: DatasetBaseStyle | undefined): void;
|
|
362
|
+
/**
|
|
363
|
+
* Replaces the predicate that picks out the points drawn by an external renderer (undefined
|
|
364
|
+
* clears it)
|
|
365
|
+
*
|
|
366
|
+
* It has the same meaning as the `externalPointRender` option at creation. The test is baked
|
|
367
|
+
* into the retained batches, so replacing it rebuilds them (without a rebuild, a circle that
|
|
368
|
+
* should have stopped being drawn would remain, and one that should be drawn again would not
|
|
369
|
+
* appear).
|
|
370
|
+
*/
|
|
371
|
+
setExternalPointRender(predicate: ((feature: Feature) => boolean) | undefined): void;
|
|
372
|
+
/**
|
|
373
|
+
* The base style in effect (undefined when not set)
|
|
374
|
+
*
|
|
375
|
+
* `getFeatures` returns the features before the base style is merged in, so a caller who needs
|
|
376
|
+
* the effective appearance (the radius of a point, for example) reads this as well.
|
|
377
|
+
*/
|
|
378
|
+
getBaseStyle(): DatasetBaseStyle | undefined;
|
|
379
|
+
/**
|
|
380
|
+
* The features currently held, in draw order, as normalized by the dataset. The rule
|
|
381
|
+
* colors and the base style are not merged in (use `collectVisible` for that)
|
|
382
|
+
*
|
|
383
|
+
* For a columnar table every row with a geometry is built into a feature on the first call
|
|
384
|
+
* (and kept), which costs as much as giving the rows as features in the first place.
|
|
385
|
+
*/
|
|
386
|
+
getFeatures(): Feature[];
|
|
387
|
+
/**
|
|
388
|
+
* Returns the features that intersect the displayed range, in draw order (with the rule colors
|
|
389
|
+
* and the base style applied)
|
|
390
|
+
*
|
|
391
|
+
* The narrowing uses the spatial index (rbush), so however many tens of thousands are held,
|
|
392
|
+
* the cost is proportional to the number that intersect. It is the entry point for a caller
|
|
393
|
+
* who wants to "walk only what is visible" (collecting label candidates, for example).
|
|
394
|
+
*
|
|
395
|
+
* @param bounds The range in degrees (`minX` / `maxX` are longitudes, `minY` / `maxY`
|
|
396
|
+
* latitudes)
|
|
397
|
+
* @returns New array of features. Empty when nothing intersects
|
|
398
|
+
*/
|
|
399
|
+
collectVisible(bounds: BoundingBox): Feature[];
|
|
400
|
+
/**
|
|
401
|
+
* Returns the rows that intersect the range and are drawn now, in draw order
|
|
402
|
+
*
|
|
403
|
+
* It is the counterpart of `collectVisible` narrowed to the drawn rows, by row number: a row
|
|
404
|
+
* is kept when its bbox intersects the range, it has a geometry, it is not hidden
|
|
405
|
+
* (`visible: false`) and it survived the collision thinning (every row survives while the
|
|
406
|
+
* thinning is off). A point handed to `externalPointRender` counts as drawn. The visibility
|
|
407
|
+
* of the dataset itself is not looked at (as in `collectVisible`).
|
|
408
|
+
*
|
|
409
|
+
* "Drawn now" means the rows of the zoom band of the most recent frame: a frame decides the
|
|
410
|
+
* band before anything of it is drawn, and draws exactly these rows (see
|
|
411
|
+
* {@link Dataset.getDrawnRowsRevision} for when they change). A layer that draws in the same
|
|
412
|
+
* frame reads the rows of that frame.
|
|
413
|
+
*
|
|
414
|
+
* The narrowing uses the spatial index and builds no feature, so the cost is proportional to
|
|
415
|
+
* the number of rows in the range. It is the entry point for code that walks only what is
|
|
416
|
+
* drawn, such as placing text next to points: choose rows with the `getRow*` reads and build
|
|
417
|
+
* the features of the chosen ones alone with `getRowFeature`.
|
|
418
|
+
*
|
|
419
|
+
* A row is the one reported as `row` by `click` and `hover`: the index in the features given
|
|
420
|
+
* (or in the result of the provider), or the row of the columnar table. The numbers hold until
|
|
421
|
+
* the contents are replaced (a `change` with the reason `features`).
|
|
422
|
+
*
|
|
423
|
+
* @param bounds The range in degrees (`minX` / `maxX` are longitudes, `minY` / `maxY`
|
|
424
|
+
* latitudes)
|
|
425
|
+
* @returns New array of rows, in ascending order. Empty when nothing is drawn in the range
|
|
426
|
+
*/
|
|
427
|
+
collectDrawnRows(bounds: BoundingBox): Int32Array;
|
|
428
|
+
/**
|
|
429
|
+
* The feature of a row, with the rule colors and the base style applied (the same feature
|
|
430
|
+
* `collectVisible` returns for that row)
|
|
431
|
+
*
|
|
432
|
+
* A row of a columnar table is built into a feature on each call.
|
|
433
|
+
*
|
|
434
|
+
* @returns null when the row is out of range
|
|
435
|
+
*/
|
|
436
|
+
getRowFeature(row: number): Feature | null;
|
|
437
|
+
/**
|
|
438
|
+
* The id of a row, without building its feature
|
|
439
|
+
*
|
|
440
|
+
* @returns null when the row is out of range
|
|
441
|
+
*/
|
|
442
|
+
getRowId(row: number): string | null;
|
|
443
|
+
/**
|
|
444
|
+
* The geometry type of a row, without building its feature
|
|
445
|
+
*
|
|
446
|
+
* @returns null for a row without a geometry, or out of range
|
|
447
|
+
*/
|
|
448
|
+
getRowType(row: number): Feature['type'] | null;
|
|
449
|
+
/**
|
|
450
|
+
* The bounding box of a row in degrees, without building its feature (the box the spatial
|
|
451
|
+
* index holds for it)
|
|
452
|
+
*
|
|
453
|
+
* @returns null for a row without a geometry, or out of range
|
|
454
|
+
*/
|
|
455
|
+
getRowBounds(row: number): BoundingBox | null;
|
|
456
|
+
/**
|
|
457
|
+
* The `[lng, lat]` of a row whose geometry is a `Point`, without building its feature
|
|
458
|
+
*
|
|
459
|
+
* @returns null for any other row (another type, no geometry, out of range)
|
|
460
|
+
*/
|
|
461
|
+
getRowPoint(row: number): Coordinate | null;
|
|
462
|
+
/**
|
|
463
|
+
* The row of a feature id: the reverse of `getRowId`
|
|
464
|
+
*
|
|
465
|
+
* The first call builds an index of the ids (one pass over the rows), and the calls after it
|
|
466
|
+
* are a lookup, until the contents are replaced. The ids of a dataset are expected to be
|
|
467
|
+
* unique; when several rows share one, the last (frontmost) row is returned. A row without a
|
|
468
|
+
* geometry is found too (it is never drawn).
|
|
469
|
+
*
|
|
470
|
+
* @returns null when no row has the id
|
|
471
|
+
*/
|
|
472
|
+
findRow(id: string): number | null;
|
|
473
|
+
/**
|
|
474
|
+
* Replaces the selected features
|
|
475
|
+
*
|
|
476
|
+
* The selection is a state of the dataset and is independent of the selection of the Store. A
|
|
477
|
+
* selected feature is drawn with a highlight (the same key color as the selection UI) on top
|
|
478
|
+
* of the retained rendering. The retained batches are not touched, so switching the selection
|
|
479
|
+
* never rebuilds a GPU resource.
|
|
480
|
+
*
|
|
481
|
+
* An id that is not held is ignored. An id that disappears through setFeatures or through a
|
|
482
|
+
* provider result is dropped from the selection automatically.
|
|
483
|
+
*/
|
|
484
|
+
setSelectedIds(ids: string[]): void;
|
|
485
|
+
/** The ids of the selected features (in draw order) */
|
|
486
|
+
getSelectedIds(): string[];
|
|
487
|
+
/**
|
|
488
|
+
* Sets the collision thinning of the point markers (null disables it)
|
|
489
|
+
*
|
|
490
|
+
* While it is enabled, point markers that overlap on screen are not drawn. The test uses the
|
|
491
|
+
* size actually drawn (the radius + the outline + the margin) and the winners are decided from
|
|
492
|
+
* all of the features of the dataset for each integer zoom band (this does not depend on
|
|
493
|
+
* the view, so panning does not swap them). At zooms at or above `fullDisplayZoom` the thinning
|
|
494
|
+
* stops and every feature is drawn. When there is a pitch, the band and `fullDisplayZoom` are
|
|
495
|
+
* decided with "the shallowest effective zoom on screen" (so that only the distance does not
|
|
496
|
+
* get squashed).
|
|
497
|
+
*
|
|
498
|
+
* The band follows the zoom being drawn by itself: every frame decides it from the zoom it
|
|
499
|
+
* draws with, during a zoom or pitch gesture as well, so there is nothing to call when the
|
|
500
|
+
* camera moves or before drawing once at a given camera (a snapshot, a print). Changing the
|
|
501
|
+
* settings picks the winners at once, for the band of the most recent frame, and the next
|
|
502
|
+
* frame draws them (only the points are rebuilt).
|
|
503
|
+
*/
|
|
504
|
+
setCollisionThinning(options: DatasetCollisionThinning | null): void;
|
|
505
|
+
/** The collision thinning in effect (null when not set) */
|
|
506
|
+
getCollisionThinning(): ResolvedCollisionThinning | null;
|
|
507
|
+
/**
|
|
508
|
+
* The set of feature ids that are drawn (null when no thinning is in effect)
|
|
509
|
+
*
|
|
510
|
+
* null means "every feature is drawn" (the set of all of them is not built). The rows are
|
|
511
|
+
* those of {@link Dataset.collectDrawnRows}. The set is built on the first request after each
|
|
512
|
+
* change of the drawn rows, one pass over every row, so code that walks the drawn points of
|
|
513
|
+
* a range reads `collectDrawnRows` instead, and code that caches something per set of drawn
|
|
514
|
+
* rows keys it on {@link Dataset.getDrawnRowsRevision}.
|
|
515
|
+
*/
|
|
516
|
+
getVisibleFeatureIds(): ReadonlySet<string> | null;
|
|
517
|
+
/**
|
|
518
|
+
* The state of the thinning: how many of the features are drawn, in which band (the rows of
|
|
519
|
+
* {@link Dataset.collectDrawnRows})
|
|
520
|
+
*/
|
|
521
|
+
getThinningStats(): DatasetThinningStats;
|
|
522
|
+
/**
|
|
523
|
+
* A number that advances whenever the drawn rows change: the contents replaced, or the rows
|
|
524
|
+
* the collision thinning draws (a band entered by a frame, the settings, the style, the zoom
|
|
525
|
+
* factors)
|
|
526
|
+
*
|
|
527
|
+
* Reading it costs nothing, so it is the key for a cache of what is derived from the drawn
|
|
528
|
+
* rows (the text placed next to the drawn points, say): the same number means the same rows
|
|
529
|
+
* for `collectDrawnRows`, `getVisibleFeatureIds`, `getThinningStats` and the hit testing. A
|
|
530
|
+
* layer that draws in the same frame as the dataset can compare it when it draws, and see a
|
|
531
|
+
* new band in the very frame that draws it, before the `change` event of that frame arrives.
|
|
532
|
+
*/
|
|
533
|
+
getDrawnRowsRevision(): number;
|
|
534
|
+
/**
|
|
535
|
+
* Discards the cache of the fetch results of the provider
|
|
536
|
+
*
|
|
537
|
+
* It is called when what the provider returns has itself changed (a filter being applied
|
|
538
|
+
* again, for example). It empties the cache, fetches again even for the same displayed range,
|
|
539
|
+
* and throws away any response in flight together with its result. After discarding it, it
|
|
540
|
+
* fetches again for the current displayed range.
|
|
541
|
+
*
|
|
542
|
+
* It does nothing for a dataset without a provider.
|
|
543
|
+
*/
|
|
544
|
+
invalidateProviderCache(): void;
|
|
545
|
+
/**
|
|
546
|
+
* Subscribes to an event
|
|
547
|
+
*
|
|
548
|
+
* click / hover fire only with interactive: true. change fires regardless of interactive.
|
|
549
|
+
*
|
|
550
|
+
* @returns A function that cancels the subscription
|
|
551
|
+
*/
|
|
552
|
+
on<K extends keyof DatasetEventMap>(event: K, handler: (payload: DatasetEventMap[K]) => void): () => void;
|
|
553
|
+
/** Cancels a subscription made with `on`. A handler that is not subscribed is ignored */
|
|
554
|
+
off<K extends keyof DatasetEventMap>(event: K, handler: (payload: DatasetEventMap[K]) => void): void;
|
|
555
|
+
/**
|
|
556
|
+
* Removes the dataset and releases its GPU resources; the same as
|
|
557
|
+
* {@link MapLibreGLDraw.removeDataset}, including the `draw.dataset.remove` event.
|
|
558
|
+
* Calling it again does nothing
|
|
559
|
+
*/
|
|
560
|
+
remove(): void;
|
|
561
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
/** Recursively checks whether it contains a position with 3 or more elements */
|
|
4
|
+
function hasExtraPositionElements(value) {
|
|
5
|
+
if (typeof value[0] === 'number') {
|
|
6
|
+
return value.length !== 2;
|
|
7
|
+
}
|
|
8
|
+
return value.some(hasExtraPositionElements);
|
|
9
|
+
}
|
|
10
|
+
/** Returns a copy with every position truncated to the 2 elements [longitude, latitude] */
|
|
11
|
+
function truncatePositions(value) {
|
|
12
|
+
if (typeof value[0] === 'number') {
|
|
13
|
+
return [value[0], value[1]];
|
|
14
|
+
}
|
|
15
|
+
return value.map(truncatePositions);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Normalizes the input into a feature of the same shape as in the Store
|
|
19
|
+
*
|
|
20
|
+
* It fills in the optional fields and, since it is not put into the Store, layerId defaults to an
|
|
21
|
+
* empty string. The coordinates may contain 3-element positions coming from GeoJSON (with an
|
|
22
|
+
* elevation), so a copy truncated to 2 elements is made only when they do (ordinary input with
|
|
23
|
+
* only 2 elements is not copied).
|
|
24
|
+
*
|
|
25
|
+
* @internal
|
|
26
|
+
*/
|
|
27
|
+
export function normalizeDisplayFeature(input) {
|
|
28
|
+
const coords = input.coordinates;
|
|
29
|
+
const coordinates = hasExtraPositionElements(coords)
|
|
30
|
+
? truncatePositions(coords)
|
|
31
|
+
: input.coordinates;
|
|
32
|
+
return {
|
|
33
|
+
id: input.id,
|
|
34
|
+
type: input.type,
|
|
35
|
+
coordinates,
|
|
36
|
+
layerId: input.layerId ?? '',
|
|
37
|
+
groupId: input.groupId,
|
|
38
|
+
properties: input.properties ?? {},
|
|
39
|
+
style: input.style,
|
|
40
|
+
locked: input.locked ?? false,
|
|
41
|
+
visible: input.visible !== false,
|
|
42
|
+
};
|
|
43
|
+
}
|