@openglobus/og 0.19.4 → 0.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (308) hide show
  1. package/README.md +3 -3
  2. package/css/og.css +18 -4
  3. package/lib/@openglobus/js/Clock.d.ts +106 -0
  4. package/lib/@openglobus/js/Deferred.d.ts +6 -0
  5. package/lib/@openglobus/js/Events.d.ts +90 -0
  6. package/lib/@openglobus/js/Extent.d.ts +145 -0
  7. package/lib/@openglobus/js/Globe.d.ts +134 -0
  8. package/lib/@openglobus/js/ImageCanvas.d.ts +128 -0
  9. package/lib/@openglobus/js/Lock.d.ts +15 -0
  10. package/lib/@openglobus/js/LonLat.d.ts +128 -0
  11. package/lib/@openglobus/js/Object3d.d.ts +64 -0
  12. package/lib/@openglobus/js/Popup.d.ts +46 -0
  13. package/lib/@openglobus/js/QueueArray.d.ts +16 -0
  14. package/lib/@openglobus/js/Rectangle.d.ts +76 -0
  15. package/lib/@openglobus/js/Stack.d.ts +20 -0
  16. package/lib/@openglobus/js/astro/astro.d.ts +39 -0
  17. package/lib/@openglobus/js/astro/earth.d.ts +8 -0
  18. package/lib/@openglobus/js/astro/jd.d.ts +234 -0
  19. package/lib/@openglobus/js/astro/orbit.d.ts +5 -0
  20. package/lib/@openglobus/js/astro/rotation.d.ts +2 -0
  21. package/lib/@openglobus/js/bv/Box.d.ts +32 -0
  22. package/lib/@openglobus/js/bv/Sphere.d.ts +37 -0
  23. package/lib/@openglobus/js/bv/index.d.ts +3 -0
  24. package/lib/@openglobus/js/camera/Camera.d.ts +314 -0
  25. package/lib/@openglobus/js/camera/Frustum.d.ts +139 -0
  26. package/lib/@openglobus/js/camera/PlanetCamera.d.ts +234 -0
  27. package/lib/@openglobus/js/camera/index.d.ts +3 -0
  28. package/lib/@openglobus/js/cons.d.ts +40 -0
  29. package/lib/@openglobus/js/control/Atmosphere.d.ts +16 -0
  30. package/lib/@openglobus/js/control/CompassButton.d.ts +16 -0
  31. package/lib/@openglobus/js/control/Control.d.ts +100 -0
  32. package/lib/@openglobus/js/control/DebugInfo.d.ts +25 -0
  33. package/lib/@openglobus/js/control/DrawingSwitcher.d.ts +13 -0
  34. package/lib/@openglobus/js/control/EarthCoordinates.d.ts +41 -0
  35. package/lib/@openglobus/js/control/EarthNavigation.d.ts +50 -0
  36. package/lib/@openglobus/js/control/GeoImageDragControl.d.ts +22 -0
  37. package/lib/@openglobus/js/control/KeyboardNavigation.d.ts +28 -0
  38. package/lib/@openglobus/js/control/LayerAnimation.d.ts +71 -0
  39. package/lib/@openglobus/js/control/LayerSwitcher.d.ts +36 -0
  40. package/lib/@openglobus/js/control/Lighting.d.ts +53 -0
  41. package/lib/@openglobus/js/control/MouseNavigation.d.ts +64 -0
  42. package/lib/@openglobus/js/control/MouseWheelZoomControl.d.ts +44 -0
  43. package/lib/@openglobus/js/control/RulerSwitcher.d.ts +17 -0
  44. package/lib/@openglobus/js/control/ScaleControl.d.ts +24 -0
  45. package/lib/@openglobus/js/control/SegmentBoundVisualization.d.ts +12 -0
  46. package/lib/@openglobus/js/control/ShowFps.d.ts +9 -0
  47. package/lib/@openglobus/js/control/SimpleNavigation.d.ts +25 -0
  48. package/lib/@openglobus/js/control/SimpleSkyBackground.d.ts +17 -0
  49. package/lib/@openglobus/js/control/Sun.d.ts +33 -0
  50. package/lib/@openglobus/js/control/ToggleWireframe.d.ts +14 -0
  51. package/lib/@openglobus/js/control/TouchNavigation.d.ts +52 -0
  52. package/lib/@openglobus/js/control/ZoomControl.d.ts +27 -0
  53. package/lib/@openglobus/js/control/drawing/DrawingControl.d.ts +12 -0
  54. package/lib/@openglobus/js/control/drawing/LineStringDrawingScene.d.ts +15 -0
  55. package/lib/@openglobus/js/control/drawing/PolygonDrawingScene.d.ts +98 -0
  56. package/lib/@openglobus/js/control/elevationProfile/ElevationProfile.d.ts +77 -0
  57. package/lib/@openglobus/js/control/elevationProfile/ElevationProfileButtonsView.d.ts +14 -0
  58. package/lib/@openglobus/js/control/elevationProfile/ElevationProfileControl.d.ts +33 -0
  59. package/lib/@openglobus/js/control/elevationProfile/ElevationProfileLegend.d.ts +20 -0
  60. package/lib/@openglobus/js/control/elevationProfile/ElevationProfileScene.d.ts +80 -0
  61. package/lib/@openglobus/js/control/elevationProfile/ElevationProfileView.d.ts +63 -0
  62. package/lib/@openglobus/js/control/elevationProfile/PointListDialog.d.ts +12 -0
  63. package/lib/@openglobus/js/control/heightRuler/HeightRuler.d.ts +7 -0
  64. package/lib/@openglobus/js/control/heightRuler/HeightRulerScene.d.ts +35 -0
  65. package/lib/@openglobus/js/control/heightRuler/HeightRulerSwitcher.d.ts +6 -0
  66. package/lib/@openglobus/js/control/index.d.ts +29 -0
  67. package/lib/@openglobus/js/control/ruler/Ruler.d.ts +13 -0
  68. package/lib/@openglobus/js/control/ruler/RulerScene.d.ts +88 -0
  69. package/lib/@openglobus/js/control/selection/Selection.d.ts +55 -0
  70. package/lib/@openglobus/js/control/selection/SelectionScene.d.ts +44 -0
  71. package/lib/@openglobus/js/control/timeline/TimelineControl.d.ts +18 -0
  72. package/lib/@openglobus/js/control/timeline/TimelineModel.d.ts +41 -0
  73. package/lib/@openglobus/js/control/timeline/TimelineView.d.ts +85 -0
  74. package/lib/@openglobus/js/control/timeline/timelineUtils.d.ts +12 -0
  75. package/lib/@openglobus/js/control/visibleExtent/drawnode.d.ts +7 -0
  76. package/lib/@openglobus/js/ellipsoid/Ellipsoid.d.ts +193 -0
  77. package/lib/@openglobus/js/ellipsoid/index.d.ts +3 -0
  78. package/lib/@openglobus/js/ellipsoid/wgs84.d.ts +6 -0
  79. package/lib/@openglobus/js/entity/BaseBillboard.d.ts +222 -0
  80. package/lib/@openglobus/js/entity/BaseBillboardHandler.d.ts +81 -0
  81. package/lib/@openglobus/js/entity/Billboard.d.ts +113 -0
  82. package/lib/@openglobus/js/entity/BillboardHandler.d.ts +15 -0
  83. package/lib/@openglobus/js/entity/Entity.d.ts +354 -0
  84. package/lib/@openglobus/js/entity/EntityCollection.d.ts +363 -0
  85. package/lib/@openglobus/js/entity/GeoObject.d.ts +152 -0
  86. package/lib/@openglobus/js/entity/GeoObjectHandler.d.ts +104 -0
  87. package/lib/@openglobus/js/entity/Geometry.d.ts +124 -0
  88. package/lib/@openglobus/js/entity/GeometryHandler.d.ts +84 -0
  89. package/lib/@openglobus/js/entity/Label.d.ts +214 -0
  90. package/lib/@openglobus/js/entity/LabelHandler.d.ts +65 -0
  91. package/lib/@openglobus/js/entity/LabelWorker.d.ts +15 -0
  92. package/lib/@openglobus/js/entity/PointCloud.d.ts +179 -0
  93. package/lib/@openglobus/js/entity/PointCloudHandler.d.ts +42 -0
  94. package/lib/@openglobus/js/entity/Polyline.d.ts +345 -0
  95. package/lib/@openglobus/js/entity/PolylineHandler.d.ts +22 -0
  96. package/lib/@openglobus/js/entity/Ray.d.ts +133 -0
  97. package/lib/@openglobus/js/entity/RayHandler.d.ts +70 -0
  98. package/lib/@openglobus/js/entity/Strip.d.ts +139 -0
  99. package/lib/@openglobus/js/entity/StripHandler.d.ts +42 -0
  100. package/lib/@openglobus/js/entity/index.d.ts +10 -0
  101. package/lib/@openglobus/js/index.d.ts +33 -0
  102. package/lib/@openglobus/js/input/KeyboardHandler.d.ts +33 -0
  103. package/lib/@openglobus/js/input/MouseHandler.d.ts +16 -0
  104. package/lib/@openglobus/js/input/TouchHandler.d.ts +11 -0
  105. package/lib/@openglobus/js/input/input.d.ts +3 -0
  106. package/lib/@openglobus/js/layer/BaseGeoImage.d.ts +145 -0
  107. package/lib/@openglobus/js/layer/Bing.d.ts +4 -0
  108. package/lib/@openglobus/js/layer/CanvasTiles.d.ts +103 -0
  109. package/lib/@openglobus/js/layer/GeoImage.d.ts +61 -0
  110. package/lib/@openglobus/js/layer/GeoTexture2d.d.ts +17 -0
  111. package/lib/@openglobus/js/layer/GeoVideo.d.ts +68 -0
  112. package/lib/@openglobus/js/layer/KML.d.ts +72 -0
  113. package/lib/@openglobus/js/layer/Layer.d.ts +415 -0
  114. package/lib/@openglobus/js/layer/Material.d.ts +34 -0
  115. package/lib/@openglobus/js/layer/OpenStreetMap.d.ts +4 -0
  116. package/lib/@openglobus/js/layer/Vector.d.ts +246 -0
  117. package/lib/@openglobus/js/layer/WMS.d.ts +75 -0
  118. package/lib/@openglobus/js/layer/XYZ.d.ts +148 -0
  119. package/lib/@openglobus/js/layer/index.d.ts +12 -0
  120. package/lib/@openglobus/js/light/LightSource.d.ts +174 -0
  121. package/lib/@openglobus/js/math/Line2.d.ts +11 -0
  122. package/lib/@openglobus/js/math/Line3.d.ts +28 -0
  123. package/lib/@openglobus/js/math/Mat3.d.ts +77 -0
  124. package/lib/@openglobus/js/math/Mat4.d.ts +195 -0
  125. package/lib/@openglobus/js/math/Plane.d.ts +20 -0
  126. package/lib/@openglobus/js/math/Quat.d.ts +373 -0
  127. package/lib/@openglobus/js/math/Ray.d.ts +76 -0
  128. package/lib/@openglobus/js/math/Vec2.d.ts +310 -0
  129. package/lib/@openglobus/js/math/Vec3.d.ts +472 -0
  130. package/lib/@openglobus/js/math/Vec4.d.ts +163 -0
  131. package/lib/@openglobus/js/math/coder.d.ts +51 -0
  132. package/lib/@openglobus/js/math/index.d.ts +11 -0
  133. package/lib/@openglobus/js/math.d.ts +266 -0
  134. package/lib/@openglobus/js/mercator.d.ts +92 -0
  135. package/lib/@openglobus/js/proj/EPSG3857.d.ts +9 -0
  136. package/lib/@openglobus/js/proj/EPSG4326.d.ts +9 -0
  137. package/lib/@openglobus/js/proj/Proj.d.ts +43 -0
  138. package/lib/@openglobus/js/quadTree/EPSG4326QuadTreeStrategy.d.ts +6 -0
  139. package/lib/@openglobus/js/quadTree/EarthQuadTreeStrategy.d.ts +9 -0
  140. package/lib/@openglobus/js/quadTree/EntityCollectionNode.d.ts +54 -0
  141. package/lib/@openglobus/js/quadTree/MarsQuadTreeStrategy.d.ts +11 -0
  142. package/lib/@openglobus/js/quadTree/Node.d.ts +80 -0
  143. package/lib/@openglobus/js/quadTree/QuadTreeStrategy.d.ts +28 -0
  144. package/lib/@openglobus/js/quadTree/Wgs84QuadTreeStrategy.d.ts +6 -0
  145. package/lib/@openglobus/js/quadTree/index.d.ts +12 -0
  146. package/lib/@openglobus/js/quadTree/quadTree.d.ts +40 -0
  147. package/lib/@openglobus/js/renderer/Renderer.d.ts +319 -0
  148. package/lib/@openglobus/js/renderer/RendererEvents.d.ts +240 -0
  149. package/lib/@openglobus/js/scene/Axes.d.ts +12 -0
  150. package/lib/@openglobus/js/scene/BaseNode.d.ts +61 -0
  151. package/lib/@openglobus/js/scene/Planet.d.ts +652 -0
  152. package/lib/@openglobus/js/scene/RenderNode.d.ts +150 -0
  153. package/lib/@openglobus/js/scene/SkyBox.d.ts +13 -0
  154. package/lib/@openglobus/js/scene/index.d.ts +5 -0
  155. package/lib/@openglobus/js/segment/Segment.d.ts +288 -0
  156. package/lib/@openglobus/js/segment/SegmentLonLat.d.ts +44 -0
  157. package/lib/@openglobus/js/segment/SegmentLonLatWgs84.d.ts +10 -0
  158. package/lib/@openglobus/js/segment/Slice.d.ts +13 -0
  159. package/lib/@openglobus/js/segment/segmentHelper.d.ts +18 -0
  160. package/lib/@openglobus/js/shaders/atmos.d.ts +4 -0
  161. package/lib/@openglobus/js/shaders/billboard.d.ts +3 -0
  162. package/lib/@openglobus/js/shaders/bloom.d.ts +2 -0
  163. package/lib/@openglobus/js/shaders/blur.d.ts +3 -0
  164. package/lib/@openglobus/js/shaders/depth.d.ts +2 -0
  165. package/lib/@openglobus/js/shaders/drawnode.d.ts +8 -0
  166. package/lib/@openglobus/js/shaders/geoObject.d.ts +3 -0
  167. package/lib/@openglobus/js/shaders/label.d.ts +4 -0
  168. package/lib/@openglobus/js/shaders/lumFilter.d.ts +2 -0
  169. package/lib/@openglobus/js/shaders/pointCloud.d.ts +2 -0
  170. package/lib/@openglobus/js/shaders/polyline.d.ts +3 -0
  171. package/lib/@openglobus/js/shaders/ray.d.ts +2 -0
  172. package/lib/@openglobus/js/shaders/screenFrame.d.ts +2 -0
  173. package/lib/@openglobus/js/shaders/skybox.d.ts +2 -0
  174. package/lib/@openglobus/js/shaders/toneMapping.d.ts +2 -0
  175. package/lib/@openglobus/js/shaders/utils.d.ts +1 -0
  176. package/lib/@openglobus/js/terrain/BilTerrain.d.ts +18 -0
  177. package/lib/@openglobus/js/terrain/EmptyTerrain.d.ts +113 -0
  178. package/lib/@openglobus/js/terrain/Geoid.d.ts +33 -0
  179. package/lib/@openglobus/js/terrain/GlobusRgbTerrain.d.ts +6 -0
  180. package/lib/@openglobus/js/terrain/GlobusTerrain.d.ts +137 -0
  181. package/lib/{js/terrain/MapboxTerrain.d.ts → @openglobus/js/terrain/RgbTerrain.d.ts} +5 -5
  182. package/lib/@openglobus/js/terrain/index.d.ts +6 -0
  183. package/lib/@openglobus/js/ui/Button.d.ts +32 -0
  184. package/lib/@openglobus/js/ui/ButtonGroup.d.ts +16 -0
  185. package/lib/@openglobus/js/ui/Color.d.ts +22 -0
  186. package/lib/@openglobus/js/ui/Dialog.d.ts +55 -0
  187. package/lib/@openglobus/js/ui/Slider.d.ts +38 -0
  188. package/lib/@openglobus/js/ui/ToggleButton.d.ts +20 -0
  189. package/lib/@openglobus/js/ui/View.d.ts +37 -0
  190. package/lib/@openglobus/js/ui/icons.d.ts +1 -0
  191. package/lib/@openglobus/js/utils/BaseWorker.d.ts +14 -0
  192. package/lib/@openglobus/js/utils/FontAtlas.d.ts +82 -0
  193. package/lib/@openglobus/js/utils/GeoImageCreator.d.ts +34 -0
  194. package/lib/@openglobus/js/utils/ImagesCacheManager.d.ts +22 -0
  195. package/lib/@openglobus/js/utils/Loader.d.ts +63 -0
  196. package/lib/@openglobus/js/utils/NormalMapCreator.d.ts +52 -0
  197. package/lib/@openglobus/js/utils/PlainSegmentWorker.d.ts +24 -0
  198. package/lib/@openglobus/js/utils/TerrainWorker.d.ts +28 -0
  199. package/lib/@openglobus/js/utils/TextureAtlas.d.ts +113 -0
  200. package/lib/@openglobus/js/utils/VectorTileCreator.d.ts +18 -0
  201. package/lib/@openglobus/js/utils/colorTable.d.ts +3 -0
  202. package/lib/@openglobus/js/utils/earcut.d.ts +7 -0
  203. package/lib/@openglobus/js/utils/objParser.d.ts +24 -0
  204. package/lib/@openglobus/js/utils/shared.d.ts +263 -0
  205. package/lib/@openglobus/js/utils/units.d.ts +16 -0
  206. package/lib/@openglobus/js/webgl/BaseFramebuffer.d.ts +53 -0
  207. package/lib/@openglobus/js/webgl/Framebuffer.d.ts +69 -0
  208. package/lib/@openglobus/js/webgl/Handler.d.ts +473 -0
  209. package/lib/@openglobus/js/webgl/Multisample.d.ts +27 -0
  210. package/lib/@openglobus/js/webgl/Program.d.ts +159 -0
  211. package/lib/@openglobus/js/webgl/ProgramController.d.ts +86 -0
  212. package/lib/@openglobus/js/webgl/index.d.ts +6 -0
  213. package/lib/@openglobus/js/webgl/types.d.ts +9 -0
  214. package/lib/@openglobus/js/webgl/variableHandlers.d.ts +22 -0
  215. package/lib/@openglobus/og.css +1 -1
  216. package/lib/@openglobus/og.esm.js +1 -1
  217. package/lib/@openglobus/og.esm.js.map +1 -1
  218. package/lib/@openglobus/og.umd.js +1 -1
  219. package/lib/@openglobus/og.umd.js.map +1 -1
  220. package/lib/js/Extent.js +2 -2
  221. package/lib/js/Globe.d.ts +1 -1
  222. package/lib/js/Object3d.d.ts +8 -1
  223. package/lib/js/Object3d.js +12 -2
  224. package/lib/js/camera/Frustum.d.ts +1 -1
  225. package/lib/js/camera/Frustum.js +3 -2
  226. package/lib/js/control/DebugInfo.js +19 -18
  227. package/lib/js/control/Lighting.d.ts +4 -0
  228. package/lib/js/control/Lighting.js +51 -12
  229. package/lib/js/control/SimpleSkyBackground.d.ts +2 -0
  230. package/lib/js/control/SimpleSkyBackground.js +13 -3
  231. package/lib/js/control/drawing/PolygonDrawingScene.js +2 -2
  232. package/lib/js/control/visibleExtent/drawnode.js +1 -1
  233. package/lib/js/entity/GeoObject.d.ts +12 -3
  234. package/lib/js/entity/GeoObject.js +34 -2
  235. package/lib/js/entity/GeoObjectHandler.d.ts +5 -0
  236. package/lib/js/entity/GeoObjectHandler.js +47 -0
  237. package/lib/js/entity/Geometry.d.ts +24 -11
  238. package/lib/js/entity/Geometry.js +17 -9
  239. package/lib/js/entity/GeometryHandler.js +5 -5
  240. package/lib/js/entity/Label.d.ts +7 -0
  241. package/lib/js/entity/Label.js +11 -0
  242. package/lib/js/entity/Polyline.d.ts +15 -7
  243. package/lib/js/entity/Polyline.js +54 -6
  244. package/lib/js/entity/Strip.d.ts +12 -0
  245. package/lib/js/entity/Strip.js +16 -0
  246. package/lib/js/entity/StripHandler.js +1 -1
  247. package/lib/js/entity/index.d.ts +10 -11
  248. package/lib/js/entity/index.js +10 -11
  249. package/lib/js/index.d.ts +5 -5
  250. package/lib/js/index.js +5 -5
  251. package/lib/js/layer/Bing.d.ts +4 -0
  252. package/lib/js/layer/Bing.js +40 -0
  253. package/lib/js/layer/GeoImage.d.ts +1 -1
  254. package/lib/js/layer/GeoVideo.d.ts +1 -1
  255. package/lib/js/layer/Layer.d.ts +1 -1
  256. package/lib/js/layer/Layer.js +2 -2
  257. package/lib/js/layer/OpenStreetMap.d.ts +4 -0
  258. package/lib/js/layer/OpenStreetMap.js +19 -0
  259. package/lib/js/layer/Vector.d.ts +3 -0
  260. package/lib/js/layer/Vector.js +3 -3
  261. package/lib/js/layer/index.d.ts +12 -11
  262. package/lib/js/layer/index.js +12 -11
  263. package/lib/js/math/Mat4.js +18 -17
  264. package/lib/js/mercator.js +2 -1
  265. package/lib/js/quadTree/EPSG4326QuadTreeStrategy.js +4 -5
  266. package/lib/js/quadTree/EarthQuadTreeStrategy.d.ts +3 -0
  267. package/lib/js/quadTree/EarthQuadTreeStrategy.js +40 -5
  268. package/lib/js/quadTree/EntityCollectionNode.d.ts +2 -2
  269. package/lib/js/quadTree/EntityCollectionNode.js +13 -14
  270. package/lib/js/quadTree/MarsQuadTreeStrategy.d.ts +5 -0
  271. package/lib/js/quadTree/MarsQuadTreeStrategy.js +31 -5
  272. package/lib/js/quadTree/Node.d.ts +2 -1
  273. package/lib/js/quadTree/Node.js +38 -28
  274. package/lib/js/quadTree/QuadTreeStrategy.d.ts +3 -0
  275. package/lib/js/quadTree/QuadTreeStrategy.js +17 -0
  276. package/lib/js/quadTree/Wgs84QuadTreeStrategy.js +3 -3
  277. package/lib/js/renderer/Renderer.js +1 -0
  278. package/lib/js/scene/Planet.js +6 -4
  279. package/lib/js/segment/Segment.d.ts +12 -9
  280. package/lib/js/segment/Segment.js +47 -24
  281. package/lib/js/segment/SegmentLonLat.d.ts +1 -5
  282. package/lib/js/segment/SegmentLonLat.js +8 -100
  283. package/lib/js/segment/SegmentLonLatWgs84.js +5 -3
  284. package/lib/js/shaders/billboard.js +4 -4
  285. package/lib/js/shaders/drawnode.js +16 -19
  286. package/lib/js/shaders/geoObject.js +4 -5
  287. package/lib/js/shaders/ray.js +7 -3
  288. package/lib/js/terrain/BilTerrain.d.ts +1 -1
  289. package/lib/js/terrain/BilTerrain.js +7 -6
  290. package/lib/js/terrain/EmptyTerrain.d.ts +7 -0
  291. package/lib/js/terrain/EmptyTerrain.js +7 -0
  292. package/lib/js/terrain/GlobusRgbTerrain.d.ts +6 -0
  293. package/lib/js/terrain/GlobusRgbTerrain.js +25 -0
  294. package/lib/js/terrain/GlobusTerrain.d.ts +5 -5
  295. package/lib/js/terrain/GlobusTerrain.js +35 -30
  296. package/lib/js/terrain/RgbTerrain.d.ts +22 -0
  297. package/lib/js/terrain/RgbTerrain.js +415 -0
  298. package/lib/js/terrain/index.d.ts +3 -2
  299. package/lib/js/terrain/index.js +3 -2
  300. package/lib/js/ui/Color.d.ts +22 -0
  301. package/lib/js/ui/Color.js +58 -0
  302. package/lib/js/utils/GeoImageCreator.js +1 -1
  303. package/lib/js/utils/NormalMapCreator.js +1 -1
  304. package/lib/js/utils/VectorTileCreator.js +3 -3
  305. package/lib/js/utils/shared.d.ts +1 -8
  306. package/lib/js/utils/shared.js +17 -8
  307. package/package.json +2 -1
  308. package/lib/js/terrain/MapboxTerrain.js +0 -305
