@reearth/core 0.0.7-alpha.7 → 0.0.7-alpha.70

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 (516) hide show
  1. package/LICENSE +177 -0
  2. package/dist/core.js +71433 -61051
  3. package/dist/core.umd.cjs +666 -680
  4. package/dist/{index-DqatWUTw.js → index-CUJ6HGQn.js} +1021 -908
  5. package/dist/index.d.ts +195 -73
  6. package/package.json +88 -74
  7. package/src/Map/ClusteredLayers/index.tsx +1 -1
  8. package/src/Map/Geoid/index.tsx +68 -0
  9. package/src/Map/Geoid/types.ts +8 -0
  10. package/src/Map/Layer/hooks.ts +7 -4
  11. package/src/Map/Layer/index.tsx +3 -1
  12. package/src/Map/Layers/hooks.ts +45 -12
  13. package/src/Map/Layers/index.tsx +13 -2
  14. package/src/Map/Layers/keys.ts +1 -0
  15. package/src/Map/Sketch/hooks.ts +454 -411
  16. package/src/Map/Sketch/index.tsx +68 -21
  17. package/src/Map/Sketch/sketchMachine.ts +640 -237
  18. package/src/Map/Sketch/sketchMachine.typegen.ts +58 -1
  19. package/src/Map/Sketch/types.ts +10 -20
  20. package/src/Map/Sketch/usePluginSketchLayer.ts +105 -0
  21. package/src/Map/Sketch/useSketch.ts +558 -0
  22. package/src/Map/Sketch/useSketchFeature.ts +198 -0
  23. package/src/Map/SpatialId/constants.ts +21 -0
  24. package/src/Map/SpatialId/hooks.ts +448 -0
  25. package/src/Map/SpatialId/index.tsx +63 -0
  26. package/src/Map/SpatialId/types.ts +68 -0
  27. package/src/Map/SpatialId/utils.ts +65 -0
  28. package/src/Map/hooks.ts +54 -8
  29. package/src/Map/index.tsx +42 -9
  30. package/src/Map/ref.ts +32 -3
  31. package/src/Map/types/customProvider.ts +32 -0
  32. package/src/Map/types/index.ts +42 -3
  33. package/src/Map/types/viewerProperty.ts +12 -1
  34. package/src/Map/useTimelineManager.ts +4 -10
  35. package/src/Map/utils.ts +1 -1
  36. package/src/Visualizer/Error.tsx +4 -1
  37. package/src/Visualizer/context.tsx +5 -5
  38. package/src/Visualizer/coreContext.tsx +3 -1
  39. package/src/Visualizer/hooks.ts +56 -22
  40. package/src/Visualizer/index.stories.tsx +15 -0
  41. package/src/Visualizer/index.tsx +29 -6
  42. package/src/Visualizer/useViewport.ts +1 -1
  43. package/src/engines/Cesium/Feature/Box/hooks/box.ts +4 -4
  44. package/src/engines/Cesium/Feature/Box/hooks/edge.ts +1 -1
  45. package/src/engines/Cesium/Feature/Box/hooks/side.ts +1 -1
  46. package/src/engines/Cesium/Feature/Box/utils.ts +6 -0
  47. package/src/engines/Cesium/Feature/Ellipse/index.stories.tsx +0 -1
  48. package/src/engines/Cesium/Feature/Frustum/getFieldOfView.ts +2 -0
  49. package/src/engines/Cesium/Feature/Frustum/index.stories.tsx +0 -1
  50. package/src/engines/Cesium/Feature/HeatMap/HeatmapMesh.tsx +1 -1
  51. package/src/engines/Cesium/Feature/Marker/index.tsx +1 -1
  52. package/src/engines/Cesium/Feature/Model/index.stories.tsx +1 -2
  53. package/src/engines/Cesium/Feature/Model/index.tsx +3 -3
  54. package/src/engines/Cesium/Feature/PhotoOverlay/hooks.ts +2 -2
  55. package/src/engines/Cesium/Feature/PhotoOverlay/index.tsx +3 -1
  56. package/src/engines/Cesium/Feature/Polygon/index.stories.tsx +0 -1
  57. package/src/engines/Cesium/Feature/Polygon/index.tsx +6 -4
  58. package/src/engines/Cesium/Feature/Raster/index.stories.tsx +0 -1
  59. package/src/engines/Cesium/Feature/Raster/mvt.ts +2 -1
  60. package/src/engines/Cesium/Feature/Resource/index.stories.tsx +0 -1
  61. package/src/engines/Cesium/Feature/Resource/index.tsx +1 -27
  62. package/src/engines/Cesium/Feature/Resource/utils.ts +86 -91
  63. package/src/engines/Cesium/Feature/Tileset/hooks.ts +273 -87
  64. package/src/engines/Cesium/Feature/Tileset/index.stories.tsx +0 -1
  65. package/src/engines/Cesium/Feature/Tileset/index.tsx +7 -14
  66. package/src/engines/Cesium/Feature/Tileset/useClippingBox.ts +2 -2
  67. package/src/engines/Cesium/Feature/Tileset/useDrawClipping.ts +2 -2
  68. package/src/engines/Cesium/Feature/context.ts +3 -0
  69. package/src/engines/Cesium/Feature/index.tsx +27 -10
  70. package/src/engines/Cesium/Feature/utils.tsx +20 -12
  71. package/src/engines/Cesium/PostProcesses/hbao/AmbientOcclusion.tsx +7 -4
  72. package/src/engines/Cesium/Sketch/ControlPoint.tsx +128 -24
  73. package/src/engines/Cesium/Sketch/ExtrudedControlPoints.tsx +70 -25
  74. package/src/engines/Cesium/Sketch/ExtrudedMeasurement.tsx +3 -1
  75. package/src/engines/Cesium/Sketch/ExtrudedPolygonEntity.tsx +14 -14
  76. package/src/engines/Cesium/Sketch/PolylineEntity.tsx +7 -4
  77. package/src/engines/Cesium/Sketch/SurfaceAddingPoints.tsx +60 -0
  78. package/src/engines/Cesium/Sketch/SurfaceControlPoints.tsx +126 -35
  79. package/src/engines/Cesium/Sketch/constants.ts +5 -0
  80. package/src/engines/Cesium/Sketch/index.tsx +68 -29
  81. package/src/engines/Cesium/SpatialId/CoordinateIndicator.tsx +28 -0
  82. package/src/engines/Cesium/SpatialId/SpatialIdSpace.tsx +33 -0
  83. package/src/engines/Cesium/SpatialId/VerticalSpaceIndicator.tsx +32 -0
  84. package/src/engines/Cesium/SpatialId/index.ts +3 -0
  85. package/src/engines/Cesium/common.ts +55 -18
  86. package/src/engines/Cesium/core/Clock.tsx +1 -1
  87. package/src/engines/Cesium/core/Globe/index.tsx +69 -0
  88. package/src/engines/Cesium/core/Globe/useTerrainProviderPromise.ts +81 -0
  89. package/src/engines/Cesium/core/Imagery.test.ts +299 -42
  90. package/src/engines/Cesium/core/Imagery.tsx +282 -54
  91. package/src/engines/Cesium/core/Indicator/Indicator.tsx +2 -2
  92. package/src/engines/Cesium/core/labels/JapanGSIOptimalBVmapVectorMapLabel/JapanGSIOptimalBVmapLabelImagery.tsx +13 -6
  93. package/src/engines/Cesium/core/labels/JapanGSIOptimalBVmapVectorMapLabel/JapanGSIOptimalBVmapLabelImageryLayer.tsx +2 -1
  94. package/src/engines/Cesium/core/labels/JapanGSIOptimalBVmapVectorMapLabel/JapanGSIOptimalBVmapLabelImageryProvider.ts +3 -4
  95. package/src/engines/Cesium/core/labels/JapanGSIOptimalBVmapVectorMapLabel/JapanGSIOptimalBVmapVectorMapLabel.tsx +14 -2
  96. package/src/engines/Cesium/core/labels/JapanGSIOptimalBVmapVectorMapLabel/helpers.ts +1 -1
  97. package/src/engines/Cesium/core/labels/LabelImageryLayers.tsx +10 -1
  98. package/src/engines/Cesium/core/presets.ts +122 -48
  99. package/src/engines/Cesium/helpers/getGeometryFromEntity.ts +55 -0
  100. package/src/engines/Cesium/hooks/useCamera.ts +2 -2
  101. package/src/engines/Cesium/hooks/useCameraLimiter.ts +1 -1
  102. package/src/engines/Cesium/hooks/useEngineRef.ts +52 -5
  103. package/src/engines/Cesium/hooks/useExplicitRender.ts +2 -2
  104. package/src/engines/Cesium/hooks/useInstance.ts +1 -1
  105. package/src/engines/Cesium/hooks/useLayerDragDrop.ts +3 -3
  106. package/src/engines/Cesium/hooks/useLayerSelectWithRect.ts +2 -2
  107. package/src/engines/Cesium/hooks/useOverrideGlobeShader/useOverrideGlobeShader.ts +115 -67
  108. package/src/engines/Cesium/hooks/useViewerProperty.ts +1 -1
  109. package/src/engines/Cesium/hooks.ts +68 -17
  110. package/src/engines/Cesium/index.stories.tsx +0 -1
  111. package/src/engines/Cesium/index.tsx +38 -8
  112. package/src/engines/Cesium/pickMany.ts +2 -0
  113. package/src/engines/Cesium/types.ts +1 -1
  114. package/src/engines/Cesium/utils/mouse.ts +1 -1
  115. package/src/engines/Cesium/utils/utils.ts +1 -1
  116. package/src/mantle/atoms/compute.test.ts +4 -4
  117. package/src/mantle/atoms/compute.ts +8 -4
  118. package/src/mantle/compat/forward.ts +1 -1
  119. package/src/mantle/data/geojson.ts +49 -26
  120. package/src/mantle/data/georss.ts +2 -2
  121. package/src/mantle/data/gml.ts +2 -2
  122. package/src/mantle/data/gpx.ts +2 -2
  123. package/src/mantle/data/shapefile/parseZip.ts +1 -0
  124. package/src/mantle/evaluator/simple/expression/README.md +392 -0
  125. package/src/mantle/evaluator/simple/expression/expression.test.ts +137 -0
  126. package/src/mantle/evaluator/simple/expression/node.ts +10 -12
  127. package/src/mantle/evaluator/simple/expression/variableReplacer.test.ts +178 -0
  128. package/src/mantle/evaluator/simple/expression/variableReplacer.ts +24 -11
  129. package/src/mantle/types/appearance.ts +4 -2
  130. package/src/mantle/types/index.ts +5 -0
  131. package/src/{Visualizer → shared}/interactionMode.ts +3 -2
  132. package/src/test/setup.ts +1 -1
  133. package/src/test/utils.tsx +1 -1
  134. package/src/types/modules.d.ts +96 -0
  135. package/src/utils/StringMatcher.ts +1 -1
  136. package/src/utils/image.ts +2 -12
  137. package/src/utils/use-delayed-count.ts +1 -1
  138. package/src/utils/use-dnd/drop.ts +1 -1
  139. package/src/utils/util.ts +1 -1
  140. package/src/utils/value.ts +2 -2
  141. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_0.json +0 -1
  142. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_1.json +0 -1
  143. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_10.json +0 -1
  144. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_11.json +0 -1
  145. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_12.json +0 -1
  146. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_13.json +0 -1
  147. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_14.json +0 -1
  148. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_15.json +0 -1
  149. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_16.json +0 -1
  150. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_17.json +0 -1
  151. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_18.json +0 -1
  152. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_19.json +0 -1
  153. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_2.json +0 -1
  154. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_20.json +0 -1
  155. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_21.json +0 -1
  156. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_22.json +0 -1
  157. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_23.json +0 -1
  158. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_24.json +0 -1
  159. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_25.json +0 -1
  160. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_26.json +0 -1
  161. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_27.json +0 -1
  162. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_3.json +0 -1
  163. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_4.json +0 -1
  164. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_5.json +0 -1
  165. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_6.json +0 -1
  166. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_7.json +0 -1
  167. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_8.json +0 -1
  168. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_9.json +0 -1
  169. package/dist/cesium/Assets/Images/bing_maps_credit.png +0 -0
  170. package/dist/cesium/Assets/Images/cesium_credit.png +0 -0
  171. package/dist/cesium/Assets/Images/google_earth_credit.png +0 -0
  172. package/dist/cesium/Assets/Images/ion-credit.png +0 -0
  173. package/dist/cesium/Assets/Textures/LensFlare/DirtMask.jpg +0 -0
  174. package/dist/cesium/Assets/Textures/LensFlare/StarBurst.jpg +0 -0
  175. package/dist/cesium/Assets/Textures/NaturalEarthII/0/0/0.jpg +0 -0
  176. package/dist/cesium/Assets/Textures/NaturalEarthII/0/1/0.jpg +0 -0
  177. package/dist/cesium/Assets/Textures/NaturalEarthII/1/0/0.jpg +0 -0
  178. package/dist/cesium/Assets/Textures/NaturalEarthII/1/0/1.jpg +0 -0
  179. package/dist/cesium/Assets/Textures/NaturalEarthII/1/1/0.jpg +0 -0
  180. package/dist/cesium/Assets/Textures/NaturalEarthII/1/1/1.jpg +0 -0
  181. package/dist/cesium/Assets/Textures/NaturalEarthII/1/2/0.jpg +0 -0
  182. package/dist/cesium/Assets/Textures/NaturalEarthII/1/2/1.jpg +0 -0
  183. package/dist/cesium/Assets/Textures/NaturalEarthII/1/3/0.jpg +0 -0
  184. package/dist/cesium/Assets/Textures/NaturalEarthII/1/3/1.jpg +0 -0
  185. package/dist/cesium/Assets/Textures/NaturalEarthII/2/0/0.jpg +0 -0
  186. package/dist/cesium/Assets/Textures/NaturalEarthII/2/0/1.jpg +0 -0
  187. package/dist/cesium/Assets/Textures/NaturalEarthII/2/0/2.jpg +0 -0
  188. package/dist/cesium/Assets/Textures/NaturalEarthII/2/0/3.jpg +0 -0
  189. package/dist/cesium/Assets/Textures/NaturalEarthII/2/1/0.jpg +0 -0
  190. package/dist/cesium/Assets/Textures/NaturalEarthII/2/1/1.jpg +0 -0
  191. package/dist/cesium/Assets/Textures/NaturalEarthII/2/1/2.jpg +0 -0
  192. package/dist/cesium/Assets/Textures/NaturalEarthII/2/1/3.jpg +0 -0
  193. package/dist/cesium/Assets/Textures/NaturalEarthII/2/2/0.jpg +0 -0
  194. package/dist/cesium/Assets/Textures/NaturalEarthII/2/2/1.jpg +0 -0
  195. package/dist/cesium/Assets/Textures/NaturalEarthII/2/2/2.jpg +0 -0
  196. package/dist/cesium/Assets/Textures/NaturalEarthII/2/2/3.jpg +0 -0
  197. package/dist/cesium/Assets/Textures/NaturalEarthII/2/3/0.jpg +0 -0
  198. package/dist/cesium/Assets/Textures/NaturalEarthII/2/3/1.jpg +0 -0
  199. package/dist/cesium/Assets/Textures/NaturalEarthII/2/3/2.jpg +0 -0
  200. package/dist/cesium/Assets/Textures/NaturalEarthII/2/3/3.jpg +0 -0
  201. package/dist/cesium/Assets/Textures/NaturalEarthII/2/4/0.jpg +0 -0
  202. package/dist/cesium/Assets/Textures/NaturalEarthII/2/4/1.jpg +0 -0
  203. package/dist/cesium/Assets/Textures/NaturalEarthII/2/4/2.jpg +0 -0
  204. package/dist/cesium/Assets/Textures/NaturalEarthII/2/4/3.jpg +0 -0
  205. package/dist/cesium/Assets/Textures/NaturalEarthII/2/5/0.jpg +0 -0
  206. package/dist/cesium/Assets/Textures/NaturalEarthII/2/5/1.jpg +0 -0
  207. package/dist/cesium/Assets/Textures/NaturalEarthII/2/5/2.jpg +0 -0
  208. package/dist/cesium/Assets/Textures/NaturalEarthII/2/5/3.jpg +0 -0
  209. package/dist/cesium/Assets/Textures/NaturalEarthII/2/6/0.jpg +0 -0
  210. package/dist/cesium/Assets/Textures/NaturalEarthII/2/6/1.jpg +0 -0
  211. package/dist/cesium/Assets/Textures/NaturalEarthII/2/6/2.jpg +0 -0
  212. package/dist/cesium/Assets/Textures/NaturalEarthII/2/6/3.jpg +0 -0
  213. package/dist/cesium/Assets/Textures/NaturalEarthII/2/7/0.jpg +0 -0
  214. package/dist/cesium/Assets/Textures/NaturalEarthII/2/7/1.jpg +0 -0
  215. package/dist/cesium/Assets/Textures/NaturalEarthII/2/7/2.jpg +0 -0
  216. package/dist/cesium/Assets/Textures/NaturalEarthII/2/7/3.jpg +0 -0
  217. package/dist/cesium/Assets/Textures/NaturalEarthII/tilemapresource.xml +0 -14
  218. package/dist/cesium/Assets/Textures/SkyBox/tycho2t3_80_mx.jpg +0 -0
  219. package/dist/cesium/Assets/Textures/SkyBox/tycho2t3_80_my.jpg +0 -0
  220. package/dist/cesium/Assets/Textures/SkyBox/tycho2t3_80_mz.jpg +0 -0
  221. package/dist/cesium/Assets/Textures/SkyBox/tycho2t3_80_px.jpg +0 -0
  222. package/dist/cesium/Assets/Textures/SkyBox/tycho2t3_80_py.jpg +0 -0
  223. package/dist/cesium/Assets/Textures/SkyBox/tycho2t3_80_pz.jpg +0 -0
  224. package/dist/cesium/Assets/Textures/maki/airfield.png +0 -0
  225. package/dist/cesium/Assets/Textures/maki/airport.png +0 -0
  226. package/dist/cesium/Assets/Textures/maki/alcohol-shop.png +0 -0
  227. package/dist/cesium/Assets/Textures/maki/america-football.png +0 -0
  228. package/dist/cesium/Assets/Textures/maki/art-gallery.png +0 -0
  229. package/dist/cesium/Assets/Textures/maki/bakery.png +0 -0
  230. package/dist/cesium/Assets/Textures/maki/bank.png +0 -0
  231. package/dist/cesium/Assets/Textures/maki/bar.png +0 -0
  232. package/dist/cesium/Assets/Textures/maki/baseball.png +0 -0
  233. package/dist/cesium/Assets/Textures/maki/basketball.png +0 -0
  234. package/dist/cesium/Assets/Textures/maki/beer.png +0 -0
  235. package/dist/cesium/Assets/Textures/maki/bicycle.png +0 -0
  236. package/dist/cesium/Assets/Textures/maki/building.png +0 -0
  237. package/dist/cesium/Assets/Textures/maki/bus.png +0 -0
  238. package/dist/cesium/Assets/Textures/maki/cafe.png +0 -0
  239. package/dist/cesium/Assets/Textures/maki/camera.png +0 -0
  240. package/dist/cesium/Assets/Textures/maki/campsite.png +0 -0
  241. package/dist/cesium/Assets/Textures/maki/car.png +0 -0
  242. package/dist/cesium/Assets/Textures/maki/cemetery.png +0 -0
  243. package/dist/cesium/Assets/Textures/maki/cesium.png +0 -0
  244. package/dist/cesium/Assets/Textures/maki/chemist.png +0 -0
  245. package/dist/cesium/Assets/Textures/maki/cinema.png +0 -0
  246. package/dist/cesium/Assets/Textures/maki/circle-stroked.png +0 -0
  247. package/dist/cesium/Assets/Textures/maki/circle.png +0 -0
  248. package/dist/cesium/Assets/Textures/maki/city.png +0 -0
  249. package/dist/cesium/Assets/Textures/maki/clothing-store.png +0 -0
  250. package/dist/cesium/Assets/Textures/maki/college.png +0 -0
  251. package/dist/cesium/Assets/Textures/maki/commercial.png +0 -0
  252. package/dist/cesium/Assets/Textures/maki/cricket.png +0 -0
  253. package/dist/cesium/Assets/Textures/maki/cross.png +0 -0
  254. package/dist/cesium/Assets/Textures/maki/dam.png +0 -0
  255. package/dist/cesium/Assets/Textures/maki/danger.png +0 -0
  256. package/dist/cesium/Assets/Textures/maki/disability.png +0 -0
  257. package/dist/cesium/Assets/Textures/maki/dog-park.png +0 -0
  258. package/dist/cesium/Assets/Textures/maki/embassy.png +0 -0
  259. package/dist/cesium/Assets/Textures/maki/emergency-telephone.png +0 -0
  260. package/dist/cesium/Assets/Textures/maki/entrance.png +0 -0
  261. package/dist/cesium/Assets/Textures/maki/farm.png +0 -0
  262. package/dist/cesium/Assets/Textures/maki/fast-food.png +0 -0
  263. package/dist/cesium/Assets/Textures/maki/ferry.png +0 -0
  264. package/dist/cesium/Assets/Textures/maki/fire-station.png +0 -0
  265. package/dist/cesium/Assets/Textures/maki/fuel.png +0 -0
  266. package/dist/cesium/Assets/Textures/maki/garden.png +0 -0
  267. package/dist/cesium/Assets/Textures/maki/gift.png +0 -0
  268. package/dist/cesium/Assets/Textures/maki/golf.png +0 -0
  269. package/dist/cesium/Assets/Textures/maki/grocery.png +0 -0
  270. package/dist/cesium/Assets/Textures/maki/hairdresser.png +0 -0
  271. package/dist/cesium/Assets/Textures/maki/harbor.png +0 -0
  272. package/dist/cesium/Assets/Textures/maki/heart.png +0 -0
  273. package/dist/cesium/Assets/Textures/maki/heliport.png +0 -0
  274. package/dist/cesium/Assets/Textures/maki/hospital.png +0 -0
  275. package/dist/cesium/Assets/Textures/maki/ice-cream.png +0 -0
  276. package/dist/cesium/Assets/Textures/maki/industrial.png +0 -0
  277. package/dist/cesium/Assets/Textures/maki/land-use.png +0 -0
  278. package/dist/cesium/Assets/Textures/maki/laundry.png +0 -0
  279. package/dist/cesium/Assets/Textures/maki/library.png +0 -0
  280. package/dist/cesium/Assets/Textures/maki/lighthouse.png +0 -0
  281. package/dist/cesium/Assets/Textures/maki/lodging.png +0 -0
  282. package/dist/cesium/Assets/Textures/maki/logging.png +0 -0
  283. package/dist/cesium/Assets/Textures/maki/london-underground.png +0 -0
  284. package/dist/cesium/Assets/Textures/maki/marker-stroked.png +0 -0
  285. package/dist/cesium/Assets/Textures/maki/marker.png +0 -0
  286. package/dist/cesium/Assets/Textures/maki/minefield.png +0 -0
  287. package/dist/cesium/Assets/Textures/maki/mobilephone.png +0 -0
  288. package/dist/cesium/Assets/Textures/maki/monument.png +0 -0
  289. package/dist/cesium/Assets/Textures/maki/museum.png +0 -0
  290. package/dist/cesium/Assets/Textures/maki/music.png +0 -0
  291. package/dist/cesium/Assets/Textures/maki/oil-well.png +0 -0
  292. package/dist/cesium/Assets/Textures/maki/park.png +0 -0
  293. package/dist/cesium/Assets/Textures/maki/park2.png +0 -0
  294. package/dist/cesium/Assets/Textures/maki/parking-garage.png +0 -0
  295. package/dist/cesium/Assets/Textures/maki/parking.png +0 -0
  296. package/dist/cesium/Assets/Textures/maki/pharmacy.png +0 -0
  297. package/dist/cesium/Assets/Textures/maki/pitch.png +0 -0
  298. package/dist/cesium/Assets/Textures/maki/place-of-worship.png +0 -0
  299. package/dist/cesium/Assets/Textures/maki/playground.png +0 -0
  300. package/dist/cesium/Assets/Textures/maki/police.png +0 -0
  301. package/dist/cesium/Assets/Textures/maki/polling-place.png +0 -0
  302. package/dist/cesium/Assets/Textures/maki/post.png +0 -0
  303. package/dist/cesium/Assets/Textures/maki/prison.png +0 -0
  304. package/dist/cesium/Assets/Textures/maki/rail-above.png +0 -0
  305. package/dist/cesium/Assets/Textures/maki/rail-light.png +0 -0
  306. package/dist/cesium/Assets/Textures/maki/rail-metro.png +0 -0
  307. package/dist/cesium/Assets/Textures/maki/rail-underground.png +0 -0
  308. package/dist/cesium/Assets/Textures/maki/rail.png +0 -0
  309. package/dist/cesium/Assets/Textures/maki/religious-christian.png +0 -0
  310. package/dist/cesium/Assets/Textures/maki/religious-jewish.png +0 -0
  311. package/dist/cesium/Assets/Textures/maki/religious-muslim.png +0 -0
  312. package/dist/cesium/Assets/Textures/maki/restaurant.png +0 -0
  313. package/dist/cesium/Assets/Textures/maki/roadblock.png +0 -0
  314. package/dist/cesium/Assets/Textures/maki/rocket.png +0 -0
  315. package/dist/cesium/Assets/Textures/maki/school.png +0 -0
  316. package/dist/cesium/Assets/Textures/maki/scooter.png +0 -0
  317. package/dist/cesium/Assets/Textures/maki/shop.png +0 -0
  318. package/dist/cesium/Assets/Textures/maki/skiing.png +0 -0
  319. package/dist/cesium/Assets/Textures/maki/slaughterhouse.png +0 -0
  320. package/dist/cesium/Assets/Textures/maki/soccer.png +0 -0
  321. package/dist/cesium/Assets/Textures/maki/square-stroked.png +0 -0
  322. package/dist/cesium/Assets/Textures/maki/square.png +0 -0
  323. package/dist/cesium/Assets/Textures/maki/star-stroked.png +0 -0
  324. package/dist/cesium/Assets/Textures/maki/star.png +0 -0
  325. package/dist/cesium/Assets/Textures/maki/suitcase.png +0 -0
  326. package/dist/cesium/Assets/Textures/maki/swimming.png +0 -0
  327. package/dist/cesium/Assets/Textures/maki/telephone.png +0 -0
  328. package/dist/cesium/Assets/Textures/maki/tennis.png +0 -0
  329. package/dist/cesium/Assets/Textures/maki/theatre.png +0 -0
  330. package/dist/cesium/Assets/Textures/maki/toilets.png +0 -0
  331. package/dist/cesium/Assets/Textures/maki/town-hall.png +0 -0
  332. package/dist/cesium/Assets/Textures/maki/town.png +0 -0
  333. package/dist/cesium/Assets/Textures/maki/triangle-stroked.png +0 -0
  334. package/dist/cesium/Assets/Textures/maki/triangle.png +0 -0
  335. package/dist/cesium/Assets/Textures/maki/village.png +0 -0
  336. package/dist/cesium/Assets/Textures/maki/warehouse.png +0 -0
  337. package/dist/cesium/Assets/Textures/maki/waste-basket.png +0 -0
  338. package/dist/cesium/Assets/Textures/maki/water.png +0 -0
  339. package/dist/cesium/Assets/Textures/maki/wetland.png +0 -0
  340. package/dist/cesium/Assets/Textures/maki/zoo.png +0 -0
  341. package/dist/cesium/Assets/Textures/moonSmall.jpg +0 -0
  342. package/dist/cesium/Assets/Textures/pin.svg +0 -1
  343. package/dist/cesium/Assets/Textures/waterNormals.jpg +0 -0
  344. package/dist/cesium/Assets/Textures/waterNormalsSmall.jpg +0 -0
  345. package/dist/cesium/Assets/approximateTerrainHeights.json +0 -1
  346. package/dist/cesium/ThirdParty/Workers/package.json +0 -1
  347. package/dist/cesium/ThirdParty/Workers/pako_deflate.min.js +0 -1
  348. package/dist/cesium/ThirdParty/Workers/pako_inflate.min.js +0 -1
  349. package/dist/cesium/ThirdParty/Workers/z-worker-pako.js +0 -1
  350. package/dist/cesium/ThirdParty/basis_transcoder.wasm +0 -0
  351. package/dist/cesium/ThirdParty/draco_decoder.wasm +0 -0
  352. package/dist/cesium/ThirdParty/google-earth-dbroot-parser.js +0 -1
  353. package/dist/cesium/Widgets/Animation/Animation.css +0 -127
  354. package/dist/cesium/Widgets/Animation/lighter.css +0 -70
  355. package/dist/cesium/Widgets/BaseLayerPicker/BaseLayerPicker.css +0 -108
  356. package/dist/cesium/Widgets/BaseLayerPicker/lighter.css +0 -22
  357. package/dist/cesium/Widgets/Cesium3DTilesInspector/Cesium3DTilesInspector.css +0 -102
  358. package/dist/cesium/Widgets/CesiumInspector/CesiumInspector.css +0 -113
  359. package/dist/cesium/Widgets/CesiumWidget/CesiumWidget.css +0 -124
  360. package/dist/cesium/Widgets/CesiumWidget/lighter.css +0 -14
  361. package/dist/cesium/Widgets/FullscreenButton/FullscreenButton.css +0 -8
  362. package/dist/cesium/Widgets/Geocoder/Geocoder.css +0 -70
  363. package/dist/cesium/Widgets/Geocoder/lighter.css +0 -17
  364. package/dist/cesium/Widgets/I3SBuildingSceneLayerExplorer/I3SBuildingSceneLayerExplorer.css +0 -27
  365. package/dist/cesium/Widgets/Images/ImageryProviders/ArcGisMapServiceWorldHillshade.png +0 -0
  366. package/dist/cesium/Widgets/Images/ImageryProviders/ArcGisMapServiceWorldImagery.png +0 -0
  367. package/dist/cesium/Widgets/Images/ImageryProviders/ArcGisMapServiceWorldOcean.png +0 -0
  368. package/dist/cesium/Widgets/Images/ImageryProviders/bingAerial.png +0 -0
  369. package/dist/cesium/Widgets/Images/ImageryProviders/bingAerialLabels.png +0 -0
  370. package/dist/cesium/Widgets/Images/ImageryProviders/bingRoads.png +0 -0
  371. package/dist/cesium/Widgets/Images/ImageryProviders/blueMarble.png +0 -0
  372. package/dist/cesium/Widgets/Images/ImageryProviders/earthAtNight.png +0 -0
  373. package/dist/cesium/Widgets/Images/ImageryProviders/mapQuestOpenStreetMap.png +0 -0
  374. package/dist/cesium/Widgets/Images/ImageryProviders/mapboxSatellite.png +0 -0
  375. package/dist/cesium/Widgets/Images/ImageryProviders/mapboxStreets.png +0 -0
  376. package/dist/cesium/Widgets/Images/ImageryProviders/mapboxTerrain.png +0 -0
  377. package/dist/cesium/Widgets/Images/ImageryProviders/naturalEarthII.png +0 -0
  378. package/dist/cesium/Widgets/Images/ImageryProviders/openStreetMap.png +0 -0
  379. package/dist/cesium/Widgets/Images/ImageryProviders/sentinel-2.png +0 -0
  380. package/dist/cesium/Widgets/Images/ImageryProviders/stadiaAlidadeSmooth.png +0 -0
  381. package/dist/cesium/Widgets/Images/ImageryProviders/stadiaAlidadeSmoothDark.png +0 -0
  382. package/dist/cesium/Widgets/Images/ImageryProviders/stamenToner.png +0 -0
  383. package/dist/cesium/Widgets/Images/ImageryProviders/stamenWatercolor.png +0 -0
  384. package/dist/cesium/Widgets/Images/NavigationHelp/Mouse.svg +0 -84
  385. package/dist/cesium/Widgets/Images/NavigationHelp/MouseLeft.svg +0 -76
  386. package/dist/cesium/Widgets/Images/NavigationHelp/MouseMiddle.svg +0 -76
  387. package/dist/cesium/Widgets/Images/NavigationHelp/MouseRight.svg +0 -76
  388. package/dist/cesium/Widgets/Images/NavigationHelp/Touch.svg +0 -120
  389. package/dist/cesium/Widgets/Images/NavigationHelp/TouchDrag.svg +0 -129
  390. package/dist/cesium/Widgets/Images/NavigationHelp/TouchRotate.svg +0 -76
  391. package/dist/cesium/Widgets/Images/NavigationHelp/TouchTilt.svg +0 -135
  392. package/dist/cesium/Widgets/Images/NavigationHelp/TouchZoom.svg +0 -74
  393. package/dist/cesium/Widgets/Images/TerrainProviders/CesiumWorldTerrain.png +0 -0
  394. package/dist/cesium/Widgets/Images/TerrainProviders/Ellipsoid.png +0 -0
  395. package/dist/cesium/Widgets/Images/TimelineIcons.png +0 -0
  396. package/dist/cesium/Widgets/Images/info-loading.gif +0 -0
  397. package/dist/cesium/Widgets/InfoBox/InfoBox.css +0 -92
  398. package/dist/cesium/Widgets/InfoBox/InfoBoxDescription.css +0 -178
  399. package/dist/cesium/Widgets/NavigationHelpButton/NavigationHelpButton.css +0 -93
  400. package/dist/cesium/Widgets/NavigationHelpButton/lighter.css +0 -38
  401. package/dist/cesium/Widgets/PerformanceWatchdog/PerformanceWatchdog.css +0 -15
  402. package/dist/cesium/Widgets/ProjectionPicker/ProjectionPicker.css +0 -38
  403. package/dist/cesium/Widgets/SceneModePicker/SceneModePicker.css +0 -56
  404. package/dist/cesium/Widgets/SelectionIndicator/SelectionIndicator.css +0 -20
  405. package/dist/cesium/Widgets/Timeline/Timeline.css +0 -103
  406. package/dist/cesium/Widgets/Timeline/lighter.css +0 -23
  407. package/dist/cesium/Widgets/VRButton/VRButton.css +0 -8
  408. package/dist/cesium/Widgets/Viewer/Viewer.css +0 -107
  409. package/dist/cesium/Widgets/VoxelInspector/VoxelInspector.css +0 -16
  410. package/dist/cesium/Widgets/lighter.css +0 -237
  411. package/dist/cesium/Widgets/lighterShared.css +0 -46
  412. package/dist/cesium/Widgets/shared.css +0 -103
  413. package/dist/cesium/Widgets/widgets.css +0 -1346
  414. package/dist/cesium/Workers/chunk-2YD5QWGR.js +0 -28
  415. package/dist/cesium/Workers/chunk-3T4KR75X.js +0 -26
  416. package/dist/cesium/Workers/chunk-46KFVW24.js +0 -26
  417. package/dist/cesium/Workers/chunk-4EI6PP43.js +0 -28
  418. package/dist/cesium/Workers/chunk-4RS52VIY.js +0 -26
  419. package/dist/cesium/Workers/chunk-4YLYA3DC.js +0 -26
  420. package/dist/cesium/Workers/chunk-5ENAGXBI.js +0 -26
  421. package/dist/cesium/Workers/chunk-5VIB3TI5.js +0 -26
  422. package/dist/cesium/Workers/chunk-6NGZLDFZ.js +0 -26
  423. package/dist/cesium/Workers/chunk-6RGNWVZ2.js +0 -27
  424. package/dist/cesium/Workers/chunk-7AZZVJ52.js +0 -26
  425. package/dist/cesium/Workers/chunk-AMXAQQEL.js +0 -26
  426. package/dist/cesium/Workers/chunk-AQW44ZPC.js +0 -26
  427. package/dist/cesium/Workers/chunk-CPCMDW6Z.js +0 -26
  428. package/dist/cesium/Workers/chunk-DNL2WDRL.js +0 -26
  429. package/dist/cesium/Workers/chunk-ERW7V247.js +0 -26
  430. package/dist/cesium/Workers/chunk-EYRIA4TP.js +0 -26
  431. package/dist/cesium/Workers/chunk-F7RQIJML.js +0 -26
  432. package/dist/cesium/Workers/chunk-FPZMU6QP.js +0 -26
  433. package/dist/cesium/Workers/chunk-FZDVQW7A.js +0 -26
  434. package/dist/cesium/Workers/chunk-GAZ2U4FO.js +0 -26
  435. package/dist/cesium/Workers/chunk-I44IOOT4.js +0 -26
  436. package/dist/cesium/Workers/chunk-IALXUAD4.js +0 -26
  437. package/dist/cesium/Workers/chunk-IXBUEUZL.js +0 -26
  438. package/dist/cesium/Workers/chunk-J3GCYV5K.js +0 -26
  439. package/dist/cesium/Workers/chunk-KGSZTFHZ.js +0 -26
  440. package/dist/cesium/Workers/chunk-KKKPU2CI.js +0 -26
  441. package/dist/cesium/Workers/chunk-KTEJE5KE.js +0 -26
  442. package/dist/cesium/Workers/chunk-KYZ3DYY6.js +0 -26
  443. package/dist/cesium/Workers/chunk-L2QG4MRI.js +0 -26
  444. package/dist/cesium/Workers/chunk-MCE3KFYN.js +0 -26
  445. package/dist/cesium/Workers/chunk-MMLDGXML.js +0 -26
  446. package/dist/cesium/Workers/chunk-MTBRPBDQ.js +0 -26
  447. package/dist/cesium/Workers/chunk-OKT6VBRK.js +0 -26
  448. package/dist/cesium/Workers/chunk-PHYDKLSY.js +0 -26
  449. package/dist/cesium/Workers/chunk-PWPX3224.js +0 -26
  450. package/dist/cesium/Workers/chunk-QHOVE6WG.js +0 -26
  451. package/dist/cesium/Workers/chunk-QJ6MBL22.js +0 -26
  452. package/dist/cesium/Workers/chunk-QKO6VIG2.js +0 -26
  453. package/dist/cesium/Workers/chunk-QVEE4QL2.js +0 -26
  454. package/dist/cesium/Workers/chunk-RXQOQZ7S.js +0 -26
  455. package/dist/cesium/Workers/chunk-S3ZKQKMM.js +0 -26
  456. package/dist/cesium/Workers/chunk-SFEUMZSK.js +0 -26
  457. package/dist/cesium/Workers/chunk-T75MW4X3.js +0 -26
  458. package/dist/cesium/Workers/chunk-TVO2A75R.js +0 -66
  459. package/dist/cesium/Workers/chunk-UHR36K45.js +0 -27
  460. package/dist/cesium/Workers/chunk-UKJCDZOR.js +0 -26
  461. package/dist/cesium/Workers/chunk-VKVIYER6.js +0 -26
  462. package/dist/cesium/Workers/chunk-VPIQWTRZ.js +0 -26
  463. package/dist/cesium/Workers/chunk-XSX5HRFC.js +0 -26
  464. package/dist/cesium/Workers/chunk-Z5WQQHSL.js +0 -26
  465. package/dist/cesium/Workers/chunk-Z7B2VEL5.js +0 -26
  466. package/dist/cesium/Workers/combineGeometry.js +0 -26
  467. package/dist/cesium/Workers/createBoxGeometry.js +0 -26
  468. package/dist/cesium/Workers/createBoxOutlineGeometry.js +0 -26
  469. package/dist/cesium/Workers/createCircleGeometry.js +0 -26
  470. package/dist/cesium/Workers/createCircleOutlineGeometry.js +0 -26
  471. package/dist/cesium/Workers/createCoplanarPolygonGeometry.js +0 -26
  472. package/dist/cesium/Workers/createCoplanarPolygonOutlineGeometry.js +0 -26
  473. package/dist/cesium/Workers/createCorridorGeometry.js +0 -26
  474. package/dist/cesium/Workers/createCorridorOutlineGeometry.js +0 -26
  475. package/dist/cesium/Workers/createCylinderGeometry.js +0 -26
  476. package/dist/cesium/Workers/createCylinderOutlineGeometry.js +0 -26
  477. package/dist/cesium/Workers/createEllipseGeometry.js +0 -26
  478. package/dist/cesium/Workers/createEllipseOutlineGeometry.js +0 -26
  479. package/dist/cesium/Workers/createEllipsoidGeometry.js +0 -26
  480. package/dist/cesium/Workers/createEllipsoidOutlineGeometry.js +0 -26
  481. package/dist/cesium/Workers/createFrustumGeometry.js +0 -26
  482. package/dist/cesium/Workers/createFrustumOutlineGeometry.js +0 -26
  483. package/dist/cesium/Workers/createGeometry.js +0 -26
  484. package/dist/cesium/Workers/createGroundPolylineGeometry.js +0 -26
  485. package/dist/cesium/Workers/createPlaneGeometry.js +0 -26
  486. package/dist/cesium/Workers/createPlaneOutlineGeometry.js +0 -26
  487. package/dist/cesium/Workers/createPolygonGeometry.js +0 -26
  488. package/dist/cesium/Workers/createPolygonOutlineGeometry.js +0 -26
  489. package/dist/cesium/Workers/createPolylineGeometry.js +0 -26
  490. package/dist/cesium/Workers/createPolylineVolumeGeometry.js +0 -26
  491. package/dist/cesium/Workers/createPolylineVolumeOutlineGeometry.js +0 -26
  492. package/dist/cesium/Workers/createRectangleGeometry.js +0 -26
  493. package/dist/cesium/Workers/createRectangleOutlineGeometry.js +0 -26
  494. package/dist/cesium/Workers/createSimplePolylineGeometry.js +0 -26
  495. package/dist/cesium/Workers/createSphereGeometry.js +0 -26
  496. package/dist/cesium/Workers/createSphereOutlineGeometry.js +0 -26
  497. package/dist/cesium/Workers/createTaskProcessorWorker.js +0 -26
  498. package/dist/cesium/Workers/createVectorTileClampedPolylines.js +0 -26
  499. package/dist/cesium/Workers/createVectorTileGeometries.js +0 -26
  500. package/dist/cesium/Workers/createVectorTilePoints.js +0 -26
  501. package/dist/cesium/Workers/createVectorTilePolygons.js +0 -26
  502. package/dist/cesium/Workers/createVectorTilePolylines.js +0 -26
  503. package/dist/cesium/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +0 -26
  504. package/dist/cesium/Workers/createVerticesFromHeightmap.js +0 -26
  505. package/dist/cesium/Workers/createVerticesFromQuantizedTerrainMesh.js +0 -26
  506. package/dist/cesium/Workers/createWallGeometry.js +0 -26
  507. package/dist/cesium/Workers/createWallOutlineGeometry.js +0 -26
  508. package/dist/cesium/Workers/decodeDraco.js +0 -26
  509. package/dist/cesium/Workers/decodeGoogleEarthEnterprisePacket.js +0 -26
  510. package/dist/cesium/Workers/decodeI3S.js +0 -26
  511. package/dist/cesium/Workers/transcodeKTX2.js +0 -56
  512. package/dist/cesium/Workers/transferTypedArrayTest.js +0 -26
  513. package/dist/cesium/Workers/upsampleQuantizedTerrainMesh.js +0 -26
  514. package/src/engines/Cesium/core/Globe.tsx +0 -104
  515. /package/src/{Visualizer → shared}/featureFlags.ts +0 -0
  516. /package/src/{Map/Sketch/utils.ts → utils/use-window-event.ts} +0 -0
