@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,20 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
/**
|
|
4
|
+
* Replaces characters that cannot be used in a file name with underscores
|
|
5
|
+
*/
|
|
6
|
+
function sanitize(name) {
|
|
7
|
+
return name.replace(/[<>:"/\\|?*]/g, '_');
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Builds the export file name
|
|
11
|
+
*
|
|
12
|
+
* Format: `{title}_{YYYY-MM-DD}_{HHMMSS}{suffix}`
|
|
13
|
+
*/
|
|
14
|
+
export function buildExportFileName(metadata, suffix) {
|
|
15
|
+
const title = sanitize(metadata.title || 'drawing');
|
|
16
|
+
const date = new Date();
|
|
17
|
+
const dateStr = date.toISOString().slice(0, 10);
|
|
18
|
+
const timeStr = date.toTimeString().slice(0, 8).replace(/:/g, '');
|
|
19
|
+
return `${title}_${dateStr}_${timeStr}${suffix}`;
|
|
20
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Detection of the data format on import
|
|
3
|
+
*/
|
|
4
|
+
import type { Data } from '../../store/types.js';
|
|
5
|
+
/**
|
|
6
|
+
* Determines whether the data is in the native format
|
|
7
|
+
*/
|
|
8
|
+
export declare function isNativeFormat(data: unknown): data is Data;
|
|
9
|
+
/**
|
|
10
|
+
* Determines whether the data is a GeoJSON FeatureCollection
|
|
11
|
+
*/
|
|
12
|
+
export declare function isGeoJSONFeatureCollection(data: unknown): data is GeoJSON.FeatureCollection<GeoJSON.Geometry>;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
/**
|
|
4
|
+
* Determines whether the data is in the native format
|
|
5
|
+
*/
|
|
6
|
+
export function isNativeFormat(data) {
|
|
7
|
+
if (typeof data !== 'object' || data === null) {
|
|
8
|
+
return false;
|
|
9
|
+
}
|
|
10
|
+
const obj = data;
|
|
11
|
+
return (typeof obj.version === 'string' &&
|
|
12
|
+
Array.isArray(obj.features) &&
|
|
13
|
+
obj.features.every((f) => typeof f === 'object' &&
|
|
14
|
+
f !== null &&
|
|
15
|
+
'id' in f &&
|
|
16
|
+
'type' in f &&
|
|
17
|
+
'coordinates' in f &&
|
|
18
|
+
'layerId' in f));
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Determines whether the data is a GeoJSON FeatureCollection
|
|
22
|
+
*/
|
|
23
|
+
export function isGeoJSONFeatureCollection(data) {
|
|
24
|
+
if (typeof data !== 'object' || data === null) {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
const obj = data;
|
|
28
|
+
return obj.type === 'FeatureCollection' && Array.isArray(obj.features);
|
|
29
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { Store } from '../../store/store.js';
|
|
2
|
+
import type { ExportOptions, Feature } from '../../store/types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Converts an internal Feature into a GeoJSON Feature
|
|
5
|
+
*
|
|
6
|
+
* Conforms to docs/reference/data-format.md:
|
|
7
|
+
* - includes the metadata in properties with the maplibre-gl-draw: prefix, and writes
|
|
8
|
+
* name and description as plain keys
|
|
9
|
+
* - rounds the positions and orients the rings (see the top of this file)
|
|
10
|
+
* - a Point is written out as a Point geometry
|
|
11
|
+
* - the Multi types (MultiPoint / MultiLineString / MultiPolygon) are written out as they are
|
|
12
|
+
* - an Image is written out as a Point geometry and identified by featureType
|
|
13
|
+
* - for an Image feature, the image data is embedded as Base64
|
|
14
|
+
*/
|
|
15
|
+
export declare function convertFeatureToGeoJSON(feature: Feature, store: Store): GeoJSON.Feature<GeoJSON.Geometry> | null;
|
|
16
|
+
/**
|
|
17
|
+
* Exports the current data as a GeoJSON FeatureCollection
|
|
18
|
+
*/
|
|
19
|
+
export declare function exportGeoJSON(store: Store, options?: ExportOptions): GeoJSON.FeatureCollection<GeoJSON.Geometry>;
|
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
/**
|
|
4
|
+
* Conversion from the internal Feature to the GeoJSON format + export of a
|
|
5
|
+
* GeoJSON FeatureCollection
|
|
6
|
+
*
|
|
7
|
+
* The output follows RFC 7946: every position is rounded to GEOJSON_COORDINATE_DECIMALS
|
|
8
|
+
* decimal places, the rings of a polygon follow the right-hand rule (the outer ring
|
|
9
|
+
* counter-clockwise, the holes clockwise) whatever orientation they were drawn in, every
|
|
10
|
+
* longitude is brought into [-180, 180], and the FeatureCollection carries a bbox. The stored
|
|
11
|
+
* features are not changed.
|
|
12
|
+
*
|
|
13
|
+
* A feature drawn across the antimeridian is stored continuous, with longitudes a little
|
|
14
|
+
* beyond ±180 (170 to 190, say). The export brings each position back by a whole turn and
|
|
15
|
+
* does not cut the geometry at the line (RFC 7946 section 3.1.9 recommends cutting): an edge
|
|
16
|
+
* across the line joins its two ends as they come back (170 to -170), which a reader that
|
|
17
|
+
* does not handle the antimeridian draws the other way round the world. The orientation of a
|
|
18
|
+
* ring is judged before the longitudes are brought back, on the continuous ring.
|
|
19
|
+
*/
|
|
20
|
+
import { normalizeMultiPolygonOrientation, normalizePolygonOrientation, } from '../../geometry/index.js';
|
|
21
|
+
import { GEOJSON_COORDINATE_DECIMALS, GEOJSON_PREFIX, LIBRARY_PROPERTIES } from './constants.js';
|
|
22
|
+
import { setOwnProperty } from './own-property.js';
|
|
23
|
+
const COORDINATE_SCALE = 10 ** GEOJSON_COORDINATE_DECIMALS;
|
|
24
|
+
/** Rounds one coordinate value to the exported number of decimal places */
|
|
25
|
+
function roundValue(value) {
|
|
26
|
+
// `+ 0` turns a -0 produced by the rounding into 0
|
|
27
|
+
return Math.round(value * COORDINATE_SCALE) / COORDINATE_SCALE + 0;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Brings a longitude into [-180, 180] by whole turns
|
|
31
|
+
*
|
|
32
|
+
* A longitude already in the range, 180 and -180 included, is returned as it is.
|
|
33
|
+
*/
|
|
34
|
+
function wrapLongitude(lng) {
|
|
35
|
+
if (lng >= -180 && lng <= 180) {
|
|
36
|
+
return lng;
|
|
37
|
+
}
|
|
38
|
+
const wrapped = ((((lng + 180) % 360) + 360) % 360) - 180;
|
|
39
|
+
// Rounding the turn away can leave a value like 1e-13 off the grid; round it again
|
|
40
|
+
return roundValue(wrapped);
|
|
41
|
+
}
|
|
42
|
+
function roundPosition(position) {
|
|
43
|
+
return [roundValue(position[0]), roundValue(position[1])];
|
|
44
|
+
}
|
|
45
|
+
function wrapPosition(position) {
|
|
46
|
+
return [wrapLongitude(position[0]), position[1]];
|
|
47
|
+
}
|
|
48
|
+
/** Rounds a position and brings its longitude into [-180, 180] */
|
|
49
|
+
function exportPosition(position) {
|
|
50
|
+
return wrapPosition(roundPosition(position));
|
|
51
|
+
}
|
|
52
|
+
function exportLine(line) {
|
|
53
|
+
return line.map(exportPosition);
|
|
54
|
+
}
|
|
55
|
+
function roundLine(line) {
|
|
56
|
+
return line.map(roundPosition);
|
|
57
|
+
}
|
|
58
|
+
function wrapRings(rings) {
|
|
59
|
+
return rings.map((ring) => ring.map(wrapPosition));
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Rounds the rings of a polygon, orients them by the right-hand rule and brings the
|
|
63
|
+
* longitudes into [-180, 180] (in this order, so that the orientation is judged on the
|
|
64
|
+
* continuous ring)
|
|
65
|
+
*/
|
|
66
|
+
function exportPolygon(rings) {
|
|
67
|
+
return wrapRings(normalizePolygonOrientation(rings.map(roundLine)));
|
|
68
|
+
}
|
|
69
|
+
/** Whether it is a single coordinate ([lng, lat]) */
|
|
70
|
+
function isCoordinatePair(value) {
|
|
71
|
+
return (Array.isArray(value) &&
|
|
72
|
+
value.length === 2 &&
|
|
73
|
+
typeof value[0] === 'number' &&
|
|
74
|
+
typeof value[1] === 'number');
|
|
75
|
+
}
|
|
76
|
+
/** Whether it is a sequence of points ([[lng, lat], …], two or more points) */
|
|
77
|
+
function isCoordinatePairArray(value) {
|
|
78
|
+
return Array.isArray(value) && value.length >= 2 && value.every(isCoordinatePair);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Converts an internal Feature into a GeoJSON Feature
|
|
82
|
+
*
|
|
83
|
+
* Conforms to docs/reference/data-format.md:
|
|
84
|
+
* - includes the metadata in properties with the maplibre-gl-draw: prefix, and writes
|
|
85
|
+
* name and description as plain keys
|
|
86
|
+
* - rounds the positions and orients the rings (see the top of this file)
|
|
87
|
+
* - a Point is written out as a Point geometry
|
|
88
|
+
* - the Multi types (MultiPoint / MultiLineString / MultiPolygon) are written out as they are
|
|
89
|
+
* - an Image is written out as a Point geometry and identified by featureType
|
|
90
|
+
* - for an Image feature, the image data is embedded as Base64
|
|
91
|
+
*/
|
|
92
|
+
export function convertFeatureToGeoJSON(feature, store) {
|
|
93
|
+
const properties = {};
|
|
94
|
+
// Add the properties (this library's own ones get the prefix). They are defined as
|
|
95
|
+
// own properties so that a `__proto__` key is written out instead of replacing the
|
|
96
|
+
// prototype of the output object.
|
|
97
|
+
for (const [key, value] of Object.entries(feature.properties)) {
|
|
98
|
+
if (LIBRARY_PROPERTIES.has(key)) {
|
|
99
|
+
setOwnProperty(properties, `${GEOJSON_PREFIX}${key}`, value);
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
setOwnProperty(properties, key, value);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
// Add the metadata
|
|
106
|
+
properties[`${GEOJSON_PREFIX}id`] = feature.id;
|
|
107
|
+
properties[`${GEOJSON_PREFIX}layerId`] = feature.layerId;
|
|
108
|
+
if (feature.groupId !== undefined) {
|
|
109
|
+
properties[`${GEOJSON_PREFIX}groupId`] = feature.groupId;
|
|
110
|
+
}
|
|
111
|
+
if (!feature.visible) {
|
|
112
|
+
properties[`${GEOJSON_PREFIX}visible`] = false;
|
|
113
|
+
}
|
|
114
|
+
if (feature.locked) {
|
|
115
|
+
properties[`${GEOJSON_PREFIX}locked`] = true;
|
|
116
|
+
}
|
|
117
|
+
if (feature.style) {
|
|
118
|
+
properties[`${GEOJSON_PREFIX}style`] = feature.style;
|
|
119
|
+
}
|
|
120
|
+
let geometry;
|
|
121
|
+
switch (feature.type) {
|
|
122
|
+
case 'Point':
|
|
123
|
+
geometry = { type: 'Point', coordinates: exportPosition(feature.coordinates) };
|
|
124
|
+
break;
|
|
125
|
+
case 'LineString':
|
|
126
|
+
geometry = { type: 'LineString', coordinates: exportLine(feature.coordinates) };
|
|
127
|
+
break;
|
|
128
|
+
case 'Polygon':
|
|
129
|
+
geometry = {
|
|
130
|
+
type: 'Polygon',
|
|
131
|
+
coordinates: exportPolygon(feature.coordinates),
|
|
132
|
+
};
|
|
133
|
+
break;
|
|
134
|
+
// The Multi types are written out to GeoJSON with their part structure preserved
|
|
135
|
+
case 'MultiPoint':
|
|
136
|
+
geometry = { type: 'MultiPoint', coordinates: exportLine(feature.coordinates) };
|
|
137
|
+
break;
|
|
138
|
+
case 'MultiLineString':
|
|
139
|
+
geometry = {
|
|
140
|
+
type: 'MultiLineString',
|
|
141
|
+
coordinates: feature.coordinates.map(exportLine),
|
|
142
|
+
};
|
|
143
|
+
break;
|
|
144
|
+
case 'MultiPolygon':
|
|
145
|
+
geometry = {
|
|
146
|
+
type: 'MultiPolygon',
|
|
147
|
+
coordinates: normalizeMultiPolygonOrientation(feature.coordinates.map((rings) => rings.map(roundLine))).map(wrapRings),
|
|
148
|
+
};
|
|
149
|
+
break;
|
|
150
|
+
case 'Image': {
|
|
151
|
+
// An Image is written out as a Point geometry and identified by featureType
|
|
152
|
+
geometry = { type: 'Point', coordinates: exportPosition(feature.coordinates) };
|
|
153
|
+
properties[`${GEOJSON_PREFIX}featureType`] = feature.type;
|
|
154
|
+
// Embed the image data as Base64
|
|
155
|
+
const imageFileId = feature.properties.imageFileId;
|
|
156
|
+
if (imageFileId) {
|
|
157
|
+
const fileData = store.getFile(imageFileId);
|
|
158
|
+
if (fileData) {
|
|
159
|
+
properties[`${GEOJSON_PREFIX}imageData`] = fileData.dataURL;
|
|
160
|
+
properties[`${GEOJSON_PREFIX}imageMimeType`] = fileData.mimeType;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
break;
|
|
164
|
+
}
|
|
165
|
+
default:
|
|
166
|
+
// Custom types (Circle, and the types registered from outside) are dispatched by the shape of their
|
|
167
|
+
// geometry, and the type itself makes the round trip through the featureType marker,
|
|
168
|
+
// which carries the type name as it is (a name such as MyShape keeps its inner capital).
|
|
169
|
+
// A type with a single point is written out as a Point, and a type with a sequence of
|
|
170
|
+
// points as a LineString. In both cases the import side restores
|
|
171
|
+
// the original type from the same marker.
|
|
172
|
+
if (isCoordinatePair(feature.coordinates)) {
|
|
173
|
+
geometry = { type: 'Point', coordinates: exportPosition(feature.coordinates) };
|
|
174
|
+
properties[`${GEOJSON_PREFIX}featureType`] = feature.type;
|
|
175
|
+
}
|
|
176
|
+
else if (isCoordinatePairArray(feature.coordinates)) {
|
|
177
|
+
geometry = {
|
|
178
|
+
type: 'LineString',
|
|
179
|
+
coordinates: exportLine(feature.coordinates),
|
|
180
|
+
};
|
|
181
|
+
properties[`${GEOJSON_PREFIX}featureType`] = feature.type;
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
console.warn(`Unsupported feature type for GeoJSON export: ${feature.type}`);
|
|
185
|
+
return null;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
return {
|
|
189
|
+
type: 'Feature',
|
|
190
|
+
id: feature.id,
|
|
191
|
+
geometry,
|
|
192
|
+
properties,
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Exports the current data as a GeoJSON FeatureCollection
|
|
197
|
+
*/
|
|
198
|
+
export function exportGeoJSON(store, options) {
|
|
199
|
+
// In addition to the draw order (visible), hidden features are also included at the end
|
|
200
|
+
// of the export. getOrderedFeatures returns only the visible features, so on its own it
|
|
201
|
+
// would lose visible:false across the GeoJSON round trip. Including the hidden ones
|
|
202
|
+
// preserves it across the round trip.
|
|
203
|
+
const visibleOrdered = store.getOrderedFeatures();
|
|
204
|
+
const visibleIds = new Set(visibleOrdered.map((f) => f.id));
|
|
205
|
+
const hiddenFeatures = store.getAllFeatures().filter((f) => !visibleIds.has(f.id));
|
|
206
|
+
let features = [...visibleOrdered, ...hiddenFeatures];
|
|
207
|
+
if (options?.featureIds && options.featureIds.length > 0) {
|
|
208
|
+
const featureIdSet = new Set(options.featureIds);
|
|
209
|
+
features = features.filter((f) => featureIdSet.has(f.id));
|
|
210
|
+
}
|
|
211
|
+
if (options?.layerIds && options.layerIds.length > 0) {
|
|
212
|
+
const layerIdSet = new Set(options.layerIds);
|
|
213
|
+
features = features.filter((f) => layerIdSet.has(f.layerId));
|
|
214
|
+
}
|
|
215
|
+
const geoJSONFeatures = [];
|
|
216
|
+
for (const feature of features) {
|
|
217
|
+
const geoFeature = convertFeatureToGeoJSON(feature, store);
|
|
218
|
+
if (geoFeature) {
|
|
219
|
+
geoJSONFeatures.push(geoFeature);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
const bbox = featureCollectionBBox(geoJSONFeatures);
|
|
223
|
+
return {
|
|
224
|
+
type: 'FeatureCollection',
|
|
225
|
+
...(bbox ? { bbox } : {}),
|
|
226
|
+
features: geoJSONFeatures,
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* The bounding box of every exported position ([west, south, east, north])
|
|
231
|
+
*
|
|
232
|
+
* null when nothing was exported.
|
|
233
|
+
*/
|
|
234
|
+
function featureCollectionBBox(features) {
|
|
235
|
+
let west = Number.POSITIVE_INFINITY;
|
|
236
|
+
let south = Number.POSITIVE_INFINITY;
|
|
237
|
+
let east = Number.NEGATIVE_INFINITY;
|
|
238
|
+
let north = Number.NEGATIVE_INFINITY;
|
|
239
|
+
const visit = (value) => {
|
|
240
|
+
if (!Array.isArray(value))
|
|
241
|
+
return;
|
|
242
|
+
if (typeof value[0] === 'number') {
|
|
243
|
+
const [lng, lat] = value;
|
|
244
|
+
if (lng < west)
|
|
245
|
+
west = lng;
|
|
246
|
+
if (lng > east)
|
|
247
|
+
east = lng;
|
|
248
|
+
if (lat < south)
|
|
249
|
+
south = lat;
|
|
250
|
+
if (lat > north)
|
|
251
|
+
north = lat;
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
for (const item of value)
|
|
255
|
+
visit(item);
|
|
256
|
+
};
|
|
257
|
+
for (const feature of features) {
|
|
258
|
+
if (feature.geometry.type !== 'GeometryCollection')
|
|
259
|
+
visit(feature.geometry.coordinates);
|
|
260
|
+
}
|
|
261
|
+
return west <= east ? [west, south, east, north] : null;
|
|
262
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { AutoNameGenerator } from '../../shared/utils/name-generator.js';
|
|
2
|
+
import type { Store } from '../../store/store.js';
|
|
3
|
+
import type { LoadResult, SkippedFeature } from '../../store/types.js';
|
|
4
|
+
import type { ConvertedFeatureResult, GeoJSONImportOptions } from './types.js';
|
|
5
|
+
/** A GeoJSON feature that the import left out, with the reason */
|
|
6
|
+
/** The result of a GeoJSON import */
|
|
7
|
+
export interface GeoJSONLoadResult extends LoadResult {
|
|
8
|
+
format: 'geojson';
|
|
9
|
+
/** The features of the source that were not imported, in source order */
|
|
10
|
+
skipped: SkippedFeature[];
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Converts a GeoJSON Feature into the internal Feature format
|
|
14
|
+
*
|
|
15
|
+
* The geometry is validated and normalized first, and a feature that cannot be imported is
|
|
16
|
+
* returned as a reason instead of throwing. A Multi* geometry is kept as a Multi feature by
|
|
17
|
+
* default (it is expanded into individual features only when `flattenMulti: true`). A
|
|
18
|
+
* GeometryCollection is folded by type into at most three features. visible/locked/groupId
|
|
19
|
+
* are restored from the properties with the maplibre-gl-draw: prefix. Nothing is written.
|
|
20
|
+
*/
|
|
21
|
+
export declare function convertGeoJSONToFeature(geoFeature: unknown, layerId: string, generateFeatureId: () => string, generateFileId: () => string, options?: GeoJSONImportOptions): {
|
|
22
|
+
results: ConvertedFeatureResult[];
|
|
23
|
+
} | {
|
|
24
|
+
reason: string;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Imports a GeoJSON FeatureCollection (adds to the existing data)
|
|
28
|
+
*/
|
|
29
|
+
export declare function loadGeoJSON(data: GeoJSON.FeatureCollection<GeoJSON.Geometry>, deps: {
|
|
30
|
+
store: Store;
|
|
31
|
+
autoNameGenerator: AutoNameGenerator;
|
|
32
|
+
generateFeatureId: () => string;
|
|
33
|
+
getCurrentLayerId: () => string;
|
|
34
|
+
}, options?: GeoJSONImportOptions): Promise<GeoJSONLoadResult>;
|