@@ -1,6 +1,6 @@
1
1
  import { EventsHandler } from "../Events";
2
2
  import { TypedArray } from "../utils/shared";
3
- import { EmptyTerrain, IEmptyTerrainParams } from "./EmptyTerrain";
3
+ import { EmptyTerrain, IEmptyTerrainParams, UrlRewriteFunc } from "./EmptyTerrain";
4
4
  import { Extent } from "../Extent";
5
5
  import { Loader } from "../utils/Loader";
6
6
  import { LonLat } from "../LonLat";
@@ -18,7 +18,6 @@ type TileData = {
18
18
  heights: number[] | TypedArray | null;
19
19
  extent: Extent | null;
20
20
  };
21
- type UrlRewriteFunc = (segment: Segment, url: string) => string;
22
21
  /**
23
22
  * Class that loads segment elevation data, converts it to the array and passes it to the planet segment.
24
23
  * @class
@@ -66,8 +65,9 @@ declare class GlobusTerrain extends EmptyTerrain {
66
65
  get loader(): Loader<GlobusTerrain>;
67
66
  clearCache(): void;
68
67
  isBlur(segment: Segment): boolean;
68
+ setElevationCache(tileIndex: string, tileData: TileData): void;
69
+ getElevationCache(tileIndex: string): TileData | undefined;
69
70
  getHeightAsync(lonLat: LonLat, callback: (h: number) => void, zoom?: number, firstAttempt?: boolean): boolean;
70
- getTileCache(lonLat: LonLat, z: number): TileData | undefined;
71
71
  protected _getGroundHeightMerc(merc: LonLat, tileData: TileData): number;
72
72
  /**
73
73
  * Stop loading.
@@ -97,7 +97,7 @@ declare class GlobusTerrain extends EmptyTerrain {
97
97
  */
