leaflet-city-mapper 0.0.6 → 0.0.8

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 (283) hide show
  1. package/README.md +11 -6
  2. package/cucumber.mjs +1 -3
  3. package/dist/leaflet-city-mapper-src.js +8574 -7879
  4. package/dist/leaflet-city-mapper-src.js.map +4 -4
  5. package/dist/leaflet-city-mapper-worker-src.js +2776 -0
  6. package/dist/leaflet-city-mapper-worker-src.js.map +4 -4
  7. package/dist/leaflet-city-mapper-worker.js +1 -1
  8. package/dist/leaflet-city-mapper-worker.js.map +4 -4
  9. package/dist/leaflet-city-mapper.js +5 -3
  10. package/dist/leaflet-city-mapper.js.map +4 -4
  11. package/libs/leaflet-lens.js +44 -27
  12. package/libs/leaflet.js +4 -4
  13. package/libs/openlayers-bindings.js +2 -1
  14. package/libs/openlayers-bindings.min.js +1 -1
  15. package/libs/openlayers-bindings.min.js.map +3 -3
  16. package/package.json +2 -2
  17. package/src/camera/mapCamera.js +7 -7
  18. package/src/camera/mapTryAnimatedPan.js +4 -4
  19. package/src/camera/setBearing.js +5 -0
  20. package/src/camera/setPitch.js +5 -0
  21. package/src/camera/updateMapCamera.js +8 -6
  22. package/src/cog/initCog.js +2 -2
  23. package/src/controls/cameraControls.js +27 -22
  24. package/src/core/cameraCircleBounds.js +2 -1
  25. package/src/core/closestCameraLayerPoint.js +2 -1
  26. package/src/core/constructLayer.js +9 -0
  27. package/src/core/extendLeafletClass.js +5 -0
  28. package/src/core/extendTerrainPixelBounds.js +31 -0
  29. package/src/core/gridlayerGetTiledPixelBounds.js +12 -4
  30. package/src/core/layerAddInitHook.js +7 -0
  31. package/src/core/layerCallInitHooks.js +13 -13
  32. package/src/core/layerMergeOptions.js +7 -0
  33. package/src/core/markerSetPos.js +1 -1
  34. package/src/core/popupGetEvents.js +1 -1
  35. package/src/core/popupUpdatePosition.js +8 -8
  36. package/src/core/projectNativePath.js +23 -0
  37. package/src/core/tooltipGetEvents.js +1 -1
  38. package/src/core/tooltipSetPosition.js +2 -2
  39. package/src/geometry/appendNativeTriangle.js +2 -2
  40. package/src/geometry/circleGeometry.js +4 -3
  41. package/src/geometry/createModelGeometry.js +2 -9
  42. package/src/geometry/dashedSegment.js +10 -5
  43. package/src/geometry/disk.js +1 -1
  44. package/src/geometry/fillNativePolygon.js +20 -0
  45. package/src/geometry/lineJoin.js +2 -2
  46. package/src/geometry/markerQuadCorners.js +6 -0
  47. package/src/geometry/nativeGeometry.js +1 -1
  48. package/src/geometry/polygon.js +4 -10
  49. package/src/geometry/segment.js +4 -3
  50. package/src/globals/colorTexture.js +6 -0
  51. package/src/globals/depthTexture.js +1 -0
  52. package/src/globals/drawMeshEntry.js +1 -1
  53. package/src/globals/layerControlAddItem.js +3 -0
  54. package/src/globals/leafletLayer.js +3 -0
  55. package/src/globals/meshPipeline.js +1 -0
  56. package/src/globals/mvtTextDecoder.js +1 -0
  57. package/src/globals/nativeScalableStyleKeys.js +1 -0
  58. package/src/globals/scenePass.js +1 -0
  59. package/src/globals/vectorStyleNamedColors.js +8 -0
  60. package/src/globals/vectorTileEvents.js +1 -0
  61. package/src/globals/workerCogSource.js +1 -0
  62. package/src/gpu/initializeRendererResources.js +10 -12
  63. package/src/gpu/mountRenderer.js +4 -11
  64. package/src/gpu/releaseRenderer.js +1 -0
  65. package/src/index.js +31 -22
  66. package/src/layer-controls/layerControlInputId.js +11 -0
  67. package/src/layer-controls/placeEntry.js +2 -0
  68. package/src/materials/createProgram.js +7 -6
  69. package/src/materials/createProgramUniforms.js +1 -0
  70. package/src/models/loadModel.js +6 -10
  71. package/src/models/loadModelResources.js +2 -8
  72. package/src/models/modelNode.js +3 -7
  73. package/src/models/prepareModel.js +19 -0
  74. package/src/models/prepareModelGeometry.js +25 -0
  75. package/src/models/prepareModelPrimitive.js +17 -0
  76. package/src/mvt/addMvtCrossings.js +17 -0
  77. package/src/mvt/appendMvtBandTriangles.js +31 -0
  78. package/src/mvt/appendMvtCoordinates.js +11 -0
  79. package/src/mvt/appendMvtPolygonTriangles.js +19 -0
  80. package/src/mvt/beginMvtPath.js +9 -0
  81. package/src/mvt/closeMvtPath.js +7 -0
  82. package/src/mvt/collectMvtEdges.js +19 -0
  83. package/src/mvt/createMvtReader.js +7 -0
  84. package/src/mvt/decodeVectorTile.js +32 -0
  85. package/src/mvt/expectMvtWire.js +3 -0
  86. package/src/mvt/finishMvtPath.js +5 -0
  87. package/src/mvt/finiteMvtCoordinate.js +7 -0
  88. package/src/mvt/groupMvtPolygons.js +25 -0
  89. package/src/mvt/isMvtFallbackError.js +6 -0
  90. package/src/mvt/mergeMvtActiveEdges.js +9 -0
  91. package/src/mvt/mvtEdgeX.js +4 -0
  92. package/src/mvt/mvtPathsVertices.js +8 -0
  93. package/src/mvt/mvtPolygonPaths.js +12 -0
  94. package/src/mvt/numericMvtValue.js +4 -0
  95. package/src/mvt/readMvtFeature.js +34 -0
  96. package/src/mvt/readMvtField.js +8 -0
  97. package/src/mvt/readMvtGeometry.js +29 -0
  98. package/src/mvt/readMvtInteger.js +12 -0
  99. package/src/mvt/readMvtKnownValue.js +21 -0
  100. package/src/mvt/readMvtLayer.js +31 -0
  101. package/src/mvt/readMvtMessage.js +10 -0
  102. package/src/mvt/readMvtNumber.js +9 -0
  103. package/src/mvt/readMvtNumbers.js +11 -0
  104. package/src/mvt/readMvtString.js +6 -0
  105. package/src/mvt/readMvtValue.js +19 -0
  106. package/src/mvt/skipMvtField.js +14 -0
  107. package/src/mvt/sortMvtActiveEdges.js +15 -0
  108. package/src/mvt/sortedMvtLevels.js +22 -0
  109. package/src/mvt/takeMvtBytes.js +8 -0
  110. package/src/mvt/tessellateVectorRings.js +19 -0
  111. package/src/mvt/triangulateVectorRings.js +19 -0
  112. package/src/native/beforeNativeRender.js +6 -0
  113. package/src/native/canScaleNativeStyle.js +17 -0
  114. package/src/native/createNativeMesh.js +31 -0
  115. package/src/native/disposeNativeLayer.js +1 -1
  116. package/src/native/getGridTerrainTile.js +34 -0
  117. package/src/native/gridTerrainElevation.js +26 -0
  118. package/src/native/loadGridTerrain.js +26 -0
  119. package/src/native/nativeLayer.js +2 -2
  120. package/src/native/nativeLayerMethod.js +5 -14
  121. package/src/native/nativeProgram.js +20 -0
  122. package/src/native/nativeTerrainElevation.js +16 -0
  123. package/src/native/nativeVectorGeometry.js +23 -0
  124. package/src/native/orderNativeGridLayer.js +14 -0
  125. package/src/native/prepareGridTerrainRequests.js +16 -0
  126. package/src/native/putNativeMesh.js +15 -21
  127. package/src/native/refreshNativeEvent.js +13 -2
  128. package/src/native/refreshNativeLayer.js +1 -0
  129. package/src/native/retainGridTerrain.js +10 -0
  130. package/src/native/syncGridLayer.js +17 -19
  131. package/src/native/syncGridTile.js +18 -0
  132. package/src/native/syncNativeStrokeAnchors.js +12 -0
  133. package/src/native/syncNativeStrokeZoom.js +29 -0
  134. package/src/native/syncTerrainGridTile.js +28 -0
  135. package/src/native/syncVectorLayer.js +15 -13
  136. package/src/native/terrainGridMesh.js +34 -0
  137. package/src/native/updateNativeStrokeRadius.js +9 -0
  138. package/src/projections/displayContainerPoint.js +23 -3
  139. package/src/projections/groundBounds.js +2 -2
  140. package/src/projections/localPixel.js +7 -2
  141. package/src/projections/localPixelForGeometry.js +4 -2
  142. package/src/projections/projectCameraPoint.js +6 -5
  143. package/src/rendering/collectVisibleMesh.js +5 -2
  144. package/src/rendering/drawGeometry.js +11 -11
  145. package/src/rendering/drawSceneMeshes.js +3 -1
  146. package/src/rendering/nativeStrokeExpansion.js +4 -0
  147. package/src/rendering/prepareMeshUniforms.js +2 -0
  148. package/src/rendering/resizeRenderer.js +20 -10
  149. package/src/scene/initializerFor.js +4 -5
  150. package/src/scene/layerInitialize.js +14 -12
  151. package/src/scene/resolveNextInitialization.js +1 -1
  152. package/src/shaders/materialShaders.js +1 -0
  153. package/src/shaders/materialVertexShader.js +7 -2
  154. package/src/shaders/nativeStrokeShader.js +6 -0
  155. package/src/shadows/drawShadowMeshes.js +6 -5
  156. package/src/sources/attachAreaMesh.js +5 -6
  157. package/src/sources/buildArea.js +4 -5
  158. package/src/sources/buildAreaFeature.js +3 -19
  159. package/src/sources/initVectorTiles.js +15 -0
  160. package/src/sources/isVectorTileSource.js +4 -0
  161. package/src/sources/pumpSourceAreas.js +1 -1
  162. package/src/sources/readyVectorTiles.js +10 -0
  163. package/src/sources/sourceAreaContext.js +1 -6
  164. package/src/sunlight/createSun.js +0 -1
  165. package/src/sunlight/initSunlight.js +19 -8
  166. package/src/terrain/initTerrain.js +7 -1
  167. package/src/terrain/loadTerrain.js +4 -1
  168. package/src/terrain/mapElevationOf.js +5 -1
  169. package/src/terrain/onTerrainAdd.js +11 -1
  170. package/src/terrain/onTerrainRemove.js +10 -1
  171. package/src/textures/nativeTextureFor.js +2 -3
  172. package/src/textures/uploadCanvasTexture.js +11 -2
  173. package/src/utils/yieldTask.js +5 -0
  174. package/src/vector-style/appendQuotedStyleCharacter.js +22 -0
  175. package/src/vector-style/arrayContainsRange.js +8 -0
  176. package/src/vector-style/evaluateBoolean.js +18 -0
  177. package/src/vector-style/evaluateCoalesceOrCase.js +21 -0
  178. package/src/vector-style/evaluateComparison.js +16 -0
  179. package/src/vector-style/evaluateIExpression.js +8 -0
  180. package/src/vector-style/evaluateInput.js +6 -0
  181. package/src/vector-style/evaluateInterpolate.js +27 -0
  182. package/src/vector-style/evaluateMatch.js +12 -0
  183. package/src/vector-style/evaluateMath.js +14 -0
  184. package/src/vector-style/evaluateMembership.js +18 -0
  185. package/src/vector-style/evaluateNegation.js +13 -0
  186. package/src/vector-style/evaluatePrimitive.js +9 -0
  187. package/src/vector-style/evaluateStep.js +11 -0
  188. package/src/vector-style/evaluateStyle.js +33 -0
  189. package/src/vector-style/evaluateToExpression.js +14 -0
  190. package/src/vector-style/fillVectorPaint.js +17 -0
  191. package/src/vector-style/lineVectorPaint.js +21 -0
  192. package/src/vector-style/parseFunctionalColor.js +14 -0
  193. package/src/vector-style/parseHexColor.js +13 -0
  194. package/src/vector-style/parseVectorStyle.js +13 -0
  195. package/src/vector-style/readPaintValue.js +6 -0
  196. package/src/vector-style/removeTrailingCommas.js +12 -0
  197. package/src/vector-style/scaleDashArray.js +13 -0
  198. package/src/vector-style/skipStyleComment.js +9 -0
  199. package/src/vector-style/stripStyleComments.js +21 -0
  200. package/src/vector-style/styleColor.js +11 -0
  201. package/src/vector-style/validateVectorLayers.js +10 -0
  202. package/src/vector-style/vectorPaint.js +8 -0
  203. package/src/vector-style/visibleStyle.js +7 -0
  204. package/src/vector-tiles/appendVectorBatch.js +22 -0
  205. package/src/vector-tiles/attachVectorTileBatch.js +17 -0
  206. package/src/vector-tiles/attachVectorTileBatches.js +15 -0
  207. package/src/vector-tiles/compareVectorLabelPriority.js +3 -0
  208. package/src/vector-tiles/compareVectorTileDistance.js +3 -0
  209. package/src/vector-tiles/configureVectorTileLayer.js +28 -0
  210. package/src/vector-tiles/createVectorLabel.js +22 -0
  211. package/src/vector-tiles/forwardVectorTileError.js +5 -0
  212. package/src/vector-tiles/loadVectorSprite.js +5 -0
  213. package/src/vector-tiles/loadVectorTile.js +36 -0
  214. package/src/vector-tiles/onVectorTileAdd.js +39 -0
  215. package/src/vector-tiles/onVectorTileMessage.js +10 -0
  216. package/src/vector-tiles/onVectorTileRemove.js +20 -0
  217. package/src/vector-tiles/onVectorTileWorkerError.js +11 -0
  218. package/src/vector-tiles/paintVectorTileBatch.js +12 -0
  219. package/src/vector-tiles/prepareVectorLabel.js +25 -0
  220. package/src/vector-tiles/prepareVectorStyleLayer.js +30 -0
  221. package/src/vector-tiles/prepareVectorTile.js +16 -0
  222. package/src/vector-tiles/projectVectorPaths.js +15 -0
  223. package/src/vector-tiles/projectVectorPoint.js +6 -0
  224. package/src/vector-tiles/projectVectorTriangles.js +18 -0
  225. package/src/vector-tiles/pruneVectorTiles.js +11 -0
  226. package/src/vector-tiles/pumpVectorTiles.js +18 -0
  227. package/src/vector-tiles/readTileJSON.js +17 -0
  228. package/src/vector-tiles/readVectorStyle.js +17 -0
  229. package/src/vector-tiles/refreshVectorTiles.js +5 -0
  230. package/src/vector-tiles/reserveVectorLabelCells.js +6 -0
  231. package/src/vector-tiles/retireVectorTileGroup.js +13 -0
  232. package/src/vector-tiles/revokeVectorWorkerUrl.js +9 -0
  233. package/src/vector-tiles/rotateVectorLabel.js +12 -0
  234. package/src/vector-tiles/rotateVectorLabels.js +6 -0
  235. package/src/vector-tiles/simplifyVectorPath.js +21 -0
  236. package/src/vector-tiles/updateVectorLabelMarker.js +27 -0
  237. package/src/vector-tiles/updateVectorLabelStyle.js +8 -0
  238. package/src/vector-tiles/updateVectorTileLabels.js +28 -0
  239. package/src/vector-tiles/updateVectorTilePaint.js +20 -0
  240. package/src/vector-tiles/updateVectorTiles.js +29 -0
  241. package/src/vector-tiles/validateVectorTileZooms.js +6 -0
  242. package/src/vector-tiles/vectorFeaturePaint.js +15 -0
  243. package/src/vector-tiles/vectorFeaturePaths.js +16 -0
  244. package/src/vector-tiles/vectorFeatureZoom.js +8 -0
  245. package/src/vector-tiles/vectorLabelAnchors.js +24 -0
  246. package/src/vector-tiles/vectorLabelCandidates.js +11 -0
  247. package/src/vector-tiles/vectorLabelCells.js +23 -0
  248. package/src/vector-tiles/vectorLabelIcon.js +30 -0
  249. package/src/vector-tiles/vectorLabelProperty.js +3 -0
  250. package/src/vector-tiles/vectorLabelText.js +10 -0
  251. package/src/vector-tiles/vectorSpriteIcon.js +11 -0
  252. package/src/vector-tiles/vectorStraightRun.js +14 -0
  253. package/src/vector-tiles/vectorStyleDependencies.js +15 -0
  254. package/src/vector-tiles/vectorStyleValue.js +5 -0
  255. package/src/vector-tiles/vectorStyleZoom.js +6 -0
  256. package/src/vector-tiles/vectorTileAwaited.js +9 -0
  257. package/src/vector-tiles/vectorTileOverlaps.js +4 -0
  258. package/src/vector-tiles/vectorTilePaint.js +10 -0
  259. package/src/vector-tiles/vectorTileSettings.js +17 -0
  260. package/src/vector-tiles/vectorTilesIdle.js +3 -0
  261. package/src/vector-tiles/vectorTolerance.js +4 -0
  262. package/src/vector-tiles/wrapVectorLabel.js +11 -0
  263. package/src/walk/initWalk.js +19 -6
  264. package/src/weakmaps/nativeProgramsByRenderer.js +1 -0
  265. package/src/weakmaps/pathProjectionByMap.js +1 -0
  266. package/src/weakmaps/streamTerrainByLayer.js +1 -0
  267. package/src/weakmaps/streamTerrainByMap.js +1 -0
  268. package/src/weakmaps/vectorTileOptionsByLayer.js +1 -0
  269. package/src/weakmaps/vectorWorkerByLayer.js +1 -0
  270. package/src/weakmaps/workerMapByLayer.js +1 -0
  271. package/src/workers/buildAreaInWorker.js +3 -27
  272. package/src/workers/cogWorker.js +20 -0
  273. package/src/workers/createGeometryWorker.js +1 -0
  274. package/src/workers/geometryWorker.js +15 -0
  275. package/src/workers/getCogInWorker.js +7 -0
  276. package/src/workers/modelWorker.js +10 -0
  277. package/src/workers/openCogInWorker.js +14 -0
  278. package/src/workers/runSourceWorker.js +32 -0
  279. package/src/workers/settleGeometryWorker.js +1 -1
  280. package/src/workers/vectorTileWorker.js +10 -0
  281. package/src/geometry/buildExtrudedPolygon.js +0 -10
  282. package/src/globals/layerCallInitHooks.js +0 -1
  283. package/src/sources/buildAreaPoint.js +0 -7
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["openlayers-bindings.js"],
4
- "sourcesContent": ["// Leaflet-compatible classes backed by OpenLayers. Load after ol.js and before the plugin.\r\n(() => {\r\n if (!window.ol) throw new Error('Unable to load OpenLayers');\r\n\r\n const style = document.createElement('style');\r\n style.dataset.openlayersBindings = '';\r\n style.textContent = `\r\n.openlayers-city-mapper {\r\n position: relative;\r\n overflow: hidden;\r\n touch-action: none;\r\n}\r\n.ol-viewport {\r\n position: absolute !important;\r\n inset: 0;\r\n}\r\n.ol-overlaycontainer-stopevent { z-index: 1000 !important; }\r\n.ol-city-corner {\r\n position: absolute;\r\n display: flex;\r\n flex-direction: column;\r\n gap: .5em;\r\n pointer-events: none;\r\n}\r\n.ol-city-topleft { top: 5em; left: .5em; }\r\n.ol-city-topright { top: 10px; right: 10px; }\r\n.ol-city-bottomleft { bottom: .5em; left: .5em; }\r\n.ol-city-bottomright { bottom: 4em; right: .5em; }\r\n.ol-attribution {\r\n text-align: justify;\r\n border-radius: 0 !important;\r\n left: 0;\r\n right: 0 !important;\r\n max-width: unset;\r\n font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\r\n font-size: .75rem;\r\n line-height: 1.5;\r\n}\r\n.ol-attribution a { color: #0078A8; }\r\n.ol-attribution * { text-shadow: none !important; }\r\n.ol-city-control {\r\n position: static;\r\n pointer-events: auto;\r\n font: 13px/1.5 sans-serif;\r\n}\r\n.ol-city-rotate {\r\n padding: 0;\r\n border: 1px solid #0003;\r\n border-radius: 4px;\r\n background: #fff;\r\n background-clip: padding-box;\r\n}\r\n.ol-city-rotate a {\r\n display: block;\r\n width: 30px;\r\n height: 30px;\r\n border-radius: 2px;\r\n color: #000;\r\n text-decoration: none;\r\n}\r\n.ol-city-rotate a:hover { background: #f4f4f4; }\r\n.ol-city-rotate a:focus-visible { outline: 2px solid #2675c9; }\r\n.ol-city-layers {\r\n max-height: calc(100vh - 5em);\r\n overflow: auto;\r\n border-radius: 4px;\r\n}\r\n.ol-city-layers section { padding: .5em; background: var(--ol-background-color); }\r\n.ol-city-layers label { display: block; cursor: pointer; white-space: nowrap; }\r\n.ol-city-layers input { vertical-align: middle; }\r\n.ol-city-layers hr { border: 0; border-top: 1px solid #ccc; }\r\n.ol-city-layers .ol-control { background: transparent; }\r\n.ol-city-layers .sunlight-time button { width: auto; padding: 0 .4em; flex-shrink: 0; }\r\n.openlayers-city-mapper .leaflet-pane {\r\n position: absolute;\r\n inset: 0;\r\n pointer-events: none;\r\n}\r\n.ol-zoom button { width: 30px; height: 30px; }\r\n.openlayers-city-mapper .leaflet-marker-icon,\r\n.openlayers-city-mapper .leaflet-marker-shadow {\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n}\r\n.openlayers-city-mapper .leaflet-marker-icon { pointer-events: auto; cursor: pointer; }\r\n.openlayers-city-mapper .leaflet-div-icon { background: #fff; border: 1px solid #666; }\r\n.ol-city-popup {\r\n padding: 10px;\r\n background: white;\r\n border: 1px solid #888;\r\n border-radius: 4px;\r\n font: 14px sans-serif;\r\n}\r\n.ol-city-popup button { float: right; margin-left: 12px; }\r\n.ol-city-tooltip {\r\n position: absolute;\r\n z-index: 1100;\r\n padding: 4px 8px;\r\n background: white;\r\n border: 1px solid #888;\r\n pointer-events: none;\r\n}\r\n`;\r\n document.head.appendChild(style);\r\n\r\n const L = window.L = { version: '1.9.4-openlayers', control: {} };\r\n let lastId = 0;\r\n const stamp = object => object._leaflet_id ||= ++lastId;\r\n const setOptions = (object, options) => object.options = { ...object.options, ...options };\r\n const zoomTiming = new Animation(new KeyframeEffect(null, [], {\r\n duration: 1, fill: 'both', easing: 'cubic-bezier(0,0,0.25,1)',\r\n }));\r\n\r\n function Class(...args) {\r\n this.initialize?.(...args);\r\n this.callInitHooks();\r\n }\r\n Class.extend = function (properties) {\r\n function Child(...args) {\r\n this.initialize?.(...args);\r\n this.callInitHooks();\r\n }\r\n Object.setPrototypeOf(Child, this);\r\n Child.prototype = Object.create(this.prototype);\r\n Object.assign(Child.prototype, properties, { constructor: Child });\r\n Child.prototype.options = { ...this.prototype.options, ...properties.options };\r\n Child.prototype._initHooks = [];\r\n return Child;\r\n };\r\n Class.include = function (properties) { Object.assign(this.prototype, properties); return this; };\r\n Class.mergeOptions = function (options) {\r\n this.prototype.options = { ...this.prototype.options, ...options };\r\n return this;\r\n };\r\n Class.addInitHook = function (hook, ...args) {\r\n if (!Object.hasOwn(this.prototype, '_initHooks')) this.prototype._initHooks = [];\r\n this.prototype._initHooks.push(typeof hook === 'function' ? hook : function () { this[hook](...args); });\r\n return this;\r\n };\r\n Class.prototype.callInitHooks = function () {\r\n if (this._initHooksCalled) return;\r\n this._initHooksCalled = true;\r\n const prototypes = [];\r\n for (let proto = Object.getPrototypeOf(this); proto; proto = Object.getPrototypeOf(proto)) prototypes.unshift(proto);\r\n for (const proto of prototypes) {\r\n if (Object.hasOwn(proto, '_initHooks')) for (const hook of proto._initHooks) hook.call(this);\r\n }\r\n };\r\n L.Evented = Class.extend({\r\n on(types, fn, context) {\r\n if (typeof types === 'object') {\r\n for (const [type, handler] of Object.entries(types)) this.on(type, handler, fn);\r\n } else {\r\n this._events ||= {};\r\n for (const type of types.split(/\\s+/)) {\r\n const events = this._events[type] ||= [];\r\n if (!events.some(event => event.fn === fn && event.context === context)) events.push({ fn, context });\r\n }\r\n }\r\n return this;\r\n },\r\n off(types, fn, context) {\r\n if (!types) this._events = {};\r\n else if (typeof types === 'object') {\r\n for (const [type, handler] of Object.entries(types)) this.off(type, handler, fn);\r\n } else {\r\n for (const type of types.split(/\\s+/)) {\r\n if (this._events?.[type]) this._events[type] = fn\r\n ? this._events[type].filter(event => event.fn !== fn || event.context !== context) : [];\r\n }\r\n }\r\n return this;\r\n },\r\n once(types, fn, context) {\r\n const handler = event => { this.off(types, handler); fn.call(context || this, event); };\r\n return this.on(types, handler);\r\n },\r\n fire(type, data) {\r\n for (const event of [...this._events?.[type] || []]) {\r\n event.fn.call(event.context || this, { ...data, type, target: this, sourceTarget: this });\r\n }\r\n return this;\r\n },\r\n listens(type) { return Boolean(this._events?.[type]?.length); },\r\n });\r\n L.Util = {\r\n stamp, setOptions,\r\n throttle(fn, interval, context) {\r\n let timer, pending;\r\n const run = (...args) => {\r\n if (timer) { pending = args; return; }\r\n fn.apply(context, args);\r\n timer = setTimeout(() => {\r\n timer = null;\r\n if (pending) { const args = pending; pending = null; run(...args); }\r\n }, interval);\r\n };\r\n return run;\r\n },\r\n };\r\n\r\n L.Point = function (x, y, round) {\r\n this.x = round ? Math.round(x) : x;\r\n this.y = round ? Math.round(y) : y;\r\n };\r\n const point = value => value instanceof L.Point ? value\r\n : Array.isArray(value) ? new L.Point(...value) : new L.Point(value.x, value.y);\r\n L.Point.prototype = {\r\n clone() { return new L.Point(this.x, this.y); },\r\n add(value) { return this.clone()._add(point(value)); },\r\n _add(value) { this.x += value.x; this.y += value.y; return this; },\r\n subtract(value) { return this.clone()._subtract(point(value)); },\r\n _subtract(value) { this.x -= value.x; this.y -= value.y; return this; },\r\n multiplyBy(value) { return new L.Point(this.x * value, this.y * value); },\r\n divideBy(value) { return new L.Point(this.x / value, this.y / value); },\r\n scaleBy(value) { return new L.Point(this.x * value.x, this.y * value.y); },\r\n unscaleBy(value) { return new L.Point(this.x / value.x, this.y / value.y); },\r\n round() { return new L.Point(Math.round(this.x), Math.round(this.y)); },\r\n floor() { return new L.Point(Math.floor(this.x), Math.floor(this.y)); },\r\n ceil() { return new L.Point(Math.ceil(this.x), Math.ceil(this.y)); },\r\n distanceTo(value) { value = point(value); return Math.hypot(this.x - value.x, this.y - value.y); },\r\n equals(value) { value = point(value); return this.x === value.x && this.y === value.y; },\r\n contains(value) { value = point(value); return Math.abs(value.x) <= Math.abs(this.x) && Math.abs(value.y) <= Math.abs(this.y); },\r\n };\r\n L.LatLng = function (lat, lng, alt) {\r\n if (!Number.isFinite(Number(lat)) || !Number.isFinite(Number(lng))) throw new Error('Invalid LatLng');\r\n this.lat = Number(lat); this.lng = Number(lng);\r\n if (alt !== undefined) this.alt = alt;\r\n };\r\n const latLng = value => value instanceof L.LatLng ? value\r\n : Array.isArray(value) ? new L.LatLng(...value) : new L.LatLng(value.lat, value.lng);\r\n L.LatLng.prototype = {\r\n equals(value, margin = 1e-9) {\r\n value = latLng(value);\r\n return Math.max(Math.abs(this.lat - value.lat), Math.abs(this.lng - value.lng)) <= margin;\r\n },\r\n distanceTo(value) { value = latLng(value); return ol.sphere.getDistance([this.lng, this.lat], [value.lng, value.lat]); },\r\n wrap() { return new L.LatLng(this.lat, ((this.lng + 180) % 360 + 360) % 360 - 180, this.alt); },\r\n };\r\n L.Bounds = function (a, b) {\r\n if (a) for (const value of b ? [a, b] : Array.isArray(a) ? a : [a]) this.extend(value);\r\n };\r\n L.Bounds.prototype = {\r\n extend(value) {\r\n if (value instanceof L.Bounds) { this.extend(value.min); this.extend(value.max); return this; }\r\n value = point(value);\r\n if (!this.min) { this.min = value.clone(); this.max = value.clone(); }\r\n else {\r\n this.min.x = Math.min(this.min.x, value.x); this.min.y = Math.min(this.min.y, value.y);\r\n this.max.x = Math.max(this.max.x, value.x); this.max.y = Math.max(this.max.y, value.y);\r\n }\r\n return this;\r\n },\r\n getCenter() { return this.min.add(this.max).divideBy(2); },\r\n getSize() { return this.max.subtract(this.min); },\r\n contains(value) {\r\n const min = value.min || point(value), max = value.max || min;\r\n return min.x >= this.min.x && max.x <= this.max.x && min.y >= this.min.y && max.y <= this.max.y;\r\n },\r\n intersects(value) {\r\n return value.max.x >= this.min.x && value.min.x <= this.max.x && value.max.y >= this.min.y && value.min.y <= this.max.y;\r\n },\r\n };\r\n L.LatLngBounds = function (a, b) {\r\n if (a) for (const value of b ? [a, b] : a) this.extend(value);\r\n };\r\n L.LatLngBounds.prototype = {\r\n extend(value) {\r\n if (value instanceof L.LatLngBounds) { this.extend(value._southWest); this.extend(value._northEast); return this; }\r\n value = latLng(value);\r\n if (!this._southWest) {\r\n this._southWest = new L.LatLng(value.lat, value.lng);\r\n this._northEast = new L.LatLng(value.lat, value.lng);\r\n } else {\r\n this._southWest.lat = Math.min(this._southWest.lat, value.lat);\r\n this._southWest.lng = Math.min(this._southWest.lng, value.lng);\r\n this._northEast.lat = Math.max(this._northEast.lat, value.lat);\r\n this._northEast.lng = Math.max(this._northEast.lng, value.lng);\r\n }\r\n return this;\r\n },\r\n getSouthWest() { return this._southWest; },\r\n getNorthEast() { return this._northEast; },\r\n getNorthWest() { return new L.LatLng(this.getNorth(), this.getWest()); },\r\n getSouthEast() { return new L.LatLng(this.getSouth(), this.getEast()); },\r\n getNorth() { return this._northEast.lat; },\r\n getSouth() { return this._southWest.lat; },\r\n getEast() { return this._northEast.lng; },\r\n getWest() { return this._southWest.lng; },\r\n getCenter() { return new L.LatLng((this.getNorth() + this.getSouth()) / 2, (this.getEast() + this.getWest()) / 2); },\r\n contains(value) {\r\n value = latLng(value);\r\n return value.lat >= this.getSouth() && value.lat <= this.getNorth() && value.lng >= this.getWest() && value.lng <= this.getEast();\r\n },\r\n isValid() { return Boolean(this._southWest && this._northEast); },\r\n };\r\n\r\n const radius = 6378137, circumference = 2 * Math.PI * radius;\r\n const crs = {\r\n scale: zoom => 256 * 2 ** zoom,\r\n zoom: scale => Math.log2(scale / 256),\r\n project(value) { value = latLng(value); return point(ol.proj.fromLonLat([value.lng, Math.max(-85.0511287798, Math.min(85.0511287798, value.lat))])); },\r\n unproject(value) { const [lng, lat] = ol.proj.toLonLat([value.x, value.y]); return new L.LatLng(lat, lng); },\r\n transformation: {\r\n transform(value, scale) { return new L.Point((value.x / circumference + 0.5) * scale, (0.5 - value.y / circumference) * scale); },\r\n untransform(value, scale) { return new L.Point((value.x / scale - 0.5) * circumference, (0.5 - value.y / scale) * circumference); },\r\n },\r\n };\r\n\r\n L.DomUtil = {\r\n create(tag, className = '', parent) {\r\n const element = document.createElement(tag);\r\n element.className = className; parent?.append(element); return element;\r\n },\r\n setPosition(element, value) { element._leaflet_pos = point(value); element.style.transform = `translate(${value.x}px,${value.y}px)`; },\r\n getPosition(element) { return element._leaflet_pos || new L.Point(0, 0); },\r\n };\r\n const domListeners = new WeakMap();\r\n function domEvent(add, element, types, fn, context) {\r\n if (typeof types === 'object') {\r\n for (const [type, handler] of Object.entries(types)) domEvent(add, element, type, handler, fn);\r\n return L.DomEvent;\r\n }\r\n let listeners = domListeners.get(element);\r\n if (!listeners) domListeners.set(element, listeners = []);\r\n for (const type of types.split(/\\s+/)) {\r\n const existing = listeners.find(item => item.type === type && item.fn === fn && item.context === context);\r\n if (add && !existing) {\r\n const handler = context ? fn.bind(context) : fn;\r\n listeners.push({ type, fn, context, handler });\r\n element.addEventListener(type, handler, { passive: false });\r\n } else if (!add && existing) {\r\n element.removeEventListener(type, existing.handler);\r\n listeners.splice(listeners.indexOf(existing), 1);\r\n }\r\n }\r\n return L.DomEvent;\r\n }\r\n const stopPropagation = event => event.stopPropagation();\r\n L.DomEvent = {\r\n on: (...args) => domEvent(true, ...args),\r\n off: (...args) => domEvent(false, ...args),\r\n stop(event) { event.preventDefault(); event.stopPropagation(); },\r\n disableClickPropagation(element) {\r\n element.classList.add('leaflet-control');\r\n L.DomEvent.on(element, 'click dblclick pointerdown mousedown touchstart contextmenu', stopPropagation);\r\n return this;\r\n },\r\n disableScrollPropagation(element) { return this.on(element, 'wheel', stopPropagation); },\r\n };\r\n L.Handler = Class.extend({\r\n initialize(map) { this._map = map; },\r\n enable() { if (!this._enabled) { this._enabled = true; this.addHooks?.(); } return this; },\r\n disable() { if (this._enabled) { this._enabled = false; this.removeHooks?.(); } return this; },\r\n enabled() { return Boolean(this._enabled); },\r\n moving() { return Boolean(this._moving); },\r\n });\r\n L.Layer = L.Evented.extend({\r\n initialize(options) { setOptions(this, options); },\r\n addTo(map) { map.addLayer(this); return this; },\r\n remove() { return this.removeFrom(this._map || this._mapToAdd); },\r\n removeFrom(map) { map?.removeLayer(this); return this; },\r\n getAttribution() { return this.options.attribution; },\r\n getPane(name) { return this._map.getPane(name || this.options.pane); },\r\n _layerAdd({ target: map }) {\r\n if (!map.hasLayer(this)) return;\r\n this._map = map;\r\n if (this.getEvents) { this._mapEvents = this.getEvents(); map.on(this._mapEvents, this); }\r\n this.onAdd?.(map);\r\n this.fire('add'); map.fire('layeradd', { layer: this });\r\n },\r\n });\r\n L.LayerGroup = L.Layer.extend({\r\n initialize(layers = [], options) {\r\n setOptions(this, options); this._layers = {};\r\n for (const layer of layers) this.addLayer(layer);\r\n },\r\n addLayer(layer) { this._layers[stamp(layer)] = layer; this._map?.addLayer(layer); return this; },\r\n removeLayer(layer) { delete this._layers[stamp(layer)]; this._map?.removeLayer(layer); return this; },\r\n hasLayer(layer) { return stamp(layer) in this._layers; },\r\n eachLayer(fn, context) { for (const layer of Object.values(this._layers)) fn.call(context || this, layer); return this; },\r\n onAdd(map) { this.eachLayer(map.addLayer, map); },\r\n onRemove(map) { this.eachLayer(map.removeLayer, map); },\r\n });\r\n // Declare the hierarchy before the plugin installs its instanceof checks and hooks.\r\n for (const [name, parent] of [\r\n ['GridLayer', L.Layer], ['Marker', L.Layer], ['Path', L.Layer],\r\n ['Polyline', null], ['Polygon', null], ['CircleMarker', null], ['Circle', null],\r\n ['ImageOverlay', L.Layer], ['VideoOverlay', null], ['SVGOverlay', null],\r\n ['Popup', L.Layer], ['Tooltip', L.Layer], ['DivIcon', Class],\r\n ]) {\r\n const base = parent || ({ Polyline: L.Path, Polygon: L.Polyline, CircleMarker: L.Path,\r\n Circle: L.CircleMarker, VideoOverlay: L.ImageOverlay, SVGOverlay: L.ImageOverlay })[name];\r\n L[name] = base.extend({\r\n initialize() { throw new Error(`L.${name} is not supported by the OpenLayers bindings; use L.Layer with a source`); },\r\n getEvents() { return {}; },\r\n });\r\n }\r\n\r\n L.Map = L.Evented.extend({\r\n options: { crs, minZoom: 0, maxZoom: 24, zoomSnap: 1, touchZoom: true,\r\n scrollWheelZoom: true, keyboard: true, doubleClickZoom: true,\r\n wheelDebounceTime: 40, wheelPxPerZoomLevel: 60 },\r\n initialize(target, options) {\r\n setOptions(this, options);\r\n this._container = typeof target === 'string' ? document.getElementById(target) : target;\r\n if (!this._container) throw new Error('Map container not found');\r\n stamp(this._container);\r\n this._container.classList.add('openlayers-city-mapper');\r\n this._layers = {}; this._panes = {}; this._handlers = []; this._controls = new Set();\r\n const center = crs.project(this.options.center || [0, 0]);\r\n this.ol = new ol.Map({\r\n target: this._container, controls: [new ol.control.Zoom(), new ol.control.Attribution({collapsible: false })],\r\n interactions: [],\r\n view: new ol.View({ center: [center.x, center.y], zoom: this.options.zoom || 0,\r\n minZoom: this.getMinZoom(), maxZoom: this.getMaxZoom() }),\r\n });\r\n for (const control of this.ol.getControls().getArray()) {\r\n control.element.classList.add('leaflet-control');\r\n for (const button of control.element.querySelectorAll('button[title]')) button.setAttribute('aria-label', button.title);\r\n if (control instanceof ol.control.Zoom) {\r\n for (const [selector, delta] of [['.ol-zoom-in', 1], ['.ol-zoom-out', -1]]) {\r\n control.element.querySelector(selector).addEventListener('click', event => {\r\n L.DomEvent.stop(event);\r\n event.stopImmediatePropagation();\r\n this._zoomBy(delta * (event.shiftKey ? 3 : 1));\r\n }, true);\r\n }\r\n }\r\n }\r\n this._loaded = true;\r\n this._zoomAnimated = false;\r\n this.dragging = new L.Handler(this).enable();\r\n this.touchZoom = new L.Handler(this);\r\n if (this.options.touchZoom) this.touchZoom.enable();\r\n this._handlers.push(this.dragging, this.touchZoom);\r\n for (const name of ['scrollWheelZoom', 'keyboard', 'doubleClickZoom']) this.addHandler(name, L.Handler);\r\n if (!this._container.hasAttribute('tabindex')) this._container.tabIndex = 0;\r\n const view = this.ol.getView();\r\n this._viewZoom = view.getZoom();\r\n view.on(['change:center', 'change:resolution'], () => {\r\n if (this._settingView) return;\r\n const zoomChanged = view.getZoom() !== this._viewZoom;\r\n if (!this._viewMoving) { this._viewMoving = true; this.fire('movestart'); }\r\n if (zoomChanged && !this._viewZooming) { this._viewZooming = true; this.fire('zoomstart'); }\r\n this.fire('move');\r\n if (zoomChanged) this.fire('zoom');\r\n this._viewZoom = view.getZoom();\r\n if (!view.getAnimating() && !view.getInteracting()) this._endViewChange();\r\n });\r\n this.ol.on('moveend', () => this._endViewChange());\r\n // OpenLayers interactions need the pitched ground coordinate, not the flat viewport.\r\n this.ol.getCoordinateFromPixel = pixel => {\r\n const coordinate = crs.project(this.containerPointToLatLng(point(pixel)));\r\n return [coordinate.x, coordinate.y];\r\n };\r\n this._wheelDelta = 0;\r\n this.ol.addInteraction(new ol.interaction.Interaction({\r\n handleEvent: event => {\r\n const original = event.originalEvent;\r\n if (original.target.closest('.ol-control')) return true;\r\n if (event.type === 'dblclick' && this.doubleClickZoom.enabled()) {\r\n this._zoomBy(original.shiftKey ? -1 : 1, point(event.pixel));\r\n } else if (event.type === 'wheel' && this.scrollWheelZoom.enabled() && !original.shiftKey) {\r\n const ratio = window.devicePixelRatio || 1;\r\n const factor = /Linux/.test(navigator.platform) && /Chrome/.test(navigator.userAgent) ? ratio\r\n : /Mac/.test(navigator.platform) ? 3 * ratio : 2 * ratio;\r\n this._wheelDelta -= original.deltaY * (original.deltaMode === 1 ? 20\r\n : original.deltaMode === 2 ? 60 : 1 / factor);\r\n this._wheelPixel = point(event.pixel);\r\n this._wheelStart ??= performance.now();\r\n clearTimeout(this._wheelTimer);\r\n this._wheelTimer = setTimeout(() => {\r\n const magnitude = 4 * Math.log2(2 / (1 + Math.exp(-Math.abs(this._wheelDelta /\r\n (this.options.wheelPxPerZoomLevel * 4)))));\r\n const snap = this.options.zoomSnap;\r\n const delta = Math.sign(this._wheelDelta) * (snap ? Math.ceil(magnitude / snap) * snap : magnitude);\r\n this._wheelDelta = 0;\r\n this._wheelStart = null;\r\n if (this._loaded && this.scrollWheelZoom.enabled()) this._zoomBy(delta,\r\n this.options.scrollWheelZoom === 'center' ? undefined : this._wheelPixel);\r\n }, Math.max(0, this.options.wheelDebounceTime - (performance.now() - this._wheelStart)));\r\n } else return true;\r\n original.preventDefault();\r\n return false;\r\n },\r\n }));\r\n this._controlCorners = {};\r\n for (const position of ['topleft', 'topright', 'bottomleft', 'bottomright']) {\r\n this._controlCorners[position] = L.DomUtil.create('div',\r\n `ol-city-corner ol-city-${position}`, this.ol.getOverlayContainerStopEvent());\r\n }\r\n const attributionSource = new ol.source.Vector();\r\n this.ol.addLayer(new ol.layer.Vector({ source: attributionSource }));\r\n const updateAttribution = () => {\r\n const values = new Set(['<a href=\"https://openlayers.org/\">OpenLayers</a>']);\r\n this.eachLayer(layer => { if (layer.getAttribution?.()) values.add(layer.getAttribution()); });\r\n attributionSource.setAttributions([...values]);\r\n };\r\n this.on('layeradd layerremove', updateAttribution);\r\n updateAttribution();\r\n let anchor, pointerId;\r\n const pixel = event => {\r\n const rect = this._container.getBoundingClientRect();\r\n return new L.Point(event.clientX - rect.left, event.clientY - rect.top);\r\n };\r\n this._onPointer = event => {\r\n if (event.type === 'pointerdown') {\r\n if (!this.dragging.enabled() || event.button !== 0 || !event.isPrimary || event.target.closest('.ol-control')) return;\r\n anchor = this.containerPointToLatLng(pixel(event)); pointerId = event.pointerId;\r\n this._moved = this.dragging._moving = false;\r\n this._container.focus({ preventScroll: true });\r\n this._container.setPointerCapture(pointerId);\r\n } else if (event.pointerId === pointerId && event.type === 'pointermove' && this.dragging.enabled()) {\r\n const delta = this.project(anchor).subtract(this.project(this.containerPointToLatLng(pixel(event))));\r\n if (Math.hypot(delta.x, delta.y) > 1) this._moved = this.dragging._moving = true;\r\n this.setView(this.unproject(this.project(this.getCenter()).add(delta)), this.getZoom());\r\n } else if (event.pointerId === pointerId && event.type !== 'pointermove') {\r\n if (this._container.hasPointerCapture(pointerId)) this._container.releasePointerCapture(pointerId);\r\n anchor = null; pointerId = null;\r\n this.dragging._moving = false;\r\n }\r\n };\r\n this._onKey = event => {\r\n if (!this.keyboard.enabled() || event.target !== this._container || event.altKey || event.ctrlKey || event.metaKey) return;\r\n const offsets = { ArrowLeft: [-80, 0], ArrowRight: [80, 0], ArrowUp: [0, -80], ArrowDown: [0, 80] };\r\n if (offsets[event.key]) this.panBy(offsets[event.key]);\r\n else if (['+', '=', '-', '_'].includes(event.key)) this._zoomBy(\r\n (['-', '_'].includes(event.key) ? -1 : 1) * (event.shiftKey ? 3 : 1));\r\n else return;\r\n event.preventDefault();\r\n };\r\n L.DomEvent.on(this._container, 'pointerdown pointermove pointerup pointercancel', this._onPointer);\r\n L.DomEvent.on(this._container, 'keydown', this._onKey);\r\n this.ol.on('change:size', () => this.fire('resize', { newSize: this.getSize() }));\r\n this.ol.updateSize();\r\n },\r\n getContainer() { return this._container; },\r\n getSize() { return point(this.ol.getSize() || [this._container.clientWidth, this._container.clientHeight]); },\r\n getCenter() { return crs.unproject(point(this.ol.getView().getCenter())); },\r\n getZoom() { return this.ol.getView().getZoom(); },\r\n getMinZoom() { return this.options.minZoom; },\r\n getMaxZoom() { return this.options.maxZoom; },\r\n getZoomScale(to, from = this.getZoom()) { return 2 ** (to - from); },\r\n getScaleZoom(scale, from = this.getZoom()) { return from + Math.log2(scale); },\r\n _limitZoom(zoom) { return Math.max(this.getMinZoom(), Math.min(this.getMaxZoom(), zoom)); },\r\n project(value, zoom = this.getZoom()) { return crs.transformation.transform(crs.project(value), crs.scale(zoom)); },\r\n unproject(value, zoom = this.getZoom()) { return crs.unproject(crs.transformation.untransform(point(value), crs.scale(zoom))); },\r\n getPixelOrigin() { return this.project(this.getCenter()).subtract(this.getSize().divideBy(2)); },\r\n _getMapPanePos() { return new L.Point(0, 0); },\r\n latLngToLayerPoint(value) { return this.project(value).subtract(this.getPixelOrigin()); },\r\n layerPointToLatLng(value) { return this.unproject(point(value).add(this.getPixelOrigin())); },\r\n layerPointToContainerPoint(value) { return point(value).clone(); },\r\n containerPointToLayerPoint(value) { return point(value).clone(); },\r\n latLngToContainerPoint(value) { return this.layerPointToContainerPoint(this.latLngToLayerPoint(value)); },\r\n containerPointToLatLng(value) { return this.layerPointToLatLng(this.containerPointToLayerPoint(value)); },\r\n getBounds() { return new L.LatLngBounds(this.containerPointToLatLng([0, 0]), this.containerPointToLatLng(this.getSize())); },\r\n _endViewChange() {\r\n if (!this._viewMoving) return;\r\n const zooming = this._viewZooming;\r\n this._viewMoving = this._viewZooming = false;\r\n if (zooming) this.fire('zoomend');\r\n this.fire('moveend');\r\n },\r\n _zoomBy(delta, pixel) {\r\n if (!delta || this.ol.getView().getAnimating()) return this;\r\n const zoom = this._limitZoom(this.getZoom() + delta);\r\n return pixel ? this.setZoomAround(pixel, zoom, { animate: true })\r\n : this.setZoom(zoom, { animate: true });\r\n },\r\n setView(center, zoom = this.getZoom(), options = {}) {\r\n center = latLng(center); zoom = this._limitZoom(zoom);\r\n if ((options.animate === true || options.zoom?.animate === true) && zoom !== this.getZoom()) {\r\n const scale = this.getZoomScale(zoom), projected = crs.project(center);\r\n // Leaflet animates CSS scale, not resolution; convert the same native CSS easing.\r\n this.ol.getView().animate({\r\n center: [projected.x, projected.y], zoom, duration: 250,\r\n easing: time => {\r\n zoomTiming.currentTime = time;\r\n const progress = zoomTiming.effect.getComputedTiming().progress;\r\n return (1 - 1 / (1 + (scale - 1) * progress)) / (1 - 1 / scale);\r\n },\r\n });\r\n return this;\r\n }\r\n this.ol.getView().cancelAnimations();\r\n this._endViewChange();\r\n const zoomChanged = zoom !== this.getZoom(), moved = !center.equals(this.getCenter());\r\n if (!zoomChanged && !moved) return this;\r\n this.fire('movestart');\r\n if (zoomChanged) this.fire('zoomstart');\r\n this._settingView = true;\r\n const projected = crs.project(center);\r\n this.ol.getView().setCenter([projected.x, projected.y]);\r\n this.ol.getView().setZoom(zoom);\r\n this._viewZoom = this.getZoom();\r\n this._settingView = false;\r\n if (zoomChanged) this.fire('zoom');\r\n this.fire('move').fire('viewreset');\r\n if (zoomChanged) this.fire('zoomend');\r\n return this.fire('moveend');\r\n },\r\n setZoom(zoom, options) { return this.setView(this.getCenter(), zoom, options); },\r\n panTo(center) { return this.setView(center); },\r\n panBy(offset) { return this.panTo(this.unproject(this.project(this.getCenter()).add(point(offset)))); },\r\n setZoomAround(value, zoom, options) {\r\n const anchor = value instanceof L.Point ? value : this.latLngToContainerPoint(value);\r\n const half = this.getSize().divideBy(2), scale = this.getZoomScale(zoom);\r\n return this.setView(this.unproject(this.project(this.getCenter()).add(anchor.subtract(half).multiplyBy(1 - 1 / scale))), zoom, options);\r\n },\r\n getBoundsZoom(bounds, inside, padding = [0, 0]) {\r\n const size = this.project(bounds.getSouthEast()).subtract(this.project(bounds.getNorthWest()));\r\n const available = this.getSize().subtract(point(padding));\r\n const scale = Math[inside ? 'max' : 'min'](available.x / size.x, available.y / size.y);\r\n return this._limitZoom(this.getScaleZoom(scale));\r\n },\r\n _getBoundsCenterZoom(bounds, options = {}) { return { center: bounds.getCenter(), zoom: this.getBoundsZoom(bounds, false, options.padding) }; },\r\n fitBounds(bounds, options) { const view = this._getBoundsCenterZoom(bounds, options); return this.setView(view.center, view.zoom); },\r\n _limitCenter(center) { return center; },\r\n _limitOffset(offset) { return offset; },\r\n _tryAnimatedPan() { return false; },\r\n panInside(value) { if (!this.getBounds().contains(value)) this.panTo(value); return this; },\r\n whenReady(fn, context) { if (this._loaded) fn.call(context || this, { target: this }); else this.once('load', fn, context); return this; },\r\n addLayer(layer) {\r\n const id = stamp(layer);\r\n if (this._layers[id]) return this;\r\n this._layers[id] = layer; layer._mapToAdd = this;\r\n layer.beforeAdd?.(this);\r\n this.whenReady(layer._layerAdd, layer);\r\n return this;\r\n },\r\n removeLayer(layer) {\r\n if (!this.hasLayer(layer)) return this;\r\n layer.onRemove?.(this);\r\n if (layer._mapEvents) this.off(layer._mapEvents, layer);\r\n delete this._layers[stamp(layer)];\r\n this.fire('layerremove', { layer }); layer.fire('remove');\r\n layer._map = layer._mapToAdd = null;\r\n return this;\r\n },\r\n hasLayer(layer) { return Boolean(this._layers[stamp(layer)]); },\r\n eachLayer(fn, context) { for (const layer of Object.values(this._layers)) fn.call(context || this, layer); return this; },\r\n createPane(name, parent = this._container) { return this._panes[name] = L.DomUtil.create('div', `leaflet-pane leaflet-${name}`, parent); },\r\n getPane(name = 'overlayPane') { return this._panes[name]; },\r\n addHandler(name, Handler) { this[name] = new Handler(this); this._handlers.push(this[name]); if (this.options[name]) this[name].enable(); return this; },\r\n invalidateSize() { this.ol.updateSize(); return this; },\r\n _draggableMoved() { return Boolean(this._moved); },\r\n remove() {\r\n clearTimeout(this._wheelTimer);\r\n this.ol.getView().cancelAnimations();\r\n this.fire('unload');\r\n for (const control of [...this._controls]) control.remove();\r\n this.eachLayer(this.removeLayer, this);\r\n for (const handler of this._handlers) handler.disable();\r\n L.DomEvent.off(this._container, 'pointerdown pointermove pointerup pointercancel', this._onPointer);\r\n L.DomEvent.off(this._container, 'keydown', this._onKey);\r\n this.ol.setTarget(undefined); this.ol.dispose();\r\n for (const corner of Object.values(this._controlCorners)) corner.remove();\r\n for (const pane of Object.values(this._panes)) pane.remove();\r\n this._loaded = false;\r\n delete this._container._leaflet_id;\r\n return this.off();\r\n },\r\n });\r\n\r\n L.Control = Class.extend({\r\n options: { position: 'topright' },\r\n initialize(options) { setOptions(this, options); },\r\n getPosition() { return this.options.position; },\r\n getContainer() { return this._container; },\r\n addTo(map) {\r\n this.remove(); this._map = map;\r\n this._container = this.onAdd(map);\r\n if (L.Control.Rotate && this instanceof L.Control.Rotate) {\r\n this._container.classList.add('ol-city-rotate');\r\n }\r\n this._container.classList.add('leaflet-control', 'ol-control', 'ol-city-control');\r\n this._olControl = new ol.control.Control({\r\n element: this._container, target: map._controlCorners[this.getPosition()],\r\n });\r\n map.ol.addControl(this._olControl);\r\n map._controls.add(this);\r\n return this;\r\n },\r\n remove() {\r\n if (!this._map) return this;\r\n const map = this._map;\r\n this.onRemove?.(map); this._container?.remove();\r\n map.ol.removeControl(this._olControl);\r\n map._controls.delete(this); this._map = null;\r\n return this;\r\n },\r\n });\r\n L.Control.Layers = L.Control.extend({\r\n options: { collapsed: true },\r\n initialize(base = {}, overlays = {}, options) {\r\n setOptions(this, options); this._layers = [];\r\n for (const [name, layer] of Object.entries(base)) this._layers.push({ name, layer, overlay: false });\r\n for (const [name, layer] of Object.entries(overlays)) this._layers.push({ name, layer, overlay: true });\r\n },\r\n onAdd(map) {\r\n const container = L.DomUtil.create('div', 'ol-city-layers');\r\n L.DomEvent.disableClickPropagation(container); L.DomEvent.disableScrollPropagation(container);\r\n const list = L.DomUtil.create('section', '', container);\r\n list.setAttribute('aria-label', 'Map layers');\r\n const base = L.DomUtil.create('div', '', list);\r\n L.DomUtil.create('hr', '', list);\r\n const overlays = L.DomUtil.create('div', '', list);\r\n this._inputs = [];\r\n for (const entry of this._layers) {\r\n const label = L.DomUtil.create('label', '', entry.overlay ? overlays : base);\r\n const input = L.DomUtil.create('input', 'leaflet-control-layers-selector', label);\r\n input.type = entry.overlay ? 'checkbox' : 'radio';\r\n input.name = `base-${stamp(this)}`; input.layerId = stamp(entry.layer);\r\n input.checked = map.hasLayer(entry.layer);\r\n label.append(document.createTextNode(` ${entry.name}`));\r\n this._inputs.push(input);\r\n input.onchange = () => {\r\n const checked = input.checked;\r\n if (!entry.overlay) for (const other of this._layers) {\r\n if (!other.overlay && other !== entry) map.removeLayer(other.layer);\r\n }\r\n if (checked) map.addLayer(entry.layer); else map.removeLayer(entry.layer);\r\n };\r\n }\r\n map.on('layeradd layerremove', this._update, this);\r\n return container;\r\n },\r\n _update() { for (const input of this._inputs) input.checked = Boolean(this._map._layers[input.layerId]); },\r\n onRemove(map) { map.off('layeradd layerremove', this._update, this); },\r\n });\r\n\r\n // Native layer contracts consumed by the plugin's WebGPU renderer.\r\n const bounds = value => value instanceof L.LatLngBounds ? value : new L.LatLngBounds(value);\r\n const coordinates = values => values.map(value => Array.isArray(value) && typeof value[0] !== 'number'\r\n ? coordinates(value) : latLng(value));\r\n const image = (url, options, className) => {\r\n const element = document.createElement('img');\r\n element.className = className;\r\n if (options.crossOrigin) element.crossOrigin = options.crossOrigin === true ? '' : options.crossOrigin;\r\n element.src = url;\r\n element.draggable = false;\r\n return element;\r\n };\r\n\r\n L.Layer.include({\r\n bindPopup(content) {\r\n this._popupContent = content;\r\n this.off('click', this.openPopup, this).on('click', this.openPopup, this);\r\n this.once('remove', this.closePopup, this);\r\n if (this instanceof L.LayerGroup) this.eachLayer(layer => layer.bindPopup(content));\r\n return this;\r\n },\r\n openPopup(event) {\r\n if (!this._map) return this;\r\n this.closePopup();\r\n const location = event?.latlng || this.getLatLng?.() || this.getBounds?.().getCenter();\r\n if (!location) throw new Error('Popup requires a location');\r\n const element = L.DomUtil.create('div', 'ol-city-popup leaflet-popup');\r\n element.setAttribute('role', 'dialog');\r\n const close = L.DomUtil.create('button', '', element);\r\n close.type = 'button'; close.textContent = '\\u00d7'; close.setAttribute('aria-label', 'Close popup');\r\n close.onclick = () => this.closePopup();\r\n const content = L.DomUtil.create('div', '', element);\r\n const value = typeof this._popupContent === 'function' ? this._popupContent(this) : this._popupContent;\r\n if (value instanceof Node) content.append(value); else content.innerHTML = value;\r\n L.DomEvent.disableClickPropagation(element);\r\n this._popupOverlay = new ol.Overlay({ element, positioning: 'bottom-center', offset: [0, -12] });\r\n this._map.ol.addOverlay(this._popupOverlay);\r\n this._popupLocation = latLng(location);\r\n this._map.on('move zoom rotate pitch', this._positionPopup, this);\r\n this._positionPopup();\r\n return this;\r\n },\r\n _positionPopup() {\r\n const screen = this._map.latLngToContainerPoint(this._popupLocation);\r\n this._popupOverlay.setPosition(this._map.ol.getCoordinateFromPixelInternal([screen.x, screen.y]));\r\n },\r\n closePopup() {\r\n if (this._popupOverlay) {\r\n this._map?.off('move zoom rotate pitch', this._positionPopup, this);\r\n this._map?.ol.removeOverlay(this._popupOverlay);\r\n this._popupOverlay = null;\r\n }\r\n return this;\r\n },\r\n bindTooltip(content) {\r\n this._tooltipContent = content;\r\n this.on('mouseover', this._showTooltip, this).on('mouseout remove', this._hideTooltip, this);\r\n if (this instanceof L.LayerGroup) this.eachLayer(layer => layer.bindTooltip(content));\r\n return this;\r\n },\r\n _showTooltip(event) {\r\n this._hideTooltip();\r\n if (!this._map || !event.latlng) return;\r\n const element = this._tooltipElement = L.DomUtil.create('div', 'ol-city-tooltip leaflet-tooltip', this._map.getContainer());\r\n element.setAttribute('role', 'tooltip');\r\n const value = typeof this._tooltipContent === 'function' ? this._tooltipContent(this) : this._tooltipContent;\r\n if (value instanceof Node) element.append(value); else element.innerHTML = value;\r\n const pixel = this._map.latLngToContainerPoint(event.latlng);\r\n element.style.left = `${pixel.x + 12}px`; element.style.top = `${pixel.y + 12}px`;\r\n },\r\n _hideTooltip() { this._tooltipElement?.remove(); this._tooltipElement = null; },\r\n });\r\n L.LayerGroup.include({\r\n getLayers() { return Object.values(this._layers); },\r\n getBounds() {\r\n const result = new L.LatLngBounds();\r\n this.eachLayer(layer => result.extend(layer.getBounds?.() || layer.getLatLng()));\r\n return result;\r\n },\r\n });\r\n L.FeatureGroup = L.LayerGroup.extend({});\r\n\r\n L.Path.include({\r\n options: { pane: 'overlayPane', interactive: true, stroke: true, color: '#3388ff',\r\n weight: 3, opacity: 1, lineCap: 'round', lineJoin: 'round', fill: false, fillOpacity: 0.2 },\r\n initialize(options) { L.Util.setOptions(this, options); },\r\n setStyle(options) { L.Util.setOptions(this, options); return this.redraw(); },\r\n redraw() { return this; },\r\n bringToFront() { return this; },\r\n bringToBack() { return this; },\r\n });\r\n L.Polyline.include({\r\n initialize(values, options) { L.Util.setOptions(this, options); this.setLatLngs(values); },\r\n getLatLngs() { return this._latlngs; },\r\n setLatLngs(values) { this._latlngs = coordinates(values); return this.redraw(); },\r\n addLatLng(value) { this._latlngs.push(latLng(value)); return this.redraw(); },\r\n getBounds() {\r\n const result = new L.LatLngBounds();\r\n const visit = values => { for (const value of values) Array.isArray(value) ? visit(value) : result.extend(value); };\r\n visit(this._latlngs);\r\n return result;\r\n },\r\n _project() {\r\n this._rings = [];\r\n const visit = values => {\r\n if (!values.length) return;\r\n if (Array.isArray(values[0])) values.forEach(visit);\r\n else this._rings.push(values.map(value => this._map.latLngToLayerPoint(value)));\r\n };\r\n visit(this._latlngs);\r\n },\r\n closestLayerPoint(value) {\r\n this._project();\r\n const paths = this._rings.map(ring => ring.map(value => [value.x, value.y]));\r\n const closest = new ol.geom.MultiLineString(paths).getClosestPoint([value.x, value.y]);\r\n return point(closest);\r\n },\r\n });\r\n L.Polyline.mergeOptions(L.Path.prototype.options);\r\n L.Polygon.include({ initialize: L.Polyline.prototype.initialize });\r\n L.Polygon.mergeOptions(L.Path.prototype.options);\r\n L.Polygon.mergeOptions({ fill: true });\r\n L.Rectangle = L.Polygon.extend({\r\n initialize(value, options) { L.Util.setOptions(this, options); this.setBounds(value); },\r\n setBounds(value) {\r\n value = bounds(value);\r\n return this.setLatLngs([value.getSouthWest(), value.getNorthWest(), value.getNorthEast(), value.getSouthEast()]);\r\n },\r\n });\r\n L.CircleMarker.include({\r\n options: { ...L.Path.prototype.options, fill: true, radius: 10 },\r\n initialize(value, options) { L.Util.setOptions(this, options); this._latlng = latLng(value); },\r\n getLatLng() { return this._latlng; },\r\n setLatLng(value) { this._latlng = latLng(value); this.fire('move', { latlng: this._latlng }); return this.redraw(); },\r\n getRadius() { return this.options.radius; },\r\n setRadius(radius) { this.options.radius = radius; return this.redraw(); },\r\n });\r\n L.Circle.include({\r\n initialize: L.CircleMarker.prototype.initialize,\r\n _project() {\r\n this._point = this._map.latLngToLayerPoint(this._latlng);\r\n this._radius = this._radiusY = this.getRadius() * this._map.options.crs.scale(this._map.getZoom()) /\r\n (2 * Math.PI * 6378137 * Math.cos(this._latlng.lat * Math.PI / 180));\r\n },\r\n getBounds() {\r\n const north = this.getRadius() / 6378137 * 180 / Math.PI;\r\n const east = north / Math.cos(this._latlng.lat * Math.PI / 180);\r\n return new L.LatLngBounds([this._latlng.lat - north, this._latlng.lng - east],\r\n [this._latlng.lat + north, this._latlng.lng + east]);\r\n },\r\n });\r\n L.Circle.mergeOptions(L.CircleMarker.prototype.options);\r\n L.GeoJSON = L.FeatureGroup.extend({\r\n initialize(data, options) {\r\n L.LayerGroup.prototype.initialize.call(this, [], options);\r\n if (data) this.addData(data);\r\n },\r\n addData(data) {\r\n const features = new ol.format.GeoJSON().readFeatures(data);\r\n const convert = (geometry, feature) => {\r\n const values = geometry.getCoordinates();\r\n const locations = value => typeof value[0] === 'number' ? [value[1], value[0]] : value.map(locations);\r\n switch (geometry.getType()) {\r\n case 'Point': return this.options.pointToLayer\r\n ? this.options.pointToLayer(feature, latLng(locations(values))) : new L.Marker(locations(values));\r\n case 'MultiPoint': return new L.FeatureGroup(values.map(value => convert(new ol.geom.Point(value), feature)));\r\n case 'LineString': case 'MultiLineString': return new L.Polyline(locations(values), this.options);\r\n case 'Polygon': case 'MultiPolygon': return new L.Polygon(locations(values), this.options);\r\n default: throw new Error(`Unsupported GeoJSON geometry: ${geometry.getType()}`);\r\n }\r\n };\r\n for (const feature of features) {\r\n const layer = convert(feature.getGeometry(), new ol.format.GeoJSON().writeFeatureObject(feature));\r\n this.addLayer(layer);\r\n }\r\n return this;\r\n },\r\n });\r\n\r\n L.GridLayer.include({\r\n options: { pane: 'tilePane', tileSize: 256, opacity: 1, minZoom: 0, maxZoom: 24, updateInterval: 200 },\r\n initialize(options) { L.Util.setOptions(this, options); this._tiles = {}; },\r\n getTileSize() { return typeof this.options.tileSize === 'number'\r\n ? new L.Point(this.options.tileSize, this.options.tileSize) : point(this.options.tileSize); },\r\n getEvents() { return { moveend: this._onMoveEnd, zoomend: this._onMoveEnd, resize: this._onMoveEnd }; },\r\n _initContainer() { this._container = L.DomUtil.create('div', '', this.getPane()); },\r\n onAdd() { this._initContainer(); this._onMoveEnd(); },\r\n onRemove() {\r\n for (const tile of Object.values(this._tiles)) this.fire('tileunload', { tile: tile.el, coords: tile.coords });\r\n this._tiles = {}; this._container?.remove();\r\n },\r\n _getTiledPixelBounds() {\r\n return new L.Bounds(this._map.project(this._map.getBounds().getNorthWest(), this._tileZoom),\r\n this._map.project(this._map.getBounds().getSouthEast(), this._tileZoom));\r\n },\r\n _onMoveEnd() {\r\n if (!this._map) return;\r\n this._tileZoom = Math.max(this.options.minZoom, Math.min(this.options.maxZoom, Math.round(this._map.getZoom())));\r\n const size = this.getTileSize(), extent = this._getTiledPixelBounds(this._map.getCenter());\r\n const min = extent.min.unscaleBy(size).floor(), max = extent.max.unscaleBy(size).floor();\r\n const retained = new Set(), limit = 2 ** this._tileZoom;\r\n for (let x = min.x; x <= max.x; x++) for (let y = min.y; y <= max.y; y++) {\r\n if (y < 0 || y >= limit) continue;\r\n const key = `${this._tileZoom}:${x}:${y}`;\r\n retained.add(key);\r\n if (this._tiles[key]) continue;\r\n const coords = new L.Point(x, y); coords.z = this._tileZoom;\r\n const tile = this._tiles[key] = { coords, current: true, loaded: 0 };\r\n const done = (error, element) => {\r\n if (this._tiles[key] !== tile) return;\r\n tile.el = element;\r\n if (error) { this.fire('tileerror', { error, tile: element, coords }); return; }\r\n tile.loaded = Date.now();\r\n this.fire('tileload', { tile: element, coords });\r\n this.fire('load');\r\n };\r\n tile.el = this.createTile(coords, done);\r\n if (this.createTile.length < 2) done(null, tile.el);\r\n }\r\n for (const [key, tile] of Object.entries(this._tiles)) {\r\n if (retained.has(key)) continue;\r\n delete this._tiles[key];\r\n this.fire('tileunload', { tile: tile.el, coords: tile.coords });\r\n }\r\n },\r\n _tileCoordsToNwSe(coords) {\r\n const size = this.getTileSize(), nw = new L.Point(coords.x * size.x, coords.y * size.y);\r\n return [this._map.unproject(nw, coords.z), this._map.unproject(nw.add(size), coords.z)];\r\n },\r\n setOpacity(opacity) { this.options.opacity = opacity; return this; },\r\n setZIndex(zIndex) { this.options.zIndex = zIndex; return this; },\r\n redraw() { if (this._map) { this.onRemove(); this._onMoveEnd(); } return this; },\r\n });\r\n L.TileLayer = L.GridLayer.extend({\r\n initialize(url, options) {\r\n L.GridLayer.prototype.initialize.call(this, options); this.setUrl(url);\r\n },\r\n setUrl(url) { this._url = url; this._source = new ol.source.XYZ({ url, crossOrigin: 'anonymous' }); return this.redraw(); },\r\n createTile(coords, done) {\r\n const url = this._source.getTileUrlFunction()([coords.z, coords.x, coords.y], 1, ol.proj.get('EPSG:3857'));\r\n const tile = image(url, this.options, '');\r\n tile.onload = () => done(null, tile);\r\n tile.onerror = () => done(new Error(`Unable to load tile: ${url}`), tile);\r\n return tile;\r\n },\r\n });\r\n L.TileLayer.WMS = L.TileLayer.extend({\r\n setUrl(url) {\r\n this._url = url;\r\n this._source = new ol.source.TileWMS({ url, crossOrigin: 'anonymous', params: {\r\n LAYERS: this.options.layers, FORMAT: this.options.format || 'image/png',\r\n TRANSPARENT: this.options.transparent || false,\r\n } });\r\n return this.redraw();\r\n },\r\n });\r\n L.ImageOverlay.include({\r\n options: { pane: 'overlayPane', opacity: 1, interactive: false },\r\n initialize(url, value, options) { L.Util.setOptions(this, options); this._url = url; this._bounds = bounds(value); },\r\n _initImage() {\r\n this._image = image(this._url, this.options, '');\r\n this._image.onload = () => this.fire('load');\r\n this._image.onerror = () => this.fire('error', { error: new Error(`Unable to load image: ${this._url}`) });\r\n },\r\n getBounds() { return this._bounds; },\r\n setBounds(value) { this._bounds = bounds(value); return this; },\r\n setUrl(url) { this._url = url; if (this._image) this._image.src = url; return this; },\r\n setOpacity(opacity) { this.options.opacity = opacity; return this; },\r\n setZIndex(zIndex) { this.options.zIndex = zIndex; return this; },\r\n });\r\n\r\n L.Icon = L.Evented.extend({\r\n initialize(options) { L.Util.setOptions(this, options); },\r\n createIcon() { return this._create('icon'); },\r\n createShadow() { return this.options.shadowUrl ? this._create('shadow') : null; },\r\n _create(kind) {\r\n const element = image(this.options[`${kind}Url`], this.options, `leaflet-marker-${kind}`);\r\n const size = this.options[`${kind}Size`], anchor = this.options[`${kind}Anchor`] || this.options.iconAnchor;\r\n if (size) { element.style.width = `${size[0]}px`; element.style.height = `${size[1]}px`; }\r\n if (anchor) { element.style.marginLeft = `${-anchor[0]}px`; element.style.marginTop = `${-anchor[1]}px`; }\r\n return element;\r\n },\r\n });\r\n L.Icon.Default = L.Icon.extend({\r\n options: {\r\n iconUrl: 'https://unpkg.com/leaflet@1.9/dist/images/marker-icon.png',\r\n shadowUrl: 'https://unpkg.com/leaflet@1.9/dist/images/marker-shadow.png',\r\n iconSize: [25, 41], iconAnchor: [12, 41], shadowSize: [41, 41], shadowAnchor: [12, 41],\r\n },\r\n });\r\n L.DivIcon = L.Icon.extend({\r\n createIcon() {\r\n const element = L.DomUtil.create('div', `leaflet-marker-icon ${this.options.className || ''}`);\r\n if (this.options.html instanceof Node) element.append(this.options.html); else element.innerHTML = this.options.html || '';\r\n const size = this.options.iconSize || [12, 12], anchor = this.options.iconAnchor || size.map(value => value / 2);\r\n element.style.cssText = `width:${size[0]}px;height:${size[1]}px;margin-left:${-anchor[0]}px;margin-top:${-anchor[1]}px`;\r\n return element;\r\n },\r\n createShadow() { return null; },\r\n });\r\n L.Marker.include({\r\n options: { pane: 'markerPane', icon: new L.Icon.Default(), opacity: 1, interactive: true, zIndexOffset: 0 },\r\n initialize(value, options) { L.Util.setOptions(this, options); this._latlng = latLng(value); },\r\n getLatLng() { return this._latlng; },\r\n setLatLng(value) { this._latlng = latLng(value); this.update(); return this.fire('move', { latlng: this._latlng }); },\r\n setIcon(icon) { this.options.icon = icon; if (this._map) { this.onRemove(); this.onAdd(); } return this; },\r\n getEvents() { return { zoom: this.update, viewreset: this.update }; },\r\n onAdd() {\r\n this._icon = this.options.icon.createIcon(); this._shadow = this.options.icon.createShadow();\r\n this._icon.tabIndex = 0; this._icon.setAttribute('role', 'button');\r\n this._icon.setAttribute('aria-label', this.options.title || 'Marker');\r\n this._icon.title = this.options.title || '';\r\n for (const element of [this._shadow, this._icon]) if (element) this.getPane().append(element);\r\n this._initInteraction(); this.update();\r\n },\r\n onRemove() { this.dragging?.disable(); this._icon?.remove(); this._shadow?.remove(); },\r\n update() { if (this._map && this._icon) this._setPos(this._map.latLngToLayerPoint(this._latlng)); return this; },\r\n _setPos(value) {\r\n for (const element of [this._icon, this._shadow]) if (element) L.DomUtil.setPosition(element, value);\r\n this._zIndex = value.y + this.options.zIndexOffset; this._updateZIndex(0);\r\n },\r\n _updateZIndex(offset) { if (this._icon) this._icon.style.zIndex = this._zIndex + offset; },\r\n setOpacity(opacity) { this.options.opacity = opacity; return this; },\r\n setZIndexOffset(value) { this.options.zIndexOffset = value; return this.update(); },\r\n _initInteraction() {\r\n this._icon._cityLayer = this;\r\n const drag = this.dragging = new L.Handler(this._map);\r\n const icon = this._icon;\r\n L.DomEvent.on(icon, 'pointerdown', event => {\r\n this._map._moved = false;\r\n event.stopPropagation();\r\n });\r\n L.DomEvent.on(icon, 'keydown', event => {\r\n if (event.key !== 'Enter' && event.key !== ' ') return;\r\n L.DomEvent.stop(event);\r\n this.fire('click', { latlng: this._latlng, originalEvent: event });\r\n });\r\n drag._marker = this;\r\n drag._draggable = new L.Evented();\r\n drag._onDrag = function () {\r\n const marker = this._marker;\r\n marker._latlng = marker._map.layerPointToLatLng(L.DomUtil.getPosition(marker._icon));\r\n marker.fire('move', { latlng: marker._latlng }).fire('drag', { latlng: marker._latlng });\r\n };\r\n drag._adjustPan = function () {};\r\n drag._draggable.on('drag', drag._onDrag, drag);\r\n let pointer, anchor, origin, moved;\r\n const handle = event => {\r\n if (!drag.enabled()) return;\r\n if (event.type === 'pointerdown') {\r\n if (event.button !== 0) return;\r\n event.preventDefault(); event.stopPropagation();\r\n pointer = event.pointerId; anchor = [event.clientX, event.clientY];\r\n origin = this._map.latLngToContainerPoint(this._latlng); moved = false;\r\n icon.setPointerCapture(pointer);\r\n this.fire('dragstart');\r\n } else if (event.pointerId === pointer && event.type === 'pointermove') {\r\n const value = new L.Point(origin.x + event.clientX - anchor[0], origin.y + event.clientY - anchor[1]);\r\n L.DomUtil.setPosition(icon, value);\r\n drag._draggable._newPos = value;\r\n drag._draggable.fire('drag', { originalEvent: event });\r\n moved = true;\r\n } else if (event.pointerId === pointer) {\r\n if (icon.hasPointerCapture(pointer)) icon.releasePointerCapture(pointer);\r\n pointer = null; this.fire('dragend'); this._map._moved = moved;\r\n }\r\n };\r\n drag.addHooks = () => L.DomEvent.on(icon, 'pointerdown pointermove pointerup pointercancel', handle);\r\n drag.removeHooks = () => L.DomEvent.off(icon, 'pointerdown pointermove pointerup pointercancel', handle);\r\n if (this.options.draggable) drag.enable();\r\n },\r\n });\r\n\r\n L.Map.include({\r\n _fireDOMEvent(event, type = event.type, targets) {\r\n const rect = this.getContainer().getBoundingClientRect();\r\n const pixel = new L.Point(event.clientX - rect.left, event.clientY - rect.top);\r\n const location = this.containerPointToLatLng(pixel);\r\n const layer = event.target.closest?.('.leaflet-marker-icon')?._cityLayer;\r\n if (type === 'click' && this._draggableMoved(layer)) return;\r\n for (const target of targets || (layer ? [layer] : [this])) {\r\n target.fire(type, { originalEvent: event, latlng: location, containerPoint: pixel,\r\n layerPoint: this.containerPointToLayerPoint(pixel) });\r\n }\r\n },\r\n });\r\n L.Map.addInitHook(function () {\r\n for (const [name, order] of [['tilePane', 200], ['overlayPane', 400], ['markerPane', 600]]) {\r\n this.createPane(name).style.zIndex = order;\r\n }\r\n const handler = event => this._fireDOMEvent(event);\r\n L.DomEvent.on(this.getContainer(), 'click mousemove mouseout mouseover', handler);\r\n this.once('unload', () => L.DomEvent.off(this.getContainer(), 'click mousemove mouseout mouseover', handler));\r\n });\r\n})();\r\n"],
5
- "mappings": "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",
6
- "names": ["style", "L", "lastId", "stamp", "object", "setOptions", "options", "zoomTiming", "Class", "args", "properties", "Child", "hook", "prototypes", "proto", "types", "fn", "context", "type", "handler", "events", "event", "data", "interval", "timer", "pending", "run", "x", "y", "round", "point", "value", "lat", "lng", "alt", "latLng", "margin", "a", "b", "min", "max", "radius", "circumference", "crs", "zoom", "scale", "tag", "className", "parent", "element", "domListeners", "domEvent", "add", "listeners", "existing", "item", "stopPropagation", "map", "name", "layers", "layer", "base", "target", "center", "control", "button", "selector", "delta", "view", "zoomChanged", "pixel", "coordinate", "original", "ratio", "factor", "magnitude", "snap", "position", "attributionSource", "updateAttribution", "values", "anchor", "pointerId", "rect", "offsets", "to", "from", "zooming", "projected", "time", "progress", "moved", "offset", "half", "bounds", "inside", "padding", "size", "available", "id", "Handler", "corner", "pane", "overlays", "container", "list", "entry", "label", "input", "checked", "other", "coordinates", "image", "url", "content", "location", "close", "screen", "result", "visit", "paths", "ring", "closest", "north", "east", "features", "convert", "geometry", "feature", "locations", "tile", "extent", "retained", "limit", "key", "coords", "done", "error", "nw", "opacity", "zIndex", "kind", "icon", "drag", "marker", "pointer", "origin", "handle", "targets", "order"]
4
+ "sourcesContent": ["// Leaflet-compatible classes backed by OpenLayers. Load after ol.js and before the plugin.\r\n(() => {\r\n if (!window.ol) throw new Error('Unable to load OpenLayers');\r\n\r\n const style = document.createElement('style');\r\n style.dataset.openlayersBindings = '';\r\n style.textContent = `\r\n.openlayers-city-mapper {\r\n position: relative;\r\n overflow: hidden;\r\n touch-action: none;\r\n}\r\n.ol-viewport {\r\n position: absolute !important;\r\n inset: 0;\r\n}\r\n.ol-overlaycontainer-stopevent { z-index: 1000 !important; }\r\n.ol-city-corner {\r\n position: absolute;\r\n display: flex;\r\n flex-direction: column;\r\n gap: .5em;\r\n pointer-events: none;\r\n}\r\n.ol-city-topleft { top: 5em; left: .5em; }\r\n.ol-city-topright { top: 10px; right: 10px; }\r\n.ol-city-bottomleft { bottom: .5em; left: .5em; }\r\n.ol-city-bottomright { bottom: 4em; right: .5em; }\r\n.ol-attribution {\r\n text-align: justify;\r\n border-radius: 0 !important;\r\n left: 0;\r\n right: 0 !important;\r\n max-width: unset;\r\n font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\r\n font-size: .75rem;\r\n line-height: 1.5;\r\n}\r\n.ol-attribution a { color: #0078A8; }\r\n.ol-attribution * { text-shadow: none !important; }\r\n.ol-city-control {\r\n position: static;\r\n pointer-events: auto;\r\n font: 13px/1.5 sans-serif;\r\n}\r\n.ol-city-rotate {\r\n padding: 0;\r\n border: 1px solid #0003;\r\n border-radius: 4px;\r\n background: #fff;\r\n background-clip: padding-box;\r\n}\r\n.ol-city-rotate a {\r\n display: block;\r\n width: 30px;\r\n height: 30px;\r\n border-radius: 2px;\r\n color: #000;\r\n text-decoration: none;\r\n}\r\n.ol-city-rotate a:hover { background: #f4f4f4; }\r\n.ol-city-rotate a:focus-visible { outline: 2px solid #2675c9; }\r\n.ol-city-layers {\r\n max-height: calc(100vh - 5em);\r\n overflow: auto;\r\n border-radius: 4px;\r\n}\r\n.ol-city-layers section { padding: .5em; background: var(--ol-background-color); }\r\n.ol-city-layers label { display: block; cursor: pointer; white-space: nowrap; }\r\n.ol-city-layers input { vertical-align: middle; }\r\n.ol-city-layers hr { border: 0; border-top: 1px solid #ccc; }\r\n.ol-city-layers .ol-control { background: transparent; }\r\n.ol-city-layers .sunlight-time button { width: auto; padding: 0 .4em; flex-shrink: 0; }\r\n.openlayers-city-mapper .leaflet-pane {\r\n position: absolute;\r\n inset: 0;\r\n pointer-events: none;\r\n}\r\n.ol-zoom button { width: 30px; height: 30px; }\r\n.openlayers-city-mapper .leaflet-marker-icon,\r\n.openlayers-city-mapper .leaflet-marker-shadow {\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n}\r\n.openlayers-city-mapper .leaflet-marker-icon { pointer-events: auto; cursor: pointer; }\r\n.openlayers-city-mapper .leaflet-div-icon { background: #fff; border: 1px solid #666; }\r\n.ol-city-popup {\r\n padding: 10px;\r\n background: white;\r\n border: 1px solid #888;\r\n border-radius: 4px;\r\n font: 14px sans-serif;\r\n}\r\n.ol-city-popup button { float: right; margin-left: 12px; }\r\n.ol-city-tooltip {\r\n position: absolute;\r\n z-index: 1100;\r\n padding: 4px 8px;\r\n background: white;\r\n border: 1px solid #888;\r\n pointer-events: none;\r\n}\r\n`;\r\n document.head.appendChild(style);\r\n\r\n const L = window.L = { version: '1.9.4-openlayers', control: {} };\r\n let lastId = 0;\r\n const stamp = object => object._leaflet_id ||= ++lastId;\r\n const setOptions = (object, options) => object.options = { ...object.options, ...options };\r\n const zoomTiming = new Animation(new KeyframeEffect(null, [], {\r\n duration: 1, fill: 'both', easing: 'cubic-bezier(0,0,0.25,1)',\r\n }));\r\n\r\n function Class(...args) {\r\n this.initialize?.(...args);\r\n this.callInitHooks();\r\n }\r\n Class.extend = function (properties) {\r\n function Child(...args) {\r\n this.initialize?.(...args);\r\n this.callInitHooks();\r\n }\r\n Object.setPrototypeOf(Child, this);\r\n Child.prototype = Object.create(this.prototype);\r\n Object.assign(Child.prototype, properties, { constructor: Child });\r\n Child.prototype.options = { ...this.prototype.options, ...properties.options };\r\n Child.prototype._initHooks = [];\r\n return Child;\r\n };\r\n Class.include = function (properties) { Object.assign(this.prototype, properties); return this; };\r\n Class.mergeOptions = function (options) {\r\n this.prototype.options = { ...this.prototype.options, ...options };\r\n return this;\r\n };\r\n Class.addInitHook = function (hook, ...args) {\r\n if (!Object.hasOwn(this.prototype, '_initHooks')) this.prototype._initHooks = [];\r\n this.prototype._initHooks.push(typeof hook === 'function' ? hook : function () { this[hook](...args); });\r\n return this;\r\n };\r\n Class.prototype.callInitHooks = function () {\r\n if (this._initHooksCalled) return;\r\n this._initHooksCalled = true;\r\n const prototypes = [];\r\n for (let proto = Object.getPrototypeOf(this); proto; proto = Object.getPrototypeOf(proto)) prototypes.unshift(proto);\r\n for (const proto of prototypes) {\r\n if (Object.hasOwn(proto, '_initHooks')) for (const hook of proto._initHooks) hook.call(this);\r\n }\r\n };\r\n L.Evented = Class.extend({\r\n on(types, fn, context) {\r\n if (typeof types === 'object') {\r\n for (const [type, handler] of Object.entries(types)) this.on(type, handler, fn);\r\n } else {\r\n this._events ||= {};\r\n for (const type of types.split(/\\s+/)) {\r\n const events = this._events[type] ||= [];\r\n if (!events.some(event => event.fn === fn && event.context === context)) events.push({ fn, context });\r\n }\r\n }\r\n return this;\r\n },\r\n off(types, fn, context) {\r\n if (!types) this._events = {};\r\n else if (typeof types === 'object') {\r\n for (const [type, handler] of Object.entries(types)) this.off(type, handler, fn);\r\n } else {\r\n for (const type of types.split(/\\s+/)) {\r\n if (this._events?.[type]) this._events[type] = fn\r\n ? this._events[type].filter(event => event.fn !== fn || event.context !== context) : [];\r\n }\r\n }\r\n return this;\r\n },\r\n once(types, fn, context) {\r\n const handler = event => { this.off(types, handler); fn.call(context || this, event); };\r\n return this.on(types, handler);\r\n },\r\n fire(type, data) {\r\n for (const event of [...this._events?.[type] || []]) {\r\n event.fn.call(event.context || this, { ...data, type, target: this, sourceTarget: this });\r\n }\r\n return this;\r\n },\r\n listens(type) { return Boolean(this._events?.[type]?.length); },\r\n });\r\n L.Util = {\r\n stamp, setOptions,\r\n throttle(fn, interval, context) {\r\n let timer, pending;\r\n const run = (...args) => {\r\n if (timer) { pending = args; return; }\r\n fn.apply(context, args);\r\n timer = setTimeout(() => {\r\n timer = null;\r\n if (pending) { const args = pending; pending = null; run(...args); }\r\n }, interval);\r\n };\r\n return run;\r\n },\r\n };\r\n\r\n L.Point = function (x, y, round) {\r\n this.x = round ? Math.round(x) : x;\r\n this.y = round ? Math.round(y) : y;\r\n };\r\n const point = value => value instanceof L.Point ? value\r\n : Array.isArray(value) ? new L.Point(...value) : new L.Point(value.x, value.y);\r\n L.Point.prototype = {\r\n clone() { return new L.Point(this.x, this.y); },\r\n add(value) { return this.clone()._add(point(value)); },\r\n _add(value) { this.x += value.x; this.y += value.y; return this; },\r\n subtract(value) { return this.clone()._subtract(point(value)); },\r\n _subtract(value) { this.x -= value.x; this.y -= value.y; return this; },\r\n multiplyBy(value) { return new L.Point(this.x * value, this.y * value); },\r\n divideBy(value) { return new L.Point(this.x / value, this.y / value); },\r\n scaleBy(value) { return new L.Point(this.x * value.x, this.y * value.y); },\r\n unscaleBy(value) { return new L.Point(this.x / value.x, this.y / value.y); },\r\n round() { return new L.Point(Math.round(this.x), Math.round(this.y)); },\r\n floor() { return new L.Point(Math.floor(this.x), Math.floor(this.y)); },\r\n ceil() { return new L.Point(Math.ceil(this.x), Math.ceil(this.y)); },\r\n distanceTo(value) { value = point(value); return Math.hypot(this.x - value.x, this.y - value.y); },\r\n equals(value) { value = point(value); return this.x === value.x && this.y === value.y; },\r\n contains(value) { value = point(value); return Math.abs(value.x) <= Math.abs(this.x) && Math.abs(value.y) <= Math.abs(this.y); },\r\n };\r\n L.LatLng = function (lat, lng, alt) {\r\n if (!Number.isFinite(Number(lat)) || !Number.isFinite(Number(lng))) throw new Error('Invalid LatLng');\r\n this.lat = Number(lat); this.lng = Number(lng);\r\n if (alt !== undefined) this.alt = alt;\r\n };\r\n const latLng = value => value instanceof L.LatLng ? value\r\n : Array.isArray(value) ? new L.LatLng(...value) : new L.LatLng(value.lat, value.lng);\r\n L.LatLng.prototype = {\r\n equals(value, margin = 1e-9) {\r\n value = latLng(value);\r\n return Math.max(Math.abs(this.lat - value.lat), Math.abs(this.lng - value.lng)) <= margin;\r\n },\r\n distanceTo(value) { value = latLng(value); return ol.sphere.getDistance([this.lng, this.lat], [value.lng, value.lat]); },\r\n wrap() { return new L.LatLng(this.lat, ((this.lng + 180) % 360 + 360) % 360 - 180, this.alt); },\r\n };\r\n L.Bounds = function (a, b) {\r\n if (a) for (const value of b ? [a, b] : Array.isArray(a) ? a : [a]) this.extend(value);\r\n };\r\n L.Bounds.prototype = {\r\n extend(value) {\r\n if (value instanceof L.Bounds) { this.extend(value.min); this.extend(value.max); return this; }\r\n value = point(value);\r\n if (!this.min) { this.min = value.clone(); this.max = value.clone(); }\r\n else {\r\n this.min.x = Math.min(this.min.x, value.x); this.min.y = Math.min(this.min.y, value.y);\r\n this.max.x = Math.max(this.max.x, value.x); this.max.y = Math.max(this.max.y, value.y);\r\n }\r\n return this;\r\n },\r\n getCenter() { return this.min.add(this.max).divideBy(2); },\r\n getSize() { return this.max.subtract(this.min); },\r\n contains(value) {\r\n const min = value.min || point(value), max = value.max || min;\r\n return min.x >= this.min.x && max.x <= this.max.x && min.y >= this.min.y && max.y <= this.max.y;\r\n },\r\n intersects(value) {\r\n return value.max.x >= this.min.x && value.min.x <= this.max.x && value.max.y >= this.min.y && value.min.y <= this.max.y;\r\n },\r\n };\r\n L.LatLngBounds = function (a, b) {\r\n if (a) for (const value of b ? [a, b] : a) this.extend(value);\r\n };\r\n L.LatLngBounds.prototype = {\r\n extend(value) {\r\n if (value instanceof L.LatLngBounds) { this.extend(value._southWest); this.extend(value._northEast); return this; }\r\n value = latLng(value);\r\n if (!this._southWest) {\r\n this._southWest = new L.LatLng(value.lat, value.lng);\r\n this._northEast = new L.LatLng(value.lat, value.lng);\r\n } else {\r\n this._southWest.lat = Math.min(this._southWest.lat, value.lat);\r\n this._southWest.lng = Math.min(this._southWest.lng, value.lng);\r\n this._northEast.lat = Math.max(this._northEast.lat, value.lat);\r\n this._northEast.lng = Math.max(this._northEast.lng, value.lng);\r\n }\r\n return this;\r\n },\r\n getSouthWest() { return this._southWest; },\r\n getNorthEast() { return this._northEast; },\r\n getNorthWest() { return new L.LatLng(this.getNorth(), this.getWest()); },\r\n getSouthEast() { return new L.LatLng(this.getSouth(), this.getEast()); },\r\n getNorth() { return this._northEast.lat; },\r\n getSouth() { return this._southWest.lat; },\r\n getEast() { return this._northEast.lng; },\r\n getWest() { return this._southWest.lng; },\r\n getCenter() { return new L.LatLng((this.getNorth() + this.getSouth()) / 2, (this.getEast() + this.getWest()) / 2); },\r\n contains(value) {\r\n value = latLng(value);\r\n return value.lat >= this.getSouth() && value.lat <= this.getNorth() && value.lng >= this.getWest() && value.lng <= this.getEast();\r\n },\r\n isValid() { return Boolean(this._southWest && this._northEast); },\r\n };\r\n\r\n const radius = 6378137, circumference = 2 * Math.PI * radius;\r\n const crs = {\r\n scale: zoom => 256 * 2 ** zoom,\r\n zoom: scale => Math.log2(scale / 256),\r\n project(value) { value = latLng(value); return point(ol.proj.fromLonLat([value.lng, Math.max(-85.0511287798, Math.min(85.0511287798, value.lat))])); },\r\n unproject(value) { const [lng, lat] = ol.proj.toLonLat([value.x, value.y]); return new L.LatLng(lat, lng); },\r\n transformation: {\r\n transform(value, scale) { return new L.Point((value.x / circumference + 0.5) * scale, (0.5 - value.y / circumference) * scale); },\r\n untransform(value, scale) { return new L.Point((value.x / scale - 0.5) * circumference, (0.5 - value.y / scale) * circumference); },\r\n },\r\n };\r\n\r\n L.DomUtil = {\r\n create(tag, className = '', parent) {\r\n const element = document.createElement(tag);\r\n element.className = className; parent?.append(element); return element;\r\n },\r\n setPosition(element, value) { element._leaflet_pos = point(value); element.style.transform = `translate(${value.x}px,${value.y}px)`; },\r\n getPosition(element) { return element._leaflet_pos || new L.Point(0, 0); },\r\n };\r\n const domListeners = new WeakMap();\r\n function domEvent(add, element, types, fn, context) {\r\n if (typeof types === 'object') {\r\n for (const [type, handler] of Object.entries(types)) domEvent(add, element, type, handler, fn);\r\n return L.DomEvent;\r\n }\r\n let listeners = domListeners.get(element);\r\n if (!listeners) domListeners.set(element, listeners = []);\r\n for (const type of types.split(/\\s+/)) {\r\n const existing = listeners.find(item => item.type === type && item.fn === fn && item.context === context);\r\n if (add && !existing) {\r\n const handler = context ? fn.bind(context) : fn;\r\n listeners.push({ type, fn, context, handler });\r\n element.addEventListener(type, handler, { passive: false });\r\n } else if (!add && existing) {\r\n element.removeEventListener(type, existing.handler);\r\n listeners.splice(listeners.indexOf(existing), 1);\r\n }\r\n }\r\n return L.DomEvent;\r\n }\r\n const stopPropagation = event => event.stopPropagation();\r\n L.DomEvent = {\r\n on: (...args) => domEvent(true, ...args),\r\n off: (...args) => domEvent(false, ...args),\r\n stop(event) { event.preventDefault(); event.stopPropagation(); },\r\n disableClickPropagation(element) {\r\n element.classList.add('leaflet-control');\r\n L.DomEvent.on(element, 'click dblclick pointerdown mousedown touchstart contextmenu', stopPropagation);\r\n return this;\r\n },\r\n disableScrollPropagation(element) { return this.on(element, 'wheel', stopPropagation); },\r\n };\r\n L.Handler = Class.extend({\r\n initialize(map) { this._map = map; },\r\n enable() { if (!this._enabled) { this._enabled = true; this.addHooks?.(); } return this; },\r\n disable() { if (this._enabled) { this._enabled = false; this.removeHooks?.(); } return this; },\r\n enabled() { return Boolean(this._enabled); },\r\n moving() { return Boolean(this._moving); },\r\n });\r\n L.Layer = L.Evented.extend({\r\n initialize(options) { setOptions(this, options); },\r\n addTo(map) { map.addLayer(this); return this; },\r\n remove() { return this.removeFrom(this._map || this._mapToAdd); },\r\n removeFrom(map) { map?.removeLayer(this); return this; },\r\n getAttribution() { return this.options.attribution; },\r\n getPane(name) { return this._map.getPane(name || this.options.pane); },\r\n _layerAdd({ target: map }) {\r\n if (!map.hasLayer(this)) return;\r\n this._map = map;\r\n if (this.getEvents) { this._mapEvents = this.getEvents(); map.on(this._mapEvents, this); }\r\n this.onAdd?.(map);\r\n this.fire('add'); map.fire('layeradd', { layer: this });\r\n },\r\n });\r\n L.LayerGroup = L.Layer.extend({\r\n initialize(layers = [], options) {\r\n setOptions(this, options); this._layers = {};\r\n for (const layer of layers) this.addLayer(layer);\r\n },\r\n addLayer(layer) { this._layers[stamp(layer)] = layer; this._map?.addLayer(layer); return this; },\r\n removeLayer(layer) { delete this._layers[stamp(layer)]; this._map?.removeLayer(layer); return this; },\r\n hasLayer(layer) { return stamp(layer) in this._layers; },\r\n eachLayer(fn, context) { for (const layer of Object.values(this._layers)) fn.call(context || this, layer); return this; },\r\n onAdd(map) { this.eachLayer(map.addLayer, map); },\r\n onRemove(map) { this.eachLayer(map.removeLayer, map); },\r\n });\r\n // Declare the hierarchy before the plugin installs its instanceof checks and hooks.\r\n for (const [name, parent] of [\r\n ['GridLayer', L.Layer], ['Marker', L.Layer], ['Path', L.Layer],\r\n ['Polyline', null], ['Polygon', null], ['CircleMarker', null], ['Circle', null],\r\n ['ImageOverlay', L.Layer], ['VideoOverlay', null], ['SVGOverlay', null],\r\n ['Popup', L.Layer], ['Tooltip', L.Layer], ['DivIcon', Class],\r\n ]) {\r\n const base = parent || ({ Polyline: L.Path, Polygon: L.Polyline, CircleMarker: L.Path,\r\n Circle: L.CircleMarker, VideoOverlay: L.ImageOverlay, SVGOverlay: L.ImageOverlay })[name];\r\n L[name] = base.extend({\r\n initialize() { throw new Error(`L.${name} is not supported by the OpenLayers bindings; use L.Layer with a source`); },\r\n getEvents() { return {}; },\r\n });\r\n }\r\n\r\n L.Map = L.Evented.extend({\r\n options: { crs, minZoom: 0, maxZoom: 24, zoomSnap: 1, touchZoom: true,\r\n scrollWheelZoom: true, keyboard: true, doubleClickZoom: true,\r\n wheelDebounceTime: 40, wheelPxPerZoomLevel: 60 },\r\n initialize(target, options) {\r\n setOptions(this, options);\r\n this._container = typeof target === 'string' ? document.getElementById(target) : target;\r\n if (!this._container) throw new Error('Map container not found');\r\n stamp(this._container);\r\n this._container.classList.add('openlayers-city-mapper');\r\n this._layers = {}; this._panes = {}; this._handlers = []; this._controls = new Set();\r\n const center = crs.project(this.options.center || [0, 0]);\r\n this.ol = new ol.Map({\r\n target: this._container, controls: [new ol.control.Zoom(), new ol.control.Attribution({collapsible: false })],\r\n interactions: [],\r\n view: new ol.View({ center: [center.x, center.y], zoom: this.options.zoom || 0,\r\n minZoom: this.getMinZoom(), maxZoom: this.getMaxZoom() }),\r\n });\r\n for (const control of this.ol.getControls().getArray()) {\r\n control.element.classList.add('leaflet-control');\r\n for (const button of control.element.querySelectorAll('button[title]')) button.setAttribute('aria-label', button.title);\r\n if (control instanceof ol.control.Zoom) {\r\n for (const [selector, delta] of [['.ol-zoom-in', 1], ['.ol-zoom-out', -1]]) {\r\n control.element.querySelector(selector).addEventListener('click', event => {\r\n L.DomEvent.stop(event);\r\n event.stopImmediatePropagation();\r\n this._zoomBy(delta * (event.shiftKey ? 3 : 1));\r\n }, true);\r\n }\r\n }\r\n }\r\n this._loaded = true;\r\n this._zoomAnimated = false;\r\n this.dragging = new L.Handler(this).enable();\r\n this.touchZoom = new L.Handler(this);\r\n if (this.options.touchZoom) this.touchZoom.enable();\r\n this._handlers.push(this.dragging, this.touchZoom);\r\n for (const name of ['scrollWheelZoom', 'keyboard', 'doubleClickZoom']) this.addHandler(name, L.Handler);\r\n if (!this._container.hasAttribute('tabindex')) this._container.tabIndex = 0;\r\n const view = this.ol.getView();\r\n this._viewZoom = view.getZoom();\r\n view.on(['change:center', 'change:resolution'], () => {\r\n if (this._settingView) return;\r\n const zoomChanged = view.getZoom() !== this._viewZoom;\r\n if (!this._viewMoving) { this._viewMoving = true; this.fire('movestart'); }\r\n if (zoomChanged && !this._viewZooming) { this._viewZooming = true; this.fire('zoomstart'); }\r\n this.fire('move');\r\n if (zoomChanged) this.fire('zoom');\r\n this._viewZoom = view.getZoom();\r\n if (!view.getAnimating() && !view.getInteracting()) this._endViewChange();\r\n });\r\n this.ol.on('moveend', () => this._endViewChange());\r\n // OpenLayers interactions need the pitched ground coordinate, not the flat viewport.\r\n this.ol.getCoordinateFromPixel = pixel => {\r\n const coordinate = crs.project(this.containerPointToLatLng(point(pixel)));\r\n return [coordinate.x, coordinate.y];\r\n };\r\n this._wheelDelta = 0;\r\n this.ol.addInteraction(new ol.interaction.Interaction({\r\n handleEvent: event => {\r\n const original = event.originalEvent;\r\n if (original.target.closest('.ol-control')) return true;\r\n if (event.type === 'dblclick' && this.doubleClickZoom.enabled()) {\r\n this._zoomBy(original.shiftKey ? -1 : 1, point(event.pixel));\r\n } else if (event.type === 'wheel' && this.scrollWheelZoom.enabled() && !original.shiftKey) {\r\n const ratio = window.devicePixelRatio || 1;\r\n const factor = /Linux/.test(navigator.platform) && /Chrome/.test(navigator.userAgent) ? ratio\r\n : /Mac/.test(navigator.platform) ? 3 * ratio : 2 * ratio;\r\n this._wheelDelta -= original.deltaY * (original.deltaMode === 1 ? 20\r\n : original.deltaMode === 2 ? 60 : 1 / factor);\r\n this._wheelPixel = point(event.pixel);\r\n this._wheelStart ??= performance.now();\r\n clearTimeout(this._wheelTimer);\r\n this._wheelTimer = setTimeout(() => {\r\n const magnitude = 4 * Math.log2(2 / (1 + Math.exp(-Math.abs(this._wheelDelta /\r\n (this.options.wheelPxPerZoomLevel * 4)))));\r\n const snap = this.options.zoomSnap;\r\n const delta = Math.sign(this._wheelDelta) * (snap ? Math.ceil(magnitude / snap) * snap : magnitude);\r\n this._wheelDelta = 0;\r\n this._wheelStart = null;\r\n if (this._loaded && this.scrollWheelZoom.enabled()) this._zoomBy(delta,\r\n this.options.scrollWheelZoom === 'center' ? undefined : this._wheelPixel);\r\n }, Math.max(0, this.options.wheelDebounceTime - (performance.now() - this._wheelStart)));\r\n } else return true;\r\n original.preventDefault();\r\n return false;\r\n },\r\n }));\r\n this._controlCorners = {};\r\n for (const position of ['topleft', 'topright', 'bottomleft', 'bottomright']) {\r\n this._controlCorners[position] = L.DomUtil.create('div',\r\n `ol-city-corner ol-city-${position}`, this.ol.getOverlayContainerStopEvent());\r\n }\r\n const attributionSource = new ol.source.Vector();\r\n this.ol.addLayer(new ol.layer.Vector({ source: attributionSource }));\r\n const updateAttribution = () => {\r\n const values = new Set(['<a href=\"https://openlayers.org/\">OpenLayers</a>']);\r\n this.eachLayer(layer => { if (layer.getAttribution?.()) values.add(layer.getAttribution()); });\r\n attributionSource.setAttributions([...values]);\r\n };\r\n this.on('layeradd layerremove', updateAttribution);\r\n updateAttribution();\r\n let anchor, pointerId;\r\n const pixel = event => {\r\n const rect = this._container.getBoundingClientRect();\r\n return new L.Point(event.clientX - rect.left, event.clientY - rect.top);\r\n };\r\n this._onPointer = event => {\r\n if (event.type === 'pointerdown') {\r\n if (!this.dragging.enabled() || event.button !== 0 || !event.isPrimary || event.target.closest('.ol-control')) return;\r\n anchor = this.containerPointToLatLng(pixel(event)); pointerId = event.pointerId;\r\n this._moved = this.dragging._moving = false;\r\n this._container.focus({ preventScroll: true });\r\n this._container.setPointerCapture(pointerId);\r\n } else if (event.pointerId === pointerId && event.type === 'pointermove' && this.dragging.enabled()) {\r\n const delta = this.project(anchor).subtract(this.project(this.containerPointToLatLng(pixel(event))));\r\n if (Math.hypot(delta.x, delta.y) > 1) this._moved = this.dragging._moving = true;\r\n this.setView(this.unproject(this.project(this.getCenter()).add(delta)), this.getZoom());\r\n } else if (event.pointerId === pointerId && event.type !== 'pointermove') {\r\n if (this._container.hasPointerCapture(pointerId)) this._container.releasePointerCapture(pointerId);\r\n anchor = null; pointerId = null;\r\n this.dragging._moving = false;\r\n }\r\n };\r\n this._onKey = event => {\r\n if (!this.keyboard.enabled() || event.target !== this._container || event.altKey || event.ctrlKey || event.metaKey) return;\r\n const offsets = { ArrowLeft: [-80, 0], ArrowRight: [80, 0], ArrowUp: [0, -80], ArrowDown: [0, 80] };\r\n if (offsets[event.key]) this.panBy(offsets[event.key]);\r\n else if (['+', '=', '-', '_'].includes(event.key)) this._zoomBy(\r\n (['-', '_'].includes(event.key) ? -1 : 1) * (event.shiftKey ? 3 : 1));\r\n else return;\r\n event.preventDefault();\r\n };\r\n L.DomEvent.on(this._container, 'pointerdown pointermove pointerup pointercancel', this._onPointer);\r\n L.DomEvent.on(this._container, 'keydown', this._onKey);\r\n this.ol.on('change:size', () => this.fire('resize', { newSize: this.getSize() }));\r\n this.ol.updateSize();\r\n },\r\n getContainer() { return this._container; },\r\n getSize() { return point(this.ol.getSize() || [this._container.clientWidth, this._container.clientHeight]); },\r\n getCenter() { return crs.unproject(point(this.ol.getView().getCenter())); },\r\n getZoom() { return this.ol.getView().getZoom(); },\r\n getMinZoom() { return this.options.minZoom; },\r\n getMaxZoom() { return this.options.maxZoom; },\r\n getZoomScale(to, from = this.getZoom()) { return 2 ** (to - from); },\r\n getScaleZoom(scale, from = this.getZoom()) { return from + Math.log2(scale); },\r\n _limitZoom(zoom) { return Math.max(this.getMinZoom(), Math.min(this.getMaxZoom(), zoom)); },\r\n project(value, zoom = this.getZoom()) { return crs.transformation.transform(crs.project(value), crs.scale(zoom)); },\r\n unproject(value, zoom = this.getZoom()) { return crs.unproject(crs.transformation.untransform(point(value), crs.scale(zoom))); },\r\n getPixelOrigin() { return this.project(this.getCenter()).subtract(this.getSize().divideBy(2)); },\r\n _getMapPanePos() { return new L.Point(0, 0); },\r\n latLngToLayerPoint(value) { return this.project(value).subtract(this.getPixelOrigin()); },\r\n layerPointToLatLng(value) { return this.unproject(point(value).add(this.getPixelOrigin())); },\r\n layerPointToContainerPoint(value) { return point(value).clone(); },\r\n containerPointToLayerPoint(value) { return point(value).clone(); },\r\n latLngToContainerPoint(value) { return this.layerPointToContainerPoint(this.latLngToLayerPoint(value)); },\r\n containerPointToLatLng(value) { return this.layerPointToLatLng(this.containerPointToLayerPoint(value)); },\r\n getBounds() { return new L.LatLngBounds(this.containerPointToLatLng([0, 0]), this.containerPointToLatLng(this.getSize())); },\r\n _endViewChange() {\r\n if (!this._viewMoving) return;\r\n const zooming = this._viewZooming;\r\n this._viewMoving = this._viewZooming = false;\r\n if (zooming) this.fire('zoomend');\r\n this.fire('moveend');\r\n },\r\n _zoomBy(delta, pixel) {\r\n if (!delta || this.ol.getView().getAnimating()) return this;\r\n const zoom = this._limitZoom(this.getZoom() + delta);\r\n return pixel ? this.setZoomAround(pixel, zoom, { animate: true })\r\n : this.setZoom(zoom, { animate: true });\r\n },\r\n setView(center, zoom = this.getZoom(), options = {}) {\r\n center = latLng(center); zoom = this._limitZoom(zoom);\r\n if ((options.animate === true || options.zoom?.animate === true) && zoom !== this.getZoom()) {\r\n const scale = this.getZoomScale(zoom), projected = crs.project(center);\r\n // Leaflet animates CSS scale, not resolution; convert the same native CSS easing.\r\n this.ol.getView().animate({\r\n center: [projected.x, projected.y], zoom, duration: 250,\r\n easing: time => {\r\n zoomTiming.currentTime = time;\r\n const progress = zoomTiming.effect.getComputedTiming().progress;\r\n return (1 - 1 / (1 + (scale - 1) * progress)) / (1 - 1 / scale);\r\n },\r\n });\r\n return this;\r\n }\r\n this.ol.getView().cancelAnimations();\r\n this._endViewChange();\r\n const zoomChanged = zoom !== this.getZoom(), moved = !center.equals(this.getCenter());\r\n if (!zoomChanged && !moved) return this;\r\n this.fire('movestart');\r\n if (zoomChanged) this.fire('zoomstart');\r\n this._settingView = true;\r\n const projected = crs.project(center);\r\n this.ol.getView().setCenter([projected.x, projected.y]);\r\n this.ol.getView().setZoom(zoom);\r\n this._viewZoom = this.getZoom();\r\n this._settingView = false;\r\n if (zoomChanged) this.fire('zoom');\r\n this.fire('move').fire('viewreset');\r\n if (zoomChanged) this.fire('zoomend');\r\n return this.fire('moveend');\r\n },\r\n setZoom(zoom, options) { return this.setView(this.getCenter(), zoom, options); },\r\n panTo(center) { return this.setView(center); },\r\n panBy(offset) { return this.panTo(this.unproject(this.project(this.getCenter()).add(point(offset)))); },\r\n setZoomAround(value, zoom, options) {\r\n const anchor = value instanceof L.Point ? value : this.latLngToContainerPoint(value);\r\n const half = this.getSize().divideBy(2), scale = this.getZoomScale(zoom);\r\n return this.setView(this.unproject(this.project(this.getCenter()).add(anchor.subtract(half).multiplyBy(1 - 1 / scale))), zoom, options);\r\n },\r\n getBoundsZoom(bounds, inside, padding = [0, 0]) {\r\n const size = this.project(bounds.getSouthEast()).subtract(this.project(bounds.getNorthWest()));\r\n const available = this.getSize().subtract(point(padding));\r\n const scale = Math[inside ? 'max' : 'min'](available.x / size.x, available.y / size.y);\r\n return this._limitZoom(this.getScaleZoom(scale));\r\n },\r\n _getBoundsCenterZoom(bounds, options = {}) { return { center: bounds.getCenter(), zoom: this.getBoundsZoom(bounds, false, options.padding) }; },\r\n fitBounds(bounds, options) { const view = this._getBoundsCenterZoom(bounds, options); return this.setView(view.center, view.zoom); },\r\n _limitCenter(center) { return center; },\r\n _limitOffset(offset) { return offset; },\r\n _tryAnimatedPan() { return false; },\r\n panInside(value) { if (!this.getBounds().contains(value)) this.panTo(value); return this; },\r\n whenReady(fn, context) { if (this._loaded) fn.call(context || this, { target: this }); else this.once('load', fn, context); return this; },\r\n addLayer(layer) {\r\n const id = stamp(layer);\r\n if (this._layers[id]) return this;\r\n this._layers[id] = layer; layer._mapToAdd = this;\r\n layer.beforeAdd?.(this);\r\n this.whenReady(layer._layerAdd, layer);\r\n return this;\r\n },\r\n removeLayer(layer) {\r\n if (!this.hasLayer(layer)) return this;\r\n layer.onRemove?.(this);\r\n if (layer._mapEvents) this.off(layer._mapEvents, layer);\r\n delete this._layers[stamp(layer)];\r\n this.fire('layerremove', { layer }); layer.fire('remove');\r\n layer._map = layer._mapToAdd = null;\r\n return this;\r\n },\r\n hasLayer(layer) { return Boolean(this._layers[stamp(layer)]); },\r\n eachLayer(fn, context) { for (const layer of Object.values(this._layers)) fn.call(context || this, layer); return this; },\r\n createPane(name, parent = this._container) { return this._panes[name] = L.DomUtil.create('div', `leaflet-pane leaflet-${name}`, parent); },\r\n getPane(name = 'overlayPane') { return this._panes[name]; },\r\n addHandler(name, Handler) { this[name] = new Handler(this); this._handlers.push(this[name]); if (this.options[name]) this[name].enable(); return this; },\r\n invalidateSize() { this.ol.updateSize(); return this; },\r\n _draggableMoved() { return Boolean(this._moved); },\r\n remove() {\r\n clearTimeout(this._wheelTimer);\r\n this.ol.getView().cancelAnimations();\r\n this.fire('unload');\r\n for (const control of [...this._controls]) control.remove();\r\n this.eachLayer(this.removeLayer, this);\r\n for (const handler of this._handlers) handler.disable();\r\n L.DomEvent.off(this._container, 'pointerdown pointermove pointerup pointercancel', this._onPointer);\r\n L.DomEvent.off(this._container, 'keydown', this._onKey);\r\n this.ol.setTarget(undefined); this.ol.dispose();\r\n for (const corner of Object.values(this._controlCorners)) corner.remove();\r\n for (const pane of Object.values(this._panes)) pane.remove();\r\n this._loaded = false;\r\n delete this._container._leaflet_id;\r\n return this.off();\r\n },\r\n });\r\n\r\n L.Control = Class.extend({\r\n options: { position: 'topright' },\r\n initialize(options) { setOptions(this, options); },\r\n getPosition() { return this.options.position; },\r\n getContainer() { return this._container; },\r\n addTo(map) {\r\n this.remove(); this._map = map;\r\n this._container = this.onAdd(map);\r\n if (L.Control.Rotate && this instanceof L.Control.Rotate) {\r\n this._container.classList.add('ol-city-rotate');\r\n }\r\n this._container.classList.add('leaflet-control', 'ol-control', 'ol-city-control');\r\n this._olControl = new ol.control.Control({\r\n element: this._container, target: map._controlCorners[this.getPosition()],\r\n });\r\n map.ol.addControl(this._olControl);\r\n map._controls.add(this);\r\n return this;\r\n },\r\n remove() {\r\n if (!this._map) return this;\r\n const map = this._map;\r\n this.onRemove?.(map); this._container?.remove();\r\n map.ol.removeControl(this._olControl);\r\n map._controls.delete(this); this._map = null;\r\n return this;\r\n },\r\n });\r\n L.Control.Layers = L.Control.extend({\r\n options: { collapsed: true },\r\n initialize(base = {}, overlays = {}, options) {\r\n setOptions(this, options); this._layers = [];\r\n for (const [name, layer] of Object.entries(base)) this._layers.push({ name, layer, overlay: false });\r\n for (const [name, layer] of Object.entries(overlays)) this._layers.push({ name, layer, overlay: true });\r\n },\r\n onAdd(map) {\r\n const container = L.DomUtil.create('div', 'ol-city-layers');\r\n L.DomEvent.disableClickPropagation(container); L.DomEvent.disableScrollPropagation(container);\r\n const list = L.DomUtil.create('section', '', container);\r\n list.setAttribute('aria-label', 'Map layers');\r\n const base = L.DomUtil.create('div', '', list);\r\n L.DomUtil.create('hr', '', list);\r\n const overlays = L.DomUtil.create('div', '', list);\r\n this._inputs = [];\r\n for (const entry of this._layers) {\r\n const label = L.DomUtil.create('label', '', entry.overlay ? overlays : base);\r\n const input = L.DomUtil.create('input', 'leaflet-control-layers-selector', label);\r\n input.type = entry.overlay ? 'checkbox' : 'radio';\r\n input.name = `base-${stamp(this)}`; input.layerId = stamp(entry.layer);\r\n input.checked = map.hasLayer(entry.layer);\r\n label.append(document.createTextNode(` ${entry.name}`));\r\n this._inputs.push(input);\r\n input.onchange = () => {\r\n const checked = input.checked;\r\n if (!entry.overlay) for (const other of this._layers) {\r\n if (!other.overlay && other !== entry) map.removeLayer(other.layer);\r\n }\r\n if (checked) map.addLayer(entry.layer); else map.removeLayer(entry.layer);\r\n };\r\n }\r\n map.on('layeradd layerremove', this._update, this);\r\n return container;\r\n },\r\n _update() { for (const input of this._inputs) input.checked = Boolean(this._map._layers[input.layerId]); },\r\n onRemove(map) { map.off('layeradd layerremove', this._update, this); },\r\n });\r\n\r\n // Native layer contracts consumed by the plugin's WebGPU renderer.\r\n const bounds = value => value instanceof L.LatLngBounds ? value : new L.LatLngBounds(value);\r\n const coordinates = values => values.map(value => Array.isArray(value) && typeof value[0] !== 'number'\r\n ? coordinates(value) : latLng(value));\r\n const image = (url, options, className) => {\r\n const element = document.createElement('img');\r\n element.className = className;\r\n if (options.crossOrigin) element.crossOrigin = options.crossOrigin === true ? '' : options.crossOrigin;\r\n element.src = url;\r\n element.draggable = false;\r\n return element;\r\n };\r\n\r\n L.Layer.include({\r\n bindPopup(content) {\r\n this._popupContent = content;\r\n this.off('click', this.openPopup, this).on('click', this.openPopup, this);\r\n this.once('remove', this.closePopup, this);\r\n if (this instanceof L.LayerGroup) this.eachLayer(layer => layer.bindPopup(content));\r\n return this;\r\n },\r\n openPopup(event) {\r\n if (!this._map) return this;\r\n this.closePopup();\r\n const location = event?.latlng || this.getLatLng?.() || this.getBounds?.().getCenter();\r\n if (!location) throw new Error('Popup requires a location');\r\n const element = L.DomUtil.create('div', 'ol-city-popup leaflet-popup');\r\n element.setAttribute('role', 'dialog');\r\n const close = L.DomUtil.create('button', '', element);\r\n close.type = 'button'; close.textContent = '\\u00d7'; close.setAttribute('aria-label', 'Close popup');\r\n close.onclick = () => this.closePopup();\r\n const content = L.DomUtil.create('div', '', element);\r\n const value = typeof this._popupContent === 'function' ? this._popupContent(this) : this._popupContent;\r\n if (value instanceof Node) content.append(value); else content.innerHTML = value;\r\n L.DomEvent.disableClickPropagation(element);\r\n this._popupOverlay = new ol.Overlay({ element, positioning: 'bottom-center', offset: [0, -12] });\r\n this._map.ol.addOverlay(this._popupOverlay);\r\n this._popupLocation = latLng(location);\r\n this._map.on('move zoom rotate pitch', this._positionPopup, this);\r\n this._positionPopup();\r\n return this;\r\n },\r\n _positionPopup() {\r\n const screen = this._map.latLngToContainerPoint(this._popupLocation);\r\n this._popupOverlay.setPosition(this._map.ol.getCoordinateFromPixelInternal([screen.x, screen.y]));\r\n },\r\n closePopup() {\r\n if (this._popupOverlay) {\r\n this._map?.off('move zoom rotate pitch', this._positionPopup, this);\r\n this._map?.ol.removeOverlay(this._popupOverlay);\r\n this._popupOverlay = null;\r\n }\r\n return this;\r\n },\r\n bindTooltip(content) {\r\n this._tooltipContent = content;\r\n this.on('mouseover', this._showTooltip, this).on('mouseout remove', this._hideTooltip, this);\r\n if (this instanceof L.LayerGroup) this.eachLayer(layer => layer.bindTooltip(content));\r\n return this;\r\n },\r\n _showTooltip(event) {\r\n this._hideTooltip();\r\n if (!this._map || !event.latlng) return;\r\n const element = this._tooltipElement = L.DomUtil.create('div', 'ol-city-tooltip leaflet-tooltip', this._map.getContainer());\r\n element.setAttribute('role', 'tooltip');\r\n const value = typeof this._tooltipContent === 'function' ? this._tooltipContent(this) : this._tooltipContent;\r\n if (value instanceof Node) element.append(value); else element.innerHTML = value;\r\n const pixel = this._map.latLngToContainerPoint(event.latlng);\r\n element.style.left = `${pixel.x + 12}px`; element.style.top = `${pixel.y + 12}px`;\r\n },\r\n _hideTooltip() { this._tooltipElement?.remove(); this._tooltipElement = null; },\r\n });\r\n L.LayerGroup.include({\r\n getLayers() { return Object.values(this._layers); },\r\n getBounds() {\r\n const result = new L.LatLngBounds();\r\n this.eachLayer(layer => result.extend(layer.getBounds?.() || layer.getLatLng()));\r\n return result;\r\n },\r\n });\r\n L.FeatureGroup = L.LayerGroup.extend({});\r\n\r\n L.Path.include({\r\n options: { pane: 'overlayPane', interactive: true, stroke: true, color: '#3388ff',\r\n weight: 3, opacity: 1, lineCap: 'round', lineJoin: 'round', fill: false, fillOpacity: 0.2 },\r\n initialize(options) { L.Util.setOptions(this, options); },\r\n setStyle(options) { L.Util.setOptions(this, options); return this.redraw(); },\r\n redraw() { return this; },\r\n bringToFront() { return this; },\r\n bringToBack() { return this; },\r\n });\r\n L.Polyline.include({\r\n initialize(values, options) { L.Util.setOptions(this, options); this.setLatLngs(values); },\r\n getLatLngs() { return this._latlngs; },\r\n setLatLngs(values) { this._latlngs = coordinates(values); return this.redraw(); },\r\n addLatLng(value) { this._latlngs.push(latLng(value)); return this.redraw(); },\r\n getBounds() {\r\n const result = new L.LatLngBounds();\r\n const visit = values => { for (const value of values) Array.isArray(value) ? visit(value) : result.extend(value); };\r\n visit(this._latlngs);\r\n return result;\r\n },\r\n _project() {\r\n this._rings = [];\r\n const visit = values => {\r\n if (!values.length) return;\r\n if (Array.isArray(values[0])) values.forEach(visit);\r\n else this._rings.push(values.map(value => this._map.latLngToLayerPoint(value)));\r\n };\r\n visit(this._latlngs);\r\n },\r\n closestLayerPoint(value) {\r\n this._project();\r\n const paths = this._rings.map(ring => ring.map(value => [value.x, value.y]));\r\n const closest = new ol.geom.MultiLineString(paths).getClosestPoint([value.x, value.y]);\r\n return point(closest);\r\n },\r\n });\r\n L.Polyline.mergeOptions(L.Path.prototype.options);\r\n L.Polygon.include({ initialize: L.Polyline.prototype.initialize });\r\n L.Polygon.mergeOptions(L.Path.prototype.options);\r\n L.Polygon.mergeOptions({ fill: true });\r\n L.Rectangle = L.Polygon.extend({\r\n initialize(value, options) { L.Util.setOptions(this, options); this.setBounds(value); },\r\n setBounds(value) {\r\n value = bounds(value);\r\n return this.setLatLngs([value.getSouthWest(), value.getNorthWest(), value.getNorthEast(), value.getSouthEast()]);\r\n },\r\n });\r\n L.CircleMarker.include({\r\n options: { ...L.Path.prototype.options, fill: true, radius: 10 },\r\n initialize(value, options) { L.Util.setOptions(this, options); this._latlng = latLng(value); },\r\n getLatLng() { return this._latlng; },\r\n setLatLng(value) { this._latlng = latLng(value); this.fire('move', { latlng: this._latlng }); return this.redraw(); },\r\n getRadius() { return this.options.radius; },\r\n setRadius(radius) { this.options.radius = radius; return this.redraw(); },\r\n });\r\n L.Circle.include({\r\n initialize: L.CircleMarker.prototype.initialize,\r\n _project() {\r\n this._point = this._map.latLngToLayerPoint(this._latlng);\r\n this._radius = this._radiusY = this.getRadius() * this._map.options.crs.scale(this._map.getZoom()) /\r\n (2 * Math.PI * 6378137 * Math.cos(this._latlng.lat * Math.PI / 180));\r\n },\r\n getBounds() {\r\n const north = this.getRadius() / 6378137 * 180 / Math.PI;\r\n const east = north / Math.cos(this._latlng.lat * Math.PI / 180);\r\n return new L.LatLngBounds([this._latlng.lat - north, this._latlng.lng - east],\r\n [this._latlng.lat + north, this._latlng.lng + east]);\r\n },\r\n });\r\n L.Circle.mergeOptions(L.CircleMarker.prototype.options);\r\n L.GeoJSON = L.FeatureGroup.extend({\r\n initialize(data, options) {\r\n L.LayerGroup.prototype.initialize.call(this, [], options);\r\n if (data) this.addData(data);\r\n },\r\n addData(data) {\r\n const features = new ol.format.GeoJSON().readFeatures(data);\r\n const convert = (geometry, feature) => {\r\n const values = geometry.getCoordinates();\r\n const locations = value => typeof value[0] === 'number' ? [value[1], value[0]] : value.map(locations);\r\n switch (geometry.getType()) {\r\n case 'Point': return this.options.pointToLayer\r\n ? this.options.pointToLayer(feature, latLng(locations(values))) : new L.Marker(locations(values));\r\n case 'MultiPoint': return new L.FeatureGroup(values.map(value => convert(new ol.geom.Point(value), feature)));\r\n case 'LineString': case 'MultiLineString': return new L.Polyline(locations(values), this.options);\r\n case 'Polygon': case 'MultiPolygon': return new L.Polygon(locations(values), this.options);\r\n default: throw new Error(`Unsupported GeoJSON geometry: ${geometry.getType()}`);\r\n }\r\n };\r\n for (const feature of features) {\r\n const layer = convert(feature.getGeometry(), new ol.format.GeoJSON().writeFeatureObject(feature));\r\n this.addLayer(layer);\r\n }\r\n return this;\r\n },\r\n });\r\n\r\n L.GridLayer.include({\r\n options: { pane: 'tilePane', tileSize: 256, opacity: 1, minZoom: 0, maxZoom: 24, updateInterval: 200 },\r\n initialize(options) { L.Util.setOptions(this, options); this._tiles = {}; },\r\n getTileSize() { return typeof this.options.tileSize === 'number'\r\n ? new L.Point(this.options.tileSize, this.options.tileSize) : point(this.options.tileSize); },\r\n getEvents() { return { moveend: this._onMoveEnd, zoomend: this._onMoveEnd, resize: this._onMoveEnd }; },\r\n _initContainer() { this._container = L.DomUtil.create('div', '', this.getPane()); },\r\n onAdd() { this._initContainer(); this._onMoveEnd(); },\r\n onRemove() {\r\n for (const tile of Object.values(this._tiles)) this.fire('tileunload', { tile: tile.el, coords: tile.coords });\r\n this._tiles = {}; this._container?.remove();\r\n },\r\n _getTiledPixelBounds() {\r\n return new L.Bounds(this._map.project(this._map.getBounds().getNorthWest(), this._tileZoom),\r\n this._map.project(this._map.getBounds().getSouthEast(), this._tileZoom));\r\n },\r\n _onMoveEnd() {\r\n if (!this._map) return;\r\n this._tileZoom = Math.max(this.options.minZoom, Math.min(this.options.maxZoom, Math.round(this._map.getZoom())));\r\n const size = this.getTileSize(), extent = this._getTiledPixelBounds(this._map.getCenter());\r\n const min = extent.min.unscaleBy(size).floor(), max = extent.max.unscaleBy(size).floor();\r\n const retained = new Set(), limit = 2 ** this._tileZoom;\r\n for (let x = min.x; x <= max.x; x++) for (let y = min.y; y <= max.y; y++) {\r\n if (y < 0 || y >= limit) continue;\r\n const key = `${this._tileZoom}:${x}:${y}`;\r\n retained.add(key);\r\n if (this._tiles[key]) continue;\r\n const coords = new L.Point(x, y); coords.z = this._tileZoom;\r\n const tile = this._tiles[key] = { coords, current: true, loaded: 0 };\r\n const done = (error, element) => {\r\n if (this._tiles[key] !== tile) return;\r\n tile.el = element;\r\n if (error) { this.fire('tileerror', { error, tile: element, coords }); return; }\r\n tile.loaded = Date.now();\r\n this.fire('tileload', { tile: element, coords });\r\n this.fire('load');\r\n };\r\n tile.el = this.createTile(coords, done);\r\n if (this.createTile.length < 2) done(null, tile.el);\r\n }\r\n for (const [key, tile] of Object.entries(this._tiles)) {\r\n if (retained.has(key)) continue;\r\n delete this._tiles[key];\r\n this.fire('tileunload', { tile: tile.el, coords: tile.coords });\r\n }\r\n },\r\n _tileCoordsToNwSe(coords) {\r\n const size = this.getTileSize(), nw = new L.Point(coords.x * size.x, coords.y * size.y);\r\n return [this._map.unproject(nw, coords.z), this._map.unproject(nw.add(size), coords.z)];\r\n },\r\n setOpacity(opacity) { this.options.opacity = opacity; return this; },\r\n setZIndex(zIndex) { this.options.zIndex = zIndex; return this; },\r\n redraw() { if (this._map) { this.onRemove(); this._onMoveEnd(); } return this; },\r\n });\r\n L.TileLayer = L.GridLayer.extend({\r\n initialize(url, options) {\r\n L.GridLayer.prototype.initialize.call(this, options); this.setUrl(url);\r\n },\r\n setUrl(url) { this._url = url; this._source = new ol.source.XYZ({ url, crossOrigin: 'anonymous' }); return this.redraw(); },\r\n createTile(coords, done) {\r\n const url = this._source.getTileUrlFunction()([coords.z, coords.x, coords.y], 1, ol.proj.get('EPSG:3857'));\r\n const tile = image(url, this.options, '');\r\n tile.onload = () => done(null, tile);\r\n tile.onerror = () => done(new Error(`Unable to load tile: ${url}`), tile);\r\n return tile;\r\n },\r\n });\r\n L.TileLayer.WMS = L.TileLayer.extend({\r\n setUrl(url) {\r\n this._url = url;\r\n this._source = new ol.source.TileWMS({ url, crossOrigin: 'anonymous', params: {\r\n LAYERS: this.options.layers, FORMAT: this.options.format || 'image/png',\r\n TRANSPARENT: this.options.transparent || false,\r\n } });\r\n return this.redraw();\r\n },\r\n });\r\n L.ImageOverlay.include({\r\n options: { pane: 'overlayPane', opacity: 1, interactive: false },\r\n initialize(url, value, options) { L.Util.setOptions(this, options); this._url = url; this._bounds = bounds(value); },\r\n _initImage() {\r\n this._image = image(this._url, this.options, '');\r\n this._image.onload = () => this.fire('load');\r\n this._image.onerror = () => this.fire('error', { error: new Error(`Unable to load image: ${this._url}`) });\r\n },\r\n getBounds() { return this._bounds; },\r\n setBounds(value) { this._bounds = bounds(value); return this; },\r\n setUrl(url) { this._url = url; if (this._image) this._image.src = url; return this; },\r\n setOpacity(opacity) { this.options.opacity = opacity; return this; },\r\n setZIndex(zIndex) { this.options.zIndex = zIndex; return this; },\r\n });\r\n\r\n L.Icon = L.Evented.extend({\r\n initialize(options) { L.Util.setOptions(this, options); },\r\n createIcon() { return this._create('icon'); },\r\n createShadow() { return this.options.shadowUrl ? this._create('shadow') : null; },\r\n _create(kind) {\r\n const element = image(this.options[`${kind}Url`], this.options, `leaflet-marker-${kind}`);\r\n const size = this.options[`${kind}Size`], anchor = this.options[`${kind}Anchor`] || this.options.iconAnchor;\r\n if (size) { element.style.width = `${size[0]}px`; element.style.height = `${size[1]}px`; }\r\n if (anchor) { element.style.marginLeft = `${-anchor[0]}px`; element.style.marginTop = `${-anchor[1]}px`; }\r\n return element;\r\n },\r\n });\r\n L.Icon.Default = L.Icon.extend({\r\n options: {\r\n iconUrl: 'https://unpkg.com/leaflet@1.9/dist/images/marker-icon.png',\r\n shadowUrl: 'https://unpkg.com/leaflet@1.9/dist/images/marker-shadow.png',\r\n iconSize: [25, 41], iconAnchor: [12, 41], shadowSize: [41, 41], shadowAnchor: [12, 41],\r\n },\r\n });\r\n L.DivIcon = L.Icon.extend({\r\n createIcon() {\r\n const element = L.DomUtil.create('div', `leaflet-marker-icon ${this.options.className || ''}`);\r\n if (this.options.html instanceof Node) element.append(this.options.html); else element.innerHTML = this.options.html || '';\r\n const size = this.options.iconSize || [12, 12], anchor = this.options.iconAnchor || size.map(value => value / 2);\r\n element.style.cssText = `width:${size[0]}px;height:${size[1]}px;margin-left:${-anchor[0]}px;margin-top:${-anchor[1]}px`;\r\n return element;\r\n },\r\n createShadow() { return null; },\r\n });\r\n L.Marker.include({\r\n options: { pane: 'markerPane', icon: new L.Icon.Default(), opacity: 1, interactive: true, zIndexOffset: 0 },\r\n initialize(value, options) { L.Util.setOptions(this, options); this._latlng = latLng(value); },\r\n getLatLng() { return this._latlng; },\r\n setLatLng(value) { this._latlng = latLng(value); this.update(); return this.fire('move', { latlng: this._latlng }); },\r\n setIcon(icon) { this.options.icon = icon; if (this._map) { this.onRemove(); this.onAdd(); } return this; },\r\n getEvents() { return { zoom: this.update, viewreset: this.update }; },\r\n onAdd() {\r\n this._icon = this.options.icon.createIcon(); this._shadow = this.options.icon.createShadow();\r\n this._icon.tabIndex = 0; this._icon.setAttribute('role', 'button');\r\n this._icon.setAttribute('aria-label', this.options.title || 'Marker');\r\n this._icon.title = this.options.title || '';\r\n for (const element of [this._shadow, this._icon]) if (element) this.getPane().append(element);\r\n this._initInteraction(); this.update();\r\n },\r\n onRemove() { this.dragging?.disable(); this._icon?.remove(); this._shadow?.remove(); },\r\n update() { if (this._map && this._icon) this._setPos(this._map.latLngToLayerPoint(this._latlng)); return this; },\r\n _setPos(value) {\r\n for (const element of [this._icon, this._shadow]) if (element) L.DomUtil.setPosition(element, value);\r\n this._zIndex = value.y + this.options.zIndexOffset; this._updateZIndex(0);\r\n },\r\n _updateZIndex(offset) { if (this._icon) this._icon.style.zIndex = this._zIndex + offset; },\r\n setOpacity(opacity) { this.options.opacity = opacity; return this; },\r\n setZIndexOffset(value) { this.options.zIndexOffset = value; return this.update(); },\r\n _initInteraction() {\r\n this._icon._cityLayer = this;\r\n const drag = this.dragging = new L.Handler(this._map);\r\n const icon = this._icon;\r\n L.DomEvent.on(icon, 'pointerdown', event => {\r\n this._map._moved = false;\r\n event.stopPropagation();\r\n });\r\n L.DomEvent.on(icon, 'keydown', event => {\r\n if (event.key !== 'Enter' && event.key !== ' ') return;\r\n L.DomEvent.stop(event);\r\n this.fire('click', { latlng: this._latlng, originalEvent: event });\r\n });\r\n drag._marker = this;\r\n drag._draggable = new L.Evented();\r\n drag._onDrag = function () {\r\n const marker = this._marker;\r\n marker._latlng = marker._map.layerPointToLatLng(L.DomUtil.getPosition(marker._icon));\r\n marker.fire('move', { latlng: marker._latlng }).fire('drag', { latlng: marker._latlng });\r\n };\r\n drag._adjustPan = function () {};\r\n drag._draggable.on('drag', drag._onDrag, drag);\r\n let pointer, anchor, origin, moved;\r\n const handle = event => {\r\n if (!drag.enabled()) return;\r\n if (event.type === 'pointerdown') {\r\n if (event.button !== 0) return;\r\n event.preventDefault(); event.stopPropagation();\r\n pointer = event.pointerId; anchor = [event.clientX, event.clientY];\r\n origin = this._map.latLngToContainerPoint(this._latlng); moved = false;\r\n icon.setPointerCapture(pointer);\r\n this.fire('dragstart');\r\n } else if (event.pointerId === pointer && event.type === 'pointermove') {\r\n const value = new L.Point(origin.x + event.clientX - anchor[0], origin.y + event.clientY - anchor[1]);\r\n L.DomUtil.setPosition(icon, value);\r\n drag._draggable._newPos = value;\r\n drag._draggable.fire('drag', { originalEvent: event });\r\n moved = true;\r\n } else if (event.pointerId === pointer) {\r\n if (icon.hasPointerCapture(pointer)) icon.releasePointerCapture(pointer);\r\n pointer = null; this.fire('dragend'); this._map._moved = moved;\r\n }\r\n };\r\n drag.addHooks = () => L.DomEvent.on(icon, 'pointerdown pointermove pointerup pointercancel', handle);\r\n drag.removeHooks = () => L.DomEvent.off(icon, 'pointerdown pointermove pointerup pointercancel', handle);\r\n if (this.options.draggable) drag.enable();\r\n },\r\n });\r\n\r\n L.Map.include({\r\n _fireDOMEvent(event, type = event.type, targets) {\r\n const rect = this.getContainer().getBoundingClientRect();\r\n const pixel = new L.Point(event.clientX - rect.left, event.clientY - rect.top);\r\n const location = this.containerPointToLatLng(pixel);\r\n const layer = event.target.closest?.('.leaflet-marker-icon')?._cityLayer;\r\n if (type === 'click' && this._draggableMoved(layer)) return;\r\n for (const target of targets || (layer ? [layer] : [this])) {\r\n target.fire(type, { originalEvent: event, latlng: location, containerPoint: pixel,\r\n layerPoint: this.containerPointToLayerPoint(pixel) });\r\n }\r\n },\r\n });\r\n L.Map.addInitHook(function () {\r\n const mapPane = this.createPane('mapPane');\r\n for (const [name, order] of [['tilePane', 200], ['overlayPane', 400], ['markerPane', 600]]) {\r\n this.createPane(name, mapPane).style.zIndex = order;\r\n }\r\n const handler = event => this._fireDOMEvent(event);\r\n L.DomEvent.on(this.getContainer(), 'click mousemove mouseout mouseover', handler);\r\n this.once('unload', () => L.DomEvent.off(this.getContainer(), 'click mousemove mouseout mouseover', handler));\r\n });\r\n})();\r\n"],
5
+ "mappings": "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",
6
+ "names": ["style", "L", "lastId", "stamp", "object", "setOptions", "options", "zoomTiming", "Class", "args", "properties", "Child", "hook", "prototypes", "proto", "types", "fn", "context", "type", "handler", "events", "event", "data", "interval", "timer", "pending", "run", "x", "y", "round", "point", "value", "lat", "lng", "alt", "latLng", "margin", "a", "b", "min", "max", "radius", "circumference", "crs", "zoom", "scale", "tag", "className", "parent", "element", "domListeners", "domEvent", "add", "listeners", "existing", "item", "stopPropagation", "map", "name", "layers", "layer", "base", "target", "center", "control", "button", "selector", "delta", "view", "zoomChanged", "pixel", "coordinate", "original", "ratio", "factor", "magnitude", "snap", "position", "attributionSource", "updateAttribution", "values", "anchor", "pointerId", "rect", "offsets", "to", "from", "zooming", "projected", "time", "progress", "moved", "offset", "half", "bounds", "inside", "padding", "size", "available", "id", "Handler", "corner", "pane", "overlays", "container", "list", "entry", "label", "input", "checked", "other", "coordinates", "image", "url", "content", "location", "close", "screen", "result", "visit", "paths", "ring", "closest", "north", "east", "features", "convert", "geometry", "feature", "locations", "tile", "extent", "retained", "limit", "key", "coords", "done", "error", "nw", "opacity", "zIndex", "kind", "icon", "drag", "marker", "pointer", "origin", "handle", "targets", "mapPane", "order"]
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "leaflet-city-mapper",
3
- "version": "0.0.6",
3
+ "version": "0.0.8",
4
4
  "description": "A small 3D rendering engine for leaflet",
