@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,34 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
import { toRadians } from './distance.js';
|
|
4
|
+
// The actual generation of a coordinate from a bearing lives in the geometry module (single
|
|
5
|
+
// implementation)
|
|
6
|
+
export { getPointAtAngle } from '../../geometry/index.js';
|
|
7
|
+
/**
|
|
8
|
+
* Computes the angle between two points (the bearing as seen from the center)
|
|
9
|
+
*
|
|
10
|
+
* The planar inverse of {@link getPointAtAngle}: the longitude difference is scaled by cos of
|
|
11
|
+
* the center latitude. It is not the great-circle bearing, so a point placed with
|
|
12
|
+
* destinationPoint (circles, buffers and the radius handle) must take its bearing from
|
|
13
|
+
* initialBearingDegrees in the geometry module instead.
|
|
14
|
+
*
|
|
15
|
+
* @param center Center coordinate
|
|
16
|
+
* @param point Coordinate of the target point
|
|
17
|
+
* @returns Angle (degrees, clockwise with north as 0, 0-360)
|
|
18
|
+
*/
|
|
19
|
+
export function getAngleFromCenter(center, point) {
|
|
20
|
+
const [lng1, lat1] = center;
|
|
21
|
+
const [lng2, lat2] = point;
|
|
22
|
+
// Latitude correction
|
|
23
|
+
const latRad = toRadians(lat1);
|
|
24
|
+
const dLng = (lng2 - lng1) * Math.cos(latRad);
|
|
25
|
+
const dLat = lat2 - lat1;
|
|
26
|
+
// Compute the angle with atan2 (clockwise with north as 0 degrees)
|
|
27
|
+
// atan2 takes east as positive, so convert it to be based on north
|
|
28
|
+
let angle = Math.atan2(dLng, dLat) * (180 / Math.PI);
|
|
29
|
+
// Normalize into the range 0-360
|
|
30
|
+
if (angle < 0) {
|
|
31
|
+
angle += 360;
|
|
32
|
+
}
|
|
33
|
+
return angle;
|
|
34
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
/**
|
|
4
|
+
* Circle rendering utilities
|
|
5
|
+
*
|
|
6
|
+
* Functions for rendering a circle by approximating it with a polygon (64 vertices).
|
|
7
|
+
*/
|
|
8
|
+
// The actual generation of a geodesic circle lives in the geometry module (single
|
|
9
|
+
// implementation)
|
|
10
|
+
export { generateCirclePolygon } from '../../geometry/index.js';
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Geographic and rendering constants
|
|
3
|
+
*
|
|
4
|
+
* Earth-related constants, rendering parameters, and default style values.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Earth-related constants
|
|
8
|
+
*/
|
|
9
|
+
export declare const EARTH: {
|
|
10
|
+
/** Circumference of the Earth (meters) */
|
|
11
|
+
readonly CIRCUMFERENCE_METERS: 40075016.686;
|
|
12
|
+
/** Number of meters per degree */
|
|
13
|
+
readonly METERS_PER_DEGREE: number;
|
|
14
|
+
/** Factor that converts radians to degrees */
|
|
15
|
+
readonly DEGREES_PER_RADIAN: number;
|
|
16
|
+
/** Factor that converts degrees to radians */
|
|
17
|
+
readonly RADIANS_PER_DEGREE: number;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Default tile size
|
|
21
|
+
*/
|
|
22
|
+
export declare const DEFAULT_TILE_SIZE = 512;
|
|
23
|
+
/**
|
|
24
|
+
* Default rendering parameters
|
|
25
|
+
*/
|
|
26
|
+
export declare const RENDERING_DEFAULTS: {
|
|
27
|
+
/** Number of segments of a circle */
|
|
28
|
+
readonly CIRCLE_SEGMENTS: 32;
|
|
29
|
+
/** Miter limit (handling of line corners) */
|
|
30
|
+
readonly MITER_LIMIT: 4;
|
|
31
|
+
/** Viewport expansion factor */
|
|
32
|
+
readonly VIEWPORT_EXPANSION_FACTOR: 0.2;
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Presets of dash patterns
|
|
36
|
+
*/
|
|
37
|
+
export declare const DASH_PATTERNS: {
|
|
38
|
+
/** Dashed pattern: 10px dash, 5px gap */
|
|
39
|
+
readonly DASHED: readonly [number, number];
|
|
40
|
+
/** Dotted pattern: 2px dot, 4px gap */
|
|
41
|
+
readonly DOTTED: readonly [number, number];
|
|
42
|
+
/** Solid line (empty array) */
|
|
43
|
+
readonly SOLID: readonly number[];
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* Gets the dash pattern from a LineStyle
|
|
47
|
+
*/
|
|
48
|
+
export declare function getDashPattern(lineStyle: 'solid' | 'dashed' | 'dotted'): readonly number[];
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
/**
|
|
4
|
+
* Geographic and rendering constants
|
|
5
|
+
*
|
|
6
|
+
* Earth-related constants, rendering parameters, and default style values.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Earth-related constants
|
|
10
|
+
*/
|
|
11
|
+
export const EARTH = {
|
|
12
|
+
/** Circumference of the Earth (meters) */
|
|
13
|
+
CIRCUMFERENCE_METERS: 40075016.686,
|
|
14
|
+
/** Number of meters per degree */
|
|
15
|
+
METERS_PER_DEGREE: 40075016.686 / 360,
|
|
16
|
+
/** Factor that converts radians to degrees */
|
|
17
|
+
DEGREES_PER_RADIAN: 180 / Math.PI,
|
|
18
|
+
/** Factor that converts degrees to radians */
|
|
19
|
+
RADIANS_PER_DEGREE: Math.PI / 180,
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Default tile size
|
|
23
|
+
*/
|
|
24
|
+
export const DEFAULT_TILE_SIZE = 512;
|
|
25
|
+
/**
|
|
26
|
+
* Default rendering parameters
|
|
27
|
+
*/
|
|
28
|
+
export const RENDERING_DEFAULTS = {
|
|
29
|
+
/** Number of segments of a circle */
|
|
30
|
+
CIRCLE_SEGMENTS: 32,
|
|
31
|
+
/** Miter limit (handling of line corners) */
|
|
32
|
+
MITER_LIMIT: 4.0,
|
|
33
|
+
/** Viewport expansion factor */
|
|
34
|
+
VIEWPORT_EXPANSION_FACTOR: 0.2,
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Presets of dash patterns
|
|
38
|
+
*/
|
|
39
|
+
export const DASH_PATTERNS = {
|
|
40
|
+
/** Dashed pattern: 10px dash, 5px gap */
|
|
41
|
+
DASHED: [10, 5],
|
|
42
|
+
/** Dotted pattern: 2px dot, 4px gap */
|
|
43
|
+
DOTTED: [2, 4],
|
|
44
|
+
/** Solid line (empty array) */
|
|
45
|
+
SOLID: [],
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* Gets the dash pattern from a LineStyle
|
|
49
|
+
*/
|
|
50
|
+
export function getDashPattern(lineStyle) {
|
|
51
|
+
switch (lineStyle) {
|
|
52
|
+
case 'dashed':
|
|
53
|
+
return [10, 5];
|
|
54
|
+
case 'dotted':
|
|
55
|
+
return [2, 4];
|
|
56
|
+
default:
|
|
57
|
+
return [];
|
|
58
|
+
}
|
|
59
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import type { Coordinate } from '../types/model.js';
|
|
2
|
+
export { haversineDistanceMeters, toDegrees, toRadians } from '../../geometry/index.js';
|
|
3
|
+
/**
|
|
4
|
+
* Distance between two points (a simple version that returns a distance in degrees from
|
|
5
|
+
* coordinates in degrees)
|
|
6
|
+
*
|
|
7
|
+
* For approximate computation at small scales. Use haversineDistanceMeters when an accurate
|
|
8
|
+
* distance is required.
|
|
9
|
+
*/
|
|
10
|
+
export declare function euclideanDistance(coord1: Coordinate, coord2: Coordinate): number;
|
|
11
|
+
/**
|
|
12
|
+
* Computes the midpoint of two points
|
|
13
|
+
*/
|
|
14
|
+
export declare function midpoint(coord1: Coordinate, coord2: Coordinate): Coordinate;
|
|
15
|
+
/**
|
|
16
|
+
* Conversion from meters to a longitude difference (latitude dependent)
|
|
17
|
+
*/
|
|
18
|
+
export declare function metersToLng(meters: number, latitude: number): number;
|
|
19
|
+
/**
|
|
20
|
+
* Conversion from meters to a latitude difference
|
|
21
|
+
*/
|
|
22
|
+
export declare function metersToLat(meters: number): number;
|
|
23
|
+
/**
|
|
24
|
+
* Conversion from a longitude difference to meters
|
|
25
|
+
*/
|
|
26
|
+
export declare function lngToMeters(lngDiff: number, latitude: number): number;
|
|
27
|
+
/**
|
|
28
|
+
* Computes the shortest distance from a point to a segment
|
|
29
|
+
*/
|
|
30
|
+
export declare function pointToSegmentDistance(point: Coordinate, segmentStart: Coordinate, segmentEnd: Coordinate): number;
|
|
31
|
+
/**
|
|
32
|
+
* Computes the shortest distance from a point to a polyline (a sequence of segments)
|
|
33
|
+
*/
|
|
34
|
+
export declare function pointToPolylineDistance(point: Coordinate, line: Coordinate[]): number;
|
|
35
|
+
/**
|
|
36
|
+
* Computes the number of meters per pixel at a zoom level
|
|
37
|
+
*
|
|
38
|
+
* @param latitude - Latitude (degrees)
|
|
39
|
+
* @param zoom - Zoom level
|
|
40
|
+
* @param tileSize - Tile size (default: 512)
|
|
41
|
+
* @returns Number of meters per pixel
|
|
42
|
+
*/
|
|
43
|
+
export declare function getMetersPerPixel(latitude: number, zoom: number, tileSize?: number): number;
|
|
44
|
+
/**
|
|
45
|
+
* Converts meters to degrees in the longitude direction
|
|
46
|
+
*
|
|
47
|
+
* @param meters - Number of meters
|
|
48
|
+
* @param latitude - Latitude (degrees)
|
|
49
|
+
* @returns Number of degrees in the longitude direction
|
|
50
|
+
*/
|
|
51
|
+
export declare function metersToDegreesLng(meters: number, latitude: number): number;
|
|
52
|
+
/**
|
|
53
|
+
* Converts meters to degrees in the latitude direction
|
|
54
|
+
*
|
|
55
|
+
* @param meters - Number of meters
|
|
56
|
+
* @returns Number of degrees in the latitude direction
|
|
57
|
+
*/
|
|
58
|
+
export declare function metersToDegreesLat(meters: number): number;
|
|
59
|
+
/**
|
|
60
|
+
* Converts pixels to degrees in the longitude direction
|
|
61
|
+
*
|
|
62
|
+
* @param pixels - Number of pixels
|
|
63
|
+
* @param latitude - Latitude (degrees)
|
|
64
|
+
* @param zoom - Zoom level
|
|
65
|
+
* @param tileSize - Tile size (default: 512)
|
|
66
|
+
* @returns Number of degrees in the longitude direction
|
|
67
|
+
*/
|
|
68
|
+
export declare function pixelsToDegreesLng(pixels: number, latitude: number, zoom: number, tileSize?: number): number;
|
|
69
|
+
/**
|
|
70
|
+
* Converts pixels to degrees in the latitude direction
|
|
71
|
+
*
|
|
72
|
+
* @param pixels - Number of pixels
|
|
73
|
+
* @param latitude - Latitude (degrees) - used for the latitude correction
|
|
74
|
+
* @param zoom - Zoom level
|
|
75
|
+
* @param tileSize - Tile size (default: 512)
|
|
76
|
+
* @returns Number of degrees in the latitude direction
|
|
77
|
+
*/
|
|
78
|
+
export declare function pixelsToDegreesLat(pixels: number, latitude: number, zoom: number, tileSize?: number): number;
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
/**
|
|
4
|
+
* Distance computation utilities
|
|
5
|
+
*/
|
|
6
|
+
import { toRadians } from '../../geometry/index.js';
|
|
7
|
+
import { DEFAULT_TILE_SIZE, EARTH } from './constants.js';
|
|
8
|
+
// The actual angle conversion and geodesic distance live in the geometry module (single
|
|
9
|
+
// implementation)
|
|
10
|
+
export { haversineDistanceMeters, toDegrees, toRadians } from '../../geometry/index.js';
|
|
11
|
+
/**
|
|
12
|
+
* Distance between two points (a simple version that returns a distance in degrees from
|
|
13
|
+
* coordinates in degrees)
|
|
14
|
+
*
|
|
15
|
+
* For approximate computation at small scales. Use haversineDistanceMeters when an accurate
|
|
16
|
+
* distance is required.
|
|
17
|
+
*/
|
|
18
|
+
export function euclideanDistance(coord1, coord2) {
|
|
19
|
+
const [lng1, lat1] = coord1;
|
|
20
|
+
const [lng2, lat2] = coord2;
|
|
21
|
+
const dLng = lng2 - lng1;
|
|
22
|
+
const dLat = lat2 - lat1;
|
|
23
|
+
return Math.sqrt(dLng * dLng + dLat * dLat);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Computes the midpoint of two points
|
|
27
|
+
*/
|
|
28
|
+
export function midpoint(coord1, coord2) {
|
|
29
|
+
return [(coord1[0] + coord2[0]) / 2, (coord1[1] + coord2[1]) / 2];
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Conversion from meters to a longitude difference (latitude dependent)
|
|
33
|
+
*/
|
|
34
|
+
export function metersToLng(meters, latitude) {
|
|
35
|
+
const earthRadius = 6371000;
|
|
36
|
+
const latRad = toRadians(latitude);
|
|
37
|
+
return (meters / (earthRadius * Math.cos(latRad))) * (180 / Math.PI);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Conversion from meters to a latitude difference
|
|
41
|
+
*/
|
|
42
|
+
export function metersToLat(meters) {
|
|
43
|
+
const earthRadius = 6371000;
|
|
44
|
+
return (meters / earthRadius) * (180 / Math.PI);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Conversion from a longitude difference to meters
|
|
48
|
+
*/
|
|
49
|
+
export function lngToMeters(lngDiff, latitude) {
|
|
50
|
+
const earthRadius = 6371000;
|
|
51
|
+
const latRad = toRadians(latitude);
|
|
52
|
+
return lngDiff * (Math.PI / 180) * earthRadius * Math.cos(latRad);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Computes the shortest distance from a point to a segment
|
|
56
|
+
*/
|
|
57
|
+
export function pointToSegmentDistance(point, segmentStart, segmentEnd) {
|
|
58
|
+
const [px, py] = point;
|
|
59
|
+
const [ax, ay] = segmentStart;
|
|
60
|
+
const [bx, by] = segmentEnd;
|
|
61
|
+
const dx = bx - ax;
|
|
62
|
+
const dy = by - ay;
|
|
63
|
+
const lengthSquared = dx * dx + dy * dy;
|
|
64
|
+
if (lengthSquared === 0) {
|
|
65
|
+
// When the segment is a point
|
|
66
|
+
return euclideanDistance(point, segmentStart);
|
|
67
|
+
}
|
|
68
|
+
// Compute the parameter t (the position of the closest point on the segment)
|
|
69
|
+
let t = ((px - ax) * dx + (py - ay) * dy) / lengthSquared;
|
|
70
|
+
t = Math.max(0, Math.min(1, t));
|
|
71
|
+
// Coordinate of the closest point
|
|
72
|
+
const closestPoint = [ax + t * dx, ay + t * dy];
|
|
73
|
+
return euclideanDistance(point, closestPoint);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Computes the shortest distance from a point to a polyline (a sequence of segments)
|
|
77
|
+
*/
|
|
78
|
+
export function pointToPolylineDistance(point, line) {
|
|
79
|
+
let minDistance = Number.POSITIVE_INFINITY;
|
|
80
|
+
for (let i = 0; i < line.length - 1; i++) {
|
|
81
|
+
const distance = pointToSegmentDistance(point, line[i], line[i + 1]);
|
|
82
|
+
minDistance = Math.min(minDistance, distance);
|
|
83
|
+
}
|
|
84
|
+
return minDistance;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Computes the number of meters per pixel at a zoom level
|
|
88
|
+
*
|
|
89
|
+
* @param latitude - Latitude (degrees)
|
|
90
|
+
* @param zoom - Zoom level
|
|
91
|
+
* @param tileSize - Tile size (default: 512)
|
|
92
|
+
* @returns Number of meters per pixel
|
|
93
|
+
*/
|
|
94
|
+
export function getMetersPerPixel(latitude, zoom, tileSize = DEFAULT_TILE_SIZE) {
|
|
95
|
+
const latRad = latitude * EARTH.RADIANS_PER_DEGREE;
|
|
96
|
+
return (EARTH.CIRCUMFERENCE_METERS * Math.cos(latRad)) / (tileSize * 2 ** zoom);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Converts meters to degrees in the longitude direction
|
|
100
|
+
*
|
|
101
|
+
* @param meters - Number of meters
|
|
102
|
+
* @param latitude - Latitude (degrees)
|
|
103
|
+
* @returns Number of degrees in the longitude direction
|
|
104
|
+
*/
|
|
105
|
+
export function metersToDegreesLng(meters, latitude) {
|
|
106
|
+
const latRad = latitude * EARTH.RADIANS_PER_DEGREE;
|
|
107
|
+
return meters / (EARTH.METERS_PER_DEGREE * Math.cos(latRad));
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Converts meters to degrees in the latitude direction
|
|
111
|
+
*
|
|
112
|
+
* @param meters - Number of meters
|
|
113
|
+
* @returns Number of degrees in the latitude direction
|
|
114
|
+
*/
|
|
115
|
+
export function metersToDegreesLat(meters) {
|
|
116
|
+
return meters / EARTH.METERS_PER_DEGREE;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Converts pixels to degrees in the longitude direction
|
|
120
|
+
*
|
|
121
|
+
* @param pixels - Number of pixels
|
|
122
|
+
* @param latitude - Latitude (degrees)
|
|
123
|
+
* @param zoom - Zoom level
|
|
124
|
+
* @param tileSize - Tile size (default: 512)
|
|
125
|
+
* @returns Number of degrees in the longitude direction
|
|
126
|
+
*/
|
|
127
|
+
export function pixelsToDegreesLng(pixels, latitude, zoom, tileSize = DEFAULT_TILE_SIZE) {
|
|
128
|
+
const latRad = latitude * EARTH.RADIANS_PER_DEGREE;
|
|
129
|
+
const metersPerPixel = (EARTH.CIRCUMFERENCE_METERS * Math.cos(latRad)) / (tileSize * 2 ** zoom);
|
|
130
|
+
const meters = pixels * metersPerPixel;
|
|
131
|
+
return meters / (EARTH.METERS_PER_DEGREE * Math.cos(latRad));
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Converts pixels to degrees in the latitude direction
|
|
135
|
+
*
|
|
136
|
+
* @param pixels - Number of pixels
|
|
137
|
+
* @param latitude - Latitude (degrees) - used for the latitude correction
|
|
138
|
+
* @param zoom - Zoom level
|
|
139
|
+
* @param tileSize - Tile size (default: 512)
|
|
140
|
+
* @returns Number of degrees in the latitude direction
|
|
141
|
+
*/
|
|
142
|
+
export function pixelsToDegreesLat(pixels, latitude, zoom, tileSize = DEFAULT_TILE_SIZE) {
|
|
143
|
+
const latRad = latitude * EARTH.RADIANS_PER_DEGREE;
|
|
144
|
+
const metersPerPixel = (EARTH.CIRCUMFERENCE_METERS * Math.cos(latRad)) / (tileSize * 2 ** zoom);
|
|
145
|
+
const meters = pixels * metersPerPixel;
|
|
146
|
+
return meters / EARTH.METERS_PER_DEGREE;
|
|
147
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The path of an edge on the globe
|
|
3
|
+
*
|
|
4
|
+
* maplibre draws its own layers on the globe the way they look on the Mercator plane: an edge
|
|
5
|
+
* between two vertices is the straight line of the Web Mercator plane, carried onto the sphere
|
|
6
|
+
* (a parallel stays a parallel, a meridian a meridian). It gets there by cutting the geometry
|
|
7
|
+
* finely on the plane before projecting it (its subdivision, `SubdivisionGranularitySetting`).
|
|
8
|
+
* Projecting only the two vertices of an edge would join them with a chord through the sphere.
|
|
9
|
+
*
|
|
10
|
+
* These are the pure parts of doing the same: how finely to cut at a zoom, and the cut itself.
|
|
11
|
+
* The rendering cuts the drawn geometry with them, and hit testing cuts the tested geometry the
|
|
12
|
+
* same way, so what is drawn and what can be clicked follow the same path.
|
|
13
|
+
*/
|
|
14
|
+
import type { Coordinate } from '../types/model.js';
|
|
15
|
+
/** What is being cut: the fills (and their outlines) or the lines */
|
|
16
|
+
export type GlobeSubdivisionKind = 'fill' | 'line';
|
|
17
|
+
/**
|
|
18
|
+
* The side of a subdivision cell on the globe, in Mercator world units (1 = the world)
|
|
19
|
+
*
|
|
20
|
+
* The tile zoom is the integer part of the zoom, as maplibre picks the tiles it cuts. A cell
|
|
21
|
+
* is the world divided by the base granularity up to the zoom where a tile reaches its least
|
|
22
|
+
* granularity, and half a tile (fills) or a tile (lines) beyond. It changes only when the zoom
|
|
23
|
+
* crosses an integer, so what is cut for it stays valid while zooming within a level.
|
|
24
|
+
*
|
|
25
|
+
* @param zoom The zoom of the map
|
|
26
|
+
* @param kind Fills or lines
|
|
27
|
+
* @returns The side of a cell (a power of two fraction of the world)
|
|
28
|
+
*/
|
|
29
|
+
export declare function globeSubdivisionGrid(zoom: number, kind: GlobeSubdivisionKind): number;
|
|
30
|
+
/**
|
|
31
|
+
* The point at `t` along the straight line of the Mercator plane from `a` to `b`
|
|
32
|
+
*
|
|
33
|
+
* The longitude moves linearly; the latitude moves linearly in Mercator y, not in degrees.
|
|
34
|
+
* Latitudes beyond the Mercator limit are clamped to it.
|
|
35
|
+
*/
|
|
36
|
+
export declare function mercatorLerp(a: Coordinate, b: Coordinate, t: number): Coordinate;
|
|
37
|
+
/**
|
|
38
|
+
* The midpoint of an edge as drawn: halfway across in longitude, on the edge
|
|
39
|
+
*
|
|
40
|
+
* An edge is drawn along the straight line of the Mercator plane, so the average of the two
|
|
41
|
+
* latitudes in degrees lies off a long slanted edge (on the Mercator map as on the globe). The
|
|
42
|
+
* point returned lies on the drawn edge at the average longitude. An edge along a meridian or
|
|
43
|
+
* a parallel keeps the plain average, which lies on it already.
|
|
44
|
+
*/
|
|
45
|
+
export declare function mercatorMidpoint(a: Coordinate, b: Coordinate): Coordinate;
|
|
46
|
+
/**
|
|
47
|
+
* The length of an edge on the Mercator plane, in world units
|
|
48
|
+
*/
|
|
49
|
+
export declare function mercatorEdgeLength(a: Coordinate, b: Coordinate): number;
|
|
50
|
+
/**
|
|
51
|
+
* Cuts every edge of a path into pieces of at most `grid` along the Mercator plane
|
|
52
|
+
*
|
|
53
|
+
* Each edge is cut into equal pieces on the plane, so every point added lies on the edge as it
|
|
54
|
+
* is drawn. The vertices of the path are kept. A path whose edges are all shorter than `grid`
|
|
55
|
+
* is returned as it is (the same array).
|
|
56
|
+
*
|
|
57
|
+
* @param path The vertices `[lng, lat]` in degrees
|
|
58
|
+
* @param grid The longest piece, in Mercator world units (0 or less cuts nothing)
|
|
59
|
+
* @param maxPoints The most points to add over the whole path
|
|
60
|
+
* @returns The path with the points added
|
|
61
|
+
*/
|
|
62
|
+
export declare function densifyOnMercatorPlane(path: readonly Coordinate[], grid: number, maxPoints?: number): Coordinate[];
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
import { fromPlane, toPlane } from './mercator-plane.js';
|
|
4
|
+
/**
|
|
5
|
+
* maplibre's granularity on the globe: the number of cells along the side of a tile of zoom 0,
|
|
6
|
+
* halved at each zoom level, and the least it goes down to (`vertical_perspective_projection.ts`)
|
|
7
|
+
*/
|
|
8
|
+
const GRANULARITY = {
|
|
9
|
+
fill: { base: 128, min: 2 },
|
|
10
|
+
line: { base: 512, min: 1 },
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* The side of a subdivision cell on the globe, in Mercator world units (1 = the world)
|
|
14
|
+
*
|
|
15
|
+
* The tile zoom is the integer part of the zoom, as maplibre picks the tiles it cuts. A cell
|
|
16
|
+
* is the world divided by the base granularity up to the zoom where a tile reaches its least
|
|
17
|
+
* granularity, and half a tile (fills) or a tile (lines) beyond. It changes only when the zoom
|
|
18
|
+
* crosses an integer, so what is cut for it stays valid while zooming within a level.
|
|
19
|
+
*
|
|
20
|
+
* @param zoom The zoom of the map
|
|
21
|
+
* @param kind Fills or lines
|
|
22
|
+
* @returns The side of a cell (a power of two fraction of the world)
|
|
23
|
+
*/
|
|
24
|
+
export function globeSubdivisionGrid(zoom, kind) {
|
|
25
|
+
const z = Math.min(Math.max(0, Math.floor(Number.isFinite(zoom) ? zoom : 0)), 30);
|
|
26
|
+
const { base, min } = GRANULARITY[kind];
|
|
27
|
+
const tiles = 2 ** z;
|
|
28
|
+
const cells = Math.max(Math.floor(base / tiles), min, 1);
|
|
29
|
+
return 1 / (tiles * cells);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* The point at `t` along the straight line of the Mercator plane from `a` to `b`
|
|
33
|
+
*
|
|
34
|
+
* The longitude moves linearly; the latitude moves linearly in Mercator y, not in degrees.
|
|
35
|
+
* Latitudes beyond the Mercator limit are clamped to it.
|
|
36
|
+
*/
|
|
37
|
+
export function mercatorLerp(a, b, t) {
|
|
38
|
+
const [ax, ay] = toPlane(a);
|
|
39
|
+
const [bx, by] = toPlane(b);
|
|
40
|
+
return fromPlane(ax + (bx - ax) * t, ay + (by - ay) * t);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* The midpoint of an edge as drawn: halfway across in longitude, on the edge
|
|
44
|
+
*
|
|
45
|
+
* An edge is drawn along the straight line of the Mercator plane, so the average of the two
|
|
46
|
+
* latitudes in degrees lies off a long slanted edge (on the Mercator map as on the globe). The
|
|
47
|
+
* point returned lies on the drawn edge at the average longitude. An edge along a meridian or
|
|
48
|
+
* a parallel keeps the plain average, which lies on it already.
|
|
49
|
+
*/
|
|
50
|
+
export function mercatorMidpoint(a, b) {
|
|
51
|
+
const lng = (a[0] + b[0]) / 2;
|
|
52
|
+
if (a[0] === b[0] || a[1] === b[1])
|
|
53
|
+
return [lng, (a[1] + b[1]) / 2];
|
|
54
|
+
const y = (toPlane(a)[1] + toPlane(b)[1]) / 2;
|
|
55
|
+
return [lng, fromPlane(0, y)[1]];
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* The length of an edge on the Mercator plane, in world units
|
|
59
|
+
*/
|
|
60
|
+
export function mercatorEdgeLength(a, b) {
|
|
61
|
+
const [ax, ay] = toPlane(a);
|
|
62
|
+
const [bx, by] = toPlane(b);
|
|
63
|
+
return Math.hypot(bx - ax, by - ay);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Cuts every edge of a path into pieces of at most `grid` along the Mercator plane
|
|
67
|
+
*
|
|
68
|
+
* Each edge is cut into equal pieces on the plane, so every point added lies on the edge as it
|
|
69
|
+
* is drawn. The vertices of the path are kept. A path whose edges are all shorter than `grid`
|
|
70
|
+
* is returned as it is (the same array).
|
|
71
|
+
*
|
|
72
|
+
* @param path The vertices `[lng, lat]` in degrees
|
|
73
|
+
* @param grid The longest piece, in Mercator world units (0 or less cuts nothing)
|
|
74
|
+
* @param maxPoints The most points to add over the whole path
|
|
75
|
+
* @returns The path with the points added
|
|
76
|
+
*/
|
|
77
|
+
export function densifyOnMercatorPlane(path, grid, maxPoints = 1 << 16) {
|
|
78
|
+
if (path.length < 2 || !(grid > 0))
|
|
79
|
+
return path;
|
|
80
|
+
let out = null;
|
|
81
|
+
let budget = maxPoints;
|
|
82
|
+
for (let i = 1; i < path.length; i++) {
|
|
83
|
+
const a = path[i - 1];
|
|
84
|
+
const b = path[i];
|
|
85
|
+
const [ax, ay] = toPlane(a);
|
|
86
|
+
const [bx, by] = toPlane(b);
|
|
87
|
+
const pieces = Math.min(Math.ceil(Math.hypot(bx - ax, by - ay) / grid), budget + 1);
|
|
88
|
+
if (pieces > 1) {
|
|
89
|
+
out ?? (out = path.slice(0, i));
|
|
90
|
+
for (let k = 1; k < pieces; k++) {
|
|
91
|
+
const t = k / pieces;
|
|
92
|
+
out.push(fromPlane(ax + (bx - ax) * t, ay + (by - ay) * t));
|
|
93
|
+
}
|
|
94
|
+
budget -= pieces - 1;
|
|
95
|
+
}
|
|
96
|
+
out?.push(b);
|
|
97
|
+
}
|
|
98
|
+
return out ?? path;
|
|
99
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Math module
|
|
3
|
+
*
|
|
4
|
+
* A module that brings together geographic coordinate computation and pure geometric
|
|
5
|
+
* computation.
|
|
6
|
+
*/
|
|
7
|
+
export { getAngleFromCenter, getPointAtAngle } from './angle.js';
|
|
8
|
+
export { generateCirclePolygon } from './circle.js';
|
|
9
|
+
export { DASH_PATTERNS, DEFAULT_TILE_SIZE, EARTH, getDashPattern, RENDERING_DEFAULTS, } from './constants.js';
|
|
10
|
+
export { euclideanDistance, getMetersPerPixel, haversineDistanceMeters, lngToMeters, metersToDegreesLat, metersToDegreesLng, metersToLat, metersToLng, midpoint, pixelsToDegreesLat, pixelsToDegreesLng, pointToPolylineDistance, pointToSegmentDistance, toDegrees, toRadians, } from './distance.js';
|
|
11
|
+
export type { OBBCorners } from './intersection.js';
|
|
12
|
+
export { pointInRectangle, rectangleIntersectsCircle, rectangleIntersectsLineString, rectangleIntersectsOBB, rectangleIntersectsPolygon, segmentIntersectsRectangle, segmentIntersectsSegment, } from './intersection.js';
|
|
13
|
+
export type { OBB } from './obb.js';
|
|
14
|
+
export { createOBB, distanceToOBB, getOBBAABB, getOBBCorners, pointInOBB } from './obb.js';
|
|
15
|
+
export { computeRotatedQuadCorners, ecefToWGS84, kmToDegrees, pixelsToDegrees, rotateCoordinateOnSphere, rotateCoordinatesOnSphere, wgs84ToECEF, } from './rotation.js';
|
|
16
|
+
export type { AnchorProjector, CoordinateTransform, LngLat, MercatorCoord, ScreenPoint, } from './transform.js';
|
|
17
|
+
export { applyMarginToBoundingBox, clampCoordinate, clampLatitude, createCoordinateTransform, getAnchorProjector, lngLatToMercator, setAnchorProjector, } from './transform.js';
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
/**
|
|
4
|
+
* Math module
|
|
5
|
+
*
|
|
6
|
+
* A module that brings together geographic coordinate computation and pure geometric
|
|
7
|
+
* computation.
|
|
8
|
+
*/
|
|
9
|
+
// Angle computation
|
|
10
|
+
export { getAngleFromCenter, getPointAtAngle } from './angle.js';
|
|
11
|
+
// Circle rendering
|
|
12
|
+
export { generateCirclePolygon } from './circle.js';
|
|
13
|
+
// Constants
|
|
14
|
+
export { DASH_PATTERNS, DEFAULT_TILE_SIZE, EARTH, getDashPattern, RENDERING_DEFAULTS, } from './constants.js';
|
|
15
|
+
// Distance computation
|
|
16
|
+
export { euclideanDistance, getMetersPerPixel, haversineDistanceMeters, lngToMeters, metersToDegreesLat, metersToDegreesLng, metersToLat, metersToLng, midpoint, pixelsToDegreesLat, pixelsToDegreesLng, pointToPolylineDistance, pointToSegmentDistance, toDegrees, toRadians, } from './distance.js';
|
|
17
|
+
export { pointInRectangle, rectangleIntersectsCircle, rectangleIntersectsLineString, rectangleIntersectsOBB, rectangleIntersectsPolygon, segmentIntersectsRectangle, segmentIntersectsSegment, } from './intersection.js';
|
|
18
|
+
export { createOBB, distanceToOBB, getOBBAABB, getOBBCorners, pointInOBB } from './obb.js';
|
|
19
|
+
// Rotation computation
|
|
20
|
+
export { computeRotatedQuadCorners, ecefToWGS84, kmToDegrees, pixelsToDegrees, rotateCoordinateOnSphere, rotateCoordinatesOnSphere, wgs84ToECEF, } from './rotation.js';
|
|
21
|
+
export { applyMarginToBoundingBox, clampCoordinate, clampLatitude, createCoordinateTransform, getAnchorProjector, lngLatToMercator, setAnchorProjector, } from './transform.js';
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rectangle Intersection
|
|
3
|
+
*
|
|
4
|
+
* Intersection testing algorithms for box selection.
|
|
5
|
+
* Provides intersection tests between the various geometries and an axis-aligned rectangle
|
|
6
|
+
* (AABB).
|
|
7
|
+
*/
|
|
8
|
+
import type { BoundingBox, Coordinate } from '../types/model.js';
|
|
9
|
+
/**
|
|
10
|
+
* Tests whether a point is inside a rectangle
|
|
11
|
+
*/
|
|
12
|
+
export declare function pointInRectangle(point: Coordinate, rect: BoundingBox): boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Intersection test between two segments
|
|
15
|
+
*
|
|
16
|
+
* Uses the CCW (Counter-Clockwise) algorithm.
|
|
17
|
+
*/
|
|
18
|
+
export declare function segmentIntersectsSegment(a1: Coordinate, a2: Coordinate, b1: Coordinate, b2: Coordinate): boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Tests whether a segment intersects a rectangle
|
|
21
|
+
*/
|
|
22
|
+
export declare function segmentIntersectsRectangle(p1: Coordinate, p2: Coordinate, rect: BoundingBox): boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Intersection test between a rectangle and a LineString
|
|
25
|
+
*
|
|
26
|
+
* Returns true when any vertex of the LineString is inside the rectangle, or when any of its
|
|
27
|
+
* edges intersects the rectangle.
|
|
28
|
+
*/
|
|
29
|
+
export declare function rectangleIntersectsLineString(rect: BoundingBox, lineString: Coordinate[]): boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Intersection test between a rectangle and a Polygon
|
|
32
|
+
*
|
|
33
|
+
* Returns true when any of the following conditions holds:
|
|
34
|
+
* 1. Any vertex of the polygon is inside the rectangle
|
|
35
|
+
* 2. Any vertex of the rectangle is inside the polygon
|
|
36
|
+
* 3. Any edge of the polygon intersects the rectangle
|
|
37
|
+
*/
|
|
38
|
+
export declare function rectangleIntersectsPolygon(rect: BoundingBox, polygon: Coordinate[][]): boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Intersection test between a rectangle and a Circle
|
|
41
|
+
*
|
|
42
|
+
* Returns true when the center of the circle is inside the rectangle, or when an edge or a
|
|
43
|
+
* vertex of the rectangle intersects the circle.
|
|
44
|
+
*
|
|
45
|
+
* @param rect Selection rectangle (geographic coordinates)
|
|
46
|
+
* @param center Center of the circle (geographic coordinates)
|
|
47
|
+
* @param radiusInDegrees Radius of the circle (in degrees)
|
|
48
|
+
*/
|
|
49
|
+
export declare function rectangleIntersectsCircle(rect: BoundingBox, center: Coordinate, radiusInDegrees: number): boolean;
|
|
50
|
+
/**
|
|
51
|
+
* Type definition of an OBB (Oriented Bounding Box)
|
|
52
|
+
*/
|
|
53
|
+
export interface OBBCorners {
|
|
54
|
+
/** The 4 vertices of the OBB (counter-clockwise) */
|
|
55
|
+
corners: Coordinate[];
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Intersection test between an AABB and an OBB (Separating Axis Theorem: SAT)
|
|
59
|
+
*
|
|
60
|
+
* @param rect Axis-aligned bounding box (AABB)
|
|
61
|
+
* @param obb Bounding box that accounts for rotation (OBB)
|
|
62
|
+
*/
|
|
63
|
+
export declare function rectangleIntersectsOBB(rect: BoundingBox, obb: OBBCorners): boolean;
|