98
98
  loadTerrain(segment: Segment, forceLoading?: boolean): void;
99
99
  protected _getSubdomain(): string;
100
- _buildURL(x: number, y: number, z: number): string;
100
+ buildURL(x: number, y: number, z: number, tileGroup: number): string;
101
101
  /**
102
102
  * Creates default query url string.
103
103
  * @protected
@@ -123,7 +123,7 @@ declare class GlobusTerrain extends EmptyTerrain {
123
123
  * @public
124
124
  * @returns {Array.<number>} -
125
125
  */
126
- protected _createHeights(data: any, tileIndex?: string, x?: number, y?: number, z?: number, extent?: Extent, isMaxZoom?: boolean): TypedArray | number[];
126
+ protected _createHeights(data: any, segment?: Segment | null, tileGroup?: number, x?: number, y?: number, z?: number, extent?: Extent, isMaxZoom?: boolean): TypedArray | number[];
127
127
  /**
128
128
  * @protected
129
129
  */
@@ -1,13 +1,13 @@
1
1
  import * as mercator from "../mercator";
2
2
  import { createEvents } from "../Events";
3
3
  import { createExtent, stringTemplate } from "../utils/shared";
4
- import { EPSG3857 } from "../proj/EPSG3857";
5
4
  import { EmptyTerrain } from "./EmptyTerrain";
