Created Development Phase 1 (markdown)
@@ -0,0 +1,242 @@
|
|||||||
|
# OpenLayers 3 Phase 1
|
||||||
|
|
||||||
|
This document defines the functionality that OpenLayers 3 will offer as the
|
||||||
|
result of the first development phase.
|
||||||
|
|
||||||
|
Stated and anticipated future client requirements necessitate architectural
|
||||||
|
considerations in Phase 1 to ensure that this functionality can be implemented
|
||||||
|
later phases. Each section of the document includes an *Enabling future
|
||||||
|
functionality* for that matter.
|
||||||
|
|
||||||
|
|
||||||
|
## Animation
|
||||||
|
|
||||||
|
In Phase 1 we will make OpenLayers 3 animate
|
||||||
|
|
||||||
|
* Zoom transition
|
||||||
|
* Panning (kinetic)
|
||||||
|
* Tile displaying
|
||||||
|
* Camera movement
|
||||||
|
|
||||||
|
### Enabling future functionality
|
||||||
|
|
||||||
|
This requires a solid and flexible framework that makes animations possible
|
||||||
|
with both the WebGL and the DOM renderers.
|
||||||
|
|
||||||
|
Animations with WebGL will be based
|
||||||
|
on *requestAnimationFrame* loops, while, for performance reasons, animations
|
||||||
|
with DOM will be based on CSS3 transitions. The animation framework should
|
||||||
|
accomodate both implementations.
|
||||||
|
|
||||||
|
Related to the animation framework is the way the DOM renderer translates
|
||||||
|
and scales the layers pane. The DOM renderer currently scales each tile
|
||||||
|
image individually by changing the dimensions of its DOM element. For
|
||||||
|
performance reasons we may instead want to apply a CSS scale transform
|
||||||
|
on container elements.
|
||||||
|
|
||||||
|
We will implement the animation framework in Phase 1,
|
||||||
|
as a foundation for current and future animation requirements.
|
||||||
|
|
||||||
|
## Camera
|
||||||
|
|
||||||
|
In Phase 1 we will experiment with 3D features. We will work on
|
||||||
|
|
||||||
|
* Integrating with the Cesium virtual globe
|
||||||
|
* Adding "limited tilt" support (i.e. tilt with same-resolution tiles)
|
||||||
|
|
||||||
|
### Enabling future functionality
|
||||||
|
|
||||||
|
For 3D in general, and integration with virtual globes in particular, we need
|
||||||
|
to introduce the concept of a camera. In Phase 1 we will therefore add a Camera
|
||||||
|
type. The Camera will be part of the API. One requirement though is that the
|
||||||
|
API remain easy for developers of "simple", 2D map applications.
|
||||||
|
|
||||||
|
## Data Source
|
||||||
|
|
||||||
|
OpenLayers 3 has the concept of data sources. One type only is currently
|
||||||
|
supported: *tile*. (OpenLayers 3 currently supports the XYZ/OSM tile source
|
||||||
|
family, and tiled WMS.)
|
||||||
|
|
||||||
|
In Phase 1 we will add support for the following layer type:
|
||||||
|
|
||||||
|
* WMTS
|
||||||
|
* Single Image WMS
|
||||||
|
* Image (OpenLayers 2's `OpenLayers.Layer.Image`)
|
||||||
|
* Vector (detailed in the following section)
|
||||||
|
|
||||||
|
### Enabling future functionality
|
||||||
|
|
||||||
|
To be able to rate-control, abort, prioritize tile requests, and manage
|
||||||
|
resource management a Tile Queue (or Tile Manager) will be implemented.
|
||||||
|
This work will be based on past experience with OpenLayers 2 and WebGLMaps.
|
||||||
|
|
||||||
|
Also, writing custom, application-specific layer/data source types should be
|
||||||
|
possible. The architecture and build tool must be designed with this
|
||||||
|
in mind.
|
||||||
|
|
||||||
|
Vector
|
||||||
|
------
|
||||||
|
|
||||||
|
In Phase 1 we will add the following vector functionality:
|
||||||
|
|
||||||
|
* Display styled points, linestrings and polygons with Canvas 2D (or SVG [*])
|
||||||
|
* Display unstyled points with WebGL
|
||||||
|
* Draw, interact with, and modify features
|
||||||
|
* Support various *formats*, *protocols*, and *strategies*
|
||||||
|
|
||||||
|
We will consider 2D vectors only in Phase 1.
|
||||||
|
|
||||||
|
[*] To be decided considering performance and browser compatibility.
|
||||||
|
|
||||||
|
Note: it is not yet clear whether we will have a Markers layer type as in OpenLayers 2.
|
||||||
|
|
||||||
|
### Enabling future functionality
|
||||||
|
|
||||||
|
OpenLayers 2 offers many vector-related features. It has a flexible
|
||||||
|
architecture enabling to work with different *strategies*, *protocols*, and
|
||||||
|
*formats*. It also provides a powerful styling framework, based on SLD.
|
||||||
|
|
||||||
|
Eventually, OpenLayers 3 will, at least, provide the same level of
|
||||||
|
functionality and flexibility.
|
||||||
|
|
||||||
|
Displaying styled geometries of any type (point, linestring and polygon) with
|
||||||
|
WebGL must also be possible in the future, and it must exhibit good
|
||||||
|
performance. For example, sending the vector data to the GPU must not require
|
||||||
|
expensive memory operations (data copies), and it must be possible to batch the
|
||||||
|
drawing of multiple objects.
|
||||||
|
|
||||||
|
Also, applying styles to geometries should probably be easier than with
|
||||||
|
OpenLayers 2, but without compromising on flexibility and performance.
|
||||||
|
|
||||||
|
## Control
|
||||||
|
|
||||||
|
In Phase 1 we will port the following OpenLayers 2 controls, or
|
||||||
|
functionality thereof, to OpenLayers 3:
|
||||||
|
|
||||||
|
* ArgParser
|
||||||
|
* Attribution
|
||||||
|
* MousePosition
|
||||||
|
* Navigation
|
||||||
|
* PanZoomBar
|
||||||
|
* Permalink
|
||||||
|
* ScaleLine
|
||||||
|
* TouchNavigation
|
||||||
|
* Zoom
|
||||||
|
* ZoomToMaxExtent
|
||||||
|
* OverviewMap
|
||||||
|
* DrawFeature
|
||||||
|
* Geolocate
|
||||||
|
* GetFeature
|
||||||
|
* Measure
|
||||||
|
* ModifyFeature
|
||||||
|
* NavigationHistory
|
||||||
|
* SelectFeature
|
||||||
|
|
||||||
|
OpenLayers 2 includes a `Panel` control, for addings buttons onto a map.
|
||||||
|
Whether something similar will be be ported to OpenLayers 3 is yet to be
|
||||||
|
determined.
|
||||||
|
|
||||||
|
### Enabling future functionality
|
||||||
|
|
||||||
|
The control architecture will be built with the following requirements in mind:
|
||||||
|
|
||||||
|
* Controls must work with both the DOM and WebGL renderers.
|
||||||
|
* Controls can be composed of other controls.
|
||||||
|
* Writing controls must be easy.
|
||||||
|
* Working with application-specific controls should be possible.
|
||||||
|
|
||||||
|
Note: OpenLayers 3 has *interactions* and *controls*. We will need to clarify
|
||||||
|
these concepts in order to implement the required functionality in a generic
|
||||||
|
way.
|
||||||
|
|
||||||
|
## Format
|
||||||
|
|
||||||
|
In Phase 1 we will implement the following formats:
|
||||||
|
|
||||||
|
* WMS Capabilities
|
||||||
|
* WMTS Capabilities
|
||||||
|
* GeoJSON (implies JSON)
|
||||||
|
* KML
|
||||||
|
* WKT
|
||||||
|
* GPX
|
||||||
|
* WFTS (implies GML)
|
||||||
|
|
||||||
|
### Enabling future functionality
|
||||||
|
|
||||||
|
OpenLayers 2 includes an architecture to work with XML (mainly OGC), and share
|
||||||
|
code between various formats. A similar architecture will be implemented in
|
||||||
|
OpenLayers 3.
|
||||||
|
|
||||||
|
We will also attempt to make it possible to share formats with other
|
||||||
|
open-source toolkits (Cesium, Leaflet). This may require collaboration with
|
||||||
|
other communities.
|
||||||
|
|
||||||
|
* Define format architecture
|
||||||
|
* define XML format architecture
|
||||||
|
|
||||||
|
## Mobile
|
||||||
|
|
||||||
|
OpenLayers 3 must obviously work on mobile. Panning and zooming should be very
|
||||||
|
smooth. The common gestures for interacting with the map should be available.
|
||||||
|
For example, we will add a `PinchZoom` interaction (which we don't have
|
||||||
|
currently).
|
||||||
|
|
||||||
|
We will focus on supporting the iOS and Android native browsers (WebKit). See
|
||||||
|
the Browser Support section below for more information.
|
||||||
|
|
||||||
|
## Overlay/Popup
|
||||||
|
|
||||||
|
OpenLayers 3 already includes the concept of overlays. Overlays are
|
||||||
|
things/elements that can be added atop the map. This is the concept onto which
|
||||||
|
popups and labels will rely. We will to continue this work, and add a popup
|
||||||
|
implementation based on the overlay architecture.
|
||||||
|
|
||||||
|
## Browser support
|
||||||
|
|
||||||
|
In Phase 1 we will make sure the features we develop work in
|
||||||
|
|
||||||
|
* IE 9+
|
||||||
|
* FireFox 17+
|
||||||
|
* Chrome 22+
|
||||||
|
* Safari 5+
|
||||||
|
* iOS 6 and Android 4.2 native browsers
|
||||||
|
|
||||||
|
Supporting IE from version 9 makes it possible to not rely on VML at all for
|
||||||
|
vector rendering. VML is an obsolete technology.
|
||||||
|
|
||||||
|
### Enabling future functionality
|
||||||
|
|
||||||
|
OpenLayers 3 will need to be able to leverage modern web technologies such
|
||||||
|
as Filter Effects and CSS3 (3D) transforms.
|
||||||
|
|
||||||
|
## Infrastructure and Doc
|
||||||
|
|
||||||
|
OpenLayers 3 needs to have good documentations and tools.
|
||||||
|
|
||||||
|
We already generate an API doc using jsdoc3, but a lot
|
||||||
|
more remains to be done for a decent API documentation. We may need to extend
|
||||||
|
jsdoc3 to meet our needs.
|
||||||
|
|
||||||
|
We use Travis CI for Continuous testing and integration. We will need to
|
||||||
|
update our Travis script as we go.
|
||||||
|
|
||||||
|
OpenLayers 3 has to offer easy-to-use tools for creating custom builds of the
|
||||||
|
library. A convenient command line interface (CLI) will be developed. This CLI
|
||||||
|
will serve as the base for a hosted build tool developed in a further phase of
|
||||||
|
the project.
|
||||||
|
|
||||||
|
We will also need to organize the website and the community around two code
|
||||||
|
bases (OpenLayers 2 and OpenLayers 3).
|
||||||
|
|
||||||
|
## Summary
|
||||||
|
|
||||||
|
In the first phase of development we will mainly work on porting the
|
||||||
|
functionality from OpenLayers 2 to OpenLayers 3. At the end of the first phase
|
||||||
|
OpenLayers 3 should major features of OpenLayers 2, and should have a solid and
|
||||||
|
flexible architecture making it possible, and easy enough, to add more features
|
||||||
|
in the future.
|
||||||
|
|
||||||
|
In the first phase we will also work on more advanced features (e.g. Cesium
|
||||||
|
integration, client-side re-projection, millions of geometries handled by
|
||||||
|
WebGL, limited tilt close to the surface). The goal is twofold: assess our
|
||||||
|
architecture and design choices, and show off OpenLayers 3 to the public.
|
||||||
Reference in New Issue
Block a user