cesium 0.13.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.
- data/LICENSE.md +259 -0
- data/README.rdoc +90 -0
- data/Rakefile +40 -0
- data/app/assets/javascripts/Assets/Assets.profile.js +8 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_0.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_1.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_10.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_11.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_12.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_13.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_14.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_15.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_16.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_17.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_18.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_19.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_2.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_20.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_21.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_22.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_23.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_24.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_25.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_26.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_27.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_3.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_4.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_5.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_6.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_7.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_8.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_9.json +1 -0
- data/app/assets/javascripts/Assets/Textures/NE2_LR_LC_SR_W_DR_2048.jpg +0 -0
- data/app/assets/javascripts/Assets/Textures/SkyBox/tycho2t3_80_mx.jpg +0 -0
- data/app/assets/javascripts/Assets/Textures/SkyBox/tycho2t3_80_my.jpg +0 -0
- data/app/assets/javascripts/Assets/Textures/SkyBox/tycho2t3_80_mz.jpg +0 -0
- data/app/assets/javascripts/Assets/Textures/SkyBox/tycho2t3_80_px.jpg +0 -0
- data/app/assets/javascripts/Assets/Textures/SkyBox/tycho2t3_80_py.jpg +0 -0
- data/app/assets/javascripts/Assets/Textures/SkyBox/tycho2t3_80_pz.jpg +0 -0
- data/app/assets/javascripts/Assets/Textures/waterNormals.jpg +0 -0
- data/app/assets/javascripts/Assets/package.json +6 -0
- data/app/assets/javascripts/Cesium.js +320 -0
- data/app/assets/javascripts/Core/AnimationController.js +148 -0
- data/app/assets/javascripts/Core/AxisAlignedBoundingBox.js +243 -0
- data/app/assets/javascripts/Core/BoundingRectangle.js +364 -0
- data/app/assets/javascripts/Core/BoundingSphere.js +819 -0
- data/app/assets/javascripts/Core/BoxTessellator.js +93 -0
- data/app/assets/javascripts/Core/Cartesian2.js +762 -0
- data/app/assets/javascripts/Core/Cartesian3.js +861 -0
- data/app/assets/javascripts/Core/Cartesian4.js +762 -0
- data/app/assets/javascripts/Core/Cartographic.js +211 -0
- data/app/assets/javascripts/Core/CatmullRomSpline.js +232 -0
- data/app/assets/javascripts/Core/Clock.js +195 -0
- data/app/assets/javascripts/Core/ClockRange.js +37 -0
- data/app/assets/javascripts/Core/ClockStep.js +32 -0
- data/app/assets/javascripts/Core/Color.js +1629 -0
- data/app/assets/javascripts/Core/ComponentDatatype.js +119 -0
- data/app/assets/javascripts/Core/Core.profile.js +8 -0
- data/app/assets/javascripts/Core/CubeMapEllipsoidTessellator.js +198 -0
- data/app/assets/javascripts/Core/CubicRealPolynomial.js +251 -0
- data/app/assets/javascripts/Core/DefaultProxy.js +30 -0
- data/app/assets/javascripts/Core/DeveloperError.js +60 -0
- data/app/assets/javascripts/Core/EarthOrientationParameters.js +383 -0
- data/app/assets/javascripts/Core/EarthOrientationParametersSample.js +50 -0
- data/app/assets/javascripts/Core/Ellipsoid.js +539 -0
- data/app/assets/javascripts/Core/EllipsoidTangentPlane.js +207 -0
- data/app/assets/javascripts/Core/EllipsoidalOccluder.js +151 -0
- data/app/assets/javascripts/Core/EncodedCartesian3.js +197 -0
- data/app/assets/javascripts/Core/Enumeration.js +67 -0
- data/app/assets/javascripts/Core/Event.js +122 -0
- data/app/assets/javascripts/Core/Extent.js +383 -0
- data/app/assets/javascripts/Core/ExtentTessellator.js +384 -0
- data/app/assets/javascripts/Core/FAR.js +13 -0
- data/app/assets/javascripts/Core/FeatureDetection.js +126 -0
- data/app/assets/javascripts/Core/Fullscreen.js +235 -0
- data/app/assets/javascripts/Core/GeographicProjection.js +107 -0
- data/app/assets/javascripts/Core/HermitePolynomialApproximation.js +176 -0
- data/app/assets/javascripts/Core/HermiteSpline.js +234 -0
- data/app/assets/javascripts/Core/Iau2006XysData.js +259 -0
- data/app/assets/javascripts/Core/Iau2006XysSample.js +36 -0
- data/app/assets/javascripts/Core/IndexDatatype.js +28 -0
- data/app/assets/javascripts/Core/Intersect.js +40 -0
- data/app/assets/javascripts/Core/IntersectionTests.js +359 -0
- data/app/assets/javascripts/Core/Interval.js +27 -0
- data/app/assets/javascripts/Core/Iso8601.js +46 -0
- data/app/assets/javascripts/Core/JulianDate.js +1228 -0
- data/app/assets/javascripts/Core/KeyboardEventModifier.js +38 -0
- data/app/assets/javascripts/Core/LagrangePolynomialApproximation.js +96 -0
- data/app/assets/javascripts/Core/LeapSecond.js +158 -0
- data/app/assets/javascripts/Core/LinearApproximation.js +98 -0
- data/app/assets/javascripts/Core/Math.js +532 -0
- data/app/assets/javascripts/Core/Matrix2.js +833 -0
- data/app/assets/javascripts/Core/Matrix3.js +1099 -0
- data/app/assets/javascripts/Core/Matrix4.js +2164 -0
- data/app/assets/javascripts/Core/MeshFilters.js +568 -0
- data/app/assets/javascripts/Core/Occluder.js +474 -0
- data/app/assets/javascripts/Core/OrientationInterpolator.js +109 -0
- data/app/assets/javascripts/Core/PlaneTessellator.js +74 -0
- data/app/assets/javascripts/Core/PolygonPipeline.js +792 -0
- data/app/assets/javascripts/Core/PolylinePipeline.js +90 -0
- data/app/assets/javascripts/Core/PrimitiveType.js +80 -0
- data/app/assets/javascripts/Core/QuadraticRealPolynomial.js +146 -0
- data/app/assets/javascripts/Core/QuarticRealPolynomial.js +339 -0
- data/app/assets/javascripts/Core/Quaternion.js +947 -0
- data/app/assets/javascripts/Core/Queue.js +95 -0
- data/app/assets/javascripts/Core/Ray.js +64 -0
- data/app/assets/javascripts/Core/ReferenceFrame.js +25 -0
- data/app/assets/javascripts/Core/RequestErrorEvent.js +35 -0
- data/app/assets/javascripts/Core/RuntimeError.js +59 -0
- data/app/assets/javascripts/Core/ScreenSpaceEventHandler.js +658 -0
- data/app/assets/javascripts/Core/ScreenSpaceEventType.js +149 -0
- data/app/assets/javascripts/Core/Shapes.js +230 -0
- data/app/assets/javascripts/Core/Spherical.js +192 -0
- data/app/assets/javascripts/Core/TaskProcessor.js +131 -0
- data/app/assets/javascripts/Core/TimeConstants.js +85 -0
- data/app/assets/javascripts/Core/TimeInterval.js +305 -0
- data/app/assets/javascripts/Core/TimeIntervalCollection.js +543 -0
- data/app/assets/javascripts/Core/TimeStandard.js +31 -0
- data/app/assets/javascripts/Core/Tipsify.js +285 -0
- data/app/assets/javascripts/Core/Transforms.js +614 -0
- data/app/assets/javascripts/Core/TridiagonalSystemSolver.js +102 -0
- data/app/assets/javascripts/Core/Visibility.js +38 -0
- data/app/assets/javascripts/Core/WebMercatorProjection.js +154 -0
- data/app/assets/javascripts/Core/WindingOrder.js +40 -0
- data/app/assets/javascripts/Core/binarySearch.js +69 -0
- data/app/assets/javascripts/Core/buildModuleUrl.js +77 -0
- data/app/assets/javascripts/Core/clone.js +21 -0
- data/app/assets/javascripts/Core/combine.js +81 -0
- data/app/assets/javascripts/Core/computeSunPosition.js +116 -0
- data/app/assets/javascripts/Core/createGuid.js +25 -0
- data/app/assets/javascripts/Core/defaultValue.js +22 -0
- data/app/assets/javascripts/Core/destroyObject.js +61 -0
- data/app/assets/javascripts/Core/freezeObject.js +20 -0
- data/app/assets/javascripts/Core/getImagePixels.js +46 -0
- data/app/assets/javascripts/Core/isLeapYear.js +30 -0
- data/app/assets/javascripts/Core/jsonp.js +116 -0
- data/app/assets/javascripts/Core/loadArrayBuffer.js +76 -0
- data/app/assets/javascripts/Core/loadImage.js +85 -0
- data/app/assets/javascripts/Core/loadJson.js +54 -0
- data/app/assets/javascripts/Core/loadText.js +78 -0
- data/app/assets/javascripts/Core/loadXML.js +76 -0
- data/app/assets/javascripts/Core/package.json +6 -0
- data/app/assets/javascripts/Core/pointInsideTriangle2D.js +41 -0
- data/app/assets/javascripts/Core/requestAnimationFrame.js +61 -0
- data/app/assets/javascripts/Core/throttleRequestByServer.js +74 -0
- data/app/assets/javascripts/Core/writeTextToCanvas.js +92 -0
- data/app/assets/javascripts/DynamicScene/CompositeDynamicObjectCollection.js +254 -0
- data/app/assets/javascripts/DynamicScene/CzmlBoolean.js +57 -0
- data/app/assets/javascripts/DynamicScene/CzmlCartesian2.js +96 -0
- data/app/assets/javascripts/DynamicScene/CzmlCartesian3.js +99 -0
- data/app/assets/javascripts/DynamicScene/CzmlCartographic.js +125 -0
- data/app/assets/javascripts/DynamicScene/CzmlColor.js +127 -0
- data/app/assets/javascripts/DynamicScene/CzmlDefaults.js +135 -0
- data/app/assets/javascripts/DynamicScene/CzmlHorizontalOrigin.js +59 -0
- data/app/assets/javascripts/DynamicScene/CzmlImage.js +61 -0
- data/app/assets/javascripts/DynamicScene/CzmlLabelStyle.js +59 -0
- data/app/assets/javascripts/DynamicScene/CzmlNumber.js +82 -0
- data/app/assets/javascripts/DynamicScene/CzmlString.js +56 -0
- data/app/assets/javascripts/DynamicScene/CzmlUnitCartesian3.js +99 -0
- data/app/assets/javascripts/DynamicScene/CzmlUnitQuaternion.js +172 -0
- data/app/assets/javascripts/DynamicScene/CzmlUnitSpherical.js +98 -0
- data/app/assets/javascripts/DynamicScene/CzmlVerticalOrigin.js +59 -0
- data/app/assets/javascripts/DynamicScene/DynamicBillboard.js +245 -0
- data/app/assets/javascripts/DynamicScene/DynamicBillboardVisualizer.js +347 -0
- data/app/assets/javascripts/DynamicScene/DynamicColorMaterial.js +78 -0
- data/app/assets/javascripts/DynamicScene/DynamicCone.js +291 -0
- data/app/assets/javascripts/DynamicScene/DynamicConeVisualizer.js +350 -0
- data/app/assets/javascripts/DynamicScene/DynamicConeVisualizerUsingCustomSensor.js +389 -0
- data/app/assets/javascripts/DynamicScene/DynamicDirectionsProperty.js +163 -0
- data/app/assets/javascripts/DynamicScene/DynamicEllipsoid.js +158 -0
- data/app/assets/javascripts/DynamicScene/DynamicEllipsoidVisualizer.js +277 -0
- data/app/assets/javascripts/DynamicScene/DynamicImageMaterial.js +136 -0
- data/app/assets/javascripts/DynamicScene/DynamicLabel.js +286 -0
- data/app/assets/javascripts/DynamicScene/DynamicLabelVisualizer.js +341 -0
- data/app/assets/javascripts/DynamicScene/DynamicMaterialProperty.js +125 -0
- data/app/assets/javascripts/DynamicScene/DynamicObject.js +364 -0
- data/app/assets/javascripts/DynamicScene/DynamicObjectCollection.js +137 -0
- data/app/assets/javascripts/DynamicScene/DynamicObjectView.js +299 -0
- data/app/assets/javascripts/DynamicScene/DynamicPath.js +214 -0
- data/app/assets/javascripts/DynamicScene/DynamicPathVisualizer.js +402 -0
- data/app/assets/javascripts/DynamicScene/DynamicPoint.js +184 -0
- data/app/assets/javascripts/DynamicScene/DynamicPointVisualizer.js +323 -0
- data/app/assets/javascripts/DynamicScene/DynamicPolygon.js +138 -0
- data/app/assets/javascripts/DynamicScene/DynamicPolygonVisualizer.js +251 -0
- data/app/assets/javascripts/DynamicScene/DynamicPolyline.js +183 -0
- data/app/assets/javascripts/DynamicScene/DynamicPolylineVisualizer.js +268 -0
- data/app/assets/javascripts/DynamicScene/DynamicPositionProperty.js +525 -0
- data/app/assets/javascripts/DynamicScene/DynamicProperty.js +352 -0
- data/app/assets/javascripts/DynamicScene/DynamicPyramid.js +204 -0
- data/app/assets/javascripts/DynamicScene/DynamicPyramidVisualizer.js +302 -0
- data/app/assets/javascripts/DynamicScene/DynamicScene.profile.js +8 -0
- data/app/assets/javascripts/DynamicScene/DynamicVertexPositionsProperty.js +199 -0
- data/app/assets/javascripts/DynamicScene/ReferenceProperty.js +155 -0
- data/app/assets/javascripts/DynamicScene/VisualizerCollection.js +181 -0
- data/app/assets/javascripts/DynamicScene/package.json +6 -0
- data/app/assets/javascripts/DynamicScene/processCzml.js +77 -0
- data/app/assets/javascripts/Renderer/BlendEquation.js +52 -0
- data/app/assets/javascripts/Renderer/BlendFunction.js +158 -0
- data/app/assets/javascripts/Renderer/BlendingState.js +64 -0
- data/app/assets/javascripts/Renderer/Buffer.js +141 -0
- data/app/assets/javascripts/Renderer/BufferUsage.js +48 -0
- data/app/assets/javascripts/Renderer/ClearCommand.js +40 -0
- data/app/assets/javascripts/Renderer/CommandLists.js +42 -0
- data/app/assets/javascripts/Renderer/Context.js +2805 -0
- data/app/assets/javascripts/Renderer/CubeMap.js +358 -0
- data/app/assets/javascripts/Renderer/CubeMapFace.js +202 -0
- data/app/assets/javascripts/Renderer/CullFace.js +50 -0
- data/app/assets/javascripts/Renderer/DepthFunction.js +95 -0
- data/app/assets/javascripts/Renderer/DrawCommand.js +96 -0
- data/app/assets/javascripts/Renderer/Framebuffer.js +435 -0
- data/app/assets/javascripts/Renderer/MipmapHint.js +50 -0
- data/app/assets/javascripts/Renderer/PickFramebuffer.js +178 -0
- data/app/assets/javascripts/Renderer/PixelDatatype.js +86 -0
- data/app/assets/javascripts/Renderer/PixelFormat.js +113 -0
- data/app/assets/javascripts/Renderer/Renderbuffer.js +102 -0
- data/app/assets/javascripts/Renderer/RenderbufferFormat.js +77 -0
- data/app/assets/javascripts/Renderer/Renderer.profile.js +8 -0
- data/app/assets/javascripts/Renderer/ShaderCache.js +121 -0
- data/app/assets/javascripts/Renderer/ShaderProgram.js +2402 -0
- data/app/assets/javascripts/Renderer/StencilFunction.js +95 -0
- data/app/assets/javascripts/Renderer/StencilOperation.js +95 -0
- data/app/assets/javascripts/Renderer/Texture.js +395 -0
- data/app/assets/javascripts/Renderer/TextureAtlas.js +472 -0
- data/app/assets/javascripts/Renderer/TextureAtlasBuilder.js +133 -0
- data/app/assets/javascripts/Renderer/TextureMagnificationFilter.js +41 -0
- data/app/assets/javascripts/Renderer/TextureMinificationFilter.js +77 -0
- data/app/assets/javascripts/Renderer/TextureWrap.js +50 -0
- data/app/assets/javascripts/Renderer/UniformDatatype.js +218 -0
- data/app/assets/javascripts/Renderer/UniformState.js +799 -0
- data/app/assets/javascripts/Renderer/VertexArray.js +365 -0
- data/app/assets/javascripts/Renderer/VertexArrayFacade.js +574 -0
- data/app/assets/javascripts/Renderer/VertexLayout.js +49 -0
- data/app/assets/javascripts/Renderer/loadCubeMap.js +92 -0
- data/app/assets/javascripts/Renderer/package.json +6 -0
- data/app/assets/javascripts/Scene/AnimationCollection.js +249 -0
- data/app/assets/javascripts/Scene/ArcGisMapServerImageryProvider.js +384 -0
- data/app/assets/javascripts/Scene/Billboard.js +680 -0
- data/app/assets/javascripts/Scene/BillboardCollection.js +1209 -0
- data/app/assets/javascripts/Scene/BingMapsImageryProvider.js +460 -0
- data/app/assets/javascripts/Scene/BingMapsStyle.js +55 -0
- data/app/assets/javascripts/Scene/Camera.js +358 -0
- data/app/assets/javascripts/Scene/CameraColumbusViewMode.js +30 -0
- data/app/assets/javascripts/Scene/CameraController.js +1258 -0
- data/app/assets/javascripts/Scene/CameraEventAggregator.js +270 -0
- data/app/assets/javascripts/Scene/CameraEventType.js +53 -0
- data/app/assets/javascripts/Scene/CameraFlightPath.js +495 -0
- data/app/assets/javascripts/Scene/CentralBody.js +817 -0
- data/app/assets/javascripts/Scene/CentralBodySurface.js +1120 -0
- data/app/assets/javascripts/Scene/CentralBodySurfaceShaderSet.js +107 -0
- data/app/assets/javascripts/Scene/ComplexConicSensorVolume.js +511 -0
- data/app/assets/javascripts/Scene/CompositePrimitive.js +454 -0
- data/app/assets/javascripts/Scene/CullingVolume.js +59 -0
- data/app/assets/javascripts/Scene/CustomSensorVolume.js +440 -0
- data/app/assets/javascripts/Scene/DiscardMissingTileImagePolicy.js +134 -0
- data/app/assets/javascripts/Scene/EllipsoidPrimitive.js +412 -0
- data/app/assets/javascripts/Scene/EllipsoidTerrainProvider.js +182 -0
- data/app/assets/javascripts/Scene/FrameState.js +86 -0
- data/app/assets/javascripts/Scene/FrustumCommands.js +32 -0
- data/app/assets/javascripts/Scene/GeographicTilingScheme.js +265 -0
- data/app/assets/javascripts/Scene/HorizontalOrigin.js +39 -0
- data/app/assets/javascripts/Scene/Imagery.js +85 -0
- data/app/assets/javascripts/Scene/ImageryLayer.js +876 -0
- data/app/assets/javascripts/Scene/ImageryLayerCollection.js +403 -0
- data/app/assets/javascripts/Scene/ImageryProvider.js +185 -0
- data/app/assets/javascripts/Scene/ImageryProviderError.js +149 -0
- data/app/assets/javascripts/Scene/ImageryState.js +20 -0
- data/app/assets/javascripts/Scene/Label.js +706 -0
- data/app/assets/javascripts/Scene/LabelCollection.js +697 -0
- data/app/assets/javascripts/Scene/LabelStyle.js +39 -0
- data/app/assets/javascripts/Scene/Material.js +1177 -0
- data/app/assets/javascripts/Scene/NeverTileDiscardPolicy.js +38 -0
- data/app/assets/javascripts/Scene/OpenStreetMapImageryProvider.js +282 -0
- data/app/assets/javascripts/Scene/OrthographicFrustum.js +345 -0
- data/app/assets/javascripts/Scene/PerformanceDisplay.js +183 -0
- data/app/assets/javascripts/Scene/PerspectiveFrustum.js +239 -0
- data/app/assets/javascripts/Scene/PerspectiveOffCenterFrustum.js +394 -0
- data/app/assets/javascripts/Scene/Polygon.js +886 -0
- data/app/assets/javascripts/Scene/Polyline.js +441 -0
- data/app/assets/javascripts/Scene/PolylineCollection.js +1532 -0
- data/app/assets/javascripts/Scene/Projections.js +93 -0
- data/app/assets/javascripts/Scene/RectangularPyramidSensorVolume.js +224 -0
- data/app/assets/javascripts/Scene/Scene.js +632 -0
- data/app/assets/javascripts/Scene/Scene.profile.js +8 -0
- data/app/assets/javascripts/Scene/SceneMode.js +51 -0
- data/app/assets/javascripts/Scene/SceneTransitioner.js +776 -0
- data/app/assets/javascripts/Scene/ScreenSpaceCameraController.js +1063 -0
- data/app/assets/javascripts/Scene/SensorVolumeCollection.js +192 -0
- data/app/assets/javascripts/Scene/SingleTileImageryProvider.js +295 -0
- data/app/assets/javascripts/Scene/SkyAtmosphere.js +239 -0
- data/app/assets/javascripts/Scene/SkyBox.js +231 -0
- data/app/assets/javascripts/Scene/TerrainProvider.js +229 -0
- data/app/assets/javascripts/Scene/TexturePool.js +154 -0
- data/app/assets/javascripts/Scene/Tile.js +322 -0
- data/app/assets/javascripts/Scene/TileDiscardPolicy.js +42 -0
- data/app/assets/javascripts/Scene/TileImagery.js +36 -0
- data/app/assets/javascripts/Scene/TileLoadQueue.js +123 -0
- data/app/assets/javascripts/Scene/TileMapServiceImageryProvider.js +337 -0
- data/app/assets/javascripts/Scene/TileReplacementQueue.js +139 -0
- data/app/assets/javascripts/Scene/TileState.js +19 -0
- data/app/assets/javascripts/Scene/TilingScheme.js +213 -0
- data/app/assets/javascripts/Scene/VerticalOrigin.js +39 -0
- data/app/assets/javascripts/Scene/ViewportQuad.js +256 -0
- data/app/assets/javascripts/Scene/WebMapServiceImageryProvider.js +374 -0
- data/app/assets/javascripts/Scene/WebMercatorTilingScheme.js +291 -0
- data/app/assets/javascripts/Scene/package.json +6 -0
- data/app/assets/javascripts/Shaders/BillboardCollectionFS.glsl +30 -0
- data/app/assets/javascripts/Shaders/BillboardCollectionFS.js +31 -0
- data/app/assets/javascripts/Shaders/BillboardCollectionVS.glsl +68 -0
- data/app/assets/javascripts/Shaders/BillboardCollectionVS.js +54 -0
- data/app/assets/javascripts/Shaders/BuiltinFunctions.glsl +927 -0
- data/app/assets/javascripts/Shaders/BuiltinFunctions.js +322 -0
- data/app/assets/javascripts/Shaders/CentralBodyFS.glsl +106 -0
- data/app/assets/javascripts/Shaders/CentralBodyFS.js +82 -0
- data/app/assets/javascripts/Shaders/CentralBodyFSDepth.glsl +20 -0
- data/app/assets/javascripts/Shaders/CentralBodyFSDepth.js +22 -0
- data/app/assets/javascripts/Shaders/CentralBodyFSPole.glsl +29 -0
- data/app/assets/javascripts/Shaders/CentralBodyFSPole.js +28 -0
- data/app/assets/javascripts/Shaders/CentralBodyVS.glsl +88 -0
- data/app/assets/javascripts/Shaders/CentralBodyVS.js +69 -0
- data/app/assets/javascripts/Shaders/CentralBodyVSDepth.glsl +9 -0
- data/app/assets/javascripts/Shaders/CentralBodyVSDepth.js +13 -0
- data/app/assets/javascripts/Shaders/CentralBodyVSPole.glsl +12 -0
- data/app/assets/javascripts/Shaders/CentralBodyVSPole.js +15 -0
- data/app/assets/javascripts/Shaders/ComplexConicSensorVolumeFS.glsl +448 -0
- data/app/assets/javascripts/Shaders/ComplexConicSensorVolumeFS.js +361 -0
- data/app/assets/javascripts/Shaders/ComplexConicSensorVolumeVS.glsl +19 -0
- data/app/assets/javascripts/Shaders/ComplexConicSensorVolumeVS.js +20 -0
- data/app/assets/javascripts/Shaders/ConstructiveSolidGeometry.glsl +886 -0
- data/app/assets/javascripts/Shaders/ConstructiveSolidGeometry.js +586 -0
- data/app/assets/javascripts/Shaders/CustomSensorVolumeFS.glsl +126 -0
- data/app/assets/javascripts/Shaders/CustomSensorVolumeFS.js +95 -0
- data/app/assets/javascripts/Shaders/CustomSensorVolumeVS.glsl +14 -0
- data/app/assets/javascripts/Shaders/CustomSensorVolumeVS.js +18 -0
- data/app/assets/javascripts/Shaders/EllipsoidFS.glsl +40 -0
- data/app/assets/javascripts/Shaders/EllipsoidFS.js +38 -0
- data/app/assets/javascripts/Shaders/EllipsoidVS.glsl +26 -0
- data/app/assets/javascripts/Shaders/EllipsoidVS.js +16 -0
- data/app/assets/javascripts/Shaders/Materials/AsphaltMaterial.glsl +25 -0
- data/app/assets/javascripts/Shaders/Materials/AsphaltMaterial.js +23 -0
- data/app/assets/javascripts/Shaders/Materials/BlobMaterial.glsl +18 -0
- data/app/assets/javascripts/Shaders/Materials/BlobMaterial.js +19 -0
- data/app/assets/javascripts/Shaders/Materials/BrickMaterial.glsl +42 -0
- data/app/assets/javascripts/Shaders/Materials/BrickMaterial.js +36 -0
- data/app/assets/javascripts/Shaders/Materials/BumpMapMaterial.glsl +29 -0
- data/app/assets/javascripts/Shaders/Materials/BumpMapMaterial.js +27 -0
- data/app/assets/javascripts/Shaders/Materials/CementMaterial.glsl +19 -0
- data/app/assets/javascripts/Shaders/Materials/CementMaterial.js +20 -0
- data/app/assets/javascripts/Shaders/Materials/CheckerboardMaterial.glsl +38 -0
- data/app/assets/javascripts/Shaders/Materials/CheckerboardMaterial.js +32 -0
- data/app/assets/javascripts/Shaders/Materials/DotMaterial.glsl +17 -0
- data/app/assets/javascripts/Shaders/Materials/DotMaterial.js +18 -0
- data/app/assets/javascripts/Shaders/Materials/ErosionMaterial.glsl +23 -0
- data/app/assets/javascripts/Shaders/Materials/ErosionMaterial.js +24 -0
- data/app/assets/javascripts/Shaders/Materials/FacetMaterial.glsl +18 -0
- data/app/assets/javascripts/Shaders/Materials/FacetMaterial.js +19 -0
- data/app/assets/javascripts/Shaders/Materials/FresnelMaterial.glsl +12 -0
- data/app/assets/javascripts/Shaders/Materials/FresnelMaterial.js +15 -0
- data/app/assets/javascripts/Shaders/Materials/GrassMaterial.glsl +28 -0
- data/app/assets/javascripts/Shaders/Materials/GrassMaterial.js +26 -0
- data/app/assets/javascripts/Shaders/Materials/NormalMapMaterial.glsl +19 -0
- data/app/assets/javascripts/Shaders/Materials/NormalMapMaterial.js +21 -0
- data/app/assets/javascripts/Shaders/Materials/ReflectionMaterial.glsl +13 -0
- data/app/assets/javascripts/Shaders/Materials/ReflectionMaterial.js +16 -0
- data/app/assets/javascripts/Shaders/Materials/RefractionMaterial.glsl +14 -0
- data/app/assets/javascripts/Shaders/Materials/RefractionMaterial.js +17 -0
- data/app/assets/javascripts/Shaders/Materials/RimLightingMaterial.glsl +18 -0
- data/app/assets/javascripts/Shaders/Materials/RimLightingMaterial.js +19 -0
- data/app/assets/javascripts/Shaders/Materials/StripeMaterial.glsl +29 -0
- data/app/assets/javascripts/Shaders/Materials/StripeMaterial.js +26 -0
- data/app/assets/javascripts/Shaders/Materials/TieDyeMaterial.glsl +17 -0
- data/app/assets/javascripts/Shaders/Materials/TieDyeMaterial.js +19 -0
- data/app/assets/javascripts/Shaders/Materials/Water.glsl +91 -0
- data/app/assets/javascripts/Shaders/Materials/Water.js +60 -0
- data/app/assets/javascripts/Shaders/Materials/WoodMaterial.glsl +36 -0
- data/app/assets/javascripts/Shaders/Materials/WoodMaterial.js +31 -0
- data/app/assets/javascripts/Shaders/Noise.glsl +453 -0
- data/app/assets/javascripts/Shaders/Noise.js +242 -0
- data/app/assets/javascripts/Shaders/PolygonFS.glsl +27 -0
- data/app/assets/javascripts/Shaders/PolygonFS.js +23 -0
- data/app/assets/javascripts/Shaders/PolygonFSPick.glsl +6 -0
- data/app/assets/javascripts/Shaders/PolygonFSPick.js +11 -0
- data/app/assets/javascripts/Shaders/PolygonVS.glsl +38 -0
- data/app/assets/javascripts/Shaders/PolygonVS.js +39 -0
- data/app/assets/javascripts/Shaders/PolygonVSPick.glsl +30 -0
- data/app/assets/javascripts/Shaders/PolygonVSPick.js +32 -0
- data/app/assets/javascripts/Shaders/PolylineFS.glsl +6 -0
- data/app/assets/javascripts/Shaders/PolylineFS.js +11 -0
- data/app/assets/javascripts/Shaders/PolylineVS.glsl +34 -0
- data/app/assets/javascripts/Shaders/PolylineVS.js +35 -0
- data/app/assets/javascripts/Shaders/Ray.glsl +532 -0
- data/app/assets/javascripts/Shaders/Ray.js +357 -0
- data/app/assets/javascripts/Shaders/ReprojectWebMercatorFS.glsl +26 -0
- data/app/assets/javascripts/Shaders/ReprojectWebMercatorFS.js +22 -0
- data/app/assets/javascripts/Shaders/ReprojectWebMercatorVS.glsl +11 -0
- data/app/assets/javascripts/Shaders/ReprojectWebMercatorVS.js +14 -0
- data/app/assets/javascripts/Shaders/SensorVolume.glsl +43 -0
- data/app/assets/javascripts/Shaders/SensorVolume.js +31 -0
- data/app/assets/javascripts/Shaders/Shaders.profile.js +8 -0
- data/app/assets/javascripts/Shaders/SkyAtmosphereFS.glsl +70 -0
- data/app/assets/javascripts/Shaders/SkyAtmosphereFS.js +62 -0
- data/app/assets/javascripts/Shaders/SkyAtmosphereVS.glsl +131 -0
- data/app/assets/javascripts/Shaders/SkyAtmosphereVS.js +115 -0
- data/app/assets/javascripts/Shaders/SkyBoxFS.glsl +10 -0
- data/app/assets/javascripts/Shaders/SkyBoxFS.js +14 -0
- data/app/assets/javascripts/Shaders/SkyBoxVS.glsl +10 -0
- data/app/assets/javascripts/Shaders/SkyBoxVS.js +14 -0
- data/app/assets/javascripts/Shaders/ViewportQuadFS.glsl +16 -0
- data/app/assets/javascripts/Shaders/ViewportQuadFS.js +17 -0
- data/app/assets/javascripts/Shaders/ViewportQuadVS.glsl +10 -0
- data/app/assets/javascripts/Shaders/ViewportQuadVS.js +14 -0
- data/app/assets/javascripts/Shaders/package.json +6 -0
- data/app/assets/javascripts/ThirdParty/ThirdParty.profile.js +8 -0
- data/app/assets/javascripts/ThirdParty/Tween.js +678 -0
- data/app/assets/javascripts/ThirdParty/Uri.js +277 -0
- data/app/assets/javascripts/ThirdParty/measureText.js +197 -0
- data/app/assets/javascripts/ThirdParty/package.json +6 -0
- data/app/assets/javascripts/ThirdParty/sprintf.js +319 -0
- data/app/assets/javascripts/ThirdParty/when.js +748 -0
- data/app/assets/javascripts/Widgets/Dojo/CesiumViewerWidget.css +175 -0
- data/app/assets/javascripts/Widgets/Dojo/CesiumViewerWidget.html +52 -0
- data/app/assets/javascripts/Widgets/Dojo/CesiumViewerWidget.js +1237 -0
- data/app/assets/javascripts/Widgets/Dojo/CesiumWidget.html +4 -0
- data/app/assets/javascripts/Widgets/Dojo/CesiumWidget.js +349 -0
- data/app/assets/javascripts/Widgets/Dojo/TimelineWidget.css +1 -0
- data/app/assets/javascripts/Widgets/Dojo/TimelineWidget.js +47 -0
- data/app/assets/javascripts/Widgets/Dojo/checkForChromeFrame.js +71 -0
- data/app/assets/javascripts/Widgets/Images/Bing_Logo_51x19_White.png +0 -0
- data/app/assets/javascripts/Widgets/Images/Cesium_Logo_overlay.png +0 -0
- data/app/assets/javascripts/Widgets/Images/TimelineIcons.png +0 -0
- data/app/assets/javascripts/Widgets/Images/ajax-loader.gif +0 -0
- data/app/assets/javascripts/Widgets/Images/animationBar.png +0 -0
- data/app/assets/javascripts/Widgets/Images/viewControlBar.png +0 -0
- data/app/assets/javascripts/Widgets/Timeline.css +113 -0
- data/app/assets/javascripts/Widgets/Timeline.js +629 -0
- data/app/assets/javascripts/Widgets/TimelineHighlightRange.js +51 -0
- data/app/assets/javascripts/Widgets/TimelineTrack.js +54 -0
- data/app/assets/javascripts/Widgets/Widgets.profile.js +8 -0
- data/app/assets/javascripts/Widgets/package.json +6 -0
- data/app/assets/javascripts/Workers/Workers.profile.js +8 -0
- data/app/assets/javascripts/Workers/cesiumWorkerBootstrapper.js +2015 -0
- data/app/assets/javascripts/Workers/createTaskProcessorWorker.js +55 -0
- data/app/assets/javascripts/Workers/createVerticesFromExtent.js +24 -0
- data/app/assets/javascripts/Workers/package.json +6 -0
- data/app/assets/javascripts/copyrightHeader.js +22 -0
- data/app/assets/javascripts/main.js +10 -0
- data/app/assets/stylesheets/cesium.css +4 -0
- data/app/controllers/cesium_controller.rb +4 -0
- data/app/helpers/cesium_helper.rb +2 -0
- data/app/views/cesium/index.html.erb +3 -0
- data/config/routes.rb +3 -0
- data/lib/cesium.rb +4 -0
- data/lib/cesium/engine.rb +4 -0
- data/lib/cesium/version.rb +3 -0
- data/lib/tasks/cesium_tasks.rake +4 -0
- data/test/cesium_test.rb +7 -0
- data/test/dummy/README.rdoc +261 -0
- data/test/dummy/Rakefile +7 -0
- data/test/dummy/app/assets/javascripts/adapters/jquery-adapter.js.coffee +4 -0
- data/test/dummy/app/assets/javascripts/app.js.coffee +11 -0
- data/test/dummy/app/assets/javascripts/application.js.coffee +73 -0
- data/test/dummy/app/assets/stylesheets/application.css +12 -0
- data/test/dummy/app/controllers/application_controller.rb +4 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/views/layouts/application.html.erb +21 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/config/application.rb +59 -0
- data/test/dummy/config/boot.rb +10 -0
- data/test/dummy/config/database.yml +25 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +37 -0
- data/test/dummy/config/environments/production.rb +67 -0
- data/test/dummy/config/environments/test.rb +37 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/inflections.rb +15 -0
- data/test/dummy/config/initializers/mime_types.rb +5 -0
- data/test/dummy/config/initializers/secret_token.rb +7 -0
- data/test/dummy/config/initializers/session_store.rb +8 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +5 -0
- data/test/dummy/config/requirejs.yml +10 -0
- data/test/dummy/config/routes.rb +3 -0
- data/test/dummy/public/404.html +26 -0
- data/test/dummy/public/422.html +26 -0
- data/test/dummy/public/500.html +25 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/dummy/script/rails +6 -0
- data/test/functional/cesium_controller_test.rb +9 -0
- data/test/integration/navigation_test.rb +10 -0
- data/test/test_helper.rb +15 -0
- data/test/unit/helpers/cesium_helper_test.rb +4 -0
- metadata +641 -0
|
@@ -0,0 +1,543 @@
|
|
|
1
|
+
/*global define*/
|
|
2
|
+
define([
|
|
3
|
+
'./DeveloperError',
|
|
4
|
+
'./binarySearch',
|
|
5
|
+
'./TimeInterval',
|
|
6
|
+
'./JulianDate'
|
|
7
|
+
], function(
|
|
8
|
+
DeveloperError,
|
|
9
|
+
binarySearch,
|
|
10
|
+
TimeInterval,
|
|
11
|
+
JulianDate) {
|
|
12
|
+
"use strict";
|
|
13
|
+
|
|
14
|
+
function compareIntervalStartTimes(left, right) {
|
|
15
|
+
return JulianDate.compare(left.start, right.start);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* A non-overlapping collection of TimeIntervals sorted by start date.
|
|
20
|
+
*
|
|
21
|
+
* @alias TimeIntervalCollection
|
|
22
|
+
* @constructor
|
|
23
|
+
*
|
|
24
|
+
* @see TimeInterval
|
|
25
|
+
* @see JulianDate
|
|
26
|
+
*
|
|
27
|
+
*/
|
|
28
|
+
var TimeIntervalCollection = function() {
|
|
29
|
+
this._intervals = [];
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Gets the interval at the specified index.
|
|
34
|
+
*
|
|
35
|
+
* @memberof TimeIntervalCollection
|
|
36
|
+
* @param {Number} index The index of the interval to retrieve.
|
|
37
|
+
* @return {TimeInterval} The TimeInterval at the specified index, or undefined if no such index exists.
|
|
38
|
+
* @exception {DeveloperError} index must be a number.
|
|
39
|
+
*/
|
|
40
|
+
TimeIntervalCollection.prototype.get = function(index) {
|
|
41
|
+
if (isNaN(index)) {
|
|
42
|
+
throw new DeveloperError('index must be a number.');
|
|
43
|
+
}
|
|
44
|
+
return this._intervals[index];
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Gets the start date of the collection.
|
|
49
|
+
*
|
|
50
|
+
* @memberof TimeIntervalCollection
|
|
51
|
+
* @return {JulianDate} The start date of the collection or undefined if the collection is empty.
|
|
52
|
+
*/
|
|
53
|
+
TimeIntervalCollection.prototype.getStart = function() {
|
|
54
|
+
var thisIntervals = this._intervals;
|
|
55
|
+
return thisIntervals.length === 0 ? undefined : thisIntervals[0].start;
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Gets the stop date of the collection.
|
|
60
|
+
*
|
|
61
|
+
* @memberof TimeIntervalCollection
|
|
62
|
+
* @return {JulianDate} The stop date of the collection or undefined if the collection is empty.
|
|
63
|
+
*/
|
|
64
|
+
TimeIntervalCollection.prototype.getStop = function() {
|
|
65
|
+
var thisIntervals = this._intervals;
|
|
66
|
+
var length = thisIntervals.length;
|
|
67
|
+
return length === 0 ? undefined : thisIntervals[length - 1].stop;
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Gets the number of intervals in the collection.
|
|
72
|
+
*
|
|
73
|
+
* @memberof TimeIntervalCollection
|
|
74
|
+
* @return {Number} The number of intervals in the collection.
|
|
75
|
+
*/
|
|
76
|
+
TimeIntervalCollection.prototype.getLength = function() {
|
|
77
|
+
return this._intervals.length;
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Clears the collection.
|
|
82
|
+
*
|
|
83
|
+
* @memberof TimeIntervalCollection
|
|
84
|
+
*/
|
|
85
|
+
TimeIntervalCollection.prototype.clear = function() {
|
|
86
|
+
this._intervals = [];
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Returns true if the collection is empty, false otherwise.
|
|
91
|
+
*
|
|
92
|
+
* @memberof TimeIntervalCollection
|
|
93
|
+
*
|
|
94
|
+
* @returns true if the collection is empty, false otherwise.
|
|
95
|
+
*/
|
|
96
|
+
TimeIntervalCollection.prototype.isEmpty = function() {
|
|
97
|
+
return this._intervals.length === 0;
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Returns the interval which contains the specified date.
|
|
102
|
+
*
|
|
103
|
+
* @param {JulianDate} date The date to search for.
|
|
104
|
+
*
|
|
105
|
+
* @memberof TimeIntervalCollection
|
|
106
|
+
*
|
|
107
|
+
* @returns The interval containing the specified date, undefined if no such interval exists.
|
|
108
|
+
*
|
|
109
|
+
* @exception {DeveloperError} date is required.
|
|
110
|
+
*/
|
|
111
|
+
TimeIntervalCollection.prototype.findIntervalContainingDate = function(date) {
|
|
112
|
+
var index = this.indexOf(date);
|
|
113
|
+
return index >= 0 ? this._intervals[index] : undefined;
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Returns true if the specified date is contained in the interval collection.
|
|
118
|
+
*
|
|
119
|
+
* @param {JulianDate} date The date to search for.
|
|
120
|
+
*
|
|
121
|
+
* @memberof TimeIntervalCollection
|
|
122
|
+
*
|
|
123
|
+
* @returns True if the specified date is contained in the interval collection, undefined otherwise.
|
|
124
|
+
*
|
|
125
|
+
* @exception {DeveloperError} date is required.
|
|
126
|
+
*/
|
|
127
|
+
TimeIntervalCollection.prototype.contains = function(date) {
|
|
128
|
+
return this.indexOf(date) >= 0;
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Returns the index of the interval in the collection that contains the specified date.
|
|
133
|
+
*
|
|
134
|
+
* @param {JulianDate} date The date to search for.
|
|
135
|
+
*
|
|
136
|
+
* @memberof TimeIntervalCollection
|
|
137
|
+
*
|
|
138
|
+
* @returns The index of the interval which contains the specified date, if no such interval exists,
|
|
139
|
+
* it returns a negative number which is the bitwise complement of the index of the next interval that
|
|
140
|
+
* starts after the date, or if no interval starts after the specified date, the bitwise complement of
|
|
141
|
+
* the length of the collection.
|
|
142
|
+
*
|
|
143
|
+
* @exception {DeveloperError} date is required.
|
|
144
|
+
*/
|
|
145
|
+
TimeIntervalCollection.prototype.indexOf = function(date) {
|
|
146
|
+
if (typeof date === 'undefined') {
|
|
147
|
+
throw new DeveloperError('date required');
|
|
148
|
+
}
|
|
149
|
+
var thisIntervals = this._intervals;
|
|
150
|
+
var index = binarySearch(thisIntervals, new TimeInterval(date, date, true, true), compareIntervalStartTimes);
|
|
151
|
+
if (index >= 0) {
|
|
152
|
+
if (thisIntervals[index].isStartIncluded) {
|
|
153
|
+
return index;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
if (index > 0 &&
|
|
157
|
+
thisIntervals[index - 1].stop.equals(date) &&
|
|
158
|
+
thisIntervals[index - 1].isStopIncluded) {
|
|
159
|
+
return index - 1;
|
|
160
|
+
}
|
|
161
|
+
return ~index;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
index = ~index;
|
|
165
|
+
if (index > 0 && (index - 1) < thisIntervals.length && thisIntervals[index - 1].contains(date)) {
|
|
166
|
+
return index - 1;
|
|
167
|
+
}
|
|
168
|
+
return ~index;
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* Returns the first interval in the collection that matches the specified parameters.
|
|
173
|
+
* All parameters are optional and undefined parameters are treated as a don't care condition.
|
|
174
|
+
*
|
|
175
|
+
* @param {JulianDate} [start] The start of the interval.
|
|
176
|
+
* @param {JulianDate} [stop] The end of the interval.
|
|
177
|
+
* @param {JulianDate} [isStartIncluded] True if the start date is included.
|
|
178
|
+
* @param {JulianDate} [isStopIncluded] True if the stop date is included.
|
|
179
|
+
*
|
|
180
|
+
* @memberof TimeIntervalCollection
|
|
181
|
+
*
|
|
182
|
+
* @returns The first interval in the collection that matches the specified parameters.
|
|
183
|
+
*/
|
|
184
|
+
TimeIntervalCollection.prototype.findInterval = function(start, stop, isStartIncluded, isStopIncluded) {
|
|
185
|
+
var thisIntervals = this._intervals, interval;
|
|
186
|
+
for ( var i = 0, len = thisIntervals.length; i < len; i++) {
|
|
187
|
+
interval = thisIntervals[i];
|
|
188
|
+
if ((typeof start === 'undefined' || interval.start.equals(start)) &&
|
|
189
|
+
(typeof stop === 'undefined' || interval.stop.equals(stop)) &&
|
|
190
|
+
(typeof isStartIncluded === 'undefined' || interval.isStartIncluded === isStartIncluded) &&
|
|
191
|
+
(typeof isStopIncluded === 'undefined' || interval.isStopIncluded === isStopIncluded)) {
|
|
192
|
+
return thisIntervals[i];
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
return undefined;
|
|
196
|
+
};
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* Adds an interval to the collection, merging intervals that contain the same data and
|
|
200
|
+
* splitting intervals of different data as needed in order to maintain a non-overlapping collection.
|
|
201
|
+
* The data in the new interval takes precedence over any existing intervals in the collection.
|
|
202
|
+
*
|
|
203
|
+
* @param {TimeInterval} interval The interval to add.
|
|
204
|
+
* @param {Function} [equalsCallback] An optional function which takes the data from two
|
|
205
|
+
* TimeIntervals and returns true if they are equal, false otherwise. If this function
|
|
206
|
+
* is not provided, the Javascript equality operator is used.
|
|
207
|
+
*
|
|
208
|
+
* @memberof TimeIntervalCollection
|
|
209
|
+
*
|
|
210
|
+
* @exception {DeveloperError} interval is required.
|
|
211
|
+
*/
|
|
212
|
+
TimeIntervalCollection.prototype.addInterval = function(interval, equalsCallback) {
|
|
213
|
+
if (typeof interval === 'undefined') {
|
|
214
|
+
throw new DeveloperError("interval is required");
|
|
215
|
+
}
|
|
216
|
+
if (!interval.isEmpty) {
|
|
217
|
+
var comparison, index;
|
|
218
|
+
var thisIntervals = this._intervals;
|
|
219
|
+
|
|
220
|
+
// Handle the common case quickly: we're adding a new interval which is after all existing intervals.
|
|
221
|
+
if (thisIntervals.length === 0 ||
|
|
222
|
+
interval.start.greaterThan(thisIntervals[thisIntervals.length - 1].stop)) {
|
|
223
|
+
thisIntervals.push(interval);
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
// Keep the list sorted by the start date
|
|
228
|
+
index = binarySearch(thisIntervals, interval, compareIntervalStartTimes);
|
|
229
|
+
if (index < 0) {
|
|
230
|
+
index = ~index;
|
|
231
|
+
} else {
|
|
232
|
+
// interval's start date exactly equals the start date of at least one interval in the collection.
|
|
233
|
+
// It could actually equal the start date of two intervals if one of them does not actually
|
|
234
|
+
// include the date. In that case, the binary search could have found either. We need to
|
|
235
|
+
// look at the surrounding intervals and their IsStartIncluded properties in order to make sure
|
|
236
|
+
// we're working with the correct interval.
|
|
237
|
+
if (index > 0 &&
|
|
238
|
+
interval.isStartIncluded &&
|
|
239
|
+
thisIntervals[index - 1].isStartIncluded &&
|
|
240
|
+
thisIntervals[index - 1].start.equals(interval.start)) {
|
|
241
|
+
--index;
|
|
242
|
+
} else if (index < thisIntervals.length &&
|
|
243
|
+
!interval.isStartIncluded &&
|
|
244
|
+
thisIntervals[index].isStartIncluded &&
|
|
245
|
+
thisIntervals[index].start.equals(interval.start)) {
|
|
246
|
+
++index;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
if (index > 0) {
|
|
251
|
+
// Not the first thing in the list, so see if the interval before this one
|
|
252
|
+
// overlaps this one.
|
|
253
|
+
comparison = JulianDate.compare(thisIntervals[index - 1].stop, interval.start);
|
|
254
|
+
if (comparison > 0 || (comparison === 0 && (thisIntervals[index - 1].isStopIncluded || interval.isStartIncluded))) {
|
|
255
|
+
// There is an overlap
|
|
256
|
+
if (typeof equalsCallback !== 'undefined' ? equalsCallback(thisIntervals[index - 1].data, interval.data) : (thisIntervals[index - 1].data === interval.data)) {
|
|
257
|
+
// Overlapping intervals have the same data, so combine them
|
|
258
|
+
if (interval.stop.greaterThan(thisIntervals[index - 1].stop)) {
|
|
259
|
+
interval = new TimeInterval(thisIntervals[index - 1].start,
|
|
260
|
+
interval.stop,
|
|
261
|
+
thisIntervals[index - 1].isStartIncluded,
|
|
262
|
+
interval.isStopIncluded,
|
|
263
|
+
interval.data);
|
|
264
|
+
} else {
|
|
265
|
+
interval = new TimeInterval(thisIntervals[index - 1].start,
|
|
266
|
+
thisIntervals[index - 1].stop,
|
|
267
|
+
thisIntervals[index - 1].isStartIncluded,
|
|
268
|
+
thisIntervals[index - 1].isStopIncluded || (interval.stop.equals(thisIntervals[index - 1].stop) && interval.isStopIncluded),
|
|
269
|
+
interval.data);
|
|
270
|
+
}
|
|
271
|
+
thisIntervals.splice(index - 1, 1);
|
|
272
|
+
--index;
|
|
273
|
+
} else {
|
|
274
|
+
// Overlapping intervals have different data. The new interval
|
|
275
|
+
// being added 'wins' so truncate the previous interval.
|
|
276
|
+
// If the existing interval extends past the end of the new one,
|
|
277
|
+
// split the existing interval into two intervals.
|
|
278
|
+
comparison = JulianDate.compare(thisIntervals[index - 1].stop, interval.stop);
|
|
279
|
+
if (comparison > 0 || (comparison === 0 && thisIntervals[index - 1].isStopIncluded && !interval.isStopIncluded)) {
|
|
280
|
+
thisIntervals.splice(index - 1, 1,
|
|
281
|
+
new TimeInterval(thisIntervals[index - 1].start,
|
|
282
|
+
interval.start,
|
|
283
|
+
thisIntervals[index - 1].isStartIncluded,
|
|
284
|
+
!interval.isStartIncluded,
|
|
285
|
+
thisIntervals[index - 1].data),
|
|
286
|
+
new TimeInterval(interval.stop,
|
|
287
|
+
thisIntervals[index - 1].stop,
|
|
288
|
+
!interval.isStopIncluded,
|
|
289
|
+
thisIntervals[index - 1].isStopIncluded,
|
|
290
|
+
thisIntervals[index - 1].data));
|
|
291
|
+
} else {
|
|
292
|
+
thisIntervals[index - 1] = new TimeInterval(thisIntervals[index - 1].start,
|
|
293
|
+
interval.start,
|
|
294
|
+
thisIntervals[index - 1].isStartIncluded,
|
|
295
|
+
!interval.isStartIncluded, thisIntervals[index - 1].data);
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
while (index < thisIntervals.length) {
|
|
302
|
+
// Not the last thing in the list, so see if the intervals after this one overlap this one.
|
|
303
|
+
comparison = JulianDate.compare(interval.stop, thisIntervals[index].start);
|
|
304
|
+
if (comparison > 0 ||
|
|
305
|
+
(comparison === 0 && (interval.isStopIncluded || thisIntervals[index].isStartIncluded))) {
|
|
306
|
+
// There is an overlap
|
|
307
|
+
if (typeof equalsCallback !== 'undefined' ? equalsCallback(thisIntervals[index].data, interval.data) : thisIntervals[index].data === interval.data) {
|
|
308
|
+
// Overlapping intervals have the same data, so combine them
|
|
309
|
+
interval = new TimeInterval(interval.start,
|
|
310
|
+
thisIntervals[index].stop.greaterThan(interval.stop) ? thisIntervals[index].stop : interval.stop,
|
|
311
|
+
interval.isStartIncluded,
|
|
312
|
+
thisIntervals[index].stop.greaterThan(interval.stop) ? thisIntervals[index].isStopIncluded : interval.isStopIncluded,
|
|
313
|
+
interval.data);
|
|
314
|
+
thisIntervals.splice(index, 1);
|
|
315
|
+
} else {
|
|
316
|
+
// Overlapping intervals have different data. The new interval
|
|
317
|
+
// being added 'wins' so truncate the next interval.
|
|
318
|
+
thisIntervals[index] = new TimeInterval(interval.stop,
|
|
319
|
+
thisIntervals[index].stop,
|
|
320
|
+
!interval.isStopIncluded,
|
|
321
|
+
thisIntervals[index].isStopIncluded,
|
|
322
|
+
thisIntervals[index].data);
|
|
323
|
+
if (thisIntervals[index].isEmpty) {
|
|
324
|
+
thisIntervals.splice(index, 1);
|
|
325
|
+
} else {
|
|
326
|
+
// Found a partial span, so it is not possible for the next
|
|
327
|
+
// interval to be spanned at all. Stop looking.
|
|
328
|
+
break;
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
} else {
|
|
332
|
+
// Found the last one we're spanning, so stop looking.
|
|
333
|
+
break;
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
// Add the new interval
|
|
338
|
+
thisIntervals.splice(index, 0, interval);
|
|
339
|
+
}
|
|
340
|
+
};
|
|
341
|
+
|
|
342
|
+
/**
|
|
343
|
+
* Removes the specified interval from this interval collection, creating a hole over the specified interval.
|
|
344
|
+
* The Data property of the input interval is ignored.
|
|
345
|
+
*
|
|
346
|
+
* @param {TimeInterval} interval The interval to remove.
|
|
347
|
+
*
|
|
348
|
+
* @memberof TimeIntervalCollection
|
|
349
|
+
*
|
|
350
|
+
* @returns true if the interval was removed, false if no part of the interval was in the collection.
|
|
351
|
+
*
|
|
352
|
+
* @exception {DeveloperError} interval is required.
|
|
353
|
+
*/
|
|
354
|
+
TimeIntervalCollection.prototype.removeInterval = function(interval) {
|
|
355
|
+
if (typeof interval === 'undefined') {
|
|
356
|
+
throw new DeveloperError("interval is required");
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
if (interval.isEmpty) {
|
|
360
|
+
return false;
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
var result = false;
|
|
364
|
+
var thisIntervals = this._intervals;
|
|
365
|
+
|
|
366
|
+
var index = binarySearch(thisIntervals, interval, compareIntervalStartTimes);
|
|
367
|
+
if (index < 0) {
|
|
368
|
+
index = ~index;
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
var intervalStart = interval.start;
|
|
372
|
+
var intervalStop = interval.stop;
|
|
373
|
+
var intervalIsStartIncluded = interval.isStartIncluded;
|
|
374
|
+
var intervalIsStopIncluded = interval.isStopIncluded;
|
|
375
|
+
|
|
376
|
+
// Check for truncation of the end of the previous interval.
|
|
377
|
+
if (index > 0) {
|
|
378
|
+
var indexMinus1 = thisIntervals[index - 1];
|
|
379
|
+
var indexMinus1Stop = indexMinus1.stop;
|
|
380
|
+
if (indexMinus1Stop.greaterThan(intervalStart) ||
|
|
381
|
+
(indexMinus1Stop.equals(intervalStart) &&
|
|
382
|
+
indexMinus1.isStopIncluded && intervalIsStartIncluded)) {
|
|
383
|
+
result = true;
|
|
384
|
+
|
|
385
|
+
if (indexMinus1Stop.greaterThan(intervalStop) ||
|
|
386
|
+
(indexMinus1.isStopIncluded && !intervalIsStopIncluded && indexMinus1Stop.equals(intervalStop))) {
|
|
387
|
+
// Break the existing interval into two pieces
|
|
388
|
+
thisIntervals.splice(index, 0, new TimeInterval(intervalStop, indexMinus1Stop, !intervalIsStopIncluded, indexMinus1.isStopIncluded, indexMinus1.data));
|
|
389
|
+
}
|
|
390
|
+
thisIntervals[index - 1] = new TimeInterval(indexMinus1.start, intervalStart, indexMinus1.isStartIncluded, !intervalIsStartIncluded, indexMinus1.data);
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
// Check if the Start of the current interval should remain because interval.start is the same but
|
|
395
|
+
// it is not included.
|
|
396
|
+
var indexInterval = thisIntervals[index];
|
|
397
|
+
if (index < thisIntervals.length &&
|
|
398
|
+
!intervalIsStartIncluded &&
|
|
399
|
+
indexInterval.isStartIncluded &&
|
|
400
|
+
intervalStart.equals(indexInterval.start)) {
|
|
401
|
+
result = true;
|
|
402
|
+
|
|
403
|
+
thisIntervals.splice(index, 0, new TimeInterval(indexInterval.start, indexInterval.start, true, true, indexInterval.data));
|
|
404
|
+
++index;
|
|
405
|
+
indexInterval = thisIntervals[index];
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
// Remove any intervals that are completely overlapped by the input interval.
|
|
409
|
+
while (index < thisIntervals.length &&
|
|
410
|
+
intervalStop.greaterThan(indexInterval.stop)) {
|
|
411
|
+
result = true;
|
|
412
|
+
thisIntervals.splice(index, 1);
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
// Check for the case where the input interval ends on the same date
|
|
416
|
+
// as an existing interval.
|
|
417
|
+
if (index < thisIntervals.length && intervalStop.equals(indexInterval.stop)) {
|
|
418
|
+
result = true;
|
|
419
|
+
|
|
420
|
+
if (!intervalIsStopIncluded && indexInterval.isStopIncluded) {
|
|
421
|
+
// Last point of interval should remain because the stop date is included in
|
|
422
|
+
// the existing interval but is not included in the input interval.
|
|
423
|
+
if ((index + 1) < thisIntervals.length && thisIntervals[index + 1].start.equals(intervalStop) && indexInterval.data === thisIntervals[index + 1].data) {
|
|
424
|
+
// Combine single point with the next interval
|
|
425
|
+
thisIntervals.splice(index, 1);
|
|
426
|
+
thisIntervals[index] = indexInterval = new TimeInterval(indexInterval.start, indexInterval.stop, true, indexInterval.isStopIncluded, indexInterval.data);
|
|
427
|
+
} else {
|
|
428
|
+
thisIntervals[index] = indexInterval = new TimeInterval(intervalStop, intervalStop, true, true, indexInterval.data);
|
|
429
|
+
}
|
|
430
|
+
} else {
|
|
431
|
+
// Interval is completely overlapped
|
|
432
|
+
thisIntervals.splice(index, 1);
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
// Truncate any partially-overlapped intervals.
|
|
437
|
+
if (index < thisIntervals.length &&
|
|
438
|
+
(intervalStop.greaterThan(indexInterval.start) ||
|
|
439
|
+
(intervalStop.equals(indexInterval.start) &&
|
|
440
|
+
intervalIsStopIncluded &&
|
|
441
|
+
indexInterval.isStartIncluded))) {
|
|
442
|
+
result = true;
|
|
443
|
+
thisIntervals[index] = new TimeInterval(intervalStop, indexInterval.stop, !intervalIsStopIncluded, indexInterval.isStopIncluded, indexInterval.data);
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
return result;
|
|
447
|
+
};
|
|
448
|
+
|
|
449
|
+
/**
|
|
450
|
+
* Creates a new TimeIntervalCollection which is the intersection of this collection
|
|
451
|
+
* and the provided collection.
|
|
452
|
+
*
|
|
453
|
+
* @param {TimeIntervalCollection} timeIntervalCollection The collection to intersect with.
|
|
454
|
+
* @param {Function} [equalsCallback] An optional function which takes the data from two
|
|
455
|
+
* TimeIntervals and returns true if they are equal, false otherwise. If this function
|
|
456
|
+
* is not provided, the Javascript equality operator is used.
|
|
457
|
+
* @param {Function} [mergeCallback] An optional function which takes the data from two
|
|
458
|
+
* TimeIntervals and returns a merged version of the data. If this parameter is omitted,
|
|
459
|
+
* the interval data from <code>this</code> collection will be used.
|
|
460
|
+
*
|
|
461
|
+
* @returns A new TimeIntervalCollection which is the intersection of this collection and the provided collection.
|
|
462
|
+
*
|
|
463
|
+
* @memberof TimeIntervalCollection
|
|
464
|
+
*
|
|
465
|
+
* @exception {DeveloperError} timeIntervalCollection is required.
|
|
466
|
+
*/
|
|
467
|
+
TimeIntervalCollection.prototype.intersect = function(timeIntervalCollection, equalsCallback, mergeCallback) {
|
|
468
|
+
if (typeof timeIntervalCollection === 'undefined') {
|
|
469
|
+
throw new DeveloperError('timeIntervalCollection is required.');
|
|
470
|
+
}
|
|
471
|
+
return this._intersectInternal(timeIntervalCollection, equalsCallback, mergeCallback);
|
|
472
|
+
};
|
|
473
|
+
|
|
474
|
+
/**
|
|
475
|
+
* Creates a new TimeIntervalCollection which is the intersection of this collection
|
|
476
|
+
* and the provided interval.
|
|
477
|
+
*
|
|
478
|
+
* @param {TimeInterval} interval The interval to intersect with.
|
|
479
|
+
* @param {Function} [equalsCallback] An optional function which takes the data from two
|
|
480
|
+
* TimeIntervals and returns true if they are equal, false otherwise. If this function
|
|
481
|
+
* is not provided, the equality operator will be used.
|
|
482
|
+
* @param {Function} [mergeCallback] An optional function which takes the data from two
|
|
483
|
+
* TimeIntervals and returns a merged version of the data. If this parameter is omitted,
|
|
484
|
+
* the interval data from <code>this</code> collection will be used.
|
|
485
|
+
*
|
|
486
|
+
* @returns A new TimeIntervalCollection which is the intersection of this collection and the provided collection.
|
|
487
|
+
*
|
|
488
|
+
* @memberof TimeIntervalCollection
|
|
489
|
+
*
|
|
490
|
+
* @exception {DeveloperError} timeIntervalCollection is required.
|
|
491
|
+
*/
|
|
492
|
+
TimeIntervalCollection.prototype.intersectInterval = function(interval, equalsCallback, mergeCallback) {
|
|
493
|
+
if (typeof interval === 'undefined') {
|
|
494
|
+
throw new DeveloperError('interval is required.');
|
|
495
|
+
}
|
|
496
|
+
var intervals = new TimeIntervalCollection();
|
|
497
|
+
intervals.addInterval(interval);
|
|
498
|
+
return this._intersectInternal(intervals, equalsCallback, mergeCallback);
|
|
499
|
+
};
|
|
500
|
+
|
|
501
|
+
TimeIntervalCollection.prototype._intersectInternal = function(intervals, equalsCallback, mergeCallback) {
|
|
502
|
+
var left = 0;
|
|
503
|
+
var right = 0;
|
|
504
|
+
var result = new TimeIntervalCollection();
|
|
505
|
+
var thisIntervals = this._intervals;
|
|
506
|
+
var otherIntervals = intervals._intervals;
|
|
507
|
+
|
|
508
|
+
while (left < thisIntervals.length && right < otherIntervals.length) {
|
|
509
|
+
var leftInterval = thisIntervals[left];
|
|
510
|
+
var rightInterval = otherIntervals[right];
|
|
511
|
+
if (leftInterval.stop.lessThan(rightInterval.start)) {
|
|
512
|
+
++left;
|
|
513
|
+
} else if (rightInterval.stop.lessThan(leftInterval.start)) {
|
|
514
|
+
++right;
|
|
515
|
+
} else {
|
|
516
|
+
// The following will return an intersection whose data is 'merged' if the callback is defined
|
|
517
|
+
if (typeof mergeCallback !== 'undefined' ||
|
|
518
|
+
((typeof equalsCallback !== 'undefined' && equalsCallback(leftInterval, rightInterval)) ||
|
|
519
|
+
(typeof equalsCallback === 'undefined' && rightInterval.data === leftInterval.data))) {
|
|
520
|
+
|
|
521
|
+
var intersection = leftInterval.intersect(rightInterval, mergeCallback);
|
|
522
|
+
if (!intersection.isEmpty) {
|
|
523
|
+
// Since we start with an empty collection for 'result', and there are no overlapping intervals in 'this' (as a rule),
|
|
524
|
+
// the 'intersection' will never overlap with a previous interval in 'result'. So, no need to do any additional 'merging'.
|
|
525
|
+
result.addInterval(intersection, equalsCallback);
|
|
526
|
+
}
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
if (leftInterval.stop.lessThan(rightInterval.stop) ||
|
|
530
|
+
(leftInterval.stop.equals(rightInterval.stop) &&
|
|
531
|
+
!leftInterval.isStopIncluded &&
|
|
532
|
+
rightInterval.isStopIncluded)) {
|
|
533
|
+
++left;
|
|
534
|
+
} else {
|
|
535
|
+
++right;
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
return result;
|
|
540
|
+
};
|
|
541
|
+
|
|
542
|
+
return TimeIntervalCollection;
|
|
543
|
+
});
|