@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.
Files changed (636) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/LICENSE +661 -0
  3. package/README.ja.md +248 -0
  4. package/README.md +255 -0
  5. package/THIRD_PARTY_NOTICES.md +275 -0
  6. package/dist/api/api.d.ts +1259 -0
  7. package/dist/api/api.js +86 -0
  8. package/dist/api/context.d.ts +173 -0
  9. package/dist/api/context.js +193 -0
  10. package/dist/api/display-api.d.ts +1 -0
  11. package/dist/api/display-api.js +23 -0
  12. package/dist/api/event-api.d.ts +13 -0
  13. package/dist/api/event-api.js +17 -0
  14. package/dist/api/extension-api.d.ts +46 -0
  15. package/dist/api/extension-api.js +85 -0
  16. package/dist/api/feature-api.d.ts +11 -0
  17. package/dist/api/feature-api.js +101 -0
  18. package/dist/api/geometry/apply.d.ts +51 -0
  19. package/dist/api/geometry/apply.js +114 -0
  20. package/dist/api/geometry/boolean.d.ts +28 -0
  21. package/dist/api/geometry/boolean.js +65 -0
  22. package/dist/api/geometry/buffer.d.ts +11 -0
  23. package/dist/api/geometry/buffer.js +105 -0
  24. package/dist/api/geometry/split.d.ts +16 -0
  25. package/dist/api/geometry/split.js +75 -0
  26. package/dist/api/geometry/targets.d.ts +76 -0
  27. package/dist/api/geometry/targets.js +158 -0
  28. package/dist/api/geometry/types.d.ts +31 -0
  29. package/dist/api/geometry/types.js +3 -0
  30. package/dist/api/geometry-operations.d.ts +162 -0
  31. package/dist/api/geometry-operations.js +94 -0
  32. package/dist/api/group-api.d.ts +10 -0
  33. package/dist/api/group-api.js +78 -0
  34. package/dist/api/import-export/constants.d.ts +29 -0
  35. package/dist/api/import-export/constants.js +40 -0
  36. package/dist/api/import-export/embedded-file.d.ts +13 -0
  37. package/dist/api/import-export/embedded-file.js +31 -0
  38. package/dist/api/import-export/file-name.d.ts +10 -0
  39. package/dist/api/import-export/file-name.js +20 -0
  40. package/dist/api/import-export/format-detection.d.ts +12 -0
  41. package/dist/api/import-export/format-detection.js +29 -0
  42. package/dist/api/import-export/geojson-export.d.ts +19 -0
  43. package/dist/api/import-export/geojson-export.js +262 -0
  44. package/dist/api/import-export/geojson-import.d.ts +34 -0
  45. package/dist/api/import-export/geojson-import.js +538 -0
  46. package/dist/api/import-export/geometry-validation.d.ts +20 -0
  47. package/dist/api/import-export/geometry-validation.js +107 -0
  48. package/dist/api/import-export/image-import.d.ts +12 -0
  49. package/dist/api/import-export/image-import.js +53 -0
  50. package/dist/api/import-export/index.d.ts +9 -0
  51. package/dist/api/import-export/index.js +107 -0
  52. package/dist/api/import-export/native-format.d.ts +15 -0
  53. package/dist/api/import-export/native-format.js +126 -0
  54. package/dist/api/import-export/native-validation.d.ts +28 -0
  55. package/dist/api/import-export/native-validation.js +212 -0
  56. package/dist/api/import-export/own-property.d.ts +10 -0
  57. package/dist/api/import-export/own-property.js +19 -0
  58. package/dist/api/import-export/style-validation.d.ts +27 -0
  59. package/dist/api/import-export/style-validation.js +49 -0
  60. package/dist/api/import-export/types.d.ts +26 -0
  61. package/dist/api/import-export/types.js +3 -0
  62. package/dist/api/index.d.ts +15 -0
  63. package/dist/api/index.js +3 -0
  64. package/dist/api/input-api.d.ts +158 -0
  65. package/dist/api/input-api.js +144 -0
  66. package/dist/api/instance-api.d.ts +38 -0
  67. package/dist/api/instance-api.js +136 -0
  68. package/dist/api/layer-api.d.ts +12 -0
  69. package/dist/api/layer-api.js +62 -0
  70. package/dist/api/selection-api.d.ts +7 -0
  71. package/dist/api/selection-api.js +78 -0
  72. package/dist/api/snapping-api.d.ts +125 -0
  73. package/dist/api/snapping-api.js +50 -0
  74. package/dist/api/topology-api.d.ts +30 -0
  75. package/dist/api/topology-api.js +16 -0
  76. package/dist/api/tracing-api.d.ts +31 -0
  77. package/dist/api/tracing-api.js +16 -0
  78. package/dist/dispatcher/hit-test/box-strategies.d.ts +19 -0
  79. package/dist/dispatcher/hit-test/box-strategies.js +275 -0
  80. package/dist/dispatcher/hit-test/box-strategy.d.ts +59 -0
  81. package/dist/dispatcher/hit-test/box-strategy.js +37 -0
  82. package/dist/dispatcher/hit-test/globe-shape.d.ts +46 -0
  83. package/dist/dispatcher/hit-test/globe-shape.js +70 -0
  84. package/dist/dispatcher/hit-test/index.d.ts +14 -0
  85. package/dist/dispatcher/hit-test/index.js +9 -0
  86. package/dist/dispatcher/hit-test/local-frame.d.ts +77 -0
  87. package/dist/dispatcher/hit-test/local-frame.js +112 -0
  88. package/dist/dispatcher/hit-test/segment-grid.d.ts +32 -0
  89. package/dist/dispatcher/hit-test/segment-grid.js +79 -0
  90. package/dist/dispatcher/hit-test/service.d.ts +120 -0
  91. package/dist/dispatcher/hit-test/service.js +333 -0
  92. package/dist/dispatcher/hit-test/strategies/base.d.ts +136 -0
  93. package/dist/dispatcher/hit-test/strategies/base.js +66 -0
  94. package/dist/dispatcher/hit-test/strategies/circle.d.ts +10 -0
  95. package/dist/dispatcher/hit-test/strategies/circle.js +56 -0
  96. package/dist/dispatcher/hit-test/strategies/image.d.ts +22 -0
  97. package/dist/dispatcher/hit-test/strategies/image.js +115 -0
  98. package/dist/dispatcher/hit-test/strategies/index.d.ts +11 -0
  99. package/dist/dispatcher/hit-test/strategies/index.js +10 -0
  100. package/dist/dispatcher/hit-test/strategies/line.d.ts +17 -0
  101. package/dist/dispatcher/hit-test/strategies/line.js +30 -0
  102. package/dist/dispatcher/hit-test/strategies/multi.d.ts +44 -0
  103. package/dist/dispatcher/hit-test/strategies/multi.js +141 -0
  104. package/dist/dispatcher/hit-test/strategies/point.d.ts +20 -0
  105. package/dist/dispatcher/hit-test/strategies/point.js +29 -0
  106. package/dist/dispatcher/hit-test/strategies/polygon.d.ts +52 -0
  107. package/dist/dispatcher/hit-test/strategies/polygon.js +138 -0
  108. package/dist/dispatcher/hit-test/topmost.d.ts +48 -0
  109. package/dist/dispatcher/hit-test/topmost.js +157 -0
  110. package/dist/dispatcher/hit-test/visibility-lookup.d.ts +23 -0
  111. package/dist/dispatcher/hit-test/visibility-lookup.js +40 -0
  112. package/dist/dispatcher/index.d.ts +15 -0
  113. package/dist/dispatcher/index.js +3 -0
  114. package/dist/dispatcher/input-router.d.ts +1 -0
  115. package/dist/dispatcher/input-router.js +288 -0
  116. package/dist/dispatcher/normalizer.d.ts +1 -0
  117. package/dist/dispatcher/normalizer.js +513 -0
  118. package/dist/dispatcher/types.d.ts +144 -0
  119. package/dist/dispatcher/types.js +15 -0
  120. package/dist/display/chunk-set.d.ts +24 -0
  121. package/dist/display/chunk-set.js +533 -0
  122. package/dist/display/chunk.d.ts +1 -0
  123. package/dist/display/chunk.js +104 -0
  124. package/dist/display/columnar/index.d.ts +12 -0
  125. package/dist/display/columnar/index.js +13 -0
  126. package/dist/display/columnar/prepare.d.ts +42 -0
  127. package/dist/display/columnar/prepare.js +116 -0
  128. package/dist/display/columnar/source.d.ts +1 -0
  129. package/dist/display/columnar/source.js +531 -0
  130. package/dist/display/columnar/table.d.ts +1 -0
  131. package/dist/display/columnar/table.js +471 -0
  132. package/dist/display/columnar/types.d.ts +223 -0
  133. package/dist/display/columnar/types.js +3 -0
  134. package/dist/display/dataset.d.ts +2 -0
  135. package/dist/display/dataset.js +891 -0
  136. package/dist/display/index.d.ts +13 -0
  137. package/dist/display/index.js +3 -0
  138. package/dist/display/interaction.d.ts +1 -0
  139. package/dist/display/interaction.js +90 -0
  140. package/dist/display/manager.d.ts +1 -0
  141. package/dist/display/manager.js +440 -0
  142. package/dist/display/packed-rtree.d.ts +1 -0
  143. package/dist/display/packed-rtree.js +244 -0
  144. package/dist/display/partition.d.ts +1 -0
  145. package/dist/display/partition.js +226 -0
  146. package/dist/display/provider.d.ts +1 -0
  147. package/dist/display/provider.js +342 -0
  148. package/dist/display/retained.d.ts +40 -0
  149. package/dist/display/retained.js +898 -0
  150. package/dist/display/selection.d.ts +13 -0
  151. package/dist/display/selection.js +226 -0
  152. package/dist/display/source.d.ts +1 -0
  153. package/dist/display/source.js +119 -0
  154. package/dist/display/spatial.d.ts +1 -0
  155. package/dist/display/spatial.js +71 -0
  156. package/dist/display/style.d.ts +1 -0
  157. package/dist/display/style.js +126 -0
  158. package/dist/display/thinning.d.ts +65 -0
  159. package/dist/display/thinning.js +910 -0
  160. package/dist/display/triangulation.d.ts +1 -0
  161. package/dist/display/triangulation.js +0 -0
  162. package/dist/display/types.d.ts +561 -0
  163. package/dist/display/types.js +43 -0
  164. package/dist/extension/feature-handler.d.ts +182 -0
  165. package/dist/extension/feature-handler.js +3 -0
  166. package/dist/extension/index.d.ts +9 -0
  167. package/dist/extension/index.js +3 -0
  168. package/dist/extension/renderers.d.ts +208 -0
  169. package/dist/extension/renderers.js +3 -0
  170. package/dist/geometry/angle.d.ts +47 -0
  171. package/dist/geometry/angle.js +44 -0
  172. package/dist/geometry/bbox.d.ts +48 -0
  173. package/dist/geometry/bbox.js +83 -0
  174. package/dist/geometry/boolean.d.ts +162 -0
  175. package/dist/geometry/boolean.js +331 -0
  176. package/dist/geometry/buffer.d.ts +72 -0
  177. package/dist/geometry/buffer.js +218 -0
  178. package/dist/geometry/circle.d.ts +55 -0
  179. package/dist/geometry/circle.js +107 -0
  180. package/dist/geometry/coords.d.ts +97 -0
  181. package/dist/geometry/coords.js +149 -0
  182. package/dist/geometry/distance.d.ts +79 -0
  183. package/dist/geometry/distance.js +111 -0
  184. package/dist/geometry/errors.d.ts +74 -0
  185. package/dist/geometry/errors.js +104 -0
  186. package/dist/geometry/index.d.ts +28 -0
  187. package/dist/geometry/index.js +38 -0
  188. package/dist/geometry/measure.d.ts +81 -0
  189. package/dist/geometry/measure.js +236 -0
  190. package/dist/geometry/predicates.d.ts +62 -0
  191. package/dist/geometry/predicates.js +132 -0
  192. package/dist/geometry/simplify.d.ts +74 -0
  193. package/dist/geometry/simplify.js +159 -0
  194. package/dist/geometry/split.d.ts +68 -0
  195. package/dist/geometry/split.js +430 -0
  196. package/dist/geometry/types.d.ts +95 -0
  197. package/dist/geometry/types.js +3 -0
  198. package/dist/geometry/units.d.ts +35 -0
  199. package/dist/geometry/units.js +41 -0
  200. package/dist/index.d.ts +72 -0
  201. package/dist/index.js +20 -0
  202. package/dist/maplibre-gl-draw.d.ts +47 -0
  203. package/dist/maplibre-gl-draw.js +407 -0
  204. package/dist/messages.d.ts +64 -0
  205. package/dist/messages.js +36 -0
  206. package/dist/modes/cursor.d.ts +1 -0
  207. package/dist/modes/cursor.js +72 -0
  208. package/dist/modes/draw/circle.d.ts +1 -0
  209. package/dist/modes/draw/circle.js +222 -0
  210. package/dist/modes/draw/commit-layer.d.ts +26 -0
  211. package/dist/modes/draw/commit-layer.js +31 -0
  212. package/dist/modes/draw/freehand.d.ts +1 -0
  213. package/dist/modes/draw/freehand.js +264 -0
  214. package/dist/modes/draw/image.d.ts +1 -0
  215. package/dist/modes/draw/image.js +60 -0
  216. package/dist/modes/draw/index.d.ts +9 -0
  217. package/dist/modes/draw/index.js +11 -0
  218. package/dist/modes/draw/line.d.ts +1 -0
  219. package/dist/modes/draw/line.js +363 -0
  220. package/dist/modes/draw/point.d.ts +1 -0
  221. package/dist/modes/draw/point.js +87 -0
  222. package/dist/modes/draw/polygon.d.ts +1 -0
  223. package/dist/modes/draw/polygon.js +378 -0
  224. package/dist/modes/draw/trace-support.d.ts +79 -0
  225. package/dist/modes/draw/trace-support.js +161 -0
  226. package/dist/modes/handler.d.ts +285 -0
  227. package/dist/modes/handler.js +3 -0
  228. package/dist/modes/index.d.ts +7 -0
  229. package/dist/modes/index.js +3 -0
  230. package/dist/modes/manager.d.ts +15 -0
  231. package/dist/modes/manager.js +196 -0
  232. package/dist/modes/select/box-selection.d.ts +52 -0
  233. package/dist/modes/select/box-selection.js +140 -0
  234. package/dist/modes/select/click-handler.d.ts +32 -0
  235. package/dist/modes/select/click-handler.js +166 -0
  236. package/dist/modes/select/cursor-handler.d.ts +15 -0
  237. package/dist/modes/select/cursor-handler.js +59 -0
  238. package/dist/modes/select/drag/auxiliary.d.ts +26 -0
  239. package/dist/modes/select/drag/auxiliary.js +56 -0
  240. package/dist/modes/select/drag/intermediate-writes.d.ts +1 -0
  241. package/dist/modes/select/drag/intermediate-writes.js +171 -0
  242. package/dist/modes/select/drag/move.d.ts +24 -0
  243. package/dist/modes/select/drag/move.js +59 -0
  244. package/dist/modes/select/drag/operation.d.ts +30 -0
  245. package/dist/modes/select/drag/operation.js +18 -0
  246. package/dist/modes/select/drag/radius.d.ts +15 -0
  247. package/dist/modes/select/drag/radius.js +49 -0
  248. package/dist/modes/select/drag/transform.d.ts +17 -0
  249. package/dist/modes/select/drag/transform.js +155 -0
  250. package/dist/modes/select/drag/vertex.d.ts +17 -0
  251. package/dist/modes/select/drag/vertex.js +163 -0
  252. package/dist/modes/select/drag-handler.d.ts +1 -0
  253. package/dist/modes/select/drag-handler.js +254 -0
  254. package/dist/modes/select/hit-helpers.d.ts +40 -0
  255. package/dist/modes/select/hit-helpers.js +51 -0
  256. package/dist/modes/select/mode.d.ts +1 -0
  257. package/dist/modes/select/mode.js +397 -0
  258. package/dist/modes/select/shortcut-handler.d.ts +40 -0
  259. package/dist/modes/select/shortcut-handler.js +128 -0
  260. package/dist/operations/index.d.ts +9 -0
  261. package/dist/operations/index.js +3 -0
  262. package/dist/operations/layer-operations.d.ts +1 -0
  263. package/dist/operations/layer-operations.js +350 -0
  264. package/dist/operations/resize.d.ts +71 -0
  265. package/dist/operations/resize.js +252 -0
  266. package/dist/operations/rotate.d.ts +17 -0
  267. package/dist/operations/rotate.js +166 -0
  268. package/dist/operations/selection-operations.d.ts +20 -0
  269. package/dist/operations/selection-operations.js +159 -0
  270. package/dist/operations/shared-vertex.d.ts +1 -0
  271. package/dist/operations/shared-vertex.js +210 -0
  272. package/dist/operations/trace-graph.d.ts +96 -0
  273. package/dist/operations/trace-graph.js +283 -0
  274. package/dist/operations/vertex.d.ts +1 -0
  275. package/dist/operations/vertex.js +538 -0
  276. package/dist/plugins/index.d.ts +10 -0
  277. package/dist/plugins/index.js +3 -0
  278. package/dist/plugins/mutation-hooks.d.ts +28 -0
  279. package/dist/plugins/mutation-hooks.js +84 -0
  280. package/dist/plugins/plugin-context.d.ts +1 -0
  281. package/dist/plugins/plugin-context.js +367 -0
  282. package/dist/plugins/plugin-manager.d.ts +103 -0
  283. package/dist/plugins/plugin-manager.js +316 -0
  284. package/dist/plugins/plugin.d.ts +529 -0
  285. package/dist/plugins/plugin.js +3 -0
  286. package/dist/shared/config/constants.d.ts +66 -0
  287. package/dist/shared/config/constants.js +60 -0
  288. package/dist/shared/config/feature-style.d.ts +155 -0
  289. package/dist/shared/config/feature-style.js +154 -0
  290. package/dist/shared/config/index.d.ts +17 -0
  291. package/dist/shared/config/index.js +8 -0
  292. package/dist/shared/config/rendering.d.ts +107 -0
  293. package/dist/shared/config/rendering.js +33 -0
  294. package/dist/shared/config/selection-highlight.d.ts +29 -0
  295. package/dist/shared/config/selection-highlight.js +35 -0
  296. package/dist/shared/config/selection.d.ts +273 -0
  297. package/dist/shared/config/selection.js +266 -0
  298. package/dist/shared/config/topology.d.ts +33 -0
  299. package/dist/shared/config/topology.js +17 -0
  300. package/dist/shared/config/trace.d.ts +40 -0
  301. package/dist/shared/config/trace.js +17 -0
  302. package/dist/shared/math/angle.d.ts +21 -0
  303. package/dist/shared/math/angle.js +34 -0
  304. package/dist/shared/math/circle.d.ts +6 -0
  305. package/dist/shared/math/circle.js +10 -0
  306. package/dist/shared/math/constants.d.ts +48 -0
  307. package/dist/shared/math/constants.js +59 -0
  308. package/dist/shared/math/distance.d.ts +78 -0
  309. package/dist/shared/math/distance.js +147 -0
  310. package/dist/shared/math/globe-subdivision.d.ts +62 -0
  311. package/dist/shared/math/globe-subdivision.js +99 -0
  312. package/dist/shared/math/index.d.ts +17 -0
  313. package/dist/shared/math/index.js +21 -0
  314. package/dist/shared/math/intersection.d.ts +63 -0
  315. package/dist/shared/math/intersection.js +236 -0
  316. package/dist/shared/math/longitude.d.ts +20 -0
  317. package/dist/shared/math/longitude.js +31 -0
  318. package/dist/shared/math/mercator-plane.d.ts +27 -0
  319. package/dist/shared/math/mercator-plane.js +26 -0
  320. package/dist/shared/math/obb.d.ts +65 -0
  321. package/dist/shared/math/obb.js +107 -0
  322. package/dist/shared/math/rotation.d.ts +93 -0
  323. package/dist/shared/math/rotation.js +186 -0
  324. package/dist/shared/math/segment-grid.d.ts +69 -0
  325. package/dist/shared/math/segment-grid.js +159 -0
  326. package/dist/shared/math/transform.d.ts +140 -0
  327. package/dist/shared/math/transform.js +189 -0
  328. package/dist/shared/types/events.d.ts +128 -0
  329. package/dist/shared/types/events.js +3 -0
  330. package/dist/shared/types/model.d.ts +950 -0
  331. package/dist/shared/types/model.js +3 -0
  332. package/dist/shared/types/selection-box.d.ts +23 -0
  333. package/dist/shared/types/selection-box.js +3 -0
  334. package/dist/shared/types/style.d.ts +68 -0
  335. package/dist/shared/types/style.js +3 -0
  336. package/dist/shared/utils/color.d.ts +49 -0
  337. package/dist/shared/utils/color.js +180 -0
  338. package/dist/shared/utils/coordinates.d.ts +52 -0
  339. package/dist/shared/utils/coordinates.js +75 -0
  340. package/dist/shared/utils/embedded-image.d.ts +34 -0
  341. package/dist/shared/utils/embedded-image.js +161 -0
  342. package/dist/shared/utils/event-emitter.d.ts +262 -0
  343. package/dist/shared/utils/event-emitter.js +44 -0
  344. package/dist/shared/utils/feature-bbox.d.ts +8 -0
  345. package/dist/shared/utils/feature-bbox.js +207 -0
  346. package/dist/shared/utils/feature-segments.d.ts +23 -0
  347. package/dist/shared/utils/feature-segments.js +179 -0
  348. package/dist/shared/utils/id.d.ts +1 -0
  349. package/dist/shared/utils/id.js +35 -0
  350. package/dist/shared/utils/image.d.ts +34 -0
  351. package/dist/shared/utils/image.js +106 -0
  352. package/dist/shared/utils/index.d.ts +15 -0
  353. package/dist/shared/utils/index.js +24 -0
  354. package/dist/shared/utils/map.d.ts +26 -0
  355. package/dist/shared/utils/map.js +35 -0
  356. package/dist/shared/utils/name-generator.d.ts +197 -0
  357. package/dist/shared/utils/name-generator.js +337 -0
  358. package/dist/shared/utils/pixel-ratio.d.ts +111 -0
  359. package/dist/shared/utils/pixel-ratio.js +85 -0
  360. package/dist/shared/utils/property.d.ts +88 -0
  361. package/dist/shared/utils/property.js +140 -0
  362. package/dist/shared/utils/vertex-ref.d.ts +23 -0
  363. package/dist/shared/utils/vertex-ref.js +20 -0
  364. package/dist/snapping/custom-targets.d.ts +1 -0
  365. package/dist/snapping/custom-targets.js +21 -0
  366. package/dist/snapping/geometry.d.ts +1 -0
  367. package/dist/snapping/geometry.js +61 -0
  368. package/dist/snapping/index.d.ts +14 -0
  369. package/dist/snapping/index.js +4 -0
  370. package/dist/snapping/indicator.d.ts +19 -0
  371. package/dist/snapping/indicator.js +145 -0
  372. package/dist/snapping/providers/display.d.ts +72 -0
  373. package/dist/snapping/providers/display.js +268 -0
  374. package/dist/snapping/providers/guide.d.ts +69 -0
  375. package/dist/snapping/providers/guide.js +187 -0
  376. package/dist/snapping/providers/intersection.d.ts +1 -0
  377. package/dist/snapping/providers/intersection.js +92 -0
  378. package/dist/snapping/providers/shared.d.ts +39 -0
  379. package/dist/snapping/providers/shared.js +146 -0
  380. package/dist/snapping/providers/store.d.ts +1 -0
  381. package/dist/snapping/providers/store.js +132 -0
  382. package/dist/snapping/service.d.ts +1 -0
  383. package/dist/snapping/service.js +272 -0
  384. package/dist/snapping/types.d.ts +267 -0
  385. package/dist/snapping/types.js +66 -0
  386. package/dist/store/change-merger.d.ts +1 -0
  387. package/dist/store/change-merger.js +102 -0
  388. package/dist/store/draw-store.d.ts +1 -0
  389. package/dist/store/draw-store.js +396 -0
  390. package/dist/store/event-bridge.d.ts +1 -0
  391. package/dist/store/event-bridge.js +161 -0
  392. package/dist/store/index.d.ts +12 -0
  393. package/dist/store/index.js +4 -0
  394. package/dist/store/local-visibility.d.ts +21 -0
  395. package/dist/store/local-visibility.js +27 -0
  396. package/dist/store/lock.d.ts +67 -0
  397. package/dist/store/lock.js +54 -0
  398. package/dist/store/memory/change-bus.d.ts +60 -0
  399. package/dist/store/memory/change-bus.js +232 -0
  400. package/dist/store/memory/file-store.d.ts +15 -0
  401. package/dist/store/memory/file-store.js +33 -0
  402. package/dist/store/memory/frozen.d.ts +21 -0
  403. package/dist/store/memory/frozen.js +51 -0
  404. package/dist/store/memory/ui-state.d.ts +51 -0
  405. package/dist/store/memory/ui-state.js +223 -0
  406. package/dist/store/memory.d.ts +26 -0
  407. package/dist/store/memory.js +708 -0
  408. package/dist/store/spatial/index.d.ts +6 -0
  409. package/dist/store/spatial/index.js +4 -0
  410. package/dist/store/spatial/spatial-index.d.ts +90 -0
  411. package/dist/store/spatial/spatial-index.js +148 -0
  412. package/dist/store/spatial/store-spatial-index.d.ts +60 -0
  413. package/dist/store/spatial/store-spatial-index.js +125 -0
  414. package/dist/store/store.d.ts +417 -0
  415. package/dist/store/store.js +3 -0
  416. package/dist/store/types.d.ts +8 -0
  417. package/dist/store/types.js +3 -0
  418. package/dist/store/writable-layer.d.ts +35 -0
  419. package/dist/store/writable-layer.js +20 -0
  420. package/dist/view/cache/buffer.d.ts +28 -0
  421. package/dist/view/cache/buffer.js +176 -0
  422. package/dist/view/cache/earcut.d.ts +1 -0
  423. package/dist/view/cache/earcut.js +122 -0
  424. package/dist/view/cache/style-rule.d.ts +1 -0
  425. package/dist/view/cache/style-rule.js +97 -0
  426. package/dist/view/cache/terrain-fill.d.ts +30 -0
  427. package/dist/view/cache/terrain-fill.js +60 -0
  428. package/dist/view/cache/texture.d.ts +14 -0
  429. package/dist/view/cache/texture.js +292 -0
  430. package/dist/view/coordinator.d.ts +27 -0
  431. package/dist/view/coordinator.js +72 -0
  432. package/dist/view/feature-companion.d.ts +173 -0
  433. package/dist/view/feature-companion.js +108 -0
  434. package/dist/view/globe-subdivision.d.ts +78 -0
  435. package/dist/view/globe-subdivision.js +128 -0
  436. package/dist/view/index.d.ts +47 -0
  437. package/dist/view/index.js +20 -0
  438. package/dist/view/layer/attach.d.ts +20 -0
  439. package/dist/view/layer/attach.js +47 -0
  440. package/dist/view/layer/blend.d.ts +57 -0
  441. package/dist/view/layer/blend.js +14 -0
  442. package/dist/view/layer/custom-layer.d.ts +1 -0
  443. package/dist/view/layer/custom-layer.js +509 -0
  444. package/dist/view/layer/depth-state.d.ts +14 -0
  445. package/dist/view/layer/depth-state.js +44 -0
  446. package/dist/view/layer/display-list.d.ts +1 -0
  447. package/dist/view/layer/display-list.js +111 -0
  448. package/dist/view/layer/drape-planner.d.ts +139 -0
  449. package/dist/view/layer/drape-planner.js +726 -0
  450. package/dist/view/layer/frame-render.d.ts +57 -0
  451. package/dist/view/layer/frame-render.js +209 -0
  452. package/dist/view/layer/frame-state.d.ts +147 -0
  453. package/dist/view/layer/frame-state.js +484 -0
  454. package/dist/view/layer/gl-state.d.ts +77 -0
  455. package/dist/view/layer/gl-state.js +132 -0
  456. package/dist/view/layer/index.d.ts +6 -0
  457. package/dist/view/layer/index.js +5 -0
  458. package/dist/view/layer/render-scope.d.ts +30 -0
  459. package/dist/view/layer/render-scope.js +28 -0
  460. package/dist/view/layer/render.d.ts +87 -0
  461. package/dist/view/layer/render.js +187 -0
  462. package/dist/view/layer/renderers.d.ts +81 -0
  463. package/dist/view/layer/renderers.js +142 -0
  464. package/dist/view/layer/slot-manager.d.ts +26 -0
  465. package/dist/view/layer/slot-manager.js +133 -0
  466. package/dist/view/layer/slots.d.ts +33 -0
  467. package/dist/view/layer/slots.js +50 -0
  468. package/dist/view/layer/store-retained-bbox.d.ts +36 -0
  469. package/dist/view/layer/store-retained-bbox.js +188 -0
  470. package/dist/view/layer/store-retained-chunk.d.ts +97 -0
  471. package/dist/view/layer/store-retained-chunk.js +94 -0
  472. package/dist/view/layer/store-retained-classify.d.ts +34 -0
  473. package/dist/view/layer/store-retained-classify.js +88 -0
  474. package/dist/view/layer/store-retained-collect.d.ts +24 -0
  475. package/dist/view/layer/store-retained-collect.js +121 -0
  476. package/dist/view/layer/store-retained-coord-patch.d.ts +119 -0
  477. package/dist/view/layer/store-retained-coord-patch.js +168 -0
  478. package/dist/view/layer/store-retained-immediate.d.ts +63 -0
  479. package/dist/view/layer/store-retained-immediate.js +49 -0
  480. package/dist/view/layer/store-retained-invalidation.d.ts +96 -0
  481. package/dist/view/layer/store-retained-invalidation.js +192 -0
  482. package/dist/view/layer/store-retained.d.ts +198 -0
  483. package/dist/view/layer/store-retained.js +430 -0
  484. package/dist/view/layer/terrain-resolver.d.ts +1 -0
  485. package/dist/view/layer/terrain-resolver.js +174 -0
  486. package/dist/view/renderers/batch-manager.d.ts +61 -0
  487. package/dist/view/renderers/batch-manager.js +718 -0
  488. package/dist/view/renderers/draw-factors.d.ts +60 -0
  489. package/dist/view/renderers/draw-factors.js +35 -0
  490. package/dist/view/renderers/drawer.d.ts +1 -0
  491. package/dist/view/renderers/drawer.js +346 -0
  492. package/dist/view/renderers/image.d.ts +1 -0
  493. package/dist/view/renderers/image.js +255 -0
  494. package/dist/view/renderers/line/dash.d.ts +31 -0
  495. package/dist/view/renderers/line/dash.js +152 -0
  496. package/dist/view/renderers/line/line-geometry.d.ts +39 -0
  497. package/dist/view/renderers/line/line-geometry.js +460 -0
  498. package/dist/view/renderers/line/line-gl.d.ts +1 -0
  499. package/dist/view/renderers/line/line-gl.js +236 -0
  500. package/dist/view/renderers/line/line-shader.d.ts +1 -0
  501. package/dist/view/renderers/line/line-shader.js +364 -0
  502. package/dist/view/renderers/line/line-types.d.ts +43 -0
  503. package/dist/view/renderers/line/line-types.js +3 -0
  504. package/dist/view/renderers/line/line-uniforms.d.ts +1 -0
  505. package/dist/view/renderers/line/line-uniforms.js +390 -0
  506. package/dist/view/renderers/line/sdf-line.d.ts +92 -0
  507. package/dist/view/renderers/line/sdf-line.js +567 -0
  508. package/dist/view/renderers/point/billboard-depth.d.ts +10 -0
  509. package/dist/view/renderers/point/billboard-depth.js +56 -0
  510. package/dist/view/renderers/point/point-instance.d.ts +124 -0
  511. package/dist/view/renderers/point/point-instance.js +738 -0
  512. package/dist/view/renderers/point/point-sdf.d.ts +58 -0
  513. package/dist/view/renderers/point/point-sdf.js +170 -0
  514. package/dist/view/renderers/point/point-shape.d.ts +99 -0
  515. package/dist/view/renderers/point/point-shape.js +504 -0
  516. package/dist/view/renderers/point/point-style.d.ts +1 -0
  517. package/dist/view/renderers/point/point-style.js +46 -0
  518. package/dist/view/renderers/polygon/batch.d.ts +26 -0
  519. package/dist/view/renderers/polygon/batch.js +336 -0
  520. package/dist/view/renderers/polygon/earcut-input.d.ts +37 -0
  521. package/dist/view/renderers/polygon/earcut-input.js +55 -0
  522. package/dist/view/renderers/polygon/earcut-sliced.d.ts +69 -0
  523. package/dist/view/renderers/polygon/earcut-sliced.js +960 -0
  524. package/dist/view/renderers/polygon/fill.d.ts +74 -0
  525. package/dist/view/renderers/polygon/fill.js +251 -0
  526. package/dist/view/renderers/polygon/sdf-polygon.d.ts +62 -0
  527. package/dist/view/renderers/polygon/sdf-polygon.js +919 -0
  528. package/dist/view/renderers/polygon/terrain-cull.d.ts +3 -0
  529. package/dist/view/renderers/polygon/terrain-cull.js +14 -0
  530. package/dist/view/renderers/polygon/triangulator.d.ts +41 -0
  531. package/dist/view/renderers/polygon/triangulator.js +3 -0
  532. package/dist/view/renderers/retained.d.ts +43 -0
  533. package/dist/view/renderers/retained.js +3 -0
  534. package/dist/view/renderers/stroke.d.ts +121 -0
  535. package/dist/view/renderers/stroke.js +621 -0
  536. package/dist/view/shaders/frame.d.ts +8 -0
  537. package/dist/view/shaders/frame.js +37 -0
  538. package/dist/view/shaders/helpers.d.ts +238 -0
  539. package/dist/view/shaders/helpers.js +611 -0
  540. package/dist/view/shaders/initializer.d.ts +27 -0
  541. package/dist/view/shaders/initializer.js +125 -0
  542. package/dist/view/shaders/projection.d.ts +123 -0
  543. package/dist/view/shaders/projection.js +299 -0
  544. package/dist/view/shaders/quad-grid.d.ts +77 -0
  545. package/dist/view/shaders/quad-grid.js +128 -0
  546. package/dist/view/shaders/quad.d.ts +189 -0
  547. package/dist/view/shaders/quad.js +582 -0
  548. package/dist/view/shaders/retained-origin.d.ts +50 -0
  549. package/dist/view/shaders/retained-origin.js +67 -0
  550. package/dist/view/shaders/terrain-shade.d.ts +23 -0
  551. package/dist/view/shaders/terrain-shade.js +93 -0
  552. package/dist/view/style-rule.d.ts +166 -0
  553. package/dist/view/style-rule.js +300 -0
  554. package/dist/view/terrain/anchor.d.ts +135 -0
  555. package/dist/view/terrain/anchor.js +226 -0
  556. package/dist/view/terrain/context.d.ts +132 -0
  557. package/dist/view/terrain/context.js +437 -0
  558. package/dist/view/terrain/dem-atlas.d.ts +97 -0
  559. package/dist/view/terrain/dem-atlas.js +534 -0
  560. package/dist/view/terrain/detect.d.ts +126 -0
  561. package/dist/view/terrain/detect.js +198 -0
  562. package/dist/view/terrain/drape/bin-store.d.ts +179 -0
  563. package/dist/view/terrain/drape/bin-store.js +529 -0
  564. package/dist/view/terrain/drape/binning.d.ts +259 -0
  565. package/dist/view/terrain/drape/binning.js +604 -0
  566. package/dist/view/terrain/drape/edge-constrain.d.ts +37 -0
  567. package/dist/view/terrain/drape/edge-constrain.js +175 -0
  568. package/dist/view/terrain/drape/geometry.d.ts +95 -0
  569. package/dist/view/terrain/drape/geometry.js +260 -0
  570. package/dist/view/terrain/drape/mesh.d.ts +50 -0
  571. package/dist/view/terrain/drape/mesh.js +86 -0
  572. package/dist/view/terrain/drape/pass.d.ts +122 -0
  573. package/dist/view/terrain/drape/pass.js +379 -0
  574. package/dist/view/terrain/drape/quad-glyphs.d.ts +64 -0
  575. package/dist/view/terrain/drape/quad-glyphs.js +117 -0
  576. package/dist/view/terrain/drape/quad.d.ts +249 -0
  577. package/dist/view/terrain/drape/quad.js +835 -0
  578. package/dist/view/terrain/drape/renderer.d.ts +184 -0
  579. package/dist/view/terrain/drape/renderer.js +706 -0
  580. package/dist/view/terrain/drape/shared.d.ts +80 -0
  581. package/dist/view/terrain/drape/shared.js +173 -0
  582. package/dist/view/terrain/drape/stitch.d.ts +155 -0
  583. package/dist/view/terrain/drape/stitch.js +228 -0
  584. package/dist/view/terrain/ground.d.ts +72 -0
  585. package/dist/view/terrain/ground.js +151 -0
  586. package/dist/view/terrain/metrics.d.ts +180 -0
  587. package/dist/view/terrain/metrics.js +231 -0
  588. package/dist/view/terrain/occlusion.d.ts +11 -0
  589. package/dist/view/terrain/occlusion.js +129 -0
  590. package/dist/view/terrain/polygon.d.ts +86 -0
  591. package/dist/view/terrain/polygon.js +301 -0
  592. package/dist/view/terrain/shade.d.ts +48 -0
  593. package/dist/view/terrain/shade.js +45 -0
  594. package/dist/view/terrain/state.d.ts +99 -0
  595. package/dist/view/terrain/state.js +186 -0
  596. package/dist/view/terrain/tessellation.d.ts +265 -0
  597. package/dist/view/terrain/tessellation.js +924 -0
  598. package/dist/view/terrain/tiling.d.ts +56 -0
  599. package/dist/view/terrain/tiling.js +155 -0
  600. package/dist/view/terrain/upstream-terrain.d.ts +82 -0
  601. package/dist/view/terrain/upstream-terrain.js +116 -0
  602. package/dist/view/ui/auxiliary-handles.d.ts +151 -0
  603. package/dist/view/ui/auxiliary-handles.js +22 -0
  604. package/dist/view/ui/bounds.d.ts +53 -0
  605. package/dist/view/ui/bounds.js +149 -0
  606. package/dist/view/ui/box-selection.d.ts +1 -0
  607. package/dist/view/ui/box-selection.js +83 -0
  608. package/dist/view/ui/handle-test.d.ts +1 -0
  609. package/dist/view/ui/handle-test.js +437 -0
  610. package/dist/view/ui/handle-thinning.d.ts +122 -0
  611. package/dist/view/ui/handle-thinning.js +430 -0
  612. package/dist/view/ui/handles.d.ts +25 -0
  613. package/dist/view/ui/handles.js +673 -0
  614. package/dist/view/ui/helper.d.ts +19 -0
  615. package/dist/view/ui/helper.js +76 -0
  616. package/dist/view/ui/index.d.ts +15 -0
  617. package/dist/view/ui/index.js +15 -0
  618. package/dist/view/ui/selection-scope.d.ts +25 -0
  619. package/dist/view/ui/selection-scope.js +34 -0
  620. package/dist/view/ui/selection-ui/bounding-box.d.ts +44 -0
  621. package/dist/view/ui/selection-ui/bounding-box.js +240 -0
  622. package/dist/view/ui/selection-ui/extension-registry.d.ts +76 -0
  623. package/dist/view/ui/selection-ui/extension-registry.js +78 -0
  624. package/dist/view/ui/selection-ui/index.d.ts +12 -0
  625. package/dist/view/ui/selection-ui/index.js +12 -0
  626. package/dist/view/ui/selection-ui/renderer.d.ts +29 -0
  627. package/dist/view/ui/selection-ui/renderer.js +227 -0
  628. package/dist/view/ui/selection-ui/types.d.ts +55 -0
  629. package/dist/view/ui/selection-ui/types.js +3 -0
  630. package/dist/view/ui/selection-ui-drawer.d.ts +52 -0
  631. package/dist/view/ui/selection-ui-drawer.js +329 -0
  632. package/dist/view/ui/tentative.d.ts +1 -0
  633. package/dist/view/ui/tentative.js +320 -0
  634. package/dist/view/viewport.d.ts +119 -0
  635. package/dist/view/viewport.js +254 -0
  636. package/package.json +113 -0
