@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,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The subdivision of the geometry on the globe
|
|
3
|
+
*
|
|
4
|
+
* On the globe the vertex shaders project each vertex onto the sphere, and the GPU joins two
|
|
5
|
+
* vertices with a straight line in space: a chord through the sphere, not the path maplibre
|
|
6
|
+
* draws its own layers along (the straight line of the Mercator plane carried onto the sphere,
|
|
7
|
+
* `shared/math/globe-subdivision.ts`). So the geometry is cut finely on the Mercator plane
|
|
8
|
+
* before it is projected, as maplibre cuts its own:
|
|
9
|
+
*
|
|
10
|
+
* - Fills and their outlines are cut on the CPU, through the same subdivision as the terrain
|
|
11
|
+
* (`terrain/tessellation.ts`), with the cell of maplibre's fill granularity. The terrain
|
|
12
|
+
* takes precedence: while it gives a step, the globe adds nothing
|
|
13
|
+
* - Lines are cut on the GPU, by the stations of the line shader (`resolveLineStations`),
|
|
14
|
+
* with the cell of maplibre's line granularity; the stations move along the Mercator plane
|
|
15
|
+
* - The other paths drawn on the CPU (the dashes, the selection outlines) are cut with the
|
|
16
|
+
* line cell
|
|
17
|
+
*
|
|
18
|
+
* On a flat map nothing here is used and the geometry is exactly what it was.
|
|
19
|
+
*/
|
|
20
|
+
import { type GlobeSubdivisionKind } from '../shared/math/globe-subdivision.js';
|
|
21
|
+
import type { Coordinate } from '../store/types.js';
|
|
22
|
+
import type { TerrainContext } from './terrain/context.js';
|
|
23
|
+
import { type TessellationStep } from './terrain/tessellation.js';
|
|
24
|
+
/**
|
|
25
|
+
* The most points the globe adds to one fill or one path
|
|
26
|
+
*
|
|
27
|
+
* At the coarsest zoom a cell is 1/128 of the world for fills, so even a fill as large as the
|
|
28
|
+
* world is cut into about 16,000 cells. The limit only guards against a runaway; the fill
|
|
29
|
+
* subdivision coarsens the cell rather than stopping halfway when it is reached.
|
|
30
|
+
*/
|
|
31
|
+
export declare const GLOBE_MAX_SUBDIVISION_POINTS = 65536;
|
|
32
|
+
/**
|
|
33
|
+
* Records the cells the globe asks for in this frame
|
|
34
|
+
*
|
|
35
|
+
* The globe is drawn while maplibre's projection transition is above 0 (it falls to 0 as a
|
|
36
|
+
* globe map zooms in past its switch to Mercator). The generation advances when the globe
|
|
37
|
+
* starts or stops being drawn and when a cell changes, which happens only when the zoom
|
|
38
|
+
* crosses an integer.
|
|
39
|
+
*
|
|
40
|
+
* @param context The terrain state of the draw instance
|
|
41
|
+
* @param transition `projectionTransition` of the frame's projection data (0 = Mercator)
|
|
42
|
+
* @param zoom The zoom of the camera
|
|
43
|
+
*/
|
|
44
|
+
export declare function updateGlobeSubdivision(context: TerrainContext, transition: number, zoom: number): void;
|
|
45
|
+
/**
|
|
46
|
+
* The cell of the globe for a kind of geometry, in Mercator world units (0 on a flat map)
|
|
47
|
+
*/
|
|
48
|
+
export declare function globeGridOf(context: TerrainContext, kind: GlobeSubdivisionKind): number;
|
|
49
|
+
/**
|
|
50
|
+
* The subdivision step of the globe (null on a flat map)
|
|
51
|
+
*/
|
|
52
|
+
export declare function getGlobeTessellationStep(context: TerrainContext, kind: GlobeSubdivisionKind): TessellationStep | null;
|
|
53
|
+
/**
|
|
54
|
+
* The subdivision step of the surface in this frame: the terrain's when the terrain is drawn,
|
|
55
|
+
* the globe's otherwise, and null on a flat map without terrain
|
|
56
|
+
*
|
|
57
|
+
* @param context The terrain state of the draw instance
|
|
58
|
+
* @param kind Which cell of the globe applies (the terrain has one step for everything)
|
|
59
|
+
*/
|
|
60
|
+
export declare function getSurfaceTessellationStep(context: TerrainContext, kind: GlobeSubdivisionKind): TessellationStep | null;
|
|
61
|
+
/**
|
|
62
|
+
* Subdivides the fill of one feature with the step of the surface
|
|
63
|
+
*
|
|
64
|
+
* The terrain's step goes to `tessellatePolygonFill` as before. With the globe's, a fill that
|
|
65
|
+
* lies inside one cell is left as it is: nothing in it crosses a cell, and most features of a
|
|
66
|
+
* large dataset are that small at the zooms the globe is seen at.
|
|
67
|
+
*/
|
|
68
|
+
export declare function tessellateSurfaceFill(context: TerrainContext, featureId: string | undefined, partIndex: number, flatCoords: number[], indices: number[], step: TessellationStep): {
|
|
69
|
+
flatCoords: number[];
|
|
70
|
+
indices: number[];
|
|
71
|
+
step: TessellationStep;
|
|
72
|
+
};
|
|
73
|
+
/**
|
|
74
|
+
* Cuts a path drawn on the CPU along the Mercator plane with the line cell of the globe
|
|
75
|
+
*
|
|
76
|
+
* The path itself is returned on a flat map, and when no edge is longer than a cell.
|
|
77
|
+
*/
|
|
78
|
+
export declare function densifyPathForGlobe(context: TerrainContext, path: Coordinate[]): Coordinate[];
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
/**
|
|
4
|
+
* The subdivision of the geometry on the globe
|
|
5
|
+
*
|
|
6
|
+
* On the globe the vertex shaders project each vertex onto the sphere, and the GPU joins two
|
|
7
|
+
* vertices with a straight line in space: a chord through the sphere, not the path maplibre
|
|
8
|
+
* draws its own layers along (the straight line of the Mercator plane carried onto the sphere,
|
|
9
|
+
* `shared/math/globe-subdivision.ts`). So the geometry is cut finely on the Mercator plane
|
|
10
|
+
* before it is projected, as maplibre cuts its own:
|
|
11
|
+
*
|
|
12
|
+
* - Fills and their outlines are cut on the CPU, through the same subdivision as the terrain
|
|
13
|
+
* (`terrain/tessellation.ts`), with the cell of maplibre's fill granularity. The terrain
|
|
14
|
+
* takes precedence: while it gives a step, the globe adds nothing
|
|
15
|
+
* - Lines are cut on the GPU, by the stations of the line shader (`resolveLineStations`),
|
|
16
|
+
* with the cell of maplibre's line granularity; the stations move along the Mercator plane
|
|
17
|
+
* - The other paths drawn on the CPU (the dashes, the selection outlines) are cut with the
|
|
18
|
+
* line cell
|
|
19
|
+
*
|
|
20
|
+
* On a flat map nothing here is used and the geometry is exactly what it was.
|
|
21
|
+
*/
|
|
22
|
+
import { densifyOnMercatorPlane, globeSubdivisionGrid, } from '../shared/math/globe-subdivision.js';
|
|
23
|
+
import { getTerrainTessellationStep, tessellatePolygonFill } from './terrain/polygon.js';
|
|
24
|
+
import { mercatorX, mercatorY } from './terrain/tessellation.js';
|
|
25
|
+
/**
|
|
26
|
+
* The most points the globe adds to one fill or one path
|
|
27
|
+
*
|
|
28
|
+
* At the coarsest zoom a cell is 1/128 of the world for fills, so even a fill as large as the
|
|
29
|
+
* world is cut into about 16,000 cells. The limit only guards against a runaway; the fill
|
|
30
|
+
* subdivision coarsens the cell rather than stopping halfway when it is reached.
|
|
31
|
+
*/
|
|
32
|
+
export const GLOBE_MAX_SUBDIVISION_POINTS = 65536;
|
|
33
|
+
/**
|
|
34
|
+
* Records the cells the globe asks for in this frame
|
|
35
|
+
*
|
|
36
|
+
* The globe is drawn while maplibre's projection transition is above 0 (it falls to 0 as a
|
|
37
|
+
* globe map zooms in past its switch to Mercator). The generation advances when the globe
|
|
38
|
+
* starts or stops being drawn and when a cell changes, which happens only when the zoom
|
|
39
|
+
* crosses an integer.
|
|
40
|
+
*
|
|
41
|
+
* @param context The terrain state of the draw instance
|
|
42
|
+
* @param transition `projectionTransition` of the frame's projection data (0 = Mercator)
|
|
43
|
+
* @param zoom The zoom of the camera
|
|
44
|
+
*/
|
|
45
|
+
export function updateGlobeSubdivision(context, transition, zoom) {
|
|
46
|
+
const next = transition > 0
|
|
47
|
+
? { fill: globeSubdivisionGrid(zoom, 'fill'), line: globeSubdivisionGrid(zoom, 'line') }
|
|
48
|
+
: null;
|
|
49
|
+
const previous = context.globeGrids;
|
|
50
|
+
if (previous?.fill === next?.fill && previous?.line === next?.line)
|
|
51
|
+
return;
|
|
52
|
+
context.globeGrids = next;
|
|
53
|
+
context.globeGeneration++;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* The cell of the globe for a kind of geometry, in Mercator world units (0 on a flat map)
|
|
57
|
+
*/
|
|
58
|
+
export function globeGridOf(context, kind) {
|
|
59
|
+
return context.globeGrids?.[kind] ?? 0;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* The subdivision step of the globe (null on a flat map)
|
|
63
|
+
*/
|
|
64
|
+
export function getGlobeTessellationStep(context, kind) {
|
|
65
|
+
const grid = globeGridOf(context, kind);
|
|
66
|
+
if (!(grid > 0))
|
|
67
|
+
return null;
|
|
68
|
+
return { grid, maxPoints: GLOBE_MAX_SUBDIVISION_POINTS, region: null };
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* The subdivision step of the surface in this frame: the terrain's when the terrain is drawn,
|
|
72
|
+
* the globe's otherwise, and null on a flat map without terrain
|
|
73
|
+
*
|
|
74
|
+
* @param context The terrain state of the draw instance
|
|
75
|
+
* @param kind Which cell of the globe applies (the terrain has one step for everything)
|
|
76
|
+
*/
|
|
77
|
+
export function getSurfaceTessellationStep(context, kind) {
|
|
78
|
+
return getTerrainTessellationStep(context) ?? getGlobeTessellationStep(context, kind);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Subdivides the fill of one feature with the step of the surface
|
|
82
|
+
*
|
|
83
|
+
* The terrain's step goes to `tessellatePolygonFill` as before. With the globe's, a fill that
|
|
84
|
+
* lies inside one cell is left as it is: nothing in it crosses a cell, and most features of a
|
|
85
|
+
* large dataset are that small at the zooms the globe is seen at.
|
|
86
|
+
*/
|
|
87
|
+
export function tessellateSurfaceFill(context, featureId, partIndex, flatCoords, indices, step) {
|
|
88
|
+
if (!getTerrainTessellationStep(context) && withinOneCell(flatCoords, step.grid)) {
|
|
89
|
+
return { flatCoords, indices, step };
|
|
90
|
+
}
|
|
91
|
+
return tessellatePolygonFill(context, featureId, partIndex, flatCoords, indices, step);
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Whether the bounding box of a flat coordinate array lies inside one cell of the grid
|
|
95
|
+
*/
|
|
96
|
+
function withinOneCell(flatCoords, grid) {
|
|
97
|
+
if (flatCoords.length < 2)
|
|
98
|
+
return true;
|
|
99
|
+
let minLng = Number.POSITIVE_INFINITY;
|
|
100
|
+
let maxLng = Number.NEGATIVE_INFINITY;
|
|
101
|
+
let minLat = Number.POSITIVE_INFINITY;
|
|
102
|
+
let maxLat = Number.NEGATIVE_INFINITY;
|
|
103
|
+
for (let i = 0; i < flatCoords.length; i += 2) {
|
|
104
|
+
const lng = flatCoords[i];
|
|
105
|
+
const lat = flatCoords[i + 1];
|
|
106
|
+
if (lng < minLng)
|
|
107
|
+
minLng = lng;
|
|
108
|
+
if (lng > maxLng)
|
|
109
|
+
maxLng = lng;
|
|
110
|
+
if (lat < minLat)
|
|
111
|
+
minLat = lat;
|
|
112
|
+
if (lat > maxLat)
|
|
113
|
+
maxLat = lat;
|
|
114
|
+
}
|
|
115
|
+
return (Math.floor(mercatorX(minLng) / grid) === Math.floor(mercatorX(maxLng) / grid) &&
|
|
116
|
+
Math.floor(mercatorY(maxLat) / grid) === Math.floor(mercatorY(minLat) / grid));
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Cuts a path drawn on the CPU along the Mercator plane with the line cell of the globe
|
|
120
|
+
*
|
|
121
|
+
* The path itself is returned on a flat map, and when no edge is longer than a cell.
|
|
122
|
+
*/
|
|
123
|
+
export function densifyPathForGlobe(context, path) {
|
|
124
|
+
const grid = globeGridOf(context, 'line');
|
|
125
|
+
if (!(grid > 0))
|
|
126
|
+
return path;
|
|
127
|
+
return densifyOnMercatorPlane(path, grid, GLOBE_MAX_SUBDIVISION_POINTS);
|
|
128
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* View module
|
|
3
|
+
*
|
|
4
|
+
* The rendering layer of the Flux architecture.
|
|
5
|
+
* It watches the Store state and renders it with WebGL.
|
|
6
|
+
*
|
|
7
|
+
* Only the symbols that src/index.ts publishes are listed here (see "The public
|
|
8
|
+
* surface" in CONTRIBUTING.md). Internal code imports from the defining file.
|
|
9
|
+
*/
|
|
10
|
+
export type { CompanionHit, CompanionHitContext, FeatureCompanionHitResult, FeatureCompanionProvider, FeatureCompanionRegistry, } from './feature-companion.js';
|
|
11
|
+
export { createFeatureCompanionRegistry } from './feature-companion.js';
|
|
12
|
+
export type { BlendCapableGL } from './layer/blend.js';
|
|
13
|
+
export { applyDrawBlendState } from './layer/blend.js';
|
|
14
|
+
export type { RenderSlot } from './layer/slots.js';
|
|
15
|
+
export type { DashSegment } from './renderers/line/dash.js';
|
|
16
|
+
export { getStrokeDashPattern, splitIntoDashes } from './renderers/line/dash.js';
|
|
17
|
+
export type { SDFLineRenderer, SDFStrokeOptions, SDFStrokeStyle, } from './renderers/line/sdf-line.js';
|
|
18
|
+
export { drawBillboardsWithoutDepth } from './renderers/point/billboard-depth.js';
|
|
19
|
+
export type { PointShape, PointShapeRenderer, PointStyle } from './renderers/point/point-shape.js';
|
|
20
|
+
export type { FillShaderManager } from './renderers/polygon/fill.js';
|
|
21
|
+
export type { Color, LineStyle, StrokeStyle, WidthUnit } from './renderers/stroke.js';
|
|
22
|
+
export type { OffsetUniforms, ShaderData } from './shaders/helpers.js';
|
|
23
|
+
export { calculateLngLatOffset, calculateOffsetUniforms, createProgram, getProjectionTransitionUniform, OFFSET_MODE_GLSL, } from './shaders/helpers.js';
|
|
24
|
+
export type { ProjectionUniformLocations } from './shaders/projection.js';
|
|
25
|
+
export { ProjectionUniformManager } from './shaders/projection.js';
|
|
26
|
+
export type { QuadVertices } from './shaders/quad.js';
|
|
27
|
+
export { computeQuadVertices, drawQuadSurfaceOnTerrain, QuadShader } from './shaders/quad.js';
|
|
28
|
+
export type { LegendEntry, StyleRuleChannel } from './style-rule.js';
|
|
29
|
+
export { applyRuleColor, deriveLegend, evaluateStyleRule, getStyleRuleChannel, resolveFeatureStyle, resolveRuleColor, } from './style-rule.js';
|
|
30
|
+
export { anchorElevationMeters, getAnchorElevationGeneration } from './terrain/anchor.js';
|
|
31
|
+
export type { TerrainContext, TerrainDrapeDebug, TerrainRenderState } from './terrain/context.js';
|
|
32
|
+
export type { DrapeQuadCorners, QuadDrapeColor, QuadDrapeFill, QuadDrapeGlyphs, QuadDrapeSurface, } from './terrain/drape/quad.js';
|
|
33
|
+
export { QUAD_GLYPH_STRIDE } from './terrain/drape/quad-glyphs.js';
|
|
34
|
+
export { metersToMercatorScale } from './terrain/metrics.js';
|
|
35
|
+
export { anchorGhostOpacity } from './terrain/occlusion.js';
|
|
36
|
+
export { getTerrainTessellationStep } from './terrain/polygon.js';
|
|
37
|
+
export type { MercatorRect, TessellationStep, TessellationTiling } from './terrain/tessellation.js';
|
|
38
|
+
export { densifyPath } from './terrain/tessellation.js';
|
|
39
|
+
export type { AuxiliaryHandle, AuxiliaryHandleContext, AuxiliaryHandleHit, AuxiliaryHandleProvider, AuxiliaryHandleRegistry, } from './ui/auxiliary-handles.js';
|
|
40
|
+
export type { HandleInfo } from './ui/handles.js';
|
|
41
|
+
export { getSelectedFeatureIds } from './ui/helper.js';
|
|
42
|
+
export type { SelectionScope } from './ui/selection-scope.js';
|
|
43
|
+
export { computeBoundingBox, hasZeroArea } from './ui/selection-ui/bounding-box.js';
|
|
44
|
+
export type { SelectionExtensionRegistry } from './ui/selection-ui/extension-registry.js';
|
|
45
|
+
export { createSelectionExtensionRegistry, DEFAULT_POINT_FRAME_SIZE, } from './ui/selection-ui/extension-registry.js';
|
|
46
|
+
export type { AdditionalHandleInfo, AdditionalResizeHandlesCalculator, BoundingBoxCoords, CustomBoundingBoxCalculator, CustomResizeCalculator, PointFrameExtent, PointFrameExtentProvider, ResizeStrategy, } from './ui/selection-ui/types.js';
|
|
47
|
+
export { DEFAULT_VIEWPORT_EXPANSION_FACTOR, getExpandedViewportBounds } from './viewport.js';
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
export { createFeatureCompanionRegistry } from './feature-companion.js';
|
|
4
|
+
export { applyDrawBlendState } from './layer/blend.js';
|
|
5
|
+
export { getStrokeDashPattern, splitIntoDashes } from './renderers/line/dash.js';
|
|
6
|
+
export { drawBillboardsWithoutDepth } from './renderers/point/billboard-depth.js';
|
|
7
|
+
export { calculateLngLatOffset, calculateOffsetUniforms, createProgram, getProjectionTransitionUniform, OFFSET_MODE_GLSL, } from './shaders/helpers.js';
|
|
8
|
+
export { ProjectionUniformManager } from './shaders/projection.js';
|
|
9
|
+
export { computeQuadVertices, drawQuadSurfaceOnTerrain, QuadShader } from './shaders/quad.js';
|
|
10
|
+
export { applyRuleColor, deriveLegend, evaluateStyleRule, getStyleRuleChannel, resolveFeatureStyle, resolveRuleColor, } from './style-rule.js';
|
|
11
|
+
export { anchorElevationMeters, getAnchorElevationGeneration } from './terrain/anchor.js';
|
|
12
|
+
export { QUAD_GLYPH_STRIDE } from './terrain/drape/quad-glyphs.js';
|
|
13
|
+
export { metersToMercatorScale } from './terrain/metrics.js';
|
|
14
|
+
export { anchorGhostOpacity } from './terrain/occlusion.js';
|
|
15
|
+
export { getTerrainTessellationStep } from './terrain/polygon.js';
|
|
16
|
+
export { densifyPath } from './terrain/tessellation.js';
|
|
17
|
+
export { getSelectedFeatureIds } from './ui/helper.js';
|
|
18
|
+
export { computeBoundingBox, hasZeroArea } from './ui/selection-ui/bounding-box.js';
|
|
19
|
+
export { createSelectionExtensionRegistry, DEFAULT_POINT_FRAME_SIZE, } from './ui/selection-ui/extension-registry.js';
|
|
20
|
+
export { DEFAULT_VIEWPORT_EXPANSION_FACTOR, getExpandedViewportBounds } from './viewport.js';
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { CustomLayerInterface, Map as MapLibreMap } from 'maplibre-gl';
|
|
2
|
+
/**
|
|
3
|
+
* Keeps the render slots of Draw on the map for as long as the returned detach function has not
|
|
4
|
+
* been called
|
|
5
|
+
*
|
|
6
|
+
* One rule covers every timing: the slots are added whenever the style accepts layers and a slot
|
|
7
|
+
* is missing. It is checked once now (for a map whose style is already parsed, even while tiles
|
|
8
|
+
* are still loading) and again on every `styledata` event. maplibre fires `styledata` when a
|
|
9
|
+
* style finishes loading (before `style.load` and `load`) and after changes to the style, so the
|
|
10
|
+
* slots are also restored after `setStyle`, including a diffed `setStyle` that drops layers it
|
|
11
|
+
* does not know. A slot that is already on the map is never added twice.
|
|
12
|
+
*
|
|
13
|
+
* The slots are added in order from the first (the backmost), which lines them up in the same
|
|
14
|
+
* order in maplibre (layers added later are on top).
|
|
15
|
+
*
|
|
16
|
+
* @param map The map
|
|
17
|
+
* @param getSlotLayers Returns the current list of slots (first = backmost)
|
|
18
|
+
* @returns A function that stops watching the style (it does not remove the layers)
|
|
19
|
+
*/
|
|
20
|
+
export declare function attachSlotLayers(map: MapLibreMap, getSlotLayers: () => readonly CustomLayerInterface[]): () => void;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
/**
|
|
4
|
+
* Whether the style of the map accepts new layers right now
|
|
5
|
+
*
|
|
6
|
+
* This is the same condition that maplibre checks in `map.addLayer` (the style has finished
|
|
7
|
+
* parsing its stylesheet). It is deliberately not `map.loaded()` or `map.isStyleLoaded()`: those
|
|
8
|
+
* are also false while tiles, sprites or images are loading, which happens after every pan or
|
|
9
|
+
* zoom, although layers can be added at that time.
|
|
10
|
+
*/
|
|
11
|
+
function styleAcceptsLayers(map) {
|
|
12
|
+
return map.style?._loaded === true;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Keeps the render slots of Draw on the map for as long as the returned detach function has not
|
|
16
|
+
* been called
|
|
17
|
+
*
|
|
18
|
+
* One rule covers every timing: the slots are added whenever the style accepts layers and a slot
|
|
19
|
+
* is missing. It is checked once now (for a map whose style is already parsed, even while tiles
|
|
20
|
+
* are still loading) and again on every `styledata` event. maplibre fires `styledata` when a
|
|
21
|
+
* style finishes loading (before `style.load` and `load`) and after changes to the style, so the
|
|
22
|
+
* slots are also restored after `setStyle`, including a diffed `setStyle` that drops layers it
|
|
23
|
+
* does not know. A slot that is already on the map is never added twice.
|
|
24
|
+
*
|
|
25
|
+
* The slots are added in order from the first (the backmost), which lines them up in the same
|
|
26
|
+
* order in maplibre (layers added later are on top).
|
|
27
|
+
*
|
|
28
|
+
* @param map The map
|
|
29
|
+
* @param getSlotLayers Returns the current list of slots (first = backmost)
|
|
30
|
+
* @returns A function that stops watching the style (it does not remove the layers)
|
|
31
|
+
*/
|
|
32
|
+
export function attachSlotLayers(map, getSlotLayers) {
|
|
33
|
+
const ensureSlots = () => {
|
|
34
|
+
if (!styleAcceptsLayers(map))
|
|
35
|
+
return;
|
|
36
|
+
for (const slotLayer of getSlotLayers()) {
|
|
37
|
+
if (!map.getLayer(slotLayer.id)) {
|
|
38
|
+
map.addLayer(slotLayer);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
map.on('styledata', ensureSlots);
|
|
43
|
+
ensureSlots();
|
|
44
|
+
return () => {
|
|
45
|
+
map.off('styledata', ensureSlots);
|
|
46
|
+
};
|
|
47
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Blend state (alpha blending) for our own rendering
|
|
3
|
+
*
|
|
4
|
+
* The fragment shader of every renderer outputs a color that is not premultiplied by alpha.
|
|
5
|
+
* RGB therefore composites correctly with `SRC_ALPHA` / `ONE_MINUS_SRC_ALPHA`.
|
|
6
|
+
*
|
|
7
|
+
* The maplibre canvas, on the other hand, uses `premultipliedAlpha` (the WebGL default), so the
|
|
8
|
+
* alpha component of the destination represents the opacity of everything composited so far.
|
|
9
|
+
* Applying the same factors as RGB to it gives
|
|
10
|
+
*
|
|
11
|
+
* dst.a = a × a + (1 - a) × dst.a
|
|
12
|
+
*
|
|
13
|
+
* which squares the alpha alone. A 25% fill drops to 6.25%, and where the destination alpha is 0
|
|
14
|
+
* (where the canvas is still transparent) it almost disappears when the canvas itself is
|
|
15
|
+
* composited. This is the 2026-08-10 bug where only the fill of a drawn feature vanished in the
|
|
16
|
+
* print preview while its outline (opaque) remained.
|
|
17
|
+
*
|
|
18
|
+
* Set the factor of the alpha component alone to `ONE` so that the correct over composition
|
|
19
|
+
*
|
|
20
|
+
* dst.a = a + (1 - a) × dst.a
|
|
21
|
+
*
|
|
22
|
+
* is used. The RGB equation is exactly the same as before, so the appearance where the
|
|
23
|
+
* destination is opaque does not change.
|
|
24
|
+
*
|
|
25
|
+
* This state is a contract for the whole frame, and CustomLayer sets it once at the entry point
|
|
26
|
+
* of rendering. Handing control to an external renderer (a renderer for a custom feature type or
|
|
27
|
+
* an overlay renderer) may overwrite it in the middle of a frame, so call this function again at
|
|
28
|
+
* the point control comes back to re-establish the contract
|
|
29
|
+
* (rendering.md, "Ownership of the blend state").
|
|
30
|
+
*/
|
|
31
|
+
/**
|
|
32
|
+
* The part of a WebGL context {@link applyDrawBlendState} uses; a `WebGL2RenderingContext`
|
|
33
|
+
* satisfies it.
|
|
34
|
+
*/
|
|
35
|
+
export interface BlendCapableGL {
|
|
36
|
+
/** The `BLEND` capability constant */
|
|
37
|
+
BLEND: number;
|
|
38
|
+
/** The `ONE` blend factor constant */
|
|
39
|
+
ONE: number;
|
|
40
|
+
/** The `SRC_ALPHA` blend factor constant */
|
|
41
|
+
SRC_ALPHA: number;
|
|
42
|
+
/** The `ONE_MINUS_SRC_ALPHA` blend factor constant */
|
|
43
|
+
ONE_MINUS_SRC_ALPHA: number;
|
|
44
|
+
/** Enables a capability */
|
|
45
|
+
enable(cap: number): void;
|
|
46
|
+
/** Sets the RGB and alpha blend factors separately */
|
|
47
|
+
blendFuncSeparate(srcRGB: number, dstRGB: number, srcAlpha: number, dstAlpha: number): void;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Restores the blend state the library's renderers expect: blending on, straight alpha for
|
|
51
|
+
* RGB and `ONE` / `ONE_MINUS_SRC_ALPHA` for alpha.
|
|
52
|
+
*
|
|
53
|
+
* A custom renderer that changes the blend state calls it before handing control back.
|
|
54
|
+
*
|
|
55
|
+
* @param gl The WebGL context of the map
|
|
56
|
+
*/
|
|
57
|
+
export declare function applyDrawBlendState(gl: BlendCapableGL): void;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
/**
|
|
4
|
+
* Restores the blend state the library's renderers expect: blending on, straight alpha for
|
|
5
|
+
* RGB and `ONE` / `ONE_MINUS_SRC_ALPHA` for alpha.
|
|
6
|
+
*
|
|
7
|
+
* A custom renderer that changes the blend state calls it before handing control back.
|
|
8
|
+
*
|
|
9
|
+
* @param gl The WebGL context of the map
|
|
10
|
+
*/
|
|
11
|
+
export function applyDrawBlendState(gl) {
|
|
12
|
+
gl.enable(gl.BLEND);
|
|
13
|
+
gl.blendFuncSeparate(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
|
|
14
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|