6
5
  import { Extent } from "../Extent";
7
6
  import { Layer } from "../layer/Layer";
8
7
  import { Loader } from "../utils/Loader";
9
8
  import { LonLat } from "../LonLat";
10
9
  import { NOTRENDERING } from "../quadTree/quadTree";
10
+ import { TILEGROUP_COMMON } from "../segment/Segment";
11
11
  // import { QueueArray } from '../QueueArray';
12
12
  import { Ray } from "../math/Ray";
13
13
  import { Vec3 } from "../math/Vec3";
@@ -87,15 +87,22 @@ class GlobusTerrain extends EmptyTerrain {
87
87
  isBlur(segment) {
88
88
  return segment.tileZoom >= 6;
89
89
  }
90
+ setElevationCache(tileIndex, tileData) {
91
+ this._elevationCache[tileIndex] = tileData;
92
+ }
93
+ getElevationCache(tileIndex) {
94
+ return this._elevationCache[tileIndex];
95
+ }
90
96
  getHeightAsync(lonLat, callback, zoom, firstAttempt) {
91
97
  if (!lonLat || lonLat.lat > mercator.MAX_LAT || lonLat.lat < mercator.MIN_LAT) {
92
98
  callback(0);
93
99
  return true;
94
100
  }
95
101
  firstAttempt = firstAttempt != undefined ? firstAttempt : true;
96
- let z = zoom || this.maxZoom, z2 = Math.pow(2, z), size = mercator.POLE2 / z2, merc = mercator.forward(lonLat), x = Math.floor((mercator.POLE + merc.lon) / size), y = Math.floor((mercator.POLE - merc.lat) / size);
97
- let tileIndex = Layer.getTileIndex(x, y, z);
98
- let cache = this._elevationCache[tileIndex];
102
+ const [x, y, z, tileGroup] = this._planet.quadTreeStrategy.getTileXY(lonLat, zoom || this.maxZoom);
103
+ let tileIndex = Layer.getTileIndex(x, y, z, tileGroup);
104
+ let cache = this.getElevationCache(tileIndex);
105
+ let merc = mercator.forward(lonLat);
99
106
  if (cache) {
100
107
  if (cache.heights) {
101
108
  callback(this._getGroundHeightMerc(merc, cache));
@@ -106,21 +113,22 @@ class GlobusTerrain extends EmptyTerrain {
106
113
  return true;
107
114
  }
108
115
  else {
109
- if (!this._fetchCache[tileIndex]) {
110
- let url = this._buildURL(x, y, z);
111
- this._fetchCache[tileIndex] = this._loader.fetch({
112
- src: url,
116
+ let def = this._fetchCache[tileIndex];
117
+ if (!def) {
118
+ def = this._loader.fetch({
119
+ src: this.buildURL(x, y, z, tileGroup),
113
120
  type: this._dataType
114
121
  });
122
+ this._fetchCache[tileIndex] = def;
115
123
  }
116
- this._fetchCache[tileIndex].then((response) => {
124
+ def.then((response) => {
117
125
  let extent = mercator.getTileExtent(x, y, z);
118
126
  if (response.status === "ready") {
119
127
  let cache = {
120
- heights: this._createHeights(response.data, tileIndex, x, y, z, extent),
128
+ heights: this._createHeights(response.data, null, tileGroup, x, y, z, extent),
121
129
  extent: extent
122
130
  };
123
- this._elevationCache[tileIndex] = cache;
131
+ this.setElevationCache(tileIndex, cache);
124
132
  callback(this._getGroundHeightMerc(merc, cache));
125
133
  }
126
134
  else if (response.status === "error") {
@@ -129,10 +137,10 @@ class GlobusTerrain extends EmptyTerrain {
129
137
  this.getHeightAsync(lonLat, callback, this.maxNativeZoom, false);
130
138
  return;
131
139
  }
132
- this._elevationCache[tileIndex] = {
140
+ this.setElevationCache(tileIndex, {
133
141
  heights: null,
134
142
  extent: extent
135
- };
143
+ });
136
144
  callback(0);
137
145
  }
138
146
  else {
@@ -144,14 +152,6 @@ class GlobusTerrain extends EmptyTerrain {
144
152
  }
145
153
  return false;
146
154
  }
147
- getTileCache(lonLat, z) {
148
- if (!lonLat || lonLat.lat > mercator.MAX_LAT || lonLat.lat < mercator.MIN_LAT) {
149
- return;
150
- }
151
- let z2 = Math.pow(2, z), size = mercator.POLE2 / z2, merc = mercator.forward(lonLat), x = Math.floor((mercator.POLE + merc.lon) / size), y = Math.floor((mercator.POLE - merc.lat) / size);
152
- let tileIndex = Layer.getTileIndex(x, y, z);
153
- return this._elevationCache[tileIndex];
154
- }
155
155
  _getGroundHeightMerc(merc, tileData) {
156
156
  if (!(tileData.extent && tileData.heights)) {
157
157
  return 0;
@@ -207,7 +207,7 @@ class GlobusTerrain extends EmptyTerrain {
207
207
  this.name = name;
208
208
  }
209
209
  isReadyToLoad(segment) {
210
- return segment._projection.equal(EPSG3857) && this._extent.overlaps(segment.getExtentLonLat());
210
+ return segment._tileGroup === TILEGROUP_COMMON && this._extent.overlaps(segment.getExtentLonLat());
211
211
  }
212
212
  /**
213
213
  * Starts to load segment elevation data.
@@ -220,7 +220,7 @@ class GlobusTerrain extends EmptyTerrain {
220
220
  segment.terrainReady = false;
221
221
  segment.terrainIsLoading = true;
222
222
  if (this.isReadyToLoad(segment)) {
223
- let cache = this._elevationCache[segment.tileIndex];
223
+ let cache = this.getElevationCache(segment.tileIndex);
224
224
  if (cache) {
225
225
  this._applyElevationsData(segment, cache.heights);
226
226
  }
@@ -233,11 +233,11 @@ class GlobusTerrain extends EmptyTerrain {
233
233
  filter: () => (segment.plainReady && segment.node.getState() !== NOTRENDERING) || forceLoading
234
234
  }, (response) => {
235
235
  if (response.status === "ready") {
236
- let heights = this._createHeights(response.data, segment.tileIndex, segment.tileX, segment.tileY, segment.tileZoom, segment.getExtent(), segment.tileZoom === this.maxZoom);
237
- this._elevationCache[segment.tileIndex] = {
236
+ let heights = this._createHeights(response.data, segment, segment._tileGroup, segment.tileX, segment.tileY, segment.tileZoom, segment.getExtent(), segment.tileZoom === this.maxZoom);
237
+ this.setElevationCache(segment.tileIndex, {
238
238
  heights: heights,
239
239
  extent: segment.getExtent()
240
- };
240
+ });
241
241
  this._applyElevationsData(segment, heights);
242
242
  }
243
243
  else if (response.status === "abort") {
@@ -264,7 +264,7 @@ class GlobusTerrain extends EmptyTerrain {
264
264
  this._requestCount++;
265
265
  return this._s[Math.floor(this._requestCount % (this._requestsPeerSubdomain * this._s.length) / this._requestsPeerSubdomain)];
266
266
  }
267
- _buildURL(x, y, z) {
267
+ buildURL(x, y, z, tileGroup) {
268
268
  return stringTemplate(this.url, {
269
269
  s: this._getSubdomain(),
270
270
  x: x.toString(),
@@ -279,7 +279,7 @@ class GlobusTerrain extends EmptyTerrain {
279
279
  * @returns {string} -
280
280
  */
281
281
  _createUrl(segment) {
282
- return this._buildURL(segment.tileX, segment.tileY, segment.tileZoom);
282
+ return this.buildURL(segment.tileX, segment.tileY, segment.tileZoom, segment._tileGroup);
283
283
  }
284
284
  /**
285
285
  * Returns actual url query string.
@@ -288,7 +288,12 @@ class GlobusTerrain extends EmptyTerrain {
288
288
  * @returns {string} - Url string.
289
289
  */
290
290
  _getHTTPRequestString(segment) {
291
- return this._urlRewriteCallback ? this._urlRewriteCallback(segment, this.url) : this._createUrl(segment);
291
+ if (this._urlRewriteCallback) {
292
+ return this._urlRewriteCallback(segment.tileX, segment.tileY, segment.tileZoom, segment._tileGroup) || this._createUrl(segment);
293
+ }
294
+ else {
295
+ return this._createUrl(segment);
296
+ }
292
297
  }
293
298
  /**
294
299
  * Sets url rewrite callback, used for custom url rewriting for every tile loading.
@@ -303,7 +308,7 @@ class GlobusTerrain extends EmptyTerrain {
303
308
  * @public
304
309
  * @returns {Array.<number>} -
305
310
  */
306
- _createHeights(data, tileIndex, x, y, z, extent, isMaxZoom) {
311
+ _createHeights(data, segment, tileGroup, x, y, z, extent, isMaxZoom) {
307
312
  if (this._heightFactor !== 1) {
308
313
  let res = new Float32Array(data);
309
314
  for (let i = 0, len = res.length; i < len; i++) {
@@ -0,0 +1,22 @@
1
+ import { Extent } from "../Extent";
2
+ import { GlobusTerrain, IGlobusTerrainParams } from "./GlobusTerrain";
3
+ import { LonLat } from "../LonLat";
4
+ import { Segment } from "../segment/Segment";
5
+ import { TypedArray } from "../utils/shared";
6
+ export interface IRgbTerrainParams extends IGlobusTerrainParams {
7
+ equalizeNormals?: boolean;
8
+ key?: string;
9
+ imageSize?: number;
10
+ }
11
+ declare class RgbTerrain extends GlobusTerrain {
12
+ protected _imageSize: number;
13
+ protected _ctx: CanvasRenderingContext2D;
14
+ protected _imageDataCache: Record<string, Uint8ClampedArray>;
15
+ constructor(name: string | null, options?: IRgbTerrainParams);
16
+ static checkNoDataValue(noDataValues: number[] | TypedArray, value: number): boolean;
17
+ isBlur(segment: Segment): boolean;
18
+ protected _createTemporalCanvas(size: number): CanvasRenderingContext2D;
19
+ protected _createHeights(data: HTMLImageElement | ImageBitmap, segment: Segment | null, tileGroup: number, tileX: number, tileY: number, tileZoom: number, extent: Extent, preventChildren: boolean): TypedArray | number[];
20
+ getHeightAsync(lonLat: LonLat, callback: (h: number) => void, zoom?: number): boolean;
21
+ }
22
+ export { RgbTerrain };
@@ -0,0 +1,415 @@
1
+ import { getTileExtent } from "../mercator";
2
+ import { GlobusTerrain } from "./GlobusTerrain";
3
+ import { isPowerOfTwo } from "../math";
4
+ import { Layer } from "../layer/Layer";
5
+ import { binarySearchFast } from "../utils/shared";
6
+ const rgb2Height = (r, g, b) => {
7
+ // Filter for "yellowish" pixels
8
+ if (r === 255) {
9
+ return -10000;
10
+ }
11
+ return -10000 + 0.1 * (r * 256 * 256 + g * 256 + b);
12
+ };
13
+ class RgbTerrain extends GlobusTerrain {
14
+ constructor(name, options = {}) {
15
+ super(name || "RgbTerrain", {
16
+ equalizeVertices: options.equalizeVertices != undefined ? options.equalizeVertices : true,
17
+ maxZoom: options.maxZoom || 17,
18
+ noDataValues: options.noDataValues || [-65537, -10000],
19
+ plainGridSize: options.plainGridSize || 128,
20
+ url: options.url != undefined
21
+ ? options.url
22
+ : `//api.mapbox.com/v4/mapbox.terrain-rgb/{z}/{x}/{y}.pngraw?access_token=${options.key || "<key>"}`,
23
+ gridSizeByZoom: options.gridSizeByZoom || [
24
+ 64, 32, 16, 8, 8, 8, 16, 16, 16, 32, 32, 32, 32, 32, 32, 64, 64, 64, 32, 32, 16, 8
25
+ ],
26
+ ...options
27
+ });
28
+ this.equalizeNormals = options.equalizeNormals || false;
29
+ this._dataType = "imageBitmap";
30
+ this._imageSize = options.imageSize || 256;
31
+ this._ctx = this._createTemporalCanvas(this._imageSize);
32
+ this._imageDataCache = {};
33
+ }
34
+ static checkNoDataValue(noDataValues, value) {
35
+ if (value > 50000) {
36
+ return true;
37
+ }
38
+ return binarySearchFast(noDataValues, value) !== -1;
39
+ }
40
+ isBlur(segment) {
41
+ return segment.tileZoom >= 16;
42
+ }
43
+ _createTemporalCanvas(size) {
44
+ let canvas = document.createElement("canvas");
45
+ canvas.width = size;
46
+ canvas.height = size;
47
+ return canvas.getContext("2d", {
48
+ willReadFrequently: true
49
+ });
50
+ }
51
+ _createHeights(data, segment, tileGroup, tileX, tileY, tileZoom, extent, preventChildren) {
52
+ this._ctx.clearRect(0, 0, this._imageSize, this._imageSize);
53
+ this._ctx.drawImage(data, 0, 0);
54
+ let rgbaData = this._ctx.getImageData(0, 0, this._imageSize, this._imageSize).data;
55
+ const SIZE = data.width;
56
+ let availableParentTileX = 0, availableParentTileY = 0, availableParentTileZoom = 0, availableParentData = null, skipPositiveHeights = false;
57
+ //
58
+ // Getting parent segment terrain data, for zero and nodata values for the current segment
59
+ //
60
+ if (segment) {
61
+ if (segment.tileZoom > this.maxNativeZoom) {
62
+ let pn = segment.node;
63
+ while (pn && !pn.segment.terrainExists) {
64
+ pn = pn.parentNode;
65
+ }
66
+ if (pn) {
67
+ availableParentTileX = pn.segment.tileX;
68
+ availableParentTileY = pn.segment.tileY;
69
+ availableParentTileZoom = pn.segment.tileZoom;
70
+ availableParentData = pn.segment.elevationData;
71
+ // in this case maxNativeZoom means sea level
72
+ skipPositiveHeights = availableParentTileZoom <= 8;
73
+ }
74
+ }
75
+ }
76
+ //
77
+ //Non-power of two images
78
+ //
79
+ if (!isPowerOfTwo(this._imageSize) && SIZE === this._imageSize) {
80
+ let outCurrenElevations = new Float32Array(SIZE * SIZE);
81
+ extractElevationTilesRgbNonPowerOfTwo(rgbaData, outCurrenElevations, this._heightFactor);
82
+ return outCurrenElevations;
83
+ }
84
+ //
85
+ // When image size equals grid size
86
+ //
87
+ if (this._imageSize === this.plainGridSize) {
88
+ let elevationsSize = (this.plainGridSize + 1) * (this.plainGridSize + 1);
89
+ let outCurrenElevations = new Float32Array(elevationsSize);
90
+ let [availableParentOffsetX, availableParentOffsetY, availableZoomDiff] = segment ? getTileOffset(segment.tileX, segment.tileY, segment.tileZoom, availableParentTileX, availableParentTileY, availableParentTileZoom) : [0, 0, 0];
91
+ extractElevationSimple(rgbaData, this.noDataValues, availableParentData, availableParentOffsetX, availableParentOffsetY, availableZoomDiff, skipPositiveHeights, outCurrenElevations, this._heightFactor, this._imageSize);
92
+ return outCurrenElevations;
93
+ }
94
+ //
95
+ // Power of two images
96
+ //
97
+ let elevationsSize = (this.plainGridSize + 1) * (this.plainGridSize + 1);
98
+ let d = SIZE / this.plainGridSize;
99
+ let outCurrenElevations = new Float32Array(elevationsSize);
100
+ let outChildrenElevations = new Array(d);
101
+ for (let i = 0; i < d; i++) {
102
+ outChildrenElevations[i] = [];
103
+ for (let j = 0; j < d; j++) {
104
+ outChildrenElevations[i][j] = new Float32Array(elevationsSize);
105
+ }
106
+ }
107
+ if (!preventChildren) {
108
+ extractElevationTilesRgb(rgbaData, this._heightFactor, this.noDataValues, availableParentData, availableParentTileX, availableParentTileY, availableParentTileZoom, segment ? segment.tileX : 0, segment ? segment.tileY : 0, segment ? segment.tileZoom : 0, skipPositiveHeights, outCurrenElevations, outChildrenElevations);
109
+ // Save children data to cache
110
+ for (let i = 0; i < d; i++) {
111
+ for (let j = 0; j < d; j++) {
112
+ let [x, y, z] = getChildTileIndex(tileX, tileY, tileZoom, j, i);
113
+ let tileIndex = Layer.getTileIndex(x, y, z, tileGroup);
114
+ this.setElevationCache(tileIndex, {
115
+ heights: outChildrenElevations[i][j],
116
+ //
117
+ // @todo: must work for any grids
118
+ //
119
+ extent: getTileExtent(x, y, z)
120
+ });
121
+ }
122
+ }
123
+ }
124
+ else {
125
+ extractElevationTilesRgbNoChildren(rgbaData, this._heightFactor, this.noDataValues, availableParentData, availableParentTileX, availableParentTileY, availableParentTileZoom, segment ? segment.tileX : 0, segment ? segment.tileY : 0, segment ? segment.tileZoom : 0, skipPositiveHeights, outCurrenElevations);
126
+ }
127
+ let tileIndex = Layer.getTileIndex(tileX, tileY, tileZoom, tileGroup);
128
+ // Save current data to cache
129
+ this.setElevationCache(tileIndex, {
130
+ heights: outCurrenElevations,
131
+ extent: extent
132
+ });
133
+ return outCurrenElevations;
134
+ }
135
+ getHeightAsync(lonLat, callback, zoom) {
136
+ zoom = zoom != undefined ? zoom : this.maxZoom;
137
+ if (zoom === 0) {
138
+ callback(0);
139
+ return true;
140
+ }
141
+ const qts = this._planet.quadTreeStrategy;
142
+ const [x, y, z, tileGroup] = qts.getTileXY(lonLat, zoom);
143
+ const [i, j] = qts.getLonLatTileOffset(lonLat, x, y, z, this._imageSize);
144
+ const index = (i * this._imageSize + j) * 4;
145
+ const tileIndex = Layer.getTileIndex(x, y, z, tileGroup);
146
+ if (this._imageDataCache[tileIndex]) {
147
+ let data = this._imageDataCache[tileIndex];
148
+ let height = this._heightFactor * rgb2Height(data[index], data[index + 1], data[index + 2]);
149
+ let isNoData = RgbTerrain.checkNoDataValue(this.noDataValues, height);
150
+ if (isNoData) {
151
+ return this.getHeightAsync(lonLat, callback, zoom - 1);
152
+ }
153
+ else {
154
+ callback(this._heightFactor * rgb2Height(data[index], data[index + 1], data[index + 2]));
155
+ return true;
156
+ }
157
+ }
158
+ let def = this._fetchCache[tileIndex];
159
+ if (!def) {
160
+ def = this._loader.fetch({
161
+ src: this._urlRewriteCallback && this._urlRewriteCallback(x, y, z, tileGroup) || this.buildURL(x, y, z, tileGroup),
162
+ type: this._dataType
163
+ });
164
+ this._fetchCache[tileIndex] = def;
165
+ }
166
+ def.then((response) => {
167
+ if (response.status === "ready") {
168
+ this._ctx.clearRect(0, 0, this._imageSize, this._imageSize);
169
+ this._ctx.drawImage(response.data, 0, 0);
170
+ let data = this._ctx.getImageData(0, 0, 256, 256).data;
171
+ this._imageDataCache[tileIndex] = data;
172
+ let height = this._heightFactor * rgb2Height(data[index], data[index + 1], data[index + 2]);
173
+ let isNoData = RgbTerrain.checkNoDataValue(this.noDataValues, height);
174
+ if (isNoData) {
175
+ return this.getHeightAsync(lonLat, callback, zoom - 1);
176
+ }
177
+ else {
178
+ callback(this._heightFactor * rgb2Height(data[index], data[index + 1], data[index + 2]));
179
+ }
180
+ }
181
+ else if (response.status === "error") {
182
+ return this.getHeightAsync(lonLat, callback, zoom - 1);
183
+ }
184
+ else {
185
+ //@ts-ignore
186
+ this._fetchCache[tileIndex] = null;
187
+ delete this._fetchCache[tileIndex];
188
+ }
189
+ });
190
+ return false;
191
+ }
192
+ }
193
+ function getTileOffset(currentTileX, currentTileY, currentTileZoom, parentTileX, parentTileY, parentTileZoom) {
194
+ let dz2 = 2 << (currentTileZoom - parentTileZoom - 1);
195
+ return [currentTileX - dz2 * parentTileX, currentTileY - dz2 * parentTileY, 1.0 / dz2];
196
+ }
197
+ function getChildTileIndex(currentParentTileX, currentParentTileY, currentParentTileZoom, childOffsetX, childOffsetY) {
198
+ return [currentParentTileX * 2 + childOffsetX, currentParentTileY * 2 + childOffsetY, currentParentTileZoom + 1];
199
+ }
200
+ function getParentHeight(oneByDz2, offsetX, offsetY, heights, i, j, skipPositiveHeights) {
201
+ let parentGridSize = Math.sqrt(heights.length);
202
+ let pi = Math.floor(offsetY * oneByDz2 * parentGridSize + i * oneByDz2), pj = Math.floor(offsetX * oneByDz2 * parentGridSize + j * oneByDz2);
203
+ let h = heights[pi * parentGridSize + pj];
204
+ return skipPositiveHeights ? (h > 0 ? 0 : h) : h;
205
+ }
206
+ function extractElevationSimple(rgbaData, noDataValues, availableParentData = null, availableParentOffsetX, availableParentOffsetY, availableZoomDiff, skipPositiveHeights, outCurrenElevations, heightFactor = 1, imageSize) {
207
+ for (let k = 0, len = imageSize * imageSize; k < len; k++) {
208
+ let j = k % imageSize, i = Math.floor(k / imageSize);
209
+ let fromInd4 = k * 4;
210
+ let height = heightFactor * rgb2Height(rgbaData[fromInd4], rgbaData[fromInd4 + 1], rgbaData[fromInd4 + 2]);
211
+ let isNoData = RgbTerrain.checkNoDataValue(noDataValues, height);
212
+ if ((isNoData || height === 0) && availableParentData) {
213
+ height = getParentHeight(availableZoomDiff, availableParentOffsetX, availableParentOffsetY, availableParentData, i, j, skipPositiveHeights);
214
+ }
215
+ outCurrenElevations[i * (imageSize + 1) + j] = height;
216
+ }
217
+ for (let i = 0, len = imageSize; i < len; i++) {
218
+ let j = imageSize - 1;
219
+ let fromInd4 = (i * imageSize + j) * 4;
220
+ let height = heightFactor * rgb2Height(rgbaData[fromInd4], rgbaData[fromInd4 + 1], rgbaData[fromInd4 + 2]);
221
+ let isNoData = RgbTerrain.checkNoDataValue(noDataValues, height);
222
+ if ((isNoData || height === 0) && availableParentData) {
223
+ height = getParentHeight(availableZoomDiff, availableParentOffsetX, availableParentOffsetY, availableParentData, i, j, skipPositiveHeights);
224
+ }
225
+ outCurrenElevations[i * (imageSize + 1) + imageSize] = height;
226
+ }
227
+ for (let j = 0, len = imageSize; j < len; j++) {
228
+ let i = imageSize - 1;
229
+ let fromInd4 = (i * imageSize + j) * 4;
230
+ let height = heightFactor * rgb2Height(rgbaData[fromInd4], rgbaData[fromInd4 + 1], rgbaData[fromInd4 + 2]);
231
+ let isNoData = RgbTerrain.checkNoDataValue(noDataValues, height);
232
+ if ((isNoData || height === 0) && availableParentData) {
233
+ height = getParentHeight(availableZoomDiff, availableParentOffsetX, availableParentOffsetY, availableParentData, i, j, skipPositiveHeights);
234
+ }
235
+ outCurrenElevations[imageSize * (imageSize + 1) + j] = height;
236
+ }
237
+ let height = heightFactor * rgb2Height(rgbaData[rgbaData.length - 4], rgbaData[rgbaData.length - 3], rgbaData[rgbaData.length - 2]);
238
+ let isNoData = RgbTerrain.checkNoDataValue(noDataValues, height);
239
+ if ((isNoData || height === 0) && availableParentData) {
240
+ height = getParentHeight(availableZoomDiff, availableParentOffsetX, availableParentOffsetY, availableParentData, imageSize - 1, imageSize - 1, skipPositiveHeights);
241
+ }
242
+ outCurrenElevations[outCurrenElevations.length - 1] = height;
243
+ }
244
+ function extractElevationTilesRgbNonPowerOfTwo(rgbaData, outCurrenElevations, heightFactor = 1) {
245
+ for (let i = 0, len = outCurrenElevations.length; i < len; i++) {
246
+ let i4 = i * 4;
247
+ outCurrenElevations[i] = heightFactor * rgb2Height(rgbaData[i4], rgbaData[i4 + 1], rgbaData[i4 + 2]);
248
+ }
249
+ }
250
+ function extractElevationTilesRgb(rgbaData, heightFactor, noDataValues, availableParentData = null, availableParentTileX, availableParentTileY, availableParentTileZoom, currentTileX, currentTileY, currentTileZoom, skipPositiveHeights, outCurrenElevations, outChildrenElevations) {
251
+ let destSize = Math.sqrt(outCurrenElevations.length) - 1;
252
+ let destSizeOne = destSize + 1;
253
+ let sourceSize = Math.sqrt(rgbaData.length / 4);
254
+ let dt = sourceSize / destSize;
255
+ let rightHeight = 0, bottomHeight = 0, sourceSize4 = 0;
256
+ let [availableParentOffsetX, availableParentOffsetY, availableZoomDiff] = getTileOffset(currentTileX, currentTileY, currentTileZoom, availableParentTileX, availableParentTileY, availableParentTileZoom);
257
+ for (let k = 0, currIndex = 0, sourceDataLength = rgbaData.length / 4; k < sourceDataLength; k++) {
258
+ let k4 = k * 4;
259
+ let height = heightFactor * rgb2Height(rgbaData[k4], rgbaData[k4 + 1], rgbaData[k4 + 2]);
260
+ let isNoDataCurrent = RgbTerrain.checkNoDataValue(noDataValues, height), isNoDataRight = false, isNoDataBottom = false;
261
+ let i = Math.floor(k / sourceSize), j = k % sourceSize;
262
+ //
263
+ // Try to get current height from the parent data
264
+ if ((isNoDataCurrent || height === 0) && availableParentData) {
265
+ height = getParentHeight(availableZoomDiff, availableParentOffsetX, availableParentOffsetY, availableParentData, Math.floor(i / dt), Math.floor(j / dt), skipPositiveHeights);
266
+ }
267
+ let tileX = Math.floor(j / destSize), tileY = Math.floor(i / destSize);
268
+ let destArr = outChildrenElevations[tileY][tileX];
269
+ let ii = i % destSize, jj = j % destSize;
270
+ let destIndex = (ii + tileY) * destSizeOne + jj + tileX;
271
+ destArr[destIndex] = height;
272
+ if ((i + tileY) % dt === 0 && (j + tileX) % dt === 0) {
273
+ outCurrenElevations[currIndex++] = height;
274
+ }
275
+ if ((j + 1) % destSize === 0 && j !== sourceSize - 1) {
276
+ //current tile
277
+ rightHeight = heightFactor * rgb2Height(rgbaData[k4 + 4], rgbaData[k4 + 5], rgbaData[k4 + 6]);
278
+ isNoDataRight = RgbTerrain.checkNoDataValue(noDataValues, rightHeight);
279
+ //
280
+ // Try to get right height from the parent data
281
+ if ((isNoDataRight || rightHeight === 0) && availableParentData) {
282
+ rightHeight = getParentHeight(availableZoomDiff, availableParentOffsetX, availableParentOffsetY, availableParentData, Math.floor(i / dt), Math.floor((j + 1) / dt), skipPositiveHeights);
283
+ }
284
+ let middleHeight = height;
285
+ if (!(isNoDataCurrent || isNoDataRight)) {
286
+ middleHeight = (height + rightHeight) * 0.5;
287
+ }
288
+ destIndex = (ii + tileY) * destSizeOne + jj + 1;
289
+ destArr[destIndex] = middleHeight;
290
+ if ((i + tileY) % dt === 0) {
291
+ outCurrenElevations[currIndex++] = middleHeight;
292
+ }
293
+ //next right tile
294
+ let rightindex = (ii + tileY) * destSizeOne + ((jj + 1) % destSize);
295
+ outChildrenElevations[tileY][tileX + 1][rightindex] = middleHeight;
296
+ }
297
+ if ((i + 1) % destSize === 0 && i !== sourceSize - 1) {
298
+ //current tile
299
+ sourceSize4 = sourceSize * 4;
300
+ bottomHeight = heightFactor * rgb2Height(rgbaData[k4 + sourceSize4], rgbaData[k4 + sourceSize4 + 1], rgbaData[k4 + sourceSize4 + 2]);
301
+ isNoDataBottom = RgbTerrain.checkNoDataValue(noDataValues, bottomHeight);
302
+ //
303
+ // Try to get bottom height from the parent data
304
+ if ((isNoDataBottom || bottomHeight === 0) && availableParentData) {
305
+ bottomHeight = getParentHeight(availableZoomDiff, availableParentOffsetX, availableParentOffsetY, availableParentData, Math.floor((i + 1) / dt), Math.floor(j / dt), skipPositiveHeights);
306
+ }
307
+ let middleHeight = (height + bottomHeight) * 0.5;
308
+ if (!(isNoDataCurrent || isNoDataBottom)) {
309
+ middleHeight = (height + bottomHeight) * 0.5;
310
+ }
311
+ destIndex = (ii + 1) * destSizeOne + jj + tileX;
312
+ destArr[destIndex] = middleHeight;
313
+ if ((j + tileX) % dt === 0) {
314
+ outCurrenElevations[currIndex++] = middleHeight;
315
+ }
316
+ //next bottom tile
317
+ let bottomindex = ((ii + 1) % destSize) * destSizeOne + jj + tileX;
318
+ outChildrenElevations[tileY + 1][tileX][bottomindex] = middleHeight;
319
+ }
320
+ if ((j + 1) % destSize === 0 && j !== sourceSize - 1 &&
321
+ (i + 1) % destSize === 0 && i !== sourceSize - 1) {
322
+ //current tile
323
+ let rightBottomHeight = heightFactor * rgb2Height(rgbaData[k4 + sourceSize4 + 4], rgbaData[k4 + sourceSize4 + 5], rgbaData[k4 + sourceSize4 + 6]);
324
+ let isNoDataRightBottom = RgbTerrain.checkNoDataValue(noDataValues, rightBottomHeight);
325
+ //
326
+ // Try to get right bottom height from the parent data
327
+ if ((isNoDataRightBottom || rightBottomHeight === 0) && availableParentData) {
328
+ rightBottomHeight = getParentHeight(availableZoomDiff, availableParentOffsetX, availableParentOffsetY, availableParentData, Math.floor((i + 1) / dt), Math.floor((j + 1) / dt), skipPositiveHeights);
329
+ }
330
+ let middleHeight = height;
331
+ if (!(isNoDataCurrent || isNoDataRight || isNoDataBottom || isNoDataRightBottom)) {
332
+ middleHeight = (height + rightHeight + bottomHeight + rightBottomHeight) * 0.25;
333
+ }
334
+ destIndex = (ii + 1) * destSizeOne + (jj + 1);
335
+ destArr[destIndex] = middleHeight;
336
+ outCurrenElevations[currIndex++] = middleHeight;
337
+ //next right tile
338
+ let rightindex = (ii + 1) * destSizeOne;
339
+ outChildrenElevations[tileY][tileX + 1][rightindex] = middleHeight;
340
+ //next bottom tile
341
+ let bottomindex = destSize;
342
+ outChildrenElevations[tileY + 1][tileX][bottomindex] = middleHeight;
343
+ //next right bottom tile
344
+ let rightBottomindex = 0;
345
+ outChildrenElevations[tileY + 1][tileX + 1][rightBottomindex] = middleHeight;
346
+ }
347
+ }
348
+ }
349
+ function extractElevationTilesRgbNoChildren(rgbaData, heightFactor, noDataValues, availableParentData = null, availableParentTileX, availableParentTileY, availableParentTileZoom, currentTileX, currentTileY, currentTileZoom, skipPositiveHeights, outCurrenElevations) {
350
+ let destSize = Math.sqrt(outCurrenElevations.length) - 1;
351
+ let destSizeOne = destSize + 1;
352
+ let sourceSize = Math.sqrt(rgbaData.length / 4);
353
+ let dt = sourceSize / destSize;
354
+ let rightHeight = 0, bottomHeight = 0, sourceSize4 = 0;
355
+ let [availableParentOffsetX, availableParentOffsetY, availableZoomDiff] = getTileOffset(currentTileX, currentTileY, currentTileZoom, availableParentTileX, availableParentTileY, availableParentTileZoom);
356
+ for (let k = 0, currIndex = 0, sourceDataLength = rgbaData.length / 4; k < sourceDataLength; k++) {
357
+ let k4 = k * 4;
358
+ let height = heightFactor * rgb2Height(rgbaData[k4], rgbaData[k4 + 1], rgbaData[k4 + 2]);
359
+ let isNoDataCurrent = RgbTerrain.checkNoDataValue(noDataValues, height), isNoDataRight = false, isNoDataBottom = false;
360
+ let i = Math.floor(k / sourceSize), j = k % sourceSize;
361
+ if ((isNoDataCurrent || height === 0) && availableParentData) {
362
+ height = getParentHeight(availableZoomDiff, availableParentOffsetX, availableParentOffsetY, availableParentData, Math.floor(currIndex / destSizeOne), currIndex % destSizeOne, skipPositiveHeights);
363
+ }
364
+ let tileX = Math.floor(j / destSize), tileY = Math.floor(i / destSize);
365
+ if ((i + tileY) % dt === 0 && (j + tileX) % dt === 0) {
366
+ outCurrenElevations[currIndex++] = height;
367
+ }
368
+ if ((j + 1) % destSize === 0 && j !== sourceSize - 1) {
369
+ //current tile
370
+ rightHeight = heightFactor * rgb2Height(rgbaData[k4 + 4], rgbaData[k4 + 5], rgbaData[k4 + 6]);
371
+ isNoDataRight = RgbTerrain.checkNoDataValue(noDataValues, rightHeight);
372
+ if ((isNoDataRight || rightHeight === 0) && availableParentData) {
373
+ rightHeight = getParentHeight(availableZoomDiff, availableParentOffsetX, availableParentOffsetY, availableParentData, Math.floor(currIndex / destSizeOne), currIndex % destSizeOne, skipPositiveHeights);
374
+ }
375
+ let middleHeight = height;
376
+ if (!(isNoDataCurrent || isNoDataRight)) {
377
+ middleHeight = (height + rightHeight) * 0.5;
378
+ }
379
+ if ((i + tileY) % dt === 0) {
380
+ outCurrenElevations[currIndex++] = middleHeight;
381
+ }
382
+ }
383
+ if ((i + 1) % destSize === 0 && i !== sourceSize - 1) {
384
+ //current tile
385
+ sourceSize4 = sourceSize * 4;
386
+ bottomHeight = heightFactor * rgb2Height(rgbaData[k4 + sourceSize4], rgbaData[k4 + sourceSize4 + 1], rgbaData[k4 + sourceSize4 + 2]);
387
+ isNoDataBottom = RgbTerrain.checkNoDataValue(noDataValues, bottomHeight);
388
+ if ((isNoDataBottom || bottomHeight === 0) && availableParentData) {
389
+ bottomHeight = getParentHeight(availableZoomDiff, availableParentOffsetX, availableParentOffsetY, availableParentData, Math.floor(currIndex / destSizeOne), currIndex % destSizeOne, skipPositiveHeights);
390
+ }
391
+ let middleHeight = (height + bottomHeight) * 0.5;
392
+ if (!(isNoDataCurrent || isNoDataBottom)) {
393
+ middleHeight = (height + bottomHeight) * 0.5;
394
+ }
395
+ if ((j + tileX) % dt === 0) {
396
+ outCurrenElevations[currIndex++] = middleHeight;
397
+ }
398
+ }
399
+ if ((j + 1) % destSize === 0 && j !== sourceSize - 1 &&
400
+ (i + 1) % destSize === 0 && i !== sourceSize - 1) {
401
+ //current tile
402
+ let rightBottomHeight = heightFactor * rgb2Height(rgbaData[k4 + sourceSize4 + 4], rgbaData[k4 + sourceSize4 + 5], rgbaData[k4 + sourceSize4 + 6]);
403
+ let isNoDataRightBottom = RgbTerrain.checkNoDataValue(noDataValues, rightBottomHeight);
404
+ if ((isNoDataRightBottom || rightBottomHeight === 0) && availableParentData) {
405
+ rightBottomHeight = getParentHeight(availableZoomDiff, availableParentOffsetX, availableParentOffsetY, availableParentData, Math.floor(currIndex / destSizeOne), currIndex % destSizeOne, skipPositiveHeights);
406
+ }
407
+ let middleHeight = height;
408
+ if (!(isNoDataCurrent || isNoDataRight || isNoDataBottom || isNoDataRightBottom)) {
409
+ middleHeight = (height + rightHeight + bottomHeight + rightBottomHeight) * 0.25;
410
+ }
411
+ outCurrenElevations[currIndex++] = middleHeight;
412
+ }
413
+ }
414
+ }
415
+ export { RgbTerrain };
@@ -1,5 +1,6 @@
1
1
  import { BilTerrain } from './BilTerrain';
2
2
  import { EmptyTerrain } from './EmptyTerrain';
3
3
  import { GlobusTerrain } from './GlobusTerrain';
4
- import { MapboxTerrain } from './MapboxTerrain';
5
- export { EmptyTerrain, GlobusTerrain, MapboxTerrain, BilTerrain };
4
+ import { RgbTerrain } from './RgbTerrain';
5
+ import { GlobusRgbTerrain } from './GlobusRgbTerrain';
6
+ export { EmptyTerrain, GlobusTerrain, RgbTerrain, BilTerrain, GlobusRgbTerrain };