@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,236 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
/**
|
|
4
|
+
* Tests whether a point is inside a rectangle
|
|
5
|
+
*/
|
|
6
|
+
export function pointInRectangle(point, rect) {
|
|
7
|
+
return (point[0] >= rect.minX && point[0] <= rect.maxX && point[1] >= rect.minY && point[1] <= rect.maxY);
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Intersection test between two segments
|
|
11
|
+
*
|
|
12
|
+
* Uses the CCW (Counter-Clockwise) algorithm.
|
|
13
|
+
*/
|
|
14
|
+
export function segmentIntersectsSegment(a1, a2, b1, b2) {
|
|
15
|
+
// CCW test function
|
|
16
|
+
const ccw = (p1, p2, p3) => {
|
|
17
|
+
return (p2[0] - p1[0]) * (p3[1] - p1[1]) - (p2[1] - p1[1]) * (p3[0] - p1[0]);
|
|
18
|
+
};
|
|
19
|
+
const d1 = ccw(a1, a2, b1);
|
|
20
|
+
const d2 = ccw(a1, a2, b2);
|
|
21
|
+
const d3 = ccw(b1, b2, a1);
|
|
22
|
+
const d4 = ccw(b1, b2, a2);
|
|
23
|
+
// Condition under which the segments intersect
|
|
24
|
+
if (((d1 > 0 && d2 < 0) || (d1 < 0 && d2 > 0)) && ((d3 > 0 && d4 < 0) || (d3 < 0 && d4 > 0))) {
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
// When an endpoint lies on the other segment
|
|
28
|
+
const onSegment = (p, q, r) => {
|
|
29
|
+
return (q[0] <= Math.max(p[0], r[0]) &&
|
|
30
|
+
q[0] >= Math.min(p[0], r[0]) &&
|
|
31
|
+
q[1] <= Math.max(p[1], r[1]) &&
|
|
32
|
+
q[1] >= Math.min(p[1], r[1]));
|
|
33
|
+
};
|
|
34
|
+
if (d1 === 0 && onSegment(a1, b1, a2))
|
|
35
|
+
return true;
|
|
36
|
+
if (d2 === 0 && onSegment(a1, b2, a2))
|
|
37
|
+
return true;
|
|
38
|
+
if (d3 === 0 && onSegment(b1, a1, b2))
|
|
39
|
+
return true;
|
|
40
|
+
if (d4 === 0 && onSegment(b1, a2, b2))
|
|
41
|
+
return true;
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Tests whether a segment intersects a rectangle
|
|
46
|
+
*/
|
|
47
|
+
export function segmentIntersectsRectangle(p1, p2, rect) {
|
|
48
|
+
// When either endpoint is inside the rectangle
|
|
49
|
+
if (pointInRectangle(p1, rect) || pointInRectangle(p2, rect)) {
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
// Intersection test against the 4 edges of the rectangle
|
|
53
|
+
const corners = [
|
|
54
|
+
[rect.minX, rect.minY],
|
|
55
|
+
[rect.maxX, rect.minY],
|
|
56
|
+
[rect.maxX, rect.maxY],
|
|
57
|
+
[rect.minX, rect.maxY],
|
|
58
|
+
];
|
|
59
|
+
for (let i = 0; i < 4; i++) {
|
|
60
|
+
const j = (i + 1) % 4;
|
|
61
|
+
if (segmentIntersectsSegment(p1, p2, corners[i], corners[j])) {
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Intersection test between a rectangle and a LineString
|
|
69
|
+
*
|
|
70
|
+
* Returns true when any vertex of the LineString is inside the rectangle, or when any of its
|
|
71
|
+
* edges intersects the rectangle.
|
|
72
|
+
*/
|
|
73
|
+
export function rectangleIntersectsLineString(rect, lineString) {
|
|
74
|
+
if (lineString.length === 0)
|
|
75
|
+
return false;
|
|
76
|
+
// When any vertex is inside the rectangle
|
|
77
|
+
for (const coord of lineString) {
|
|
78
|
+
if (pointInRectangle(coord, rect)) {
|
|
79
|
+
return true;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// When any edge intersects the rectangle
|
|
83
|
+
for (let i = 0; i < lineString.length - 1; i++) {
|
|
84
|
+
if (segmentIntersectsRectangle(lineString[i], lineString[i + 1], rect)) {
|
|
85
|
+
return true;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Tests whether a point is inside a polygon (Ray Casting algorithm)
|
|
92
|
+
*/
|
|
93
|
+
function pointInPolygon(point, ring) {
|
|
94
|
+
let inside = false;
|
|
95
|
+
const x = point[0];
|
|
96
|
+
const y = point[1];
|
|
97
|
+
for (let i = 0, j = ring.length - 1; i < ring.length; j = i++) {
|
|
98
|
+
const xi = ring[i][0];
|
|
99
|
+
const yi = ring[i][1];
|
|
100
|
+
const xj = ring[j][0];
|
|
101
|
+
const yj = ring[j][1];
|
|
102
|
+
if (yi > y !== yj > y && x < ((xj - xi) * (y - yi)) / (yj - yi) + xi) {
|
|
103
|
+
inside = !inside;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return inside;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Intersection test between a rectangle and a Polygon
|
|
110
|
+
*
|
|
111
|
+
* Returns true when any of the following conditions holds:
|
|
112
|
+
* 1. Any vertex of the polygon is inside the rectangle
|
|
113
|
+
* 2. Any vertex of the rectangle is inside the polygon
|
|
114
|
+
* 3. Any edge of the polygon intersects the rectangle
|
|
115
|
+
*/
|
|
116
|
+
export function rectangleIntersectsPolygon(rect, polygon) {
|
|
117
|
+
if (polygon.length === 0 || polygon[0].length === 0)
|
|
118
|
+
return false;
|
|
119
|
+
const outerRing = polygon[0];
|
|
120
|
+
// 1. Any vertex of the polygon is inside the rectangle
|
|
121
|
+
for (const coord of outerRing) {
|
|
122
|
+
if (pointInRectangle(coord, rect)) {
|
|
123
|
+
return true;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
// 2. Any vertex of the rectangle is inside the polygon
|
|
127
|
+
const rectCorners = [
|
|
128
|
+
[rect.minX, rect.minY],
|
|
129
|
+
[rect.maxX, rect.minY],
|
|
130
|
+
[rect.maxX, rect.maxY],
|
|
131
|
+
[rect.minX, rect.maxY],
|
|
132
|
+
];
|
|
133
|
+
for (const corner of rectCorners) {
|
|
134
|
+
if (pointInPolygon(corner, outerRing)) {
|
|
135
|
+
return true;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
// 3. Any edge of the polygon intersects the rectangle
|
|
139
|
+
for (let i = 0; i < outerRing.length - 1; i++) {
|
|
140
|
+
if (segmentIntersectsRectangle(outerRing[i], outerRing[i + 1], rect)) {
|
|
141
|
+
return true;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
// The edge that joins the last vertex to the first vertex
|
|
145
|
+
if (outerRing.length > 1 &&
|
|
146
|
+
segmentIntersectsRectangle(outerRing[outerRing.length - 1], outerRing[0], rect)) {
|
|
147
|
+
return true;
|
|
148
|
+
}
|
|
149
|
+
return false;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Intersection test between a rectangle and a Circle
|
|
153
|
+
*
|
|
154
|
+
* Returns true when the center of the circle is inside the rectangle, or when an edge or a
|
|
155
|
+
* vertex of the rectangle intersects the circle.
|
|
156
|
+
*
|
|
157
|
+
* @param rect Selection rectangle (geographic coordinates)
|
|
158
|
+
* @param center Center of the circle (geographic coordinates)
|
|
159
|
+
* @param radiusInDegrees Radius of the circle (in degrees)
|
|
160
|
+
*/
|
|
161
|
+
export function rectangleIntersectsCircle(rect, center, radiusInDegrees) {
|
|
162
|
+
// When the center of the circle is inside the rectangle
|
|
163
|
+
if (pointInRectangle(center, rect)) {
|
|
164
|
+
return true;
|
|
165
|
+
}
|
|
166
|
+
// Compute the closest point of the rectangle
|
|
167
|
+
const closestX = Math.max(rect.minX, Math.min(center[0], rect.maxX));
|
|
168
|
+
const closestY = Math.max(rect.minY, Math.min(center[1], rect.maxY));
|
|
169
|
+
// Compute the distance between the closest point and the center of the circle
|
|
170
|
+
const dx = center[0] - closestX;
|
|
171
|
+
const dy = center[1] - closestY;
|
|
172
|
+
const distanceSquared = dx * dx + dy * dy;
|
|
173
|
+
// They intersect if the distance is at most the radius
|
|
174
|
+
return distanceSquared <= radiusInDegrees * radiusInDegrees;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Intersection test between an AABB and an OBB (Separating Axis Theorem: SAT)
|
|
178
|
+
*
|
|
179
|
+
* @param rect Axis-aligned bounding box (AABB)
|
|
180
|
+
* @param obb Bounding box that accounts for rotation (OBB)
|
|
181
|
+
*/
|
|
182
|
+
export function rectangleIntersectsOBB(rect, obb) {
|
|
183
|
+
if (obb.corners.length !== 4)
|
|
184
|
+
return false;
|
|
185
|
+
// Convert the AABB into an array of vertices
|
|
186
|
+
const rectCorners = [
|
|
187
|
+
[rect.minX, rect.minY],
|
|
188
|
+
[rect.maxX, rect.minY],
|
|
189
|
+
[rect.maxX, rect.maxY],
|
|
190
|
+
[rect.minX, rect.maxY],
|
|
191
|
+
];
|
|
192
|
+
// Get the separating axes (the 2 axes of the AABB + the 2 axes of the OBB)
|
|
193
|
+
const axes = [
|
|
194
|
+
// Axes of the AABB (always the X axis and the Y axis)
|
|
195
|
+
[1, 0],
|
|
196
|
+
[0, 1],
|
|
197
|
+
// Axes of the OBB (derived from its edges)
|
|
198
|
+
normalize([obb.corners[1][0] - obb.corners[0][0], obb.corners[1][1] - obb.corners[0][1]]),
|
|
199
|
+
normalize([obb.corners[3][0] - obb.corners[0][0], obb.corners[3][1] - obb.corners[0][1]]),
|
|
200
|
+
];
|
|
201
|
+
// Check for separation along each axis
|
|
202
|
+
for (const axis of axes) {
|
|
203
|
+
const [minA, maxA] = projectPolygon(rectCorners, axis);
|
|
204
|
+
const [minB, maxB] = projectPolygon(obb.corners, axis);
|
|
205
|
+
// When the projections do not overlap, a separating axis has been found
|
|
206
|
+
if (maxA < minB || maxB < minA) {
|
|
207
|
+
return false;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
// When they overlap on every axis, they intersect
|
|
211
|
+
return true;
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Normalizes a vector
|
|
215
|
+
*/
|
|
216
|
+
function normalize(v) {
|
|
217
|
+
const len = Math.sqrt(v[0] * v[0] + v[1] * v[1]);
|
|
218
|
+
if (len === 0)
|
|
219
|
+
return [1, 0];
|
|
220
|
+
return [v[0] / len, v[1] / len];
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Projects a polygon onto an axis and returns the minimum and maximum values
|
|
224
|
+
*/
|
|
225
|
+
function projectPolygon(corners, axis) {
|
|
226
|
+
let min = corners[0][0] * axis[0] + corners[0][1] * axis[1];
|
|
227
|
+
let max = min;
|
|
228
|
+
for (let i = 1; i < corners.length; i++) {
|
|
229
|
+
const p = corners[i][0] * axis[0] + corners[i][1] * axis[1];
|
|
230
|
+
if (p < min)
|
|
231
|
+
min = p;
|
|
232
|
+
if (p > max)
|
|
233
|
+
max = p;
|
|
234
|
+
}
|
|
235
|
+
return [min, max];
|
|
236
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Longitude wrapping
|
|
3
|
+
*
|
|
4
|
+
* The longitude arithmetic that the rendering, the hit testing and the snapping share, so
|
|
5
|
+
* that all of them pick the same copy of the world.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Brings a longitude into [-180, 180] (a longitude already inside is returned unchanged)
|
|
9
|
+
*/
|
|
10
|
+
export declare function wrapLongitude(lng: number): number;
|
|
11
|
+
/**
|
|
12
|
+
* The copy of a longitude nearest to a reference longitude
|
|
13
|
+
*
|
|
14
|
+
* A longitude within 180 degrees of the reference is returned unchanged (so nothing moves
|
|
15
|
+
* away from the antimeridian); otherwise it is moved by whole turns. This is the choice the
|
|
16
|
+
* rendering makes for a feature near the view: it is drawn on the copy of the world the view
|
|
17
|
+
* shows, which is the copy nearest to the camera. Hit testing and snapping use it around the
|
|
18
|
+
* pointer so that they meet the copy that is drawn.
|
|
19
|
+
*/
|
|
20
|
+
export declare function nearestLongitude(lng: number, reference: number): number;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
/**
|
|
4
|
+
* Longitude wrapping
|
|
5
|
+
*
|
|
6
|
+
* The longitude arithmetic that the rendering, the hit testing and the snapping share, so
|
|
7
|
+
* that all of them pick the same copy of the world.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Brings a longitude into [-180, 180] (a longitude already inside is returned unchanged)
|
|
11
|
+
*/
|
|
12
|
+
export function wrapLongitude(lng) {
|
|
13
|
+
if (lng >= -180 && lng <= 180)
|
|
14
|
+
return lng;
|
|
15
|
+
return lng - 360 * Math.round(lng / 360);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* The copy of a longitude nearest to a reference longitude
|
|
19
|
+
*
|
|
20
|
+
* A longitude within 180 degrees of the reference is returned unchanged (so nothing moves
|
|
21
|
+
* away from the antimeridian); otherwise it is moved by whole turns. This is the choice the
|
|
22
|
+
* rendering makes for a feature near the view: it is drawn on the copy of the world the view
|
|
23
|
+
* shows, which is the copy nearest to the camera. Hit testing and snapping use it around the
|
|
24
|
+
* pointer so that they meet the copy that is drawn.
|
|
25
|
+
*/
|
|
26
|
+
export function nearestLongitude(lng, reference) {
|
|
27
|
+
const delta = lng - reference;
|
|
28
|
+
if (delta >= -180 && delta <= 180)
|
|
29
|
+
return lng;
|
|
30
|
+
return lng - 360 * Math.round(delta / 360);
|
|
31
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The plane the transform operations work in
|
|
3
|
+
*
|
|
4
|
+
* Resize and rotate compute in Web Mercator, the plane the map is drawn in, so a transform
|
|
5
|
+
* does on the map what the pointer does on the screen (at any latitude and size, with no
|
|
6
|
+
* local cos φ approximation that changes the shape a little on every rotation). The plane is
|
|
7
|
+
* maplibre's world coordinate (0 to 1 across the world) with y pointing north, so an angle
|
|
8
|
+
* measured in it is counterclockwise like the old lng/lat angle. Longitude is linear and not
|
|
9
|
+
* wrapped. Latitude is clamped to the Web Mercator limit (±85.051129 degrees), beyond which
|
|
10
|
+
* the map draws nothing and the projection reaches infinity at the poles.
|
|
11
|
+
*/
|
|
12
|
+
import type { Coordinate } from '../types/model.js';
|
|
13
|
+
/**
|
|
14
|
+
* Converts a longitude/latitude into the transform plane
|
|
15
|
+
*
|
|
16
|
+
* @param coord [lng, lat]
|
|
17
|
+
* @returns [x, y] in world units (1 = the width of the world), y pointing north
|
|
18
|
+
*/
|
|
19
|
+
export declare function toPlane(coord: Coordinate): [number, number];
|
|
20
|
+
/**
|
|
21
|
+
* Converts a point of the transform plane back into a longitude/latitude
|
|
22
|
+
*
|
|
23
|
+
* @param x World units east
|
|
24
|
+
* @param y World units north
|
|
25
|
+
* @returns [lng, lat]
|
|
26
|
+
*/
|
|
27
|
+
export declare function fromPlane(x: number, y: number): Coordinate;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
/** The latitude limit of Web Mercator (degrees) */
|
|
4
|
+
const MAX_MERCATOR_LATITUDE = 85.0511287798066;
|
|
5
|
+
/**
|
|
6
|
+
* Converts a longitude/latitude into the transform plane
|
|
7
|
+
*
|
|
8
|
+
* @param coord [lng, lat]
|
|
9
|
+
* @returns [x, y] in world units (1 = the width of the world), y pointing north
|
|
10
|
+
*/
|
|
11
|
+
export function toPlane(coord) {
|
|
12
|
+
const lat = Math.max(-MAX_MERCATOR_LATITUDE, Math.min(MAX_MERCATOR_LATITUDE, coord[1]));
|
|
13
|
+
const phi = (lat * Math.PI) / 180;
|
|
14
|
+
return [coord[0] / 360, Math.log(Math.tan(Math.PI / 4 + phi / 2)) / (2 * Math.PI)];
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Converts a point of the transform plane back into a longitude/latitude
|
|
18
|
+
*
|
|
19
|
+
* @param x World units east
|
|
20
|
+
* @param y World units north
|
|
21
|
+
* @returns [lng, lat]
|
|
22
|
+
*/
|
|
23
|
+
export function fromPlane(x, y) {
|
|
24
|
+
const lat = (2 * Math.atan(Math.exp(y * 2 * Math.PI)) - Math.PI / 2) * (180 / Math.PI);
|
|
25
|
+
return [x * 360, lat];
|
|
26
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OBB (Oriented Bounding Box)
|
|
3
|
+
*
|
|
4
|
+
* Computation and hit testing of a bounding box that includes rotation.
|
|
5
|
+
*/
|
|
6
|
+
import type { Coordinate } from '../types/model.js';
|
|
7
|
+
/**
|
|
8
|
+
* Definition of an OBB
|
|
9
|
+
*/
|
|
10
|
+
export interface OBB {
|
|
11
|
+
/** The center [lng, lat] */
|
|
12
|
+
center: Coordinate;
|
|
13
|
+
/** Half the width, in degrees */
|
|
14
|
+
halfWidth: number;
|
|
15
|
+
/** Half the height, in degrees */
|
|
16
|
+
halfHeight: number;
|
|
17
|
+
/** The rotation angle, in radians */
|
|
18
|
+
rotation: number;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Creates an OBB
|
|
22
|
+
*
|
|
23
|
+
* @param centerLng Center longitude
|
|
24
|
+
* @param centerLat Center latitude
|
|
25
|
+
* @param width Width (degrees)
|
|
26
|
+
* @param height Height (degrees)
|
|
27
|
+
* @param rotationDeg Rotation angle (degrees, counter-clockwise)
|
|
28
|
+
* @returns OBB
|
|
29
|
+
*/
|
|
30
|
+
export declare function createOBB(centerLng: number, centerLat: number, width: number, height: number, rotationDeg: number): OBB;
|
|
31
|
+
/**
|
|
32
|
+
* Tests whether a point is inside an OBB
|
|
33
|
+
*
|
|
34
|
+
* @param obb OBB
|
|
35
|
+
* @param point The point to test [lng, lat]
|
|
36
|
+
* @returns true when it is inside the OBB
|
|
37
|
+
*/
|
|
38
|
+
export declare function pointInOBB(obb: OBB, point: Coordinate): boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Computes the distance from a point to an OBB
|
|
41
|
+
*
|
|
42
|
+
* @param obb OBB
|
|
43
|
+
* @param point Point [lng, lat]
|
|
44
|
+
* @returns Distance (degrees). 0 when inside the OBB
|
|
45
|
+
*/
|
|
46
|
+
export declare function distanceToOBB(obb: OBB, point: Coordinate): number;
|
|
47
|
+
/**
|
|
48
|
+
* Gets the 4 vertices of an OBB
|
|
49
|
+
*
|
|
50
|
+
* @param obb OBB
|
|
51
|
+
* @returns Array of the 4 vertices [topLeft, topRight, bottomRight, bottomLeft]
|
|
52
|
+
*/
|
|
53
|
+
export declare function getOBBCorners(obb: OBB): Coordinate[];
|
|
54
|
+
/**
|
|
55
|
+
* Gets the AABB (Axis-Aligned Bounding Box) of an OBB
|
|
56
|
+
*
|
|
57
|
+
* @param obb OBB
|
|
58
|
+
* @returns AABB { minX, minY, maxX, maxY }
|
|
59
|
+
*/
|
|
60
|
+
export declare function getOBBAABB(obb: OBB): {
|
|
61
|
+
minX: number;
|
|
62
|
+
minY: number;
|
|
63
|
+
maxX: number;
|
|
64
|
+
maxY: number;
|
|
65
|
+
};
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
/**
|
|
4
|
+
* Creates an OBB
|
|
5
|
+
*
|
|
6
|
+
* @param centerLng Center longitude
|
|
7
|
+
* @param centerLat Center latitude
|
|
8
|
+
* @param width Width (degrees)
|
|
9
|
+
* @param height Height (degrees)
|
|
10
|
+
* @param rotationDeg Rotation angle (degrees, counter-clockwise)
|
|
11
|
+
* @returns OBB
|
|
12
|
+
*/
|
|
13
|
+
export function createOBB(centerLng, centerLat, width, height, rotationDeg) {
|
|
14
|
+
return {
|
|
15
|
+
center: [centerLng, centerLat],
|
|
16
|
+
halfWidth: width / 2,
|
|
17
|
+
halfHeight: height / 2,
|
|
18
|
+
rotation: (rotationDeg * Math.PI) / 180,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Tests whether a point is inside an OBB
|
|
23
|
+
*
|
|
24
|
+
* @param obb OBB
|
|
25
|
+
* @param point The point to test [lng, lat]
|
|
26
|
+
* @returns true when it is inside the OBB
|
|
27
|
+
*/
|
|
28
|
+
export function pointInOBB(obb, point) {
|
|
29
|
+
// Convert the point into the local coordinate system of the OBB
|
|
30
|
+
const dx = point[0] - obb.center[0];
|
|
31
|
+
const dy = point[1] - obb.center[1];
|
|
32
|
+
// Apply the inverse rotation
|
|
33
|
+
const cos = Math.cos(-obb.rotation);
|
|
34
|
+
const sin = Math.sin(-obb.rotation);
|
|
35
|
+
const localX = dx * cos - dy * sin;
|
|
36
|
+
const localY = dx * sin + dy * cos;
|
|
37
|
+
// AABB test in the local coordinate system
|
|
38
|
+
return Math.abs(localX) <= obb.halfWidth && Math.abs(localY) <= obb.halfHeight;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Computes the distance from a point to an OBB
|
|
42
|
+
*
|
|
43
|
+
* @param obb OBB
|
|
44
|
+
* @param point Point [lng, lat]
|
|
45
|
+
* @returns Distance (degrees). 0 when inside the OBB
|
|
46
|
+
*/
|
|
47
|
+
export function distanceToOBB(obb, point) {
|
|
48
|
+
// Convert the point into the local coordinate system of the OBB
|
|
49
|
+
const dx = point[0] - obb.center[0];
|
|
50
|
+
const dy = point[1] - obb.center[1];
|
|
51
|
+
// Apply the inverse rotation
|
|
52
|
+
const cos = Math.cos(-obb.rotation);
|
|
53
|
+
const sin = Math.sin(-obb.rotation);
|
|
54
|
+
const localX = dx * cos - dy * sin;
|
|
55
|
+
const localY = dx * sin + dy * cos;
|
|
56
|
+
// 0 when inside the OBB
|
|
57
|
+
if (Math.abs(localX) <= obb.halfWidth && Math.abs(localY) <= obb.halfHeight) {
|
|
58
|
+
return 0;
|
|
59
|
+
}
|
|
60
|
+
// Compute the closest point
|
|
61
|
+
const clampedX = Math.max(-obb.halfWidth, Math.min(obb.halfWidth, localX));
|
|
62
|
+
const clampedY = Math.max(-obb.halfHeight, Math.min(obb.halfHeight, localY));
|
|
63
|
+
// Compute the distance
|
|
64
|
+
const distX = localX - clampedX;
|
|
65
|
+
const distY = localY - clampedY;
|
|
66
|
+
return Math.sqrt(distX * distX + distY * distY);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Gets the 4 vertices of an OBB
|
|
70
|
+
*
|
|
71
|
+
* @param obb OBB
|
|
72
|
+
* @returns Array of the 4 vertices [topLeft, topRight, bottomRight, bottomLeft]
|
|
73
|
+
*/
|
|
74
|
+
export function getOBBCorners(obb) {
|
|
75
|
+
const cos = Math.cos(obb.rotation);
|
|
76
|
+
const sin = Math.sin(obb.rotation);
|
|
77
|
+
// The 4 vertices in the local coordinate system
|
|
78
|
+
const corners = [
|
|
79
|
+
[-obb.halfWidth, -obb.halfHeight], // top-left
|
|
80
|
+
[obb.halfWidth, -obb.halfHeight], // top-right
|
|
81
|
+
[obb.halfWidth, obb.halfHeight], // bottom-right
|
|
82
|
+
[-obb.halfWidth, obb.halfHeight], // bottom-left
|
|
83
|
+
];
|
|
84
|
+
// Apply the rotation and convert into global coordinates
|
|
85
|
+
return corners.map(([x, y]) => {
|
|
86
|
+
const rx = x * cos - y * sin;
|
|
87
|
+
const ry = x * sin + y * cos;
|
|
88
|
+
return [obb.center[0] + rx, obb.center[1] + ry];
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Gets the AABB (Axis-Aligned Bounding Box) of an OBB
|
|
93
|
+
*
|
|
94
|
+
* @param obb OBB
|
|
95
|
+
* @returns AABB { minX, minY, maxX, maxY }
|
|
96
|
+
*/
|
|
97
|
+
export function getOBBAABB(obb) {
|
|
98
|
+
const corners = getOBBCorners(obb);
|
|
99
|
+
const lngs = corners.map((c) => c[0]);
|
|
100
|
+
const lats = corners.map((c) => c[1]);
|
|
101
|
+
return {
|
|
102
|
+
minX: Math.min(...lngs),
|
|
103
|
+
minY: Math.min(...lats),
|
|
104
|
+
maxX: Math.max(...lngs),
|
|
105
|
+
maxY: Math.max(...lats),
|
|
106
|
+
};
|
|
107
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Spherical rotation utilities (ECEF coordinate system)
|
|
3
|
+
*
|
|
4
|
+
* Provides rotation computation in the ECEF coordinate system, accounting for the WGS84
|
|
5
|
+
* ellipsoid.
|
|
6
|
+
*
|
|
7
|
+
* Implemented with standard geodetic computation: Rodrigues' rotation formula and the ECEF
|
|
8
|
+
* conversion on the WGS84 ellipsoid (the inverse conversion uses Bowring's method).
|
|
9
|
+
*/
|
|
10
|
+
import type { Coordinate } from '../types/model.js';
|
|
11
|
+
/**
|
|
12
|
+
* ECEF coordinate (3D Cartesian coordinate)
|
|
13
|
+
*/
|
|
14
|
+
interface ECEFCoordinate {
|
|
15
|
+
x: number;
|
|
16
|
+
y: number;
|
|
17
|
+
z: number;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Converts a WGS84 coordinate into an ECEF coordinate (accounting for the ellipsoid)
|
|
21
|
+
*
|
|
22
|
+
* @param coord WGS84 coordinate [lng, lat]
|
|
23
|
+
* @returns ECEF coordinate {x, y, z} (in meters)
|
|
24
|
+
*/
|
|
25
|
+
export declare function wgs84ToECEF(coord: Coordinate): ECEFCoordinate;
|
|
26
|
+
/**
|
|
27
|
+
* Converts an ECEF coordinate into a WGS84 coordinate (iterative computation by Bowring's
|
|
28
|
+
* method)
|
|
29
|
+
*
|
|
30
|
+
* @param x ECEF X coordinate (meters)
|
|
31
|
+
* @param y ECEF Y coordinate (meters)
|
|
32
|
+
* @param z ECEF Z coordinate (meters)
|
|
33
|
+
* @returns WGS84 coordinate [lng, lat]
|
|
34
|
+
*/
|
|
35
|
+
export declare function ecefToWGS84(x: number, y: number, z: number): Coordinate;
|
|
36
|
+
/**
|
|
37
|
+
* Rotates a single coordinate about the center point as the axis (ECEF coordinate system,
|
|
38
|
+
* Rodrigues' formula)
|
|
39
|
+
*
|
|
40
|
+
* @param coord The coordinate to rotate [lng, lat]
|
|
41
|
+
* @param center Center point of the rotation [lng, lat]
|
|
42
|
+
* @param angleDegrees Rotation angle (degrees, counter-clockwise)
|
|
43
|
+
* @returns The coordinate after rotation [lng, lat]
|
|
44
|
+
*/
|
|
45
|
+
export declare function rotateCoordinateOnSphere(coord: Coordinate, center: Coordinate, angleDegrees: number): Coordinate;
|
|
46
|
+
/**
|
|
47
|
+
* Rotates multiple coordinates about the center point as the axis (ECEF coordinate system,
|
|
48
|
+
* Rodrigues' formula)
|
|
49
|
+
*
|
|
50
|
+
* @param coords Array of coordinates to rotate
|
|
51
|
+
* @param center Center point of the rotation [lng, lat]
|
|
52
|
+
* @param angleDegrees Rotation angle (degrees, counter-clockwise)
|
|
53
|
+
* @returns Array of coordinates after rotation
|
|
54
|
+
*/
|
|
55
|
+
export declare function rotateCoordinatesOnSphere(coords: readonly Coordinate[], center: Coordinate, angleDegrees: number): Coordinate[];
|
|
56
|
+
/**
|
|
57
|
+
* Converts kilometers into degrees (with a latitude correction)
|
|
58
|
+
*
|
|
59
|
+
* @param km Distance (kilometers)
|
|
60
|
+
* @param latitude Reference latitude
|
|
61
|
+
* @returns Degrees
|
|
62
|
+
*/
|
|
63
|
+
export declare function kmToDegrees(km: number, latitude: number): number;
|
|
64
|
+
/**
|
|
65
|
+
* Converts pixels into degrees (with a latitude correction)
|
|
66
|
+
*
|
|
67
|
+
* @param pixels Number of pixels
|
|
68
|
+
* @param latitude Reference latitude
|
|
69
|
+
* @param zoom Zoom level
|
|
70
|
+
* @param tileSize Tile size (default 512)
|
|
71
|
+
* @returns Degrees
|
|
72
|
+
*/
|
|
73
|
+
export declare function pixelsToDegrees(pixels: number, latitude: number, zoom: number, tileSize?: number): {
|
|
74
|
+
lngDegrees: number;
|
|
75
|
+
latDegrees: number;
|
|
76
|
+
};
|
|
77
|
+
/**
|
|
78
|
+
* Computes the vertices of a quad with a rotation applied (uses spherical rotation)
|
|
79
|
+
*
|
|
80
|
+
* @param centerLng Center longitude
|
|
81
|
+
* @param centerLat Center latitude
|
|
82
|
+
* @param halfWidthDeg Half width (degrees) - in the longitude direction
|
|
83
|
+
* @param halfHeightDeg Half height (degrees) - in the latitude direction
|
|
84
|
+
* @param rotationDeg Rotation angle (degrees, counter-clockwise)
|
|
85
|
+
* @returns The 4 vertices of the quad [topLeft, topRight, bottomLeft, bottomRight]
|
|
86
|
+
*/
|
|
87
|
+
export declare function computeRotatedQuadCorners(centerLng: number, centerLat: number, halfWidthDeg: number, halfHeightDeg: number, rotationDeg: number): {
|
|
88
|
+
topLeft: Coordinate;
|
|
89
|
+
topRight: Coordinate;
|
|
90
|
+
bottomLeft: Coordinate;
|
|
91
|
+
bottomRight: Coordinate;
|
|
92
|
+
};
|
|
93
|
+
export {};
|