@@ -1,14 +1,18 @@
1
1
  import {
2
2
  Color,
3
+ ImageryLayer as CesiumImageryLayer,
3
4
  ImageryProvider,
4
5
  TextureMagnificationFilter,
5
6
  TextureMinificationFilter,
7
+ UrlTemplateImageryProvider,
6
8
  } from "cesium";
7
9
  import { isEqual } from "lodash-es";
8
- import { useCallback, useMemo, useRef, useLayoutEffect, useState } from "react";
9
- import { ImageryLayer } from "resium";
10
+ import { useCallback, useMemo, useRef, useEffect } from "react";
11
+ import { useCesium } from "resium";
10
12
 
11
- import { tiles as tilePresets } from "./presets";
13
+ import type { CustomProviderConfig } from "../../../Map/types/customProvider";
14
+
15
+ import { isValidPresetTileType, PresetTileType, tiles as tilePresets } from "./presets";
12
16
 
13
17
  export type ImageryLayerData = {
14
18
  id: string;
@@ -22,6 +26,7 @@ export type Tile = {
22
26
  id: string;
23
27
  url?: string;
24
28
  type?: string;
29
+ cesiumIonAssetId?: number;
25
30
  opacity?: number;
26
31
  zoomLevel?: number[];
27
32
  zoomLevelForURL?: number[];
@@ -31,61 +36,223 @@ export type Tile = {
31
36
  export type Props = {
32
37
  tiles?: Tile[];
33
38
  cesiumIonAccessToken?: string;
39
+ customProvider?: CustomProviderConfig;
40
+ onTilesChange?: () => void;
34
41
  };
35
42
 
36
- export default function ImageryLayers({ tiles, cesiumIonAccessToken }: Props) {
37
- const { providers, updated } = useImageryProviders({
38
- tiles,
43
+ // NOTE: This component intentionally bypasses Resium's declarative <ImageryLayer />.
44
+ // Resium wraps provider creation in queueMicrotask; under React 18 Strict Mode the effect
45
+ // cleanup runs before that microtask resolves, so the layer reference is undefined at cleanup
46
+ // time and old layers are never removed — they accumulate silently behind new ones.
47
+ // Direct imageryLayerCollection management with a `cancelled` flag is the only safe fix.
48
+ export default function ImageryLayers({
49
+ tiles,
50
+ cesiumIonAccessToken,
51
+ customProvider,
52
+ onTilesChange,
53
+ }: Props) {
54
+ const { imageryLayerCollection, scene } = useCesium();
55
+
56
+ // Create a stable tiles reference that only changes when the content actually changes
57
+ // Normalize `undefined` to a stable empty array so `useImageryProviders` doesn't allocate a new default `[]` each render.
58
+ const emptyTiles = useMemo<Tile[]>(() => [], []);
59
+ const tilesValue = tiles ?? emptyTiles;
60
+
61
+ const prevTilesRef = useRef<Tile[]>(tilesValue);
62
+ const stableTiles = useMemo(() => {
63
+ if (!isEqual(prevTilesRef.current, tilesValue)) {
64
+ prevTilesRef.current = tilesValue;
65
+ }
66
+ return prevTilesRef.current;
67
+ }, [tilesValue]);
68
+
69
+ // Pass stableTiles to useImageryProviders to prevent providers from being recreated
70
+ // when tiles reference changes but content is the same
71
+ const { providers } = useImageryProviders({
72
+ tiles: stableTiles,
39
73
  cesiumIonAccessToken,
74
+ customProvider,
40
75
  presets: tilePresets,
41
76
  });
42
77
 
43
- // force rerendering all layers when any provider is updated
44
- // since Resium does not sort layers according to ImageryLayer component order
45
- const [counter, setCounter] = useState(0);
46
- useLayoutEffect(() => {
47
- if (updated) setCounter(c => c + 1);
48
- }, [providers, updated]);
49
-
50
- return (
51
- <>
52
- {tiles
53
- ?.map(({ id, ...tile }) => ({
54
- ...tile,
55
- id,
56
- provider: providers[id]?.[2],
57
- }))
58
- .map(({ id, opacity, zoomLevel, provider, heatmap }, i) =>
59
- provider ? (
60
- <ImageryLayer
61
- key={`${id}_${i}_${counter}`}
62
- imageryProvider={provider}
63
- minimumTerrainLevel={zoomLevel?.[0]}
64
- maximumTerrainLevel={zoomLevel?.[1]}
65
- alpha={opacity}
66
- index={i}
67
- colorToAlpha={heatmap ? Color.WHITE : undefined}
68
- colorToAlphaThreshold={heatmap ? 1 : undefined}
69
- magnificationFilter={heatmap ? TextureMagnificationFilter.LINEAR : undefined}
70
- minificationFilter={heatmap ? TextureMinificationFilter.NEAREST : undefined}
71
- />
72
- ) : null,
73
- )}
74
- </>
75
- );
78
+ // Store layers keyed by tile ID to allow incremental updates
79
+ const layersRef = useRef<
80
+ Map<
81
+ string,
82
+ {
83
+ layer: CesiumImageryLayer;
84
+ tile: Tile;
85
+ provider: Promise<ImageryProvider> | ImageryProvider;
86
+ }
87
+ >
88
+ >(new Map());
89
+
90
+ useEffect(() => {
91
+ if (!imageryLayerCollection || !scene) return;
92
+
93
+ let cancelled = false;
94
+ const currentTileIds = new Set(stableTiles?.map(t => t.id) || []);
95
+
96
+ // Remove layers for tiles that no longer exist
97
+ layersRef.current.forEach(({ layer }, id) => {
98
+ if (!currentTileIds.has(id)) {
99
+ if (imageryLayerCollection.contains(layer)) {
100
+ imageryLayerCollection.remove(layer);
101
+ }
102
+ layersRef.current.delete(id);
103
+ }
104
+ });
105
+
106
+ // Track layers by their intended index to maintain order with async loading
107
+ const layersByIndex: (CesiumImageryLayer | null)[] = new Array(stableTiles?.length || 0).fill(
108
+ null,
109
+ );
110
+
111
+ const reorderLayers = () => {
112
+ if (cancelled || scene.isDestroyed()) return;
113
+
114
+ // Move each layer to its correct position based on layersByIndex
115
+ layersByIndex.forEach((layer, targetIndex) => {
116
+ if (!layer) return;
117
+
118
+ const currentIndex = imageryLayerCollection.indexOf(layer);
119
+ if (currentIndex === -1) return; // Layer not in collection
120
+
121
+ // Calculate where this layer should be: count non-null layers before it
122
+ const desiredIndex = layersByIndex.slice(0, targetIndex).filter(l => l !== null).length;
123
+
124
+ if (currentIndex !== desiredIndex) {
125
+ // Move layer to correct position
126
+ imageryLayerCollection.remove(layer, false); // Don't destroy
127
+ imageryLayerCollection.add(layer, desiredIndex);
128
+ }
129
+ });
130
+
131
+ scene.requestRender();
132
+ };
133
+
134
+ stableTiles?.forEach((tile, i) => {
135
+ const { id, zoomLevel, opacity, heatmap } = tile;
136
+ const existing = layersRef.current.get(id);
137
+ const providerOrPromise = providers[id]?.[3];
138
+
139
+ if (!providerOrPromise) return;
140
+
141
+ // Check if we can reuse the existing layer with just an opacity update
142
+ if (existing) {
143
+ const prevTile = existing.tile;
144
+ const prevProvider = existing.provider;
145
+ // Must check provider reference - if provider changed (e.g. cesiumIonAccessToken updated),
146
+ // the layer needs to be recreated even if tile properties are the same
147
+ const canReuseLayer =
148
+ prevProvider === providerOrPromise &&
149
+ prevTile.type === tile.type &&
150
+ prevTile.url === tile.url &&
151
+ prevTile.cesiumIonAssetId === tile.cesiumIonAssetId &&
152
+ prevTile.zoomLevel?.[0] === zoomLevel?.[0] &&
153
+ prevTile.zoomLevel?.[1] === zoomLevel?.[1] &&
154
+ prevTile.heatmap === heatmap;
155
+
156
+ if (canReuseLayer) {
157
+ // Only opacity might have changed - update it directly if needed
158
+ const nextAlpha = opacity ?? 1;
159
+ if (existing.layer.alpha !== nextAlpha) {
160
+ existing.layer.alpha = nextAlpha;
161
+ scene.requestRender();
162
+ }
163
+ // Update stored tile and provider for next comparison
164
+ existing.tile = tile;
165
+ existing.provider = providerOrPromise;
166
+ layersByIndex[i] = existing.layer;
167
+ reorderLayers();
168
+ return;
169
+ }
170
+
171
+ // Need to recreate the layer - remove the old one
172
+ if (imageryLayerCollection.contains(existing.layer)) {
173
+ imageryLayerCollection.remove(existing.layer);
174
+ }
175
+ layersRef.current.delete(id);
176
+ }
177
+
178
+ const doAdd = (provider: ImageryProvider) => {
179
+ if (!provider || cancelled || scene.isDestroyed()) return;
180
+ const layer = new CesiumImageryLayer(provider, {
181
+ minimumTerrainLevel: zoomLevel?.[0],
182
+ maximumTerrainLevel: zoomLevel?.[1],
183
+ alpha: opacity,
184
+ colorToAlpha: heatmap ? Color.WHITE : undefined,
185
+ colorToAlphaThreshold: heatmap ? 1 : undefined,
186
+ magnificationFilter: heatmap ? TextureMagnificationFilter.LINEAR : undefined,
187
+ minificationFilter: heatmap ? TextureMinificationFilter.NEAREST : undefined,
188
+ });
189
+
190
+ // Always append to avoid index out of bounds
191
+ imageryLayerCollection.add(layer);
192
+ layersByIndex[i] = layer;
193
+ // Store the provider reference to detect when provider changes (e.g. token update)
194
+ layersRef.current.set(id, { layer, tile, provider: providerOrPromise });
195
+
196
+ // Reorder all layers after each addition
197
+ reorderLayers();
198
+ };
199
+
200
+ if (providerOrPromise instanceof Promise) {
201
+ providerOrPromise
202
+ .then(doAdd)
203
+ .catch(err => console.error("Failed to load imagery provider:", err));
204
+ } else {
205
+ doAdd(providerOrPromise);
206
+ }
207
+ });
208
+
209
+ scene.requestRender();
210
+ onTilesChange?.();
211
+
212
+ return () => {
213
+ cancelled = true;
214
+ // Don't remove layers on cleanup - they'll be managed by the next render
215
+ // This prevents flickering when tiles change
216
+ };
217
+ }, [providers, stableTiles, imageryLayerCollection, scene, onTilesChange]);
218
+
219
+ // Cleanup all layers on unmount
220
+ useEffect(() => {
221
+ const layers = layersRef.current;
222
+ return () => {
223
+ if (!imageryLayerCollection || !scene || scene.isDestroyed()) return;
224
+ layers.forEach(({ layer }) => {
225
+ if (imageryLayerCollection.contains(layer)) {
226
+ imageryLayerCollection.remove(layer);
227
+ }
228
+ });
229
+ layers.clear();
230
+ };
231
+ }, [imageryLayerCollection, scene]);
232
+
233
+ return null;
76
234
  }
77
235
 
78
- type Providers = { [id: string]: [string | undefined, string | undefined, ImageryProvider] };
236
+ type Providers = {
237
+ [id: string]: [
238
+ string | undefined,
239
+ string | undefined,
240
+ number | undefined,
241
+ Promise<ImageryProvider> | ImageryProvider,
242
+ ];
243
+ };
79
244
 
80
245
  export function useImageryProviders({
81
246
  tiles = [],
82
247
  cesiumIonAccessToken,
248
+ customProvider,
83
249
  presets,
84
250
  }: {
85
251
  tiles?: Tile[];
86
252
  cesiumIonAccessToken?: string;
253
+ customProvider?: CustomProviderConfig;
87
254
  presets: {
88
- [key: string]: (opts?: {
255
+ [K in PresetTileType]: (opts?: {
89
256
  url?: string;
90
257
  cesiumIonAccessToken?: string;
91
258
  heatmap?: boolean;
@@ -94,24 +261,51 @@ export function useImageryProviders({
94
261
  };
95
262
  }): { providers: Providers; updated: boolean } {
96
263
  const newTile = useCallback(
97
- (t: Tile, ciat?: string) =>
98
- presets[t.type || "default"]({
264
+ (t: Tile, ciat?: string, tp?: CustomProviderConfig) => {
265
+ const opts = {
99
266
  url: t.url,
100
267
  cesiumIonAccessToken: ciat,
268
+ cesiumIonAssetId: t.cesiumIonAssetId,
101
269
  heatmap: t.heatmap,
102
- zoomLevel: t.zoomLevelForURL,
103
- }),
270
+ tile_zoomLevel: t.zoomLevelForURL,
271
+ };
272
+ if (isValidPresetTileType(t.type)) {
273
+ return presets[t.type](opts);
274
+ }
275
+ // Dynamic: check customProvider.imagery.providers for a matching id
276
+ const customEntry = tp?.imagery?.providers?.find(p => p.id === t.type);
277
+ if (customEntry) {
278
+ return new UrlTemplateImageryProvider({
279
+ url: customEntry.url,
280
+ credit: customEntry.credit,
281
+ maximumLevel: customEntry.maximumLevel,
282
+ minimumLevel: customEntry.minimumLevel,
283
+ });
284
+ }
285
+ return presets["open_street_map"](opts);
286
+ },
104
287
  [presets],
105
288
  );
106
289
 
107
290
  const prevCesiumIonAccessToken = useRef(cesiumIonAccessToken);
291
+ const prevCustomProvider = useRef(customProvider);
108
292
  const tileKeys = tiles.map(t => t.id).join(",");
109
293
  const prevTileKeys = useRef(tileKeys);
110
294
  const prevProviders = useRef<Providers>({});
295
+ const zoomLevels = useMemo(
296
+ () =>
297
+ tiles.map(t => {
298
+ if (t.id && t.zoomLevel) return { [t.id]: t.zoomLevel };
299
+ return;
300
+ }),
301
+ [tiles],
302
+ );
303
+ const prevZoomLevels = useRef(zoomLevels);
111
304
 
112
- // Manage TileProviders so that TileProvider does not need to be recreated each time tiles are updated.
305
+ // Manage CustomProviders so that CustomProvider does not need to be recreated each time tiles are updated.
113
306
  const { providers, updated } = useMemo(() => {
114
307
  const isCesiumAccessTokenUpdated = prevCesiumIonAccessToken.current !== cesiumIonAccessToken;
308
+ const isTileProviderUpdated = prevCustomProvider.current !== customProvider;
115
309
  const prevProvidersKeys = Object.keys(prevProviders.current);
116
310
  const added = tiles.map(t => t.id).filter(t => t && !prevProvidersKeys.includes(t));
117
311
 
@@ -123,7 +317,8 @@ export function useImageryProviders({
123
317
  added: added.includes(k),
124
318
  prevType: v?.[0],
125
319
  prevUrl: v?.[1],
126
- prevProvider: v?.[2],
320
+ prevIonAssetId: v?.[2],
321
+ prevProvider: v?.[3],
127
322
  tile: tiles.find(t => t.id === k),
128
323
  }));
129
324
 
@@ -135,6 +330,7 @@ export function useImageryProviders({
135
330
  added,
136
331
  prevType,
137
332
  prevUrl,
333
+ prevIonAssetId,
138
334
  prevProvider,
139
335
  tile,
140
336
  }):
@@ -143,6 +339,7 @@ export function useImageryProviders({
143
339
  [
144
340
  string | undefined,
145
341
  string | undefined,
342
+ number | undefined,
146
343
  Promise<ImageryProvider> | ImageryProvider | null | undefined,
147
344
  ],
148
345
  ]
@@ -154,28 +351,59 @@ export function useImageryProviders({
154
351
  added ||
155
352
  prevType !== tile.type ||
156
353
  prevUrl !== tile.url ||
157
- (isCesiumAccessTokenUpdated && (!tile.type || tile.type === "default"))
158
- ? [tile.type, tile.url, newTile(tile, cesiumIonAccessToken)]
159
- : [prevType, prevUrl, prevProvider],
354
+ prevIonAssetId !== tile.cesiumIonAssetId ||
355
+ isTileProviderUpdated ||
356
+ (isCesiumAccessTokenUpdated &&
357
+ (tile.type?.startsWith("cesium_ion") ||
358
+ tile.type === "default" ||
359
+ tile.type === "default_road" ||
360
+ tile.type === "default_label" ||
361
+ tile.type === "black_marble"))
362
+ ? [
363
+ tile.type,
364
+ tile.url,
365
+ tile.cesiumIonAssetId,
366
+ newTile(tile, cesiumIonAccessToken, customProvider),
367
+ ]
368
+ : [prevType, prevUrl, prevIonAssetId, prevProvider],
160
369
  ],
161
370
  )
162
371
  .filter(
163
- (e): e is [string, [string | undefined, string | undefined, ImageryProvider]] =>
164
- !!e?.[1][2],
372
+ (
373
+ e,
374
+ ): e is [
375
+ string,
376
+ [
377
+ string | undefined,
378
+ string | undefined,
379
+ number | undefined,
380
+ Promise<ImageryProvider> | ImageryProvider,
381
+ ],
382
+ ] => !!e?.[1][3],
165
383
  ),
166
384
  );
167
385
 
168
386
  const updated =
169
387
  !!added.length ||
170
388
  !!isCesiumAccessTokenUpdated ||
389
+ !!isTileProviderUpdated ||
171
390
  !isEqual(prevTileKeys.current, tileKeys) ||
172
- rawProviders.some(p => p.tile && (p.prevType !== p.tile.type || p.prevUrl !== p.tile.url));
391
+ !isEqual(prevZoomLevels.current, zoomLevels) ||
392
+ rawProviders.some(
393
+ p =>
394
+ p.tile &&
395
+ (p.prevType !== p.tile.type ||
396
+ p.prevUrl !== p.tile.url ||
397
+ p.prevIonAssetId !== p.tile.cesiumIonAssetId),
398
+ );
173
399
 
174
400
  prevTileKeys.current = tileKeys;
401
+ prevZoomLevels.current = zoomLevels;
175
402
  prevCesiumIonAccessToken.current = cesiumIonAccessToken;
403
+ prevCustomProvider.current = customProvider;
176
404
 
177
405
  return { providers, updated };
178
- }, [cesiumIonAccessToken, tiles, tileKeys, newTile]);
406
+ }, [cesiumIonAccessToken, customProvider, tiles, tileKeys, newTile, zoomLevels]);
179
407
 
180
408
  prevProviders.current = providers;
181
409
  return { providers, updated };
@@ -1,7 +1,7 @@
1
1
  /// <reference types="vite-plugin-svgr/client" />
2
2
  import useTransition from "@rot1024/use-transition";
3
3
  import { BoundingSphere, Cartesian3, SceneTransforms, Cartesian2, JulianDate } from "cesium";
4
- import { useEffect, useState } from "react";
4
+ import { useEffect, useState, type JSX } from "react";
5
5
  import { useCesium } from "resium";
6
6
 
7
7
  import type { ViewerProperty } from "../../..";
@@ -74,7 +74,7 @@ export default function Indicator({
74
74
  }
75
75
 
76
76
  if (position) {
77
- const pos = SceneTransforms.wgs84ToWindowCoordinates(viewer.scene, position);
77
+ const pos = SceneTransforms.worldToWindowCoordinates(viewer.scene, position);
78
78
  setPos(pos);
79
79
  setIsVisible(true);
80
80
  } else {
@@ -12,8 +12,9 @@ import {
12
12
  type Ellipsoid,
13
13
  type Label,
14
14
  } from "@cesium/engine";
15
+ import { DistanceDisplayCondition } from "cesium";
15
16
  import { merge, omit } from "lodash-es";
16
- import { type Feature } from "protomaps";
17
+ import { type Feature } from "protomaps-leaflet";
17
18
  import { memo, useCallback, useEffect, useMemo, useRef, type FC } from "react";
18
19
  import { useCesium } from "resium";
19
20
  import { suspend } from "suspend-react";
@@ -170,6 +171,8 @@ export interface JapanGSIOptimalBVmapLabelImageryProps {
170
171
  height?: number;
171
172
  style?: AnnotationStyle;
172
173
  labelCollection?: LabelCollection;
174
+ near?: number;
175
+ far?: number;
173
176
  }
174
177
 
175
178
  export const JapanGSIOptimalBVmapLabelImagery: FC<JapanGSIOptimalBVmapLabelImageryProps> = memo(
@@ -180,6 +183,8 @@ export const JapanGSIOptimalBVmapLabelImagery: FC<JapanGSIOptimalBVmapLabelImage
180
183
  height = 50,
181
184
  style = defaultStyle,
182
185
  labelCollection,
186
+ near,
187
+ far,
183
188
  }) => {
184
189
  const cesiumContext = useCesium();
185
190
 
@@ -211,7 +216,7 @@ export const JapanGSIOptimalBVmapLabelImagery: FC<JapanGSIOptimalBVmapLabelImage
211
216
  return [];
212
217
  }
213
218
  return features.filter(
214
- (feature): feature is AnnotationFeature =>
219
+ (feature: Feature): feature is AnnotationFeature =>
215
220
  typeof feature.props.vt_code === "number" &&
216
221
  // Look for annotations with 3-digits code only.
217
222
  // https://maps.gsi.go.jp/help/pdf/vector/optbv_featurecodes.pdf
@@ -228,7 +233,7 @@ export const JapanGSIOptimalBVmapLabelImagery: FC<JapanGSIOptimalBVmapLabelImage
228
233
  );
229
234
  }, [tile, imagery]);
230
235
 
231
- const labelsRef = useRef<Array<[AnnotationFeature, Label]>>();
236
+ const labelsRef = useRef<Array<[AnnotationFeature, Label]>>(undefined);
232
237
  const scene = cesiumContext?.scene;
233
238
 
234
239
  const updateVisibility = useCallback(() => {
@@ -266,7 +271,7 @@ export const JapanGSIOptimalBVmapLabelImagery: FC<JapanGSIOptimalBVmapLabelImage
266
271
  }
267
272
  const texts: string[] = [];
268
273
  const labels = annotations
269
- .map((feature): [AnnotationFeature, Label] | undefined => {
274
+ .map((feature: AnnotationFeature): [AnnotationFeature, Label] | undefined => {
270
275
  const styleOptions = resolveStyle(feature.props.vt_code, style);
271
276
  if (styleOptions == null) {
272
277
  return undefined;
@@ -282,6 +287,8 @@ export const JapanGSIOptimalBVmapLabelImagery: FC<JapanGSIOptimalBVmapLabelImage
282
287
  horizontalOrigin: HorizontalOrigin.CENTER,
283
288
  verticalOrigin: VerticalOrigin.BOTTOM,
284
289
  heightReference: HeightReference.CLAMP_TO_GROUND,
290
+ distanceDisplayCondition:
291
+ near || far ? new DistanceDisplayCondition(near, far) : undefined,
285
292
  disableDepthTestDistance: Infinity,
286
293
  ...styleOptions,
287
294
  };
@@ -294,7 +301,7 @@ export const JapanGSIOptimalBVmapLabelImagery: FC<JapanGSIOptimalBVmapLabelImage
294
301
 
295
302
  const removeLabels = (): void => {
296
303
  if (!labelCollection.isDestroyed()) {
297
- labels.forEach(([, label]) => {
304
+ labels.forEach(([, label]: [AnnotationFeature, Label]) => {
298
305
  labelCollection.remove(label);
299
306
  });
300
307
  }
@@ -308,7 +315,7 @@ export const JapanGSIOptimalBVmapLabelImagery: FC<JapanGSIOptimalBVmapLabelImage
308
315
  scene?.postRender.addEventListener(removeLabels);
309
316
  }
310
317
  };
311
- }, [style, annotations, scene, labelCollection]);
318
+ }, [style, annotations, scene, labelCollection, near, far]);
312
319
 
313
320
  useEffect(() => {
314
321
  updateVisibility();
@@ -11,7 +11,8 @@ import {
11
11
  import { ImageryLayerProps } from "./types";
12
12
 
13
13
  export interface LabelImageryLayerProps
14
- extends Omit<ImageryLayerProps, "imageryProvider">,
14
+ extends
15
+ Omit<ImageryLayerProps, "imageryProvider">,
15
16
  JapanGSIOptimalBVmapLabelImageryProviderOptions {
16
17
  minimumLevel?: number;
17
18
  maximumLevel?: number;
@@ -11,7 +11,7 @@ import {
11
11
  type TileDiscardPolicy,
12
12
  type TilingScheme,
13
13
  } from "@cesium/engine";
14
- import { TileCache, ZxySource } from "protomaps";
14
+ import { TileCache, ZxySource } from "protomaps-leaflet";
15
15
 
16
16
  import { getTileCoords, makeKey } from "./helpers";
17
17
 
@@ -93,8 +93,7 @@ export abstract class JapanGSIOptimalBVmapImageryProviderBase implements Imagery
93
93
  }
94
94
  }
95
95
 
96
- export interface JapanGSIOptimalBVmapLabelImageryProviderOptions
97
- extends JapanGSIOptimalBVmapImageryProviderBaseOptions {
96
+ export interface JapanGSIOptimalBVmapLabelImageryProviderOptions extends JapanGSIOptimalBVmapImageryProviderBaseOptions {
98
97
  url: string;
99
98
  minimumDataLevel: number;
100
99
  maximumDataLevel: number;
@@ -115,7 +114,7 @@ export class JapanGSIOptimalBVmapLabelImageryProvider extends JapanGSIOptimalBVm
115
114
  this.maximumDataLevel = options.maximumDataLevel;
116
115
 
117
116
  const source = new ZxySource(options.url, false);
118
- this.tileCache = new TileCache(source, 1024);
117
+ this.tileCache = new TileCache(source, 256);
119
118
 
120
119
  this.image = document.createElement("canvas");
121
120
  this.image.width = 1;
@@ -143,7 +143,9 @@ const LabelImageryCollection: FC<{
143
143
  imageriesAtom: Atom<KeyedImagery[]>;
144
144
  style?: AnnotationStyle;
145
145
  labelCollection?: LabelCollection;
146
- }> = ({ imageryProvider, imageriesAtom, style, labelCollection }) => {
146
+ near?: number;
147
+ far?: number;
148
+ }> = ({ imageryProvider, imageriesAtom, style, labelCollection, near, far }) => {
147
149
  const imageries = useAtomValue(imageriesAtom);
148
150
  return (
149
151
  <>
@@ -155,6 +157,8 @@ const LabelImageryCollection: FC<{
155
157
  descendants={imagery.descendants}
156
158
  style={style}
157
159
  labelCollection={labelCollection}
160
+ near={near}
161
+ far={far}
158
162
  />
159
163
  </Suspense>
160
164
  ))}
@@ -164,9 +168,15 @@ const LabelImageryCollection: FC<{
164
168
 
165
169
  export interface VectorMapLabelProps {
166
170
  style?: Record<string, any>;
171
+ near?: number;
172
+ far?: number;
167
173
  }
168
174
 
169
- export const JapanGSIOptimalBVmapVectorMapLabel: FC<VectorMapLabelProps> = ({ style }) => {
175
+ export const JapanGSIOptimalBVmapVectorMapLabel: FC<VectorMapLabelProps> = ({
176
+ style,
177
+ near,
178
+ far,
179
+ }) => {
170
180
  const [imageryProvider, setImageryProvider] =
171
181
  useState<JapanGSIOptimalBVmapLabelImageryProvider>();
172
182
  const setRef = useCallback((handle: CesiumComponentRef<CesiumImageryLayer> | null) => {
@@ -251,6 +261,8 @@ export const JapanGSIOptimalBVmapVectorMapLabel: FC<VectorMapLabelProps> = ({ st
251
261
  imageriesAtom={imageriesAtom}
252
262
  style={style}
253
263
  labelCollection={labels}
264
+ near={near}
265
+ far={far}
254
266
  />
255
267
  )}
256
268
  </>
@@ -1,4 +1,4 @@
1
- import { type Zxy } from "protomaps";
1
+ import { type Zxy } from "protomaps-leaflet";
2
2
 
3
3
  import { type ImageryCoords } from "./types";
4
4
 
@@ -8,6 +8,8 @@ export interface TileLabelConfig {
8
8
  labelType: "japan_gsi_optimal_bvmap";
9
9
  fillColor?: string;
10
10
  outlineColor?: string;
11
+ near?: number;
12
+ far?: number;
11
13
  style: Record<string, any>;
12
14
  }
13
15
 
@@ -23,7 +25,14 @@ const LabelImageryLayers = memo(
23
25
  if (!label) return null;
24
26
  switch (label.labelType) {
25
27
  case "japan_gsi_optimal_bvmap":
26
- return <JapanGSIOptimalBVmapVectorMapLabel key={label.id} style={label.style} />;
28
+ return (
29
+ <JapanGSIOptimalBVmapVectorMapLabel
30
+ key={label.id}
31
+ style={label.style}
32
+ near={label.near}
33
+ far={label.far}
34
+ />
35
+ );
27
36
  default:
28
37
  return null;
29
38
  }