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