From eb95a7e9525bd7b4948045a98ce8ee0bcb95a443 Mon Sep 17 00:00:00 2001 From: elemoine Date: Fri, 25 Jan 2013 02:06:10 -0800 Subject: [PATCH] Created Development Phase 1 (markdown) --- Development-Phase-1.md | 242 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 242 insertions(+) create mode 100644 Development-Phase-1.md diff --git a/Development-Phase-1.md b/Development-Phase-1.md new file mode 100644 index 0000000..6afe7ba --- /dev/null +++ b/Development-Phase-1.md @@ -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. \ No newline at end of file