5
5
  "type": "module",
6
6
  "main": "dist/leaflet-city-mapper.js",
@@ -35,7 +35,7 @@
35
35
  },
36
36
  "homepage": "https://github.com/Raruto/leaflet-city-mapper#readme",
37
37
  "peerDependencies": {
38
- "leaflet": "^1.9.3 || ^2.0.0-alpha.1",
38
+ "leaflet": "^1.9.3 || ^2.0.0-beta.2",
39
39
  "ol": "^10.6.1"
40
40
  },
41
41
  "devDependencies": {
@@ -47,7 +47,7 @@ L.Map.mergeOptions({
47
47
 
48
48
  // Ground coordinates only: the GPU camera handles elevated geometry, never CSS transforms.
49
49
 
50
- L.Map.include({
50
+ Object.assign(L.Map.prototype, {
51
51
  layerPointToContainerPoint: mapLayerPointToContainerPoint,
52
52
  containerPointToLayerPoint: mapContainerPointToLayerPoint,
53
53
  _getCenterLayerPoint: mapGetCenterLayerPoint,
@@ -66,7 +66,7 @@ L.Map.addInitHook(initializeCameraMap);
66
66
 
67
67
  markerMethods.value = Object.defineProperties({}, Object.getOwnPropertyDescriptors(L.Marker.prototype));
68
68
  L.Marker.mergeOptions({ rotation: 0, rotateWithView: false, keepUpright: false, scale: 1 });
69
- L.Marker.include({
69
+ Object.assign(L.Marker.prototype, {
70
70
  setIcon: markerSetIcon,
71
71
  getEvents: markerGetEvents,
72
72
  _setPos: markerSetPos,
@@ -77,27 +77,27 @@ L.Marker.include({
77
77
  // Keep Leaflet's focusable marker and its drag events; only translate its screen position back to ground.
78
78
 
79
79
  popupEvents.value = L.Popup.prototype.getEvents;
80
- L.Popup.include({
80
+ Object.assign(L.Popup.prototype, {
81
81
  getEvents: popupGetEvents,
82
82
  });
83
83
  tooltipEvents.value = L.Tooltip.prototype.getEvents;
84
- L.Tooltip.include({
84
+ Object.assign(L.Tooltip.prototype, {
85
85
  getEvents: tooltipGetEvents,
86
86
  });
87
87
  popupPosition.value = L.Popup.prototype._updatePosition;
88
88
  popupPan.value = L.Popup.prototype._adjustPan;
89
- L.Popup.include({
89
+ Object.assign(L.Popup.prototype, {
90
90
  _adjustPan: popupAdjustPan,
91
91
  _updatePosition: popupUpdatePosition,
92
92
  });
93
93
  tooltipPosition.value = L.Tooltip.prototype._setPosition;
94
- L.Tooltip.include({
94
+ Object.assign(L.Tooltip.prototype, {
95
95
  _setPosition: tooltipSetPosition,
96
96
  });
97
97
 
98
98
  tiledBounds.value = L.GridLayer.prototype._getTiledPixelBounds;
99
99
  gridEvents.value = L.GridLayer.prototype.getEvents;
100
- L.GridLayer.include({
100
+ Object.assign(L.GridLayer.prototype, {
101
101
  getEvents: gridlayerGetEvents,
102
102
  _getTiledPixelBounds: gridlayerGetTiledPixelBounds,
103
103
  });
@@ -2,9 +2,9 @@ import { mapMethods } from '../globals/mapMethods.js';
2
2
 
3
3
 
4
4
  export function mapTryAnimatedPan(center, options) {
5
- // Leaflet's geographic recentering already supplies ground pixels, not screen pixels.
6
- const offset = this._getCenterOffset(center)._trunc();
7
- if (options?.animate !== true && !this.getSize().contains(offset)) return false;
8
- mapMethods.value.panBy.call(this, offset, options);
5
+ // Leaflet's geographic recentering already supplies ground pixels, not screen pixels.
6
+ const offset = this._getCenterOffset(center)._trunc();
7
+ if (options?.animate !== true && !this.getSize().contains(offset)) return false;
8
+ (mapMethods.value._panBy || mapMethods.value.panBy).call(this, offset, options);
9
9
  return true;
10
10
  }
@@ -0,0 +1,5 @@
1
+ import { mapSetBearing } from './mapSetBearing.js';
2
+
3
+ export function setBearing(bearing, options) {
4
+ return mapSetBearing(this, bearing, options);
5
+ }
@@ -0,0 +1,5 @@
1
+ import { mapSetPitch } from './mapSetPitch.js';
2
+
3
+ export function setPitch(pitch, options) {
4
+ return mapSetPitch(this, pitch, options);
5
+ }