diff --git a/apidoc/index.md b/apidoc/index.md index 906e07eed3..a0a54cfae3 100644 --- a/apidoc/index.md +++ b/apidoc/index.md @@ -6,7 +6,7 @@ [Creation](ol.Map.html#Map)
[Events](ol.MapBrowserEvent.html)

The view manages the visual parameters of the map view, like resolution or rotation.

-[ol.View2D](ol.View2D.html) with center, projection, resolution and rotation +[ol.View](ol.View.html) with center, projection, resolution and rotation

Layers are lightweight containers that get their data from [sources](ol.source.html).

[ol.layer.Tile](ol.layer.Tile.html)
[ol.layer.Image](ol.layer.Image.html)
diff --git a/doc/quickstart.hbs b/doc/quickstart.hbs index b89d8a8a59..3868a3a91f 100644 --- a/doc/quickstart.hbs +++ b/doc/quickstart.hbs @@ -34,7 +34,7 @@ Below you'll find a complete working example. Create a new file, copy in the co source: new ol.source.MapQuest({layer: 'sat'}) }) ], - view: new ol.View2D({ + view: new ol.View({ center: ol.proj.transform([37.41, 8.82], 'EPSG:4326', 'EPSG:3857'), zoom: 4 }) @@ -88,7 +88,7 @@ The map in the application is contained in a [`
` HTML element](http://en.wi source: new ol.source.MapQuest({layer: 'sat'}) }) ], - view: new ol.View2D({ + view: new ol.View({ center: ol.proj.transform([37.41, 8.82], 'EPSG:4326', 'EPSG:3857'), zoom: 4 }) @@ -121,10 +121,10 @@ The `layers: [ ... ]` array is used to define the list of layers available in th Layers in OpenLayers 3 are defined with a type (Image, Tile or Vector) which contains a source. The source is the protocol used to get the map tiles. You can consult the list of [available layer sources here](/en/{{ latest }}/apidoc/ol.source.html) -The next part of the `Map` object is the `View`. The view allow to specify the center, resolution, and rotation of the map. Right now, only `View2D` is supported, but other views should be available at some point. The simplest way to define a view is to define a center point and a zoom level. Note that zoom level 0 is zoomed out. +The next part of the `Map` object is the `View`. The view allow to specify the center, resolution, and rotation of the map. The simplest way to define a view is to define a center point and a zoom level. Note that zoom level 0 is zoomed out. ```js - view: new ol.View2D({ + view: new ol.View({ center: ol.proj.transform([37.41, 8.82], 'EPSG:4326', 'EPSG:3857'), zoom: 4 }) diff --git a/doc/tutorials/concepts.hbs b/doc/tutorials/concepts.hbs index 09110938c5..08f5888c19 100644 --- a/doc/tutorials/concepts.hbs +++ b/doc/tutorials/concepts.hbs @@ -16,16 +16,16 @@ The core component of OpenLayers 3 is the map (`ol.Map`). It is rendered to a `t ``` ## View -`ol.Map` is not responsible for things like center, zoom level and projection of the map. Instead, these are properties of an `ol.View` instance - typically an `ol.View2D` for 2D maps. The reason for this abstraction is the idea of instantly switching e.g. between a 2D and a tilted 3D view, without the need to maintain two copies of the `layers`. +`ol.Map` is not responsible for things like center, zoom level and projection of the map. Instead, these are properties of an `ol.View` instance. ```js - map.setView(new ol.View2D({ + map.setView(new ol.View({ center: [0, 0], zoom: 2 })); ``` -An `ol.View2D` also has a `projection`. The projection determines the coordinate system of the `center` and the units for map resolution calculations. If not specified (like in the above snippet), the default projection is Spherical Mercator (EPSG:3857), with meters as map units. +An `ol.View` also has a `projection`. The projection determines the coordinate system of the `center` and the units for map resolution calculations. If not specified (like in the above snippet), the default projection is Spherical Mercator (EPSG:3857), with meters as map units. The `zoom` option is a convenient way to specify the map resolution. The available zoom levels are determined by `maxZoom` (default: 28), `zoomFactor` (default: 2) and `maxResolution` (default is calculated in such a way that the projection's validity extent fits in a 256x256 pixel tile). Starting at zoom level 0 with a resolution of `maxResolution` units per pixel, subsequent zoom levels are calculated by dividing the previous zoom level's resolution by `zoomFactor`, until zoom level `maxZoom` is reached. @@ -63,7 +63,7 @@ The above snippets can be conflated to a self contained map configuration with v layers: [ new ol.layer.Tile({source: new ol.source.OSM()}) ], - view: new ol.View2D({ + view: new ol.View({ center: [0, 0], zoom: 2 }), diff --git a/examples/accessible.js b/examples/accessible.js index 4f61352b2e..2d36f4c2f8 100644 --- a/examples/accessible.js +++ b/examples/accessible.js @@ -1,5 +1,5 @@ goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.layer.Tile'); goog.require('ol.source.OSM'); @@ -12,7 +12,7 @@ var map = new ol.Map({ ], renderer: exampleNS.getRendererFromQueryString(), target: 'map', - view: new ol.View2D({ + view: new ol.View({ center: [0, 0], zoom: 2 }) diff --git a/examples/animation.js b/examples/animation.js index 3123a8db9d..8965908c0c 100644 --- a/examples/animation.js +++ b/examples/animation.js @@ -1,5 +1,5 @@ goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.animation'); goog.require('ol.layer.Tile'); goog.require('ol.proj'); @@ -40,7 +40,7 @@ var rome = ol.proj.transform([12.5, 41.9], 'EPSG:4326', 'EPSG:3857'); var bern = ol.proj.transform([7.4458, 46.95], 'EPSG:4326', 'EPSG:3857'); var madrid = ol.proj.transform([-3.683333, 40.4], 'EPSG:4326', 'EPSG:3857'); -var view = new ol.View2D({ +var view = new ol.View({ // the view's initial state center: istanbul, zoom: 6 diff --git a/examples/bind-input.js b/examples/bind-input.js index 0ed834d695..421e721156 100644 --- a/examples/bind-input.js +++ b/examples/bind-input.js @@ -1,6 +1,6 @@ goog.require('ol.BrowserFeature'); goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.dom.Input'); goog.require('ol.layer.Tile'); goog.require('ol.source.OSM'); @@ -20,7 +20,7 @@ var layer = new ol.layer.Tile({ }); layer.once('precompose', checkWebGL); -var view = new ol.View2D({ +var view = new ol.View({ center: [0, 0], zoom: 2 }); diff --git a/examples/bing-maps.js b/examples/bing-maps.js index 873b412709..7b0a8e61e8 100644 --- a/examples/bing-maps.js +++ b/examples/bing-maps.js @@ -1,5 +1,5 @@ goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.layer.Tile'); goog.require('ol.source.BingMaps'); @@ -27,7 +27,7 @@ var map = new ol.Map({ layers: layers, renderer: exampleNS.getRendererFromQueryString(), target: 'map', - view: new ol.View2D({ + view: new ol.View({ center: [-6655.5402445057125, 6709968.258934638], zoom: 13 }) diff --git a/examples/brightness-contrast.js b/examples/brightness-contrast.js index 5911c2d5d1..c762e5e272 100644 --- a/examples/brightness-contrast.js +++ b/examples/brightness-contrast.js @@ -1,6 +1,6 @@ goog.require('ol.BrowserFeature'); goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.layer.Tile'); goog.require('ol.source.MapQuest'); @@ -29,7 +29,7 @@ if (!ol.BrowserFeature.HAS_WEBGL) { layers: [layer], renderer: 'webgl', target: 'map', - view: new ol.View2D({ + view: new ol.View({ center: [0, 0], zoom: 2 }) diff --git a/examples/canvas-tiles.js b/examples/canvas-tiles.js index 9d113f9be1..120b0a4497 100644 --- a/examples/canvas-tiles.js +++ b/examples/canvas-tiles.js @@ -1,5 +1,5 @@ goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.layer.Tile'); goog.require('ol.proj'); goog.require('ol.source.OSM'); @@ -23,7 +23,7 @@ var map = new ol.Map({ ], renderer: exampleNS.getRendererFromQueryString(), target: 'map', - view: new ol.View2D({ + view: new ol.View({ center: ol.proj.transform( [-0.1275, 51.507222], 'EPSG:4326', 'EPSG:3857'), zoom: 10 diff --git a/examples/center.js b/examples/center.js index 4c4c436a27..64dd9cad97 100644 --- a/examples/center.js +++ b/examples/center.js @@ -1,5 +1,5 @@ goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.geom.Point'); goog.require('ol.geom.SimpleGeometry'); goog.require('ol.layer.Tile'); @@ -38,7 +38,7 @@ var vectorLayer = new ol.layer.Vector({ source: source, style: style }); -var view = new ol.View2D({ +var view = new ol.View({ center: [0, 0], zoom: 1 }); diff --git a/examples/custom-controls.js b/examples/custom-controls.js index 146860e4fc..ceca3ad3ba 100644 --- a/examples/custom-controls.js +++ b/examples/custom-controls.js @@ -1,6 +1,6 @@ goog.require('ol'); goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.control'); goog.require('ol.control.Control'); goog.require('ol.layer.Tile'); @@ -37,7 +37,7 @@ app.RotateNorthControl = function(opt_options) { var handleRotateNorth = function(e) { // prevent #rotate-north anchor from getting appended to the url e.preventDefault(); - this_.getMap().getView().getView2D().setRotation(0); + this_.getMap().getView().setRotation(0); }; anchor.addEventListener('click', handleRotateNorth, false); @@ -72,7 +72,7 @@ var map = new ol.Map({ ], renderer: exampleNS.getRendererFromQueryString(), target: 'map', - view: new ol.View2D({ + view: new ol.View({ center: [0, 0], zoom: 2, rotation: 1 diff --git a/examples/d3.js b/examples/d3.js index 9d43422617..861c09208d 100644 --- a/examples/d3.js +++ b/examples/d3.js @@ -2,7 +2,7 @@ // this example uses d3 for which we don't have an externs file. goog.require('ol'); goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.extent'); goog.require('ol.layer.Image'); goog.require('ol.layer.Tile'); @@ -20,7 +20,7 @@ var map = new ol.Map({ }) ], target: 'map', - view: new ol.View2D({ + view: new ol.View({ center: ol.proj.transform([-97, 38], 'EPSG:4326', 'EPSG:3857'), zoom: 4 }) diff --git a/examples/device-orientation.js b/examples/device-orientation.js index a8786b8252..d905ec97d2 100644 --- a/examples/device-orientation.js +++ b/examples/device-orientation.js @@ -1,13 +1,13 @@ goog.require('ol.DeviceOrientation'); goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.dom.Input'); goog.require('ol.layer.Tile'); goog.require('ol.proj'); goog.require('ol.source.OSM'); var projection = ol.proj.get('EPSG:3857'); -var view = new ol.View2D({ +var view = new ol.View({ center: [0, 0], projection: projection, extent: projection.getExtent(), diff --git a/examples/drag-and-drop-image-vector.js b/examples/drag-and-drop-image-vector.js index 18cb0812e6..90a6f54b83 100644 --- a/examples/drag-and-drop-image-vector.js +++ b/examples/drag-and-drop-image-vector.js @@ -1,5 +1,5 @@ goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.format.GPX'); goog.require('ol.format.GeoJSON'); goog.require('ol.format.IGC'); @@ -106,7 +106,7 @@ var map = new ol.Map({ ], renderer: exampleNS.getRendererFromQueryString(), target: 'map', - view: new ol.View2D({ + view: new ol.View({ center: [0, 0], zoom: 2 }) @@ -123,8 +123,9 @@ dragAndDropInteraction.on('addfeatures', function(event) { style: styleFunction }) })); - var view2D = map.getView().getView2D(); - view2D.fitExtent(vectorSource.getExtent(), map.getSize()); + var view = map.getView(); + view.fitExtent( + vectorSource.getExtent(), /** @type {ol.Size} */ (map.getSize())); }); var displayFeatureInfo = function(pixel) { diff --git a/examples/drag-and-drop.js b/examples/drag-and-drop.js index 9225d8fcd5..c481a7f9a9 100644 --- a/examples/drag-and-drop.js +++ b/examples/drag-and-drop.js @@ -1,5 +1,5 @@ goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.format.GPX'); goog.require('ol.format.GeoJSON'); goog.require('ol.format.IGC'); @@ -104,7 +104,7 @@ var map = new ol.Map({ }) ], target: 'map', - view: new ol.View2D({ + view: new ol.View({ center: [0, 0], zoom: 2 }) @@ -119,8 +119,9 @@ dragAndDropInteraction.on('addfeatures', function(event) { source: vectorSource, style: styleFunction })); - var view2D = map.getView().getView2D(); - view2D.fitExtent(vectorSource.getExtent(), map.getSize()); + var view = map.getView(); + view.fitExtent( + vectorSource.getExtent(), /** @type {ol.Size} */ (map.getSize())); }); var displayFeatureInfo = function(pixel) { diff --git a/examples/drag-rotate-and-zoom.js b/examples/drag-rotate-and-zoom.js index 51f98c974e..50dd2f1837 100644 --- a/examples/drag-rotate-and-zoom.js +++ b/examples/drag-rotate-and-zoom.js @@ -1,5 +1,5 @@ goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.interaction'); goog.require('ol.interaction.DragRotateAndZoom'); goog.require('ol.layer.Tile'); @@ -17,7 +17,7 @@ var map = new ol.Map({ ], renderer: exampleNS.getRendererFromQueryString(), target: 'map', - view: new ol.View2D({ + view: new ol.View({ center: [0, 0], zoom: 2 }) diff --git a/examples/draw-and-modify-features.js b/examples/draw-and-modify-features.js index e75f2049fd..d6c1de8f74 100644 --- a/examples/draw-and-modify-features.js +++ b/examples/draw-and-modify-features.js @@ -1,6 +1,6 @@ goog.require('ol.FeatureOverlay'); goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.events.condition'); goog.require('ol.interaction'); goog.require('ol.interaction.Draw'); @@ -19,7 +19,7 @@ var raster = new ol.layer.Tile({ var map = new ol.Map({ layers: [raster], target: 'map', - view: new ol.View2D({ + view: new ol.View({ center: [-11000000, 4600000], zoom: 4 }) diff --git a/examples/draw-features.js b/examples/draw-features.js index 50df83a6b2..59cc07984e 100644 --- a/examples/draw-features.js +++ b/examples/draw-features.js @@ -1,5 +1,5 @@ goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.interaction'); goog.require('ol.interaction.Draw'); goog.require('ol.layer.Tile'); @@ -39,7 +39,7 @@ var vector = new ol.layer.Vector({ var map = new ol.Map({ layers: [raster, vector], target: 'map', - view: new ol.View2D({ + view: new ol.View({ center: [-11000000, 4600000], zoom: 4 }) diff --git a/examples/dynamic-data.js b/examples/dynamic-data.js index 313fa14bba..00d87e840e 100644 --- a/examples/dynamic-data.js +++ b/examples/dynamic-data.js @@ -1,5 +1,5 @@ goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.geom.MultiPoint'); goog.require('ol.layer.Tile'); goog.require('ol.source.MapQuest'); @@ -15,7 +15,7 @@ var map = new ol.Map({ }) ], target: 'map', - view: new ol.View2D({ + view: new ol.View({ center: [0, 0], zoom: 2 }) diff --git a/examples/epsg-4326.js b/examples/epsg-4326.js index 9f91e250bb..30f0f0c2dd 100644 --- a/examples/epsg-4326.js +++ b/examples/epsg-4326.js @@ -1,5 +1,5 @@ goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.control'); goog.require('ol.control.ScaleLine'); goog.require('ol.layer.Tile'); @@ -27,7 +27,7 @@ var map = new ol.Map({ ]), layers: layers, target: 'map', - view: new ol.View2D({ + view: new ol.View({ projection: 'EPSG:4326', center: [0, 0], zoom: 2 diff --git a/examples/export-map.js b/examples/export-map.js index ce042c1610..747c5dedb7 100644 --- a/examples/export-map.js +++ b/examples/export-map.js @@ -1,5 +1,5 @@ goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.layer.Tile'); goog.require('ol.source.OSM'); @@ -11,7 +11,7 @@ var map = new ol.Map({ }) ], target: 'map', - view: new ol.View2D({ + view: new ol.View({ center: [0, 0], zoom: 2 }) diff --git a/examples/fractal.js b/examples/fractal.js index b2cb5dc404..fb0cbeabc1 100644 --- a/examples/fractal.js +++ b/examples/fractal.js @@ -1,6 +1,6 @@ goog.require('ol.Feature'); goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.geom.LineString'); goog.require('ol.layer.Vector'); goog.require('ol.source.Vector'); @@ -26,7 +26,7 @@ var layer = new ol.layer.Vector({ var map = new ol.Map({ layers: [layer], target: 'map', - view: new ol.View2D({ + view: new ol.View({ center: [0, 0], zoom: 1 }) diff --git a/examples/full-screen-drag-rotate-and-zoom.js b/examples/full-screen-drag-rotate-and-zoom.js index a675b04615..c96130a5b4 100644 --- a/examples/full-screen-drag-rotate-and-zoom.js +++ b/examples/full-screen-drag-rotate-and-zoom.js @@ -1,5 +1,5 @@ goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.control'); goog.require('ol.control.FullScreen'); goog.require('ol.interaction'); @@ -25,7 +25,7 @@ var map = new ol.Map({ ], // Use the canvas renderer because it's currently the fastest target: 'map', - view: new ol.View2D({ + view: new ol.View({ center: [-33519607, 5616436], rotation: -Math.PI / 8, zoom: 8 diff --git a/examples/full-screen.js b/examples/full-screen.js index 18a615b854..f23b983b65 100644 --- a/examples/full-screen.js +++ b/examples/full-screen.js @@ -1,12 +1,12 @@ goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.control'); goog.require('ol.control.FullScreen'); goog.require('ol.layer.Tile'); goog.require('ol.source.BingMaps'); -var view = new ol.View2D({ +var view = new ol.View({ center: [-9101767, 2822912], zoom: 14 }); diff --git a/examples/geojson.js b/examples/geojson.js index c957e42c2a..fe22fd08e0 100644 --- a/examples/geojson.js +++ b/examples/geojson.js @@ -1,6 +1,6 @@ goog.require('ol.Feature'); goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.geom.Circle'); goog.require('ol.layer.Tile'); goog.require('ol.layer.Vector'); @@ -188,7 +188,7 @@ var map = new ol.Map({ vectorLayer ], target: 'map', - view: new ol.View2D({ + view: new ol.View({ center: [0, 0], zoom: 2 }) diff --git a/examples/geolocation-orientation.js b/examples/geolocation-orientation.js index 093c4e08a8..4ac409b15b 100644 --- a/examples/geolocation-orientation.js +++ b/examples/geolocation-orientation.js @@ -1,14 +1,14 @@ goog.require('ol.Geolocation'); goog.require('ol.Map'); goog.require('ol.Overlay'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.geom.LineString'); goog.require('ol.layer.Tile'); goog.require('ol.proj'); goog.require('ol.source.OSM'); // creating the view -var view = new ol.View2D({ +var view = new ol.View({ center: ol.proj.transform([5.8713, 45.6452], 'EPSG:4326', 'EPSG:3857'), zoom: 19 }); @@ -134,7 +134,7 @@ map.beforeRender(function(map, frameState) { previousM = m; // interpolate position along positions LineString var c = positions.getCoordinateAtM(m, true); - var view = frameState.view2DState; + var view = frameState.viewState; if (c) { view.center = getCenterWithHeading(c, -c[2], view.resolution); view.rotation = -c[2]; diff --git a/examples/geolocation.js b/examples/geolocation.js index 21f48d5851..3d99af6f03 100644 --- a/examples/geolocation.js +++ b/examples/geolocation.js @@ -2,14 +2,14 @@ goog.require('ol.Feature'); goog.require('ol.FeatureOverlay'); goog.require('ol.Geolocation'); goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.dom.Input'); goog.require('ol.geom.Point'); goog.require('ol.layer.Tile'); goog.require('ol.source.OSM'); -var view = new ol.View2D({ +var view = new ol.View({ center: [0, 0], zoom: 2 }); diff --git a/examples/getfeatureinfo.js b/examples/getfeatureinfo.js index 0c60b15c3d..96c063f425 100644 --- a/examples/getfeatureinfo.js +++ b/examples/getfeatureinfo.js @@ -1,5 +1,5 @@ goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.layer.Tile'); goog.require('ol.source.TileWMS'); @@ -13,7 +13,7 @@ var wmsLayer = new ol.layer.Tile({ source: wmsSource }); -var view = new ol.View2D({ +var view = new ol.View({ center: [0, 0], zoom: 1 }); diff --git a/examples/google-map.js b/examples/google-map.js index 24a2369596..43ae66c77a 100644 --- a/examples/google-map.js +++ b/examples/google-map.js @@ -1,7 +1,7 @@ // NOCOMPILE // This example uses the GMapx v3 API, which we do not have an exports file for. goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.interaction'); goog.require('ol.interaction.DragPan'); goog.require('ol.layer.Vector'); @@ -21,7 +21,7 @@ var gmap = new google.maps.Map(document.getElementById('gmap'), { streetViewControl: false }); -var view = new ol.View2D({ +var view = new ol.View({ // make sure the view doesn't go beyond the 22 zoom levels of Google Maps maxZoom: 21 }); diff --git a/examples/gpx.js b/examples/gpx.js index 7936ef5f87..5f4a84c6c4 100644 --- a/examples/gpx.js +++ b/examples/gpx.js @@ -1,5 +1,5 @@ goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.layer.Tile'); goog.require('ol.layer.Vector'); goog.require('ol.source.BingMaps'); @@ -56,7 +56,7 @@ var vector = new ol.layer.Vector({ var map = new ol.Map({ layers: [raster, vector], target: document.getElementById('map'), - view: new ol.View2D({ + view: new ol.View({ center: [-7916041.528716288, 5228379.045749711], zoom: 12 }) diff --git a/examples/heatmap-earthquakes.js b/examples/heatmap-earthquakes.js index 3766a28e94..ab49880783 100644 --- a/examples/heatmap-earthquakes.js +++ b/examples/heatmap-earthquakes.js @@ -1,5 +1,5 @@ goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.layer.Heatmap'); goog.require('ol.layer.Tile'); goog.require('ol.source.KML'); @@ -32,7 +32,7 @@ var raster = new ol.layer.Tile({ var map = new ol.Map({ layers: [raster, vector], target: 'map', - view: new ol.View2D({ + view: new ol.View({ center: [0, 0], zoom: 2 }) diff --git a/examples/hue-saturation.js b/examples/hue-saturation.js index 254f85648c..61aba6c102 100644 --- a/examples/hue-saturation.js +++ b/examples/hue-saturation.js @@ -1,6 +1,6 @@ goog.require('ol.BrowserFeature'); goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.layer.Tile'); goog.require('ol.proj'); goog.require('ol.source.BingMaps'); @@ -33,7 +33,7 @@ if (!ol.BrowserFeature.HAS_WEBGL) { layers: [layer], renderer: 'webgl', target: 'map', - view: new ol.View2D({ + view: new ol.View({ center: ol.proj.transform([-9.375, 51.483333], 'EPSG:4326', 'EPSG:3857'), zoom: 15 }) diff --git a/examples/icon.js b/examples/icon.js index d94e335313..d510cf16fa 100644 --- a/examples/icon.js +++ b/examples/icon.js @@ -1,7 +1,7 @@ goog.require('ol.Feature'); goog.require('ol.Map'); goog.require('ol.Overlay'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.geom.Point'); goog.require('ol.layer.Tile'); goog.require('ol.layer.Vector'); @@ -47,7 +47,7 @@ var rasterLayer = new ol.layer.Tile({ var map = new ol.Map({ layers: [rasterLayer, vectorLayer], target: document.getElementById('map'), - view: new ol.View2D({ + view: new ol.View({ center: [0, 0], zoom: 3 }) diff --git a/examples/igc.js b/examples/igc.js index 5a25ac55a7..33b5924140 100644 --- a/examples/igc.js +++ b/examples/igc.js @@ -2,7 +2,7 @@ goog.require('ol.Attribution'); goog.require('ol.Feature'); goog.require('ol.FeatureOverlay'); goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.geom.LineString'); goog.require('ol.geom.Point'); goog.require('ol.layer.Tile'); @@ -83,7 +83,7 @@ var map = new ol.Map({ }) ], target: 'map', - view: new ol.View2D({ + view: new ol.View({ center: [703365.7089403362, 5714629.865071137], zoom: 9 }) diff --git a/examples/image-filter.js b/examples/image-filter.js index 99d8c06d65..a94de1f14c 100644 --- a/examples/image-filter.js +++ b/examples/image-filter.js @@ -1,5 +1,5 @@ goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.layer.Tile'); goog.require('ol.proj'); goog.require('ol.source.BingMaps'); @@ -13,7 +13,7 @@ var imagery = new ol.layer.Tile({ var map = new ol.Map({ layers: [imagery], target: 'map', - view: new ol.View2D({ + view: new ol.View({ center: ol.proj.transform([-120, 50], 'EPSG:4326', 'EPSG:3857'), zoom: 6 }) diff --git a/examples/image-vector-layer.js b/examples/image-vector-layer.js index f5dbd3520e..01e79fe4e8 100644 --- a/examples/image-vector-layer.js +++ b/examples/image-vector-layer.js @@ -1,6 +1,6 @@ goog.require('ol.FeatureOverlay'); goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.layer.Image'); goog.require('ol.layer.Tile'); goog.require('ol.source.GeoJSON'); @@ -35,7 +35,7 @@ var map = new ol.Map({ }) ], target: 'map', - view: new ol.View2D({ + view: new ol.View({ center: [0, 0], zoom: 1 }) diff --git a/examples/kml-earthquakes.js b/examples/kml-earthquakes.js index ca6d3d5901..db86d9b501 100644 --- a/examples/kml-earthquakes.js +++ b/examples/kml-earthquakes.js @@ -1,5 +1,5 @@ goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.layer.Tile'); goog.require('ol.layer.Vector'); goog.require('ol.source.KML'); @@ -54,7 +54,7 @@ var raster = new ol.layer.Tile({ var map = new ol.Map({ layers: [raster, vector], target: 'map', - view: new ol.View2D({ + view: new ol.View({ center: [0, 0], zoom: 2 }) diff --git a/examples/kml-timezones.js b/examples/kml-timezones.js index 33da7c2e7b..56441f2584 100644 --- a/examples/kml-timezones.js +++ b/examples/kml-timezones.js @@ -1,5 +1,5 @@ goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.layer.Tile'); goog.require('ol.layer.Vector'); goog.require('ol.source.KML'); @@ -61,7 +61,7 @@ var raster = new ol.layer.Tile({ var map = new ol.Map({ layers: [raster, vector], target: 'map', - view: new ol.View2D({ + view: new ol.View({ center: [0, 0], zoom: 2 }) diff --git a/examples/kml.js b/examples/kml.js index 5c8a91f17d..ca4c23ac96 100644 --- a/examples/kml.js +++ b/examples/kml.js @@ -1,5 +1,5 @@ goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.format.KML'); goog.require('ol.layer.Tile'); goog.require('ol.layer.Vector'); @@ -26,7 +26,7 @@ var vector = new ol.layer.Vector({ var map = new ol.Map({ layers: [raster, vector], target: document.getElementById('map'), - view: new ol.View2D({ + view: new ol.View({ center: [876970.8463461736, 5859807.853963373], projection: projection, zoom: 10 diff --git a/examples/layer-clipping-webgl.js b/examples/layer-clipping-webgl.js index 3733e2ea1f..4644390085 100644 --- a/examples/layer-clipping-webgl.js +++ b/examples/layer-clipping-webgl.js @@ -1,6 +1,6 @@ goog.require('ol.BrowserFeature'); goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.layer.Tile'); goog.require('ol.source.OSM'); @@ -20,7 +20,7 @@ if (!ol.BrowserFeature.HAS_WEBGL) { layers: [osm], renderer: 'webgl', target: 'map', - view: new ol.View2D({ + view: new ol.View({ center: [0, 0], zoom: 2 }) diff --git a/examples/layer-clipping.js b/examples/layer-clipping.js index eb0e9cc39d..5395501249 100644 --- a/examples/layer-clipping.js +++ b/examples/layer-clipping.js @@ -1,5 +1,5 @@ goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.layer.Tile'); goog.require('ol.source.OSM'); @@ -10,7 +10,7 @@ var osm = new ol.layer.Tile({ var map = new ol.Map({ layers: [osm], target: 'map', - view: new ol.View2D({ + view: new ol.View({ center: [0, 0], zoom: 2 }) diff --git a/examples/layer-group.js b/examples/layer-group.js index 1134b53831..4ec21fc23d 100644 --- a/examples/layer-group.js +++ b/examples/layer-group.js @@ -1,5 +1,5 @@ goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.dom.Input'); goog.require('ol.layer.Group'); goog.require('ol.layer.Tile'); @@ -32,7 +32,7 @@ var map = new ol.Map({ ], renderer: exampleNS.getRendererFromQueryString(), target: 'map', - view: new ol.View2D({ + view: new ol.View({ center: ol.proj.transform([37.40570, 8.81566], 'EPSG:4326', 'EPSG:3857'), zoom: 4 }) diff --git a/examples/layer-spy.js b/examples/layer-spy.js index b342150efb..2eea7e344a 100644 --- a/examples/layer-spy.js +++ b/examples/layer-spy.js @@ -1,5 +1,5 @@ goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.layer.Tile'); goog.require('ol.proj'); goog.require('ol.source.BingMaps'); @@ -17,7 +17,7 @@ var imagery = new ol.layer.Tile({ var map = new ol.Map({ layers: [roads, imagery], target: 'map', - view: new ol.View2D({ + view: new ol.View({ center: ol.proj.transform([-109, 46.5], 'EPSG:4326', 'EPSG:3857'), zoom: 6 }) diff --git a/examples/layer-swipe.js b/examples/layer-swipe.js index fc6c30e196..8b81ed6f05 100644 --- a/examples/layer-swipe.js +++ b/examples/layer-swipe.js @@ -1,5 +1,5 @@ goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.layer.Tile'); goog.require('ol.source.BingMaps'); goog.require('ol.source.OSM'); @@ -17,7 +17,7 @@ var bing = new ol.layer.Tile({ var map = new ol.Map({ layers: [osm, bing], target: 'map', - view: new ol.View2D({ + view: new ol.View({ center: [0, 0], zoom: 2 }) diff --git a/examples/localized-openstreetmap.js b/examples/localized-openstreetmap.js index 38cbeb8a53..2018d609ca 100644 --- a/examples/localized-openstreetmap.js +++ b/examples/localized-openstreetmap.js @@ -1,6 +1,6 @@ goog.require('ol.Attribution'); goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.layer.Tile'); goog.require('ol.source.OSM'); @@ -42,7 +42,7 @@ var map = new ol.Map({ openSeaMapLayer ], target: 'map', - view: new ol.View2D({ + view: new ol.View({ maxZoom: 18, center: [-244780.24508882355, 5986452.183179816], zoom: 15 diff --git a/examples/mapguide-untiled.js b/examples/mapguide-untiled.js index 2ad42ce58d..d3908b1ed9 100644 --- a/examples/mapguide-untiled.js +++ b/examples/mapguide-untiled.js @@ -1,5 +1,5 @@ goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.layer.Image'); goog.require('ol.source.MapGuide'); @@ -30,7 +30,7 @@ var map = new ol.Map({ }) ], target: 'map', - view: new ol.View2D({ + view: new ol.View({ center: [-87.7302542509315, 43.744459064634], projection: 'EPSG:4326', zoom: 12 diff --git a/examples/mapquest.js b/examples/mapquest.js index 2935d526d4..f2bdf0246e 100644 --- a/examples/mapquest.js +++ b/examples/mapquest.js @@ -1,5 +1,5 @@ goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.layer.Group'); goog.require('ol.layer.Tile'); goog.require('ol.proj'); @@ -34,7 +34,7 @@ var map = new ol.Map({ layers: layers, renderer: exampleNS.getRendererFromQueryString(), target: 'map', - view: new ol.View2D({ + view: new ol.View({ center: ol.proj.transform( [-73.979378, 40.702222], 'EPSG:4326', 'EPSG:3857'), zoom: 9 diff --git a/examples/measure.js b/examples/measure.js index 26b73efde3..6f6c9f27b6 100644 --- a/examples/measure.js +++ b/examples/measure.js @@ -1,5 +1,5 @@ goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.geom.LineString'); goog.require('ol.geom.Polygon'); goog.require('ol.interaction'); @@ -75,7 +75,7 @@ var mouseMoveHandler = function(evt) { var map = new ol.Map({ layers: [raster, vector], target: 'map', - view: new ol.View2D({ + view: new ol.View({ center: [-11000000, 4600000], zoom: 15 }) diff --git a/examples/min-max-resolution.js b/examples/min-max-resolution.js index 75805bf4d8..b59a6b0836 100644 --- a/examples/min-max-resolution.js +++ b/examples/min-max-resolution.js @@ -1,5 +1,5 @@ goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.layer.Tile'); goog.require('ol.source.OSM'); goog.require('ol.source.TileJSON'); @@ -27,7 +27,7 @@ var map = new ol.Map({ ], renderer: exampleNS.getRendererFromQueryString(), target: 'map', - view: new ol.View2D({ + view: new ol.View({ center: [653600, 5723680], zoom: 5 }) diff --git a/examples/mobile-full-screen.js b/examples/mobile-full-screen.js index 15b218a46b..63441b0de7 100644 --- a/examples/mobile-full-screen.js +++ b/examples/mobile-full-screen.js @@ -1,11 +1,11 @@ goog.require('ol.Geolocation'); goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.layer.Tile'); goog.require('ol.source.BingMaps'); -var view = new ol.View2D({ +var view = new ol.View({ center: [0, 0], zoom: 2 }); diff --git a/examples/modify-features.js b/examples/modify-features.js index 512a768dde..d3b6948502 100644 --- a/examples/modify-features.js +++ b/examples/modify-features.js @@ -1,5 +1,5 @@ goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.interaction'); goog.require('ol.interaction.Modify'); goog.require('ol.interaction.Select'); @@ -32,7 +32,7 @@ var map = new ol.Map({ interactions: ol.interaction.defaults().extend([select, modify]), layers: [raster, vector], target: 'map', - view: new ol.View2D({ + view: new ol.View({ center: [0, 0], zoom: 2 }) diff --git a/examples/modify-test.js b/examples/modify-test.js index 173b4e3848..230889d67f 100644 --- a/examples/modify-test.js +++ b/examples/modify-test.js @@ -1,5 +1,5 @@ goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.interaction'); goog.require('ol.interaction.Modify'); goog.require('ol.interaction.Select'); @@ -243,7 +243,7 @@ var map = new ol.Map({ interactions: ol.interaction.defaults().extend([select, modify]), layers: [layer], target: 'map', - view: new ol.View2D({ + view: new ol.View({ center: [0, 1000000], zoom: 2 }) diff --git a/examples/mouse-position.js b/examples/mouse-position.js index 1945a3ffb0..d451a16708 100644 --- a/examples/mouse-position.js +++ b/examples/mouse-position.js @@ -1,5 +1,5 @@ goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.control'); goog.require('ol.control.MousePosition'); goog.require('ol.coordinate'); @@ -27,7 +27,7 @@ var map = new ol.Map({ ], renderer: exampleNS.getRendererFromQueryString(), target: 'map', - view: new ol.View2D({ + view: new ol.View({ center: [0, 0], zoom: 2 }) diff --git a/examples/moveend.js b/examples/moveend.js index a587e3c875..46340d3716 100644 --- a/examples/moveend.js +++ b/examples/moveend.js @@ -1,5 +1,5 @@ goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.extent'); goog.require('ol.layer.Tile'); goog.require('ol.proj'); @@ -14,7 +14,7 @@ var map = new ol.Map({ ], renderer: exampleNS.getRendererFromQueryString(), target: 'map', - view: new ol.View2D({ + view: new ol.View({ center: [0, 0], zoom: 2 }) diff --git a/examples/navigation-controls.js b/examples/navigation-controls.js index 4ecb21d522..04538f83b7 100644 --- a/examples/navigation-controls.js +++ b/examples/navigation-controls.js @@ -1,5 +1,5 @@ goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.control'); goog.require('ol.control.ZoomToExtent'); goog.require('ol.layer.Tile'); @@ -22,7 +22,7 @@ var map = new ol.Map({ ], renderer: exampleNS.getRendererFromQueryString(), target: 'map', - view: new ol.View2D({ + view: new ol.View({ center: [0, 0], zoom: 2 }) diff --git a/examples/overlay.js b/examples/overlay.js index ebc0c11eef..76cde5c48f 100644 --- a/examples/overlay.js +++ b/examples/overlay.js @@ -1,6 +1,6 @@ goog.require('ol.Map'); goog.require('ol.Overlay'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.coordinate'); goog.require('ol.layer.Tile'); goog.require('ol.proj'); @@ -15,7 +15,7 @@ var map = new ol.Map({ layers: [layer], renderer: exampleNS.getRendererFromQueryString(), target: 'map', - view: new ol.View2D({ + view: new ol.View({ center: [0, 0], zoom: 2 }) diff --git a/examples/popup.js b/examples/popup.js index ac59cedd5e..3cdb5acbaf 100644 --- a/examples/popup.js +++ b/examples/popup.js @@ -1,6 +1,6 @@ goog.require('ol.Map'); goog.require('ol.Overlay'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.coordinate'); goog.require('ol.layer.Tile'); goog.require('ol.proj'); @@ -50,7 +50,7 @@ var map = new ol.Map({ renderer: exampleNS.getRendererFromQueryString(), overlays: [overlay], target: 'map', - view: new ol.View2D({ + view: new ol.View({ center: [0, 0], zoom: 2 }) diff --git a/examples/preload.js b/examples/preload.js index d9fae1c686..fea83937f0 100644 --- a/examples/preload.js +++ b/examples/preload.js @@ -1,5 +1,5 @@ goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.layer.Tile'); goog.require('ol.source.BingMaps'); @@ -16,7 +16,7 @@ var map1 = new ol.Map({ ], renderer: exampleNS.getRendererFromQueryString(), target: 'map1', - view: new ol.View2D({ + view: new ol.View({ center: [-4808600, -2620936], zoom: 8 }) diff --git a/examples/rotation.js b/examples/rotation.js index e1c87f7260..4106e99359 100644 --- a/examples/rotation.js +++ b/examples/rotation.js @@ -1,5 +1,5 @@ goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.layer.Tile'); goog.require('ol.source.OSM'); @@ -12,7 +12,7 @@ var map = new ol.Map({ ], renderer: exampleNS.getRendererFromQueryString(), target: 'map', - view: new ol.View2D({ + view: new ol.View({ center: [-25860000, 4130000], rotation: Math.PI / 6, zoom: 10 diff --git a/examples/rtree.js b/examples/rtree.js index 0026fff632..3ef0055404 100644 --- a/examples/rtree.js +++ b/examples/rtree.js @@ -2,7 +2,7 @@ // FIXME this example dives into private members and will never compile :) goog.require('ol.Feature'); goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.extent'); goog.require('ol.geom.Point'); goog.require('ol.geom.Polygon'); @@ -98,7 +98,7 @@ var rtree = new ol.layer.Vector({ var map = new ol.Map({ layers: [vector, rtree], target: 'map', - view: new ol.View2D({ + view: new ol.View({ center: [0, 0], zoom: 2 }) diff --git a/examples/scale-line.js b/examples/scale-line.js index d39392f014..447b4bb842 100644 --- a/examples/scale-line.js +++ b/examples/scale-line.js @@ -1,5 +1,5 @@ goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.control'); goog.require('ol.control.ScaleLine'); goog.require('ol.dom.Input'); @@ -20,7 +20,7 @@ var map = new ol.Map({ ], renderer: exampleNS.getRendererFromQueryString(), target: 'map', - view: new ol.View2D({ + view: new ol.View({ center: [0, 0], zoom: 2 }) diff --git a/examples/select-features.js b/examples/select-features.js index 95a217eccc..5cd47a3729 100644 --- a/examples/select-features.js +++ b/examples/select-features.js @@ -1,5 +1,5 @@ goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.interaction'); goog.require('ol.interaction.Select'); goog.require('ol.layer.Tile'); @@ -24,7 +24,7 @@ var map = new ol.Map({ interactions: ol.interaction.defaults().extend([select]), layers: [raster, vector], target: 'map', - view: new ol.View2D({ + view: new ol.View({ center: [0, 0], zoom: 2 }) diff --git a/examples/semi-transparent-layer.js b/examples/semi-transparent-layer.js index b5b4ef5284..6a3fd3c0e9 100644 --- a/examples/semi-transparent-layer.js +++ b/examples/semi-transparent-layer.js @@ -1,5 +1,5 @@ goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.layer.Tile'); goog.require('ol.proj'); goog.require('ol.source.MapQuest'); @@ -20,7 +20,7 @@ var map = new ol.Map({ ], renderer: exampleNS.getRendererFromQueryString(), target: 'map', - view: new ol.View2D({ + view: new ol.View({ center: ol.proj.transform([-77.93255, 37.9555], 'EPSG:4326', 'EPSG:3857'), zoom: 5 }) diff --git a/examples/side-by-side.js b/examples/side-by-side.js index 3c7e773cd5..5cacf90881 100644 --- a/examples/side-by-side.js +++ b/examples/side-by-side.js @@ -1,6 +1,6 @@ goog.require('ol.BrowserFeature'); goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.layer.Tile'); goog.require('ol.source.MapQuest'); @@ -13,7 +13,7 @@ var domMap = new ol.Map({ ], renderer: 'dom', target: 'domMap', - view: new ol.View2D({ + view: new ol.View({ center: [0, 0], zoom: 1 }) diff --git a/examples/simple.js b/examples/simple.js index c3c620e350..96b91a8b63 100644 --- a/examples/simple.js +++ b/examples/simple.js @@ -1,5 +1,5 @@ goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.layer.Tile'); goog.require('ol.source.OSM'); @@ -12,7 +12,7 @@ var map = new ol.Map({ ], renderer: exampleNS.getRendererFromQueryString(), target: 'map', - view: new ol.View2D({ + view: new ol.View({ center: [0, 0], zoom: 2 }) diff --git a/examples/stamen.js b/examples/stamen.js index 917b455579..09ef7918f4 100644 --- a/examples/stamen.js +++ b/examples/stamen.js @@ -1,5 +1,5 @@ goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.layer.Tile'); goog.require('ol.proj'); goog.require('ol.source.Stamen'); @@ -20,7 +20,7 @@ var map = new ol.Map({ ], renderer: exampleNS.getRendererFromQueryString(), target: 'map', - view: new ol.View2D({ + view: new ol.View({ center: ol.proj.transform( [-122.416667, 37.783333], 'EPSG:4326', 'EPSG:3857'), zoom: 12 diff --git a/examples/static-image.js b/examples/static-image.js index 19a6c2af1b..6487af2b01 100644 --- a/examples/static-image.js +++ b/examples/static-image.js @@ -1,6 +1,6 @@ goog.require('ol.Attribution'); goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.extent'); goog.require('ol.layer.Image'); goog.require('ol.proj.Projection'); @@ -33,7 +33,7 @@ var map = new ol.Map({ }) ], target: 'map', - view: new ol.View2D({ + view: new ol.View({ projection: pixelProjection, center: ol.extent.getCenter(pixelProjection.getExtent()), zoom: 2 diff --git a/examples/synthetic-lines.js b/examples/synthetic-lines.js index e572168860..78754cad5c 100644 --- a/examples/synthetic-lines.js +++ b/examples/synthetic-lines.js @@ -1,6 +1,6 @@ goog.require('ol.Feature'); goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.geom.LineString'); goog.require('ol.layer.Vector'); goog.require('ol.source.Vector'); @@ -48,7 +48,7 @@ var vector = new ol.layer.Vector({ }) }); -var view = new ol.View2D({ +var view = new ol.View({ center: [0, 0], zoom: 0 }); diff --git a/examples/synthetic-points.js b/examples/synthetic-points.js index 6f423435a5..4381fd355c 100644 --- a/examples/synthetic-points.js +++ b/examples/synthetic-points.js @@ -1,6 +1,6 @@ goog.require('ol.Feature'); goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.geom.LineString'); goog.require('ol.geom.Point'); goog.require('ol.layer.Vector'); @@ -53,7 +53,7 @@ var vector = new ol.layer.Vector({ var map = new ol.Map({ layers: [vector], target: document.getElementById('map'), - view: new ol.View2D({ + view: new ol.View({ center: [0, 0], zoom: 2 }) diff --git a/examples/teleport.js b/examples/teleport.js index b6fff5a4a2..02216f275c 100644 --- a/examples/teleport.js +++ b/examples/teleport.js @@ -1,5 +1,5 @@ goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.layer.Tile'); goog.require('ol.source.OSM'); @@ -11,7 +11,7 @@ var map = new ol.Map({ }) ], renderer: exampleNS.getRendererFromQueryString(), - view: new ol.View2D({ + view: new ol.View({ center: [0, 0], zoom: 2 }) diff --git a/examples/tile-vector.js b/examples/tile-vector.js index d980e62bbc..eb73c81f75 100644 --- a/examples/tile-vector.js +++ b/examples/tile-vector.js @@ -1,5 +1,5 @@ goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.format.TopoJSON'); goog.require('ol.layer.Vector'); goog.require('ol.proj'); @@ -77,7 +77,7 @@ var map = new ol.Map({ layers: [waterLayer, roadLayer], renderer: 'canvas', target: document.getElementById('map'), - view: new ol.View2D({ + view: new ol.View({ center: ol.proj.transform([-74.0064, 40.7142], 'EPSG:4326', 'EPSG:3857'), maxZoom: 19, zoom: 14 diff --git a/examples/tilejson.js b/examples/tilejson.js index 7c5524718a..2c1416ce72 100644 --- a/examples/tilejson.js +++ b/examples/tilejson.js @@ -1,5 +1,5 @@ goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.layer.Tile'); goog.require('ol.source.TileJSON'); @@ -15,7 +15,7 @@ var map = new ol.Map({ ], renderer: exampleNS.getRendererFromQueryString(), target: 'map', - view: new ol.View2D({ + view: new ol.View({ center: [0, 0], zoom: 2 }) diff --git a/examples/tissot.js b/examples/tissot.js index 3fcb7afebd..9e5f2c4232 100644 --- a/examples/tissot.js +++ b/examples/tissot.js @@ -1,6 +1,6 @@ goog.require('ol.Feature'); goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.geom.Polygon'); goog.require('ol.layer.Tile'); goog.require('ol.layer.Vector'); @@ -28,7 +28,7 @@ var map = new ol.Map({ ], renderer: 'canvas', target: 'map', - view: new ol.View2D({ + view: new ol.View({ projection: 'EPSG:4326', center: [0, 0], zoom: 2 diff --git a/examples/topojson.js b/examples/topojson.js index 8aba4ccc15..827fa28c90 100644 --- a/examples/topojson.js +++ b/examples/topojson.js @@ -1,5 +1,5 @@ goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.layer.Tile'); goog.require('ol.layer.Vector'); goog.require('ol.source.TileJSON'); @@ -39,7 +39,7 @@ var vector = new ol.layer.Vector({ var map = new ol.Map({ layers: [raster, vector], target: 'map', - view: new ol.View2D({ + view: new ol.View({ center: [0, 0], zoom: 1 }) diff --git a/examples/vector-labels.js b/examples/vector-labels.js index f9b402f57a..cd89a31e14 100644 --- a/examples/vector-labels.js +++ b/examples/vector-labels.js @@ -1,6 +1,6 @@ goog.require('ol.Feature'); goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.layer.Tile'); goog.require('ol.layer.Vector'); goog.require('ol.source.GeoJSON'); @@ -188,7 +188,7 @@ var map = new ol.Map({ vectorPoints ], target: 'map', - view: new ol.View2D({ + view: new ol.View({ center: [-8161939, 6095025], zoom: 8 }) diff --git a/examples/vector-layer.js b/examples/vector-layer.js index 659e0883cf..daf0d3ca75 100644 --- a/examples/vector-layer.js +++ b/examples/vector-layer.js @@ -1,6 +1,6 @@ goog.require('ol.FeatureOverlay'); goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.layer.Tile'); goog.require('ol.layer.Vector'); goog.require('ol.source.GeoJSON'); @@ -53,7 +53,7 @@ var map = new ol.Map({ vectorLayer ], target: 'map', - view: new ol.View2D({ + view: new ol.View({ center: [0, 0], zoom: 1 }) diff --git a/examples/vector-osm.js b/examples/vector-osm.js index 5834ef230e..e5d7e1c3ba 100644 --- a/examples/vector-osm.js +++ b/examples/vector-osm.js @@ -1,5 +1,5 @@ goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.format.OSMXML'); goog.require('ol.layer.Tile'); goog.require('ol.layer.Vector'); @@ -131,7 +131,7 @@ var raster = new ol.layer.Tile({ var map = new ol.Map({ layers: [raster, vector], target: document.getElementById('map'), - view: new ol.View2D({ + view: new ol.View({ center: [739218, 5906096], maxZoom: 19, zoom: 17 diff --git a/examples/vector-wfs.js b/examples/vector-wfs.js index c23c45ff2b..7b9714098e 100644 --- a/examples/vector-wfs.js +++ b/examples/vector-wfs.js @@ -1,5 +1,5 @@ goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.format.GeoJSON'); goog.require('ol.layer.Tile'); goog.require('ol.layer.Vector'); @@ -52,7 +52,7 @@ var raster = new ol.layer.Tile({ var map = new ol.Map({ layers: [raster, vector], target: document.getElementById('map'), - view: new ol.View2D({ + view: new ol.View({ center: [-8908887.277395891, 5381918.072437216], maxZoom: 19, zoom: 12 diff --git a/examples/wms-custom-proj.js b/examples/wms-custom-proj.js index a6687390bf..39ba860d2b 100644 --- a/examples/wms-custom-proj.js +++ b/examples/wms-custom-proj.js @@ -1,6 +1,6 @@ goog.require('ol.Attribution'); goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.control'); goog.require('ol.control.ScaleLine'); goog.require('ol.layer.Tile'); @@ -59,7 +59,7 @@ var map = new ol.Map({ layers: layers, renderer: exampleNS.getRendererFromQueryString(), target: 'map', - view: new ol.View2D({ + view: new ol.View({ projection: projection, center: [660000, 190000], extent: extent, diff --git a/examples/wms-image-custom-proj.js b/examples/wms-image-custom-proj.js index 9f5758a792..d7f0b45f0b 100644 --- a/examples/wms-image-custom-proj.js +++ b/examples/wms-image-custom-proj.js @@ -1,6 +1,6 @@ goog.require('ol.Attribution'); goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.layer.Image'); goog.require('ol.proj'); goog.require('ol.source.ImageWMS'); @@ -52,7 +52,7 @@ var map = new ol.Map({ layers: layers, renderer: exampleNS.getRendererFromQueryString(), target: 'map', - view: new ol.View2D({ + view: new ol.View({ projection: projection, center: [660000, 190000], extent: extent, diff --git a/examples/wms-image.js b/examples/wms-image.js index 345ac7d025..fbc573ab8c 100644 --- a/examples/wms-image.js +++ b/examples/wms-image.js @@ -1,5 +1,5 @@ goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.layer.Image'); goog.require('ol.layer.Tile'); goog.require('ol.source.ImageWMS'); @@ -22,7 +22,7 @@ var layers = [ var map = new ol.Map({ layers: layers, target: 'map', - view: new ol.View2D({ + view: new ol.View({ center: [-10997148, 4569099], zoom: 4 }) diff --git a/examples/wms-no-proj.js b/examples/wms-no-proj.js index 35096af958..4bde5c64f3 100644 --- a/examples/wms-no-proj.js +++ b/examples/wms-no-proj.js @@ -1,6 +1,6 @@ goog.require('ol.Attribution'); goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.layer.Image'); goog.require('ol.layer.Tile'); goog.require('ol.proj.Projection'); @@ -53,7 +53,7 @@ var map = new ol.Map({ layers: layers, renderer: exampleNS.getRendererFromQueryString(), target: 'map', - view: new ol.View2D({ + view: new ol.View({ center: [660000, 190000], projection: projection, zoom: 9 diff --git a/examples/wms-tiled.js b/examples/wms-tiled.js index d213263efe..86f5503f62 100644 --- a/examples/wms-tiled.js +++ b/examples/wms-tiled.js @@ -1,5 +1,5 @@ goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.layer.Tile'); goog.require('ol.source.MapQuest'); goog.require('ol.source.TileWMS'); @@ -21,7 +21,7 @@ var layers = [ var map = new ol.Map({ layers: layers, target: 'map', - view: new ol.View2D({ + view: new ol.View({ center: [-10997148, 4569099], zoom: 4 }) diff --git a/examples/wmts-hidpi.js b/examples/wmts-hidpi.js index a89a1fbe5a..c0633601e1 100644 --- a/examples/wmts-hidpi.js +++ b/examples/wmts-hidpi.js @@ -1,6 +1,6 @@ goog.require('ol.BrowserFeature'); goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.layer.Tile'); goog.require('ol.source.WMTS'); goog.require('ol.tilegrid.WMTS'); @@ -68,7 +68,7 @@ var map = new ol.Map({ }) ], target: 'map', - view: new ol.View2D({ + view: new ol.View({ center: [1823849, 6143760], zoom: 11 }) diff --git a/examples/wmts.js b/examples/wmts.js index f5b50304e0..4b2de5c726 100644 --- a/examples/wmts.js +++ b/examples/wmts.js @@ -1,6 +1,6 @@ goog.require('ol.Attribution'); goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.extent'); goog.require('ol.layer.Tile'); goog.require('ol.proj'); @@ -53,7 +53,7 @@ var map = new ol.Map({ }) ], target: 'map', - view: new ol.View2D({ + view: new ol.View({ center: [-11158582, 4813697], zoom: 4 }) diff --git a/examples/xyz-esri.js b/examples/xyz-esri.js index 8d24ada607..78bdeb1ec4 100644 --- a/examples/xyz-esri.js +++ b/examples/xyz-esri.js @@ -1,6 +1,6 @@ goog.require('ol.Attribution'); goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.layer.Tile'); goog.require('ol.proj'); goog.require('ol.source.XYZ'); @@ -22,7 +22,7 @@ var map = new ol.Map({ }) }) ], - view: new ol.View2D({ + view: new ol.View({ center: ol.proj.transform([-121.1, 47.5], 'EPSG:4326', 'EPSG:3857'), zoom: 7 }) diff --git a/examples/xyz.js b/examples/xyz.js index 11b0f484f2..04ed95d1ef 100644 --- a/examples/xyz.js +++ b/examples/xyz.js @@ -1,6 +1,6 @@ goog.require('ol.Attribution'); goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.layer.Tile'); goog.require('ol.source.OSM'); goog.require('ol.source.XYZ'); @@ -33,7 +33,7 @@ var map = new ol.Map({ }) }) ], - view: new ol.View2D({ + view: new ol.View({ center: [-472202, 7530279], zoom: 12 }) diff --git a/examples/zoom-constrained.js b/examples/zoom-constrained.js index a8ad02ddcc..c76578a17f 100644 --- a/examples/zoom-constrained.js +++ b/examples/zoom-constrained.js @@ -1,5 +1,5 @@ goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.layer.Tile'); goog.require('ol.source.BingMaps'); @@ -14,7 +14,7 @@ var map = new ol.Map({ }) }) ], - view: new ol.View2D({ + view: new ol.View({ center: [-13553864, 5918250], zoom: 11, minZoom: 9, diff --git a/examples/zoomify.js b/examples/zoomify.js index c4f541a04e..ef48e73b1b 100644 --- a/examples/zoomify.js +++ b/examples/zoomify.js @@ -1,5 +1,5 @@ goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.layer.Tile'); goog.require('ol.proj'); goog.require('ol.proj.Projection'); @@ -42,7 +42,7 @@ var map = new ol.Map({ ], renderer: exampleNS.getRendererFromQueryString(), target: 'map', - view: new ol.View2D({ + view: new ol.View({ projection: proj, center: imgCenter, zoom: 0 diff --git a/examples/zoomslider.js b/examples/zoomslider.js index 5066a52c63..97cd8385e7 100644 --- a/examples/zoomslider.js +++ b/examples/zoomslider.js @@ -1,5 +1,5 @@ goog.require('ol.Map'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.control.ZoomSlider'); goog.require('ol.layer.Tile'); goog.require('ol.source.MapQuest'); @@ -21,7 +21,7 @@ var createMap = function(divId) { map = new ol.Map({ layers: [layer], target: divId, - view: new ol.View2D({ + view: new ol.View({ center: [0, 0], zoom: 2 }) diff --git a/externs/olx.js b/externs/olx.js index db8ea75762..cc1d32217f 100644 --- a/externs/olx.js +++ b/externs/olx.js @@ -110,7 +110,7 @@ olx.GeolocationOptions.prototype.projection; * overlays: (ol.Collection|Array.|undefined), * renderer: (ol.RendererType|Array.|string|undefined), * target: (Element|string|undefined), - * view: (ol.IView|undefined)}} + * view: (ol.View|undefined)}} * @todo api */ olx.MapOptions; @@ -201,10 +201,9 @@ olx.MapOptions.prototype.target; /** - * The map's view. Currently {@link ol.View2D} is the only available view. - * No layer sources will be fetched unless this is specified at construction - * time or through {@link ol.Map#setView}. - * @type {ol.IView|undefined} + * The map's view. No layer sources will be fetched unless this is specified at + * construction time or through {@link ol.Map#setView}. + * @type {ol.View|undefined} */ olx.MapOptions.prototype.view; @@ -371,7 +370,7 @@ olx.ProjectionOptions.prototype.global; * zoomFactor: (number|undefined)}} * @todo api */ -olx.View2DOptions; +olx.ViewOptions; /** @@ -380,7 +379,7 @@ olx.View2DOptions; * sources will not be fetched if this is not set. * @type {ol.Coordinate|undefined} */ -olx.View2DOptions.prototype.center; +olx.ViewOptions.prototype.center; /** @@ -390,14 +389,14 @@ olx.View2DOptions.prototype.center; * 270 degrees. The default is `true`. * @type {boolean|number|undefined} */ -olx.View2DOptions.prototype.constrainRotation; +olx.ViewOptions.prototype.constrainRotation; /** * Enable rotation. Default is `true`. * @type {boolean|undefined} */ -olx.View2DOptions.prototype.enableRotation; +olx.ViewOptions.prototype.enableRotation; /** @@ -405,7 +404,7 @@ olx.View2DOptions.prototype.enableRotation; * outside this extent. Default is `undefined`. * @type {ol.Extent|undefined} */ -olx.View2DOptions.prototype.extent; +olx.ViewOptions.prototype.extent; /** @@ -417,7 +416,7 @@ olx.View2DOptions.prototype.extent; * 156543.03392804097`. * @type {number|undefined} */ -olx.View2DOptions.prototype.maxResolution; +olx.ViewOptions.prototype.maxResolution; /** @@ -429,7 +428,7 @@ olx.View2DOptions.prototype.maxResolution; * 0.0005831682455839253`. * @type {number|undefined} */ -olx.View2DOptions.prototype.minResolution; +olx.ViewOptions.prototype.minResolution; /** @@ -439,7 +438,7 @@ olx.View2DOptions.prototype.minResolution; * precedence over `maxZoom`. * @type {number|undefined} */ -olx.View2DOptions.prototype.maxZoom; +olx.ViewOptions.prototype.maxZoom; /** @@ -449,14 +448,14 @@ olx.View2DOptions.prototype.maxZoom; * precedence over `minZoom`. * @type {number|undefined} */ -olx.View2DOptions.prototype.minZoom; +olx.ViewOptions.prototype.minZoom; /** * The projection. Default is `EPSG:3857` (Spherical Mercator). * @type {ol.proj.ProjectionLike} */ -olx.View2DOptions.prototype.projection; +olx.ViewOptions.prototype.projection; /** @@ -466,7 +465,7 @@ olx.View2DOptions.prototype.projection; * neither this nor `zoom` are defined. * @type {number|undefined} */ -olx.View2DOptions.prototype.resolution; +olx.ViewOptions.prototype.resolution; /** @@ -475,7 +474,7 @@ olx.View2DOptions.prototype.resolution; * options are ignored. * @type {Array.|undefined} */ -olx.View2DOptions.prototype.resolutions; +olx.ViewOptions.prototype.resolutions; /** @@ -483,23 +482,23 @@ olx.View2DOptions.prototype.resolutions; * Default is `0`. * @type {number|undefined} */ -olx.View2DOptions.prototype.rotation; +olx.ViewOptions.prototype.rotation; /** * Only used if `resolution` is not defined. Zoom level used to calculate the * initial resolution for the view. The initial resolution is determined using - * the `ol.View2D#constrainResolution` method. + * the `ol.View#constrainResolution` method. * @type {number|undefined} */ -olx.View2DOptions.prototype.zoom; +olx.ViewOptions.prototype.zoom; /** * The zoom factor used to determine the resolution constraint. Default is `2`. * @type {number|undefined} */ -olx.View2DOptions.prototype.zoomFactor; +olx.ViewOptions.prototype.zoomFactor; /** @@ -5037,7 +5036,7 @@ olx.tilegrid.ZoomifyOptions.prototype.resolutions; * minResolution: (number|undefined)}} * @todo api */ -olx.View2D.fitGeometryOptions; +olx.View.fitGeometryOptions; /** @@ -5045,28 +5044,28 @@ olx.View2D.fitGeometryOptions; * top, right, bottom and left padding. Default is `[0, 0, 0, 0]`. * @type {!Array.} */ -olx.View2D.fitGeometryOptions.prototype.padding; +olx.View.fitGeometryOptions.prototype.padding; /** * Constrain the resolution. Default is `true`. * @type {boolean|undefined} */ -olx.View2D.fitGeometryOptions.prototype.constrainResolution; +olx.View.fitGeometryOptions.prototype.constrainResolution; /** * Get the nearest extent. Default is `false`. * @type {boolean|undefined} */ -olx.View2D.fitGeometryOptions.prototype.nearest; +olx.View.fitGeometryOptions.prototype.nearest; /** * Minimum resolution that we zoom to. Default is `0`. * @type {number|undefined} */ -olx.View2D.fitGeometryOptions.prototype.minResolution; +olx.View.fitGeometryOptions.prototype.minResolution; /* typedefs for object literals exposed by the library */ @@ -5090,7 +5089,7 @@ olx.View2D.fitGeometryOptions.prototype.minResolution; * tileQueue: ol.TileQueue, * time: number, * usedTiles: Object.>, - * view2DState: olx.View2DState, + * viewState: olx.ViewState, * viewHints: Array., * wantedTiles: Object.>}} * @todo api @@ -5106,8 +5105,8 @@ olx.FrameState.prototype.pixelRatio; olx.FrameState.prototype.time; -/** @type {olx.View2DState} */ -olx.FrameState.prototype.view2DState; +/** @type {olx.ViewState} */ +olx.FrameState.prototype.viewState; /** @@ -5117,16 +5116,16 @@ olx.FrameState.prototype.view2DState; * rotation: number}} * @todo api */ -olx.View2DState; +olx.ViewState; /** @type {ol.Coordinate} */ -olx.View2DState.prototype.center; +olx.ViewState.prototype.center; /** @type {number} */ -olx.View2DState.prototype.resolution; +olx.ViewState.prototype.resolution; /** @type {number} */ -olx.View2DState.prototype.rotation; +olx.ViewState.prototype.rotation; diff --git a/src/ol/animation.js b/src/ol/animation.js index 41fab3e6b0..35fc212fdc 100644 --- a/src/ol/animation.js +++ b/src/ol/animation.js @@ -1,5 +1,3 @@ -// FIXME works for View2D only - goog.provide('ol.animation'); goog.require('ol.PreRenderFunction'); @@ -31,9 +29,9 @@ ol.animation.bounce = function(options) { return true; } else if (frameState.time < start + duration) { var delta = easing((frameState.time - start) / duration); - var deltaResolution = resolution - frameState.view2DState.resolution; + var deltaResolution = resolution - frameState.viewState.resolution; frameState.animate = true; - frameState.view2DState.resolution += delta * deltaResolution; + frameState.viewState.resolution += delta * deltaResolution; frameState.viewHints[ol.ViewHint.ANIMATING] += 1; return true; } else { @@ -68,11 +66,11 @@ ol.animation.pan = function(options) { return true; } else if (frameState.time < start + duration) { var delta = 1 - easing((frameState.time - start) / duration); - var deltaX = sourceX - frameState.view2DState.center[0]; - var deltaY = sourceY - frameState.view2DState.center[1]; + var deltaX = sourceX - frameState.viewState.center[0]; + var deltaY = sourceY - frameState.viewState.center[1]; frameState.animate = true; - frameState.view2DState.center[0] += delta * deltaX; - frameState.view2DState.center[1] += delta * deltaY; + frameState.viewState.center[0] += delta * deltaX; + frameState.viewState.center[1] += delta * deltaY; frameState.viewHints[ol.ViewHint.ANIMATING] += 1; return true; } else { @@ -109,11 +107,11 @@ ol.animation.rotate = function(options) { } else if (frameState.time < start + duration) { var delta = 1 - easing((frameState.time - start) / duration); var deltaRotation = - (sourceRotation - frameState.view2DState.rotation) * delta; + (sourceRotation - frameState.viewState.rotation) * delta; frameState.animate = true; - frameState.view2DState.rotation += deltaRotation; + frameState.viewState.rotation += deltaRotation; if (!goog.isNull(anchor)) { - var center = frameState.view2DState.center; + var center = frameState.viewState.center; ol.coordinate.sub(center, anchor); ol.coordinate.rotate(center, deltaRotation); ol.coordinate.add(center, anchor); @@ -151,9 +149,9 @@ ol.animation.zoom = function(options) { } else if (frameState.time < start + duration) { var delta = 1 - easing((frameState.time - start) / duration); var deltaResolution = - sourceResolution - frameState.view2DState.resolution; + sourceResolution - frameState.viewState.resolution; frameState.animate = true; - frameState.view2DState.resolution += delta * deltaResolution; + frameState.viewState.resolution += delta * deltaResolution; frameState.viewHints[ol.ViewHint.ANIMATING] += 1; return true; } else { diff --git a/src/ol/control/mousepositioncontrol.js b/src/ol/control/mousepositioncontrol.js index 2fea773865..3f0bf1c7b9 100644 --- a/src/ol/control/mousepositioncontrol.js +++ b/src/ol/control/mousepositioncontrol.js @@ -1,5 +1,4 @@ // FIXME should listen on appropriate pane, once it is defined -// FIXME works for View2D only goog.provide('ol.control.MousePosition'); @@ -110,8 +109,8 @@ ol.control.MousePosition.prototype.handleMapPostrender = function(mapEvent) { if (goog.isNull(frameState)) { this.mapProjection_ = null; } else { - if (this.mapProjection_ != frameState.view2DState.projection) { - this.mapProjection_ = frameState.view2DState.projection; + if (this.mapProjection_ != frameState.viewState.projection) { + this.mapProjection_ = frameState.viewState.projection; this.transform_ = null; } } diff --git a/src/ol/control/rotatecontrol.js b/src/ol/control/rotatecontrol.js index f739293a96..53b378c682 100644 --- a/src/ol/control/rotatecontrol.js +++ b/src/ol/control/rotatecontrol.js @@ -1,5 +1,3 @@ -// FIXME works for View2D only - goog.provide('ol.control.Rotate'); goog.require('goog.asserts'); @@ -7,7 +5,6 @@ goog.require('goog.dom'); goog.require('goog.dom.TagName'); goog.require('goog.events'); goog.require('goog.events.EventType'); -goog.require('ol.View2D'); goog.require('ol.animation'); goog.require('ol.control.Control'); goog.require('ol.css'); @@ -118,12 +115,9 @@ ol.control.Rotate.prototype.handlePointerUp_ = function(pointerEvent) { */ ol.control.Rotate.prototype.resetNorth_ = function() { var map = this.getMap(); - // FIXME works for View2D only var view = map.getView(); goog.asserts.assert(goog.isDef(view)); - var view2D = view.getView2D(); - goog.asserts.assertInstanceof(view2D, ol.View2D); - var currentRotation = view2D.getRotation(); + var currentRotation = view.getRotation(); while (currentRotation < -Math.PI) { currentRotation += 2 * Math.PI; } @@ -138,7 +132,7 @@ ol.control.Rotate.prototype.resetNorth_ = function() { easing: ol.easing.easeOut })); } - view2D.setRotation(0); + view.setRotation(0); } }; @@ -151,7 +145,7 @@ ol.control.Rotate.prototype.handleMapPostrender = function(mapEvent) { if (goog.isNull(frameState)) { return; } - var rotation = frameState.view2DState.rotation; + var rotation = frameState.viewState.rotation; var transform = 'rotate(' + rotation * 360 / (Math.PI * 2) + 'deg)'; if (this.autoHide_) { this.element.style.opacity = (rotation === 0) ? 0 : 1; diff --git a/src/ol/control/scalelinecontrol.js b/src/ol/control/scalelinecontrol.js index b1189aa834..d1af80a7c6 100644 --- a/src/ol/control/scalelinecontrol.js +++ b/src/ol/control/scalelinecontrol.js @@ -77,9 +77,9 @@ ol.control.ScaleLine = function(opt_options) { /** * @private - * @type {?olx.View2DState} + * @type {?olx.ViewState} */ - this.view2DState_ = null; + this.viewState_ = null; /** * @private @@ -156,9 +156,9 @@ goog.exportProperty( ol.control.ScaleLine.prototype.handleMapPostrender = function(mapEvent) { var frameState = mapEvent.frameState; if (goog.isNull(frameState)) { - this.view2DState_ = null; + this.viewState_ = null; } else { - this.view2DState_ = frameState.view2DState; + this.viewState_ = frameState.viewState; } this.updateElement_(); }; @@ -190,9 +190,9 @@ goog.exportProperty( * @private */ ol.control.ScaleLine.prototype.updateElement_ = function() { - var view2DState = this.view2DState_; + var viewState = this.viewState_; - if (goog.isNull(view2DState)) { + if (goog.isNull(viewState)) { if (this.renderedVisible_) { goog.style.setElementShown(this.element_, false); this.renderedVisible_ = false; @@ -200,10 +200,10 @@ ol.control.ScaleLine.prototype.updateElement_ = function() { return; } - var center = view2DState.center; - var projection = view2DState.projection; + var center = viewState.center; + var projection = viewState.projection; var pointResolution = - projection.getPointResolution(view2DState.resolution, center); + projection.getPointResolution(viewState.resolution, center); var projectionUnits = projection.getUnits(); var cosLatitude; diff --git a/src/ol/control/zoomcontrol.js b/src/ol/control/zoomcontrol.js index 4e6ae80364..fcc90a5acb 100644 --- a/src/ol/control/zoomcontrol.js +++ b/src/ol/control/zoomcontrol.js @@ -1,5 +1,3 @@ -// FIXME works for View2D only - goog.provide('ol.control.Zoom'); goog.require('goog.asserts'); @@ -7,7 +5,6 @@ goog.require('goog.dom'); goog.require('goog.dom.TagName'); goog.require('goog.events'); goog.require('goog.events.EventType'); -goog.require('ol.View2D'); goog.require('ol.animation'); goog.require('ol.control.Control'); goog.require('ol.css'); @@ -143,12 +140,8 @@ ol.control.Zoom.prototype.handlePointerUp_ = function(delta, pointerEvent) { */ ol.control.Zoom.prototype.zoomByDelta_ = function(delta) { var map = this.getMap(); - // FIXME works for View2D only var view = map.getView(); - goog.asserts.assert(goog.isDef(view)); - var view2D = view.getView2D(); - goog.asserts.assertInstanceof(view2D, ol.View2D); - var currentResolution = view2D.getResolution(); + var currentResolution = view.getResolution(); if (goog.isDef(currentResolution)) { if (this.duration_ > 0) { map.beforeRender(ol.animation.zoom({ @@ -157,7 +150,7 @@ ol.control.Zoom.prototype.zoomByDelta_ = function(delta) { easing: ol.easing.easeOut })); } - var newResolution = view2D.constrainResolution(currentResolution, delta); - view2D.setResolution(newResolution); + var newResolution = view.constrainResolution(currentResolution, delta); + view.setResolution(newResolution); } }; diff --git a/src/ol/control/zoomslidercontrol.js b/src/ol/control/zoomslidercontrol.js index 76a41113bf..9979568a29 100644 --- a/src/ol/control/zoomslidercontrol.js +++ b/src/ol/control/zoomslidercontrol.js @@ -1,4 +1,3 @@ -// FIXME works for View2D only // FIXME should possibly show tooltip when dragging? goog.provide('ol.control.ZoomSlider'); @@ -159,11 +158,11 @@ ol.control.ZoomSlider.prototype.handleMapPostrender = function(mapEvent) { return; } goog.asserts.assert( - goog.isDefAndNotNull(mapEvent.frameState.view2DState)); + goog.isDefAndNotNull(mapEvent.frameState.viewState)); if (!this.sliderInitialized_) { this.initSlider_(); } - var res = mapEvent.frameState.view2DState.resolution; + var res = mapEvent.frameState.viewState.resolution; if (res !== this.currentResolution_) { this.currentResolution_ = res; this.positionThumbForResolution_(res); @@ -177,7 +176,7 @@ ol.control.ZoomSlider.prototype.handleMapPostrender = function(mapEvent) { */ ol.control.ZoomSlider.prototype.handleContainerClick_ = function(browserEvent) { var map = this.getMap(); - var view = map.getView().getView2D(); + var view = map.getView(); var resolution; var amountDragged = this.amountDragged_(browserEvent.offsetX, browserEvent.offsetY); @@ -246,7 +245,7 @@ ol.control.ZoomSlider.prototype.amountDragged_ = function(x, y) { ol.control.ZoomSlider.prototype.resolutionForAmount_ = function(amount) { // FIXME do we really need this affine transform? amount = (goog.math.clamp(amount, 0, 1) - 1) * -1; - var fn = this.getMap().getView().getView2D().getResolutionForValueFunction(); + var fn = this.getMap().getView().getResolutionForValueFunction(); return fn(amount); }; @@ -260,7 +259,7 @@ ol.control.ZoomSlider.prototype.resolutionForAmount_ = function(amount) { * @private */ ol.control.ZoomSlider.prototype.amountForResolution_ = function(res) { - var fn = this.getMap().getView().getView2D().getValueForResolutionFunction(); + var fn = this.getMap().getView().getValueForResolutionFunction(); var value = fn(res); // FIXME do we really need this affine transform? return (value - 1) * -1; @@ -277,7 +276,7 @@ ol.control.ZoomSlider.prototype.amountForResolution_ = function(res) { */ ol.control.ZoomSlider.prototype.handleSliderChange_ = function(e) { var map = this.getMap(); - var view = map.getView().getView2D(); + var view = map.getView(); var resolution; if (e.type === goog.fx.Dragger.EventType.DRAG) { var amountDragged = this.amountDragged_(e.left, e.top); diff --git a/src/ol/control/zoomtoextentcontrol.js b/src/ol/control/zoomtoextentcontrol.js index 8c992e985b..433224880a 100644 --- a/src/ol/control/zoomtoextentcontrol.js +++ b/src/ol/control/zoomtoextentcontrol.js @@ -1,5 +1,3 @@ -// FIXME works for View2D only - goog.provide('ol.control.ZoomToExtent'); goog.require('goog.asserts'); @@ -99,9 +97,9 @@ ol.control.ZoomToExtent.prototype.handlePointerUp_ = function(pointerEvent) { ol.control.ZoomToExtent.prototype.handleZoomToExtent_ = function() { var map = this.getMap(); var view = map.getView(); - goog.asserts.assert(goog.isDef(view)); - var view2D = view.getView2D(); var extent = goog.isNull(this.extent_) ? - view2D.getProjection().getExtent() : this.extent_; - view2D.fitExtent(extent, map.getSize()); + view.getProjection().getExtent() : this.extent_; + var size = map.getSize(); + goog.asserts.assert(goog.isDef(size)); + view.fitExtent(extent, size); }; diff --git a/src/ol/extent.js b/src/ol/extent.js index 2e666cf201..57b6a86ae2 100644 --- a/src/ol/extent.js +++ b/src/ol/extent.js @@ -474,7 +474,7 @@ ol.extent.getEnlargedArea = function(extent1, extent2) { * @param {ol.Extent=} opt_extent Destination extent. * @return {ol.Extent} Extent. */ -ol.extent.getForView2DAndSize = +ol.extent.getForViewAndSize = function(center, resolution, rotation, size, opt_extent) { var dx = resolution * size[0] / 2; var dy = resolution * size[1] / 2; diff --git a/src/ol/featureoverlay.js b/src/ol/featureoverlay.js index b9db01bb52..f0f7e4a76e 100644 --- a/src/ol/featureoverlay.js +++ b/src/ol/featureoverlay.js @@ -176,7 +176,7 @@ ol.FeatureOverlay.prototype.handleMapPostCompose_ = function(event) { goog.asserts.assert(goog.isDef(replayGroup)); var frameState = event.frameState; var pixelRatio = frameState.pixelRatio; - var resolution = frameState.view2DState.resolution; + var resolution = frameState.viewState.resolution; var i, ii, styles; this.features_.forEach(function(feature) { styles = styleFunction(feature, resolution); diff --git a/src/ol/framestate.js b/src/ol/framestate.js index 5692caaa38..488a02f397 100644 --- a/src/ol/framestate.js +++ b/src/ol/framestate.js @@ -1,4 +1,3 @@ -// FIXME add view3DState // FIXME factor out common code between usedTiles and wantedTiles goog.provide('ol.PostRenderFunction'); diff --git a/src/ol/interaction/doubleclickzoominteraction.js b/src/ol/interaction/doubleclickzoominteraction.js index 57d94a62c4..71873eb81f 100644 --- a/src/ol/interaction/doubleclickzoominteraction.js +++ b/src/ol/interaction/doubleclickzoominteraction.js @@ -1,5 +1,3 @@ -// FIXME works for View2D only - goog.provide('ol.interaction.DoubleClickZoom'); goog.require('goog.asserts'); @@ -51,8 +49,8 @@ ol.interaction.DoubleClickZoom.prototype.handleMapBrowserEvent = var map = mapBrowserEvent.map; var anchor = mapBrowserEvent.coordinate; var delta = browserEvent.shiftKey ? -this.delta_ : this.delta_; - // FIXME works for View2D only - var view = map.getView().getView2D(); + var view = map.getView(); + goog.asserts.assert(goog.isDef(view)); ol.interaction.Interaction.zoomByDelta( map, view, delta, anchor, this.duration_); mapBrowserEvent.preventDefault(); diff --git a/src/ol/interaction/draganddropinteraction.js b/src/ol/interaction/draganddropinteraction.js index 9dc0d5faf1..5b7c99768c 100644 --- a/src/ol/interaction/draganddropinteraction.js +++ b/src/ol/interaction/draganddropinteraction.js @@ -101,7 +101,7 @@ ol.interaction.DragAndDrop.prototype.handleResult_ = function(file, result) { if (goog.isNull(projection)) { var view = map.getView(); goog.asserts.assert(goog.isDef(view)); - projection = view.getView2D().getProjection(); + projection = view.getProjection(); goog.asserts.assert(goog.isDef(projection)); } var formatConstructors = this.formatConstructors_; diff --git a/src/ol/interaction/dragboxinteraction.js b/src/ol/interaction/dragboxinteraction.js index cea9b873e4..606a7392f7 100644 --- a/src/ol/interaction/dragboxinteraction.js +++ b/src/ol/interaction/dragboxinteraction.js @@ -1,6 +1,4 @@ // FIXME draw drag box -// FIXME works for View2D only - goog.provide('ol.DragBoxEvent'); goog.provide('ol.interaction.DragBox'); diff --git a/src/ol/interaction/dragpaninteraction.js b/src/ol/interaction/dragpaninteraction.js index 962089f8be..c1fac6f946 100644 --- a/src/ol/interaction/dragpaninteraction.js +++ b/src/ol/interaction/dragpaninteraction.js @@ -1,11 +1,9 @@ -// FIXME works for View2D only goog.provide('ol.interaction.DragPan'); goog.require('goog.asserts'); goog.require('ol.Kinetic'); goog.require('ol.Pixel'); goog.require('ol.PreRenderFunction'); -goog.require('ol.View2D'); goog.require('ol.ViewHint'); goog.require('ol.coordinate'); goog.require('ol.events.condition'); @@ -76,16 +74,15 @@ ol.interaction.DragPan.prototype.handlePointerDrag = function(mapBrowserEvent) { var deltaX = this.lastCentroid[0] - centroid[0]; var deltaY = centroid[1] - this.lastCentroid[1]; var map = mapBrowserEvent.map; - var view2D = map.getView().getView2D(); - goog.asserts.assertInstanceof(view2D, ol.View2D); - var view2DState = view2D.getView2DState(); + var view = map.getView(); + var viewState = view.getState(); var center = [deltaX, deltaY]; - ol.coordinate.scale(center, view2DState.resolution); - ol.coordinate.rotate(center, view2DState.rotation); - ol.coordinate.add(center, view2DState.center); - center = view2D.constrainCenter(center); + ol.coordinate.scale(center, viewState.resolution); + ol.coordinate.rotate(center, viewState.rotation); + ol.coordinate.add(center, viewState.center); + center = view.constrainCenter(center); map.render(); - view2D.setCenter(center); + view.setCenter(center); } this.lastCentroid = centroid; }; @@ -97,13 +94,12 @@ ol.interaction.DragPan.prototype.handlePointerDrag = function(mapBrowserEvent) { ol.interaction.DragPan.prototype.handlePointerUp = function(mapBrowserEvent) { var map = mapBrowserEvent.map; - var view2D = map.getView().getView2D(); - goog.asserts.assertInstanceof(view2D, ol.View2D); + var view = map.getView(); if (this.targetPointers.length === 0) { if (!this.noKinetic_ && this.kinetic_ && this.kinetic_.end()) { var distance = this.kinetic_.getDistance(); var angle = this.kinetic_.getAngle(); - var center = view2D.getCenter(); + var center = view.getCenter(); goog.asserts.assert(goog.isDef(center)); this.kineticPreRenderFn_ = this.kinetic_.pan(center); map.beforeRender(this.kineticPreRenderFn_); @@ -112,10 +108,10 @@ ol.interaction.DragPan.prototype.handlePointerUp = centerpx[0] - distance * Math.cos(angle), centerpx[1] - distance * Math.sin(angle) ]); - dest = view2D.constrainCenter(dest); - view2D.setCenter(dest); + dest = view.constrainCenter(dest); + view.setCenter(dest); } - view2D.setHint(ol.ViewHint.INTERACTING, -1); + view.setHint(ol.ViewHint.INTERACTING, -1); map.render(); return false; } else { @@ -132,16 +128,15 @@ ol.interaction.DragPan.prototype.handlePointerDown = function(mapBrowserEvent) { if (this.targetPointers.length > 0 && this.condition_(mapBrowserEvent)) { var map = mapBrowserEvent.map; - var view2D = map.getView().getView2D(); - goog.asserts.assertInstanceof(view2D, ol.View2D); + var view = map.getView(); this.lastCentroid = null; if (!this.handlingDownUpSequence) { - view2D.setHint(ol.ViewHint.INTERACTING, 1); + view.setHint(ol.ViewHint.INTERACTING, 1); } map.render(); if (!goog.isNull(this.kineticPreRenderFn_) && map.removePreRenderFunction(this.kineticPreRenderFn_)) { - view2D.setCenter(mapBrowserEvent.frameState.view2DState.center); + view.setCenter(mapBrowserEvent.frameState.viewState.center); this.kineticPreRenderFn_ = null; } if (this.kinetic_) { diff --git a/src/ol/interaction/dragrotateandzoominteraction.js b/src/ol/interaction/dragrotateandzoominteraction.js index 1ab91ee565..b63dfcd249 100644 --- a/src/ol/interaction/dragrotateandzoominteraction.js +++ b/src/ol/interaction/dragrotateandzoominteraction.js @@ -1,5 +1,3 @@ -// FIXME works for View2D only - goog.provide('ol.interaction.DragRotateAndZoom'); goog.require('goog.asserts'); @@ -82,18 +80,17 @@ ol.interaction.DragRotateAndZoom.prototype.handlePointerDrag = size[1] / 2 - offset[1]); var theta = Math.atan2(delta.y, delta.x); var magnitude = delta.magnitude(); - // FIXME works for View2D only - var view = map.getView().getView2D(); - var view2DState = view.getView2DState(); + var view = map.getView(); + var viewState = view.getState(); map.render(); if (goog.isDef(this.lastAngle_)) { var angleDelta = theta - this.lastAngle_; ol.interaction.Interaction.rotateWithoutConstraints( - map, view, view2DState.rotation - angleDelta); + map, view, viewState.rotation - angleDelta); } this.lastAngle_ = theta; if (goog.isDef(this.lastMagnitude_)) { - var resolution = this.lastMagnitude_ * (view2DState.resolution / magnitude); + var resolution = this.lastMagnitude_ * (viewState.resolution / magnitude); ol.interaction.Interaction.zoomWithoutConstraints(map, view, resolution); } if (goog.isDef(this.lastMagnitude_)) { @@ -113,14 +110,12 @@ ol.interaction.DragRotateAndZoom.prototype.handlePointerUp = } var map = mapBrowserEvent.map; - // FIXME works for View2D only var view = map.getView(); view.setHint(ol.ViewHint.INTERACTING, -1); - var view2D = view.getView2D(); - var view2DState = view2D.getView2DState(); + var viewState = view.getState(); var direction = this.lastScaleDelta_ - 1; - ol.interaction.Interaction.rotate(map, view2D, view2DState.rotation); - ol.interaction.Interaction.zoom(map, view2D, view2DState.resolution, + ol.interaction.Interaction.rotate(map, view, viewState.rotation); + ol.interaction.Interaction.zoom(map, view, viewState.resolution, undefined, ol.DRAGROTATEANDZOOM_ANIMATION_DURATION, direction); this.lastScaleDelta_ = 0; diff --git a/src/ol/interaction/dragrotateinteraction.js b/src/ol/interaction/dragrotateinteraction.js index e04f84bba7..357a7f4fbe 100644 --- a/src/ol/interaction/dragrotateinteraction.js +++ b/src/ol/interaction/dragrotateinteraction.js @@ -62,12 +62,11 @@ ol.interaction.DragRotate.prototype.handlePointerDrag = Math.atan2(size[1] / 2 - offset[1], offset[0] - size[0] / 2); if (goog.isDef(this.lastAngle_)) { var delta = theta - this.lastAngle_; - // FIXME works for View2D only - var view = map.getView().getView2D(); - var view2DState = view.getView2DState(); + var view = map.getView(); + var viewState = view.getState(); map.render(); ol.interaction.Interaction.rotateWithoutConstraints( - map, view, view2DState.rotation - delta); + map, view, viewState.rotation - delta); } this.lastAngle_ = theta; }; @@ -83,12 +82,10 @@ ol.interaction.DragRotate.prototype.handlePointerUp = } var map = mapBrowserEvent.map; - // FIXME works for View2D only var view = map.getView(); view.setHint(ol.ViewHint.INTERACTING, -1); - var view2D = view.getView2D(); - var view2DState = view2D.getView2DState(); - ol.interaction.Interaction.rotate(map, view2D, view2DState.rotation, + var viewState = view.getState(); + ol.interaction.Interaction.rotate(map, view, viewState.rotation, undefined, ol.DRAGROTATE_ANIMATION_DURATION); return false; }; diff --git a/src/ol/interaction/dragzoominteraction.js b/src/ol/interaction/dragzoominteraction.js index 4398d4f233..5036c3b3bf 100644 --- a/src/ol/interaction/dragzoominteraction.js +++ b/src/ol/interaction/dragzoominteraction.js @@ -52,12 +52,14 @@ goog.inherits(ol.interaction.DragZoom, ol.interaction.DragBox); * @inheritDoc */ ol.interaction.DragZoom.prototype.onBoxEnd = function() { - // FIXME works for View2D only var map = this.getMap(); - var view = map.getView().getView2D(); + var view = map.getView(); + goog.asserts.assert(goog.isDef(view)); var extent = this.getGeometry().getExtent(); var center = ol.extent.getCenter(extent); + var size = map.getSize(); + goog.asserts.assert(goog.isDef(size)); ol.interaction.Interaction.zoom(map, view, - view.getResolutionForExtent(extent, map.getSize()), + view.getResolutionForExtent(extent, size), center, ol.DRAGZOOM_ANIMATION_DURATION); }; diff --git a/src/ol/interaction/interaction.js b/src/ol/interaction/interaction.js index e028bae89c..9e5a651d76 100644 --- a/src/ol/interaction/interaction.js +++ b/src/ol/interaction/interaction.js @@ -5,7 +5,6 @@ goog.provide('ol.interaction.Interaction'); goog.require('goog.asserts'); goog.require('ol.MapBrowserEvent'); goog.require('ol.Observable'); -goog.require('ol.View2D'); goog.require('ol.animation'); goog.require('ol.easing'); @@ -69,13 +68,12 @@ ol.interaction.Interaction.prototype.setMap = function(map) { /** * @param {ol.Map} map Map. - * @param {ol.IView2D} view View. + * @param {ol.View} view View. * @param {ol.Coordinate} delta Delta. * @param {number=} opt_duration Duration. */ ol.interaction.Interaction.pan = function( map, view, delta, opt_duration) { - goog.asserts.assertInstanceof(view, ol.View2D); var currentCenter = view.getCenter(); if (goog.isDef(currentCenter)) { if (goog.isDef(opt_duration) && opt_duration > 0) { @@ -94,14 +92,13 @@ ol.interaction.Interaction.pan = function( /** * @param {ol.Map} map Map. - * @param {ol.IView2D} view View. + * @param {ol.View} view View. * @param {number|undefined} rotation Rotation. * @param {ol.Coordinate=} opt_anchor Anchor coordinate. * @param {number=} opt_duration Duration. */ ol.interaction.Interaction.rotate = function(map, view, rotation, opt_anchor, opt_duration) { - goog.asserts.assertInstanceof(view, ol.View2D); rotation = view.constrainRotation(rotation, 0); ol.interaction.Interaction.rotateWithoutConstraints( map, view, rotation, opt_anchor, opt_duration); @@ -110,14 +107,13 @@ ol.interaction.Interaction.rotate = /** * @param {ol.Map} map Map. - * @param {ol.IView2D} view View. + * @param {ol.View} view View. * @param {number|undefined} rotation Rotation. * @param {ol.Coordinate=} opt_anchor Anchor coordinate. * @param {number=} opt_duration Duration. */ ol.interaction.Interaction.rotateWithoutConstraints = function(map, view, rotation, opt_anchor, opt_duration) { - goog.asserts.assertInstanceof(view, ol.View2D); if (goog.isDefAndNotNull(rotation)) { var currentRotation = view.getRotation(); var currentCenter = view.getCenter(); @@ -136,7 +132,6 @@ ol.interaction.Interaction.rotateWithoutConstraints = })); } } - goog.asserts.assertInstanceof(view, ol.View2D); view.rotate(rotation, opt_anchor); } }; @@ -144,7 +139,7 @@ ol.interaction.Interaction.rotateWithoutConstraints = /** * @param {ol.Map} map Map. - * @param {ol.IView2D} view View. + * @param {ol.View} view View. * @param {number|undefined} resolution Resolution to go to. * @param {ol.Coordinate=} opt_anchor Anchor coordinate. * @param {number=} opt_duration Duration. @@ -159,7 +154,6 @@ ol.interaction.Interaction.rotateWithoutConstraints = */ ol.interaction.Interaction.zoom = function(map, view, resolution, opt_anchor, opt_duration, opt_direction) { - goog.asserts.assertInstanceof(view, ol.View2D); resolution = view.constrainResolution(resolution, 0, opt_direction); ol.interaction.Interaction.zoomWithoutConstraints( map, view, resolution, opt_anchor, opt_duration); @@ -168,14 +162,13 @@ ol.interaction.Interaction.zoom = /** * @param {ol.Map} map Map. - * @param {ol.IView2D} view View. + * @param {ol.View} view View. * @param {number} delta Delta from previous zoom level. * @param {ol.Coordinate=} opt_anchor Anchor coordinate. * @param {number=} opt_duration Duration. */ ol.interaction.Interaction.zoomByDelta = function(map, view, delta, opt_anchor, opt_duration) { - goog.asserts.assertInstanceof(view, ol.View2D); var currentResolution = view.getResolution(); var resolution = view.constrainResolution(currentResolution, delta, 0); ol.interaction.Interaction.zoomWithoutConstraints( @@ -185,14 +178,13 @@ ol.interaction.Interaction.zoomByDelta = /** * @param {ol.Map} map Map. - * @param {ol.IView2D} view View. + * @param {ol.View} view View. * @param {number|undefined} resolution Resolution to go to. * @param {ol.Coordinate=} opt_anchor Anchor coordinate. * @param {number=} opt_duration Duration. */ ol.interaction.Interaction.zoomWithoutConstraints = function(map, view, resolution, opt_anchor, opt_duration) { - goog.asserts.assertInstanceof(view, ol.View2D); if (goog.isDefAndNotNull(resolution)) { var currentResolution = view.getResolution(); var currentCenter = view.getCenter(); @@ -211,7 +203,6 @@ ol.interaction.Interaction.zoomWithoutConstraints = })); } } - goog.asserts.assertInstanceof(view, ol.View2D); if (goog.isDefAndNotNull(opt_anchor)) { var center = view.calculateCenterZoom(resolution, opt_anchor); view.setCenter(center); diff --git a/src/ol/interaction/keyboardpaninteraction.js b/src/ol/interaction/keyboardpaninteraction.js index 6505d07b1a..e3463ccae0 100644 --- a/src/ol/interaction/keyboardpaninteraction.js +++ b/src/ol/interaction/keyboardpaninteraction.js @@ -1,5 +1,3 @@ -// FIXME works for View2D only - goog.provide('ol.interaction.KeyboardPan'); goog.require('goog.asserts'); @@ -7,7 +5,6 @@ goog.require('goog.events.KeyCodes'); goog.require('goog.events.KeyHandler.EventType'); goog.require('goog.functions'); goog.require('ol'); -goog.require('ol.View2D'); goog.require('ol.coordinate'); goog.require('ol.events.ConditionType'); goog.require('ol.events.condition'); @@ -72,11 +69,10 @@ ol.interaction.KeyboardPan.prototype.handleMapBrowserEvent = keyCode == goog.events.KeyCodes.RIGHT || keyCode == goog.events.KeyCodes.UP)) { var map = mapBrowserEvent.map; - // FIXME works for View2D only var view = map.getView(); - goog.asserts.assertInstanceof(view, ol.View2D); - var view2DState = view.getView2DState(); - var mapUnitsDelta = view2DState.resolution * this.pixelDelta_; + goog.asserts.assert(goog.isDef(view)); + var viewState = view.getState(); + var mapUnitsDelta = viewState.resolution * this.pixelDelta_; var deltaX = 0, deltaY = 0; if (keyCode == goog.events.KeyCodes.DOWN) { deltaY = -mapUnitsDelta; @@ -88,7 +84,7 @@ ol.interaction.KeyboardPan.prototype.handleMapBrowserEvent = deltaY = mapUnitsDelta; } var delta = [deltaX, deltaY]; - ol.coordinate.rotate(delta, view2DState.rotation); + ol.coordinate.rotate(delta, viewState.rotation); ol.interaction.Interaction.pan( map, view, delta, ol.KEYBOARD_PAN_DURATION); mapBrowserEvent.preventDefault(); diff --git a/src/ol/interaction/keyboardzoominteraction.js b/src/ol/interaction/keyboardzoominteraction.js index 1904917e98..02249d45f4 100644 --- a/src/ol/interaction/keyboardzoominteraction.js +++ b/src/ol/interaction/keyboardzoominteraction.js @@ -1,5 +1,3 @@ -// FIXME works for View2D only - goog.provide('ol.interaction.KeyboardZoom'); goog.require('goog.asserts'); @@ -71,8 +69,8 @@ ol.interaction.KeyboardZoom.prototype.handleMapBrowserEvent = var map = mapBrowserEvent.map; var delta = (charCode == '+'.charCodeAt(0)) ? this.delta_ : -this.delta_; map.render(); - // FIXME works for View2D only - var view = map.getView().getView2D(); + var view = map.getView(); + goog.asserts.assert(goog.isDef(view)); ol.interaction.Interaction.zoomByDelta( map, view, delta, undefined, this.duration_); mapBrowserEvent.preventDefault(); diff --git a/src/ol/interaction/mousewheelzoominteraction.js b/src/ol/interaction/mousewheelzoominteraction.js index 631a6f4e25..1b382a44f7 100644 --- a/src/ol/interaction/mousewheelzoominteraction.js +++ b/src/ol/interaction/mousewheelzoominteraction.js @@ -1,5 +1,3 @@ -// FIXME works for View2D only - goog.provide('ol.interaction.MouseWheelZoom'); goog.require('goog.asserts'); @@ -102,8 +100,8 @@ ol.interaction.MouseWheelZoom.prototype.doZoom_ = function(map) { var maxDelta = ol.MOUSEWHEELZOOM_MAXDELTA; var delta = goog.math.clamp(this.delta_, -maxDelta, maxDelta); - // FIXME works for View2D only - var view = map.getView().getView2D(); + var view = map.getView(); + goog.asserts.assert(goog.isDef(view)); map.render(); ol.interaction.Interaction.zoomByDelta(map, view, -delta, this.lastAnchor_, diff --git a/src/ol/interaction/pinchrotateinteraction.js b/src/ol/interaction/pinchrotateinteraction.js index 7fcb20795f..88dc03d0a4 100644 --- a/src/ol/interaction/pinchrotateinteraction.js +++ b/src/ol/interaction/pinchrotateinteraction.js @@ -1,5 +1,3 @@ -// FIXME works for View2D only - goog.provide('ol.interaction.PinchRotate'); goog.require('goog.asserts'); @@ -103,12 +101,11 @@ ol.interaction.PinchRotate.prototype.handlePointerDrag = // rotate if (this.rotating_) { - // FIXME works for View2D only - var view = map.getView().getView2D(); - var view2DState = view.getView2DState(); + var view = map.getView(); + var viewState = view.getState(); map.render(); ol.interaction.Interaction.rotateWithoutConstraints(map, view, - view2DState.rotation + rotationDelta, this.anchor_); + viewState.rotation + rotationDelta, this.anchor_); } }; @@ -123,11 +120,9 @@ ol.interaction.PinchRotate.prototype.handlePointerUp = var view = map.getView(); view.setHint(ol.ViewHint.INTERACTING, -1); if (this.rotating_) { - // FIXME works for View2D only - var view2D = view.getView2D(); - var view2DState = view2D.getView2DState(); + var viewState = view.getState(); ol.interaction.Interaction.rotate( - map, view2D, view2DState.rotation, this.anchor_, + map, view, viewState.rotation, this.anchor_, ol.ROTATE_ANIMATION_DURATION); } return false; diff --git a/src/ol/interaction/pinchzoominteraction.js b/src/ol/interaction/pinchzoominteraction.js index 52a86ec127..5ae963214e 100644 --- a/src/ol/interaction/pinchzoominteraction.js +++ b/src/ol/interaction/pinchzoominteraction.js @@ -1,5 +1,3 @@ -// FIXME works for View2D only - goog.provide('ol.interaction.PinchZoom'); goog.require('goog.asserts'); @@ -80,9 +78,8 @@ ol.interaction.PinchZoom.prototype.handlePointerDrag = } var map = mapBrowserEvent.map; - // FIXME works for View2D only - var view = map.getView().getView2D(); - var view2DState = view.getView2DState(); + var view = map.getView(); + var viewState = view.getState(); // scale anchor point. var viewportPosition = goog.style.getClientPosition(map.getViewport()); @@ -95,7 +92,7 @@ ol.interaction.PinchZoom.prototype.handlePointerDrag = // scale, bypass the resolution constraint map.render(); ol.interaction.Interaction.zoomWithoutConstraints( - map, view, view2DState.resolution * scaleDelta, this.anchor_); + map, view, viewState.resolution * scaleDelta, this.anchor_); }; @@ -109,14 +106,12 @@ ol.interaction.PinchZoom.prototype.handlePointerUp = var map = mapBrowserEvent.map; var view = map.getView(); view.setHint(ol.ViewHint.INTERACTING, -1); - // FIXME works for View2D only - var view2D = view.getView2D(); - var view2DState = view2D.getView2DState(); + var viewState = view.getState(); // Zoom to final resolution, with an animation, and provide a // direction not to zoom out/in if user was pinching in/out. // Direction is > 0 if pinching out, and < 0 if pinching in. var direction = this.lastScaleDelta_ - 1; - ol.interaction.Interaction.zoom(map, view2D, view2DState.resolution, + ol.interaction.Interaction.zoom(map, view, viewState.resolution, this.anchor_, this.duration_, direction); return false; } else { diff --git a/src/ol/iview.js b/src/ol/iview.js deleted file mode 100644 index bc04b93d6b..0000000000 --- a/src/ol/iview.js +++ /dev/null @@ -1,35 +0,0 @@ -goog.provide('ol.IView'); - -goog.require('ol.IView2D'); -goog.require('ol.IView3D'); - - - -/** - * Interface for views. - * @interface - * @extends {goog.events.Listenable} - */ -ol.IView = function() { -}; - - -/** - * @return {ol.IView2D} View2D. - */ -ol.IView.prototype.getView2D = function() { -}; - - -/** - * @return {ol.IView3D} View3D. - */ -ol.IView.prototype.getView3D = function() { -}; - - -/** - * @return {boolean} Is defined. - */ -ol.IView.prototype.isDef = function() { -}; diff --git a/src/ol/iview2d.js b/src/ol/iview2d.js deleted file mode 100644 index 50ad5aa1cf..0000000000 --- a/src/ol/iview2d.js +++ /dev/null @@ -1,54 +0,0 @@ -goog.provide('ol.IView2D'); - -goog.require('ol.Coordinate'); - - - -/** - * Interface for views. - * @interface - */ -ol.IView2D = function() { -}; - - -/** - * @return {ol.Coordinate|undefined} The center of the view. - */ -ol.IView2D.prototype.getCenter = function() { -}; - - -/** - * @return {ol.proj.Projection|undefined} The projection of the view. - */ -ol.IView2D.prototype.getProjection = function() { -}; - - -/** - * @return {number|undefined} The resolution of the view. - */ -ol.IView2D.prototype.getResolution = function() { -}; - - -/** - * @return {number|undefined} The rotation of the view. - */ -ol.IView2D.prototype.getRotation = function() { -}; - - -/** - * @return {olx.View2DState} View2D state. - */ -ol.IView2D.prototype.getView2DState = function() { -}; - - -/** - * @return {boolean} Is defined. - */ -ol.IView2D.prototype.isDef = function() { -}; diff --git a/src/ol/iview3d.js b/src/ol/iview3d.js deleted file mode 100644 index b54f7d7e42..0000000000 --- a/src/ol/iview3d.js +++ /dev/null @@ -1,17 +0,0 @@ -goog.provide('ol.IView3D'); - - - -/** - * Interface for views. - * @interface - */ -ol.IView3D = function() { -}; - - -/** - * @return {boolean} Is defined. - */ -ol.IView3D.prototype.isDef = function() { -}; diff --git a/src/ol/map.js b/src/ol/map.js index 07aedc3fd4..b611cf3e65 100644 --- a/src/ol/map.js +++ b/src/ol/map.js @@ -30,7 +30,6 @@ goog.require('goog.vec.Mat4'); goog.require('ol.BrowserFeature'); goog.require('ol.Collection'); goog.require('ol.CollectionEventType'); -goog.require('ol.IView'); goog.require('ol.MapBrowserEvent'); goog.require('ol.MapBrowserEvent.EventType'); goog.require('ol.MapBrowserEventHandler'); @@ -47,7 +46,6 @@ goog.require('ol.Size'); goog.require('ol.Tile'); goog.require('ol.TileQueue'); goog.require('ol.View'); -goog.require('ol.View2D'); goog.require('ol.ViewHint'); goog.require('ol.control'); goog.require('ol.extent'); @@ -127,7 +125,7 @@ ol.MapProperty = { * needs a view, one or more layers, and a target container: * * var map = new ol.Map({ - * view: new ol.View2D({ + * view: new ol.View({ * center: [0, 0], * zoom: 1 * }), @@ -748,14 +746,14 @@ goog.exportProperty( /** - * Get the view associated with this map. This can be a 2D or 3D view. A 2D - * view manages properties such as center and resolution. - * @return {ol.IView|undefined} The view that controls this map. + * Get the view associated with this map. A view manages properties such as + * center and resolution. + * @return {ol.View|undefined} The view that controls this map. * @todo observable * @todo api stable */ ol.Map.prototype.getView = function() { - return /** @type {ol.IView} */ (this.get(ol.MapProperty.VIEW)); + return /** @type {ol.View} */ (this.get(ol.MapProperty.VIEW)); }; goog.exportProperty( ol.Map.prototype, @@ -1166,7 +1164,7 @@ ol.Map.prototype.removeOverlay = function(overlay) { */ ol.Map.prototype.renderFrame_ = function(time) { - var i, ii, view2DState; + var i, ii, viewState; /** * Check whether a size has non-zero width and height. Note that this @@ -1184,24 +1182,23 @@ ol.Map.prototype.renderFrame_ = function(time) { var size = this.getSize(); var view = this.getView(); - var view2D = goog.isDef(view) ? this.getView().getView2D() : undefined; /** @type {?olx.FrameState} */ var frameState = null; if (goog.isDef(size) && hasArea(size) && - goog.isDef(view2D) && view2D.isDef()) { + goog.isDef(view) && view.isDef()) { var viewHints = view.getHints(); var layerStatesArray = this.getLayerGroup().getLayerStatesArray(); var layerStates = {}; for (i = 0, ii = layerStatesArray.length; i < ii; ++i) { layerStates[goog.getUid(layerStatesArray[i].layer)] = layerStatesArray[i]; } - view2DState = view2D.getView2DState(); + viewState = view.getState(); frameState = /** @type {olx.FrameState} */ ({ animate: false, attributions: {}, coordinateToPixelMatrix: this.coordinateToPixelMatrix_, extent: null, - focus: goog.isNull(this.focus_) ? view2DState.center : this.focus_, + focus: goog.isNull(this.focus_) ? viewState.center : this.focus_, index: this.frameIndex_++, layerStates: layerStates, layerStatesArray: layerStatesArray, @@ -1214,7 +1211,7 @@ ol.Map.prototype.renderFrame_ = function(time) { tileQueue: this.tileQueue_, time: time, usedTiles: {}, - view2DState: view2DState, + viewState: viewState, viewHints: viewHints, wantedTiles: {} }); @@ -1234,9 +1231,8 @@ ol.Map.prototype.renderFrame_ = function(time) { preRenderFunctions.length = n; if (!goog.isNull(frameState)) { - // FIXME works for View2D only - frameState.extent = ol.extent.getForView2DAndSize(view2DState.center, - view2DState.resolution, view2DState.rotation, frameState.size); + frameState.extent = ol.extent.getForViewAndSize(viewState.center, + viewState.resolution, viewState.rotation, frameState.size); } this.frameState_ = frameState; @@ -1319,7 +1315,7 @@ goog.exportProperty( /** * Set the view for this map. - * @param {ol.IView} view The view that controls this map. + * @param {ol.View} view The view that controls this map. * @todo observable * @todo api stable */ @@ -1421,7 +1417,7 @@ ol.Map.createOptionsInternal = function(options) { values[ol.MapProperty.TARGET] = options.target; values[ol.MapProperty.VIEW] = goog.isDef(options.view) ? - options.view : new ol.View2D(); + options.view : new ol.View(); /** * @type {function(new: ol.renderer.Map, Element, ol.Map)} diff --git a/src/ol/renderer/canvas/canvasimagelayerrenderer.js b/src/ol/renderer/canvas/canvasimagelayerrenderer.js index 26da9bb50e..706a64b3eb 100644 --- a/src/ol/renderer/canvas/canvasimagelayerrenderer.js +++ b/src/ol/renderer/canvas/canvasimagelayerrenderer.js @@ -50,8 +50,8 @@ ol.renderer.canvas.ImageLayer.prototype.forEachFeatureAtPixel = var source = layer.getSource(); goog.asserts.assertInstanceof(source, ol.source.Image); var extent = frameState.extent; - var resolution = frameState.view2DState.resolution; - var rotation = frameState.view2DState.rotation; + var resolution = frameState.viewState.resolution; + var rotation = frameState.viewState.rotation; var skippedFeatureUids = frameState.skippedFeatureUids_; return source.forEachFeatureAtPixel( extent, resolution, rotation, coordinate, skippedFeatureUids, @@ -89,10 +89,10 @@ ol.renderer.canvas.ImageLayer.prototype.prepareFrame = function(frameState, layerState) { var pixelRatio = frameState.pixelRatio; - var view2DState = frameState.view2DState; - var viewCenter = view2DState.center; - var viewResolution = view2DState.resolution; - var viewRotation = view2DState.rotation; + var viewState = frameState.viewState; + var viewCenter = viewState.center; + var viewResolution = viewState.resolution; + var viewRotation = viewState.rotation; var image; var imageLayer = this.getLayer(); @@ -104,7 +104,7 @@ ol.renderer.canvas.ImageLayer.prototype.prepareFrame = if (!hints[ol.ViewHint.ANIMATING] && !hints[ol.ViewHint.INTERACTING]) { image = imageSource.getImage( - frameState.extent, viewResolution, pixelRatio, view2DState.projection); + frameState.extent, viewResolution, pixelRatio, viewState.projection); if (!goog.isNull(image)) { var imageState = image.getState(); if (imageState == ol.ImageState.IDLE) { diff --git a/src/ol/renderer/canvas/canvaslayerrenderer.js b/src/ol/renderer/canvas/canvaslayerrenderer.js index 2732f5a1a0..92c59a934a 100644 --- a/src/ol/renderer/canvas/canvaslayerrenderer.js +++ b/src/ol/renderer/canvas/canvaslayerrenderer.js @@ -49,7 +49,7 @@ ol.renderer.canvas.Layer.prototype.composeFrame = // for performance reasons, context.setTransform is only used // when the view is rotated. see http://jsperf.com/canvas-transform - if (frameState.view2DState.rotation === 0) { + if (frameState.viewState.rotation === 0) { var dx = goog.vec.Mat4.getElement(imageTransform, 0, 3); var dy = goog.vec.Mat4.getElement(imageTransform, 1, 3); var dw = image.width * goog.vec.Mat4.getElement(imageTransform, 0, 0); @@ -89,7 +89,7 @@ ol.renderer.canvas.Layer.prototype.dispatchComposeEvent_ = opt_transform : this.getTransform(frameState); var render = new ol.render.canvas.Immediate( context, frameState.pixelRatio, frameState.extent, transform, - frameState.view2DState.rotation); + frameState.viewState.rotation); var composeEvent = new ol.render.Event(type, layer, render, null, frameState, context, null); layer.dispatchEvent(composeEvent); @@ -155,15 +155,15 @@ ol.renderer.canvas.Layer.prototype.getImageTransform = goog.abstractMethod; * @return {!goog.vec.Mat4.Number} Transform. */ ol.renderer.canvas.Layer.prototype.getTransform = function(frameState) { - var view2DState = frameState.view2DState; + var viewState = frameState.viewState; var pixelRatio = frameState.pixelRatio; return ol.vec.Mat4.makeTransform2D(this.transform_, pixelRatio * frameState.size[0] / 2, pixelRatio * frameState.size[1] / 2, - pixelRatio / view2DState.resolution, - -pixelRatio / view2DState.resolution, - -view2DState.rotation, - -view2DState.center[0], -view2DState.center[1]); + pixelRatio / viewState.resolution, + -pixelRatio / viewState.resolution, + -viewState.rotation, + -viewState.center[0], -viewState.center[1]); }; diff --git a/src/ol/renderer/canvas/canvasmaprenderer.js b/src/ol/renderer/canvas/canvasmaprenderer.js index 7177e5c824..a68643fcb1 100644 --- a/src/ol/renderer/canvas/canvasmaprenderer.js +++ b/src/ol/renderer/canvas/canvasmaprenderer.js @@ -101,16 +101,16 @@ ol.renderer.canvas.Map.prototype.dispatchComposeEvent_ = if (map.hasListener(type)) { var extent = frameState.extent; var pixelRatio = frameState.pixelRatio; - var view2DState = frameState.view2DState; - var resolution = view2DState.resolution; - var rotation = view2DState.rotation; + var viewState = frameState.viewState; + var resolution = viewState.resolution; + var rotation = viewState.rotation; ol.vec.Mat4.makeTransform2D(this.transform_, this.canvas_.width / 2, this.canvas_.height / 2, - pixelRatio / view2DState.resolution, - -pixelRatio / view2DState.resolution, - -view2DState.rotation, - -view2DState.center[0], -view2DState.center[1]); + pixelRatio / viewState.resolution, + -pixelRatio / viewState.resolution, + -viewState.rotation, + -viewState.center[0], -viewState.center[1]); var vectorContext = new ol.render.canvas.Immediate(context, pixelRatio, extent, this.transform_, rotation); var replayGroup = new ol.render.canvas.ReplayGroup( @@ -177,7 +177,7 @@ ol.renderer.canvas.Map.prototype.renderFrame = function(frameState) { this.dispatchComposeEvent_(ol.render.EventType.PRECOMPOSE, frameState); var layerStatesArray = frameState.layerStatesArray; - var viewResolution = frameState.view2DState.resolution; + var viewResolution = frameState.viewState.resolution; var i, ii, layer, layerRenderer, layerState; for (i = 0, ii = layerStatesArray.length; i < ii; ++i) { layerState = layerStatesArray[i]; diff --git a/src/ol/renderer/canvas/canvastilelayerrenderer.js b/src/ol/renderer/canvas/canvastilelayerrenderer.js index 921d2fda46..0cd350e733 100644 --- a/src/ol/renderer/canvas/canvastilelayerrenderer.js +++ b/src/ol/renderer/canvas/canvastilelayerrenderer.js @@ -170,8 +170,8 @@ ol.renderer.canvas.TileLayer.prototype.prepareFrame = // var pixelRatio = frameState.pixelRatio; - var view2DState = frameState.view2DState; - var projection = view2DState.projection; + var viewState = frameState.viewState; + var projection = viewState.projection; var tileLayer = this.getLayer(); goog.asserts.assertInstanceof(tileLayer, ol.layer.Tile); @@ -179,18 +179,18 @@ ol.renderer.canvas.TileLayer.prototype.prepareFrame = goog.asserts.assertInstanceof(tileSource, ol.source.Tile); var tileGrid = tileSource.getTileGridForProjection(projection); var tileGutter = tileSource.getGutter(); - var z = tileGrid.getZForResolution(view2DState.resolution); + var z = tileGrid.getZForResolution(viewState.resolution); var tilePixelSize = tileSource.getTilePixelSize(z, frameState.pixelRatio, projection); var tilePixelRatio = tilePixelSize / tileGrid.getTileSize(z); var tileResolution = tileGrid.getResolution(z); var tilePixelResolution = tileResolution / tilePixelRatio; - var center = view2DState.center; + var center = viewState.center; var extent; - if (tileResolution == view2DState.resolution) { + if (tileResolution == viewState.resolution) { center = this.snapCenterToPixel(center, tileResolution, frameState.size); - extent = ol.extent.getForView2DAndSize( - center, tileResolution, view2DState.rotation, frameState.size); + extent = ol.extent.getForViewAndSize( + center, tileResolution, viewState.rotation, frameState.size); } else { extent = frameState.extent; } @@ -400,9 +400,9 @@ ol.renderer.canvas.TileLayer.prototype.prepareFrame = ol.vec.Mat4.makeTransform2D(this.imageTransform_, pixelRatio * frameState.size[0] / 2, pixelRatio * frameState.size[1] / 2, - pixelRatio * tilePixelResolution / view2DState.resolution, - pixelRatio * tilePixelResolution / view2DState.resolution, - view2DState.rotation, + pixelRatio * tilePixelResolution / viewState.resolution, + pixelRatio * tilePixelResolution / viewState.resolution, + viewState.rotation, (origin[0] - center[0]) / tilePixelResolution, (center[1] - origin[1]) / tilePixelResolution); diff --git a/src/ol/renderer/canvas/canvasvectorlayerrenderer.js b/src/ol/renderer/canvas/canvasvectorlayerrenderer.js index 19970bdc7f..9160be7192 100644 --- a/src/ol/renderer/canvas/canvasvectorlayerrenderer.js +++ b/src/ol/renderer/canvas/canvasvectorlayerrenderer.js @@ -97,7 +97,7 @@ ol.renderer.canvas.VectorLayer.prototype.composeFrame = replayContext.globalAlpha = layerState.opacity; replayGroup.replay( replayContext, frameState.extent, frameState.pixelRatio, transform, - frameState.view2DState.rotation, frameState.skippedFeatureUids_); + frameState.viewState.rotation, frameState.skippedFeatureUids_); if (replayContext != context) { this.dispatchRenderEvent(replayContext, frameState, transform); @@ -119,8 +119,8 @@ ol.renderer.canvas.VectorLayer.prototype.forEachFeatureAtPixel = return undefined; } else { var extent = frameState.extent; - var resolution = frameState.view2DState.resolution; - var rotation = frameState.view2DState.rotation; + var resolution = frameState.viewState.resolution; + var rotation = frameState.viewState.rotation; var layer = this.getLayer(); return this.replayGroup_.forEachGeometryAtPixel(extent, resolution, rotation, coordinate, frameState.skippedFeatureUids_, @@ -170,9 +170,9 @@ ol.renderer.canvas.VectorLayer.prototype.prepareFrame = } var frameStateExtent = frameState.extent; - var view2DState = frameState.view2DState; - var projection = view2DState.projection; - var resolution = view2DState.resolution; + var viewState = frameState.viewState; + var projection = viewState.projection; + var resolution = viewState.resolution; var pixelRatio = frameState.pixelRatio; var vectorLayerRevision = vectorLayer.getRevision(); var vectorLayerRenderOrder = vectorLayer.getRenderOrder(); diff --git a/src/ol/renderer/dom/domimagelayerrenderer.js b/src/ol/renderer/dom/domimagelayerrenderer.js index 7cacb017e2..dca23f358e 100644 --- a/src/ol/renderer/dom/domimagelayerrenderer.js +++ b/src/ol/renderer/dom/domimagelayerrenderer.js @@ -55,8 +55,8 @@ ol.renderer.dom.ImageLayer.prototype.forEachFeatureAtPixel = var source = layer.getSource(); goog.asserts.assertInstanceof(source, ol.source.Image); var extent = frameState.extent; - var resolution = frameState.view2DState.resolution; - var rotation = frameState.view2DState.rotation; + var resolution = frameState.viewState.resolution; + var rotation = frameState.viewState.rotation; var skippedFeatureUids = frameState.skippedFeatureUids_; return source.forEachFeatureAtPixel( extent, resolution, rotation, coordinate, skippedFeatureUids, @@ -76,10 +76,10 @@ ol.renderer.dom.ImageLayer.prototype.forEachFeatureAtPixel = ol.renderer.dom.ImageLayer.prototype.prepareFrame = function(frameState, layerState) { - var view2DState = frameState.view2DState; - var viewCenter = view2DState.center; - var viewResolution = view2DState.resolution; - var viewRotation = view2DState.rotation; + var viewState = frameState.viewState; + var viewCenter = viewState.center; + var viewResolution = viewState.resolution; + var viewRotation = viewState.rotation; var image = this.image_; var imageLayer = this.getLayer(); @@ -91,7 +91,7 @@ ol.renderer.dom.ImageLayer.prototype.prepareFrame = if (!hints[ol.ViewHint.ANIMATING] && !hints[ol.ViewHint.INTERACTING]) { var image_ = imageSource.getImage(frameState.extent, viewResolution, - frameState.pixelRatio, view2DState.projection); + frameState.pixelRatio, viewState.projection); if (!goog.isNull(image_)) { var imageState = image_.getState(); if (imageState == ol.ImageState.IDLE) { diff --git a/src/ol/renderer/dom/domtilelayerrenderer.js b/src/ol/renderer/dom/domtilelayerrenderer.js index f76952cbb7..bfb7be4c35 100644 --- a/src/ol/renderer/dom/domtilelayerrenderer.js +++ b/src/ol/renderer/dom/domtilelayerrenderer.js @@ -90,8 +90,8 @@ ol.renderer.dom.TileLayer.prototype.prepareFrame = } var pixelRatio = frameState.pixelRatio; - var view2DState = frameState.view2DState; - var projection = view2DState.projection; + var viewState = frameState.viewState; + var projection = viewState.projection; var tileLayer = this.getLayer(); goog.asserts.assertInstanceof(tileLayer, ol.layer.Tile); @@ -99,14 +99,14 @@ ol.renderer.dom.TileLayer.prototype.prepareFrame = goog.asserts.assertInstanceof(tileSource, ol.source.Tile); var tileGrid = tileSource.getTileGridForProjection(projection); var tileGutter = tileSource.getGutter(); - var z = tileGrid.getZForResolution(view2DState.resolution); + var z = tileGrid.getZForResolution(viewState.resolution); var tileResolution = tileGrid.getResolution(z); - var center = view2DState.center; + var center = viewState.center; var extent; - if (tileResolution == view2DState.resolution) { + if (tileResolution == viewState.resolution) { center = this.snapCenterToPixel(center, tileResolution, frameState.size); - extent = ol.extent.getForView2DAndSize( - center, tileResolution, view2DState.rotation, frameState.size); + extent = ol.extent.getForViewAndSize( + center, tileResolution, viewState.rotation, frameState.size); } else { extent = frameState.extent; } @@ -217,9 +217,9 @@ ol.renderer.dom.TileLayer.prototype.prepareFrame = origin = tileLayerZ.getOrigin(); ol.vec.Mat4.makeTransform2D(transform, frameState.size[0] / 2, frameState.size[1] / 2, - resolution / view2DState.resolution, - resolution / view2DState.resolution, - view2DState.rotation, + resolution / viewState.resolution, + resolution / viewState.resolution, + viewState.rotation, (origin[0] - center[0]) / resolution, (center[1] - origin[1]) / resolution); tileLayerZ.setTransform(transform); diff --git a/src/ol/renderer/maprenderer.js b/src/ol/renderer/maprenderer.js index d8cd7cf3a8..2cd9c5fe4b 100644 --- a/src/ol/renderer/maprenderer.js +++ b/src/ol/renderer/maprenderer.js @@ -64,14 +64,14 @@ goog.inherits(ol.renderer.Map, goog.Disposable); * @protected */ ol.renderer.Map.prototype.calculateMatrices2D = function(frameState) { - var view2DState = frameState.view2DState; + var viewState = frameState.viewState; var coordinateToPixelMatrix = frameState.coordinateToPixelMatrix; goog.asserts.assert(!goog.isNull(coordinateToPixelMatrix)); ol.vec.Mat4.makeTransform2D(coordinateToPixelMatrix, frameState.size[0] / 2, frameState.size[1] / 2, - 1 / view2DState.resolution, -1 / view2DState.resolution, - -view2DState.rotation, - -view2DState.center[0], -view2DState.center[1]); + 1 / viewState.resolution, -1 / viewState.resolution, + -viewState.rotation, + -viewState.center[0], -viewState.center[1]); var inverted = goog.vec.Mat4.invert( coordinateToPixelMatrix, frameState.pixelToCoordinateMatrix); goog.asserts.assert(inverted); @@ -118,9 +118,9 @@ ol.renderer.Map.prototype.forEachFeatureAtPixel = layerFilter, thisArg2) { var result; var extent = frameState.extent; - var view2DState = frameState.view2DState; - var viewResolution = view2DState.resolution; - var viewRotation = view2DState.rotation; + var viewState = frameState.viewState; + var viewResolution = viewState.resolution; + var viewRotation = viewState.rotation; if (!goog.isNull(this.replayGroup)) { /** @type {Object.} */ var features = {}; diff --git a/src/ol/renderer/webgl/webglimagelayerrenderer.js b/src/ol/renderer/webgl/webglimagelayerrenderer.js index cdbdba2c11..b9187754ed 100644 --- a/src/ol/renderer/webgl/webglimagelayerrenderer.js +++ b/src/ol/renderer/webgl/webglimagelayerrenderer.js @@ -81,8 +81,8 @@ ol.renderer.webgl.ImageLayer.prototype.forEachFeatureAtPixel = var source = layer.getSource(); goog.asserts.assertInstanceof(source, ol.source.Image); var extent = frameState.extent; - var resolution = frameState.view2DState.resolution; - var rotation = frameState.view2DState.rotation; + var resolution = frameState.viewState.resolution; + var rotation = frameState.viewState.rotation; var skippedFeatureUids = frameState.skippedFeatureUids_; return source.forEachFeatureAtPixel( extent, resolution, rotation, coordinate, skippedFeatureUids, @@ -105,10 +105,10 @@ ol.renderer.webgl.ImageLayer.prototype.prepareFrame = var gl = this.getWebGLMapRenderer().getGL(); - var view2DState = frameState.view2DState; - var viewCenter = view2DState.center; - var viewResolution = view2DState.resolution; - var viewRotation = view2DState.rotation; + var viewState = frameState.viewState; + var viewCenter = viewState.center; + var viewResolution = viewState.resolution; + var viewRotation = viewState.rotation; var image = this.image_; var texture = this.texture; @@ -121,7 +121,7 @@ ol.renderer.webgl.ImageLayer.prototype.prepareFrame = if (!hints[ol.ViewHint.ANIMATING] && !hints[ol.ViewHint.INTERACTING]) { var image_ = imageSource.getImage(frameState.extent, viewResolution, - frameState.pixelRatio, view2DState.projection); + frameState.pixelRatio, viewState.projection); if (!goog.isNull(image_)) { var imageState = image_.getState(); if (imageState == ol.ImageState.IDLE) { diff --git a/src/ol/renderer/webgl/webglmaprenderer.js b/src/ol/renderer/webgl/webglmaprenderer.js index ecb2c222fe..ee19053f1a 100644 --- a/src/ol/renderer/webgl/webglmaprenderer.js +++ b/src/ol/renderer/webgl/webglmaprenderer.js @@ -448,7 +448,7 @@ ol.renderer.webgl.Map.prototype.renderFrame = function(frameState) { /** @type {Array.} */ var layerStatesToDraw = []; var layerStatesArray = frameState.layerStatesArray; - var viewResolution = frameState.view2DState.resolution; + var viewResolution = frameState.viewState.resolution; var i, ii, layerState; for (i = 0, ii = layerStatesArray.length; i < ii; ++i) { layerState = layerStatesArray[i]; diff --git a/src/ol/renderer/webgl/webgltilelayerrenderer.js b/src/ol/renderer/webgl/webgltilelayerrenderer.js index de21054637..df15184175 100644 --- a/src/ol/renderer/webgl/webgltilelayerrenderer.js +++ b/src/ol/renderer/webgl/webgltilelayerrenderer.js @@ -114,15 +114,15 @@ ol.renderer.webgl.TileLayer.prototype.prepareFrame = var context = mapRenderer.getContext(); var gl = mapRenderer.getGL(); - var view2DState = frameState.view2DState; - var projection = view2DState.projection; + var viewState = frameState.viewState; + var projection = viewState.projection; var tileLayer = this.getLayer(); goog.asserts.assertInstanceof(tileLayer, ol.layer.Tile); var tileSource = tileLayer.getSource(); goog.asserts.assertInstanceof(tileSource, ol.source.Tile); var tileGrid = tileSource.getTileGridForProjection(projection); - var z = tileGrid.getZForResolution(view2DState.resolution); + var z = tileGrid.getZForResolution(viewState.resolution); var tileResolution = tileGrid.getResolution(z); var tilePixelSize = @@ -131,12 +131,12 @@ ol.renderer.webgl.TileLayer.prototype.prepareFrame = var tilePixelResolution = tileResolution / pixelRatio; var tileGutter = tileSource.getGutter(); - var center = view2DState.center; + var center = viewState.center; var extent; - if (tileResolution == view2DState.resolution) { + if (tileResolution == viewState.resolution) { center = this.snapCenterToPixel(center, tileResolution, frameState.size); - extent = ol.extent.getForView2DAndSize( - center, tileResolution, view2DState.rotation, frameState.size); + extent = ol.extent.getForViewAndSize( + center, tileResolution, viewState.rotation, frameState.size); } else { extent = frameState.extent; } @@ -310,13 +310,13 @@ ol.renderer.webgl.TileLayer.prototype.prepareFrame = (center[1] - framebufferExtent[1]) / (framebufferExtent[3] - framebufferExtent[1]), 0); - if (view2DState.rotation !== 0) { - goog.vec.Mat4.rotateZ(texCoordMatrix, view2DState.rotation); + if (viewState.rotation !== 0) { + goog.vec.Mat4.rotateZ(texCoordMatrix, viewState.rotation); } goog.vec.Mat4.scale(texCoordMatrix, - frameState.size[0] * view2DState.resolution / + frameState.size[0] * viewState.resolution / (framebufferExtent[2] - framebufferExtent[0]), - frameState.size[1] * view2DState.resolution / + frameState.size[1] * viewState.resolution / (framebufferExtent[3] - framebufferExtent[1]), 1); goog.vec.Mat4.translate(texCoordMatrix, diff --git a/src/ol/view.js b/src/ol/view.js index f67d852fae..abdbf93cfa 100644 --- a/src/ol/view.js +++ b/src/ol/view.js @@ -3,8 +3,31 @@ goog.provide('ol.ViewHint'); goog.require('goog.array'); goog.require('goog.asserts'); -goog.require('ol.IView'); +goog.require('ol'); +goog.require('ol.CenterConstraint'); +goog.require('ol.Constraints'); goog.require('ol.Object'); +goog.require('ol.ResolutionConstraint'); +goog.require('ol.RotationConstraint'); +goog.require('ol.RotationConstraintType'); +goog.require('ol.Size'); +goog.require('ol.coordinate'); +goog.require('ol.extent'); +goog.require('ol.proj'); +goog.require('ol.proj.METERS_PER_UNIT'); +goog.require('ol.proj.Projection'); +goog.require('ol.proj.Units'); + + +/** + * @enum {string} + */ +ol.ViewProperty = { + CENTER: 'center', + PROJECTION: 'projection', + RESOLUTION: 'resolution', + ROTATION: 'rotation' +}; /** @@ -19,22 +42,58 @@ ol.ViewHint = { /** * @classdesc - * Abstract base class; normally only used for creating subclasses and not - * instantiated in apps. - * Maps can be viewed from different perspectives: 2D or 3D, or at different - * angles. To enable this, properties determining projection, position, angle or - * rotation cannot be part of the map itself, but of the particular view of that - * map. This is similar to the concept of Camera in Google Earth or KML. + * An ol.View object represents a simple 2D view of the map. * - * Only {@link ol.View2D} is currently implemented. + * This is the object to act upon to change the center, resolution, + * and rotation of the map. + * + * ### The view states + * + * An `ol.View` is determined by three states: `center`, `resolution`, + * and `rotation`. To each state corresponds a getter and a setter. E.g. + * `getCenter` and `setCenter` for the `center` state. + * + * An `ol.View` has a `projection`. The projection determines the + * coordinate system of the center, and its units determine the units of the + * resolution (projection units per pixel). The default projection is + * Spherical Mercator (EPSG:3857). + * + * ### The constraints + * + * `setCenter`, `setResolution` and `setRotation` can be used to change the + * states of the view. Any value can be passed to the setters. And the value + * that is passed to a setter will effectively be the value set in the view, + * and returned by the corresponding getter. + * + * But an `ol.View` object also has a *resolution constraint*, a + * *rotation constraint* and a *center constraint*. + * + * As said above no constraints are applied when the setters are used to set + * new states for the view. Applying constraints is done explicitly through + * the use of the `constrain*` functions (`constrainResolution` and + * `constrainRotation` and `constrainCenter`). + * + * The main users of the constraints are the interactions and the + * controls. For example, double-clicking on the map changes the view to + * the "next" resolution. And releasing the fingers after pinch-zooming + * snaps to the closest resolution (with an animation). + * + * So the *resolution constraint* snaps to specific resolutions. It is + * determined by the following options: `resolutions`, `maxResolution`, + * `maxZoom`, and `zoomFactor`. If `resolutions` is set, the other three + * options are ignored. See {@link ol.ViewOptions} for more information. + * + * The *rotation constaint* is currently not configurable. It snaps the + * rotation value to zero when approaching the horizontal. * * @constructor - * @implements {ol.IView} * @extends {ol.Object} + * @param {olx.ViewOptions=} opt_options View options. + * @todo api */ -ol.View = function() { - +ol.View = function(opt_options) { goog.base(this); + var options = goog.isDef(opt_options) ? opt_options : {}; /** * @private @@ -42,10 +101,152 @@ ol.View = function() { */ this.hints_ = [0, 0]; + /** + * @type {Object.} + */ + var values = {}; + values[ol.ViewProperty.CENTER] = goog.isDef(options.center) ? + options.center : null; + values[ol.ViewProperty.PROJECTION] = ol.proj.createProjection( + options.projection, 'EPSG:3857'); + + var resolutionConstraintInfo = ol.View.createResolutionConstraint_( + options); + + /** + * @private + * @type {number} + */ + this.maxResolution_ = resolutionConstraintInfo.maxResolution; + + /** + * @private + * @type {number} + */ + this.minResolution_ = resolutionConstraintInfo.minResolution; + + /** + * @private + * @type {number} + */ + this.minZoom_ = resolutionConstraintInfo.minZoom; + + var centerConstraint = ol.View.createCenterConstraint_(options); + var resolutionConstraint = resolutionConstraintInfo.constraint; + var rotationConstraint = ol.View.createRotationConstraint_(options); + + /** + * @private + * @type {ol.Constraints} + */ + this.constraints_ = new ol.Constraints( + centerConstraint, resolutionConstraint, rotationConstraint); + + if (goog.isDef(options.resolution)) { + values[ol.ViewProperty.RESOLUTION] = options.resolution; + } else if (goog.isDef(options.zoom)) { + values[ol.ViewProperty.RESOLUTION] = this.constrainResolution( + this.maxResolution_, options.zoom - this.minZoom_); + } + values[ol.ViewProperty.ROTATION] = + goog.isDef(options.rotation) ? options.rotation : 0; + this.setValues(values); }; goog.inherits(ol.View, ol.Object); +/** + * @param {number} rotation Target rotation. + * @param {ol.Coordinate} anchor Rotation anchor. + * @return {ol.Coordinate|undefined} Center for rotation and anchor. + */ +ol.View.prototype.calculateCenterRotate = function(rotation, anchor) { + var center; + var currentCenter = this.getCenter(); + if (goog.isDef(currentCenter)) { + center = [currentCenter[0] - anchor[0], currentCenter[1] - anchor[1]]; + ol.coordinate.rotate(center, rotation - this.getRotation()); + ol.coordinate.add(center, anchor); + } + return center; +}; + + +/** + * @param {number} resolution Target resolution. + * @param {ol.Coordinate} anchor Zoom anchor. + * @return {ol.Coordinate|undefined} Center for resolution and anchor. + */ +ol.View.prototype.calculateCenterZoom = function(resolution, anchor) { + var center; + var currentCenter = this.getCenter(); + var currentResolution = this.getResolution(); + if (goog.isDef(currentCenter) && goog.isDef(currentResolution)) { + var x = anchor[0] - + resolution * (anchor[0] - currentCenter[0]) / currentResolution; + var y = anchor[1] - + resolution * (anchor[1] - currentCenter[1]) / currentResolution; + center = [x, y]; + } + return center; +}; + + +/** + * Get the constrained center of this view. + * @param {ol.Coordinate|undefined} center Center. + * @return {ol.Coordinate|undefined} Constrained center. + * @todo api + */ +ol.View.prototype.constrainCenter = function(center) { + return this.constraints_.center(center); +}; + + +/** + * Get the constrained resolution of this view. + * @param {number|undefined} resolution Resolution. + * @param {number=} opt_delta Delta. Default is `0`. + * @param {number=} opt_direction Direction. Default is `0`. + * @return {number|undefined} Constrained resolution. + * @todo api + */ +ol.View.prototype.constrainResolution = function( + resolution, opt_delta, opt_direction) { + var delta = opt_delta || 0; + var direction = opt_direction || 0; + return this.constraints_.resolution(resolution, delta, direction); +}; + + +/** + * Get the constrained rotation of this view. + * @param {number|undefined} rotation Rotation. + * @param {number=} opt_delta Delta. Default is `0`. + * @return {number|undefined} Constrained rotation. + * @todo api + */ +ol.View.prototype.constrainRotation = function(rotation, opt_delta) { + var delta = opt_delta || 0; + return this.constraints_.rotation(rotation, delta); +}; + + +/** + * @return {ol.Coordinate|undefined} The center of the view. + * @todo observable + * @todo api + */ +ol.View.prototype.getCenter = function() { + return /** @type {ol.Coordinate|undefined} */ ( + this.get(ol.ViewProperty.CENTER)); +}; +goog.exportProperty( + ol.View.prototype, + 'getCenter', + ol.View.prototype.getCenter); + + /** * @return {Array.} Hint. */ @@ -55,35 +256,331 @@ ol.View.prototype.getHints = function() { /** - * @inheritDoc + * Calculate the extent for the given size in pixels, based on the current + * resolution and the current center. + * @param {ol.Size} size Box pixel size. + * @return {ol.Extent} Extent. + * @todo api */ -ol.View.prototype.getView2D = function() { - // FIXME for some reason, we can't use goog.abstractMethod here - goog.asserts.fail(); - return null; +ol.View.prototype.calculateExtent = function(size) { + goog.asserts.assert(this.isDef()); + var center = this.getCenter(); + var resolution = this.getResolution(); + var minX = center[0] - resolution * size[0] / 2; + var maxX = center[0] + resolution * size[0] / 2; + var minY = center[1] - resolution * size[1] / 2; + var maxY = center[1] + resolution * size[1] / 2; + return [minX, minY, maxX, maxY]; }; /** - * @inheritDoc + * @return {ol.proj.Projection|undefined} The projection of the view. + * @todo observable + * @todo api */ -ol.View.prototype.getView3D = function() { - // FIXME for some reason, we can't use goog.abstractMethod here - goog.asserts.fail(); - return null; +ol.View.prototype.getProjection = function() { + return /** @type {ol.proj.Projection|undefined} */ ( + this.get(ol.ViewProperty.PROJECTION)); +}; +goog.exportProperty( + ol.View.prototype, + 'getProjection', + ol.View.prototype.getProjection); + + +/** + * @return {number|undefined} The resolution of the view. + * @todo observable + * @todo api + */ +ol.View.prototype.getResolution = function() { + return /** @type {number|undefined} */ ( + this.get(ol.ViewProperty.RESOLUTION)); +}; +goog.exportProperty( + ol.View.prototype, + 'getResolution', + ol.View.prototype.getResolution); + + +/** + * Get the resolution for a provided extent (in map units) and size (in pixels). + * @param {ol.Extent} extent Extent. + * @param {ol.Size} size Box pixel size. + * @return {number} The resolution at which the provided extent will render at + * the given size. + * @todo api + */ +ol.View.prototype.getResolutionForExtent = function(extent, size) { + var xResolution = ol.extent.getWidth(extent) / size[0]; + var yResolution = ol.extent.getHeight(extent) / size[1]; + return Math.max(xResolution, yResolution); }; /** - * @inheritDoc + * Return a function that returns a value between 0 and 1 for a + * resolution. Exponential scaling is assumed. + * @param {number=} opt_power Power. + * @return {function(number): number} Resolution for value function. + */ +ol.View.prototype.getResolutionForValueFunction = function(opt_power) { + var power = opt_power || 2; + var maxResolution = this.maxResolution_; + var minResolution = this.minResolution_; + var max = Math.log(maxResolution / minResolution) / Math.log(power); + return ( + /** + * @param {number} value Value. + * @return {number} Resolution. + */ + function(value) { + var resolution = maxResolution / Math.pow(power, value * max); + goog.asserts.assert(resolution >= minResolution && + resolution <= maxResolution); + return resolution; + }); +}; + + +/** + * @return {number|undefined} The rotation of the view. + * @todo observable + * @todo api + */ +ol.View.prototype.getRotation = function() { + return /** @type {number|undefined} */ (this.get(ol.ViewProperty.ROTATION)); +}; +goog.exportProperty( + ol.View.prototype, + 'getRotation', + ol.View.prototype.getRotation); + + +/** + * Return a function that returns a resolution for a value between + * 0 and 1. Exponential scaling is assumed. + * @param {number=} opt_power Power. + * @return {function(number): number} Value for resolution function. + */ +ol.View.prototype.getValueForResolutionFunction = function(opt_power) { + var power = opt_power || 2; + var maxResolution = this.maxResolution_; + var minResolution = this.minResolution_; + var max = Math.log(maxResolution / minResolution) / Math.log(power); + return ( + /** + * @param {number} resolution Resolution. + * @return {number} Value. + */ + function(resolution) { + var value = + (Math.log(maxResolution / resolution) / Math.log(power)) / max; + goog.asserts.assert(value >= 0 && value <= 1); + return value; + }); +}; + + +/** + * @return {olx.ViewState} View state. + */ +ol.View.prototype.getState = function() { + goog.asserts.assert(this.isDef()); + var center = /** @type {ol.Coordinate} */ (this.getCenter()); + var projection = this.getProjection(); + var resolution = /** @type {number} */ (this.getResolution()); + var rotation = this.getRotation(); + return /** @type {olx.ViewState} */ ({ + center: center.slice(), + projection: goog.isDef(projection) ? projection : null, + resolution: resolution, + rotation: goog.isDef(rotation) ? rotation : 0 + }); +}; + + +/** + * Get the current zoom level. Return undefined if the current + * resolution is undefined or not a "constrained resolution". + * @return {number|undefined} Zoom. + * @todo api + */ +ol.View.prototype.getZoom = function() { + var offset; + var resolution = this.getResolution(); + + if (goog.isDef(resolution)) { + var res, z = 0; + do { + res = this.constrainResolution(this.maxResolution_, z); + if (res == resolution) { + offset = z; + break; + } + ++z; + } while (res > this.minResolution_); + } + + return goog.isDef(offset) ? this.minZoom_ + offset : offset; +}; + + +/** + * Fit the given extent based on the given map size. + * @param {ol.Extent} extent Extent. + * @param {ol.Size} size Box pixel size. + * @todo api + */ +ol.View.prototype.fitExtent = function(extent, size) { + if (!ol.extent.isEmpty(extent)) { + this.setCenter(ol.extent.getCenter(extent)); + var resolution = this.getResolutionForExtent(extent, size); + var constrainedResolution = this.constrainResolution(resolution, 0, 0); + if (constrainedResolution < resolution) { + constrainedResolution = + this.constrainResolution(constrainedResolution, -1, 0); + } + this.setResolution(constrainedResolution); + } +}; + + +/** + * Fit the given geometry based on the given map size and border. + * Take care on the map angle. + * @param {ol.geom.SimpleGeometry} geometry Geometry. + * @param {ol.Size} size Box pixel size. + * @param {olx.View.fitGeometryOptions=} opt_options Options. + * @todo api + */ +ol.View.prototype.fitGeometry = function(geometry, size, opt_options) { + var options = goog.isDef(opt_options) ? opt_options : {}; + + var padding = goog.isDef(options.padding) ? options.padding : [0, 0, 0, 0]; + var constrainResolution = goog.isDef(options.constrainResolution) ? + options.constrainResolution : true; + var nearest = goog.isDef(options.nearest) ? options.nearest : false; + var minResolution = goog.isDef(options.minResolution) ? + options.minResolution : 0; + var coords = geometry.getFlatCoordinates(); + + // calculate rotated extent + var rotation = this.getRotation(); + goog.asserts.assert(goog.isDef(rotation)); + var cosAngle = Math.cos(-rotation); + var sinAngle = Math.sin(-rotation); + var minRotX = +Infinity; + var minRotY = +Infinity; + var maxRotX = -Infinity; + var maxRotY = -Infinity; + var stride = geometry.getStride(); + for (var i = 0, ii = coords.length; i < ii; i += stride) { + var rotX = coords[i] * cosAngle - coords[i + 1] * sinAngle; + var rotY = coords[i] * sinAngle + coords[i + 1] * cosAngle; + minRotX = Math.min(minRotX, rotX); + minRotY = Math.min(minRotY, rotY); + maxRotX = Math.max(maxRotX, rotX); + maxRotY = Math.max(maxRotY, rotY); + } + + // calculate resolution + var resolution = this.getResolutionForExtent( + [minRotX, minRotY, maxRotX, maxRotY], + [size[0] - padding[1] - padding[3], size[1] - padding[0] - padding[2]]); + resolution = isNaN(resolution) ? minResolution : + Math.max(resolution, minResolution); + if (constrainResolution) { + var constrainedResolution = this.constrainResolution(resolution, 0, 0); + if (!nearest && constrainedResolution < resolution) { + constrainedResolution = this.constrainResolution( + constrainedResolution, -1, 0); + } + resolution = constrainedResolution; + } + this.setResolution(resolution); + + // calculate center + sinAngle = -sinAngle; // go back to original rotation + var centerRotX = (minRotX + maxRotX) / 2; + var centerRotY = (minRotY + maxRotY) / 2; + centerRotX += (padding[1] - padding[3]) / 2 * resolution; + centerRotY += (padding[0] - padding[2]) / 2 * resolution; + var centerX = centerRotX * cosAngle - centerRotY * sinAngle; + var centerY = centerRotY * cosAngle + centerRotX * sinAngle; + + this.setCenter([centerX, centerY]); +}; + + +/** + * Center on coordinate and view position. + * Take care on the map angle. + * @param {ol.Coordinate} coordinate Coordinate. + * @param {ol.Size} size Box pixel size. + * @param {ol.Pixel} position Position on the view to center on. + * @todo api + */ +ol.View.prototype.centerOn = function(coordinate, size, position) { + // calculate rotated position + var rotation = this.getRotation(); + var cosAngle = Math.cos(-rotation); + var sinAngle = Math.sin(-rotation); + var rotX = coordinate[0] * cosAngle - coordinate[1] * sinAngle; + var rotY = coordinate[1] * cosAngle + coordinate[0] * sinAngle; + var resolution = this.getResolution(); + rotX += (size[0] / 2 - position[0]) * resolution; + rotY += (position[1] - size[1] / 2) * resolution; + + // go back to original angle + sinAngle = -sinAngle; // go back to original rotation + var centerX = rotX * cosAngle - rotY * sinAngle; + var centerY = rotY * cosAngle + rotX * sinAngle; + + this.setCenter([centerX, centerY]); +}; + + +/** + * @return {boolean} Is defined. */ ol.View.prototype.isDef = function() { - // FIXME for some reason, we can't use goog.abstractMethod here - goog.asserts.fail(); - return false; + return goog.isDefAndNotNull(this.getCenter()) && + goog.isDef(this.getResolution()); }; +/** + * Rotate the view around a given coordinate. + * @param {number} rotation New rotation value for the view. + * @param {ol.Coordinate=} opt_anchor The rotation center. + * @todo api + */ +ol.View.prototype.rotate = function(rotation, opt_anchor) { + if (goog.isDef(opt_anchor)) { + var center = this.calculateCenterRotate(rotation, opt_anchor); + this.setCenter(center); + } + this.setRotation(rotation); +}; + + +/** + * Set the center of the current view. + * @param {ol.Coordinate|undefined} center The center of the view. + * @todo observable + * @todo api + */ +ol.View.prototype.setCenter = function(center) { + this.set(ol.ViewProperty.CENTER, center); +}; +goog.exportProperty( + ol.View.prototype, + 'setCenter', + ol.View.prototype.setCenter); + + /** * @param {ol.ViewHint} hint Hint. * @param {number} delta Delta. @@ -95,3 +592,183 @@ ol.View.prototype.setHint = function(hint, delta) { goog.asserts.assert(this.hints_[hint] >= 0); return this.hints_[hint]; }; + + +/** + * Set the projection of this view. + * Warning! This code is not yet implemented. Function should not be used. + * @param {ol.proj.Projection|undefined} projection The projection of the view. + * @todo observable + * @todo api + */ +ol.View.prototype.setProjection = function(projection) { + this.set(ol.ViewProperty.PROJECTION, projection); +}; +goog.exportProperty( + ol.View.prototype, + 'setProjection', + ol.View.prototype.setProjection); + + +/** + * Set the resolution for this view. + * @param {number|undefined} resolution The resolution of the view. + * @todo observable + * @todo api + */ +ol.View.prototype.setResolution = function(resolution) { + this.set(ol.ViewProperty.RESOLUTION, resolution); +}; +goog.exportProperty( + ol.View.prototype, + 'setResolution', + ol.View.prototype.setResolution); + + +/** + * Set the rotation for this view. + * @param {number|undefined} rotation The rotation of the view. + * @todo observable + * @todo api + */ +ol.View.prototype.setRotation = function(rotation) { + this.set(ol.ViewProperty.ROTATION, rotation); +}; +goog.exportProperty( + ol.View.prototype, + 'setRotation', + ol.View.prototype.setRotation); + + +/** + * Zoom to a specific zoom level. + * @param {number} zoom Zoom level. + * @todo api + */ +ol.View.prototype.setZoom = function(zoom) { + var resolution = this.constrainResolution( + this.maxResolution_, zoom - this.minZoom_, 0); + this.setResolution(resolution); +}; + + +/** + * @param {olx.ViewOptions} options View options. + * @private + * @return {ol.CenterConstraintType} + */ +ol.View.createCenterConstraint_ = function(options) { + if (goog.isDef(options.extent)) { + return ol.CenterConstraint.createExtent(options.extent); + } else { + return ol.CenterConstraint.none; + } +}; + + +/** + * @private + * @param {olx.ViewOptions} options View options. + * @return {{constraint: ol.ResolutionConstraintType, maxResolution: number, + * minResolution: number}} + */ +ol.View.createResolutionConstraint_ = function(options) { + var resolutionConstraint; + var maxResolution; + var minResolution; + + // TODO: move these to be ol constants + // see https://github.com/openlayers/ol3/issues/2076 + var defaultMaxZoom = 28; + var defaultZoomFactor = 2; + + var minZoom = goog.isDef(options.minZoom) ? + options.minZoom : ol.DEFAULT_MIN_ZOOM; + + var maxZoom = goog.isDef(options.maxZoom) ? + options.maxZoom : defaultMaxZoom; + + var zoomFactor = goog.isDef(options.zoomFactor) ? + options.zoomFactor : defaultZoomFactor; + + if (goog.isDef(options.resolutions)) { + var resolutions = options.resolutions; + maxResolution = resolutions[0]; + minResolution = resolutions[resolutions.length - 1]; + resolutionConstraint = ol.ResolutionConstraint.createSnapToResolutions( + resolutions); + } else { + // calculate the default min and max resolution + var projection = options.projection; + var extent = ol.proj.createProjection(projection, 'EPSG:3857').getExtent(); + var size = goog.isNull(extent) ? + // use an extent that can fit the whole world if need be + 360 * ol.proj.METERS_PER_UNIT[ol.proj.Units.DEGREES] / + ol.proj.METERS_PER_UNIT[projection.getUnits()] : + Math.max(ol.extent.getWidth(extent), ol.extent.getHeight(extent)); + + var defaultMaxResolution = size / ol.DEFAULT_TILE_SIZE / Math.pow( + defaultZoomFactor, ol.DEFAULT_MIN_ZOOM); + + var defaultMinResolution = defaultMaxResolution / Math.pow( + defaultZoomFactor, defaultMaxZoom - ol.DEFAULT_MIN_ZOOM); + + // user provided maxResolution takes precedence + maxResolution = options.maxResolution; + if (goog.isDef(maxResolution)) { + minZoom = 0; + } else { + maxResolution = defaultMaxResolution / Math.pow(zoomFactor, minZoom); + } + + // user provided minResolution takes precedence + minResolution = options.minResolution; + if (!goog.isDef(minResolution)) { + if (goog.isDef(options.maxZoom)) { + if (goog.isDef(options.maxResolution)) { + minResolution = maxResolution / Math.pow(zoomFactor, maxZoom); + } else { + minResolution = defaultMaxResolution / Math.pow(zoomFactor, maxZoom); + } + } else { + minResolution = defaultMinResolution; + } + } + + // given discrete zoom levels, minResolution may be different than provided + maxZoom = minZoom + Math.floor( + Math.log(maxResolution / minResolution) / Math.log(zoomFactor)); + minResolution = maxResolution / Math.pow(zoomFactor, maxZoom - minZoom); + + resolutionConstraint = ol.ResolutionConstraint.createSnapToPower( + zoomFactor, maxResolution, maxZoom - minZoom); + } + return {constraint: resolutionConstraint, maxResolution: maxResolution, + minResolution: minResolution, minZoom: minZoom}; +}; + + +/** + * @private + * @param {olx.ViewOptions} options View options. + * @return {ol.RotationConstraintType} Rotation constraint. + */ +ol.View.createRotationConstraint_ = function(options) { + var enableRotation = goog.isDef(options.enableRotation) ? + options.enableRotation : true; + if (enableRotation) { + var constrainRotation = options.constrainRotation; + if (!goog.isDef(constrainRotation) || constrainRotation === true) { + return ol.RotationConstraint.createSnapToZero(); + } else if (constrainRotation === false) { + return ol.RotationConstraint.none; + } else if (goog.isNumber(constrainRotation)) { + return ol.RotationConstraint.createSnapToN(constrainRotation); + } else { + goog.asserts.fail(); + return ol.RotationConstraint.none; + } + } else { + return ol.RotationConstraint.disable; + } +}; diff --git a/src/ol/view2d.js b/src/ol/view2d.js deleted file mode 100644 index 764da58aed..0000000000 --- a/src/ol/view2d.js +++ /dev/null @@ -1,759 +0,0 @@ -// FIXME getView3D has not return type - -goog.provide('ol.View2D'); -goog.provide('ol.View2DProperty'); - -goog.require('goog.asserts'); -goog.require('ol'); -goog.require('ol.CenterConstraint'); -goog.require('ol.Constraints'); -goog.require('ol.IView2D'); -goog.require('ol.IView3D'); -goog.require('ol.ResolutionConstraint'); -goog.require('ol.RotationConstraint'); -goog.require('ol.RotationConstraintType'); -goog.require('ol.Size'); -goog.require('ol.View'); -goog.require('ol.coordinate'); -goog.require('ol.extent'); -goog.require('ol.proj'); -goog.require('ol.proj.METERS_PER_UNIT'); -goog.require('ol.proj.Projection'); -goog.require('ol.proj.Units'); - - -/** - * @enum {string} - */ -ol.View2DProperty = { - CENTER: 'center', - PROJECTION: 'projection', - RESOLUTION: 'resolution', - ROTATION: 'rotation' -}; - - - -/** - * @classdesc - * An ol.View2D object represents a simple 2D view of the map. - * - * This is the object to act upon to change the center, resolution, - * and rotation of the map. - * - * ### The view states - * - * An `ol.View2D` is determined by three states: `center`, `resolution`, - * and `rotation`. To each state corresponds a getter and a setter. E.g. - * `getCenter` and `setCenter` for the `center` state. - * - * An `ol.View2D` has a `projection`. The projection determines the - * coordinate system of the center, and its units determine the units of the - * resolution (projection units per pixel). The default projection is - * Spherical Mercator (EPSG:3857). - * - * ### The constraints - * - * `setCenter`, `setResolution` and `setRotation` can be used to change the - * states of the view. Any value can be passed to the setters. And the value - * that is passed to a setter will effectively be the value set in the view, - * and returned by the corresponding getter. - * - * But an `ol.View2D` object also has a *resolution constraint*, a - * *rotation constraint* and a *center constraint*. - * - * As said above no constraints are applied when the setters are used to set - * new states for the view. Applying constraints is done explicitly through - * the use of the `constrain*` functions (`constrainResolution` and - * `constrainRotation` and `constrainCenter`). - * - * The main users of the constraints are the interactions and the - * controls. For example, double-clicking on the map changes the view to - * the "next" resolution. And releasing the fingers after pinch-zooming - * snaps to the closest resolution (with an animation). - * - * So the *resolution constraint* snaps to specific resolutions. It is - * determined by the following options: `resolutions`, `maxResolution`, - * `maxZoom`, and `zoomFactor`. If `resolutions` is set, the other three - * options are ignored. See {@link ol.View2DOptions} for more information. - * - * The *rotation constaint* is currently not configurable. It snaps the - * rotation value to zero when approaching the horizontal. - * - * @constructor - * @implements {ol.IView2D} - * @implements {ol.IView3D} - * @extends {ol.View} - * @param {olx.View2DOptions=} opt_options View2D options. - * @todo api - */ -ol.View2D = function(opt_options) { - goog.base(this); - var options = goog.isDef(opt_options) ? opt_options : {}; - - /** - * @type {Object.} - */ - var values = {}; - values[ol.View2DProperty.CENTER] = goog.isDef(options.center) ? - options.center : null; - values[ol.View2DProperty.PROJECTION] = ol.proj.createProjection( - options.projection, 'EPSG:3857'); - - var resolutionConstraintInfo = ol.View2D.createResolutionConstraint_( - options); - - /** - * @private - * @type {number} - */ - this.maxResolution_ = resolutionConstraintInfo.maxResolution; - - /** - * @private - * @type {number} - */ - this.minResolution_ = resolutionConstraintInfo.minResolution; - - /** - * @private - * @type {number} - */ - this.minZoom_ = resolutionConstraintInfo.minZoom; - - var centerConstraint = ol.View2D.createCenterConstraint_(options); - var resolutionConstraint = resolutionConstraintInfo.constraint; - var rotationConstraint = ol.View2D.createRotationConstraint_(options); - - /** - * @private - * @type {ol.Constraints} - */ - this.constraints_ = new ol.Constraints( - centerConstraint, resolutionConstraint, rotationConstraint); - - if (goog.isDef(options.resolution)) { - values[ol.View2DProperty.RESOLUTION] = options.resolution; - } else if (goog.isDef(options.zoom)) { - values[ol.View2DProperty.RESOLUTION] = this.constrainResolution( - this.maxResolution_, options.zoom - this.minZoom_); - } - values[ol.View2DProperty.ROTATION] = - goog.isDef(options.rotation) ? options.rotation : 0; - this.setValues(values); -}; -goog.inherits(ol.View2D, ol.View); - - -/** - * @param {number} rotation Target rotation. - * @param {ol.Coordinate} anchor Rotation anchor. - * @return {ol.Coordinate|undefined} Center for rotation and anchor. - */ -ol.View2D.prototype.calculateCenterRotate = function(rotation, anchor) { - var center; - var currentCenter = this.getCenter(); - if (goog.isDef(currentCenter)) { - center = [currentCenter[0] - anchor[0], currentCenter[1] - anchor[1]]; - ol.coordinate.rotate(center, rotation - this.getRotation()); - ol.coordinate.add(center, anchor); - } - return center; -}; - - -/** - * @param {number} resolution Target resolution. - * @param {ol.Coordinate} anchor Zoom anchor. - * @return {ol.Coordinate|undefined} Center for resolution and anchor. - */ -ol.View2D.prototype.calculateCenterZoom = function(resolution, anchor) { - var center; - var currentCenter = this.getCenter(); - var currentResolution = this.getResolution(); - if (goog.isDef(currentCenter) && goog.isDef(currentResolution)) { - var x = anchor[0] - - resolution * (anchor[0] - currentCenter[0]) / currentResolution; - var y = anchor[1] - - resolution * (anchor[1] - currentCenter[1]) / currentResolution; - center = [x, y]; - } - return center; -}; - - -/** - * Get the constrained center of this view. - * @param {ol.Coordinate|undefined} center Center. - * @return {ol.Coordinate|undefined} Constrained center. - * @todo api - */ -ol.View2D.prototype.constrainCenter = function(center) { - return this.constraints_.center(center); -}; - - -/** - * Get the constrained resolution of this view. - * @param {number|undefined} resolution Resolution. - * @param {number=} opt_delta Delta. Default is `0`. - * @param {number=} opt_direction Direction. Default is `0`. - * @return {number|undefined} Constrained resolution. - * @todo api - */ -ol.View2D.prototype.constrainResolution = function( - resolution, opt_delta, opt_direction) { - var delta = opt_delta || 0; - var direction = opt_direction || 0; - return this.constraints_.resolution(resolution, delta, direction); -}; - - -/** - * Get the constrained rotation of this view. - * @param {number|undefined} rotation Rotation. - * @param {number=} opt_delta Delta. Default is `0`. - * @return {number|undefined} Constrained rotation. - * @todo api - */ -ol.View2D.prototype.constrainRotation = function(rotation, opt_delta) { - var delta = opt_delta || 0; - return this.constraints_.rotation(rotation, delta); -}; - - -/** - * @inheritDoc - * @todo observable - * @todo api - */ -ol.View2D.prototype.getCenter = function() { - return /** @type {ol.Coordinate|undefined} */ ( - this.get(ol.View2DProperty.CENTER)); -}; -goog.exportProperty( - ol.View2D.prototype, - 'getCenter', - ol.View2D.prototype.getCenter); - - -/** - * Calculate the extent for the given size in pixels, based on the current - * resolution and the current center. - * @param {ol.Size} size Box pixel size. - * @return {ol.Extent} Extent. - * @todo api - */ -ol.View2D.prototype.calculateExtent = function(size) { - goog.asserts.assert(this.isDef()); - var center = this.getCenter(); - var resolution = this.getResolution(); - var minX = center[0] - resolution * size[0] / 2; - var maxX = center[0] + resolution * size[0] / 2; - var minY = center[1] - resolution * size[1] / 2; - var maxY = center[1] + resolution * size[1] / 2; - return [minX, minY, maxX, maxY]; -}; - - -/** - * @inheritDoc - * @todo observable - * @todo api - */ -ol.View2D.prototype.getProjection = function() { - return /** @type {ol.proj.Projection|undefined} */ ( - this.get(ol.View2DProperty.PROJECTION)); -}; -goog.exportProperty( - ol.View2D.prototype, - 'getProjection', - ol.View2D.prototype.getProjection); - - -/** - * @inheritDoc - * @todo observable - * @todo api - */ -ol.View2D.prototype.getResolution = function() { - return /** @type {number|undefined} */ ( - this.get(ol.View2DProperty.RESOLUTION)); -}; -goog.exportProperty( - ol.View2D.prototype, - 'getResolution', - ol.View2D.prototype.getResolution); - - -/** - * Get the resolution for a provided extent (in map units) and size (in pixels). - * @param {ol.Extent} extent Extent. - * @param {ol.Size} size Box pixel size. - * @return {number} The resolution at which the provided extent will render at - * the given size. - * @todo api - */ -ol.View2D.prototype.getResolutionForExtent = function(extent, size) { - var xResolution = ol.extent.getWidth(extent) / size[0]; - var yResolution = ol.extent.getHeight(extent) / size[1]; - return Math.max(xResolution, yResolution); -}; - - -/** - * Return a function that returns a value between 0 and 1 for a - * resolution. Exponential scaling is assumed. - * @param {number=} opt_power Power. - * @return {function(number): number} Resolution for value function. - */ -ol.View2D.prototype.getResolutionForValueFunction = function(opt_power) { - var power = opt_power || 2; - var maxResolution = this.maxResolution_; - var minResolution = this.minResolution_; - var max = Math.log(maxResolution / minResolution) / Math.log(power); - return ( - /** - * @param {number} value Value. - * @return {number} Resolution. - */ - function(value) { - var resolution = maxResolution / Math.pow(power, value * max); - goog.asserts.assert(resolution >= minResolution && - resolution <= maxResolution); - return resolution; - }); -}; - - -/** - * @inheritDoc - * @todo observable - * @todo api - */ -ol.View2D.prototype.getRotation = function() { - return /** @type {number|undefined} */ (this.get(ol.View2DProperty.ROTATION)); -}; -goog.exportProperty( - ol.View2D.prototype, - 'getRotation', - ol.View2D.prototype.getRotation); - - -/** - * Return a function that returns a resolution for a value between - * 0 and 1. Exponential scaling is assumed. - * @param {number=} opt_power Power. - * @return {function(number): number} Value for resolution function. - */ -ol.View2D.prototype.getValueForResolutionFunction = function(opt_power) { - var power = opt_power || 2; - var maxResolution = this.maxResolution_; - var minResolution = this.minResolution_; - var max = Math.log(maxResolution / minResolution) / Math.log(power); - return ( - /** - * @param {number} resolution Resolution. - * @return {number} Value. - */ - function(resolution) { - var value = - (Math.log(maxResolution / resolution) / Math.log(power)) / max; - goog.asserts.assert(value >= 0 && value <= 1); - return value; - }); -}; - - -/** - * @inheritDoc - * @todo api - */ -ol.View2D.prototype.getView2D = function() { - return this; -}; - - -/** - * @inheritDoc - */ -ol.View2D.prototype.getView2DState = function() { - goog.asserts.assert(this.isDef()); - var center = /** @type {ol.Coordinate} */ (this.getCenter()); - var projection = this.getProjection(); - var resolution = /** @type {number} */ (this.getResolution()); - var rotation = this.getRotation(); - return /** @type {olx.View2DState} */ ({ - center: center.slice(), - projection: goog.isDef(projection) ? projection : null, - resolution: resolution, - rotation: goog.isDef(rotation) ? rotation : 0 - }); -}; - - -/** - * FIXME return type - */ -ol.View2D.prototype.getView3D = function() { -}; - - -/** - * Get the current zoom level. Return undefined if the current - * resolution is undefined or not a "constrained resolution". - * @return {number|undefined} Zoom. - * @todo api - */ -ol.View2D.prototype.getZoom = function() { - var offset; - var resolution = this.getResolution(); - - if (goog.isDef(resolution)) { - var res, z = 0; - do { - res = this.constrainResolution(this.maxResolution_, z); - if (res == resolution) { - offset = z; - break; - } - ++z; - } while (res > this.minResolution_); - } - - return goog.isDef(offset) ? this.minZoom_ + offset : offset; -}; - - -/** - * Fit the given extent based on the given map size. - * @param {ol.Extent} extent Extent. - * @param {ol.Size} size Box pixel size. - * @todo api - */ -ol.View2D.prototype.fitExtent = function(extent, size) { - if (!ol.extent.isEmpty(extent)) { - this.setCenter(ol.extent.getCenter(extent)); - var resolution = this.getResolutionForExtent(extent, size); - var constrainedResolution = this.constrainResolution(resolution, 0, 0); - if (constrainedResolution < resolution) { - constrainedResolution = - this.constrainResolution(constrainedResolution, -1, 0); - } - this.setResolution(constrainedResolution); - } -}; - - -/** - * Fit the given geometry based on the given map size and border. - * Take care on the map angle. - * @param {ol.geom.SimpleGeometry} geometry Geometry. - * @param {ol.Size} size Box pixel size. - * @param {olx.View2D.fitGeometryOptions=} opt_options Options. - * @todo api - */ -ol.View2D.prototype.fitGeometry = function(geometry, size, opt_options) { - var options = goog.isDef(opt_options) ? opt_options : {}; - - var padding = goog.isDef(options.padding) ? options.padding : [0, 0, 0, 0]; - var constrainResolution = goog.isDef(options.constrainResolution) ? - options.constrainResolution : true; - var nearest = goog.isDef(options.nearest) ? options.nearest : false; - var minResolution = goog.isDef(options.minResolution) ? - options.minResolution : 0; - var coords = geometry.getFlatCoordinates(); - - // calculate rotated extent - var rotation = this.getRotation(); - goog.asserts.assert(goog.isDef(rotation)); - var cosAngle = Math.cos(-rotation); - var sinAngle = Math.sin(-rotation); - var minRotX = +Infinity; - var minRotY = +Infinity; - var maxRotX = -Infinity; - var maxRotY = -Infinity; - var stride = geometry.getStride(); - for (var i = 0, ii = coords.length; i < ii; i += stride) { - var rotX = coords[i] * cosAngle - coords[i + 1] * sinAngle; - var rotY = coords[i] * sinAngle + coords[i + 1] * cosAngle; - minRotX = Math.min(minRotX, rotX); - minRotY = Math.min(minRotY, rotY); - maxRotX = Math.max(maxRotX, rotX); - maxRotY = Math.max(maxRotY, rotY); - } - - // calculate resolution - var resolution = this.getResolutionForExtent( - [minRotX, minRotY, maxRotX, maxRotY], - [size[0] - padding[1] - padding[3], size[1] - padding[0] - padding[2]]); - resolution = isNaN(resolution) ? minResolution : - Math.max(resolution, minResolution); - if (constrainResolution) { - var constrainedResolution = this.constrainResolution(resolution, 0, 0); - if (!nearest && constrainedResolution < resolution) { - constrainedResolution = this.constrainResolution( - constrainedResolution, -1, 0); - } - resolution = constrainedResolution; - } - this.setResolution(resolution); - - // calculate center - sinAngle = -sinAngle; // go back to original rotation - var centerRotX = (minRotX + maxRotX) / 2; - var centerRotY = (minRotY + maxRotY) / 2; - centerRotX += (padding[1] - padding[3]) / 2 * resolution; - centerRotY += (padding[0] - padding[2]) / 2 * resolution; - var centerX = centerRotX * cosAngle - centerRotY * sinAngle; - var centerY = centerRotY * cosAngle + centerRotX * sinAngle; - - this.setCenter([centerX, centerY]); -}; - - -/** - * Center on coordinate and view position. - * Take care on the map angle. - * @param {ol.Coordinate} coordinate Coordinate. - * @param {ol.Size} size Box pixel size. - * @param {ol.Pixel} position Position on the view to center on. - * @todo api - */ -ol.View2D.prototype.centerOn = function(coordinate, size, position) { - // calculate rotated position - var rotation = this.getRotation(); - var cosAngle = Math.cos(-rotation); - var sinAngle = Math.sin(-rotation); - var rotX = coordinate[0] * cosAngle - coordinate[1] * sinAngle; - var rotY = coordinate[1] * cosAngle + coordinate[0] * sinAngle; - var resolution = this.getResolution(); - rotX += (size[0] / 2 - position[0]) * resolution; - rotY += (position[1] - size[1] / 2) * resolution; - - // go back to original angle - sinAngle = -sinAngle; // go back to original rotation - var centerX = rotX * cosAngle - rotY * sinAngle; - var centerY = rotY * cosAngle + rotX * sinAngle; - - this.setCenter([centerX, centerY]); -}; - - -/** - * @return {boolean} Is defined. - */ -ol.View2D.prototype.isDef = function() { - return goog.isDefAndNotNull(this.getCenter()) && - goog.isDef(this.getResolution()); -}; - - -/** - * Rotate the view around a given coordinate. - * @param {number} rotation New rotation value for the view. - * @param {ol.Coordinate=} opt_anchor The rotation center. - * @todo api - */ -ol.View2D.prototype.rotate = function(rotation, opt_anchor) { - if (goog.isDef(opt_anchor)) { - var center = this.calculateCenterRotate(rotation, opt_anchor); - this.setCenter(center); - } - this.setRotation(rotation); -}; - - -/** - * Set the center of the current view. - * @param {ol.Coordinate|undefined} center The center of the view. - * @todo observable - * @todo api - */ -ol.View2D.prototype.setCenter = function(center) { - this.set(ol.View2DProperty.CENTER, center); -}; -goog.exportProperty( - ol.View2D.prototype, - 'setCenter', - ol.View2D.prototype.setCenter); - - -/** - * Set the projection of this view. - * Warning! This code is not yet implemented. Function should not be used. - * @param {ol.proj.Projection|undefined} projection The projection of the view. - * @todo observable - * @todo api - */ -ol.View2D.prototype.setProjection = function(projection) { - this.set(ol.View2DProperty.PROJECTION, projection); -}; -goog.exportProperty( - ol.View2D.prototype, - 'setProjection', - ol.View2D.prototype.setProjection); - - -/** - * Set the resolution for this view. - * @param {number|undefined} resolution The resolution of the view. - * @todo observable - * @todo api - */ -ol.View2D.prototype.setResolution = function(resolution) { - this.set(ol.View2DProperty.RESOLUTION, resolution); -}; -goog.exportProperty( - ol.View2D.prototype, - 'setResolution', - ol.View2D.prototype.setResolution); - - -/** - * Set the rotation for this view. - * @param {number|undefined} rotation The rotation of the view. - * @todo observable - * @todo api - */ -ol.View2D.prototype.setRotation = function(rotation) { - this.set(ol.View2DProperty.ROTATION, rotation); -}; -goog.exportProperty( - ol.View2D.prototype, - 'setRotation', - ol.View2D.prototype.setRotation); - - -/** - * Zoom to a specific zoom level. - * @param {number} zoom Zoom level. - * @todo api - */ -ol.View2D.prototype.setZoom = function(zoom) { - var resolution = this.constrainResolution( - this.maxResolution_, zoom - this.minZoom_, 0); - this.setResolution(resolution); -}; - - -/** - * @param {olx.View2DOptions} options View2D options. - * @private - * @return {ol.CenterConstraintType} - */ -ol.View2D.createCenterConstraint_ = function(options) { - if (goog.isDef(options.extent)) { - return ol.CenterConstraint.createExtent(options.extent); - } else { - return ol.CenterConstraint.none; - } -}; - - -/** - * @private - * @param {olx.View2DOptions} options View2D options. - * @return {{constraint: ol.ResolutionConstraintType, maxResolution: number, - * minResolution: number}} - */ -ol.View2D.createResolutionConstraint_ = function(options) { - var resolutionConstraint; - var maxResolution; - var minResolution; - - // TODO: move these to be ol constants - // see https://github.com/openlayers/ol3/issues/2076 - var defaultMaxZoom = 28; - var defaultZoomFactor = 2; - - var minZoom = goog.isDef(options.minZoom) ? - options.minZoom : ol.DEFAULT_MIN_ZOOM; - - var maxZoom = goog.isDef(options.maxZoom) ? - options.maxZoom : defaultMaxZoom; - - var zoomFactor = goog.isDef(options.zoomFactor) ? - options.zoomFactor : defaultZoomFactor; - - if (goog.isDef(options.resolutions)) { - var resolutions = options.resolutions; - maxResolution = resolutions[0]; - minResolution = resolutions[resolutions.length - 1]; - resolutionConstraint = ol.ResolutionConstraint.createSnapToResolutions( - resolutions); - } else { - // calculate the default min and max resolution - var projection = options.projection; - var extent = ol.proj.createProjection(projection, 'EPSG:3857').getExtent(); - var size = goog.isNull(extent) ? - // use an extent that can fit the whole world if need be - 360 * ol.proj.METERS_PER_UNIT[ol.proj.Units.DEGREES] / - ol.proj.METERS_PER_UNIT[projection.getUnits()] : - Math.max(ol.extent.getWidth(extent), ol.extent.getHeight(extent)); - - var defaultMaxResolution = size / ol.DEFAULT_TILE_SIZE / Math.pow( - defaultZoomFactor, ol.DEFAULT_MIN_ZOOM); - - var defaultMinResolution = defaultMaxResolution / Math.pow( - defaultZoomFactor, defaultMaxZoom - ol.DEFAULT_MIN_ZOOM); - - // user provided maxResolution takes precedence - maxResolution = options.maxResolution; - if (goog.isDef(maxResolution)) { - minZoom = 0; - } else { - maxResolution = defaultMaxResolution / Math.pow(zoomFactor, minZoom); - } - - // user provided minResolution takes precedence - minResolution = options.minResolution; - if (!goog.isDef(minResolution)) { - if (goog.isDef(options.maxZoom)) { - if (goog.isDef(options.maxResolution)) { - minResolution = maxResolution / Math.pow(zoomFactor, maxZoom); - } else { - minResolution = defaultMaxResolution / Math.pow(zoomFactor, maxZoom); - } - } else { - minResolution = defaultMinResolution; - } - } - - // given discrete zoom levels, minResolution may be different than provided - maxZoom = minZoom + Math.floor( - Math.log(maxResolution / minResolution) / Math.log(zoomFactor)); - minResolution = maxResolution / Math.pow(zoomFactor, maxZoom - minZoom); - - resolutionConstraint = ol.ResolutionConstraint.createSnapToPower( - zoomFactor, maxResolution, maxZoom - minZoom); - } - return {constraint: resolutionConstraint, maxResolution: maxResolution, - minResolution: minResolution, minZoom: minZoom}; -}; - - -/** - * @private - * @param {olx.View2DOptions} options View2D options. - * @return {ol.RotationConstraintType} Rotation constraint. - */ -ol.View2D.createRotationConstraint_ = function(options) { - var enableRotation = goog.isDef(options.enableRotation) ? - options.enableRotation : true; - if (enableRotation) { - var constrainRotation = options.constrainRotation; - if (!goog.isDef(constrainRotation) || constrainRotation === true) { - return ol.RotationConstraint.createSnapToZero(); - } else if (constrainRotation === false) { - return ol.RotationConstraint.none; - } else if (goog.isNumber(constrainRotation)) { - return ol.RotationConstraint.createSnapToN(constrainRotation); - } else { - goog.asserts.fail(); - return ol.RotationConstraint.none; - } - } else { - return ol.RotationConstraint.disable; - } -}; diff --git a/test/spec/ol/extent.test.js b/test/spec/ol/extent.test.js index 0be6ffa937..a8dfcc5e37 100644 --- a/test/spec/ol/extent.test.js +++ b/test/spec/ol/extent.test.js @@ -153,10 +153,10 @@ describe('ol.extent', function() { }); }); - describe('getForView2DAndSize', function() { + describe('getForViewAndSize', function() { it('works for a unit square', function() { - var extent = ol.extent.getForView2DAndSize( + var extent = ol.extent.getForViewAndSize( [0, 0], 1, 0, [1, 1]); expect(extent[0]).to.be(-0.5); expect(extent[2]).to.be(0.5); @@ -165,7 +165,7 @@ describe('ol.extent', function() { }); it('works for center', function() { - var extent = ol.extent.getForView2DAndSize( + var extent = ol.extent.getForViewAndSize( [5, 10], 1, 0, [1, 1]); expect(extent[0]).to.be(4.5); expect(extent[2]).to.be(5.5); @@ -174,7 +174,7 @@ describe('ol.extent', function() { }); it('works for rotation', function() { - var extent = ol.extent.getForView2DAndSize( + var extent = ol.extent.getForViewAndSize( [0, 0], 1, Math.PI / 4, [1, 1]); expect(extent[0]).to.roughlyEqual(-Math.sqrt(0.5), 1e-9); expect(extent[2]).to.roughlyEqual(Math.sqrt(0.5), 1e-9); @@ -183,7 +183,7 @@ describe('ol.extent', function() { }); it('works for resolution', function() { - var extent = ol.extent.getForView2DAndSize( + var extent = ol.extent.getForViewAndSize( [0, 0], 2, 0, [1, 1]); expect(extent[0]).to.be(-1); expect(extent[2]).to.be(1); @@ -192,7 +192,7 @@ describe('ol.extent', function() { }); it('works for size', function() { - var extent = ol.extent.getForView2DAndSize( + var extent = ol.extent.getForViewAndSize( [0, 0], 1, 0, [10, 5]); expect(extent[0]).to.be(-5); expect(extent[2]).to.be(5); diff --git a/test/spec/ol/interaction/drawinteraction.test.js b/test/spec/ol/interaction/drawinteraction.test.js index b11b5074d0..3c379698ba 100644 --- a/test/spec/ol/interaction/drawinteraction.test.js +++ b/test/spec/ol/interaction/drawinteraction.test.js @@ -20,7 +20,7 @@ describe('ol.interaction.Draw', function() { map = new ol.Map({ target: target, layers: [layer], - view: new ol.View2D({ + view: new ol.View({ projection: 'EPSG:4326', center: [0, 0], resolution: 1 @@ -478,7 +478,7 @@ goog.require('goog.events.BrowserEvent'); goog.require('goog.style'); goog.require('ol.Map'); goog.require('ol.MapBrowserPointerEvent'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.geom.GeometryType'); goog.require('ol.geom.LineString'); goog.require('ol.geom.MultiLineString'); diff --git a/test/spec/ol/map.test.js b/test/spec/ol/map.test.js index b449d78b4c..727796a3f0 100644 --- a/test/spec/ol/map.test.js +++ b/test/spec/ol/map.test.js @@ -63,7 +63,7 @@ describe('ol.Map', function() { style.height = '180px'; document.body.appendChild(target); - view = new ol.View2D({ + view = new ol.View({ projection: 'EPSG:4326' }); map = new ol.Map({ @@ -117,7 +117,7 @@ describe('ol.Map', function() { document.body.appendChild(target); map = new ol.Map({ target: target, - view: new ol.View2D({ + view: new ol.View({ projection: 'EPSG:4326', center: [0, 0], resolution: 1 @@ -246,7 +246,7 @@ goog.require('goog.dispose'); goog.require('goog.dom'); goog.require('ol.Map'); goog.require('ol.MapEvent'); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.interaction'); goog.require('ol.interaction.Interaction'); goog.require('ol.interaction.DoubleClickZoom'); diff --git a/test/spec/ol/view2d.test.js b/test/spec/ol/view.test.js similarity index 94% rename from test/spec/ol/view2d.test.js rename to test/spec/ol/view.test.js index b9605b8a37..a1e861f334 100644 --- a/test/spec/ol/view2d.test.js +++ b/test/spec/ol/view.test.js @@ -1,6 +1,6 @@ -goog.provide('ol.test.View2D'); +goog.provide('ol.test.View'); -describe('ol.View2D', function() { +describe('ol.View', function() { describe('create constraints', function() { describe('create resolution constraint', function() { @@ -8,7 +8,7 @@ describe('ol.View2D', function() { describe('with no options', function() { it('gives a correct resolution constraint function', function() { var options = {}; - var fn = ol.View2D.createResolutionConstraint_(options).constraint; + var fn = ol.View.createResolutionConstraint_(options).constraint; expect(fn(156543.03392804097, 0, 0)) .to.roughlyEqual(156543.03392804097, 1e-9); expect(fn(78271.51696402048, 0, 0)) @@ -24,7 +24,7 @@ describe('ol.View2D', function() { maxZoom: 3, zoomFactor: 3 }; - var info = ol.View2D.createResolutionConstraint_(options); + var info = ol.View.createResolutionConstraint_(options); var maxResolution = info.maxResolution; expect(maxResolution).to.eql(81); var minResolution = info.minResolution; @@ -44,7 +44,7 @@ describe('ol.View2D', function() { var options = { resolutions: [97, 76, 65, 54, 0.45] }; - var info = ol.View2D.createResolutionConstraint_(options); + var info = ol.View.createResolutionConstraint_(options); var maxResolution = info.maxResolution; expect(maxResolution).to.eql(97); var minResolution = info.minResolution; @@ -62,7 +62,7 @@ describe('ol.View2D', function() { var defaultMaxRes = 156543.03392804097; function getConstraint(options) { - return ol.View2D.createResolutionConstraint_(options).constraint; + return ol.View.createResolutionConstraint_(options).constraint; } it('works with only maxZoom', function() { @@ -129,7 +129,7 @@ describe('ol.View2D', function() { var defaultMaxRes = 156543.03392804097; function getConstraint(options) { - return ol.View2D.createResolutionConstraint_(options).constraint; + return ol.View.createResolutionConstraint_(options).constraint; } it('works with only maxResolution', function() { @@ -198,7 +198,7 @@ describe('ol.View2D', function() { var defaultMaxRes = 156543.03392804097; function getConstraint(options) { - return ol.View2D.createResolutionConstraint_(options).constraint; + return ol.View.createResolutionConstraint_(options).constraint; } it('respects maxResolution over minZoom', function() { @@ -242,7 +242,7 @@ describe('ol.View2D', function() { describe('create rotation constraint', function() { it('gives a correct rotation constraint function', function() { var options = {}; - var fn = ol.View2D.createRotationConstraint_(options); + var fn = ol.View.createRotationConstraint_(options); expect(fn(0.01, 0)).to.eql(0); expect(fn(0.15, 0)).to.eql(0.15); }); @@ -253,7 +253,7 @@ describe('ol.View2D', function() { describe('#getZoom', function() { var view; beforeEach(function() { - view = new ol.View2D({ + view = new ol.View({ resolutions: [512, 256, 128, 64, 32, 16] }); }); @@ -284,7 +284,7 @@ describe('ol.View2D', function() { describe('#getZoom() - constrained', function() { it('returns correct zoom levels', function() { - var view = new ol.View2D({ + var view = new ol.View({ minZoom: 10, maxZoom: 20 }); @@ -316,7 +316,7 @@ describe('ol.View2D', function() { it('respects custom ol.DEFAULT_MIN_ZOOM', function() { ol.DEFAULT_MIN_ZOOM = 2; - var view = new ol.View2D(); + var view = new ol.View(); view.setZoom(1); expect(view.getZoom()).to.be(2); @@ -333,7 +333,7 @@ describe('ol.View2D', function() { it('gives maxResolution precedence over minZoom', function() { - var view = new ol.View2D({ + var view = new ol.View({ maxResolution: 100, minZoom: 2 // this should get ignored }); @@ -349,7 +349,7 @@ describe('ol.View2D', function() { describe('fitGeometry', function() { var view; beforeEach(function() { - view = new ol.View2D({ + view = new ol.View({ resolutions: [200, 100, 50, 20, 10, 5, 2, 1] }); }); @@ -419,7 +419,7 @@ describe('ol.View2D', function() { describe('centerOn', function() { var view; beforeEach(function() { - view = new ol.View2D({ + view = new ol.View({ resolutions: [200, 100, 50, 20, 10, 5, 2, 1] }); }); @@ -445,6 +445,6 @@ describe('ol.View2D', function() { }); }); -goog.require('ol.View2D'); +goog.require('ol.View'); goog.require('ol.geom.LineString'); goog.require('ol.geom.Point');