@sakuzu/maplibre-gl-draw 1.0.0 → 2.1.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 +1109 -2
- package/README.ja.md +83 -50
- package/README.md +89 -53
- package/THIRD_PARTY_NOTICES.md +29 -0
- package/dist/api/datasets.d.ts +263 -0
- package/dist/api/document.d.ts +66 -0
- package/dist/api/draw.d.ts +137 -0
- package/dist/api/draw.js +20 -0
- package/dist/api/drawing.d.ts +87 -0
- package/dist/api/errors.d.ts +35 -0
- package/dist/api/errors.js +35 -0
- package/dist/api/events.d.ts +316 -0
- package/dist/api/extension/context.d.ts +247 -0
- package/dist/api/extension/feature-type.d.ts +129 -0
- package/dist/api/extension/mode.d.ts +123 -0
- package/dist/api/extension/plugin.d.ts +51 -0
- package/dist/api/extension/plugin.js +3 -0
- package/dist/api/extension/provider.d.ts +119 -0
- package/dist/api/extension/provider.js +3 -0
- package/dist/api/extension/render.d.ts +176 -0
- package/dist/api/extension/render.js +3 -0
- package/dist/api/extension/store.d.ts +190 -0
- package/dist/api/extension/store.js +3 -0
- package/dist/api/extensions.d.ts +306 -0
- package/dist/api/extensions.js +3 -0
- package/dist/api/features.d.ts +188 -0
- package/dist/api/features.js +3 -0
- package/dist/api/groups.d.ts +111 -0
- package/dist/api/groups.js +3 -0
- package/dist/api/hidden.d.ts +45 -0
- package/dist/api/hidden.js +3 -0
- package/dist/api/impl/adapters.js +463 -0
- package/dist/api/impl/contexts.js +466 -0
- package/dist/api/impl/create-draw.js +124 -0
- package/dist/api/impl/datasets.js +405 -0
- package/dist/api/impl/destroy-guard.js +74 -0
- package/dist/api/impl/document.js +280 -0
- package/dist/api/impl/drawing.js +180 -0
- package/dist/api/impl/engine-context.d.ts +7 -0
- package/dist/api/{context.js → impl/engine-context.js} +49 -38
- package/dist/{maplibre-gl-draw.js → api/impl/engine.js} +145 -177
- package/dist/api/impl/events.js +423 -0
- package/dist/api/impl/extension-host.js +364 -0
- package/dist/api/impl/extensions.js +229 -0
- package/dist/api/impl/features.js +445 -0
- package/dist/api/impl/geometry/apply.d.ts +32 -0
- package/dist/api/{geometry → impl/geometry}/apply.js +10 -27
- package/dist/api/{geometry → impl/geometry}/buffer.d.ts +4 -3
- package/dist/api/{geometry → impl/geometry}/buffer.js +12 -23
- package/dist/api/{geometry → impl/geometry}/split.d.ts +4 -3
- package/dist/api/{geometry → impl/geometry}/split.js +10 -21
- package/dist/api/{geometry → impl/geometry}/targets.d.ts +2 -20
- package/dist/api/{geometry → impl/geometry}/targets.js +8 -35
- package/dist/api/impl/geometry/types.js +3 -0
- package/dist/api/impl/groups.d.ts +3 -0
- package/dist/api/impl/groups.js +268 -0
- package/dist/api/impl/hidden.js +60 -0
- package/dist/api/impl/import-export/constants.d.ts +22 -0
- package/dist/api/impl/import-export/constants.js +24 -0
- package/dist/api/{import-export → impl/import-export}/embedded-file.js +2 -2
- package/dist/api/{import-export → impl/import-export}/format-detection.d.ts +1 -1
- package/dist/api/{import-export → impl/import-export}/format-detection.js +2 -1
- package/dist/api/impl/import-export/geojson-export.d.ts +19 -0
- package/dist/api/{import-export → impl/import-export}/geojson-export.js +71 -104
- package/dist/api/{import-export → impl/import-export}/geojson-import.d.ts +11 -7
- package/dist/api/{import-export → impl/import-export}/geojson-import.js +139 -97
- package/dist/api/{import-export → impl/import-export}/geometry-validation.d.ts +14 -0
- package/dist/api/{import-export → impl/import-export}/geometry-validation.js +45 -0
- package/dist/api/impl/import-export/image-import.d.ts +16 -0
- package/dist/api/impl/import-export/image-import.js +73 -0
- package/dist/api/impl/import-export/legacy-image-style.d.ts +16 -0
- package/dist/api/impl/import-export/legacy-image-style.js +49 -0
- package/dist/api/impl/import-export/native-format.d.ts +14 -0
- package/dist/api/{import-export → impl/import-export}/native-format.js +32 -22
- package/dist/api/impl/import-export/native-upgrade.d.ts +8 -0
- package/dist/api/impl/import-export/native-upgrade.js +139 -0
- package/dist/api/{import-export → impl/import-export}/native-validation.d.ts +1 -1
- package/dist/api/{import-export → impl/import-export}/native-validation.js +15 -14
- package/dist/api/impl/import-export/style-validation.d.ts +24 -0
- package/dist/api/impl/import-export/style-validation.js +86 -0
- package/dist/api/impl/import-export/types.d.ts +52 -0
- package/dist/api/impl/import-export/types.js +3 -0
- package/dist/api/impl/input.js +180 -0
- package/dist/api/impl/layers.js +307 -0
- package/dist/api/impl/metadata.d.ts +1 -0
- package/dist/api/impl/metadata.js +22 -0
- package/dist/api/impl/options.d.ts +1 -0
- package/dist/api/impl/options.js +851 -0
- package/dist/api/impl/placement.d.ts +1 -0
- package/dist/api/impl/placement.js +138 -0
- package/dist/api/impl/render-context.d.ts +13 -0
- package/dist/api/impl/render-context.js +272 -0
- package/dist/api/impl/rows.d.ts +1 -0
- package/dist/api/impl/rows.js +46 -0
- package/dist/api/impl/selection.d.ts +1 -0
- package/dist/api/impl/selection.js +186 -0
- package/dist/api/impl/shared.d.ts +64 -0
- package/dist/api/impl/shared.js +178 -0
- package/dist/api/impl/validate-extension.d.ts +1 -0
- package/dist/api/impl/validate-extension.js +159 -0
- package/dist/api/layers.d.ts +130 -0
- package/dist/api/layers.js +3 -0
- package/dist/api/metadata.d.ts +18 -0
- package/dist/api/metadata.js +3 -0
- package/dist/api/model.d.ts +487 -0
- package/dist/api/model.js +47 -0
- package/dist/api/options.d.ts +466 -0
- package/dist/api/options.js +3 -0
- package/dist/api/selection.d.ts +94 -0
- package/dist/api/selection.js +3 -0
- package/dist/api/state.d.ts +155 -0
- package/dist/api/state.js +12 -0
- package/dist/{display → dataset}/chunk.d.ts +1 -1
- package/dist/{display → dataset}/chunk.js +4 -3
- package/dist/{display → dataset}/dataset.js +21 -21
- package/dist/dataset/interaction.d.ts +1 -0
- package/dist/{display → dataset}/interaction.js +18 -6
- package/dist/dataset/manager.d.ts +1 -0
- package/dist/dataset/provider.d.ts +1 -0
- package/dist/{display → dataset}/retained.d.ts +1 -1
- package/dist/{display → dataset}/retained.js +8 -7
- package/dist/dataset/source.d.ts +1 -0
- package/dist/{display → dataset}/source.js +17 -4
- package/dist/dataset/spatial.d.ts +1 -0
- package/dist/{display → dataset}/spatial.js +1 -1
- package/dist/dataset/style.d.ts +1 -0
- package/dist/{display → dataset}/style.js +1 -1
- package/dist/dataset/table-source.d.ts +1 -0
- package/dist/{display/columnar/source.js → dataset/table-source.js} +53 -25
- package/dist/{display → dataset}/thinning.d.ts +0 -10
- package/dist/{display → dataset}/thinning.js +3 -2
- package/dist/dataset/triangulation.d.ts +1 -0
- package/dist/{display → dataset}/triangulation.js +0 -0
- package/dist/{display → dataset}/types.d.ts +84 -121
- package/dist/dataset/types.js +61 -0
- package/dist/dispatcher/hit-test/box-strategies.js +13 -13
- package/dist/dispatcher/hit-test/box-strategy.d.ts +2 -15
- package/dist/dispatcher/hit-test/globe-shape.js +5 -4
- package/dist/dispatcher/hit-test/service.d.ts +17 -0
- package/dist/dispatcher/hit-test/service.js +80 -16
- package/dist/dispatcher/hit-test/strategies/base.d.ts +13 -19
- package/dist/dispatcher/hit-test/strategies/circle.js +3 -2
- package/dist/dispatcher/hit-test/strategies/image.js +6 -18
- package/dist/dispatcher/hit-test/strategies/line.d.ts +0 -6
- package/dist/dispatcher/hit-test/strategies/line.js +9 -2
- package/dist/dispatcher/hit-test/strategies/multi.d.ts +0 -8
- package/dist/dispatcher/hit-test/strategies/multi.js +17 -8
- package/dist/dispatcher/hit-test/strategies/point.d.ts +9 -7
- package/dist/dispatcher/hit-test/strategies/point.js +8 -4
- package/dist/dispatcher/hit-test/strategies/polygon.d.ts +0 -7
- package/dist/dispatcher/hit-test/strategies/polygon.js +11 -3
- package/dist/dispatcher/hit-test/topmost.d.ts +1 -1
- package/dist/dispatcher/input-router.js +154 -70
- package/dist/dispatcher/normalizer.js +25 -4
- package/dist/dispatcher/types.d.ts +6 -1
- package/dist/extension/feature-handler.d.ts +1 -182
- package/dist/extension/index.d.ts +4 -7
- package/dist/extension/renderers.d.ts +1 -208
- package/dist/geometry/angle.d.ts +0 -8
- package/dist/geometry/angle.js +0 -8
- package/dist/geometry/bbox.d.ts +4 -12
- package/dist/geometry/bbox.js +4 -12
- package/dist/geometry/boolean.d.ts +0 -51
- package/dist/geometry/boolean.js +0 -51
- package/dist/geometry/buffer.d.ts +0 -26
- package/dist/geometry/buffer.js +0 -26
- package/dist/geometry/circle.d.ts +0 -9
- package/dist/geometry/circle.js +0 -9
- package/dist/geometry/coords.d.ts +0 -16
- package/dist/geometry/coords.js +0 -16
- package/dist/geometry/distance.d.ts +0 -24
- package/dist/geometry/distance.js +0 -24
- package/dist/geometry/errors.d.ts +21 -36
- package/dist/geometry/errors.js +49 -29
- package/dist/geometry/geojson.d.ts +85 -0
- package/dist/geometry/geojson.js +173 -0
- package/dist/geometry/index.d.ts +38 -23
- package/dist/geometry/index.js +43 -31
- package/dist/geometry/measure.d.ts +0 -27
- package/dist/geometry/measure.js +0 -27
- package/dist/geometry/predicates.d.ts +0 -9
- package/dist/geometry/predicates.js +0 -9
- package/dist/geometry/public-bounds.d.ts +26 -0
- package/dist/geometry/public-bounds.js +30 -0
- package/dist/geometry/public-combine.d.ts +78 -0
- package/dist/geometry/public-combine.js +82 -0
- package/dist/geometry/public-create.d.ts +54 -0
- package/dist/geometry/public-create.js +70 -0
- package/dist/geometry/public-measure.d.ts +170 -0
- package/dist/geometry/public-measure.js +283 -0
- package/dist/geometry/public-predicates.d.ts +54 -0
- package/dist/geometry/public-predicates.js +144 -0
- package/dist/geometry/public-repair.d.ts +75 -0
- package/dist/geometry/public-repair.js +77 -0
- package/dist/geometry/simplify.d.ts +0 -7
- package/dist/geometry/simplify.js +0 -7
- package/dist/geometry/split.d.ts +0 -20
- package/dist/geometry/split.js +0 -20
- package/dist/geometry/units.d.ts +20 -12
- package/dist/geometry/units.js +20 -12
- package/dist/index.d.ts +66 -66
- package/dist/index.js +6 -18
- package/dist/messages.d.ts +7 -7
- package/dist/modes/draw/circle.js +83 -207
- package/dist/modes/draw/commit-layer.d.ts +5 -16
- package/dist/modes/draw/commit-layer.js +2 -13
- package/dist/modes/draw/freehand.js +108 -246
- package/dist/modes/draw/image.js +4 -2
- package/dist/modes/draw/index.d.ts +5 -5
- package/dist/modes/draw/index.js +5 -5
- package/dist/modes/draw/line.js +18 -354
- package/dist/modes/draw/point.js +29 -78
- package/dist/modes/draw/polygon.js +23 -368
- package/dist/modes/draw/trace-support.d.ts +43 -36
- package/dist/modes/draw/trace-support.js +95 -98
- package/dist/modes/draw/vertex-drawing.d.ts +1 -0
- package/dist/modes/draw/vertex-drawing.js +176 -0
- package/dist/modes/handler.d.ts +1 -285
- package/dist/modes/manager.d.ts +2 -2
- package/dist/modes/manager.js +3 -0
- package/dist/modes/select/box-selection.d.ts +3 -3
- package/dist/modes/select/box-selection.js +2 -1
- package/dist/modes/select/click-handler.d.ts +5 -5
- package/dist/modes/select/click-handler.js +22 -20
- package/dist/modes/select/cursor-handler.d.ts +2 -2
- package/dist/modes/select/drag/intermediate-writes.js +1 -1
- package/dist/modes/select/drag/move.js +3 -3
- package/dist/modes/select/drag/operation.d.ts +3 -3
- package/dist/modes/select/drag/radius.js +5 -4
- package/dist/modes/select/drag/transform.d.ts +2 -2
- package/dist/modes/select/drag/transform.js +11 -5
- package/dist/modes/select/drag/vertex.d.ts +2 -2
- package/dist/modes/select/drag/vertex.js +13 -8
- package/dist/modes/select/drag-handler.js +44 -25
- package/dist/modes/select/mode.js +17 -17
- package/dist/modes/select/shortcut-handler.d.ts +8 -8
- package/dist/modes/select/shortcut-handler.js +9 -7
- package/dist/operations/layer-operations.js +29 -168
- package/dist/operations/resize.d.ts +2 -2
- package/dist/operations/resize.js +5 -5
- package/dist/operations/rotate.js +5 -5
- package/dist/operations/selection-operations.d.ts +16 -1
- package/dist/operations/selection-operations.js +28 -13
- package/dist/operations/shared-vertex.js +4 -2
- package/dist/operations/trace-graph.d.ts +0 -18
- package/dist/operations/trace-graph.js +0 -18
- package/dist/operations/vertex.js +36 -35
- package/dist/shared/color.d.ts +1 -0
- package/dist/shared/color.js +245 -0
- package/dist/shared/config/constants.d.ts +1 -54
- package/dist/shared/config/constants.js +1 -58
- package/dist/shared/config/feature-style.d.ts +16 -13
- package/dist/shared/config/feature-style.js +9 -0
- package/dist/shared/config/rendering.d.ts +3 -3
- package/dist/shared/config/selection-highlight.d.ts +0 -15
- package/dist/shared/config/selection-highlight.js +4 -7
- package/dist/shared/config/selection.d.ts +2 -32
- package/dist/shared/config/selection.js +0 -18
- package/dist/shared/config/topology.d.ts +2 -2
- package/dist/shared/config/trace.d.ts +4 -4
- package/dist/shared/math/angle.d.ts +1 -1
- package/dist/shared/math/angle.js +1 -1
- package/dist/shared/math/circle.d.ts +1 -1
- package/dist/shared/math/circle.js +1 -1
- package/dist/shared/math/distance.d.ts +2 -1
- package/dist/shared/math/distance.js +3 -2
- package/dist/shared/math/index.d.ts +1 -1
- package/dist/shared/math/index.js +1 -1
- package/dist/shared/math/transform.d.ts +23 -0
- package/dist/shared/math/transform.js +47 -28
- package/dist/shared/properties.d.ts +18 -0
- package/dist/shared/properties.js +129 -0
- package/dist/shared/types/events.d.ts +15 -7
- package/dist/shared/types/model.d.ts +109 -159
- package/dist/shared/types/style.d.ts +1 -1
- package/dist/shared/utils/color.d.ts +2 -36
- package/dist/shared/utils/color.js +13 -70
- package/dist/shared/utils/coordinates.d.ts +30 -4
- package/dist/shared/utils/coordinates.js +56 -10
- package/dist/shared/utils/event-emitter.d.ts +1 -262
- package/dist/shared/utils/event-emitter.js +4 -3
- package/dist/shared/utils/feature-bbox.js +8 -7
- package/dist/shared/utils/feature-segments.js +5 -4
- package/dist/shared/utils/image.d.ts +0 -4
- package/dist/shared/utils/image.js +0 -6
- package/dist/shared/utils/name-generator.d.ts +14 -20
- package/dist/shared/utils/name-generator.js +20 -3
- package/dist/shared/utils/pixel-ratio.d.ts +9 -3
- package/dist/shared/utils/pixel-ratio.js +13 -4
- package/dist/shared/utils/property.d.ts +7 -50
- package/dist/shared/utils/property.js +22 -87
- package/dist/snapping/custom-targets.js +21 -4
- package/dist/snapping/indicator.js +20 -11
- package/dist/snapping/providers/display.d.ts +6 -1
- package/dist/snapping/providers/display.js +2 -1
- package/dist/snapping/providers/guide.d.ts +3 -43
- package/dist/snapping/providers/guide.js +1 -44
- package/dist/snapping/providers/intersection.js +1 -1
- package/dist/snapping/providers/store.js +3 -3
- package/dist/snapping/service.js +18 -7
- package/dist/snapping/types.d.ts +9 -35
- package/dist/store/draw-store.js +233 -142
- package/dist/store/local-visibility.d.ts +11 -6
- package/dist/store/local-visibility.js +38 -7
- package/dist/store/lock.d.ts +0 -6
- package/dist/store/lock.js +0 -6
- package/dist/store/memory/change-bus.d.ts +3 -3
- package/dist/store/memory/change-bus.js +12 -0
- package/dist/store/memory/file-store.d.ts +2 -2
- package/dist/store/memory/ui-state.d.ts +1 -51
- package/dist/store/memory/ui-state.js +122 -134
- package/dist/store/memory.d.ts +1 -8
- package/dist/store/memory.js +249 -45
- package/dist/store/ordering.d.ts +9 -0
- package/dist/store/ordering.js +17 -0
- package/dist/store/spatial/spatial-index.d.ts +1 -1
- package/dist/store/spatial/spatial-index.js +1 -1
- package/dist/store/spatial/store-spatial-index.d.ts +3 -1
- package/dist/store/spatial/store-spatial-index.js +9 -3
- package/dist/store/store.d.ts +66 -107
- package/dist/store/types.d.ts +1 -1
- package/dist/store/writable-layer.d.ts +1 -1
- package/dist/store/writable-layer.js +2 -2
- package/dist/table/builder.d.ts +83 -0
- package/dist/table/builder.js +381 -0
- package/dist/table/index.d.ts +37 -0
- package/dist/table/index.js +5 -0
- package/dist/table/packed-rtree.d.ts +1 -0
- package/dist/{display → table}/packed-rtree.js +1 -1
- package/dist/table/partition.d.ts +1 -0
- package/dist/{display → table}/partition.js +3 -3
- package/dist/table/prepare.d.ts +44 -0
- package/dist/table/prepare.js +136 -0
- package/dist/table/table.d.ts +1 -0
- package/dist/{display/columnar → table}/table.js +29 -25
- package/dist/{display/columnar → table}/types.d.ts +68 -72
- package/dist/table/types.js +3 -0
- package/dist/view/coordinator.js +4 -3
- package/dist/view/feature-companion.d.ts +13 -7
- package/dist/view/feature-companion.js +11 -3
- package/dist/view/globe-subdivision.js +3 -3
- package/dist/view/layer/attach.d.ts +12 -6
- package/dist/view/layer/attach.js +86 -10
- package/dist/view/layer/custom-layer.js +40 -11
- package/dist/view/layer/display-list.js +2 -1
- package/dist/view/layer/drape-planner.d.ts +2 -2
- package/dist/view/layer/frame-render.d.ts +3 -3
- package/dist/view/layer/frame-render.js +7 -2
- package/dist/view/layer/frame-state.d.ts +6 -6
- package/dist/view/layer/index.d.ts +2 -2
- package/dist/view/layer/index.js +1 -1
- package/dist/view/layer/render.d.ts +4 -4
- package/dist/view/layer/render.js +3 -8
- package/dist/view/layer/renderers.d.ts +2 -2
- package/dist/view/layer/renderers.js +1 -1
- package/dist/view/layer/slot-manager.d.ts +2 -2
- package/dist/view/layer/slot-manager.js +4 -4
- package/dist/view/layer/slots.d.ts +2 -2
- package/dist/view/layer/slots.js +1 -1
- package/dist/view/layer/store-retained-bbox.js +3 -2
- package/dist/view/layer/store-retained-classify.d.ts +5 -7
- package/dist/view/layer/store-retained-classify.js +19 -7
- package/dist/view/layer/store-retained-collect.js +8 -7
- package/dist/view/layer/store-retained-coord-patch.d.ts +0 -8
- package/dist/view/layer/store-retained-coord-patch.js +13 -4
- package/dist/view/layer/store-retained-immediate.d.ts +3 -3
- package/dist/view/layer/store-retained-immediate.js +3 -8
- package/dist/view/layer/store-retained-invalidation.d.ts +2 -2
- package/dist/view/layer/store-retained.d.ts +2 -2
- package/dist/view/layer/store-retained.js +1 -1
- package/dist/view/renderers/batch-manager.js +8 -7
- package/dist/view/renderers/drawer.js +21 -15
- package/dist/view/renderers/image.js +13 -39
- package/dist/view/renderers/line/line-types.d.ts +3 -3
- package/dist/view/renderers/line/sdf-line.js +3 -1
- package/dist/view/renderers/point/billboard-depth.js +1 -1
- package/dist/view/renderers/point/point-instance.js +1 -1
- package/dist/view/renderers/point/point-shape.js +2 -2
- package/dist/view/renderers/point/point-style.js +48 -4
- package/dist/view/renderers/polygon/batch.js +1 -2
- package/dist/view/renderers/polygon/fill.js +3 -1
- package/dist/view/renderers/polygon/sdf-polygon.js +2 -3
- package/dist/view/renderers/polygon/triangulator.d.ts +1 -1
- package/dist/view/renderers/stroke.js +3 -1
- package/dist/view/shaders/helpers.d.ts +2 -42
- package/dist/view/shaders/helpers.js +0 -6
- package/dist/view/shaders/projection.d.ts +15 -7
- package/dist/view/shaders/projection.js +23 -6
- package/dist/view/shaders/quad.d.ts +16 -12
- package/dist/view/shaders/quad.js +34 -13
- package/dist/view/style-rule.d.ts +5 -42
- package/dist/view/style-rule.js +20 -44
- package/dist/view/terrain/binding.d.ts +1 -0
- package/dist/view/terrain/binding.js +29 -0
- package/dist/view/terrain/context.d.ts +3 -4
- package/dist/view/terrain/context.js +4 -5
- package/dist/view/terrain/drape/geometry.js +1 -1
- package/dist/view/terrain/drape/pass.d.ts +1 -1
- package/dist/view/terrain/drape/pass.js +8 -7
- package/dist/view/terrain/polygon.d.ts +9 -5
- package/dist/view/terrain/polygon.js +16 -2
- package/dist/view/terrain/state.d.ts +1 -1
- package/dist/view/terrain/state.js +1 -1
- package/dist/view/terrain/tessellation.d.ts +2 -2
- package/dist/view/terrain/tessellation.js +1 -1
- package/dist/view/ui/auxiliary-handles.d.ts +6 -29
- package/dist/view/ui/bounds.js +8 -12
- package/dist/view/ui/handle-test.js +2 -2
- package/dist/view/ui/handle-thinning.js +17 -17
- package/dist/view/ui/handles.js +21 -13
- package/dist/view/ui/helper.d.ts +1 -1
- package/dist/view/ui/helper.js +1 -1
- package/dist/view/ui/index.d.ts +1 -1
- package/dist/view/ui/selection-scope.js +4 -2
- package/dist/view/ui/selection-ui/bounding-box.js +6 -6
- package/dist/view/ui/selection-ui/extension-registry.d.ts +31 -20
- package/dist/view/ui/selection-ui/extension-registry.js +70 -7
- package/dist/view/ui/selection-ui/index.d.ts +2 -2
- package/dist/view/ui/selection-ui/index.js +1 -1
- package/dist/view/ui/selection-ui/renderer.js +15 -38
- package/dist/view/ui/selection-ui/types.d.ts +17 -2
- package/dist/view/ui/selection-ui-drawer.d.ts +8 -0
- package/dist/view/ui/selection-ui-drawer.js +63 -2
- package/dist/view/ui/tentative.js +1 -1
- package/dist/webgl/index.d.ts +65 -0
- package/dist/webgl/index.js +62 -0
- package/package.json +38 -15
- package/dist/api/api.d.ts +0 -1259
- package/dist/api/api.js +0 -86
- package/dist/api/context.d.ts +0 -173
- package/dist/api/display-api.js +0 -23
- package/dist/api/event-api.d.ts +0 -13
- package/dist/api/event-api.js +0 -17
- package/dist/api/extension-api.d.ts +0 -46
- package/dist/api/extension-api.js +0 -85
- package/dist/api/feature-api.d.ts +0 -11
- package/dist/api/feature-api.js +0 -101
- package/dist/api/geometry/apply.d.ts +0 -51
- package/dist/api/geometry/boolean.d.ts +0 -28
- package/dist/api/geometry/boolean.js +0 -65
- package/dist/api/geometry/types.d.ts +0 -31
- package/dist/api/geometry-operations.d.ts +0 -162
- package/dist/api/geometry-operations.js +0 -94
- package/dist/api/group-api.d.ts +0 -10
- package/dist/api/group-api.js +0 -78
- package/dist/api/import-export/constants.d.ts +0 -29
- package/dist/api/import-export/constants.js +0 -40
- package/dist/api/import-export/file-name.d.ts +0 -10
- package/dist/api/import-export/file-name.js +0 -20
- package/dist/api/import-export/geojson-export.d.ts +0 -19
- package/dist/api/import-export/image-import.d.ts +0 -12
- package/dist/api/import-export/image-import.js +0 -53
- package/dist/api/import-export/index.d.ts +0 -9
- package/dist/api/import-export/index.js +0 -107
- package/dist/api/import-export/native-format.d.ts +0 -15
- package/dist/api/import-export/style-validation.d.ts +0 -27
- package/dist/api/import-export/style-validation.js +0 -49
- package/dist/api/import-export/types.d.ts +0 -26
- package/dist/api/index.d.ts +0 -15
- package/dist/api/index.js +0 -3
- package/dist/api/input-api.d.ts +0 -158
- package/dist/api/input-api.js +0 -144
- package/dist/api/instance-api.d.ts +0 -38
- package/dist/api/instance-api.js +0 -136
- package/dist/api/layer-api.d.ts +0 -12
- package/dist/api/layer-api.js +0 -62
- package/dist/api/selection-api.d.ts +0 -7
- package/dist/api/selection-api.js +0 -78
- package/dist/api/snapping-api.d.ts +0 -125
- package/dist/api/snapping-api.js +0 -50
- package/dist/api/topology-api.d.ts +0 -30
- package/dist/api/topology-api.js +0 -16
- package/dist/api/tracing-api.d.ts +0 -31
- package/dist/api/tracing-api.js +0 -16
- package/dist/dispatcher/hit-test/index.d.ts +0 -14
- package/dist/dispatcher/hit-test/index.js +0 -9
- package/dist/dispatcher/index.d.ts +0 -15
- package/dist/dispatcher/index.js +0 -3
- package/dist/display/columnar/index.d.ts +0 -12
- package/dist/display/columnar/index.js +0 -13
- package/dist/display/columnar/prepare.d.ts +0 -42
- package/dist/display/columnar/prepare.js +0 -116
- package/dist/display/index.d.ts +0 -13
- package/dist/display/types.js +0 -43
- package/dist/maplibre-gl-draw.d.ts +0 -47
- package/dist/modes/cursor.js +0 -72
- package/dist/modes/index.d.ts +0 -7
- package/dist/operations/index.d.ts +0 -9
- package/dist/operations/index.js +0 -3
- package/dist/plugins/index.d.ts +0 -10
- package/dist/plugins/mutation-hooks.d.ts +0 -28
- package/dist/plugins/mutation-hooks.js +0 -84
- package/dist/plugins/plugin-context.js +0 -367
- package/dist/plugins/plugin-manager.d.ts +0 -103
- package/dist/plugins/plugin-manager.js +0 -316
- package/dist/plugins/plugin.d.ts +0 -529
- package/dist/shared/config/index.d.ts +0 -17
- package/dist/shared/config/index.js +0 -8
- package/dist/shared/utils/index.d.ts +0 -15
- package/dist/shared/utils/index.js +0 -24
- package/dist/snapping/index.d.ts +0 -14
- package/dist/snapping/index.js +0 -4
- package/dist/store/change-merger.js +0 -102
- package/dist/store/event-bridge.js +0 -161
- package/dist/store/index.d.ts +0 -12
- package/dist/store/index.js +0 -4
- package/dist/view/index.d.ts +0 -47
- package/dist/view/index.js +0 -20
- /package/dist/api/{geometry/types.js → datasets.js} +0 -0
- /package/dist/api/{import-export/types.js → document.js} +0 -0
- /package/dist/{display/columnar/types.js → api/drawing.js} +0 -0
- /package/dist/{display/index.js → api/events.js} +0 -0
- /package/dist/{modes/index.js → api/extension/context.js} +0 -0
- /package/dist/{plugins/index.js → api/extension/feature-type.js} +0 -0
- /package/dist/{plugins/plugin.js → api/extension/mode.js} +0 -0
- /package/dist/api/{display-api.d.ts → impl/adapters.d.ts} +0 -0
- /package/dist/{display/columnar/source.d.ts → api/impl/contexts.d.ts} +0 -0
- /package/dist/{display/columnar/table.d.ts → api/impl/create-draw.d.ts} +0 -0
- /package/dist/{display/interaction.d.ts → api/impl/datasets.d.ts} +0 -0
- /package/dist/{display/manager.d.ts → api/impl/destroy-guard.d.ts} +0 -0
- /package/dist/{display/packed-rtree.d.ts → api/impl/document.d.ts} +0 -0
- /package/dist/{display/partition.d.ts → api/impl/drawing.d.ts} +0 -0
- /package/dist/{display/provider.d.ts → api/impl/engine.d.ts} +0 -0
- /package/dist/{display/source.d.ts → api/impl/events.d.ts} +0 -0
- /package/dist/{display/spatial.d.ts → api/impl/extension-host.d.ts} +0 -0
- /package/dist/{display/style.d.ts → api/impl/extensions.d.ts} +0 -0
- /package/dist/{display/triangulation.d.ts → api/impl/features.d.ts} +0 -0
- /package/dist/{modes/cursor.d.ts → api/impl/geometry/types.d.ts} +0 -0
- /package/dist/{plugins/plugin-context.d.ts → api/impl/hidden.d.ts} +0 -0
- /package/dist/api/{import-export → impl/import-export}/embedded-file.d.ts +0 -0
- /package/dist/api/{import-export → impl/import-export}/own-property.d.ts +0 -0
- /package/dist/api/{import-export → impl/import-export}/own-property.js +0 -0
- /package/dist/{store/change-merger.d.ts → api/impl/input.d.ts} +0 -0
- /package/dist/{store/event-bridge.d.ts → api/impl/layers.d.ts} +0 -0
- /package/dist/{display → dataset}/chunk-set.d.ts +0 -0
- /package/dist/{display → dataset}/chunk-set.js +0 -0
- /package/dist/{display → dataset}/dataset.d.ts +0 -0
- /package/dist/{display → dataset}/manager.js +0 -0
- /package/dist/{display → dataset}/provider.js +0 -0
- /package/dist/{display → dataset}/selection.d.ts +0 -0
- /package/dist/{display → dataset}/selection.js +0 -0
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
import { invalidInput } from './errors.js';
|
|
4
|
+
/** The geometry types that carry `coordinates` */
|
|
5
|
+
const COORDINATE_TYPES = new Set([
|
|
6
|
+
'Point',
|
|
7
|
+
'MultiPoint',
|
|
8
|
+
'LineString',
|
|
9
|
+
'MultiLineString',
|
|
10
|
+
'Polygon',
|
|
11
|
+
'MultiPolygon',
|
|
12
|
+
]);
|
|
13
|
+
function isObject(value) {
|
|
14
|
+
return typeof value === 'object' && value !== null;
|
|
15
|
+
}
|
|
16
|
+
/** Whether a value is an array whose first two elements are numbers */
|
|
17
|
+
function isPosition(value) {
|
|
18
|
+
return (Array.isArray(value) &&
|
|
19
|
+
value.length >= 2 &&
|
|
20
|
+
typeof value[0] === 'number' &&
|
|
21
|
+
typeof value[1] === 'number');
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Returns the geometry of a geometry, or of anything that carries one in a `geometry` field
|
|
25
|
+
* (a GeoJSON feature, a feature of the drawing)
|
|
26
|
+
*
|
|
27
|
+
* A value whose `geometry` member is a geometry is read as a feature first, whatever its own
|
|
28
|
+
* `type` says: a feature of the drawing names its feature type there (`'Polygon'`,
|
|
29
|
+
* `'Circle'`, `'Freehand'` and so on), which is not the type of a geometry it is.
|
|
30
|
+
*
|
|
31
|
+
* @throws GeometryError (`invalid-input`) for a value that is neither, and for a feature
|
|
32
|
+
* without a geometry
|
|
33
|
+
*/
|
|
34
|
+
export function geometryOf(input, operation) {
|
|
35
|
+
const value = input;
|
|
36
|
+
if (!isObject(value)) {
|
|
37
|
+
throw invalidInput(operation, 'the input is not a geometry or a feature');
|
|
38
|
+
}
|
|
39
|
+
if ('geometry' in value || value.type === 'Feature') {
|
|
40
|
+
const geometry = value.geometry;
|
|
41
|
+
if (isObject(geometry) && isGeometryType(geometry.type)) {
|
|
42
|
+
return geometryOf(geometry, operation);
|
|
43
|
+
}
|
|
44
|
+
if (!isGeometry(value)) {
|
|
45
|
+
throw invalidInput(operation, 'the feature has no geometry');
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
if (value.type === 'GeometryCollection' && !Array.isArray(value.geometries)) {
|
|
49
|
+
throw invalidInput(operation, 'the geometry collection has no geometries');
|
|
50
|
+
}
|
|
51
|
+
if (!isGeometry(value)) {
|
|
52
|
+
throw invalidInput(operation, 'the input is not a geometry or a feature');
|
|
53
|
+
}
|
|
54
|
+
return value;
|
|
55
|
+
}
|
|
56
|
+
/** Whether an object has the type of a geometry and the member that type carries */
|
|
57
|
+
function isGeometry(value) {
|
|
58
|
+
if (!isGeometryType(value.type))
|
|
59
|
+
return false;
|
|
60
|
+
if (value.type === 'GeometryCollection')
|
|
61
|
+
return Array.isArray(value.geometries);
|
|
62
|
+
return Array.isArray(value.coordinates);
|
|
63
|
+
}
|
|
64
|
+
/** Whether a value names a GeoJSON geometry type */
|
|
65
|
+
function isGeometryType(type) {
|
|
66
|
+
return typeof type === 'string' && (COORDINATE_TYPES.has(type) || type === 'GeometryCollection');
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Returns the coordinates of a point given as a position or a Point
|
|
70
|
+
*
|
|
71
|
+
* @throws GeometryError (`invalid-input`) for anything else
|
|
72
|
+
*/
|
|
73
|
+
export function positionOf(input, operation) {
|
|
74
|
+
if (isPosition(input))
|
|
75
|
+
return input;
|
|
76
|
+
if (isObject(input) && input.type === 'Point' && isPosition(input.coordinates)) {
|
|
77
|
+
return input.coordinates;
|
|
78
|
+
}
|
|
79
|
+
throw invalidInput(operation, 'the input is not a position or a Point');
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Returns the geometry of a Polygon or a MultiPolygon, given as it is or in a feature
|
|
83
|
+
*
|
|
84
|
+
* @throws GeometryError (`invalid-input`) for any other geometry
|
|
85
|
+
*/
|
|
86
|
+
export function areaGeometryOf(input, operation) {
|
|
87
|
+
const geometry = geometryOf(input, operation);
|
|
88
|
+
if (geometry.type !== 'Polygon' && geometry.type !== 'MultiPolygon') {
|
|
89
|
+
throw invalidInput(operation, 'the input is not a Polygon or a MultiPolygon');
|
|
90
|
+
}
|
|
91
|
+
return geometry;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Returns the coordinates of a Polygon or a MultiPolygon, given as it is or in a feature
|
|
95
|
+
*
|
|
96
|
+
* @throws GeometryError (`invalid-input`) for any other geometry
|
|
97
|
+
*/
|
|
98
|
+
export function areaOf(input, operation) {
|
|
99
|
+
return areaGeometryOf(input, operation).coordinates;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Returns the coordinates of each polygon in an array
|
|
103
|
+
*
|
|
104
|
+
* @throws GeometryError (`invalid-input`) for a value that is not an array, and for an
|
|
105
|
+
* element that is not a Polygon or a MultiPolygon
|
|
106
|
+
*/
|
|
107
|
+
export function areasOf(inputs, operation) {
|
|
108
|
+
if (!Array.isArray(inputs)) {
|
|
109
|
+
throw invalidInput(operation, 'the input is not an array of polygons');
|
|
110
|
+
}
|
|
111
|
+
return inputs.map((input) => areaOf(input, operation));
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Returns the coordinates of a LineString, given as it is or in a feature
|
|
115
|
+
*
|
|
116
|
+
* @throws GeometryError (`invalid-input`) for any other geometry
|
|
117
|
+
*/
|
|
118
|
+
export function lineOf(input, operation) {
|
|
119
|
+
const geometry = geometryOf(input, operation);
|
|
120
|
+
if (geometry.type !== 'LineString') {
|
|
121
|
+
throw invalidInput(operation, 'the input is not a LineString');
|
|
122
|
+
}
|
|
123
|
+
return geometry.coordinates;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Returns the lines of a LineString or a MultiLineString, given as it is or in a feature
|
|
127
|
+
*
|
|
128
|
+
* @throws GeometryError (`invalid-input`) for any other geometry
|
|
129
|
+
*/
|
|
130
|
+
export function linesOf(input, operation) {
|
|
131
|
+
const geometry = geometryOf(input, operation);
|
|
132
|
+
if (geometry.type === 'LineString')
|
|
133
|
+
return [geometry.coordinates];
|
|
134
|
+
if (geometry.type === 'MultiLineString')
|
|
135
|
+
return geometry.coordinates;
|
|
136
|
+
throw invalidInput(operation, 'the input is not a LineString or a MultiLineString');
|
|
137
|
+
}
|
|
138
|
+
/** Every position of a geometry, the members of a collection included */
|
|
139
|
+
export function positionsOf(geometry) {
|
|
140
|
+
switch (geometry.type) {
|
|
141
|
+
case 'Point':
|
|
142
|
+
return [geometry.coordinates];
|
|
143
|
+
case 'MultiPoint':
|
|
144
|
+
case 'LineString':
|
|
145
|
+
return geometry.coordinates;
|
|
146
|
+
case 'MultiLineString':
|
|
147
|
+
case 'Polygon':
|
|
148
|
+
return geometry.coordinates.flat();
|
|
149
|
+
case 'MultiPolygon':
|
|
150
|
+
return geometry.coordinates.flat(2);
|
|
151
|
+
case 'GeometryCollection':
|
|
152
|
+
return geometry.geometries.flatMap(positionsOf);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
/** A copy of a position, as returned by the public functions */
|
|
156
|
+
export function toPosition(coordinate) {
|
|
157
|
+
return [coordinate[0], coordinate[1]];
|
|
158
|
+
}
|
|
159
|
+
/** A Point geometry at a position */
|
|
160
|
+
export function toPoint(coordinate) {
|
|
161
|
+
return { type: 'Point', coordinates: toPosition(coordinate) };
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Wraps MultiPolygon coordinates into a geometry: a Polygon for one part, a MultiPolygon for
|
|
165
|
+
* several, and null for none
|
|
166
|
+
*/
|
|
167
|
+
export function toAreaGeometry(coordinates) {
|
|
168
|
+
if (coordinates.length === 0)
|
|
169
|
+
return null;
|
|
170
|
+
if (coordinates.length === 1)
|
|
171
|
+
return { type: 'Polygon', coordinates: coordinates[0] };
|
|
172
|
+
return { type: 'MultiPolygon', coordinates };
|
|
173
|
+
}
|
package/dist/geometry/index.d.ts
CHANGED
|
@@ -1,28 +1,43 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Geometry
|
|
2
|
+
* Geometry calculations that need no map.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* regardless of the environment, and determinism is guaranteed by the version of the
|
|
8
|
-
* package.
|
|
4
|
+
* Measure lengths and areas, build circles and buffers, combine polygons, test whether a
|
|
5
|
+
* point lies in a polygon, and tidy shapes. They also work in code that does not use the
|
|
6
|
+
* drawing engine (workers, servers, tests).
|
|
9
7
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
8
|
+
* ```ts
|
|
9
|
+
* import { area, buffer, union } from '@sakuzu/maplibre-gl-draw/geometry';
|
|
10
|
+
*
|
|
11
|
+
* const a = draw.features.get('park');
|
|
12
|
+
* const b = draw.features.get('lake');
|
|
13
|
+
* const merged = union([a, b]); // Polygon | MultiPolygon | null
|
|
14
|
+
* const zone = buffer(merged, 300); // the area within 300 m
|
|
15
|
+
* console.log(area(zone) / 1e6, 'km²');
|
|
16
|
+
* ```
|
|
17
|
+
*
|
|
18
|
+
* The functions take GeoJSON geometries, or anything with a `geometry` field whose geometry
|
|
19
|
+
* they use (GeoJSON features and the features of the drawing), and return GeoJSON geometries. Lengths, distances, radii and tolerances are in meters, areas in
|
|
20
|
+
* square meters, and bearings and coordinates in degrees. An input whose shape a function
|
|
21
|
+
* cannot take throws a {@link GeometryError}; a computation whose result is empty returns null.
|
|
22
|
+
* Crossing the ±180 degree meridian and the vicinity of the poles are out of scope.
|
|
23
|
+
*
|
|
24
|
+
* Read next: the guide
|
|
25
|
+
* [snapping and geometry](https://sakuzu.github.io/maplibre-gl-draw/guides/snapping-geometry),
|
|
26
|
+
* which also shows the operations that change the drawing (`draw.features.union` and the
|
|
27
|
+
* rest). The functions used most are {@link area}, {@link length}, {@link buffer} and
|
|
28
|
+
* {@link union}.
|
|
29
|
+
*
|
|
30
|
+
* @module geometry
|
|
12
31
|
*/
|
|
13
|
-
export {
|
|
14
|
-
export {
|
|
15
|
-
export {
|
|
16
|
-
export
|
|
17
|
-
export {
|
|
18
|
-
export {
|
|
19
|
-
export {
|
|
20
|
-
export {
|
|
21
|
-
export type { GeometryErrorCode
|
|
32
|
+
export { along, area, bearing, centroid, destination, distance, length, midpoint, nearestPointOnLine, perimeter, pointOnSurface, } from './public-measure.js';
|
|
33
|
+
export { buffer, circle } from './public-create.js';
|
|
34
|
+
export { difference, intersection, split, union } from './public-combine.js';
|
|
35
|
+
export { bboxContains, bboxIntersects } from './bbox.js';
|
|
36
|
+
export { contains, overlaps, pointInPolygon } from './public-predicates.js';
|
|
37
|
+
export { makeValid, rewind, simplify } from './public-repair.js';
|
|
38
|
+
export { bbox } from './public-bounds.js';
|
|
39
|
+
export { metersToDegrees } from './units.js';
|
|
40
|
+
export type { GeometryErrorCode } from './errors.js';
|
|
22
41
|
export { GeometryError } from './errors.js';
|
|
23
|
-
export {
|
|
24
|
-
export {
|
|
25
|
-
export { isRingClockwise, normalizeMultiPolygonOrientation, normalizePolygonOrientation, normalizeRingOrientation, signedRingArea, simplify, } from './simplify.js';
|
|
26
|
-
export { segmentIntersection, splitArea } from './split.js';
|
|
27
|
-
export type { AreaCoordinates, BBox, Coordinate, GeometryInput, LineStringGeometry, MultiLineStringGeometry, MultiPointGeometry, MultiPolygonCoordinates, MultiPolygonGeometry, PointGeometry, PolygonCoordinates, PolygonGeometry, Ring, } from './types.js';
|
|
28
|
-
export { EARTH_RADIUS_METERS, toDegrees, toRadians } from './units.js';
|
|
42
|
+
export type { BBox } from './types.js';
|
|
43
|
+
export { EARTH_RADIUS_METERS } from './units.js';
|
package/dist/geometry/index.js
CHANGED
|
@@ -1,38 +1,50 @@
|
|
|
1
1
|
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
2
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
3
|
/**
|
|
4
|
-
* Geometry
|
|
4
|
+
* Geometry calculations that need no map.
|
|
5
5
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* regardless of the environment, and determinism is guaranteed by the version of the
|
|
10
|
-
* package.
|
|
6
|
+
* Measure lengths and areas, build circles and buffers, combine polygons, test whether a
|
|
7
|
+
* point lies in a polygon, and tidy shapes. They also work in code that does not use the
|
|
8
|
+
* drawing engine (workers, servers, tests).
|
|
11
9
|
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
10
|
+
* ```ts
|
|
11
|
+
* import { area, buffer, union } from '@sakuzu/maplibre-gl-draw/geometry';
|
|
12
|
+
*
|
|
13
|
+
* const a = draw.features.get('park');
|
|
14
|
+
* const b = draw.features.get('lake');
|
|
15
|
+
* const merged = union([a, b]); // Polygon | MultiPolygon | null
|
|
16
|
+
* const zone = buffer(merged, 300); // the area within 300 m
|
|
17
|
+
* console.log(area(zone) / 1e6, 'km²');
|
|
18
|
+
* ```
|
|
19
|
+
*
|
|
20
|
+
* The functions take GeoJSON geometries, or anything with a `geometry` field whose geometry
|
|
21
|
+
* they use (GeoJSON features and the features of the drawing), and return GeoJSON geometries. Lengths, distances, radii and tolerances are in meters, areas in
|
|
22
|
+
* square meters, and bearings and coordinates in degrees. An input whose shape a function
|
|
23
|
+
* cannot take throws a {@link GeometryError}; a computation whose result is empty returns null.
|
|
24
|
+
* Crossing the ±180 degree meridian and the vicinity of the poles are out of scope.
|
|
25
|
+
*
|
|
26
|
+
* Read next: the guide
|
|
27
|
+
* [snapping and geometry](https://sakuzu.github.io/maplibre-gl-draw/guides/snapping-geometry),
|
|
28
|
+
* which also shows the operations that change the drawing (`draw.features.union` and the
|
|
29
|
+
* rest). The functions used most are {@link area}, {@link length}, {@link buffer} and
|
|
30
|
+
* {@link union}.
|
|
31
|
+
*
|
|
32
|
+
* @module geometry
|
|
14
33
|
*/
|
|
15
|
-
//
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
export {
|
|
22
|
-
//
|
|
23
|
-
export {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
34
|
+
// biome-ignore-all assist/source/organizeImports: the exports are grouped by section
|
|
35
|
+
// Measure
|
|
36
|
+
export { along, area, bearing, centroid, destination, distance, length, midpoint, nearestPointOnLine, perimeter, pointOnSurface, } from './public-measure.js';
|
|
37
|
+
// Create
|
|
38
|
+
export { buffer, circle } from './public-create.js';
|
|
39
|
+
// Combine
|
|
40
|
+
export { difference, intersection, split, union } from './public-combine.js';
|
|
41
|
+
// Test
|
|
42
|
+
export { bboxContains, bboxIntersects } from './bbox.js';
|
|
43
|
+
export { contains, overlaps, pointInPolygon } from './public-predicates.js';
|
|
44
|
+
// Repair
|
|
45
|
+
export { makeValid, rewind, simplify } from './public-repair.js';
|
|
46
|
+
// Bounds and units
|
|
47
|
+
export { bbox } from './public-bounds.js';
|
|
48
|
+
export { metersToDegrees } from './units.js';
|
|
28
49
|
export { GeometryError } from './errors.js';
|
|
29
|
-
|
|
30
|
-
export { centroid, geodesicLength, pointOnSurface, sphericalArea } from './measure.js';
|
|
31
|
-
// Predicates
|
|
32
|
-
export { contains, intersects, pointInPolygon, within } from './predicates.js';
|
|
33
|
-
// Shaping
|
|
34
|
-
export { isRingClockwise, normalizeMultiPolygonOrientation, normalizePolygonOrientation, normalizeRingOrientation, signedRingArea, simplify, } from './simplify.js';
|
|
35
|
-
// Splitting by a line
|
|
36
|
-
export { segmentIntersection, splitArea } from './split.js';
|
|
37
|
-
// Unit conversion and geodetic constants
|
|
38
|
-
export { EARTH_RADIUS_METERS, toDegrees, toRadians } from './units.js';
|
|
50
|
+
export { EARTH_RADIUS_METERS } from './units.js';
|
|
@@ -8,13 +8,6 @@ import type { AreaCoordinates, Coordinate } from './types.js';
|
|
|
8
8
|
* @param path The vertices `[lng, lat]` in degrees
|
|
9
9
|
* @returns The length in meters. 0 for fewer than 2 positions. NaN when a position is not
|
|
10
10
|
* finite
|
|
11
|
-
*
|
|
12
|
-
* @example
|
|
13
|
-
* ```ts
|
|
14
|
-
* import { geodesicLength } from '@sakuzu/maplibre-gl-draw/geometry';
|
|
15
|
-
*
|
|
16
|
-
* geodesicLength([[0, 0], [1, 0], [1, 1]]); // about 222,390 m
|
|
17
|
-
* ```
|
|
18
11
|
*/
|
|
19
12
|
export declare function geodesicLength(path: Coordinate[]): number;
|
|
20
13
|
/**
|
|
@@ -32,14 +25,6 @@ export declare function geodesicLength(path: Coordinate[]): number;
|
|
|
32
25
|
* @returns The area in square meters. 0 when nothing with an area remains
|
|
33
26
|
* @throws {@link GeometryError} when the boolean operation engine fails even after the
|
|
34
27
|
* retry on the 1e-9 degree grid
|
|
35
|
-
*
|
|
36
|
-
* @example
|
|
37
|
-
* ```ts
|
|
38
|
-
* import { sphericalArea } from '@sakuzu/maplibre-gl-draw/geometry';
|
|
39
|
-
*
|
|
40
|
-
* // A 1 x 1 degree square on the equator
|
|
41
|
-
* sphericalArea([[[0, 0], [1, 0], [1, 1], [0, 1], [0, 0]]]); // about 1.236e10 m²
|
|
42
|
-
* ```
|
|
43
28
|
*/
|
|
44
29
|
export declare function sphericalArea(polygon: AreaCoordinates): number;
|
|
45
30
|
/**
|
|
@@ -65,17 +50,5 @@ export declare function centroid(polygon: AreaCoordinates): Coordinate | null;
|
|
|
65
50
|
*
|
|
66
51
|
* @param polygon Polygon or MultiPolygon coordinates in degrees
|
|
67
52
|
* @returns The point `[lng, lat]` in degrees. `null` when there is not a single position
|
|
68
|
-
*
|
|
69
|
-
* @example
|
|
70
|
-
* ```ts
|
|
71
|
-
* import { centroid, pointOnSurface } from '@sakuzu/maplibre-gl-draw/geometry';
|
|
72
|
-
*
|
|
73
|
-
* // A U shape: the centroid falls in the gap between the arms
|
|
74
|
-
* const u: [number, number][][] = [
|
|
75
|
-
* [[0, 0], [3, 0], [3, 3], [2, 3], [2, 1], [1, 1], [1, 3], [0, 3], [0, 0]],
|
|
76
|
-
* ];
|
|
77
|
-
* centroid(u); // [1.5, 1.357...] (outside)
|
|
78
|
-
* pointOnSurface(u); // [0.5, 1.357...] (inside the left arm)
|
|
79
|
-
* ```
|
|
80
53
|
*/
|
|
81
54
|
export declare function pointOnSurface(polygon: AreaCoordinates): Coordinate | null;
|
package/dist/geometry/measure.js
CHANGED
|
@@ -22,13 +22,6 @@ import { EARTH_RADIUS_METERS, toRadians } from './units.js';
|
|
|
22
22
|
* @param path The vertices `[lng, lat]` in degrees
|
|
23
23
|
* @returns The length in meters. 0 for fewer than 2 positions. NaN when a position is not
|
|
24
24
|
* finite
|
|
25
|
-
*
|
|
26
|
-
* @example
|
|
27
|
-
* ```ts
|
|
28
|
-
* import { geodesicLength } from '@sakuzu/maplibre-gl-draw/geometry';
|
|
29
|
-
*
|
|
30
|
-
* geodesicLength([[0, 0], [1, 0], [1, 1]]); // about 222,390 m
|
|
31
|
-
* ```
|
|
32
25
|
*/
|
|
33
26
|
export function geodesicLength(path) {
|
|
34
27
|
let total = 0;
|
|
@@ -69,14 +62,6 @@ function sphericalRingArea(ring) {
|
|
|
69
62
|
* @returns The area in square meters. 0 when nothing with an area remains
|
|
70
63
|
* @throws {@link GeometryError} when the boolean operation engine fails even after the
|
|
71
64
|
* retry on the 1e-9 degree grid
|
|
72
|
-
*
|
|
73
|
-
* @example
|
|
74
|
-
* ```ts
|
|
75
|
-
* import { sphericalArea } from '@sakuzu/maplibre-gl-draw/geometry';
|
|
76
|
-
*
|
|
77
|
-
* // A 1 x 1 degree square on the equator
|
|
78
|
-
* sphericalArea([[[0, 0], [1, 0], [1, 1], [0, 1], [0, 0]]]); // about 1.236e10 m²
|
|
79
|
-
* ```
|
|
80
65
|
*/
|
|
81
66
|
export function sphericalArea(polygon) {
|
|
82
67
|
let total = 0;
|
|
@@ -192,18 +177,6 @@ function scanlineCrossings(polygon, lat) {
|
|
|
192
177
|
*
|
|
193
178
|
* @param polygon Polygon or MultiPolygon coordinates in degrees
|
|
194
179
|
* @returns The point `[lng, lat]` in degrees. `null` when there is not a single position
|
|
195
|
-
*
|
|
196
|
-
* @example
|
|
197
|
-
* ```ts
|
|
198
|
-
* import { centroid, pointOnSurface } from '@sakuzu/maplibre-gl-draw/geometry';
|
|
199
|
-
*
|
|
200
|
-
* // A U shape: the centroid falls in the gap between the arms
|
|
201
|
-
* const u: [number, number][][] = [
|
|
202
|
-
* [[0, 0], [3, 0], [3, 3], [2, 3], [2, 1], [1, 1], [1, 3], [0, 3], [0, 0]],
|
|
203
|
-
* ];
|
|
204
|
-
* centroid(u); // [1.5, 1.357...] (outside)
|
|
205
|
-
* pointOnSurface(u); // [0.5, 1.357...] (inside the left arm)
|
|
206
|
-
* ```
|
|
207
180
|
*/
|
|
208
181
|
export function pointOnSurface(polygon) {
|
|
209
182
|
const center = centroid(polygon);
|
|
@@ -10,15 +10,6 @@ import type { AreaCoordinates, Coordinate } from './types.js';
|
|
|
10
10
|
* @param polygon Polygon or MultiPolygon coordinates in degrees
|
|
11
11
|
* @returns `true` when the point is inside an outer ring and inside none of its holes (in
|
|
12
12
|
* any part of a MultiPolygon). `false` for empty coordinates
|
|
13
|
-
*
|
|
14
|
-
* @example
|
|
15
|
-
* ```ts
|
|
16
|
-
* import { pointInPolygon } from '@sakuzu/maplibre-gl-draw/geometry';
|
|
17
|
-
*
|
|
18
|
-
* const square: [number, number][][] = [[[0, 0], [1, 0], [1, 1], [0, 1], [0, 0]]];
|
|
19
|
-
* pointInPolygon([0.5, 0.5], square); // true
|
|
20
|
-
* pointInPolygon([2, 0.5], square); // false
|
|
21
|
-
* ```
|
|
22
13
|
*/
|
|
23
14
|
export declare function pointInPolygon(point: Coordinate, polygon: AreaCoordinates): boolean;
|
|
24
15
|
/**
|
|
@@ -43,15 +43,6 @@ function pointInRing(point, ring) {
|
|
|
43
43
|
* @param polygon Polygon or MultiPolygon coordinates in degrees
|
|
44
44
|
* @returns `true` when the point is inside an outer ring and inside none of its holes (in
|
|
45
45
|
* any part of a MultiPolygon). `false` for empty coordinates
|
|
46
|
-
*
|
|
47
|
-
* @example
|
|
48
|
-
* ```ts
|
|
49
|
-
* import { pointInPolygon } from '@sakuzu/maplibre-gl-draw/geometry';
|
|
50
|
-
*
|
|
51
|
-
* const square: [number, number][][] = [[[0, 0], [1, 0], [1, 1], [0, 1], [0, 0]]];
|
|
52
|
-
* pointInPolygon([0.5, 0.5], square); // true
|
|
53
|
-
* pointInPolygon([2, 0.5], square); // false
|
|
54
|
-
* ```
|
|
55
46
|
*/
|
|
56
47
|
export function pointInPolygon(point, polygon) {
|
|
57
48
|
for (const part of toMultiPolygonCoordinates(polygon)) {
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bounds: the public bounding box of a geometry
|
|
3
|
+
*/
|
|
4
|
+
import type { Geometry } from 'geojson';
|
|
5
|
+
import type { BBox } from './types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Returns the bounding box `[minLng, minLat, maxLng, maxLat]` in degrees of a geometry.
|
|
8
|
+
*
|
|
9
|
+
* @param geometry The geometry, or a feature whose geometry it is; coordinates in degrees.
|
|
10
|
+
* Every position counts, the holes and the members of a collection included; a position
|
|
11
|
+
* that is not finite is skipped. Crossing the ±180 degree meridian is not handled
|
|
12
|
+
* @returns The box in degrees
|
|
13
|
+
* @throws {@link GeometryError} (`invalid-input`) when the input is not a geometry or a feature
|
|
14
|
+
* with one, and when it has no finite position
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```ts
|
|
18
|
+
* import { bbox } from '@sakuzu/maplibre-gl-draw/geometry';
|
|
19
|
+
*
|
|
20
|
+
* bbox({ type: 'LineString', coordinates: [[139.7, 35.6], [139.8, 35.7]] });
|
|
21
|
+
* // [139.7, 35.6, 139.8, 35.7]
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export declare function bbox(geometry: Geometry | {
|
|
25
|
+
readonly geometry: Geometry;
|
|
26
|
+
}): BBox;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
import { coordinatesBBox } from './bbox.js';
|
|
4
|
+
import { invalidInput } from './errors.js';
|
|
5
|
+
import { geometryOf, positionsOf } from './geojson.js';
|
|
6
|
+
/**
|
|
7
|
+
* Returns the bounding box `[minLng, minLat, maxLng, maxLat]` in degrees of a geometry.
|
|
8
|
+
*
|
|
9
|
+
* @param geometry The geometry, or a feature whose geometry it is; coordinates in degrees.
|
|
10
|
+
* Every position counts, the holes and the members of a collection included; a position
|
|
11
|
+
* that is not finite is skipped. Crossing the ±180 degree meridian is not handled
|
|
12
|
+
* @returns The box in degrees
|
|
13
|
+
* @throws {@link GeometryError} (`invalid-input`) when the input is not a geometry or a feature
|
|
14
|
+
* with one, and when it has no finite position
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```ts
|
|
18
|
+
* import { bbox } from '@sakuzu/maplibre-gl-draw/geometry';
|
|
19
|
+
*
|
|
20
|
+
* bbox({ type: 'LineString', coordinates: [[139.7, 35.6], [139.8, 35.7]] });
|
|
21
|
+
* // [139.7, 35.6, 139.8, 35.7]
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export function bbox(geometry) {
|
|
25
|
+
const box = coordinatesBBox(positionsOf(geometryOf(geometry, 'bbox')));
|
|
26
|
+
if (box === null) {
|
|
27
|
+
throw invalidInput('bbox', 'the geometry has no finite position');
|
|
28
|
+
}
|
|
29
|
+
return box;
|
|
30
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Combine: the public boolean operations on polygons and the split by a line
|
|
3
|
+
*/
|
|
4
|
+
import type { Geometry, LineString, MultiPolygon, Polygon } from 'geojson';
|
|
5
|
+
/**
|
|
6
|
+
* Returns the union of polygons.
|
|
7
|
+
*
|
|
8
|
+
* @param polygons The Polygons and MultiPolygons, or features whose geometry is one;
|
|
9
|
+
* coordinates in degrees. Rings with fewer than 3 positions or a position that is not finite
|
|
10
|
+
* are left out
|
|
11
|
+
* @returns A Polygon, or a MultiPolygon when the union falls apart, with self-intersections
|
|
12
|
+
* resolved and the rings oriented as RFC 7946 recommends. null when nothing has an area
|
|
13
|
+
* @throws {@link GeometryError} (`invalid-input`) when an element is not a Polygon or a
|
|
14
|
+
* MultiPolygon, and (`engine-failure`) when the boolean operation fails
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```ts
|
|
18
|
+
* import { union } from '@sakuzu/maplibre-gl-draw/geometry';
|
|
19
|
+
*
|
|
20
|
+
* union([
|
|
21
|
+
* { type: 'Polygon', coordinates: [[[0, 0], [1, 0], [1, 1], [0, 1], [0, 0]]] },
|
|
22
|
+
* { type: 'Polygon', coordinates: [[[0.5, 0], [1.5, 0], [1.5, 1], [0.5, 1], [0.5, 0]]] },
|
|
23
|
+
* ]);
|
|
24
|
+
* // { type: 'Polygon', coordinates: [[[0, 0], [1.5, 0], [1.5, 1], [0, 1], [0, 0]]] }
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export declare function union(polygons: readonly (Polygon | MultiPolygon | {
|
|
28
|
+
readonly geometry: Geometry;
|
|
29
|
+
})[]): Polygon | MultiPolygon | null;
|
|
30
|
+
/**
|
|
31
|
+
* Returns the part that polygons have in common.
|
|
32
|
+
*
|
|
33
|
+
* @param polygons The Polygons and MultiPolygons, or features whose geometry is one;
|
|
34
|
+
* coordinates in degrees
|
|
35
|
+
* @returns A Polygon or a MultiPolygon in the form {@link union} returns. null when the
|
|
36
|
+
* polygons share no area (touching boundaries included), when one has no area, and for an
|
|
37
|
+
* empty array
|
|
38
|
+
* @throws {@link GeometryError} (`invalid-input`) when an element is not a Polygon or a
|
|
39
|
+
* MultiPolygon, and (`engine-failure`) when the boolean operation fails
|
|
40
|
+
*/
|
|
41
|
+
export declare function intersection(polygons: readonly (Polygon | MultiPolygon | {
|
|
42
|
+
readonly geometry: Geometry;
|
|
43
|
+
})[]): Polygon | MultiPolygon | null;
|
|
44
|
+
/**
|
|
45
|
+
* Returns a polygon with other polygons removed from it.
|
|
46
|
+
*
|
|
47
|
+
* @param subject The Polygon or MultiPolygon to remove from, or a feature whose geometry is
|
|
48
|
+
* one; coordinates in degrees
|
|
49
|
+
* @param others The Polygons and MultiPolygons to remove, or features whose geometry is one;
|
|
50
|
+
* coordinates in degrees
|
|
51
|
+
* @returns A Polygon or a MultiPolygon in the form {@link union} returns; a removed area inside
|
|
52
|
+
* the subject becomes a hole. null when nothing remains
|
|
53
|
+
* @throws {@link GeometryError} (`invalid-input`) when an argument is not a Polygon or a
|
|
54
|
+
* MultiPolygon, and (`engine-failure`) when the boolean operation fails
|
|
55
|
+
*/
|
|
56
|
+
export declare function difference(subject: Polygon | MultiPolygon | {
|
|
57
|
+
readonly geometry: Geometry;
|
|
58
|
+
}, others: readonly (Polygon | MultiPolygon | {
|
|
59
|
+
readonly geometry: Geometry;
|
|
60
|
+
})[]): Polygon | MultiPolygon | null;
|
|
61
|
+
/**
|
|
62
|
+
* Cuts a polygon with a line and returns the pieces.
|
|
63
|
+
*
|
|
64
|
+
* @param polygon The Polygon or MultiPolygon, or a feature whose geometry is one; coordinates
|
|
65
|
+
* in degrees
|
|
66
|
+
* @param line The cutting LineString, or a feature whose geometry is one; coordinates in
|
|
67
|
+
* degrees. A stretch that runs along the boundary does not cut, and positions closer than
|
|
68
|
+
* 1e-9 degrees count as one
|
|
69
|
+
* @returns One Polygon per piece, holes kept. When the line does not cut across, the polygon
|
|
70
|
+
* itself (one Polygon per part of a MultiPolygon). An empty array when it has no area
|
|
71
|
+
* @throws {@link GeometryError} (`invalid-input`) when an argument is not of the expected
|
|
72
|
+
* type, and (`engine-failure`) when the boolean operation fails
|
|
73
|
+
*/
|
|
74
|
+
export declare function split(polygon: Polygon | MultiPolygon | {
|
|
75
|
+
readonly geometry: Geometry;
|
|
76
|
+
}, line: LineString | {
|
|
77
|
+
readonly geometry: Geometry;
|
|
78
|
+
}): Polygon[];
|