@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,162 @@
|
|
|
1
|
+
import type { AreaCoordinates, MultiPolygonCoordinates } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Converts Polygon or MultiPolygon coordinates into normalized MultiPolygon coordinates.
|
|
4
|
+
*
|
|
5
|
+
* Resolves self-intersections (a figure-eight becomes two parts), unifies the ring
|
|
6
|
+
* orientations (outer rings counter-clockwise, holes clockwise) and removes the rings that
|
|
7
|
+
* have no area. Rings with fewer than 3 positions or with a position that is not finite are
|
|
8
|
+
* dropped first, and a part whose outer ring is dropped is dropped with its holes.
|
|
9
|
+
*
|
|
10
|
+
* @param coordinates Polygon or MultiPolygon coordinates in degrees
|
|
11
|
+
* @returns The normalized MultiPolygon coordinates, each ring closed. An empty array means
|
|
12
|
+
* the input has no area
|
|
13
|
+
* @throws {@link GeometryError} when the boolean operation engine fails even after the
|
|
14
|
+
* retry on the 1e-9 degree grid
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```ts
|
|
18
|
+
* import { normalizeArea } from '@sakuzu/maplibre-gl-draw/geometry';
|
|
19
|
+
*
|
|
20
|
+
* // A self-intersecting bow tie becomes two triangles
|
|
21
|
+
* normalizeArea([[[0, 0], [1, 1], [1, 0], [0, 1], [0, 0]]]);
|
|
22
|
+
* // [[[[0, 0], [0.5, 0.5], [0, 1], [0, 0]]], [[[0.5, 0.5], [1, 0], [1, 1], [0.5, 0.5]]]]
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export declare function normalizeArea(coordinates: AreaCoordinates): MultiPolygonCoordinates;
|
|
26
|
+
/**
|
|
27
|
+
* Returns the union of two polygons.
|
|
28
|
+
*
|
|
29
|
+
* The operation is topological and runs on the lng/lat plane as it is. Rings that cannot
|
|
30
|
+
* bound an area are dropped first (see {@link normalizeArea}), so an input with no area
|
|
31
|
+
* leaves the other input normalized.
|
|
32
|
+
*
|
|
33
|
+
* @param a Polygon or MultiPolygon coordinates in degrees
|
|
34
|
+
* @param b Polygon or MultiPolygon coordinates in degrees
|
|
35
|
+
* @returns The normalized MultiPolygon coordinates of the union. Disjoint inputs become
|
|
36
|
+
* several parts. An empty array when neither input has an area
|
|
37
|
+
* @throws {@link GeometryError} when the boolean operation engine fails even after the
|
|
38
|
+
* retry on the 1e-9 degree grid
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```ts
|
|
42
|
+
* import type { PolygonCoordinates } from '@sakuzu/maplibre-gl-draw/geometry';
|
|
43
|
+
* import { union } from '@sakuzu/maplibre-gl-draw/geometry';
|
|
44
|
+
*
|
|
45
|
+
* const a: PolygonCoordinates = [[[0, 0], [1, 0], [1, 1], [0, 1], [0, 0]]];
|
|
46
|
+
* const b: PolygonCoordinates = [[[0.5, 0], [1.5, 0], [1.5, 1], [0.5, 1], [0.5, 0]]];
|
|
47
|
+
* union(a, b); // [[[[0, 0], [1.5, 0], [1.5, 1], [0, 1], [0, 0]]]]
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
export declare function union(a: AreaCoordinates, b: AreaCoordinates): MultiPolygonCoordinates;
|
|
51
|
+
/**
|
|
52
|
+
* Returns the part of one polygon that lies outside another.
|
|
53
|
+
*
|
|
54
|
+
* Removing a region inside `a` produces a hole (an inner ring).
|
|
55
|
+
*
|
|
56
|
+
* @param a The Polygon or MultiPolygon coordinates to subtract from, in degrees
|
|
57
|
+
* @param b The Polygon or MultiPolygon coordinates to subtract, in degrees
|
|
58
|
+
* @returns The normalized MultiPolygon coordinates of `a` with `b` removed. An empty array
|
|
59
|
+
* when `a` has no area or `b` covers it. `a` normalized when `b` has no area
|
|
60
|
+
* @throws {@link GeometryError} when the boolean operation engine fails even after the
|
|
61
|
+
* retry on the 1e-9 degree grid
|
|
62
|
+
*
|
|
63
|
+
* @example
|
|
64
|
+
* ```ts
|
|
65
|
+
* import type { PolygonCoordinates } from '@sakuzu/maplibre-gl-draw/geometry';
|
|
66
|
+
* import { difference } from '@sakuzu/maplibre-gl-draw/geometry';
|
|
67
|
+
*
|
|
68
|
+
* const a: PolygonCoordinates = [[[0, 0], [1, 0], [1, 1], [0, 1], [0, 0]]];
|
|
69
|
+
* const b: PolygonCoordinates = [[[0.5, 0], [1.5, 0], [1.5, 1], [0.5, 1], [0.5, 0]]];
|
|
70
|
+
* difference(a, b); // [[[[0, 0], [0.5, 0], [0.5, 1], [0, 1], [0, 0]]]]
|
|
71
|
+
* ```
|
|
72
|
+
*/
|
|
73
|
+
export declare function difference(a: AreaCoordinates, b: AreaCoordinates): MultiPolygonCoordinates;
|
|
74
|
+
/**
|
|
75
|
+
* Returns the common part of two polygons.
|
|
76
|
+
*
|
|
77
|
+
* @param a Polygon or MultiPolygon coordinates in degrees
|
|
78
|
+
* @param b Polygon or MultiPolygon coordinates in degrees
|
|
79
|
+
* @returns The normalized MultiPolygon coordinates of the common part. An empty array when
|
|
80
|
+
* the inputs do not overlap, when only their boundaries touch, and when either has no
|
|
81
|
+
* area
|
|
82
|
+
* @throws {@link GeometryError} when the boolean operation engine fails even after the
|
|
83
|
+
* retry on the 1e-9 degree grid
|
|
84
|
+
*
|
|
85
|
+
* @example
|
|
86
|
+
* ```ts
|
|
87
|
+
* import type { PolygonCoordinates } from '@sakuzu/maplibre-gl-draw/geometry';
|
|
88
|
+
* import { intersection } from '@sakuzu/maplibre-gl-draw/geometry';
|
|
89
|
+
*
|
|
90
|
+
* const a: PolygonCoordinates = [[[0, 0], [1, 0], [1, 1], [0, 1], [0, 0]]];
|
|
91
|
+
* const b: PolygonCoordinates = [[[0.5, 0], [1.5, 0], [1.5, 1], [0.5, 1], [0.5, 0]]];
|
|
92
|
+
* intersection(a, b); // [[[[0.5, 0], [1, 0], [1, 1], [0.5, 1], [0.5, 0]]]]
|
|
93
|
+
* ```
|
|
94
|
+
*/
|
|
95
|
+
export declare function intersection(a: AreaCoordinates, b: AreaCoordinates): MultiPolygonCoordinates;
|
|
96
|
+
/**
|
|
97
|
+
* Keeps only the part of a subject polygon that lies inside a clip region.
|
|
98
|
+
*
|
|
99
|
+
* Between polygons it is the same operation as {@link intersection}; it differs only in
|
|
100
|
+
* that the meaning of the arguments (the subject and the region) is fixed.
|
|
101
|
+
*
|
|
102
|
+
* @param subject The Polygon or MultiPolygon coordinates to clip, in degrees
|
|
103
|
+
* @param clipRegion The Polygon or MultiPolygon coordinates of the region, in degrees
|
|
104
|
+
* @returns The normalized MultiPolygon coordinates that remain inside the region. An empty
|
|
105
|
+
* array when nothing remains or either input has no area
|
|
106
|
+
* @throws {@link GeometryError} when the boolean operation engine fails even after the
|
|
107
|
+
* retry on the 1e-9 degree grid
|
|
108
|
+
*/
|
|
109
|
+
export declare function clip(subject: AreaCoordinates, clipRegion: AreaCoordinates): MultiPolygonCoordinates;
|
|
110
|
+
/**
|
|
111
|
+
* Returns the union of every polygon in an array.
|
|
112
|
+
*
|
|
113
|
+
* Passing many inputs to the engine at once can make it fail to close the output ring, so
|
|
114
|
+
* they are folded in the shape of a binary tree (cascaded union). The union is associative
|
|
115
|
+
* and the order of the folding is fixed, so the result is deterministic. Elements with no
|
|
116
|
+
* area are skipped.
|
|
117
|
+
*
|
|
118
|
+
* @param geometries Polygon or MultiPolygon coordinates in degrees
|
|
119
|
+
* @returns The normalized MultiPolygon coordinates of the union. An empty array for an
|
|
120
|
+
* empty array and when no element has an area
|
|
121
|
+
* @throws {@link GeometryError} when the boolean operation engine fails even after the
|
|
122
|
+
* retry on the 1e-9 degree grid
|
|
123
|
+
*
|
|
124
|
+
* @example
|
|
125
|
+
* ```ts
|
|
126
|
+
* import { unionAll } from '@sakuzu/maplibre-gl-draw/geometry';
|
|
127
|
+
*
|
|
128
|
+
* const merged = unionAll([
|
|
129
|
+
* [[[0, 0], [1, 0], [1, 1], [0, 1], [0, 0]]],
|
|
130
|
+
* [[[0.5, 0], [1.5, 0], [1.5, 1], [0.5, 1], [0.5, 0]]],
|
|
131
|
+
* [[[5, 5], [6, 5], [6, 6], [5, 5]]],
|
|
132
|
+
* ]);
|
|
133
|
+
* merged.length; // 2 (the overlapping squares fuse; the triangle stays apart)
|
|
134
|
+
* ```
|
|
135
|
+
*/
|
|
136
|
+
export declare function unionAll(geometries: AreaCoordinates[]): MultiPolygonCoordinates;
|
|
137
|
+
/**
|
|
138
|
+
* Returns the part common to every polygon in an array.
|
|
139
|
+
*
|
|
140
|
+
* The intersection shrinks monotonically, so the elements are folded in order from the
|
|
141
|
+
* head and the fold stops as soon as it becomes empty.
|
|
142
|
+
*
|
|
143
|
+
* @param geometries Polygon or MultiPolygon coordinates in degrees
|
|
144
|
+
* @returns The normalized MultiPolygon coordinates common to all of them. An empty array for
|
|
145
|
+
* an empty array and when even one element has no area
|
|
146
|
+
* @throws {@link GeometryError} when the boolean operation engine fails even after the
|
|
147
|
+
* retry on the 1e-9 degree grid
|
|
148
|
+
*/
|
|
149
|
+
export declare function intersectionAll(geometries: AreaCoordinates[]): MultiPolygonCoordinates;
|
|
150
|
+
/**
|
|
151
|
+
* Returns a subject polygon with every polygon in an array removed.
|
|
152
|
+
*
|
|
153
|
+
* @param subject The Polygon or MultiPolygon coordinates to subtract from, in degrees
|
|
154
|
+
* @param geometries The Polygon or MultiPolygon coordinates to subtract, in degrees.
|
|
155
|
+
* Elements with no area are skipped
|
|
156
|
+
* @returns The normalized MultiPolygon coordinates of the difference. An empty array when
|
|
157
|
+
* the subject has no area or is covered. The subject normalized when nothing is
|
|
158
|
+
* subtracted
|
|
159
|
+
* @throws {@link GeometryError} when the boolean operation engine fails even after the
|
|
160
|
+
* retry on the 1e-9 degree grid
|
|
161
|
+
*/
|
|
162
|
+
export declare function differenceAll(subject: AreaCoordinates, geometries: AreaCoordinates[]): MultiPolygonCoordinates;
|
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
/**
|
|
4
|
+
* Boolean operations
|
|
5
|
+
*
|
|
6
|
+
* The body is polygon-clipping. The input accepts either Polygon coordinates or
|
|
7
|
+
* MultiPolygon coordinates, and the result is always returned as MultiPolygon
|
|
8
|
+
* coordinates. Because these are topological operations that use no metric of
|
|
9
|
+
* distance or area, they close correctly on the lng/lat plane as it is.
|
|
10
|
+
*/
|
|
11
|
+
import polygonClipping from 'polygon-clipping';
|
|
12
|
+
import { usableAreaParts } from './coords.js';
|
|
13
|
+
import { toGeometryError } from './errors.js';
|
|
14
|
+
/**
|
|
15
|
+
* Shapes the input into a form that can be passed to polygon-clipping
|
|
16
|
+
*
|
|
17
|
+
* A ring that cannot bound an area (fewer than 3 points, or a coordinate that is not a
|
|
18
|
+
* finite number) is dropped, and a part whose outer ring is dropped is removed with its
|
|
19
|
+
* holes. polygon-clipping itself throws an internal error on NaN and silently drops
|
|
20
|
+
* Infinity, so this is the boundary that keeps such input from reaching it.
|
|
21
|
+
*/
|
|
22
|
+
function sanitize(coordinates) {
|
|
23
|
+
return usableAreaParts(coordinates);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* The step of the grid onto which the coordinates are placed on a retry (degrees)
|
|
27
|
+
*
|
|
28
|
+
* 1e-9 degrees is roughly 0.1mm at the equator, and the displacement caused by the
|
|
29
|
+
* rounding is half of that, so it does not show up in the measurements of a feature
|
|
30
|
+
* (the same step as NODE_QUANTUM in split.ts). On the other hand it is 5 digits larger
|
|
31
|
+
* than the smallest step of double precision (about 1.4e-14 degrees in the 140-degree
|
|
32
|
+
* longitude range), so a discrepancy arising from cancellation is absorbed for certain.
|
|
33
|
+
*/
|
|
34
|
+
const SNAP_QUANTUM = 1e-9;
|
|
35
|
+
/**
|
|
36
|
+
* Returns a copy with the coordinates placed onto the grid
|
|
37
|
+
*/
|
|
38
|
+
function snap(parts) {
|
|
39
|
+
return parts.map((polygon) => polygon.map((ring) => ring.map(([x, y]) => [
|
|
40
|
+
Math.round(x / SNAP_QUANTUM) * SNAP_QUANTUM,
|
|
41
|
+
Math.round(y / SNAP_QUANTUM) * SNAP_QUANTUM,
|
|
42
|
+
])));
|
|
43
|
+
}
|
|
44
|
+
/** The operations of polygon-clipping, by name */
|
|
45
|
+
const OPERATIONS = {
|
|
46
|
+
union: polygonClipping.union,
|
|
47
|
+
difference: polygonClipping.difference,
|
|
48
|
+
intersection: polygonClipping.intersection,
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* Calls polygon-clipping and, only when it fails, rounds the coordinates and retries
|
|
52
|
+
* once
|
|
53
|
+
*
|
|
54
|
+
* Vertices that adjacent polygons hold on the same edge can differ by the smallest step
|
|
55
|
+
* of double precision when they are produced by separate operations. polygon-clipping
|
|
56
|
+
* regards this difference as identical in its comparisons while treating the points as
|
|
57
|
+
* distinct in value, so it fails to close the output ring and throws an exception.
|
|
58
|
+
* Placing the coordinates back onto the grid makes the shifted vertices take the same
|
|
59
|
+
* value, and the same operation then succeeds.
|
|
60
|
+
*
|
|
61
|
+
* The rounding is applied only to the input that failed. If every input were rounded in
|
|
62
|
+
* advance, there are inputs in which edges that were barely separated by the jitter
|
|
63
|
+
* would overlap completely and become unsolvable instead (the buffer of a nearly
|
|
64
|
+
* collinear line is a real example). The rule of the rounding is deterministic, so even
|
|
65
|
+
* when the retry is entered the result is determined by the input alone.
|
|
66
|
+
*
|
|
67
|
+
* When the retry fails too, the error leaves as a GeometryError with a reason code
|
|
68
|
+
* instead of the internal message of polygon-clipping.
|
|
69
|
+
*/
|
|
70
|
+
function run(operation, parts) {
|
|
71
|
+
const clipper = OPERATIONS[operation];
|
|
72
|
+
const [first, ...rest] = parts;
|
|
73
|
+
try {
|
|
74
|
+
return clipper(first, ...rest);
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
const [snapped, ...snappedRest] = parts.map(snap);
|
|
78
|
+
try {
|
|
79
|
+
return clipper(snapped, ...snappedRest);
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
throw toGeometryError(error, operation);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Resolves self-intersections and normalizes the orientations (the normalized form of
|
|
88
|
+
* polygon-clipping)
|
|
89
|
+
*/
|
|
90
|
+
function normalize(coordinates) {
|
|
91
|
+
if (coordinates.length === 0) {
|
|
92
|
+
return [];
|
|
93
|
+
}
|
|
94
|
+
return run('union', [coordinates]);
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Converts Polygon or MultiPolygon coordinates into normalized MultiPolygon coordinates.
|
|
98
|
+
*
|
|
99
|
+
* Resolves self-intersections (a figure-eight becomes two parts), unifies the ring
|
|
100
|
+
* orientations (outer rings counter-clockwise, holes clockwise) and removes the rings that
|
|
101
|
+
* have no area. Rings with fewer than 3 positions or with a position that is not finite are
|
|
102
|
+
* dropped first, and a part whose outer ring is dropped is dropped with its holes.
|
|
103
|
+
*
|
|
104
|
+
* @param coordinates Polygon or MultiPolygon coordinates in degrees
|
|
105
|
+
* @returns The normalized MultiPolygon coordinates, each ring closed. An empty array means
|
|
106
|
+
* the input has no area
|
|
107
|
+
* @throws {@link GeometryError} when the boolean operation engine fails even after the
|
|
108
|
+
* retry on the 1e-9 degree grid
|
|
109
|
+
*
|
|
110
|
+
* @example
|
|
111
|
+
* ```ts
|
|
112
|
+
* import { normalizeArea } from '@sakuzu/maplibre-gl-draw/geometry';
|
|
113
|
+
*
|
|
114
|
+
* // A self-intersecting bow tie becomes two triangles
|
|
115
|
+
* normalizeArea([[[0, 0], [1, 1], [1, 0], [0, 1], [0, 0]]]);
|
|
116
|
+
* // [[[[0, 0], [0.5, 0.5], [0, 1], [0, 0]]], [[[0.5, 0.5], [1, 0], [1, 1], [0.5, 0.5]]]]
|
|
117
|
+
* ```
|
|
118
|
+
*/
|
|
119
|
+
export function normalizeArea(coordinates) {
|
|
120
|
+
return normalize(sanitize(coordinates));
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Returns the union of two polygons.
|
|
124
|
+
*
|
|
125
|
+
* The operation is topological and runs on the lng/lat plane as it is. Rings that cannot
|
|
126
|
+
* bound an area are dropped first (see {@link normalizeArea}), so an input with no area
|
|
127
|
+
* leaves the other input normalized.
|
|
128
|
+
*
|
|
129
|
+
* @param a Polygon or MultiPolygon coordinates in degrees
|
|
130
|
+
* @param b Polygon or MultiPolygon coordinates in degrees
|
|
131
|
+
* @returns The normalized MultiPolygon coordinates of the union. Disjoint inputs become
|
|
132
|
+
* several parts. An empty array when neither input has an area
|
|
133
|
+
* @throws {@link GeometryError} when the boolean operation engine fails even after the
|
|
134
|
+
* retry on the 1e-9 degree grid
|
|
135
|
+
*
|
|
136
|
+
* @example
|
|
137
|
+
* ```ts
|
|
138
|
+
* import type { PolygonCoordinates } from '@sakuzu/maplibre-gl-draw/geometry';
|
|
139
|
+
* import { union } from '@sakuzu/maplibre-gl-draw/geometry';
|
|
140
|
+
*
|
|
141
|
+
* const a: PolygonCoordinates = [[[0, 0], [1, 0], [1, 1], [0, 1], [0, 0]]];
|
|
142
|
+
* const b: PolygonCoordinates = [[[0.5, 0], [1.5, 0], [1.5, 1], [0.5, 1], [0.5, 0]]];
|
|
143
|
+
* union(a, b); // [[[[0, 0], [1.5, 0], [1.5, 1], [0, 1], [0, 0]]]]
|
|
144
|
+
* ```
|
|
145
|
+
*/
|
|
146
|
+
export function union(a, b) {
|
|
147
|
+
const left = sanitize(a);
|
|
148
|
+
const right = sanitize(b);
|
|
149
|
+
if (left.length === 0) {
|
|
150
|
+
return normalize(right);
|
|
151
|
+
}
|
|
152
|
+
if (right.length === 0) {
|
|
153
|
+
return normalize(left);
|
|
154
|
+
}
|
|
155
|
+
return run('union', [left, right]);
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Returns the part of one polygon that lies outside another.
|
|
159
|
+
*
|
|
160
|
+
* Removing a region inside `a` produces a hole (an inner ring).
|
|
161
|
+
*
|
|
162
|
+
* @param a The Polygon or MultiPolygon coordinates to subtract from, in degrees
|
|
163
|
+
* @param b The Polygon or MultiPolygon coordinates to subtract, in degrees
|
|
164
|
+
* @returns The normalized MultiPolygon coordinates of `a` with `b` removed. An empty array
|
|
165
|
+
* when `a` has no area or `b` covers it. `a` normalized when `b` has no area
|
|
166
|
+
* @throws {@link GeometryError} when the boolean operation engine fails even after the
|
|
167
|
+
* retry on the 1e-9 degree grid
|
|
168
|
+
*
|
|
169
|
+
* @example
|
|
170
|
+
* ```ts
|
|
171
|
+
* import type { PolygonCoordinates } from '@sakuzu/maplibre-gl-draw/geometry';
|
|
172
|
+
* import { difference } from '@sakuzu/maplibre-gl-draw/geometry';
|
|
173
|
+
*
|
|
174
|
+
* const a: PolygonCoordinates = [[[0, 0], [1, 0], [1, 1], [0, 1], [0, 0]]];
|
|
175
|
+
* const b: PolygonCoordinates = [[[0.5, 0], [1.5, 0], [1.5, 1], [0.5, 1], [0.5, 0]]];
|
|
176
|
+
* difference(a, b); // [[[[0, 0], [0.5, 0], [0.5, 1], [0, 1], [0, 0]]]]
|
|
177
|
+
* ```
|
|
178
|
+
*/
|
|
179
|
+
export function difference(a, b) {
|
|
180
|
+
const left = sanitize(a);
|
|
181
|
+
const right = sanitize(b);
|
|
182
|
+
if (left.length === 0) {
|
|
183
|
+
return [];
|
|
184
|
+
}
|
|
185
|
+
if (right.length === 0) {
|
|
186
|
+
return normalize(left);
|
|
187
|
+
}
|
|
188
|
+
return run('difference', [left, right]);
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Returns the common part of two polygons.
|
|
192
|
+
*
|
|
193
|
+
* @param a Polygon or MultiPolygon coordinates in degrees
|
|
194
|
+
* @param b Polygon or MultiPolygon coordinates in degrees
|
|
195
|
+
* @returns The normalized MultiPolygon coordinates of the common part. An empty array when
|
|
196
|
+
* the inputs do not overlap, when only their boundaries touch, and when either has no
|
|
197
|
+
* area
|
|
198
|
+
* @throws {@link GeometryError} when the boolean operation engine fails even after the
|
|
199
|
+
* retry on the 1e-9 degree grid
|
|
200
|
+
*
|
|
201
|
+
* @example
|
|
202
|
+
* ```ts
|
|
203
|
+
* import type { PolygonCoordinates } from '@sakuzu/maplibre-gl-draw/geometry';
|
|
204
|
+
* import { intersection } from '@sakuzu/maplibre-gl-draw/geometry';
|
|
205
|
+
*
|
|
206
|
+
* const a: PolygonCoordinates = [[[0, 0], [1, 0], [1, 1], [0, 1], [0, 0]]];
|
|
207
|
+
* const b: PolygonCoordinates = [[[0.5, 0], [1.5, 0], [1.5, 1], [0.5, 1], [0.5, 0]]];
|
|
208
|
+
* intersection(a, b); // [[[[0.5, 0], [1, 0], [1, 1], [0.5, 1], [0.5, 0]]]]
|
|
209
|
+
* ```
|
|
210
|
+
*/
|
|
211
|
+
export function intersection(a, b) {
|
|
212
|
+
const left = sanitize(a);
|
|
213
|
+
const right = sanitize(b);
|
|
214
|
+
if (left.length === 0 || right.length === 0) {
|
|
215
|
+
return [];
|
|
216
|
+
}
|
|
217
|
+
return run('intersection', [left, right]);
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Keeps only the part of a subject polygon that lies inside a clip region.
|
|
221
|
+
*
|
|
222
|
+
* Between polygons it is the same operation as {@link intersection}; it differs only in
|
|
223
|
+
* that the meaning of the arguments (the subject and the region) is fixed.
|
|
224
|
+
*
|
|
225
|
+
* @param subject The Polygon or MultiPolygon coordinates to clip, in degrees
|
|
226
|
+
* @param clipRegion The Polygon or MultiPolygon coordinates of the region, in degrees
|
|
227
|
+
* @returns The normalized MultiPolygon coordinates that remain inside the region. An empty
|
|
228
|
+
* array when nothing remains or either input has no area
|
|
229
|
+
* @throws {@link GeometryError} when the boolean operation engine fails even after the
|
|
230
|
+
* retry on the 1e-9 degree grid
|
|
231
|
+
*/
|
|
232
|
+
export function clip(subject, clipRegion) {
|
|
233
|
+
return intersection(subject, clipRegion);
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Returns the union of every polygon in an array.
|
|
237
|
+
*
|
|
238
|
+
* Passing many inputs to the engine at once can make it fail to close the output ring, so
|
|
239
|
+
* they are folded in the shape of a binary tree (cascaded union). The union is associative
|
|
240
|
+
* and the order of the folding is fixed, so the result is deterministic. Elements with no
|
|
241
|
+
* area are skipped.
|
|
242
|
+
*
|
|
243
|
+
* @param geometries Polygon or MultiPolygon coordinates in degrees
|
|
244
|
+
* @returns The normalized MultiPolygon coordinates of the union. An empty array for an
|
|
245
|
+
* empty array and when no element has an area
|
|
246
|
+
* @throws {@link GeometryError} when the boolean operation engine fails even after the
|
|
247
|
+
* retry on the 1e-9 degree grid
|
|
248
|
+
*
|
|
249
|
+
* @example
|
|
250
|
+
* ```ts
|
|
251
|
+
* import { unionAll } from '@sakuzu/maplibre-gl-draw/geometry';
|
|
252
|
+
*
|
|
253
|
+
* const merged = unionAll([
|
|
254
|
+
* [[[0, 0], [1, 0], [1, 1], [0, 1], [0, 0]]],
|
|
255
|
+
* [[[0.5, 0], [1.5, 0], [1.5, 1], [0.5, 1], [0.5, 0]]],
|
|
256
|
+
* [[[5, 5], [6, 5], [6, 6], [5, 5]]],
|
|
257
|
+
* ]);
|
|
258
|
+
* merged.length; // 2 (the overlapping squares fuse; the triangle stays apart)
|
|
259
|
+
* ```
|
|
260
|
+
*/
|
|
261
|
+
export function unionAll(geometries) {
|
|
262
|
+
const parts = geometries.map(sanitize).filter((part) => part.length > 0);
|
|
263
|
+
if (parts.length === 0) {
|
|
264
|
+
return [];
|
|
265
|
+
}
|
|
266
|
+
if (parts.length === 1) {
|
|
267
|
+
return run('union', [parts[0]]);
|
|
268
|
+
}
|
|
269
|
+
let level = parts;
|
|
270
|
+
while (level.length > 1) {
|
|
271
|
+
const next = [];
|
|
272
|
+
for (let i = 0; i < level.length; i += 2) {
|
|
273
|
+
// The odd one out is carried up to the next level as it is
|
|
274
|
+
next.push(i + 1 < level.length ? run('union', [level[i], level[i + 1]]) : level[i]);
|
|
275
|
+
}
|
|
276
|
+
level = next;
|
|
277
|
+
}
|
|
278
|
+
return level[0];
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Returns the part common to every polygon in an array.
|
|
282
|
+
*
|
|
283
|
+
* The intersection shrinks monotonically, so the elements are folded in order from the
|
|
284
|
+
* head and the fold stops as soon as it becomes empty.
|
|
285
|
+
*
|
|
286
|
+
* @param geometries Polygon or MultiPolygon coordinates in degrees
|
|
287
|
+
* @returns The normalized MultiPolygon coordinates common to all of them. An empty array for
|
|
288
|
+
* an empty array and when even one element has no area
|
|
289
|
+
* @throws {@link GeometryError} when the boolean operation engine fails even after the
|
|
290
|
+
* retry on the 1e-9 degree grid
|
|
291
|
+
*/
|
|
292
|
+
export function intersectionAll(geometries) {
|
|
293
|
+
if (geometries.length === 0) {
|
|
294
|
+
return [];
|
|
295
|
+
}
|
|
296
|
+
const parts = geometries.map(sanitize);
|
|
297
|
+
if (parts.some((part) => part.length === 0)) {
|
|
298
|
+
return [];
|
|
299
|
+
}
|
|
300
|
+
let result = normalize(parts[0]);
|
|
301
|
+
for (let i = 1; i < parts.length; i++) {
|
|
302
|
+
if (result.length === 0) {
|
|
303
|
+
return [];
|
|
304
|
+
}
|
|
305
|
+
result = run('intersection', [result, parts[i]]);
|
|
306
|
+
}
|
|
307
|
+
return result;
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Returns a subject polygon with every polygon in an array removed.
|
|
311
|
+
*
|
|
312
|
+
* @param subject The Polygon or MultiPolygon coordinates to subtract from, in degrees
|
|
313
|
+
* @param geometries The Polygon or MultiPolygon coordinates to subtract, in degrees.
|
|
314
|
+
* Elements with no area are skipped
|
|
315
|
+
* @returns The normalized MultiPolygon coordinates of the difference. An empty array when
|
|
316
|
+
* the subject has no area or is covered. The subject normalized when nothing is
|
|
317
|
+
* subtracted
|
|
318
|
+
* @throws {@link GeometryError} when the boolean operation engine fails even after the
|
|
319
|
+
* retry on the 1e-9 degree grid
|
|
320
|
+
*/
|
|
321
|
+
export function differenceAll(subject, geometries) {
|
|
322
|
+
const left = sanitize(subject);
|
|
323
|
+
if (left.length === 0) {
|
|
324
|
+
return [];
|
|
325
|
+
}
|
|
326
|
+
const parts = geometries.map(sanitize).filter((part) => part.length > 0);
|
|
327
|
+
if (parts.length === 0) {
|
|
328
|
+
return normalize(left);
|
|
329
|
+
}
|
|
330
|
+
return run('difference', [left, ...parts]);
|
|
331
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import type { GeometryInput, MultiPolygonCoordinates } from './types.js';
|
|
2
|
+
/** The default number of segments per circle of {@link buffer}: 64. */
|
|
3
|
+
export declare const DEFAULT_BUFFER_SEGMENTS = 64;
|
|
4
|
+
/**
|
|
5
|
+
* The options of {@link buffer}.
|
|
6
|
+
*/
|
|
7
|
+
export interface BufferOptions {
|
|
8
|
+
/**
|
|
9
|
+
* The number of segments of the arc parts (64 by default). Rounded down and clamped to
|
|
10
|
+
* 3-1024; NaN gives the default
|
|
11
|
+
*/
|
|
12
|
+
segments?: number;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Builds the area within a distance in meters of a geometry.
|
|
16
|
+
*
|
|
17
|
+
* The distances are laid out without a map projection, through {@link destinationPoint},
|
|
18
|
+
* the direct problem on the sphere. Every generated vertex lies at the buffer distance from
|
|
19
|
+
* its source vertex at any latitude, up to floating-point rounding; the edges between the
|
|
20
|
+
* generated vertices are straight in longitude and latitude. A point becomes a circle (the
|
|
21
|
+
* same as {@link generateCirclePolygon}); a line becomes the union of a circle at each
|
|
22
|
+
* vertex and a band along each edge, offset ±90 degrees from the great-circle bearing of
|
|
23
|
+
* the edge; a polygon becomes the union (positive distance) or the difference (negative
|
|
24
|
+
* distance) of the original polygon and the band along its rings.
|
|
25
|
+
*
|
|
26
|
+
* | Input | Positive | 0 | Negative |
|
|
27
|
+
* | --- | --- | --- | --- |
|
|
28
|
+
* | Point / MultiPoint | circle | `null` | `null` |
|
|
29
|
+
* | LineString / MultiLineString | band | `null` | `null` |
|
|
30
|
+
* | Polygon / MultiPolygon | expansion | normalized original | contraction |
|
|
31
|
+
*
|
|
32
|
+
* With a negative distance, parts narrower than `2 * |meters|` disappear, and an empty array
|
|
33
|
+
* is returned when the whole polygon disappears. `null` means the operation is not defined
|
|
34
|
+
* for the input: the table above, a distance that is not finite, a coordinate that is not
|
|
35
|
+
* finite, a vertex whose distance reaches a pole (`|lat|` plus the distance in degrees of
|
|
36
|
+
* latitude is 90 or more), and an edge that spans more than 180 degrees of longitude.
|
|
37
|
+
*
|
|
38
|
+
* @param geometry The geometry to buffer, coordinates in degrees
|
|
39
|
+
* @param meters The buffer distance in meters. A negative value shrinks a polygon
|
|
40
|
+
* @param options The number of segments per circle
|
|
41
|
+
* @returns The normalized MultiPolygon coordinates of the area. An empty array when a
|
|
42
|
+
* shrunk polygon vanishes. `null` when the operation is not defined for the input
|
|
43
|
+
* @throws {@link GeometryError} when the boolean operation engine fails even after the
|
|
44
|
+
* retry on the 1e-9 degree grid
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* ```ts
|
|
48
|
+
* import { buffer } from '@sakuzu/maplibre-gl-draw/geometry';
|
|
49
|
+
*
|
|
50
|
+
* // The area within 100 m of a line
|
|
51
|
+
* const corridor = buffer(
|
|
52
|
+
* { type: 'LineString', coordinates: [[139.76, 35.68], [139.77, 35.69]] },
|
|
53
|
+
* 100,
|
|
54
|
+
* { segments: 32 },
|
|
55
|
+
* );
|
|
56
|
+
*
|
|
57
|
+
* // Shrink a polygon by 50 m
|
|
58
|
+
* const shrunk = buffer(
|
|
59
|
+
* {
|
|
60
|
+
* type: 'Polygon',
|
|
61
|
+
* coordinates: [[[139.76, 35.68], [139.77, 35.68], [139.77, 35.69], [139.76, 35.68]]],
|
|
62
|
+
* },
|
|
63
|
+
* -50,
|
|
64
|
+
* );
|
|
65
|
+
* if (shrunk === null) {
|
|
66
|
+
* // Not defined for the input
|
|
67
|
+
* } else if (shrunk.length === 0) {
|
|
68
|
+
* // The whole area vanished
|
|
69
|
+
* }
|
|
70
|
+
* ```
|
|
71
|
+
*/
|
|
72
|
+
export declare function buffer(geometry: GeometryInput, meters: number, options?: BufferOptions): MultiPolygonCoordinates | null;
|