@@ -0,0 +1,236 @@
1
+ // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ /**
4
+ * Tests whether a point is inside a rectangle
5
+ */
6
+ export function pointInRectangle(point, rect) {
7
+ return (point[0] >= rect.minX && point[0] <= rect.maxX && point[1] >= rect.minY && point[1] <= rect.maxY);
8
+ }
9
+ /**
10
+ * Intersection test between two segments
11
+ *
12
+ * Uses the CCW (Counter-Clockwise) algorithm.
13
+ */
14
+ export function segmentIntersectsSegment(a1, a2, b1, b2) {
15
+ // CCW test function
16
+ const ccw = (p1, p2, p3) => {
17
+ return (p2[0] - p1[0]) * (p3[1] - p1[1]) - (p2[1] - p1[1]) * (p3[0] - p1[0]);
18
+ };
19
+ const d1 = ccw(a1, a2, b1);
20
+ const d2 = ccw(a1, a2, b2);
21
+ const d3 = ccw(b1, b2, a1);
22
+ const d4 = ccw(b1, b2, a2);
23
+ // Condition under which the segments intersect
24
+ if (((d1 > 0 && d2 < 0) || (d1 < 0 && d2 > 0)) && ((d3 > 0 && d4 < 0) || (d3 < 0 && d4 > 0))) {
25
+ return true;
26
+ }
27
+ // When an endpoint lies on the other segment
28
+ const onSegment = (p, q, r) => {
29
+ return (q[0] <= Math.max(p[0], r[0]) &&
30
+ q[0] >= Math.min(p[0], r[0]) &&
31
+ q[1] <= Math.max(p[1], r[1]) &&
32
+ q[1] >= Math.min(p[1], r[1]));
33
+ };
34
+ if (d1 === 0 && onSegment(a1, b1, a2))
35
+ return true;
36
+ if (d2 === 0 && onSegment(a1, b2, a2))
37
+ return true;
38
+ if (d3 === 0 && onSegment(b1, a1, b2))
39
+ return true;
40
+ if (d4 === 0 && onSegment(b1, a2, b2))
41
+ return true;
42
+ return false;
43
+ }
44
+ /**
45
+ * Tests whether a segment intersects a rectangle
46
+ */
47
+ export function segmentIntersectsRectangle(p1, p2, rect) {
48
+ // When either endpoint is inside the rectangle
49
+ if (pointInRectangle(p1, rect) || pointInRectangle(p2, rect)) {
50
+ return true;
51
+ }
52
+ // Intersection test against the 4 edges of the rectangle
53
+ const corners = [
54
+ [rect.minX, rect.minY],
55
+ [rect.maxX, rect.minY],
56
+ [rect.maxX, rect.maxY],
57
+ [rect.minX, rect.maxY],
58
+ ];
59
+ for (let i = 0; i < 4; i++) {
60
+ const j = (i + 1) % 4;
61
+ if (segmentIntersectsSegment(p1, p2, corners[i], corners[j])) {
62
+ return true;
63
+ }
64
+ }
65
+ return false;
66
+ }
67
+ /**
68
+ * Intersection test between a rectangle and a LineString
69
+ *
70
+ * Returns true when any vertex of the LineString is inside the rectangle, or when any of its
71
+ * edges intersects the rectangle.
72
+ */
73
+ export function rectangleIntersectsLineString(rect, lineString) {
74
+ if (lineString.length === 0)
75
+ return false;
76
+ // When any vertex is inside the rectangle
77
+ for (const coord of lineString) {
78
+ if (pointInRectangle(coord, rect)) {
79
+ return true;
80
+ }
81
+ }
82
+ // When any edge intersects the rectangle
83
+ for (let i = 0; i < lineString.length - 1; i++) {
84
+ if (segmentIntersectsRectangle(lineString[i], lineString[i + 1], rect)) {
85
+ return true;
86
+ }
87
+ }
88
+ return false;
89
+ }
90
+ /**
91
+ * Tests whether a point is inside a polygon (Ray Casting algorithm)
92
+ */
93
+ function pointInPolygon(point, ring) {
94
+ let inside = false;
95
+ const x = point[0];
96
+ const y = point[1];
97
+ for (let i = 0, j = ring.length - 1; i < ring.length; j = i++) {
98
+ const xi = ring[i][0];
99
+ const yi = ring[i][1];
100
+ const xj = ring[j][0];
101
+ const yj = ring[j][1];
102
+ if (yi > y !== yj > y && x < ((xj - xi) * (y - yi)) / (yj - yi) + xi) {
103
+ inside = !inside;
104
+ }
105
+ }
106
+ return inside;
107
+ }
108
+ /**
109
+ * Intersection test between a rectangle and a Polygon
110
+ *
111
+ * Returns true when any of the following conditions holds:
112
+ * 1. Any vertex of the polygon is inside the rectangle
113
+ * 2. Any vertex of the rectangle is inside the polygon
114
+ * 3. Any edge of the polygon intersects the rectangle
115
+ */
116
+ export function rectangleIntersectsPolygon(rect, polygon) {
117
+ if (polygon.length === 0 || polygon[0].length === 0)
118
+ return false;
119
+ const outerRing = polygon[0];
120
+ // 1. Any vertex of the polygon is inside the rectangle
121
+ for (const coord of outerRing) {
122
+ if (pointInRectangle(coord, rect)) {
123
+ return true;
124
+ }
125
+ }
126
+ // 2. Any vertex of the rectangle is inside the polygon
127
+ const rectCorners = [
128
+ [rect.minX, rect.minY],
129
+ [rect.maxX, rect.minY],
130
+ [rect.maxX, rect.maxY],
131
+ [rect.minX, rect.maxY],
132
+ ];
133
+ for (const corner of rectCorners) {
134
+ if (pointInPolygon(corner, outerRing)) {
135
+ return true;
136
+ }
137
+ }
138
+ // 3. Any edge of the polygon intersects the rectangle
139
+ for (let i = 0; i < outerRing.length - 1; i++) {
140
+ if (segmentIntersectsRectangle(outerRing[i], outerRing[i + 1], rect)) {
141
+ return true;
142
+ }
143
+ }
144
+ // The edge that joins the last vertex to the first vertex
145
+ if (outerRing.length > 1 &&
146
+ segmentIntersectsRectangle(outerRing[outerRing.length - 1], outerRing[0], rect)) {
147
+ return true;
148
+ }
149
+ return false;
150
+ }
151
+ /**
152
+ * Intersection test between a rectangle and a Circle
153
+ *
154
+ * Returns true when the center of the circle is inside the rectangle, or when an edge or a
155
+ * vertex of the rectangle intersects the circle.
156
+ *
157
+ * @param rect Selection rectangle (geographic coordinates)
158
+ * @param center Center of the circle (geographic coordinates)
159
+ * @param radiusInDegrees Radius of the circle (in degrees)
160
+ */
161
+ export function rectangleIntersectsCircle(rect, center, radiusInDegrees) {
162
+ // When the center of the circle is inside the rectangle
163
+ if (pointInRectangle(center, rect)) {
164
+ return true;
165
+ }
166
+ // Compute the closest point of the rectangle
167
+ const closestX = Math.max(rect.minX, Math.min(center[0], rect.maxX));
168
+ const closestY = Math.max(rect.minY, Math.min(center[1], rect.maxY));
169
+ // Compute the distance between the closest point and the center of the circle
170
+ const dx = center[0] - closestX;
171
+ const dy = center[1] - closestY;
172
+ const distanceSquared = dx * dx + dy * dy;
173
+ // They intersect if the distance is at most the radius
174
+ return distanceSquared <= radiusInDegrees * radiusInDegrees;
175
+ }
176
+ /**
177
+ * Intersection test between an AABB and an OBB (Separating Axis Theorem: SAT)
178
+ *
179
+ * @param rect Axis-aligned bounding box (AABB)
180
+ * @param obb Bounding box that accounts for rotation (OBB)
181
+ */
182
+ export function rectangleIntersectsOBB(rect, obb) {
183
+ if (obb.corners.length !== 4)
184
+ return false;
185
+ // Convert the AABB into an array of vertices
186
+ const rectCorners = [
187
+ [rect.minX, rect.minY],
188
+ [rect.maxX, rect.minY],
189
+ [rect.maxX, rect.maxY],
190
+ [rect.minX, rect.maxY],
191
+ ];
192
+ // Get the separating axes (the 2 axes of the AABB + the 2 axes of the OBB)
193
+ const axes = [
194
+ // Axes of the AABB (always the X axis and the Y axis)
195
+ [1, 0],
196
+ [0, 1],
197
+ // Axes of the OBB (derived from its edges)
198
+ normalize([obb.corners[1][0] - obb.corners[0][0], obb.corners[1][1] - obb.corners[0][1]]),
199
+ normalize([obb.corners[3][0] - obb.corners[0][0], obb.corners[3][1] - obb.corners[0][1]]),
200
+ ];
201
+ // Check for separation along each axis
202
+ for (const axis of axes) {
203
+ const [minA, maxA] = projectPolygon(rectCorners, axis);
204
+ const [minB, maxB] = projectPolygon(obb.corners, axis);
205
+ // When the projections do not overlap, a separating axis has been found
206
+ if (maxA < minB || maxB < minA) {
207
+ return false;
208
+ }
209
+ }
210
+ // When they overlap on every axis, they intersect
211
+ return true;
212
+ }
213
+ /**
214
+ * Normalizes a vector
215
+ */
216
+ function normalize(v) {
217
+ const len = Math.sqrt(v[0] * v[0] + v[1] * v[1]);
218
+ if (len === 0)
219
+ return [1, 0];
220
+ return [v[0] / len, v[1] / len];
221
+ }
222
+ /**
223
+ * Projects a polygon onto an axis and returns the minimum and maximum values
224
+ */
225
+ function projectPolygon(corners, axis) {
226
+ let min = corners[0][0] * axis[0] + corners[0][1] * axis[1];
227
+ let max = min;
228
+ for (let i = 1; i < corners.length; i++) {
229
+ const p = corners[i][0] * axis[0] + corners[i][1] * axis[1];
230
+ if (p < min)
231
+ min = p;
232
+ if (p > max)
233
+ max = p;
234
+ }
235
+ return [min, max];
236
+ }
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Longitude wrapping
3
+ *
4
+ * The longitude arithmetic that the rendering, the hit testing and the snapping share, so
5
+ * that all of them pick the same copy of the world.
6
+ */
7
+ /**
8
+ * Brings a longitude into [-180, 180] (a longitude already inside is returned unchanged)
9
+ */
10
+ export declare function wrapLongitude(lng: number): number;
11
+ /**
12
+ * The copy of a longitude nearest to a reference longitude
13
+ *
14
+ * A longitude within 180 degrees of the reference is returned unchanged (so nothing moves
15
+ * away from the antimeridian); otherwise it is moved by whole turns. This is the choice the
16
+ * rendering makes for a feature near the view: it is drawn on the copy of the world the view
17
+ * shows, which is the copy nearest to the camera. Hit testing and snapping use it around the
18
+ * pointer so that they meet the copy that is drawn.
19
+ */
20
+ export declare function nearestLongitude(lng: number, reference: number): number;
@@ -0,0 +1,31 @@
1
+ // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ /**
4
+ * Longitude wrapping
5
+ *
6
+ * The longitude arithmetic that the rendering, the hit testing and the snapping share, so
7
+ * that all of them pick the same copy of the world.
8
+ */
9
+ /**
10
+ * Brings a longitude into [-180, 180] (a longitude already inside is returned unchanged)
11
+ */
12
+ export function wrapLongitude(lng) {
13
+ if (lng >= -180 && lng <= 180)
14
+ return lng;
15
+ return lng - 360 * Math.round(lng / 360);
16
+ }
17
+ /**
18
+ * The copy of a longitude nearest to a reference longitude
19
+ *
20
+ * A longitude within 180 degrees of the reference is returned unchanged (so nothing moves
21
+ * away from the antimeridian); otherwise it is moved by whole turns. This is the choice the
22
+ * rendering makes for a feature near the view: it is drawn on the copy of the world the view
23
+ * shows, which is the copy nearest to the camera. Hit testing and snapping use it around the
24
+ * pointer so that they meet the copy that is drawn.
25
+ */
26
+ export function nearestLongitude(lng, reference) {
27
+ const delta = lng - reference;
28
+ if (delta >= -180 && delta <= 180)
29
+ return lng;
30
+ return lng - 360 * Math.round(delta / 360);
31
+ }
@@ -0,0 +1,27 @@
1
+ /**
2
+ * The plane the transform operations work in
3
+ *
4
+ * Resize and rotate compute in Web Mercator, the plane the map is drawn in, so a transform
5
+ * does on the map what the pointer does on the screen (at any latitude and size, with no
6
+ * local cos φ approximation that changes the shape a little on every rotation). The plane is
7
+ * maplibre's world coordinate (0 to 1 across the world) with y pointing north, so an angle
8
+ * measured in it is counterclockwise like the old lng/lat angle. Longitude is linear and not
9
+ * wrapped. Latitude is clamped to the Web Mercator limit (±85.051129 degrees), beyond which
10
+ * the map draws nothing and the projection reaches infinity at the poles.
11
+ */
12
+ import type { Coordinate } from '../types/model.js';
13
+ /**
14
+ * Converts a longitude/latitude into the transform plane
15
+ *
16
+ * @param coord [lng, lat]
17
+ * @returns [x, y] in world units (1 = the width of the world), y pointing north
18
+ */
19
+ export declare function toPlane(coord: Coordinate): [number, number];
20
+ /**
21
+ * Converts a point of the transform plane back into a longitude/latitude
22
+ *
23
+ * @param x World units east
24
+ * @param y World units north
25
+ * @returns [lng, lat]
26
+ */
27
+ export declare function fromPlane(x: number, y: number): Coordinate;
@@ -0,0 +1,26 @@
1
+ // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ /** The latitude limit of Web Mercator (degrees) */
4
+ const MAX_MERCATOR_LATITUDE = 85.0511287798066;
5
+ /**
6
+ * Converts a longitude/latitude into the transform plane
7
+ *
8
+ * @param coord [lng, lat]
9
+ * @returns [x, y] in world units (1 = the width of the world), y pointing north
10
+ */
11
+ export function toPlane(coord) {
12
+ const lat = Math.max(-MAX_MERCATOR_LATITUDE, Math.min(MAX_MERCATOR_LATITUDE, coord[1]));
13
+ const phi = (lat * Math.PI) / 180;
14
+ return [coord[0] / 360, Math.log(Math.tan(Math.PI / 4 + phi / 2)) / (2 * Math.PI)];
15
+ }
16
+ /**
17
+ * Converts a point of the transform plane back into a longitude/latitude
18
+ *
19
+ * @param x World units east
20
+ * @param y World units north
21
+ * @returns [lng, lat]
22
+ */
23
+ export function fromPlane(x, y) {
24
+ const lat = (2 * Math.atan(Math.exp(y * 2 * Math.PI)) - Math.PI / 2) * (180 / Math.PI);
25
+ return [x * 360, lat];
26
+ }
@@ -0,0 +1,65 @@
1
+ /**
2
+ * OBB (Oriented Bounding Box)
3
+ *
4
+ * Computation and hit testing of a bounding box that includes rotation.
5
+ */
6
+ import type { Coordinate } from '../types/model.js';
7
+ /**
8
+ * Definition of an OBB
9
+ */
10
+ export interface OBB {
11
+ /** The center [lng, lat] */
12
+ center: Coordinate;
13
+ /** Half the width, in degrees */
14
+ halfWidth: number;
15
+ /** Half the height, in degrees */
16
+ halfHeight: number;
17
+ /** The rotation angle, in radians */
18
+ rotation: number;
19
+ }
20
+ /**
21
+ * Creates an OBB
22
+ *
23
+ * @param centerLng Center longitude
24
+ * @param centerLat Center latitude
25
+ * @param width Width (degrees)
26
+ * @param height Height (degrees)
27
+ * @param rotationDeg Rotation angle (degrees, counter-clockwise)
28
+ * @returns OBB
29
+ */
30
+ export declare function createOBB(centerLng: number, centerLat: number, width: number, height: number, rotationDeg: number): OBB;
31
+ /**
32
+ * Tests whether a point is inside an OBB
33
+ *
34
+ * @param obb OBB
35
+ * @param point The point to test [lng, lat]
36
+ * @returns true when it is inside the OBB
37
+ */
38
+ export declare function pointInOBB(obb: OBB, point: Coordinate): boolean;
39
+ /**
40
+ * Computes the distance from a point to an OBB
41
+ *
42
+ * @param obb OBB
43
+ * @param point Point [lng, lat]
44
+ * @returns Distance (degrees). 0 when inside the OBB
45
+ */
46
+ export declare function distanceToOBB(obb: OBB, point: Coordinate): number;
47
+ /**
48
+ * Gets the 4 vertices of an OBB
49
+ *
50
+ * @param obb OBB
51
+ * @returns Array of the 4 vertices [topLeft, topRight, bottomRight, bottomLeft]
52
+ */
53
+ export declare function getOBBCorners(obb: OBB): Coordinate[];
54
+ /**
55
+ * Gets the AABB (Axis-Aligned Bounding Box) of an OBB
56
+ *
57
+ * @param obb OBB
58
+ * @returns AABB { minX, minY, maxX, maxY }
59
+ */
60
+ export declare function getOBBAABB(obb: OBB): {
61
+ minX: number;
62
+ minY: number;
63
+ maxX: number;
64
+ maxY: number;
65
+ };
@@ -0,0 +1,107 @@
1
+ // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ /**
4
+ * Creates an OBB
5
+ *
6
+ * @param centerLng Center longitude
7
+ * @param centerLat Center latitude
8
+ * @param width Width (degrees)
9
+ * @param height Height (degrees)
10
+ * @param rotationDeg Rotation angle (degrees, counter-clockwise)
11
+ * @returns OBB
12
+ */
13
+ export function createOBB(centerLng, centerLat, width, height, rotationDeg) {
14
+ return {
15
+ center: [centerLng, centerLat],
16
+ halfWidth: width / 2,
17
+ halfHeight: height / 2,
18
+ rotation: (rotationDeg * Math.PI) / 180,
19
+ };
20
+ }
21
+ /**
22
+ * Tests whether a point is inside an OBB
23
+ *
24
+ * @param obb OBB
25
+ * @param point The point to test [lng, lat]
26
+ * @returns true when it is inside the OBB
27
+ */
28
+ export function pointInOBB(obb, point) {
29
+ // Convert the point into the local coordinate system of the OBB
30
+ const dx = point[0] - obb.center[0];
31
+ const dy = point[1] - obb.center[1];
32
+ // Apply the inverse rotation
33
+ const cos = Math.cos(-obb.rotation);
34
+ const sin = Math.sin(-obb.rotation);
35
+ const localX = dx * cos - dy * sin;
36
+ const localY = dx * sin + dy * cos;
37
+ // AABB test in the local coordinate system
38
+ return Math.abs(localX) <= obb.halfWidth && Math.abs(localY) <= obb.halfHeight;
39
+ }
40
+ /**
41
+ * Computes the distance from a point to an OBB
42
+ *
43
+ * @param obb OBB
44
+ * @param point Point [lng, lat]
45
+ * @returns Distance (degrees). 0 when inside the OBB
46
+ */
47
+ export function distanceToOBB(obb, point) {
48
+ // Convert the point into the local coordinate system of the OBB
49
+ const dx = point[0] - obb.center[0];
50
+ const dy = point[1] - obb.center[1];
51
+ // Apply the inverse rotation
52
+ const cos = Math.cos(-obb.rotation);
53
+ const sin = Math.sin(-obb.rotation);
54
+ const localX = dx * cos - dy * sin;
55
+ const localY = dx * sin + dy * cos;
56
+ // 0 when inside the OBB
57
+ if (Math.abs(localX) <= obb.halfWidth && Math.abs(localY) <= obb.halfHeight) {
58
+ return 0;
59
+ }
60
+ // Compute the closest point
61
+ const clampedX = Math.max(-obb.halfWidth, Math.min(obb.halfWidth, localX));
62
+ const clampedY = Math.max(-obb.halfHeight, Math.min(obb.halfHeight, localY));
63
+ // Compute the distance
64
+ const distX = localX - clampedX;
65
+ const distY = localY - clampedY;
66
+ return Math.sqrt(distX * distX + distY * distY);
67
+ }
68
+ /**
69
+ * Gets the 4 vertices of an OBB
70
+ *
71
+ * @param obb OBB
72
+ * @returns Array of the 4 vertices [topLeft, topRight, bottomRight, bottomLeft]
73
+ */
74
+ export function getOBBCorners(obb) {
75
+ const cos = Math.cos(obb.rotation);
76
+ const sin = Math.sin(obb.rotation);
77
+ // The 4 vertices in the local coordinate system
78
+ const corners = [
79
+ [-obb.halfWidth, -obb.halfHeight], // top-left
80
+ [obb.halfWidth, -obb.halfHeight], // top-right
81
+ [obb.halfWidth, obb.halfHeight], // bottom-right
82
+ [-obb.halfWidth, obb.halfHeight], // bottom-left
83
+ ];
84
+ // Apply the rotation and convert into global coordinates
85
+ return corners.map(([x, y]) => {
86
+ const rx = x * cos - y * sin;
87
+ const ry = x * sin + y * cos;
88
+ return [obb.center[0] + rx, obb.center[1] + ry];
89
+ });
90
+ }
91
+ /**
92
+ * Gets the AABB (Axis-Aligned Bounding Box) of an OBB
93
+ *
94
+ * @param obb OBB
95
+ * @returns AABB { minX, minY, maxX, maxY }
96
+ */
97
+ export function getOBBAABB(obb) {
98
+ const corners = getOBBCorners(obb);
99
+ const lngs = corners.map((c) => c[0]);
100
+ const lats = corners.map((c) => c[1]);
101
+ return {
102
+ minX: Math.min(...lngs),
103
+ minY: Math.min(...lats),
104
+ maxX: Math.max(...lngs),
105
+ maxY: Math.max(...lats),
106
+ };
107
+ }
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Spherical rotation utilities (ECEF coordinate system)
3
+ *
4
+ * Provides rotation computation in the ECEF coordinate system, accounting for the WGS84
5
+ * ellipsoid.
6
+ *
7
+ * Implemented with standard geodetic computation: Rodrigues' rotation formula and the ECEF
8
+ * conversion on the WGS84 ellipsoid (the inverse conversion uses Bowring's method).
9
+ */
10
+ import type { Coordinate } from '../types/model.js';
11
+ /**
12
+ * ECEF coordinate (3D Cartesian coordinate)
13
+ */
14
+ interface ECEFCoordinate {
15
+ x: number;
16
+ y: number;
17
+ z: number;
18
+ }
19
+ /**
20
+ * Converts a WGS84 coordinate into an ECEF coordinate (accounting for the ellipsoid)
21
+ *
22
+ * @param coord WGS84 coordinate [lng, lat]
23
+ * @returns ECEF coordinate {x, y, z} (in meters)
24
+ */
25
+ export declare function wgs84ToECEF(coord: Coordinate): ECEFCoordinate;
26
+ /**
27
+ * Converts an ECEF coordinate into a WGS84 coordinate (iterative computation by Bowring's
28
+ * method)
29
+ *
30
+ * @param x ECEF X coordinate (meters)
31
+ * @param y ECEF Y coordinate (meters)
32
+ * @param z ECEF Z coordinate (meters)
33
+ * @returns WGS84 coordinate [lng, lat]
34
+ */
35
+ export declare function ecefToWGS84(x: number, y: number, z: number): Coordinate;
36
+ /**
37
+ * Rotates a single coordinate about the center point as the axis (ECEF coordinate system,
38
+ * Rodrigues' formula)
39
+ *
40
+ * @param coord The coordinate to rotate [lng, lat]
41
+ * @param center Center point of the rotation [lng, lat]
42
+ * @param angleDegrees Rotation angle (degrees, counter-clockwise)
43
+ * @returns The coordinate after rotation [lng, lat]
44
+ */
45
+ export declare function rotateCoordinateOnSphere(coord: Coordinate, center: Coordinate, angleDegrees: number): Coordinate;
46
+ /**
47
+ * Rotates multiple coordinates about the center point as the axis (ECEF coordinate system,
48
+ * Rodrigues' formula)
49
+ *
50
+ * @param coords Array of coordinates to rotate
51
+ * @param center Center point of the rotation [lng, lat]
52
+ * @param angleDegrees Rotation angle (degrees, counter-clockwise)
53
+ * @returns Array of coordinates after rotation
54
+ */
55
+ export declare function rotateCoordinatesOnSphere(coords: readonly Coordinate[], center: Coordinate, angleDegrees: number): Coordinate[];
56
+ /**
57
+ * Converts kilometers into degrees (with a latitude correction)
58
+ *
59
+ * @param km Distance (kilometers)
60
+ * @param latitude Reference latitude
61
+ * @returns Degrees
62
+ */
63
+ export declare function kmToDegrees(km: number, latitude: number): number;
64
+ /**
65
+ * Converts pixels into degrees (with a latitude correction)
66
+ *
67
+ * @param pixels Number of pixels
68
+ * @param latitude Reference latitude
69
+ * @param zoom Zoom level
70
+ * @param tileSize Tile size (default 512)
71
+ * @returns Degrees
72
+ */
73
+ export declare function pixelsToDegrees(pixels: number, latitude: number, zoom: number, tileSize?: number): {
74
+ lngDegrees: number;
75
+ latDegrees: number;
76
+ };
77
+ /**
78
+ * Computes the vertices of a quad with a rotation applied (uses spherical rotation)
79
+ *
80
+ * @param centerLng Center longitude
81
+ * @param centerLat Center latitude
82
+ * @param halfWidthDeg Half width (degrees) - in the longitude direction
83
+ * @param halfHeightDeg Half height (degrees) - in the latitude direction
84
+ * @param rotationDeg Rotation angle (degrees, counter-clockwise)
85
+ * @returns The 4 vertices of the quad [topLeft, topRight, bottomLeft, bottomRight]
86
+ */
87
+ export declare function computeRotatedQuadCorners(centerLng: number, centerLat: number, halfWidthDeg: number, halfHeightDeg: number, rotationDeg: number): {
88
+ topLeft: Coordinate;
89
+ topRight: Coordinate;
90
+ bottomLeft: Coordinate;
91
+ bottomRight: Coordinate;
92
+ };
93
+ export {};