Destroyed Development Phase 1 (markdown)

elemoine
2014-11-06 09:32:09 -08:00
parent d3dc5ba09d
commit f1c5c4058a
-242
@@ -1,242 +0,0 @@
# 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.