CesiumGS / CesiumGS/cesium

Entity & Data Sources roadmap

Open
#1,045 4 comments 0 reactions 0 assignees View on GitHub
category - data sources category - entity type - roadmap
Dominant language
JavaScript
Stars
15.7k
Forks
3.9k
Avg merge
4d 6h
Merged PRs (30d)
34

Description

This roadmap hopes to capture a high-level view of the current work planned for the DataSource layer.

**Near-ish term**
- [ ] Entity-specific picking API (returns entity and the graphics object that was picked)
- [ ] Add support for entity highlighting (i.e. on pick/hover/etc...)
- [ ] Direct support for `Material` instances via new `CustomMaterialProperty`
- [ ] Refactor `viewFrom` and `EntityView`
- [ ] Make InfoBox zooming consistent for all entities. (Add ability to either track or fly to).
- [ ] Implement a caching policy for `Property` objects so we don't redo work
- [ ] Use the refactored property system to optimize all existing visualizers. This involves minimizing the amount of duplicate work that is currently done every frame as well as providing alternative rendering paths for static data which uses Geometry & Appearances.
- [ ] Dynamic geometry updates should compare current values with last frames and only make updates if something changes.
- [ ] viewer entity camera controls need to expose ability to cancel pending flight or zooms (also support canceling a home flight while we're at it).
- [ ] Detect and automatically use `EllipsoidSurfaceAppearance`
- [ ] Port Materials Sandcastle example and add entity features needed to do so.
- [ ] Support for per-segment or per-vertex polyline color.
- [ ] Availability improvements (as discussed in this [post](https://groups.google.com/d/msg/cesium-dev/ol7edT6EtZw/-ZGEAjok_2gJ))
- [ ] Look into scene.primitives.removeAll [crash](https://groups.google.com/d/msg/cesium-dev/qEqVH1j9k_k/4HFodvLcztUJ).
- [ ] `Entity.addProperty` should take an optional initial value.
- [ ] Unique `id` for each `DataSource` and ability to remove from `DataSourceCollection` by id.

**Entities and Properties**
- [ ] Support for positions whose reference frame is another entity.
- [ ] Support for orientations whose reference frame another entity or INERTIAL.
- [ ] Interpolate `Color` over HSL instead of rgb.
- [ ] Sandcastle: Billboards/Labels: Define entity position in another reference frame.
- [ ] Better access to SampledProperty samples and ability to get closest sample for a given time.
- [ ] Shadow support for non-model entities #3928

**Data Sources**
- [ ] Implement GPX Data Source
- [ ] Define a base class for all file-based DataSources so that we can support auto-detection/loading without the user knowing what the data is.
- [ ] Develop a system for easy streaming of dynamic data through `polling`, `EventSource`, and `WebSockets` available to all data sources.
- [ ] Implement `previousTime`/`nextTime` from CZML spec. This may involve adding the ability for sampled properties to inform the developer as to whether they are "complete" or still receiving additional sampled.
- [ ] Time-dynamic formatted strings in CZML
- [ ] Ability for data sources to define imagery and terrain servers.
- [ ] Review/Refactor CZML specs and improve code and branch coverage.
- [ ] Make it trivial to support custom CZML properties client-side.
- [ ] Replace CZML examples (models, vehicles, geometry, etc...)
- [ ] Write a website tutorial on using data sources.
- [ ] Write a website tutorial on writing a custom data source.
- [ ] Improved KML support #873

**Visualizers**
- [ ] Should each updater cache based on geometry options and re-use the geometry in each instance?
- [ ] Visualizers currently use scene.primitives, but we should pass in the collection to use. This will make it possible to use visualizers with the QuadTreePrimitive.
- [ ] `Model.maximumScale` needs a unit test in the ModelVisualizer #3167
- [ ] `Model.maximumScale` needs to be added to CZML #3167

**Misc**
- [ ] Ability to specify height reference for all position data so that it can be relative to the ground.
- [ ] Allow `flat` property to be set on all geometry objects and have that data passed on to the `Appearance`
- [ ] Better CZML validation
- [ ] Normalized values need to be re-normalized, either in `GetValue` or at CZML processing time.

**Completed**
- [x] #2600 Add a top-level simple boolean toggle for entity viz.
- [x] #2600 Make parent availability/visibility affect children.
- [x] #2503 Initial KML Support
- [x] #2162 Implement the GeoJSON simple-style spec https://github.com/mapbox/simplestyle-spec
- [x] #2255 Add OutlineWidth support
- [x] #1952 Review `GeoJsonDatasource` api
- [x] #1909 Eliminate need for `Cartesian2WrapperProperty`
- [x] #1904 Add material support for CZML `path` and `polyline`.
- [x] #1883 Complete renames as decided in #1727.
- [x] #1881 Remove `vertexPositions` and push it down into the individual objects.
- [x] #1774 Refactor ReferenceProperty so that any property can be a reference
- [x] #1653 Define and document a base class for `Visualizer`
- [x] #2381 Provide easier ways to specify orientation (Pointing, Velocity, Euler, YPR etc...)
- [x] #2353 Add support for polygons with holes
- [x] #2315 Review graphics properties and make sure they have parity with their corresponding primitive; i.e., `BillboardGraphics` should have the same features as `Billboard` as well as the CZML `billboard`.
- [x] #2315 Data source BoundingSphere

**Completed with #1444**
- [x] Leverage Geometry & Appearance in the visualizer system
- [x] Refactor DynamicVertexPositionsProperty (Possibly into a generic positions array property)
- [x] Refactor DynamicDirectionsProperty (Possibly into a generic array property for any type)

**Completed with #1419**
- [x] It would be incredibly convenient to have a way to highlight a "selected" object.
- [x] Balloon browser-like functionality for viewing information about an object.

**Completed with #1132**
- [x] Make all DynamicXXX objects use ES5 properties and introduce a `propertyChanged` event that fires when a property is assigned.

**Completed with #1080**
- [x] Define and document a base `Property` interface for all properties.
- [x] Define and document a base `PositionProperty` interface for all properties, which builds on `Property`
- [x] Refactor `DynamicProperty` and split it into separate properties, such as `ConstantProperty`, `TimeIntervalProperty`, `SampledProperty`, and `CompositeProperty`.
- [x] Refactor `DynamicPositionProperty` and split it into separate properties, such as `ConstantPositionProperty`, `TimeIntervalPositionProperty`, `SampledPositionProperty`, and `CompositePositionProperty`.
- [x] Refactor DynamicScene Material handling so that all `Context` or `Scene` dependent code is in the visualizers and not the data representation.
- [x] Refactor CZML processing so that code is isolated to `CzmlDataSource`. No other code should have to know anything about CZML.

Contributor guide

Open the contributing guide

Research direction

This issue is a broad roadmap covering entities, data sources, visualizers, and documentation, with no single file, test, or entry point named. Start by selecting one unchecked item and reviewing its referenced issue or specification, then identify the relevant code and tests. Done would require narrowing the item into a separate, testable issue with a defined outcome.

Written by the indexing model from the issue text.

Assessment

Tech stack
javascript
Domain
computer-graphics, data
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
15/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.