From ef9db32ddab6df171496846c48e3a2917f1d0f78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Lemoine?= Date: Fri, 15 Mar 2013 10:38:51 +0100 Subject: [PATCH] Updated --- master/apidoc/{user..html => 44f1750883.html} | 6 +- master/apidoc/global.html | 10 +- master/apidoc/index.html | 6 +- master/apidoc/ol.AnchoredElement.html | 10 +- master/apidoc/ol.Attribution.html | 8 +- master/apidoc/ol.Collection.html | 14 +- master/apidoc/ol.CollectionEvent.html | 10 +- master/apidoc/ol.Color.html | 8 +- master/apidoc/ol.Constraints.html | 6 +- master/apidoc/ol.Coordinate.html | 10 +- master/apidoc/ol.CoverageArea.html | 591 ++++ master/apidoc/ol.Ellipsoid.html | 22 +- master/apidoc/ol.Extent.html | 220 +- master/apidoc/ol.Geolocation.html | 10 +- master/apidoc/ol.Image.html | 10 +- master/apidoc/ol.ImageTile.html | 8 +- master/apidoc/ol.Kinetic.html | 6 +- master/apidoc/ol.Map.html | 28 +- master/apidoc/ol.MapBrowserEvent.html | 10 +- master/apidoc/ol.MapBrowserEventHandler.html | 6 +- master/apidoc/ol.MapEvent.html | 10 +- master/apidoc/ol.Object.html | 12 +- master/apidoc/ol.Pixel.html | 6 +- master/apidoc/ol.PixelBounds.html | 6 +- master/apidoc/ol.Proj4jsProjection.html | 561 ++++ master/apidoc/ol.Projection.html | 6 +- master/apidoc/ol.Rectangle.html | 6 +- master/apidoc/ol.Size.html | 6 +- master/apidoc/ol.Sphere.html | 6 +- master/apidoc/ol.Tile.html | 6 +- master/apidoc/ol.TileCache.html | 12 +- master/apidoc/ol.TileCoord.html | 6 +- master/apidoc/ol.TileCoverageArea.html | 702 ++++ master/apidoc/ol.TileQueue.html | 6 +- master/apidoc/ol.TileRange.html | 8 +- master/apidoc/ol.View.html | 10 +- master/apidoc/ol.View2D.html | 34 +- master/apidoc/ol.control.Attribution.html | 10 +- master/apidoc/ol.control.Control.html | 6 +- master/apidoc/ol.control.DragBox.html | 6 +- master/apidoc/ol.control.MousePosition.html | 8 +- master/apidoc/ol.control.ScaleLine.html | 8 +- master/apidoc/ol.control.Zoom.html | 8 +- .../apidoc/ol.interaction.DblClickZoom.html | 6 +- master/apidoc/ol.interaction.Drag.html | 6 +- master/apidoc/ol.interaction.DragPan.html | 8 +- master/apidoc/ol.interaction.DragRotate.html | 6 +- .../ol.interaction.DragRotateAndZoom.html | 6 +- master/apidoc/ol.interaction.DragZoom.html | 6 +- master/apidoc/ol.interaction.Interaction.html | 6 +- master/apidoc/ol.interaction.Keyboard.html | 6 +- master/apidoc/ol.interaction.KeyboardPan.html | 8 +- .../apidoc/ol.interaction.KeyboardZoom.html | 8 +- .../apidoc/ol.interaction.MouseWheelZoom.html | 6 +- master/apidoc/ol.interaction.Touch.html | 6 +- master/apidoc/ol.interaction.TouchPan.html | 8 +- master/apidoc/ol.interaction.TouchRotate.html | 8 +- .../ol.interaction.TouchRotateAndZoom.html | 447 +++ master/apidoc/ol.interaction.TouchZoom.html | 6 +- master/apidoc/ol.layer.ImageLayer.html | 10 +- master/apidoc/ol.layer.Layer.html | 10 +- master/apidoc/ol.layer.TileLayer.html | 10 +- master/apidoc/ol.overlay.Overlay.html | 787 +++++ master/apidoc/ol.parser.XML.html | 8 +- .../apidoc/ol.parser.ogc.ExceptionReport.html | 8 +- master/apidoc/ol.parser.ogc.OWSCommon_v1.html | 8 +- .../ol.parser.ogc.OWSCommon_v1_1_0.html | 8 +- master/apidoc/ol.parser.ogc.Versioned.html | 12 +- .../apidoc/ol.parser.ogc.WMSCapabilities.html | 14 +- .../ol.parser.ogc.WMSCapabilities_v1.html | 8 +- .../ol.parser.ogc.WMSCapabilities_v1_0_0.html | 8 +- .../ol.parser.ogc.WMSCapabilities_v1_1.html | 8 +- .../ol.parser.ogc.WMSCapabilities_v1_1_0.html | 8 +- .../ol.parser.ogc.WMSCapabilities_v1_1_1.html | 8 +- ...arser.ogc.WMSCapabilities_v1_1_1_WMSC.html | 8 +- .../ol.parser.ogc.WMSCapabilities_v1_3_0.html | 8 +- .../ol.parser.ogc.WMTSCapabilities.html | 14 +- ...ol.parser.ogc.WMTSCapabilities_v1_0_0.html | 8 +- master/apidoc/ol.projection.EPSG3857.html | 14 +- master/apidoc/ol.projection.EPSG4326.html | 8 +- master/apidoc/ol.renderer.Layer.html | 227 +- master/apidoc/ol.renderer.Map.html | 6 +- .../apidoc/ol.renderer.canvas.ImageLayer.html | 228 +- master/apidoc/ol.renderer.canvas.Layer.html | 230 +- master/apidoc/ol.renderer.canvas.Map.html | 6 +- .../apidoc/ol.renderer.canvas.TileLayer.html | 238 +- master/apidoc/ol.renderer.dom.ImageLayer.html | 232 +- master/apidoc/ol.renderer.dom.Layer.html | 236 +- master/apidoc/ol.renderer.dom.Map.html | 6 +- master/apidoc/ol.renderer.dom.TileLayer.html | 232 +- .../ol.renderer.webgl.FragmentShader.html | 6 +- .../apidoc/ol.renderer.webgl.ImageLayer.html | 220 +- master/apidoc/ol.renderer.webgl.Layer.html | 222 +- master/apidoc/ol.renderer.webgl.Map.html | 6 +- master/apidoc/ol.renderer.webgl.Shader.html | 6 +- .../apidoc/ol.renderer.webgl.TileLayer.html | 220 +- .../ol.renderer.webgl.VertexShader.html | 6 +- ...ol.renderer.webgl.map.shader.Fragment.html | 6 +- .../ol.renderer.webgl.map.shader.Vertex.html | 6 +- ...bgl.tilelayerrenderer.shader.Fragment.html | 6 +- ...webgl.tilelayerrenderer.shader.Vertex.html | 6 +- master/apidoc/ol.source.BingMaps.html | 6 +- master/apidoc/ol.source.DebugTileSource.html | 6 +- master/apidoc/ol.source.ImageSource.html | 6 +- master/apidoc/ol.source.ImageTileSource.html | 6 +- master/apidoc/ol.source.MapQuestOSM.html | 6 +- .../apidoc/ol.source.MapQuestOpenAerial.html | 6 +- master/apidoc/ol.source.OpenStreetMap.html | 6 +- master/apidoc/ol.source.SingleImageWMS.html | 6 +- master/apidoc/ol.source.Source.html | 6 +- master/apidoc/ol.source.Stamen.html | 6 +- master/apidoc/ol.source.StaticImage.html | 6 +- master/apidoc/ol.source.TileJSON.html | 6 +- master/apidoc/ol.source.TileSource.html | 6 +- master/apidoc/ol.source.TiledWMS.html | 6 +- master/apidoc/ol.source.WMTS.html | 2156 ------------ master/apidoc/ol.source.XYZ.html | 6 +- master/apidoc/ol.tilegrid.TileGrid.html | 8 +- master/apidoc/ol.tilegrid.WMTS.html | 2691 --------------- master/apidoc/ol.tilegrid.XYZ.html | 6 +- master/apidoc/styles/apidoc.css | 266 ++ master/build/ol-deps.js | 52 +- master/build/ol-simple.js | 301 +- master/build/ol-whitespace.js | 2992 +++++++++++++++-- master/build/ol.css | 2 +- master/build/ol.js | 526 +-- master/examples/bing-maps.html | 7 + master/examples/bing-maps.js | 28 +- master/examples/canvas-tiles-require.js | 2 +- master/examples/canvas-tiles.html | 15 +- master/examples/canvas-tiles.js | 46 +- master/examples/epsg-4326-require.js | 1 - master/examples/example-list.js | 2 +- master/examples/example-list.xml | 2 +- master/examples/full-screen-require.js | 1 - master/examples/mouse-position-require.js | 1 - master/examples/side-by-side-require.js | 2 - master/examples/style-rules-require.js | 15 + master/examples/style-rules.html | 52 + master/examples/style-rules.js | 117 + master/examples/vector-layer-require.js | 14 + master/examples/vector-layer.html | 52 + master/examples/vector-layer.js | 52 + master/examples/wms-custom-proj-require.js | 5 +- master/examples/wms-custom-proj.html | 2 + master/examples/wms-custom-proj.js | 12 +- .../wms-single-image-custom-proj-require.js | 9 + .../wms-single-image-custom-proj.html | 54 + .../examples/wms-single-image-custom-proj.js | 44 + master/examples/wms-single-image.js | 4 +- master/examples/wms-tiled.js | 4 +- master/examples/zoomslider-require.js | 6 + master/examples/zoomslider.html | 115 + master/examples/zoomslider.js | 35 + master/ol/ol/control/attributioncontrol.js | 3 +- master/ol/ol/control/scalelinecontrol.js | 3 +- master/ol/ol/control/zoomcontrol.js | 6 +- master/ol/ol/control/zoomslider.exports | 1 + master/ol/ol/control/zoomslidercontrol.js | 373 ++ master/ol/ol/expression.js | 70 + master/ol/ol/feature.exports | 7 + master/ol/ol/feature.js | 112 + master/ol/ol/filter/extentfilter.js | 39 + master/ol/ol/filter/filter.exports | 7 + master/ol/ol/filter/filter.js | 24 + master/ol/ol/filter/geometryfilter.js | 42 + master/ol/ol/filter/logicalfilter.js | 63 + master/ol/ol/geom/abstractcollection.js | 79 + master/ol/ol/geom/base.js | 14 + master/ol/ol/geom/expression.exports | 1 + master/ol/ol/geom/geometry.exports | 6 + master/ol/ol/geom/geometry.js | 71 + master/ol/ol/geom/geometrycollection.js | 48 + master/ol/ol/geom/linearring.js | 35 + master/ol/ol/geom/linestring.js | 149 + master/ol/ol/geom/multilinestring.js | 72 + master/ol/ol/geom/multipoint.js | 77 + master/ol/ol/geom/multipolygon.js | 73 + master/ol/ol/geom/point.js | 105 + master/ol/ol/geom/polygon.js | 90 + master/ol/ol/geom/sharedvertices.js | 163 + master/ol/ol/layer/vectorlayer.exports | 3 + master/ol/ol/layer/vectorlayer.js | 360 ++ master/ol/ol/ol.js | 8 + master/ol/ol/parser/featureparser.js | 66 + master/ol/ol/parser/geojson.exports | 3 + master/ol/ol/parser/geojson.js | 285 ++ master/ol/ol/parser/parser.js | 8 + master/ol/ol/parser/polyline.js | 335 ++ master/ol/ol/parser/xml.js | 4 + .../ol/renderer/canvas/canvasmaprenderer.js | 11 +- .../canvas/canvasvectorlayerrenderer.js | 404 +++ .../renderer/canvas/canvasvectorrenderer.js | 439 +++ master/ol/ol/renderer/dom/dommaprenderer.js | 12 +- master/ol/ol/renderer/maprenderer.js | 2 + .../ol/ol/renderer/webgl/webglmaprenderer.js | 25 +- master/ol/ol/source/imagetilesource.js | 7 +- master/ol/ol/source/singleimagewmssource.js | 4 +- master/ol/ol/source/tiledwmssource.js | 15 +- master/ol/ol/source/vectorsource.exports | 1 + master/ol/ol/source/vectorsource.js | 15 + master/ol/ol/source/wmtssource.js | 48 +- master/ol/ol/source/xyzsource.js | 3 +- master/ol/ol/structs/rtree.js | 213 ++ master/ol/ol/style.exports | 9 + master/ol/ol/style/icon.js | 160 + master/ol/ol/style/line.js | 128 + master/ol/ol/style/point.js | 33 + master/ol/ol/style/polygon.js | 189 ++ master/ol/ol/style/rule.js | 46 + master/ol/ol/style/shape.js | 230 ++ master/ol/ol/style/style.js | 70 + master/ol/ol/style/symbolizer.js | 33 + master/ol/ol/tilegrid/tilegrid.js | 2 +- master/ol/ol/tileurlfunction.js | 50 +- 215 files changed, 12768 insertions(+), 8296 deletions(-) rename master/apidoc/{user..html => 44f1750883.html} (93%) create mode 100644 master/apidoc/ol.CoverageArea.html create mode 100644 master/apidoc/ol.Proj4jsProjection.html create mode 100644 master/apidoc/ol.TileCoverageArea.html create mode 100644 master/apidoc/ol.interaction.TouchRotateAndZoom.html create mode 100644 master/apidoc/ol.overlay.Overlay.html delete mode 100644 master/apidoc/ol.source.WMTS.html delete mode 100644 master/apidoc/ol.tilegrid.WMTS.html create mode 100644 master/apidoc/styles/apidoc.css create mode 100644 master/examples/style-rules-require.js create mode 100644 master/examples/style-rules.html create mode 100644 master/examples/style-rules.js create mode 100644 master/examples/vector-layer-require.js create mode 100644 master/examples/vector-layer.html create mode 100644 master/examples/vector-layer.js create mode 100644 master/examples/wms-single-image-custom-proj-require.js create mode 100644 master/examples/wms-single-image-custom-proj.html create mode 100644 master/examples/wms-single-image-custom-proj.js create mode 100644 master/examples/zoomslider-require.js create mode 100644 master/examples/zoomslider.html create mode 100644 master/examples/zoomslider.js create mode 100644 master/ol/ol/control/zoomslider.exports create mode 100644 master/ol/ol/control/zoomslidercontrol.js create mode 100644 master/ol/ol/expression.js create mode 100644 master/ol/ol/feature.exports create mode 100644 master/ol/ol/feature.js create mode 100644 master/ol/ol/filter/extentfilter.js create mode 100644 master/ol/ol/filter/filter.exports create mode 100644 master/ol/ol/filter/filter.js create mode 100644 master/ol/ol/filter/geometryfilter.js create mode 100644 master/ol/ol/filter/logicalfilter.js create mode 100644 master/ol/ol/geom/abstractcollection.js create mode 100644 master/ol/ol/geom/base.js create mode 100644 master/ol/ol/geom/expression.exports create mode 100644 master/ol/ol/geom/geometry.exports create mode 100644 master/ol/ol/geom/geometry.js create mode 100644 master/ol/ol/geom/geometrycollection.js create mode 100644 master/ol/ol/geom/linearring.js create mode 100644 master/ol/ol/geom/linestring.js create mode 100644 master/ol/ol/geom/multilinestring.js create mode 100644 master/ol/ol/geom/multipoint.js create mode 100644 master/ol/ol/geom/multipolygon.js create mode 100644 master/ol/ol/geom/point.js create mode 100644 master/ol/ol/geom/polygon.js create mode 100644 master/ol/ol/geom/sharedvertices.js create mode 100644 master/ol/ol/layer/vectorlayer.exports create mode 100644 master/ol/ol/layer/vectorlayer.js create mode 100644 master/ol/ol/parser/featureparser.js create mode 100644 master/ol/ol/parser/geojson.exports create mode 100644 master/ol/ol/parser/geojson.js create mode 100644 master/ol/ol/parser/parser.js create mode 100644 master/ol/ol/parser/polyline.js create mode 100644 master/ol/ol/renderer/canvas/canvasvectorlayerrenderer.js create mode 100644 master/ol/ol/renderer/canvas/canvasvectorrenderer.js create mode 100644 master/ol/ol/source/vectorsource.exports create mode 100644 master/ol/ol/source/vectorsource.js create mode 100644 master/ol/ol/structs/rtree.js create mode 100644 master/ol/ol/style.exports create mode 100644 master/ol/ol/style/icon.js create mode 100644 master/ol/ol/style/line.js create mode 100644 master/ol/ol/style/point.js create mode 100644 master/ol/ol/style/polygon.js create mode 100644 master/ol/ol/style/rule.js create mode 100644 master/ol/ol/style/shape.js create mode 100644 master/ol/ol/style/style.js create mode 100644 master/ol/ol/style/symbolizer.js diff --git a/master/apidoc/user..html b/master/apidoc/44f1750883.html similarity index 93% rename from master/apidoc/user..html rename to master/apidoc/44f1750883.html index 9d27975249..07a97e6501 100644 --- a/master/apidoc/user..html +++ b/master/apidoc/44f1750883.html @@ -135,15 +135,15 @@ items from the cache is the responsibility of the user.
diff --git a/master/apidoc/global.html b/master/apidoc/global.html index 034906e2fc..00ce1e8aaf 100644 --- a/master/apidoc/global.html +++ b/master/apidoc/global.html @@ -298,7 +298,7 @@
Source:
-
+
@@ -377,7 +377,7 @@
Source:
-
+
@@ -419,15 +419,15 @@
diff --git a/master/apidoc/index.html b/master/apidoc/index.html index e47578aba0..3fb1c959c8 100644 --- a/master/apidoc/index.html +++ b/master/apidoc/index.html @@ -48,15 +48,15 @@
diff --git a/master/apidoc/ol.AnchoredElement.html b/master/apidoc/ol.AnchoredElement.html index 588d311e5d..f2a3228c26 100644 --- a/master/apidoc/ol.AnchoredElement.html +++ b/master/apidoc/ol.AnchoredElement.html @@ -381,7 +381,7 @@ -string +string= @@ -412,7 +412,7 @@ -boolean +boolean= @@ -2335,15 +2335,15 @@
diff --git a/master/apidoc/ol.Attribution.html b/master/apidoc/ol.Attribution.html index b4706c6d51..78b5b7472d 100644 --- a/master/apidoc/ol.Attribution.html +++ b/master/apidoc/ol.Attribution.html @@ -114,7 +114,7 @@ -Object.<string, Array.<ol.TileRange>> +Object.<string, Array.<ol.TileRange>>= @@ -426,15 +426,15 @@
diff --git a/master/apidoc/ol.Collection.html b/master/apidoc/ol.Collection.html index 3d6cb70c08..f363375756 100644 --- a/master/apidoc/ol.Collection.html +++ b/master/apidoc/ol.Collection.html @@ -85,7 +85,7 @@ -Array +Array= @@ -390,7 +390,7 @@ -string +string= @@ -421,7 +421,7 @@ -boolean +boolean= @@ -742,7 +742,7 @@ -Object +Object= @@ -2612,15 +2612,15 @@
diff --git a/master/apidoc/ol.CollectionEvent.html b/master/apidoc/ol.CollectionEvent.html index 3c99e36d70..590e39e826 100644 --- a/master/apidoc/ol.CollectionEvent.html +++ b/master/apidoc/ol.CollectionEvent.html @@ -114,7 +114,7 @@ -* +*= @@ -145,7 +145,7 @@ -Object +Object= @@ -299,15 +299,15 @@
diff --git a/master/apidoc/ol.Color.html b/master/apidoc/ol.Color.html index 309ecc5c8e..68cc893eba 100644 --- a/master/apidoc/ol.Color.html +++ b/master/apidoc/ol.Color.html @@ -496,7 +496,7 @@ -number +number= @@ -754,15 +754,15 @@
diff --git a/master/apidoc/ol.Constraints.html b/master/apidoc/ol.Constraints.html index a46486f1fb..1961411736 100644 --- a/master/apidoc/ol.Constraints.html +++ b/master/apidoc/ol.Constraints.html @@ -292,15 +292,15 @@
diff --git a/master/apidoc/ol.Coordinate.html b/master/apidoc/ol.Coordinate.html index 3c6bc81c28..a5b636254c 100644 --- a/master/apidoc/ol.Coordinate.html +++ b/master/apidoc/ol.Coordinate.html @@ -293,7 +293,7 @@ -number +number= @@ -752,7 +752,7 @@ -number +number= @@ -858,15 +858,15 @@
diff --git a/master/apidoc/ol.CoverageArea.html b/master/apidoc/ol.CoverageArea.html new file mode 100644 index 0000000000..ad1c890a2e --- /dev/null +++ b/master/apidoc/ol.CoverageArea.html @@ -0,0 +1,591 @@ + + + + + OpenLayers: Class: ol.CoverageArea + + + + + + + + + + +
+ +

Class: ol.CoverageArea

+ + + + + +
+ +
+

+ ol.CoverageArea +

+ +
+ +
+
+ + + + +
+

new CoverageArea

+ + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
extent + + +ol.Extent + + + + Extent.
+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • coveragearea.js, line 11
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + + + + + + + + + + + +

Members

+ +
+ +
+

extent :ol.Extent

+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • coveragearea.js, line 16
+ + + + + + + +
+ + + +
+ + + +
+

intersectsExtentAndResolution

+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • coveragearea.js, line 35
+ + + + + + + +
+ + + +
+ + + +
+

intersectsExtentAndZ

+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • coveragearea.js, line 43
+ + + + + + + +
+ + + +
+ +
+ + + +

Methods

+ +
+ +
+

intersectsExtent

+ + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
extent + + +ol.Extent + + + + Extent.
+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • coveragearea.js, line 25
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+ Intersects. +
+ + + +
+
+ Type +
+
+ +boolean + + +
+
+ + + + +
+ + + +
+

transform

+ + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
transformFn + + +ol.TransformFunction + + + + Transform.
+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • coveragearea.js, line 50
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+ Transformed coverage area. +
+ + + +
+
+ Type +
+
+ +ol.CoverageArea + + +
+
+ + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + diff --git a/master/apidoc/ol.Ellipsoid.html b/master/apidoc/ol.Ellipsoid.html index 4eda8eebda..8742e399ce 100644 --- a/master/apidoc/ol.Ellipsoid.html +++ b/master/apidoc/ol.Ellipsoid.html @@ -433,7 +433,7 @@ -number +number= @@ -464,7 +464,7 @@ -number +number= @@ -665,7 +665,7 @@ -number +number= @@ -696,7 +696,7 @@ -number +number= @@ -897,7 +897,7 @@ -number +number= @@ -928,7 +928,7 @@ -number +number= @@ -1129,7 +1129,7 @@ -number +number= @@ -1160,7 +1160,7 @@ -number +number= @@ -1266,15 +1266,15 @@
diff --git a/master/apidoc/ol.Extent.html b/master/apidoc/ol.Extent.html index 8ab53a9781..34303d9104 100644 --- a/master/apidoc/ol.Extent.html +++ b/master/apidoc/ol.Extent.html @@ -571,205 +571,7 @@ projection.
-ol.Extent - - -
- - - - - - - - - -
-

<static> getForView2DAndSize

- - -
-
- - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
center - - -ol.Coordinate - - - - Center.
resolution - - -number - - - - Resolution.
rotation - - -number - - - - Rotation.
size - - -ol.Size - - - - Size.
- - - -
- - - - - - - - - - - - - - - - - - - -
Source:
-
  • extent.js, line 55
- - - - - - - -
- - - - - - - -
Returns:
- - -
- Extent. -
- - - -
-
- Type -
-
- -ol.Extent +!ol.Extent
@@ -872,7 +674,7 @@ of the extent.
Source:
-
  • extent.js, line 84
+
  • extent.js, line 55
@@ -1006,7 +808,7 @@ extent.
Source:
-
  • extent.js, line 97
+
  • extent.js, line 68
@@ -1333,7 +1135,7 @@ extent.
Source:
-
  • extent.js, line 106
+
  • extent.js, line 77
@@ -1414,7 +1216,7 @@ extent.
Source:
-
  • extent.js, line 114
+
  • extent.js, line 85
@@ -1753,7 +1555,7 @@ extent.
Source:
-
  • extent.js, line 122
+
  • extent.js, line 93
@@ -1834,7 +1636,7 @@ extent.
Source:
-
  • extent.js, line 130
+
  • extent.js, line 101
@@ -2515,7 +2317,7 @@ extent.
Source:
-
  • extent.js, line 139
+
  • extent.js, line 110
@@ -2573,15 +2375,15 @@ extent.
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:46:34 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:32 GMT+0100 (CET)
diff --git a/master/apidoc/ol.Geolocation.html b/master/apidoc/ol.Geolocation.html index 91a6b50d4d..6d70f355e2 100644 --- a/master/apidoc/ol.Geolocation.html +++ b/master/apidoc/ol.Geolocation.html @@ -378,7 +378,7 @@ -string +string= @@ -409,7 +409,7 @@ -boolean +boolean= @@ -2405,15 +2405,15 @@
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:46:34 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:32 GMT+0100 (CET)
diff --git a/master/apidoc/ol.Image.html b/master/apidoc/ol.Image.html index 65cfe69c87..06d960ece5 100644 --- a/master/apidoc/ol.Image.html +++ b/master/apidoc/ol.Image.html @@ -172,7 +172,7 @@ -string +?string @@ -613,7 +613,7 @@ -Object +Object= @@ -950,15 +950,15 @@
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:46:35 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:32 GMT+0100 (CET)
diff --git a/master/apidoc/ol.ImageTile.html b/master/apidoc/ol.ImageTile.html index 8ef7dd0f6a..1738f94105 100644 --- a/master/apidoc/ol.ImageTile.html +++ b/master/apidoc/ol.ImageTile.html @@ -172,7 +172,7 @@ -string +?string @@ -666,15 +666,15 @@
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:46:35 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:32 GMT+0100 (CET)
diff --git a/master/apidoc/ol.Kinetic.html b/master/apidoc/ol.Kinetic.html index 327adf0518..e0409a9324 100644 --- a/master/apidoc/ol.Kinetic.html +++ b/master/apidoc/ol.Kinetic.html @@ -789,15 +789,15 @@
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:46:40 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:35 GMT+0100 (CET)
diff --git a/master/apidoc/ol.Map.html b/master/apidoc/ol.Map.html index b1c24b123d..3cb7869779 100644 --- a/master/apidoc/ol.Map.html +++ b/master/apidoc/ol.Map.html @@ -406,7 +406,7 @@
Source:
-
  • map.js, line 844
+
  • map.js, line 860
@@ -876,7 +876,7 @@ -string +string= @@ -907,7 +907,7 @@ -boolean +boolean= @@ -2574,7 +2574,7 @@ clicks and gestures on an overlay don't trigger any MapBrowserEvent. -string +string= @@ -3670,7 +3670,7 @@ clicks and gestures on an overlay don't trigger any MapBrowserEvent.
Source:
-
  • map.js, line 758
+
  • map.js, line 774
@@ -3777,7 +3777,7 @@ clicks and gestures on an overlay don't trigger any MapBrowserEvent.
Source:
-
  • map.js, line 770
+
  • map.js, line 786
@@ -3996,7 +3996,7 @@ clicks and gestures on an overlay don't trigger any MapBrowserEvent.
Source:
-
  • map.js, line 782
+
  • map.js, line 798
@@ -4103,7 +4103,7 @@ clicks and gestures on an overlay don't trigger any MapBrowserEvent.
Source:
-
  • map.js, line 794
+
  • map.js, line 810
@@ -4346,7 +4346,7 @@ clicks and gestures on an overlay don't trigger any MapBrowserEvent.
Source:
-
  • map.js, line 806
+
  • map.js, line 822
@@ -4444,7 +4444,7 @@ clicks and gestures on an overlay don't trigger any MapBrowserEvent. -T +T= @@ -4492,7 +4492,7 @@ clicks and gestures on an overlay don't trigger any MapBrowserEvent.
Source:
-
  • map.js, line 819
+
  • map.js, line 835
@@ -4528,15 +4528,15 @@ clicks and gestures on an overlay don't trigger any MapBrowserEvent.
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:46:42 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:37 GMT+0100 (CET)
diff --git a/master/apidoc/ol.MapBrowserEvent.html b/master/apidoc/ol.MapBrowserEvent.html index 4639f7d8d1..e65c2793bc 100644 --- a/master/apidoc/ol.MapBrowserEvent.html +++ b/master/apidoc/ol.MapBrowserEvent.html @@ -172,7 +172,7 @@ -ol.FrameState +?ol.FrameState= @@ -875,7 +875,7 @@ FIXME: replace with goog.events.EventType enum once we use
-

frameState :ol.FrameState

+

frameState :?ol.FrameState

@@ -1311,15 +1311,15 @@ FIXME: replace with goog.events.EventType enum once we use
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:46:43 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:37 GMT+0100 (CET)
diff --git a/master/apidoc/ol.MapBrowserEventHandler.html b/master/apidoc/ol.MapBrowserEventHandler.html index 24f9695d9e..265e851933 100644 --- a/master/apidoc/ol.MapBrowserEventHandler.html +++ b/master/apidoc/ol.MapBrowserEventHandler.html @@ -246,15 +246,15 @@
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:46:43 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:38 GMT+0100 (CET)
diff --git a/master/apidoc/ol.MapEvent.html b/master/apidoc/ol.MapEvent.html index 1ef487e054..9a34668f06 100644 --- a/master/apidoc/ol.MapEvent.html +++ b/master/apidoc/ol.MapEvent.html @@ -143,7 +143,7 @@ -ol.FrameState +?ol.FrameState= @@ -284,7 +284,7 @@
-

frameState :ol.FrameState

+

frameState :?ol.FrameState

@@ -458,15 +458,15 @@
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:46:44 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:38 GMT+0100 (CET)
diff --git a/master/apidoc/ol.Object.html b/master/apidoc/ol.Object.html index 75918c4263..81839b3aed 100644 --- a/master/apidoc/ol.Object.html +++ b/master/apidoc/ol.Object.html @@ -85,7 +85,7 @@ -Object.<string, *> +Object.<string, *>= @@ -1154,7 +1154,7 @@ -string +string= @@ -1185,7 +1185,7 @@ -boolean +boolean= @@ -1997,15 +1997,15 @@
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:46:44 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:38 GMT+0100 (CET)
diff --git a/master/apidoc/ol.Pixel.html b/master/apidoc/ol.Pixel.html index b9eb62eafe..88bd6d1ce2 100644 --- a/master/apidoc/ol.Pixel.html +++ b/master/apidoc/ol.Pixel.html @@ -202,15 +202,15 @@
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:46:51 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:41 GMT+0100 (CET)
diff --git a/master/apidoc/ol.PixelBounds.html b/master/apidoc/ol.PixelBounds.html index 17aa0a9935..89fec75667 100644 --- a/master/apidoc/ol.PixelBounds.html +++ b/master/apidoc/ol.PixelBounds.html @@ -1516,15 +1516,15 @@
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:46:52 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:41 GMT+0100 (CET)
diff --git a/master/apidoc/ol.Proj4jsProjection.html b/master/apidoc/ol.Proj4jsProjection.html new file mode 100644 index 0000000000..f7eed9e95a --- /dev/null +++ b/master/apidoc/ol.Proj4jsProjection.html @@ -0,0 +1,561 @@ + + + + + OpenLayers: Class: ol.Proj4jsProjection + + + + + + + + + + +
+ +

Class: ol.Proj4jsProjection

+ + + + + +
+ +
+

+ ol.Proj4jsProjection +

+ +
+ +
+
+ + + + +
+

new Proj4jsProjection

+ + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
code + + +string + + + + Code.
proj4jsProj + + +Proj4js.Proj + + + + Proj4js projection.
+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • projection.js, line 94
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + +

Extends

+ + + + + + + + + + + + + + + +

Methods

+ +
+ +
+

getCode

+ + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • projection.js, line 66
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+ Code. +
+ + + +
+
+ Type +
+
+ +string + + +
+
+ + + + +
+ + + +
+

getExtent

+ + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • projection.js, line 74
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+ Extent. +
+ + + +
+
+ Type +
+
+ +ol.Extent + + +
+
+ + + + +
+ + + +
+

getProj4jsProj

+ + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • projection.js, line 113
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+ Proj4js projection. +
+ + + +
+
+ Type +
+
+ +Proj4js.Proj + + +
+
+ + + + +
+ + + +
+

getUnits

+ + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • projection.js, line 82
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+ Units. +
+ + + +
+
+ Type +
+
+ +ol.ProjectionUnits + + +
+
+ + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3 on Wed Feb 20 2013 10:37:55 GMT+0100 (CET) +
+ + + + diff --git a/master/apidoc/ol.Projection.html b/master/apidoc/ol.Projection.html index b2a1eede30..970cf57e8c 100644 --- a/master/apidoc/ol.Projection.html +++ b/master/apidoc/ol.Projection.html @@ -901,15 +901,15 @@
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:46:52 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:42 GMT+0100 (CET)
diff --git a/master/apidoc/ol.Rectangle.html b/master/apidoc/ol.Rectangle.html index 4b9bad8534..fd557c18fc 100644 --- a/master/apidoc/ol.Rectangle.html +++ b/master/apidoc/ol.Rectangle.html @@ -1440,15 +1440,15 @@
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:46:54 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:43 GMT+0100 (CET)
diff --git a/master/apidoc/ol.Size.html b/master/apidoc/ol.Size.html index df3f145783..253ca9b3ab 100644 --- a/master/apidoc/ol.Size.html +++ b/master/apidoc/ol.Size.html @@ -335,15 +335,15 @@
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:47:04 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:50 GMT+0100 (CET)
diff --git a/master/apidoc/ol.Sphere.html b/master/apidoc/ol.Sphere.html index 3ad57ef5a1..0d7feb2c0e 100644 --- a/master/apidoc/ol.Sphere.html +++ b/master/apidoc/ol.Sphere.html @@ -1679,15 +1679,15 @@ latitude.
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:47:08 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:53 GMT+0100 (CET)
diff --git a/master/apidoc/ol.Tile.html b/master/apidoc/ol.Tile.html index 66dc5955dd..7ebed340b8 100644 --- a/master/apidoc/ol.Tile.html +++ b/master/apidoc/ol.Tile.html @@ -619,15 +619,15 @@
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:47:08 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:53 GMT+0100 (CET)
diff --git a/master/apidoc/ol.TileCache.html b/master/apidoc/ol.TileCache.html index 24ca7b8f23..879e048d69 100644 --- a/master/apidoc/ol.TileCache.html +++ b/master/apidoc/ol.TileCache.html @@ -85,7 +85,7 @@ -number +number= @@ -160,7 +160,7 @@

Extends

@@ -713,7 +713,7 @@ -Object +Object= @@ -1587,15 +1587,15 @@
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:47:08 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:53 GMT+0100 (CET)
diff --git a/master/apidoc/ol.TileCoord.html b/master/apidoc/ol.TileCoord.html index f1de395e2e..2b53c43400 100644 --- a/master/apidoc/ol.TileCoord.html +++ b/master/apidoc/ol.TileCoord.html @@ -781,15 +781,15 @@
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:47:09 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:54 GMT+0100 (CET)
diff --git a/master/apidoc/ol.TileCoverageArea.html b/master/apidoc/ol.TileCoverageArea.html new file mode 100644 index 0000000000..4cf4415c58 --- /dev/null +++ b/master/apidoc/ol.TileCoverageArea.html @@ -0,0 +1,702 @@ + + + + + OpenLayers: Class: ol.TileCoverageArea + + + + + + + + + + +
+ +

Class: ol.TileCoverageArea

+ + + + + +
+ +
+

+ ol.TileCoverageArea +

+ +
+ +
+
+ + + + +
+

new TileCoverageArea

+ + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
tileGrid + + +ol.tilegrid.TileGrid + + + + Tile grid.
extent + + +ol.Extent + + + + Extent.
minZ + + +number + + + + Minimum Z.
maxZ + + +number + + + + Maximum Z.
+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • tilecoveragearea.js, line 17
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + +

Extends

+ + + + + + + + + + + + + +

Members

+ +
+ +
+

extent :ol.Extent

+ + +
+
+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • coveragearea.js, line 16
+ + + + + + + +
+ + + +
+ +
+ + + +

Methods

+ +
+ +
+

intersectsExtent

+ + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
extent + + +ol.Extent + + + + Extent.
+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • coveragearea.js, line 25
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+ Intersects. +
+ + + +
+
+ Type +
+
+ +boolean + + +
+
+ + + + +
+ + + +
+

intersectsExtentAndResolution

+ + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • tilecoveragearea.js, line 46
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

intersectsExtentAndZ

+ + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • tilecoveragearea.js, line 56
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

transform

+ + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
transformFn + + +ol.TransformFunction + + + + Transform.
+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • tilecoveragearea.js, line 65
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+ Transformed tile coverage area. +
+ + + +
+
+ Type +
+
+ +ol.TileCoverageArea + + +
+
+ + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3 on Wed Nov 14 2012 21:15:24 GMT+0100 (CET) +
+ + + + diff --git a/master/apidoc/ol.TileQueue.html b/master/apidoc/ol.TileQueue.html index dbba082dcc..b28512e794 100644 --- a/master/apidoc/ol.TileQueue.html +++ b/master/apidoc/ol.TileQueue.html @@ -537,15 +537,15 @@
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:47:10 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:54 GMT+0100 (CET)
diff --git a/master/apidoc/ol.TileRange.html b/master/apidoc/ol.TileRange.html index 14d396fb5b..faa2892f20 100644 --- a/master/apidoc/ol.TileRange.html +++ b/master/apidoc/ol.TileRange.html @@ -547,7 +547,7 @@ by its min/max tile coordinates and is inclusive of coordinates.
-ol.TileRange +!ol.TileRange
@@ -1878,15 +1878,15 @@ by its min/max tile coordinates and is inclusive of coordinates.
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:47:10 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:54 GMT+0100 (CET)
diff --git a/master/apidoc/ol.View.html b/master/apidoc/ol.View.html index dda7ec3443..b22084d6d3 100644 --- a/master/apidoc/ol.View.html +++ b/master/apidoc/ol.View.html @@ -424,7 +424,7 @@ -string +string= @@ -455,7 +455,7 @@ -boolean +boolean= @@ -1518,15 +1518,15 @@
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:47:10 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:55 GMT+0100 (CET)
diff --git a/master/apidoc/ol.View2D.html b/master/apidoc/ol.View2D.html index 245b2e4694..095fc04244 100644 --- a/master/apidoc/ol.View2D.html +++ b/master/apidoc/ol.View2D.html @@ -85,7 +85,7 @@ -ol.View2DOptions +ol.View2DOptions= @@ -436,7 +436,7 @@ -string +string= @@ -467,7 +467,7 @@ -boolean +boolean= @@ -2000,7 +2000,7 @@ -number +number= @@ -2178,7 +2178,7 @@ -ol.Coordinate +ol.Coordinate= @@ -2209,7 +2209,7 @@ -number +number= @@ -2387,7 +2387,7 @@ -ol.Coordinate +ol.Coordinate= @@ -2418,7 +2418,7 @@ -number +number= @@ -3598,7 +3598,7 @@ -ol.Coordinate +ol.Coordinate= @@ -3629,7 +3629,7 @@ -number +number= @@ -3804,7 +3804,7 @@ -ol.Coordinate +ol.Coordinate= @@ -3835,7 +3835,7 @@ -number +number= @@ -4013,7 +4013,7 @@ -ol.Coordinate +ol.Coordinate= @@ -4044,7 +4044,7 @@ -number +number= @@ -4128,15 +4128,15 @@
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:47:10 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:55 GMT+0100 (CET)
diff --git a/master/apidoc/ol.control.Attribution.html b/master/apidoc/ol.control.Attribution.html index 13ed365398..c90ebd0855 100644 --- a/master/apidoc/ol.control.Attribution.html +++ b/master/apidoc/ol.control.Attribution.html @@ -85,7 +85,7 @@ -ol.control.AttributionOptions +ol.control.AttributionOptions= @@ -431,7 +431,7 @@ -Object.<string, Object.<string, ol.TileRange>> +?Object.<string, Object.<string, ol.TileRange>> @@ -733,15 +733,15 @@
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:46:31 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:30 GMT+0100 (CET)
diff --git a/master/apidoc/ol.control.Control.html b/master/apidoc/ol.control.Control.html index cc1046c452..7ee1eb585f 100644 --- a/master/apidoc/ol.control.Control.html +++ b/master/apidoc/ol.control.Control.html @@ -491,15 +491,15 @@ to the map here.
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:46:32 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:30 GMT+0100 (CET)
diff --git a/master/apidoc/ol.control.DragBox.html b/master/apidoc/ol.control.DragBox.html index 0509d4c381..d6bfe3ce8e 100644 --- a/master/apidoc/ol.control.DragBox.html +++ b/master/apidoc/ol.control.DragBox.html @@ -447,15 +447,15 @@
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:46:32 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:30 GMT+0100 (CET)
diff --git a/master/apidoc/ol.control.MousePosition.html b/master/apidoc/ol.control.MousePosition.html index 5e1cc6b3b3..6ea339819c 100644 --- a/master/apidoc/ol.control.MousePosition.html +++ b/master/apidoc/ol.control.MousePosition.html @@ -85,7 +85,7 @@ -ol.control.MousePositionOptions +ol.control.MousePositionOptions= @@ -778,15 +778,15 @@
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:46:32 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:31 GMT+0100 (CET)
diff --git a/master/apidoc/ol.control.ScaleLine.html b/master/apidoc/ol.control.ScaleLine.html index 39057d224a..c099f8f2f3 100644 --- a/master/apidoc/ol.control.ScaleLine.html +++ b/master/apidoc/ol.control.ScaleLine.html @@ -85,7 +85,7 @@ -ol.control.ScaleLineOptions +ol.control.ScaleLineOptions= @@ -610,15 +610,15 @@
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:46:33 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:31 GMT+0100 (CET)
diff --git a/master/apidoc/ol.control.Zoom.html b/master/apidoc/ol.control.Zoom.html index 419511ce19..667f6a2822 100644 --- a/master/apidoc/ol.control.Zoom.html +++ b/master/apidoc/ol.control.Zoom.html @@ -85,7 +85,7 @@ -ol.control.ZoomOptions +ol.control.ZoomOptions= @@ -516,15 +516,15 @@ to the map here.
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:46:33 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:31 GMT+0100 (CET)
diff --git a/master/apidoc/ol.interaction.DblClickZoom.html b/master/apidoc/ol.interaction.DblClickZoom.html index be4e9e89f4..a846b48575 100644 --- a/master/apidoc/ol.interaction.DblClickZoom.html +++ b/master/apidoc/ol.interaction.DblClickZoom.html @@ -242,15 +242,15 @@
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:46:36 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:33 GMT+0100 (CET)
diff --git a/master/apidoc/ol.interaction.Drag.html b/master/apidoc/ol.interaction.Drag.html index b10cc5c2a3..a8af2ac8c8 100644 --- a/master/apidoc/ol.interaction.Drag.html +++ b/master/apidoc/ol.interaction.Drag.html @@ -658,15 +658,15 @@
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:46:36 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:33 GMT+0100 (CET)
diff --git a/master/apidoc/ol.interaction.DragPan.html b/master/apidoc/ol.interaction.DragPan.html index 39b3b7af41..ffa36d7247 100644 --- a/master/apidoc/ol.interaction.DragPan.html +++ b/master/apidoc/ol.interaction.DragPan.html @@ -114,7 +114,7 @@ -ol.Kinetic +ol.Kinetic= @@ -832,15 +832,15 @@
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:46:36 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:33 GMT+0100 (CET)
diff --git a/master/apidoc/ol.interaction.DragRotate.html b/master/apidoc/ol.interaction.DragRotate.html index 447a65b323..d830cb892a 100644 --- a/master/apidoc/ol.interaction.DragRotate.html +++ b/master/apidoc/ol.interaction.DragRotate.html @@ -785,15 +785,15 @@
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:46:36 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:33 GMT+0100 (CET)
diff --git a/master/apidoc/ol.interaction.DragRotateAndZoom.html b/master/apidoc/ol.interaction.DragRotateAndZoom.html index 0a86994c0a..258b3c1e9f 100644 --- a/master/apidoc/ol.interaction.DragRotateAndZoom.html +++ b/master/apidoc/ol.interaction.DragRotateAndZoom.html @@ -777,15 +777,15 @@
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:46:37 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:33 GMT+0100 (CET)
diff --git a/master/apidoc/ol.interaction.DragZoom.html b/master/apidoc/ol.interaction.DragZoom.html index bd051b3ffd..3610319827 100644 --- a/master/apidoc/ol.interaction.DragZoom.html +++ b/master/apidoc/ol.interaction.DragZoom.html @@ -777,15 +777,15 @@
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:46:37 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:34 GMT+0100 (CET)
diff --git a/master/apidoc/ol.interaction.Interaction.html b/master/apidoc/ol.interaction.Interaction.html index 4bf43e77c2..66c9555356 100644 --- a/master/apidoc/ol.interaction.Interaction.html +++ b/master/apidoc/ol.interaction.Interaction.html @@ -175,15 +175,15 @@
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:46:37 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:34 GMT+0100 (CET)
diff --git a/master/apidoc/ol.interaction.Keyboard.html b/master/apidoc/ol.interaction.Keyboard.html index 36e9475c5b..38c5f8c13a 100644 --- a/master/apidoc/ol.interaction.Keyboard.html +++ b/master/apidoc/ol.interaction.Keyboard.html @@ -324,15 +324,15 @@
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:46:38 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:34 GMT+0100 (CET)
diff --git a/master/apidoc/ol.interaction.KeyboardPan.html b/master/apidoc/ol.interaction.KeyboardPan.html index 634f6e72a2..de8cdb5fbc 100644 --- a/master/apidoc/ol.interaction.KeyboardPan.html +++ b/master/apidoc/ol.interaction.KeyboardPan.html @@ -85,7 +85,7 @@ -ol.interaction.KeyboardPanOptions +ol.interaction.KeyboardPanOptions= @@ -252,15 +252,15 @@
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:46:38 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:34 GMT+0100 (CET)
diff --git a/master/apidoc/ol.interaction.KeyboardZoom.html b/master/apidoc/ol.interaction.KeyboardZoom.html index 204e337cfb..88a80e1494 100644 --- a/master/apidoc/ol.interaction.KeyboardZoom.html +++ b/master/apidoc/ol.interaction.KeyboardZoom.html @@ -85,7 +85,7 @@ -ol.interaction.KeyboardZoomOptions +ol.interaction.KeyboardZoomOptions= @@ -252,15 +252,15 @@
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:46:38 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:34 GMT+0100 (CET)
diff --git a/master/apidoc/ol.interaction.MouseWheelZoom.html b/master/apidoc/ol.interaction.MouseWheelZoom.html index b35d9c0f07..a505decd12 100644 --- a/master/apidoc/ol.interaction.MouseWheelZoom.html +++ b/master/apidoc/ol.interaction.MouseWheelZoom.html @@ -194,15 +194,15 @@
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:46:38 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:34 GMT+0100 (CET)
diff --git a/master/apidoc/ol.interaction.Touch.html b/master/apidoc/ol.interaction.Touch.html index 30f037e75f..3b290e8d06 100644 --- a/master/apidoc/ol.interaction.Touch.html +++ b/master/apidoc/ol.interaction.Touch.html @@ -511,15 +511,15 @@
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:46:38 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:35 GMT+0100 (CET)
diff --git a/master/apidoc/ol.interaction.TouchPan.html b/master/apidoc/ol.interaction.TouchPan.html index 8cdbaf58c0..5ebffe37a7 100644 --- a/master/apidoc/ol.interaction.TouchPan.html +++ b/master/apidoc/ol.interaction.TouchPan.html @@ -85,7 +85,7 @@ -ol.Kinetic +ol.Kinetic= @@ -535,15 +535,15 @@
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:46:39 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:35 GMT+0100 (CET)
diff --git a/master/apidoc/ol.interaction.TouchRotate.html b/master/apidoc/ol.interaction.TouchRotate.html index 25d44c2af9..b3429e857c 100644 --- a/master/apidoc/ol.interaction.TouchRotate.html +++ b/master/apidoc/ol.interaction.TouchRotate.html @@ -89,7 +89,7 @@ -number +number= @@ -494,15 +494,15 @@
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:46:39 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:35 GMT+0100 (CET)
diff --git a/master/apidoc/ol.interaction.TouchRotateAndZoom.html b/master/apidoc/ol.interaction.TouchRotateAndZoom.html new file mode 100644 index 0000000000..a6e2cfa844 --- /dev/null +++ b/master/apidoc/ol.interaction.TouchRotateAndZoom.html @@ -0,0 +1,447 @@ + + + + + OpenLayers: Class: ol.interaction.TouchRotateAndZoom + + + + + + + + + + +
+ +

Class: ol.interaction.TouchRotateAndZoom

+ + + + + +
+ +
+

+ ol.interaction.TouchRotateAndZoom +

+ +
+ +
+
+ + + + +
+

new TouchRotateAndZoom

+ + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • touchrotateandzoominteraction.js, line 16
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + +

Extends

+ + + + + + + + + + + + + +

Members

+ +
+ +
+

targetTouches :Array.<Object>

+ + +
+
+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • touchinteraction.js, line 35
+ + + + + + + +
+ + + +
+ +
+ + + +

Methods

+ +
+ +
+

handleMapBrowserEvent

+ + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • touchinteraction.js, line 105
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

handleTouchEnd

+ + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • touchrotateandzoominteraction.js, line 118
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

handleTouchMove

+ + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • touchrotateandzoominteraction.js, line 57
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

handleTouchStart

+ + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • touchrotateandzoominteraction.js, line 136
+ + + + + + + +
+ + + + + + + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3 on Sun Mar 03 2013 20:45:27 GMT+0100 (CET) +
+ + + + diff --git a/master/apidoc/ol.interaction.TouchZoom.html b/master/apidoc/ol.interaction.TouchZoom.html index ed689c0a06..e462914064 100644 --- a/master/apidoc/ol.interaction.TouchZoom.html +++ b/master/apidoc/ol.interaction.TouchZoom.html @@ -431,15 +431,15 @@
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:46:39 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:35 GMT+0100 (CET)
diff --git a/master/apidoc/ol.layer.ImageLayer.html b/master/apidoc/ol.layer.ImageLayer.html index d282936c4f..7121eba884 100644 --- a/master/apidoc/ol.layer.ImageLayer.html +++ b/master/apidoc/ol.layer.ImageLayer.html @@ -380,7 +380,7 @@ -string +string= @@ -411,7 +411,7 @@ -boolean +boolean= @@ -2827,15 +2827,15 @@ permitted).
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:46:40 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:36 GMT+0100 (CET)
diff --git a/master/apidoc/ol.layer.Layer.html b/master/apidoc/ol.layer.Layer.html index 429ddfce31..2cdc30aad6 100644 --- a/master/apidoc/ol.layer.Layer.html +++ b/master/apidoc/ol.layer.Layer.html @@ -380,7 +380,7 @@ -string +string= @@ -411,7 +411,7 @@ -boolean +boolean= @@ -2671,15 +2671,15 @@ permitted).
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:46:41 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:36 GMT+0100 (CET)
diff --git a/master/apidoc/ol.layer.TileLayer.html b/master/apidoc/ol.layer.TileLayer.html index d437d18bd6..1ac6092cc1 100644 --- a/master/apidoc/ol.layer.TileLayer.html +++ b/master/apidoc/ol.layer.TileLayer.html @@ -380,7 +380,7 @@ -string +string= @@ -411,7 +411,7 @@ -boolean +boolean= @@ -2827,15 +2827,15 @@ permitted).
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:46:42 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:36 GMT+0100 (CET)
diff --git a/master/apidoc/ol.overlay.Overlay.html b/master/apidoc/ol.overlay.Overlay.html new file mode 100644 index 0000000000..bfcb4aff3a --- /dev/null +++ b/master/apidoc/ol.overlay.Overlay.html @@ -0,0 +1,787 @@ + + + + + OpenLayers: Class: ol.overlay.Overlay + + + + + + + + + + +
+ +

Class: ol.overlay.Overlay

+ + + + + +
+ +
+

+ ol.overlay.Overlay +

+ +
+ +
+
+ + + + +
+

new Overlay

+ + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
overlayOptions + + +ol.overlay.OverlayOptions + + + + Overlay options.
+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • overlay.js, line 13
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + + + + + + + + + + + + + +

Methods

+ +
+ +
+

getElement

+ + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • overlay.js, line 93
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+ The DOM element for the overlay. +
+ + + +
+
+ Type +
+
+ +Element + + +
+
+ + + + +
+ + + +
+

getMap

+ + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • overlay.js, line 128
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+ Map. +
+ + + +
+
+ Type +
+
+ +ol.Map + + +
+
+ + + + +
+ + + +
+

setCoordinate

+ + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
coordinate + + +ol.Coordinate + + + + Coordinate for the overlay's position on + the map.
+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • overlay.js, line 67
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

setElement

+ + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
element + + +Element + + + + The DOM element for the overlay.
+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • overlay.js, line 76
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

setMap

+ + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
map + + +ol.Map + + + + Map.
+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • overlay.js, line 101
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

setPositioning

+ + +
+
+ + +
+ Set the CSS properties to use for x- and y-positioning of the element. If +not set, the default is {@code ['left', 'bottom']}. +
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
positioning + + +Array.<string> + + + + The positioning.
+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • overlay.js, line 138
+ + + + + + + +
+ + + + + + + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3 on Wed Nov 14 2012 21:15:15 GMT+0100 (CET) +
+ + + + diff --git a/master/apidoc/ol.parser.XML.html b/master/apidoc/ol.parser.XML.html index 6a3b2a3395..48f3e46d64 100644 --- a/master/apidoc/ol.parser.XML.html +++ b/master/apidoc/ol.parser.XML.html @@ -281,7 +281,7 @@
-Element +?Element
@@ -968,15 +968,15 @@ provided).
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:46:51 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:41 GMT+0100 (CET)
diff --git a/master/apidoc/ol.parser.ogc.ExceptionReport.html b/master/apidoc/ol.parser.ogc.ExceptionReport.html index c1f8e06218..a5fc875423 100644 --- a/master/apidoc/ol.parser.ogc.ExceptionReport.html +++ b/master/apidoc/ol.parser.ogc.ExceptionReport.html @@ -292,7 +292,7 @@
-Element +?Element
@@ -1136,15 +1136,15 @@ provided).
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:46:45 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:38 GMT+0100 (CET)
diff --git a/master/apidoc/ol.parser.ogc.OWSCommon_v1.html b/master/apidoc/ol.parser.ogc.OWSCommon_v1.html index 25caf7634e..40463f69ac 100644 --- a/master/apidoc/ol.parser.ogc.OWSCommon_v1.html +++ b/master/apidoc/ol.parser.ogc.OWSCommon_v1.html @@ -292,7 +292,7 @@
-Element +?Element
@@ -999,15 +999,15 @@ provided).
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:46:45 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:38 GMT+0100 (CET)
diff --git a/master/apidoc/ol.parser.ogc.OWSCommon_v1_1_0.html b/master/apidoc/ol.parser.ogc.OWSCommon_v1_1_0.html index c9601dd0b4..17557bf081 100644 --- a/master/apidoc/ol.parser.ogc.OWSCommon_v1_1_0.html +++ b/master/apidoc/ol.parser.ogc.OWSCommon_v1_1_0.html @@ -292,7 +292,7 @@
-Element +?Element
@@ -999,15 +999,15 @@ provided).
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:46:45 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:39 GMT+0100 (CET)
diff --git a/master/apidoc/ol.parser.ogc.Versioned.html b/master/apidoc/ol.parser.ogc.Versioned.html index ca59e1806c..a14bec751d 100644 --- a/master/apidoc/ol.parser.ogc.Versioned.html +++ b/master/apidoc/ol.parser.ogc.Versioned.html @@ -368,7 +368,7 @@ -Object +Object= @@ -539,7 +539,7 @@ -Object +Object= @@ -711,7 +711,7 @@ -Object +Object= @@ -820,15 +820,15 @@
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:46:45 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:39 GMT+0100 (CET)
diff --git a/master/apidoc/ol.parser.ogc.WMSCapabilities.html b/master/apidoc/ol.parser.ogc.WMSCapabilities.html index deee3b26c5..423d4e902e 100644 --- a/master/apidoc/ol.parser.ogc.WMSCapabilities.html +++ b/master/apidoc/ol.parser.ogc.WMSCapabilities.html @@ -85,7 +85,7 @@ -Object +Object= @@ -389,7 +389,7 @@ -Object +Object= @@ -565,7 +565,7 @@ -Object +Object= @@ -742,7 +742,7 @@ -Object +Object= @@ -856,15 +856,15 @@
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:46:46 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:39 GMT+0100 (CET)
diff --git a/master/apidoc/ol.parser.ogc.WMSCapabilities_v1.html b/master/apidoc/ol.parser.ogc.WMSCapabilities_v1.html index 8617eb412f..e12b9fb66e 100644 --- a/master/apidoc/ol.parser.ogc.WMSCapabilities_v1.html +++ b/master/apidoc/ol.parser.ogc.WMSCapabilities_v1.html @@ -292,7 +292,7 @@
-Element +?Element
@@ -1134,15 +1134,15 @@ provided).
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:46:46 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:39 GMT+0100 (CET)
diff --git a/master/apidoc/ol.parser.ogc.WMSCapabilities_v1_0_0.html b/master/apidoc/ol.parser.ogc.WMSCapabilities_v1_0_0.html index 3bde977491..1e194097c3 100644 --- a/master/apidoc/ol.parser.ogc.WMSCapabilities_v1_0_0.html +++ b/master/apidoc/ol.parser.ogc.WMSCapabilities_v1_0_0.html @@ -292,7 +292,7 @@
-Element +?Element
@@ -1139,15 +1139,15 @@ provided).
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:46:46 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:39 GMT+0100 (CET)
diff --git a/master/apidoc/ol.parser.ogc.WMSCapabilities_v1_1.html b/master/apidoc/ol.parser.ogc.WMSCapabilities_v1_1.html index a71794cedb..30e9a4d7b5 100644 --- a/master/apidoc/ol.parser.ogc.WMSCapabilities_v1_1.html +++ b/master/apidoc/ol.parser.ogc.WMSCapabilities_v1_1.html @@ -292,7 +292,7 @@
-Element +?Element
@@ -1139,15 +1139,15 @@ provided).
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:46:47 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:40 GMT+0100 (CET)
diff --git a/master/apidoc/ol.parser.ogc.WMSCapabilities_v1_1_0.html b/master/apidoc/ol.parser.ogc.WMSCapabilities_v1_1_0.html index a7aa326ecd..8aca013751 100644 --- a/master/apidoc/ol.parser.ogc.WMSCapabilities_v1_1_0.html +++ b/master/apidoc/ol.parser.ogc.WMSCapabilities_v1_1_0.html @@ -292,7 +292,7 @@
-Element +?Element
@@ -1139,15 +1139,15 @@ provided).
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:46:47 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:40 GMT+0100 (CET)
diff --git a/master/apidoc/ol.parser.ogc.WMSCapabilities_v1_1_1.html b/master/apidoc/ol.parser.ogc.WMSCapabilities_v1_1_1.html index b7796abacd..5ccd95d9fc 100644 --- a/master/apidoc/ol.parser.ogc.WMSCapabilities_v1_1_1.html +++ b/master/apidoc/ol.parser.ogc.WMSCapabilities_v1_1_1.html @@ -292,7 +292,7 @@
-Element +?Element
@@ -1139,15 +1139,15 @@ provided).
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:46:48 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:40 GMT+0100 (CET)
diff --git a/master/apidoc/ol.parser.ogc.WMSCapabilities_v1_1_1_WMSC.html b/master/apidoc/ol.parser.ogc.WMSCapabilities_v1_1_1_WMSC.html index 0d4087d94a..775c070841 100644 --- a/master/apidoc/ol.parser.ogc.WMSCapabilities_v1_1_1_WMSC.html +++ b/master/apidoc/ol.parser.ogc.WMSCapabilities_v1_1_1_WMSC.html @@ -292,7 +292,7 @@
-Element +?Element
@@ -1139,15 +1139,15 @@ provided).
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:46:48 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:40 GMT+0100 (CET)
diff --git a/master/apidoc/ol.parser.ogc.WMSCapabilities_v1_3_0.html b/master/apidoc/ol.parser.ogc.WMSCapabilities_v1_3_0.html index 3c4e5ac270..bec214a4c9 100644 --- a/master/apidoc/ol.parser.ogc.WMSCapabilities_v1_3_0.html +++ b/master/apidoc/ol.parser.ogc.WMSCapabilities_v1_3_0.html @@ -292,7 +292,7 @@
-Element +?Element
@@ -1139,15 +1139,15 @@ provided).
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:46:49 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:41 GMT+0100 (CET)
diff --git a/master/apidoc/ol.parser.ogc.WMTSCapabilities.html b/master/apidoc/ol.parser.ogc.WMTSCapabilities.html index 51fdf8f4d4..68586048ae 100644 --- a/master/apidoc/ol.parser.ogc.WMTSCapabilities.html +++ b/master/apidoc/ol.parser.ogc.WMTSCapabilities.html @@ -85,7 +85,7 @@ -Object +Object= @@ -389,7 +389,7 @@ -Object +Object= @@ -565,7 +565,7 @@ -Object +Object= @@ -742,7 +742,7 @@ -Object +Object= @@ -856,15 +856,15 @@
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:46:49 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:41 GMT+0100 (CET)
diff --git a/master/apidoc/ol.parser.ogc.WMTSCapabilities_v1_0_0.html b/master/apidoc/ol.parser.ogc.WMTSCapabilities_v1_0_0.html index 0eab97ba5f..e50c3c3b12 100644 --- a/master/apidoc/ol.parser.ogc.WMTSCapabilities_v1_0_0.html +++ b/master/apidoc/ol.parser.ogc.WMTSCapabilities_v1_0_0.html @@ -292,7 +292,7 @@
-Element +?Element
@@ -1134,15 +1134,15 @@ provided).
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:46:50 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:41 GMT+0100 (CET)
diff --git a/master/apidoc/ol.projection.EPSG3857.html b/master/apidoc/ol.projection.EPSG3857.html index 75354194e8..f70504db3a 100644 --- a/master/apidoc/ol.projection.EPSG3857.html +++ b/master/apidoc/ol.projection.EPSG3857.html @@ -1264,7 +1264,7 @@ -Array.<number> +Array.<number>= @@ -1295,7 +1295,7 @@ -number +number= @@ -1467,7 +1467,7 @@ -Array.<number> +Array.<number>= @@ -1498,7 +1498,7 @@ -number +number= @@ -1604,15 +1604,15 @@
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:46:53 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:42 GMT+0100 (CET)
diff --git a/master/apidoc/ol.projection.EPSG4326.html b/master/apidoc/ol.projection.EPSG4326.html index 74697c4db9..99c6f89218 100644 --- a/master/apidoc/ol.projection.EPSG4326.html +++ b/master/apidoc/ol.projection.EPSG4326.html @@ -114,7 +114,7 @@ -string +string= @@ -1099,15 +1099,15 @@
- Documentation generated by JSDoc 3 on Mon Mar 11 2013 16:46:53 GMT+0100 (CET) + Documentation generated by JSDoc 3 on Mon Mar 11 2013 13:34:42 GMT+0100 (CET)
diff --git a/master/apidoc/ol.renderer.Layer.html b/master/apidoc/ol.renderer.Layer.html index ee1a3210f0..d745cce223 100644 --- a/master/apidoc/ol.renderer.Layer.html +++ b/master/apidoc/ol.renderer.Layer.html @@ -146,7 +146,7 @@
Source:
-
  • layerrenderer.js, line 28
+
  • layerrenderer.js, line 27
@@ -271,7 +271,7 @@
Source:
-
  • layerrenderer.js, line 116
+
  • layerrenderer.js, line 115
@@ -317,7 +317,7 @@
Source:
-
  • layerrenderer.js, line 122
+
  • layerrenderer.js, line 121
@@ -363,7 +363,7 @@
Source:
-
  • layerrenderer.js, line 128
+
  • layerrenderer.js, line 127
@@ -409,7 +409,7 @@
Source:
-
  • layerrenderer.js, line 163
+
  • layerrenderer.js, line 162
@@ -455,7 +455,7 @@
Source:
-
  • layerrenderer.js, line 48
+
  • layerrenderer.js, line 47
@@ -501,7 +501,7 @@
Source:
-
  • layerrenderer.js, line 207
+
  • layerrenderer.js, line 206
@@ -679,7 +679,7 @@ -string +string= @@ -710,7 +710,7 @@ -boolean +boolean= @@ -940,7 +940,7 @@
Source:
-
  • layerrenderer.js, line 296
+
  • layerrenderer.js, line 295
@@ -1021,7 +1021,7 @@
Source:
-
  • layerrenderer.js, line 84
+
  • layerrenderer.js, line 83
@@ -1304,7 +1304,7 @@
Source:
-
  • layerrenderer.js, line 92
+
  • layerrenderer.js, line 91
@@ -1385,7 +1385,7 @@
Source:
-
  • layerrenderer.js, line 100
+
  • layerrenderer.js, line 99
@@ -1466,7 +1466,7 @@
Source:
-
  • layerrenderer.js, line 108
+
  • layerrenderer.js, line 107
@@ -1599,7 +1599,7 @@
Source:
-
  • layerrenderer.js, line 136
+
  • layerrenderer.js, line 135
@@ -1658,7 +1658,7 @@
Source:
-
  • layerrenderer.js, line 147
+
  • layerrenderer.js, line 146
@@ -1717,7 +1717,7 @@
Source:
-
  • layerrenderer.js, line 155
+
  • layerrenderer.js, line 154
@@ -1776,7 +1776,7 @@
Source:
-
  • layerrenderer.js, line 169
+
  • layerrenderer.js, line 168
@@ -1887,7 +1887,7 @@
Source:
-
  • layerrenderer.js, line 193
+
  • layerrenderer.js, line 192
@@ -2129,7 +2129,7 @@
Source:
-
  • layerrenderer.js, line 215
+
  • layerrenderer.js, line 214
@@ -2394,181 +2394,6 @@ -
- - - -
-

<protected> snapCenterToPixel

- - -
-
- - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
center - - -ol.Coordinate - - - - Center.
resolution - - -number - - - - Resolution.
size - - -ol.Size - - - - Size.
- - - -
- - - - - - - - - - - - - - - - - - - -
Source:
-
  • layerrenderer.js, line 312
- - - - - - - -
- - - - - - - -
Returns:
- - -
- Snapped center. -
- - - -
-
- Type -
-
- -ol.Coordinate - - -
-
- - - -
@@ -2862,7 +2687,7 @@
Source:
-
+
@@ -3038,7 +2863,7 @@
Source:
-
+
@@ -3191,7 +3016,7 @@
Source:
-
+
@@ -3227,15 +3052,15 @@
diff --git a/master/apidoc/ol.renderer.Map.html b/master/apidoc/ol.renderer.Map.html index 98d351c638..c7f195450e 100644 --- a/master/apidoc/ol.renderer.Map.html +++ b/master/apidoc/ol.renderer.Map.html @@ -1756,15 +1756,15 @@
diff --git a/master/apidoc/ol.renderer.canvas.ImageLayer.html b/master/apidoc/ol.renderer.canvas.ImageLayer.html index 2591a356f6..46d164e2b7 100644 --- a/master/apidoc/ol.renderer.canvas.ImageLayer.html +++ b/master/apidoc/ol.renderer.canvas.ImageLayer.html @@ -276,7 +276,7 @@
Source:
-
+
@@ -327,7 +327,7 @@
Source:
-
+
@@ -378,7 +378,7 @@
Source:
-
+
@@ -429,7 +429,7 @@
Source:
-
+
@@ -480,7 +480,7 @@
Source:
-
+
@@ -658,7 +658,7 @@ -string +string= @@ -689,7 +689,7 @@ -boolean +boolean= @@ -924,7 +924,7 @@
Source:
-
+
@@ -1010,7 +1010,7 @@
Source:
-
+
@@ -1438,7 +1438,7 @@
Source:
-
+
@@ -1524,7 +1524,7 @@
Source:
-
+
@@ -1610,7 +1610,7 @@
Source:
-
+
@@ -1807,7 +1807,7 @@
Source:
-
+
@@ -1871,7 +1871,7 @@
Source:
-
+
@@ -1935,7 +1935,7 @@
Source:
-
+
@@ -1999,7 +1999,7 @@
Source:
-
+
@@ -2115,7 +2115,7 @@
Source:
-
+
@@ -2421,7 +2421,7 @@
Source:
-
+
@@ -2686,186 +2686,6 @@ - - - - -
-

<protected> snapCenterToPixel

- - -
-
- - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
center - - -ol.Coordinate - - - - Center.
resolution - - -number - - - - Resolution.
size - - -ol.Size - - - - Size.
- - - -
- - - - - - - -
Inherited From:
-
- - - - - - - - - - - - - -
Source:
-
  • layerrenderer.js, line 312
- - - - - - - -
- - - - - - - -
Returns:
- - -
- Snapped center. -
- - - -
-
- Type -
-
- -ol.Coordinate - - -
-
- - - -
@@ -3164,7 +2984,7 @@
Source:
-
+
@@ -3345,7 +3165,7 @@
Source:
-
+
@@ -3503,7 +3323,7 @@
Source:
-
+
@@ -3539,15 +3359,15 @@
diff --git a/master/apidoc/ol.renderer.canvas.Layer.html b/master/apidoc/ol.renderer.canvas.Layer.html index f340fcf9d7..c2ae069d63 100644 --- a/master/apidoc/ol.renderer.canvas.Layer.html +++ b/master/apidoc/ol.renderer.canvas.Layer.html @@ -368,7 +368,7 @@
Source:
-
+
@@ -419,7 +419,7 @@
Source:
-
+
@@ -470,7 +470,7 @@
Source:
-
+
@@ -521,7 +521,7 @@
Source:
-
+
@@ -572,7 +572,7 @@
Source:
-
+
@@ -623,7 +623,7 @@
Source:
-
+
@@ -801,7 +801,7 @@ -string +string= @@ -832,7 +832,7 @@ -boolean +boolean= @@ -1067,7 +1067,7 @@
Source:
-
+
@@ -1153,7 +1153,7 @@
Source:
-
+
@@ -1441,7 +1441,7 @@
Source:
-
+
@@ -1527,7 +1527,7 @@
Source:
-
+
@@ -1613,7 +1613,7 @@
Source:
-
+
@@ -1751,7 +1751,7 @@
Source:
-
+
@@ -1815,7 +1815,7 @@
Source:
-
+
@@ -1879,7 +1879,7 @@
Source:
-
+
@@ -1943,7 +1943,7 @@
Source:
-
+
@@ -2059,7 +2059,7 @@
Source:
-
+
@@ -2306,7 +2306,7 @@
Source:
-
+
@@ -2571,186 +2571,6 @@ - - - - -
-

<protected> snapCenterToPixel

- - -
-
- - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
center - - -ol.Coordinate - - - - Center.
resolution - - -number - - - - Resolution.
size - - -ol.Size - - - - Size.
- - - -
- - - - - - - -
Inherited From:
-
- - - - - - - - - - - - - -
Source:
-
  • layerrenderer.js, line 312
- - - - - - - -
- - - - - - - -
Returns:
- - -
- Snapped center. -
- - - -
-
- Type -
-
- -ol.Coordinate - - -
-
- - - -
@@ -3049,7 +2869,7 @@
Source:
-
+
@@ -3230,7 +3050,7 @@
Source:
-
+
@@ -3388,7 +3208,7 @@
Source:
-
+
@@ -3424,15 +3244,15 @@
diff --git a/master/apidoc/ol.renderer.canvas.Map.html b/master/apidoc/ol.renderer.canvas.Map.html index 6f24b8660d..96bb911b96 100644 --- a/master/apidoc/ol.renderer.canvas.Map.html +++ b/master/apidoc/ol.renderer.canvas.Map.html @@ -1778,15 +1778,15 @@
diff --git a/master/apidoc/ol.renderer.canvas.TileLayer.html b/master/apidoc/ol.renderer.canvas.TileLayer.html index ea662c6e7f..f69a45e0ff 100644 --- a/master/apidoc/ol.renderer.canvas.TileLayer.html +++ b/master/apidoc/ol.renderer.canvas.TileLayer.html @@ -146,7 +146,7 @@
Source:
-
+
@@ -276,7 +276,7 @@
Source:
-
+
@@ -327,7 +327,7 @@
Source:
-
+
@@ -378,7 +378,7 @@
Source:
-
+
@@ -429,7 +429,7 @@
Source:
-
+
@@ -480,7 +480,7 @@
Source:
-
+
@@ -658,7 +658,7 @@ -string +string= @@ -689,7 +689,7 @@ -boolean +boolean= @@ -924,7 +924,7 @@
Source:
-
+
@@ -1010,7 +1010,7 @@
Source:
-
+
@@ -1203,7 +1203,7 @@
Source:
-
+
@@ -1357,7 +1357,7 @@
Source:
-
+
@@ -1443,7 +1443,7 @@
Source:
-
+
@@ -1529,7 +1529,7 @@
Source:
-
+
@@ -1610,7 +1610,7 @@
Source:
-
+
@@ -1691,7 +1691,7 @@
Source:
-
+
@@ -1807,7 +1807,7 @@
Source:
-
+
@@ -1871,7 +1871,7 @@
Source:
-
+
@@ -1935,7 +1935,7 @@
Source:
-
+
@@ -1999,7 +1999,7 @@
Source:
-
+
@@ -2115,7 +2115,7 @@
Source:
-
+
@@ -2286,7 +2286,7 @@
Source:
-
+
@@ -2421,7 +2421,7 @@
Source:
-
+
@@ -2686,186 +2686,6 @@ - - - - -
-

<protected> snapCenterToPixel

- - -
-
- - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
center - - -ol.Coordinate - - - - Center.
resolution - - -number - - - - Resolution.
size - - -ol.Size - - - - Size.
- - - -
- - - - - - - -
Inherited From:
-
- - - - - - - - - - - - - -
Source:
-
  • layerrenderer.js, line 312
- - - - - - - -
- - - - - - - -
Returns:
- - -
- Snapped center. -
- - - -
-
- Type -
-
- -ol.Coordinate - - -
-
- - - -
@@ -3164,7 +2984,7 @@
Source:
-
+
@@ -3345,7 +3165,7 @@
Source:
-
+
@@ -3503,7 +3323,7 @@
Source:
-
+
@@ -3539,15 +3359,15 @@
diff --git a/master/apidoc/ol.renderer.dom.ImageLayer.html b/master/apidoc/ol.renderer.dom.ImageLayer.html index d8fb402e13..634d3adab4 100644 --- a/master/apidoc/ol.renderer.dom.ImageLayer.html +++ b/master/apidoc/ol.renderer.dom.ImageLayer.html @@ -276,7 +276,7 @@
Source:
-
+
@@ -327,7 +327,7 @@
Source:
-
+
@@ -378,7 +378,7 @@
Source:
-
+
@@ -429,7 +429,7 @@
Source:
-
+
@@ -480,7 +480,7 @@
Source:
-
+
@@ -548,7 +548,7 @@
-

<protected> target :Element

+

<protected> target :!Element

@@ -709,7 +709,7 @@ -string +string= @@ -740,7 +740,7 @@ -boolean +boolean= @@ -975,7 +975,7 @@
Source:
-
+
@@ -1061,7 +1061,7 @@
Source:
-
+
@@ -1494,7 +1494,7 @@
Source:
-
+
@@ -1580,7 +1580,7 @@
Source:
-
+
@@ -1666,7 +1666,7 @@
Source:
-
+
@@ -1783,7 +1783,7 @@
-Element +!Element
@@ -1890,7 +1890,7 @@
Source:
-
+
@@ -1954,7 +1954,7 @@
Source:
-
+
@@ -2018,7 +2018,7 @@
Source:
-
+
@@ -2082,7 +2082,7 @@
Source:
-
+
@@ -2198,7 +2198,7 @@
Source:
-
+
@@ -2504,7 +2504,7 @@
Source:
-
+
@@ -2876,186 +2876,6 @@ - - - - -
-

<protected> snapCenterToPixel

- - -
-
- - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
center - - -ol.Coordinate - - - - Center.
resolution - - -number - - - - Resolution.
size - - -ol.Size - - - - Size.
- - - -
- - - - - - - -
Inherited From:
-
- - - - - - - - - - - - - -
Source:
-
  • layerrenderer.js, line 312
- - - - - - - -
- - - - - - - -
Returns:
- - -
- Snapped center. -
- - - -
-
- Type -
-
- -ol.Coordinate - - -
-
- - - -
@@ -3354,7 +3174,7 @@
Source:
-
+
@@ -3535,7 +3355,7 @@
Source:
-
+
@@ -3693,7 +3513,7 @@
Source:
-
+
@@ -3729,15 +3549,15 @@
diff --git a/master/apidoc/ol.renderer.dom.Layer.html b/master/apidoc/ol.renderer.dom.Layer.html index ad17ab944a..ac419defcd 100644 --- a/master/apidoc/ol.renderer.dom.Layer.html +++ b/master/apidoc/ol.renderer.dom.Layer.html @@ -129,7 +129,7 @@ -Element +!Element @@ -299,7 +299,7 @@
Source:
-
+
@@ -350,7 +350,7 @@
Source:
-
+
@@ -401,7 +401,7 @@
Source:
-
+
@@ -452,7 +452,7 @@
Source:
-
+
@@ -503,7 +503,7 @@
Source:
-
+
@@ -554,7 +554,7 @@
Source:
-
+
@@ -622,7 +622,7 @@
-

<protected> target :Element

+

<protected> target :!Element

@@ -778,7 +778,7 @@ -string +string= @@ -809,7 +809,7 @@ -boolean +boolean= @@ -1044,7 +1044,7 @@
Source:
-
+
@@ -1130,7 +1130,7 @@
Source:
-
+
@@ -1477,7 +1477,7 @@
Source:
-
+
@@ -1563,7 +1563,7 @@
Source:
-
+
@@ -1649,7 +1649,7 @@
Source:
-
+
@@ -1761,7 +1761,7 @@
-Element +!Element
@@ -1868,7 +1868,7 @@
Source:
-
+
@@ -1932,7 +1932,7 @@
Source:
-
+
@@ -1996,7 +1996,7 @@
Source:
-
+
@@ -2060,7 +2060,7 @@
Source:
-
+
@@ -2176,7 +2176,7 @@
Source:
-
+
@@ -2423,7 +2423,7 @@
Source:
-
+
@@ -2688,186 +2688,6 @@ - - - - -
-

<protected> snapCenterToPixel

- - -
-
- - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
center - - -ol.Coordinate - - - - Center.
resolution - - -number - - - - Resolution.
size - - -ol.Size - - - - Size.
- - - -
- - - - - - - -
Inherited From:
-
- - - - - - - - - - - - - -
Source:
-
  • layerrenderer.js, line 312
- - - - - - - -
- - - - - - - -
Returns:
- - -
- Snapped center. -
- - - -
-
- Type -
-
- -ol.Coordinate - - -
-
- - - -
@@ -3166,7 +2986,7 @@
Source:
-
+
@@ -3347,7 +3167,7 @@
Source:
-
+
@@ -3505,7 +3325,7 @@
Source:
-
+
@@ -3541,15 +3361,15 @@
diff --git a/master/apidoc/ol.renderer.dom.Map.html b/master/apidoc/ol.renderer.dom.Map.html index 488ac752c2..f4f61b6f73 100644 --- a/master/apidoc/ol.renderer.dom.Map.html +++ b/master/apidoc/ol.renderer.dom.Map.html @@ -1717,15 +1717,15 @@
diff --git a/master/apidoc/ol.renderer.dom.TileLayer.html b/master/apidoc/ol.renderer.dom.TileLayer.html index 8cd3a48ec3..e9ab3d02a7 100644 --- a/master/apidoc/ol.renderer.dom.TileLayer.html +++ b/master/apidoc/ol.renderer.dom.TileLayer.html @@ -276,7 +276,7 @@
Source:
-
+
@@ -327,7 +327,7 @@
Source:
-
+
@@ -378,7 +378,7 @@
Source:
-
+
@@ -429,7 +429,7 @@
Source:
-
+
@@ -480,7 +480,7 @@
Source:
-
+
@@ -548,7 +548,7 @@
-

<protected> target :Element

+

<protected> target :!Element

@@ -709,7 +709,7 @@ -string +string= @@ -740,7 +740,7 @@ -boolean +boolean= @@ -975,7 +975,7 @@
Source:
-
+
@@ -1061,7 +1061,7 @@
Source:
-
+
@@ -1413,7 +1413,7 @@
Source:
-
+
@@ -1499,7 +1499,7 @@
Source:
-
+
@@ -1585,7 +1585,7 @@
Source:
-
+
@@ -1702,7 +1702,7 @@
-Element +!Element
@@ -1890,7 +1890,7 @@
Source:
-
+
@@ -1954,7 +1954,7 @@
Source:
-
+
@@ -2018,7 +2018,7 @@
Source:
-
+
@@ -2082,7 +2082,7 @@
Source:
-
+
@@ -2198,7 +2198,7 @@
Source:
-
+
@@ -2504,7 +2504,7 @@
Source:
-
+
@@ -2769,186 +2769,6 @@ - - - - -
-

<protected> snapCenterToPixel

- - -
-
- - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
center - - -ol.Coordinate - - - - Center.
resolution - - -number - - - - Resolution.
size - - -ol.Size - - - - Size.
- - - -
- - - - - - - -
Inherited From:
-
- - - - - - - - - - - - - -
Source:
-
  • layerrenderer.js, line 312
- - - - - - - -
- - - - - - - -
Returns:
- - -
- Snapped center. -
- - - -
-
- Type -
-
- -ol.Coordinate - - -
-
- - - -
@@ -3247,7 +3067,7 @@
Source:
-
+
@@ -3428,7 +3248,7 @@
Source:
-
+
@@ -3586,7 +3406,7 @@
Source:
-
+
@@ -3622,15 +3442,15 @@
diff --git a/master/apidoc/ol.renderer.webgl.FragmentShader.html b/master/apidoc/ol.renderer.webgl.FragmentShader.html index 292ec68678..ce43588f2f 100644 --- a/master/apidoc/ol.renderer.webgl.FragmentShader.html +++ b/master/apidoc/ol.renderer.webgl.FragmentShader.html @@ -383,15 +383,15 @@
diff --git a/master/apidoc/ol.renderer.webgl.ImageLayer.html b/master/apidoc/ol.renderer.webgl.ImageLayer.html index acb218016a..f4b747a0d8 100644 --- a/master/apidoc/ol.renderer.webgl.ImageLayer.html +++ b/master/apidoc/ol.renderer.webgl.ImageLayer.html @@ -276,7 +276,7 @@
Source:
-
+
@@ -454,7 +454,7 @@ -string +string= @@ -485,7 +485,7 @@ -boolean +boolean= @@ -720,7 +720,7 @@
Source:
-
+
@@ -806,7 +806,7 @@
Source:
-
+
@@ -1094,7 +1094,7 @@
-goog.vec.Mat4.Float32 +!goog.vec.Mat4.Float32
@@ -1320,7 +1320,7 @@
Source:
-
+
@@ -1406,7 +1406,7 @@
Source:
-
+
@@ -1807,7 +1807,7 @@
Source:
-
+
@@ -2063,7 +2063,7 @@
Source:
-
+
@@ -2127,7 +2127,7 @@
Source:
-
+
@@ -2255,7 +2255,7 @@
Source:
-
+
@@ -2430,7 +2430,7 @@
Source:
-
+
@@ -2736,7 +2736,7 @@
Source:
-
+
@@ -3001,186 +3001,6 @@ - - - - -
-

<protected> snapCenterToPixel

- - -
-
- - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
center - - -ol.Coordinate - - - - Center.
resolution - - -number - - - - Resolution.
size - - -ol.Size - - - - Size.
- - - -
- - - - - - - -
Inherited From:
-
- - - - - - - - - - - - - -
Source:
-
  • layerrenderer.js, line 312
- - - - - - - -
- - - - - - - -
Returns:
- - -
- Snapped center. -
- - - -
-
- Type -
-
- -ol.Coordinate - - -
-
- - - -
@@ -3479,7 +3299,7 @@
Source:
-
+
@@ -3660,7 +3480,7 @@
Source:
-
+
@@ -3818,7 +3638,7 @@
Source:
-
+
@@ -3854,15 +3674,15 @@
diff --git a/master/apidoc/ol.renderer.webgl.Layer.html b/master/apidoc/ol.renderer.webgl.Layer.html index eeee112933..ff82654655 100644 --- a/master/apidoc/ol.renderer.webgl.Layer.html +++ b/master/apidoc/ol.renderer.webgl.Layer.html @@ -464,7 +464,7 @@
Source:
-
+
@@ -515,7 +515,7 @@
Source:
-
+
@@ -693,7 +693,7 @@ -string +string= @@ -724,7 +724,7 @@ -boolean +boolean= @@ -959,7 +959,7 @@
Source:
-
+
@@ -1045,7 +1045,7 @@
Source:
-
+
@@ -1269,7 +1269,7 @@
-goog.vec.Mat4.Float32 +!goog.vec.Mat4.Float32
@@ -1414,7 +1414,7 @@
Source:
-
+
@@ -1500,7 +1500,7 @@
Source:
-
+
@@ -1719,7 +1719,7 @@
Source:
-
+
@@ -1960,7 +1960,7 @@
Source:
-
+
@@ -2024,7 +2024,7 @@
Source:
-
+
@@ -2147,7 +2147,7 @@
Source:
-
+
@@ -2263,7 +2263,7 @@
Source:
-
+
@@ -2510,7 +2510,7 @@
Source:
-
+
@@ -2775,186 +2775,6 @@ - - - - -
-

<protected> snapCenterToPixel

- - -
-
- - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
center - - -ol.Coordinate - - - - Center.
resolution - - -number - - - - Resolution.
size - - -ol.Size - - - - Size.
- - - -
- - - - - - - -
Inherited From:
-
- - - - - - - - - - - - - -
Source:
-
  • layerrenderer.js, line 312
- - - - - - - -
- - - - - - - -
Returns:
- - -
- Snapped center. -
- - - -
-
- Type -
-
- -ol.Coordinate - - -
-
- - - -
@@ -3253,7 +3073,7 @@
Source:
-
+
@@ -3434,7 +3254,7 @@
Source:
-
+
@@ -3592,7 +3412,7 @@
Source:
-
+
@@ -3628,15 +3448,15 @@
diff --git a/master/apidoc/ol.renderer.webgl.Map.html b/master/apidoc/ol.renderer.webgl.Map.html index ff9d573215..2d0045244a 100644 --- a/master/apidoc/ol.renderer.webgl.Map.html +++ b/master/apidoc/ol.renderer.webgl.Map.html @@ -2523,15 +2523,15 @@
diff --git a/master/apidoc/ol.renderer.webgl.Shader.html b/master/apidoc/ol.renderer.webgl.Shader.html index 906fafe044..d6e05f32e8 100644 --- a/master/apidoc/ol.renderer.webgl.Shader.html +++ b/master/apidoc/ol.renderer.webgl.Shader.html @@ -354,15 +354,15 @@
diff --git a/master/apidoc/ol.renderer.webgl.TileLayer.html b/master/apidoc/ol.renderer.webgl.TileLayer.html index dd4d390e7b..d3394a8f5b 100644 --- a/master/apidoc/ol.renderer.webgl.TileLayer.html +++ b/master/apidoc/ol.renderer.webgl.TileLayer.html @@ -276,7 +276,7 @@
Source:
-
+
@@ -454,7 +454,7 @@ -string +string= @@ -485,7 +485,7 @@ -boolean +boolean= @@ -720,7 +720,7 @@
Source:
-
+
@@ -806,7 +806,7 @@
Source:
-
+
@@ -1094,7 +1094,7 @@
-goog.vec.Mat4.Float32 +!goog.vec.Mat4.Float32
@@ -1239,7 +1239,7 @@
Source:
-
+
@@ -1325,7 +1325,7 @@
Source:
-
+
@@ -1807,7 +1807,7 @@
Source:
-
+
@@ -2063,7 +2063,7 @@
Source:
-
+
@@ -2127,7 +2127,7 @@
Source:
-
+
@@ -2255,7 +2255,7 @@
Source:
-
+
@@ -2430,7 +2430,7 @@
Source:
-
+
@@ -2736,7 +2736,7 @@
Source:
-
+
@@ -3001,186 +3001,6 @@ - - - - -
-

<protected> snapCenterToPixel

- - -
-
- - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
center - - -ol.Coordinate - - - - Center.
resolution - - -number - - - - Resolution.
size - - -ol.Size - - - - Size.
- - - -
- - - - - - - -
Inherited From:
-
- - - - - - - - - - - - - -
Source:
-
  • layerrenderer.js, line 312
- - - - - - - -
- - - - - - - -
Returns:
- - -
- Snapped center. -
- - - -
-
- Type -
-
- -ol.Coordinate - - -
-
- - - -
@@ -3479,7 +3299,7 @@
Source:
-
+
@@ -3660,7 +3480,7 @@
Source:
-
+
@@ -3818,7 +3638,7 @@
Source:
-
+
@@ -3854,15 +3674,15 @@
diff --git a/master/apidoc/ol.renderer.webgl.VertexShader.html b/master/apidoc/ol.renderer.webgl.VertexShader.html index 1e122fa271..8314c35058 100644 --- a/master/apidoc/ol.renderer.webgl.VertexShader.html +++ b/master/apidoc/ol.renderer.webgl.VertexShader.html @@ -383,15 +383,15 @@
diff --git a/master/apidoc/ol.renderer.webgl.map.shader.Fragment.html b/master/apidoc/ol.renderer.webgl.map.shader.Fragment.html index a83ed9b66d..bac3a9bbb0 100644 --- a/master/apidoc/ol.renderer.webgl.map.shader.Fragment.html +++ b/master/apidoc/ol.renderer.webgl.map.shader.Fragment.html @@ -347,15 +347,15 @@
diff --git a/master/apidoc/ol.renderer.webgl.map.shader.Vertex.html b/master/apidoc/ol.renderer.webgl.map.shader.Vertex.html index 2bc971ad51..ce8503ad6c 100644 --- a/master/apidoc/ol.renderer.webgl.map.shader.Vertex.html +++ b/master/apidoc/ol.renderer.webgl.map.shader.Vertex.html @@ -340,15 +340,15 @@
diff --git a/master/apidoc/ol.renderer.webgl.tilelayerrenderer.shader.Fragment.html b/master/apidoc/ol.renderer.webgl.tilelayerrenderer.shader.Fragment.html index 991b59f872..bff85a080c 100644 --- a/master/apidoc/ol.renderer.webgl.tilelayerrenderer.shader.Fragment.html +++ b/master/apidoc/ol.renderer.webgl.tilelayerrenderer.shader.Fragment.html @@ -340,15 +340,15 @@
diff --git a/master/apidoc/ol.renderer.webgl.tilelayerrenderer.shader.Vertex.html b/master/apidoc/ol.renderer.webgl.tilelayerrenderer.shader.Vertex.html index 21426ce6bd..e00d21bd60 100644 --- a/master/apidoc/ol.renderer.webgl.tilelayerrenderer.shader.Vertex.html +++ b/master/apidoc/ol.renderer.webgl.tilelayerrenderer.shader.Vertex.html @@ -340,15 +340,15 @@
diff --git a/master/apidoc/ol.source.BingMaps.html b/master/apidoc/ol.source.BingMaps.html index b7bf9c10cf..61b363771d 100644 --- a/master/apidoc/ol.source.BingMaps.html +++ b/master/apidoc/ol.source.BingMaps.html @@ -1868,15 +1868,15 @@ loaded tiles.
diff --git a/master/apidoc/ol.source.DebugTileSource.html b/master/apidoc/ol.source.DebugTileSource.html index 9e84977437..d0073c27f6 100644 --- a/master/apidoc/ol.source.DebugTileSource.html +++ b/master/apidoc/ol.source.DebugTileSource.html @@ -1784,15 +1784,15 @@ loaded tiles.
diff --git a/master/apidoc/ol.source.ImageSource.html b/master/apidoc/ol.source.ImageSource.html index 170866c7f7..c402dda495 100644 --- a/master/apidoc/ol.source.ImageSource.html +++ b/master/apidoc/ol.source.ImageSource.html @@ -1367,15 +1367,15 @@
diff --git a/master/apidoc/ol.source.ImageTileSource.html b/master/apidoc/ol.source.ImageTileSource.html index f94ca40d8b..9d20d9f8d1 100644 --- a/master/apidoc/ol.source.ImageTileSource.html +++ b/master/apidoc/ol.source.ImageTileSource.html @@ -1834,15 +1834,15 @@ loaded tiles.
diff --git a/master/apidoc/ol.source.MapQuestOSM.html b/master/apidoc/ol.source.MapQuestOSM.html index b65de8ea6a..00478e7801 100644 --- a/master/apidoc/ol.source.MapQuestOSM.html +++ b/master/apidoc/ol.source.MapQuestOSM.html @@ -1811,15 +1811,15 @@ loaded tiles.
diff --git a/master/apidoc/ol.source.MapQuestOpenAerial.html b/master/apidoc/ol.source.MapQuestOpenAerial.html index 8b84ae6773..1d899688b4 100644 --- a/master/apidoc/ol.source.MapQuestOpenAerial.html +++ b/master/apidoc/ol.source.MapQuestOpenAerial.html @@ -1811,15 +1811,15 @@ loaded tiles.
diff --git a/master/apidoc/ol.source.OpenStreetMap.html b/master/apidoc/ol.source.OpenStreetMap.html index e2bb6d1b3c..67c2fb9ec9 100644 --- a/master/apidoc/ol.source.OpenStreetMap.html +++ b/master/apidoc/ol.source.OpenStreetMap.html @@ -1811,15 +1811,15 @@ loaded tiles.
diff --git a/master/apidoc/ol.source.SingleImageWMS.html b/master/apidoc/ol.source.SingleImageWMS.html index 79a33aa559..bcdb4afb95 100644 --- a/master/apidoc/ol.source.SingleImageWMS.html +++ b/master/apidoc/ol.source.SingleImageWMS.html @@ -1394,15 +1394,15 @@
diff --git a/master/apidoc/ol.source.Source.html b/master/apidoc/ol.source.Source.html index b7444358fa..5a19d0003e 100644 --- a/master/apidoc/ol.source.Source.html +++ b/master/apidoc/ol.source.Source.html @@ -902,15 +902,15 @@
diff --git a/master/apidoc/ol.source.Stamen.html b/master/apidoc/ol.source.Stamen.html index 5cb5f332eb..849f7077c6 100644 --- a/master/apidoc/ol.source.Stamen.html +++ b/master/apidoc/ol.source.Stamen.html @@ -1859,15 +1859,15 @@ loaded tiles.
diff --git a/master/apidoc/ol.source.StaticImage.html b/master/apidoc/ol.source.StaticImage.html index 1f6a8d8e26..5cd2065a51 100644 --- a/master/apidoc/ol.source.StaticImage.html +++ b/master/apidoc/ol.source.StaticImage.html @@ -1526,15 +1526,15 @@
diff --git a/master/apidoc/ol.source.TileJSON.html b/master/apidoc/ol.source.TileJSON.html index 9412abd69b..9381719196 100644 --- a/master/apidoc/ol.source.TileJSON.html +++ b/master/apidoc/ol.source.TileJSON.html @@ -1820,15 +1820,15 @@ loaded tiles.
diff --git a/master/apidoc/ol.source.TileSource.html b/master/apidoc/ol.source.TileSource.html index 93a958c741..def80623cd 100644 --- a/master/apidoc/ol.source.TileSource.html +++ b/master/apidoc/ol.source.TileSource.html @@ -1710,15 +1710,15 @@ loaded tiles.
diff --git a/master/apidoc/ol.source.TiledWMS.html b/master/apidoc/ol.source.TiledWMS.html index 6de884e617..ed71cf3077 100644 --- a/master/apidoc/ol.source.TiledWMS.html +++ b/master/apidoc/ol.source.TiledWMS.html @@ -1859,15 +1859,15 @@ loaded tiles.
diff --git a/master/apidoc/ol.source.WMTS.html b/master/apidoc/ol.source.WMTS.html deleted file mode 100644 index c94da8b54f..0000000000 --- a/master/apidoc/ol.source.WMTS.html +++ /dev/null @@ -1,2156 +0,0 @@ - - - - - OpenLayers: Class: ol.source.WMTS - - - - - - - - - - -
- -

Class: ol.source.WMTS

- - - - - -
- -
-

- ol.source.WMTS -

- -
- -
-
- - - - -
-

new WMTS

- - -
-
- - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
wmtsOptions - - -ol.source.WMTSOptions - - - - WMTS options.
- - - -
- - - - - - - - - - - - - - - - - - - -
Source:
-
  • wmtssource.js, line 30
- - - - - - - -
- - - - - - - - - -
- - -
- - -

Extends

- - - - - - - - - - - - - -

Members

- -
- -
-

isReady

- - -
-
- - - -
- - - - - - - -
Inherited From:
-
- - - - - - - - - - - - - -
Source:
-
  • source.js, line 95
- - - - - - - -
- - - -
- - - -
-

<protected> tileGrid :ol.tilegrid.TileGrid

- - -
-
- - - -
- - - - - - - -
Inherited From:
-
- - - - - - - - - - - - - -
Source:
-
  • tilesource.js, line 49
- - - - - - - -
- - - -
- - - -
-

<protected> tileUrlFunction :ol.TileUrlFunctionType

- - -
-
- - - -
- - - - - - - -
Inherited From:
-
- - - - - - - - - - - - - -
Source:
-
  • imagetilesource.js, line 49
- - - - - - - -
- - - -
- -
- - - -

Methods

- -
- -
-

<static> optionsFromCapabilities

- - -
-
- - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
wmtsCap - - -Object - - - - An object representing the capabilities document.
layer - - -string - - - - The layer identifier.
- - - -
- - - - - - - - - - - - - - - - - - - -
Source:
-
  • wmtssource.js, line 174
- - - - - - - -
- - - - - - - -
Returns:
- - -
- WMTS source options object. -
- - - -
-
- Type -
-
- -ol.source.WMTSOptions - - -
-
- - - - -
- - - -
-

canExpireCache

- - -
-
- - - - - - - - - - -
- - - - - - - -
Inherited From:
-
- - - - - - - - - - - - - -
Source:
-
  • imagetilesource.js, line 73
- - - - - - - -
- - - - - - - - - -
- - - -
-

<protected> dispatchLoadEvent

- - -
-
- - - - - - - - - - -
- - - - - - - -
Inherited From:
-
- - - - - - - - - - - - - -
Source:
-
  • source.js, line 57
- - - - - - - -
- - - - - - - - - -
- - - -
-

expireCache

- - -
-
- - - - - - - - - - -
- - - - - - - -
Inherited From:
-
- - - - - - - - - - - - - -
Source:
-
  • imagetilesource.js, line 81
- - - - - - - -
- - - - - - - - - -
- - - -
-

findLoadedTiles

- - -
-
- - -
- Look for loaded tiles over a given tile range and zoom level. Adds -properties to the provided lookup representing key/tile pairs for already -loaded tiles. -
- - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
loadedTilesByZ - - -Object.<number, Object.<string, ol.Tile>> - - - - A lookup of - loaded tiles by zoom level.
getTileIfLoaded - - -function(ol.TileCoord): ol.Tile - - - - A function that - returns the tile only if it is fully loaded.
z - - -number - - - - Zoom level.
tileRange - - -ol.TileRange - - - - Tile range.
- - - -
- - - - - - - -
Inherited From:
-
- - - - - - - - - - - - - -
Source:
-
  • tilesource.js, line 81
- - - - - - - -
- - - - - - - -
Returns:
- - -
- The tile range is fully covered with loaded tiles. -
- - - -
-
- Type -
-
- -boolean - - -
-
- - - - -
- - - -
-

getAttributions

- - -
-
- - - - - - - - - - -
- - - - - - - -
Inherited From:
-
- - - - - - - - - - - - - -
Source:
-
  • source.js, line 65
- - - - - - - -
- - - - - - - -
Returns:
- - -
- Attributions. -
- - - -
-
- Type -
-
- -Array.<ol.Attribution> - - -
-
- - - - -
- - - -
-

getExtent

- - -
-
- - - - - - - - - - -
- - - - - - - -
Inherited From:
-
- - - - - - - - - - - - - -
Source:
-
  • source.js, line 73
- - - - - - - -
- - - - - - - -
Returns:
- - -
- Extent. -
- - - -
-
- Type -
-
- -ol.Extent - - -
-
- - - - -
- - - -
-

getOpaque

- - -
-
- - - - - - - - - - -
- - - - - - - -
Inherited From:
-
- - - - - - - - - - - - - -
Source:
-
  • tilesource.js, line 111
- - - - - - - -
- - - - - - - -
Returns:
- - -
- Opaque. -
- - - -
-
- Type -
-
- -boolean - - -
-
- - - - -
- - - -
-

getProjection

- - -
-
- - - - - - - - - - -
- - - - - - - -
Inherited From:
-
- - - - - - - - - - - - - -
Source:
-
  • source.js, line 81
- - - - - - - -
- - - - - - - -
Returns:
- - -
- Projection. -
- - - -
-
- Type -
-
- -ol.Projection - - -
-
- - - - -
- - - -
-

getResolutions

- - -
-
- - - - - - - - - - -
- - - - - - - -
Inherited From:
-
- - - - - - - - - - - - - -
Source:
-
  • tilesource.js, line 119
- - - - - - - -
- - - - - - - - - -
- - - -
-

getTile

- - -
-
- - - - - - - - - - -
- - - - - - - -
Inherited From:
-
- - - - - - - - - - - - - -
Source:
-
  • imagetilesource.js, line 89
- - - - - - - -
- - - - - - - - - -
- - - -
-

getTileGrid

- - -
-
- - - - - - - - - - -
- - - - - - - -
Inherited From:
-
- - - - - - - - - - - - - -
Source:
-
  • tilesource.js, line 136
- - - - - - - -
- - - - - - - -
Returns:
- - -
- Tile grid. -
- - - -
-
- Type -
-
- -ol.tilegrid.TileGrid - - -
-
- - - - -
- - - -
-

setAttributions

- - -
-
- - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
attributions - - -Array.<ol.Attribution> - - - - Attributions.
- - - -
- - - - - - - -
Inherited From:
-
- - - - - - - - - - - - - -
Source:
-
  • source.js, line 101
- - - - - - - -
- - - - - - - - - -
- - - -
-

setExtent

- - -
-
- - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
extent - - -ol.Extent - - - - Extent.
- - - -
- - - - - - - -
Inherited From:
-
- - - - - - - - - - - - - -
Source:
-
  • source.js, line 109
- - - - - - - -
- - - - - - - - - -
- - - -
-

setProjection

- - -
-
- - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
projection - - -ol.Projection - - - - Projetion.
- - - -
- - - - - - - -
Inherited From:
-
- - - - - - - - - - - - - -
Source:
-
  • source.js, line 117
- - - - - - - -
- - - - - - - - - -
- - - -
-

useLowResolutionTiles

- - -
-
- - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
z - - -number - - - - Z.
extent - - -ol.Extent - - - - Extent.
tileGrid - - -ol.tilegrid.TileGrid - - - - Tile grid.
- - - -
- - - - - - - -
Inherited From:
-
- - - - - - - - - - - - - -
Source:
-
  • tilesource.js, line 146
- - - - - - - -
- - - - - - - - - -
- - - -
-

useTile

- - -
-
- - - - - - - - - - -
- - - - - - - -
Inherited From:
-
- - - - - - - - - - - - - -
Source:
-
  • imagetilesource.js, line 112
- - - - - - - -
- - - - - - - - - -
- - - -
-

<inner> createFromWMTSTemplate

- - -
-
- - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
template - - -string - - - - Template.
- - - -
- - - - - - - - - - - - - - - - - - - -
Source:
-
  • wmtssource.js, line 92
- - - - - - - -
- - - - - - - -
Returns:
- - -
- Tile URL function. -
- - - -
-
- Type -
-
- -ol.TileUrlFunctionType - - -
-
- - - - -
- -
- - - - - -
- -
- - - - -
- - - -
- - - - - - diff --git a/master/apidoc/ol.source.XYZ.html b/master/apidoc/ol.source.XYZ.html index f3098a4e03..bfe381ffbd 100644 --- a/master/apidoc/ol.source.XYZ.html +++ b/master/apidoc/ol.source.XYZ.html @@ -1905,15 +1905,15 @@ loaded tiles.
diff --git a/master/apidoc/ol.tilegrid.TileGrid.html b/master/apidoc/ol.tilegrid.TileGrid.html index 113cc3ba25..9fe8191db2 100644 --- a/master/apidoc/ol.tilegrid.TileGrid.html +++ b/master/apidoc/ol.tilegrid.TileGrid.html @@ -268,7 +268,7 @@ -T +T= @@ -2254,15 +2254,15 @@ assigned the higher tile coordinate.
diff --git a/master/apidoc/ol.tilegrid.WMTS.html b/master/apidoc/ol.tilegrid.WMTS.html deleted file mode 100644 index 89004cd1c8..0000000000 --- a/master/apidoc/ol.tilegrid.WMTS.html +++ /dev/null @@ -1,2691 +0,0 @@ - - - - - OpenLayers: Class: ol.tilegrid.WMTS - - - - - - - - - - -
- -

Class: ol.tilegrid.WMTS

- - - - - -
- -
-

- ol.tilegrid.WMTS -

- -
- -
-
- - - - -
-

new WMTS

- - -
-
- - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
wmtsOptions - - -ol.tilegrid.WMTSOptions - - - - WMTS options.
- - - -
- - - - - - - - - - - - - - - - - - - -
Source:
-
  • wmtstilegrid.js, line 14
- - - - - - - -
- - - - - - - - - -
- - -
- - -

Extends

- - - - - - - - - - - - - - - -

Methods

- -
- -
-

<static> createFromCapabilitiesMatrixSet

- - -
-
- - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
matrixSet - - -Object - - - - An object representing a matrixSet in the - capabilities document.
- - - -
- - - - - - - - - - - - - - - - - - - -
Source:
-
  • wmtstilegrid.js, line 61
- - - - - - - -
- - - - - - - -
Returns:
- - -
- WMTS tileGrid instance. -
- - - -
-
- Type -
-
- -ol.tilegrid.WMTS - - -
-
- - - - -
- - - -
-

forEachTileCoordParentTileRange

- - -
-
- - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeArgumentDescription
tileCoord - - -ol.TileCoord - - - - - - - - Tile coordinate.
callback - - -function(this: T, number, ol.TileRange): boolean - - - - - - - - Callback.
obj - - -T - - - - - - <optional>
- - - -
(Optional) Object.
- - - -
- - - - - - - -
Inherited From:
-
- - - - - - - - - - - - - -
Source:
-
  • tilegrid.js, line 102
- - - - - - - -
- - - - - - - - - -
- - - -
-

getMatrixId

- - -
-
- - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
z - - -number - - - - Z.
- - - -
- - - - - - - - - - - - - - - - - - - -
Source:
-
  • wmtstilegrid.js, line 42
- - - - - - - -
- - - - - - - -
Returns:
- - -
- MatrixId.. -
- - - -
-
- Type -
-
- -string - - -
-
- - - - -
- - - -
-

getMatrixIds

- - -
-
- - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
Source:
-
  • wmtstilegrid.js, line 51
- - - - - - - -
- - - - - - - -
Returns:
- - -
- MatrixIds. -
- - - -
-
- Type -
-
- -Array.<string> - - -
-
- - - - -
- - - -
-

getOrigin

- - -
-
- - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
z - - -number - - - - Z.
- - - -
- - - - - - - -
Inherited From:
-
- - - - - - - - - - - - - -
Source:
-
  • tilegrid.js, line 120
- - - - - - - -
- - - - - - - -
Returns:
- - -
- Origin. -
- - - -
-
- Type -
-
- -ol.Coordinate - - -
-
- - - - -
- - - -
-

getPixelBoundsForTileCoordAndResolution

- - -
-
- - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
tileCoord - - -ol.TileCoord - - - - Tile coordinate.
resolution - - -number - - - - Resolution.
- - - -
- - - - - - - -
Inherited From:
-
- - - - - - - - - - - - - -
Source:
-
  • tilegrid.js, line 136
- - - - - - - -
- - - - - - - -
Returns:
- - -
- Pixel bounds. -
- - - -
-
- Type -
-
- -ol.PixelBounds - - -
-
- - - - -
- - - -
-

getResolution

- - -
-
- - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
z - - -number - - - - Z.
- - - -
- - - - - - - -
Inherited From:
-
- - - - - - - - - - - - - -
Source:
-
  • tilegrid.js, line 155
- - - - - - - -
- - - - - - - -
Returns:
- - -
- Resolution. -
- - - -
-
- Type -
-
- -number - - -
-
- - - - -
- - - -
-

getResolutions

- - -
-
- - - - - - - - - - -
- - - - - - - -
Inherited From:
-
- - - - - - - - - - - - - -
Source:
-
  • tilegrid.js, line 164
- - - - - - - -
- - - - - - - -
Returns:
- - -
- Resolutions. -
- - - -
-
- Type -
-
- -Array.<number> - - -
-
- - - - -
- - - -
-

getTileCoordCenter

- - -
-
- - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
tileCoord - - -ol.TileCoord - - - - Tile coordinate.
- - - -
- - - - - - - -
Inherited From:
-
- - - - - - - - - - - - - -
Source:
-
  • tilegrid.js, line 216
- - - - - - - -
- - - - - - - -
Returns:
- - -
- Tile center. -
- - - -
-
- Type -
-
- -ol.Coordinate - - -
-
- - - - -
- - - -
-

getTileCoordExtent

- - -
-
- - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
tileCoord - - -ol.TileCoord - - - - Tile coordinate.
- - - -
- - - - - - - -
Inherited From:
-
- - - - - - - - - - - - - -
Source:
-
  • tilegrid.js, line 230
- - - - - - - -
- - - - - - - -
Returns:
- - -
- Extent. -
- - - -
-
- Type -
-
- -ol.Extent - - -
-
- - - - -
- - - -
-

getTileCoordForCoordAndResolution

- - -
-
- - -
- Get the tile coordinate for the given map coordinate and resolution. This -method considers that coordinates that intersect tile boundaries should be -assigned the higher tile coordinate. -
- - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
coordinate - - -ol.Coordinate - - - - Coordinate.
resolution - - -number - - - - Resolution.
- - - -
- - - - - - - -
Inherited From:
-
- - - - - - - - - - - - - -
Source:
-
  • tilegrid.js, line 251
- - - - - - - -
- - - - - - - -
Returns:
- - -
- Tile coordinate. -
- - - -
-
- Type -
-
- -ol.TileCoord - - -
-
- - - - -
- - - -
-

getTileCoordForCoordAndZ

- - -
-
- - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
coordinate - - -ol.Coordinate - - - - Coordinate.
z - - -number - - - - Z.
- - - -
- - - - - - - -
Inherited From:
-
- - - - - - - - - - - - - -
Source:
-
  • tilegrid.js, line 293
- - - - - - - -
- - - - - - - -
Returns:
- - -
- Tile coordinate. -
- - - -
-
- Type -
-
- -ol.TileCoord - - -
-
- - - - -
- - - -
-

getTileCoordResolution

- - -
-
- - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
tileCoord - - -ol.TileCoord - - - - Tile coordinate.
- - - -
- - - - - - - -
Inherited From:
-
- - - - - - - - - - - - - -
Source:
-
  • tilegrid.js, line 304
- - - - - - - -
- - - - - - - -
Returns:
- - -
- Tile resolution. -
- - - -
-
- Type -
-
- -number - - -
-
- - - - -
- - - -
-

getTileRangeExtent

- - -
-
- - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
z - - -number - - - - Z.
tileRange - - -ol.TileRange - - - - Tile range.
- - - -
- - - - - - - -
Inherited From:
-
- - - - - - - - - - - - - -
Source:
-
  • tilegrid.js, line 174
- - - - - - - -
- - - - - - - -
Returns:
- - -
- Extent. -
- - - -
-
- Type -
-
- -ol.Extent - - -
-
- - - - -
- - - -
-

getTileRangeForExtentAndResolution

- - -
-
- - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
extent - - -ol.Extent - - - - Extent.
resolution - - -number - - - - Resolution.
- - - -
- - - - - - - -
Inherited From:
-
- - - - - - - - - - - - - -
Source:
-
  • tilegrid.js, line 191
- - - - - - - -
- - - - - - - -
Returns:
- - -
- Tile range. -
- - - -
-
- Type -
-
- -ol.TileRange - - -
-
- - - - -
- - - -
-

getTileRangeForExtentAndZ

- - -
-
- - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
extent - - -ol.Extent - - - - Extent.
z - - -number - - - - Z.
- - - -
- - - - - - - -
Inherited From:
-
- - - - - - - - - - - - - -
Source:
-
  • tilegrid.js, line 206
- - - - - - - -
- - - - - - - -
Returns:
- - -
- Tile range. -
- - - -
-
- Type -
-
- -ol.TileRange - - -
-
- - - - -
- - - -
-

getTileSize

- - -
-
- - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
z - - -number - - - - Z.
- - - -
- - - - - - - -
Inherited From:
-
- - - - - - - - - - - - - -
Source:
-
  • tilegrid.js, line 314
- - - - - - - -
- - - - - - - -
Returns:
- - -
- Tile size. -
- - - -
-
- Type -
-
- -ol.Size - - -
-
- - - - -
- - - -
-

getZForResolution

- - -
-
- - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
resolution - - -number - - - - Resolution.
- - - -
- - - - - - - -
Inherited From:
-
- - - - - - - - - - - - - -
Source:
-
  • tilegrid.js, line 329
- - - - - - - -
- - - - - - - -
Returns:
- - -
- Z. -
- - - -
-
- Type -
-
- -number - - -
-
- - - - -
- -
- - - - - -
- -
- - - - -
- - - -
- - - - - - diff --git a/master/apidoc/ol.tilegrid.XYZ.html b/master/apidoc/ol.tilegrid.XYZ.html index 48056b5c2d..3d692d0c1d 100644 --- a/master/apidoc/ol.tilegrid.XYZ.html +++ b/master/apidoc/ol.tilegrid.XYZ.html @@ -2214,15 +2214,15 @@ assigned the higher tile coordinate.
diff --git a/master/apidoc/styles/apidoc.css b/master/apidoc/styles/apidoc.css new file mode 100644 index 0000000000..4190811f54 --- /dev/null +++ b/master/apidoc/styles/apidoc.css @@ -0,0 +1,266 @@ +html { + overflow: auto; + background-color: #fff; +} + +body { + font: 14px "DejaVu Sans Condensed", "Liberation Sans", "Nimbus Sans L", Tahoma, Geneva, "Helvetica Neue", Helvetica, Arial, sans serif; + line-height: 130%; + color: #000; + background-color: #fff; +} + +a { + color: #444; +} + +a:visited { + color: #444; +} + +a:active { + color: #444; +} + +header { + display: block; + padding: 6px 4px; +} + +.class-description { + font-style: italic; + font-family: Palatino, 'Palatino Linotype', serif; + font-size: 130%; + line-height: 140%; + margin-bottom: 1em; + margin-top: 1em; +} + +#main { + float: left; + width: 100%; +} + +section { + display: block; + + background-color: #fff; + padding: 12px 24px; + border-bottom: 1px solid #ccc; + margin-right: 240px; +} + +.variation { + display: none; +} + +.optional:after { + content: "opt"; + font-size: 60%; + color: #aaa; + font-style: italic; + font-weight: lighter; +} + +nav { + display: block; + float: left; + margin-left: -230px; + margin-top: 28px; + width: 220px; + border-left: 1px solid #ccc; + padding-left: 9px; +} + +nav ul { + font-family: 'Lucida Grande', 'Lucida Sans Unicode', arial, sans-serif; + font-size: 100%; + line-height: 17px; + padding:0; + margin:0; + list-style-type:none; +} + +nav h2 a, nav h2 a:visited { + color: #A35A00; + text-decoration: none; +} + +nav h3 { + margin-top: 12px; +} + +nav li { + margin-top: 6px; +} + +nav a { + color: #5C5954; +} + +nav a:visited { + color: #5C5954; +} + +nav a:active { + color: #5C5954; +} + +footer { + display: block; + padding: 6px; + margin-top: 12px; + font-style: italic; + font-size: 90%; +} + +h1 { + font-size: 200%; + font-weight: bold; + letter-spacing: -0.01em; + margin: 6px 0 9px 0; +} + +h2 { + font-size: 170%; + font-weight: bold; + letter-spacing: -0.01em; + margin: 6px 0 3px 0; +} + +h3 { + font-size: 150%; + font-weight: bold; + letter-spacing: -0.01em; + margin-top: 16px; + margin: 6px 0 3px 0; +} + +h4 { + font-size: 130%; + font-weight: bold; + letter-spacing: -0.01em; + margin-top: 16px; + margin: 18px 0 3px 0; + color: #A35A00; +} + +h5, .container-overview .subsection-title { + font-size: 120%; + font-weight: bold; + letter-spacing: -0.01em; + margin: 8px 0 3px -16px; +} + +h6 { + font-size: 100%; + letter-spacing: -0.01em; + margin: 6px 0 3px 0; + font-style: italic; +} + +.protected { + display: none; +} + +dt.tag-source, dd.tag-source { + display: none; +} + +.ancestors { color: #999; } +.ancestors a { + color: #999 !important; + text-decoration: none; +} + +.important { + font-weight: bold; + color: #950B02; +} + +.yes-def { + text-indent: -1000px; +} + +.type-signature { + color: #aaa; +} + +.name, .signature { + font-family: Consolas, "Lucida Console", Monaco, monospace; +} + +.details { margin-top: 14px; } +.details dt { width:100px; float:left; border-left: 2px solid #DDD; padding-left: 10px; padding-top: 6px; } +.details dd { margin-left: 50px; } +.details ul { margin: 0; } +.details ul { list-style-type: none; } +.details li { margin-left: 30px; padding-top: 6px; } + +.description { + margin-bottom: 1em; + margin-left: -16px; + margin-top: 1em; +} + +.code-caption { + font-style: italic; + font-family: Palatino, 'Palatino Linotype', serif; + font-size: 107%; + margin: 0; +} + +.prettyprint { + border: 1px solid #ddd; + width: 80%; +} + +.prettyprint code { + font-family: Consolas, 'Lucida Console', Monaco, monospace; + font-size: 100%; + line-height: 18px; + display: block; + padding: 4px 12px; + margin: 0; + background-color: #fff; + color: #000; + border-left: 3px #ddd solid; +} + +.params, .props { + border-spacing: 0; + border: 0; + border-collapse: collapse; +} + +.params .name, .props .name, .name code { + color: #A35A00; + font-family: Consolas, 'Lucida Console', Monaco, monospace; + font-size: 100%; +} + +.params td, .params th, .props td, .props th { + border: 1px solid #ddd; + margin: 0px; + text-align: left; + vertical-align: top; + padding: 4px 6px; + display: table-cell; +} + +.params thead tr, .props thead tr { + background-color: #ddd; + font-weight: bold; +} + +.params .params thead tr, .props .props thead tr { + background-color: #fff; + font-weight: bold; +} + +.params th, .props th { border-right: 1px solid #aaa; } +.params thead .last, .props thead .last { border-right: 1px solid #ddd; } + +.disabled { + color: #454545; +} diff --git a/master/build/ol-deps.js b/master/build/ol-deps.js index 38b183ea43..5153f81e11 100644 --- a/master/build/ol-deps.js +++ b/master/build/ol-deps.js @@ -9,21 +9,40 @@ goog.addDependency('../../../ol/ol/canvas/canvas.js', ['ol.canvas'], ['goog.dom' goog.addDependency('../../../ol/ol/collection.js', ['ol.Collection', 'ol.CollectionEvent', 'ol.CollectionEventType'], ['goog.array', 'goog.events.Event', 'ol.Object']); goog.addDependency('../../../ol/ol/color.js', ['ol.Color'], ['goog.color', 'goog.math']); goog.addDependency('../../../ol/ol/constraints.js', ['ol.Constraints'], ['ol.ResolutionConstraintType', 'ol.RotationConstraintType']); -goog.addDependency('../../../ol/ol/control/attributioncontrol.js', ['ol.control.Attribution'], ['goog.array', 'goog.dom', 'goog.dom.TagName', 'goog.events', 'goog.object', 'goog.style', 'ol.Attribution', 'ol.FrameState', 'ol.MapEvent', 'ol.MapEventType', 'ol.TileRange', 'ol.control.Control', 'ol.source.Source']); +goog.addDependency('../../../ol/ol/control/attributioncontrol.js', ['ol.control.Attribution'], ['goog.array', 'goog.dom', 'goog.dom.TagName', 'goog.events', 'goog.object', 'goog.style', 'ol', 'ol.Attribution', 'ol.FrameState', 'ol.MapEvent', 'ol.MapEventType', 'ol.TileRange', 'ol.control.Control', 'ol.source.Source']); goog.addDependency('../../../ol/ol/control/control.js', ['ol.control.Control', 'ol.control.ControlOptions'], ['goog.Disposable']); goog.addDependency('../../../ol/ol/control/defaults.js', ['ol.control.defaults'], ['goog.array', 'ol.control.Attribution', 'ol.control.Zoom']); goog.addDependency('../../../ol/ol/control/dragboxcontrol.js', ['ol.control.DragBox'], ['goog.asserts', 'goog.dom', 'goog.dom.TagName', 'goog.events', 'goog.style', 'ol.Coordinate', 'ol.MapBrowserEvent', 'ol.MapBrowserEvent.EventType', 'ol.Pixel', 'ol.Size', 'ol.control.Control']); goog.addDependency('../../../ol/ol/control/mousepositioncontrol.js', ['ol.control.MousePosition'], ['goog.array', 'goog.dom', 'goog.events', 'goog.events.EventType', 'goog.style', 'ol.Coordinate', 'ol.CoordinateFormatType', 'ol.MapEvent', 'ol.MapEventType', 'ol.Pixel', 'ol.Projection', 'ol.TransformFunction', 'ol.control.Control', 'ol.projection']); -goog.addDependency('../../../ol/ol/control/scalelinecontrol.js', ['ol.control.ScaleLine', 'ol.control.ScaleLineUnits'], ['goog.dom', 'goog.style', 'ol.FrameState', 'ol.MapEvent', 'ol.MapEventType', 'ol.ProjectionUnits', 'ol.TransformFunction', 'ol.control.Control', 'ol.projection', 'ol.sphere.NORMAL']); -goog.addDependency('../../../ol/ol/control/zoomcontrol.js', ['ol.control.Zoom'], ['goog.dom', 'goog.dom.TagName', 'goog.events', 'goog.events.EventType', 'ol.control.Control']); +goog.addDependency('../../../ol/ol/control/scalelinecontrol.js', ['ol.control.ScaleLine', 'ol.control.ScaleLineUnits'], ['goog.dom', 'goog.style', 'ol', 'ol.FrameState', 'ol.MapEvent', 'ol.MapEventType', 'ol.ProjectionUnits', 'ol.TransformFunction', 'ol.control.Control', 'ol.projection', 'ol.sphere.NORMAL']); +goog.addDependency('../../../ol/ol/control/zoomcontrol.js', ['ol.control.Zoom'], ['goog.dom', 'goog.dom.TagName', 'goog.events', 'goog.events.EventType', 'ol', 'ol.control.Control']); +goog.addDependency('../../../ol/ol/control/zoomslidercontrol.js', ['ol.control.ZoomSlider'], ['goog.asserts', 'goog.dom', 'goog.dom.TagName', 'goog.events', 'goog.fx.Dragger', 'goog.style', 'ol.MapEventType', 'ol.control.Control']); goog.addDependency('../../../ol/ol/coordinate.js', ['ol.Coordinate', 'ol.CoordinateFormatType'], ['goog.math', 'goog.math.Vec2']); goog.addDependency('../../../ol/ol/dom/dom.js', ['ol.dom', 'ol.dom.BrowserFeature'], ['goog.vec.Mat4']); goog.addDependency('../../../ol/ol/easing.js', ['ol.easing'], ['goog.fx.easing']); goog.addDependency('../../../ol/ol/ellipsoid.js', ['ol.Ellipsoid'], ['goog.math', 'ol.Coordinate']); goog.addDependency('../../../ol/ol/ellipsoid/wgs84.js', ['ol.ellipsoid.WGS84'], ['ol.Ellipsoid']); +goog.addDependency('../../../ol/ol/expression.js', ['ol.Expression', 'ol.ExpressionLiteral'], []); goog.addDependency('../../../ol/ol/extent.js', ['ol.Extent'], ['ol.Coordinate', 'ol.Rectangle', 'ol.TransformFunction']); +goog.addDependency('../../../ol/ol/feature.js', ['ol.Feature'], ['ol.Object', 'ol.geom.Geometry']); +goog.addDependency('../../../ol/ol/filter/extentfilter.js', ['ol.filter.Extent'], ['ol.Extent', 'ol.filter.Filter']); +goog.addDependency('../../../ol/ol/filter/filter.js', ['ol.filter.Filter'], ['ol.Feature']); +goog.addDependency('../../../ol/ol/filter/geometryfilter.js', ['ol.filter.Geometry', 'ol.filter.GeometryType'], ['ol.filter.Filter', 'ol.geom.GeometryType']); +goog.addDependency('../../../ol/ol/filter/logicalfilter.js', ['ol.filter.Logical', 'ol.filter.LogicalOperator'], ['ol.filter.Filter']); goog.addDependency('../../../ol/ol/framestate.js', ['ol.FrameState', 'ol.PostRenderFunction', 'ol.PreRenderFunction'], ['goog.vec.Mat4', 'ol.Attribution', 'ol.Color', 'ol.Extent', 'ol.Size', 'ol.TileQueue', 'ol.TileRange', 'ol.View2DState', 'ol.layer.Layer', 'ol.layer.LayerState']); goog.addDependency('../../../ol/ol/geolocation.js', ['ol.Geolocation', 'ol.GeolocationProperty'], ['goog.functions', 'goog.math', 'ol.Coordinate', 'ol.Object', 'ol.Projection', 'ol.projection']); +goog.addDependency('../../../ol/ol/geom/abstractcollection.js', ['ol.geom.AbstractCollection'], ['ol.Extent', 'ol.geom.Geometry']); +goog.addDependency('../../../ol/ol/geom/base.js', ['ol.geom.Vertex', 'ol.geom.VertexArray'], []); +goog.addDependency('../../../ol/ol/geom/geometry.js', ['ol.geom.Geometry', 'ol.geom.GeometryType'], ['ol.Extent', 'ol.geom.SharedVertices']); +goog.addDependency('../../../ol/ol/geom/geometrycollection.js', ['ol.geom.GeometryCollection'], ['ol.geom.AbstractCollection', 'ol.geom.Geometry', 'ol.geom.GeometryType']); +goog.addDependency('../../../ol/ol/geom/linearring.js', ['ol.geom.LinearRing'], ['ol.geom.GeometryType', 'ol.geom.LineString', 'ol.geom.SharedVertices', 'ol.geom.VertexArray']); +goog.addDependency('../../../ol/ol/geom/linestring.js', ['ol.geom.LineString'], ['goog.asserts', 'ol.Extent', 'ol.geom.Geometry', 'ol.geom.GeometryType', 'ol.geom.SharedVertices', 'ol.geom.VertexArray']); +goog.addDependency('../../../ol/ol/geom/multilinestring.js', ['ol.geom.MultiLineString'], ['goog.asserts', 'ol.geom.AbstractCollection', 'ol.geom.GeometryType', 'ol.geom.LineString', 'ol.geom.SharedVertices', 'ol.geom.VertexArray']); +goog.addDependency('../../../ol/ol/geom/multipoint.js', ['ol.geom.MultiPoint'], ['goog.asserts', 'ol.geom.AbstractCollection', 'ol.geom.GeometryType', 'ol.geom.Point', 'ol.geom.SharedVertices', 'ol.geom.VertexArray']); +goog.addDependency('../../../ol/ol/geom/multipolygon.js', ['ol.geom.MultiPolygon'], ['goog.asserts', 'ol.geom.AbstractCollection', 'ol.geom.GeometryType', 'ol.geom.Polygon', 'ol.geom.SharedVertices', 'ol.geom.VertexArray']); +goog.addDependency('../../../ol/ol/geom/point.js', ['ol.geom.Point'], ['goog.asserts', 'ol.Extent', 'ol.geom.Geometry', 'ol.geom.GeometryType', 'ol.geom.SharedVertices', 'ol.geom.Vertex']); +goog.addDependency('../../../ol/ol/geom/polygon.js', ['ol.geom.Polygon'], ['goog.asserts', 'ol.Extent', 'ol.geom.Geometry', 'ol.geom.GeometryType', 'ol.geom.LinearRing', 'ol.geom.SharedVertices', 'ol.geom.VertexArray']); +goog.addDependency('../../../ol/ol/geom/sharedvertices.js', ['ol.geom.SharedVertices'], ['goog.asserts', 'ol.geom.Vertex', 'ol.geom.VertexArray']); goog.addDependency('../../../ol/ol/image.js', ['ol.Image', 'ol.ImageState'], ['goog.array', 'goog.events', 'goog.events.EventTarget', 'goog.events.EventType', 'ol.Attribution', 'ol.Extent']); goog.addDependency('../../../ol/ol/imagetile.js', ['ol.ImageTile'], ['goog.array', 'goog.events', 'goog.events.EventType', 'ol.Tile', 'ol.TileCoord', 'ol.TileState']); goog.addDependency('../../../ol/ol/imageurlfunction.js', ['ol.ImageUrlFunction', 'ol.ImageUrlFunctionType'], ['ol.Extent', 'ol.Size', 'ol.source.wms']); @@ -51,12 +70,15 @@ goog.addDependency('../../../ol/ol/kinetic.js', ['ol.Kinetic'], ['ol.Coordinate' goog.addDependency('../../../ol/ol/layer/imagelayer.js', ['ol.layer.ImageLayer'], ['ol.layer.Layer', 'ol.source.ImageSource']); goog.addDependency('../../../ol/ol/layer/layer.js', ['ol.layer.Layer', 'ol.layer.LayerProperty', 'ol.layer.LayerState'], ['goog.events', 'goog.events.EventType', 'goog.math', 'ol.Object', 'ol.source.Source']); goog.addDependency('../../../ol/ol/layer/tilelayer.js', ['ol.layer.TileLayer'], ['ol.layer.Layer', 'ol.source.TileSource']); +goog.addDependency('../../../ol/ol/layer/vectorlayer.js', ['ol.layer.Vector'], ['goog.events.EventType', 'ol.Feature', 'ol.filter.Extent', 'ol.filter.Geometry', 'ol.filter.Logical', 'ol.filter.LogicalOperator', 'ol.geom.GeometryType', 'ol.geom.SharedVertices', 'ol.layer.Layer', 'ol.projection', 'ol.source.Vector', 'ol.structs.RTree', 'ol.style.Style']); goog.addDependency('../../../ol/ol/map.js', ['ol.Map', 'ol.MapProperty', 'ol.RendererHint', 'ol.RendererHints'], ['goog.Uri.QueryData', 'goog.async.AnimationDelay', 'goog.debug.Logger', 'goog.dom', 'goog.dom.ViewportSizeMonitor', 'goog.events', 'goog.events.BrowserEvent', 'goog.events.Event', 'goog.events.EventType', 'goog.events.KeyHandler', 'goog.events.KeyHandler.EventType', 'goog.events.MouseWheelHandler', 'goog.events.MouseWheelHandler.EventType', 'goog.style', 'ol.BrowserFeature', 'ol.Collection', 'ol.Color', 'ol.Coordinate', 'ol.Extent', 'ol.FrameState', 'ol.IView', 'ol.MapBrowserEvent', 'ol.MapBrowserEvent.EventType', 'ol.MapBrowserEventHandler', 'ol.MapEvent', 'ol.MapEventType', 'ol.Object', 'ol.ObjectEventType', 'ol.Pixel', 'ol.PostRenderFunction', 'ol.PreRenderFunction', 'ol.Size', 'ol.Tile', 'ol.TileQueue', 'ol.View', 'ol.View2D', 'ol.control.defaults', 'ol.interaction.defaults', 'ol.layer.Layer', 'ol.projection', 'ol.projection.addCommonProjections', 'ol.renderer.Map', 'ol.renderer.canvas.Map', 'ol.renderer.canvas.SUPPORTED', 'ol.renderer.dom.Map', 'ol.renderer.dom.SUPPORTED', 'ol.renderer.webgl.Map', 'ol.renderer.webgl.SUPPORTED']); goog.addDependency('../../../ol/ol/mapbrowserevent.js', ['ol.MapBrowserEvent', 'ol.MapBrowserEvent.EventType', 'ol.MapBrowserEventHandler'], ['goog.array', 'goog.events.BrowserEvent', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.style', 'ol.BrowserFeature', 'ol.Coordinate', 'ol.FrameState', 'ol.MapEvent', 'ol.Pixel']); goog.addDependency('../../../ol/ol/mapevent.js', ['ol.MapEvent', 'ol.MapEventType'], ['goog.events.Event', 'ol.FrameState']); goog.addDependency('../../../ol/ol/math.js', ['ol.math'], []); goog.addDependency('../../../ol/ol/object.js', ['ol.Object', 'ol.ObjectEventType'], ['goog.array', 'goog.events', 'goog.events.EventTarget', 'goog.object']); goog.addDependency('../../../ol/ol/ol.js', ['ol'], ['goog.debug.Logger']); +goog.addDependency('../../../ol/ol/parser/featureparser.js', ['ol.parser.DomFeatureParser', 'ol.parser.ObjectFeatureParser', 'ol.parser.ReadFeaturesOptions', 'ol.parser.StringFeatureParser'], ['ol.Feature']); +goog.addDependency('../../../ol/ol/parser/geojson.js', ['ol.parser.GeoJSON'], ['ol.Feature', 'ol.geom.Geometry', 'ol.geom.GeometryType', 'ol.geom.LineString', 'ol.geom.MultiLineString', 'ol.geom.MultiPoint', 'ol.geom.MultiPolygon', 'ol.geom.Point', 'ol.geom.Polygon', 'ol.geom.SharedVertices', 'ol.parser.Parser', 'ol.parser.ReadFeaturesOptions', 'ol.parser.StringFeatureParser']); goog.addDependency('../../../ol/ol/parser/ogc/exceptionreport.js', ['ol.parser.ogc.ExceptionReport'], ['goog.dom.xml', 'ol.parser.XML']); goog.addDependency('../../../ol/ol/parser/ogc/owscommon_v1.js', ['ol.parser.ogc.OWSCommon_v1'], ['ol.Extent', 'ol.parser.XML']); goog.addDependency('../../../ol/ol/parser/ogc/owscommon_v1_1_0.js', ['ol.parser.ogc.OWSCommon_v1_1_0'], ['goog.object', 'ol.parser.ogc.OWSCommon_v1']); @@ -71,7 +93,9 @@ goog.addDependency('../../../ol/ol/parser/ogc/wmscapabilities_v1_1_1_WMSC.js', [ goog.addDependency('../../../ol/ol/parser/ogc/wmscapabilities_v1_3_0.js', ['ol.parser.ogc.WMSCapabilities_v1_3_0'], ['ol.parser.ogc.WMSCapabilities_v1']); goog.addDependency('../../../ol/ol/parser/ogc/wmtscapabilities.js', ['ol.parser.ogc.WMTSCapabilities'], ['ol.parser.ogc.Versioned', 'ol.parser.ogc.WMTSCapabilities_v1_0_0']); goog.addDependency('../../../ol/ol/parser/ogc/wmtscapabilities_v1_0_0.js', ['ol.parser.ogc.WMTSCapabilities_v1_0_0'], ['goog.dom.xml', 'ol.Coordinate', 'ol.parser.XML', 'ol.parser.ogc.OWSCommon_v1_1_0', 'ol.projection']); -goog.addDependency('../../../ol/ol/parser/xml.js', ['ol.parser.XML'], []); +goog.addDependency('../../../ol/ol/parser/parser.js', ['ol.parser.Parser'], []); +goog.addDependency('../../../ol/ol/parser/polyline.js', ['ol.parser.polyline'], []); +goog.addDependency('../../../ol/ol/parser/xml.js', ['ol.parser.XML'], ['ol.parser.Parser']); goog.addDependency('../../../ol/ol/pixel.js', ['ol.Pixel'], ['goog.math.Coordinate']); goog.addDependency('../../../ol/ol/pixelbounds.js', ['ol.PixelBounds'], ['ol.Rectangle']); goog.addDependency('../../../ol/ol/projection.js', ['ol.Projection', 'ol.ProjectionLike', 'ol.ProjectionUnits', 'ol.projection'], ['goog.array', 'goog.asserts', 'goog.object', 'ol.Coordinate', 'ol.Extent', 'ol.TransformFunction', 'ol.sphere.NORMAL']); @@ -81,12 +105,14 @@ goog.addDependency('../../../ol/ol/projection/epsg4326.js', ['ol.projection.EPSG goog.addDependency('../../../ol/ol/rectangle.js', ['ol.Rectangle'], ['goog.asserts', 'ol.Coordinate', 'ol.Size']); goog.addDependency('../../../ol/ol/renderer/canvas/canvasimagelayerrenderer.js', ['ol.renderer.canvas.ImageLayer'], ['goog.vec.Mat4', 'ol.Image', 'ol.ImageState', 'ol.ViewHint', 'ol.layer.ImageLayer', 'ol.renderer.Map', 'ol.renderer.canvas.Layer']); goog.addDependency('../../../ol/ol/renderer/canvas/canvaslayerrenderer.js', ['ol.renderer.canvas.Layer'], ['ol.layer.Layer', 'ol.renderer.Layer']); -goog.addDependency('../../../ol/ol/renderer/canvas/canvasmaprenderer.js', ['ol.renderer.canvas.Map'], ['goog.array', 'goog.dom', 'goog.style', 'goog.vec.Mat4', 'ol.Size', 'ol.layer.ImageLayer', 'ol.layer.TileLayer', 'ol.renderer.Map', 'ol.renderer.canvas.ImageLayer', 'ol.renderer.canvas.TileLayer']); +goog.addDependency('../../../ol/ol/renderer/canvas/canvasmaprenderer.js', ['ol.renderer.canvas.Map'], ['goog.array', 'goog.dom', 'goog.style', 'goog.vec.Mat4', 'ol', 'ol.Size', 'ol.layer.ImageLayer', 'ol.layer.TileLayer', 'ol.layer.Vector', 'ol.renderer.Map', 'ol.renderer.canvas.ImageLayer', 'ol.renderer.canvas.TileLayer', 'ol.renderer.canvas.VectorLayer']); goog.addDependency('../../../ol/ol/renderer/canvas/canvasrenderer.js', ['ol.renderer.canvas.SUPPORTED'], ['ol.canvas']); goog.addDependency('../../../ol/ol/renderer/canvas/canvastilelayerrenderer.js', ['ol.renderer.canvas.TileLayer'], ['goog.array', 'goog.dom', 'goog.vec.Mat4', 'ol.Extent', 'ol.Size', 'ol.Tile', 'ol.TileCoord', 'ol.TileState', 'ol.layer.TileLayer', 'ol.renderer.Map', 'ol.renderer.canvas.Layer']); +goog.addDependency('../../../ol/ol/renderer/canvas/canvasvectorlayerrenderer.js', ['ol.renderer.canvas.VectorLayer'], ['goog.vec.Mat4', 'ol.Extent', 'ol.Size', 'ol.TileCache', 'ol.TileCoord', 'ol.ViewHint', 'ol.filter.Extent', 'ol.filter.Geometry', 'ol.filter.Logical', 'ol.filter.LogicalOperator', 'ol.geom.GeometryType', 'ol.layer.Vector', 'ol.renderer.canvas.Layer', 'ol.renderer.canvas.VectorRenderer', 'ol.tilegrid.TileGrid']); +goog.addDependency('../../../ol/ol/renderer/canvas/canvasvectorrenderer.js', ['ol.renderer.canvas.VectorRenderer'], ['goog.asserts', 'goog.vec.Mat4', 'ol.Feature', 'ol.Pixel', 'ol.geom.Geometry', 'ol.geom.GeometryType', 'ol.geom.LineString', 'ol.geom.MultiLineString', 'ol.geom.MultiPoint', 'ol.geom.MultiPolygon', 'ol.geom.Point', 'ol.geom.Polygon', 'ol.style.IconLiteral', 'ol.style.LineLiteral', 'ol.style.PointLiteral', 'ol.style.PolygonLiteral', 'ol.style.ShapeLiteral', 'ol.style.ShapeType', 'ol.style.SymbolizerLiteral']); goog.addDependency('../../../ol/ol/renderer/dom/domimagelayerrenderer.js', ['ol.renderer.dom.ImageLayer'], ['goog.dom', 'goog.vec.Mat4', 'ol.Image', 'ol.ImageState', 'ol.ViewHint', 'ol.dom', 'ol.layer.ImageLayer', 'ol.renderer.dom.Layer']); goog.addDependency('../../../ol/ol/renderer/dom/domlayerrenderer.js', ['ol.renderer.dom.Layer'], ['ol.layer.Layer', 'ol.renderer.Layer']); -goog.addDependency('../../../ol/ol/renderer/dom/dommaprenderer.js', ['ol.renderer.dom.Map'], ['goog.array', 'goog.asserts', 'goog.dom', 'goog.dom.TagName', 'goog.style', 'ol.layer.ImageLayer', 'ol.layer.TileLayer', 'ol.renderer.Map', 'ol.renderer.dom.ImageLayer', 'ol.renderer.dom.TileLayer']); +goog.addDependency('../../../ol/ol/renderer/dom/dommaprenderer.js', ['ol.renderer.dom.Map'], ['goog.array', 'goog.asserts', 'goog.dom', 'goog.dom.TagName', 'goog.style', 'ol', 'ol.layer.ImageLayer', 'ol.layer.TileLayer', 'ol.renderer.Map', 'ol.renderer.dom.ImageLayer', 'ol.renderer.dom.TileLayer']); goog.addDependency('../../../ol/ol/renderer/dom/domrenderer.js', ['ol.renderer.dom.SUPPORTED'], []); goog.addDependency('../../../ol/ol/renderer/dom/domtilelayerrenderer.js', ['ol.renderer.dom.TileLayer'], ['goog.asserts', 'goog.dom', 'goog.style', 'goog.vec.Mat4', 'ol.Coordinate', 'ol.Extent', 'ol.Tile', 'ol.TileCoord', 'ol.TileState', 'ol.ViewHint', 'ol.dom', 'ol.layer.TileLayer', 'ol.renderer.dom.Layer', 'ol.tilegrid.TileGrid']); goog.addDependency('../../../ol/ol/renderer/layerrenderer.js', ['ol.renderer.Layer'], ['goog.events', 'goog.events.EventType', 'ol.Attribution', 'ol.Coordinate', 'ol.FrameState', 'ol.Image', 'ol.ImageState', 'ol.Object', 'ol.Tile', 'ol.TileCoord', 'ol.TileRange', 'ol.TileState', 'ol.layer.Layer', 'ol.layer.LayerProperty', 'ol.layer.LayerState', 'ol.source.TileSource']); @@ -94,7 +120,7 @@ goog.addDependency('../../../ol/ol/renderer/maprenderer.js', ['ol.renderer.Map'] goog.addDependency('../../../ol/ol/renderer/webgl/shader.js', ['ol.renderer.webgl.FragmentShader', 'ol.renderer.webgl.VertexShader'], ['goog.functions', 'goog.webgl']); goog.addDependency('../../../ol/ol/renderer/webgl/webglimagelayerrenderer.js', ['ol.renderer.webgl.ImageLayer'], ['goog.vec.Mat4', 'ol.Coordinate', 'ol.Extent', 'ol.Image', 'ol.ImageState', 'ol.ViewHint', 'ol.layer.ImageLayer', 'ol.renderer.webgl.Layer']); goog.addDependency('../../../ol/ol/renderer/webgl/webgllayerrenderer.js', ['ol.renderer.webgl.Layer'], ['goog.vec.Mat4', 'ol.layer.Layer', 'ol.renderer.Layer', 'ol.vec.Mat4']); -goog.addDependency('../../../ol/ol/renderer/webgl/webglmaprenderer.js', ['ol.renderer.webgl.Map', 'ol.renderer.webgl.map.shader'], ['goog.array', 'goog.debug.Logger', 'goog.dom', 'goog.dom.TagName', 'goog.events', 'goog.events.Event', 'goog.style', 'goog.webgl', 'ol.FrameState', 'ol.Size', 'ol.Tile', 'ol.layer.ImageLayer', 'ol.layer.TileLayer', 'ol.renderer.Map', 'ol.renderer.webgl.FragmentShader', 'ol.renderer.webgl.ImageLayer', 'ol.renderer.webgl.TileLayer', 'ol.renderer.webgl.VertexShader', 'ol.structs.LRUCache', 'ol.webgl', 'ol.webgl.WebGLContextEventType']); +goog.addDependency('../../../ol/ol/renderer/webgl/webglmaprenderer.js', ['ol.renderer.webgl.Map', 'ol.renderer.webgl.map.shader'], ['goog.array', 'goog.debug.Logger', 'goog.dom', 'goog.dom.TagName', 'goog.events', 'goog.events.Event', 'goog.style', 'goog.webgl', 'ol', 'ol.FrameState', 'ol.Size', 'ol.Tile', 'ol.layer.ImageLayer', 'ol.layer.TileLayer', 'ol.renderer.Map', 'ol.renderer.webgl.FragmentShader', 'ol.renderer.webgl.ImageLayer', 'ol.renderer.webgl.TileLayer', 'ol.renderer.webgl.VertexShader', 'ol.structs.LRUCache', 'ol.webgl', 'ol.webgl.WebGLContextEventType']); goog.addDependency('../../../ol/ol/renderer/webgl/webglrenderer.js', ['ol.renderer.webgl.SUPPORTED'], ['ol.webgl']); goog.addDependency('../../../ol/ol/renderer/webgl/webgltilelayerrenderer.js', ['ol.renderer.webgl.TileLayer', 'ol.renderer.webgl.tilelayerrenderer', 'ol.renderer.webgl.tilelayerrenderer.shader.Fragment', 'ol.renderer.webgl.tilelayerrenderer.shader.Vertex'], ['goog.array', 'goog.object', 'goog.structs.PriorityQueue', 'goog.vec.Mat4', 'goog.vec.Vec4', 'goog.webgl', 'ol.Extent', 'ol.FrameState', 'ol.Size', 'ol.Tile', 'ol.TileCoord', 'ol.TileRange', 'ol.TileState', 'ol.layer.TileLayer', 'ol.renderer.webgl.FragmentShader', 'ol.renderer.webgl.Layer', 'ol.renderer.webgl.VertexShader']); goog.addDependency('../../../ol/ol/resolutionconstraint.js', ['ol.ResolutionConstraint', 'ol.ResolutionConstraintType'], ['goog.math', 'ol.array']); @@ -113,13 +139,23 @@ goog.addDependency('../../../ol/ol/source/staticimagesource.js', ['ol.source.Sta goog.addDependency('../../../ol/ol/source/tiledwmssource.js', ['ol.source.TiledWMS'], ['goog.array', 'ol.Extent', 'ol.TileCoord', 'ol.TileUrlFunction', 'ol.source.ImageTileSource']); goog.addDependency('../../../ol/ol/source/tilejsonsource.js', ['ol.source.TileJSON', 'ol.tilejson'], ['goog.asserts', 'goog.net.jsloader', 'ol.Attribution', 'ol.Extent', 'ol.TileCoord', 'ol.TileRange', 'ol.TileUrlFunction', 'ol.projection', 'ol.source.ImageTileSource', 'ol.tilegrid.XYZ']); goog.addDependency('../../../ol/ol/source/tilesource.js', ['ol.source.TileSource', 'ol.source.TileSourceOptions'], ['goog.functions', 'ol.Attribution', 'ol.Extent', 'ol.Tile', 'ol.TileCoord', 'ol.TileRange', 'ol.source.Source', 'ol.tilegrid.TileGrid']); +goog.addDependency('../../../ol/ol/source/vectorsource.js', ['ol.source.Vector'], ['ol.source.Source']); goog.addDependency('../../../ol/ol/source/wms.js', ['ol.source.wms'], []); -goog.addDependency('../../../ol/ol/source/wmtssource.js', ['ol.source.WMTS', 'ol.source.WMTSRequestEncoding'], ['ol.Attribution', 'ol.Extent', 'ol.Projection', 'ol.TileCoord', 'ol.TileUrlFunction', 'ol.TileUrlFunctionType', 'ol.projection', 'ol.source.ImageTileSource', 'ol.tilegrid.WMTS']); +goog.addDependency('../../../ol/ol/source/wmtssource.js', ['ol.source.WMTS', 'ol.source.WMTSRequestEncoding'], ['ol.Attribution', 'ol.TileCoord', 'ol.TileUrlFunction', 'ol.TileUrlFunctionType', 'ol.projection', 'ol.source.ImageTileSource', 'ol.tilegrid.WMTS']); goog.addDependency('../../../ol/ol/source/xyzsource.js', ['ol.source.XYZ', 'ol.source.XYZOptions'], ['goog.math', 'ol.Attribution', 'ol.Extent', 'ol.Projection', 'ol.TileCoord', 'ol.TileUrlFunction', 'ol.TileUrlFunctionType', 'ol.projection', 'ol.source.ImageTileSource', 'ol.tilegrid.XYZ']); goog.addDependency('../../../ol/ol/sphere.js', ['ol.Sphere'], ['goog.math', 'ol.Coordinate']); goog.addDependency('../../../ol/ol/sphere/normal.js', ['ol.sphere.NORMAL'], ['ol.Sphere']); goog.addDependency('../../../ol/ol/sphere/wgs84.js', ['ol.sphere.WGS84'], ['ol.Sphere']); goog.addDependency('../../../ol/ol/structs/lrucache.js', ['ol.structs.LRUCache'], ['goog.asserts', 'goog.object']); +goog.addDependency('../../../ol/ol/structs/rtree.js', ['ol.structs.RTree'], ['ol.Rectangle']); +goog.addDependency('../../../ol/ol/style/icon.js', ['ol.style.Icon', 'ol.style.IconLiteral', 'ol.style.IconType'], ['ol.Expression', 'ol.ExpressionLiteral', 'ol.style.Point', 'ol.style.PointLiteral']); +goog.addDependency('../../../ol/ol/style/line.js', ['ol.style.Line', 'ol.style.LineLiteral'], ['ol.Expression', 'ol.ExpressionLiteral', 'ol.style.Symbolizer', 'ol.style.SymbolizerLiteral']); +goog.addDependency('../../../ol/ol/style/point.js', ['ol.style.Point', 'ol.style.PointLiteral'], ['ol.style.Symbolizer', 'ol.style.SymbolizerLiteral']); +goog.addDependency('../../../ol/ol/style/polygon.js', ['ol.style.Polygon', 'ol.style.PolygonLiteral'], ['ol.Expression', 'ol.ExpressionLiteral', 'ol.style.Symbolizer', 'ol.style.SymbolizerLiteral']); +goog.addDependency('../../../ol/ol/style/rule.js', ['ol.style.Rule'], ['ol.Feature', 'ol.filter.Filter', 'ol.style.Symbolizer']); +goog.addDependency('../../../ol/ol/style/shape.js', ['ol.style.Shape', 'ol.style.ShapeLiteral', 'ol.style.ShapeType'], ['ol.Expression', 'ol.ExpressionLiteral', 'ol.style.Point', 'ol.style.PointLiteral']); +goog.addDependency('../../../ol/ol/style/style.js', ['ol.style.Style'], ['ol.Feature', 'ol.geom.GeometryType', 'ol.style.Rule', 'ol.style.SymbolizerLiteral']); +goog.addDependency('../../../ol/ol/style/symbolizer.js', ['ol.style.Symbolizer', 'ol.style.SymbolizerLiteral'], ['ol.Feature']); goog.addDependency('../../../ol/ol/tile.js', ['ol.Tile', 'ol.TileState'], ['goog.events', 'goog.events.EventTarget', 'goog.events.EventType', 'ol.TileCoord']); goog.addDependency('../../../ol/ol/tilecache.js', ['ol.TileCache'], ['ol.Tile', 'ol.TileRange', 'ol.structs.LRUCache']); goog.addDependency('../../../ol/ol/tilecoord.js', ['ol.TileCoord'], ['goog.array', 'ol.Coordinate']); diff --git a/master/build/ol-simple.js b/master/build/ol-simple.js index b4e09c3951..b14aaf57c1 100644 --- a/master/build/ol-simple.js +++ b/master/build/ol-simple.js @@ -37,8 +37,8 @@ goog.string.escapeChar=function(a){if(a in goog.string.jsEscapeCache_)return goo goog.string.contains=function(a,b){return-1!=a.indexOf(b)};goog.string.countOf=function(a,b){return a&&b?a.split(b).length-1:0};goog.string.removeAt=function(a,b,c){var d=a;0<=b&&(bb?1:0};goog.string.HASHCODE_MAX_=4294967296;goog.string.hashCode=function(a){for(var b=0,c=0;cb?1:0};goog.string.HASHCODE_MAX_=4294967296;goog.string.hashCode=function(a){for(var b=0,c=0;c(d=goog.arr goog.array.concat=function(a){return goog.array.ARRAY_PROTOTYPE_.concat.apply(goog.array.ARRAY_PROTOTYPE_,arguments)};goog.array.toArray=function(a){var b=a.length;if(0=arguments.length?goog.array.ARRAY_PROTOTYPE_.slice.call(a,b):goog.array.ARRAY_PROTOTYPE_.slice.call(a,b,c)};goog.array.removeDuplicates=function(a,b){for(var c=b||a,d={},e=0,f=0;f>1,j;j=c?b.call(e,a[i],i,a):b(d,a[i]);0>1,k;k=c?b.call(e,a[i],i,a):b(d,a[i]);0b?1:ac?(goog.array.insertAt(a,b,-(c+1)),!0):!1}; @@ -112,7 +112,7 @@ goog.userAgent.determineVersion_=function(){var a="",b;goog.userAgent.OPERA&&goo goog.userAgent.getDocumentMode_=function(){var a=goog.global.document;return a?a.documentMode:void 0};goog.userAgent.VERSION=goog.userAgent.determineVersion_();goog.userAgent.compare=function(a,b){return goog.string.compareVersions(a,b)};goog.userAgent.isVersionCache_={};goog.userAgent.isVersion=function(a){return goog.userAgent.ASSUME_ANY_VERSION||goog.userAgent.isVersionCache_[a]||(goog.userAgent.isVersionCache_[a]=0<=goog.string.compareVersions(goog.userAgent.VERSION,a))}; goog.userAgent.isDocumentModeCache_={};goog.userAgent.isDocumentMode=function(a){return goog.userAgent.isDocumentModeCache_[a]||(goog.userAgent.isDocumentModeCache_[a]=goog.userAgent.IE&&!!document.documentMode&&document.documentMode>=a)};goog.debug.catchErrors=function(a,b,c){var c=c||goog.global,d=c.onerror,e=!!b;goog.userAgent.WEBKIT&&!goog.userAgent.isVersion("535.3")&&(e=!e);c.onerror=function(b,c,h){d&&d(b,c,h);a({message:b,fileName:c,line:h});return e}};goog.debug.expose=function(a,b){if("undefined"==typeof a)return"undefined";if(null==a)return"NULL";var c=[],d;for(d in a)if(b||!goog.isFunction(a[d])){var e=d+" = ";try{e+=a[d]}catch(f){e+="*** "+f+" ***"}c.push(e)}return c.join("\n")}; goog.debug.deepExpose=function(a,b){var c=new goog.structs.Set,d=[],e=function(a,g){var h=g+" ";try{if(goog.isDef(a))if(goog.isNull(a))d.push("NULL");else if(goog.isString(a))d.push('"'+a.replace(/\n/g,"\n"+g)+'"');else if(goog.isFunction(a))d.push(String(a).replace(/\n/g,"\n"+g));else if(goog.isObject(a))if(c.contains(a))d.push("*** reference loop detected ***");else{c.add(a);d.push("{");for(var i in a)if(b||!goog.isFunction(a[i]))d.push("\n"),d.push(h),d.push(i+" = "),e(a[i],h);d.push("\n"+g+"}")}else d.push(a); -else d.push("undefined")}catch(j){d.push("*** "+j+" ***")}};e(a,"");return d.join("")};goog.debug.exposeArray=function(a){for(var b=[],c=0;c'+c.fileName+"\nLine: "+c.lineNumber+"\n\nBrowser stack:\n"+goog.string.htmlEscape(c.stack+"-> ")+"[end]\n\nJS stack traversal:\n"+goog.string.htmlEscape(goog.debug.getStacktrace(b)+"-> ")}catch(d){return"Exception trying to expose exception! You win, we lose. "+d}}; goog.debug.normalizeErrorObject=function(a){var b=goog.getObjectByName("window.location.href");if(goog.isString(a))return{message:a,name:"Unknown error",lineNumber:"Not available",fileName:b,stack:"Not available"};var c,d,e=!1;try{c=a.lineNumber||a.line||"Not available"}catch(f){c="Not available",e=!0}try{d=a.fileName||a.filename||a.sourceURL||b}catch(g){d="Not available",e=!0}return e||!a.lineNumber||!a.fileName||!a.stack?{message:a.message,name:a.name,lineNumber:c,fileName:d,stack:a.stack||"Not available"}: a};goog.debug.enhanceError=function(a,b){var c="string"==typeof a?Error(a):a;c.stack||(c.stack=goog.debug.getStacktrace(arguments.callee.caller));if(b){for(var d=0;c["message"+d];)++d;c["message"+d]=String(b)}return c}; @@ -143,7 +143,7 @@ goog.debug.Logger.prototype.finer=function(a,b){this.log(goog.debug.Logger.Level goog.debug.Logger.prototype.doLogRecord_=function(a){goog.debug.Logger.logToProfilers("log:"+a.getMessage());if(goog.debug.Logger.ENABLE_HIERARCHY)for(var b=this;b;)b.callPublish_(a),b=b.getParent();else for(var b=0,c;c=goog.debug.Logger.rootHandlers_[b++];)c(a)};goog.debug.Logger.prototype.callPublish_=function(a){if(this.handlers_)for(var b=0,c;c=this.handlers_[b];b++)c(a)};goog.debug.Logger.prototype.setParent_=function(a){this.parent_=a}; goog.debug.Logger.prototype.addChild_=function(a,b){this.getChildren()[a]=b};goog.debug.LogManager={};goog.debug.LogManager.loggers_={};goog.debug.LogManager.rootLogger_=null;goog.debug.LogManager.initialize=function(){goog.debug.LogManager.rootLogger_||(goog.debug.LogManager.rootLogger_=new goog.debug.Logger(""),goog.debug.LogManager.loggers_[""]=goog.debug.LogManager.rootLogger_,goog.debug.LogManager.rootLogger_.setLevel(goog.debug.Logger.Level.CONFIG))};goog.debug.LogManager.getLoggers=function(){return goog.debug.LogManager.loggers_}; goog.debug.LogManager.getRoot=function(){goog.debug.LogManager.initialize();return goog.debug.LogManager.rootLogger_};goog.debug.LogManager.getLogger=function(a){goog.debug.LogManager.initialize();return goog.debug.LogManager.loggers_[a]||goog.debug.LogManager.createLogger_(a)};goog.debug.LogManager.createFunctionForCatchErrors=function(a){return function(b){(a||goog.debug.LogManager.getRoot()).severe("Error: "+b.message+" ("+b.fileName+" @ Line: "+b.line+")")}}; -goog.debug.LogManager.createLogger_=function(a){var b=new goog.debug.Logger(a);if(goog.debug.Logger.ENABLE_HIERARCHY){var c=a.lastIndexOf("."),d=a.substr(0,c),c=a.substr(c+1),d=goog.debug.LogManager.getLogger(d);d.addChild_(c,b);b.setParent_(d)}return goog.debug.LogManager.loggers_[a]=b};var ol={};if(goog.DEBUG){var logger=goog.debug.Logger.getLogger("ol");logger.setLevel(goog.debug.Logger.Level.FINEST)};goog.dom={};goog.dom.BrowserFeature={CAN_ADD_NAME_OR_TYPE_ATTRIBUTES:!goog.userAgent.IE||goog.userAgent.isDocumentMode(9),CAN_USE_CHILDREN_ATTRIBUTE:!goog.userAgent.GECKO&&!goog.userAgent.IE||goog.userAgent.IE&&goog.userAgent.isDocumentMode(9)||goog.userAgent.GECKO&&goog.userAgent.isVersion("1.9.1"),CAN_USE_INNER_TEXT:goog.userAgent.IE&&!goog.userAgent.isVersion("9"),CAN_USE_PARENT_ELEMENT_PROPERTY:goog.userAgent.IE||goog.userAgent.OPERA||goog.userAgent.WEBKIT,INNER_HTML_NEEDS_SCOPED_ELEMENT:goog.userAgent.IE};goog.dom.TagName={A:"A",ABBR:"ABBR",ACRONYM:"ACRONYM",ADDRESS:"ADDRESS",APPLET:"APPLET",AREA:"AREA",ARTICLE:"ARTICLE",ASIDE:"ASIDE",AUDIO:"AUDIO",B:"B",BASE:"BASE",BASEFONT:"BASEFONT",BDI:"BDI",BDO:"BDO",BIG:"BIG",BLOCKQUOTE:"BLOCKQUOTE",BODY:"BODY",BR:"BR",BUTTON:"BUTTON",CANVAS:"CANVAS",CAPTION:"CAPTION",CENTER:"CENTER",CITE:"CITE",CODE:"CODE",COL:"COL",COLGROUP:"COLGROUP",COMMAND:"COMMAND",DATA:"DATA",DATALIST:"DATALIST",DD:"DD",DEL:"DEL",DETAILS:"DETAILS",DFN:"DFN",DIALOG:"DIALOG",DIR:"DIR",DIV:"DIV", +goog.debug.LogManager.createLogger_=function(a){var b=new goog.debug.Logger(a);if(goog.debug.Logger.ENABLE_HIERARCHY){var c=a.lastIndexOf("."),d=a.substr(0,c),c=a.substr(c+1),d=goog.debug.LogManager.getLogger(d);d.addChild_(c,b);b.setParent_(d)}return goog.debug.LogManager.loggers_[a]=b};var ol={};if(goog.DEBUG){var logger=goog.debug.Logger.getLogger("ol");logger.setLevel(goog.debug.Logger.Level.FINEST)}ol.CSS_CLASS_UNSELECTABLE="ol-unselectable";goog.dom={};goog.dom.BrowserFeature={CAN_ADD_NAME_OR_TYPE_ATTRIBUTES:!goog.userAgent.IE||goog.userAgent.isDocumentMode(9),CAN_USE_CHILDREN_ATTRIBUTE:!goog.userAgent.GECKO&&!goog.userAgent.IE||goog.userAgent.IE&&goog.userAgent.isDocumentMode(9)||goog.userAgent.GECKO&&goog.userAgent.isVersion("1.9.1"),CAN_USE_INNER_TEXT:goog.userAgent.IE&&!goog.userAgent.isVersion("9"),CAN_USE_PARENT_ELEMENT_PROPERTY:goog.userAgent.IE||goog.userAgent.OPERA||goog.userAgent.WEBKIT,INNER_HTML_NEEDS_SCOPED_ELEMENT:goog.userAgent.IE};goog.dom.TagName={A:"A",ABBR:"ABBR",ACRONYM:"ACRONYM",ADDRESS:"ADDRESS",APPLET:"APPLET",AREA:"AREA",ARTICLE:"ARTICLE",ASIDE:"ASIDE",AUDIO:"AUDIO",B:"B",BASE:"BASE",BASEFONT:"BASEFONT",BDI:"BDI",BDO:"BDO",BIG:"BIG",BLOCKQUOTE:"BLOCKQUOTE",BODY:"BODY",BR:"BR",BUTTON:"BUTTON",CANVAS:"CANVAS",CAPTION:"CAPTION",CENTER:"CENTER",CITE:"CITE",CODE:"CODE",COL:"COL",COLGROUP:"COLGROUP",COMMAND:"COMMAND",DATA:"DATA",DATALIST:"DATALIST",DD:"DD",DEL:"DEL",DETAILS:"DETAILS",DFN:"DFN",DIALOG:"DIALOG",DIR:"DIR",DIV:"DIV", DL:"DL",DT:"DT",EM:"EM",EMBED:"EMBED",FIELDSET:"FIELDSET",FIGCAPTION:"FIGCAPTION",FIGURE:"FIGURE",FONT:"FONT",FOOTER:"FOOTER",FORM:"FORM",FRAME:"FRAME",FRAMESET:"FRAMESET",H1:"H1",H2:"H2",H3:"H3",H4:"H4",H5:"H5",H6:"H6",HEAD:"HEAD",HEADER:"HEADER",HGROUP:"HGROUP",HR:"HR",HTML:"HTML",I:"I",IFRAME:"IFRAME",IMG:"IMG",INPUT:"INPUT",INS:"INS",ISINDEX:"ISINDEX",KBD:"KBD",KEYGEN:"KEYGEN",LABEL:"LABEL",LEGEND:"LEGEND",LI:"LI",LINK:"LINK",MAP:"MAP",MARK:"MARK",MATH:"MATH",MENU:"MENU",META:"META",METER:"METER", NAV:"NAV",NOFRAMES:"NOFRAMES",NOSCRIPT:"NOSCRIPT",OBJECT:"OBJECT",OL:"OL",OPTGROUP:"OPTGROUP",OPTION:"OPTION",OUTPUT:"OUTPUT",P:"P",PARAM:"PARAM",PRE:"PRE",PROGRESS:"PROGRESS",Q:"Q",RP:"RP",RT:"RT",RUBY:"RUBY",S:"S",SAMP:"SAMP",SCRIPT:"SCRIPT",SECTION:"SECTION",SELECT:"SELECT",SMALL:"SMALL",SOURCE:"SOURCE",SPAN:"SPAN",STRIKE:"STRIKE",STRONG:"STRONG",STYLE:"STYLE",SUB:"SUB",SUMMARY:"SUMMARY",SUP:"SUP",SVG:"SVG",TABLE:"TABLE",TBODY:"TBODY",TD:"TD",TEXTAREA:"TEXTAREA",TFOOT:"TFOOT",TH:"TH",THEAD:"THEAD", TIME:"TIME",TITLE:"TITLE",TR:"TR",TRACK:"TRACK",TT:"TT",U:"U",UL:"UL",VAR:"VAR",VIDEO:"VIDEO",WBR:"WBR"};goog.dom.classes={};goog.dom.classes.set=function(a,b){a.className=b};goog.dom.classes.get=function(a){a=a.className;return goog.isString(a)&&a.match(/\S+/g)||[]};goog.dom.classes.add=function(a,b){var c=goog.dom.classes.get(a),d=goog.array.slice(arguments,1),e=c.length+d.length;goog.dom.classes.add_(c,d);a.className=c.join(" ");return c.length==e}; @@ -151,7 +151,7 @@ goog.dom.classes.remove=function(a,b){var c=goog.dom.classes.get(a),d=goog.array goog.dom.classes.swap=function(a,b,c){for(var d=goog.dom.classes.get(a),e=!1,f=0;fc*b?c+b:c};goog.math.lerp=function(a,b,c){return a+c*(b-a)};goog.math.nearlyEquals=function(a,b,c){return Math.abs(a-b)<=(c||1E-6)};goog.math.standardAngle=function(a){return goog.math.modulo(a,360)}; goog.math.toRadians=function(a){return a*Math.PI/180};goog.math.toDegrees=function(a){return 180*a/Math.PI};goog.math.angleDx=function(a,b){return b*Math.cos(goog.math.toRadians(a))};goog.math.angleDy=function(a,b){return b*Math.sin(goog.math.toRadians(a))};goog.math.angle=function(a,b,c,d){return goog.math.standardAngle(goog.math.toDegrees(Math.atan2(d-b,c-a)))};goog.math.angleDifference=function(a,b){var c=goog.math.standardAngle(b)-goog.math.standardAngle(a);180=c&&(c=360+c);return c}; -goog.math.sign=function(a){return 0==a?0:0>a?-1:1};goog.math.longestCommonSubsequence=function(a,b,c,d){for(var c=c||function(a,b){return a==b},d=d||function(b){return a[b]},e=a.length,f=b.length,g=[],h=0;hg[h][i-1]?h--:i--;return j}; +goog.math.sign=function(a){return 0==a?0:0>a?-1:1};goog.math.longestCommonSubsequence=function(a,b,c,d){for(var c=c||function(a,b){return a==b},d=d||function(b){return a[b]},e=a.length,f=b.length,g=[],h=0;hg[h][i-1]?h--:i--;return k}; goog.math.sum=function(a){return goog.array.reduce(arguments,function(a,c){return a+c},0)};goog.math.average=function(a){return goog.math.sum.apply(null,arguments)/arguments.length};goog.math.standardDeviation=function(a){var b=arguments.length;if(2>b)return 0;var c=goog.math.average.apply(null,arguments),b=goog.math.sum.apply(null,goog.array.map(arguments,function(a){return Math.pow(a-c,2)}))/(b-1);return Math.sqrt(b)};goog.math.isInt=function(a){return isFinite(a)&&0==a%1}; goog.math.isFiniteNumber=function(a){return isFinite(a)&&!isNaN(a)};goog.math.Coordinate=function(a,b){this.x=goog.isDef(a)?a:0;this.y=goog.isDef(b)?b:0};goog.math.Coordinate.prototype.clone=function(){return new goog.math.Coordinate(this.x,this.y)};goog.DEBUG&&(goog.math.Coordinate.prototype.toString=function(){return"("+this.x+", "+this.y+")"});goog.math.Coordinate.equals=function(a,b){return a==b?!0:!a||!b?!1:a.x==b.x&&a.y==b.y};goog.math.Coordinate.distance=function(a,b){var c=a.x-b.x,d=a.y-b.y;return Math.sqrt(c*c+d*d)}; goog.math.Coordinate.magnitude=function(a){return Math.sqrt(a.x*a.x+a.y*a.y)};goog.math.Coordinate.azimuth=function(a){return goog.math.angle(0,0,a.x,a.y)};goog.math.Coordinate.squaredDistance=function(a,b){var c=a.x-b.x,d=a.y-b.y;return c*c+d*d};goog.math.Coordinate.difference=function(a,b){return new goog.math.Coordinate(a.x-b.x,a.y-b.y)};goog.math.Coordinate.sum=function(a,b){return new goog.math.Coordinate(a.x+b.x,a.y+b.y)};goog.math.Size=function(a,b){this.width=a;this.height=b};goog.math.Size.equals=function(a,b){return a==b?!0:!a||!b?!1:a.width==b.width&&a.height==b.height};goog.math.Size.prototype.clone=function(){return new goog.math.Size(this.width,this.height)};goog.DEBUG&&(goog.math.Size.prototype.toString=function(){return"("+this.width+" x "+this.height+")"});goog.math.Size.prototype.getLongest=function(){return Math.max(this.width,this.height)}; @@ -237,8 +237,8 @@ goog.events.fireListeners_=function(a,b,c,d,e){var f=1,b=goog.getUid(b);if(a[b]) goog.events.dispatchEvent=function(a,b){var c=b.type||b,d=goog.events.listenerTree_;if(!(c in d))return!0;if(goog.isString(b))b=new goog.events.Event(b,a);else if(b instanceof goog.events.Event)b.target=b.target||a;else{var e=b,b=new goog.events.Event(c,a);goog.object.extend(b,e)}var e=1,f,d=d[c],c=!0 in d,g;if(c){f=[];for(g=a;g;g=g.getParentEventTarget())f.push(g);g=d[!0];g.remaining_=g.count_;for(var h=f.length-1;!b.propagationStopped_&&0<=h&&g.remaining_;h--)b.currentTarget=f[h],e&=goog.events.fireListeners_(g, f[h],b.type,!0,b)&&!1!=b.returnValue_}if(!1 in d)if(g=d[!1],g.remaining_=g.count_,c)for(h=0;!b.propagationStopped_&&ha.keyCode||void 0!=a.returnValue};goog.events.uniqueIdCounter_=0;goog.events.getUniqueId=function(a){return a+"_"+goog.events.uniqueIdCounter_++};goog.debug.entryPointRegistry.register(function(a){goog.events.handleBrowserEvent_=a(goog.events.handleBrowserEvent_)});goog.math.Box=function(a,b,c,d){this.top=a;this.right=b;this.bottom=c;this.left=d};goog.math.Box.boundingBox=function(a){for(var b=new goog.math.Box(arguments[0].y,arguments[0].x,arguments[0].y,arguments[0].x),c=1;cgoog.vec.EPSILON?(b[2]=Math.atan2(a[2]*c,a[6]*c),b[1]=Math.atan2(d*c,a[10]),b[0]=Math.atan2(a[8]*c,-a[9]*c)):(b[0]=0,b[1]=Math.atan2(d*c,a[10]),b[2]=Math.atan2(a[1],a[0]));b[0]=(b[0]+2*Math.PI)%(2*Math.PI);b[2]=(b[2]+2*Math.PI)%(2*Math.PI);b[1]=(b[1]*c+2*Math.PI)%(2*Math.PI)*c;return b}; goog.vec.Mat4.translate=function(a,b,c,d){return goog.vec.Mat4.setColumnValues(a,3,a[0]*b+a[4]*c+a[8]*d+a[12],a[1]*b+a[5]*c+a[9]*d+a[13],a[2]*b+a[6]*c+a[10]*d+a[14],a[3]*b+a[7]*c+a[11]*d+a[15])};goog.vec.Mat4.scale=function(a,b,c,d){return goog.vec.Mat4.setFromValues(a,a[0]*b,a[1]*b,a[2]*b,a[3]*b,a[4]*c,a[5]*c,a[6]*c,a[7]*c,a[8]*d,a[9]*d,a[10]*d,a[11]*d,a[12],a[13],a[14],a[15])}; -goog.vec.Mat4.rotate=function(a,b,c,d,e){var f=a[0],g=a[1],h=a[2],i=a[3],j=a[4],m=a[5],k=a[6],l=a[7],p=a[8],n=a[9],q=a[10],r=a[11],s=a[12],t=a[13],x=a[14],u=a[15],v=Math.cos(b),y=Math.sin(b),w=1-v,b=c*c*w+v,A=c*d*w+e*y,B=c*e*w-d*y,C=c*d*w-e*y,D=d*d*w+v,E=d*e*w+c*y,F=c*e*w+d*y,c=d*e*w-c*y,e=e*e*w+v;return goog.vec.Mat4.setFromValues(a,f*b+j*A+p*B,g*b+m*A+n*B,h*b+k*A+q*B,i*b+l*A+r*B,f*C+j*D+p*E,g*C+m*D+n*E,h*C+k*D+q*E,i*C+l*D+r*E,f*F+j*c+p*e,g*F+m*c+n*e,h*F+k*c+q*e,i*F+l*c+r*e,s,t,x,u)}; -goog.vec.Mat4.rotateX=function(a,b){var c=a[4],d=a[5],e=a[6],f=a[7],g=a[8],h=a[9],i=a[10],j=a[11],m=Math.cos(b),k=Math.sin(b);a[4]=c*m+g*k;a[5]=d*m+h*k;a[6]=e*m+i*k;a[7]=f*m+j*k;a[8]=c*-k+g*m;a[9]=d*-k+h*m;a[10]=e*-k+i*m;a[11]=f*-k+j*m;return a};goog.vec.Mat4.rotateY=function(a,b){var c=a[0],d=a[1],e=a[2],f=a[3],g=a[8],h=a[9],i=a[10],j=a[11],m=Math.cos(b),k=Math.sin(b);a[0]=c*m+g*-k;a[1]=d*m+h*-k;a[2]=e*m+i*-k;a[3]=f*m+j*-k;a[8]=c*k+g*m;a[9]=d*k+h*m;a[10]=e*k+i*m;a[11]=f*k+j*m;return a}; -goog.vec.Mat4.rotateZ=function(a,b){var c=a[0],d=a[1],e=a[2],f=a[3],g=a[4],h=a[5],i=a[6],j=a[7],m=Math.cos(b),k=Math.sin(b);a[0]=c*m+g*k;a[1]=d*m+h*k;a[2]=e*m+i*k;a[3]=f*m+j*k;a[4]=c*-k+g*m;a[5]=d*-k+h*m;a[6]=e*-k+i*m;a[7]=f*-k+j*m;return a};goog.vec.Mat4.getTranslation=function(a,b){b[0]=a[12];b[1]=a[13];b[2]=a[14];return b};goog.vec.Mat4.tmpVec3_=[goog.vec.Vec3.createFloat64(),goog.vec.Vec3.createFloat64()];goog.vec.Mat4.tmpVec4_=[goog.vec.Vec4.createFloat64(),goog.vec.Vec4.createFloat64(),goog.vec.Vec4.createFloat64()]; +goog.vec.Mat4.rotate=function(a,b,c,d,e){var f=a[0],g=a[1],h=a[2],i=a[3],k=a[4],l=a[5],j=a[6],m=a[7],q=a[8],n=a[9],p=a[10],r=a[11],s=a[12],t=a[13],y=a[14],w=a[15],v=Math.cos(b),u=Math.sin(b),x=1-v,b=c*c*x+v,A=c*d*x+e*u,z=c*e*x-d*u,C=c*d*x-e*u,D=d*d*x+v,E=d*e*x+c*u,F=c*e*x+d*u,c=d*e*x-c*u,e=e*e*x+v;return goog.vec.Mat4.setFromValues(a,f*b+k*A+q*z,g*b+l*A+n*z,h*b+j*A+p*z,i*b+m*A+r*z,f*C+k*D+q*E,g*C+l*D+n*E,h*C+j*D+p*E,i*C+m*D+r*E,f*F+k*c+q*e,g*F+l*c+n*e,h*F+j*c+p*e,i*F+m*c+r*e,s,t,y,w)}; +goog.vec.Mat4.rotateX=function(a,b){var c=a[4],d=a[5],e=a[6],f=a[7],g=a[8],h=a[9],i=a[10],k=a[11],l=Math.cos(b),j=Math.sin(b);a[4]=c*l+g*j;a[5]=d*l+h*j;a[6]=e*l+i*j;a[7]=f*l+k*j;a[8]=c*-j+g*l;a[9]=d*-j+h*l;a[10]=e*-j+i*l;a[11]=f*-j+k*l;return a};goog.vec.Mat4.rotateY=function(a,b){var c=a[0],d=a[1],e=a[2],f=a[3],g=a[8],h=a[9],i=a[10],k=a[11],l=Math.cos(b),j=Math.sin(b);a[0]=c*l+g*-j;a[1]=d*l+h*-j;a[2]=e*l+i*-j;a[3]=f*l+k*-j;a[8]=c*j+g*l;a[9]=d*j+h*l;a[10]=e*j+i*l;a[11]=f*j+k*l;return a}; +goog.vec.Mat4.rotateZ=function(a,b){var c=a[0],d=a[1],e=a[2],f=a[3],g=a[4],h=a[5],i=a[6],k=a[7],l=Math.cos(b),j=Math.sin(b);a[0]=c*l+g*j;a[1]=d*l+h*j;a[2]=e*l+i*j;a[3]=f*l+k*j;a[4]=c*-j+g*l;a[5]=d*-j+h*l;a[6]=e*-j+i*l;a[7]=f*-j+k*l;return a};goog.vec.Mat4.getTranslation=function(a,b){b[0]=a[12];b[1]=a[13];b[2]=a[14];return b};goog.vec.Mat4.tmpVec3_=[goog.vec.Vec3.createFloat64(),goog.vec.Vec3.createFloat64()];goog.vec.Mat4.tmpVec4_=[goog.vec.Vec4.createFloat64(),goog.vec.Vec4.createFloat64(),goog.vec.Vec4.createFloat64()]; goog.vec.Mat4.tmpMat4_=[goog.vec.Mat4.createFloat64()];ol.QuadKeyCharCode={ZERO:48,ONE:49,TWO:50,THREE:51};ol.TileCoord=function(a,b,c){ol.Coordinate.call(this,b,c);this.z=a};goog.inherits(ol.TileCoord,ol.Coordinate);ol.TileCoord.createFromQuadKey=function(a){var b=a.length,c=0,d=0,e=1<>=1}return new ol.TileCoord(b,c,d)}; ol.TileCoord.createFromString=function(a){a=a.split("/");a=goog.array.map(a,function(a){return parseInt(a,10)});return new ol.TileCoord(a[0],a[1],a[2])};ol.TileCoord.prototype.hash=function(){return(this.x<>=1;return a.join("")}; ol.TileCoord.prototype.toString=function(){return[this.z,this.x,this.y].join("/")};ol.TileRange=function(a,b,c,d){this.minX=a;this.minY=b;this.maxX=c;this.maxY=d};goog.inherits(ol.TileRange,ol.Rectangle);ol.TileRange.boundingTileRange=function(a){var b=arguments[0],c=new ol.TileRange(b.x,b.y,b.x,b.y),d,e;for(d=1;da?ol.easing.inAndOut(2*a):1-ol.easing.inAndOut(2*(a-0.5))};ol.animation={};ol.animation.bounce=function(a){var b=a.resolution,c=goog.isDef(a.start)?a.start:goog.now(),d=goog.isDef(a.duration)?a.duration:1E3,e=goog.isDef(a.easing)?a.easing:ol.easing.upAndDown;return function(a,g){if(g.timea-this.delay_;)c--;if(0<=c){var a=this.points_[c],b=this.points_[b],c=b.x-a.x,d=b.y-a.y;this.angle_=Math.atan2(d,c);this.initialVelocity_=Math.sqrt(c*c+d*d)/(b.t-a.t);return this.initialVelocity_>this.minVelocity_}return!1}; ol.Kinetic.prototype.pan=function(a){var b=this.decay_,c=this.initialVelocity_,d=this.minVelocity_,e=this.getDuration_();return ol.animation.pan({source:a,duration:e,easing:function(a){return c*(Math.exp(b*a*e)-1)/(d-c)}})};ol.Kinetic.prototype.getDuration_=function(){return Math.log(this.minVelocity_/this.initialVelocity_)/this.decay_};ol.Kinetic.prototype.getDistance=function(){return(this.minVelocity_-this.initialVelocity_)/this.decay_};ol.Kinetic.prototype.getAngle=function(){return this.angle_};ol.interaction={};ol.interaction.Interaction=function(){};ol.interaction.DBLCLICKZOOM_ANIMATION_DURATION=250;ol.interaction.DblClickZoom=function(a){this.delta_=a;ol.interaction.Interaction.call(this)};goog.inherits(ol.interaction.DblClickZoom,ol.interaction.Interaction); ol.interaction.DblClickZoom.prototype.handleMapBrowserEvent=function(a){var b=a.browserEvent;if(a.type==ol.MapBrowserEvent.EventType.DBLCLICK&&a.isMouseActionButton()){var c=a.map,d=a.getCoordinate(),e=a.browserEvent.shiftKey?-this.delta_:this.delta_,f=c.getView();goog.asserts.assert(f instanceof ol.View2D);f.zoomByDelta(c,e,d,ol.interaction.DBLCLICKZOOM_ANIMATION_DURATION);a.preventDefault();b.preventDefault()}};ol.interaction.condition={};ol.interaction.condition.altKeyOnly=function(a){return a.altKey&&!a.platformModifierKey&&!a.shiftKey};ol.interaction.condition.altShiftKeysOnly=function(a){return a.altKey&&!a.platformModifierKey&&a.shiftKey};ol.interaction.condition.noModifierKeys=function(a){return!a.altKey&&!a.platformModifierKey&&!a.shiftKey};ol.interaction.condition.platformModifierKeyOnly=function(a){return!a.altKey&&a.platformModifierKey&&!a.shiftKey}; @@ -600,7 +600,7 @@ ol.tilegrid.TileGrid.prototype.getTileCoordCenter=function(a){var b=this.getOrig ol.tilegrid.TileGrid.prototype.getTileCoordForCoordAndResolution=function(a,b){return this.getTileCoordForCoordAndResolution_(a,b)};ol.tilegrid.TileGrid.prototype.getTileCoordForCoordAndResolution_=function(a,b,c){var d=this.getZForResolution(b),e=b/this.getResolution(d),f=this.getOrigin(d),g=this.getTileSize(d),h=e*(a.x-f.x)/(b*g.width),a=e*(a.y-f.y)/(b*g.height);c?(h=Math.ceil(h)-1,a=Math.ceil(a)-1):(h=Math.floor(h),a=Math.floor(a));return new ol.TileCoord(d,h,a)}; ol.tilegrid.TileGrid.prototype.getTileCoordForCoordAndZ=function(a,b){var c=this.getResolution(b);return this.getTileCoordForCoordAndResolution_(a,c)};ol.tilegrid.TileGrid.prototype.getTileCoordResolution=function(a){goog.asserts.assert(0<=a.z&&a.z=ol.structs.RTree.MAX_OBJECTS&&d.level=b;++b)e=d[b],e instanceof ol.filter.Geometry?f=e:e instanceof ol.filter.Extent&&(g=e);g&&f&&(c=this.rTree_.find(g.getExtent(), +f.getType()))}}if(!goog.isDef(c))for(b in d=this.idLookup_,c={},d)e=d[b],!0===a.applies(e)&&(c[b]=e)}else c=this.idLookup_;return c};ol.layer.FeatureCache.prototype.getFeaturesByGeometryType_=function(a){return goog.object.getValues(this.geometryTypeIndex_[a.getType()])};ol.layer.FeatureCache.prototype.getFeaturesByIds_=function(a){var b=a.length,c=Array(b),d;for(d=0;dthis.highWaterMark_};ol.TileCache.prototype.expireCache=function(a){for(var b,c;this.canExpireCache()&&!(b=this.peekLast(),c=b.tileCoord.z.toString(),c in a&&a[c].contains(b.tileCoord));)this.pop()};ol.geom.LineString=function(a,b){ol.geom.Geometry.call(this);goog.asserts.assert(goog.isArray(a[0]));var c=b;goog.isDef(c)||(c=a[0].length,c=new ol.geom.SharedVertices({dimension:c}));this.vertices=c;this.sharedId_=c.add(a);this.dimension=c.getDimension();goog.asserts.assert(2<=this.dimension);this.bounds_=null};goog.inherits(ol.geom.LineString,ol.geom.Geometry);ol.geom.LineString.prototype.get=function(a,b){return this.vertices.get(this.sharedId_,a,b)}; +ol.geom.LineString.prototype.getCoordinates=function(){for(var a=this.getCount(),b=Array(a),c,d=0;df&&(f=e),ih&&(h=i);this.bounds_=new ol.Extent(c,g,f,h)}return this.bounds_};ol.geom.LineString.prototype.getType=function(){return ol.geom.GeometryType.LINESTRING};ol.geom.LineString.prototype.getSharedId=function(){return this.sharedId_};ol.geom.AbstractCollection=function(){ol.geom.Geometry.call(this);this.bounds=this.components=null};goog.inherits(ol.geom.AbstractCollection,ol.geom.Geometry);ol.geom.AbstractCollection.prototype.getBounds=function(){if(goog.isNull(this.bounds)){var a,b=a=Number.POSITIVE_INFINITY,c,d=c=Number.NEGATIVE_INFINITY,e=this.components,f=e.length,g,h;for(h=0;hd;++d)e[d]=b[d].toFixed(c);c=e.join(",")}else c=b.join(",");ol.dom.setTransform(a,"matrix3d("+c+")")}else if(ol.dom.BrowserFeature.CAN_USE_CSS_TRANSFORM){b=[goog.vec.Mat4.getElement(b,0,0),goog.vec.Mat4.getElement(b,1,0),goog.vec.Mat4.getElement(b,0,1),goog.vec.Mat4.getElement(b,1,1),goog.vec.Mat4.getElement(b,0,3),goog.vec.Mat4.getElement(b,1,3)];if(goog.isDef(c)){e= Array(6);for(d=0;6>d;++d)e[d]=b[d].toFixed(c);c=e.join(",")}else c=b.join(",");ol.dom.setTransform(a,"matrix("+c+")")}else ol.dom.BrowserFeature.CAN_USE_MATRIX_FILTER?goog.asserts.assert(!1):(a=a.style,a.left=Math.round(goog.vec.Mat4.getElement(b,0,3))+"px",a.top=Math.round(goog.vec.Mat4.getElement(b,1,3))+"px")};ol.renderer.dom={};ol.renderer.dom.Layer=function(a,b,c){ol.renderer.Layer.call(this,a,b);this.target=c};goog.inherits(ol.renderer.dom.Layer,ol.renderer.Layer);ol.renderer.dom.Layer.prototype.disposeInternal=function(){goog.dom.removeNode(this.target);ol.renderer.dom.Layer.superClass_.disposeInternal.call(this)};ol.renderer.dom.Layer.prototype.getTarget=function(){return this.target};ol.renderer.dom.ImageLayer=function(a,b){var c=goog.dom.createElement(goog.dom.TagName.DIV);c.className="ol-layer-image";c.style.position="absolute";ol.renderer.dom.Layer.call(this,a,b,c);this.image_=null;this.transform_=goog.vec.Mat4.createNumberIdentity()};goog.inherits(ol.renderer.dom.ImageLayer,ol.renderer.dom.Layer);ol.renderer.dom.ImageLayer.prototype.getImageLayer=function(){return this.getLayer()}; ol.renderer.dom.ImageLayer.prototype.renderFrame=function(a){var b=a.view2DState,c=b.center,d=b.resolution,e=b.rotation,f=this.image_,g=this.getImageLayer().getImageSource(),h=a.viewHints;!h[ol.ViewHint.ANIMATING]&&!h[ol.ViewHint.INTERACTING]&&(b=g.getImage(a.extent,d,b.projection),goog.isNull(b)||(g=b.getState(),g==ol.ImageState.IDLE?(goog.events.listenOnce(b,goog.events.EventType.CHANGE,this.handleImageChange,!1,this),b.load()):g==ol.ImageState.LOADED&&(f=b)));goog.isNull(f)||(g=f.getExtent(),h= f.getResolution(),b=goog.vec.Mat4.createNumber(),goog.vec.Mat4.makeIdentity(b),goog.vec.Mat4.translate(b,a.size.width/2,a.size.height/2,0),goog.vec.Mat4.rotateZ(b,e),goog.vec.Mat4.scale(b,h/d,h/d,1),goog.vec.Mat4.translate(b,(g.minX-c.x)/h,(c.y-g.maxY)/h,0),f!=this.image_&&(c=f.getImageElement(this),c.style.position="absolute",goog.dom.removeChildren(this.target),goog.dom.appendChild(this.target,c),this.image_=f),this.setTransform(b),this.updateAttributions(a.attributions,f.getAttributions()))}; ol.renderer.dom.ImageLayer.prototype.setTransform=function(a){goog.vec.Mat4.equals(a,this.transform_)||(ol.dom.transformElement2D(this.target,a,6),goog.vec.Mat4.setFromArray(this.transform_,a))};ol.renderer.dom.TileLayer=function(a,b){var c=goog.dom.createElement(goog.dom.TagName.DIV);c.className="ol-layer-tile";c.style.position="absolute";ol.renderer.dom.Layer.call(this,a,b,c);this.renderedVisible_=!0;this.renderedOpacity_=1;this.tileLayerZs_={}};goog.inherits(ol.renderer.dom.TileLayer,ol.renderer.dom.Layer);ol.renderer.dom.TileLayer.prototype.getTileLayer=function(){return this.getLayer()}; -ol.renderer.dom.TileLayer.prototype.renderFrame=function(a,b){if(b.visible){var c=a.view2DState,d=c.projection,e=this.getTileLayer().getTileSource(),f=goog.getUid(e).toString(),g=e.getTileGrid();goog.isNull(g)&&(g=ol.tilegrid.getForProjection(d));var h=g.getZForResolution(c.resolution),i=g.getResolution(h),j=c.center,m;i==c.resolution?(j=this.snapCenterToPixel(j,i,a.size),m=ol.Extent.getForView2DAndSize(j,i,c.rotation,a.size)):m=a.extent;var i=g.getTileRangeForExtentAndResolution(m,i),k={};k[h]={}; -var l=this.createGetTileIfLoadedFunction(function(a){return!goog.isNull(a)&&a.getState()==ol.TileState.LOADED},e,g,d),l=goog.bind(e.findLoadedTiles,e,k,l),p,n,q,r,s;for(r=i.minX;r<=i.maxX;++r)for(s=i.minY;s<=i.maxY;++s){q=new ol.TileCoord(h,r,s);p=e.getTile(q,g,d);n=p.getState();if(n==ol.TileState.IDLE)this.updateWantedTiles(a.wantedTiles,e,q),n=g.getTileCoordCenter(q),a.tileQueue.enqueue(p,f,n);else if(n==ol.TileState.LOADING)this.listenToTileChange(p);else if(n==ol.TileState.LOADED){k[h][q.toString()]= -p;continue}else if(n==ol.TileState.ERROR||n==ol.TileState.EMPTY)continue;g.forEachTileCoordParentTileRange(q,l)}p=goog.array.map(goog.object.getKeys(k),Number);goog.array.sort(p);var d={},t;for(q=0;ql&&goog.dom.insertChildAt(this.target,f.target,0)}else!a.viewHints[ol.ViewHint.ANIMATING]&&!a.viewHints[ol.ViewHint.INTERACTING]&&f.removeTilesOutsideExtent(m);else goog.dom.removeNode(f.target),delete this.tileLayerZs_[l];b.opacity!=this.renderedOpacity_&&(goog.style.setOpacity(this.target,b.opacity),this.renderedOpacity_=b.opacity);b.visible&&!this.renderedVisible_&&(goog.style.showElement(this.target,!0),this.renderedVisible_=!0);this.updateUsedTiles(a.usedTiles,e,h,i);e.useLowResolutionTiles(h, -m,g);this.scheduleExpireCache(a,e)}else this.renderedVisible_&&(goog.style.showElement(this.target,!1),this.renderedVisible_=!1)};ol.renderer.dom.TileLayerZ_=function(a,b){this.target=goog.dom.createElement(goog.dom.TagName.DIV);this.target.style.position="absolute";this.tileGrid_=a;this.tileCoordOrigin_=b;this.origin_=a.getTileCoordExtent(b).getTopLeft();this.resolution_=a.getResolution(b.z);this.tiles_={};this.documentFragment_=null;this.transform_=goog.vec.Mat4.createNumberIdentity()}; +ol.renderer.dom.TileLayer.prototype.renderFrame=function(a,b){if(b.visible){var c=a.view2DState,d=c.projection,e=this.getTileLayer().getTileSource(),f=goog.getUid(e).toString(),g=e.getTileGrid();goog.isNull(g)&&(g=ol.tilegrid.getForProjection(d));var h=g.getZForResolution(c.resolution),i=g.getResolution(h),k=c.center,l;i==c.resolution?(k=this.snapCenterToPixel(k,i,a.size),l=ol.Extent.getForView2DAndSize(k,i,c.rotation,a.size)):l=a.extent;var i=g.getTileRangeForExtentAndResolution(l,i),j={};j[h]={}; +var m=this.createGetTileIfLoadedFunction(function(a){return!goog.isNull(a)&&a.getState()==ol.TileState.LOADED},e,g,d),m=goog.bind(e.findLoadedTiles,e,j,m),q,n,p,r,s;for(r=i.minX;r<=i.maxX;++r)for(s=i.minY;s<=i.maxY;++s){p=new ol.TileCoord(h,r,s);q=e.getTile(p,g,d);n=q.getState();if(n==ol.TileState.IDLE)this.updateWantedTiles(a.wantedTiles,e,p),n=g.getTileCoordCenter(p),a.tileQueue.enqueue(q,f,n);else if(n==ol.TileState.LOADING)this.listenToTileChange(q);else if(n==ol.TileState.LOADED){j[h][p.toString()]= +q;continue}else if(n==ol.TileState.ERROR||n==ol.TileState.EMPTY)continue;g.forEachTileCoordParentTileRange(p,m)}q=goog.array.map(goog.object.getKeys(j),Number);goog.array.sort(q);var d={},t;for(p=0;pm&&goog.dom.insertChildAt(this.target,f.target,0)}else!a.viewHints[ol.ViewHint.ANIMATING]&&!a.viewHints[ol.ViewHint.INTERACTING]&&f.removeTilesOutsideExtent(l);else goog.dom.removeNode(f.target),delete this.tileLayerZs_[m];b.opacity!=this.renderedOpacity_&&(goog.style.setOpacity(this.target,b.opacity),this.renderedOpacity_=b.opacity);b.visible&&!this.renderedVisible_&&(goog.style.showElement(this.target,!0),this.renderedVisible_=!0);this.updateUsedTiles(a.usedTiles,e,h,i);e.useLowResolutionTiles(h, +l,g);this.scheduleExpireCache(a,e)}else this.renderedVisible_&&(goog.style.showElement(this.target,!1),this.renderedVisible_=!1)};ol.renderer.dom.TileLayerZ_=function(a,b){this.target=goog.dom.createElement(goog.dom.TagName.DIV);this.target.style.position="absolute";this.tileGrid_=a;this.tileCoordOrigin_=b;this.origin_=a.getTileCoordExtent(b).getTopLeft();this.resolution_=a.getResolution(b.z);this.tiles_={};this.documentFragment_=null;this.transform_=goog.vec.Mat4.createNumberIdentity()}; ol.renderer.dom.TileLayerZ_.prototype.addTile=function(a){var b=a.tileCoord;goog.asserts.assert(b.z==this.tileCoordOrigin_.z);var c=b.toString();if(!(c in this.tiles_)){var d=this.tileGrid_.getTileSize(b.z),e=a.getImage(this),f=e.style;f.position="absolute";f.left=(b.x-this.tileCoordOrigin_.x)*d.width+"px";f.top=(this.tileCoordOrigin_.y-b.y)*d.height+"px";goog.isNull(this.documentFragment_)&&(this.documentFragment_=document.createDocumentFragment());goog.dom.appendChild(this.documentFragment_,e); this.tiles_[c]=a}};ol.renderer.dom.TileLayerZ_.prototype.finalizeAddTiles=function(){goog.isNull(this.documentFragment_)||(goog.dom.appendChild(this.target,this.documentFragment_),this.documentFragment_=null)};ol.renderer.dom.TileLayerZ_.prototype.getOrigin=function(){return this.origin_};ol.renderer.dom.TileLayerZ_.prototype.getResolution=function(){return this.resolution_}; ol.renderer.dom.TileLayerZ_.prototype.removeTilesOutsideExtent=function(a){var b=this.tileGrid_.getTileRangeForExtentAndZ(a,this.tileCoordOrigin_.z),a=[],c,d;for(d in this.tiles_)c=this.tiles_[d],b.contains(c.tileCoord)||a.push(c);for(b=0;b=a.getCount()){for(var a=this.nodes_,d=0;d=b))return 1==b?goog.array.clear(a):(a[0]=a.pop(),this.moveDown_(0)),c.getValue()}; @@ -692,27 +772,20 @@ ol.renderer.webgl.TileLayer.prototype.bindFramebuffer_=function(a,b){var c=this. null);c.texParameteri(goog.webgl.TEXTURE_2D,goog.webgl.TEXTURE_MAG_FILTER,goog.webgl.LINEAR);c.texParameteri(goog.webgl.TEXTURE_2D,goog.webgl.TEXTURE_MIN_FILTER,goog.webgl.LINEAR);var e=c.createFramebuffer();c.bindFramebuffer(goog.webgl.FRAMEBUFFER,e);c.framebufferTexture2D(goog.webgl.FRAMEBUFFER,goog.webgl.COLOR_ATTACHMENT0,goog.webgl.TEXTURE_2D,d,0);this.texture_=d;this.framebuffer_=e;this.framebufferDimension_=b}else c.bindFramebuffer(goog.webgl.FRAMEBUFFER,this.framebuffer_)}; ol.renderer.webgl.TileLayer.prototype.disposeInternal=function(){var a=this.getMapRenderer().getGL();a.isContextLost()||(a.deleteBuffer(this.arrayBuffer_),a.deleteFramebuffer(this.framebuffer_),a.deleteTexture(this.texture_));ol.renderer.webgl.TileLayer.superClass_.disposeInternal.call(this)};ol.renderer.webgl.TileLayer.prototype.getTexCoordMatrix=function(){return this.texCoordMatrix_};ol.renderer.webgl.TileLayer.prototype.getTexture=function(){return this.texture_}; ol.renderer.webgl.TileLayer.prototype.getProjectionMatrix=function(){return this.projectionMatrix_};ol.renderer.webgl.TileLayer.prototype.getTileLayer=function(){return this.getLayer()};ol.renderer.webgl.TileLayer.prototype.handleWebGLContextLost=function(){this.framebuffer_=this.texture_=this.arrayBuffer_=this.locations_=null;this.framebufferDimension_=void 0}; -ol.renderer.webgl.TileLayer.prototype.renderFrame=function(a){var b=this.getMapRenderer(),c=b.getGL(),d=a.view2DState,e=d.projection,f=this.getTileLayer().getTileSource(),g=goog.getUid(f).toString(),h=f.getTileGrid();goog.isNull(h)&&(h=ol.tilegrid.getForProjection(e));var i=h.getZForResolution(d.resolution),j=h.getResolution(i),m=d.center,k;j==d.resolution?(m=this.snapCenterToPixel(m,j,a.size),k=ol.Extent.getForView2DAndSize(m,j,d.rotation,a.size)):k=a.extent;var l=h.getTileRangeForExtentAndResolution(k, -j),p;if(!goog.isNull(this.renderedTileRange_)&&this.renderedTileRange_.equals(l))p=this.renderedFramebufferExtent_;else{var n=l.getSize(),q=h.getTileSize(i),n=Math.max(n.width*q.width,n.height*q.height),n=Math.pow(2,Math.ceil(Math.log(n)/Math.log(2))),r=new ol.Size(j*n,j*n),s=h.getOrigin(i),t=s.x+l.minX*q.width*j,j=s.y+l.minY*q.height*j;p=new ol.Extent(t,j,t+r.width,j+r.height);this.bindFramebuffer_(a,n);c.viewport(0,0,n,n);c.clearColor(0,0,0,0);c.clear(goog.webgl.COLOR_BUFFER_BIT);c.disable(goog.webgl.BLEND); -j=b.getProgram(this.fragmentShader_,this.vertexShader_);c.useProgram(j);goog.isNull(this.locations_)&&(this.locations_={aPosition:c.getAttribLocation(j,"aPosition"),aTexCoord:c.getAttribLocation(j,"aTexCoord"),uTileOffset:c.getUniformLocation(j,"uTileOffset"),uTexture:c.getUniformLocation(j,"uTexture")});goog.isNull(this.arrayBuffer_)?(j=c.createBuffer(),c.bindBuffer(goog.webgl.ARRAY_BUFFER,j),c.bufferData(goog.webgl.ARRAY_BUFFER,new Float32Array([0,0,0,1,1,0,1,1,0,1,0,0,1,1,1,0]),goog.webgl.STATIC_DRAW), -this.arrayBuffer_=j):c.bindBuffer(goog.webgl.ARRAY_BUFFER,this.arrayBuffer_);c.enableVertexAttribArray(this.locations_.aPosition);c.vertexAttribPointer(this.locations_.aPosition,2,goog.webgl.FLOAT,!1,16,0);c.enableVertexAttribArray(this.locations_.aTexCoord);c.vertexAttribPointer(this.locations_.aTexCoord,2,goog.webgl.FLOAT,!1,16,8);c.uniform1i(this.locations_.uTexture,0);var x={};x[i]={};for(var j=this.createGetTileIfLoadedFunction(function(a){return!goog.isNull(a)&&a.getState()==ol.TileState.LOADED&& -b.isTileTextureLoaded(a)},f,h,e),q=goog.bind(f.findLoadedTiles,f,x,j),j=new goog.structs.PriorityQueue,u=!0,v,y,s=l.minX;s<=l.maxX;++s)for(y=l.minY;y<=l.maxY;++y){t=new ol.TileCoord(i,s,y);n=f.getTile(t,h,e);v=n.getState();if(v==ol.TileState.IDLE)this.updateWantedTiles(a.wantedTiles,f,t),v=h.getTileCoordCenter(t),a.tileQueue.enqueue(n,g,v);else if(v==ol.TileState.LOADING)this.listenToTileChange(n);else if(v==ol.TileState.LOADED)if(b.isTileTextureLoaded(n)){x[i][t.toString()]=n;continue}else v=h.getTileCoordCenter(t), -u=v.x-m.x,v=v.y-m.y,u=Math.sqrt(u*u+v*v),j.enqueue(u,n);else if(v==ol.TileState.ERROR||v==ol.TileState.EMPTY)continue;u=!1;h.forEachTileCoordParentTileRange(t,q)}e=goog.array.map(goog.object.getKeys(x),Number);goog.array.sort(e);var w=goog.vec.Vec4.createFloat32();goog.array.forEach(e,function(a){goog.object.forEach(x[a],function(a){var d=h.getTileCoordExtent(a.tileCoord),e=2*d.getWidth()/r.width,f=2*d.getHeight()/r.height;goog.vec.Vec4.setFromValues(w,e,f,2*(d.minX-p.minX)/r.width-1,2*(d.minY-p.minY)/ -r.height-1);c.uniform4fv(this.locations_.uTileOffset,w);b.bindTileTexture(a,goog.webgl.LINEAR,goog.webgl.LINEAR);c.drawArrays(goog.webgl.TRIANGLE_STRIP,0,4)},this)},this);j.isEmpty()||a.postRenderFunctions.push(goog.partial(function(a,b){var c,d;for(c=0;!b.isEmpty()&&4>c;++c)d=b.remove(),a.bindTileTexture(d,goog.webgl.LINEAR,goog.webgl.LINEAR)},b,j));u?(this.renderedTileRange_=l,this.renderedFramebufferExtent_=p):(this.renderedFramebufferExtent_=this.renderedTileRange_=null,a.animate=!0)}this.updateUsedTiles(a.usedTiles, -f,i,l);f.useLowResolutionTiles(i,k,h);this.scheduleExpireCache(a,f);goog.vec.Mat4.makeIdentity(this.texCoordMatrix_);goog.vec.Mat4.translate(this.texCoordMatrix_,(m.x-p.minX)/(p.maxX-p.minX),(m.y-p.minY)/(p.maxY-p.minY),0);goog.vec.Mat4.rotateZ(this.texCoordMatrix_,d.rotation);goog.vec.Mat4.scale(this.texCoordMatrix_,a.size.width*d.resolution/(p.maxX-p.minX),a.size.height*d.resolution/(p.maxY-p.minY),1);goog.vec.Mat4.translate(this.texCoordMatrix_,-0.5,-0.5,0)};ol.structs={};ol.structs.LRUCache=function(){this.count_=0;this.entries_={};this.newest_=this.oldest_=null}; -ol.structs.LRUCache.prototype.assertValid=function(){if(0===this.count_)goog.asserts.assert(goog.object.isEmpty(this.entries_)),goog.asserts.assert(goog.isNull(this.oldest_)),goog.asserts.assert(goog.isNull(this.newest_));else{goog.asserts.assert(goog.object.getCount(this.entries_)==this.count_);goog.asserts.assert(!goog.isNull(this.oldest_));goog.asserts.assert(goog.isNull(this.oldest_.older));goog.asserts.assert(!goog.isNull(this.newest_));goog.asserts.assert(goog.isNull(this.newest_.newer));var a, -b,c=null;a=0;for(b=this.oldest_;!goog.isNull(b);b=b.newer)goog.asserts.assert(b.older===c),c=b,++a;goog.asserts.assert(a==this.count_);c=null;a=0;for(b=this.newest_;!goog.isNull(b);b=b.older)goog.asserts.assert(b.newer===c),c=b,++a;goog.asserts.assert(a==this.count_)}};ol.structs.LRUCache.prototype.clear=function(){this.count_=0;this.entries_={};this.newest_=this.oldest_=null};ol.structs.LRUCache.prototype.containsKey=function(a){return this.entries_.hasOwnProperty(a)}; -ol.structs.LRUCache.prototype.forEach=function(a,b){for(var c=this.oldest_;!goog.isNull(c);)a.call(b,c.value_,c.key_,this),c=c.newer};ol.structs.LRUCache.prototype.get=function(a){a=this.entries_[a];goog.asserts.assert(goog.isDef(a));if(a===this.newest_)return a.value_;a===this.oldest_?(this.oldest_=this.oldest_.newer,this.oldest_.older=null):(a.newer.older=a.older,a.older.newer=a.newer);a.newer=null;a.older=this.newest_;this.newest_=this.newest_.newer=a;return a.value_}; -ol.structs.LRUCache.prototype.getCount=function(){return this.count_};ol.structs.LRUCache.prototype.getKeys=function(){var a=Array(this.count_),b=0,c;for(c=this.newest_;!goog.isNull(c);c=c.older)a[b++]=c.key_;goog.asserts.assert(b==this.count_);return a};ol.structs.LRUCache.prototype.getValues=function(){var a=Array(this.count_),b=0,c;for(c=this.newest_;!goog.isNull(c);c=c.older)a[b++]=c.value_;goog.asserts.assert(b==this.count_);return a}; -ol.structs.LRUCache.prototype.peekLast=function(){goog.asserts.assert(!goog.isNull(this.oldest_));return this.oldest_.value_};ol.structs.LRUCache.prototype.peekLastKey=function(){goog.asserts.assert(!goog.isNull(this.oldest_));return this.oldest_.key_}; -ol.structs.LRUCache.prototype.pop=function(){goog.asserts.assert(!goog.isNull(this.oldest_));goog.asserts.assert(!goog.isNull(this.newest_));var a=this.oldest_;goog.asserts.assert(a.key_ in this.entries_);delete this.entries_[a.key_];goog.isNull(a.newer)||(a.newer.older=null);this.oldest_=a.newer;goog.isNull(this.oldest_)&&(this.newest_=null);--this.count_;return a.value_}; -ol.structs.LRUCache.prototype.set=function(a,b){goog.asserts.assert(!(a in{}));goog.asserts.assert(!(a in this.entries_));var c={key_:a,newer:null,older:this.newest_,value_:b};goog.isNull(this.newest_)?this.oldest_=c:this.newest_.newer=c;this.newest_=c;this.entries_[a]=c;++this.count_};ol.webgl={};ol.webgl.CONTEXT_IDS_=["webgl","webgl-experimental","webkit-3d","moz-webgl"];ol.webgl.WebGLContextEventType={LOST:"webglcontextlost",RESTORED:"webglcontextrestored"};ol.webgl.getContext=function(a,b){var c,d,e=ol.webgl.CONTEXT_IDS_.length;for(d=0;dc;++c)d=b.remove(),a.bindTileTexture(d,goog.webgl.LINEAR,goog.webgl.LINEAR)},b,k));w?(this.renderedTileRange_=m,this.renderedFramebufferExtent_=q):(this.renderedFramebufferExtent_=this.renderedTileRange_=null,a.animate=!0)}this.updateUsedTiles(a.usedTiles, +f,i,m);f.useLowResolutionTiles(i,j,h);this.scheduleExpireCache(a,f);goog.vec.Mat4.makeIdentity(this.texCoordMatrix_);goog.vec.Mat4.translate(this.texCoordMatrix_,(l.x-q.minX)/(q.maxX-q.minX),(l.y-q.minY)/(q.maxY-q.minY),0);goog.vec.Mat4.rotateZ(this.texCoordMatrix_,d.rotation);goog.vec.Mat4.scale(this.texCoordMatrix_,a.size.width*d.resolution/(q.maxX-q.minX),a.size.height*d.resolution/(q.maxY-q.minY),1);goog.vec.Mat4.translate(this.texCoordMatrix_,-0.5,-0.5,0)};ol.webgl={};ol.webgl.CONTEXT_IDS_=["webgl","webgl-experimental","webkit-3d","moz-webgl"];ol.webgl.WebGLContextEventType={LOST:"webglcontextlost",RESTORED:"webglcontextrestored"};ol.webgl.getContext=function(a,b){var c,d,e=ol.webgl.CONTEXT_IDS_.length;for(d=0;dthis.highWaterMark_};ol.TileCache.prototype.expireCache=function(a){for(var b,c;this.canExpireCache()&&!(b=this.peekLast(),c=b.tileCoord.z.toString(),c in a&&a[c].contains(b.tileCoord));)this.pop()};ol.TileUrlFunction={};ol.TileUrlFunction.createFromTemplate=function(a){var b=/\{(\d)-(\d)\}/.exec(a)||/\{([a-z])-([a-z])\}/.exec(a);if(b){for(var c=[],d=b[1].charCodeAt(0),e=b[2].charCodeAt(0);d<=e;++d)c.push(a.replace(b[0],String.fromCharCode(d)));return ol.TileUrlFunction.createFromTemplates(c)}return function(b){return goog.isNull(b)?void 0:a.replace("{z}",b.z).replace("{x}",b.x).replace("{y}",b.y)}}; -ol.TileUrlFunction.createFromTemplates=function(a){return ol.TileUrlFunction.createFromTileUrlFunctions(goog.array.map(a,ol.TileUrlFunction.createFromTemplate))};ol.TileUrlFunction.createFromTileUrlFunctions=function(a){return 1===a.length?a[0]:function(b,c,d){if(!goog.isNull(b)){var e=goog.math.modulo(b.hash(),a.length);return a[e](b,c,d)}}}; -ol.TileUrlFunction.createWMSParams=function(a,b){return function(c,d,e){if(!goog.isNull(c)){var f=d.getTileSize(c.z),c=d.getTileCoordExtent(c);return ol.source.wms.getUrl(a,b,c,f,e)}}};ol.TileUrlFunction.nullTileUrlFunction=function(){};ol.TileUrlFunction.withTileCoordTransform=function(a,b){return function(c,d,e){return goog.isNull(c)?void 0:b(a(c,d,e),d,e)}};ol.control.MousePosition=function(a){var a=goog.isDef(a)?a:{},b=goog.dom.createDom(goog.dom.TagName.DIV,{"class":"ol-mouse-position"});ol.control.Control.call(this,{element:b,map:a.map,target:a.target});this.projection_=ol.projection.get(a.projection);this.coordinateFormat_=a.coordinateFormat;this.undefinedHTML_=goog.isDef(a.undefinedHTML)?a.undefinedHTML:"";this.renderedHTML_=b.innerHTML;this.mapProjection_=null;this.transform_=ol.projection.identityTransform;this.listenerKeys_=this.lastMouseMovePixel_= +ol.ImageTile.prototype.unlistenImage_=function(){goog.asserts.assert(!goog.isNull(this.imageListenerKeys_));goog.array.forEach(this.imageListenerKeys_,goog.events.unlistenByKey);this.imageListenerKeys_=null};ol.TileUrlFunction={};ol.TileUrlFunction.createFromTemplate=function(a){return function(b){return goog.isNull(b)?void 0:a.replace("{z}",b.z).replace("{x}",b.x).replace("{y}",b.y)}};ol.TileUrlFunction.createFromTemplates=function(a){return ol.TileUrlFunction.createFromTileUrlFunctions(goog.array.map(a,ol.TileUrlFunction.createFromTemplate))}; +ol.TileUrlFunction.createFromTileUrlFunctions=function(a){return 1===a.length?a[0]:function(b,c,d){if(!goog.isNull(b)){var e=goog.math.modulo(b.hash(),a.length);return a[e](b,c,d)}}};ol.TileUrlFunction.createWMSParams=function(a,b){return function(c,d,e){if(!goog.isNull(c)){var f=d.getTileSize(c.z),c=d.getTileCoordExtent(c);return ol.source.wms.getUrl(a,b,c,f,e)}}};ol.TileUrlFunction.nullTileUrlFunction=function(){}; +ol.TileUrlFunction.withTileCoordTransform=function(a,b){return function(c,d,e){return goog.isNull(c)?void 0:b(a(c,d,e),d,e)}};ol.TileUrlFunction.expandUrl=function(a){var b=[],c=/\{(\d)-(\d)\}/.exec(a)||/\{([a-z])-([a-z])\}/.exec(a);if(c)for(var d=c[1].charCodeAt(0),e=c[2].charCodeAt(0);d<=e;++d)b.push(a.replace(c[0],String.fromCharCode(d)));else b.push(a);return b};ol.control.MousePosition=function(a){var a=goog.isDef(a)?a:{},b=goog.dom.createDom(goog.dom.TagName.DIV,{"class":"ol-mouse-position"});ol.control.Control.call(this,{element:b,map:a.map,target:a.target});this.projection_=ol.projection.get(a.projection);this.coordinateFormat_=a.coordinateFormat;this.undefinedHTML_=goog.isDef(a.undefinedHTML)?a.undefinedHTML:"";this.renderedHTML_=b.innerHTML;this.mapProjection_=null;this.transform_=ol.projection.identityTransform;this.listenerKeys_=this.lastMouseMovePixel_= this.renderedProjection_=null};goog.inherits(ol.control.MousePosition,ol.control.Control);ol.control.MousePosition.prototype.handleMapPostrender=function(a){a=a.frameState;this.mapProjection_=goog.isNull(a)?null:a.view2DState.projection;this.updateHTML_(this.lastMouseMovePixel_)};ol.control.MousePosition.prototype.handleMouseMove=function(a){var b=this.getMap(),a=goog.style.getRelativePosition(a,b.getViewport()),a=new ol.Pixel(a.x,a.y);this.updateHTML_(a);this.lastMouseMovePixel_=a}; ol.control.MousePosition.prototype.handleMouseOut=function(){this.updateHTML_(null);this.lastMouseMovePixel_=null}; ol.control.MousePosition.prototype.setMap=function(a){goog.isNull(this.listenerKeys_)||(goog.array.forEach(this.listenerKeys_,goog.events.unlistenByKey),this.listenerKeys_=null);ol.control.MousePosition.superClass_.setMap.call(this,a);if(!goog.isNull(a)){var b=a.getViewport();this.listenerKeys_=[goog.events.listen(b,goog.events.EventType.MOUSEMOVE,this.handleMouseMove,!1,this),goog.events.listen(b,goog.events.EventType.MOUSEOUT,this.handleMouseOut,!1,this),goog.events.listen(a,ol.MapEventType.POSTRENDER, this.handleMapPostrender,!1,this)]}}; ol.control.MousePosition.prototype.updateHTML_=function(a){var b=this.undefinedHTML_;goog.isNull(a)||(this.renderedProjection_!=this.mapProjection_&&(this.transform_=goog.isNull(this.projection_)?ol.projection.identityTransform:ol.projection.getTransformFromProjections(this.mapProjection_,this.projection_),this.renderedProjection_=this.mapProjection_),a=this.getMap().getCoordinateFromPixel(a),goog.isNull(a)||(b=[a.x,a.y],b=this.transform_(b,b),a=new ol.Coordinate(b[0],b[1]),b=goog.isDef(this.coordinateFormat_)? this.coordinateFormat_(a):a.toString()));if(!goog.isDef(this.renderedHTML_)||b!=this.renderedHTML_)this.renderedHTML_=this.element.innerHTML=b};ol.control.ScaleLineUnits={DEGREES:"degrees",IMPERIAL:"imperial",NAUTICAL:"nautical",METRIC:"metric",US:"us"}; -ol.control.ScaleLine=function(a){a=a||{};this.innerElement_=goog.dom.createDom(goog.dom.TagName.DIV,{"class":"ol-scale-line-inner"});this.element_=goog.dom.createDom(goog.dom.TagName.DIV,{"class":"ol-scale-line ol-unselectable"},this.innerElement_);this.minWidth_=goog.isDef(a.minWidth)?a.minWidth:64;this.units_=goog.isDef(a.units)?a.units:ol.control.ScaleLineUnits.METRIC;this.listenerKeys_=null;this.renderedVisible_=!1;this.renderedHTML_="";this.toEPSG4326_=null;ol.control.Control.call(this,{element:this.element_, -map:a.map,target:a.target})};goog.inherits(ol.control.ScaleLine,ol.control.Control);ol.control.ScaleLine.LEADING_DIGITS=[1,2,5];ol.control.ScaleLine.prototype.handleMapPostrender=function(a){this.updateElement_(a.frameState)}; +ol.control.ScaleLine=function(a){a=a||{};this.innerElement_=goog.dom.createDom(goog.dom.TagName.DIV,{"class":"ol-scale-line-inner"});this.element_=goog.dom.createDom(goog.dom.TagName.DIV,{"class":"ol-scale-line "+ol.CSS_CLASS_UNSELECTABLE},this.innerElement_);this.minWidth_=goog.isDef(a.minWidth)?a.minWidth:64;this.units_=goog.isDef(a.units)?a.units:ol.control.ScaleLineUnits.METRIC;this.listenerKeys_=null;this.renderedVisible_=!1;this.renderedHTML_="";this.toEPSG4326_=null;ol.control.Control.call(this, +{element:this.element_,map:a.map,target:a.target})};goog.inherits(ol.control.ScaleLine,ol.control.Control);ol.control.ScaleLine.LEADING_DIGITS=[1,2,5];ol.control.ScaleLine.prototype.handleMapPostrender=function(a){this.updateElement_(a.frameState)}; ol.control.ScaleLine.prototype.setMap=function(a){goog.isNull(this.listenerKeys_)||(goog.array.forEach(this.listenerKeys_,goog.events.unlistenByKey),this.listenerKeys_=null);ol.control.ScaleLine.superClass_.setMap.call(this,a);goog.isNull(a)||(this.listenerKeys_=[goog.events.listen(a,ol.MapEventType.POSTRENDER,this.handleMapPostrender,!1,this)])}; ol.control.ScaleLine.prototype.updateElement_=function(a){if(goog.isNull(a))this.renderedVisible_&&(goog.style.showElement(this.element_,!1),this.renderedVisible_=!1);else{var a=a.view2DState,b=a.center,c=a.projection,a=c.getPointResolution(a.resolution,b),d=c.getUnits();d==ol.ProjectionUnits.DEGREES&&(this.units_==ol.control.ScaleLineUnits.METRIC||this.units_==ol.control.ScaleLineUnits.IMPERIAL)?(this.toEPSG4326_=null,b=Math.cos(goog.math.toRadians(b.y)),a*=Math.PI*b*ol.sphere.NORMAL.radius/180, d=ol.ProjectionUnits.METERS):(d==ol.ProjectionUnits.FEET||d==ol.ProjectionUnits.METERS)&&this.units_==ol.control.ScaleLineUnits.DEGREES?(goog.isNull(this.toEPSG4326_)&&(this.toEPSG4326_=ol.projection.getTransformFromProjections(c,ol.projection.get("EPSG:4326"))),b=[b.x,b.y],b=this.toEPSG4326_(b,b,2),b=Math.cos(goog.math.toRadians(b[1])),c=ol.sphere.NORMAL.radius,d==ol.ProjectionUnits.FEET&&(c/=0.3048),a*=180/(Math.PI*b*c),d=ol.ProjectionUnits.DEGREES):this.toEPSG4326_=null;goog.asserts.assert((this.units_== ol.control.ScaleLineUnits.METRIC||this.units_==ol.control.ScaleLineUnits.IMPERIAL)&&d==ol.ProjectionUnits.METERS||this.units_==ol.control.ScaleLineUnits.DEGREES&&d==ol.ProjectionUnits.DEGREES);b=this.minWidth_*a;d="";this.units_==ol.control.ScaleLineUnits.DEGREES?b<1/60?(d="\u2033",a*=3600):1>b?(d="\u2032",a*=60):d="\u00b0":this.units_==ol.control.ScaleLineUnits.IMPERIAL?0.9144>b?(d="in",a/=0.0254):1609.344>b?(d="ft",a/=0.3048):(d="mi",a/=1609.344):this.units_==ol.control.ScaleLineUnits.NAUTICAL? (a/=1852,d="nm"):this.units_==ol.control.ScaleLineUnits.METRIC?1>b?(d="mm",a*=1E3):1E3>b?d="m":(d="km",a/=1E3):this.units_==ol.control.ScaleLineUnits.US?0.9144>b?(d="in",a*=39.37):1609.344>b?(d="ft",a/=0.30480061):(d="mi",a/=1609.3472):goog.asserts.assert(!1);for(var b=3*Math.floor(Math.log(this.minWidth_*a)/Math.log(10)),e,f;;){e=ol.control.ScaleLine.LEADING_DIGITS[b%3]*Math.pow(10,Math.floor(b/3));f=Math.round(e/a);if(f>=this.minWidth_)break;++b}e+=d;this.renderedHTML_!=e&&(this.renderedHTML_=this.innerElement_.innerHTML= -e);this.renderedWidth_!=f&&(this.innerElement_.style.width=f+"px",this.renderedWidth_=f);this.renderedVisible_||(goog.style.showElement(this.element_,!0),this.renderedVisible_=!0)}};ol.ellipsoid={};ol.ellipsoid.WGS84=new ol.Ellipsoid(6378137,1/298.257223563);ol.interaction.DragRotateAndZoom=function(a){ol.interaction.Drag.call(this);this.condition_=a};goog.inherits(ol.interaction.DragRotateAndZoom,ol.interaction.Drag); +e);this.renderedWidth_!=f&&(this.innerElement_.style.width=f+"px",this.renderedWidth_=f);this.renderedVisible_||(goog.style.showElement(this.element_,!0),this.renderedVisible_=!0)}};goog.events.EventHandler=function(a){goog.Disposable.call(this);this.handler_=a;this.keys_=[]};goog.inherits(goog.events.EventHandler,goog.Disposable);goog.events.EventHandler.typeArray_=[];goog.events.EventHandler.prototype.listen=function(a,b,c,d,e){goog.isArray(b)||(goog.events.EventHandler.typeArray_[0]=b,b=goog.events.EventHandler.typeArray_);for(var f=0;fthis.hysteresisDistanceSquared_)if(this.fireDragStart_(a))this.dragging_=!0;else{this.isDisposed()||this.endDrag(a); +return}}c=this.calculatePosition_(b,c);b=c.x;c=c.y;this.dragging_&&this.dispatchEvent(new goog.fx.DragEvent(goog.fx.Dragger.EventType.BEFOREDRAG,this,a.clientX,a.clientY,a,b,c))&&(this.doDrag(a,b,c,!1),a.preventDefault())}}; +goog.fx.Dragger.prototype.calculatePosition_=function(a,b){var c=goog.dom.getDomHelper(this.document_).getDocumentScroll(),a=a+(c.x-this.pageScroll.x),b=b+(c.y-this.pageScroll.y);this.pageScroll=c;this.deltaX+=a;this.deltaY+=b;var c=this.limitX(this.deltaX),d=this.limitY(this.deltaY);return new goog.math.Coordinate(c,d)};goog.fx.Dragger.prototype.onScroll_=function(a){var b=this.calculatePosition_(0,0);a.clientX=this.clientX;a.clientY=this.clientY;this.doDrag(a,b.x,b.y,!0)}; +goog.fx.Dragger.prototype.doDrag=function(a,b,c){this.defaultAction(b,c);this.dispatchEvent(new goog.fx.DragEvent(goog.fx.Dragger.EventType.DRAG,this,a.clientX,a.clientY,a,b,c))};goog.fx.Dragger.prototype.limitX=function(a){var b=this.limits,c=!isNaN(b.left)?b.left:null,b=!isNaN(b.width)?b.width:0;return Math.min(null!=c?c+b:Infinity,Math.max(null!=c?c:-Infinity,a))}; +goog.fx.Dragger.prototype.limitY=function(a){var b=this.limits,c=!isNaN(b.top)?b.top:null,b=!isNaN(b.height)?b.height:0;return Math.min(null!=c?c+b:Infinity,Math.max(null!=c?c:-Infinity,a))};goog.fx.Dragger.prototype.defaultAction=function(a,b){this.useRightPositioningForRtl_&&this.isRightToLeft_()?this.target.style.right=a+"px":this.target.style.left=a+"px";this.target.style.top=b+"px"};goog.fx.Dragger.prototype.isDragging=function(){return this.dragging_}; +goog.fx.DragEvent=function(a,b,c,d,e,f,g,h){goog.events.Event.call(this,a);this.clientX=c;this.clientY=d;this.browserEvent=e;this.left=goog.isDef(f)?f:b.deltaX;this.top=goog.isDef(g)?g:b.deltaY;this.dragger=b;this.dragCanceled=!!h};goog.inherits(goog.fx.DragEvent,goog.events.Event);ol.control.ZoomSlider=function(a){this.maxResolution_=goog.isDef(a.maxResolution)?a.maxResolution:ol.control.ZoomSlider.DEFAULT_MAX_RESOLUTION;this.minResolution_=goog.isDef(a.minResolution)?a.minResolution:ol.control.ZoomSlider.DEFAULT_MIN_RESOLUTION;goog.asserts.assert(this.minResolution_a.height?(this.direction_=ol.control.ZoomSlider.direction.HORIZONTAL,a=new goog.math.Rect(0,0,b,0)):(this.direction_=ol.control.ZoomSlider.direction.VERTICAL,a=new goog.math.Rect(0, +0,0,c));this.dragger_.setLimits(a)};ol.control.ZoomSlider.prototype.handleMapPostRender_=function(a){a=a.frameState.view2DState.resolution;a!==this.currentResolution_&&(this.currentResolution_=a,this.positionThumbForResolution_(a))};ol.control.ZoomSlider.prototype.handleContainerClick_=function(){}; +ol.control.ZoomSlider.prototype.positionThumbForResolution_=function(a){var a=this.amountForResolution_(a),b=this.dragger_,c=goog.dom.getFirstElementChild(this.element);this.direction_==ol.control.ZoomSlider.direction.HORIZONTAL?goog.style.setPosition(c,b.limits.left+b.limits.width*a):goog.style.setPosition(c,b.limits.left,b.limits.top+b.limits.height*a)}; +ol.control.ZoomSlider.prototype.amountDragged_=function(a){var b=this.dragger_.limits,c=0;return c=this.direction_===ol.control.ZoomSlider.direction.HORIZONTAL?(a.left-b.left)/b.width:(a.top-b.top)/b.height};ol.control.ZoomSlider.prototype.resolutionForAmount_=function(a){a=goog.math.clamp(a,0,1);return this.minResolution_+this.range_*a};ol.control.ZoomSlider.prototype.amountForResolution_=function(a){return(goog.math.clamp(a,this.minResolution_,this.maxResolution_)-this.minResolution_)/this.range_}; +ol.control.ZoomSlider.prototype.handleSliderChange_=function(a){var b=this.getMap(),a=this.amountDragged_(a),a=this.resolutionForAmount_(a);goog.asserts.assert(a>=this.minResolution_&&a<=this.maxResolution_,"calculated new resolution is in allowed bounds.");a!==this.currentResolution_&&(this.currentResolution_=a,b.getView().setResolution(a))}; +ol.control.ZoomSlider.prototype.createDraggable_=function(a){goog.isNull(this.draggerListenerKeys_)||(goog.array.forEach(this.draggerListenerKeys_,goog.events.unlistenByKey),this.draggerListenerKeys_=null);a=new goog.fx.Dragger(a.childNodes[0]);this.draggerListenerKeys_=[goog.events.listen(a,[goog.fx.Dragger.EventType.DRAG,goog.fx.Dragger.EventType.END],this.handleSliderChange_,void 0,this)];return a}; +ol.control.ZoomSlider.prototype.createDom_=function(){return goog.dom.createDom(goog.dom.TagName.DIV,ol.control.ZoomSlider.CSS_CLASS_CONTAINER+" ol-unselectable",goog.dom.createDom(goog.dom.TagName.DIV,ol.control.ZoomSlider.CSS_CLASS_THUMB+" ol-unselectable"))};ol.ellipsoid={};ol.ellipsoid.WGS84=new ol.Ellipsoid(6378137,1/298.257223563);ol.geom.GeometryCollection=function(a){ol.geom.AbstractCollection.call(this);this.components=a;for(var b=0,c=0,d=a.length;cd&&(e=~e);a[c]=e}return ol.parser.polyline.encodeUnsignedIntegers(a)};ol.parser.polyline.decodeSignedIntegers=function(a){for(var a=ol.parser.polyline.decodeUnsignedIntegers(a),b=a.length,c=0;c>1):d>>1}return a}; +ol.parser.polyline.encodeUnsignedIntegers=function(a){for(var b="",c=a.length,d=0;dg?(b.push(c),d=c=0):d+=5}return b};ol.parser.polyline.encodeFloat=function(a,b){a=Math.round(a*(b||1E5));return ol.parser.polyline.encodeSignedInteger(a)}; +ol.parser.polyline.decodeFloat=function(a,b){return ol.parser.polyline.decodeSignedInteger(a)/(b||1E5)};ol.parser.polyline.encodeSignedInteger=function(a){var b=a<<1;0>a&&(b=~b);return ol.parser.polyline.encodeUnsignedInteger(b)};ol.parser.polyline.decodeSignedInteger=function(a){a=ol.parser.polyline.decodeUnsignedInteger(a);return a&1?~(a>>1):a>>1}; +ol.parser.polyline.encodeUnsignedInteger=function(a){for(var b,c="";32<=a;)b=(32|a&31)+63,c+=String.fromCharCode(b),a>>=5;return c+=String.fromCharCode(a+63)};ol.parser.polyline.decodeUnsignedInteger=function(a){for(var b=0,c=0,d=a.length,e=0;ef)break;c+=5}return b};/* Portions of this code are from MochiKit, received by The Closure Authors under the MIT license. All other code is Copyright 2005-2009 The Closure Authors. All Rights Reserved. @@ -873,18 +989,18 @@ goog.net.Jsonp.prototype.send=function(a,b,c,d){a=a||null;d=d||"_"+(goog.net.Jso cleanupWhenDone:!0});c=goog.net.Jsonp.newErrorHandler_(d,a,c);b.addErrback(c);return{id_:d,deferred_:b}};goog.net.Jsonp.prototype.cancel=function(a){a&&(a.deferred_&&a.deferred_.cancel(),a.id_&&goog.net.Jsonp.cleanup_(a.id_,!1))};goog.net.Jsonp.newErrorHandler_=function(a,b,c){return function(){goog.net.Jsonp.cleanup_(a,!1);c&&c(b)}};goog.net.Jsonp.newReplyHandler_=function(a,b){return function(c){goog.net.Jsonp.cleanup_(a,!0);b.apply(void 0,arguments)}}; goog.net.Jsonp.cleanup_=function(a,b){goog.global[goog.net.Jsonp.CALLBACKS][a]&&(b?delete goog.global[goog.net.Jsonp.CALLBACKS][a]:goog.global[goog.net.Jsonp.CALLBACKS][a]=goog.nullFunction)};goog.net.Jsonp.addPayloadToUri_=function(a,b){for(var c in a)(!a.hasOwnProperty||a.hasOwnProperty(c))&&b.setParameterValues(c,a[c]);return b};ol.source.ImageTileSource=function(a){ol.source.TileSource.call(this,{attributions:a.attributions,extent:a.extent,opaque:a.opaque,projection:a.projection,tileGrid:a.tileGrid});this.tileUrlFunction=goog.isDef(a.tileUrlFunction)?a.tileUrlFunction:ol.TileUrlFunction.nullTileUrlFunction;this.crossOrigin_=goog.isDef(a.crossOrigin)?a.crossOrigin:"anonymous";this.tileCache_=new ol.TileCache};goog.inherits(ol.source.ImageTileSource,ol.source.TileSource); ol.source.ImageTileSource.prototype.canExpireCache=function(){return this.tileCache_.canExpireCache()};ol.source.ImageTileSource.prototype.expireCache=function(a){this.tileCache_.expireCache(a)}; -ol.source.ImageTileSource.prototype.getTile=function(a,b,c){var d=a.toString();if(this.tileCache_.containsKey(d))return this.tileCache_.get(d);goog.asserts.assert(b);goog.asserts.assert(c);b=this.tileUrlFunction(a,b,c);a=new ol.ImageTile(a,goog.isDef(b)?ol.TileState.IDLE:ol.TileState.EMPTY,goog.isDef(b)?b:"",this.crossOrigin_);this.tileCache_.set(d,a);return a};ol.source.ImageTileSource.prototype.useTile=function(a){a=a.toString();this.tileCache_.containsKey(a)&&this.tileCache_.get(a)};ol.tilegrid.XYZ=function(a){var b=Array(a.maxZoom+1),c,d=2*ol.projection.EPSG3857.HALF_SIZE/ol.DEFAULT_TILE_SIZE;for(c=0;c<=a.maxZoom;++c)b[c]=d/Math.pow(2,c);ol.tilegrid.TileGrid.call(this,{origin:new ol.Coordinate(-ol.projection.EPSG3857.HALF_SIZE,ol.projection.EPSG3857.HALF_SIZE),resolutions:b,tileSize:new ol.Size(ol.DEFAULT_TILE_SIZE,ol.DEFAULT_TILE_SIZE)})};goog.inherits(ol.tilegrid.XYZ,ol.tilegrid.TileGrid); +ol.source.ImageTileSource.prototype.getTile=function(a,b,c){var d=a.toString();if(this.tileCache_.containsKey(d))return this.tileCache_.get(d);goog.asserts.assert(b);goog.asserts.assert(c);b=this.tileUrlFunction(a,b,c);a=new ol.ImageTile(a,goog.isDef(b)?ol.TileState.IDLE:ol.TileState.EMPTY,goog.isDef(b)?b:"",this.crossOrigin_);this.tileCache_.set(d,a);return a};ol.source.ImageTileSource.prototype.useTile=function(a){this.tileCache_.containsKey(a)&&this.tileCache_.get(a)};ol.tilegrid.XYZ=function(a){var b=Array(a.maxZoom+1),c,d=2*ol.projection.EPSG3857.HALF_SIZE/ol.DEFAULT_TILE_SIZE;for(c=0;c<=a.maxZoom;++c)b[c]=d/Math.pow(2,c);ol.tilegrid.TileGrid.call(this,{origin:new ol.Coordinate(-ol.projection.EPSG3857.HALF_SIZE,ol.projection.EPSG3857.HALF_SIZE),resolutions:b,tileSize:new ol.Size(ol.DEFAULT_TILE_SIZE,ol.DEFAULT_TILE_SIZE)})};goog.inherits(ol.tilegrid.XYZ,ol.tilegrid.TileGrid); ol.tilegrid.XYZ.prototype.forEachTileCoordParentTileRange=function(a,b,c){for(var d=a.x,e=a.y,a=a.z,f;;){a-=1;if(0>a)break;d>>=1;e>>=1;f=new ol.TileRange(d,e,d,e);if(b.call(c,a,f))break}};ol.source.BingMaps=function(a){ol.source.ImageTileSource.call(this,{opaque:!0,projection:ol.projection.get("EPSG:3857")});this.culture_=goog.isDef(a.culture)?a.culture:"en-us";this.ready_=!1;var b=new goog.Uri("//dev.virtualearth.net/REST/v1/Imagery/Metadata/"+a.style);(new goog.net.Jsonp(b,"jsonp")).send({include:"ImageryProviders",key:a.key},goog.bind(this.handleImageryMetadataResponse,this))};goog.inherits(ol.source.BingMaps,ol.source.ImageTileSource); ol.source.BingMaps.prototype.handleImageryMetadataResponse=function(a){goog.asserts.assert("ValidCredentials"==a.authenticationResultCode);goog.asserts.assert(200==a.statusCode);goog.asserts.assert("OK"==a.statusDescription);goog.asserts.assert(1==a.resourceSets.length);a=a.resourceSets[0];goog.asserts.assert(1==a.resources.length);var b=a.resources[0],c=b.zoomMin,d=b.zoomMax,a=new ol.Size(b.imageWidth,b.imageHeight),e=new ol.tilegrid.XYZ({maxZoom:d,tileSize:a});this.tileGrid=e;this.tileUrlFunction= ol.TileUrlFunction.withTileCoordTransform(function(a){if(a.ze||b<=e)return null;b=goog.math.modulo(a.x,b);return new ol.TileCoord(a.z,b,e)},ol.TileUrlFunction.createFromTileUrlFunctions(goog.array.map(b.imageUrlSubdomains,function(a){var c=b.imageUrl.replace("{subdomain}",a).replace("{culture}",this.culture_);return function(a){return goog.isNull(a)?void 0:c.replace("{quadkey}",a.quadKey())}})));var f=ol.projection.getTransformFromProjections(ol.projection.get("EPSG:4326"), this.getProjection()),a=goog.array.map(b.imageryProviders,function(a){var b=a.attribution,c={};goog.array.forEach(a.coverageAreas,function(a){var b=a.zoomMin,d=a.zoomMax,a=a.bbox,a=(new ol.Extent(a[1],a[0],a[3],a[2])).transform(f),g,h;for(g=b;g<=d;++g)h=g.toString(),b=e.getTileRangeForExtentAndZ(a,g),h in c?c[h].push(b):c[h]=[b]});return new ol.Attribution(b,c)});this.setAttributions(a);this.ready_=!0;this.dispatchLoadEvent()};ol.source.BingMaps.prototype.isReady=function(){return this.ready_};ol.DebugTile_=function(a,b){ol.Tile.call(this,a,ol.TileState.LOADED);this.tileCoord_=a;this.tileSize_=b.getTileSize(a.z);this.canvasByContext_={}};goog.inherits(ol.DebugTile_,ol.Tile); ol.DebugTile_.prototype.getImage=function(a){a=goog.isDef(a)?goog.getUid(a):-1;if(a in this.canvasByContext_)return this.canvasByContext_[a];var b=this.tileSize_,c=goog.dom.createElement(goog.dom.TagName.CANVAS);c.width=b.width;c.height=b.height;var d=c.getContext("2d");d.strokeStyle="black";d.strokeRect(0.5,0.5,b.width+0.5,b.height+0.5);d.fillStyle="black";d.textAlign="center";d.textBaseline="middle";d.font="24px sans-serif";d.fillText(this.tileCoord_.toString(),b.width/2,b.height/2);return this.canvasByContext_[a]= c};ol.source.DebugTileSource=function(a){ol.source.TileSource.call(this,{extent:a.extent,opaque:!1,projection:a.projection,tileGrid:a.tileGrid});this.tileCache_=new ol.TileCache};goog.inherits(ol.source.DebugTileSource,ol.source.TileSource);ol.source.DebugTileSource.prototype.canExpireCache=function(){return this.tileCache_.canExpireCache()};ol.source.DebugTileSource.prototype.expireCache=function(a){this.tileCache_.expireCache(a)}; -ol.source.DebugTileSource.prototype.getTile=function(a){var b=a.toString();if(this.tileCache_.containsKey(b))return this.tileCache_.get(b);a=new ol.DebugTile_(a,this.tileGrid);this.tileCache_.set(b,a);return a};ol.source.XYZ=function(a){var b=a.projection||ol.projection.get("EPSG:3857"),c=ol.TileUrlFunction.nullTileUrlFunction;goog.isDef(a.tileUrlFunction)?c=a.tileUrlFunction:goog.isDef(a.urls)?c=ol.TileUrlFunction.createFromTemplates(a.urls):goog.isDef(a.url)&&(c=ol.TileUrlFunction.createFromTemplate(a.url));var d=new ol.tilegrid.XYZ({maxZoom:a.maxZoom}),e=a.extent,c=goog.isDefAndNotNull(e)?ol.TileUrlFunction.withTileCoordTransform(function(b){if(a.maxZoomh|| -c<=h)return null;c=goog.math.modulo(b.x,c);return!d.getTileCoordExtent(new ol.TileCoord(b.z,c,b.y)).intersects(e)?null:new ol.TileCoord(b.z,c,h)},c):ol.TileUrlFunction.withTileCoordTransform(function(b){if(a.maxZoomd||c<=d)return null;c=goog.math.modulo(b.x,c);return new ol.TileCoord(b.z,c,d)},c);ol.source.ImageTileSource.call(this,{attributions:a.attributions,crossOrigin:a.crossOrigin,extent:a.extent,projection:b,tileGrid:d,tileUrlFunction:c})}; -goog.inherits(ol.source.XYZ,ol.source.ImageTileSource);ol.source.MapQuestOSM=function(){var a=[new ol.Attribution('Tiles Courtesy of MapQuest '),new ol.Attribution('Data © OpenStreetMap contributors, CC BY-SA')];ol.source.XYZ.call(this,{attributions:a,opaque:!0,maxZoom:28,url:"http://otile{1-4}.mqcdn.com/tiles/1.0.0/osm/{z}/{x}/{y}.jpg"})}; +ol.source.DebugTileSource.prototype.getTile=function(a){var b=a.toString();if(this.tileCache_.containsKey(b))return this.tileCache_.get(b);a=new ol.DebugTile_(a,this.tileGrid);this.tileCache_.set(b,a);return a};ol.source.XYZ=function(a){var b=a.projection||ol.projection.get("EPSG:3857"),c=ol.TileUrlFunction.nullTileUrlFunction;goog.isDef(a.tileUrlFunction)?c=a.tileUrlFunction:goog.isDef(a.urls)?c=ol.TileUrlFunction.createFromTemplates(a.urls):goog.isDef(a.url)&&(c=ol.TileUrlFunction.createFromTemplates(ol.TileUrlFunction.expandUrl(a.url)));var d=new ol.tilegrid.XYZ({maxZoom:a.maxZoom}),e=a.extent,c=goog.isDefAndNotNull(e)?ol.TileUrlFunction.withTileCoordTransform(function(b){if(a.maxZoomh||c<=h)return null;c=goog.math.modulo(b.x,c);return!d.getTileCoordExtent(new ol.TileCoord(b.z,c,b.y)).intersects(e)?null:new ol.TileCoord(b.z,c,h)},c):ol.TileUrlFunction.withTileCoordTransform(function(b){if(a.maxZoomd||c<=d)return null;c=goog.math.modulo(b.x,c);return new ol.TileCoord(b.z,c,d)},c);ol.source.ImageTileSource.call(this,{attributions:a.attributions,crossOrigin:a.crossOrigin,extent:a.extent,projection:b,tileGrid:d, +tileUrlFunction:c})};goog.inherits(ol.source.XYZ,ol.source.ImageTileSource);ol.source.MapQuestOSM=function(){var a=[new ol.Attribution('Tiles Courtesy of MapQuest '),new ol.Attribution('Data © OpenStreetMap contributors, CC BY-SA')];ol.source.XYZ.call(this,{attributions:a,opaque:!0,maxZoom:28,url:"http://otile{1-4}.mqcdn.com/tiles/1.0.0/osm/{z}/{x}/{y}.jpg"})}; goog.inherits(ol.source.MapQuestOSM,ol.source.XYZ);ol.source.MapQuestOpenAerial=function(){var a=[new ol.Attribution('Tiles Courtesy of MapQuest '),new ol.Attribution("Portions Courtesy NASA/JPL-Caltech and U.S. Depart. of Agriculture, Farm Service Agency")];ol.source.XYZ.call(this,{attributions:a,maxZoom:18,opaque:!0,url:"http://oatile{1-4}.mqcdn.com/tiles/1.0.0/sat/{z}/{x}/{y}.jpg"})}; -goog.inherits(ol.source.MapQuestOpenAerial,ol.source.XYZ);ol.source.OpenStreetMap=function(){var a=new ol.Attribution('© OpenStreetMap contributors, CC BY-SA');ol.source.XYZ.call(this,{attributions:[a],opaque:!0,maxZoom:18,url:"http://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png"})};goog.inherits(ol.source.OpenStreetMap,ol.source.XYZ);ol.source.SingleImageWMS=function(a){var b=goog.isDef(a.url)?ol.ImageUrlFunction.createWMSParams(a.url,a.params):ol.ImageUrlFunction.nullImageUrlFunction;ol.source.ImageSource.call(this,{attributions:a.attributions,crossOrigin:a.crossOrigin,extent:a.extent,projection:a.projection,resolutions:a.resolutions,imageUrlFunction:b});this.image_=null;this.ratio_=1.5};goog.inherits(ol.source.SingleImageWMS,ol.source.ImageSource); +goog.inherits(ol.source.MapQuestOpenAerial,ol.source.XYZ);ol.source.OpenStreetMap=function(){var a=new ol.Attribution('© OpenStreetMap contributors, CC BY-SA');ol.source.XYZ.call(this,{attributions:[a],opaque:!0,maxZoom:18,url:"http://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png"})};goog.inherits(ol.source.OpenStreetMap,ol.source.XYZ);ol.source.SingleImageWMS=function(a){var b=goog.isDef(a.url)?ol.ImageUrlFunction.createWMSParams(a.url,a.params):ol.ImageUrlFunction.nullImageUrlFunction;ol.source.ImageSource.call(this,{attributions:a.attributions,crossOrigin:a.crossOrigin,extent:a.extent,projection:a.projection,resolutions:a.resolutions,imageUrlFunction:b});this.image_=null;this.ratio_=goog.isDef(a.ratio)?a.ratio:1.5};goog.inherits(ol.source.SingleImageWMS,ol.source.ImageSource); ol.source.SingleImageWMS.prototype.getImage=function(a,b,c){var b=this.findNearestResolution(b),d=this.image_;if(!goog.isNull(d)&&d.getResolution()==b&&d.getExtent().containsExtent(a))return d;a=new ol.Extent(a.minX,a.minY,a.maxX,a.maxY);a.scaleFromCenter(this.ratio_);var d=a.getWidth()/b,e=a.getHeight()/b,d=new ol.Size(d,e);return this.image_=this.createImage(a,b,d,c)};ol.source.StamenLayerConfig={terrain:{extension:"jpg",opaque:!0},"terrain-background":{extension:"jpg",opaque:!0},"terrain-labels":{extension:"png",opaque:!1},"terrain-lines":{extension:"png",opaque:!1},"toner-background":{extension:"png",opaque:!0},toner:{extension:"png",opaque:!0},"toner-hybrid":{extension:"png",opaque:!1},"toner-labels":{extension:"png",opaque:!1},"toner-lines":{extension:"png",opaque:!1},"toner-lite":{extension:"png",opaque:!0},watercolor:{extension:"jpg",opaque:!0}}; ol.source.StamenProviderConfig={terrain:{minZoom:4,maxZoom:18},toner:{minZoom:0,maxZoom:20},watercolor:{minZoom:3,maxZoom:16}};ol.source.STAMEN_ATTRIBUTIONS=[new ol.Attribution('Map tiles by Stamen Design, under CC BY 3.0. Data by OpenStreetMap, under CC BY SA.')]; ol.source.Stamen=function(a){var b=a.layer.indexOf("-"),b=-1==b?a.layer:a.layer.slice(0,b);goog.asserts.assert(b in ol.source.StamenProviderConfig);b=ol.source.StamenProviderConfig[b];goog.asserts.assert(a.layer in ol.source.StamenLayerConfig);var c=ol.source.StamenLayerConfig[a.layer],a=goog.isDef(a.url)?a.url:"http://{a-d}.tile.stamen.com/"+a.layer+"/{z}/{x}/{y}."+c.extension;ol.source.XYZ.call(this,{attributions:ol.source.STAMEN_ATTRIBUTIONS,maxZoom:b.maxZoom,opaque:c.opaque,url:a})}; @@ -892,15 +1008,16 @@ goog.inherits(ol.source.Stamen,ol.source.XYZ);ol.source.StaticImage=function(a){ ol.source.StaticImage.prototype.getImage=function(a){return a.intersects(this.image_.getExtent())?this.image_:null};ol.source.StaticImage.createImageFunction=function(a){return function(){return a}};ol.tilejson={};ol.tilejson.grids_=[];var grid=function(a){ol.tilejson.grids_.push(a)};goog.exportSymbol("grid",grid);ol.source.TileJSON=function(a){ol.source.ImageTileSource.call(this,{projection:ol.projection.get("EPSG:3857")});this.ready_=!1;this.deferred_=goog.net.jsloader.load(a.uri,{cleanupWhenDone:!0});this.deferred_.addCallback(this.handleTileJSONResponse,this)};goog.inherits(ol.source.TileJSON,ol.source.ImageTileSource); ol.source.TileJSON.prototype.handleTileJSONResponse=function(){var a=ol.tilejson.grids_.pop(),b=ol.projection.get("EPSG:4326"),c,d;goog.isDef(a.bounds)?(c=a.bounds,c=new ol.Extent(c[0],c[1],c[2],c[3]),d=c.transform(ol.projection.getTransformFromProjections(b,this.getProjection())),this.setExtent(d)):d=c=null;goog.isDef(a.scheme);goog.isDef(a.scheme)&&goog.asserts.assert("xyz"==a.scheme);var e=a.minzoom||0;goog.asserts.assert(0===e);var f=a.maxzoom||22,g=new ol.tilegrid.XYZ({maxZoom:f});this.tileGrid= g;this.tileUrlFunction=ol.TileUrlFunction.withTileCoordTransform(function(a){if(a.zc||b<=c)return null;b=goog.math.modulo(a.x,b);return!goog.isNull(d)&&!g.getTileCoordExtent(new ol.TileCoord(a.z,b,a.y)).intersects(d)?null:new ol.TileCoord(a.z,b,c)},ol.TileUrlFunction.createFromTemplates(a.tiles));if(goog.isDef(a.attribution)){b=goog.isNull(d)?b.getExtent():d;c={};var h,i;for(h=e;h<=f;++h)i=h.toString(),c[i]=[g.getTileRangeForExtentAndZ(b,h)];this.setAttributions([new ol.Attribution(a.attribution, -c)])}this.ready_=!0;this.dispatchLoadEvent()};ol.source.TileJSON.prototype.isReady=function(){return this.ready_};ol.source.TiledWMS=function(a){goog.isDef(a.tileGrid);var b;a.urls?(b=goog.array.map(a.urls,function(b){return ol.TileUrlFunction.createWMSParams(b,a.params)}),b=ol.TileUrlFunction.createFromTileUrlFunctions(b)):b=a.url?ol.TileUrlFunction.createWMSParams(a.url,a.params):ol.TileUrlFunction.nullTileUrlFunction;var c=goog.isDef(a.params.TRANSPARENT)?a.params.TRANSPARENT:!0,d=a.extent;ol.source.ImageTileSource.call(this,{attributions:a.attributions,crossOrigin:a.crossOrigin,extent:d,tileGrid:a.tileGrid, -opaque:!c,projection:a.projection,tileUrlFunction:ol.TileUrlFunction.withTileCoordTransform(function(a,b,c){if(b.getResolutions().length<=a.z)return null;var h=a.x,i=b.getTileCoordExtent(a),j=c.getExtent();d=goog.isDef(d)?d:j;!goog.isNull(d)&&(c.isGlobal()&&d.minX===j.minX&&d.maxX===j.maxX)&&(c=Math.ceil((d.maxX-d.minX)/(i.maxX-i.minX)),h=goog.math.modulo(h,c),i=b.getTileCoordExtent(new ol.TileCoord(a.z,h,a.y)));return!i.intersects(d)?null:new ol.TileCoord(a.z,h,a.y)},b)})}; -goog.inherits(ol.source.TiledWMS,ol.source.ImageTileSource);ol.tilegrid.WMTS=function(a){goog.asserts.assert(a.resolutions.length==a.matrixIds.length);this.matrixIds_=a.matrixIds;ol.tilegrid.TileGrid.call(this,{origin:a.origin,origins:a.origins,resolutions:a.resolutions,tileSize:a.tileSize,tileSizes:a.tileSizes})};goog.inherits(ol.tilegrid.WMTS,ol.tilegrid.TileGrid);ol.tilegrid.WMTS.prototype.getMatrixId=function(a){goog.asserts.assert(0<=a&&af&&(f=0);var f=c.styles[f].identifier,g={};goog.array.forEach(c.dimensions,function(a){var b=a.identifier,c=a["default"];goog.isDef(c)?goog.asserts.assert(0<= -goog.array.indexOf(a.values,c)):c=a.values[0];goog.asserts.assert(goog.isDef(c));g[b]=c});var h=a.contents.tileMatrixSets;goog.asserts.assert(d in h);var i=h[d],h=ol.tilegrid.WMTS.createFromCapabilitiesMatrixSet(i),i=ol.projection.get(i.supportedCRS),j=a.operationsMetadata.GetTile.dcp.http.get,m=goog.object.getKeys(j[0].constraints.GetEncoding.allowedValues);goog.asserts.assert(0= ol.structs.RTree.MAX_OBJECTS && found.level < ol.structs.RTree.MAX_SUB_DIVISIONS) { + found.divide() + } + } +}; +ol.structs.RTree.MAX_SUB_DIVISIONS = 6; +ol.structs.RTree.MAX_OBJECTS = 6; +goog.provide("ol.filter.Filter"); +goog.require("ol.Feature"); +ol.filter.Filter = function(opt_filterFunction) { + if(goog.isDef(opt_filterFunction)) { + this.applies = opt_filterFunction + } +}; +ol.filter.Filter.prototype.applies = goog.abstractMethod; +goog.provide("ol.style.Symbolizer"); +goog.provide("ol.style.SymbolizerLiteral"); +goog.require("ol.Feature"); +ol.style.SymbolizerLiteral = function() { +}; +ol.style.SymbolizerLiteral.prototype.equals = goog.abstractMethod; +ol.style.Symbolizer = function() { +}; +ol.style.Symbolizer.prototype.createLiteral = goog.abstractMethod; +goog.provide("ol.style.Rule"); +goog.require("ol.Feature"); +goog.require("ol.filter.Filter"); +goog.require("ol.style.Symbolizer"); +ol.style.Rule = function(options) { + this.filter_ = goog.isDef(options.filter) ? options.filter : null; + this.symbolizers_ = goog.isDef(options.symbolizers) ? options.symbolizers : [] +}; +ol.style.Rule.prototype.applies = function(feature) { + return goog.isNull(this.filter_) ? true : this.filter_.applies(feature) +}; +ol.style.Rule.prototype.getSymbolizers = function() { + return this.symbolizers_ +}; +goog.provide("ol.style.Style"); +goog.require("ol.Feature"); +goog.require("ol.geom.GeometryType"); +goog.require("ol.style.Rule"); +goog.require("ol.style.SymbolizerLiteral"); +ol.style.Style = function(options) { + this.rules_ = goog.isDef(options.rules) ? options.rules : [] +}; +ol.style.Style.prototype.apply = function(feature) { + var rules = this.rules_, literals = [], rule, symbolizers; + for(var i = 0, ii = rules.length;i < ii;++i) { + rule = rules[i]; + if(rule.applies(feature)) { + symbolizers = rule.getSymbolizers(); + for(var j = 0, jj = symbolizers.length;j < jj;++j) { + literals.push(symbolizers[j].createLiteral(feature)) + } + } + } + return literals +}; +ol.style.Style.applyDefaultStyle = function(feature) { + var geometry = feature.getGeometry(), symbolizerLiterals = []; + if(!goog.isNull(geometry)) { + var type = geometry.getType(); + if(type === ol.geom.GeometryType.POINT || type === ol.geom.GeometryType.MULTIPOINT) { + symbolizerLiterals.push(ol.style.ShapeDefaults) + }else { + if(type === ol.geom.GeometryType.LINESTRING || type === ol.geom.GeometryType.MULTILINESTRING) { + symbolizerLiterals.push(ol.style.LineDefaults) + }else { + if(type === ol.geom.GeometryType.LINEARRING || type === ol.geom.GeometryType.POLYGON || type === ol.geom.GeometryType.MULTIPOLYGON) { + symbolizerLiterals.push(ol.style.PolygonDefaults) + } + } + } + } + return symbolizerLiterals +}; +goog.provide("ol.filter.Extent"); +goog.require("ol.Extent"); +goog.require("ol.filter.Filter"); +ol.filter.Extent = function(extent) { + goog.base(this); + this.extent_ = extent +}; +goog.inherits(ol.filter.Extent, ol.filter.Filter); +ol.filter.Extent.prototype.getExtent = function() { + return this.extent_ +}; +ol.filter.Extent.prototype.applies = function(feature) { + return feature.getGeometry().getBounds().intersects(this.extent_) +}; +goog.provide("ol.filter.Geometry"); +goog.provide("ol.filter.GeometryType"); +goog.require("ol.filter.Filter"); +goog.require("ol.geom.GeometryType"); +ol.filter.Geometry = function(type) { + goog.base(this); + this.type_ = type +}; +goog.inherits(ol.filter.Geometry, ol.filter.Filter); +ol.filter.Geometry.prototype.applies = function(feature) { + var geometry = feature.getGeometry(); + return goog.isNull(geometry) ? false : geometry.getType() === this.type_ +}; +ol.filter.Geometry.prototype.getType = function() { + return this.type_ +}; +goog.provide("ol.filter.Logical"); +goog.provide("ol.filter.LogicalOperator"); +goog.require("ol.filter.Filter"); +ol.filter.Logical = function(filters, operator) { + goog.base(this); + this.filters_ = filters; + this.operator = operator +}; +goog.inherits(ol.filter.Logical, ol.filter.Filter); +ol.filter.Logical.prototype.applies = function(feature) { + var filters = this.filters_, i = 0, ii = filters.length, operator = this.operator, start = operator(true, false), result = start; + while(result === start && i < ii) { + result = operator(result, filters[i].applies(feature)); + ++i + } + return result +}; +ol.filter.Logical.prototype.getFilters = function() { + return this.filters_ +}; +ol.filter.LogicalOperator = {AND:function(a, b) { + return a && b +}, OR:function(a, b) { + return a || b +}}; +goog.provide("ol.layer.Vector"); +goog.require("goog.events.EventType"); +goog.require("ol.Feature"); +goog.require("ol.geom.SharedVertices"); +goog.require("ol.layer.Layer"); +goog.require("ol.projection"); +goog.require("ol.source.Vector"); +goog.require("ol.structs.RTree"); +goog.require("ol.style.Style"); +ol.layer.FeatureCache = function() { + this.idLookup_; + this.geometryTypeIndex_; + this.rTree_; + this.clear() +}; +ol.layer.FeatureCache.prototype.clear = function() { + this.idLookup_ = {}; + var geometryTypeIndex = {}; + for(var key in ol.geom.GeometryType) { + geometryTypeIndex[ol.geom.GeometryType[key]] = {} + } + this.geometryTypeIndex_ = geometryTypeIndex; + this.rTree_ = new ol.structs.RTree +}; +ol.layer.FeatureCache.prototype.add = function(feature) { + var id = goog.getUid(feature).toString(), geometry = feature.getGeometry(); + this.idLookup_[id] = feature; + if(!goog.isNull(geometry)) { + var geometryType = geometry.getType(); + this.geometryTypeIndex_[geometryType][id] = feature; + this.rTree_.put(geometry.getBounds(), feature, geometryType) + } +}; +ol.layer.FeatureCache.prototype.getFeaturesObject = function(opt_filter) { + var i, features; + if(!goog.isDef(opt_filter)) { + features = this.idLookup_ + }else { + if(opt_filter instanceof ol.filter.Geometry) { + features = this.geometryTypeIndex_[opt_filter.getType()] + }else { + if(opt_filter instanceof ol.filter.Extent) { + features = this.rTree_.find(opt_filter.getExtent()) + }else { + if(opt_filter instanceof ol.filter.Logical && opt_filter.operator === ol.filter.LogicalOperator.AND) { + var filters = opt_filter.getFilters(); + if(filters.length === 2) { + var filter, geometryFilter, extentFilter; + for(i = 0;i <= 1;++i) { + filter = filters[i]; + if(filter instanceof ol.filter.Geometry) { + geometryFilter = filter + }else { + if(filter instanceof ol.filter.Extent) { + extentFilter = filter + } + } + } + if(extentFilter && geometryFilter) { + features = this.rTree_.find(extentFilter.getExtent(), geometryFilter.getType()) + } + } + } + } + } + if(!goog.isDef(features)) { + var candidates = this.idLookup_, feature; + features = {}; + for(i in candidates) { + feature = candidates[i]; + if(opt_filter.applies(feature) === true) { + features[i] = feature + } + } + } + } + return features +}; +ol.layer.FeatureCache.prototype.getFeaturesByGeometryType_ = function(filter) { + return goog.object.getValues(this.geometryTypeIndex_[filter.getType()]) +}; +ol.layer.FeatureCache.prototype.getFeaturesByIds_ = function(ids) { + var len = ids.length, features = new Array(len), i; + for(i = 0;i < len;++i) { + features[i] = this.idLookup_[ids[i]] + } + return features +}; +ol.layer.Vector = function(layerOptions) { + goog.base(this, layerOptions); + this.style_ = goog.isDef(layerOptions.style) ? layerOptions.style : null; + this.featureCache_ = new ol.layer.FeatureCache; + this.pointVertices_ = new ol.geom.SharedVertices; + this.lineVertices_ = new ol.geom.SharedVertices; + this.polygonVertices_ = new ol.geom.SharedVertices +}; +goog.inherits(ol.layer.Vector, ol.layer.Layer); +ol.layer.Vector.prototype.addFeatures = function(features) { + for(var i = 0, ii = features.length;i < ii;++i) { + this.featureCache_.add(features[i]) + } + this.dispatchEvent(goog.events.EventType.CHANGE) +}; +ol.layer.Vector.prototype.getVectorSource = function() { + return this.getSource() +}; +ol.layer.Vector.prototype.getFeatures = function(opt_filter) { + return goog.object.getValues(this.featureCache_.getFeaturesObject(opt_filter)) +}; +ol.layer.Vector.prototype.getFeaturesObject = function(opt_filter) { + return this.featureCache_.getFeaturesObject(opt_filter) +}; +ol.layer.Vector.prototype.getLineVertices = function() { + return this.lineVertices_ +}; +ol.layer.Vector.prototype.getPointVertices = function() { + return this.pointVertices_ +}; +ol.layer.Vector.prototype.getPolygonVertices = function() { + return this.polygonVertices_ +}; +ol.layer.Vector.prototype.groupFeaturesBySymbolizerLiteral = function(features) { + var uniqueLiterals = {}, featuresBySymbolizer = [], style = this.style_, i, j, l, feature, literals, numLiterals, literal, uniqueLiteral, key; + for(i in features) { + feature = features[i]; + literals = feature.getSymbolizerLiterals(); + if(goog.isNull(literals)) { + literals = goog.isNull(style) ? ol.style.Style.applyDefaultStyle(feature) : style.apply(feature) + } + numLiterals = literals.length; + for(j = 0;j < numLiterals;++j) { + literal = literals[j]; + for(l in uniqueLiterals) { + uniqueLiteral = featuresBySymbolizer[uniqueLiterals[l]][1]; + if(literal.equals(uniqueLiteral)) { + literal = uniqueLiteral; + break + } + } + key = goog.getUid(literal); + if(!goog.object.containsKey(uniqueLiterals, key)) { + uniqueLiterals[key] = featuresBySymbolizer.length; + featuresBySymbolizer.push([[], literal]) + } + featuresBySymbolizer[uniqueLiterals[key]][0].push(feature) + } + } + return featuresBySymbolizer +}; +ol.layer.Vector.prototype.parseFeatures = function(data, parser, projection) { + var features; + var lookup = {"point":this.pointVertices_, "linestring":this.lineVertices_, "polygon":this.polygonVertices_, "multipoint":this.pointVertices_, "multilinstring":this.lineVertices_, "multipolygon":this.polygonVertices_}; + var callback = function(feature, type) { + return lookup[type] + }; + if(typeof data === "string") { + goog.asserts.assert(typeof parser.readFeaturesFromString === "function", "Expected a parser with readFeaturesFromString method."); + features = parser.readFeaturesFromString(data, {callback:callback}) + }else { + if(typeof data === "object") { + goog.asserts.assert(typeof parser.readFeaturesFromObject === "function", "Expected a parser with a readFeaturesFromObject method."); + features = parser.readFeaturesFromObject(data, {callback:callback}) + }else { + throw new Error("Data type not supported: " + data); + } + } + var sourceProjection = this.getSource().getProjection(); + var transform = ol.projection.getTransform(sourceProjection, projection); + transform(this.pointVertices_.coordinates, this.pointVertices_.coordinates, this.pointVertices_.getDimension()); + transform(this.lineVertices_.coordinates, this.lineVertices_.coordinates, this.lineVertices_.getDimension()); + transform(this.polygonVertices_.coordinates, this.polygonVertices_.coordinates, this.polygonVertices_.getDimension()); + this.addFeatures(features) +}; +goog.require("ol.filter.Extent"); +goog.require("ol.filter.Geometry"); +goog.require("ol.filter.Logical"); +goog.require("ol.filter.LogicalOperator"); +goog.require("ol.geom.GeometryType"); goog.provide("ol.renderer.canvas.Layer"); goog.require("ol.layer.Layer"); goog.require("ol.renderer.Layer"); @@ -14551,24 +15131,1168 @@ ol.renderer.canvas.TileLayer.prototype.renderFrame = function(frameState, layerS goog.vec.Mat4.scale(transform, tileResolution / view2DState.resolution, tileResolution / view2DState.resolution, 1); goog.vec.Mat4.translate(transform, (origin.x - center.x) / tileResolution, (center.y - origin.y) / tileResolution, 0) }; +goog.provide("ol.structs.LRUCache"); +goog.require("goog.asserts"); +goog.require("goog.object"); +ol.structs.LRUCache = function() { + this.count_ = 0; + this.entries_ = {}; + this.oldest_ = null; + this.newest_ = null +}; +ol.structs.LRUCache.prototype.assertValid = function() { + if(this.count_ === 0) { + goog.asserts.assert(goog.object.isEmpty(this.entries_)); + goog.asserts.assert(goog.isNull(this.oldest_)); + goog.asserts.assert(goog.isNull(this.newest_)) + }else { + goog.asserts.assert(goog.object.getCount(this.entries_) == this.count_); + goog.asserts.assert(!goog.isNull(this.oldest_)); + goog.asserts.assert(goog.isNull(this.oldest_.older)); + goog.asserts.assert(!goog.isNull(this.newest_)); + goog.asserts.assert(goog.isNull(this.newest_.newer)); + var i, entry; + var older = null; + i = 0; + for(entry = this.oldest_;!goog.isNull(entry);entry = entry.newer) { + goog.asserts.assert(entry.older === older); + older = entry; + ++i + } + goog.asserts.assert(i == this.count_); + var newer = null; + i = 0; + for(entry = this.newest_;!goog.isNull(entry);entry = entry.older) { + goog.asserts.assert(entry.newer === newer); + newer = entry; + ++i + } + goog.asserts.assert(i == this.count_) + } +}; +ol.structs.LRUCache.prototype.clear = function() { + this.count_ = 0; + this.entries_ = {}; + this.oldest_ = null; + this.newest_ = null +}; +ol.structs.LRUCache.prototype.containsKey = function(key) { + return this.entries_.hasOwnProperty(key) +}; +ol.structs.LRUCache.prototype.forEach = function(f, opt_obj) { + var entry = this.oldest_; + while(!goog.isNull(entry)) { + f.call(opt_obj, entry.value_, entry.key_, this); + entry = entry.newer + } +}; +ol.structs.LRUCache.prototype.get = function(key) { + var entry = this.entries_[key]; + goog.asserts.assert(goog.isDef(entry)); + if(entry === this.newest_) { + return entry.value_ + }else { + if(entry === this.oldest_) { + this.oldest_ = this.oldest_.newer; + this.oldest_.older = null + }else { + entry.newer.older = entry.older; + entry.older.newer = entry.newer + } + } + entry.newer = null; + entry.older = this.newest_; + this.newest_.newer = entry; + this.newest_ = entry; + return entry.value_ +}; +ol.structs.LRUCache.prototype.getCount = function() { + return this.count_ +}; +ol.structs.LRUCache.prototype.getKeys = function() { + var keys = new Array(this.count_); + var i = 0; + var entry; + for(entry = this.newest_;!goog.isNull(entry);entry = entry.older) { + keys[i++] = entry.key_ + } + goog.asserts.assert(i == this.count_); + return keys +}; +ol.structs.LRUCache.prototype.getValues = function() { + var values = new Array(this.count_); + var i = 0; + var entry; + for(entry = this.newest_;!goog.isNull(entry);entry = entry.older) { + values[i++] = entry.value_ + } + goog.asserts.assert(i == this.count_); + return values +}; +ol.structs.LRUCache.prototype.peekLast = function() { + goog.asserts.assert(!goog.isNull(this.oldest_)); + return this.oldest_.value_ +}; +ol.structs.LRUCache.prototype.peekLastKey = function() { + goog.asserts.assert(!goog.isNull(this.oldest_)); + return this.oldest_.key_ +}; +ol.structs.LRUCache.prototype.pop = function() { + goog.asserts.assert(!goog.isNull(this.oldest_)); + goog.asserts.assert(!goog.isNull(this.newest_)); + var entry = this.oldest_; + goog.asserts.assert(entry.key_ in this.entries_); + delete this.entries_[entry.key_]; + if(!goog.isNull(entry.newer)) { + entry.newer.older = null + } + this.oldest_ = entry.newer; + if(goog.isNull(this.oldest_)) { + this.newest_ = null + } + --this.count_; + return entry.value_ +}; +ol.structs.LRUCache.prototype.set = function(key, value) { + goog.asserts.assert(!(key in {})); + goog.asserts.assert(!(key in this.entries_)); + var entry = {key_:key, newer:null, older:this.newest_, value_:value}; + if(goog.isNull(this.newest_)) { + this.oldest_ = entry + }else { + this.newest_.newer = entry + } + this.newest_ = entry; + this.entries_[key] = entry; + ++this.count_ +}; +ol.structs.LRUCacheEntry; +goog.provide("ol.TileCache"); +goog.require("ol.Tile"); +goog.require("ol.TileRange"); +goog.require("ol.structs.LRUCache"); +ol.DEFAULT_TILE_CACHE_HIGH_WATER_MARK = 512; +ol.TileCache = function(opt_highWaterMark) { + goog.base(this); + this.highWaterMark_ = goog.isDef(opt_highWaterMark) ? opt_highWaterMark : ol.DEFAULT_TILE_CACHE_HIGH_WATER_MARK +}; +goog.inherits(ol.TileCache, ol.structs.LRUCache); +ol.TileCache.prototype.canExpireCache = function() { + return this.getCount() > this.highWaterMark_ +}; +ol.TileCache.prototype.expireCache = function(usedTiles) { + var tile, zKey; + while(this.canExpireCache()) { + tile = this.peekLast(); + zKey = tile.tileCoord.z.toString(); + if(zKey in usedTiles && usedTiles[zKey].contains(tile.tileCoord)) { + break + }else { + this.pop() + } + } +}; +goog.provide("ol.geom.LineString"); +goog.require("goog.asserts"); +goog.require("ol.Extent"); +goog.require("ol.geom.Geometry"); +goog.require("ol.geom.GeometryType"); +goog.require("ol.geom.SharedVertices"); +goog.require("ol.geom.VertexArray"); +ol.geom.LineString = function(coordinates, opt_shared) { + goog.base(this); + goog.asserts.assert(goog.isArray(coordinates[0])); + var vertices = opt_shared, dimension; + if(!goog.isDef(vertices)) { + dimension = coordinates[0].length; + vertices = new ol.geom.SharedVertices({dimension:dimension}) + } + this.vertices = vertices; + this.sharedId_ = vertices.add(coordinates); + this.dimension = vertices.getDimension(); + goog.asserts.assert(this.dimension >= 2); + this.bounds_ = null +}; +goog.inherits(ol.geom.LineString, ol.geom.Geometry); +ol.geom.LineString.prototype.get = function(index, dim) { + return this.vertices.get(this.sharedId_, index, dim) +}; +ol.geom.LineString.prototype.getCoordinates = function() { + var count = this.getCount(); + var coordinates = new Array(count); + var vertex; + for(var i = 0;i < count;++i) { + vertex = new Array(this.dimension); + for(var j = 0;j < this.dimension;++j) { + vertex[j] = this.get(i, j) + } + coordinates[i] = vertex + } + return coordinates +}; +ol.geom.LineString.prototype.getCount = function() { + return this.vertices.getCount(this.sharedId_) +}; +ol.geom.LineString.prototype.getBounds = function() { + if(goog.isNull(this.bounds_)) { + var dimension = this.dimension, vertices = this.vertices, id = this.sharedId_, count = vertices.getCount(id), start = vertices.getStart(id), end = start + count * dimension, coordinates = vertices.coordinates, minX, maxX, minY, maxY, x, y, i; + minX = maxX = coordinates[start]; + minY = maxY = coordinates[start + 1]; + for(i = start + dimension;i < end;i += dimension) { + x = coordinates[i]; + y = coordinates[i + 1]; + if(x < minX) { + minX = x + }else { + if(x > maxX) { + maxX = x + } + } + if(y < minY) { + minY = y + }else { + if(y > maxY) { + maxY = y + } + } + } + this.bounds_ = new ol.Extent(minX, minY, maxX, maxY) + } + return this.bounds_ +}; +ol.geom.LineString.prototype.getType = function() { + return ol.geom.GeometryType.LINESTRING +}; +ol.geom.LineString.prototype.getSharedId = function() { + return this.sharedId_ +}; +goog.provide("ol.geom.AbstractCollection"); +goog.require("ol.Extent"); +goog.require("ol.geom.Geometry"); +ol.geom.AbstractCollection = function() { + goog.base(this); + this.dimension; + this.components = null; + this.bounds = null +}; +goog.inherits(ol.geom.AbstractCollection, ol.geom.Geometry); +ol.geom.AbstractCollection.prototype.getBounds = function() { + if(goog.isNull(this.bounds)) { + var minX, minY = minX = Number.POSITIVE_INFINITY, maxX, maxY = maxX = Number.NEGATIVE_INFINITY, components = this.components, len = components.length, bounds, i; + for(i = 0;i < len;++i) { + bounds = components[i].getBounds(); + minX = Math.min(bounds.minX, minX); + minY = Math.min(bounds.minY, minY); + maxX = Math.max(bounds.maxX, maxX); + maxY = Math.max(bounds.maxY, maxY) + } + this.bounds = new ol.Extent(minX, minY, maxX, maxY) + } + return this.bounds +}; +ol.geom.AbstractCollection.prototype.getCoordinates = function() { + var count = this.components.length; + var coordinates = new Array(count); + for(var i = 0;i < count;++i) { + coordinates[i] = this.components[i].getCoordinates() + } + return coordinates +}; +ol.geom.AbstractCollection.prototype.getType = goog.abstractMethod; +goog.provide("ol.geom.MultiLineString"); +goog.require("goog.asserts"); +goog.require("ol.geom.AbstractCollection"); +goog.require("ol.geom.GeometryType"); +goog.require("ol.geom.LineString"); +goog.require("ol.geom.SharedVertices"); +goog.require("ol.geom.VertexArray"); +ol.geom.MultiLineString = function(coordinates, opt_shared) { + goog.base(this); + goog.asserts.assert(goog.isArray(coordinates[0][0])); + var vertices = opt_shared, dimension; + if(!goog.isDef(vertices)) { + dimension = coordinates[0][0].length; + vertices = new ol.geom.SharedVertices({dimension:dimension}) + } + var numParts = coordinates.length; + this.components = new Array(numParts); + for(var i = 0;i < numParts;++i) { + this.components[i] = new ol.geom.LineString(coordinates[i], vertices) + } + this.dimension = vertices.getDimension() +}; +goog.inherits(ol.geom.MultiLineString, ol.geom.AbstractCollection); +ol.geom.MultiLineString.prototype.getType = function() { + return ol.geom.GeometryType.MULTILINESTRING +}; +ol.geom.MultiLineString.fromParts = function(geometries, opt_shared) { + var count = geometries.length; + var coordinates = new Array(count); + for(var i = 0;i < count;++i) { + coordinates[i] = geometries[i].getCoordinates() + } + return new ol.geom.MultiLineString(coordinates, opt_shared) +}; +goog.provide("ol.geom.Point"); +goog.require("goog.asserts"); +goog.require("ol.Extent"); +goog.require("ol.geom.Geometry"); +goog.require("ol.geom.GeometryType"); +goog.require("ol.geom.SharedVertices"); +goog.require("ol.geom.Vertex"); +ol.geom.Point = function(coordinates, opt_shared) { + goog.base(this); + var vertices = opt_shared, dimension; + if(!goog.isDef(vertices)) { + dimension = coordinates.length; + vertices = new ol.geom.SharedVertices({dimension:dimension}) + } + this.vertices = vertices; + this.sharedId_ = vertices.add([coordinates]); + this.dimension = vertices.getDimension(); + goog.asserts.assert(this.dimension >= 2); + this.bounds_ = null +}; +goog.inherits(ol.geom.Point, ol.geom.Geometry); +ol.geom.Point.prototype.get = function(dim) { + return this.vertices.get(this.sharedId_, 0, dim) +}; +ol.geom.Point.prototype.getBounds = function() { + if(goog.isNull(this.bounds_)) { + var x = this.get(0), y = this.get(1); + this.bounds_ = new ol.Extent(x, y, x, y) + } + return this.bounds_ +}; +ol.geom.Point.prototype.getCoordinates = function() { + var coordinates = new Array(this.dimension); + for(var i = 0;i < this.dimension;++i) { + coordinates[i] = this.get(i) + } + return coordinates +}; +ol.geom.Point.prototype.getType = function() { + return ol.geom.GeometryType.POINT +}; +ol.geom.Point.prototype.getSharedId = function() { + return this.sharedId_ +}; +goog.provide("ol.geom.MultiPoint"); +goog.require("goog.asserts"); +goog.require("ol.geom.AbstractCollection"); +goog.require("ol.geom.GeometryType"); +goog.require("ol.geom.Point"); +goog.require("ol.geom.SharedVertices"); +goog.require("ol.geom.VertexArray"); +ol.geom.MultiPoint = function(coordinates, opt_shared) { + goog.base(this); + goog.asserts.assert(goog.isArray(coordinates[0])); + var vertices = opt_shared, dimension; + if(!goog.isDef(vertices)) { + dimension = coordinates[0].length; + vertices = new ol.geom.SharedVertices({dimension:dimension}) + } + this.vertices = vertices; + var numParts = coordinates.length; + this.components = new Array(numParts); + for(var i = 0;i < numParts;++i) { + this.components[i] = new ol.geom.Point(coordinates[i], vertices) + } + this.dimension = vertices.getDimension() +}; +goog.inherits(ol.geom.MultiPoint, ol.geom.AbstractCollection); +ol.geom.MultiPoint.prototype.getType = function() { + return ol.geom.GeometryType.MULTIPOINT +}; +ol.geom.MultiPoint.fromParts = function(geometries, opt_shared) { + var count = geometries.length; + var coordinates = new Array(count); + for(var i = 0;i < count;++i) { + coordinates[i] = geometries[i].getCoordinates() + } + return new ol.geom.MultiPoint(coordinates, opt_shared) +}; +goog.provide("ol.geom.LinearRing"); +goog.require("ol.geom.GeometryType"); +goog.require("ol.geom.LineString"); +goog.require("ol.geom.SharedVertices"); +goog.require("ol.geom.VertexArray"); +ol.geom.LinearRing = function(coordinates, opt_shared) { + goog.base(this, coordinates, opt_shared) +}; +goog.inherits(ol.geom.LinearRing, ol.geom.LineString); +ol.geom.LinearRing.prototype.getType = function() { + return ol.geom.GeometryType.LINEARRING +}; +goog.provide("ol.geom.Polygon"); +goog.require("goog.asserts"); +goog.require("ol.Extent"); +goog.require("ol.geom.Geometry"); +goog.require("ol.geom.GeometryType"); +goog.require("ol.geom.LinearRing"); +goog.require("ol.geom.SharedVertices"); +goog.require("ol.geom.VertexArray"); +ol.geom.Polygon = function(coordinates, opt_shared) { + goog.base(this); + goog.asserts.assert(goog.isArray(coordinates[0][0])); + var vertices = opt_shared, dimension; + if(!goog.isDef(vertices)) { + dimension = coordinates[0][0].length; + vertices = new ol.geom.SharedVertices({dimension:dimension}) + } + this.vertices = vertices; + var numRings = coordinates.length; + this.rings = new Array(numRings); + for(var i = 0;i < numRings;++i) { + this.rings[i] = new ol.geom.LinearRing(coordinates[i], vertices) + } + this.dimension = vertices.getDimension(); + goog.asserts.assert(this.dimension >= 2); + this.bounds_ = null +}; +goog.inherits(ol.geom.Polygon, ol.geom.Geometry); +ol.geom.Polygon.prototype.getBounds = function() { + return this.rings[0].getBounds() +}; +ol.geom.Polygon.prototype.getCoordinates = function() { + var count = this.rings.length; + var coordinates = new Array(count); + for(var i = 0;i < count;++i) { + coordinates[i] = this.rings[i].getCoordinates() + } + return coordinates +}; +ol.geom.Polygon.prototype.getType = function() { + return ol.geom.GeometryType.POLYGON +}; +goog.provide("ol.geom.MultiPolygon"); +goog.require("goog.asserts"); +goog.require("ol.geom.AbstractCollection"); +goog.require("ol.geom.GeometryType"); +goog.require("ol.geom.Polygon"); +goog.require("ol.geom.SharedVertices"); +goog.require("ol.geom.VertexArray"); +ol.geom.MultiPolygon = function(coordinates, opt_shared) { + goog.base(this); + goog.asserts.assert(goog.isArray(coordinates[0][0][0])); + var vertices = opt_shared, dimension; + if(!goog.isDef(vertices)) { + dimension = coordinates[0][0][0].length; + vertices = new ol.geom.SharedVertices({dimension:dimension}) + } + var numParts = coordinates.length; + this.components = new Array(numParts); + for(var i = 0;i < numParts;++i) { + this.components[i] = new ol.geom.Polygon(coordinates[i], vertices) + } + this.dimension = vertices.getDimension() +}; +goog.inherits(ol.geom.MultiPolygon, ol.geom.AbstractCollection); +ol.geom.MultiPolygon.prototype.getType = function() { + return ol.geom.GeometryType.MULTIPOLYGON +}; +ol.geom.MultiPolygon.fromParts = function(geometries, opt_shared) { + var count = geometries.length; + var coordinates = new Array(count); + for(var i = 0;i < count;++i) { + coordinates[i] = geometries[i].getCoordinates() + } + return new ol.geom.MultiPolygon(coordinates, opt_shared) +}; +goog.provide("ol.Expression"); +goog.provide("ol.ExpressionLiteral"); +ol.Expression = function(source) { + this.source_ = source +}; +ol.Expression.prototype.evaluate = function(opt_thisArg, opt_scope) { + var thisArg = goog.isDef(opt_thisArg) ? opt_thisArg : goog.global, scope = goog.isDef(opt_scope) ? opt_scope : goog.global, names = [], values = []; + for(var name in scope) { + names.push(name); + values.push(scope[name]) + } + var evaluator = new Function(names.join(","), "return " + this.source_); + return evaluator.apply(thisArg, values) +}; +ol.ExpressionLiteral = function(value) { + this.value_ = value +}; +goog.inherits(ol.ExpressionLiteral, ol.Expression); +ol.ExpressionLiteral.prototype.evaluate = function(opt_thisArg, opt_scope) { + return this.value_ +}; +goog.provide("ol.style.Point"); +goog.provide("ol.style.PointLiteral"); +goog.require("ol.style.Symbolizer"); +goog.require("ol.style.SymbolizerLiteral"); +ol.style.PointLiteral = function() { + goog.base(this) +}; +goog.inherits(ol.style.PointLiteral, ol.style.SymbolizerLiteral); +ol.style.Point = function() { + goog.base(this) +}; +goog.inherits(ol.style.Point, ol.style.Symbolizer); +ol.style.Point.prototype.createLiteral = goog.abstractMethod; +goog.provide("ol.style.Icon"); +goog.provide("ol.style.IconLiteral"); +goog.provide("ol.style.IconType"); +goog.require("ol.Expression"); +goog.require("ol.ExpressionLiteral"); +goog.require("ol.style.Point"); +goog.require("ol.style.PointLiteral"); +ol.style.IconLiteralOptions; +ol.style.IconLiteral = function(config) { + this.url = config.url; + this.width = config.width; + this.height = config.height; + this.opacity = config.opacity; + this.rotation = config.rotation +}; +goog.inherits(ol.style.IconLiteral, ol.style.PointLiteral); +ol.style.IconLiteral.prototype.equals = function(iconLiteral) { + return this.url == iconLiteral.type && this.width == iconLiteral.width && this.height == iconLiteral.height && this.opacity == iconLiteral.opacity && this.rotation == iconLiteral.rotation +}; +ol.style.Icon = function(options) { + goog.asserts.assert(options.url, "url must be set"); + this.url_ = options.url instanceof ol.Expression ? options.url : new ol.ExpressionLiteral(options.url); + this.width_ = !goog.isDef(options.width) ? null : options.width instanceof ol.Expression ? options.width : new ol.ExpressionLiteral(options.width); + this.height_ = !goog.isDef(options.height) ? null : options.height instanceof ol.Expression ? options.height : new ol.ExpressionLiteral(options.height); + this.opacity_ = !goog.isDef(options.opacity) ? new ol.ExpressionLiteral(ol.style.IconDefaults.opacity) : options.opacity instanceof ol.Expression ? options.opacity : new ol.ExpressionLiteral(options.opacity); + this.rotation_ = !goog.isDef(options.rotation) ? new ol.ExpressionLiteral(ol.style.IconDefaults.rotation) : options.rotation instanceof ol.Expression ? options.rotation : new ol.ExpressionLiteral(options.rotation) +}; +ol.style.Icon.prototype.createLiteral = function(feature) { + var attrs = feature.getAttributes(); + var url = this.url_.evaluate(feature, attrs); + goog.asserts.assert(goog.isString(url) && url != "#", "url must be a string"); + var width = goog.isNull(this.width_) ? undefined : this.width_.evaluate(feature, attrs); + goog.asserts.assert(!goog.isDef(width) || goog.isNumber(width), "width must be undefined or a number"); + var height = goog.isNull(this.height_) ? undefined : this.height_.evaluate(feature, attrs); + goog.asserts.assert(!goog.isDef(height) || goog.isNumber(height), "height must be undefined or a number"); + var opacity = this.opacity_.evaluate(feature, attrs); + goog.asserts.assertNumber(opacity, "opacity must be a number"); + var rotation = this.opacity_.evaluate(feature, attrs); + goog.asserts.assertNumber(rotation, "rotation must be a number"); + return new ol.style.IconLiteral({url:url, width:width, height:height, opacity:opacity, rotation:rotation}) +}; +ol.style.IconDefaults = new ol.style.IconLiteral({url:"#", opacity:1, rotation:0}); +goog.provide("ol.style.Line"); +goog.provide("ol.style.LineLiteral"); +goog.require("ol.Expression"); +goog.require("ol.ExpressionLiteral"); +goog.require("ol.style.Symbolizer"); +goog.require("ol.style.SymbolizerLiteral"); +ol.style.LineLiteralOptions; +ol.style.LineLiteral = function(config) { + goog.base(this); + goog.asserts.assertString(config.strokeColor, "strokeColor must be a string"); + this.strokeColor = config.strokeColor; + goog.asserts.assertNumber(config.strokeWidth, "strokeWidth must be a number"); + this.strokeWidth = config.strokeWidth; + goog.asserts.assertNumber(config.opacity, "opacity must be a number"); + this.opacity = config.opacity +}; +goog.inherits(ol.style.LineLiteral, ol.style.SymbolizerLiteral); +ol.style.LineLiteral.prototype.equals = function(lineLiteral) { + return this.strokeColor == lineLiteral.strokeColor && this.strokeWidth == lineLiteral.strokeWidth && this.opacity == lineLiteral.opacity +}; +ol.style.Line = function(options) { + goog.base(this); + this.strokeColor_ = !goog.isDef(options.strokeColor) ? new ol.ExpressionLiteral(ol.style.LineDefaults.strokeColor) : options.strokeColor instanceof ol.Expression ? options.strokeColor : new ol.ExpressionLiteral(options.strokeColor); + this.strokeWidth_ = !goog.isDef(options.strokeWidth) ? new ol.ExpressionLiteral(ol.style.LineDefaults.strokeWidth) : options.strokeWidth instanceof ol.Expression ? options.strokeWidth : new ol.ExpressionLiteral(options.strokeWidth); + this.opacity_ = !goog.isDef(options.opacity) ? new ol.ExpressionLiteral(ol.style.LineDefaults.opacity) : options.opacity instanceof ol.Expression ? options.opacity : new ol.ExpressionLiteral(options.opacity) +}; +goog.inherits(ol.style.Line, ol.style.Symbolizer); +ol.style.Line.prototype.createLiteral = function(opt_feature) { + var attrs, feature = opt_feature; + if(goog.isDef(feature)) { + attrs = feature.getAttributes() + } + var strokeColor = this.strokeColor_.evaluate(feature, attrs); + goog.asserts.assertString(strokeColor, "strokeColor must be a string"); + var strokeWidth = this.strokeWidth_.evaluate(feature, attrs); + goog.asserts.assertNumber(strokeWidth, "strokeWidth must be a number"); + var opacity = this.opacity_.evaluate(feature, attrs); + goog.asserts.assertNumber(opacity, "opacity must be a number"); + return new ol.style.LineLiteral({strokeColor:strokeColor, strokeWidth:strokeWidth, opacity:opacity}) +}; +ol.style.LineDefaults = new ol.style.LineLiteral({strokeColor:"#696969", strokeWidth:1.5, opacity:0.75}); +goog.provide("ol.style.Polygon"); +goog.provide("ol.style.PolygonLiteral"); +goog.require("ol.Expression"); +goog.require("ol.ExpressionLiteral"); +goog.require("ol.style.Symbolizer"); +goog.require("ol.style.SymbolizerLiteral"); +ol.style.PolygonLiteralOptions; +ol.style.PolygonLiteral = function(config) { + goog.base(this); + this.fillColor = config.fillColor; + if(goog.isDef(config.fillColor)) { + goog.asserts.assertString(config.fillColor, "fillColor must be a string") + } + this.strokeColor = config.strokeColor; + if(goog.isDef(this.strokeColor)) { + goog.asserts.assertString(this.strokeColor, "strokeColor must be a string") + } + this.strokeWidth = config.strokeWidth; + if(goog.isDef(this.strokeWidth)) { + goog.asserts.assertNumber(this.strokeWidth, "strokeWidth must be a number") + } + goog.asserts.assert(goog.isDef(this.fillColor) || goog.isDef(this.strokeColor) && goog.isDef(this.strokeWidth), "Either fillColor or strokeColor and strokeWidth must be set"); + goog.asserts.assertNumber(config.opacity, "opacity must be a number"); + this.opacity = config.opacity +}; +goog.inherits(ol.style.PolygonLiteral, ol.style.SymbolizerLiteral); +ol.style.PolygonLiteral.prototype.equals = function(polygonLiteral) { + return this.fillColor == polygonLiteral.fillColor && this.strokeColor == polygonLiteral.strokeColor && this.strokeWidth == polygonLiteral.strokeWidth && this.opacity == polygonLiteral.opacity +}; +ol.style.Polygon = function(options) { + goog.base(this); + this.fillColor_ = !goog.isDefAndNotNull(options.fillColor) ? null : options.fillColor instanceof ol.Expression ? options.fillColor : new ol.ExpressionLiteral(options.fillColor); + var strokeColor = null, strokeWidth = null; + if(goog.isDefAndNotNull(options.strokeColor) || goog.isDefAndNotNull(options.strokeWidth)) { + strokeColor = !goog.isDefAndNotNull(options.strokeColor) ? new ol.ExpressionLiteral(ol.style.PolygonDefaults.strokeColor) : options.strokeColor instanceof ol.Expression ? options.strokeColor : new ol.ExpressionLiteral(options.strokeColor); + strokeWidth = !goog.isDef(options.strokeWidth) ? new ol.ExpressionLiteral(ol.style.PolygonDefaults.strokeWidth) : options.strokeWidth instanceof ol.Expression ? options.strokeWidth : new ol.ExpressionLiteral(options.strokeWidth) + } + this.strokeColor_ = strokeColor; + this.strokeWidth_ = strokeWidth; + goog.asserts.assert(!goog.isNull(this.fillColor_) || !(goog.isNull(this.strokeColor_) && goog.isNull(this.strokeWidth_)), "Stroke or fill properties must be provided"); + this.opacity_ = !goog.isDef(options.opacity) ? new ol.ExpressionLiteral(ol.style.PolygonDefaults.opacity) : options.opacity instanceof ol.Expression ? options.opacity : new ol.ExpressionLiteral(options.opacity) +}; +goog.inherits(ol.style.Polygon, ol.style.Symbolizer); +ol.style.Polygon.prototype.createLiteral = function(opt_feature) { + var attrs, feature = opt_feature; + if(goog.isDef(feature)) { + attrs = feature.getAttributes() + } + var fillColor = goog.isNull(this.fillColor_) ? undefined : this.fillColor_.evaluate(feature, attrs); + goog.asserts.assert(!goog.isDef(fillColor) || goog.isString(fillColor)); + var strokeColor = goog.isNull(this.strokeColor_) ? undefined : this.strokeColor_.evaluate(feature, attrs); + goog.asserts.assert(!goog.isDef(strokeColor) || goog.isString(strokeColor)); + var strokeWidth = goog.isNull(this.strokeWidth_) ? undefined : this.strokeWidth_.evaluate(feature, attrs); + goog.asserts.assert(!goog.isDef(strokeWidth) || goog.isNumber(strokeWidth)); + goog.asserts.assert(goog.isDef(fillColor) || goog.isDef(strokeColor) && goog.isDef(strokeWidth), "either fill style or strokeColor and strokeWidth must be defined"); + var opacity = this.opacity_.evaluate(feature, attrs); + goog.asserts.assertNumber(opacity, "opacity must be a number"); + return new ol.style.PolygonLiteral({fillColor:fillColor, strokeColor:strokeColor, strokeWidth:strokeWidth, opacity:opacity}) +}; +ol.style.PolygonDefaults = new ol.style.PolygonLiteral({fillColor:"#ffffff", strokeColor:"#696969", strokeWidth:1.5, opacity:0.75}); +goog.provide("ol.style.Shape"); +goog.provide("ol.style.ShapeLiteral"); +goog.provide("ol.style.ShapeType"); +goog.require("ol.Expression"); +goog.require("ol.ExpressionLiteral"); +goog.require("ol.style.Point"); +goog.require("ol.style.PointLiteral"); +ol.style.ShapeType = {CIRCLE:"circle"}; +ol.style.ShapeLiteralOptions; +ol.style.ShapeLiteral = function(config) { + goog.asserts.assertString(config.type, "type must be a string"); + this.type = config.type; + goog.asserts.assertNumber(config.size, "size must be a number"); + this.size = config.size; + this.fillColor = config.fillColor; + if(goog.isDef(config.fillColor)) { + goog.asserts.assertString(config.fillColor, "fillColor must be a string") + } + this.strokeColor = config.strokeColor; + if(goog.isDef(this.strokeColor)) { + goog.asserts.assertString(this.strokeColor, "strokeColor must be a string") + } + this.strokeWidth = config.strokeWidth; + if(goog.isDef(this.strokeWidth)) { + goog.asserts.assertNumber(this.strokeWidth, "strokeWidth must be a number") + } + goog.asserts.assert(goog.isDef(this.fillColor) || goog.isDef(this.strokeColor) && goog.isDef(this.strokeWidth), "Either fillColor or strokeColor and strokeWidth must be set"); + goog.asserts.assertNumber(config.opacity, "opacity must be a number"); + this.opacity = config.opacity +}; +goog.inherits(ol.style.ShapeLiteral, ol.style.PointLiteral); +ol.style.ShapeLiteral.prototype.equals = function(shapeLiteral) { + return this.type == shapeLiteral.type && this.size == shapeLiteral.size && this.fillColor == shapeLiteral.fillColor && this.strokeColor == shapeLiteral.strokeColor && this.strokeWidth == shapeLiteral.strokeWidth && this.opacity == shapeLiteral.opacity +}; +ol.style.Shape = function(options) { + this.type_ = goog.isDef(options.type) ? options.type : ol.style.ShapeDefaults.type; + this.size_ = !goog.isDef(options.size) ? new ol.ExpressionLiteral(ol.style.ShapeDefaults.size) : options.size instanceof ol.Expression ? options.size : new ol.ExpressionLiteral(options.size); + this.fillColor_ = !goog.isDefAndNotNull(options.fillColor) ? null : options.fillColor instanceof ol.Expression ? options.fillColor : new ol.ExpressionLiteral(options.fillColor); + var strokeColor = null, strokeWidth = null; + if(goog.isDefAndNotNull(options.strokeColor) || goog.isDefAndNotNull(options.strokeWidth)) { + strokeColor = !goog.isDefAndNotNull(options.strokeColor) ? new ol.ExpressionLiteral(ol.style.ShapeDefaults.strokeColor) : options.strokeColor instanceof ol.Expression ? options.strokeColor : new ol.ExpressionLiteral(options.strokeColor); + strokeWidth = !goog.isDef(options.strokeWidth) ? new ol.ExpressionLiteral(ol.style.ShapeDefaults.strokeWidth) : options.strokeWidth instanceof ol.Expression ? options.strokeWidth : new ol.ExpressionLiteral(options.strokeWidth) + } + this.strokeColor_ = strokeColor; + this.strokeWidth_ = strokeWidth; + goog.asserts.assert(!goog.isNull(this.fillColor_) || !(goog.isNull(this.strokeColor_) && goog.isNull(this.strokeWidth_)), "Stroke or fill properties must be provided"); + this.opacity_ = !goog.isDef(options.opacity) ? new ol.ExpressionLiteral(ol.style.ShapeDefaults.opacity) : options.opacity instanceof ol.Expression ? options.opacity : new ol.ExpressionLiteral(options.opacity) +}; +ol.style.Shape.prototype.createLiteral = function(opt_feature) { + var attrs, feature = opt_feature; + if(goog.isDef(feature)) { + attrs = feature.getAttributes() + } + var size = this.size_.evaluate(feature, attrs); + goog.asserts.assertNumber(size, "size must be a number"); + var fillColor = goog.isNull(this.fillColor_) ? undefined : this.fillColor_.evaluate(feature, attrs); + goog.asserts.assert(!goog.isDef(fillColor) || goog.isString(fillColor)); + var strokeColor = goog.isNull(this.strokeColor_) ? undefined : this.strokeColor_.evaluate(feature, attrs); + goog.asserts.assert(!goog.isDef(strokeColor) || goog.isString(strokeColor)); + var strokeWidth = goog.isNull(this.strokeWidth_) ? undefined : this.strokeWidth_.evaluate(feature, attrs); + goog.asserts.assert(!goog.isDef(strokeWidth) || goog.isNumber(strokeWidth)); + goog.asserts.assert(goog.isDef(fillColor) || goog.isDef(strokeColor) && goog.isDef(strokeWidth), "either fill style or strokeColor and strokeWidth must be defined"); + var opacity = this.opacity_.evaluate(feature, attrs); + goog.asserts.assertNumber(opacity, "opacity must be a number"); + return new ol.style.ShapeLiteral({type:this.type_, size:size, fillColor:fillColor, strokeColor:strokeColor, strokeWidth:strokeWidth, opacity:opacity}) +}; +ol.style.ShapeDefaults = new ol.style.ShapeLiteral({type:ol.style.ShapeType.CIRCLE, size:5, fillColor:"#ffffff", strokeColor:"#696969", strokeWidth:1.5, opacity:0.75}); +goog.provide("ol.renderer.canvas.VectorRenderer"); +goog.require("goog.asserts"); +goog.require("goog.vec.Mat4"); +goog.require("ol.Feature"); +goog.require("ol.Pixel"); +goog.require("ol.geom.Geometry"); +goog.require("ol.geom.GeometryType"); +goog.require("ol.geom.LineString"); +goog.require("ol.geom.MultiLineString"); +goog.require("ol.geom.MultiPoint"); +goog.require("ol.geom.MultiPolygon"); +goog.require("ol.geom.Point"); +goog.require("ol.geom.Polygon"); +goog.require("ol.style.IconLiteral"); +goog.require("ol.style.LineLiteral"); +goog.require("ol.style.PointLiteral"); +goog.require("ol.style.PolygonLiteral"); +goog.require("ol.style.ShapeLiteral"); +goog.require("ol.style.ShapeType"); +goog.require("ol.style.SymbolizerLiteral"); +ol.renderer.canvas.VectorRenderer = function(canvas, transform, opt_offset, opt_iconLoadedCallback) { + var context = canvas.getContext("2d"), dx = goog.isDef(opt_offset) ? opt_offset.x : 0, dy = goog.isDef(opt_offset) ? opt_offset.y : 0; + this.transform_ = transform; + context.setTransform(goog.vec.Mat4.getElement(transform, 0, 0), goog.vec.Mat4.getElement(transform, 1, 0), goog.vec.Mat4.getElement(transform, 0, 1), goog.vec.Mat4.getElement(transform, 1, 1), goog.vec.Mat4.getElement(transform, 0, 3) + dx, goog.vec.Mat4.getElement(transform, 1, 3) + dy); + var vec = [1, 0, 0]; + goog.vec.Mat4.multVec3NoTranslate(transform, vec, vec); + this.inverseScale_ = 1 / Math.sqrt(vec[0] * vec[0] + vec[1] * vec[1]); + this.context_ = context; + this.iconLoadedCallback_ = opt_iconLoadedCallback +}; +ol.renderer.canvas.VectorRenderer.prototype.renderFeaturesByGeometryType = function(type, features, symbolizer) { + var deferred = false; + switch(type) { + case ol.geom.GeometryType.POINT: + ; + case ol.geom.GeometryType.MULTIPOINT: + goog.asserts.assert(symbolizer instanceof ol.style.PointLiteral, "Expected point symbolizer: " + symbolizer); + deferred = this.renderPointFeatures_(features, symbolizer); + break; + case ol.geom.GeometryType.LINESTRING: + ; + case ol.geom.GeometryType.MULTILINESTRING: + goog.asserts.assert(symbolizer instanceof ol.style.LineLiteral, "Expected line symbolizer: " + symbolizer); + this.renderLineStringFeatures_(features, symbolizer); + break; + case ol.geom.GeometryType.POLYGON: + ; + case ol.geom.GeometryType.MULTIPOLYGON: + goog.asserts.assert(symbolizer instanceof ol.style.PolygonLiteral, "Expected polygon symbolizer: " + symbolizer); + this.renderPolygonFeatures_(features, symbolizer); + break; + default: + throw new Error("Rendering not implemented for geometry type: " + type); + } + return deferred +}; +ol.renderer.canvas.VectorRenderer.prototype.renderLineStringFeatures_ = function(features, symbolizer) { + var context = this.context_, i, ii, geometry, components, j, jj, line, dim, k, kk, x, y; + context.globalAlpha = symbolizer.opacity; + context.strokeStyle = symbolizer.strokeColor; + context.lineWidth = symbolizer.strokeWidth * this.inverseScale_; + context.lineCap = "round"; + context.lineJoin = "round"; + context.beginPath(); + for(i = 0, ii = features.length;i < ii;++i) { + geometry = features[i].getGeometry(); + if(geometry instanceof ol.geom.LineString) { + components = [geometry] + }else { + goog.asserts.assert(geometry instanceof ol.geom.MultiLineString, "Expected MultiLineString"); + components = geometry.components + } + for(j = 0, jj = components.length;j < jj;++j) { + line = components[j]; + dim = line.dimension; + for(k = 0, kk = line.getCount();k < kk;++k) { + x = line.get(k, 0); + y = line.get(k, 1); + if(k === 0) { + context.moveTo(x, y) + }else { + context.lineTo(x, y) + } + } + } + } + context.stroke() +}; +ol.renderer.canvas.VectorRenderer.prototype.renderPointFeatures_ = function(features, symbolizer) { + var context = this.context_, content, alpha, i, ii, geometry, components, j, jj, point, vec; + if(symbolizer instanceof ol.style.ShapeLiteral) { + content = ol.renderer.canvas.VectorRenderer.renderShape(symbolizer); + alpha = 1 + }else { + if(symbolizer instanceof ol.style.IconLiteral) { + content = ol.renderer.canvas.VectorRenderer.renderIcon(symbolizer, this.iconLoadedCallback_); + alpha = symbolizer.opacity + }else { + throw new Error("Unsupported symbolizer: " + symbolizer); + } + } + if(goog.isNull(content)) { + return true + } + var midWidth = content.width / 2; + var midHeight = content.height / 2; + context.save(); + context.setTransform(1, 0, 0, 1, -midWidth, -midHeight); + context.globalAlpha = alpha; + for(i = 0, ii = features.length;i < ii;++i) { + geometry = features[i].getGeometry(); + if(geometry instanceof ol.geom.Point) { + components = [geometry] + }else { + goog.asserts.assert(geometry instanceof ol.geom.MultiPoint, "Expected MultiPoint"); + components = geometry.components + } + for(j = 0, jj = components.length;j < jj;++j) { + point = components[j]; + vec = goog.vec.Mat4.multVec3(this.transform_, [point.get(0), point.get(1), 0], []); + context.drawImage(content, vec[0], vec[1], content.width, content.height) + } + } + context.restore(); + return false +}; +ol.renderer.canvas.VectorRenderer.prototype.renderPolygonFeatures_ = function(features, symbolizer) { + var context = this.context_, strokeColor = symbolizer.strokeColor, fillColor = symbolizer.fillColor, i, ii, geometry, components, j, jj, poly, rings, numRings, ring, dim, k, kk, x, y; + context.globalAlpha = symbolizer.opacity; + if(strokeColor) { + context.strokeStyle = symbolizer.strokeColor; + context.lineWidth = symbolizer.strokeWidth * this.inverseScale_; + context.lineCap = "round"; + context.lineJoin = "round" + } + if(fillColor) { + context.fillStyle = fillColor + } + context.beginPath(); + for(i = 0, ii = features.length;i < ii;++i) { + geometry = features[i].getGeometry(); + if(geometry instanceof ol.geom.Polygon) { + components = [geometry] + }else { + goog.asserts.assert(geometry instanceof ol.geom.MultiPolygon, "Expected MultiPolygon"); + components = geometry.components + } + for(j = 0, jj = components.length;j < jj;++j) { + poly = components[j]; + dim = poly.dimension; + rings = poly.rings; + numRings = rings.length; + if(numRings > 0) { + ring = rings[0]; + for(k = 0, kk = ring.getCount();k < kk;++k) { + x = ring.get(k, 0); + y = ring.get(k, 1); + if(k === 0) { + context.moveTo(x, y) + }else { + context.lineTo(x, y) + } + } + if(fillColor && strokeColor) { + context.fill(); + context.stroke(); + if(i < ii - 1 || j < jj - 1) { + context.beginPath() + } + } + } + } + } + if(!(fillColor && strokeColor)) { + if(fillColor) { + context.fill() + }else { + context.stroke() + } + } +}; +ol.renderer.canvas.VectorRenderer.renderCircle_ = function(circle) { + var strokeWidth = circle.strokeWidth || 0, size = circle.size + 2 * strokeWidth + 1, mid = size / 2, canvas = goog.dom.createElement(goog.dom.TagName.CANVAS), context = canvas.getContext("2d"), fillColor = circle.fillColor, strokeColor = circle.strokeColor, twoPi = Math.PI * 2; + canvas.height = size; + canvas.width = size; + context.globalAlpha = circle.opacity; + if(fillColor) { + context.fillStyle = fillColor + } + if(strokeColor) { + context.lineWidth = strokeWidth; + context.strokeStyle = strokeColor; + context.lineCap = "round"; + context.lineJoin = "round" + } + context.beginPath(); + context.arc(mid, mid, circle.size / 2, 0, twoPi, true); + if(fillColor) { + context.fill() + } + if(strokeColor) { + context.stroke() + } + return canvas +}; +ol.renderer.canvas.VectorRenderer.renderShape = function(shape) { + var canvas; + if(shape.type === ol.style.ShapeType.CIRCLE) { + canvas = ol.renderer.canvas.VectorRenderer.renderCircle_(shape) + }else { + throw new Error("Unsupported shape type: " + shape); + } + return canvas +}; +ol.renderer.canvas.VectorRenderer.renderIcon = function(icon, opt_callback) { + var url = icon.url; + var image = ol.renderer.canvas.VectorRenderer.icons_[url]; + var deferred = false; + if(!goog.isDef(image)) { + deferred = true; + image = goog.dom.createElement(goog.dom.TagName.IMG); + goog.events.listenOnce(image, goog.events.EventType.ERROR, goog.bind(ol.renderer.canvas.VectorRenderer.handleIconError_, null, opt_callback), false, ol.renderer.canvas.VectorRenderer.renderIcon); + goog.events.listenOnce(image, goog.events.EventType.LOAD, goog.bind(ol.renderer.canvas.VectorRenderer.handleIconLoad_, null, opt_callback), false, ol.renderer.canvas.VectorRenderer.renderIcon); + image.setAttribute("src", url); + ol.renderer.canvas.VectorRenderer.icons_[url] = image + }else { + if(!goog.isNull(image)) { + var width = icon.width, height = icon.height; + if(goog.isDef(width) && goog.isDef(height)) { + image.width = width; + image.height = height + }else { + if(goog.isDef(width)) { + image.height = width / image.width * image.height; + image.width = width + }else { + if(goog.isDef(height)) { + image.width = height / image.height * image.width; + image.height = height + } + } + } + } + } + return deferred ? null : image +}; +ol.renderer.canvas.VectorRenderer.icons_ = {}; +ol.renderer.canvas.VectorRenderer.handleIconError_ = function(opt_callback, opt_event) { + if(goog.isDef(opt_event)) { + var url = opt_event.target.getAttribute("src"); + ol.renderer.canvas.VectorRenderer.icons_[url] = null; + ol.renderer.canvas.VectorRenderer.handleIconLoad_(opt_callback, opt_event) + } +}; +ol.renderer.canvas.VectorRenderer.handleIconLoad_ = function(opt_callback, opt_event) { + if(goog.isDef(opt_event)) { + var url = opt_event.target.getAttribute("src"); + ol.renderer.canvas.VectorRenderer.icons_[url] = opt_event.target + } + if(goog.isDef(opt_callback)) { + opt_callback() + } +}; +goog.provide("ol.renderer.canvas.VectorLayer"); +goog.require("goog.vec.Mat4"); +goog.require("ol.Extent"); +goog.require("ol.Size"); +goog.require("ol.TileCache"); +goog.require("ol.TileCoord"); +goog.require("ol.ViewHint"); +goog.require("ol.filter.Extent"); +goog.require("ol.filter.Geometry"); +goog.require("ol.filter.Logical"); +goog.require("ol.filter.LogicalOperator"); +goog.require("ol.geom.GeometryType"); +goog.require("ol.layer.Vector"); +goog.require("ol.renderer.canvas.Layer"); +goog.require("ol.renderer.canvas.VectorRenderer"); +goog.require("ol.tilegrid.TileGrid"); +ol.renderer.canvas.VectorLayer = function(mapRenderer, layer) { + goog.base(this, mapRenderer, layer); + this.canvas_ = goog.dom.createElement(goog.dom.TagName.CANVAS); + this.context_ = this.canvas_.getContext("2d"); + this.transform_ = goog.vec.Mat4.createNumber(); + this.sketchCanvas_ = goog.dom.createElement(goog.dom.TagName.CANVAS); + this.sketchTransform_ = goog.vec.Mat4.createNumber(); + this.tileCache_ = new ol.TileCache(ol.renderer.canvas.VectorLayer.TILECACHE_SIZE); + goog.events.listenOnce(layer, goog.events.EventType.CHANGE, this.handleLayerChange_, false, this); + this.tileArchetype_ = null; + this.geometryFilters_ = [new ol.filter.Geometry(ol.geom.GeometryType.POINT), new ol.filter.Geometry(ol.geom.GeometryType.MULTIPOINT), new ol.filter.Geometry(ol.geom.GeometryType.LINESTRING), new ol.filter.Geometry(ol.geom.GeometryType.MULTILINESTRING), new ol.filter.Geometry(ol.geom.GeometryType.POLYGON), new ol.filter.Geometry(ol.geom.GeometryType.MULTIPOLYGON)]; + this.renderedResolution_; + this.renderedExtent_ = null; + this.dirty_ = false; + this.pendingCachePrune_ = false; + this.tileGrid_ = null; + this.requestMapRenderFrame_ = goog.bind(function() { + this.dirty_ = true; + mapRenderer.getMap().requestRenderFrame() + }, this) +}; +goog.inherits(ol.renderer.canvas.VectorLayer, ol.renderer.canvas.Layer); +ol.renderer.canvas.VectorLayer.prototype.expireTiles_ = function(opt_extent) { + if(goog.isDef(opt_extent)) { + } + this.tileCache_.clear() +}; +ol.renderer.canvas.VectorLayer.prototype.getImage = function() { + return this.canvas_ +}; +ol.renderer.canvas.VectorLayer.prototype.getVectorLayer = function() { + return this.getLayer() +}; +ol.renderer.canvas.VectorLayer.prototype.getTransform = function() { + return this.transform_ +}; +ol.renderer.canvas.VectorLayer.prototype.handleLayerChange_ = function(event) { + this.expireTiles_(); + this.requestMapRenderFrame_() +}; +ol.renderer.canvas.VectorLayer.prototype.renderFrame = function(frameState, layerState) { + var view2DState = frameState.view2DState, resolution = view2DState.resolution, extent = frameState.extent, layer = this.getVectorLayer(), tileGrid = this.tileGrid_; + if(goog.isNull(tileGrid)) { + tileGrid = ol.tilegrid.createForProjection(view2DState.projection, 22, new ol.Size(512, 512)); + this.tileGrid_ = tileGrid + } + var z = tileGrid.getZForResolution(resolution), tileResolution = tileGrid.getResolution(z), tileRange = tileGrid.getTileRangeForExtentAndResolution(extent, tileResolution), tileRangeExtent = tileGrid.getTileRangeExtent(z, tileRange), tileSize = tileGrid.getTileSize(z), sketchOrigin = tileRangeExtent.getTopLeft(), transform = this.transform_; + goog.vec.Mat4.makeIdentity(transform); + goog.vec.Mat4.translate(transform, frameState.size.width / 2, frameState.size.height / 2, 0); + goog.vec.Mat4.scale(transform, tileResolution / resolution, tileResolution / resolution, 1); + goog.vec.Mat4.rotateZ(transform, view2DState.rotation); + goog.vec.Mat4.translate(transform, (sketchOrigin.x - view2DState.center.x) / tileResolution, (view2DState.center.y - sketchOrigin.y) / tileResolution, 0); + if(!this.dirty_ && this.renderedResolution_ === tileResolution && this.renderedExtent_.toString() === tileRangeExtent.toString()) { + return + } + if(goog.isNull(this.tileArchetype_)) { + this.tileArchetype_ = goog.dom.createElement(goog.dom.TagName.CANVAS); + this.tileArchetype_.width = tileSize.width; + this.tileArchetype_.height = tileSize.height + } + var sketchCanvas = this.sketchCanvas_; + var sketchSize = new ol.Size(tileSize.width * tileRange.getWidth(), tileSize.height * tileRange.getHeight()); + var sketchTransform = this.sketchTransform_; + var halfWidth = sketchSize.width / 2; + var halfHeight = sketchSize.height / 2; + goog.vec.Mat4.makeIdentity(sketchTransform); + goog.vec.Mat4.translate(sketchTransform, halfWidth, halfHeight, 0); + goog.vec.Mat4.scale(sketchTransform, 1 / tileResolution, -1 / tileResolution, 1); + goog.vec.Mat4.translate(sketchTransform, -(sketchOrigin.x + halfWidth * tileResolution), -(sketchOrigin.y - halfHeight * tileResolution), 0); + sketchCanvas.width = sketchSize.width; + sketchCanvas.height = sketchSize.height; + var sketchCanvasRenderer = new ol.renderer.canvas.VectorRenderer(sketchCanvas, sketchTransform, undefined, this.requestMapRenderFrame_); + var finalCanvas = this.canvas_; + finalCanvas.width = sketchSize.width; + finalCanvas.height = sketchSize.height; + var finalContext = this.context_; + var featuresToRender = {}; + var tilesToRender = {}; + var tilesOnSketchCanvas = {}; + var tileGutter = 15 * tileResolution; + var tile, tileCoord, key, tileState, x, y; + var filters = this.geometryFilters_, numFilters = filters.length, deferred = false, i, geomFilter, tileExtent, extentFilter, type, groups, group, j, numGroups; + for(x = tileRange.minX;x <= tileRange.maxX;++x) { + for(y = tileRange.minY;y <= tileRange.maxY;++y) { + tileCoord = new ol.TileCoord(z, x, y); + key = tileCoord.toString(); + if(this.tileCache_.containsKey(key)) { + tilesToRender[key] = tileCoord + }else { + if(!frameState.viewHints[ol.ViewHint.ANIMATING]) { + tileExtent = tileGrid.getTileCoordExtent(tileCoord); + tileExtent.minX -= tileGutter; + tileExtent.minY -= tileGutter; + tileExtent.maxX += tileGutter; + tileExtent.maxY += tileGutter; + extentFilter = new ol.filter.Extent(tileExtent); + for(i = 0;i < numFilters;++i) { + geomFilter = filters[i]; + type = geomFilter.getType(); + if(!goog.isDef(featuresToRender[type])) { + featuresToRender[type] = {} + } + goog.object.extend(featuresToRender[type], layer.getFeaturesObject(new ol.filter.Logical([geomFilter, extentFilter], ol.filter.LogicalOperator.AND))) + } + tilesOnSketchCanvas[key] = tileCoord + } + } + } + } + for(type in featuresToRender) { + groups = layer.groupFeaturesBySymbolizerLiteral(featuresToRender[type]); + numGroups = groups.length; + for(j = 0;j < numGroups;++j) { + group = groups[j]; + deferred = sketchCanvasRenderer.renderFeaturesByGeometryType(type, group[0], group[1]); + if(deferred) { + break + } + } + if(!deferred) { + goog.object.extend(tilesToRender, tilesOnSketchCanvas) + } + } + this.dirty_ = true; + for(key in tilesToRender) { + tileCoord = tilesToRender[key]; + if(this.tileCache_.containsKey(key)) { + tile = this.tileCache_.get(key) + }else { + tile = this.tileArchetype_.cloneNode(false); + tile.getContext("2d").drawImage(sketchCanvas, (tileRange.minX - tileCoord.x) * tileSize.width, (tileCoord.y - tileRange.maxY) * tileSize.height); + this.tileCache_.set(key, tile) + } + finalContext.drawImage(tile, tileSize.width * (tileCoord.x - tileRange.minX), tileSize.height * (tileRange.maxY - tileCoord.y)); + this.dirty_ = false + } + this.renderedResolution_ = tileResolution; + this.renderedExtent_ = tileRangeExtent; + if(!this.pendingCachePrune_) { + this.pendingCachePrune_ = true; + frameState.postRenderFunctions.push(goog.bind(this.pruneTileCache_, this)) + } +}; +ol.renderer.canvas.VectorLayer.prototype.pruneTileCache_ = function() { + while(this.tileCache_.canExpireCache()) { + this.tileCache_.pop() + } + this.pendingCachePrune_ = false +}; +ol.renderer.canvas.VectorLayer.TILECACHE_SIZE = 128; goog.provide("ol.renderer.canvas.Map"); goog.require("goog.array"); goog.require("goog.dom"); goog.require("goog.style"); goog.require("goog.vec.Mat4"); +goog.require("ol"); goog.require("ol.Size"); goog.require("ol.layer.ImageLayer"); goog.require("ol.layer.TileLayer"); +goog.require("ol.layer.Vector"); goog.require("ol.renderer.Map"); goog.require("ol.renderer.canvas.ImageLayer"); goog.require("ol.renderer.canvas.TileLayer"); +goog.require("ol.renderer.canvas.VectorLayer"); ol.renderer.canvas.Map = function(container, map) { goog.base(this, container, map); this.canvasSize_ = new ol.Size(container.clientHeight, container.clientWidth); this.canvas_ = goog.dom.createElement(goog.dom.TagName.CANVAS); this.canvas_.height = this.canvasSize_.height; this.canvas_.width = this.canvasSize_.width; - this.canvas_.className = "ol-unselectable"; + this.canvas_.className = ol.CSS_CLASS_UNSELECTABLE; goog.dom.insertChildAt(container, this.canvas_, 0); this.renderedVisible_ = true; this.context_ = this.canvas_.getContext("2d") @@ -14581,8 +16305,12 @@ ol.renderer.canvas.Map.prototype.createLayerRenderer = function(layer) { if(layer instanceof ol.layer.TileLayer) { return new ol.renderer.canvas.TileLayer(this, layer) }else { - goog.asserts.assert(false); - return null + if(layer instanceof ol.layer.Vector) { + return new ol.renderer.canvas.VectorLayer(this, layer) + }else { + goog.asserts.assert(false); + return null + } } } }; @@ -14609,6 +16337,7 @@ ol.renderer.canvas.Map.prototype.renderFrame = function(frameState) { context.fillStyle = "rgb(" + backgroundColor.r.toFixed(0) + "," + backgroundColor.g.toFixed(0) + "," + backgroundColor.b.toFixed(0) + ")"; context.globalAlpha = 1; context.fillRect(0, 0, size.width, size.height); + this.calculateMatrices2D(frameState); goog.array.forEach(frameState.layersArray, function(layer) { var layerState = frameState.layerStates[goog.getUid(layer)]; if(!layerState.visible) { @@ -14633,7 +16362,6 @@ ol.renderer.canvas.Map.prototype.renderFrame = function(frameState) { goog.style.showElement(this.canvas_, true); this.renderedVisible_ = true } - this.calculateMatrices2D(frameState) }; goog.provide("ol.canvas"); goog.require("goog.dom"); @@ -15018,6 +16746,7 @@ goog.require("goog.asserts"); goog.require("goog.dom"); goog.require("goog.dom.TagName"); goog.require("goog.style"); +goog.require("ol"); goog.require("ol.layer.ImageLayer"); goog.require("ol.layer.TileLayer"); goog.require("ol.renderer.Map"); @@ -15026,7 +16755,7 @@ goog.require("ol.renderer.dom.TileLayer"); ol.renderer.dom.Map = function(container, map) { goog.base(this, container, map); this.layersPane_ = goog.dom.createElement(goog.dom.TagName.DIV); - this.layersPane_.className = "ol-layers ol-unselectable"; + this.layersPane_.className = "ol-layers " + ol.CSS_CLASS_UNSELECTABLE; var style = this.layersPane_.style; style.position = "absolute"; style.width = "100%"; @@ -15035,10 +16764,6 @@ ol.renderer.dom.Map = function(container, map) { this.renderedVisible_ = true }; goog.inherits(ol.renderer.dom.Map, ol.renderer.Map); -ol.renderer.dom.Map.prototype.addLayer = function(layer) { - goog.base(this, "addLayer", layer); - this.getMap().render() -}; ol.renderer.dom.Map.prototype.createLayerRenderer = function(layer) { var layerRenderer; if(layer instanceof ol.layer.TileLayer) { @@ -16052,142 +17777,6 @@ ol.renderer.webgl.TileLayer.prototype.renderFrame = function(frameState, layerSt goog.vec.Mat4.scale(this.texCoordMatrix_, frameState.size.width * view2DState.resolution / (framebufferExtent.maxX - framebufferExtent.minX), frameState.size.height * view2DState.resolution / (framebufferExtent.maxY - framebufferExtent.minY), 1); goog.vec.Mat4.translate(this.texCoordMatrix_, -0.5, -0.5, 0) }; -goog.provide("ol.structs.LRUCache"); -goog.require("goog.asserts"); -goog.require("goog.object"); -ol.structs.LRUCache = function() { - this.count_ = 0; - this.entries_ = {}; - this.oldest_ = null; - this.newest_ = null -}; -ol.structs.LRUCache.prototype.assertValid = function() { - if(this.count_ === 0) { - goog.asserts.assert(goog.object.isEmpty(this.entries_)); - goog.asserts.assert(goog.isNull(this.oldest_)); - goog.asserts.assert(goog.isNull(this.newest_)) - }else { - goog.asserts.assert(goog.object.getCount(this.entries_) == this.count_); - goog.asserts.assert(!goog.isNull(this.oldest_)); - goog.asserts.assert(goog.isNull(this.oldest_.older)); - goog.asserts.assert(!goog.isNull(this.newest_)); - goog.asserts.assert(goog.isNull(this.newest_.newer)); - var i, entry; - var older = null; - i = 0; - for(entry = this.oldest_;!goog.isNull(entry);entry = entry.newer) { - goog.asserts.assert(entry.older === older); - older = entry; - ++i - } - goog.asserts.assert(i == this.count_); - var newer = null; - i = 0; - for(entry = this.newest_;!goog.isNull(entry);entry = entry.older) { - goog.asserts.assert(entry.newer === newer); - newer = entry; - ++i - } - goog.asserts.assert(i == this.count_) - } -}; -ol.structs.LRUCache.prototype.clear = function() { - this.count_ = 0; - this.entries_ = {}; - this.oldest_ = null; - this.newest_ = null -}; -ol.structs.LRUCache.prototype.containsKey = function(key) { - return this.entries_.hasOwnProperty(key) -}; -ol.structs.LRUCache.prototype.forEach = function(f, opt_obj) { - var entry = this.oldest_; - while(!goog.isNull(entry)) { - f.call(opt_obj, entry.value_, entry.key_, this); - entry = entry.newer - } -}; -ol.structs.LRUCache.prototype.get = function(key) { - var entry = this.entries_[key]; - goog.asserts.assert(goog.isDef(entry)); - if(entry === this.newest_) { - return entry.value_ - }else { - if(entry === this.oldest_) { - this.oldest_ = this.oldest_.newer; - this.oldest_.older = null - }else { - entry.newer.older = entry.older; - entry.older.newer = entry.newer - } - } - entry.newer = null; - entry.older = this.newest_; - this.newest_.newer = entry; - this.newest_ = entry; - return entry.value_ -}; -ol.structs.LRUCache.prototype.getCount = function() { - return this.count_ -}; -ol.structs.LRUCache.prototype.getKeys = function() { - var keys = new Array(this.count_); - var i = 0; - var entry; - for(entry = this.newest_;!goog.isNull(entry);entry = entry.older) { - keys[i++] = entry.key_ - } - goog.asserts.assert(i == this.count_); - return keys -}; -ol.structs.LRUCache.prototype.getValues = function() { - var values = new Array(this.count_); - var i = 0; - var entry; - for(entry = this.newest_;!goog.isNull(entry);entry = entry.older) { - values[i++] = entry.value_ - } - goog.asserts.assert(i == this.count_); - return values -}; -ol.structs.LRUCache.prototype.peekLast = function() { - goog.asserts.assert(!goog.isNull(this.oldest_)); - return this.oldest_.value_ -}; -ol.structs.LRUCache.prototype.peekLastKey = function() { - goog.asserts.assert(!goog.isNull(this.oldest_)); - return this.oldest_.key_ -}; -ol.structs.LRUCache.prototype.pop = function() { - goog.asserts.assert(!goog.isNull(this.oldest_)); - goog.asserts.assert(!goog.isNull(this.newest_)); - var entry = this.oldest_; - goog.asserts.assert(entry.key_ in this.entries_); - delete this.entries_[entry.key_]; - if(!goog.isNull(entry.newer)) { - entry.newer.older = null - } - this.oldest_ = entry.newer; - if(goog.isNull(this.oldest_)) { - this.newest_ = null - } - --this.count_; - return entry.value_ -}; -ol.structs.LRUCache.prototype.set = function(key, value) { - goog.asserts.assert(!(key in {})); - goog.asserts.assert(!(key in this.entries_)); - var entry = {key_:key, newer:null, older:this.newest_, value_:value}; - if(goog.isNull(this.newest_)) { - this.oldest_ = entry - }else { - this.newest_.newer = entry - } - this.newest_ = entry; - this.entries_[key] = entry; - ++this.count_ -}; -ol.structs.LRUCacheEntry; goog.provide("ol.webgl"); goog.provide("ol.webgl.WebGLContextEventType"); ol.webgl.CONTEXT_IDS_ = ["webgl", "webgl-experimental", "webkit-3d", "moz-webgl"]; @@ -16226,6 +17815,7 @@ goog.require("goog.events"); goog.require("goog.events.Event"); goog.require("goog.style"); goog.require("goog.webgl"); +goog.require("ol"); goog.require("ol.FrameState"); goog.require("ol.Size"); goog.require("ol.Tile"); @@ -16259,7 +17849,7 @@ ol.renderer.webgl.Map = function(container, map) { this.canvas_ = goog.dom.createElement(goog.dom.TagName.CANVAS); this.canvas_.height = container.clientHeight; this.canvas_.width = container.clientWidth; - this.canvas_.className = "ol-unselectable"; + this.canvas_.className = ol.CSS_CLASS_UNSELECTABLE; goog.dom.insertChildAt(container, this.canvas_, 0); this.renderedVisible_ = true; this.canvasSize_ = new ol.Size(container.clientHeight, container.clientWidth); @@ -16278,12 +17868,6 @@ ol.renderer.webgl.Map = function(container, map) { this.initializeGL_() }; goog.inherits(ol.renderer.webgl.Map, ol.renderer.Map); -ol.renderer.webgl.Map.prototype.addLayer = function(layer) { - goog.base(this, "addLayer", layer); - if(layer.getVisible()) { - this.getMap().render() - } -}; ol.renderer.webgl.Map.prototype.bindTileTexture = function(tile, magFilter, minFilter) { var gl = this.getGL(); var tileKey = tile.getKey(); @@ -16434,12 +18018,6 @@ ol.renderer.webgl.Map.prototype.initializeGL_ = function() { ol.renderer.webgl.Map.prototype.isTileTextureLoaded = function(tile) { return this.textureCache_.containsKey(tile.getKey()) }; -ol.renderer.webgl.Map.prototype.removeLayer = function(layer) { - goog.base(this, "removeLayer", layer); - if(layer.getVisible()) { - this.getMap().render() - } -}; ol.renderer.webgl.Map.prototype.renderFrame = function(frameState) { var gl = this.getGL(); if(goog.isNull(frameState)) { @@ -17354,31 +18932,6 @@ ol.ImageTile.prototype.unlistenImage_ = function() { goog.array.forEach(this.imageListenerKeys_, goog.events.unlistenByKey); this.imageListenerKeys_ = null }; -goog.provide("ol.TileCache"); -goog.require("ol.Tile"); -goog.require("ol.TileRange"); -goog.require("ol.structs.LRUCache"); -ol.DEFAULT_TILE_CACHE_HIGH_WATER_MARK = 512; -ol.TileCache = function(opt_highWaterMark) { - goog.base(this); - this.highWaterMark_ = goog.isDef(opt_highWaterMark) ? opt_highWaterMark : ol.DEFAULT_TILE_CACHE_HIGH_WATER_MARK -}; -goog.inherits(ol.TileCache, ol.structs.LRUCache); -ol.TileCache.prototype.canExpireCache = function() { - return this.getCount() > this.highWaterMark_ -}; -ol.TileCache.prototype.expireCache = function(usedTiles) { - var tile, zKey; - while(this.canExpireCache()) { - tile = this.peekLast(); - zKey = tile.tileCoord.z.toString(); - if(zKey in usedTiles && usedTiles[zKey].contains(tile.tileCoord)) { - break - }else { - this.pop() - } - } -}; goog.provide("ol.TileUrlFunction"); goog.provide("ol.TileUrlFunctionType"); goog.require("goog.array"); @@ -17388,23 +18941,11 @@ goog.require("ol.source.wms"); goog.require("ol.tilegrid.TileGrid"); ol.TileUrlFunctionType; ol.TileUrlFunction.createFromTemplate = function(template) { - var match = /\{(\d)-(\d)\}/.exec(template) || /\{([a-z])-([a-z])\}/.exec(template); - if(match) { - var templates = []; - var startCharCode = match[1].charCodeAt(0); - var stopCharCode = match[2].charCodeAt(0); - var charCode; - for(charCode = startCharCode;charCode <= stopCharCode;++charCode) { - templates.push(template.replace(match[0], String.fromCharCode(charCode))) - } - return ol.TileUrlFunction.createFromTemplates(templates) - }else { - return function(tileCoord) { - if(goog.isNull(tileCoord)) { - return undefined - }else { - return template.replace("{z}", tileCoord.z).replace("{x}", tileCoord.x).replace("{y}", tileCoord.y) - } + return function(tileCoord) { + if(goog.isNull(tileCoord)) { + return undefined + }else { + return template.replace("{z}", tileCoord.z).replace("{x}", tileCoord.x).replace("{y}", tileCoord.y) } } }; @@ -17447,6 +18988,21 @@ ol.TileUrlFunction.withTileCoordTransform = function(transformFn, tileUrlFunctio } } }; +ol.TileUrlFunction.expandUrl = function(url) { + var urls = []; + var match = /\{(\d)-(\d)\}/.exec(url) || /\{([a-z])-([a-z])\}/.exec(url); + if(match) { + var startCharCode = match[1].charCodeAt(0); + var stopCharCode = match[2].charCodeAt(0); + var charCode; + for(charCode = startCharCode;charCode <= stopCharCode;++charCode) { + urls.push(url.replace(match[0], String.fromCharCode(charCode))) + } + }else { + urls.push(url) + } + return urls +}; goog.provide("ol.control.MousePosition"); goog.require("goog.array"); goog.require("goog.dom"); @@ -17541,6 +19097,7 @@ goog.provide("ol.control.ScaleLine"); goog.provide("ol.control.ScaleLineUnits"); goog.require("goog.dom"); goog.require("goog.style"); +goog.require("ol"); goog.require("ol.FrameState"); goog.require("ol.MapEvent"); goog.require("ol.MapEventType"); @@ -17553,7 +19110,7 @@ ol.control.ScaleLineUnits = {DEGREES:"degrees", IMPERIAL:"imperial", NAUTICAL:"n ol.control.ScaleLine = function(opt_options) { var options = opt_options || {}; this.innerElement_ = goog.dom.createDom(goog.dom.TagName.DIV, {"class":"ol-scale-line-inner"}); - this.element_ = goog.dom.createDom(goog.dom.TagName.DIV, {"class":"ol-scale-line ol-unselectable"}, this.innerElement_); + this.element_ = goog.dom.createDom(goog.dom.TagName.DIV, {"class":"ol-scale-line " + ol.CSS_CLASS_UNSELECTABLE}, this.innerElement_); this.minWidth_ = goog.isDef(options.minWidth) ? options.minWidth : 64; this.units_ = goog.isDef(options.units) ? options.units : ol.control.ScaleLineUnits.METRIC; this.listenerKeys_ = null; @@ -17707,9 +19264,553 @@ ol.control.ScaleLine.prototype.updateElement_ = function(frameState) { this.renderedVisible_ = true } }; +goog.provide("goog.events.EventHandler"); +goog.require("goog.Disposable"); +goog.require("goog.array"); +goog.require("goog.events"); +goog.require("goog.events.EventWrapper"); +goog.events.EventHandler = function(opt_handler) { + goog.Disposable.call(this); + this.handler_ = opt_handler; + this.keys_ = [] +}; +goog.inherits(goog.events.EventHandler, goog.Disposable); +goog.events.EventHandler.typeArray_ = []; +goog.events.EventHandler.prototype.listen = function(src, type, opt_fn, opt_capture, opt_handler) { + if(!goog.isArray(type)) { + goog.events.EventHandler.typeArray_[0] = type; + type = goog.events.EventHandler.typeArray_ + } + for(var i = 0;i < type.length;i++) { + var key = goog.events.listen(src, type[i], opt_fn || this, opt_capture || false, opt_handler || this.handler_ || this); + this.keys_.push(key) + } + return this +}; +goog.events.EventHandler.prototype.listenOnce = function(src, type, opt_fn, opt_capture, opt_handler) { + if(goog.isArray(type)) { + for(var i = 0;i < type.length;i++) { + this.listenOnce(src, type[i], opt_fn, opt_capture, opt_handler) + } + }else { + var key = goog.events.listenOnce(src, type, opt_fn || this, opt_capture, opt_handler || this.handler_ || this); + this.keys_.push(key) + } + return this +}; +goog.events.EventHandler.prototype.listenWithWrapper = function(src, wrapper, listener, opt_capt, opt_handler) { + wrapper.listen(src, listener, opt_capt, opt_handler || this.handler_ || this, this); + return this +}; +goog.events.EventHandler.prototype.getListenerCount = function() { + return this.keys_.length +}; +goog.events.EventHandler.prototype.unlisten = function(src, type, opt_fn, opt_capture, opt_handler) { + if(goog.isArray(type)) { + for(var i = 0;i < type.length;i++) { + this.unlisten(src, type[i], opt_fn, opt_capture, opt_handler) + } + }else { + var listener = goog.events.getListener(src, type, opt_fn || this, opt_capture, opt_handler || this.handler_ || this); + if(listener) { + var key = listener.key; + goog.events.unlistenByKey(key); + goog.array.remove(this.keys_, key) + } + } + return this +}; +goog.events.EventHandler.prototype.unlistenWithWrapper = function(src, wrapper, listener, opt_capt, opt_handler) { + wrapper.unlisten(src, listener, opt_capt, opt_handler || this.handler_ || this, this); + return this +}; +goog.events.EventHandler.prototype.removeAll = function() { + goog.array.forEach(this.keys_, goog.events.unlistenByKey); + this.keys_.length = 0 +}; +goog.events.EventHandler.prototype.disposeInternal = function() { + goog.events.EventHandler.superClass_.disposeInternal.call(this); + this.removeAll() +}; +goog.events.EventHandler.prototype.handleEvent = function(e) { + throw Error("EventHandler.handleEvent not implemented"); +}; +goog.provide("goog.style.bidi"); +goog.require("goog.dom"); +goog.require("goog.style"); +goog.require("goog.userAgent"); +goog.style.bidi.getScrollLeft = function(element) { + var isRtl = goog.style.isRightToLeft(element); + if(isRtl && goog.userAgent.GECKO) { + return-element.scrollLeft + }else { + if(isRtl && !(goog.userAgent.IE && goog.userAgent.isVersion("8"))) { + return element.scrollWidth - element.clientWidth - element.scrollLeft + } + } + return element.scrollLeft +}; +goog.style.bidi.getOffsetStart = function(element) { + var offsetLeftForReal = element.offsetLeft; + var bestParent = element.offsetParent; + if(!bestParent && goog.style.getComputedPosition(element) == "fixed") { + bestParent = goog.dom.getOwnerDocument(element).documentElement + } + if(!bestParent) { + return offsetLeftForReal + } + if(goog.userAgent.GECKO) { + var borderWidths = goog.style.getBorderBox(bestParent); + offsetLeftForReal += borderWidths.left + }else { + if(goog.userAgent.isDocumentMode(8)) { + var borderWidths = goog.style.getBorderBox(bestParent); + offsetLeftForReal -= borderWidths.left + } + } + if(goog.style.isRightToLeft(bestParent)) { + var elementRightOffset = offsetLeftForReal + element.offsetWidth; + return bestParent.clientWidth - elementRightOffset + } + return offsetLeftForReal +}; +goog.style.bidi.setScrollOffset = function(element, offsetStart) { + offsetStart = Math.max(offsetStart, 0); + if(!goog.style.isRightToLeft(element)) { + element.scrollLeft = offsetStart + }else { + if(goog.userAgent.GECKO) { + element.scrollLeft = -offsetStart + }else { + if(!(goog.userAgent.IE && goog.userAgent.isVersion("8"))) { + element.scrollLeft = element.scrollWidth - offsetStart - element.clientWidth + }else { + element.scrollLeft = offsetStart + } + } + } +}; +goog.style.bidi.setPosition = function(elem, left, top, isRtl) { + if(!goog.isNull(top)) { + elem.style.top = top + "px" + } + if(isRtl) { + elem.style.right = left + "px"; + elem.style.left = "" + }else { + elem.style.left = left + "px"; + elem.style.right = "" + } +}; +goog.provide("goog.fx.DragEvent"); +goog.provide("goog.fx.Dragger"); +goog.provide("goog.fx.Dragger.EventType"); +goog.require("goog.dom"); +goog.require("goog.events"); +goog.require("goog.events.BrowserEvent.MouseButton"); +goog.require("goog.events.Event"); +goog.require("goog.events.EventHandler"); +goog.require("goog.events.EventTarget"); +goog.require("goog.events.EventType"); +goog.require("goog.math.Coordinate"); +goog.require("goog.math.Rect"); +goog.require("goog.style"); +goog.require("goog.style.bidi"); +goog.require("goog.userAgent"); +goog.fx.Dragger = function(target, opt_handle, opt_limits) { + goog.events.EventTarget.call(this); + this.target = target; + this.handle = opt_handle || target; + this.limits = opt_limits || new goog.math.Rect(NaN, NaN, NaN, NaN); + this.document_ = goog.dom.getOwnerDocument(target); + this.eventHandler_ = new goog.events.EventHandler(this); + goog.events.listen(this.handle, [goog.events.EventType.TOUCHSTART, goog.events.EventType.MOUSEDOWN], this.startDrag, false, this) +}; +goog.inherits(goog.fx.Dragger, goog.events.EventTarget); +goog.fx.Dragger.HAS_SET_CAPTURE_ = goog.userAgent.IE || goog.userAgent.GECKO && goog.userAgent.isVersion("1.9.3"); +goog.fx.Dragger.EventType = {EARLY_CANCEL:"earlycancel", START:"start", BEFOREDRAG:"beforedrag", DRAG:"drag", END:"end"}; +goog.fx.Dragger.prototype.target; +goog.fx.Dragger.prototype.handle; +goog.fx.Dragger.prototype.limits; +goog.fx.Dragger.prototype.rightToLeft_; +goog.fx.Dragger.prototype.clientX = 0; +goog.fx.Dragger.prototype.clientY = 0; +goog.fx.Dragger.prototype.screenX = 0; +goog.fx.Dragger.prototype.screenY = 0; +goog.fx.Dragger.prototype.startX = 0; +goog.fx.Dragger.prototype.startY = 0; +goog.fx.Dragger.prototype.deltaX = 0; +goog.fx.Dragger.prototype.deltaY = 0; +goog.fx.Dragger.prototype.pageScroll; +goog.fx.Dragger.prototype.enabled_ = true; +goog.fx.Dragger.prototype.dragging_ = false; +goog.fx.Dragger.prototype.hysteresisDistanceSquared_ = 0; +goog.fx.Dragger.prototype.mouseDownTime_ = 0; +goog.fx.Dragger.prototype.document_; +goog.fx.Dragger.prototype.eventHandler_; +goog.fx.Dragger.prototype.scrollTarget_; +goog.fx.Dragger.prototype.ieDragStartCancellingOn_ = false; +goog.fx.Dragger.prototype.useRightPositioningForRtl_ = false; +goog.fx.Dragger.prototype.enableRightPositioningForRtl = function(useRightPositioningForRtl) { + this.useRightPositioningForRtl_ = useRightPositioningForRtl +}; +goog.fx.Dragger.prototype.getHandler = function() { + return this.eventHandler_ +}; +goog.fx.Dragger.prototype.setLimits = function(limits) { + this.limits = limits || new goog.math.Rect(NaN, NaN, NaN, NaN) +}; +goog.fx.Dragger.prototype.setHysteresis = function(distance) { + this.hysteresisDistanceSquared_ = Math.pow(distance, 2) +}; +goog.fx.Dragger.prototype.getHysteresis = function() { + return Math.sqrt(this.hysteresisDistanceSquared_) +}; +goog.fx.Dragger.prototype.setScrollTarget = function(scrollTarget) { + this.scrollTarget_ = scrollTarget +}; +goog.fx.Dragger.prototype.setCancelIeDragStart = function(cancelIeDragStart) { + this.ieDragStartCancellingOn_ = cancelIeDragStart +}; +goog.fx.Dragger.prototype.getEnabled = function() { + return this.enabled_ +}; +goog.fx.Dragger.prototype.setEnabled = function(enabled) { + this.enabled_ = enabled +}; +goog.fx.Dragger.prototype.disposeInternal = function() { + goog.fx.Dragger.superClass_.disposeInternal.call(this); + goog.events.unlisten(this.handle, [goog.events.EventType.TOUCHSTART, goog.events.EventType.MOUSEDOWN], this.startDrag, false, this); + this.cleanUpAfterDragging_(); + this.target = null; + this.handle = null; + this.eventHandler_ = null +}; +goog.fx.Dragger.prototype.isRightToLeft_ = function() { + if(!goog.isDef(this.rightToLeft_)) { + this.rightToLeft_ = goog.style.isRightToLeft(this.target) + } + return this.rightToLeft_ +}; +goog.fx.Dragger.prototype.startDrag = function(e) { + var isMouseDown = e.type == goog.events.EventType.MOUSEDOWN; + if(this.enabled_ && !this.dragging_ && (!isMouseDown || e.isMouseActionButton())) { + this.maybeReinitTouchEvent_(e); + if(this.hysteresisDistanceSquared_ == 0) { + if(this.fireDragStart_(e)) { + this.dragging_ = true; + e.preventDefault() + }else { + return + } + }else { + e.preventDefault() + } + this.setupDragHandlers(); + this.clientX = this.startX = e.clientX; + this.clientY = this.startY = e.clientY; + this.screenX = e.screenX; + this.screenY = e.screenY; + this.deltaX = this.useRightPositioningForRtl_ ? goog.style.bidi.getOffsetStart(this.target) : this.target.offsetLeft; + this.deltaY = this.target.offsetTop; + this.pageScroll = goog.dom.getDomHelper(this.document_).getDocumentScroll(); + this.mouseDownTime_ = goog.now() + }else { + this.dispatchEvent(goog.fx.Dragger.EventType.EARLY_CANCEL) + } +}; +goog.fx.Dragger.prototype.setupDragHandlers = function() { + var doc = this.document_; + var docEl = doc.documentElement; + var useCapture = !goog.fx.Dragger.HAS_SET_CAPTURE_; + this.eventHandler_.listen(doc, [goog.events.EventType.TOUCHMOVE, goog.events.EventType.MOUSEMOVE], this.handleMove_, useCapture); + this.eventHandler_.listen(doc, [goog.events.EventType.TOUCHEND, goog.events.EventType.MOUSEUP], this.endDrag, useCapture); + if(goog.fx.Dragger.HAS_SET_CAPTURE_) { + docEl.setCapture(false); + this.eventHandler_.listen(docEl, goog.events.EventType.LOSECAPTURE, this.endDrag) + }else { + this.eventHandler_.listen(goog.dom.getWindow(doc), goog.events.EventType.BLUR, this.endDrag) + } + if(goog.userAgent.IE && this.ieDragStartCancellingOn_) { + this.eventHandler_.listen(doc, goog.events.EventType.DRAGSTART, goog.events.Event.preventDefault) + } + if(this.scrollTarget_) { + this.eventHandler_.listen(this.scrollTarget_, goog.events.EventType.SCROLL, this.onScroll_, useCapture) + } +}; +goog.fx.Dragger.prototype.fireDragStart_ = function(e) { + return this.dispatchEvent(new goog.fx.DragEvent(goog.fx.Dragger.EventType.START, this, e.clientX, e.clientY, e)) +}; +goog.fx.Dragger.prototype.cleanUpAfterDragging_ = function() { + this.eventHandler_.removeAll(); + if(goog.fx.Dragger.HAS_SET_CAPTURE_) { + this.document_.releaseCapture() + } +}; +goog.fx.Dragger.prototype.endDrag = function(e, opt_dragCanceled) { + this.cleanUpAfterDragging_(); + if(this.dragging_) { + this.maybeReinitTouchEvent_(e); + this.dragging_ = false; + var x = this.limitX(this.deltaX); + var y = this.limitY(this.deltaY); + var dragCanceled = opt_dragCanceled || e.type == goog.events.EventType.TOUCHCANCEL; + this.dispatchEvent(new goog.fx.DragEvent(goog.fx.Dragger.EventType.END, this, e.clientX, e.clientY, e, x, y, dragCanceled)) + }else { + this.dispatchEvent(goog.fx.Dragger.EventType.EARLY_CANCEL) + } + if(e.type == goog.events.EventType.TOUCHEND || e.type == goog.events.EventType.TOUCHCANCEL) { + e.preventDefault() + } +}; +goog.fx.Dragger.prototype.endDragCancel = function(e) { + this.endDrag(e, true) +}; +goog.fx.Dragger.prototype.maybeReinitTouchEvent_ = function(e) { + var type = e.type; + if(type == goog.events.EventType.TOUCHSTART || type == goog.events.EventType.TOUCHMOVE) { + e.init(e.getBrowserEvent().targetTouches[0], e.currentTarget) + }else { + if(type == goog.events.EventType.TOUCHEND || type == goog.events.EventType.TOUCHCANCEL) { + e.init(e.getBrowserEvent().changedTouches[0], e.currentTarget) + } + } +}; +goog.fx.Dragger.prototype.handleMove_ = function(e) { + if(this.enabled_) { + this.maybeReinitTouchEvent_(e); + var sign = this.useRightPositioningForRtl_ && this.isRightToLeft_() ? -1 : 1; + var dx = sign * (e.clientX - this.clientX); + var dy = e.clientY - this.clientY; + this.clientX = e.clientX; + this.clientY = e.clientY; + this.screenX = e.screenX; + this.screenY = e.screenY; + if(!this.dragging_) { + var diffX = this.startX - this.clientX; + var diffY = this.startY - this.clientY; + var distance = diffX * diffX + diffY * diffY; + if(distance > this.hysteresisDistanceSquared_) { + if(this.fireDragStart_(e)) { + this.dragging_ = true + }else { + if(!this.isDisposed()) { + this.endDrag(e) + } + return + } + } + } + var pos = this.calculatePosition_(dx, dy); + var x = pos.x; + var y = pos.y; + if(this.dragging_) { + var rv = this.dispatchEvent(new goog.fx.DragEvent(goog.fx.Dragger.EventType.BEFOREDRAG, this, e.clientX, e.clientY, e, x, y)); + if(rv) { + this.doDrag(e, x, y, false); + e.preventDefault() + } + } + } +}; +goog.fx.Dragger.prototype.calculatePosition_ = function(dx, dy) { + var pageScroll = goog.dom.getDomHelper(this.document_).getDocumentScroll(); + dx += pageScroll.x - this.pageScroll.x; + dy += pageScroll.y - this.pageScroll.y; + this.pageScroll = pageScroll; + this.deltaX += dx; + this.deltaY += dy; + var x = this.limitX(this.deltaX); + var y = this.limitY(this.deltaY); + return new goog.math.Coordinate(x, y) +}; +goog.fx.Dragger.prototype.onScroll_ = function(e) { + var pos = this.calculatePosition_(0, 0); + e.clientX = this.clientX; + e.clientY = this.clientY; + this.doDrag(e, pos.x, pos.y, true) +}; +goog.fx.Dragger.prototype.doDrag = function(e, x, y, dragFromScroll) { + this.defaultAction(x, y); + this.dispatchEvent(new goog.fx.DragEvent(goog.fx.Dragger.EventType.DRAG, this, e.clientX, e.clientY, e, x, y)) +}; +goog.fx.Dragger.prototype.limitX = function(x) { + var rect = this.limits; + var left = !isNaN(rect.left) ? rect.left : null; + var width = !isNaN(rect.width) ? rect.width : 0; + var maxX = left != null ? left + width : Infinity; + var minX = left != null ? left : -Infinity; + return Math.min(maxX, Math.max(minX, x)) +}; +goog.fx.Dragger.prototype.limitY = function(y) { + var rect = this.limits; + var top = !isNaN(rect.top) ? rect.top : null; + var height = !isNaN(rect.height) ? rect.height : 0; + var maxY = top != null ? top + height : Infinity; + var minY = top != null ? top : -Infinity; + return Math.min(maxY, Math.max(minY, y)) +}; +goog.fx.Dragger.prototype.defaultAction = function(x, y) { + if(this.useRightPositioningForRtl_ && this.isRightToLeft_()) { + this.target.style.right = x + "px" + }else { + this.target.style.left = x + "px" + } + this.target.style.top = y + "px" +}; +goog.fx.Dragger.prototype.isDragging = function() { + return this.dragging_ +}; +goog.fx.DragEvent = function(type, dragobj, clientX, clientY, browserEvent, opt_actX, opt_actY, opt_dragCanceled) { + goog.events.Event.call(this, type); + this.clientX = clientX; + this.clientY = clientY; + this.browserEvent = browserEvent; + this.left = goog.isDef(opt_actX) ? opt_actX : dragobj.deltaX; + this.top = goog.isDef(opt_actY) ? opt_actY : dragobj.deltaY; + this.dragger = dragobj; + this.dragCanceled = !!opt_dragCanceled +}; +goog.inherits(goog.fx.DragEvent, goog.events.Event); +goog.provide("ol.control.ZoomSlider"); +goog.require("goog.asserts"); +goog.require("goog.dom"); +goog.require("goog.dom.TagName"); +goog.require("goog.events"); +goog.require("goog.fx.Dragger"); +goog.require("goog.style"); +goog.require("ol.MapEventType"); +goog.require("ol.control.Control"); +ol.control.ZoomSlider = function(zoomSliderOptions) { + this.maxResolution_ = goog.isDef(zoomSliderOptions.maxResolution) ? zoomSliderOptions.maxResolution : ol.control.ZoomSlider.DEFAULT_MAX_RESOLUTION; + this.minResolution_ = goog.isDef(zoomSliderOptions.minResolution) ? zoomSliderOptions.minResolution : ol.control.ZoomSlider.DEFAULT_MIN_RESOLUTION; + goog.asserts.assert(this.minResolution_ < this.maxResolution_, "minResolution must be smaller than maxResolution."); + this.range_ = this.maxResolution_ - this.minResolution_; + this.currentResolution_; + this.direction_ = ol.control.ZoomSlider.direction.VERTICAL; + this.mapListenerKeys_ = null; + this.draggerListenerKeys_ = null; + var elem = this.createDom_(); + this.dragger_ = this.createDraggable_(elem); + goog.events.listen(elem, [goog.events.EventType.TOUCHEND, goog.events.EventType.CLICK], this.handleContainerClick_, false, this); + goog.base(this, {element:elem, map:zoomSliderOptions.map}) +}; +goog.inherits(ol.control.ZoomSlider, ol.control.Control); +ol.control.ZoomSlider.direction = {VERTICAL:0, HORIZONTAL:1}; +ol.control.ZoomSlider.CSS_CLASS_CONTAINER = "ol-zoomslider"; +ol.control.ZoomSlider.CSS_CLASS_THUMB = ol.control.ZoomSlider.CSS_CLASS_CONTAINER + "-thumb"; +ol.control.ZoomSlider.DEFAULT_MIN_RESOLUTION = 0.5971642833948135; +ol.control.ZoomSlider.DEFAULT_MAX_RESOLUTION = 156543.0339; +ol.control.ZoomSlider.prototype.setMap = function(map) { + goog.base(this, "setMap", map); + this.currentResolution_ = map.getView().getResolution(); + this.initMapEventListeners_(); + this.initSlider_(); + this.positionThumbForResolution_(this.currentResolution_) +}; +ol.control.ZoomSlider.prototype.initMapEventListeners_ = function() { + if(!goog.isNull(this.mapListenerKeys_)) { + goog.array.forEach(this.mapListenerKeys_, goog.events.unlistenByKey); + this.mapListenerKeys_ = null + } + if(!goog.isNull(this.getMap())) { + this.mapListenerKeys_ = [goog.events.listen(this.getMap(), ol.MapEventType.POSTRENDER, this.handleMapPostRender_, undefined, this)] + } +}; +ol.control.ZoomSlider.prototype.initSlider_ = function() { + var container = this.element, thumb = goog.dom.getFirstElementChild(container), elemSize = goog.style.getContentBoxSize(container), thumbBounds = goog.style.getBounds(thumb), thumbMargins = goog.style.getMarginBox(thumb), thumbBorderBox = goog.style.getBorderBox(thumb), w = elemSize.width - thumbMargins.left - thumbMargins.right - thumbBorderBox.left - thumbBorderBox.right - thumbBounds.width, h = elemSize.height - thumbMargins.top - thumbMargins.bottom - thumbBorderBox.top - thumbBorderBox.bottom - + thumbBounds.height, limits; + if(elemSize.width > elemSize.height) { + this.direction_ = ol.control.ZoomSlider.direction.HORIZONTAL; + limits = new goog.math.Rect(0, 0, w, 0) + }else { + this.direction_ = ol.control.ZoomSlider.direction.VERTICAL; + limits = new goog.math.Rect(0, 0, 0, h) + } + this.dragger_.setLimits(limits) +}; +ol.control.ZoomSlider.prototype.handleMapPostRender_ = function(mapEvtObj) { + var res = mapEvtObj.frameState.view2DState.resolution; + if(res !== this.currentResolution_) { + this.currentResolution_ = res; + this.positionThumbForResolution_(res) + } +}; +ol.control.ZoomSlider.prototype.handleContainerClick_ = function(browserEvent) { +}; +ol.control.ZoomSlider.prototype.positionThumbForResolution_ = function(res) { + var amount = this.amountForResolution_(res), dragger = this.dragger_, thumb = goog.dom.getFirstElementChild(this.element); + if(this.direction_ == ol.control.ZoomSlider.direction.HORIZONTAL) { + var left = dragger.limits.left + dragger.limits.width * amount; + goog.style.setPosition(thumb, left) + }else { + var top = dragger.limits.top + dragger.limits.height * amount; + goog.style.setPosition(thumb, dragger.limits.left, top) + } +}; +ol.control.ZoomSlider.prototype.amountDragged_ = function(e) { + var draggerLimits = this.dragger_.limits, amount = 0; + if(this.direction_ === ol.control.ZoomSlider.direction.HORIZONTAL) { + amount = (e.left - draggerLimits.left) / draggerLimits.width + }else { + amount = (e.top - draggerLimits.top) / draggerLimits.height + } + return amount +}; +ol.control.ZoomSlider.prototype.resolutionForAmount_ = function(amount) { + var saneAmount = goog.math.clamp(amount, 0, 1); + return this.minResolution_ + this.range_ * saneAmount +}; +ol.control.ZoomSlider.prototype.amountForResolution_ = function(res) { + var saneRes = goog.math.clamp(res, this.minResolution_, this.maxResolution_); + return(saneRes - this.minResolution_) / this.range_ +}; +ol.control.ZoomSlider.prototype.handleSliderChange_ = function(e) { + var map = this.getMap(), amountDragged = this.amountDragged_(e), res = this.resolutionForAmount_(amountDragged); + goog.asserts.assert(res >= this.minResolution_ && res <= this.maxResolution_, "calculated new resolution is in allowed bounds."); + if(res !== this.currentResolution_) { + this.currentResolution_ = res; + map.getView().setResolution(res) + } +}; +ol.control.ZoomSlider.prototype.createDraggable_ = function(elem) { + if(!goog.isNull(this.draggerListenerKeys_)) { + goog.array.forEach(this.draggerListenerKeys_, goog.events.unlistenByKey); + this.draggerListenerKeys_ = null + } + var dragger = new goog.fx.Dragger(elem.childNodes[0]); + this.draggerListenerKeys_ = [goog.events.listen(dragger, [goog.fx.Dragger.EventType.DRAG, goog.fx.Dragger.EventType.END], this.handleSliderChange_, undefined, this)]; + return dragger +}; +ol.control.ZoomSlider.prototype.createDom_ = function(opt_elem) { + var elem, sliderCssCls = ol.control.ZoomSlider.CSS_CLASS_CONTAINER + " ol-unselectable", thumbCssCls = ol.control.ZoomSlider.CSS_CLASS_THUMB + " ol-unselectable"; + elem = goog.dom.createDom(goog.dom.TagName.DIV, sliderCssCls, goog.dom.createDom(goog.dom.TagName.DIV, thumbCssCls)); + return elem +}; goog.provide("ol.ellipsoid.WGS84"); goog.require("ol.Ellipsoid"); ol.ellipsoid.WGS84 = new ol.Ellipsoid(6378137, 1 / 298.257223563); +goog.provide("ol.geom.GeometryCollection"); +goog.require("ol.geom.AbstractCollection"); +goog.require("ol.geom.Geometry"); +goog.require("ol.geom.GeometryType"); +ol.geom.GeometryCollection = function(geometries) { + goog.base(this); + this.components = geometries; + var dimension = 0; + for(var i = 0, ii = geometries.length;i < ii;++i) { + if(goog.isDef(dimension)) { + dimension = geometries[i].dimension + }else { + goog.asserts.assert(dimension == geometries[i].dimension) + } + } + this.dimension = dimension +}; +goog.inherits(ol.geom.GeometryCollection, ol.geom.AbstractCollection); +ol.geom.GeometryCollection.prototype.getType = function() { + return ol.geom.GeometryType.GEOMETRYCOLLECTION +}; goog.provide("ol.interaction.DragRotateAndZoom"); goog.require("goog.math.Vec2"); goog.require("ol.View2D"); @@ -17776,10 +19877,164 @@ ol.interaction.Keyboard.prototype.handleMapBrowserEvent = function(mapBrowserEve } } }; +goog.provide("ol.parser.DomFeatureParser"); +goog.provide("ol.parser.ObjectFeatureParser"); +goog.provide("ol.parser.ReadFeaturesOptions"); +goog.provide("ol.parser.StringFeatureParser"); +goog.require("ol.Feature"); +ol.parser.DomFeatureParser = function() { +}; +ol.parser.DomFeatureParser.prototype.readFeaturesFromNode = goog.abstractMethod; +ol.parser.ObjectFeatureParser = function() { +}; +ol.parser.ObjectFeatureParser.prototype.readFeaturesFromObject = goog.abstractMethod; +ol.parser.StringFeatureParser = function() { +}; +ol.parser.StringFeatureParser.prototype.readFeaturesFromString = goog.abstractMethod; +ol.parser.ReadFeaturesCallback; +ol.parser.ReadFeaturesOptions; +goog.provide("ol.parser.Parser"); +ol.parser.Parser = function() { +}; +goog.provide("ol.parser.GeoJSON"); +goog.require("ol.Feature"); +goog.require("ol.geom.Geometry"); +goog.require("ol.geom.GeometryType"); +goog.require("ol.geom.LineString"); +goog.require("ol.geom.MultiLineString"); +goog.require("ol.geom.MultiPoint"); +goog.require("ol.geom.MultiPolygon"); +goog.require("ol.geom.Point"); +goog.require("ol.geom.Polygon"); +goog.require("ol.geom.SharedVertices"); +goog.require("ol.parser.Parser"); +goog.require("ol.parser.ReadFeaturesOptions"); +goog.require("ol.parser.StringFeatureParser"); +ol.parser.GeoJSON = function() { +}; +goog.inherits(ol.parser.GeoJSON, ol.parser.Parser); +ol.parser.GeoJSON.prototype.read = function(str) { + var json = JSON.parse(str); + return this.parse_(json) +}; +ol.parser.GeoJSON.prototype.readFeaturesFromString = function(str, opt_options) { + var json = JSON.parse(str); + return this.parseFeatureCollection_(json, opt_options) +}; +ol.parser.GeoJSON.prototype.readFeaturesFromObject = function(object, opt_options) { + return this.parseFeatureCollection_(object, opt_options) +}; +ol.parser.GeoJSON.prototype.parse_ = function(json) { + var result; + switch(json.type) { + case "FeatureCollection": + result = this.parseFeatureCollection_(json); + break; + case "Feature": + result = this.parseFeature_(json); + break; + case "GeometryCollection": + result = this.parseGeometryCollection_(json); + break; + case "Point": + result = this.parsePoint_(json); + break; + case "LineString": + result = this.parseLineString_(json); + break; + case "Polygon": + result = this.parsePolygon_(json); + break; + case "MultiPoint": + result = this.parseMultiPoint_(json); + break; + case "MultiLineString": + result = this.parseMultiLineString_(json); + break; + case "MultiPolygon": + result = this.parseMultiPolygon_(json); + break; + default: + throw new Error("GeoJSON parsing not implemented for type: " + json.type); + } + return result +}; +ol.parser.GeoJSON.prototype.parseFeature_ = function(json, opt_options) { + var geomJson = json.geometry, geometry = null, options = opt_options || {}; + var feature = new ol.Feature(json.properties); + if(geomJson) { + var type = geomJson.type; + var callback = options.callback; + var sharedVertices; + if(callback) { + goog.asserts.assert(type in ol.parser.GeoJSON.GeometryType, "Bad geometry type: " + type); + sharedVertices = callback(feature, ol.parser.GeoJSON.GeometryType[type]) + } + switch(type) { + case "Point": + geometry = this.parsePoint_(geomJson, sharedVertices); + break; + case "LineString": + geometry = this.parseLineString_(geomJson, sharedVertices); + break; + case "Polygon": + geometry = this.parsePolygon_(geomJson, sharedVertices); + break; + case "MultiPoint": + geometry = this.parseMultiPoint_(geomJson, sharedVertices); + break; + case "MultiLineString": + geometry = this.parseMultiLineString_(geomJson, sharedVertices); + break; + case "MultiPolygon": + geometry = this.parseMultiPolygon_(geomJson, sharedVertices); + break; + default: + throw new Error("Bad geometry type: " + type); + } + feature.setGeometry(geometry) + } + return feature +}; +ol.parser.GeoJSON.prototype.parseFeatureCollection_ = function(json, opt_options) { + var features = json.features, len = features.length, result = new Array(len), i; + for(i = 0;i < len;++i) { + result[i] = this.parseFeature_(features[i], opt_options) + } + return result +}; +ol.parser.GeoJSON.prototype.parseGeometryCollection_ = function(json) { + var geometries = json.geometries, len = geometries.length, result = new Array(len), i; + for(i = 0;i < len;++i) { + result[i] = this.parse_(geometries[i]) + } + return result +}; +ol.parser.GeoJSON.prototype.parseLineString_ = function(json, opt_vertices) { + return new ol.geom.LineString(json.coordinates, opt_vertices) +}; +ol.parser.GeoJSON.prototype.parseMultiLineString_ = function(json, opt_vertices) { + return new ol.geom.MultiLineString(json.coordinates, opt_vertices) +}; +ol.parser.GeoJSON.prototype.parseMultiPoint_ = function(json, opt_vertices) { + return new ol.geom.MultiPoint(json.coordinates, opt_vertices) +}; +ol.parser.GeoJSON.prototype.parseMultiPolygon_ = function(json, opt_vertices) { + return new ol.geom.MultiPolygon(json.coordinates, opt_vertices) +}; +ol.parser.GeoJSON.prototype.parsePoint_ = function(json, opt_vertices) { + return new ol.geom.Point(json.coordinates, opt_vertices) +}; +ol.parser.GeoJSON.prototype.parsePolygon_ = function(json, opt_vertices) { + return new ol.geom.Polygon(json.coordinates, opt_vertices) +}; +ol.parser.GeoJSON.GeometryType = {"Point":ol.geom.GeometryType.POINT, "LineString":ol.geom.GeometryType.LINESTRING, "Polygon":ol.geom.GeometryType.POLYGON, "MultiPoint":ol.geom.GeometryType.MULTIPOINT, "MultiLineString":ol.geom.GeometryType.MULTILINESTRING, "MultiPolygon":ol.geom.GeometryType.MULTIPOLYGON, "GeometryCollection":ol.geom.GeometryType.GEOMETRYCOLLECTION}; goog.provide("ol.parser.XML"); +goog.require("ol.parser.Parser"); ol.parser.XML = function() { this.regExes = {trimSpace:/^\s*|\s*$/g, removeSpace:/\s*/g, splitSpace:/\s+/, trimComma:/\s*,\s*/g} }; +goog.inherits(ol.parser.XML, ol.parser.Parser); ol.parser.XML.prototype.readNode = function(node, obj) { if(!obj) { obj = {} @@ -18844,6 +21099,158 @@ ol.parser.ogc.WMTSCapabilities = function(opt_options) { goog.base(this, opt_options) }; goog.inherits(ol.parser.ogc.WMTSCapabilities, ol.parser.ogc.Versioned); +goog.provide("ol.parser.polyline"); +ol.parser.polyline.encodeFlatCoordinates = function(flatPoints, opt_dimension) { + var dimension = opt_dimension || 2; + return ol.parser.polyline.encodeDeltas(flatPoints, dimension) +}; +ol.parser.polyline.decodeFlatCoordinates = function(encoded, opt_dimension) { + var dimension = opt_dimension || 2; + return ol.parser.polyline.decodeDeltas(encoded, dimension) +}; +ol.parser.polyline.encodeDeltas = function(numbers, dimension, opt_factor) { + var factor = opt_factor || 1E5; + var d; + var lastNumbers = new Array(dimension); + for(d = 0;d < dimension;++d) { + lastNumbers[d] = 0 + } + var numbersLength = numbers.length; + for(var i = 0;i < numbersLength;) { + for(d = 0;d < dimension;++d, ++i) { + var num = numbers[i]; + var delta = num - lastNumbers[d]; + lastNumbers[d] = num; + numbers[i] = delta + } + } + return ol.parser.polyline.encodeFloats(numbers, factor) +}; +ol.parser.polyline.decodeDeltas = function(encoded, dimension, opt_factor) { + var factor = opt_factor || 1E5; + var d; + var lastNumbers = new Array(dimension); + for(d = 0;d < dimension;++d) { + lastNumbers[d] = 0 + } + var numbers = ol.parser.polyline.decodeFloats(encoded, factor); + var numbersLength = numbers.length; + for(var i = 0;i < numbersLength;) { + for(d = 0;d < dimension;++d, ++i) { + lastNumbers[d] += numbers[i]; + numbers[i] = lastNumbers[d] + } + } + return numbers +}; +ol.parser.polyline.encodeFloats = function(numbers, opt_factor) { + var factor = opt_factor || 1E5; + var numbersLength = numbers.length; + for(var i = 0;i < numbersLength;++i) { + numbers[i] = Math.round(numbers[i] * factor) + } + return ol.parser.polyline.encodeSignedIntegers(numbers) +}; +ol.parser.polyline.decodeFloats = function(encoded, opt_factor) { + var factor = opt_factor || 1E5; + var numbers = ol.parser.polyline.decodeSignedIntegers(encoded); + var numbersLength = numbers.length; + for(var i = 0;i < numbersLength;++i) { + numbers[i] /= factor + } + return numbers +}; +ol.parser.polyline.encodeSignedIntegers = function(numbers) { + var numbersLength = numbers.length; + for(var i = 0;i < numbersLength;++i) { + var num = numbers[i]; + var signedNum = num << 1; + if(num < 0) { + signedNum = ~signedNum + } + numbers[i] = signedNum + } + return ol.parser.polyline.encodeUnsignedIntegers(numbers) +}; +ol.parser.polyline.decodeSignedIntegers = function(encoded) { + var numbers = ol.parser.polyline.decodeUnsignedIntegers(encoded); + var numbersLength = numbers.length; + for(var i = 0;i < numbersLength;++i) { + var num = numbers[i]; + numbers[i] = num & 1 ? ~(num >> 1) : num >> 1 + } + return numbers +}; +ol.parser.polyline.encodeUnsignedIntegers = function(numbers) { + var encoded = ""; + var numbersLength = numbers.length; + for(var i = 0;i < numbersLength;++i) { + encoded += ol.parser.polyline.encodeUnsignedInteger(numbers[i]) + } + return encoded +}; +ol.parser.polyline.decodeUnsignedIntegers = function(encoded) { + var numbers = []; + var current = 0; + var shift = 0; + var encodedLength = encoded.length; + for(var i = 0;i < encodedLength;++i) { + var b = encoded.charCodeAt(i) - 63; + current |= (b & 31) << shift; + if(b < 32) { + numbers.push(current); + current = 0; + shift = 0 + }else { + shift += 5 + } + } + return numbers +}; +ol.parser.polyline.encodeFloat = function(num, opt_factor) { + num = Math.round(num * (opt_factor || 1E5)); + return ol.parser.polyline.encodeSignedInteger(num) +}; +ol.parser.polyline.decodeFloat = function(encoded, opt_factor) { + var result = ol.parser.polyline.decodeSignedInteger(encoded); + return result / (opt_factor || 1E5) +}; +ol.parser.polyline.encodeSignedInteger = function(num) { + var signedNum = num << 1; + if(num < 0) { + signedNum = ~signedNum + } + return ol.parser.polyline.encodeUnsignedInteger(signedNum) +}; +ol.parser.polyline.decodeSignedInteger = function(encoded) { + var result = ol.parser.polyline.decodeUnsignedInteger(encoded); + return result & 1 ? ~(result >> 1) : result >> 1 +}; +ol.parser.polyline.encodeUnsignedInteger = function(num) { + var value, encoded = ""; + while(num >= 32) { + value = (32 | num & 31) + 63; + encoded += String.fromCharCode(value); + num >>= 5 + } + value = num + 63; + encoded += String.fromCharCode(value); + return encoded +}; +ol.parser.polyline.decodeUnsignedInteger = function(encoded) { + var result = 0; + var shift = 0; + var encodedLength = encoded.length; + for(var i = 0;i < encodedLength;++i) { + var b = encoded.charCodeAt(i) - 63; + result |= (b & 31) << shift; + if(b < 32) { + break + } + shift += 5 + } + return result +}; /* Portions of this code are from MochiKit, received by The Closure Authors under the MIT license. All other code is Copyright @@ -19315,10 +21722,9 @@ ol.source.ImageTileSource.prototype.getTile = function(tileCoord, tileGrid, proj return tile } }; -ol.source.ImageTileSource.prototype.useTile = function(tileCoord) { - var key = tileCoord.toString(); - if(this.tileCache_.containsKey(key)) { - this.tileCache_.get(key) +ol.source.ImageTileSource.prototype.useTile = function(tileCoordKey) { + if(this.tileCache_.containsKey(tileCoordKey)) { + this.tileCache_.get(tileCoordKey) } }; goog.provide("ol.tilegrid.XYZ"); @@ -19525,7 +21931,7 @@ ol.source.XYZ = function(xyzOptions) { tileUrlFunction = ol.TileUrlFunction.createFromTemplates(xyzOptions.urls) }else { if(goog.isDef(xyzOptions.url)) { - tileUrlFunction = ol.TileUrlFunction.createFromTemplate(xyzOptions.url) + tileUrlFunction = ol.TileUrlFunction.createFromTemplates(ol.TileUrlFunction.expandUrl(xyzOptions.url)) } } } @@ -19598,7 +22004,7 @@ ol.source.SingleImageWMS = function(options) { var imageUrlFunction = goog.isDef(options.url) ? ol.ImageUrlFunction.createWMSParams(options.url, options.params) : ol.ImageUrlFunction.nullImageUrlFunction; goog.base(this, {attributions:options.attributions, crossOrigin:options.crossOrigin, extent:options.extent, projection:options.projection, resolutions:options.resolutions, imageUrlFunction:imageUrlFunction}); this.image_ = null; - this.ratio_ = 1.5 + this.ratio_ = goog.isDef(options.ratio) ? options.ratio : 1.5 }; goog.inherits(ol.source.SingleImageWMS, ol.source.ImageSource); ol.source.SingleImageWMS.prototype.getImage = function(extent, resolution, projection) { @@ -19750,18 +22156,16 @@ ol.source.TiledWMS = function(tiledWMSOptions) { if(goog.isDef(tiledWMSOptions.tileGrid)) { tileGrid = tiledWMSOptions.tileGrid } - var tileUrlFunction; - if(tiledWMSOptions.urls) { - var tileUrlFunctions = goog.array.map(tiledWMSOptions.urls, function(url) { + var tileUrlFunction = ol.TileUrlFunction.nullTileUrlFunction; + var urls = tiledWMSOptions.urls; + if(!goog.isDef(urls) && goog.isDef(tiledWMSOptions.url)) { + urls = ol.TileUrlFunction.expandUrl(tiledWMSOptions.url) + } + if(goog.isDef(urls)) { + var tileUrlFunctions = goog.array.map(urls, function(url) { return ol.TileUrlFunction.createWMSParams(url, tiledWMSOptions.params) }); tileUrlFunction = ol.TileUrlFunction.createFromTileUrlFunctions(tileUrlFunctions) - }else { - if(tiledWMSOptions.url) { - tileUrlFunction = ol.TileUrlFunction.createWMSParams(tiledWMSOptions.url, tiledWMSOptions.params) - }else { - tileUrlFunction = ol.TileUrlFunction.nullTileUrlFunction - } } var transparent = goog.isDef(tiledWMSOptions.params["TRANSPARENT"]) ? tiledWMSOptions.params["TRANSPARENT"] : true; var extent = tiledWMSOptions.extent; @@ -19821,8 +22225,6 @@ ol.tilegrid.WMTS.createFromCapabilitiesMatrixSet = function(matrixSet) { goog.provide("ol.source.WMTS"); goog.provide("ol.source.WMTSRequestEncoding"); goog.require("ol.Attribution"); -goog.require("ol.Extent"); -goog.require("ol.Projection"); goog.require("ol.TileCoord"); goog.require("ol.TileUrlFunction"); goog.require("ol.TileUrlFunctionType"); @@ -19843,23 +22245,6 @@ ol.source.WMTS = function(wmtsOptions) { kvpParams = {"Service":"WMTS", "Request":"GetTile", "Version":version, "Format":format, "TileMatrix":"{TileMatrix}", "TileRow":"{TileRow}", "TileCol":"{TileCol}"}; goog.object.extend(kvpParams, context) } - var urls = wmtsOptions.urls; - if(!goog.isDef(urls)) { - urls = []; - var url = wmtsOptions.url; - goog.asserts.assert(goog.isDef(url)); - var match = /\{(\d)-(\d)\}/.exec(url) || /\{([a-z])-([a-z])\}/.exec(url); - if(match) { - var startCharCode = match[1].charCodeAt(0); - var stopCharCode = match[2].charCodeAt(0); - var charCode; - for(charCode = startCharCode;charCode <= stopCharCode;++charCode) { - urls.push(url.replace(match[0], String.fromCharCode(charCode))) - } - }else { - urls.push(url) - } - } function createFromWMTSTemplate(template) { return function(tileCoord) { if(goog.isNull(tileCoord)) { @@ -19877,12 +22262,19 @@ ol.source.WMTS = function(wmtsOptions) { } } } - var tileUrlFunction = ol.TileUrlFunction.createFromTileUrlFunctions(goog.array.map(urls, function(url) { - if(goog.isDef(kvpParams)) { - url = goog.uri.utils.appendParamsFromMap(url, kvpParams) - } - return createFromWMTSTemplate(url) - })); + var tileUrlFunction = ol.TileUrlFunction.nullTileUrlFunction; + var urls = wmtsOptions.urls; + if(!goog.isDef(urls) && goog.isDef(wmtsOptions.url)) { + urls = ol.TileUrlFunction.expandUrl(wmtsOptions.url) + } + if(goog.isDef(urls)) { + tileUrlFunction = ol.TileUrlFunction.createFromTileUrlFunctions(goog.array.map(urls, function(url) { + if(goog.isDef(kvpParams)) { + url = goog.uri.utils.appendParamsFromMap(url, kvpParams) + } + return createFromWMTSTemplate(url) + })) + } tileUrlFunction = ol.TileUrlFunction.withTileCoordTransform(function(tileCoord, tileGrid, projection) { if(tileGrid.getResolutions().length <= tileCoord.z) { return null @@ -19980,7 +22372,10 @@ goog.require("ol.Constraints"); goog.require("ol.Coordinate"); goog.require("ol.CoordinateFormatType"); goog.require("ol.Ellipsoid"); +goog.require("ol.Expression"); +goog.require("ol.ExpressionLiteral"); goog.require("ol.Extent"); +goog.require("ol.Feature"); goog.require("ol.FrameState"); goog.require("ol.Geolocation"); goog.require("ol.GeolocationProperty"); @@ -20044,11 +22439,32 @@ goog.require("ol.control.MousePosition"); goog.require("ol.control.ScaleLine"); goog.require("ol.control.ScaleLineUnits"); goog.require("ol.control.Zoom"); +goog.require("ol.control.ZoomSlider"); goog.require("ol.control.defaults"); goog.require("ol.dom"); goog.require("ol.dom.BrowserFeature"); goog.require("ol.easing"); goog.require("ol.ellipsoid.WGS84"); +goog.require("ol.filter.Extent"); +goog.require("ol.filter.Filter"); +goog.require("ol.filter.Geometry"); +goog.require("ol.filter.GeometryType"); +goog.require("ol.filter.Logical"); +goog.require("ol.filter.LogicalOperator"); +goog.require("ol.geom.AbstractCollection"); +goog.require("ol.geom.Geometry"); +goog.require("ol.geom.GeometryCollection"); +goog.require("ol.geom.GeometryType"); +goog.require("ol.geom.LineString"); +goog.require("ol.geom.LinearRing"); +goog.require("ol.geom.MultiLineString"); +goog.require("ol.geom.MultiPoint"); +goog.require("ol.geom.MultiPolygon"); +goog.require("ol.geom.Point"); +goog.require("ol.geom.Polygon"); +goog.require("ol.geom.SharedVertices"); +goog.require("ol.geom.Vertex"); +goog.require("ol.geom.VertexArray"); goog.require("ol.interaction.ConditionType"); goog.require("ol.interaction.DblClickZoom"); goog.require("ol.interaction.Drag"); @@ -20072,7 +22488,14 @@ goog.require("ol.layer.Layer"); goog.require("ol.layer.LayerProperty"); goog.require("ol.layer.LayerState"); goog.require("ol.layer.TileLayer"); +goog.require("ol.layer.Vector"); goog.require("ol.math"); +goog.require("ol.parser.DomFeatureParser"); +goog.require("ol.parser.GeoJSON"); +goog.require("ol.parser.ObjectFeatureParser"); +goog.require("ol.parser.Parser"); +goog.require("ol.parser.ReadFeaturesOptions"); +goog.require("ol.parser.StringFeatureParser"); goog.require("ol.parser.XML"); goog.require("ol.parser.ogc.ExceptionReport"); goog.require("ol.parser.ogc.OWSCommon_v1"); @@ -20088,6 +22511,7 @@ goog.require("ol.parser.ogc.WMSCapabilities_v1_1_1_WMSC"); goog.require("ol.parser.ogc.WMSCapabilities_v1_3_0"); goog.require("ol.parser.ogc.WMTSCapabilities"); goog.require("ol.parser.ogc.WMTSCapabilities_v1_0_0"); +goog.require("ol.parser.polyline"); goog.require("ol.projection"); goog.require("ol.projection.EPSG3857"); goog.require("ol.projection.EPSG4326"); @@ -20099,6 +22523,8 @@ goog.require("ol.renderer.canvas.Layer"); goog.require("ol.renderer.canvas.Map"); goog.require("ol.renderer.canvas.SUPPORTED"); goog.require("ol.renderer.canvas.TileLayer"); +goog.require("ol.renderer.canvas.VectorLayer"); +goog.require("ol.renderer.canvas.VectorRenderer"); goog.require("ol.renderer.dom.ImageLayer"); goog.require("ol.renderer.dom.Layer"); goog.require("ol.renderer.dom.Map"); @@ -20131,6 +22557,7 @@ goog.require("ol.source.TileJSON"); goog.require("ol.source.TileSource"); goog.require("ol.source.TileSourceOptions"); goog.require("ol.source.TiledWMS"); +goog.require("ol.source.Vector"); goog.require("ol.source.WMTS"); goog.require("ol.source.WMTSRequestEncoding"); goog.require("ol.source.XYZ"); @@ -20139,6 +22566,23 @@ goog.require("ol.source.wms"); goog.require("ol.sphere.NORMAL"); goog.require("ol.sphere.WGS84"); goog.require("ol.structs.LRUCache"); +goog.require("ol.structs.RTree"); +goog.require("ol.style.Icon"); +goog.require("ol.style.IconLiteral"); +goog.require("ol.style.IconType"); +goog.require("ol.style.Line"); +goog.require("ol.style.LineLiteral"); +goog.require("ol.style.Point"); +goog.require("ol.style.PointLiteral"); +goog.require("ol.style.Polygon"); +goog.require("ol.style.PolygonLiteral"); +goog.require("ol.style.Rule"); +goog.require("ol.style.Shape"); +goog.require("ol.style.ShapeLiteral"); +goog.require("ol.style.ShapeType"); +goog.require("ol.style.Style"); +goog.require("ol.style.Symbolizer"); +goog.require("ol.style.SymbolizerLiteral"); goog.require("ol.tilegrid.TileGrid"); goog.require("ol.tilegrid.WMTS"); goog.require("ol.tilegrid.XYZ"); @@ -20160,6 +22604,7 @@ goog.provide("ol.control.DefaultsOptionsType"); goog.provide("ol.control.MousePositionOptionsType"); goog.provide("ol.control.ScaleLineOptionsType"); goog.provide("ol.control.ZoomOptionsType"); +goog.provide("ol.control.ZoomSliderOptionsType"); goog.provide("ol.interaction.DefaultOptionsType"); goog.provide("ol.interaction.KeyboardPanOptionsType"); goog.provide("ol.interaction.KeyboardZoomOptionsType"); @@ -20167,11 +22612,18 @@ goog.provide("ol.layer.LayerOptionsType"); goog.provide("ol.source.BingMapsOptionsType"); goog.provide("ol.source.DebugTileSourceOptionsType"); goog.provide("ol.source.SingleImageWMSOptionsType"); +goog.provide("ol.source.SourceOptionsType"); goog.provide("ol.source.StamenOptionsType"); goog.provide("ol.source.StaticImageOptionsType"); goog.provide("ol.source.TileJSONOptionsType"); goog.provide("ol.source.TiledWMSOptionsType"); goog.provide("ol.source.WMTSOptionsType"); +goog.provide("ol.style.IconOptionsType"); +goog.provide("ol.style.LineOptionsType"); +goog.provide("ol.style.PolygonOptionsType"); +goog.provide("ol.style.RuleOptionsType"); +goog.provide("ol.style.ShapeOptionsType"); +goog.provide("ol.style.StyleOptionsType"); goog.provide("ol.tilegrid.TileGridOptionsType"); goog.provide("ol.tilegrid.WMTSOptionsType"); goog.provide("ol.tilegrid.XYZOptionsType"); @@ -20189,6 +22641,7 @@ ol.control.DefaultsOptions; ol.control.MousePositionOptions; ol.control.ScaleLineOptions; ol.control.ZoomOptions; +ol.control.ZoomSliderOptions; ol.interaction.DefaultOptions; ol.interaction.KeyboardPanOptions; ol.interaction.KeyboardZoomOptions; @@ -20196,11 +22649,18 @@ ol.layer.LayerOptions; ol.source.BingMapsOptions; ol.source.DebugTileSourceOptions; ol.source.SingleImageWMSOptions; +ol.source.SourceOptions; ol.source.StamenOptions; ol.source.StaticImageOptions; ol.source.TileJSONOptions; ol.source.TiledWMSOptions; ol.source.WMTSOptions; +ol.style.IconOptions; +ol.style.LineOptions; +ol.style.PolygonOptions; +ol.style.RuleOptions; +ol.style.ShapeOptions; +ol.style.StyleOptions; ol.tilegrid.TileGridOptions; ol.tilegrid.WMTSOptions; ol.tilegrid.XYZOptions; diff --git a/master/build/ol.css b/master/build/ol.css index 03b93113a1..05046b4231 100644 --- a/master/build/ol.css +++ b/master/build/ol.css @@ -1 +1 @@ -.ol-attribution{position:absolute;font-size:10px;text-align:right;color:#eee;bottom:0;right:0;background:rgba(0,60,136,0.3);font-family:'Lucida Grande',Verdana,Geneva,Lucida,Arial,Helvetica,sans-serif;padding:2px 4px}.ol-attribution a{color:white;text-decoration:none}.ol-attribution li{display:inline;list-style:none}.ol-attribution li:not(:last-child):after{content:"\2003"}.ol-dragbox{position:absolute;border:2px solid red}.ol-renderer-webgl-canvas{width:100%;height:100%}.ol-scale-line{background:rgba(0,60,136,0.3);border-radius:4px;bottom:8px;left:8px;padding:2px;position:absolute}.ol-scale-line-inner{border:1px solid #eee;border-top:none;color:#eee;font-size:10px;font-family:'Lucida Grande',Verdana,Geneva,Lucida,Arial,Helvetica,sans-serif;text-align:center;margin:1px;padding:0 2px}.ol-viewport .ol-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.ol-zoom{position:absolute;top:8px;left:8px;background:rgba(255,255,255,0.4);border-radius:4px;padding:2px}.ol-zoom a{display:block;margin:1px;padding:0;color:white;font-size:18px;font-family:'Lucida Grande',Verdana,Geneva,Lucida,Arial,Helvetica,sans-serif;font-weight:bold;text-decoration:none;text-align:center;height:22px;width:22px;line-height:19px;background:rgba(0,60,136,0.5)}.ol-zoom a:hover{background:rgba(0,60,136,0.7)}.ol-zoom-in{border-radius:2px 2px 0 0}.ol-zoom-in:before{content:"+"}.ol-zoom-out{border-radius:0 0 2px 2px}.ol-zoom-out:before{content:"\2212"} \ No newline at end of file +.ol-attribution{position:absolute;font-size:10px;text-align:right;color:#eee;bottom:0;right:0;background:rgba(0,60,136,0.3);font-family:'Lucida Grande',Verdana,Geneva,Lucida,Arial,Helvetica,sans-serif;padding:2px 4px}.ol-attribution a{color:white;text-decoration:none}.ol-attribution li{display:inline;list-style:none}.ol-attribution li:not(:last-child):after{content:"\2003"}.ol-dragbox{position:absolute;border:2px solid red}.ol-renderer-webgl-canvas{width:100%;height:100%}.ol-scale-line{background:rgba(0,60,136,0.3);border-radius:4px;bottom:8px;left:8px;padding:2px;position:absolute}.ol-scale-line-inner{border:1px solid #eee;border-top:none;color:#eee;font-size:10px;font-family:'Lucida Grande',Verdana,Geneva,Lucida,Arial,Helvetica,sans-serif;text-align:center;margin:1px;padding:0 2px}.ol-viewport .ol-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.ol-zoom{position:absolute;top:8px;left:8px;background:rgba(255,255,255,0.4);border-radius:4px;padding:2px}.ol-zoom a{display:block;margin:1px;padding:0;color:white;font-size:18px;font-family:'Lucida Grande',Verdana,Geneva,Lucida,Arial,Helvetica,sans-serif;font-weight:bold;text-decoration:none;text-align:center;height:22px;width:22px;line-height:19px;background:rgba(0,60,136,0.5)}.ol-zoom a:hover{background:rgba(0,60,136,0.7)}.ol-zoom-in{border-radius:2px 2px 0 0}.ol-zoom-in:before{content:"+"}.ol-zoom-out{border-radius:0 0 2px 2px}.ol-zoom-out:before{content:"\2212"}.ol-zoomslider{position:absolute;top:67px;left:8px;background:rgba(255,255,255,0.4);border-radius:4px;width:28px;height:200px;outline:none;overflow:hidden;padding:0;margin:0}.ol-zoomslider-thumb{position:absolute;display:block;padding:0;margin:2px;background:rgba(0,60,136,0.5);border-radius:2px;outline:none;overflow:hidden;height:20px;width:24px} \ No newline at end of file diff --git a/master/build/ol.js b/master/build/ol.js index 22cb5a1e2f..75ebd3c8d1 100644 --- a/master/build/ol.js +++ b/master/build/ol.js @@ -1,250 +1,296 @@ -(function(){var h=void 0,j=!0,k=null,l=!1;function aa(){return function(a){return a}}function n(a){return function(){return this[a]}}var p,v=this;function ba(){}function ca(a){a.cb=function(){return a.zc?a.zc:a.zc=new a}} -function da(a){var b=typeof a;if("object"==b)if(a){if(a instanceof Array)return"array";if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if("[object Window]"==c)return"object";if("[object Array]"==c||"number"==typeof a.length&&"undefined"!=typeof a.splice&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("splice"))return"array";if("[object Function]"==c||"undefined"!=typeof a.call&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("call"))return"function"}else return"null"; -else if("function"==b&&"undefined"==typeof a.call)return"object";return b}function z(a){return a!==h}function ea(a){return"array"==da(a)}function fa(a){var b=da(a);return"array"==b||"object"==b&&"number"==typeof a.length}function ga(a){return"string"==typeof a}function ha(a){return"function"==da(a)}function ia(a){var b=typeof a;return"object"==b&&a!=k||"function"==b}function A(a){return a[ja]||(a[ja]=++ka)}var ja="closure_uid_"+Math.floor(2147483648*Math.random()).toString(36),ka=0; -function la(a,b,c){return a.call.apply(a.bind,arguments)}function ma(a,b,c){if(!a)throw Error();if(2")&&(a=a.replace(wa,">"));-1!=a.indexOf('"')&&(a=a.replace(za,"""));return a}var ua=/&/g,va=//g,za=/\"/g,ta=/[&<>\"]/;var Aa=Array.prototype,Ba=Aa.indexOf?function(a,b,c){return Aa.indexOf.call(a,b,c)}:function(a,b,c){c=c==k?0:0>c?Math.max(0,a.length+c):c;if(ga(a))return!ga(b)||1!=b.length?-1:a.indexOf(b,c);for(;c=arguments.length?Aa.slice.call(a,b):Aa.slice.call(a,b,c)}function Ma(a){Aa.sort.call(a,Na)}function Na(a,b){return a>b?1:a2*this.o&&$a(this),j):l};function $a(a){if(a.o!=a.a.length){for(var b=0,c=0;bparseFloat(ub)){tb=String(yb);break a}}tb=ub}var Ab={}; -function Bb(a){var b;if(!(b=Ab[a])){b=0;for(var c=String(tb).replace(/^[\s\xa0]+|[\s\xa0]+$/g,"").split("."),d=String(a).replace(/^[\s\xa0]+|[\s\xa0]+$/g,"").split("."),e=Math.max(c.length,d.length),f=0;0==b&&f(0==r[1].length?0:parseInt(r[1],10))?1:0)||((0==t[2].length)<(0==r[2].length)?-1:(0==t[2].length)>(0==r[2].length)?1:0)||(t[2]r[2]?1:0)}while(0==b)}b=Ab[a]=0<=b}return b}var Cb={};function Db(a){return Cb[a]||(Cb[a]=G&&!!document.documentMode&&document.documentMode>=a)};var Eb,Fb=!G||Db(9);!ob&&!G||G&&Db(9)||ob&&Bb("1.9.1");G&&Bb("9");function Gb(a,b){var c;c=a.className;c=ga(c)&&c.match(/\S+/g)||[];for(var d=La(arguments,1),e=c.length+d.length,f=c,g=0;gc*b?c+b:c};function Jb(a,b){this.x=z(a)?a:0;this.y=z(b)?b:0}Jb.prototype.T=function(){return new Jb(this.x,this.y)};function Kb(a,b){this.width=a;this.height=b}p=Kb.prototype;p.T=function(){return new Kb(this.width,this.height)};p.Pa=function(){return!(this.width*this.height)};p.ceil=function(){this.width=Math.ceil(this.width);this.height=Math.ceil(this.height);return this};p.floor=function(){this.width=Math.floor(this.width);this.height=Math.floor(this.height);return this};p.round=function(){this.width=Math.round(this.width);this.height=Math.round(this.height);return this};function Lb(a){return a?new Mb(Nb(a)):Eb||(Eb=new Mb)}function Ob(a,b){Oa(b,function(b,d){"style"==d?a.style.cssText=b:"class"==d?a.className=b:"for"==d?a.htmlFor=b:d in Pb?a.setAttribute(Pb[d],b):0==d.lastIndexOf("aria-",0)||0==d.lastIndexOf("data-",0)?a.setAttribute(d,b):a[d]=b})}var Pb={cellpadding:"cellPadding",cellspacing:"cellSpacing",colspan:"colSpan",frameborder:"frameBorder",height:"height",maxlength:"maxLength",role:"role",rowspan:"rowSpan",type:"type",usemap:"useMap",valign:"vAlign",width:"width"}; -function Qb(a){a=a.document.documentElement;return new Kb(a.clientWidth,a.clientHeight)}function Rb(a,b,c){var d=arguments,e=document,f=d[0],g=d[1];if(!Fb&&g&&(g.name||g.type)){f=["<",f];g.name&&f.push(' name="',sa(g.name),'"');if(g.type){f.push(' type="',sa(g.type),'"');var i={};Wa(i,g);delete i.type;g=i}f.push(">");f=f.join("")}f=e.createElement(f);g&&(ga(g)?f.className=g:ea(g)?Gb.apply(k,[f].concat(g)):Ob(f,g));2=a.keyCode)a.keyCode=-1}catch(b){}};p.pd=n("L");function oc(){}var pc=0;oc.prototype.key=0;oc.prototype.Ea=l;oc.prototype.a=l;oc.prototype.handleEvent=function(a){return this.b?this.Ra.call(this.Ub||this.src,a):this.Ra.handleEvent.call(this.Ra,a)};var qc={},rc={},sc={},tc={}; -function H(a,b,c,d,e){if(b){if(ea(b)){for(var f=0;f")&&(a=a.replace(Ba,">"));-1!=a.indexOf('"')&&(a=a.replace(Ca,"""));return a}var ya=/&/g,za=//g,Ca=/\"/g,xa=/[&<>\"]/;var Da=Array.prototype,Fa=Da.indexOf?function(a,b,c){return Da.indexOf.call(a,b,c)}:function(a,b,c){c=c==k?0:0>c?Math.max(0,a.length+c):c;if(ja(a))return!ja(b)||1!=b.length?-1:a.indexOf(b,c);for(;c=arguments.length?Da.slice.call(a,b):Da.slice.call(a,b,c)}function Sa(a){Da.sort.call(a,Ta)}function Ta(a,b){return a>b?1:a2*this.o&&db(this),i):l};function db(a){if(a.o!=a.a.length){for(var b=0,c=0;bparseFloat(Eb)){Bb=String(Ib);break a}}Bb=Eb}var Kb={}; +function Lb(a){var b;if(!(b=Kb[a])){b=0;for(var c=String(Bb).replace(/^[\s\xa0]+|[\s\xa0]+$/g,"").split("."),d=String(a).replace(/^[\s\xa0]+|[\s\xa0]+$/g,"").split("."),e=Math.max(c.length,d.length),f=0;0==b&&f(0==s[1].length?0:parseInt(s[1],10))?1:0)||((0==v[2].length)<(0==s[2].length)?-1:(0==v[2].length)>(0==s[2].length)?1:0)||(v[2]s[2]?1:0)}while(0==b)}b=Kb[a]=0<=b}return b}var Mb={};function Nb(a){return Mb[a]||(Mb[a]=G&&!!document.documentMode&&document.documentMode>=a)};var Ob,Pb=!G||Nb(9);!ub&&!G||G&&Nb(9)||ub&&Lb("1.9.1");G&&Lb("9");function Qb(a,b){var c;c=a.className;c=ja(c)&&c.match(/\S+/g)||[];for(var d=Ra(arguments,1),e=c.length+d.length,f=c,h=0;hc*b?c+b:c};function Tb(a,b){this.x=x(a)?a:0;this.y=x(b)?b:0}Tb.prototype.V=function(){return new Tb(this.x,this.y)};function Ub(a,b){this.width=a;this.height=b}p=Ub.prototype;p.V=function(){return new Ub(this.width,this.height)};p.Wa=function(){return!(this.width*this.height)};p.ceil=function(){this.width=Math.ceil(this.width);this.height=Math.ceil(this.height);return this};p.floor=function(){this.width=Math.floor(this.width);this.height=Math.floor(this.height);return this};p.round=function(){this.width=Math.round(this.width);this.height=Math.round(this.height);return this};function Vb(a){return a?new Zb($b(a)):Ob||(Ob=new Zb)}function ac(a,b){Ua(b,function(b,d){"style"==d?a.style.cssText=b:"class"==d?a.className=b:"for"==d?a.htmlFor=b:d in bc?a.setAttribute(bc[d],b):0==d.lastIndexOf("aria-",0)||0==d.lastIndexOf("data-",0)?a.setAttribute(d,b):a[d]=b})}var bc={cellpadding:"cellPadding",cellspacing:"cellSpacing",colspan:"colSpan",frameborder:"frameBorder",height:"height",maxlength:"maxLength",role:"role",rowspan:"rowSpan",type:"type",usemap:"useMap",valign:"vAlign",width:"width"}; +function cc(a){a=a.document.documentElement;return new Ub(a.clientWidth,a.clientHeight)}function dc(a,b,c){var d=arguments,e=document,f=d[0],h=d[1];if(!Pb&&h&&(h.name||h.type)){f=["<",f];h.name&&f.push(' name="',va(h.name),'"');if(h.type){f.push(' type="',va(h.type),'"');var j={};$a(j,h);delete j.type;h=j}f.push(">");f=f.join("")}f=e.createElement(f);h&&(ja(h)?f.className=h:ha(h)?Qb.apply(k,[f].concat(h)):ac(f,h));2=a.keyCode)a.keyCode=-1}catch(b){}};p.Kd=n("L");function Hc(){}var Ic=0;Hc.prototype.key=0;Hc.prototype.La=l;Hc.prototype.a=l;Hc.prototype.handleEvent=function(a){return this.b?this.Xa.call(this.fc||this.src,a):this.Xa.handleEvent.call(this.Xa,a)};var Jc={},Kc={},Lc={},Mc={}; +function I(a,b,c,d,e){if(b){if(ha(b)){for(var f=0;ff.keyCode||f.returnValue!=h)return j;a:{var q=l;if(0==f.keyCode)try{f.keyCode=-1;break a}catch(t){q=j}if(q||f.returnValue==h)f.returnValue=j}}q=new kc;lc(q,f,this);f=j;try{if(i){for(var r=[],y=q.c;y;y=y.parentNode)r.push(y);g=e[j];g.R=g.o;for(var w=r.length- -1;!q.sa&&0<=w&&g.R;w--)q.c=r[w],f&=yc(g,r[w],d,j,q);if(m){g=e[l];g.R=g.o;for(w=0;!q.sa&&w=this.left&&a.right<=this.right&&a.top>=this.top&&a.bottom<=this.bottom:a.x>=this.left&&a.x<=this.right&&a.y>=this.top&&a.y<=this.bottom};function Bc(a,b){var c=Nb(a);return c.defaultView&&c.defaultView.getComputedStyle&&(c=c.defaultView.getComputedStyle(a,k))?c[b]||c.getPropertyValue(b)||"":""}function Cc(a,b){return a.currentStyle?a.currentStyle[b]:k}function Dc(a,b){return Bc(a,b)||Cc(a,b)||a.style&&a.style[b]}function Ec(a,b){var c,d,e=ob&&(gb||sb)&&Bb("1.9");b instanceof Jb?(c=b.x,d=b.y):(c=b,d=h);a.style.left=Fc(c,e);a.style.top=Fc(d,e)} -function Gc(a){var b=a.getBoundingClientRect();G&&(a=a.ownerDocument,b.left-=a.documentElement.clientLeft+a.body.clientLeft,b.top-=a.documentElement.clientTop+a.body.clientTop);return b} -function Hc(a){if(G&&!Db(8))return a.offsetParent;for(var b=Nb(a),c=Dc(a,"position"),d="fixed"==c||"absolute"==c,a=a.parentNode;a&&a!=b;a=a.parentNode)if(c=Dc(a,"position"),d=d&&"static"==c&&a!=b.documentElement&&a!=b.body,!d&&(a.scrollWidth>a.clientWidth||a.scrollHeight>a.clientHeight||"fixed"==c||"absolute"==c||"relative"==c))return a;return k}function Ic(a,b){var c=Jc(a),d=Jc(b);return new Jb(c.x-d.x,c.y-d.y)} -function Jc(a){var b=new Jb;if(1==a.nodeType){if(a.getBoundingClientRect){var c=Gc(a);b.x=c.left;b.y=c.top}else{c=Yb(Lb(a));var d,e=Nb(a),f=Dc(a,"position"),g=ob&&e.getBoxObjectFor&&!a.getBoundingClientRect&&"absolute"==f&&(d=e.getBoxObjectFor(a))&&(0>d.screenX||0>d.screenY),i=new Jb(0,0),m;d=e?Nb(e):document;if(m=G)if(m=!Db(9))Lb(d),m=l;m=m?d.body:d.documentElement;if(a!=m)if(a.getBoundingClientRect)d=Gc(a),e=Yb(Lb(e)),i.x=d.left+e.x,i.y=d.top+e.y;else if(e.getBoxObjectFor&&!g)d=e.getBoxObjectFor(a), -e=e.getBoxObjectFor(m),i.x=d.screenX-e.screenX,i.y=d.screenY-e.screenY;else{g=a;do{i.x+=g.offsetLeft;i.y+=g.offsetTop;g!=a&&(i.x+=g.clientLeft||0,i.y+=g.clientTop||0);if(pb&&"fixed"==Dc(g,"position")){i.x+=e.body.scrollLeft;i.y+=e.body.scrollTop;break}g=g.offsetParent}while(g&&g!=a);if(nb||pb&&"absolute"==f)i.y-=e.body.offsetTop;for(g=a;(g=Hc(g))&&g!=e.body&&g!=m;)if(i.x-=g.scrollLeft,!nb||"TR"!=g.tagName)i.y-=g.scrollTop}b.x=i.x-c.x;b.y=i.y-c.y}if(ob&&!Bb(12)){var q;G?q="-ms-transform":pb?q="-webkit-transform": -nb?q="-o-transform":ob&&(q="-moz-transform");var t;q&&(t=Dc(a,q));t||(t=Dc(a,"transform"));t?(a=t.match(Kc),a=!a?new Jb(0,0):new Jb(parseFloat(a[1]),parseFloat(a[2]))):a=new Jb(0,0);b=new Jb(b.x+a.x,b.y+a.y)}}else q=ha(a.pd),t=a,a.targetTouches?t=a.targetTouches[0]:q&&a.L.targetTouches&&(t=a.L.targetTouches[0]),b.x=t.clientX,b.y=t.clientY;return b}function Fc(a,b){"number"==typeof a&&(a=(b?Math.round(a):a)+"px");return a} -function Lc(a){var b=a.offsetWidth,c=a.offsetHeight,d=pb&&!b&&!c;return(!z(b)||d)&&a.getBoundingClientRect?(a=Gc(a),new Kb(a.right-a.left,a.bottom-a.top)):new Kb(b,c)}function Mc(a,b){a.style.display=b?"":"none"} -function Nc(a,b){Lb(Nb(a));if(G&&!Bb("8")){var c=a.style,d;if(G){d=Oc(a,Cc(a,"paddingLeft"));var e=Oc(a,Cc(a,"paddingRight")),f=Oc(a,Cc(a,"paddingTop")),g=Oc(a,Cc(a,"paddingBottom"));d=new Ac(f,e,g,d)}else d=Bc(a,"paddingLeft"),e=Bc(a,"paddingRight"),f=Bc(a,"paddingTop"),g=Bc(a,"paddingBottom"),d=new Ac(parseFloat(f),parseFloat(e),parseFloat(g),parseFloat(d));if(G)var e=Pc(a,"borderLeft"),f=Pc(a,"borderRight"),g=Pc(a,"borderTop"),i=Pc(a,"borderBottom"),e=new Ac(g,f,i,e);else e=Bc(a,"borderLeftWidth"), -f=Bc(a,"borderRightWidth"),g=Bc(a,"borderTopWidth"),i=Bc(a,"borderBottomWidth"),e=new Ac(parseFloat(g),parseFloat(f),parseFloat(i),parseFloat(e));c.pixelWidth=b.width-e.left-d.left-d.right-e.right;c.pixelHeight=b.height-e.top-d.top-d.bottom-e.bottom}else c=a.style,ob?c.MozBoxSizing="border-box":pb?c.WebkitBoxSizing="border-box":c.boxSizing="border-box",c.width=Math.max(b.width,0)+"px",c.height=Math.max(b.height,0)+"px"} -function Oc(a,b){if(/^\d+px?$/.test(b))return parseInt(b,10);var c=a.style.left,d=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;a.style.left=b;var e=a.style.pixelLeft;a.style.left=c;a.runtimeStyle.left=d;return e}var Qc={thin:2,medium:4,thick:6};function Pc(a,b){if("none"==Cc(a,b+"Style"))return 0;var c=Cc(a,b+"Width");return c in Qc?Qc[c]:Oc(a,c)}var Kc=/matrix\([0-9\.\-]+, [0-9\.\-]+, [0-9\.\-]+, [0-9\.\-]+, ([0-9\.\-]+)p?x?, ([0-9\.\-]+)p?x?\)/;function Rc(a,b){this.x=a;this.y=b}D(Rc,Jb);Rc.prototype.T=function(){return new Rc(this.x,this.y)};Rc.prototype.rotate=function(a){var b=Math.cos(a),a=Math.sin(a),c=this.y*b+this.x*a;this.x=this.x*b-this.y*a;this.y=c;return this};function L(a,b){Rc.call(this,a,b)}D(L,Rc);function Sc(a,b){var c=Ib(a+180,360)-180,d=Math.abs(Math.round(3600*c));return Math.floor(d/3600)+"\u00b0 "+Math.floor(d/60%60)+"\u2032 "+Math.floor(d%60)+"\u2033 "+b.charAt(0>c?1:0)}function Tc(a,b){if(z(a)){var c=b||0;return a.x.toFixed(c)+", "+a.y.toFixed(c)}return""}function Uc(a,b){var c=b.charAt(0);return"n"===c||"s"===c?new L(a[1],a[0]):new L(a[0],a[1])};var Vc=RegExp("^(?:([^:/?#.]+):)?(?://(?:([^/?#]*)@)?([\\w\\d\\-\\u0100-\\uffff.%]*)(?::([0-9]+))?)?([^?#]+)?(?:\\?([^#]*))?(?:#(.*))?$");function Wc(a){if(a[1]){var b=a[0],c=b.indexOf("#");0<=c&&(a.push(b.substr(c)),a[0]=b=b.substr(0,c));c=b.indexOf("?");0>c?a[1]="?":c==b.length-1&&(a[1]=h)}return a.join("")}function Xc(a,b,c){if(ea(b))for(var d=0;db)throw Error("Bad port number "+b);a.yb=b}else a.yb=k} -function cd(a,b,c){ad(a);if(b instanceof dd){a.a=b;b=a.a;if((a=a.pa)&&!b.b){jd(b);b.a=k;var d=b.F,c=function(a,b){var c=b.toLowerCase();b!=c&&(this.remove(b),kd(this,c,a))};if("function"==typeof d.forEach)d.forEach(c,b);else if(fa(d)||ga(d))F(d,c,b);else{var e;if("function"==typeof d.Z)e=d.Z();else if("function"!=typeof d.O)if(fa(d)||ga(d)){e=[];for(var f=d.length,g=0;g>4&15).toString(16)+(a&15).toString(16)}var fd=/[#\/\?@]/g,hd=/[\#\?:]/g,gd=/[\#\?]/g,ld=/[\#\?@]/g,id=/#/g;function dd(a,b,c){this.a=a||k;this.b=!!c} -function jd(a){if(!a.F&&(a.F=new Ya,a.o=0,a.a))for(var b=a.a.split("&"),c=0;c=a||96<=a&&106>=a||65<=a&&90>=a||pb&&0==a)return j;switch(a){case 32:case 63:case 107:case 109:case 110:case 111:case 186:case 59:case 189:case 187:case 61:case 188:case 190:case 191:case 192:case 222:case 219:case 220:case 221:return j;default:return l}} -function Hd(a){switch(a){case 61:return 187;case 59:return 186;case 224:return 91;case 0:return 224;default:return a}};function Id(a,b){bc.call(this);a&&(this.ob&&Jd(this),this.Ka=a,this.nb=H(this.Ka,"keypress",this,b),this.Vb=H(this.Ka,"keydown",this.a,b,this),this.ob=H(this.Ka,"keyup",this.b,b,this))}D(Id,rd);p=Id.prototype;p.Ka=k;p.nb=k;p.Vb=k;p.ob=k;p.ja=-1;p.ia=-1;p.Hb=l; -var Kd={3:13,12:144,63232:38,63233:40,63234:37,63235:39,63236:112,63237:113,63238:114,63239:115,63240:116,63241:117,63242:118,63243:119,63244:120,63245:121,63246:122,63247:123,63248:44,63272:46,63273:36,63275:35,63276:33,63277:34,63289:144,63302:45},Ld={Up:38,Down:40,Left:37,Right:39,Enter:13,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,"U+007F":46,Home:36,End:35,PageUp:33,PageDown:34,Insert:45},Md=G||pb&&Bb("525"),Nd=gb&&ob; -Id.prototype.a=function(a){if(pb&&(17==this.ja&&!a.ib||18==this.ja&&!a.fa))this.ia=this.ja=-1;Md&&!Fd(a.za,this.ja,a.qa,a.ib,a.fa)?this.handleEvent(a):(this.ia=ob?Hd(a.za):a.za,Nd&&(this.Hb=a.fa))};Id.prototype.b=function(a){this.ia=this.ja=-1;this.Hb=a.fa}; -Id.prototype.handleEvent=function(a){var b=a.L,c,d,e=b.altKey;G&&"keypress"==a.type?(c=this.ia,d=13!=c&&27!=c?b.keyCode:0):pb&&"keypress"==a.type?(c=this.ia,d=0<=b.charCode&&63232>b.charCode&&Gd(c)?b.charCode:0):nb?(c=this.ia,d=Gd(c)?b.keyCode:0):(c=b.keyCode||this.ia,d=b.charCode||0,Nd&&(e=this.Hb),gb&&(63==d&&224==c)&&(c=191));var f=c,g=b.keyIdentifier;c?63232<=c&&c in Kd?f=Kd[c]:25==c&&a.qa&&(f=9):g&&g in Ld&&(f=Ld[g]);a=f==this.ja;this.ja=f;b=new Od(f,d,a,b);b.fa=e;K(this,b)}; -function Jd(a){a.nb&&(J(a.nb),J(a.Vb),J(a.ob),a.nb=k,a.Vb=k,a.ob=k);a.Ka=k;a.ja=-1;a.ia=-1}Id.prototype.s=function(){Id.w.s.call(this);Jd(this)};function Od(a,b,c,d){d&&lc(this,d,h);this.type="key";this.za=a;this.hb=b;this.b=c}D(Od,kc);function Pd(a){bc.call(this);this.a=a;a=ia(this.a)&&1==this.a.nodeType?this.a:this.a?this.a.body:k;this.e=!!a&&"rtl"==Dc(a,"direction");this.b=H(this.a,ob?"DOMMouseScroll":"mousewheel",this)}D(Pd,rd); -Pd.prototype.handleEvent=function(a){var b=0,c=0,d=0,a=a.L;if("mousewheel"==a.type){c=1;if(G||pb&&(hb||Bb("532.0")))c=40;d=Qd(-a.wheelDelta,c);z(a.wheelDeltaX)?(b=Qd(-a.wheelDeltaX,c),c=Qd(-a.wheelDeltaY,c)):c=d}else d=a.detail,100d&&(d=-3),z(a.axis)&&a.axis===a.HORIZONTAL_AXIS?b=d:c=d;"number"==typeof this.c&&(b=Hb(b,-this.c,this.c));"number"==typeof this.d&&(c=Hb(c,-this.d,this.d));this.e&&(b=-b);b=new Rd(d,a,b,c);K(this,b)};function Qd(a,b){return pb&&(gb||ib)&&0!=a%b?a:a/b} -Pd.prototype.s=function(){Pd.w.s.call(this);J(this.b);delete this.b};function Rd(a,b,c,d){b&&lc(this,b,h);this.type="mousewheel";this.e=a;this.d=c;this.b=d}D(Rd,kc);var Sd=document&&"ontouchstart"in document.documentElement||!!window.navigator.msPointerEnabled;function M(a){bc.call(this);this.t={};z(a)&&this.ub(a)}D(M,rd);var Td={},Ud={},Vd={};function Wd(a){return a.substr(0,1).toUpperCase()+a.substr(1)}function Xd(a){return a.ol_accessors_||(a.ol_accessors_={})}function Yd(a){return Td.hasOwnProperty(a)?Td[a]:Td[a]=a.toLowerCase()+"_changed"}function Zd(a){return a.ol_bindings_||(a.ol_bindings_={})}p=M.prototype; -p.ad=function(a,b,c,d){c=c||a;this.bc(a);var e=Yd(c);Zd(this)[a]=H(b,e,function(){$d(this,a)},h,this);Xd(this)[a]={target:b,key:c};d||$d(this,a)};p.dd=ba;p.q=function(a){var b,c=Xd(this);c.hasOwnProperty(a)?(b=c[a],a=b.target,b=b.key,c=Ud.hasOwnProperty(b)?Ud[b]:Ud[b]="get"+Wd(b),b=a[c]?a[c]():a.q(b)):this.t.hasOwnProperty(a)&&(b=this.t[a]);return b}; -p.Z=function(){for(var a=Qa(Xd(this)).concat(Qa(this.t)),b={},c=0,d=0;d=b.h&&a.k<=b.l&&a.l>=b.k}ee.prototype.toString=function(){return"("+[this.h,this.k,this.j,this.l].join(", ")+")"};function P(a,b,c,d){ee.call(this,a,b,c,d)}D(P,ee);function ge(a){var b=arguments[0],b=new P(b.x,b.y,b.x,b.y),c;for(c=1;cf;++f)g=e[f],i=c[f],e[f]=a.x+g*b-i*d,c[f]=a.y+g*d+i*b;a=Math.min.apply(k,e);b=Math.min.apply(k,c);e=Math.max.apply(k,e);c=Math.max.apply(k,c);return new P(a,b,e,c)}p=P.prototype;p.ed=function(a){return this.h<=a.x&&a.x<=this.j&&this.k<=a.y&&a.y<=this.l};p.lc=function(a){return this.h<=a.h&&a.j<=this.j&&this.k<=a.k&&a.l<=this.l};p.nd=function(){return new L(this.h,this.k)}; -p.od=function(){return new L(this.j,this.k)};p.gb=function(){return new L(this.h,this.l)};p.sd=function(){return new L(this.j,this.l)};p.transform=function(a){var b=[this.h,this.k,this.j,this.l],b=a(b,b,2);return new P(Math.min(b[0],b[2]),Math.min(b[1],b[3]),Math.max(b[0],b[2]),Math.max(b[1],b[3]))};function ie(a){this.length=a.length||a;for(var b=0;b>=1;return b.join("")}ve.prototype.toString=function(){return[this.n,this.x,this.y].join("/")};function xe(a,b,c,d){this.h=a;this.k=b;this.j=c;this.l=d}D(xe,ee);xe.prototype.contains=function(a){return this.h<=a.x&&a.x<=this.j&&this.k<=a.y&&a.y<=this.l};xe.prototype.da=function(){return this.l-this.k+1};xe.prototype.ha=function(){return this.j-this.h+1};function ye(a,b){this.b=a;this.a=b||k};function ze(a,b){bc.call(this);this.X=a;this.a=b}D(ze,rd);ze.prototype.b=function(){return A(this).toString()};function Ae(a){this.d=a;this.f=8;this.c=0;this.a=[];this.b={}}function Be(a,b,c,d){if(0==b.a){var e=b.b();if(!(e in a.b)){var f=a.d(b,c,d);Infinity!=f&&(a.a.push([f,b,c,d]),a.b[e]=j,Ce(a,0,a.a.length-1))}}}Ae.prototype.e=function(){--this.c};function De(a,b){for(var c=a.a,d=c.length,e=c[b],f=b;b>1;){var g=2*b+1,i=2*b+2,g=ib;){var e=c-1>>1;if(a[e][0]>d[0])a[c]=a[e],c=e;else break}a[c]=d};/* +function Nc(a,b){if(!Jc[a])return i;var c=Jc[a],d=c.type,e=Kc;if(!(d in e))return i;var e=e[d],f,h;if(!rc){var j;if(!(j=b))a:{j=["window","event"];for(var m=r;f=j.shift();)if(m[f]!=k)m=m[f];else{j=k;break a}j=m}f=j;j=i in e;m=l in e;if(j){if(0>f.keyCode||f.returnValue!=g)return i;a:{var q=l;if(0==f.keyCode)try{f.keyCode=-1;break a}catch(v){q=i}if(q||f.returnValue==g)f.returnValue=i}}q=new Dc;Ec(q,f,this);f=i;try{if(j){for(var s=[],A=q.b;A;A=A.parentNode)s.push(A);h=e[i];h.Y=h.o;for(var u=s.length- +1;!q.Ga&&0<=u&&h.Y;u--)q.b=s[u],f&=Wc(h,s[u],d,i,q);if(m){h=e[l];h.Y=h.o;for(u=0;!q.Ga&&u=this.left&&a.right<=this.right&&a.top>=this.top&&a.bottom<=this.bottom:a.x>=this.left&&a.x<=this.right&&a.y>=this.top&&a.y<=this.bottom};function Zc(a,b,c,d){this.left=a;this.top=b;this.width=c;this.height=d}Zc.prototype.V=function(){return new Zc(this.left,this.top,this.width,this.height)};Zc.prototype.ha=function(a){return this.left<=a.left+a.width&&a.left<=this.left+this.width&&this.top<=a.top+a.height&&a.top<=this.top+this.height}; +Zc.prototype.contains=function(a){return a instanceof Zc?this.left<=a.left&&this.left+this.width>=a.left+a.width&&this.top<=a.top&&this.top+this.height>=a.top+a.height:a.x>=this.left&&a.x<=this.left+this.width&&a.y>=this.top&&a.y<=this.top+this.height};function $c(a,b){var c=$b(a);return c.defaultView&&c.defaultView.getComputedStyle&&(c=c.defaultView.getComputedStyle(a,k))?c[b]||c.getPropertyValue(b)||"":""}function ad(a,b){return $c(a,b)||(a.currentStyle?a.currentStyle[b]:k)||a.style&&a.style[b]}function bd(a,b,c){var d,e=ub&&(kb||Ab)&&Lb("1.9");b instanceof Tb?(d=b.x,b=b.y):(d=b,b=c);a.style.left=cd(d,e);a.style.top=cd(b,e)} +function dd(a){var b=a.getBoundingClientRect();G&&(a=a.ownerDocument,b.left-=a.documentElement.clientLeft+a.body.clientLeft,b.top-=a.documentElement.clientTop+a.body.clientTop);return b} +function ed(a){if(G&&!Nb(8))return a.offsetParent;for(var b=$b(a),c=ad(a,"position"),d="fixed"==c||"absolute"==c,a=a.parentNode;a&&a!=b;a=a.parentNode)if(c=ad(a,"position"),d=d&&"static"==c&&a!=b.documentElement&&a!=b.body,!d&&(a.scrollWidth>a.clientWidth||a.scrollHeight>a.clientHeight||"fixed"==c||"absolute"==c||"relative"==c))return a;return k} +function fd(a){var b,c=$b(a),d=ad(a,"position"),e=ub&&c.getBoxObjectFor&&!a.getBoundingClientRect&&"absolute"==d&&(b=c.getBoxObjectFor(a))&&(0>b.screenX||0>b.screenY),f=new Tb(0,0),h;b=c?$b(c):document;h=G&&!Nb(9)&&!lc(Vb(b))?b.body:b.documentElement;if(a==h)return f;if(a.getBoundingClientRect)b=dd(a),a=mc(Vb(c)),f.x=b.left+a.x,f.y=b.top+a.y;else if(c.getBoxObjectFor&&!e)b=c.getBoxObjectFor(a),a=c.getBoxObjectFor(h),f.x=b.screenX-a.screenX,f.y=b.screenY-a.screenY;else{b=a;do{f.x+=b.offsetLeft;f.y+= +b.offsetTop;b!=a&&(f.x+=b.clientLeft||0,f.y+=b.clientTop||0);if(xb&&"fixed"==ad(b,"position")){f.x+=c.body.scrollLeft;f.y+=c.body.scrollTop;break}b=b.offsetParent}while(b&&b!=a);if(tb||xb&&"absolute"==d)f.y-=c.body.offsetTop;for(b=a;(b=ed(b))&&b!=c.body&&b!=h;)if(f.x-=b.scrollLeft,!tb||"TR"!=b.tagName)f.y-=b.scrollTop}return f}function gd(a,b){var c=hd(a),d=hd(b);return new Tb(c.x-d.x,c.y-d.y)} +function hd(a){var b=new Tb;if(1==a.nodeType){if(a.getBoundingClientRect){var c=dd(a);b.x=c.left;b.y=c.top}else{var c=mc(Vb(a)),d=fd(a);b.x=d.x-c.x;b.y=d.y-c.y}if(ub&&!Lb(12)){var e;G?e="-ms-transform":xb?e="-webkit-transform":tb?e="-o-transform":ub&&(e="-moz-transform");var f;e&&(f=ad(a,e));f||(f=ad(a,"transform"));f?(a=f.match(id),a=!a?new Tb(0,0):new Tb(parseFloat(a[1]),parseFloat(a[2]))):a=new Tb(0,0);b=new Tb(b.x+a.x,b.y+a.y)}}else e=ka(a.Kd),f=a,a.targetTouches?f=a.targetTouches[0]:e&&a.L.targetTouches&& +(f=a.L.targetTouches[0]),b.x=f.clientX,b.y=f.clientY;return b}function cd(a,b){"number"==typeof a&&(a=(b?Math.round(a):a)+"px");return a}function jd(a){if("none"!=ad(a,"display"))return kd(a);var b=a.style,c=b.display,d=b.visibility,e=b.position;b.visibility="hidden";b.position="absolute";b.display="inline";a=kd(a);b.display=c;b.position=e;b.visibility=d;return a} +function kd(a){var b=a.offsetWidth,c=a.offsetHeight,d=xb&&!b&&!c;return(!x(b)||d)&&a.getBoundingClientRect?(a=dd(a),new Ub(a.right-a.left,a.bottom-a.top)):new Ub(b,c)}function ld(a,b){a.style.display=b?"":"none"}function md(a){return"rtl"==ad(a,"direction")} +function nd(a,b){var c=lc(Vb($b(a)));if(G&&(!c||!Lb("8"))){var d=a.style;if(c){var c=od(a,"padding"),e=pd(a);d.pixelWidth=b.width-e.left-c.left-c.right-e.right;d.pixelHeight=b.height-e.top-c.top-c.bottom-e.bottom}else d.pixelWidth=b.width,d.pixelHeight=b.height}else d=a.style,ub?d.MozBoxSizing="border-box":xb?d.WebkitBoxSizing="border-box":d.boxSizing="border-box",d.width=Math.max(b.width,0)+"px",d.height=Math.max(b.height,0)+"px"} +function qd(a,b,c,d){if(/^\d+px?$/.test(b))return parseInt(b,10);var e=a.style[c],f=a.runtimeStyle[c];a.runtimeStyle[c]=a.currentStyle[c];a.style[c]=b;b=a.style[d];a.style[c]=e;a.runtimeStyle[c]=f;return b}function rd(a,b){return qd(a,a.currentStyle?a.currentStyle[b]:k,"left","pixelLeft")} +function od(a,b){if(G){var c=rd(a,b+"Left"),d=rd(a,b+"Right"),e=rd(a,b+"Top"),f=rd(a,b+"Bottom");return new Yc(e,d,f,c)}c=$c(a,b+"Left");d=$c(a,b+"Right");e=$c(a,b+"Top");f=$c(a,b+"Bottom");return new Yc(parseFloat(e),parseFloat(d),parseFloat(f),parseFloat(c))}var sd={thin:2,medium:4,thick:6};function td(a,b){if("none"==(a.currentStyle?a.currentStyle[b+"Style"]:k))return 0;var c=a.currentStyle?a.currentStyle[b+"Width"]:k;return c in sd?sd[c]:qd(a,c,"left","pixelLeft")} +function pd(a){if(G){var b=td(a,"borderLeft"),c=td(a,"borderRight"),d=td(a,"borderTop"),a=td(a,"borderBottom");return new Yc(d,c,a,b)}b=$c(a,"borderLeftWidth");c=$c(a,"borderRightWidth");d=$c(a,"borderTopWidth");a=$c(a,"borderBottomWidth");return new Yc(parseFloat(d),parseFloat(c),parseFloat(a),parseFloat(b))}var id=/matrix\([0-9\.\-]+, [0-9\.\-]+, [0-9\.\-]+, [0-9\.\-]+, ([0-9\.\-]+)p?x?, ([0-9\.\-]+)p?x?\)/;function ud(a,b){this.x=a;this.y=b}D(ud,Tb);ud.prototype.V=function(){return new ud(this.x,this.y)};ud.prototype.rotate=function(a){var b=Math.cos(a),a=Math.sin(a),c=this.y*b+this.x*a;this.x=this.x*b-this.y*a;this.y=c;return this};function L(a,b){ud.call(this,a,b)}D(L,ud);function vd(a,b){var c=Sb(a+180,360)-180,d=Math.abs(Math.round(3600*c));return Math.floor(d/3600)+"\u00b0 "+Math.floor(d/60%60)+"\u2032 "+Math.floor(d%60)+"\u2033 "+b.charAt(0>c?1:0)}function wd(a,b){if(x(a)){var c=b||0;return a.x.toFixed(c)+", "+a.y.toFixed(c)}return""}function xd(a,b){var c=b.charAt(0);return"n"===c||"s"===c?new L(a[1],a[0]):new L(a[0],a[1])};var yd=RegExp("^(?:([^:/?#.]+):)?(?://(?:([^/?#]*)@)?([\\w\\d\\-\\u0100-\\uffff.%]*)(?::([0-9]+))?)?([^?#]+)?(?:\\?([^#]*))?(?:#(.*))?$");function zd(a){if(a[1]){var b=a[0],c=b.indexOf("#");0<=c&&(a.push(b.substr(c)),a[0]=b=b.substr(0,c));c=b.indexOf("?");0>c?a[1]="?":c==b.length-1&&(a[1]=g)}return a.join("")}function Ad(a,b,c){if(ha(b))for(var d=0;db)&&aa(Error("Bad port number "+b)),a.Hb=b):a.Hb=k} +function Gd(a,b,c){Ed(a);if(b instanceof Hd){a.a=b;b=a.a;if((a=a.Aa)&&!b.b){Nd(b);b.a=k;var d=b.H,c=function(a,b){var c=b.toLowerCase();b!=c&&(this.remove(b),$d(this,c,a))};if("function"==typeof d.forEach)d.forEach(c,b);else if(ia(d)||ja(d))F(d,c,b);else{var e;if("function"==typeof d.ba)e=d.ba();else if("function"!=typeof d.W)if(ia(d)||ja(d)){e=[];for(var f=d.length,h=0;h>4&15).toString(16)+(a&15).toString(16)}var Jd=/[#\/\?@]/g,Ld=/[\#\?:]/g,Kd=/[\#\?]/g,ae=/[\#\?@]/g,Md=/#/g;function Hd(a,b,c){this.a=a||k;this.b=!!c} +function Nd(a){if(!a.H&&(a.H=new bb,a.o=0,a.a))for(var b=a.a.split("&"),c=0;c=a||96<=a&&106>=a||65<=a&&90>=a||xb&&0==a)return i;switch(a){case 32:case 63:case 107:case 109:case 110:case 111:case 186:case 59:case 189:case 187:case 61:case 188:case 190:case 191:case 192:case 222:case 219:case 220:case 221:return i;default:return l}} +function te(a){switch(a){case 61:return 187;case 59:return 186;case 224:return 91;case 0:return 224;default:return a}};function ue(a,b){tc.call(this);a&&(this.xb&&ve(this),this.Ra=a,this.wb=I(this.Ra,"keypress",this,b),this.gc=I(this.Ra,"keydown",this.a,b,this),this.xb=I(this.Ra,"keyup",this.b,b,this))}D(ue,ge);p=ue.prototype;p.Ra=k;p.wb=k;p.gc=k;p.xb=k;p.ua=-1;p.ta=-1;p.Qb=l; +var we={3:13,12:144,63232:38,63233:40,63234:37,63235:39,63236:112,63237:113,63238:114,63239:115,63240:116,63241:117,63242:118,63243:119,63244:120,63245:121,63246:122,63247:123,63248:44,63272:46,63273:36,63275:35,63276:33,63277:34,63289:144,63302:45},xe={Up:38,Down:40,Left:37,Right:39,Enter:13,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,"U+007F":46,Home:36,End:35,PageUp:33,PageDown:34,Insert:45},ye=G||xb&&Lb("525"),ze=kb&&ub; +ue.prototype.a=function(a){if(xb&&(17==this.ua&&!a.qb||18==this.ua&&!a.na))this.ta=this.ua=-1;ye&&!re(a.Ia,this.ua,a.Ca,a.qb,a.na)?this.handleEvent(a):(this.ta=ub?te(a.Ia):a.Ia,ze&&(this.Qb=a.na))};ue.prototype.b=function(a){this.ta=this.ua=-1;this.Qb=a.na}; +ue.prototype.handleEvent=function(a){var b=a.L,c,d,e=b.altKey;G&&"keypress"==a.type?(c=this.ta,d=13!=c&&27!=c?b.keyCode:0):xb&&"keypress"==a.type?(c=this.ta,d=0<=b.charCode&&63232>b.charCode&&se(c)?b.charCode:0):tb?(c=this.ta,d=se(c)?b.keyCode:0):(c=b.keyCode||this.ta,d=b.charCode||0,ze&&(e=this.Qb),kb&&(63==d&&224==c)&&(c=191));var f=c,h=b.keyIdentifier;c?63232<=c&&c in we?f=we[c]:25==c&&a.Ca&&(f=9):h&&h in xe&&(f=xe[h]);a=f==this.ua;this.ua=f;b=new Ae(f,d,a,b);b.na=e;K(this,b)}; +function ve(a){a.wb&&(J(a.wb),J(a.gc),J(a.xb),a.wb=k,a.gc=k,a.xb=k);a.Ra=k;a.ua=-1;a.ta=-1}ue.prototype.r=function(){ue.z.r.call(this);ve(this)};function Ae(a,b,c,d){d&&Ec(this,d,g);this.type="key";this.Ia=a;this.pb=b;this.c=c}D(Ae,Dc);function Be(a){tc.call(this);this.a=a;a=la(this.a)&&1==this.a.nodeType?this.a:this.a?this.a.body:k;this.e=!!a&&md(a);this.b=I(this.a,ub?"DOMMouseScroll":"mousewheel",this)}D(Be,ge); +Be.prototype.handleEvent=function(a){var b=0,c=0,d=0,a=a.L;if("mousewheel"==a.type){c=1;if(G||xb&&(lb||Lb("532.0")))c=40;d=Ce(-a.wheelDelta,c);x(a.wheelDeltaX)?(b=Ce(-a.wheelDeltaX,c),c=Ce(-a.wheelDeltaY,c)):c=d}else d=a.detail,100d&&(d=-3),x(a.axis)&&a.axis===a.HORIZONTAL_AXIS?b=d:c=d;"number"==typeof this.c&&(b=Rb(b,-this.c,this.c));"number"==typeof this.d&&(c=Rb(c,-this.d,this.d));this.e&&(b=-b);b=new De(d,a,b,c);K(this,b)};function Ce(a,b){return xb&&(kb||ob)&&0!=a%b?a:a/b} +Be.prototype.r=function(){Be.z.r.call(this);J(this.b);delete this.b};function De(a,b,c,d){b&&Ec(this,b,g);this.type="mousewheel";this.c=a;this.O=c;this.N=d}D(De,Dc);var Ee=document&&"ontouchstart"in document.documentElement||!!window.navigator.msPointerEnabled;function M(a){tc.call(this);this.s={};x(a)&&this.Db(a)}D(M,ge);var Fe={},Ge={},He={};function Ie(a){return a.substr(0,1).toUpperCase()+a.substr(1)}function Je(a){return a.ol_accessors_||(a.ol_accessors_={})}function Ke(a){return Fe.hasOwnProperty(a)?Fe[a]:Fe[a]=a.toLowerCase()+"_changed"}function Le(a){return a.ol_bindings_||(a.ol_bindings_={})}p=M.prototype; +p.xd=function(a,b,c,d){c=c||a;this.nc(a);var e=Ke(c);Le(this)[a]=I(b,e,function(){Me(this,a)},g,this);Je(this)[a]={target:b,key:c};d||Me(this,a)};p.Ad=da;p.q=function(a){var b,c=Je(this);c.hasOwnProperty(a)?(b=c[a],a=b.target,b=b.key,c=Ge.hasOwnProperty(b)?Ge[b]:Ge[b]="get"+Ie(b),b=a[c]?a[c]():a.q(b)):this.s.hasOwnProperty(a)&&(b=this.s[a]);return b}; +p.ba=function(){for(var a=Wa(Je(this)).concat(Wa(this.s)),b={},c=0,d=0;d=a.h&&this.l<=a.k&&this.k>=a.l};p.toString=function(){return"("+[this.h,this.l,this.j,this.k].join(", ")+")"};function O(a,b,c,d){Re.call(this,a,b,c,d)}D(O,Re);function Te(a){var b=arguments[0],b=new O(b.x,b.y,b.x,b.y),c;for(c=1;cf;++f)h=e[f],j=c[f],e[f]=a.x+h*b-j*d,c[f]=a.y+h*d+j*b;a=Math.min.apply(k,e);b=Math.min.apply(k,c);e=Math.max.apply(k,e);c=Math.max.apply(k,c);return new O(a,b,e,c)}p=O.prototype;p.Bd=function(a){return this.h<=a.x&&a.x<=this.j&&this.l<=a.y&&a.y<=this.k};p.yc=function(a){return this.h<=a.h&&a.j<=this.j&&this.l<=a.l&&a.k<=this.k};p.Gc=function(){return new L(this.h,this.l)}; +p.Jd=function(){return new L(this.j,this.l)};p.ob=function(){return new L(this.h,this.k)};p.Nd=function(){return new L(this.j,this.k)};p.transform=function(a){var b=[this.h,this.l,this.j,this.k],b=a(b,b,2);return new O(Math.min(b[0],b[2]),Math.min(b[1],b[3]),Math.max(b[0],b[2]),Math.max(b[1],b[3]))};function Ve(a){this.length=a.length||a;for(var b=0;b>=1;return b.join("")}yf.prototype.toString=function(){return[this.n,this.x,this.y].join("/")};function Af(a,b,c,d){this.h=a;this.l=b;this.j=c;this.k=d}D(Af,Re);Af.prototype.contains=function(a){return this.h<=a.x&&a.x<=this.j&&this.l<=a.y&&a.y<=this.k};Af.prototype.ga=function(){return this.k-this.l+1};Af.prototype.ma=function(){return this.j-this.h+1};function Bf(a,b){this.b=a;this.a=b||k};function Cf(a,b){tc.call(this);this.fa=a;this.a=b}D(Cf,ge);Cf.prototype.b=function(){return z(this).toString()};function Df(a){this.d=a;this.f=8;this.c=0;this.a=[];this.b={}}function Ef(a,b,c,d){if(0==b.a){var e=b.b();if(!(e in a.b)){var f=a.d(b,c,d);Infinity!=f&&(a.a.push([f,b,c,d]),a.b[e]=i,Ff(a,0,a.a.length-1))}}}Df.prototype.e=function(){--this.c};function Gf(a,b){for(var c=a.a,d=c.length,e=c[b],f=b;b>1;){var h=2*b+1,j=2*b+2,h=jb;){var e=c-1>>1;if(a[e][0]>d[0])a[c]=a[e],c=e;else break}a[c]=d};/* Latitude/longitude spherical geodesy formulae taken from http://www.movable-type.co.uk/scripts/latlong.html Licenced under CC-BY-3.0. */ -function Ee(a,b){var c=a.y*Math.PI/180,d=b.y*Math.PI/180,e=(d-c)/2,f=(b.x-a.x)*Math.PI/180/2,c=Math.sin(e)*Math.sin(e)+Math.sin(f)*Math.sin(f)*Math.cos(c)*Math.cos(d);return 2*Fe.a*Math.atan2(Math.sqrt(c),Math.sqrt(1-c))};var Fe=new function(){this.a=6370997};var Ge="object"==typeof Proj4js,He={Uc:"degrees",Ne:"ft",Re:"m"},Ie={};Ie.degrees=2*Math.PI*Fe.a/360;Ie.ft=0.3048;Ie.m=1;function Je(a){this.a=a.code;this.b=a.units;this.g=a.extent;this.d=z(a.axisOrientation)?a.axisOrientation:"enu";this.Lb=z(a.global)?a.global:l;this.f=k}p=Je.prototype;p.qd=n("a");p.I=n("g");p.td=n("b");p.sc=function(){return Ie[this.b]};p.md=n("d");p.$d=n("Lb");function Ke(a,b){var c={units:a.units,axisOrientation:a.axis};Wa(c,b);Je.call(this,c);this.Ic=a;this.e=k}D(Ke,Je); -Ke.prototype.c=function(a,b){if("degrees"==this.b)return a;this.e===k&&(this.e=Le(this,Me({code:"EPSG:4326",extent:k})));var c=[b.x-a/2,b.y,b.x+a/2,b.y,b.x,b.y-a/2,b.x,b.y+a/2],c=this.e(c,c,2),c=(Ee(new L(c[0],c[1]),new L(c[2],c[3]))+Ee(new L(c[4],c[5]),new L(c[6],c[7])))/2;"ft"==this.b&&(c/=0.3048);return c};var Ne={},Oe={},Pe={};function Qe(a){F(a,function(a){Re(a)});F(a,function(b){F(a,function(a){b!==a&&Se(b,a,Te)})})}function Re(a){Oe[a.a]=a;Se(a,a,Te)} -function Ue(a){return a!=k?ga(a)?Ve(a):a:Ve("EPSG:3857")}function Se(a,b,c){a=a.a;b=b.a;a in Pe||(Pe[a]={});Pe[a][b]=c}function Ve(a){var b;a instanceof Je?b=a:ga(a)?(b=Oe[a],Ge&&!z(b)&&(b=Me({code:a,extent:k})),z(b)||(b=k)):b=k;return b}function Me(a){var b=a.code,c=Ne[b];if(!z(c)){var d=new Proj4js.Proj(b),e=d.srsCode,c=Ne[e];z(c)||(a=Ua(a),a.code=e,c=new Ke(d,a),Ne[e]=c);Ne[b]=c}return c}function We(a,b){var c=Ve(a),d=Ve(b);return Le(c,d)} -function Le(a,b){var c=a.a,d=b.a,e;c in Pe&&d in Pe[c]&&(e=Pe[c][d]);if(Ge&&!z(e)){var f;f=(a instanceof Ke?a:Me({code:c,extent:k})).Ic;var g;g=(b instanceof Ke?b:Me({code:d,extent:k})).Ic;e=function(a,b,c){var d=a.length,c=1=Math.abs(a+c)?0:a+c}};var S={Ib:function(a){a<1/2.75?a*=7.5625*a:a<2/2.75?(a-=1.5/2.75,a=7.5625*a*a+0.75):a<2.5/2.75?(a-=2.25/2.75,a=7.5625*a*a+0.9375):(a-=2.625/2.75,a=7.5625*a*a+0.984375);return a},hd:function(a){return a*a*a},Ia:function(a){return 1-Math.pow(1-a,3)},jd:function(a){return Math.pow(2,-10*a)*Math.sin((a-0.075)*2*Math.PI/0.3)+1},Aa:function(a){return 3*a*a-2*a*a*a},Ac:aa(),Rc:function(a){return 0.5>a?S.Aa(2*a):1-S.Aa(2*(a-0.5))}};var tf={Ib:function(a){var b=a.resolution,c=z(a.start)?a.start:qa(),d=z(a.duration)?a.duration:1E3,e=z(a.easing)?a.easing:S.Rc;return function(a,g){if(g.timeb-a.f;)d--;if(0<=d){var b=a.a[d],c=a.a[c],d=c.x-b.x,e=c.y-b.y;a.c=Math.atan2(e,d);a.b=Math.sqrt(d*d+e*e)/(c.Ua-b.Ua);return a.b>a.d}return l}Df.prototype.aa=function(a){var b=this.e,c=this.b,d=this.d,e=Math.log(this.d/this.b)/this.e;return tf.aa({source:a,duration:e,easing:function(a){return c*(Math.exp(b*a*e)-1)/(d-c)}})};function Ff(){};function Gf(a){this.a=a}D(Gf,Ff);Gf.prototype.ra=function(a){var b=a.a;if(a.type==ef&&(Sd||nc(a.a))){var c=a.map,d=a.b(),e=a.a.qa?-this.a:this.a;yf(c.a(),c,e,d,250);a.D();b.D()}};function Hf(a){return a.fa&&!a.xb&&a.qa}function If(a){return!a.fa&&!a.xb&&!a.qa}function Jf(a){return!a.fa&&!a.xb&&a.qa};function Kf(){this.e=l;this.r=this.Qa=this.i=this.g=0;this.Ta=this.f=k}D(Kf,Ff);p=Kf.prototype;p.Ob=ba;p.kb=ba;p.lb=td;p.yc=ba;p.ra=function(a){var b=a.map;if(b.Oa()){var b=b.a(),c=a.a;a.type==hf&&this.yc(a);this.e?a.type==kf?(this.d=c.clientX-this.g,this.b=c.clientY-this.i,this.Ob(a)):a.type==gf&&(this.d=c.clientX-this.g,this.b=c.clientY-this.i,this.kb(a),this.e=l):a.type==jf&&(this.g=c.clientX,this.i=c.clientY,this.b=this.d=0,this.f=b.N(),this.Ta=a.b(),this.lb(a)&&(this.e=j,a.D()))}};function Lf(a,b){Kf.call(this);this.t=a;this.a=b;this.c=k}D(Lf,Kf);Lf.prototype.Ob=function(a){this.a&&this.a.a.push({x:a.a.clientX,y:a.a.clientY,Ua:qa()});var a=a.map,b=a.a(),c=b.Q(),d=b.V(),c=new L(-c*this.d,c*this.b);c.rotate(d);d=new L(this.f.x+c.x,this.f.y+c.y);uf(a);b.a(d)}; -Lf.prototype.kb=function(a){var b=a.map,a=b.a();qf(a,-1);if(this.a&&Ef(this.a)){var c=(this.a.d-this.a.b)/this.a.e,d=this.a.c,e=a.N();this.c=this.a.aa(e);b.ga(this.c);e=Mf(b,e);b=bf(b,new $e(e.x-c*Math.cos(d),e.y-c*Math.sin(d)));a.a(b)}};Lf.prototype.lb=function(a){var b=a.a;if(this.t(b)){if(this.a){var c=this.a;c.a.length=0;c.c=0;c.b=0;this.a.a.push({x:b.clientX,y:b.clientY,Ua:qa()})}a=a.map;uf(a);qf(a.a(),1);return j}return l}; -Lf.prototype.yc=function(a){var b=a.map,c=b.a();this.c!==k&&Ga(b.i,this.c)&&(uf(b),c.a(a.d.v.center),this.c=k)};function Nf(a){Kf.call(this);this.c=a}D(Nf,Kf);Nf.prototype.Ob=function(a){var b=a.map,c=b.f(),a=cf(a),c=Math.atan2(c.height/2-a.y,a.x-c.width/2);if(z(this.a)){var a=c-this.a,d=b.a();uf(b);vf(d,b,d.V()-a)}this.a=c};Nf.prototype.kb=function(a){var a=a.map,b=a.a();b.rotate(a,b.V(),h,250);qf(b,-1)};Nf.prototype.lb=function(a){var b=a.a;return nc(b)&&this.c(b)?(a=a.map,b=a.a(),uf(a),this.a=h,qf(b,1),j):l};function Of(a){var b=Rb("DIV","ol-dragbox");this.c=k;this.e=a.Ta;this.d=k;zf.call(this,{element:b,map:a.map})}D(Of,zf);Of.prototype.a=function(a){this.d!==k&&(J(this.d),this.d=k);a!==k&&(this.c=Mf(a,this.e),Ec(this.element,this.c),Nc(this.element,new de(0,0)),this.d=H(a,kf,this.f,l,this));Of.w.a.call(this,a)};Of.prototype.f=function(a){var b=this.b,a=a.b(),b=Mf(b,a);Ec(this.element,new $e(Math.min(b.x,this.c.x),Math.min(b.y,this.c.y)));Nc(this.element,new de(Math.abs(b.x-this.c.x),Math.abs(b.y-this.c.y)))};function Pf(a){Kf.call(this);this.c=a;this.a=k}D(Pf,Kf);Pf.prototype.kb=function(a){this.a.a(k);this.a=k;if(64<=this.d*this.d+this.b*this.b){var b=a.map,c=ge(this.Ta,a.b());wf(b,function(){var a=b.a(),e=b.f();a.f(c,e);a.d(0)})}};Pf.prototype.lb=function(a){var b=a.a;return nc(b)&&this.c(b)?(this.a=new Of({map:a.map,Ta:this.Ta}),j):l};function Qf(a){a=z(a)?a:{};this.a=z(a.delta)?a.delta:128}D(Qf,Ff);Qf.prototype.ra=function(a){if("key"==a.type){var b=a.a,c=b.za;if(40==c||37==c||39==c||38==c){var d=a.map,e=d.a(),f=e.Q(),g=e.V(),f=f*this.a,i=0,m=0;40==c?m=-f:37==c?i=-f:39==c?i=f:m=f;c=new L(i,m);c.rotate(g);e.aa(d,c,100);b.D();a.D()}}};function Rf(a){a=z(a)?a:{};this.a=z(a.delta)?a.delta:1}D(Rf,Ff);Rf.prototype.ra=function(a){if("key"==a.type){var b=a.a,c=b.hb;if(43==c||45==c){var d=a.map,c=43==c?this.a:-this.a;uf(d);yf(d.a(),d,c,h,100);b.D();a.D()}}};function Sf(){this.a=0;this.c=k;this.d=this.b=h}D(Sf,Ff);Sf.prototype.ra=function(a){if("mousewheel"==a.type){var b=a.map,c=a.a;this.c=a.b();this.a+=c.b/3;z(this.b)||(this.b=qa());var d=Math.max(80-(qa()-this.b),0);v.clearTimeout(this.d);this.d=v.setTimeout(na(this.e,this,b),d);a.D();c.D()}};Sf.prototype.e=function(a){var b=Hb(this.a,-1,1),c=a.a();uf(a);yf(c,a,-b,this.c,250);this.a=0;this.c=k;this.d=this.b=h};function Tf(){this.g=l;this.i={};this.targetTouches=[]}D(Tf,Ff);function Uf(a){for(var b=a.length,c=0,d=0,e=0;ethis.t&&(this.a=j));this.c=c;var a=a.map,c=a.a(),d=Jc(a.b),e=Uf(this.targetTouches);e.x-=d.x;e.y-=d.y;d=bf(a,e);this.a&&vf(c,a,c.V()+b,d)}; -Wf.prototype.d=function(a){if(2>this.targetTouches.length){var a=a.map,b=a.a();this.a&&b.rotate(a,b.V(),h,250);qf(b,-1);return l}return j};Wf.prototype.f=function(a){return 2<=this.targetTouches.length?(a=a.map.a(),this.c=h,this.a=l,this.b=0,qf(a,1),j):l};function Xf(){Tf.call(this)}D(Xf,Tf);Xf.prototype.e=function(a){var b=1,c=this.targetTouches[0],d=this.targetTouches[1],e=c.clientX-d.clientX,c=c.clientY-d.clientY,e=Math.sqrt(e*e+c*c);z(this.a)&&(b=this.a/e);this.a=e;a=a.map;e=a.a();c=Jc(a.b);d=Uf(this.targetTouches);d.x-=c.x;d.y-=c.y;c=bf(a,d);xf(e,a,e.Q()*b,c)};Xf.prototype.d=function(a){if(2>this.targetTouches.length){var a=a.map,b=a.a();b.zoom(a,b.Q(),h,250);qf(b,-1);return l}return j}; -Xf.prototype.f=function(a){return 2<=this.targetTouches.length?(a=a.map.a(),this.a=h,qf(a,1),j):l};function Yf(a,b){var c=z(a)?a:{},d=new N;(z(c.rotate)?c.rotate:1)&&d.push(new Nf(Hf));if(z(c.fe)?c.fe:1)d.push(new Gf(z(c.Ae)?c.Ae:1));(z(c.ke)?c.ke:1)&&d.push(new Vf(new Df(-0.005,0.05,100)));(z(c.le)?c.le:1)&&d.push(new Wf);(z(c.me)?c.me:1)&&d.push(new Xf);(z(c.ge)?c.ge:1)&&d.push(new Lf(If,new Df(-0.005,0.05,100)));if(z(c.he)?c.he:1)d.push(new Qf),d.push(new Rf);(z(c.ie)?c.ie:1)&&d.push(new Sf);(z(c.je)?c.je:1)&&d.push(new Pf(Jf));if(z(b))for(c=0;cc;++c)d[c]=b[c].toFixed(6);c=d.join(",")}else c=b.join(",");c="matrix3d("+c+")";d=a.style;d.WebkitTransform=c;d.MozTransform=c;d.a=c;d.transform=c};function Tg(a,b,c){sg.call(this,a,b);this.target=c}D(Tg,sg);Tg.prototype.s=function(){Xb(this.target);Tg.w.s.call(this)};function Ug(a,b){var c=Tb("DIV");c.className="ol-layer-image";c.style.position="absolute";Tg.call(this,a,b,c);this.b=k;this.c=me()}D(Ug,Tg); -Ug.prototype.ka=function(a){var b=a.v,c=b.center,d=b.resolution,e=b.rotation,f=this.b,g=this.a.$(),i=a.C;!i[0]&&!i[1]&&(b=g.J(a.extent,d,b.projection),b!==k&&(g=b.a,0==g?(vc(b,"change",this.Pb,l,this),hg(b)):2==g&&(f=b)));f!==k&&(g=f.I(),i=f.e,b=ke(),oe(b),se(b,a.size.width/2,a.size.height/2),ue(b,e),te(b,i/d,i/d),se(b,(g.h-c.x)/i,(c.y-g.l)/i),f!=this.b&&(c=gg(f,this),c.style.position="absolute",Vb(this.target),this.target.appendChild(c),this.b=f),qe(b,this.c)||(Sg(this.target,b),ne(this.c,b)),wg(a.attributions, -f.oa()))};function Vg(a,b){var c=Tb("DIV");c.className="ol-layer-tile";c.style.position="absolute";Tg.call(this,a,b,c);this.c=j;this.d=1;this.b={}}D(Vg,Tg); -Vg.prototype.ka=function(a,b){if(b.visible){var c=a.v,d=c.projection,e=this.a.$(),f=A(e).toString(),g=e.tileGrid;g===k&&(g=pg(d));var i=rf(g.a,c.resolution),m=g.a[i],q=c.center,t;m==c.resolution?(q=Ag(q,m,a.size),t=he(q,m,c.rotation,a.size)):t=a.extent;var m=kg(g,t,m),r={};r[i]={};var y=na(e.d,e,r,zg(function(a){return a!==k&&2==a.a},e,g,d)),w,s,x,u,B;for(u=m.h;u<=m.j;++u)for(B=m.k;B<=m.l;++B){x=new ve(i,u,B);w=e.b(x,g,d);s=w.a;if(0==s)yg(a.Wa,e,x),s=ng(g,x),Be(a.ac,w,f,s);else if(1==s)ug(this,w); -else if(2==s){r[i][x.toString()]=w;continue}else if(3==s||4==s)continue;g.b(x,y)}y=Ca(Qa(r),Number);Ma(y);var d={},E;for(w=0;wx&&Wb(this.target,f.target)}else{if(!a.C[0]&&!a.C[1]){s= -kg(f.d,t,f.d.a[f.c.n]);x=[];B=u=h;for(B in f.b)u=f.b[B],s.contains(u.X)||x.push(u);s=h;for(s=0;s=a.ca()){for(var a=this.a,d=0;d>1,a[d].M>c.M)a[b]=a[d],b=d;else break;a[b]=c}p=eh.prototype; -p.remove=function(){var a=this.a,b=a.length,c=a[0];if(!(0>=b)){if(1==b)Fa(a);else{a[0]=a.pop();for(var a=0,b=this.a,d=b.length,e=b[a];a>1;){var f=2*a+1,g=2*a+2,f=ge.M)break;b[a]=b[f];a=f}b[a]=e}return c.Y}};p.O=function(){for(var a=this.a,b=[],c=a.length,d=0;dc;++c)d=b.remove(),mh(a,d)},b,s));I?(this.b=y,this.z=w):(this.z=this.b=k,a.S= -j)}xg(a.Va,f,m,y);rg(f,m,r,i);vg(a,f);oe(this.d);se(this.d,(t.x-w.h)/(w.j-w.h),(t.y-w.k)/(w.l-w.k));ue(this.d,d.rotation);te(this.d,a.size.width*d.resolution/(w.j-w.h),a.size.height*d.resolution/(w.l-w.k));se(this.d,-0.5,-0.5)};function nh(){this.o=0;this.c={};this.b=this.a=k}p=nh.prototype;p.clear=function(){this.o=0;this.c={};this.b=this.a=k};function lh(a,b){return a.c.hasOwnProperty(b)}p.forEach=function(a,b){for(var c=this.a;c!==k;)a.call(b,c.Y,c.M,this),c=c.W};function oh(a,b){var c=a.c[b];if(c===a.b)return c.Y;c===a.a?(a.a=a.a.W,a.a.la=k):(c.W.la=c.la,c.la.W=c.W);c.W=k;c.la=a.b;a.b.W=c;a.b=c;return c.Y}p.ca=n("o");p.Z=function(){var a=Array(this.o),b=0,c;for(c=this.b;c!==k;c=c.la)a[b++]=c.M;return a}; -p.O=function(){var a=Array(this.o),b=0,c;for(c=this.b;c!==k;c=c.la)a[b++]=c.Y;return a};p.pop=function(){var a=this.a;delete this.c[a.M];a.W!==k&&(a.W.la=k);this.a=a.W;this.a===k&&(this.b=k);--this.o;return a.Y};function ph(a,b,c){c={M:b,W:k,la:a.b,Y:c};a.b===k?a.a=c:a.b.W=c;a.b=c;a.c[b]=c;++a.o};var qh=["webgl","webgl-experimental","webkit-3d","moz-webgl"];function rh(a,b){var c,d,e=qh.length;for(d=0;d>1)-1;0<=b;b--)De(a,b);for(var a=this.K,m;0b?(d="\u2032",a*=60):d="\u00b0":"imperial"==this.c?0.9144>b?(d="in",a/=0.0254):1609.344>b?(d="ft",a/=0.3048):(d="mi",a/=1609.344):"nautical"==this.c?(a/=1852,d="nm"):"metric"==this.c?1>b?(d="mm",a*=1E3):1E3>b?d="m":(d="km",a/=1E3):"us"==this.c&&(0.9144>b?(d="in",a*=39.37):1609.344>b?(d="ft",a/=0.30480061):(d="mi",a/=1609.3472));for(var b=3*Math.floor(Math.log(this.i*a)/Math.log(10)),e,f;;){e=Lh[b%3]*Math.pow(10,Math.floor(b/3));f=Math.round(e/a);if(f>=this.i)break;++b}e=e+d;this.u!=e&& -(this.u=this.g.innerHTML=e);this.G!=f&&(this.g.style.width=f+"px",this.G=f);this.f||(Mc(this.t,j),this.f=j)}};Kh.prototype.a=function(a){this.e!==k&&(F(this.e,J),this.e=k);Kh.w.a.call(this,a);a!==k&&(this.e=[H(a,"postrender",this.z,l,this)])};function Mh(){this.a={}}D(Mh,Ff);Mh.prototype.b=function(a,b){var c;for(c=0;c=Math.abs(a+c)?0:a+c}};var wg={Rb:function(a){a<1/2.75?a*=7.5625*a:a<2/2.75?(a-=1.5/2.75,a=7.5625*a*a+0.75):a<2.5/2.75?(a-=2.25/2.75,a=7.5625*a*a+0.9375):(a-=2.625/2.75,a=7.5625*a*a+0.984375);return a},Ed:function(a){return a*a*a},Oa:function(a){return 1-Math.pow(1-a,3)},Fd:function(a){return Math.pow(2,-10*a)*Math.sin((a-0.075)*2*Math.PI/0.3)+1},Ja:function(a){return 3*a*a-2*a*a*a},Uc:ba(),pd:function(a){return 0.5>a?wg.Ja(2*a):1-wg.Ja(2*(a-0.5))}};var xg={Rb:function(a){var b=a.resolution,c=x(a.start)?a.start:ta(),d=x(a.duration)?a.duration:1E3,e=x(a.easing)?a.easing:wg.pd;return function(a,h){if(h.timeb-a.f;)d--;if(0<=d){var b=a.a[d],c=a.a[c],d=c.x-b.x,e=c.y-b.y;a.c=Math.atan2(e,d);a.b=Math.sqrt(d*d+e*e)/(c.$a-b.$a);return a.b>a.d}return l}Hg.prototype.ia=function(a){var b=this.e,c=this.b,d=this.d,e=Math.log(this.d/this.b)/this.e;return xg.ia({source:a,duration:e,easing:function(a){return c*(Math.exp(b*a*e)-1)/(d-c)}})};function Jg(){};function Kg(a){this.a=a}D(Kg,Jg);Kg.prototype.Ea=function(a){var b=a.a;if(a.type==ig&&(Ee||Gc(a.a))){var c=a.map,d=a.d(),e=a.a.Ca?-this.a:this.a;Cg(c.a(),c,e,d,250);a.A();b.A()}};function Lg(a){return a.na&&!a.Gb&&a.Ca}function Mg(a){return!a.na&&!a.Gb&&!a.Ca}function Ng(a){return!a.na&&!a.Gb&&a.Ca};function Og(){this.c=l;this.s=this.i=this.e=this.d=0;this.Za=this.f=k}D(Og,Jg);p=Og.prototype;p.$b=da;p.sb=da;p.tb=ie;p.Rc=da;p.Ea=function(a){var b=a.map;if(b.Va()){var b=b.a(),c=a.a;a.type==lg&&this.Rc(a);this.c?a.type==ng?(this.O=c.clientX-this.d,this.N=c.clientY-this.e,this.$b(a)):a.type==kg&&(this.O=c.clientX-this.d,this.N=c.clientY-this.e,this.sb(a),this.c=l):a.type==mg&&(this.d=c.clientX,this.e=c.clientY,this.N=this.O=0,this.f=b.R(),this.Za=a.d(),this.tb(a)&&(this.c=i,a.A()))}};function Pg(a,b){Og.call(this);this.g=a;this.a=b;this.b=k}D(Pg,Og);Pg.prototype.$b=function(a){this.a&&this.a.a.push({x:a.a.clientX,y:a.a.clientY,$a:ta()});var a=a.map,b=a.a(),c=b.S(),d=b.ca(),c=new L(-c*this.O,c*this.N);c.rotate(d);d=new L(this.f.x+c.x,this.f.y+c.y);yg(a);b.a(d)}; +Pg.prototype.sb=function(a){var b=a.map,a=b.a();tg(a,-1);if(this.a&&Ig(this.a)){var c=(this.a.d-this.a.b)/this.a.e,d=this.a.c,e=a.R();this.b=this.a.ia(e);b.ra(this.b);e=Qg(b,e);b=fg(b,new dg(e.x-c*Math.cos(d),e.y-c*Math.sin(d)));a.a(b)}};Pg.prototype.tb=function(a){var b=a.a;if(this.g(b)){if(this.a){var c=this.a;c.a.length=0;c.c=0;c.b=0;this.a.a.push({x:b.clientX,y:b.clientY,$a:ta()})}a=a.map;yg(a);tg(a.a(),1);return i}return l}; +Pg.prototype.Rc=function(a){var b=a.map,c=b.a();this.b!==k&&Ma(b.i,this.b)&&(yg(b),c.a(a.c.v.center),this.b=k)};function Rg(a){Og.call(this);this.b=a}D(Rg,Og);Rg.prototype.$b=function(a){var b=a.map,c=b.f(),a=gg(a),c=Math.atan2(c.height/2-a.y,a.x-c.width/2);if(x(this.a)){var a=c-this.a,d=b.a();yg(b);zg(d,b,d.ca()-a)}this.a=c};Rg.prototype.sb=function(a){var a=a.map,b=a.a();b.rotate(a,b.ca(),g,250);tg(b,-1)};Rg.prototype.tb=function(a){var b=a.a;return Gc(b)&&this.b(b)?(a=a.map,b=a.a(),yg(a),this.a=g,tg(b,1),i):l};function Sg(a){var b=dc("DIV","ol-dragbox");this.c=k;this.e=a.Za;this.d=k;Dg.call(this,{element:b,map:a.map})}D(Sg,Dg);Sg.prototype.a=function(a){this.d!==k&&(J(this.d),this.d=k);a!==k&&(this.c=Qg(a,this.e),bd(this.element,this.c),nd(this.element,new Qe(0,0)),this.d=I(a,ng,this.f,l,this));Sg.z.a.call(this,a)};Sg.prototype.f=function(a){var b=this.b,a=a.d(),b=Qg(b,a);bd(this.element,new dg(Math.min(b.x,this.c.x),Math.min(b.y,this.c.y)));nd(this.element,new Qe(Math.abs(b.x-this.c.x),Math.abs(b.y-this.c.y)))};function Tg(a){Og.call(this);this.b=a;this.a=k}D(Tg,Og);Tg.prototype.sb=function(a){this.a.a(k);this.a=k;if(64<=this.O*this.O+this.N*this.N){var b=a.map,c=Te(this.Za,a.d());Ag(b,function(){var a=b.a(),e=b.f();a.f(c,e);a.d(0)})}};Tg.prototype.tb=function(a){var b=a.a;return Gc(b)&&this.b(b)?(this.a=new Sg({map:a.map,Za:this.Za}),i):l};function Ug(a){a=x(a)?a:{};this.a=x(a.delta)?a.delta:128}D(Ug,Jg);Ug.prototype.Ea=function(a){if("key"==a.type){var b=a.a,c=b.Ia;if(40==c||37==c||39==c||38==c){var d=a.map,e=d.a(),f=e.S(),h=e.ca(),f=f*this.a,j=0,m=0;40==c?m=-f:37==c?j=-f:39==c?j=f:m=f;c=new L(j,m);c.rotate(h);e.ia(d,c,100);b.A();a.A()}}};function Vg(a){a=x(a)?a:{};this.a=x(a.delta)?a.delta:1}D(Vg,Jg);Vg.prototype.Ea=function(a){if("key"==a.type){var b=a.a,c=b.pb;if(43==c||45==c){var d=a.map,c=43==c?this.a:-this.a;yg(d);Cg(d.a(),d,c,g,100);b.A();a.A()}}};function Wg(){this.a=0;this.c=k;this.d=this.b=g}D(Wg,Jg);Wg.prototype.Ea=function(a){if("mousewheel"==a.type){var b=a.map,c=a.a;this.c=a.d();this.a+=c.N/3;x(this.b)||(this.b=ta());var d=Math.max(80-(ta()-this.b),0);r.clearTimeout(this.d);this.d=r.setTimeout(ra(this.e,this,b),d);a.A();c.A()}};Wg.prototype.e=function(a){var b=Rb(this.a,-1,1),c=a.a();yg(a);Cg(c,a,-b,this.c,250);this.a=0;this.c=k;this.d=this.b=g};function Xg(){this.g=l;this.i={};this.targetTouches=[]}D(Xg,Jg);function Yg(a){for(var b=a.length,c=0,d=0,e=0;ethis.s&&(this.a=i));this.c=c;var a=a.map,c=a.a(),d=hd(a.b),e=Yg(this.targetTouches);e.x-=d.x;e.y-=d.y;d=fg(a,e);this.a&&zg(c,a,c.ca()+b,d)}; +$g.prototype.d=function(a){if(2>this.targetTouches.length){var a=a.map,b=a.a();this.a&&b.rotate(a,b.ca(),g,250);tg(b,-1);return l}return i};$g.prototype.f=function(a){return 2<=this.targetTouches.length?(a=a.map.a(),this.c=g,this.a=l,this.b=0,tg(a,1),i):l};function ah(){Xg.call(this)}D(ah,Xg);ah.prototype.e=function(a){var b=1,c=this.targetTouches[0],d=this.targetTouches[1],e=c.clientX-d.clientX,c=c.clientY-d.clientY,e=Math.sqrt(e*e+c*c);x(this.a)&&(b=this.a/e);this.a=e;a=a.map;e=a.a();c=hd(a.b);d=Yg(this.targetTouches);d.x-=c.x;d.y-=c.y;c=fg(a,d);Bg(e,a,e.S()*b,c)};ah.prototype.d=function(a){if(2>this.targetTouches.length){var a=a.map,b=a.a();b.zoom(a,b.S(),g,250);tg(b,-1);return l}return i}; +ah.prototype.f=function(a){return 2<=this.targetTouches.length?(a=a.map.a(),this.a=g,tg(a,1),i):l};function bh(a,b){var c=x(a)?a:{},d=new N;(x(c.rotate)?c.rotate:1)&&d.push(new Rg(Lg));if(x(c.Ce)?c.Ce:1)d.push(new Kg(x(c.$e)?c.$e:1));(x(c.He)?c.He:1)&&d.push(new Zg(new Hg(-0.005,0.05,100)));(x(c.Ie)?c.Ie:1)&&d.push(new $g);(x(c.Je)?c.Je:1)&&d.push(new ah);(x(c.De)?c.De:1)&&d.push(new Pg(Mg,new Hg(-0.005,0.05,100)));if(x(c.Ee)?c.Ee:1)d.push(new Ug),d.push(new Vg);(x(c.Fe)?c.Fe:1)&&d.push(new Wg);(x(c.Ge)?c.Ge:1)&&d.push(new Tg(Ng));if(x(b))for(c=0;cb.d&&(j=b.a.length,0!==j))for(var q=Math.ceil(j/2),m=h=g,v=0;vthis.d&&!(b=this.a.U,c=b.fa.n.toString(),c in a&&a[c].contains(b.fa));)this.pop()};function ej(a,b){this.a=k;var c=b;x(c)||(c=a[0].length,c=new wi({P:c}));this.a=c;this.b=xi(c,a);this.P=c.a;this.e=k}D(ej,zi);ej.prototype.J=function(){return this.a.J(this.b)};ej.prototype.d=function(){if(this.e===k){var a=this.P,b=this.a,c=this.b,d=b.J(c),e=b.d[c],d=e+d*a,b=b.b,f,h,j,m,q,c=f=b[e];h=j=b[e+1];for(q=e+a;qf&&(f=e),mj&&(j=m);this.e=new O(c,h,f,j)}return this.e};ej.prototype.c=ca("linestring");function fj(){this.bounds=this.b=this.a=k}D(fj,zi);fj.prototype.d=function(){if(this.bounds===k){var a,b=a=Number.POSITIVE_INFINITY,c,d=c=Number.NEGATIVE_INFINITY,e=this.b,f=e.length,h,j;for(j=0;j=oc;++oc)Pd=hk[oc],Pd instanceof Pi?ph=Pd:Pd instanceof Oi&&(qh=Pd);qh&&ph&&(Wb=Ii(Od.b,qh.I(), +ph.b))}}if(!x(Wb)){var ik=Od.a,rh=g,Wb={};for(oc in ik)rh=ik[oc],Cb.a(rh)===i&&(Wb[oc]=rh)}}else Wb=Od.a;Sm(Tm,Wb)}wa[Ia]=S}for(nc in ea){var jk=ea[nc],Qd={},Rd=[],kk=e.Pb,lk=g,jf=g,mk=g,kf=g,Sd=g,nk=g,Td=g,sh=g,lf=g;for(lk in jk){var mf=kf=jk[lk],th=k;if(mf.b!==k)for(var ok=mf.b.length,th=Array(ok),nf=0;nfthis.b.d;)this.b.pop();this.e=l};var Hj=128;function Ij(a,b){ki.call(this,a,b);this.f=new Qe(a.clientHeight,a.clientWidth);this.c=fc("CANVAS");this.c.height=this.f.height;this.c.width=this.f.width;this.c.className="ol-unselectable";ic(a,this.c);this.g=i;this.i=this.c.getContext("2d")}D(Ij,ki);Ij.prototype.gb=function(a){return a instanceof ui?new Yi(this,a):a instanceof vi?new Zi(this,a):a instanceof Vi?new Gj(this,a):k};Ij.prototype.kb=n("c"); +Ij.prototype.Eb=function(a){if(a===k)this.g&&(ld(this.c,l),this.g=l);else{var b=a.size;this.f.width==b.width&&this.f.height==b.height||(this.c.width=b.width,this.c.height=b.height,this.f=b);var c=this.i;c.setTransform(1,0,0,1,0,0);var d=a.backgroundColor;c.fillStyle="rgb("+d.c.toFixed(0)+","+d.b.toFixed(0)+","+d.a.toFixed(0)+")";c.globalAlpha=1;c.fillRect(0,0,b.width,b.height);ni(a);F(a.zb,function(b){var d=a.yb[z(b)];if(d.visible)if(d.Ib){var h=oi(this,b);h.oa(a,d);b=h.M();b!==k&&(h=h.Ub(),c.setTransform(h[0], +h[1],h[4],h[5],h[12],h[13]),c.globalAlpha=d.opacity,c.drawImage(b,0,0))}else a.$=i},this);this.g||(ld(this.c,i),this.g=i)}};var Jj=function(){if(!("HTMLCanvasElement"in r))return l;try{return fc("CANVAS").getContext("2d")!==k}catch(a){return l}}();function Kj(a,b){var c;if(x(6)){var d=Array(16);for(c=0;16>c;++c)d[c]=b[c].toFixed(6);c=d.join(",")}else c=b.join(",");c="matrix3d("+c+")";d=a.style;d.WebkitTransform=c;d.MozTransform=c;d.a=c;d.transform=c};function Lj(a,b,c){bi.call(this,a,b);this.target=c}D(Lj,bi);Lj.prototype.r=function(){jc(this.target);Lj.z.r.call(this)};function Mj(a,b){var c=fc("DIV");c.className="ol-layer-image";c.style.position="absolute";Lj.call(this,a,b,c);this.b=k;this.c=Ze()}D(Mj,Lj); +Mj.prototype.oa=function(a){var b=a.v,c=b.center,d=b.resolution,e=b.rotation,f=this.b,h=this.a.da(),j=a.F;!j[0]&&!j[1]&&(b=h.M(a.extent,d,b.projection),b!==k&&(h=b.a,0==h?(Oc(b,"change",this.ac,l,this),lh(b)):2==h&&(f=b)));f!==k&&(h=f.I(),j=f.e,b=Xe(),af(b),ef(b,a.size.width/2,a.size.height/2),xf(b,e),ff(b,j/d,j/d),ef(b,(h.h-c.x)/j,(c.y-h.k)/j),f!=this.b&&(c=kh(f,this),c.style.position="absolute",hc(this.target),this.target.appendChild(c),this.b=f),cf(b,this.c)||(Kj(this.target,b),$e(this.c,b)),fi(a.attributions, +f.za()))};function Nj(a,b){var c=fc("DIV");c.className="ol-layer-tile";c.style.position="absolute";Lj.call(this,a,b,c);this.c=i;this.d=1;this.b={}}D(Nj,Lj); +Nj.prototype.oa=function(a,b){if(b.visible){var c=a.v,d=c.projection,e=this.a.da(),f=z(e).toString(),h=e.tileGrid;h===k&&(h=Yh(d));var j=ug(h.a,c.resolution),m=h.a[j],q=c.center,v;m==c.resolution?(q=ji(q,m,a.size),v=Ue(q,m,c.rotation,a.size)):v=a.extent;var m=Th(h,v,m),s={};s[j]={};var A=ra(e.e,e,s,ii(function(a){return a!==k&&2==a.a},e,h,d)),u,t,y,w,B;for(w=m.h;w<=m.j;++w)for(B=m.l;B<=m.k;++B){y=new yf(j,w,B);u=e.b(y,h,d);t=u.a;if(0==t)hi(a.bb,e,y),t=Wh(h,y),Ef(a.mc,u,f,t);else if(1==t)di(this,u); +else if(2==t){s[j][y.toString()]=u;continue}else if(3==t||4==t)continue;h.b(y,A)}A=Ga(Wa(s),Number);Sa(A);var d={},E;for(u=0;uy&&ic(this.target,f.target)}else{if(!a.F[0]&&!a.F[1]){t= +Th(f.c,v,f.c.a[f.d.n]);y=[];B=w=g;for(B in f.b)w=f.b[B],t.contains(w.fa)||y.push(w);t=g;for(t=0;t=a.J()){for(var a=this.a,d=0;d>1,a[d].Q>c.Q)a[b]=a[d],b=d;else break;a[b]=c}p=Xj.prototype; +p.remove=function(){var a=this.a,b=a.length,c=a[0];if(!(0>=b)){if(1==b)La(a);else{a[0]=a.pop();for(var a=0,b=this.a,d=b.length,e=b[a];a>1;){var f=2*a+1,h=2*a+2,f=he.Q)break;b[a]=b[f];a=f}b[a]=e}return c.U}};p.W=function(){for(var a=this.a,b=[],c=a.length,d=0;dc;++c)d=b.remove(),Hk(a,d)},b,t));H?(this.b=A,this.w=u):(this.w=this.b=k, +a.$=i)}gi(a.ab,f,m,A);ai(f,m,s,j);ei(a,f);af(this.d);ef(this.d,(v.x-u.h)/(u.j-u.h),(v.y-u.l)/(u.k-u.l));xf(this.d,d.rotation);ff(this.d,a.size.width*d.resolution/(u.j-u.h),a.size.height*d.resolution/(u.k-u.l));ef(this.d,-0.5,-0.5)};var Ik=["webgl","webgl-experimental","webkit-3d","moz-webgl"];function Jk(a,b){var c,d,e=Ik.length;for(d=0;d>1)-1;0<=b;b--)Gf(a,b);for(var a=this.G,m;0b?(d="\u2032",a*=60):d="\u00b0":"imperial"==this.c?0.9144>b?(d="in",a/=0.0254):1609.344>b?(d="ft",a/=0.3048):(d="mi",a/=1609.344):"nautical"==this.c?(a/=1852,d="nm"):"metric"==this.c?1>b?(d="mm",a*=1E3):1E3>b?d="m":(d="km",a/=1E3):"us"==this.c&&(0.9144>b?(d="in",a*=39.37):1609.344>b?(d="ft",a/=0.30480061):(d="mi",a/=1609.3472));for(var b=3*Math.floor(Math.log(this.i*a)/Math.log(10)),e,f;;){e=cl[b%3]*Math.pow(10,Math.floor(b/3));f=Math.round(e/a);if(f>=this.i)break;++b}e=e+d;this.t!=e&& +(this.t=this.g.innerHTML=e);this.B!=f&&(this.g.style.width=f+"px",this.B=f);this.f||(ld(this.s,i),this.f=i)}};bl.prototype.a=function(a){this.e!==k&&(F(this.e,J),this.e=k);bl.z.a.call(this,a);a!==k&&(this.e=[I(a,"postrender",this.w,l,this)])};function dl(a){tc.call(this);this.b=a;this.a=[]}D(dl,tc);var el=[];function fl(a,b,c,d,e){ha(c)||(el[0]=c,c=el);for(var f=0;fthis.Sc)if(K(this,new ll("start",this,a.clientX,a.clientY,a)))this.Da=i;else{this.hc||this.ib(a);return}}c=pl(this,b,c);b=c.x;c=c.y;this.Da&&K(this,new ll("beforedrag",this,a.clientX,a.clientY,a,b,c))&&(ql(this,a,b,c),a.A())}}; +function pl(a,b,c){var d=mc(Vb(a.c)),b=b+(d.x-a.e.x),c=c+(d.y-a.e.y);a.e=d;a.O+=b;a.N+=c;b=ml(a,a.O);a=nl(a,a.N);return new Tb(b,a)}p.Ke=function(a){var b=pl(this,0,0);a.clientX=this.clientX;a.clientY=this.clientY;ql(this,a,b.x,b.y)};function ql(a,b,c,d){a.oc&&jl(a)?a.target.style.right=c+"px":a.target.style.left=c+"px";a.target.style.top=d+"px";K(a,new ll("drag",a,b.clientX,b.clientY,b,c,d))} +function ml(a,b){var c=a.b,d=!isNaN(c.left)?c.left:k,c=!isNaN(c.width)?c.width:0;return Math.min(d!=k?d+c:Infinity,Math.max(d!=k?d:-Infinity,b))}function nl(a,b){var c=a.b,d=!isNaN(c.top)?c.top:k,c=!isNaN(c.height)?c.height:0;return Math.min(d!=k?d+c:Infinity,Math.max(d!=k?d:-Infinity,b))}function ll(a,b,c,d,e,f,h,j){zc.call(this,a);this.clientX=c;this.clientY=d;this.d=e;this.left=x(f)?f:b.O;this.top=x(h)?h:b.N;this.c=b;this.a=!!j}D(ll,zc);function rl(a){this.s=x(a.maxResolution)?a.maxResolution:156543.0339;this.g=x(a.minResolution)?a.minResolution:0.5971642833948135;this.t=this.s-this.g;this.d=sl;this.e=this.f=k;var b=dc("DIV","ol-zoomslider ol-unselectable",dc("DIV","ol-zoomslider-thumb ol-unselectable"));this.e!==k&&(F(this.e,J),this.e=k);var c=new hl(b.childNodes[0]);this.e=[I(c,["drag","end"],this.G,g,this)];this.i=c;I(b,["touchend","click"],this.w,l,this);Dg.call(this,{element:b,map:a.map})}D(rl,Dg);var sl=0; +rl.prototype.a=function(a){rl.z.a.call(this,a);this.c=a.a().S();this.f!==k&&(F(this.f,J),this.f=k);this.b!==k&&(this.f=[I(this.b,"postrender",this.B,g,this)]);var b=this.element,a=b.firstElementChild!=g?b.firstElementChild:kc(b.firstChild);var c=$b(b),d=G&&b.currentStyle;d&&lc(Vb(c))&&"auto"!=d.width&&"auto"!=d.height&&!d.boxSizing?(c=qd(b,d.width,"width","pixelWidth"),b=qd(b,d.height,"height","pixelHeight"),b=new Ub(c,b)):(d=new Ub(b.offsetWidth,b.offsetHeight),c=od(b,"padding"),b=pd(b),b=new Ub(d.width- +b.left-c.left-c.right-b.right,d.height-b.top-c.top-c.bottom-b.bottom));var d=fd(a),c=jd(a),d=new Zc(d.x,d.y,c.width,c.height),c=od(a,"margin"),e=pd(a),a=b.width-c.left-c.right-e.left-e.right-d.width,d=b.height-c.top-c.bottom-e.top-e.bottom-d.height;b.width>b.height?(this.d=1,a=new Zc(0,0,a,0)):(this.d=sl,a=new Zc(0,0,0,d));this.i.b=a||new Zc(NaN,NaN,NaN,NaN);tl(this,this.c)};rl.prototype.B=function(a){a=a.c.v.resolution;a!==this.c&&(this.c=a,tl(this,a))};rl.prototype.w=function(){}; +function tl(a,b){var c=(Rb(b,a.g,a.s)-a.g)/a.t,d=a.i,e=a.element.firstElementChild!=g?a.element.firstElementChild:kc(a.element.firstChild);1==a.d?bd(e,d.b.left+d.b.width*c):bd(e,d.b.left,d.b.top+d.b.height*c)}rl.prototype.G=function(a){var b=this.b,c=this.i.b,d=0,d=1===this.d?(a.left-c.left)/c.width:(a.top-c.top)/c.height,a=Rb(d,0,1),a=this.g+this.t*a;a!==this.c&&(this.c=a,b.a().b(a))};function ul(){this.a={}}D(ul,Jg);ul.prototype.b=function(a,b){var c;for(c=0;cthis.d&&!(b=this.a.Y,c=b.X.n.toString(),c in a&&a[c].contains(b.X));)this.pop()};function yi(a){qg.call(this,{attributions:a.attributions,extent:a.extent,opaque:a.opaque,projection:a.projection,tileGrid:a.tileGrid});this.ba=z(a.ba)?a.ba:ui;this.G=z(a.crossOrigin)?a.crossOrigin:"anonymous";this.a=new xi}D(yi,qg);yi.prototype.g=function(){return this.a.ca()>this.a.d};yi.prototype.Ja=function(a){this.a.Ja(a)};yi.prototype.b=function(a,b,c){var d=a.toString();if(lh(this.a,d))return oh(this.a,d);b=this.ba(a,b,c);a=new wi(a,z(b)?0:4,z(b)?b:"",this.G);ph(this.a,d,a);return a}; -yi.prototype.r=function(a){a=a.toString();lh(this.a,a)&&oh(this.a,a)};function zi(a){var b=Array(a.maxZoom+1),c,d=2*ag/256;for(c=0;c<=a.maxZoom;++c)b[c]=d/Math.pow(2,c);ig.call(this,{origin:new L(-ag,ag),resolutions:b,tileSize:new de(256,256)})}D(zi,ig);zi.prototype.b=function(a,b,c){for(var d=a.x,e=a.y,a=a.n,f;;){a-=1;if(0>a)break;d>>=1;e>>=1;f=new xe(d,e,d,e);if(b.call(c,a,f))break}};function Ai(a){yi.call(this,{opaque:j,projection:Ve("EPSG:3857")});this.gd=z(a.culture)?a.culture:"en-us";this.i=l;var b=new Zc("//dev.virtualearth.net/REST/v1/Imagery/Metadata/"+a.style),b=new oi(b),a={include:"ImageryProviders",key:a.key},c=na(this.u,this),a=a||k,d="_"+(pi++).toString(36)+qa().toString(36);v._callbacks_||(v._callbacks_={});var e=b.b.T();if(a)for(var f in a)(!a.hasOwnProperty||a.hasOwnProperty(f))&&md(e,f,a[f]);c&&(v._callbacks_[d]=function(a){qi(d,j);c.apply(h,arguments)},md(e, -b.a,"_callbacks_."+d));f=ii(e.toString(),{timeout:b.Cb,jc:j});f.a.push([k,function(){qi(d,l)},h]);f.na&&ei(f)}D(Ai,yi); -Ai.prototype.u=function(a){var b=a.resourceSets[0].resources[0],c=b.zoomMin,d=b.zoomMax,e=new zi({maxZoom:d,tileSize:new de(b.imageWidth,b.imageHeight)});this.tileGrid=e;this.ba=vi(function(a){if(a.ne||b<=e?k:new ve(a.n,Ib(a.x,b),e)},si(Ca(b.imageUrlSubdomains,function(a){var c=b.imageUrl.replace("{subdomain}",a).replace("{culture}",this.gd);return function(a){return a===k?h:c.replace("{quadkey}",we(a))}})));var f=Le(Ve("EPSG:4326"),this.f);this.e= -Ca(b.imageryProviders,function(a){var b=a.attribution,c={};F(a.coverageAreas,function(a){var b=a.zoomMin,d=a.zoomMax,a=a.bbox,a=(new P(a[1],a[0],a[3],a[2])).transform(f),g,i;for(g=b;g<=d;++g)i=g.toString(),b=kg(e,a,e.a[g]),i in c?c[i].push(b):c[i]=[b]});return new ye(b,c)});this.i=j;K(this,"load")};Ai.prototype.c=n("i");function Bi(a,b){ze.call(this,a,2);this.e=a;this.d=og(b,a.n);this.c={}}D(Bi,ze);Bi.prototype.J=function(a){a=z(a)?A(a):-1;if(a in this.c)return this.c[a];var b=this.d,c=Tb("CANVAS");c.width=b.width;c.height=b.height;var d=c.getContext("2d");d.strokeStyle="black";d.strokeRect(0.5,0.5,b.width+0.5,b.height+0.5);d.fillStyle="black";d.textAlign="center";d.textBaseline="middle";d.font="24px sans-serif";d.fillText(this.e.toString(),b.width/2,b.height/2);return this.c[a]=c}; -function Ci(a){qg.call(this,{extent:a.extent,opaque:l,projection:a.projection,tileGrid:a.tileGrid});this.a=new xi}D(Ci,qg);Ci.prototype.g=function(){return this.a.ca()>this.a.d};Ci.prototype.Ja=function(a){this.a.Ja(a)};Ci.prototype.b=function(a){var b=a.toString();if(lh(this.a,b))return oh(this.a,b);a=new Bi(a,this.tileGrid);ph(this.a,b,a);return a};function Di(a){var b=a.projection||Ve("EPSG:3857"),c=ui;z(a.ba)?c=a.ba:z(a.urls)?c=si(Ca(a.urls,ri)):z(a.url)&&(c=ri(a.url));var d=new zi({maxZoom:a.maxZoom}),e=a.extent,c=e!=k?vi(function(b){if(a.maxZoomi||c<=i)return k;c=Ib(b.x,c);return!fe(jg(d,new ve(b.n,c,b.y)),e)?k:new ve(b.n,c,i)},c):vi(function(b){if(a.maxZoomd||c<=d?k:new ve(b.n,Ib(b.x,c),d)},c);yi.call(this,{attributions:a.attributions,crossOrigin:a.crossOrigin, -extent:a.extent,projection:b,tileGrid:d,ba:c})}D(Di,yi);function Ei(){Di.call(this,{attributions:[new ye('Tiles Courtesy of MapQuest '),new ye('Data © OpenStreetMap contributors, CC BY-SA')],opaque:j,maxZoom:28,url:"http://otile{1-4}.mqcdn.com/tiles/1.0.0/osm/{z}/{x}/{y}.jpg"})}D(Ei,Di); -function Fi(){Di.call(this,{attributions:[new ye('Tiles Courtesy of MapQuest '),new ye("Portions Courtesy NASA/JPL-Caltech and U.S. Depart. of Agriculture, Farm Service Agency")],maxZoom:18,opaque:j,url:"http://oatile{1-4}.mqcdn.com/tiles/1.0.0/sat/{z}/{x}/{y}.jpg"})}D(Fi,Di);function Gi(){Di.call(this,{attributions:[new ye('© OpenStreetMap contributors, CC BY-SA')],opaque:j,maxZoom:18,url:"http://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png"})}D(Gi,Di);function Hi(a){Jg.call(this,{attributions:a.attributions,crossOrigin:a.crossOrigin,extent:a.extent,projection:a.projection,resolutions:a.resolutions,Na:z(a.url)?Hg(a.url,a.params):Ig});this.b=k;this.g=1.5}D(Hi,Jg);Hi.prototype.J=function(a,b,c){this.a===k||(b=this.a[rf(this.a,b)]);var d=this.b;if(d!==k&&d.e==b&&d.I().lc(a))return d;var d=a=new P(a.h,a.k,a.j,a.l),e=this.g,f=d.ha()/2*(e-1),e=d.da()/2*(e-1);d.h-=f;d.k-=e;d.j+=f;d.l+=e;return this.b=Kg(this,a,b,new de(a.ha()/b,a.da()/b),c)};var Ii={terrain:{U:"jpg",opaque:j},"terrain-background":{U:"jpg",opaque:j},"terrain-labels":{U:"png",opaque:l},"terrain-lines":{U:"png",opaque:l},"toner-background":{U:"png",opaque:j},toner:{U:"png",opaque:j},"toner-hybrid":{U:"png",opaque:l},"toner-labels":{U:"png",opaque:l},"toner-lines":{U:"png",opaque:l},"toner-lite":{U:"png",opaque:j},watercolor:{U:"jpg",opaque:j}},Ji={terrain:{minZoom:4,maxZoom:18},toner:{minZoom:0,maxZoom:20},watercolor:{minZoom:3,maxZoom:16}},Ki=[new ye('Map tiles by Stamen Design, under CC BY 3.0. Data by OpenStreetMap, under CC BY SA.')]; -function Li(a){var b=a.layer.indexOf("-"),b=-1==b?a.layer:a.layer.slice(0,b),c=Ii[a.layer];Di.call(this,{attributions:Ki,maxZoom:Ji[b].maxZoom,opaque:c.opaque,url:z(a.url)?a.url:"http://{a-d}.tile.stamen.com/"+a.layer+"/{z}/{x}/{y}."+c.U})}D(Li,Di);function Mi(a){var b=a.url,c=a.imageExtent,d=a.imageSize,e=c.da()/d.height,f=Ve(a.projection);Jg.call(this,{attributions:a.attributions,crossOrigin:a.crossOrigin,extent:a.extent,projection:a.projection,Na:function(){return b},resolutions:[e]});this.b=Kg(this,c,e,d,f)}D(Mi,Jg);Mi.prototype.J=function(a){return fe(a,this.b.I())?this.b:k};var Ni=[];C("grid",function(a){Ni.push(a)});function Oi(a){yi.call(this,{projection:Ve("EPSG:3857")});this.i=l;a=this.u=ii(a.uri,{jc:j});a.a.push([this.z,k,this]);a.na&&ei(a)}D(Oi,yi); -Oi.prototype.z=function(){var a=Ni.pop(),b=Ve("EPSG:4326"),c,d;z(a.bounds)?(c=a.bounds,c=new P(c[0],c[1],c[2],c[3]),this.t=d=c.transform(Le(b,this.f))):d=c=k;var e=a.minzoom||0,f=a.maxzoom||22,g=new zi({maxZoom:f});this.tileGrid=g;this.ba=vi(function(a){if(a.nc||b<=c)return k;b=Ib(a.x,b);return d!==k&&!fe(jg(g,new ve(a.n,b,a.y)),d)?k:new ve(a.n,b,c)},si(Ca(a.tiles,ri)));if(z(a.attribution)){b=d===k?b.I():d;c={};var i,m;for(i=e;i<=f;++i)m=i.toString(), -c[m]=[kg(g,b,g.a[i])];this.e=[new ye(a.attribution,c)]}this.i=j;K(this,"load")};Oi.prototype.c=n("i");function Pi(a){var b;a.urls?(b=Ca(a.urls,function(b){return ti(b,a.params)}),b=si(b)):b=a.url?ti(a.url,a.params):ui;var c=a.extent;yi.call(this,{attributions:a.attributions,crossOrigin:a.crossOrigin,extent:c,tileGrid:a.tileGrid,opaque:!(z(a.params.TRANSPARENT)?a.params.TRANSPARENT:1),projection:a.projection,ba:vi(function(a,b,f){if(b.fb().length<=a.n)return k;var g=a.x,i=jg(b,a),m=f.I();c=z(c)?c:m;c!==k&&(f.Lb&&c.h===m.h&&c.j===m.j)&&(f=Math.ceil((c.j-c.h)/(i.j-i.h)),g=Ib(g,f),i=jg(b,new ve(a.n,g, -a.y)));return!fe(i,c)?k:new ve(a.n,g,a.y)},b)})}D(Pi,yi);function Qi(a){this.g=a.matrixIds;ig.call(this,{origin:a.origin,origins:a.origins,resolutions:a.resolutions,tileSize:a.tileSize,tileSizes:a.tileSizes})}D(Qi,ig);function Ri(a){var b=z(a.version)?a.version:"1.0.0",c=z(a.format)?a.format:"image/jpeg",d=z(a.requestEncoding)?a.requestEncoding:"KVP",e=a.tileGrid,f={Layer:a.layer,style:a.style,TileMatrixSet:a.matrixSet};Wa(f,a.dimensions||{});var g;"KVP"==d&&(g={Service:"WMTS",Request:"GetTile",Version:b,Format:c,TileMatrix:"{TileMatrix}",TileRow:"{TileRow}",TileCol:"{TileCol}"},Wa(g,f));b=a.urls;if(!z(b)){var b=[],c=a.url,i=/\{(\d)-(\d)\}/.exec(c)||/\{([a-z])-([a-z])\}/.exec(c);if(i){var m=i[2].charCodeAt(0), -q;for(q=i[1].charCodeAt(0);q<=m;++q)b.push(c.replace(i[0],String.fromCharCode(q)))}else b.push(c)}b=si(Ca(b,function(a){z(g)&&(a=Wc(Yc([a],g)));var b=a;return function(a){if(a!==k){a={TileMatrix:e.g[a.n],TileCol:a.x,TileRow:a.y};"KVP"!=d&&Wa(a,f);var c=b,g;for(g in a)c=c.replace("{"+g+"}",a[g]).replace("%7B"+g+"%7D",a[g]);return c}}}));b=vi(function(b,c,d){if(c.fb().length<=b.n)return k;var e=b.x,f=-b.y-1,g=jg(c,b),i=d.I(),m=z(a.extent)?a.extent:i;m!==k&&(d.Lb&&m.h===i.h&&m.j===i.j)&&(d=Math.ceil((m.j- -m.h)/(g.j-g.h)),e=Ib(e,d),g=jg(c,new ve(b.n,e,b.y)));return!fe(g,m)?k:new ve(b.n,e,f)},b);yi.call(this,{attributions:a.attributions,crossOrigin:a.crossOrigin,extent:a.extent,projection:a.projection,tileGrid:e,ba:b})}D(Ri,yi);C("goog.require",ba);function Si(a){Eh.call(this,{element:a.element,map:a.map,position:a.position,positioning:a.positioning})}D(Si,Eh);C("ol.AnchoredElement",Si);C("ol.AnchoredElementPositioning",Dh);Dh.BOTTOM_LEFT="bottom-left";Dh.BOTTOM_RIGHT="bottom-right";Dh.TOP_LEFT="top-left";Dh.TOP_RIGHT="top-right";C("ol.Attribution",ye);C("ol.Collection",N);N.prototype.clear=N.prototype.clear;N.prototype.forEach=N.prototype.forEach;N.prototype.getAt=N.prototype.ld;N.prototype.getLength=N.prototype.eb; -N.prototype.insertAt=N.prototype.mb;N.prototype.pop=N.prototype.pop;N.prototype.push=N.prototype.push;N.prototype.remove=N.prototype.remove;N.prototype.removeAt=N.prototype.Yb;N.prototype.setAt=N.prototype.oe;C("ol.Coordinate",L);C("ol.Coordinate.createStringXY",function(a){return function(b){return Tc(b,a)}});C("ol.Coordinate.fromProjectedArray",Uc);C("ol.Coordinate.toStringHDMS",function(a){return z(a)?Sc(a.y,"NS")+" "+Sc(a.x,"EW"):""});C("ol.Coordinate.toStringXY",Tc);C("ol.Extent",P); -P.prototype.containsCoordinate=P.prototype.ed;P.prototype.containsExtent=P.prototype.lc;P.prototype.getBottomLeft=P.prototype.nd;P.prototype.getBottomRight=P.prototype.od;P.prototype.getCenter=P.prototype.a;P.prototype.getHeight=P.prototype.da;P.prototype.getTopLeft=P.prototype.gb;P.prototype.getTopRight=P.prototype.sd;P.prototype.getWidth=P.prototype.ha;P.prototype.transform=P.prototype.transform;C("ol.Geolocation",V); -function Ti(a){U.call(this,{controls:a.controls,interactions:a.interactions,layers:a.layers,renderer:a.renderer,renderers:a.renderers,target:a.target,view:a.view})}D(Ti,U);C("ol.Map",Ti);U.prototype.addLayer=U.prototype.ce;U.prototype.addPreRenderFunction=U.prototype.ga;U.prototype.addPreRenderFunctions=U.prototype.$c;U.prototype.getInteractions=U.prototype.Gb;U.prototype.getRenderer=U.prototype.Tc;U.prototype.removeLayer=U.prototype.de;af.prototype.getCoordinate=af.prototype.b;C("ol.Object",M); -M.prototype.bindTo=M.prototype.ad;M.prototype.changed=M.prototype.dd;M.prototype.get=M.prototype.q;M.prototype.notify=M.prototype.Ec;M.prototype.set=M.prototype.p;M.prototype.setOptions=M.prototype.Mc;M.prototype.setValues=M.prototype.ub;M.prototype.unbind=M.prototype.bc;M.prototype.unbindAll=M.prototype.ye;function Ui(a){Je.call(this,{axisOrientation:a.axisOrientation,code:a.code,extent:a.extent,global:a.global,units:a.units})}D(Ui,Je);C("ol.Projection",Ui);Je.prototype.getAxisOrientation=Je.prototype.md; -Je.prototype.getCode=Je.prototype.qd;Je.prototype.getExtent=Je.prototype.I;Je.prototype.getMetersPerUnit=Je.prototype.sc;Je.prototype.getPointResolution=Je.prototype.c;Je.prototype.getUnits=Je.prototype.td;Je.prototype.isGlobal=Je.prototype.$d;C("ol.ProjectionUnits",He);He.DEGREES="degrees";He.FEET="ft";He.METERS="m";C("ol.RendererHint",zh);zh.CANVAS="canvas";zh.DOM="dom";zh.WEBGL="webgl";C("ol.RendererHints",yh);yh.createFromQueryData=yh.fd; -function Vi(a){T.call(this,{center:a.center,maxResolution:a.maxResolution,numZoomLevels:a.numZoomLevels,projection:a.projection,resolution:a.resolution,resolutions:a.resolutions,rotation:a.rotation,zoom:a.zoom,zoomFactor:a.zoomFactor})}D(Vi,T);C("ol.View2D",Vi);T.prototype.fitExtent=T.prototype.f;T.prototype.getView2D=T.prototype.g;C("ol.animation",tf);tf.bounce=tf.Ib;tf.pan=tf.aa;tf.rotate=tf.rotate;tf.zoom=tf.zoom;function Wi(a){Af.call(this,{map:a.map,target:a.target})}D(Wi,Af); -C("ol.control.Attribution",Wi);Af.prototype.setMap=Af.prototype.a;function Xi(a){Hh.call(this,{coordinateFormat:a.coordinateFormat,map:a.map,projection:a.projection,target:a.target,undefinedHTML:a.undefinedHTML})}D(Xi,Hh);C("ol.control.MousePosition",Xi);Hh.prototype.setMap=Hh.prototype.a;function Yi(a){Kh.call(this,{map:a.map,minWidth:a.minWidth,target:a.target,units:a.units})}D(Yi,Kh);C("ol.control.ScaleLine",Yi);Kh.prototype.setMap=Kh.prototype.a;C("ol.control.ScaleLineUnits",Jh);Jh.DEGREES="degrees"; -Jh.IMPERIAL="imperial";Jh.METRIC="metric";Jh.NAUTICAL="nautical";Jh.US="us";function Zi(a){Bf.call(this,{delta:a.delta,map:a.map,target:a.target})}D(Zi,Bf);C("ol.control.Zoom",Zi);Bf.prototype.setMap=Bf.prototype.a;C("ol.control.defaults",Cf);C("ol.easing",S);S.bounce=S.Ib;S.easeIn=S.hd;S.easeOut=S.Ia;S.elastic=S.jd;S.inAndOut=S.Aa;S.linear=S.Ac;S.upAndDown=S.Rc;C("ol.interaction.Keyboard",Mh);Mh.prototype.addCallback=Mh.prototype.b;C("ol.interaction.defaults",Yf); -function $i(a){R.call(this,{brightness:a.brightness,contrast:a.contrast,hue:a.hue,opacity:a.opacity,saturation:a.saturation,source:a.source,visible:a.visible})}D($i,Lg);C("ol.layer.ImageLayer",$i);function aj(a){R.call(this,{brightness:a.brightness,contrast:a.contrast,hue:a.hue,opacity:a.opacity,saturation:a.saturation,source:a.source,visible:a.visible})}D(aj,Mg);C("ol.layer.TileLayer",aj);C("ol.parser.ogc.WMSCapabilities",Yh);Yh.prototype.read=Yh.prototype.ta;C("ol.parser.ogc.WMTSCapabilities",bi); -bi.prototype.read=bi.prototype.ta;C("ol.projection.addProjection",Re);C("ol.projection.configureProj4jsProjection",function(a){return Me(a)});C("ol.projection.get",Ve);C("ol.projection.getTransform",We);C("ol.projection.getTransformFromProjections",Le);C("ol.projection.transform",function(a,b,c){b=We(b,c);a=[a.x,a.y];a=b(a,a,2);return new L(a[0],a[1])});C("ol.projection.transformWithProjections",function(a,b,c){b=Le(b,c);a=[a.x,a.y];a=b(a,a,2);return new L(a[0],a[1])});Qg.prototype.getCanvas=Qg.prototype.bb; -function bj(a){Ai.call(this,{culture:a.culture,key:a.key,style:a.style})}D(bj,Ai);C("ol.source.BingMaps",bj);function cj(a){Ci.call(this,{extent:a.extent,projection:a.projection,tileGrid:a.tileGrid})}D(cj,Ci);C("ol.source.DebugTileSource",cj);C("ol.source.MapQuestOSM",Ei);C("ol.source.MapQuestOpenAerial",Fi);C("ol.source.OpenStreetMap",Gi); -function dj(a){Hi.call(this,{attributions:a.attributions,crossOrigin:a.crossOrigin,extent:a.extent,params:a.params,projection:a.projection,resolutions:a.resolutions,url:a.url})}D(dj,Hi);C("ol.source.SingleImageWMS",dj);function ej(a){Li.call(this,{layer:a.layer,maxZoom:a.maxZoom,minZoom:a.minZoom,opaque:a.opaque,url:a.url})}D(ej,Li);C("ol.source.Stamen",ej); -function fj(a){Mi.call(this,{attributions:a.attributions,crossOrigin:a.crossOrigin,extent:a.extent,imageExtent:a.imageExtent,imageSize:a.imageSize,projection:a.projection,url:a.url})}D(fj,Mi);C("ol.source.StaticImage",fj);function gj(a){Oi.call(this,{uri:a.uri})}D(gj,Oi);C("ol.source.TileJSON",gj);function hj(a){Pi.call(this,{attributions:a.attributions,crossOrigin:a.crossOrigin,extent:a.extent,maxZoom:a.maxZoom,params:a.params,projection:a.projection,tileGrid:a.tileGrid,url:a.url,urls:a.urls})} -D(hj,Pi);C("ol.source.TiledWMS",hj);function ij(a){Ri.call(this,{attributions:a.attributions,crossOrigin:a.crossOrigin,dimensions:a.dimensions,extent:a.extent,format:a.format,layer:a.layer,matrixSet:a.matrixSet,maxZoom:a.maxZoom,projection:a.projection,requestEncoding:a.requestEncoding,style:a.style,tileGrid:a.tileGrid,url:a.url,urls:a.urls})}D(ij,Ri);C("ol.source.WMTS",ij); -C("ol.source.WMTS.optionsFromCapabilities",function(a,b){var c;c=a.contents.layers;var d=Ea(c,function(a){return a.identifier==b},h);c=0>d?k:ga(c)?c.charAt(d):c[d];var d=c.tileMatrixSetLinks[0].tileMatrixSet,e=c.formats[0],f=Ea(c.styles,function(a){return a.isDefault});0>f&&(f=0);var f=c.styles[f].identifier,g={};F(c.dimensions,function(a){var b=a.identifier,c=a["default"];z(c)||(c=a.values[0]);g[b]=c});var i=a.contents.tileMatrixSets[d],m,q=[],t=[],r=[],y=[],w=Ve(i.supportedCRS).sc();F(i.matrixIds, -function(a){t.push(a.identifier);r.push(a.topLeftCorner);q.push(2.8E-4*a.scaleDenominator/w);y.push(new de(a.tileWidth,a.tileHeight))});m=new Qi({origins:r,resolutions:q,matrixIds:t,tileSizes:y});var i=Ve(i.supportedCRS),s=a.operationsMetadata.GetTile.dcp.http.get,x=Qa(s[0].constraints.GetEncoding.allowedValues)[0],u;switch(x){case "REST":u=c.resourceUrls.tile[e];break;case "KVP":u=[],F(s,function(a){a.constraints.GetEncoding.allowedValues.hasOwnProperty("KVP")&&u.push(a.url)})}return{urls:u,layer:b, -matrixSet:d,format:e,projection:i,requestEncoding:x,tileGrid:m,style:f,dimensions:g}});function jj(a){ig.call(this,{origin:a.origin,origins:a.origins,resolutions:a.resolutions,tileSize:a.tileSize,tileSizes:a.tileSizes})}D(jj,ig);C("ol.tilegrid.TileGrid",jj);function kj(a){Qi.call(this,{matrixIds:a.matrixIds,origin:a.origin,origins:a.origins,resolutions:a.resolutions,tileSize:a.tileSize,tileSizes:a.tileSizes})}D(kj,Qi);C("ol.tilegrid.WMTS",kj);function lj(a){zi.call(this,{maxZoom:a.maxZoom})} -D(lj,zi);C("ol.tilegrid.XYZ",lj);tf.De={};tf.Ue={};tf.Ve={};tf.df={};})(); +function Ql(a,b){this.a=[];this.f=a;this.e=b||k}p=Ql.prototype;p.ya=l;p.Sa=l;p.Ya=0;p.jd=l;p.zd=l;p.yd=0;p.zc=function(a,b){Rl(this,a,b);this.Ya--;0==this.Ya&&this.ya&&Sl(this)};function Rl(a,b,c){a.ya=i;a.b=c;a.Sa=!b;Sl(a)}function Tl(a){a.ya&&(a.jd||aa(new Ul(a)),a.jd=l)}p.fb=function(a){Tl(this);Rl(this,i,a)};function Vl(a){return Ha(a.a,function(a){return ka(a[1])})} +function Sl(a){a.c&&(a.ya&&Vl(a))&&(r.clearTimeout(a.c),delete a.c);a.d&&(a.d.yd--,delete a.d);for(var b=a.b,c=l,d=l;a.a.length&&0==a.Ya;){var e=a.a.shift(),f=e[0],h=e[1],e=e[2];if(f=a.Sa?h:f)try{var j=f.call(e||a.e,b);x(j)&&(a.Sa=a.Sa&&(j==b||j instanceof Error),a.b=b=j);b instanceof Ql&&(d=i,a.Ya++)}catch(m){b=m,a.Sa=i,Vl(a)||(c=i)}}a.b=b;d&&a.Ya&&(d=b,j=ra(a.zc,a,i),f=ra(a.zc,a,l),d.a.push([j,f,g]),d.ya&&Sl(d),b.zd=i);c&&(a.c=r.setTimeout(function(){aa(b)},0))} +function Ul(a){ua.call(this);this.a=a}D(Ul,ua);Ul.prototype.message="Deferred has already fired";Ul.prototype.name="AlreadyCalledError";function Wl(a,b){var c=b||{},d=c.document||document,e=fc("SCRIPT"),f={ed:e,Lb:g},h=new Ql(Xl,f),j=k,m=c.timeout!=k?c.timeout:5E3;0this.a.d};km.prototype.Pa=function(a){this.a.Pa(a)};km.prototype.b=function(a,b,c){var d=a.toString();if(aj(this.a,d))return bj(this.a,d);b=this.ja(a,b,c);a=new jm(a,x(b)?0:4,x(b)?b:"",this.B);cj(this.a,d,a);return a}; +km.prototype.u=function(a){aj(this.a,a)&&bj(this.a,a)};function lm(a){var b=Array(a.maxZoom+1),c,d=2*eh/256;for(c=0;c<=a.maxZoom;++c)b[c]=d/Math.pow(2,c);Rh.call(this,{origin:new L(-eh,eh),resolutions:b,tileSize:new Qe(256,256)})}D(lm,Rh);lm.prototype.b=function(a,b,c){for(var d=a.x,e=a.y,a=a.n,f;;){a-=1;if(0>a)break;d>>=1;e>>=1;f=new Af(d,e,d,e);if(b.call(c,a,f))break}};function mm(a){km.call(this,{opaque:i,projection:Zf("EPSG:3857")});this.Dd=x(a.culture)?a.culture:"en-us";this.i=l;var b=new Cd("//dev.virtualearth.net/REST/v1/Imagery/Metadata/"+a.style),b=new bm(b),a={include:"ImageryProviders",key:a.key},c=ra(this.t,this),a=a||k,d="_"+(cm++).toString(36)+ta().toString(36);r._callbacks_||(r._callbacks_={});var e=b.b.V();if(a)for(var f in a)(!a.hasOwnProperty||a.hasOwnProperty(f))&&be(e,f,a[f]);c&&(r._callbacks_[d]=function(a){dm(d,i);c.apply(g,arguments)},be(e, +b.a,"_callbacks_."+d));f=Wl(e.toString(),{timeout:b.Lb,wc:i});f.a.push([k,function(){dm(d,l)},g]);f.ya&&Sl(f)}D(mm,km); +mm.prototype.t=function(a){var b=a.resourceSets[0].resources[0],c=b.zoomMin,d=b.zoomMax,e=new lm({maxZoom:d,tileSize:new Qe(b.imageWidth,b.imageHeight)});this.tileGrid=e;this.ja=hm(function(a){if(a.ne||b<=e?k:new yf(a.n,Sb(a.x,b),e)},fm(Ga(b.imageUrlSubdomains,function(a){var c=b.imageUrl.replace("{subdomain}",a).replace("{culture}",this.Dd);return function(a){return a===k?g:c.replace("{quadkey}",zf(a))}})));var f=Pf(Zf("EPSG:4326"),this.c);this.f= +Ga(b.imageryProviders,function(a){var b=a.attribution,c={};F(a.coverageAreas,function(a){var b=a.zoomMin,d=a.zoomMax,a=a.bbox,a=(new O(a[1],a[0],a[3],a[2])).transform(f),h,j;for(h=b;h<=d;++h)j=h.toString(),b=Th(e,a,e.a[h]),j in c?c[j].push(b):c[j]=[b]});return new Bf(b,c)});this.i=i;K(this,"load")};mm.prototype.d=n("i");function nm(a,b){Cf.call(this,a,2);this.e=a;this.d=Xh(b,a.n);this.c={}}D(nm,Cf);nm.prototype.M=function(a){a=x(a)?z(a):-1;if(a in this.c)return this.c[a];var b=this.d,c=fc("CANVAS");c.width=b.width;c.height=b.height;var d=c.getContext("2d");d.strokeStyle="black";d.strokeRect(0.5,0.5,b.width+0.5,b.height+0.5);d.fillStyle="black";d.textAlign="center";d.textBaseline="middle";d.font="24px sans-serif";d.fillText(this.e.toString(),b.width/2,b.height/2);return this.c[a]=c}; +function om(a){$h.call(this,{extent:a.extent,opaque:l,projection:a.projection,tileGrid:a.tileGrid});this.a=new dj}D(om,$h);om.prototype.g=function(){return this.a.J()>this.a.d};om.prototype.Pa=function(a){this.a.Pa(a)};om.prototype.b=function(a){var b=a.toString();if(aj(this.a,b))return bj(this.a,b);a=new nm(a,this.tileGrid);cj(this.a,b,a);return a};function pm(a){var b=a.projection||Zf("EPSG:3857"),c=gm;x(a.ja)?c=a.ja:x(a.urls)?c=fm(Ga(a.urls,em)):x(a.url)&&(c=im(a.url),c=fm(Ga(c,em)));var d=new lm({maxZoom:a.maxZoom}),e=a.extent,c=e!=k?hm(function(b){if(a.maxZoomj||c<=j)return k;c=Sb(b.x,c);return!Sh(d,new yf(b.n,c,b.y)).ha(e)?k:new yf(b.n,c,j)},c):hm(function(b){if(a.maxZoomd||c<=d?k:new yf(b.n,Sb(b.x,c),d)},c);km.call(this,{attributions:a.attributions,crossOrigin:a.crossOrigin, +extent:a.extent,projection:b,tileGrid:d,ja:c})}D(pm,km);function qm(){pm.call(this,{attributions:[new Bf('Tiles Courtesy of MapQuest '),new Bf('Data © OpenStreetMap contributors, CC BY-SA')],opaque:i,maxZoom:28,url:"http://otile{1-4}.mqcdn.com/tiles/1.0.0/osm/{z}/{x}/{y}.jpg"})}D(qm,pm); +function rm(){pm.call(this,{attributions:[new Bf('Tiles Courtesy of MapQuest '),new Bf("Portions Courtesy NASA/JPL-Caltech and U.S. Depart. of Agriculture, Farm Service Agency")],maxZoom:18,opaque:i,url:"http://oatile{1-4}.mqcdn.com/tiles/1.0.0/sat/{z}/{x}/{y}.jpg"})}D(rm,pm);function sm(){pm.call(this,{attributions:[new Bf('© OpenStreetMap contributors, CC BY-SA')],opaque:i,maxZoom:18,url:"http://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png"})}D(sm,pm);function tm(a){si.call(this,{attributions:a.attributions,crossOrigin:a.crossOrigin,extent:a.extent,projection:a.projection,resolutions:a.resolutions,Ua:x(a.url)?qi(a.url,a.params):ri});this.b=k;this.g=x(a.ratio)?a.ratio:1.5}D(tm,si); +tm.prototype.M=function(a,b,c){this.a===k||(b=this.a[ug(this.a,b)]);var d=this.b;if(d!==k&&d.e==b&&d.I().yc(a))return d;var d=a=new O(a.h,a.l,a.j,a.k),e=this.g,f=d.ma()/2*(e-1),e=d.ga()/2*(e-1);d.h-=f;d.l-=e;d.j+=f;d.k+=e;return this.b=ti(this,a,b,new Qe(a.ma()/b,a.ga()/b),c)};var um={terrain:{aa:"jpg",opaque:i},"terrain-background":{aa:"jpg",opaque:i},"terrain-labels":{aa:"png",opaque:l},"terrain-lines":{aa:"png",opaque:l},"toner-background":{aa:"png",opaque:i},toner:{aa:"png",opaque:i},"toner-hybrid":{aa:"png",opaque:l},"toner-labels":{aa:"png",opaque:l},"toner-lines":{aa:"png",opaque:l},"toner-lite":{aa:"png",opaque:i},watercolor:{aa:"jpg",opaque:i}},vm={terrain:{minZoom:4,maxZoom:18},toner:{minZoom:0,maxZoom:20},watercolor:{minZoom:3,maxZoom:16}},wm=[new Bf('Map tiles by Stamen Design, under CC BY 3.0. Data by OpenStreetMap, under CC BY SA.')]; +function xm(a){var b=a.layer.indexOf("-"),b=-1==b?a.layer:a.layer.slice(0,b),c=um[a.layer];pm.call(this,{attributions:wm,maxZoom:vm[b].maxZoom,opaque:c.opaque,url:x(a.url)?a.url:"http://{a-d}.tile.stamen.com/"+a.layer+"/{z}/{x}/{y}."+c.aa})}D(xm,pm);function ym(a){var b=a.url,c=a.imageExtent,d=a.imageSize,e=c.ga()/d.height,f=Zf(a.projection);si.call(this,{attributions:a.attributions,crossOrigin:a.crossOrigin,extent:a.extent,projection:a.projection,Ua:function(){return b},resolutions:[e]});this.b=ti(this,c,e,d,f)}D(ym,si);ym.prototype.M=function(a){return a.ha(this.b.I())?this.b:k};var zm=[];C("grid",function(a){zm.push(a)});function Am(a){km.call(this,{projection:Zf("EPSG:3857")});this.i=l;a=this.t=Wl(a.uri,{wc:i});a.a.push([this.w,k,this]);a.ya&&Sl(a)}D(Am,km); +Am.prototype.w=function(){var a=zm.pop(),b=Zf("EPSG:4326"),c,d;x(a.bounds)?(c=a.bounds,c=new O(c[0],c[1],c[2],c[3]),this.s=d=c.transform(Pf(b,this.c))):d=c=k;var e=a.minzoom||0,f=a.maxzoom||22,h=new lm({maxZoom:f});this.tileGrid=h;this.ja=hm(function(a){if(a.nc||b<=c)return k;b=Sb(a.x,b);return d!==k&&!Sh(h,new yf(a.n,b,a.y)).ha(d)?k:new yf(a.n,b,c)},fm(Ga(a.tiles,em)));if(x(a.attribution)){b=d===k?b.I():d;c={};var j,m;for(j=e;j<=f;++j)m=j.toString(), +c[m]=[Th(h,b,h.a[j])];this.f=[new Bf(a.attribution,c)]}this.i=i;K(this,"load")};Am.prototype.d=n("i");function Bm(a){var b=gm,c=a.urls;!x(c)&&x(a.url)&&(c=im(a.url));x(c)&&(b=Ga(c,function(b){var c=a.params;return function(a,d,m){return a===k?g:pi(b,c,Sh(d,a),Xh(d,a.n),m)}}),b=fm(b));var d=a.extent;km.call(this,{attributions:a.attributions,crossOrigin:a.crossOrigin,extent:d,tileGrid:a.tileGrid,opaque:!(x(a.params.TRANSPARENT)?a.params.TRANSPARENT:1),projection:a.projection,ja:hm(function(a,b,c){if(b.nb().length<=a.n)return k;var j=a.x,m=Sh(b,a),q=c.I();d=x(d)?d:q;d!==k&&(c.Vb&&d.h===q.h&&d.j===q.j)&& +(c=Math.ceil((d.j-d.h)/(m.j-m.h)),j=Sb(j,c),m=Sh(b,new yf(a.n,j,a.y)));return!m.ha(d)?k:new yf(a.n,j,a.y)},b)})}D(Bm,km);function Cm(a){this.g=a.matrixIds;Rh.call(this,{origin:a.origin,origins:a.origins,resolutions:a.resolutions,tileSize:a.tileSize,tileSizes:a.tileSizes})}D(Cm,Rh);function Dm(a){var b=x(a.version)?a.version:"1.0.0",c=x(a.format)?a.format:"image/jpeg",d=x(a.requestEncoding)?a.requestEncoding:"KVP",e=a.tileGrid,f={Layer:a.layer,style:a.style,TileMatrixSet:a.matrixSet};$a(f,a.dimensions||{});var h;"KVP"==d&&(h={Service:"WMTS",Request:"GetTile",Version:b,Format:c,TileMatrix:"{TileMatrix}",TileRow:"{TileRow}",TileCol:"{TileCol}"},$a(h,f));b=gm;c=a.urls;!x(c)&&x(a.url)&&(c=im(a.url));x(c)&&(b=fm(Ga(c,function(a){x(h)&&(a=zd(Bd([a],h)));var b=a;return function(a){if(a!== +k){a={TileMatrix:e.g[a.n],TileCol:a.x,TileRow:a.y};"KVP"!=d&&$a(a,f);var c=b,h;for(h in a)c=c.replace("{"+h+"}",a[h]).replace("%7B"+h+"%7D",a[h]);return c}}})));b=hm(function(b,c,d){if(c.nb().length<=b.n)return k;var e=b.x,f=-b.y-1,h=Sh(c,b),u=d.I(),t=x(a.extent)?a.extent:u;t!==k&&(d.Vb&&t.h===u.h&&t.j===u.j)&&(d=Math.ceil((t.j-t.h)/(h.j-h.h)),e=Sb(e,d),h=Sh(c,new yf(b.n,e,b.y)));return!h.ha(t)?k:new yf(b.n,e,f)},b);km.call(this,{attributions:a.attributions,crossOrigin:a.crossOrigin,extent:a.extent, +projection:a.projection,tileGrid:e,ja:b})}D(Dm,km);C("goog.require",da);function Em(a){Wk.call(this,{element:a.element,map:a.map,position:a.position,positioning:a.positioning})}D(Em,Wk);C("ol.AnchoredElement",Em);C("ol.AnchoredElementPositioning",Vk);Vk.BOTTOM_LEFT="bottom-left";Vk.BOTTOM_RIGHT="bottom-right";Vk.TOP_LEFT="top-left";Vk.TOP_RIGHT="top-right";C("ol.Attribution",Bf);C("ol.Collection",N);N.prototype.clear=N.prototype.clear;N.prototype.forEach=N.prototype.forEach;N.prototype.getAt=N.prototype.Hd;N.prototype.getLength=N.prototype.mb; +N.prototype.insertAt=N.prototype.ub;N.prototype.pop=N.prototype.pop;N.prototype.push=N.prototype.push;N.prototype.remove=N.prototype.remove;N.prototype.removeAt=N.prototype.jc;N.prototype.setAt=N.prototype.Ne;C("ol.Coordinate",L);C("ol.Coordinate.createStringXY",function(a){return function(b){return wd(b,a)}});C("ol.Coordinate.fromProjectedArray",xd);C("ol.Coordinate.toStringHDMS",function(a){return x(a)?vd(a.y,"NS")+" "+vd(a.x,"EW"):""});C("ol.Coordinate.toStringXY",wd);C("ol.Expression",mj); +C("ol.Extent",O);O.prototype.containsCoordinate=O.prototype.Bd;O.prototype.containsExtent=O.prototype.yc;O.prototype.getBottomLeft=O.prototype.Gc;O.prototype.getBottomRight=O.prototype.Jd;O.prototype.getCenter=O.prototype.ad;O.prototype.getHeight=O.prototype.ga;O.prototype.getTopLeft=O.prototype.ob;O.prototype.getTopRight=O.prototype.Nd;O.prototype.getWidth=O.prototype.ma;O.prototype.transform=O.prototype.transform;C("ol.Feature",Bi);Bi.prototype.get=Bi.prototype.q;Bi.prototype.getAttributes=Bi.prototype.Qa; +Bi.prototype.getGeometry=Bi.prototype.sa;Bi.prototype.set=Bi.prototype.p;Bi.prototype.setGeometry=Bi.prototype.gd;Bi.prototype.setSymbolizers=Bi.prototype.Pe;C("ol.Geolocation",W);function Fm(a){V.call(this,{controls:a.controls,interactions:a.interactions,layers:a.layers,renderer:a.renderer,renderers:a.renderers,target:a.target,view:a.view})}D(Fm,V);C("ol.Map",Fm);V.prototype.addLayer=V.prototype.ze;V.prototype.addPreRenderFunction=V.prototype.ra;V.prototype.addPreRenderFunctions=V.prototype.wd; +V.prototype.getInteractions=V.prototype.xa;V.prototype.getRenderer=V.prototype.Pb;V.prototype.removeLayer=V.prototype.Ae;eg.prototype.getCoordinate=eg.prototype.d;C("ol.Object",M);M.prototype.bindTo=M.prototype.xd;M.prototype.changed=M.prototype.Ad;M.prototype.get=M.prototype.q;M.prototype.notify=M.prototype.Yc;M.prototype.set=M.prototype.p;M.prototype.setOptions=M.prototype.hd;M.prototype.setValues=M.prototype.Db;M.prototype.unbind=M.prototype.nc;M.prototype.unbindAll=M.prototype.Ye; +function Gm(a){Nf.call(this,{axisOrientation:a.axisOrientation,code:a.code,extent:a.extent,global:a.global,units:a.units})}D(Gm,Nf);C("ol.Projection",Gm);Nf.prototype.getAxisOrientation=Nf.prototype.Id;Nf.prototype.getCode=Nf.prototype.Ld;Nf.prototype.getExtent=Nf.prototype.I;Nf.prototype.getMetersPerUnit=Nf.prototype.Hc;Nf.prototype.getPointResolution=Nf.prototype.c;Nf.prototype.getUnits=Nf.prototype.Od;Nf.prototype.isGlobal=Nf.prototype.ve;C("ol.ProjectionUnits",Lf);Lf.DEGREES="degrees"; +Lf.FEET="ft";Lf.METERS="m";C("ol.RendererHint",Rk);Rk.CANVAS="canvas";Rk.DOM="dom";Rk.WEBGL="webgl";C("ol.RendererHints",Qk);Qk.createFromQueryData=Qk.Cd;function Hm(a){T.call(this,{center:a.center,maxResolution:a.maxResolution,numZoomLevels:a.numZoomLevels,projection:a.projection,resolution:a.resolution,resolutions:a.resolutions,rotation:a.rotation,zoom:a.zoom,zoomFactor:a.zoomFactor})}D(Hm,T);C("ol.View2D",Hm);T.prototype.fitExtent=T.prototype.f;T.prototype.getView2D=T.prototype.g; +C("ol.animation",xg);xg.bounce=xg.Rb;xg.pan=xg.ia;xg.rotate=xg.rotate;xg.zoom=xg.zoom;function Im(a){Eg.call(this,{map:a.map,target:a.target})}D(Im,Eg);C("ol.control.Attribution",Im);Eg.prototype.setMap=Eg.prototype.a;function Jm(a){Zk.call(this,{coordinateFormat:a.coordinateFormat,map:a.map,projection:a.projection,target:a.target,undefinedHTML:a.undefinedHTML})}D(Jm,Zk);C("ol.control.MousePosition",Jm);Zk.prototype.setMap=Zk.prototype.a; +function Km(a){bl.call(this,{map:a.map,minWidth:a.minWidth,target:a.target,units:a.units})}D(Km,bl);C("ol.control.ScaleLine",Km);bl.prototype.setMap=bl.prototype.a;C("ol.control.ScaleLineUnits",al);al.DEGREES="degrees";al.IMPERIAL="imperial";al.METRIC="metric";al.NAUTICAL="nautical";al.US="us";function Lm(a){Fg.call(this,{delta:a.delta,map:a.map,target:a.target})}D(Lm,Fg);C("ol.control.Zoom",Lm);Fg.prototype.setMap=Fg.prototype.a; +function Mm(a){rl.call(this,{map:a.map,maxResolution:a.maxResolution,minResolution:a.minResolution})}D(Mm,rl);C("ol.control.ZoomSlider",Mm);C("ol.control.defaults",Gg);C("ol.easing",wg);wg.bounce=wg.Rb;wg.easeIn=wg.Ed;wg.easeOut=wg.Oa;wg.elastic=wg.Fd;wg.inAndOut=wg.Ja;wg.linear=wg.Uc;wg.upAndDown=wg.pd;C("ol.filter.Filter",Ji);C("ol.filter.Geometry",Pi);C("ol.filter.Logical",Qi);C("ol.filter.LogicalOperator",Ti);Ti.AND=Ri;Ti.OR=Si;C("ol.geom.LineString",ej);C("ol.geom.MultiLineString",gj); +C("ol.geom.MultiPoint",ij);C("ol.geom.MultiPolygon",lj);C("ol.geom.Point",hj);C("ol.geom.Polygon",kj);C("ol.interaction.Keyboard",ul);ul.prototype.addCallback=ul.prototype.b;C("ol.interaction.defaults",bh);function Nm(a){P.call(this,{brightness:a.brightness,contrast:a.contrast,hue:a.hue,opacity:a.opacity,saturation:a.saturation,source:a.source,visible:a.visible})}D(Nm,ui);C("ol.layer.ImageLayer",Nm); +function Om(a){P.call(this,{brightness:a.brightness,contrast:a.contrast,hue:a.hue,opacity:a.opacity,saturation:a.saturation,source:a.source,visible:a.visible})}D(Om,vi);C("ol.layer.TileLayer",Om);function Pm(a){Vi.call(this,{brightness:a.brightness,contrast:a.contrast,hue:a.hue,opacity:a.opacity,saturation:a.saturation,source:a.source,visible:a.visible})}D(Pm,Vi);C("ol.layer.Vector",Pm);Vi.prototype.parseFeatures=Vi.prototype.xa;C("ol.parser.GeoJSON",wl);wl.prototype.read=wl.prototype.pa; +C("ol.parser.ogc.WMSCapabilities",Ll);Ll.prototype.read=Ll.prototype.pa;C("ol.parser.ogc.WMTSCapabilities",Pl);Pl.prototype.read=Pl.prototype.pa;C("ol.projection.addProjection",Vf);C("ol.projection.configureProj4jsProjection",function(a){return Qf(a)});C("ol.projection.get",Zf);C("ol.projection.getTransform",$f);C("ol.projection.getTransformFromProjections",Pf);C("ol.projection.transform",function(a,b,c){b=$f(b,c);a=[a.x,a.y];a=b(a,a,2);return new L(a[0],a[1])}); +C("ol.projection.transformWithProjections",function(a,b,c){b=Pf(b,c);a=[a.x,a.y];a=b(a,a,2);return new L(a[0],a[1])});Ij.prototype.getCanvas=Ij.prototype.kb;function Qm(a){mm.call(this,{culture:a.culture,key:a.key,style:a.style})}D(Qm,mm);C("ol.source.BingMaps",Qm);function Xm(a){om.call(this,{extent:a.extent,projection:a.projection,tileGrid:a.tileGrid})}D(Xm,om);C("ol.source.DebugTileSource",Xm);C("ol.source.MapQuestOSM",qm);C("ol.source.MapQuestOpenAerial",rm);C("ol.source.OpenStreetMap",sm); +function Ym(a){tm.call(this,{attributions:a.attributions,crossOrigin:a.crossOrigin,extent:a.extent,params:a.params,projection:a.projection,ratio:a.ratio,resolutions:a.resolutions,url:a.url})}D(Ym,tm);C("ol.source.SingleImageWMS",Ym);function Zm(a){xm.call(this,{layer:a.layer,maxZoom:a.maxZoom,minZoom:a.minZoom,opaque:a.opaque,url:a.url})}D(Zm,xm);C("ol.source.Stamen",Zm); +function $m(a){ym.call(this,{attributions:a.attributions,crossOrigin:a.crossOrigin,extent:a.extent,imageExtent:a.imageExtent,imageSize:a.imageSize,projection:a.projection,url:a.url})}D($m,ym);C("ol.source.StaticImage",$m);function an(a){Am.call(this,{uri:a.uri})}D(an,Am);C("ol.source.TileJSON",an);function bn(a){Bm.call(this,{attributions:a.attributions,crossOrigin:a.crossOrigin,extent:a.extent,maxZoom:a.maxZoom,params:a.params,projection:a.projection,tileGrid:a.tileGrid,url:a.url,urls:a.urls})} +D(bn,Bm);C("ol.source.TiledWMS",bn);function cn(a){bg.call(this,{attributions:a.attributions,extent:a.extent,projection:a.projection})}D(cn,Ci);C("ol.source.Vector",cn);function dn(a){Dm.call(this,{attributions:a.attributions,crossOrigin:a.crossOrigin,dimensions:a.dimensions,extent:a.extent,format:a.format,layer:a.layer,matrixSet:a.matrixSet,maxZoom:a.maxZoom,projection:a.projection,requestEncoding:a.requestEncoding,style:a.style,tileGrid:a.tileGrid,url:a.url,urls:a.urls})}D(dn,Dm); +C("ol.source.WMTS",dn); +C("ol.source.WMTS.optionsFromCapabilities",function(a,b){var c;c=a.contents.layers;var d=Ja(c,function(a){return a.identifier==b},g);c=0>d?k:ja(c)?c.charAt(d):c[d];var d=c.tileMatrixSetLinks[0].tileMatrixSet,e=c.formats[0],f=Ja(c.styles,function(a){return a.isDefault});0>f&&(f=0);var f=c.styles[f].identifier,h={};F(c.dimensions,function(a){var b=a.identifier,c=a["default"];x(c)||(c=a.values[0]);h[b]=c});var j=a.contents.tileMatrixSets[d],m,q=[],v=[],s=[],A=[],u=Zf(j.supportedCRS).Hc();F(j.matrixIds, +function(a){v.push(a.identifier);s.push(a.topLeftCorner);q.push(2.8E-4*a.scaleDenominator/u);A.push(new Qe(a.tileWidth,a.tileHeight))});m=new Cm({origins:s,resolutions:q,matrixIds:v,tileSizes:A});var j=Zf(j.supportedCRS),t=a.operationsMetadata.GetTile.dcp.http.get,y=Wa(t[0].constraints.GetEncoding.allowedValues)[0],w;switch(y){case "REST":w=c.resourceUrls.tile[e];break;case "KVP":w=[],F(t,function(a){a.constraints.GetEncoding.allowedValues.hasOwnProperty("KVP")&&w.push(a.url)})}return{urls:w,layer:b, +matrixSet:d,format:e,projection:j,requestEncoding:y,tileGrid:m,style:f,dimensions:h}});function en(a){pj.call(this,{height:a.height,opacity:a.opacity,rotation:a.rotation,url:a.url,width:a.width})}D(en,pj);C("ol.style.Icon",en);C("ol.style.IconType",{});function fn(a){sj.call(this,{opacity:a.opacity,strokeColor:a.strokeColor,strokeWidth:a.strokeWidth})}D(fn,sj);C("ol.style.Line",fn); +function gn(a){vj.call(this,{fillColor:a.fillColor,opacity:a.opacity,strokeColor:a.strokeColor,strokeWidth:a.strokeWidth})}D(gn,vj);C("ol.style.Polygon",gn);function hn(a){Mi.call(this,{filter:a.filter,symbolizers:a.symbolizers})}D(hn,Mi);C("ol.style.Rule",hn);function jn(a){zj.call(this,{fillColor:a.fillColor,opacity:a.opacity,size:a.size,strokeColor:a.strokeColor,strokeWidth:a.strokeWidth,type:a.type})}D(jn,zj);C("ol.style.Shape",jn);C("ol.style.ShapeType",xj);xj.CIRCLE="circle"; +function kn(a){Ni.call(this,{rules:a.rules})}D(kn,Ni);C("ol.style.Style",kn);function ln(a){Rh.call(this,{origin:a.origin,origins:a.origins,resolutions:a.resolutions,tileSize:a.tileSize,tileSizes:a.tileSizes})}D(ln,Rh);C("ol.tilegrid.TileGrid",ln);function mn(a){Cm.call(this,{matrixIds:a.matrixIds,origin:a.origin,origins:a.origins,resolutions:a.resolutions,tileSize:a.tileSize,tileSizes:a.tileSizes})}D(mn,Cm);C("ol.tilegrid.WMTS",mn);function nn(a){lm.call(this,{maxZoom:a.maxZoom})}D(nn,lm); +C("ol.tilegrid.XYZ",nn);xg.cf={};xg.Df={};xg.Ef={};xg.Nf={};})(); diff --git a/master/examples/bing-maps.html b/master/examples/bing-maps.html index 1265dac5c3..b4c20e3071 100644 --- a/master/examples/bing-maps.html +++ b/master/examples/bing-maps.html @@ -28,6 +28,12 @@
+ +
@@ -46,6 +52,7 @@ + diff --git a/master/examples/bing-maps.js b/master/examples/bing-maps.js index b40f3630f3..9929cf31e0 100644 --- a/master/examples/bing-maps.js +++ b/master/examples/bing-maps.js @@ -1,12 +1,16 @@ -var map = new ol.Map({ - layers: [ - new ol.layer.TileLayer({ - source: new ol.source.BingMaps({ - key: 'AgtFlPYDnymLEe9zJ5PCkghbNiFZE9aAtTy3mPaEnEBXqLHtFuTcKoZ-miMC3w7R', - style: 'AerialWithLabels' - }) +var styles = ['Road', 'Aerial', 'AerialWithLabels']; +var layers = []; +for (var i = 0; i < styles.length; ++i) { + layers.push(new ol.layer.TileLayer({ + visible: false, + source: new ol.source.BingMaps({ + key: 'AgtFlPYDnymLEe9zJ5PCkghbNiFZE9aAtTy3mPaEnEBXqLHtFuTcKoZ-miMC3w7R', + style: styles[i] }) - ], + })); +} +var map = new ol.Map({ + layers: layers, renderers: ol.RendererHints.createFromQueryData(), target: 'map', view: new ol.View2D({ @@ -15,3 +19,11 @@ var map = new ol.Map({ zoom: 8 }) }); + +$('#layer-select').change(function() { + var style = $(this).find(':selected').val(); + for (var i = 0; i < layers.length; ++i) { + layers[i].setVisible(styles[i] == style); + } +}); +$('#layer-select').trigger('change'); diff --git a/master/examples/canvas-tiles-require.js b/master/examples/canvas-tiles-require.js index 2f0bf9dd89..1cad0ff019 100644 --- a/master/examples/canvas-tiles-require.js +++ b/master/examples/canvas-tiles-require.js @@ -1,6 +1,6 @@ goog.require('ol.Coordinate'); goog.require('ol.Map'); -goog.require('ol.RendererHint'); +goog.require('ol.RendererHints'); goog.require('ol.View2D'); goog.require('ol.layer.TileLayer'); goog.require('ol.projection'); diff --git a/master/examples/canvas-tiles.html b/master/examples/canvas-tiles.html index 099760ec20..388b70a0f4 100644 --- a/master/examples/canvas-tiles.html +++ b/master/examples/canvas-tiles.html @@ -26,17 +26,8 @@
-
-

Canvas

-
-
-
-

WebGL

-
-
-
-

DOM

-
+
+
@@ -53,6 +44,8 @@
+
+ diff --git a/master/examples/canvas-tiles.js b/master/examples/canvas-tiles.js index 9fb07531b6..fb093483e5 100644 --- a/master/examples/canvas-tiles.js +++ b/master/examples/canvas-tiles.js @@ -1,38 +1,22 @@ -var layers = [ - new ol.layer.TileLayer({ - source: new ol.source.OpenStreetMap() - }), - new ol.layer.TileLayer({ - source: new ol.source.DebugTileSource({ - projection: 'EPSG:3857', - tileGrid: new ol.tilegrid.XYZ({ - maxZoom: 22 +var map = new ol.Map({ + layers: [ + new ol.layer.TileLayer({ + source: new ol.source.OpenStreetMap() + }), + new ol.layer.TileLayer({ + source: new ol.source.DebugTileSource({ + projection: 'EPSG:3857', + tileGrid: new ol.tilegrid.XYZ({ + maxZoom: 22 + }) }) }) - }) -]; - -var webglMap = new ol.Map({ + ], + renderers: ol.RendererHints.createFromQueryData(), + target: 'map', view: new ol.View2D({ center: ol.projection.transform( new ol.Coordinate(-0.1275, 51.507222), 'EPSG:4326', 'EPSG:3857'), zoom: 10 - }), - layers: layers, - renderer: ol.RendererHint.WEBGL, - target: 'webglMap' + }) }); - -var domMap = new ol.Map({ - renderer: ol.RendererHint.DOM, - target: 'domMap' -}); -domMap.bindTo('layers', webglMap); -domMap.bindTo('view', webglMap); - -var canvasMap = new ol.Map({ - renderer: ol.RendererHint.CANVAS, - target: 'canvasMap' -}); -canvasMap.bindTo('layers', webglMap); -canvasMap.bindTo('view', webglMap); diff --git a/master/examples/epsg-4326-require.js b/master/examples/epsg-4326-require.js index 89e246c983..425de5f5a7 100644 --- a/master/examples/epsg-4326-require.js +++ b/master/examples/epsg-4326-require.js @@ -6,5 +6,4 @@ goog.require('ol.control.ScaleLine'); goog.require('ol.control.ScaleLineUnits'); goog.require('ol.control.defaults'); goog.require('ol.layer.TileLayer'); -goog.require('ol.projection'); goog.require('ol.source.TiledWMS'); diff --git a/master/examples/example-list.js b/master/examples/example-list.js index 5b4e75cfce..ddb3b0ef0b 100644 --- a/master/examples/example-list.js +++ b/master/examples/example-list.js @@ -1 +1 @@ -var info={"index": {"composed": {"17": 1}, "code": {"12": 4}, "labels": {"17": 2}, "rotated": {"12": 1}, "jpeg": {"6": 3}, "openaerial": {"0": 1, "7": 1}, "osm": {"4": 1}, "parks": {"20": 1}, "alt": {"12": 1}, "wmts": {"24": 3, "23": 4}, "layers": {"17": 2, "4": 1, "20": 1, "15": 1}, "1": {"20": 2}, "style": {"25": 1}, "wms": {"19": 3, "20": 3, "21": 3, "22": 3}, "coordinates": {"4": 3}, "to": {"12": 1}, "only": {"9": 1, "3": 1}, "black": {"4": 1}, "saturation": {"9": 3}, "controls": {"25": 1}, "watercolor": {"17": 2}, "grid": {"4": 1}, "tiled": {"20": 2, "22": 2}, "not": {"4": 1}, "using": {"20": 1}, "rotation": {"12": 2, "15": 1}, "parsing": {"19": 2}, "transparent": {"14": 3}, "and": {"20": 1, "15": 1}, "rotate": {"12": 1}, "semi": {"14": 2}, "brightness": {"3": 3}, "zoom": {"25": 1}, "side": {"15": 4}, "national": {"20": 1}, "terrain": {"17": 2}, "sync": {"15": 1}, "4326": {"5": 2}, "anchored": {"0": 3}, "full": {"7": 2}, "export": {"6": 2}, "are": {"17": 1, "4": 2}, "fullscreen": {"7": 1}, "canvas": {"4": 3, "15": 3}, "scale": {"13": 3}, "overlay": {"0": 1}, "demonstrates": {"0": 1}, "outside": {"11": 1}, "various": {"25": 1}, "exporting": {"6": 1}, "contrast": {"3": 3}, "popup": {"0": 1}, "zoomslider": {"25": 3}, "screen": {"7": 2}, "ol3": {"4": 1}, "html5": {"4": 1}, "tilejson": {"18": 3, "14": 1}, "by": {"15": 2}, "on": {"9": 1, "3": 1, "4": 1}, "shift": {"12": 1}, "generated": {"4": 1}, "openstreetmap": {"4": 1, "6": 1, "8": 1, "11": 1, "12": 1, "13": 1, "16": 1}, "base": {"17": 1}, "origin": {"4": 2}, "geolocation": {"8": 3}, "projection": {"20": 3}, "simple": {"16": 3}, "image": {"21": 3, "6": 1}, "one": {"15": 3}, "tilelayer": {"20": 1, "22": 1, "7": 1}, "capabilities": {"19": 1, "23": 1}, "mapquest": {"0": 1, "10": 3, "14": 1, "7": 1}, "epsg4326": {"5": 1}, "use": {"12": 1}, "from": {"23": 2}, "source": {"24": 1, "17": 1, "23": 1}, "epsg": {"20": 1, "5": 2}, "top": {"4": 1}, "three": {"15": 1}, "custom": {"20": 1}, "pixelmap": {"20": 1}, "hue": {"9": 3}, "that": {"4": 1}, "slider": {"25": 1}, "normalized": {"4": 1}, "line": {"13": 3}, "with": {"17": 1, "4": 1, "14": 1, "20": 1}, "single": {"21": 2}, "of": {"2": 1, "3": 1, "5": 1, "6": 1, "7": 1, "8": 1, "9": 1, "10": 1, "11": 1, "12": 1, "13": 1, "14": 1, "16": 1, "17": 1, "18": 1, "19": 1, "20": 1, "21": 1, "22": 1, "23": 1, "24": 1, "25": 1}, "example": {"0": 1, "1": 2, "2": 2, "3": 2, "4": 1, "5": 2, "6": 2, "7": 2, "8": 2, "9": 2, "10": 2, "11": 2, "12": 2, "13": 2, "14": 2, "15": 1, "16": 2, "17": 2, "18": 2, "19": 2, "20": 2, "21": 2, "22": 2, "23": 2, "24": 2, "25": 1}, "control": {"11": 1, "9": 1, "3": 1, "25": 2}, "layer": {"2": 1, "14": 2, "17": 1, "18": 1, "21": 1, "22": 1}, "share": {"15": 1}, "tiles": {"4": 2}, "21781": {"20": 1}, "an": {"4": 1}, "as": {"6": 1}, "in": {"5": 1}, "getcapabilities": {"19": 3, "23": 1}, "mouse": {"11": 3}, "built": {"23": 1}, "webgl": {"9": 2, "3": 2, "15": 2}, "same": {"15": 1}, "note": {"4": 1}, "maps": {"2": 3, "15": 1}, "animation": {"1": 2}, "tile": {"17": 1, "4": 3, "22": 1, "20": 1, "7": 1}, "css": {"25": 1}, "stamen": {"17": 3}, "map": {"5": 1, "6": 1, "7": 1, "8": 1, "10": 1, "11": 1, "12": 2, "14": 1, "16": 1}, "elements": {"0": 3}, "styling": {"25": 1}, "object": {"15": 1}, "drag": {"12": 1}, "000": {"20": 2}, "two": {"17": 2, "20": 1}, "animations": {"1": 1}, "response": {"19": 1, "23": 1}, "a": {"2": 1, "5": 1, "6": 2, "7": 1, "8": 1, "10": 1, "11": 1, "12": 1, "13": 1, "14": 2, "16": 1, "17": 1, "18": 1, "19": 1, "21": 1, "22": 1, "23": 2, "24": 1}, "center": {"15": 1}, "dom": {"15": 2}, "bing": {"2": 4}, "bottom": {"4": 1}, "client": {"9": 1, "3": 1, "4": 1}, "position": {"11": 3}, "the": {"3": 1, "4": 3, "9": 1, "11": 1, "12": 1, "15": 2, "17": 2, "20": 1}, "resolution": {"15": 1}, "left": {"4": 2}}, "examples": [{"author": "Frederic Junod", "tags": "anchored elements, overlay, popup, mapquest, openaerial", "modified": "2013-03-06T15:12:01+0100", "classes": [], "link": "anchored-elements.html", "shortdesc": "Demonstrates anchored elements.", "title": "Anchored elements example", "example": "anchored-elements.html"}, {"author": "Tom Payne", "tags": "animation", "modified": "2013-03-07T02:56:28+0100", "classes": [], "link": "animation.html", "shortdesc": "Example animations.", "title": "Animation example", "example": "animation.html"}, {"author": "Tom Payne", "tags": "bing, bing-maps", "modified": "2013-03-06T20:13:45+0100", "classes": [], "link": "bing-maps.html", "shortdesc": "Example of a Bing Maps layer.", "title": "Bing Maps example", "example": "bing-maps.html"}, {"author": "Tom Payne", "tags": "brightness, contrast, webgl", "modified": "2013-03-07T01:53:52+0100", "classes": [], "link": "brightness-contrast.html", "shortdesc": "Example of brightness/contrast control on the client (WebGL only).", "title": "Brightness/contrast example", "example": "brightness-contrast.html"}, {"author": "Frederic Junod", "tags": "layers, openstreetmap, canvas", "modified": "2013-03-06T15:12:01+0100", "classes": [], "link": "canvas-tiles.html", "shortdesc": "The black grid tiles are generated on the client with an HTML5 canvas. Note that the tile coordinates are ol3 normalized tile coordinates (origin bottom left), not OSM tile coordinates (origin top left).", "title": "Canvas tiles example", "example": "canvas-tiles.html"}, {"author": "Frederic Junod", "tags": "epsg4326", "modified": "2013-03-06T15:12:01+0100", "classes": [], "link": "epsg-4326.html", "shortdesc": "Example of a map in EPSG:4326.", "title": "EPSG:4326 example", "example": "epsg-4326.html"}, {"author": "Tom Payne", "tags": "export-jpeg, openstreetmap", "modified": "2013-03-06T21:28:59+0100", "classes": [], "link": "export-jpeg.html", "shortdesc": "Example of exporting a map as a JPEG image.", "title": "Export JPEG example", "example": "export-jpeg.html"}, {"author": "Frederic Junod", "tags": "fullscreen, mapquest, openaerial, tile, tilelayer", "modified": "2013-03-06T17:31:46+0100", "classes": [], "link": "full-screen.html", "shortdesc": "Example of a full-screen map.", "title": "Full-screen example", "example": "full-screen.html"}, {"author": "Frederic Junod", "tags": "geolocation, openstreetmap", "modified": "2013-03-11T09:27:15+0100", "classes": [], "link": "geolocation.html", "shortdesc": "Example of a geolocation map.", "title": "Geolocation example", "example": "geolocation.html"}, {"author": "Tom Payne", "tags": "hue, saturation, webgl", "modified": "2013-03-07T01:42:14+0100", "classes": [], "link": "hue-saturation.html", "shortdesc": "Example of hue/saturation control on the client (WebGL only).", "title": "Hue/saturation example", "example": "hue-saturation.html"}, {"author": "Tom Payne", "tags": "mapquest", "modified": "2013-03-07T00:46:09+0100", "classes": [], "link": "mapquest.html", "shortdesc": "Example of a MapQuest map.", "title": "MapQuest example", "example": "mapquest.html"}, {"author": "Tom Payne", "tags": "mouse-position, openstreetmap", "modified": "2013-03-06T20:45:08+0100", "classes": [], "link": "mouse-position.html", "shortdesc": "Example of a mouse position control, outside the map.", "title": "Mouse position example", "example": "mouse-position.html"}, {"author": "Tom Payne", "tags": "rotation, openstreetmap", "modified": "2013-03-09T21:48:33+0100", "classes": [], "link": "rotation.html", "shortdesc": "Example of a rotated map. Use Alt+Shift+drag to rotate the map.", "title": "Rotation example", "example": "rotation.html"}, {"author": "Tom Payne", "tags": "scale-line, openstreetmap", "modified": "2013-03-06T20:34:47+0100", "classes": [], "link": "scale-line.html", "shortdesc": "Example of a scale line.", "title": "Scale line example", "example": "scale-line.html"}, {"author": "Tom Payne", "tags": "transparent, mapquest, tilejson", "modified": "2013-03-09T17:18:41+0100", "classes": [], "link": "semi-transparent-layer.html", "shortdesc": "Example of a map with a semi-transparent layer.", "title": "Semi-transparent layer example", "example": "semi-transparent-layer.html"}, {"author": "Tom Payne", "tags": "side-by-side, canvas, webgl, dom, canvas, sync, object", "modified": "2013-03-07T03:15:19+0100", "classes": [], "link": "side-by-side.html", "shortdesc": "The three maps, one WebGL, one Canvas, one DOM, share the same center, resolution, rotation and layers.", "title": "Side-by-side example", "example": "side-by-side.html"}, {"author": "Frederic Junod", "tags": "simple, openstreetmap", "modified": "2013-03-06T15:12:01+0100", "classes": [], "link": "simple.html", "shortdesc": "Example of a simple map.", "title": "Simple example", "example": "simple.html"}, {"author": "Tom Payne", "tags": "stamen, watercolor, terrain-labels, two-layers", "modified": "2013-03-06T21:08:06+0100", "classes": [], "link": "stamen.html", "shortdesc": "Example of a Stamen tile source. Two layers are composed: the watercolor base layer with the terrain labels.", "title": "Stamen example", "example": "stamen.html"}, {"author": "Tom Payne", "tags": "tilejson", "modified": "2013-03-06T20:21:07+0100", "classes": [], "link": "tilejson.html", "shortdesc": "Example of a TileJSON layer.", "title": "TileJSON example", "example": "tilejson.html"}, {"author": "Frederic Junod", "tags": "wms, capabilities, getcapabilities", "modified": "2013-03-06T15:12:01+0100", "classes": [], "link": "wms-capabilities.html", "shortdesc": "Example of parsing a WMS GetCapabilities response.", "title": "WMS GetCapabilities parsing example", "example": "wms-capabilities.html"}, {"author": "Frederic Junod", "tags": "wms, tile, tilelayer, projection", "modified": "2013-03-06T15:12:01+0100", "classes": [], "link": "wms-custom-proj.html", "shortdesc": "Example of two tiled WMS layers (Pixelmap 1:1'000'000 and national parks) using the projection EPSG:21781.", "title": "Tiled WMS with custom projection example", "example": "wms-custom-proj.html"}, {"author": "\u00c9ric Lemoine", "tags": "wms, image", "modified": "2013-03-07T12:29:13+0100", "classes": [], "link": "wms-single-image.html", "shortdesc": "Example of a single image WMS layer.", "title": "Single image WMS example", "example": "wms-single-image.html"}, {"author": "\u00c9ric Lemoine", "tags": "wms, tile, tilelayer", "modified": "2013-03-07T11:59:09+0100", "classes": [], "link": "wms-tiled.html", "shortdesc": "Example of a tiled WMS layer.", "title": "Tiled WMS example", "example": "wms-tiled.html"}, {"author": "Bruno Binet", "tags": "wmts", "modified": "2013-03-11T11:48:06+0100", "classes": [], "link": "wmts-from-capabilities.html", "shortdesc": "Example of a WMTS source built from a WMTS getCapabilities response.", "title": "WMTS from capabilities example", "example": "wmts-from-capabilities.html"}, {"author": "Bruno Binet", "tags": "wmts", "modified": "2013-03-07T19:40:39+0100", "classes": [], "link": "wmts.html", "shortdesc": "Example of a WMTS source.", "title": "WMTS example", "example": "wmts.html"}, {"author": "Marc Jansen", "tags": "zoom, zoomslider, slider, style, styling, css, control", "modified": "2013-03-11T16:10:10+0100", "classes": [], "link": "zoomslider.html", "shortdesc": "Example of various ZoomSlider controls.", "title": "ZoomSlider control", "example": "zoomslider.html"}]}; \ No newline at end of file +var info={"index": {"composed": {"17": 1}, "code": {"12": 4}, "labels": {"17": 2}, "rotated": {"12": 1}, "jpeg": {"6": 3}, "openaerial": {"0": 1, "7": 1}, "osm": {"4": 1}, "geojson": {"18": 1, "20": 1}, "alt": {"12": 1}, "projection": {"22": 3, "23": 3}, "layers": {"17": 2, "23": 1, "4": 1, "22": 1, "15": 1}, "1": {"22": 2, "23": 2}, "style": {"28": 1, "18": 2, "20": 1}, "based": {"18": 1}, "wms": {"24": 3, "25": 3, "21": 3, "22": 3, "23": 3}, "coordinates": {"4": 3}, "to": {"12": 1}, "only": {"9": 1, "3": 1}, "black": {"4": 1}, "styles": {"18": 1}, "saturation": {"9": 3}, "rules": {"18": 1}, "controls": {"28": 1}, "watercolor": {"17": 2}, "grid": {"4": 1}, "tiled": {"25": 2, "22": 2}, "not": {"4": 1}, "using": {"22": 1, "23": 1}, "rotation": {"12": 2, "15": 1}, "parsing": {"21": 2}, "transparent": {"14": 3}, "and": {"23": 1, "22": 1, "15": 1}, "rotate": {"12": 1}, "semi": {"14": 2}, "brightness": {"3": 3}, "zoom": {"28": 1}, "vector": {"18": 1, "20": 3}, "side": {"15": 4}, "national": {"22": 1, "23": 1}, "terrain": {"17": 2}, "sync": {"15": 1}, "4326": {"5": 2}, "anchored": {"0": 3}, "full": {"7": 2}, "export": {"6": 2}, "are": {"17": 1, "4": 2}, "wmts": {"26": 4, "27": 3}, "fullscreen": {"7": 1}, "canvas": {"4": 3, "15": 3}, "scale": {"13": 3}, "draws": {"18": 1}, "overlay": {"0": 1}, "demonstrates": {"0": 1}, "outside": {"11": 1}, "various": {"28": 1}, "exporting": {"6": 1}, "parks": {"22": 1, "23": 1}, "contrast": {"3": 3}, "popup": {"0": 1}, "zoomslider": {"28": 3}, "screen": {"7": 2}, "ol3": {"4": 1}, "html5": {"4": 1}, "tilejson": {"19": 3, "14": 1}, "by": {"15": 2}, "on": {"9": 1, "3": 1, "4": 1}, "shift": {"12": 1}, "generated": {"4": 1}, "openstreetmap": {"4": 1, "6": 1, "8": 1, "11": 1, "12": 1, "13": 1, "16": 1}, "base": {"17": 1}, "origin": {"4": 2}, "geolocation": {"8": 3}, "features": {"18": 1}, "simple": {"16": 3}, "image": {"24": 3, "6": 1, "23": 3}, "one": {"15": 3}, "tilelayer": {"25": 1, "22": 1, "7": 1}, "capabilities": {"26": 1, "21": 1}, "mapquest": {"0": 1, "10": 3, "14": 1, "7": 1}, "epsg4326": {"5": 1}, "use": {"12": 1}, "from": {"26": 2}, "source": {"17": 1, "26": 1, "27": 1}, "epsg": {"5": 2, "22": 1, "23": 1}, "top": {"4": 1}, "three": {"15": 1}, "custom": {"22": 1, "23": 1}, "pixelmap": {"22": 1, "23": 1}, "hue": {"9": 3}, "that": {"4": 1}, "slider": {"28": 1}, "normalized": {"4": 1}, "line": {"13": 3}, "with": {"4": 1, "14": 1, "17": 1, "18": 2, "22": 1, "23": 1}, "single": {"24": 2, "23": 3}, "of": {"2": 1, "3": 1, "5": 1, "6": 1, "7": 1, "8": 1, "9": 1, "10": 1, "11": 1, "12": 1, "13": 1, "14": 1, "16": 1, "17": 1, "19": 1, "20": 1, "21": 1, "22": 1, "23": 1, "24": 1, "25": 1, "26": 1, "27": 1, "28": 1}, "example": {"0": 1, "1": 2, "2": 2, "3": 2, "4": 1, "5": 2, "6": 2, "7": 2, "8": 2, "9": 2, "10": 2, "11": 2, "12": 2, "13": 2, "14": 2, "15": 1, "16": 2, "17": 2, "18": 1, "19": 2, "20": 2, "21": 2, "22": 2, "23": 2, "24": 2, "25": 2, "26": 2, "27": 2, "28": 1}, "control": {"11": 1, "9": 1, "3": 1, "28": 2}, "layer": {"2": 1, "14": 2, "17": 1, "19": 1, "20": 2, "24": 1, "25": 1}, "share": {"15": 1}, "tiles": {"4": 2}, "21781": {"22": 1, "23": 1}, "an": {"4": 1}, "as": {"6": 1}, "in": {"5": 1}, "getcapabilities": {"26": 1, "21": 3}, "mouse": {"11": 3}, "built": {"26": 1}, "webgl": {"9": 2, "3": 2, "15": 2}, "same": {"15": 1}, "note": {"4": 1}, "maps": {"2": 3, "15": 1}, "animation": {"1": 2}, "tile": {"17": 1, "4": 3, "25": 1, "22": 1, "7": 1}, "css": {"28": 1}, "stamen": {"17": 3}, "map": {"5": 1, "6": 1, "7": 1, "8": 1, "10": 1, "11": 1, "12": 2, "14": 1, "16": 1}, "elements": {"0": 3}, "styling": {"28": 1}, "object": {"15": 1}, "drag": {"12": 1}, "000": {"22": 2, "23": 2}, "two": {"17": 2, "22": 1, "23": 1}, "animations": {"1": 1}, "response": {"26": 1, "21": 1}, "a": {"2": 1, "5": 1, "6": 2, "7": 1, "8": 1, "10": 1, "11": 1, "12": 1, "13": 1, "14": 2, "16": 1, "17": 1, "19": 1, "20": 1, "21": 1, "24": 1, "25": 1, "26": 2, "27": 1}, "center": {"15": 1}, "dom": {"15": 2}, "bing": {"2": 4}, "bottom": {"4": 1}, "rule": {"18": 1}, "client": {"9": 1, "3": 1, "4": 1}, "position": {"11": 3}, "the": {"3": 1, "4": 3, "9": 1, "11": 1, "12": 1, "15": 2, "17": 2, "22": 1, "23": 1}, "resolution": {"15": 1}, "left": {"4": 2}}, "examples": [{"author": "Frederic Junod", "tags": "anchored elements, overlay, popup, mapquest, openaerial", "modified": "2013-03-06T15:12:01+0100", "classes": [], "link": "anchored-elements.html", "shortdesc": "Demonstrates anchored elements.", "title": "Anchored elements example", "example": "anchored-elements.html"}, {"author": "Tom Payne", "tags": "animation", "modified": "2013-03-07T02:56:28+0100", "classes": [], "link": "animation.html", "shortdesc": "Example animations.", "title": "Animation example", "example": "animation.html"}, {"author": "Frederic Junod", "tags": "bing, bing-maps", "modified": "2013-03-13T13:36:31+0100", "classes": [], "link": "bing-maps.html", "shortdesc": "Example of a Bing Maps layer.", "title": "Bing Maps example", "example": "bing-maps.html"}, {"author": "Tom Payne", "tags": "brightness, contrast, webgl", "modified": "2013-03-07T01:53:52+0100", "classes": [], "link": "brightness-contrast.html", "shortdesc": "Example of brightness/contrast control on the client (WebGL only).", "title": "Brightness/contrast example", "example": "brightness-contrast.html"}, {"author": "Tom Payne", "tags": "layers, openstreetmap, canvas", "modified": "2013-03-11T17:07:27+0100", "classes": [], "link": "canvas-tiles.html", "shortdesc": "The black grid tiles are generated on the client with an HTML5 canvas. Note that the tile coordinates are ol3 normalized tile coordinates (origin bottom left), not OSM tile coordinates (origin top left).", "title": "Canvas tiles example", "example": "canvas-tiles.html"}, {"author": "Frederic Junod", "tags": "epsg4326", "modified": "2013-03-06T15:12:01+0100", "classes": [], "link": "epsg-4326.html", "shortdesc": "Example of a map in EPSG:4326.", "title": "EPSG:4326 example", "example": "epsg-4326.html"}, {"author": "Tom Payne", "tags": "export-jpeg, openstreetmap", "modified": "2013-03-06T21:28:59+0100", "classes": [], "link": "export-jpeg.html", "shortdesc": "Example of exporting a map as a JPEG image.", "title": "Export JPEG example", "example": "export-jpeg.html"}, {"author": "Frederic Junod", "tags": "fullscreen, mapquest, openaerial, tile, tilelayer", "modified": "2013-03-06T17:31:46+0100", "classes": [], "link": "full-screen.html", "shortdesc": "Example of a full-screen map.", "title": "Full-screen example", "example": "full-screen.html"}, {"author": "Frederic Junod", "tags": "geolocation, openstreetmap", "modified": "2013-03-11T09:27:15+0100", "classes": [], "link": "geolocation.html", "shortdesc": "Example of a geolocation map.", "title": "Geolocation example", "example": "geolocation.html"}, {"author": "Tom Payne", "tags": "hue, saturation, webgl", "modified": "2013-03-07T01:42:14+0100", "classes": [], "link": "hue-saturation.html", "shortdesc": "Example of hue/saturation control on the client (WebGL only).", "title": "Hue/saturation example", "example": "hue-saturation.html"}, {"author": "Tom Payne", "tags": "mapquest", "modified": "2013-03-07T00:46:09+0100", "classes": [], "link": "mapquest.html", "shortdesc": "Example of a MapQuest map.", "title": "MapQuest example", "example": "mapquest.html"}, {"author": "Tom Payne", "tags": "mouse-position, openstreetmap", "modified": "2013-03-06T20:45:08+0100", "classes": [], "link": "mouse-position.html", "shortdesc": "Example of a mouse position control, outside the map.", "title": "Mouse position example", "example": "mouse-position.html"}, {"author": "Tom Payne", "tags": "rotation, openstreetmap", "modified": "2013-03-09T21:48:33+0100", "classes": [], "link": "rotation.html", "shortdesc": "Example of a rotated map. Use Alt+Shift+drag to rotate the map.", "title": "Rotation example", "example": "rotation.html"}, {"author": "Tom Payne", "tags": "scale-line, openstreetmap", "modified": "2013-03-06T20:34:47+0100", "classes": [], "link": "scale-line.html", "shortdesc": "Example of a scale line.", "title": "Scale line example", "example": "scale-line.html"}, {"author": "Tom Payne", "tags": "transparent, mapquest, tilejson", "modified": "2013-03-09T17:18:41+0100", "classes": [], "link": "semi-transparent-layer.html", "shortdesc": "Example of a map with a semi-transparent layer.", "title": "Semi-transparent layer example", "example": "semi-transparent-layer.html"}, {"author": "Tom Payne", "tags": "side-by-side, canvas, webgl, dom, canvas, sync, object", "modified": "2013-03-07T03:15:19+0100", "classes": [], "link": "side-by-side.html", "shortdesc": "The three maps, one WebGL, one Canvas, one DOM, share the same center, resolution, rotation and layers.", "title": "Side-by-side example", "example": "side-by-side.html"}, {"author": "Frederic Junod", "tags": "simple, openstreetmap", "modified": "2013-03-06T15:12:01+0100", "classes": [], "link": "simple.html", "shortdesc": "Example of a simple map.", "title": "Simple example", "example": "simple.html"}, {"author": "Tom Payne", "tags": "stamen, watercolor, terrain-labels, two-layers", "modified": "2013-03-06T21:08:06+0100", "classes": [], "link": "stamen.html", "shortdesc": "Example of a Stamen tile source. Two layers are composed: the watercolor base layer with the terrain labels.", "title": "Stamen example", "example": "stamen.html"}, {"author": "ahocevar", "tags": "vector, geojson, style", "modified": "2013-03-08T16:26:18+0100", "classes": [], "link": "style-rules.html", "shortdesc": "Draws features with rule based styles.", "title": "Style with rules example", "example": "style-rules.html"}, {"author": "Tom Payne", "tags": "tilejson", "modified": "2013-03-06T20:21:07+0100", "classes": [], "link": "tilejson.html", "shortdesc": "Example of a TileJSON layer.", "title": "TileJSON example", "example": "tilejson.html"}, {"author": "Tim Schaub", "tags": "vector, geojson, style", "modified": "2013-03-07T23:48:23-0700", "classes": [], "link": "vector-layer.html", "shortdesc": "Example of a vector layer.", "title": "Vector layer example", "example": "vector-layer.html"}, {"author": "Frederic Junod", "tags": "wms, capabilities, getcapabilities", "modified": "2013-03-06T15:12:01+0100", "classes": [], "link": "wms-capabilities.html", "shortdesc": "Example of parsing a WMS GetCapabilities response.", "title": "WMS GetCapabilities parsing example", "example": "wms-capabilities.html"}, {"author": "C\u00e9dric Moullet", "tags": "wms, tile, tilelayer, projection", "modified": "2013-03-11T20:15:54+0100", "classes": [], "link": "wms-custom-proj.html", "shortdesc": "Example of two tiled WMS layers (Pixelmap 1:1'000'000 and national parks) using the projection EPSG:21781.", "title": "Tiled WMS with custom projection example", "example": "wms-custom-proj.html"}, {"author": "C\u00e9dric Moullet", "tags": "wms, single image, projection", "modified": "2013-03-11T20:25:29+0100", "classes": [], "link": "wms-single-image-custom-proj.html", "shortdesc": "Example of two single image WMS layers (Pixelmap 1:1'000'000 and national parks) using the projection EPSG:21781.", "title": "Single image WMS with custom projection example", "example": "wms-single-image-custom-proj.html"}, {"author": "\u00c9ric Lemoine", "tags": "wms, image", "modified": "2013-03-07T12:29:13+0100", "classes": [], "link": "wms-single-image.html", "shortdesc": "Example of a single image WMS layer.", "title": "Single image WMS example", "example": "wms-single-image.html"}, {"author": "\u00c9ric Lemoine", "tags": "wms, tile, tilelayer", "modified": "2013-03-07T11:59:09+0100", "classes": [], "link": "wms-tiled.html", "shortdesc": "Example of a tiled WMS layer.", "title": "Tiled WMS example", "example": "wms-tiled.html"}, {"author": "Bruno Binet", "tags": "wmts", "modified": "2013-03-11T11:48:06+0100", "classes": [], "link": "wmts-from-capabilities.html", "shortdesc": "Example of a WMTS source built from a WMTS getCapabilities response.", "title": "WMTS from capabilities example", "example": "wmts-from-capabilities.html"}, {"author": "Bruno Binet", "tags": "wmts", "modified": "2013-03-07T19:40:39+0100", "classes": [], "link": "wmts.html", "shortdesc": "Example of a WMTS source.", "title": "WMTS example", "example": "wmts.html"}, {"author": "Marc Jansen", "tags": "zoom, zoomslider, slider, style, styling, css, control", "modified": "2013-03-11T16:10:10+0100", "classes": [], "link": "zoomslider.html", "shortdesc": "Example of various ZoomSlider controls.", "title": "ZoomSlider control", "example": "zoomslider.html"}]}; \ No newline at end of file diff --git a/master/examples/example-list.xml b/master/examples/example-list.xml index 65014137e6..fc65bbae19 100644 --- a/master/examples/example-list.xml +++ b/master/examples/example-list.xml @@ -1 +1 @@ -OpenLayers Exampleshttp://openlayers.github.com/ol3/master/examples/example-list.xml#2013-03-11T03:26:49Z2013-03-11T03:26:49ZZoomSlider controlzoom, zoomslider, slider, style, styling, css, controlExample of various ZoomSlider controls.2013-03-11T16:10:10+0100Marc Jansenhttp://openlayers.github.com/ol3/master/examples/zoomslider.html#2013-03-11T16:10:10+0100WMTS from capabilities examplewmtsExample of a WMTS source built from a WMTS getCapabilities response.2013-03-11T11:48:06+0100Bruno Binethttp://openlayers.github.com/ol3/master/examples/wmts-from-capabilities.html#2013-03-11T11:48:06+0100Geolocation examplegeolocation, openstreetmapExample of a geolocation map.2013-03-11T09:27:15+0100Frederic Junodhttp://openlayers.github.com/ol3/master/examples/geolocation.html#2013-03-11T09:27:15+0100Rotation examplerotation, openstreetmapExample of a rotated map. Use <code>Alt</code>+<code>Shift</code>+drag to rotate the map.2013-03-09T21:48:33+0100Tom Paynehttp://openlayers.github.com/ol3/master/examples/rotation.html#2013-03-09T21:48:33+0100Semi-transparent layer exampletransparent, mapquest, tilejsonExample of a map with a semi-transparent layer.2013-03-09T17:18:41+0100Tom Paynehttp://openlayers.github.com/ol3/master/examples/semi-transparent-layer.html#2013-03-09T17:18:41+0100WMTS examplewmtsExample of a WMTS source.2013-03-07T19:40:39+0100Bruno Binethttp://openlayers.github.com/ol3/master/examples/wmts.html#2013-03-07T19:40:39+0100Single image WMS examplewms, imageExample of a single image WMS layer.2013-03-07T12:29:13+0100Éric Lemoinehttp://openlayers.github.com/ol3/master/examples/wms-single-image.html#2013-03-07T12:29:13+0100Tiled WMS examplewms, tile, tilelayerExample of a tiled WMS layer.2013-03-07T11:59:09+0100Éric Lemoinehttp://openlayers.github.com/ol3/master/examples/wms-tiled.html#2013-03-07T11:59:09+0100Side-by-side exampleside-by-side, canvas, webgl, dom, canvas, sync, objectThe three maps, one WebGL, one Canvas, one DOM, share the same center, resolution, rotation and layers.2013-03-07T03:15:19+0100Tom Paynehttp://openlayers.github.com/ol3/master/examples/side-by-side.html#2013-03-07T03:15:19+0100Animation exampleanimationExample animations.2013-03-07T02:56:28+0100Tom Paynehttp://openlayers.github.com/ol3/master/examples/animation.html#2013-03-07T02:56:28+0100Brightness/contrast examplebrightness, contrast, webglExample of brightness/contrast control on the client (WebGL only).2013-03-07T01:53:52+0100Tom Paynehttp://openlayers.github.com/ol3/master/examples/brightness-contrast.html#2013-03-07T01:53:52+0100Hue/saturation examplehue, saturation, webglExample of hue/saturation control on the client (WebGL only).2013-03-07T01:42:14+0100Tom Paynehttp://openlayers.github.com/ol3/master/examples/hue-saturation.html#2013-03-07T01:42:14+0100MapQuest examplemapquestExample of a MapQuest map.2013-03-07T00:46:09+0100Tom Paynehttp://openlayers.github.com/ol3/master/examples/mapquest.html#2013-03-07T00:46:09+0100Export JPEG exampleexport-jpeg, openstreetmapExample of exporting a map as a JPEG image.2013-03-06T21:28:59+0100Tom Paynehttp://openlayers.github.com/ol3/master/examples/export-jpeg.html#2013-03-06T21:28:59+0100Stamen examplestamen, watercolor, terrain-labels, two-layersExample of a Stamen tile source. Two layers are composed: the watercolor base layer with the terrain labels.2013-03-06T21:08:06+0100Tom Paynehttp://openlayers.github.com/ol3/master/examples/stamen.html#2013-03-06T21:08:06+0100Mouse position examplemouse-position, openstreetmapExample of a mouse position control, outside the map.2013-03-06T20:45:08+0100Tom Paynehttp://openlayers.github.com/ol3/master/examples/mouse-position.html#2013-03-06T20:45:08+0100Scale line examplescale-line, openstreetmapExample of a scale line.2013-03-06T20:34:47+0100Tom Paynehttp://openlayers.github.com/ol3/master/examples/scale-line.html#2013-03-06T20:34:47+0100TileJSON exampletilejsonExample of a TileJSON layer.2013-03-06T20:21:07+0100Tom Paynehttp://openlayers.github.com/ol3/master/examples/tilejson.html#2013-03-06T20:21:07+0100Bing Maps examplebing, bing-mapsExample of a Bing Maps layer.2013-03-06T20:13:45+0100Tom Paynehttp://openlayers.github.com/ol3/master/examples/bing-maps.html#2013-03-06T20:13:45+0100Full-screen examplefullscreen, mapquest, openaerial, tile, tilelayerExample of a full-screen map.2013-03-06T17:31:46+0100Frederic Junodhttp://openlayers.github.com/ol3/master/examples/full-screen.html#2013-03-06T17:31:46+0100Anchored elements exampleanchored elements, overlay, popup, mapquest, openaerialDemonstrates anchored elements.2013-03-06T15:12:01+0100Frederic Junodhttp://openlayers.github.com/ol3/master/examples/anchored-elements.html#2013-03-06T15:12:01+0100Canvas tiles examplelayers, openstreetmap, canvasThe black grid tiles are generated on the client with an HTML5 canvas. Note that the tile coordinates are ol3 normalized tile coordinates (origin bottom left), not OSM tile coordinates (origin top left).2013-03-06T15:12:01+0100Frederic Junodhttp://openlayers.github.com/ol3/master/examples/canvas-tiles.html#2013-03-06T15:12:01+0100EPSG:4326 exampleepsg4326Example of a map in EPSG:4326.2013-03-06T15:12:01+0100Frederic Junodhttp://openlayers.github.com/ol3/master/examples/epsg-4326.html#2013-03-06T15:12:01+0100Simple examplesimple, openstreetmapExample of a simple map.2013-03-06T15:12:01+0100Frederic Junodhttp://openlayers.github.com/ol3/master/examples/simple.html#2013-03-06T15:12:01+0100WMS GetCapabilities parsing examplewms, capabilities, getcapabilitiesExample of parsing a WMS GetCapabilities response.2013-03-06T15:12:01+0100Frederic Junodhttp://openlayers.github.com/ol3/master/examples/wms-capabilities.html#2013-03-06T15:12:01+0100Tiled WMS with custom projection examplewms, tile, tilelayer, projectionExample of two tiled WMS layers (Pixelmap 1:1'000'000 and national parks) using the projection EPSG:21781.2013-03-06T15:12:01+0100Frederic Junodhttp://openlayers.github.com/ol3/master/examples/wms-custom-proj.html#2013-03-06T15:12:01+0100 \ No newline at end of file +OpenLayers Exampleshttp://openlayers.github.com/ol3/master/examples/example-list.xml#2013-03-15T09:37:32Z2013-03-15T09:37:32ZBing Maps examplebing, bing-mapsExample of a Bing Maps layer.2013-03-13T13:36:31+0100Frederic Junodhttp://openlayers.github.com/ol3/master/examples/bing-maps.html#2013-03-13T13:36:31+0100Single image WMS with custom projection examplewms, single image, projectionExample of two single image WMS layers (Pixelmap 1:1'000'000 and national parks) using the projection EPSG:21781.2013-03-11T20:25:29+0100Cédric Moullethttp://openlayers.github.com/ol3/master/examples/wms-single-image-custom-proj.html#2013-03-11T20:25:29+0100Tiled WMS with custom projection examplewms, tile, tilelayer, projectionExample of two tiled WMS layers (Pixelmap 1:1'000'000 and national parks) using the projection EPSG:21781.2013-03-11T20:15:54+0100Cédric Moullethttp://openlayers.github.com/ol3/master/examples/wms-custom-proj.html#2013-03-11T20:15:54+0100Canvas tiles examplelayers, openstreetmap, canvasThe black grid tiles are generated on the client with an HTML5 canvas. Note that the tile coordinates are ol3 normalized tile coordinates (origin bottom left), not OSM tile coordinates (origin top left).2013-03-11T17:07:27+0100Tom Paynehttp://openlayers.github.com/ol3/master/examples/canvas-tiles.html#2013-03-11T17:07:27+0100ZoomSlider controlzoom, zoomslider, slider, style, styling, css, controlExample of various ZoomSlider controls.2013-03-11T16:10:10+0100Marc Jansenhttp://openlayers.github.com/ol3/master/examples/zoomslider.html#2013-03-11T16:10:10+0100WMTS from capabilities examplewmtsExample of a WMTS source built from a WMTS getCapabilities response.2013-03-11T11:48:06+0100Bruno Binethttp://openlayers.github.com/ol3/master/examples/wmts-from-capabilities.html#2013-03-11T11:48:06+0100Geolocation examplegeolocation, openstreetmapExample of a geolocation map.2013-03-11T09:27:15+0100Frederic Junodhttp://openlayers.github.com/ol3/master/examples/geolocation.html#2013-03-11T09:27:15+0100Rotation examplerotation, openstreetmapExample of a rotated map. Use <code>Alt</code>+<code>Shift</code>+drag to rotate the map.2013-03-09T21:48:33+0100Tom Paynehttp://openlayers.github.com/ol3/master/examples/rotation.html#2013-03-09T21:48:33+0100Semi-transparent layer exampletransparent, mapquest, tilejsonExample of a map with a semi-transparent layer.2013-03-09T17:18:41+0100Tom Paynehttp://openlayers.github.com/ol3/master/examples/semi-transparent-layer.html#2013-03-09T17:18:41+0100Style with rules examplevector, geojson, styleDraws features with rule based styles.2013-03-08T16:26:18+0100ahocevarhttp://openlayers.github.com/ol3/master/examples/style-rules.html#2013-03-08T16:26:18+0100Vector layer examplevector, geojson, styleExample of a vector layer.2013-03-07T23:48:23-0700Tim Schaubhttp://openlayers.github.com/ol3/master/examples/vector-layer.html#2013-03-07T23:48:23-0700WMTS examplewmtsExample of a WMTS source.2013-03-07T19:40:39+0100Bruno Binethttp://openlayers.github.com/ol3/master/examples/wmts.html#2013-03-07T19:40:39+0100Single image WMS examplewms, imageExample of a single image WMS layer.2013-03-07T12:29:13+0100Éric Lemoinehttp://openlayers.github.com/ol3/master/examples/wms-single-image.html#2013-03-07T12:29:13+0100Tiled WMS examplewms, tile, tilelayerExample of a tiled WMS layer.2013-03-07T11:59:09+0100Éric Lemoinehttp://openlayers.github.com/ol3/master/examples/wms-tiled.html#2013-03-07T11:59:09+0100Side-by-side exampleside-by-side, canvas, webgl, dom, canvas, sync, objectThe three maps, one WebGL, one Canvas, one DOM, share the same center, resolution, rotation and layers.2013-03-07T03:15:19+0100Tom Paynehttp://openlayers.github.com/ol3/master/examples/side-by-side.html#2013-03-07T03:15:19+0100Animation exampleanimationExample animations.2013-03-07T02:56:28+0100Tom Paynehttp://openlayers.github.com/ol3/master/examples/animation.html#2013-03-07T02:56:28+0100Brightness/contrast examplebrightness, contrast, webglExample of brightness/contrast control on the client (WebGL only).2013-03-07T01:53:52+0100Tom Paynehttp://openlayers.github.com/ol3/master/examples/brightness-contrast.html#2013-03-07T01:53:52+0100Hue/saturation examplehue, saturation, webglExample of hue/saturation control on the client (WebGL only).2013-03-07T01:42:14+0100Tom Paynehttp://openlayers.github.com/ol3/master/examples/hue-saturation.html#2013-03-07T01:42:14+0100MapQuest examplemapquestExample of a MapQuest map.2013-03-07T00:46:09+0100Tom Paynehttp://openlayers.github.com/ol3/master/examples/mapquest.html#2013-03-07T00:46:09+0100Export JPEG exampleexport-jpeg, openstreetmapExample of exporting a map as a JPEG image.2013-03-06T21:28:59+0100Tom Paynehttp://openlayers.github.com/ol3/master/examples/export-jpeg.html#2013-03-06T21:28:59+0100Stamen examplestamen, watercolor, terrain-labels, two-layersExample of a Stamen tile source. Two layers are composed: the watercolor base layer with the terrain labels.2013-03-06T21:08:06+0100Tom Paynehttp://openlayers.github.com/ol3/master/examples/stamen.html#2013-03-06T21:08:06+0100Mouse position examplemouse-position, openstreetmapExample of a mouse position control, outside the map.2013-03-06T20:45:08+0100Tom Paynehttp://openlayers.github.com/ol3/master/examples/mouse-position.html#2013-03-06T20:45:08+0100Scale line examplescale-line, openstreetmapExample of a scale line.2013-03-06T20:34:47+0100Tom Paynehttp://openlayers.github.com/ol3/master/examples/scale-line.html#2013-03-06T20:34:47+0100TileJSON exampletilejsonExample of a TileJSON layer.2013-03-06T20:21:07+0100Tom Paynehttp://openlayers.github.com/ol3/master/examples/tilejson.html#2013-03-06T20:21:07+0100Full-screen examplefullscreen, mapquest, openaerial, tile, tilelayerExample of a full-screen map.2013-03-06T17:31:46+0100Frederic Junodhttp://openlayers.github.com/ol3/master/examples/full-screen.html#2013-03-06T17:31:46+0100Anchored elements exampleanchored elements, overlay, popup, mapquest, openaerialDemonstrates anchored elements.2013-03-06T15:12:01+0100Frederic Junodhttp://openlayers.github.com/ol3/master/examples/anchored-elements.html#2013-03-06T15:12:01+0100EPSG:4326 exampleepsg4326Example of a map in EPSG:4326.2013-03-06T15:12:01+0100Frederic Junodhttp://openlayers.github.com/ol3/master/examples/epsg-4326.html#2013-03-06T15:12:01+0100Simple examplesimple, openstreetmapExample of a simple map.2013-03-06T15:12:01+0100Frederic Junodhttp://openlayers.github.com/ol3/master/examples/simple.html#2013-03-06T15:12:01+0100WMS GetCapabilities parsing examplewms, capabilities, getcapabilitiesExample of parsing a WMS GetCapabilities response.2013-03-06T15:12:01+0100Frederic Junodhttp://openlayers.github.com/ol3/master/examples/wms-capabilities.html#2013-03-06T15:12:01+0100 \ No newline at end of file diff --git a/master/examples/full-screen-require.js b/master/examples/full-screen-require.js index 04ee3aa6fc..be7a9b1a84 100644 --- a/master/examples/full-screen-require.js +++ b/master/examples/full-screen-require.js @@ -2,6 +2,5 @@ goog.require('ol.Coordinate'); goog.require('ol.Map'); goog.require('ol.RendererHints'); goog.require('ol.View2D'); -goog.require('ol.control.defaults'); goog.require('ol.layer.TileLayer'); goog.require('ol.source.MapQuestOpenAerial'); diff --git a/master/examples/mouse-position-require.js b/master/examples/mouse-position-require.js index 52f645eee6..943ec598d4 100644 --- a/master/examples/mouse-position-require.js +++ b/master/examples/mouse-position-require.js @@ -5,5 +5,4 @@ goog.require('ol.View2D'); goog.require('ol.control.MousePosition'); goog.require('ol.control.defaults'); goog.require('ol.layer.TileLayer'); -goog.require('ol.projection'); goog.require('ol.source.OpenStreetMap'); diff --git a/master/examples/side-by-side-require.js b/master/examples/side-by-side-require.js index aaede8a080..69b2ff2d3d 100644 --- a/master/examples/side-by-side-require.js +++ b/master/examples/side-by-side-require.js @@ -3,8 +3,6 @@ goog.require('ol.Coordinate'); goog.require('ol.Map'); goog.require('ol.RendererHint'); goog.require('ol.View2D'); -goog.require('ol.animation'); -goog.require('ol.easing'); goog.require('ol.interaction.Keyboard'); goog.require('ol.layer.TileLayer'); goog.require('ol.projection'); diff --git a/master/examples/style-rules-require.js b/master/examples/style-rules-require.js new file mode 100644 index 0000000000..633b161b09 --- /dev/null +++ b/master/examples/style-rules-require.js @@ -0,0 +1,15 @@ +goog.require('ol.Collection'); +goog.require('ol.Coordinate'); +goog.require('ol.Expression'); +goog.require('ol.Map'); +goog.require('ol.RendererHint'); +goog.require('ol.View2D'); +goog.require('ol.control.defaults'); +goog.require('ol.filter.Filter'); +goog.require('ol.layer.Vector'); +goog.require('ol.parser.GeoJSON'); +goog.require('ol.projection'); +goog.require('ol.source.Vector'); +goog.require('ol.style.Line'); +goog.require('ol.style.Rule'); +goog.require('ol.style.Style'); diff --git a/master/examples/style-rules.html b/master/examples/style-rules.html new file mode 100644 index 0000000000..7a0859f3ba --- /dev/null +++ b/master/examples/style-rules.html @@ -0,0 +1,52 @@ + + + + + + + + + + Style with rules example + + + + + +
+ +
+
+
+
+
+ +
+ +
+

Style with rules example

+

Draws features with rule based styles.

+
+

See the style-rules.js source to see how this is done.

+
+
vector, geojson, style
+
+ +
+ +
+ + + + + diff --git a/master/examples/style-rules.js b/master/examples/style-rules.js new file mode 100644 index 0000000000..cd0711ed4e --- /dev/null +++ b/master/examples/style-rules.js @@ -0,0 +1,117 @@ +var style = new ol.style.Style({rules: [ + new ol.style.Rule({ + filter: new ol.filter.Filter(function(feature) { + return feature.get('where') == 'outer'; + }), + symbolizers: [ + new ol.style.Line({ + strokeColor: new ol.Expression('color'), + strokeWidth: 4, + opacity: 1 + }) + ] + }), + new ol.style.Rule({ + filter: new ol.filter.Filter(function(feature) { + return feature.get('where') == 'inner'; + }), + symbolizers: [ + new ol.style.Line({ + strokeColor: '#013', + strokeWidth: 4, + opacity: 1 + }), + new ol.style.Line({ + strokeColor: new ol.Expression('color'), + strokeWidth: 2, + opacity: 1 + }) + ] + }) +]}); + +var vector = new ol.layer.Vector({ + style: style, + source: new ol.source.Vector({ + projection: ol.projection.get('EPSG:3857') + }) +}); + +vector.parseFeatures({ + 'type': 'FeatureCollection', + 'features': [{ + 'type': 'Feature', + 'properties': { + 'color': '#BADA55', + 'where': 'inner' + }, + 'geometry': { + 'type': 'LineString', + 'coordinates': [[-10000000, -10000000], [10000000, 10000000]] + } + }, { + 'type': 'Feature', + 'properties': { + 'color': '#BADA55', + 'where': 'inner' + }, + 'geometry': { + 'type': 'LineString', + 'coordinates': [[-10000000, 10000000], [10000000, -10000000]] + } + }, { + 'type': 'Feature', + 'properties': { + 'color': '#013', + 'where': 'outer' + }, + 'geometry': { + 'type': 'LineString', + 'coordinates': [[-10000000, -10000000], [-10000000, 10000000]] + } + }, { + 'type': 'Feature', + 'properties': { + 'color': '#013', + 'where': 'outer' + }, + 'geometry': { + 'type': 'LineString', + 'coordinates': [[-10000000, 10000000], [10000000, 10000000]] + } + }, { + 'type': 'Feature', + 'properties': { + 'color': '#013', + 'where': 'outer' + }, + 'geometry': { + 'type': 'LineString', + 'coordinates': [[10000000, 10000000], [10000000, -10000000]] + } + }, { + 'type': 'Feature', + 'properties': { + 'color': '#013', + 'where': 'outer' + }, + 'geometry': { + 'type': 'LineString', + 'coordinates': [[10000000, -10000000], [-10000000, -10000000]] + } + }] +}, new ol.parser.GeoJSON(), ol.projection.get('EPSG:3857')); + + +var map = new ol.Map({ + layers: [vector], + controls: ol.control.defaults({ + attribution: false + }), + renderer: ol.RendererHint.CANVAS, + target: 'map', + view: new ol.View2D({ + center: new ol.Coordinate(0, 0), + zoom: 1 + }) +}); diff --git a/master/examples/vector-layer-require.js b/master/examples/vector-layer-require.js new file mode 100644 index 0000000000..40c9998ac2 --- /dev/null +++ b/master/examples/vector-layer-require.js @@ -0,0 +1,14 @@ +goog.require('ol.Collection'); +goog.require('ol.Coordinate'); +goog.require('ol.Map'); +goog.require('ol.RendererHint'); +goog.require('ol.View2D'); +goog.require('ol.layer.TileLayer'); +goog.require('ol.layer.Vector'); +goog.require('ol.parser.GeoJSON'); +goog.require('ol.projection'); +goog.require('ol.source.MapQuestOpenAerial'); +goog.require('ol.source.Vector'); +goog.require('ol.style.Polygon'); +goog.require('ol.style.Rule'); +goog.require('ol.style.Style'); diff --git a/master/examples/vector-layer.html b/master/examples/vector-layer.html new file mode 100644 index 0000000000..9ec61c5232 --- /dev/null +++ b/master/examples/vector-layer.html @@ -0,0 +1,52 @@ + + + + + + + + + + Vector layer example + + + + + +
+ +
+
+
+
+
+ +
+ +
+

Vector layer example

+

Example of a vector layer.

+
+

See the vector-layer.js source to see how this is done.

+
+
vector, geojson, style
+
+ +
+ +
+ + + + + diff --git a/master/examples/vector-layer.js b/master/examples/vector-layer.js new file mode 100644 index 0000000000..97d7f7ad00 --- /dev/null +++ b/master/examples/vector-layer.js @@ -0,0 +1,52 @@ +var map; + +var raster = new ol.layer.TileLayer({ + source: new ol.source.MapQuestOpenAerial() +}); + +var vector = new ol.layer.Vector({ + source: new ol.source.Vector({ + projection: ol.projection.get('EPSG:4326') + }), + style: new ol.style.Style({rules: [ + new ol.style.Rule({ + symbolizers: [ + new ol.style.Polygon({ + strokeStyle: '#696969', + strokeWidth: 1, + opacity: 1.5 + }) + ] + }) + ]}) +}); + +var geojson = new ol.parser.GeoJSON(); +var url = '../test/spec/ol/parser/geojson/countries.json'; +var xhr = new XMLHttpRequest(); +xhr.open('GET', url, true); + + +/** + * onload handler for the XHR request. + */ +xhr.onload = function() { + if (xhr.status == 200) { + // this is silly to have to tell the layer the destination projection + var projection = map.getView().getProjection(); + vector.parseFeatures(xhr.responseText, geojson, projection); + } else { + throw new Error('Data loading failed: ' + xhr.status); + } +}; +xhr.send(); + +map = new ol.Map({ + layers: new ol.Collection([raster, vector]), + renderer: ol.RendererHint.CANVAS, + target: 'map', + view: new ol.View2D({ + center: new ol.Coordinate(0, 0), + zoom: 1 + }) +}); diff --git a/master/examples/wms-custom-proj-require.js b/master/examples/wms-custom-proj-require.js index 5632c4a6ad..7612b6c9f8 100644 --- a/master/examples/wms-custom-proj-require.js +++ b/master/examples/wms-custom-proj-require.js @@ -2,10 +2,11 @@ goog.require('ol.Attribution'); goog.require('ol.Coordinate'); goog.require('ol.Extent'); goog.require('ol.Map'); -goog.require('ol.Projection'); -goog.require('ol.ProjectionUnits'); goog.require('ol.RendererHints'); goog.require('ol.View2D'); +goog.require('ol.control.ScaleLine'); +goog.require('ol.control.ScaleLineUnits'); +goog.require('ol.control.defaults'); goog.require('ol.layer.TileLayer'); goog.require('ol.projection'); goog.require('ol.source.TiledWMS'); diff --git a/master/examples/wms-custom-proj.html b/master/examples/wms-custom-proj.html index 0f4d4533fe..7e130944d2 100644 --- a/master/examples/wms-custom-proj.html +++ b/master/examples/wms-custom-proj.html @@ -46,6 +46,8 @@ + + diff --git a/master/examples/wms-custom-proj.js b/master/examples/wms-custom-proj.js index 7c56ed62d5..ee4ad5f0a8 100644 --- a/master/examples/wms-custom-proj.js +++ b/master/examples/wms-custom-proj.js @@ -1,10 +1,7 @@ -var epsg21781 = new ol.Projection({ +var projection = ol.projection.configureProj4jsProjection({ code: 'EPSG:21781', - units: ol.ProjectionUnits.METERS, - // Validity extent from http://spatialreference.org extent: new ol.Extent(485869.5728, 76443.1884, 837076.5648, 299941.7864) }); -ol.projection.addProjection(epsg21781); var extent = new ol.Extent(420000, 30000, 900000, 350000); var layers = [ @@ -36,11 +33,16 @@ var layers = [ ]; var map = new ol.Map({ + controls: ol.control.defaults({}, [ + new ol.control.ScaleLine({ + units: ol.control.ScaleLineUnits.METRIC + }) + ]), layers: layers, renderers: ol.RendererHints.createFromQueryData(), target: 'map', view: new ol.View2D({ - projection: epsg21781, + projection: projection, center: new ol.Coordinate(660000, 190000), zoom: 2 }) diff --git a/master/examples/wms-single-image-custom-proj-require.js b/master/examples/wms-single-image-custom-proj-require.js new file mode 100644 index 0000000000..8cbb7566a2 --- /dev/null +++ b/master/examples/wms-single-image-custom-proj-require.js @@ -0,0 +1,9 @@ +goog.require('ol.Attribution'); +goog.require('ol.Coordinate'); +goog.require('ol.Extent'); +goog.require('ol.Map'); +goog.require('ol.RendererHints'); +goog.require('ol.View2D'); +goog.require('ol.layer.ImageLayer'); +goog.require('ol.projection'); +goog.require('ol.source.SingleImageWMS'); diff --git a/master/examples/wms-single-image-custom-proj.html b/master/examples/wms-single-image-custom-proj.html new file mode 100644 index 0000000000..c9e9048c6e --- /dev/null +++ b/master/examples/wms-single-image-custom-proj.html @@ -0,0 +1,54 @@ + + + + + + + + + + Single image WMS with custom projection example + + + + + +
+ +
+
+
+
+
+ +
+ +
+

Single image WMS with custom projection example

+

Example of two single image WMS layers (Pixelmap 1:1'000'000 and national parks) using the projection EPSG:21781.

+
+

See the wms-single-image-custom-proj.js source to see how this is done.

+
+
wms, single image, projection
+
+ +
+ +
+ + + + + + + diff --git a/master/examples/wms-single-image-custom-proj.js b/master/examples/wms-single-image-custom-proj.js new file mode 100644 index 0000000000..0fc85cbeaf --- /dev/null +++ b/master/examples/wms-single-image-custom-proj.js @@ -0,0 +1,44 @@ +var projection = ol.projection.configureProj4jsProjection({ + code: 'EPSG:21781', + extent: new ol.Extent(485869.5728, 76443.1884, 837076.5648, 299941.7864) +}); + +var extent = new ol.Extent(420000, 30000, 900000, 350000); +var layers = [ + new ol.layer.ImageLayer({ + source: new ol.source.SingleImageWMS({ + url: 'http://wms.geo.admin.ch/', + attributions: [new ol.Attribution( + '© ' + + '' + + 'Pixelmap 1:1000000 / geo.admin.ch')], + params: { + 'LAYERS': 'ch.swisstopo.pixelkarte-farbe-pk1000.noscale', + 'FORMAT': 'image/jpeg' + }, + extent: extent + }) + }), + new ol.layer.ImageLayer({ + source: new ol.source.SingleImageWMS({ + url: 'http://wms.geo.admin.ch/', + attributions: [new ol.Attribution( + '© ' + + '' + + 'National parks / geo.admin.ch')], + params: {'LAYERS': 'ch.bafu.schutzgebiete-paerke_nationaler_bedeutung'}, + extent: extent + }) + }) +]; + +var map = new ol.Map({ + layers: layers, + renderers: ol.RendererHints.createFromQueryData(), + target: 'map', + view: new ol.View2D({ + projection: projection, + center: new ol.Coordinate(660000, 190000), + zoom: 2 + }) +}); diff --git a/master/examples/wms-single-image.js b/master/examples/wms-single-image.js index a3e7a1f119..da3ed69718 100644 --- a/master/examples/wms-single-image.js +++ b/master/examples/wms-single-image.js @@ -4,9 +4,9 @@ var layers = [ }), new ol.layer.ImageLayer({ source: new ol.source.SingleImageWMS({ - url: 'http://demo.opengeo.org/geoserver/wms', + url: 'http://suite.opengeo.org/geoserver/wms', crossOrigin: null, - params: {'LAYERS': 'topp:states'}, + params: {'LAYERS': 'usa:states'}, extent: new ol.Extent(-13884991, 2870341, -7455066, 6338219) }) }) diff --git a/master/examples/wms-tiled.js b/master/examples/wms-tiled.js index a5cea34a39..46a106170e 100644 --- a/master/examples/wms-tiled.js +++ b/master/examples/wms-tiled.js @@ -4,9 +4,9 @@ var layers = [ }), new ol.layer.TileLayer({ source: new ol.source.TiledWMS({ - url: 'http://demo.opengeo.org/geoserver/wms', + url: 'http://suite.opengeo.org/geoserver/wms', crossOrigin: null, - params: {'LAYERS': 'topp:states', 'TILED': true}, + params: {'LAYERS': 'usa:states', 'TILED': true}, extent: new ol.Extent(-13884991, 2870341, -7455066, 6338219) }) }) diff --git a/master/examples/zoomslider-require.js b/master/examples/zoomslider-require.js new file mode 100644 index 0000000000..4f7c135572 --- /dev/null +++ b/master/examples/zoomslider-require.js @@ -0,0 +1,6 @@ +goog.require('ol.Coordinate'); +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.control.ZoomSlider'); +goog.require('ol.layer.TileLayer'); +goog.require('ol.source.MapQuestOpenAerial'); diff --git a/master/examples/zoomslider.html b/master/examples/zoomslider.html new file mode 100644 index 0000000000..437c5812b3 --- /dev/null +++ b/master/examples/zoomslider.html @@ -0,0 +1,115 @@ + + + + + + + + + + + ol3 ZoomSlider demo + + + + + +
+ +
+
+

Default style

+
+
+
+

Placed between zoom controls

+
+
+
+

Horizontal and completely re-styled

+
+
+
+ +
+ +
+

ZoomSlider control

+

Example of various ZoomSlider controls.

+
+

+ See the zoomslider.js + source to see how this is done. +

+
+
+ zoom, zoomslider, slider, style, styling, css, control +
+
+
+
+ + + + \ No newline at end of file diff --git a/master/examples/zoomslider.js b/master/examples/zoomslider.js new file mode 100644 index 0000000000..8d63c90218 --- /dev/null +++ b/master/examples/zoomslider.js @@ -0,0 +1,35 @@ +/** + * Helper method for map-creation. + * + * @param {string} divId The id of the div for the map. + * @return {ol.Map} The ol.Map instance. + */ +var createMap = function(divId) { + var source, layer, map, zoomslider, resolutions, minRes, maxRes; + + source = new ol.source.MapQuestOpenAerial(); + // These are the min and max resolutions of MapQuestOpenAerial + minRes = 0.5971642834779395; + maxRes = 156543.03392804097; + layer = new ol.layer.TileLayer({ + source: source + }); + map = new ol.Map({ + layers: [layer], + target: divId, + view: new ol.View2D({ + center: new ol.Coordinate(0, 0), + zoom: 2 + }) + }); + zoomslider = new ol.control.ZoomSlider({ + minResolution: minRes, + maxResolution: maxRes, + map: map + }); + return map; +}; + +var map1 = createMap('map1'); +var map2 = createMap('map2'); +var map3 = createMap('map3'); diff --git a/master/ol/ol/control/attributioncontrol.js b/master/ol/ol/control/attributioncontrol.js index 23c5b6d241..7c7b34457c 100644 --- a/master/ol/ol/control/attributioncontrol.js +++ b/master/ol/ol/control/attributioncontrol.js @@ -8,6 +8,7 @@ goog.require('goog.dom.TagName'); goog.require('goog.events'); goog.require('goog.object'); goog.require('goog.style'); +goog.require('ol'); goog.require('ol.Attribution'); goog.require('ol.FrameState'); goog.require('ol.MapEvent'); @@ -30,7 +31,7 @@ ol.control.Attribution = function(opt_options) { this.ulElement_ = goog.dom.createElement(goog.dom.TagName.UL); var element = goog.dom.createDom(goog.dom.TagName.DIV, { - 'class': 'ol-attribution ol-unselectable' + 'class': 'ol-attribution ' + ol.CSS_CLASS_UNSELECTABLE }, this.ulElement_); goog.base(this, { diff --git a/master/ol/ol/control/scalelinecontrol.js b/master/ol/ol/control/scalelinecontrol.js index 8ba1ae5032..d3c41d2d47 100644 --- a/master/ol/ol/control/scalelinecontrol.js +++ b/master/ol/ol/control/scalelinecontrol.js @@ -3,6 +3,7 @@ goog.provide('ol.control.ScaleLineUnits'); goog.require('goog.dom'); goog.require('goog.style'); +goog.require('ol'); goog.require('ol.FrameState'); goog.require('ol.MapEvent'); goog.require('ol.MapEventType'); @@ -48,7 +49,7 @@ ol.control.ScaleLine = function(opt_options) { * @type {Element} */ this.element_ = goog.dom.createDom(goog.dom.TagName.DIV, { - 'class': 'ol-scale-line ol-unselectable' + 'class': 'ol-scale-line ' + ol.CSS_CLASS_UNSELECTABLE }, this.innerElement_); /** diff --git a/master/ol/ol/control/zoomcontrol.js b/master/ol/ol/control/zoomcontrol.js index ca3d316378..aa3585ccd5 100644 --- a/master/ol/ol/control/zoomcontrol.js +++ b/master/ol/ol/control/zoomcontrol.js @@ -6,6 +6,7 @@ goog.require('goog.dom'); goog.require('goog.dom.TagName'); goog.require('goog.events'); goog.require('goog.events.EventType'); +goog.require('ol'); goog.require('ol.control.Control'); @@ -43,8 +44,9 @@ ol.control.Zoom = function(opt_options) { goog.events.EventType.CLICK ], this.handleOut_, false, this); - var element = goog.dom.createDom( - goog.dom.TagName.DIV, 'ol-zoom ol-unselectable', inElement, outElement); + var cssClasses = 'ol-zoom ' + ol.CSS_CLASS_UNSELECTABLE; + var element = goog.dom.createDom(goog.dom.TagName.DIV, cssClasses, inElement, + outElement); goog.base(this, { element: element, diff --git a/master/ol/ol/control/zoomslider.exports b/master/ol/ol/control/zoomslider.exports new file mode 100644 index 0000000000..cbc760930a --- /dev/null +++ b/master/ol/ol/control/zoomslider.exports @@ -0,0 +1 @@ +@exportClass ol.control.ZoomSlider ol.control.ZoomSliderOptions \ No newline at end of file diff --git a/master/ol/ol/control/zoomslidercontrol.js b/master/ol/ol/control/zoomslidercontrol.js new file mode 100644 index 0000000000..3926048ca8 --- /dev/null +++ b/master/ol/ol/control/zoomslidercontrol.js @@ -0,0 +1,373 @@ +// FIXME works for View2D only +// FIXME should possibly show tooltip when dragging? +// FIXME should possibly be adjustable by clicking on container + +goog.provide('ol.control.ZoomSlider'); + +goog.require('goog.asserts'); +goog.require('goog.dom'); +goog.require('goog.dom.TagName'); +goog.require('goog.events'); +goog.require('goog.fx.Dragger'); +goog.require('goog.style'); +goog.require('ol.MapEventType'); +goog.require('ol.control.Control'); + + + +/** + * @constructor + * @extends {ol.control.Control} + * @param {ol.control.ZoomSliderOptions} zoomSliderOptions Zoom options. + */ +ol.control.ZoomSlider = function(zoomSliderOptions) { + // FIXME these should be read out from a map if not given, and only then + // fallback to the constants if they weren't defined on the map. + /** + * The minimum resolution that one can set with this control. + * + * @type {number} + * @private + */ + this.maxResolution_ = goog.isDef(zoomSliderOptions.maxResolution) ? + zoomSliderOptions.maxResolution : + ol.control.ZoomSlider.DEFAULT_MAX_RESOLUTION; + + /** + * The maximum resolution that one can set with this control. + * + * @type {number} + * @private + */ + this.minResolution_ = goog.isDef(zoomSliderOptions.minResolution) ? + zoomSliderOptions.minResolution : + ol.control.ZoomSlider.DEFAULT_MIN_RESOLUTION; + + goog.asserts.assert( + this.minResolution_ < this.maxResolution_, + 'minResolution must be smaller than maxResolution.' + ); + + /** + * The range of resolutions we are handling in this slider. + * + * @type {number} + * @private + */ + this.range_ = this.maxResolution_ - this.minResolution_; + + /** + * Will hold the current resolution of the view. + * + * @type {number} + * @private + */ + this.currentResolution_; + + /** + * The direction of the slider. Will be determined from actual display of the + * container and defaults to ol.control.ZoomSlider.direction.VERTICAL. + * + * @type {ol.control.ZoomSlider.direction} + * @private + */ + this.direction_ = ol.control.ZoomSlider.direction.VERTICAL; + + /** + * @private + * @type {Array.} + */ + this.mapListenerKeys_ = null; + + /** + * @private + * @type {Array.} + */ + this.draggerListenerKeys_ = null; + + var elem = this.createDom_(); + this.dragger_ = this.createDraggable_(elem); + + // FIXME currently only a do nothing function is bound. + goog.events.listen(elem, [ + goog.events.EventType.TOUCHEND, + goog.events.EventType.CLICK + ], this.handleContainerClick_, false, this); + + goog.base(this, { + element: elem, + map: zoomSliderOptions.map + }); +}; +goog.inherits(ol.control.ZoomSlider, ol.control.Control); + + +/** + * The enum for available directions. + * + * @enum {number} + */ +ol.control.ZoomSlider.direction = { + VERTICAL: 0, + HORIZONTAL: 1 +}; + + +/** + * The CSS class that we'll give the zoomslider container. + * + * @const {string} + */ +ol.control.ZoomSlider.CSS_CLASS_CONTAINER = 'ol-zoomslider'; + + +/** + * The CSS class that we'll give the zoomslider thumb. + * + * @const {string} + */ +ol.control.ZoomSlider.CSS_CLASS_THUMB = + ol.control.ZoomSlider.CSS_CLASS_CONTAINER + '-thumb'; + + +/** + * The default value for minResolution_ when the control isn't instanciated with + * an explicit value. The default value is the resolution of the standard OSM + * tiles at zoomlevel 18. + * + * @const {number} + */ +ol.control.ZoomSlider.DEFAULT_MIN_RESOLUTION = 0.5971642833948135; + + +/** + * The default value for maxResolution_ when the control isn't instanciated with + * an explicit value. The default value is the resolution of the standard OSM + * tiles at zoomlevel 0. + * + * @const {number} + */ +ol.control.ZoomSlider.DEFAULT_MAX_RESOLUTION = 156543.0339; + + +/** + * @inheritDoc + */ +ol.control.ZoomSlider.prototype.setMap = function(map) { + goog.base(this, 'setMap', map); + this.currentResolution_ = map.getView().getResolution(); + this.initMapEventListeners_(); + this.initSlider_(); + this.positionThumbForResolution_(this.currentResolution_); +}; + + +/** + * Initializes the event listeners for map events. + * + * @private + */ +ol.control.ZoomSlider.prototype.initMapEventListeners_ = function() { + if (!goog.isNull(this.mapListenerKeys_)) { + goog.array.forEach(this.mapListenerKeys_, goog.events.unlistenByKey); + this.mapListenerKeys_ = null; + } + if (!goog.isNull(this.getMap())) { + this.mapListenerKeys_ = [ + goog.events.listen(this.getMap(), ol.MapEventType.POSTRENDER, + this.handleMapPostRender_, undefined, this) + ]; + } +}; + + +/** + * Initializes the slider element. This will determine and set this controls + * direction_ and also constrain the dragging of the thumb to always be within + * the bounds of the container. + * + * @private + */ +ol.control.ZoomSlider.prototype.initSlider_ = function() { + var container = this.element, + thumb = goog.dom.getFirstElementChild(container), + elemSize = goog.style.getContentBoxSize(container), + thumbBounds = goog.style.getBounds(thumb), + thumbMargins = goog.style.getMarginBox(thumb), + thumbBorderBox = goog.style.getBorderBox(thumb), + w = elemSize.width - + thumbMargins.left - thumbMargins.right - + thumbBorderBox.left - thumbBorderBox.right - + thumbBounds.width, + h = elemSize.height - + thumbMargins.top - thumbMargins.bottom - + thumbBorderBox.top - thumbBorderBox.bottom - + thumbBounds.height, + limits; + if (elemSize.width > elemSize.height) { + this.direction_ = ol.control.ZoomSlider.direction.HORIZONTAL; + limits = new goog.math.Rect(0, 0, w, 0); + } else { + this.direction_ = ol.control.ZoomSlider.direction.VERTICAL; + limits = new goog.math.Rect(0, 0, 0, h); + } + this.dragger_.setLimits(limits); +}; + + +/** + * @param {ol.MapEvent} mapEvtObj The ol.MapEvent object. + * @private + */ +ol.control.ZoomSlider.prototype.handleMapPostRender_ = function(mapEvtObj) { + var res = mapEvtObj.frameState.view2DState.resolution; + if (res !== this.currentResolution_) { + this.currentResolution_ = res; + this.positionThumbForResolution_(res); + } +}; + + +/** + * @param {goog.events.BrowserEvent} browserEvent The browser event to handle. + * @private + */ +ol.control.ZoomSlider.prototype.handleContainerClick_ = function(browserEvent) { + // TODO implement proper resolution calculation according to browserEvent +}; + + +/** + * Positions the thumb inside its container according to the given resolution. + * + * @param {number} res The res. + * @private + */ +ol.control.ZoomSlider.prototype.positionThumbForResolution_ = function(res) { + var amount = this.amountForResolution_(res), + dragger = this.dragger_, + thumb = goog.dom.getFirstElementChild(this.element); + + if (this.direction_ == ol.control.ZoomSlider.direction.HORIZONTAL) { + var left = dragger.limits.left + dragger.limits.width * amount; + goog.style.setPosition(thumb, left); + } else { + var top = dragger.limits.top + dragger.limits.height * amount; + goog.style.setPosition(thumb, dragger.limits.left, top); + } +}; + + +/** + * Calculates the amount the thumb has been dragged to allow for calculation + * of the corresponding resolution. + * + * @param {goog.fx.DragDropEvent} e The dragdropevent. + * @return {number} The amount the thumb has been dragged. + * @private + */ +ol.control.ZoomSlider.prototype.amountDragged_ = function(e) { + var draggerLimits = this.dragger_.limits, + amount = 0; + if (this.direction_ === ol.control.ZoomSlider.direction.HORIZONTAL) { + amount = (e.left - draggerLimits.left) / draggerLimits.width; + } else { + amount = (e.top - draggerLimits.top) / draggerLimits.height; + } + return amount; +}; + + +/** + * Calculates the corresponding resolution of the thumb by the amount it has + * been dragged from its minimum. + * + * @param {number} amount The amount the thumb has been dragged. + * @return {number} a resolution between this.minResolution_ and + * this.maxResolution_. + * @private + */ +ol.control.ZoomSlider.prototype.resolutionForAmount_ = function(amount) { + var saneAmount = goog.math.clamp(amount, 0, 1); + return this.minResolution_ + this.range_ * saneAmount; +}; + + +/** + * Determines an amount of dragging relative to this minimum position by the + * given resolution. + * + * @param {number} res The resolution to get the amount for. + * @return {number} an amount between 0 and 1. + * @private + */ +ol.control.ZoomSlider.prototype.amountForResolution_ = function(res) { + var saneRes = goog.math.clamp(res, this.minResolution_, this.maxResolution_); + return (saneRes - this.minResolution_) / this.range_; +}; + + +/** + * Handles the user caused changes of the slider thumb and adjusts the + * resolution of our map accordingly. Will be called both while dragging and + * when dragging ends. + * + * @param {goog.fx.DragDropEvent} e The dragdropevent. + * @private + */ +ol.control.ZoomSlider.prototype.handleSliderChange_ = function(e) { + var map = this.getMap(), + amountDragged = this.amountDragged_(e), + res = this.resolutionForAmount_(amountDragged); + goog.asserts.assert(res >= this.minResolution_ && res <= this.maxResolution_, + 'calculated new resolution is in allowed bounds.'); + if (res !== this.currentResolution_) { + this.currentResolution_ = res; + map.getView().setResolution(res); + } +}; + + +/** + * Actually enable draggable behaviour for the thumb of the zoomslider and bind + * relvant event listeners. + * + * @param {Element} elem The element for the slider. + * @return {goog.fx.Dragger} The actual goog.fx.Dragger instance. + * @private + */ +ol.control.ZoomSlider.prototype.createDraggable_ = function(elem) { + if (!goog.isNull(this.draggerListenerKeys_)) { + goog.array.forEach(this.draggerListenerKeys_, goog.events.unlistenByKey); + this.draggerListenerKeys_ = null; + } + var dragger = new goog.fx.Dragger(elem.childNodes[0]); + this.draggerListenerKeys_ = [ + goog.events.listen(dragger, [ + goog.fx.Dragger.EventType.DRAG, + goog.fx.Dragger.EventType.END + ], this.handleSliderChange_, undefined, this) + ]; + return dragger; +}; + + +/** + * Setup the DOM-structure we need for the zoomslider. + * + * @param {Element=} opt_elem The element for the slider. + * @return {Element} The correctly set up DOMElement. + * @private + */ +ol.control.ZoomSlider.prototype.createDom_ = function(opt_elem) { + var elem, + sliderCssCls = ol.control.ZoomSlider.CSS_CLASS_CONTAINER + + ' ol-unselectable', + thumbCssCls = ol.control.ZoomSlider.CSS_CLASS_THUMB + + ' ol-unselectable'; + + elem = goog.dom.createDom(goog.dom.TagName.DIV, sliderCssCls, + goog.dom.createDom(goog.dom.TagName.DIV, thumbCssCls)); + + return elem; +}; diff --git a/master/ol/ol/expression.js b/master/ol/ol/expression.js new file mode 100644 index 0000000000..4adf62be27 --- /dev/null +++ b/master/ol/ol/expression.js @@ -0,0 +1,70 @@ +goog.provide('ol.Expression'); +goog.provide('ol.ExpressionLiteral'); + + + +/** + * @constructor + * @param {string} source Expression to be evaluated. + */ +ol.Expression = function(source) { + + /** + * @type {string} + * @private + */ + this.source_ = source; + +}; + + +/** + * Evaluate the expression and return the result. + * + * @param {Object=} opt_thisArg Object to use as this when evaluating the + * expression. If not provided, the global object will be used. + * @param {Object=} opt_scope Evaluation scope. All properties of this object + * will be available as variables when evaluating the expression. If not + * provided, the global object will be used. + * @return {*} Result of the expression. + */ +ol.Expression.prototype.evaluate = function(opt_thisArg, opt_scope) { + var thisArg = goog.isDef(opt_thisArg) ? opt_thisArg : goog.global, + scope = goog.isDef(opt_scope) ? opt_scope : goog.global, + names = [], + values = []; + + for (var name in scope) { + names.push(name); + values.push(scope[name]); + } + + var evaluator = new Function(names.join(','), 'return ' + this.source_); + return evaluator.apply(thisArg, values); +}; + + + +/** + * @constructor + * @extends {ol.Expression} + * @param {*} value Literal value. + */ +ol.ExpressionLiteral = function(value) { + + /** + * @type {*} + * @private + */ + this.value_ = value; + +}; +goog.inherits(ol.ExpressionLiteral, ol.Expression); + + +/** + * @inheritDoc + */ +ol.ExpressionLiteral.prototype.evaluate = function(opt_thisArg, opt_scope) { + return this.value_; +}; diff --git a/master/ol/ol/feature.exports b/master/ol/ol/feature.exports new file mode 100644 index 0000000000..67545ce3d5 --- /dev/null +++ b/master/ol/ol/feature.exports @@ -0,0 +1,7 @@ +@exportSymbol ol.Feature +@exportProperty ol.Feature.prototype.get +@exportProperty ol.Feature.prototype.getAttributes +@exportProperty ol.Feature.prototype.getGeometry +@exportProperty ol.Feature.prototype.set +@exportProperty ol.Feature.prototype.setGeometry +@exportProperty ol.Feature.prototype.setSymbolizers diff --git a/master/ol/ol/feature.js b/master/ol/ol/feature.js new file mode 100644 index 0000000000..3af0f64d80 --- /dev/null +++ b/master/ol/ol/feature.js @@ -0,0 +1,112 @@ +goog.provide('ol.Feature'); + +goog.require('ol.Object'); +goog.require('ol.geom.Geometry'); + + + +/** + * @constructor + * @extends {ol.Object} + * @param {Object=} opt_values Attributes. + */ +ol.Feature = function(opt_values) { + + goog.base(this, opt_values); + + /** + * @type {string|undefined} + * @private + */ + this.geometryName_; + + /** + * @type {Array.} + * @private + */ + this.symbolizers_ = null; + +}; +goog.inherits(ol.Feature, ol.Object); + + +/** + * @return {Object} Attributes object. + */ +ol.Feature.prototype.getAttributes = function() { + var keys = this.getKeys(), + len = keys.length, + attributes = {}, + i, key; + for (i = 0; i < len; ++ i) { + key = keys[i]; + attributes[key] = this.get(key); + } + return attributes; +}; + + +/** + * @return {ol.geom.Geometry} The geometry (or null if none). + */ +ol.Feature.prototype.getGeometry = function() { + return goog.isDef(this.geometryName_) ? + /** @type {ol.geom.Geometry} */ (this.get(this.geometryName_)) : + null; +}; + + +/** + * @return {Array.} Symbolizer literals. + */ +ol.Feature.prototype.getSymbolizerLiterals = function() { + var symbolizerLiterals = null; + if (!goog.isNull(this.symbolizers_)) { + var numSymbolizers = this.symbolizers_.length; + symbolizerLiterals = new Array(numSymbolizers); + for (var i = 0; i < numSymbolizers; ++i) { + symbolizerLiterals[i] = this.symbolizers_[i].createLiteral(this); + } + } + return symbolizerLiterals; +}; + + +/** + * @inheritDoc + * @param {string} key Key. + * @param {*} value Value. + */ +ol.Feature.prototype.set = function(key, value) { + if (!goog.isDef(this.geometryName_) && (value instanceof ol.geom.Geometry)) { + this.geometryName_ = key; + } + goog.base(this, 'set', key, value); +}; + + +/** + * @param {ol.geom.Geometry} geometry The geometry. + */ +ol.Feature.prototype.setGeometry = function(geometry) { + if (!goog.isDef(this.geometryName_)) { + this.geometryName_ = ol.Feature.DEFAULT_GEOMETRY; + } + this.set(this.geometryName_, geometry); +}; + + +/** + * @param {Array.} symbolizers Symbolizers for this + * features. If set, these take precedence over layer style. + */ +ol.Feature.prototype.setSymbolizers = function(symbolizers) { + this.symbolizers_ = symbolizers; +}; + + +/** + * @const + * @type {string} + */ +ol.Feature.DEFAULT_GEOMETRY = 'geometry'; diff --git a/master/ol/ol/filter/extentfilter.js b/master/ol/ol/filter/extentfilter.js new file mode 100644 index 0000000000..b8738bfa73 --- /dev/null +++ b/master/ol/ol/filter/extentfilter.js @@ -0,0 +1,39 @@ +goog.provide('ol.filter.Extent'); + +goog.require('ol.Extent'); +goog.require('ol.filter.Filter'); + + + +/** + * @constructor + * @extends {ol.filter.Filter} + * @param {ol.Extent} extent The extent. + */ +ol.filter.Extent = function(extent) { + goog.base(this); + + /** + * @type {ol.Extent} + * @private + */ + this.extent_ = extent; + +}; +goog.inherits(ol.filter.Extent, ol.filter.Filter); + + +/** + * @return {ol.Extent} The filter extent. + */ +ol.filter.Extent.prototype.getExtent = function() { + return this.extent_; +}; + + +/** + * @inheritDoc + */ +ol.filter.Extent.prototype.applies = function(feature) { + return feature.getGeometry().getBounds().intersects(this.extent_); +}; diff --git a/master/ol/ol/filter/filter.exports b/master/ol/ol/filter/filter.exports new file mode 100644 index 0000000000..696edee702 --- /dev/null +++ b/master/ol/ol/filter/filter.exports @@ -0,0 +1,7 @@ +@exportSymbol ol.filter.Filter +@exportSymbol ol.filter.Geometry +@exportSymbol ol.filter.Logical + +@exportSymbol ol.filter.LogicalOperator +@exportProperty ol.filter.LogicalOperator.AND +@exportProperty ol.filter.LogicalOperator.OR diff --git a/master/ol/ol/filter/filter.js b/master/ol/ol/filter/filter.js new file mode 100644 index 0000000000..701a942ae7 --- /dev/null +++ b/master/ol/ol/filter/filter.js @@ -0,0 +1,24 @@ +goog.provide('ol.filter.Filter'); + +goog.require('ol.Feature'); + + + +/** + * @constructor + * @param {function(this:ol.filter.Filter, ol.Feature)=} opt_filterFunction + * Filter function. Should return true if the passed feature passes the + * filter, false otherwise. + */ +ol.filter.Filter = function(opt_filterFunction) { + if (goog.isDef(opt_filterFunction)) { + this.applies = opt_filterFunction; + } +}; + + +/** + * @param {ol.Feature} feature Feature to evaluate the filter against. + * @return {boolean} The provided feature passes this filter. + */ +ol.filter.Filter.prototype.applies = goog.abstractMethod; diff --git a/master/ol/ol/filter/geometryfilter.js b/master/ol/ol/filter/geometryfilter.js new file mode 100644 index 0000000000..f48a67b14b --- /dev/null +++ b/master/ol/ol/filter/geometryfilter.js @@ -0,0 +1,42 @@ +goog.provide('ol.filter.Geometry'); +goog.provide('ol.filter.GeometryType'); + +goog.require('ol.filter.Filter'); +goog.require('ol.geom.GeometryType'); + + + +/** + * @constructor + * @extends {ol.filter.Filter} + * @param {ol.geom.GeometryType} type The geometry type. + */ +ol.filter.Geometry = function(type) { + goog.base(this); + + /** + * @type {ol.geom.GeometryType} + * @private + */ + this.type_ = type; + +}; +goog.inherits(ol.filter.Geometry, ol.filter.Filter); + + +/** + * @inheritDoc + */ +ol.filter.Geometry.prototype.applies = function(feature) { + var geometry = feature.getGeometry(); + return goog.isNull(geometry) ? false : geometry.getType() === this.type_; +}; + + +/** + * @return {ol.geom.GeometryType} The geometry type. + */ +ol.filter.Geometry.prototype.getType = function() { + return this.type_; +}; + diff --git a/master/ol/ol/filter/logicalfilter.js b/master/ol/ol/filter/logicalfilter.js new file mode 100644 index 0000000000..89f438fc33 --- /dev/null +++ b/master/ol/ol/filter/logicalfilter.js @@ -0,0 +1,63 @@ +goog.provide('ol.filter.Logical'); +goog.provide('ol.filter.LogicalOperator'); + +goog.require('ol.filter.Filter'); + + + +/** + * @constructor + * @extends {ol.filter.Filter} + * @param {Array.} filters Filters to and-combine. + * @param {!ol.filter.LogicalOperator} operator Operator. + */ +ol.filter.Logical = function(filters, operator) { + goog.base(this); + + /** + * @type {Array.} + * @private + */ + this.filters_ = filters; + + /** + * @type {!ol.filter.LogicalOperator} + */ + this.operator = operator; + +}; +goog.inherits(ol.filter.Logical, ol.filter.Filter); + + +/** + * @inheritDoc + */ +ol.filter.Logical.prototype.applies = function(feature) { + var filters = this.filters_, + i = 0, ii = filters.length, + operator = this.operator, + start = operator(true, false), + result = start; + while (result === start && i < ii) { + result = operator(result, filters[i].applies(feature)); + ++i; + } + return result; +}; + + +/** + * @return {Array.} The filter's filters. + */ +ol.filter.Logical.prototype.getFilters = function() { + return this.filters_; +}; + + +/** + * @enum {!Function} + */ +ol.filter.LogicalOperator = { + AND: /** @return {boolean} result. */ function(a, b) { return a && b; }, + OR: /** @return {boolean} result. */ function(a, b) { return a || b; } +}; diff --git a/master/ol/ol/geom/abstractcollection.js b/master/ol/ol/geom/abstractcollection.js new file mode 100644 index 0000000000..b5ce4ee588 --- /dev/null +++ b/master/ol/ol/geom/abstractcollection.js @@ -0,0 +1,79 @@ +goog.provide('ol.geom.AbstractCollection'); + +goog.require('ol.Extent'); +goog.require('ol.geom.Geometry'); + + + +/** + * A collection of geometries. This constructor is not to be used directly. + * + * @constructor + * @extends {ol.geom.Geometry} + */ +ol.geom.AbstractCollection = function() { + goog.base(this); + + /** + * @type {number} + */ + this.dimension; + + /** + * @type {Array.} + */ + this.components = null; + + /** + * @type {ol.Extent} + * @protected + */ + this.bounds = null; + +}; +goog.inherits(ol.geom.AbstractCollection, ol.geom.Geometry); + + +/** + * @inheritDoc + */ +ol.geom.AbstractCollection.prototype.getBounds = function() { + if (goog.isNull(this.bounds)) { + var minX, + minY = minX = Number.POSITIVE_INFINITY, + maxX, + maxY = maxX = Number.NEGATIVE_INFINITY, + components = this.components, + len = components.length, + bounds, i; + + for (i = 0; i < len; ++i) { + bounds = components[i].getBounds(); + minX = Math.min(bounds.minX, minX); + minY = Math.min(bounds.minY, minY); + maxX = Math.max(bounds.maxX, maxX); + maxY = Math.max(bounds.maxY, maxY); + } + this.bounds = new ol.Extent(minX, minY, maxX, maxY); + } + return this.bounds; +}; + + +/** + * @inheritDoc + */ +ol.geom.AbstractCollection.prototype.getCoordinates = function() { + var count = this.components.length; + var coordinates = new Array(count); + for (var i = 0; i < count; ++i) { + coordinates[i] = this.components[i].getCoordinates(); + } + return coordinates; +}; + + +/** + * @inheritDoc + */ +ol.geom.AbstractCollection.prototype.getType = goog.abstractMethod; diff --git a/master/ol/ol/geom/base.js b/master/ol/ol/geom/base.js new file mode 100644 index 0000000000..31ebb15f95 --- /dev/null +++ b/master/ol/ol/geom/base.js @@ -0,0 +1,14 @@ +goog.provide('ol.geom.Vertex'); +goog.provide('ol.geom.VertexArray'); + + +/** + * @typedef {Array.} + */ +ol.geom.Vertex; + + +/** + * @typedef {Array.} + */ +ol.geom.VertexArray; diff --git a/master/ol/ol/geom/expression.exports b/master/ol/ol/geom/expression.exports new file mode 100644 index 0000000000..911b8a12c6 --- /dev/null +++ b/master/ol/ol/geom/expression.exports @@ -0,0 +1 @@ +@exportSymbol ol.Expression diff --git a/master/ol/ol/geom/geometry.exports b/master/ol/ol/geom/geometry.exports new file mode 100644 index 0000000000..4170284a9e --- /dev/null +++ b/master/ol/ol/geom/geometry.exports @@ -0,0 +1,6 @@ +@exportSymbol ol.geom.Point +@exportSymbol ol.geom.LineString +@exportSymbol ol.geom.Polygon +@exportSymbol ol.geom.MultiPoint +@exportSymbol ol.geom.MultiLineString +@exportSymbol ol.geom.MultiPolygon diff --git a/master/ol/ol/geom/geometry.js b/master/ol/ol/geom/geometry.js new file mode 100644 index 0000000000..f4fd967848 --- /dev/null +++ b/master/ol/ol/geom/geometry.js @@ -0,0 +1,71 @@ +goog.provide('ol.geom.Geometry'); +goog.provide('ol.geom.GeometryType'); + +goog.require('ol.Extent'); +goog.require('ol.geom.SharedVertices'); + + + +/** + * @constructor + */ +ol.geom.Geometry = function() { + + /** + * @type {ol.geom.SharedVertices} + * @protected + */ + this.vertices = null; + +}; + + +/** + * The dimension of this geometry (2 or 3). + * @type {number} + */ +ol.geom.Geometry.prototype.dimension; + + +/** + * Get the rectangular 2D envelope for this geoemtry. + * @return {ol.Extent} The bounding rectangular envelope. + */ +ol.geom.Geometry.prototype.getBounds = goog.abstractMethod; + + +/** + * @return {Array} The GeoJSON style coordinates array for the geometry. + */ +ol.geom.Geometry.prototype.getCoordinates = goog.abstractMethod; + + +/** + * Get the shared vertices for this geometry. + * @return {ol.geom.SharedVertices} The shared vertices. + */ +ol.geom.Geometry.prototype.getSharedVertices = function() { + return this.vertices; +}; + + +/** + * Get the geometry type. + * @return {ol.geom.GeometryType} The geometry type. + */ +ol.geom.Geometry.prototype.getType = goog.abstractMethod; + + +/** + * @enum {string} + */ +ol.geom.GeometryType = { + POINT: 'point', + LINESTRING: 'linestring', + LINEARRING: 'linearring', + POLYGON: 'polygon', + MULTIPOINT: 'multipoint', + MULTILINESTRING: 'multilinestring', + MULTIPOLYGON: 'multipolygon', + GEOMETRYCOLLECTION: 'geometrycollection' +}; diff --git a/master/ol/ol/geom/geometrycollection.js b/master/ol/ol/geom/geometrycollection.js new file mode 100644 index 0000000000..8585d95394 --- /dev/null +++ b/master/ol/ol/geom/geometrycollection.js @@ -0,0 +1,48 @@ +goog.provide('ol.geom.GeometryCollection'); + +goog.require('ol.geom.AbstractCollection'); +goog.require('ol.geom.Geometry'); +goog.require('ol.geom.GeometryType'); + + + +/** + * A mixed collection of geometries. Used one of the fixed type multi-part + * constructors for collections of the same type. + * + * @constructor + * @extends {ol.geom.AbstractCollection} + * @param {Array.} geometries Array of geometries. + */ +ol.geom.GeometryCollection = function(geometries) { + goog.base(this); + + /** + * @type {Array.} + */ + this.components = geometries; + + var dimension = 0; + for (var i = 0, ii = geometries.length; i < ii; ++i) { + if (goog.isDef(dimension)) { + dimension = geometries[i].dimension; + } else { + goog.asserts.assert(dimension == geometries[i].dimension); + } + } + + /** + * @type {number} + */ + this.dimension = dimension; + +}; +goog.inherits(ol.geom.GeometryCollection, ol.geom.AbstractCollection); + + +/** + * @inheritDoc + */ +ol.geom.GeometryCollection.prototype.getType = function() { + return ol.geom.GeometryType.GEOMETRYCOLLECTION; +}; diff --git a/master/ol/ol/geom/linearring.js b/master/ol/ol/geom/linearring.js new file mode 100644 index 0000000000..0d2180be87 --- /dev/null +++ b/master/ol/ol/geom/linearring.js @@ -0,0 +1,35 @@ +goog.provide('ol.geom.LinearRing'); + +goog.require('ol.geom.GeometryType'); +goog.require('ol.geom.LineString'); +goog.require('ol.geom.SharedVertices'); +goog.require('ol.geom.VertexArray'); + + + +/** + * @constructor + * @extends {ol.geom.LineString} + * @param {ol.geom.VertexArray} coordinates Vertex array (e.g. + * [[x0, y0], [x1, y1]]). + * @param {ol.geom.SharedVertices=} opt_shared Shared vertices. + */ +ol.geom.LinearRing = function(coordinates, opt_shared) { + goog.base(this, coordinates, opt_shared); + + /** + * We're intentionally not enforcing that rings be closed right now. This + * will allow proper rendering of data from tiled vector sources that leave + * open rings. + */ + +}; +goog.inherits(ol.geom.LinearRing, ol.geom.LineString); + + +/** + * @inheritDoc + */ +ol.geom.LinearRing.prototype.getType = function() { + return ol.geom.GeometryType.LINEARRING; +}; diff --git a/master/ol/ol/geom/linestring.js b/master/ol/ol/geom/linestring.js new file mode 100644 index 0000000000..1705954163 --- /dev/null +++ b/master/ol/ol/geom/linestring.js @@ -0,0 +1,149 @@ +goog.provide('ol.geom.LineString'); + +goog.require('goog.asserts'); +goog.require('ol.Extent'); +goog.require('ol.geom.Geometry'); +goog.require('ol.geom.GeometryType'); +goog.require('ol.geom.SharedVertices'); +goog.require('ol.geom.VertexArray'); + + + +/** + * @constructor + * @extends {ol.geom.Geometry} + * @param {ol.geom.VertexArray} coordinates Vertex array (e.g. + * [[x0, y0], [x1, y1]]). + * @param {ol.geom.SharedVertices=} opt_shared Shared vertices. + */ +ol.geom.LineString = function(coordinates, opt_shared) { + goog.base(this); + goog.asserts.assert(goog.isArray(coordinates[0])); + + var vertices = opt_shared, + dimension; + + if (!goog.isDef(vertices)) { + dimension = coordinates[0].length; + vertices = new ol.geom.SharedVertices({dimension: dimension}); + } + + /** + * @type {ol.geom.SharedVertices} + */ + this.vertices = vertices; + + /** + * @type {number} + * @private + */ + this.sharedId_ = vertices.add(coordinates); + + /** + * @type {number} + */ + this.dimension = vertices.getDimension(); + goog.asserts.assert(this.dimension >= 2); + + /** + * @type {ol.Extent} + * @private + */ + this.bounds_ = null; + +}; +goog.inherits(ol.geom.LineString, ol.geom.Geometry); + + +/** + * Get a vertex coordinate value for the given dimension. + * @param {number} index Vertex index. + * @param {number} dim Coordinate dimension. + * @return {number} The vertex coordinate value. + */ +ol.geom.LineString.prototype.get = function(index, dim) { + return this.vertices.get(this.sharedId_, index, dim); +}; + + +/** + * @inheritDoc + * @return {ol.geom.VertexArray} Coordinates array. + */ +ol.geom.LineString.prototype.getCoordinates = function() { + var count = this.getCount(); + var coordinates = new Array(count); + var vertex; + for (var i = 0; i < count; ++i) { + vertex = new Array(this.dimension); + for (var j = 0; j < this.dimension; ++j) { + vertex[j] = this.get(i, j); + } + coordinates[i] = vertex; + } + return coordinates; +}; + + +/** + * Get the count of vertices in this linestring. + * @return {number} The vertex count. + */ +ol.geom.LineString.prototype.getCount = function() { + return this.vertices.getCount(this.sharedId_); +}; + + +/** + * @inheritDoc + */ +ol.geom.LineString.prototype.getBounds = function() { + if (goog.isNull(this.bounds_)) { + var dimension = this.dimension, + vertices = this.vertices, + id = this.sharedId_, + count = vertices.getCount(id), + start = vertices.getStart(id), + end = start + (count * dimension), + coordinates = vertices.coordinates, + minX, maxX, + minY, maxY, + x, y, i; + + minX = maxX = coordinates[start]; + minY = maxY = coordinates[start + 1]; + for (i = start + dimension; i < end; i += dimension) { + x = coordinates[i]; + y = coordinates[i + 1]; + if (x < minX) { + minX = x; + } else if (x > maxX) { + maxX = x; + } + if (y < minY) { + minY = y; + } else if (y > maxY) { + maxY = y; + } + } + this.bounds_ = new ol.Extent(minX, minY, maxX, maxY); + } + return this.bounds_; +}; + + +/** + * @inheritDoc + */ +ol.geom.LineString.prototype.getType = function() { + return ol.geom.GeometryType.LINESTRING; +}; + + +/** + * Get the identifier used to mark this line in the shared vertices structure. + * @return {number} The identifier. + */ +ol.geom.LineString.prototype.getSharedId = function() { + return this.sharedId_; +}; diff --git a/master/ol/ol/geom/multilinestring.js b/master/ol/ol/geom/multilinestring.js new file mode 100644 index 0000000000..71f99afbe1 --- /dev/null +++ b/master/ol/ol/geom/multilinestring.js @@ -0,0 +1,72 @@ +goog.provide('ol.geom.MultiLineString'); + +goog.require('goog.asserts'); +goog.require('ol.geom.AbstractCollection'); +goog.require('ol.geom.GeometryType'); +goog.require('ol.geom.LineString'); +goog.require('ol.geom.SharedVertices'); +goog.require('ol.geom.VertexArray'); + + + +/** + * @constructor + * @extends {ol.geom.AbstractCollection} + * @param {Array.} coordinates Coordinates array. + * @param {ol.geom.SharedVertices=} opt_shared Shared vertices. + */ +ol.geom.MultiLineString = function(coordinates, opt_shared) { + goog.base(this); + goog.asserts.assert(goog.isArray(coordinates[0][0])); + + var vertices = opt_shared, + dimension; + + if (!goog.isDef(vertices)) { + // try to get dimension from first vertex in first line + dimension = coordinates[0][0].length; + vertices = new ol.geom.SharedVertices({dimension: dimension}); + } + + var numParts = coordinates.length; + + /** + * @type {Array.} + */ + this.components = new Array(numParts); + for (var i = 0; i < numParts; ++i) { + this.components[i] = new ol.geom.LineString(coordinates[i], vertices); + } + + /** + * @type {number} + */ + this.dimension = vertices.getDimension(); + +}; +goog.inherits(ol.geom.MultiLineString, ol.geom.AbstractCollection); + + +/** + * @inheritDoc + */ +ol.geom.MultiLineString.prototype.getType = function() { + return ol.geom.GeometryType.MULTILINESTRING; +}; + + +/** + * Create a multi-linestring geometry from an array of linestring geometries. + * + * @param {Array.} geometries Array of geometries. + * @param {ol.geom.SharedVertices=} opt_shared Shared vertices. + * @return {ol.geom.MultiLineString} A new geometry. + */ +ol.geom.MultiLineString.fromParts = function(geometries, opt_shared) { + var count = geometries.length; + var coordinates = new Array(count); + for (var i = 0; i < count; ++i) { + coordinates[i] = geometries[i].getCoordinates(); + } + return new ol.geom.MultiLineString(coordinates, opt_shared); +}; diff --git a/master/ol/ol/geom/multipoint.js b/master/ol/ol/geom/multipoint.js new file mode 100644 index 0000000000..43c475bfeb --- /dev/null +++ b/master/ol/ol/geom/multipoint.js @@ -0,0 +1,77 @@ +goog.provide('ol.geom.MultiPoint'); + +goog.require('goog.asserts'); +goog.require('ol.geom.AbstractCollection'); +goog.require('ol.geom.GeometryType'); +goog.require('ol.geom.Point'); +goog.require('ol.geom.SharedVertices'); +goog.require('ol.geom.VertexArray'); + + + +/** + * @constructor + * @extends {ol.geom.AbstractCollection} + * @param {ol.geom.VertexArray} coordinates Coordinates array. + * @param {ol.geom.SharedVertices=} opt_shared Shared vertices. + */ +ol.geom.MultiPoint = function(coordinates, opt_shared) { + goog.base(this); + goog.asserts.assert(goog.isArray(coordinates[0])); + + var vertices = opt_shared, + dimension; + + if (!goog.isDef(vertices)) { + // try to get dimension from first vertex + dimension = coordinates[0].length; + vertices = new ol.geom.SharedVertices({dimension: dimension}); + } + + /** + * @type {ol.geom.SharedVertices} + */ + this.vertices = vertices; + + var numParts = coordinates.length; + + /** + * @type {Array.} + */ + this.components = new Array(numParts); + for (var i = 0; i < numParts; ++i) { + this.components[i] = new ol.geom.Point(coordinates[i], vertices); + } + + /** + * @type {number} + */ + this.dimension = vertices.getDimension(); + +}; +goog.inherits(ol.geom.MultiPoint, ol.geom.AbstractCollection); + + +/** + * @inheritDoc + */ +ol.geom.MultiPoint.prototype.getType = function() { + return ol.geom.GeometryType.MULTIPOINT; +}; + + +/** + * Create a multi-point geometry from an array of point geometries. + * + * @param {Array.} geometries Array of geometries. + * @param {ol.geom.SharedVertices=} opt_shared Shared vertices. + * @return {ol.geom.MultiPoint} A new geometry. + */ +ol.geom.MultiPoint.fromParts = function(geometries, opt_shared) { + var count = geometries.length; + var coordinates = new Array(count); + for (var i = 0; i < count; ++i) { + coordinates[i] = geometries[i].getCoordinates(); + } + return new ol.geom.MultiPoint(coordinates, opt_shared); +}; diff --git a/master/ol/ol/geom/multipolygon.js b/master/ol/ol/geom/multipolygon.js new file mode 100644 index 0000000000..b3c87c6175 --- /dev/null +++ b/master/ol/ol/geom/multipolygon.js @@ -0,0 +1,73 @@ +goog.provide('ol.geom.MultiPolygon'); + +goog.require('goog.asserts'); +goog.require('ol.geom.AbstractCollection'); +goog.require('ol.geom.GeometryType'); +goog.require('ol.geom.Polygon'); +goog.require('ol.geom.SharedVertices'); +goog.require('ol.geom.VertexArray'); + + + +/** + * @constructor + * @extends {ol.geom.AbstractCollection} + * @param {Array.>} coordinates Coordinates + * array. + * @param {ol.geom.SharedVertices=} opt_shared Shared vertices. + */ +ol.geom.MultiPolygon = function(coordinates, opt_shared) { + goog.base(this); + goog.asserts.assert(goog.isArray(coordinates[0][0][0])); + + var vertices = opt_shared, + dimension; + + if (!goog.isDef(vertices)) { + // try to get dimension from first vertex in first ring of the first poly + dimension = coordinates[0][0][0].length; + vertices = new ol.geom.SharedVertices({dimension: dimension}); + } + + var numParts = coordinates.length; + + /** + * @type {Array.} + */ + this.components = new Array(numParts); + for (var i = 0; i < numParts; ++i) { + this.components[i] = new ol.geom.Polygon(coordinates[i], vertices); + } + + /** + * @type {number} + */ + this.dimension = vertices.getDimension(); + +}; +goog.inherits(ol.geom.MultiPolygon, ol.geom.AbstractCollection); + + +/** + * @inheritDoc + */ +ol.geom.MultiPolygon.prototype.getType = function() { + return ol.geom.GeometryType.MULTIPOLYGON; +}; + + +/** + * Create a multi-polygon geometry from an array of polygon geometries. + * + * @param {Array.} geometries Array of geometries. + * @param {ol.geom.SharedVertices=} opt_shared Shared vertices. + * @return {ol.geom.MultiPolygon} A new geometry. + */ +ol.geom.MultiPolygon.fromParts = function(geometries, opt_shared) { + var count = geometries.length; + var coordinates = new Array(count); + for (var i = 0; i < count; ++i) { + coordinates[i] = geometries[i].getCoordinates(); + } + return new ol.geom.MultiPolygon(coordinates, opt_shared); +}; diff --git a/master/ol/ol/geom/point.js b/master/ol/ol/geom/point.js new file mode 100644 index 0000000000..f593db0cb7 --- /dev/null +++ b/master/ol/ol/geom/point.js @@ -0,0 +1,105 @@ +goog.provide('ol.geom.Point'); + +goog.require('goog.asserts'); +goog.require('ol.Extent'); +goog.require('ol.geom.Geometry'); +goog.require('ol.geom.GeometryType'); +goog.require('ol.geom.SharedVertices'); +goog.require('ol.geom.Vertex'); + + + +/** + * @constructor + * @extends {ol.geom.Geometry} + * @param {ol.geom.Vertex} coordinates Coordinates array (e.g. [x, y]). + * @param {ol.geom.SharedVertices=} opt_shared Shared vertices. + */ +ol.geom.Point = function(coordinates, opt_shared) { + goog.base(this); + + var vertices = opt_shared, + dimension; + + if (!goog.isDef(vertices)) { + dimension = coordinates.length; + vertices = new ol.geom.SharedVertices({dimension: dimension}); + } + + /** + * @type {ol.geom.SharedVertices} + */ + this.vertices = vertices; + + /** + * @type {number} + * @private + */ + this.sharedId_ = vertices.add([coordinates]); + + /** + * @type {number} + */ + this.dimension = vertices.getDimension(); + goog.asserts.assert(this.dimension >= 2); + + /** + * @type {ol.Extent} + * @private + */ + this.bounds_ = null; + +}; +goog.inherits(ol.geom.Point, ol.geom.Geometry); + + +/** + * @param {number} dim Coordinate dimension. + * @return {number} The coordinate value. + */ +ol.geom.Point.prototype.get = function(dim) { + return this.vertices.get(this.sharedId_, 0, dim); +}; + + +/** + * @inheritDoc + */ +ol.geom.Point.prototype.getBounds = function() { + if (goog.isNull(this.bounds_)) { + var x = this.get(0), + y = this.get(1); + this.bounds_ = new ol.Extent(x, y, x, y); + } + return this.bounds_; +}; + + +/** + * @inheritDoc + * @return {ol.geom.Vertex} Coordinates array. + */ +ol.geom.Point.prototype.getCoordinates = function() { + var coordinates = new Array(this.dimension); + for (var i = 0; i < this.dimension; ++i) { + coordinates[i] = this.get(i); + } + return coordinates; +}; + + +/** + * @inheritDoc + */ +ol.geom.Point.prototype.getType = function() { + return ol.geom.GeometryType.POINT; +}; + + +/** + * Get the identifier used to mark this point in the shared vertices structure. + * @return {number} The identifier. + */ +ol.geom.Point.prototype.getSharedId = function() { + return this.sharedId_; +}; diff --git a/master/ol/ol/geom/polygon.js b/master/ol/ol/geom/polygon.js new file mode 100644 index 0000000000..c38b4aa57a --- /dev/null +++ b/master/ol/ol/geom/polygon.js @@ -0,0 +1,90 @@ +goog.provide('ol.geom.Polygon'); + +goog.require('goog.asserts'); +goog.require('ol.Extent'); +goog.require('ol.geom.Geometry'); +goog.require('ol.geom.GeometryType'); +goog.require('ol.geom.LinearRing'); +goog.require('ol.geom.SharedVertices'); +goog.require('ol.geom.VertexArray'); + + + +/** + * @constructor + * @extends {ol.geom.Geometry} + * @param {Array.} coordinates Array of rings. First + * is outer, any remaining are inner. + * @param {ol.geom.SharedVertices=} opt_shared Shared vertices. + */ +ol.geom.Polygon = function(coordinates, opt_shared) { + goog.base(this); + goog.asserts.assert(goog.isArray(coordinates[0][0])); + + var vertices = opt_shared, + dimension; + + if (!goog.isDef(vertices)) { + // try to get dimension from first vertex in first ring + dimension = coordinates[0][0].length; + vertices = new ol.geom.SharedVertices({dimension: dimension}); + } + + /** + * @type {ol.geom.SharedVertices} + */ + this.vertices = vertices; + + var numRings = coordinates.length; + + /** + * @type {Array.} + */ + this.rings = new Array(numRings); + for (var i = 0; i < numRings; ++i) { + this.rings[i] = new ol.geom.LinearRing(coordinates[i], vertices); + } + + /** + * @type {number} + */ + this.dimension = vertices.getDimension(); + goog.asserts.assert(this.dimension >= 2); + + /** + * @type {ol.Extent} + * @private + */ + this.bounds_ = null; + +}; +goog.inherits(ol.geom.Polygon, ol.geom.Geometry); + + +/** + * @inheritDoc + */ +ol.geom.Polygon.prototype.getBounds = function() { + return this.rings[0].getBounds(); +}; + + +/** + * @return {Array.} Coordinates array. + */ +ol.geom.Polygon.prototype.getCoordinates = function() { + var count = this.rings.length; + var coordinates = new Array(count); + for (var i = 0; i < count; ++i) { + coordinates[i] = this.rings[i].getCoordinates(); + } + return coordinates; +}; + + +/** + * @inheritDoc + */ +ol.geom.Polygon.prototype.getType = function() { + return ol.geom.GeometryType.POLYGON; +}; diff --git a/master/ol/ol/geom/sharedvertices.js b/master/ol/ol/geom/sharedvertices.js new file mode 100644 index 0000000000..3941b8f0e7 --- /dev/null +++ b/master/ol/ol/geom/sharedvertices.js @@ -0,0 +1,163 @@ +goog.provide('ol.geom.SharedVertices'); + +goog.require('goog.asserts'); +goog.require('ol.geom.Vertex'); +goog.require('ol.geom.VertexArray'); + + +/** + * @typedef {{dimension: (number), + * offset: (ol.geom.Vertex|undefined)}} + */ +ol.geom.SharedVerticesOptions; + + + +/** + * Provides methods for dealing with shared, flattened arrays of vertices. + * + * @constructor + * @param {ol.geom.SharedVerticesOptions=} opt_options Shared vertices options. + */ +ol.geom.SharedVertices = function(opt_options) { + var options = opt_options ? opt_options : {}; + + /** + * @type {Array.} + */ + this.coordinates = []; + + /** + * @type {Array.} + * @private + */ + this.starts_ = []; + + /** + * @type {Array.} + * @private + */ + this.counts_ = []; + + /** + * Number of dimensions per vertex. Default is 2. + * @type {number} + * @private + */ + this.dimension_ = options.dimension || 2; + + /** + * Vertex offset. + * @type {Array.} + * @private + */ + this.offset_ = options.offset || null; + goog.asserts.assert(goog.isNull(this.offset_) || + this.offset_.length === this.dimension_); + +}; + + +/** + * Adds a vertex array to the shared coordinate array. + * @param {ol.geom.VertexArray} vertices Array of vertices. + * @return {number} Index used to reference the added vertex array. + */ +ol.geom.SharedVertices.prototype.add = function(vertices) { + var start = this.coordinates.length; + var offset = this.offset_; + var dimension = this.dimension_; + var count = vertices.length; + var vertex, index; + for (var i = 0; i < count; ++i) { + vertex = vertices[i]; + goog.asserts.assert(vertex.length == dimension); + if (!offset) { + Array.prototype.push.apply(this.coordinates, vertex); + } else { + index = start + (i * dimension); + for (var j = 0; j < dimension; ++j) { + this.coordinates[index + j] = vertex[j] - offset[j]; + } + } + } + var length = this.starts_.push(start); + this.counts_.push(count); + return length - 1; +}; + + +/** + * @param {number} id The vertex array identifier (returned by add). + * @param {number} index The vertex index. + * @param {number} dim The coordinate dimension. + * @return {number} The coordinate value. + */ +ol.geom.SharedVertices.prototype.get = function(id, index, dim) { + goog.asserts.assert(id < this.starts_.length); + goog.asserts.assert(dim <= this.dimension_); + goog.asserts.assert(index < this.counts_[id]); + var start = this.starts_[id]; + var value = this.coordinates[start + (index * this.dimension_) + dim]; + if (this.offset_) { + value += this.offset_[dim]; + } + return value; +}; + + +/** + * @param {number} id The vertex array identifier (returned by add). + * @return {number} The number of vertices in the referenced array. + */ +ol.geom.SharedVertices.prototype.getCount = function(id) { + goog.asserts.assert(id < this.counts_.length); + return this.counts_[id]; +}; + + +/** + * Get the array of counts. The index returned by the add method can be used + * to look up the number of vertices. + * + * @return {Array.} The counts array. + */ +ol.geom.SharedVertices.prototype.getCounts = function() { + return this.counts_; +}; + + +/** + * @return {number} The dimension of each vertex in the array. + */ +ol.geom.SharedVertices.prototype.getDimension = function() { + return this.dimension_; +}; + + +/** + * @return {Array.} The offset array for vertex coordinates (or null). + */ +ol.geom.SharedVertices.prototype.getOffset = function() { + return this.offset_; +}; + + +/** + * @param {number} id The vertex array identifier (returned by add). + * @return {number} The start index in the shared vertices array. + */ +ol.geom.SharedVertices.prototype.getStart = function(id) { + goog.asserts.assert(id < this.starts_.length); + return this.starts_[id]; +}; + + +/** + * Get the array of start indexes. + * @return {Array.} The starts array. + */ +ol.geom.SharedVertices.prototype.getStarts = function() { + return this.starts_; +}; + diff --git a/master/ol/ol/layer/vectorlayer.exports b/master/ol/ol/layer/vectorlayer.exports new file mode 100644 index 0000000000..ff90656cad --- /dev/null +++ b/master/ol/ol/layer/vectorlayer.exports @@ -0,0 +1,3 @@ +@exportClass ol.layer.Vector ol.layer.LayerOptions + +@exportProperty ol.layer.Vector.prototype.parseFeatures diff --git a/master/ol/ol/layer/vectorlayer.js b/master/ol/ol/layer/vectorlayer.js new file mode 100644 index 0000000000..b49ff250d9 --- /dev/null +++ b/master/ol/ol/layer/vectorlayer.js @@ -0,0 +1,360 @@ +goog.provide('ol.layer.Vector'); + +goog.require('goog.events.EventType'); +goog.require('ol.Feature'); +goog.require('ol.geom.SharedVertices'); +goog.require('ol.layer.Layer'); +goog.require('ol.projection'); +goog.require('ol.source.Vector'); +goog.require('ol.structs.RTree'); +goog.require('ol.style.Style'); + + + +/** + * @constructor + */ +ol.layer.FeatureCache = function() { + + /** + * @type {Object.} + * @private + */ + this.idLookup_; + + /** + * @type {Object.} + * @private + */ + this.geometryTypeIndex_; + + /** + * @type {ol.structs.RTree} + * @private + */ + this.rTree_; + + this.clear(); + +}; + + +/** + * Clear the cache. + */ +ol.layer.FeatureCache.prototype.clear = function() { + this.idLookup_ = {}; + var geometryTypeIndex = {}; + for (var key in ol.geom.GeometryType) { + geometryTypeIndex[ol.geom.GeometryType[key]] = {}; + } + this.geometryTypeIndex_ = geometryTypeIndex; + this.rTree_ = new ol.structs.RTree(); +}; + + +/** + * Add a feature to the cache. + * @param {ol.Feature} feature Feature to be cached. + */ +ol.layer.FeatureCache.prototype.add = function(feature) { + var id = goog.getUid(feature).toString(), + geometry = feature.getGeometry(); + + this.idLookup_[id] = feature; + + // index by geometry type and bounding box + if (!goog.isNull(geometry)) { + var geometryType = geometry.getType(); + this.geometryTypeIndex_[geometryType][id] = feature; + this.rTree_.put(geometry.getBounds(), + feature, geometryType); + } +}; + + +/** + * @param {ol.filter.Filter=} opt_filter Optional filter. + * @return {Object.} Object of features, keyed by id. + */ +ol.layer.FeatureCache.prototype.getFeaturesObject = function(opt_filter) { + var i, features; + if (!goog.isDef(opt_filter)) { + features = this.idLookup_; + } else { + if (opt_filter instanceof ol.filter.Geometry) { + features = this.geometryTypeIndex_[opt_filter.getType()]; + } else if (opt_filter instanceof ol.filter.Extent) { + features = this.rTree_.find(opt_filter.getExtent()); + } else if (opt_filter instanceof ol.filter.Logical && + opt_filter.operator === ol.filter.LogicalOperator.AND) { + var filters = opt_filter.getFilters(); + if (filters.length === 2) { + var filter, geometryFilter, extentFilter; + for (i = 0; i <= 1; ++i) { + filter = filters[i]; + if (filter instanceof ol.filter.Geometry) { + geometryFilter = filter; + } else if (filter instanceof ol.filter.Extent) { + extentFilter = filter; + } + } + if (extentFilter && geometryFilter) { + features = this.rTree_.find( + extentFilter.getExtent(), geometryFilter.getType()); + } + } + } + if (!goog.isDef(features)) { + // TODO: support fast lane for other filter types + var candidates = this.idLookup_, + feature; + features = {}; + for (i in candidates) { + feature = candidates[i]; + if (opt_filter.applies(feature) === true) { + features[i] = feature; + } + } + } + } + return features; +}; + + +/** + * @param {ol.filter.Geometry} filter Geometry type filter. + * @return {Array.} Array of features. + * @private + */ +ol.layer.FeatureCache.prototype.getFeaturesByGeometryType_ = function(filter) { + return goog.object.getValues(this.geometryTypeIndex_[filter.getType()]); +}; + + +/** + * Get features by ids. + * @param {Array.} ids Array of (internal) identifiers. + * @return {Array.} Array of features. + * @private + */ +ol.layer.FeatureCache.prototype.getFeaturesByIds_ = function(ids) { + var len = ids.length, + features = new Array(len), + i; + for (i = 0; i < len; ++i) { + features[i] = this.idLookup_[ids[i]]; + } + return features; +}; + + + +/** + * @constructor + * @extends {ol.layer.Layer} + * @param {ol.layer.LayerOptions} layerOptions Layer options. + */ +ol.layer.Vector = function(layerOptions) { + goog.base(this, layerOptions); + + /** + * @private + * @type {ol.style.Style} + */ + this.style_ = goog.isDef(layerOptions.style) ? layerOptions.style : null; + + /** + * @type {ol.layer.FeatureCache} + * @private + */ + this.featureCache_ = new ol.layer.FeatureCache(); + + /** + * TODO: this means we need to know dimension at construction + * @type {ol.geom.SharedVertices} + * @private + */ + this.pointVertices_ = new ol.geom.SharedVertices(); + + /** + * TODO: this means we need to know dimension at construction + * @type {ol.geom.SharedVertices} + * @private + */ + this.lineVertices_ = new ol.geom.SharedVertices(); + + /** + * TODO: this means we need to know dimension at construction + * @type {ol.geom.SharedVertices} + * @private + */ + this.polygonVertices_ = new ol.geom.SharedVertices(); + +}; +goog.inherits(ol.layer.Vector, ol.layer.Layer); + + +/** + * @param {Array.} features Array of features. + */ +ol.layer.Vector.prototype.addFeatures = function(features) { + for (var i = 0, ii = features.length; i < ii; ++i) { + this.featureCache_.add(features[i]); + } + // TODO: events for real - listeners want features and extent here + this.dispatchEvent(goog.events.EventType.CHANGE); +}; + + +/** + * @return {ol.source.Vector} Source. + */ +ol.layer.Vector.prototype.getVectorSource = function() { + return /** @type {ol.source.Vector} */ (this.getSource()); +}; + + +/** + * @param {ol.filter.Filter=} opt_filter Optional filter. + * @return {Array.} Array of features. + */ +ol.layer.Vector.prototype.getFeatures = function(opt_filter) { + return goog.object.getValues( + this.featureCache_.getFeaturesObject(opt_filter)); +}; + + +/** + * @param {ol.filter.Filter=} opt_filter Optional filter. + * @return {Object.} Features. + */ +ol.layer.Vector.prototype.getFeaturesObject = function(opt_filter) { + return this.featureCache_.getFeaturesObject(opt_filter); +}; + + +/** + * @return {ol.geom.SharedVertices} Shared line vertices. + */ +ol.layer.Vector.prototype.getLineVertices = function() { + return this.lineVertices_; +}; + + +/** + * @return {ol.geom.SharedVertices} Shared point vertices. + */ +ol.layer.Vector.prototype.getPointVertices = function() { + return this.pointVertices_; +}; + + +/** + * @return {ol.geom.SharedVertices} Shared polygon vertices. + */ +ol.layer.Vector.prototype.getPolygonVertices = function() { + return this.polygonVertices_; +}; + + +/** + * @param {Object.} features Features. + * @return {Array.} symbolizers for features. + */ +ol.layer.Vector.prototype.groupFeaturesBySymbolizerLiteral = + function(features) { + var uniqueLiterals = {}, + featuresBySymbolizer = [], + style = this.style_, + i, j, l, feature, literals, numLiterals, literal, uniqueLiteral, key; + for (i in features) { + feature = features[i]; + literals = feature.getSymbolizerLiterals(); + if (goog.isNull(literals)) { + literals = goog.isNull(style) ? + ol.style.Style.applyDefaultStyle(feature) : + style.apply(feature); + } + numLiterals = literals.length; + for (j = 0; j < numLiterals; ++j) { + literal = literals[j]; + for (l in uniqueLiterals) { + uniqueLiteral = featuresBySymbolizer[uniqueLiterals[l]][1]; + if (literal.equals(uniqueLiteral)) { + literal = uniqueLiteral; + break; + } + } + key = goog.getUid(literal); + if (!goog.object.containsKey(uniqueLiterals, key)) { + uniqueLiterals[key] = featuresBySymbolizer.length; + featuresBySymbolizer.push([[], literal]); + } + featuresBySymbolizer[uniqueLiterals[key]][0].push(feature); + } + } + return featuresBySymbolizer; +}; + + +/** + * @param {Object|Element|Document|string} data Feature data. + * @param {ol.parser.Parser} parser Feature parser. + * @param {ol.Projection} projection This sucks. The layer should be a view in + * one projection. + */ +ol.layer.Vector.prototype.parseFeatures = function(data, parser, projection) { + var features; + + var lookup = { + 'point': this.pointVertices_, + 'linestring': this.lineVertices_, + 'polygon': this.polygonVertices_, + 'multipoint': this.pointVertices_, + 'multilinstring': this.lineVertices_, + 'multipolygon': this.polygonVertices_ + }; + + var callback = function(feature, type) { + return lookup[type]; + }; + if (typeof data === 'string') { + goog.asserts.assert(typeof parser.readFeaturesFromString === 'function', + 'Expected a parser with readFeaturesFromString method.'); + features = parser.readFeaturesFromString(data, {callback: callback}); + } else if (typeof data === 'object') { + goog.asserts.assert(typeof parser.readFeaturesFromObject === 'function', + 'Expected a parser with a readFeaturesFromObject method.'); + features = parser.readFeaturesFromObject(data, {callback: callback}); + } else { + // TODO: parse more data types + throw new Error('Data type not supported: ' + data); + } + var sourceProjection = this.getSource().getProjection(); + var transform = ol.projection.getTransform(sourceProjection, projection); + + transform( + this.pointVertices_.coordinates, + this.pointVertices_.coordinates, + this.pointVertices_.getDimension()); + + transform( + this.lineVertices_.coordinates, + this.lineVertices_.coordinates, + this.lineVertices_.getDimension()); + + transform( + this.polygonVertices_.coordinates, + this.polygonVertices_.coordinates, + this.polygonVertices_.getDimension()); + + this.addFeatures(features); +}; + + +goog.require('ol.filter.Extent'); +goog.require('ol.filter.Geometry'); +goog.require('ol.filter.Logical'); +goog.require('ol.filter.LogicalOperator'); +goog.require('ol.geom.GeometryType'); diff --git a/master/ol/ol/ol.js b/master/ol/ol/ol.js index 14a0e3d7b2..7f89641909 100644 --- a/master/ol/ol/ol.js +++ b/master/ol/ol/ol.js @@ -7,3 +7,11 @@ if (goog.DEBUG) { var logger = goog.debug.Logger.getLogger('ol'); logger.setLevel(goog.debug.Logger.Level.FINEST); } + + +/** + * The CSS class that we'll give the DOM elements to have them unselectable. + * + * @const {string} + */ +ol.CSS_CLASS_UNSELECTABLE = 'ol-unselectable'; diff --git a/master/ol/ol/parser/featureparser.js b/master/ol/ol/parser/featureparser.js new file mode 100644 index 0000000000..686fcb2443 --- /dev/null +++ b/master/ol/ol/parser/featureparser.js @@ -0,0 +1,66 @@ +goog.provide('ol.parser.DomFeatureParser'); +goog.provide('ol.parser.ObjectFeatureParser'); +goog.provide('ol.parser.ReadFeaturesOptions'); +goog.provide('ol.parser.StringFeatureParser'); + +goog.require('ol.Feature'); + + + +/** + * @interface + */ +ol.parser.DomFeatureParser = function() {}; + + +/** + * @param {Element|Document} node Document or element node. + * @param {ol.parser.ReadFeaturesOptions=} opt_options Feature reading options. + * @return {Array.} Array of features. + */ +ol.parser.DomFeatureParser.prototype.readFeaturesFromNode = + goog.abstractMethod; + + + +/** + * @interface + */ +ol.parser.ObjectFeatureParser = function() {}; + + +/** + * @param {Object} obj Object representing features. + * @param {ol.parser.ReadFeaturesOptions=} opt_options Feature reading options. + * @return {Array.} Array of features. + */ +ol.parser.ObjectFeatureParser.prototype.readFeaturesFromObject = + goog.abstractMethod; + + + +/** + * @interface + */ +ol.parser.StringFeatureParser = function() {}; + + +/** + * @param {string} data String data. + * @param {ol.parser.ReadFeaturesOptions=} opt_options Feature reading options. + * @return {Array.} Array of features. + */ +ol.parser.StringFeatureParser.prototype.readFeaturesFromString = + goog.abstractMethod; + + +/** + * @typedef {function(ol.Feature, ol.geom.GeometryType):ol.geom.SharedVertices} + */ +ol.parser.ReadFeaturesCallback; + + +/** + * @typedef {{callback: ol.parser.ReadFeaturesCallback}} + */ +ol.parser.ReadFeaturesOptions; diff --git a/master/ol/ol/parser/geojson.exports b/master/ol/ol/parser/geojson.exports new file mode 100644 index 0000000000..d7ec119aa5 --- /dev/null +++ b/master/ol/ol/parser/geojson.exports @@ -0,0 +1,3 @@ +@exportSymbol ol.parser.GeoJSON + +@exportProperty ol.parser.GeoJSON.prototype.read diff --git a/master/ol/ol/parser/geojson.js b/master/ol/ol/parser/geojson.js new file mode 100644 index 0000000000..ce5d0e27c4 --- /dev/null +++ b/master/ol/ol/parser/geojson.js @@ -0,0 +1,285 @@ +goog.provide('ol.parser.GeoJSON'); + +goog.require('ol.Feature'); +goog.require('ol.geom.Geometry'); +goog.require('ol.geom.GeometryType'); +goog.require('ol.geom.LineString'); +goog.require('ol.geom.MultiLineString'); +goog.require('ol.geom.MultiPoint'); +goog.require('ol.geom.MultiPolygon'); +goog.require('ol.geom.Point'); +goog.require('ol.geom.Polygon'); +goog.require('ol.geom.SharedVertices'); +goog.require('ol.parser.Parser'); +goog.require('ol.parser.ReadFeaturesOptions'); +goog.require('ol.parser.StringFeatureParser'); + + + +/** + * @constructor + * @implements {ol.parser.StringFeatureParser} + * @extends {ol.parser.Parser} + */ +ol.parser.GeoJSON = function() {}; +goog.inherits(ol.parser.GeoJSON, ol.parser.Parser); + + +/** + * Parse a GeoJSON string. + * @param {string} str GeoJSON string. + * @return {ol.Feature|Array.| + * ol.geom.Geometry|Array.} Parsed geometry or array + * of geometries. + */ +ol.parser.GeoJSON.prototype.read = function(str) { + var json = /** @type {GeoJSONObject} */ (JSON.parse(str)); + return this.parse_(json); +}; + + +/** + * Parse a GeoJSON feature collection. + * @param {string} str GeoJSON feature collection. + * @param {ol.parser.ReadFeaturesOptions=} opt_options Reader options. + * @return {Array.} Array of features. + */ +ol.parser.GeoJSON.prototype.readFeaturesFromString = + function(str, opt_options) { + var json = /** @type {GeoJSONFeatureCollection} */ (JSON.parse(str)); + return this.parseFeatureCollection_(json, opt_options); +}; + + +/** + * Parse a GeoJSON feature collection from decoded JSON. + * @param {GeoJSONFeatureCollection} object GeoJSON feature collection decoded + * from JSON. + * @param {ol.parser.ReadFeaturesOptions=} opt_options Reader options. + * @return {Array.} Array of features. + */ +ol.parser.GeoJSON.prototype.readFeaturesFromObject = + function(object, opt_options) { + return this.parseFeatureCollection_(object, opt_options); +}; + + +/** + * @param {GeoJSONObject} json GeoJSON object. + * @return {ol.Feature|Array.| + * ol.geom.Geometry|Array.} Parsed geometry or array + * of geometries. + * @private + */ +ol.parser.GeoJSON.prototype.parse_ = function(json) { + var result; + switch (json.type) { + case 'FeatureCollection': + result = this.parseFeatureCollection_( + /** @type {GeoJSONFeatureCollection} */ (json)); + break; + case 'Feature': + result = this.parseFeature_( + /** @type {GeoJSONFeature} */ (json)); + break; + case 'GeometryCollection': + result = this.parseGeometryCollection_( + /** @type {GeoJSONGeometryCollection} */ (json)); + break; + case 'Point': + result = this.parsePoint_( + /** @type {GeoJSONGeometry} */ (json)); + break; + case 'LineString': + result = this.parseLineString_( + /** @type {GeoJSONGeometry} */ (json)); + break; + case 'Polygon': + result = this.parsePolygon_( + /** @type {GeoJSONGeometry} */ (json)); + break; + case 'MultiPoint': + result = this.parseMultiPoint_( + /** @type {GeoJSONGeometry} */ (json)); + break; + case 'MultiLineString': + result = this.parseMultiLineString_( + /** @type {GeoJSONGeometry} */ (json)); + break; + case 'MultiPolygon': + result = this.parseMultiPolygon_( + /** @type {GeoJSONGeometry} */ (json)); + break; + default: + throw new Error('GeoJSON parsing not implemented for type: ' + json.type); + } + return result; +}; + + +/** + * @param {GeoJSONFeature} json GeoJSON feature. + * @param {ol.parser.ReadFeaturesOptions=} opt_options Read options. + * @return {ol.Feature} Parsed feature. + * @private + */ +ol.parser.GeoJSON.prototype.parseFeature_ = function(json, opt_options) { + var geomJson = json.geometry, + geometry = null, + options = opt_options || {}; + var feature = new ol.Feature(json.properties); + if (geomJson) { + var type = geomJson.type; + var callback = options.callback; + var sharedVertices; + if (callback) { + goog.asserts.assert(type in ol.parser.GeoJSON.GeometryType, + 'Bad geometry type: ' + type); + sharedVertices = callback(feature, ol.parser.GeoJSON.GeometryType[type]); + } + switch (type) { + case 'Point': + geometry = this.parsePoint_(geomJson, sharedVertices); + break; + case 'LineString': + geometry = this.parseLineString_(geomJson, sharedVertices); + break; + case 'Polygon': + geometry = this.parsePolygon_(geomJson, sharedVertices); + break; + case 'MultiPoint': + geometry = this.parseMultiPoint_(geomJson, sharedVertices); + break; + case 'MultiLineString': + geometry = this.parseMultiLineString_(geomJson, sharedVertices); + break; + case 'MultiPolygon': + geometry = this.parseMultiPolygon_(geomJson, sharedVertices); + break; + default: + throw new Error('Bad geometry type: ' + type); + } + feature.setGeometry(geometry); + } + return feature; +}; + + +/** + * @param {GeoJSONFeatureCollection} json GeoJSON feature collection. + * @param {ol.parser.ReadFeaturesOptions=} opt_options Read options. + * @return {Array.} Parsed array of features. + * @private + */ +ol.parser.GeoJSON.prototype.parseFeatureCollection_ = function( + json, opt_options) { + var features = json.features, + len = features.length, + result = new Array(len), + i; + + for (i = 0; i < len; ++i) { + result[i] = this.parseFeature_( + /** @type {GeoJSONFeature} */ (features[i]), opt_options); + } + return result; +}; + + +/** + * @param {GeoJSONGeometryCollection} json GeoJSON geometry collection. + * @return {Array.} Parsed array of geometries. + * @private + */ +ol.parser.GeoJSON.prototype.parseGeometryCollection_ = function(json) { + var geometries = json.geometries, + len = geometries.length, + result = new Array(len), + i; + + for (i = 0; i < len; ++i) { + result[i] = this.parse_(/** @type {GeoJSONGeometry} */ (geometries[i])); + } + return result; +}; + + +/** + * @param {GeoJSONGeometry} json GeoJSON linestring. + * @param {ol.geom.SharedVertices=} opt_vertices Shared vertices. + * @return {ol.geom.LineString} Parsed linestring. + * @private + */ +ol.parser.GeoJSON.prototype.parseLineString_ = function(json, opt_vertices) { + return new ol.geom.LineString(json.coordinates, opt_vertices); +}; + + +/** + * @param {GeoJSONGeometry} json GeoJSON multi-linestring. + * @param {ol.geom.SharedVertices=} opt_vertices Shared vertices. + * @return {ol.geom.MultiLineString} Parsed multi-linestring. + * @private + */ +ol.parser.GeoJSON.prototype.parseMultiLineString_ = function( + json, opt_vertices) { + return new ol.geom.MultiLineString(json.coordinates, opt_vertices); +}; + + +/** + * @param {GeoJSONGeometry} json GeoJSON multi-point. + * @param {ol.geom.SharedVertices=} opt_vertices Shared vertices. + * @return {ol.geom.MultiPoint} Parsed multi-point. + * @private + */ +ol.parser.GeoJSON.prototype.parseMultiPoint_ = function(json, opt_vertices) { + return new ol.geom.MultiPoint(json.coordinates, opt_vertices); +}; + + +/** + * @param {GeoJSONGeometry} json GeoJSON multi-polygon. + * @param {ol.geom.SharedVertices=} opt_vertices Shared vertices. + * @return {ol.geom.MultiPolygon} Parsed multi-polygon. + * @private + */ +ol.parser.GeoJSON.prototype.parseMultiPolygon_ = function(json, opt_vertices) { + return new ol.geom.MultiPolygon(json.coordinates, opt_vertices); +}; + + +/** + * @param {GeoJSONGeometry} json GeoJSON point. + * @param {ol.geom.SharedVertices=} opt_vertices Shared vertices. + * @return {ol.geom.Point} Parsed point. + * @private + */ +ol.parser.GeoJSON.prototype.parsePoint_ = function(json, opt_vertices) { + return new ol.geom.Point(json.coordinates, opt_vertices); +}; + + +/** + * @param {GeoJSONGeometry} json GeoJSON polygon. + * @param {ol.geom.SharedVertices=} opt_vertices Shared vertices. + * @return {ol.geom.Polygon} Parsed polygon. + * @private + */ +ol.parser.GeoJSON.prototype.parsePolygon_ = function(json, opt_vertices) { + return new ol.geom.Polygon(json.coordinates, opt_vertices); +}; + + +/** + * @enum {ol.geom.GeometryType} + */ +ol.parser.GeoJSON.GeometryType = { + 'Point': ol.geom.GeometryType.POINT, + 'LineString': ol.geom.GeometryType.LINESTRING, + 'Polygon': ol.geom.GeometryType.POLYGON, + 'MultiPoint': ol.geom.GeometryType.MULTIPOINT, + 'MultiLineString': ol.geom.GeometryType.MULTILINESTRING, + 'MultiPolygon': ol.geom.GeometryType.MULTIPOLYGON, + 'GeometryCollection': ol.geom.GeometryType.GEOMETRYCOLLECTION +}; diff --git a/master/ol/ol/parser/parser.js b/master/ol/ol/parser/parser.js new file mode 100644 index 0000000000..8d6d214147 --- /dev/null +++ b/master/ol/ol/parser/parser.js @@ -0,0 +1,8 @@ +goog.provide('ol.parser.Parser'); + + + +/** + * @constructor + */ +ol.parser.Parser = function() {}; diff --git a/master/ol/ol/parser/polyline.js b/master/ol/ol/parser/polyline.js new file mode 100644 index 0000000000..c0793d0ccc --- /dev/null +++ b/master/ol/ol/parser/polyline.js @@ -0,0 +1,335 @@ +goog.provide('ol.parser.polyline'); + + +/** + * Encode a list of coordinates in a flat array and return an encoded string + * + * Attention: This function will modify the passed array! + * + * @param {Array.} flatPoints A flat array of coordinates. + * @param {number=} opt_dimension The dimension of the coordinates in the array. + * @return {string} The encoded string. + */ +ol.parser.polyline.encodeFlatCoordinates = + function(flatPoints, opt_dimension) { + var dimension = opt_dimension || 2; + return ol.parser.polyline.encodeDeltas(flatPoints, dimension); +}; + + +/** + * Decode a list of coordinates from an encoded string into a flat array + * + * @param {string} encoded An encoded string. + * @param {number=} opt_dimension The dimension of the coordinates in the + * encoded string. + * @return {Array.} A flat array of coordinates. + */ +ol.parser.polyline.decodeFlatCoordinates = function(encoded, opt_dimension) { + var dimension = opt_dimension || 2; + return ol.parser.polyline.decodeDeltas(encoded, dimension); +}; + + +/** + * Encode a list of n-dimensional points and return an encoded string + * + * Attention: This function will modify the passed array! + * + * @param {Array.} numbers A list of n-dimensional points. + * @param {number} dimension The dimension of the points in the list. + * @param {number=} opt_factor The factor by which the numbers will be + * multiplied. The remaining decimal places will get rounded away. + * @return {string} The encoded string. + */ +ol.parser.polyline.encodeDeltas = function(numbers, dimension, opt_factor) { + var factor = opt_factor || 1e5; + var d; + + var lastNumbers = new Array(dimension); + for (d = 0; d < dimension; ++d) { + lastNumbers[d] = 0; + } + + var numbersLength = numbers.length; + for (var i = 0; i < numbersLength;) { + for (d = 0; d < dimension; ++d, ++i) { + var num = numbers[i]; + var delta = num - lastNumbers[d]; + lastNumbers[d] = num; + + numbers[i] = delta; + } + } + + return ol.parser.polyline.encodeFloats(numbers, factor); +}; + + +/** + * Decode a list of n-dimensional points from an encoded string + * + * @param {string} encoded An encoded string. + * @param {number} dimension The dimension of the points in the encoded string. + * @param {number=} opt_factor The factor by which the resulting numbers will + * be divided. + * @return {Array.} A list of n-dimensional points. + */ +ol.parser.polyline.decodeDeltas = function(encoded, dimension, opt_factor) { + var factor = opt_factor || 1e5; + var d; + + var lastNumbers = new Array(dimension); + for (d = 0; d < dimension; ++d) { + lastNumbers[d] = 0; + } + + var numbers = ol.parser.polyline.decodeFloats(encoded, factor); + + var numbersLength = numbers.length; + for (var i = 0; i < numbersLength;) { + for (d = 0; d < dimension; ++d, ++i) { + lastNumbers[d] += numbers[i]; + + numbers[i] = lastNumbers[d]; + } + } + + return numbers; +}; + + +/** + * Encode a list of floating point numbers and return an encoded string + * + * Attention: This function will modify the passed array! + * + * @param {Array.} numbers A list of floating point numbers. + * @param {number=} opt_factor The factor by which the numbers will be + * multiplied. The remaining decimal places will get rounded away. + * @return {string} The encoded string. + */ +ol.parser.polyline.encodeFloats = function(numbers, opt_factor) { + var factor = opt_factor || 1e5; + + var numbersLength = numbers.length; + for (var i = 0; i < numbersLength; ++i) { + numbers[i] = Math.round(numbers[i] * factor); + } + + return ol.parser.polyline.encodeSignedIntegers(numbers); +}; + + +/** + * Decode a list of floating point numbers from an encoded string + * + * @param {string} encoded An encoded string. + * @param {number=} opt_factor The factor by which the result will be divided. + * @return {Array.} A list of floating point numbers. + */ +ol.parser.polyline.decodeFloats = function(encoded, opt_factor) { + var factor = opt_factor || 1e5; + + var numbers = ol.parser.polyline.decodeSignedIntegers(encoded); + + var numbersLength = numbers.length; + for (var i = 0; i < numbersLength; ++i) { + numbers[i] /= factor; + } + + return numbers; +}; + + +/** + * Encode a list of signed integers and return an encoded string + * + * Attention: This function will modify the passed array! + * + * @param {Array.} numbers A list of signed integers. + * @return {string} The encoded string. + */ +ol.parser.polyline.encodeSignedIntegers = function(numbers) { + var numbersLength = numbers.length; + for (var i = 0; i < numbersLength; ++i) { + var num = numbers[i]; + + var signedNum = num << 1; + if (num < 0) { + signedNum = ~(signedNum); + } + + numbers[i] = signedNum; + } + + return ol.parser.polyline.encodeUnsignedIntegers(numbers); +}; + + +/** + * Decode a list of signed integers from an encoded string + * + * @param {string} encoded An encoded string. + * @return {Array.} A list of signed integers. + */ +ol.parser.polyline.decodeSignedIntegers = function(encoded) { + var numbers = ol.parser.polyline.decodeUnsignedIntegers(encoded); + + var numbersLength = numbers.length; + for (var i = 0; i < numbersLength; ++i) { + var num = numbers[i]; + numbers[i] = (num & 1) ? ~(num >> 1) : (num >> 1); + } + + return numbers; +}; + + +/** + * Encode a list of unsigned integers and return an encoded string + * + * @param {Array.} numbers A list of unsigned integers. + * @return {string} The encoded string. + */ +ol.parser.polyline.encodeUnsignedIntegers = function(numbers) { + var encoded = ''; + + var numbersLength = numbers.length; + for (var i = 0; i < numbersLength; ++i) { + encoded += ol.parser.polyline.encodeUnsignedInteger(numbers[i]); + } + + return encoded; +}; + + +/** + * Decode a list of unsigned integers from an encoded string + * + * @param {string} encoded An encoded string. + * @return {Array.} A list of unsigned integers. + */ +ol.parser.polyline.decodeUnsignedIntegers = function(encoded) { + var numbers = []; + + var current = 0; + var shift = 0; + + var encodedLength = encoded.length; + for (var i = 0; i < encodedLength; ++i) { + var b = encoded.charCodeAt(i) - 63; + + current |= (b & 0x1f) << shift; + + if (b < 0x20) { + numbers.push(current); + current = 0; + shift = 0; + } else { + shift += 5; + } + } + + return numbers; +}; + + +/** + * Encode one single floating point number and return an encoded string + * + * @param {number} num Floating point number that should be encoded. + * @param {number=} opt_factor The factor by which num will be multiplied. + * The remaining decimal places will get rounded away. + * @return {string} The encoded string. + */ +ol.parser.polyline.encodeFloat = function(num, opt_factor) { + num = Math.round(num * (opt_factor || 1e5)); + return ol.parser.polyline.encodeSignedInteger(num); +}; + + +/** + * Decode one single floating point number from an encoded string + * + * @param {string} encoded An encoded string. + * @param {number=} opt_factor The factor by which the result will be divided. + * @return {number} The decoded floating point number. + */ +ol.parser.polyline.decodeFloat = function(encoded, opt_factor) { + var result = ol.parser.polyline.decodeSignedInteger(encoded); + return result / (opt_factor || 1e5); +}; + + +/** + * Encode one single signed integer and return an encoded string + * + * @param {number} num Signed integer that should be encoded. + * @return {string} The encoded string. + */ +ol.parser.polyline.encodeSignedInteger = function(num) { + var signedNum = num << 1; + if (num < 0) { + signedNum = ~(signedNum); + } + + return ol.parser.polyline.encodeUnsignedInteger(signedNum); +}; + + +/** + * Decode one single signed integer from an encoded string + * + * @param {string} encoded An encoded string. + * @return {number} The decoded signed integer. + */ +ol.parser.polyline.decodeSignedInteger = function(encoded) { + var result = ol.parser.polyline.decodeUnsignedInteger(encoded); + return ((result & 1) ? ~(result >> 1) : (result >> 1)); +}; + + +/** + * Encode one single unsigned integer and return an encoded string + * + * @param {number} num Unsigned integer that should be encoded. + * @return {string} The encoded string. + */ +ol.parser.polyline.encodeUnsignedInteger = function(num) { + var value, encoded = ''; + while (num >= 0x20) { + value = (0x20 | (num & 0x1f)) + 63; + encoded += (String.fromCharCode(value)); + num >>= 5; + } + value = num + 63; + encoded += (String.fromCharCode(value)); + return encoded; +}; + + +/** + * Decode one single unsigned integer from an encoded string + * + * @param {string} encoded An encoded string. + * @return {number} The decoded unsigned integer. + */ +ol.parser.polyline.decodeUnsignedInteger = function(encoded) { + var result = 0; + var shift = 0; + + var encodedLength = encoded.length; + for (var i = 0; i < encodedLength; ++i) { + var b = encoded.charCodeAt(i) - 63; + + result |= (b & 0x1f) << shift; + + if (b < 0x20) + break; + + shift += 5; + } + + return result; +}; diff --git a/master/ol/ol/parser/xml.js b/master/ol/ol/parser/xml.js index 6e07cf645c..20c14d21af 100644 --- a/master/ol/ol/parser/xml.js +++ b/master/ol/ol/parser/xml.js @@ -1,9 +1,12 @@ goog.provide('ol.parser.XML'); +goog.require('ol.parser.Parser'); + /** * @constructor + * @extends {ol.parser.Parser} */ ol.parser.XML = function() { this.regExes = { @@ -13,6 +16,7 @@ ol.parser.XML = function() { trimComma: (/\s*,\s*/g) }; }; +goog.inherits(ol.parser.XML, ol.parser.Parser); /** diff --git a/master/ol/ol/renderer/canvas/canvasmaprenderer.js b/master/ol/ol/renderer/canvas/canvasmaprenderer.js index 24ee38307f..a66bece9f5 100644 --- a/master/ol/ol/renderer/canvas/canvasmaprenderer.js +++ b/master/ol/ol/renderer/canvas/canvasmaprenderer.js @@ -6,12 +6,15 @@ goog.require('goog.array'); goog.require('goog.dom'); goog.require('goog.style'); goog.require('goog.vec.Mat4'); +goog.require('ol'); goog.require('ol.Size'); goog.require('ol.layer.ImageLayer'); goog.require('ol.layer.TileLayer'); +goog.require('ol.layer.Vector'); goog.require('ol.renderer.Map'); goog.require('ol.renderer.canvas.ImageLayer'); goog.require('ol.renderer.canvas.TileLayer'); +goog.require('ol.renderer.canvas.VectorLayer'); @@ -38,7 +41,7 @@ ol.renderer.canvas.Map = function(container, map) { this.canvas_ = goog.dom.createElement(goog.dom.TagName.CANVAS); this.canvas_.height = this.canvasSize_.height; this.canvas_.width = this.canvasSize_.width; - this.canvas_.className = 'ol-unselectable'; + this.canvas_.className = ol.CSS_CLASS_UNSELECTABLE; goog.dom.insertChildAt(container, this.canvas_, 0); /** @@ -65,6 +68,8 @@ ol.renderer.canvas.Map.prototype.createLayerRenderer = function(layer) { return new ol.renderer.canvas.ImageLayer(this, layer); } else if (layer instanceof ol.layer.TileLayer) { return new ol.renderer.canvas.TileLayer(this, layer); + } else if (layer instanceof ol.layer.Vector) { + return new ol.renderer.canvas.VectorLayer(this, layer); } else { goog.asserts.assert(false); return null; @@ -110,6 +115,8 @@ ol.renderer.canvas.Map.prototype.renderFrame = function(frameState) { context.globalAlpha = 1; context.fillRect(0, 0, size.width, size.height); + this.calculateMatrices2D(frameState); + goog.array.forEach(frameState.layersArray, function(layer) { var layerState = frameState.layerStates[goog.getUid(layer)]; @@ -144,6 +151,4 @@ ol.renderer.canvas.Map.prototype.renderFrame = function(frameState) { this.renderedVisible_ = true; } - this.calculateMatrices2D(frameState); - }; diff --git a/master/ol/ol/renderer/canvas/canvasvectorlayerrenderer.js b/master/ol/ol/renderer/canvas/canvasvectorlayerrenderer.js new file mode 100644 index 0000000000..3f02880ae3 --- /dev/null +++ b/master/ol/ol/renderer/canvas/canvasvectorlayerrenderer.js @@ -0,0 +1,404 @@ +goog.provide('ol.renderer.canvas.VectorLayer'); + +goog.require('goog.vec.Mat4'); +goog.require('ol.Extent'); +goog.require('ol.Size'); +goog.require('ol.TileCache'); +goog.require('ol.TileCoord'); +goog.require('ol.ViewHint'); +goog.require('ol.filter.Extent'); +goog.require('ol.filter.Geometry'); +goog.require('ol.filter.Logical'); +goog.require('ol.filter.LogicalOperator'); +goog.require('ol.geom.GeometryType'); +goog.require('ol.layer.Vector'); +goog.require('ol.renderer.canvas.Layer'); +goog.require('ol.renderer.canvas.VectorRenderer'); +goog.require('ol.tilegrid.TileGrid'); + + + +/** + * @constructor + * @extends {ol.renderer.canvas.Layer} + * @param {ol.renderer.Map} mapRenderer Map renderer. + * @param {ol.layer.Vector} layer Vector layer. + */ +ol.renderer.canvas.VectorLayer = function(mapRenderer, layer) { + + goog.base(this, mapRenderer, layer); + + /** + * Final canvas made available to the map renderer. + * @private + * @type {HTMLCanvasElement} + */ + this.canvas_ = /** @type {HTMLCanvasElement} */ + (goog.dom.createElement(goog.dom.TagName.CANVAS)); + + /** + * @private + * @type {CanvasRenderingContext2D} + */ + this.context_ = /** @type {CanvasRenderingContext2D} */ + (this.canvas_.getContext('2d')); + + /** + * @private + * @type {!goog.vec.Mat4.Number} + */ + this.transform_ = goog.vec.Mat4.createNumber(); + + /** + * Interim canvas for drawing newly visible features. + * @private + * @type {HTMLCanvasElement} + */ + this.sketchCanvas_ = /** @type {HTMLCanvasElement} */ + (goog.dom.createElement(goog.dom.TagName.CANVAS)); + + /** + * @private + * @type {!goog.vec.Mat4.Number} + */ + this.sketchTransform_ = goog.vec.Mat4.createNumber(); + + /** + * @private + * @type {ol.TileCache} + */ + this.tileCache_ = new ol.TileCache( + ol.renderer.canvas.VectorLayer.TILECACHE_SIZE); + // TODO: this is far too coarse, we want extent of added features + goog.events.listenOnce(layer, goog.events.EventType.CHANGE, + this.handleLayerChange_, false, this); + + /** + * @private + * @type {HTMLCanvasElement} + */ + this.tileArchetype_ = null; + + /** + * Geometry filters in rendering order. + * @private + * @type {Array.} + * TODO: these will go away shortly (in favor of one call per symbolizer type) + */ + this.geometryFilters_ = [ + new ol.filter.Geometry(ol.geom.GeometryType.POINT), + new ol.filter.Geometry(ol.geom.GeometryType.MULTIPOINT), + new ol.filter.Geometry(ol.geom.GeometryType.LINESTRING), + new ol.filter.Geometry(ol.geom.GeometryType.MULTILINESTRING), + new ol.filter.Geometry(ol.geom.GeometryType.POLYGON), + new ol.filter.Geometry(ol.geom.GeometryType.MULTIPOLYGON) + ]; + + /** + * @private + * @type {number} + */ + this.renderedResolution_; + + /** + * @private + * @type {ol.Extent} + */ + this.renderedExtent_ = null; + + /** + * Flag to be set internally when we know something has changed that suggests + * we need to re-render. + * TODO: discuss setting this for all layers when something changes before + * calling map.render(). + * @private + * @type {boolean} + */ + this.dirty_ = false; + + /** + * @private + * @type {boolean} + */ + this.pendingCachePrune_ = false; + + /** + * Grid used for internal generation of canvas tiles. This is created + * lazily so we have access to the view projection. + * + * @private + * @type {ol.tilegrid.TileGrid} + */ + this.tileGrid_ = null; + + /** + * @private + * @type {function()} + */ + this.requestMapRenderFrame_ = goog.bind(function() { + this.dirty_ = true; + mapRenderer.getMap().requestRenderFrame(); + }, this); + +}; +goog.inherits(ol.renderer.canvas.VectorLayer, ol.renderer.canvas.Layer); + + +/** + * Get rid cached tiles. If the optional extent is provided, only tiles that + * intersect that extent will be removed. + * @param {ol.Extent=} opt_extent extent Expire tiles within this extent only. + * @private + */ +ol.renderer.canvas.VectorLayer.prototype.expireTiles_ = function(opt_extent) { + if (goog.isDef(opt_extent)) { + // TODO: implement this + } + this.tileCache_.clear(); +}; + + +/** + * @inheritDoc + */ +ol.renderer.canvas.VectorLayer.prototype.getImage = function() { + return this.canvas_; +}; + + +/** + * @return {ol.layer.Vector} Vector layer. + */ +ol.renderer.canvas.VectorLayer.prototype.getVectorLayer = function() { + return /** @type {ol.layer.Vector} */ (this.getLayer()); +}; + + +/** + * @inheritDoc + */ +ol.renderer.canvas.VectorLayer.prototype.getTransform = function() { + return this.transform_; +}; + + +/** + * @param {goog.events.Event} event Layer change event. + * @private + */ +ol.renderer.canvas.VectorLayer.prototype.handleLayerChange_ = function(event) { + // TODO: get rid of this in favor of vector specific events + this.expireTiles_(); + this.requestMapRenderFrame_(); +}; + + +/** + * @inheritDoc + */ +ol.renderer.canvas.VectorLayer.prototype.renderFrame = + function(frameState, layerState) { + + // TODO: consider bailing out here if rendered center and resolution + // have not changed. Requires that other change listeners set a dirty flag. + + var view2DState = frameState.view2DState, + resolution = view2DState.resolution, + extent = frameState.extent, + layer = this.getVectorLayer(), + tileGrid = this.tileGrid_; + + if (goog.isNull(tileGrid)) { + // lazy tile grid creation to match the view projection + tileGrid = ol.tilegrid.createForProjection( + view2DState.projection, + 22, // should be no harm in going big here - ideally, it would be ∞ + new ol.Size(512, 512)); + this.tileGrid_ = tileGrid; + } + + // set up transform for the layer canvas to be drawn to the map canvas + var z = tileGrid.getZForResolution(resolution), + tileResolution = tileGrid.getResolution(z), + tileRange = tileGrid.getTileRangeForExtentAndResolution( + extent, tileResolution), + tileRangeExtent = tileGrid.getTileRangeExtent(z, tileRange), + tileSize = tileGrid.getTileSize(z), + sketchOrigin = tileRangeExtent.getTopLeft(), + transform = this.transform_; + + goog.vec.Mat4.makeIdentity(transform); + goog.vec.Mat4.translate(transform, + frameState.size.width / 2, + frameState.size.height / 2, + 0); + goog.vec.Mat4.scale(transform, + tileResolution / resolution, tileResolution / resolution, 1); + goog.vec.Mat4.rotateZ(transform, view2DState.rotation); + goog.vec.Mat4.translate(transform, + (sketchOrigin.x - view2DState.center.x) / tileResolution, + (view2DState.center.y - sketchOrigin.y) / tileResolution, + 0); + + /** + * Fastest path out of here. This method is called many many times while + * there is nothing to do (e.g. while waiting for tiles from every other + * layer to load.) Do not put anything above here that is more expensive than + * necessary. And look for ways to get here faster. + */ + if (!this.dirty_ && this.renderedResolution_ === tileResolution && + // TODO: extent.equals() + this.renderedExtent_.toString() === tileRangeExtent.toString()) { + return; + } + + if (goog.isNull(this.tileArchetype_)) { + this.tileArchetype_ = /** @type {HTMLCanvasElement} */ + (goog.dom.createElement(goog.dom.TagName.CANVAS)); + this.tileArchetype_.width = tileSize.width; + this.tileArchetype_.height = tileSize.height; + } + + /** + * Prepare the sketch canvas. This covers the currently visible tile range + * and will have rendered all newly visible features. + */ + var sketchCanvas = this.sketchCanvas_; + var sketchSize = new ol.Size( + tileSize.width * tileRange.getWidth(), + tileSize.height * tileRange.getHeight()); + + // transform for map coords to sketch canvas pixel coords + var sketchTransform = this.sketchTransform_; + var halfWidth = sketchSize.width / 2; + var halfHeight = sketchSize.height / 2; + goog.vec.Mat4.makeIdentity(sketchTransform); + goog.vec.Mat4.translate(sketchTransform, + halfWidth, + halfHeight, + 0); + goog.vec.Mat4.scale(sketchTransform, + 1 / tileResolution, + -1 / tileResolution, + 1); + goog.vec.Mat4.translate(sketchTransform, + -(sketchOrigin.x + halfWidth * tileResolution), + -(sketchOrigin.y - halfHeight * tileResolution), + 0); + + // clear/resize sketch canvas + sketchCanvas.width = sketchSize.width; + sketchCanvas.height = sketchSize.height; + + var sketchCanvasRenderer = new ol.renderer.canvas.VectorRenderer( + sketchCanvas, sketchTransform, undefined, this.requestMapRenderFrame_); + + // clear/resize final canvas + var finalCanvas = this.canvas_; + finalCanvas.width = sketchSize.width; + finalCanvas.height = sketchSize.height; + var finalContext = this.context_; + + var featuresToRender = {}; + var tilesToRender = {}; + var tilesOnSketchCanvas = {}; + // TODO make gutter configurable? + var tileGutter = 15 * tileResolution; + var tile, tileCoord, key, tileState, x, y; + // render features by geometry type + var filters = this.geometryFilters_, + numFilters = filters.length, + deferred = false, + i, geomFilter, tileExtent, extentFilter, type, + groups, group, j, numGroups; + for (x = tileRange.minX; x <= tileRange.maxX; ++x) { + for (y = tileRange.minY; y <= tileRange.maxY; ++y) { + tileCoord = new ol.TileCoord(z, x, y); + key = tileCoord.toString(); + if (this.tileCache_.containsKey(key)) { + tilesToRender[key] = tileCoord; + } else if (!frameState.viewHints[ol.ViewHint.ANIMATING]) { + tileExtent = tileGrid.getTileCoordExtent(tileCoord); + tileExtent.minX -= tileGutter; + tileExtent.minY -= tileGutter; + tileExtent.maxX += tileGutter; + tileExtent.maxY += tileGutter; + extentFilter = new ol.filter.Extent(tileExtent); + for (i = 0; i < numFilters; ++i) { + geomFilter = filters[i]; + type = geomFilter.getType(); + if (!goog.isDef(featuresToRender[type])) { + featuresToRender[type] = {}; + } + goog.object.extend(featuresToRender[type], + layer.getFeaturesObject(new ol.filter.Logical( + [geomFilter, extentFilter], ol.filter.LogicalOperator.AND))); + } + tilesOnSketchCanvas[key] = tileCoord; + } + } + } + + for (type in featuresToRender) { + groups = layer.groupFeaturesBySymbolizerLiteral(featuresToRender[type]); + numGroups = groups.length; + for (j = 0; j < numGroups; ++j) { + group = groups[j]; + deferred = sketchCanvasRenderer.renderFeaturesByGeometryType( + /** @type {ol.geom.GeometryType} */ (type), + group[0], group[1]); + if (deferred) { + break; + } + } + if (!deferred) { + goog.object.extend(tilesToRender, tilesOnSketchCanvas); + } + } + + this.dirty_ = true; + for (key in tilesToRender) { + tileCoord = tilesToRender[key]; + if (this.tileCache_.containsKey(key)) { + tile = /** @type {HTMLCanvasElement} */ (this.tileCache_.get(key)); + } else { + tile = /** @type {HTMLCanvasElement} */ + (this.tileArchetype_.cloneNode(false)); + tile.getContext('2d').drawImage(sketchCanvas, + (tileRange.minX - tileCoord.x) * tileSize.width, + (tileCoord.y - tileRange.maxY) * tileSize.height); + this.tileCache_.set(key, tile); + } + finalContext.drawImage(tile, + tileSize.width * (tileCoord.x - tileRange.minX), + tileSize.height * (tileRange.maxY - tileCoord.y)); + this.dirty_ = false; + } + + this.renderedResolution_ = tileResolution; + this.renderedExtent_ = tileRangeExtent; + if (!this.pendingCachePrune_) { + this.pendingCachePrune_ = true; + frameState.postRenderFunctions.push(goog.bind(this.pruneTileCache_, this)); + } + +}; + + +/** + * Get rid of tiles that exceed the cache capacity. + * TODO: add a method to the cache to handle this + * @private + */ +ol.renderer.canvas.VectorLayer.prototype.pruneTileCache_ = function() { + while (this.tileCache_.canExpireCache()) { + this.tileCache_.pop(); + } + this.pendingCachePrune_ = false; +}; + + +/** + * @type {number} + */ +ol.renderer.canvas.VectorLayer.TILECACHE_SIZE = 128; diff --git a/master/ol/ol/renderer/canvas/canvasvectorrenderer.js b/master/ol/ol/renderer/canvas/canvasvectorrenderer.js new file mode 100644 index 0000000000..4eeb7004da --- /dev/null +++ b/master/ol/ol/renderer/canvas/canvasvectorrenderer.js @@ -0,0 +1,439 @@ +goog.provide('ol.renderer.canvas.VectorRenderer'); + + +goog.require('goog.asserts'); +goog.require('goog.vec.Mat4'); +goog.require('ol.Feature'); +goog.require('ol.Pixel'); +goog.require('ol.geom.Geometry'); +goog.require('ol.geom.GeometryType'); +goog.require('ol.geom.LineString'); +goog.require('ol.geom.MultiLineString'); +goog.require('ol.geom.MultiPoint'); +goog.require('ol.geom.MultiPolygon'); +goog.require('ol.geom.Point'); +goog.require('ol.geom.Polygon'); +goog.require('ol.style.IconLiteral'); +goog.require('ol.style.LineLiteral'); +goog.require('ol.style.PointLiteral'); +goog.require('ol.style.PolygonLiteral'); +goog.require('ol.style.ShapeLiteral'); +goog.require('ol.style.ShapeType'); +goog.require('ol.style.SymbolizerLiteral'); + + + +/** + * @constructor + * @param {HTMLCanvasElement} canvas Target canvas. + * @param {goog.vec.Mat4.Number} transform Transform. + * @param {ol.Pixel=} opt_offset Pixel offset for top-left corner. This is + * provided as an optional argument as a convenience in cases where the + * transform applies to a separate canvas. + * @param {function()=} opt_iconLoadedCallback Callback for deferred rendering + * when images need to be loaded before rendering. + */ +ol.renderer.canvas.VectorRenderer = + function(canvas, transform, opt_offset, opt_iconLoadedCallback) { + + var context = /** @type {CanvasRenderingContext2D} */ + (canvas.getContext('2d')), + dx = goog.isDef(opt_offset) ? opt_offset.x : 0, + dy = goog.isDef(opt_offset) ? opt_offset.y : 0; + + /** + * @type {goog.vec.Mat4.Number} + * @private + */ + this.transform_ = transform; + context.setTransform( + goog.vec.Mat4.getElement(transform, 0, 0), + goog.vec.Mat4.getElement(transform, 1, 0), + goog.vec.Mat4.getElement(transform, 0, 1), + goog.vec.Mat4.getElement(transform, 1, 1), + goog.vec.Mat4.getElement(transform, 0, 3) + dx, + goog.vec.Mat4.getElement(transform, 1, 3) + dy); + + var vec = [1, 0, 0]; + goog.vec.Mat4.multVec3NoTranslate(transform, vec, vec); + + /** + * @type {number} + * @private + */ + this.inverseScale_ = 1 / Math.sqrt(vec[0] * vec[0] + vec[1] * vec[1]); + + /** + * @type {CanvasRenderingContext2D} + * @private + */ + this.context_ = context; + + /** + * @type {function()|undefined} + * @private + */ + this.iconLoadedCallback_ = opt_iconLoadedCallback; + +}; + + +/** + * @param {ol.geom.GeometryType} type Geometry type. + * @param {Array.} features Array of features. + * @param {ol.style.SymbolizerLiteral} symbolizer Symbolizer. + * @return {boolean} true if deferred, false if rendered. + */ +ol.renderer.canvas.VectorRenderer.prototype.renderFeaturesByGeometryType = + function(type, features, symbolizer) { + var deferred = false; + switch (type) { + case ol.geom.GeometryType.POINT: + case ol.geom.GeometryType.MULTIPOINT: + goog.asserts.assert(symbolizer instanceof ol.style.PointLiteral, + 'Expected point symbolizer: ' + symbolizer); + deferred = this.renderPointFeatures_( + features, /** @type {ol.style.PointLiteral} */ (symbolizer)); + break; + case ol.geom.GeometryType.LINESTRING: + case ol.geom.GeometryType.MULTILINESTRING: + goog.asserts.assert(symbolizer instanceof ol.style.LineLiteral, + 'Expected line symbolizer: ' + symbolizer); + this.renderLineStringFeatures_( + features, /** @type {ol.style.LineLiteral} */ (symbolizer)); + break; + case ol.geom.GeometryType.POLYGON: + case ol.geom.GeometryType.MULTIPOLYGON: + goog.asserts.assert(symbolizer instanceof ol.style.PolygonLiteral, + 'Expected polygon symbolizer: ' + symbolizer); + this.renderPolygonFeatures_( + features, /** @type {ol.style.PolygonLiteral} */ (symbolizer)); + break; + default: + throw new Error('Rendering not implemented for geometry type: ' + type); + } + return deferred; +}; + + +/** + * @param {Array.} features Array of line features. + * @param {ol.style.LineLiteral} symbolizer Line symbolizer. + * @private + */ +ol.renderer.canvas.VectorRenderer.prototype.renderLineStringFeatures_ = + function(features, symbolizer) { + + var context = this.context_, + i, ii, geometry, components, j, jj, line, dim, k, kk, x, y; + + context.globalAlpha = symbolizer.opacity; + context.strokeStyle = symbolizer.strokeColor; + context.lineWidth = symbolizer.strokeWidth * this.inverseScale_; + context.lineCap = 'round'; // TODO: accept this as a symbolizer property + context.lineJoin = 'round'; // TODO: accept this as a symbolizer property + context.beginPath(); + for (i = 0, ii = features.length; i < ii; ++i) { + geometry = features[i].getGeometry(); + if (geometry instanceof ol.geom.LineString) { + components = [geometry]; + } else { + goog.asserts.assert(geometry instanceof ol.geom.MultiLineString, + 'Expected MultiLineString'); + components = geometry.components; + } + for (j = 0, jj = components.length; j < jj; ++j) { + line = components[j]; + dim = line.dimension; + for (k = 0, kk = line.getCount(); k < kk; ++k) { + x = line.get(k, 0); + y = line.get(k, 1); + if (k === 0) { + context.moveTo(x, y); + } else { + context.lineTo(x, y); + } + } + } + } + + context.stroke(); +}; + + +/** + * @param {Array.} features Array of point features. + * @param {ol.style.PointLiteral} symbolizer Point symbolizer. + * @return {boolean} true if deferred, false if rendered. + * @private + */ +ol.renderer.canvas.VectorRenderer.prototype.renderPointFeatures_ = + function(features, symbolizer) { + + var context = this.context_, + content, alpha, i, ii, geometry, components, j, jj, point, vec; + + if (symbolizer instanceof ol.style.ShapeLiteral) { + content = ol.renderer.canvas.VectorRenderer.renderShape(symbolizer); + alpha = 1; + } else if (symbolizer instanceof ol.style.IconLiteral) { + content = ol.renderer.canvas.VectorRenderer.renderIcon( + symbolizer, this.iconLoadedCallback_); + alpha = symbolizer.opacity; + } else { + throw new Error('Unsupported symbolizer: ' + symbolizer); + } + + if (goog.isNull(content)) { + return true; + } + + var midWidth = content.width / 2; + var midHeight = content.height / 2; + context.save(); + context.setTransform(1, 0, 0, 1, -midWidth, -midHeight); + context.globalAlpha = alpha; + for (i = 0, ii = features.length; i < ii; ++i) { + geometry = features[i].getGeometry(); + if (geometry instanceof ol.geom.Point) { + components = [geometry]; + } else { + goog.asserts.assert(geometry instanceof ol.geom.MultiPoint, + 'Expected MultiPoint'); + components = geometry.components; + } + for (j = 0, jj = components.length; j < jj; ++j) { + point = components[j]; + vec = goog.vec.Mat4.multVec3( + this.transform_, [point.get(0), point.get(1), 0], []); + context.drawImage(content, vec[0], vec[1], content.width, content.height); + } + } + context.restore(); + + return false; +}; + + +/** + * @param {Array.} features Array of polygon features. + * @param {ol.style.PolygonLiteral} symbolizer Polygon symbolizer. + * @private + */ +ol.renderer.canvas.VectorRenderer.prototype.renderPolygonFeatures_ = + function(features, symbolizer) { + var context = this.context_, + strokeColor = symbolizer.strokeColor, + fillColor = symbolizer.fillColor, + i, ii, geometry, components, j, jj, poly, + rings, numRings, ring, dim, k, kk, x, y; + + context.globalAlpha = symbolizer.opacity; + if (strokeColor) { + context.strokeStyle = symbolizer.strokeColor; + context.lineWidth = symbolizer.strokeWidth * this.inverseScale_; + context.lineCap = 'round'; // TODO: accept this as a symbolizer property + context.lineJoin = 'round'; // TODO: accept this as a symbolizer property + } + if (fillColor) { + context.fillStyle = fillColor; + } + + /** + * Four scenarios covered here: + * 1) stroke only, no holes - only need to have a single path + * 2) fill only, no holes - only need to have a single path + * 3) fill and stroke, no holes + * 4) holes - render polygon to sketch canvas first + */ + context.beginPath(); + for (i = 0, ii = features.length; i < ii; ++i) { + geometry = features[i].getGeometry(); + if (geometry instanceof ol.geom.Polygon) { + components = [geometry]; + } else { + goog.asserts.assert(geometry instanceof ol.geom.MultiPolygon, + 'Expected MultiPolygon'); + components = geometry.components; + } + for (j = 0, jj = components.length; j < jj; ++j) { + poly = components[j]; + dim = poly.dimension; + rings = poly.rings; + numRings = rings.length; + if (numRings > 0) { + // TODO: scenario 4 + ring = rings[0]; + for (k = 0, kk = ring.getCount(); k < kk; ++k) { + x = ring.get(k, 0); + y = ring.get(k, 1); + if (k === 0) { + context.moveTo(x, y); + } else { + context.lineTo(x, y); + } + } + if (fillColor && strokeColor) { + // scenario 3 - fill and stroke each time + context.fill(); + context.stroke(); + if (i < ii - 1 || j < jj - 1) { + context.beginPath(); + } + } + } + } + } + if (!(fillColor && strokeColor)) { + if (fillColor) { + // scenario 2 - fill all at once + context.fill(); + } else { + // scenario 1 - stroke all at once + context.stroke(); + } + } +}; + + +/** + * @param {ol.style.ShapeLiteral} circle Shape symbolizer. + * @return {!HTMLCanvasElement} Canvas element. + * @private + */ +ol.renderer.canvas.VectorRenderer.renderCircle_ = function(circle) { + var strokeWidth = circle.strokeWidth || 0, + size = circle.size + (2 * strokeWidth) + 1, + mid = size / 2, + canvas = /** @type {HTMLCanvasElement} */ + (goog.dom.createElement(goog.dom.TagName.CANVAS)), + context = /** @type {CanvasRenderingContext2D} */ + (canvas.getContext('2d')), + fillColor = circle.fillColor, + strokeColor = circle.strokeColor, + twoPi = Math.PI * 2; + + canvas.height = size; + canvas.width = size; + + context.globalAlpha = circle.opacity; + + if (fillColor) { + context.fillStyle = fillColor; + } + if (strokeColor) { + context.lineWidth = strokeWidth; + context.strokeStyle = strokeColor; + context.lineCap = 'round'; // TODO: accept this as a symbolizer property + context.lineJoin = 'round'; // TODO: accept this as a symbolizer property + } + + context.beginPath(); + context.arc(mid, mid, circle.size / 2, 0, twoPi, true); + + if (fillColor) { + context.fill(); + } + if (strokeColor) { + context.stroke(); + } + return canvas; +}; + + +/** + * @param {ol.style.ShapeLiteral} shape Shape symbolizer. + * @return {!HTMLCanvasElement} Canvas element. + */ +ol.renderer.canvas.VectorRenderer.renderShape = function(shape) { + var canvas; + if (shape.type === ol.style.ShapeType.CIRCLE) { + canvas = ol.renderer.canvas.VectorRenderer.renderCircle_(shape); + } else { + throw new Error('Unsupported shape type: ' + shape); + } + return canvas; +}; + + +/** + * @param {ol.style.IconLiteral} icon Icon literal. + * @param {function()=} opt_callback Callback which will be called when + * the icon is loaded and rendering will work without deferring. + * @return {HTMLImageElement} image element of null if deferred. + */ +ol.renderer.canvas.VectorRenderer.renderIcon = function(icon, opt_callback) { + var url = icon.url; + var image = ol.renderer.canvas.VectorRenderer.icons_[url]; + var deferred = false; + if (!goog.isDef(image)) { + deferred = true; + image = /** @type {HTMLImageElement} */ + (goog.dom.createElement(goog.dom.TagName.IMG)); + goog.events.listenOnce(image, goog.events.EventType.ERROR, + goog.bind(ol.renderer.canvas.VectorRenderer.handleIconError_, null, + opt_callback), + false, ol.renderer.canvas.VectorRenderer.renderIcon); + goog.events.listenOnce(image, goog.events.EventType.LOAD, + goog.bind(ol.renderer.canvas.VectorRenderer.handleIconLoad_, null, + opt_callback), + false, ol.renderer.canvas.VectorRenderer.renderIcon); + image.setAttribute('src', url); + ol.renderer.canvas.VectorRenderer.icons_[url] = image; + } else if (!goog.isNull(image)) { + var width = icon.width, + height = icon.height; + if (goog.isDef(width) && goog.isDef(height)) { + image.width = width; + image.height = height; + } else if (goog.isDef(width)) { + image.height = width / image.width * image.height; + image.width = width; + } else if (goog.isDef(height)) { + image.width = height / image.height * image.width; + image.height = height; + } + } + return deferred ? null : image; +}; + + +/** + * @type {Object.} + * @private + */ +ol.renderer.canvas.VectorRenderer.icons_ = {}; + + +/** + * @param {function()=} opt_callback Callback. + * @param {Event=} opt_event Event. + * @private + */ +ol.renderer.canvas.VectorRenderer.handleIconError_ = + function(opt_callback, opt_event) { + if (goog.isDef(opt_event)) { + var url = opt_event.target.getAttribute('src'); + ol.renderer.canvas.VectorRenderer.icons_[url] = null; + ol.renderer.canvas.VectorRenderer.handleIconLoad_(opt_callback, opt_event); + } +}; + + +/** + * @param {function()=} opt_callback Callback. + * @param {Event=} opt_event Event. + * @private + */ +ol.renderer.canvas.VectorRenderer.handleIconLoad_ = + function(opt_callback, opt_event) { + if (goog.isDef(opt_event)) { + var url = opt_event.target.getAttribute('src'); + ol.renderer.canvas.VectorRenderer.icons_[url] = + /** @type {HTMLImageElement} */ (opt_event.target); + } + if (goog.isDef(opt_callback)) { + opt_callback(); + } +}; + diff --git a/master/ol/ol/renderer/dom/dommaprenderer.js b/master/ol/ol/renderer/dom/dommaprenderer.js index a833d5fd91..3ca1c6cb3b 100644 --- a/master/ol/ol/renderer/dom/dommaprenderer.js +++ b/master/ol/ol/renderer/dom/dommaprenderer.js @@ -5,6 +5,7 @@ goog.require('goog.asserts'); goog.require('goog.dom'); goog.require('goog.dom.TagName'); goog.require('goog.style'); +goog.require('ol'); goog.require('ol.layer.ImageLayer'); goog.require('ol.layer.TileLayer'); goog.require('ol.renderer.Map'); @@ -28,7 +29,7 @@ ol.renderer.dom.Map = function(container, map) { * @private */ this.layersPane_ = goog.dom.createElement(goog.dom.TagName.DIV); - this.layersPane_.className = 'ol-layers ol-unselectable'; + this.layersPane_.className = 'ol-layers ' + ol.CSS_CLASS_UNSELECTABLE; var style = this.layersPane_.style; style.position = 'absolute'; style.width = '100%'; @@ -46,15 +47,6 @@ ol.renderer.dom.Map = function(container, map) { goog.inherits(ol.renderer.dom.Map, ol.renderer.Map); -/** - * @inheritDoc - */ -ol.renderer.dom.Map.prototype.addLayer = function(layer) { - goog.base(this, 'addLayer', layer); - this.getMap().render(); -}; - - /** * @inheritDoc */ diff --git a/master/ol/ol/renderer/maprenderer.js b/master/ol/ol/renderer/maprenderer.js index dfd69e5464..9d18863c37 100644 --- a/master/ol/ol/renderer/maprenderer.js +++ b/master/ol/ol/renderer/maprenderer.js @@ -79,6 +79,7 @@ goog.inherits(ol.renderer.Map, goog.Disposable); ol.renderer.Map.prototype.addLayer = function(layer) { var layerRenderer = this.createLayerRenderer(layer); this.setLayerRenderer(layer, layerRenderer); + this.getMap().render(); }; @@ -224,6 +225,7 @@ ol.renderer.Map.prototype.handleLayersRemove = function(collectionEvent) { */ ol.renderer.Map.prototype.removeLayer = function(layer) { goog.dispose(this.removeLayerRenderer(layer)); + this.getMap().render(); }; diff --git a/master/ol/ol/renderer/webgl/webglmaprenderer.js b/master/ol/ol/renderer/webgl/webglmaprenderer.js index 867c2c3d2a..8d839d183d 100644 --- a/master/ol/ol/renderer/webgl/webglmaprenderer.js +++ b/master/ol/ol/renderer/webgl/webglmaprenderer.js @@ -11,6 +11,7 @@ goog.require('goog.events'); goog.require('goog.events.Event'); goog.require('goog.style'); goog.require('goog.webgl'); +goog.require('ol'); goog.require('ol.FrameState'); goog.require('ol.Size'); goog.require('ol.Tile'); @@ -122,7 +123,7 @@ ol.renderer.webgl.Map = function(container, map) { this.canvas_ = goog.dom.createElement(goog.dom.TagName.CANVAS); this.canvas_.height = container.clientHeight; this.canvas_.width = container.clientWidth; - this.canvas_.className = 'ol-unselectable'; + this.canvas_.className = ol.CSS_CLASS_UNSELECTABLE; goog.dom.insertChildAt(container, this.canvas_, 0); /** @@ -215,17 +216,6 @@ ol.renderer.webgl.Map = function(container, map) { goog.inherits(ol.renderer.webgl.Map, ol.renderer.Map); -/** - * @inheritDoc - */ -ol.renderer.webgl.Map.prototype.addLayer = function(layer) { - goog.base(this, 'addLayer', layer); - if (layer.getVisible()) { - this.getMap().render(); - } -}; - - /** * @param {ol.Tile} tile Tile. * @param {number} magFilter Mag filter. @@ -464,17 +454,6 @@ ol.renderer.webgl.Map.prototype.isTileTextureLoaded = function(tile) { }; -/** - * @inheritDoc - */ -ol.renderer.webgl.Map.prototype.removeLayer = function(layer) { - goog.base(this, 'removeLayer', layer); - if (layer.getVisible()) { - this.getMap().render(); - } -}; - - /** * @inheritDoc */ diff --git a/master/ol/ol/source/imagetilesource.js b/master/ol/ol/source/imagetilesource.js index 97c6999095..2a6323f634 100644 --- a/master/ol/ol/source/imagetilesource.js +++ b/master/ol/ol/source/imagetilesource.js @@ -109,9 +109,8 @@ ol.source.ImageTileSource.prototype.getTile = /** * @inheritDoc */ -ol.source.ImageTileSource.prototype.useTile = function(tileCoord) { - var key = tileCoord.toString(); - if (this.tileCache_.containsKey(key)) { - this.tileCache_.get(key); +ol.source.ImageTileSource.prototype.useTile = function(tileCoordKey) { + if (this.tileCache_.containsKey(tileCoordKey)) { + this.tileCache_.get(tileCoordKey); } }; diff --git a/master/ol/ol/source/singleimagewmssource.js b/master/ol/ol/source/singleimagewmssource.js index 211abdbd36..f79591d67f 100644 --- a/master/ol/ol/source/singleimagewmssource.js +++ b/master/ol/ol/source/singleimagewmssource.js @@ -34,11 +34,11 @@ ol.source.SingleImageWMS = function(options) { this.image_ = null; /** - * FIXME configurable? * @private * @type {number} */ - this.ratio_ = 1.5; + this.ratio_ = goog.isDef(options.ratio) ? + options.ratio : 1.5; }; goog.inherits(ol.source.SingleImageWMS, ol.source.ImageSource); diff --git a/master/ol/ol/source/tiledwmssource.js b/master/ol/ol/source/tiledwmssource.js index 9de3627372..6264220212 100644 --- a/master/ol/ol/source/tiledwmssource.js +++ b/master/ol/ol/source/tiledwmssource.js @@ -22,20 +22,19 @@ ol.source.TiledWMS = function(tiledWMSOptions) { tileGrid = tiledWMSOptions.tileGrid; } - var tileUrlFunction; - if (tiledWMSOptions.urls) { + var tileUrlFunction = ol.TileUrlFunction.nullTileUrlFunction; + var urls = tiledWMSOptions.urls; + if (!goog.isDef(urls) && goog.isDef(tiledWMSOptions.url)) { + urls = ol.TileUrlFunction.expandUrl(tiledWMSOptions.url); + } + if (goog.isDef(urls)) { var tileUrlFunctions = goog.array.map( - tiledWMSOptions.urls, function(url) { + urls, function(url) { return ol.TileUrlFunction.createWMSParams( url, tiledWMSOptions.params); }); tileUrlFunction = ol.TileUrlFunction.createFromTileUrlFunctions( tileUrlFunctions); - } else if (tiledWMSOptions.url) { - tileUrlFunction = ol.TileUrlFunction.createWMSParams( - tiledWMSOptions.url, tiledWMSOptions.params); - } else { - tileUrlFunction = ol.TileUrlFunction.nullTileUrlFunction; } var transparent = goog.isDef(tiledWMSOptions.params['TRANSPARENT']) ? tiledWMSOptions.params['TRANSPARENT'] : true; diff --git a/master/ol/ol/source/vectorsource.exports b/master/ol/ol/source/vectorsource.exports new file mode 100644 index 0000000000..27cbc2bea0 --- /dev/null +++ b/master/ol/ol/source/vectorsource.exports @@ -0,0 +1 @@ +@exportClass ol.source.Vector ol.source.SourceOptions diff --git a/master/ol/ol/source/vectorsource.js b/master/ol/ol/source/vectorsource.js new file mode 100644 index 0000000000..80a85b5d55 --- /dev/null +++ b/master/ol/ol/source/vectorsource.js @@ -0,0 +1,15 @@ +goog.provide('ol.source.Vector'); + +goog.require('ol.source.Source'); + + + +/** + * @constructor + * @extends {ol.source.Source} + * @param {ol.source.SourceOptions} options Source options. + */ +ol.source.Vector = function(options) { + goog.base(this, options); +}; +goog.inherits(ol.source.Vector, ol.source.Source); diff --git a/master/ol/ol/source/wmtssource.js b/master/ol/ol/source/wmtssource.js index cd5b1b8a85..0139709b92 100644 --- a/master/ol/ol/source/wmtssource.js +++ b/master/ol/ol/source/wmtssource.js @@ -2,8 +2,6 @@ goog.provide('ol.source.WMTS'); goog.provide('ol.source.WMTSRequestEncoding'); goog.require('ol.Attribution'); -goog.require('ol.Extent'); -goog.require('ol.Projection'); goog.require('ol.TileCoord'); goog.require('ol.TileUrlFunction'); goog.require('ol.TileUrlFunctionType'); @@ -66,25 +64,6 @@ ol.source.WMTS = function(wmtsOptions) { goog.object.extend(kvpParams, context); } - // TODO: factorize the code below so that it is usable by all sources - var urls = wmtsOptions.urls; - if (!goog.isDef(urls)) { - urls = []; - var url = wmtsOptions.url; - goog.asserts.assert(goog.isDef(url)); - var match = /\{(\d)-(\d)\}/.exec(url) || /\{([a-z])-([a-z])\}/.exec(url); - if (match) { - var startCharCode = match[1].charCodeAt(0); - var stopCharCode = match[2].charCodeAt(0); - var charCode; - for (charCode = startCharCode; charCode <= stopCharCode; ++charCode) { - urls.push(url.replace(match[0], String.fromCharCode(charCode))); - } - } else { - urls.push(url); - } - } - /** * @param {string} template Template. * @return {ol.TileUrlFunctionType} Tile URL function. @@ -113,16 +92,23 @@ ol.source.WMTS = function(wmtsOptions) { }; } - var tileUrlFunction = ol.TileUrlFunction.createFromTileUrlFunctions( - goog.array.map(urls, function(url) { - if (goog.isDef(kvpParams)) { - // TODO: we may want to create our own appendParams function - // so that params order conforms to wmts spec guidance, - // and so that we can avoid to escape special template params - url = goog.uri.utils.appendParamsFromMap(url, kvpParams); - } - return createFromWMTSTemplate(url); - })); + var tileUrlFunction = ol.TileUrlFunction.nullTileUrlFunction; + var urls = wmtsOptions.urls; + if (!goog.isDef(urls) && goog.isDef(wmtsOptions.url)) { + urls = ol.TileUrlFunction.expandUrl(wmtsOptions.url); + } + if (goog.isDef(urls)) { + tileUrlFunction = ol.TileUrlFunction.createFromTileUrlFunctions( + goog.array.map(urls, function(url) { + if (goog.isDef(kvpParams)) { + // TODO: we may want to create our own appendParams function + // so that params order conforms to wmts spec guidance, + // and so that we can avoid to escape special template params + url = goog.uri.utils.appendParamsFromMap(url, kvpParams); + } + return createFromWMTSTemplate(url); + })); + } tileUrlFunction = ol.TileUrlFunction.withTileCoordTransform( function(tileCoord, tileGrid, projection) { diff --git a/master/ol/ol/source/xyzsource.js b/master/ol/ol/source/xyzsource.js index 66e17eed56..612e6eadc4 100644 --- a/master/ol/ol/source/xyzsource.js +++ b/master/ol/ol/source/xyzsource.js @@ -49,7 +49,8 @@ ol.source.XYZ = function(xyzOptions) { } else if (goog.isDef(xyzOptions.urls)) { tileUrlFunction = ol.TileUrlFunction.createFromTemplates(xyzOptions.urls); } else if (goog.isDef(xyzOptions.url)) { - tileUrlFunction = ol.TileUrlFunction.createFromTemplate(xyzOptions.url); + tileUrlFunction = ol.TileUrlFunction.createFromTemplates( + ol.TileUrlFunction.expandUrl(xyzOptions.url)); } var tileGrid = new ol.tilegrid.XYZ({ diff --git a/master/ol/ol/structs/rtree.js b/master/ol/ol/structs/rtree.js new file mode 100644 index 0000000000..2f316cb095 --- /dev/null +++ b/master/ol/ol/structs/rtree.js @@ -0,0 +1,213 @@ +goog.provide('ol.structs.RTree'); + +goog.require('ol.Rectangle'); + + + +/** + * @private + * @constructor + * @param {number} minX Minimum X. + * @param {number} minY Minimum Y. + * @param {number} maxX Maximum X. + * @param {number} maxY Maximum Y. + * @param {ol.structs.RTreeNode_} parent Parent node. + * @param {number} level Level in the tree hierarchy. + * @extends {ol.Rectangle} + */ +ol.structs.RTreeNode_ = function(minX, minY, maxX, maxY, parent, level) { + + goog.base(this, minX, minY, maxX, maxY); + + /** + * @type {Object} + */ + this.object; + + /** + * @type {string} + */ + this.objectId; + + /** + * @type {ol.structs.RTreeNode_} + */ + this.parent = parent; + + /** + * @type {number} + */ + this.level = level; + + /** + * @type {Object.} + */ + this.types = {}; + + /** + * @type {Array.} + */ + this.children = []; + +}; +goog.inherits(ol.structs.RTreeNode_, ol.Rectangle); + + +/** + * Find all objects intersected by a rectangle. + * @param {ol.Rectangle} bounds Bounding box. + * @param {Object.} results Target object for results. + * @param {string=} opt_type Type for another indexing dimension. + */ +ol.structs.RTreeNode_.prototype.find = function(bounds, results, opt_type) { + if (this.intersects(bounds) && + (!goog.isDef(opt_type) || this.types[opt_type] === true)) { + var numChildren = this.children.length; + if (numChildren === 0) { + if (goog.isDef(this.object)) { + results[this.objectId] = this.object; + } + } else { + for (var i = 0; i < numChildren; ++i) { + this.children[i].find(bounds, results, opt_type); + } + } + } +}; + + +/** + * Find the appropriate node for insertion. + * @param {ol.Rectangle} bounds Bounding box. + * @return {ol.structs.RTreeNode_|undefined} Matching node. + */ +ol.structs.RTreeNode_.prototype.get = function(bounds) { + if (this.intersects(bounds)) { + var numChildren = this.children.length; + if (numChildren === 0) { + return goog.isNull(this.parent) ? this : this.parent; + } + var node; + for (var i = 0; i < numChildren; ++i) { + node = this.children[i].get(bounds); + if (goog.isDef(node)) { + return node; + } + } + return this; + } +}; + + +/** + * Update boxes up to the root to ensure correct bounding + * @param {ol.Rectangle} bounds Bounding box. + */ +ol.structs.RTreeNode_.prototype.update = function(bounds) { + this.extend(bounds); + if (!goog.isNull(this.parent)) { + this.parent.update(bounds); + } +}; + + +/** + * Divide @this node's children in half and create two new boxes containing + * the split items. The top left will be the topmost leftmost child and the + * bottom right will be the rightmost bottommost child. + */ +ol.structs.RTreeNode_.prototype.divide = function() { + var numChildren = this.children.length; + if (numChildren === 0) { + return; + } + + var half = Math.ceil(numChildren / 2), + child, node; + + for (var i = 0; i < numChildren; ++i) { + child = this.children[i]; + if (i % half === 0) { + node = new ol.structs.RTreeNode_(child.minX, child.minY, + child.maxX, child.maxY, this, this.level + 1); + goog.object.extend(this.types, node.types); + this.children.push(node); + } + child.parent = /** @type {ol.structs.RTreeNode_} */ (node); + goog.object.extend(node.types, child.types); + node.children.push(child); + node.extend(child); + } +}; + + + +/** + * @constructor + */ +ol.structs.RTree = function() { + + /** + * @private + * @type {ol.structs.RTreeNode_} + */ + this.root_ = new ol.structs.RTreeNode_( + Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY, + Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY, null, 0); + +}; + + +/** + * @param {ol.Rectangle} bounds Bounding box. + * @param {string=} opt_type Type for another indexing dimension. + * @return {Object.} Results for the passed bounding box. + */ +ol.structs.RTree.prototype.find = function(bounds, opt_type) { + var results = /** @type {Object.} */ ({}); + this.root_.find(bounds, results, opt_type); + return results; +}; + + +/** + * @param {ol.Rectangle} bounds Bounding box. + * @param {Object} object Object to store with the passed bounds. + * @param {string=} opt_type Type for another indexing dimension. + */ +ol.structs.RTree.prototype.put = function(bounds, object, opt_type) { + var found = this.root_.get(bounds); + if (found) { + var node = new ol.structs.RTreeNode_( + bounds.minX, bounds.minY, bounds.maxX, bounds.maxY, + found, found.level + 1); + node.object = object; + node.objectId = goog.getUid(object).toString(); + + found.children.push(node); + found.update(bounds); + + if (goog.isDef(opt_type)) { + node.types[opt_type] = true; + found.types[opt_type] = true; + } + + if (found.children.length >= ol.structs.RTree.MAX_OBJECTS && + found.level < ol.structs.RTree.MAX_SUB_DIVISIONS) { + found.divide(); + } + } +}; + + +/** + * @type {number} + */ +ol.structs.RTree.MAX_SUB_DIVISIONS = 6; + + +/** + * @type {number} + */ +ol.structs.RTree.MAX_OBJECTS = 6; + diff --git a/master/ol/ol/style.exports b/master/ol/ol/style.exports new file mode 100644 index 0000000000..8df1a0a1bd --- /dev/null +++ b/master/ol/ol/style.exports @@ -0,0 +1,9 @@ +@exportClass ol.style.Icon ol.style.IconOptions +@exportClass ol.style.Line ol.style.LineOptions +@exportClass ol.style.Polygon ol.style.PolygonOptions +@exportClass ol.style.Rule ol.style.RuleOptions +@exportClass ol.style.Shape ol.style.ShapeOptions +@exportClass ol.style.Style ol.style.StyleOptions +@exportSymbol ol.style.IconType +@exportSymbol ol.style.ShapeType +@exportProperty ol.style.ShapeType.CIRCLE diff --git a/master/ol/ol/style/icon.js b/master/ol/ol/style/icon.js new file mode 100644 index 0000000000..16e2e90b34 --- /dev/null +++ b/master/ol/ol/style/icon.js @@ -0,0 +1,160 @@ +goog.provide('ol.style.Icon'); +goog.provide('ol.style.IconLiteral'); +goog.provide('ol.style.IconType'); + +goog.require('ol.Expression'); +goog.require('ol.ExpressionLiteral'); +goog.require('ol.style.Point'); +goog.require('ol.style.PointLiteral'); + + +/** + * @typedef {{url: (string), + * width: (number|undefined), + * height: (number|undefined), + * opacity: (number), + * rotation: (number)}} + */ +ol.style.IconLiteralOptions; + + + +/** + * @constructor + * @extends {ol.style.PointLiteral} + * @param {ol.style.IconLiteralOptions} config Symbolizer properties. + */ +ol.style.IconLiteral = function(config) { + + /** @type {string} */ + this.url = config.url; + + /** @type {number|undefined} */ + this.width = config.width; + + /** @type {number|undefined} */ + this.height = config.height; + + /** @type {number} */ + this.opacity = config.opacity; + + /** @type {number} */ + this.rotation = config.rotation; + +}; +goog.inherits(ol.style.IconLiteral, ol.style.PointLiteral); + + +/** + * @inheritDoc + */ +ol.style.IconLiteral.prototype.equals = function(iconLiteral) { + return this.url == iconLiteral.type && + this.width == iconLiteral.width && + this.height == iconLiteral.height && + this.opacity == iconLiteral.opacity && + this.rotation == iconLiteral.rotation; +}; + + + +/** + * @constructor + * @extends {ol.style.Point} + * @param {ol.style.IconOptions} options Symbolizer properties. + */ +ol.style.Icon = function(options) { + + goog.asserts.assert(options.url, 'url must be set'); + + /** + * @type {ol.Expression} + * @private + */ + this.url_ = (options.url instanceof ol.Expression) ? + options.url : new ol.ExpressionLiteral(options.url); + + /** + * @type {ol.Expression} + * @private + */ + this.width_ = !goog.isDef(options.width) ? + null : + (options.width instanceof ol.Expression) ? + options.width : new ol.ExpressionLiteral(options.width); + + /** + * @type {ol.Expression} + * @private + */ + this.height_ = !goog.isDef(options.height) ? + null : + (options.height instanceof ol.Expression) ? + options.height : new ol.ExpressionLiteral(options.height); + + /** + * @type {ol.Expression} + * @private + */ + this.opacity_ = !goog.isDef(options.opacity) ? + new ol.ExpressionLiteral(ol.style.IconDefaults.opacity) : + (options.opacity instanceof ol.Expression) ? + options.opacity : new ol.ExpressionLiteral(options.opacity); + + /** + * @type {ol.Expression} + * @private + */ + this.rotation_ = !goog.isDef(options.rotation) ? + new ol.ExpressionLiteral(ol.style.IconDefaults.rotation) : + (options.rotation instanceof ol.Expression) ? + options.rotation : new ol.ExpressionLiteral(options.rotation); + +}; + + +/** + * @inheritDoc + * @return {ol.style.IconLiteral} Literal shape symbolizer. + */ +ol.style.Icon.prototype.createLiteral = function(feature) { + var attrs = feature.getAttributes(); + + var url = /** @type {string} */ (this.url_.evaluate(feature, attrs)); + goog.asserts.assert(goog.isString(url) && url != '#', 'url must be a string'); + + var width = /** @type {number|undefined} */ (goog.isNull(this.width_) ? + undefined : this.width_.evaluate(feature, attrs)); + goog.asserts.assert(!goog.isDef(width) || goog.isNumber(width), + 'width must be undefined or a number'); + + var height = /** @type {number|undefined} */ (goog.isNull(this.height_) ? + undefined : this.height_.evaluate(feature, attrs)); + goog.asserts.assert(!goog.isDef(height) || goog.isNumber(height), + 'height must be undefined or a number'); + + var opacity = /** {@type {number} */ (this.opacity_.evaluate(feature, attrs)); + goog.asserts.assertNumber(opacity, 'opacity must be a number'); + + var rotation = + /** {@type {number} */ (this.opacity_.evaluate(feature, attrs)); + goog.asserts.assertNumber(rotation, 'rotation must be a number'); + + return new ol.style.IconLiteral({ + url: url, + width: width, + height: height, + opacity: opacity, + rotation: rotation + }); +}; + + +/** + * @type {ol.style.IconLiteral} + */ +ol.style.IconDefaults = new ol.style.IconLiteral({ + url: '#', + opacity: 1, + rotation: 0 +}); diff --git a/master/ol/ol/style/line.js b/master/ol/ol/style/line.js new file mode 100644 index 0000000000..340181a256 --- /dev/null +++ b/master/ol/ol/style/line.js @@ -0,0 +1,128 @@ +goog.provide('ol.style.Line'); +goog.provide('ol.style.LineLiteral'); + +goog.require('ol.Expression'); +goog.require('ol.ExpressionLiteral'); +goog.require('ol.style.Symbolizer'); +goog.require('ol.style.SymbolizerLiteral'); + + +/** + * @typedef {{strokeColor: (string), + * strokeWidth: (number), + * opacity: (number)}} + */ +ol.style.LineLiteralOptions; + + + +/** + * @constructor + * @extends {ol.style.SymbolizerLiteral} + * @param {ol.style.LineLiteralOptions} config Symbolizer properties. + */ +ol.style.LineLiteral = function(config) { + goog.base(this); + + goog.asserts.assertString(config.strokeColor, 'strokeColor must be a string'); + /** @type {string} */ + this.strokeColor = config.strokeColor; + + goog.asserts.assertNumber(config.strokeWidth, 'strokeWidth must be a number'); + /** @type {number} */ + this.strokeWidth = config.strokeWidth; + + goog.asserts.assertNumber(config.opacity, 'opacity must be a number'); + /** @type {number} */ + this.opacity = config.opacity; + +}; +goog.inherits(ol.style.LineLiteral, ol.style.SymbolizerLiteral); + + +/** + * @inheritDoc + */ +ol.style.LineLiteral.prototype.equals = function(lineLiteral) { + return this.strokeColor == lineLiteral.strokeColor && + this.strokeWidth == lineLiteral.strokeWidth && + this.opacity == lineLiteral.opacity; +}; + + + +/** + * @constructor + * @extends {ol.style.Symbolizer} + * @param {ol.style.LineOptions} options Symbolizer properties. + */ +ol.style.Line = function(options) { + goog.base(this); + + /** + * @type {ol.Expression} + * @private + */ + this.strokeColor_ = !goog.isDef(options.strokeColor) ? + new ol.ExpressionLiteral(ol.style.LineDefaults.strokeColor) : + (options.strokeColor instanceof ol.Expression) ? + options.strokeColor : new ol.ExpressionLiteral(options.strokeColor); + + /** + * @type {ol.Expression} + * @private + */ + this.strokeWidth_ = !goog.isDef(options.strokeWidth) ? + new ol.ExpressionLiteral(ol.style.LineDefaults.strokeWidth) : + (options.strokeWidth instanceof ol.Expression) ? + options.strokeWidth : new ol.ExpressionLiteral(options.strokeWidth); + + /** + * @type {ol.Expression} + * @private + */ + this.opacity_ = !goog.isDef(options.opacity) ? + new ol.ExpressionLiteral(ol.style.LineDefaults.opacity) : + (options.opacity instanceof ol.Expression) ? + options.opacity : new ol.ExpressionLiteral(options.opacity); + +}; +goog.inherits(ol.style.Line, ol.style.Symbolizer); + + +/** + * @inheritDoc + * @return {ol.style.LineLiteral} Literal line symbolizer. + */ +ol.style.Line.prototype.createLiteral = function(opt_feature) { + var attrs, + feature = opt_feature; + if (goog.isDef(feature)) { + attrs = feature.getAttributes(); + } + + var strokeColor = this.strokeColor_.evaluate(feature, attrs); + goog.asserts.assertString(strokeColor, 'strokeColor must be a string'); + + var strokeWidth = this.strokeWidth_.evaluate(feature, attrs); + goog.asserts.assertNumber(strokeWidth, 'strokeWidth must be a number'); + + var opacity = this.opacity_.evaluate(feature, attrs); + goog.asserts.assertNumber(opacity, 'opacity must be a number'); + + return new ol.style.LineLiteral({ + strokeColor: strokeColor, + strokeWidth: strokeWidth, + opacity: opacity + }); +}; + + +/** + * @type {ol.style.LineLiteral} + */ +ol.style.LineDefaults = new ol.style.LineLiteral({ + strokeColor: '#696969', + strokeWidth: 1.5, + opacity: 0.75 +}); diff --git a/master/ol/ol/style/point.js b/master/ol/ol/style/point.js new file mode 100644 index 0000000000..20587391d1 --- /dev/null +++ b/master/ol/ol/style/point.js @@ -0,0 +1,33 @@ +goog.provide('ol.style.Point'); +goog.provide('ol.style.PointLiteral'); + +goog.require('ol.style.Symbolizer'); +goog.require('ol.style.SymbolizerLiteral'); + + + +/** + * @constructor + * @extends {ol.style.SymbolizerLiteral} + */ +ol.style.PointLiteral = function() { + goog.base(this); +}; +goog.inherits(ol.style.PointLiteral, ol.style.SymbolizerLiteral); + + + +/** + * @constructor + * @extends {ol.style.Symbolizer} + */ +ol.style.Point = function() { + goog.base(this); +}; +goog.inherits(ol.style.Point, ol.style.Symbolizer); + + +/** + * @inheritDoc + */ +ol.style.Point.prototype.createLiteral = goog.abstractMethod; diff --git a/master/ol/ol/style/polygon.js b/master/ol/ol/style/polygon.js new file mode 100644 index 0000000000..ef2a017ec1 --- /dev/null +++ b/master/ol/ol/style/polygon.js @@ -0,0 +1,189 @@ +goog.provide('ol.style.Polygon'); +goog.provide('ol.style.PolygonLiteral'); + +goog.require('ol.Expression'); +goog.require('ol.ExpressionLiteral'); +goog.require('ol.style.Symbolizer'); +goog.require('ol.style.SymbolizerLiteral'); + + +/** + * @typedef {{fillColor: (string|undefined), + * strokeColor: (string|undefined), + * strokeWidth: (number|undefined), + * opacity: (number)}} + */ +ol.style.PolygonLiteralOptions; + + + +/** + * @constructor + * @extends {ol.style.SymbolizerLiteral} + * @param {ol.style.PolygonLiteralOptions} config Symbolizer properties. + */ +ol.style.PolygonLiteral = function(config) { + goog.base(this); + + /** @type {string|undefined} */ + this.fillColor = config.fillColor; + if (goog.isDef(config.fillColor)) { + goog.asserts.assertString(config.fillColor, 'fillColor must be a string'); + } + + /** @type {string|undefined} */ + this.strokeColor = config.strokeColor; + if (goog.isDef(this.strokeColor)) { + goog.asserts.assertString( + this.strokeColor, 'strokeColor must be a string'); + } + + /** @type {number|undefined} */ + this.strokeWidth = config.strokeWidth; + if (goog.isDef(this.strokeWidth)) { + goog.asserts.assertNumber( + this.strokeWidth, 'strokeWidth must be a number'); + } + + goog.asserts.assert( + goog.isDef(this.fillColor) || + (goog.isDef(this.strokeColor) && goog.isDef(this.strokeWidth)), + 'Either fillColor or strokeColor and strokeWidth must be set'); + + goog.asserts.assertNumber(config.opacity, 'opacity must be a number'); + /** @type {number} */ + this.opacity = config.opacity; + +}; +goog.inherits(ol.style.PolygonLiteral, ol.style.SymbolizerLiteral); + + +/** + * @inheritDoc + */ +ol.style.PolygonLiteral.prototype.equals = function(polygonLiteral) { + return this.fillColor == polygonLiteral.fillColor && + this.strokeColor == polygonLiteral.strokeColor && + this.strokeWidth == polygonLiteral.strokeWidth && + this.opacity == polygonLiteral.opacity; +}; + + + +/** + * @constructor + * @extends {ol.style.Symbolizer} + * @param {ol.style.PolygonOptions} options Symbolizer properties. + */ +ol.style.Polygon = function(options) { + goog.base(this); + + /** + * @type {ol.Expression} + * @private + */ + this.fillColor_ = !goog.isDefAndNotNull(options.fillColor) ? + null : + (options.fillColor instanceof ol.Expression) ? + options.fillColor : new ol.ExpressionLiteral(options.fillColor); + + // stroke handling - if any stroke property is supplied, use defaults + var strokeColor = null, + strokeWidth = null; + + if (goog.isDefAndNotNull(options.strokeColor) || + goog.isDefAndNotNull(options.strokeWidth)) { + + strokeColor = !goog.isDefAndNotNull(options.strokeColor) ? + new ol.ExpressionLiteral(ol.style.PolygonDefaults.strokeColor) : + (options.strokeColor instanceof ol.Expression) ? + options.strokeColor : new ol.ExpressionLiteral(options.strokeColor); + + strokeWidth = !goog.isDef(options.strokeWidth) ? + new ol.ExpressionLiteral(ol.style.PolygonDefaults.strokeWidth) : + (options.strokeWidth instanceof ol.Expression) ? + options.strokeWidth : new ol.ExpressionLiteral(options.strokeWidth); + } + + /** + * @type {ol.Expression} + * @private + */ + this.strokeColor_ = strokeColor; + + /** + * @type {ol.Expression} + * @private + */ + this.strokeWidth_ = strokeWidth; + + // one of stroke or fill can be null, both null is user error + goog.asserts.assert(!goog.isNull(this.fillColor_) || + !(goog.isNull(this.strokeColor_) && goog.isNull(this.strokeWidth_)), + 'Stroke or fill properties must be provided'); + + /** + * @type {ol.Expression} + * @private + */ + this.opacity_ = !goog.isDef(options.opacity) ? + new ol.ExpressionLiteral(ol.style.PolygonDefaults.opacity) : + (options.opacity instanceof ol.Expression) ? + options.opacity : new ol.ExpressionLiteral(options.opacity); + +}; +goog.inherits(ol.style.Polygon, ol.style.Symbolizer); + + +/** + * @inheritDoc + * @return {ol.style.PolygonLiteral} Literal shape symbolizer. + */ +ol.style.Polygon.prototype.createLiteral = function(opt_feature) { + var attrs, + feature = opt_feature; + if (goog.isDef(feature)) { + attrs = feature.getAttributes(); + } + + var fillColor = goog.isNull(this.fillColor_) ? + undefined : + /** @type {string} */ (this.fillColor_.evaluate(feature, attrs)); + goog.asserts.assert(!goog.isDef(fillColor) || goog.isString(fillColor)); + + var strokeColor = goog.isNull(this.strokeColor_) ? + undefined : + /** @type {string} */ (this.strokeColor_.evaluate(feature, attrs)); + goog.asserts.assert(!goog.isDef(strokeColor) || goog.isString(strokeColor)); + + var strokeWidth = goog.isNull(this.strokeWidth_) ? + undefined : + /** @type {number} */ (this.strokeWidth_.evaluate(feature, attrs)); + goog.asserts.assert(!goog.isDef(strokeWidth) || goog.isNumber(strokeWidth)); + + goog.asserts.assert( + goog.isDef(fillColor) || + (goog.isDef(strokeColor) && goog.isDef(strokeWidth)), + 'either fill style or strokeColor and strokeWidth must be defined'); + + var opacity = this.opacity_.evaluate(feature, attrs); + goog.asserts.assertNumber(opacity, 'opacity must be a number'); + + return new ol.style.PolygonLiteral({ + fillColor: fillColor, + strokeColor: strokeColor, + strokeWidth: strokeWidth, + opacity: opacity + }); +}; + + +/** + * @type {ol.style.PolygonLiteral} + */ +ol.style.PolygonDefaults = new ol.style.PolygonLiteral({ + fillColor: '#ffffff', + strokeColor: '#696969', + strokeWidth: 1.5, + opacity: 0.75 +}); diff --git a/master/ol/ol/style/rule.js b/master/ol/ol/style/rule.js new file mode 100644 index 0000000000..b6f1284fea --- /dev/null +++ b/master/ol/ol/style/rule.js @@ -0,0 +1,46 @@ +goog.provide('ol.style.Rule'); + +goog.require('ol.Feature'); +goog.require('ol.filter.Filter'); +goog.require('ol.style.Symbolizer'); + + + +/** + * @constructor + * @param {ol.style.RuleOptions} options Rule options. + */ +ol.style.Rule = function(options) { + + /** + * @type {ol.filter.Filter} + * @private + */ + this.filter_ = goog.isDef(options.filter) ? options.filter : null; + + /** + * @type {Array.} + * @private + */ + this.symbolizers_ = goog.isDef(options.symbolizers) ? + options.symbolizers : []; + +}; + + +/** + * @param {ol.Feature} feature Feature. + * @return {boolean} Does the rule apply to the feature? + */ +ol.style.Rule.prototype.applies = function(feature) { + return goog.isNull(this.filter_) ? true : this.filter_.applies(feature); +}; + + +/** + * @return {Array.} Symbolizers. + */ +ol.style.Rule.prototype.getSymbolizers = function() { + return this.symbolizers_; +}; + diff --git a/master/ol/ol/style/shape.js b/master/ol/ol/style/shape.js new file mode 100644 index 0000000000..d0af55a4d1 --- /dev/null +++ b/master/ol/ol/style/shape.js @@ -0,0 +1,230 @@ +goog.provide('ol.style.Shape'); +goog.provide('ol.style.ShapeLiteral'); +goog.provide('ol.style.ShapeType'); + +goog.require('ol.Expression'); +goog.require('ol.ExpressionLiteral'); +goog.require('ol.style.Point'); +goog.require('ol.style.PointLiteral'); + + +/** + * @enum {string} + */ +ol.style.ShapeType = { + CIRCLE: 'circle' +}; + + +/** + * @typedef {{type: (ol.style.ShapeType), + * size: (number), + * fillColor: (string|undefined), + * strokeColor: (string|undefined), + * strokeWidth: (number|undefined), + * opacity: (number)}} + */ +ol.style.ShapeLiteralOptions; + + + +/** + * @constructor + * @extends {ol.style.PointLiteral} + * @param {ol.style.ShapeLiteralOptions} config Symbolizer properties. + */ +ol.style.ShapeLiteral = function(config) { + + goog.asserts.assertString(config.type, 'type must be a string'); + /** @type {ol.style.ShapeType} */ + this.type = config.type; + + goog.asserts.assertNumber(config.size, 'size must be a number'); + /** @type {number} */ + this.size = config.size; + + /** @type {string|undefined} */ + this.fillColor = config.fillColor; + if (goog.isDef(config.fillColor)) { + goog.asserts.assertString(config.fillColor, 'fillColor must be a string'); + } + + /** @type {string|undefined} */ + this.strokeColor = config.strokeColor; + if (goog.isDef(this.strokeColor)) { + goog.asserts.assertString( + this.strokeColor, 'strokeColor must be a string'); + } + + /** @type {number|undefined} */ + this.strokeWidth = config.strokeWidth; + if (goog.isDef(this.strokeWidth)) { + goog.asserts.assertNumber( + this.strokeWidth, 'strokeWidth must be a number'); + } + + goog.asserts.assert( + goog.isDef(this.fillColor) || + (goog.isDef(this.strokeColor) && goog.isDef(this.strokeWidth)), + 'Either fillColor or strokeColor and strokeWidth must be set'); + + goog.asserts.assertNumber(config.opacity, 'opacity must be a number'); + /** @type {number} */ + this.opacity = config.opacity; + +}; +goog.inherits(ol.style.ShapeLiteral, ol.style.PointLiteral); + + +/** + * @inheritDoc + */ +ol.style.ShapeLiteral.prototype.equals = function(shapeLiteral) { + return this.type == shapeLiteral.type && + this.size == shapeLiteral.size && + this.fillColor == shapeLiteral.fillColor && + this.strokeColor == shapeLiteral.strokeColor && + this.strokeWidth == shapeLiteral.strokeWidth && + this.opacity == shapeLiteral.opacity; +}; + + + +/** + * @constructor + * @extends {ol.style.Point} + * @param {ol.style.ShapeOptions} options Symbolizer properties. + */ +ol.style.Shape = function(options) { + + /** + * @type {ol.style.ShapeType} + * @private + */ + this.type_ = /** @type {ol.style.ShapeType} */ (goog.isDef(options.type) ? + options.type : ol.style.ShapeDefaults.type); + + /** + * @type {ol.Expression} + * @private + */ + this.size_ = !goog.isDef(options.size) ? + new ol.ExpressionLiteral(ol.style.ShapeDefaults.size) : + (options.size instanceof ol.Expression) ? + options.size : new ol.ExpressionLiteral(options.size); + + /** + * @type {ol.Expression} + * @private + */ + this.fillColor_ = !goog.isDefAndNotNull(options.fillColor) ? + null : + (options.fillColor instanceof ol.Expression) ? + options.fillColor : new ol.ExpressionLiteral(options.fillColor); + + // stroke handling - if any stroke property is supplied, use defaults + var strokeColor = null, + strokeWidth = null; + + if (goog.isDefAndNotNull(options.strokeColor) || + goog.isDefAndNotNull(options.strokeWidth)) { + + strokeColor = !goog.isDefAndNotNull(options.strokeColor) ? + new ol.ExpressionLiteral(ol.style.ShapeDefaults.strokeColor) : + (options.strokeColor instanceof ol.Expression) ? + options.strokeColor : new ol.ExpressionLiteral(options.strokeColor); + + strokeWidth = !goog.isDef(options.strokeWidth) ? + new ol.ExpressionLiteral(ol.style.ShapeDefaults.strokeWidth) : + (options.strokeWidth instanceof ol.Expression) ? + options.strokeWidth : new ol.ExpressionLiteral(options.strokeWidth); + } + + /** + * @type {ol.Expression} + * @private + */ + this.strokeColor_ = strokeColor; + + /** + * @type {ol.Expression} + * @private + */ + this.strokeWidth_ = strokeWidth; + + // one of stroke or fill can be null, both null is user error + goog.asserts.assert(!goog.isNull(this.fillColor_) || + !(goog.isNull(this.strokeColor_) && goog.isNull(this.strokeWidth_)), + 'Stroke or fill properties must be provided'); + + /** + * @type {ol.Expression} + * @private + */ + this.opacity_ = !goog.isDef(options.opacity) ? + new ol.ExpressionLiteral(ol.style.ShapeDefaults.opacity) : + (options.opacity instanceof ol.Expression) ? + options.opacity : new ol.ExpressionLiteral(options.opacity); + +}; + + +/** + * @inheritDoc + * @return {ol.style.ShapeLiteral} Literal shape symbolizer. + */ +ol.style.Shape.prototype.createLiteral = function(opt_feature) { + var attrs, + feature = opt_feature; + if (goog.isDef(feature)) { + attrs = feature.getAttributes(); + } + + var size = this.size_.evaluate(feature, attrs); + goog.asserts.assertNumber(size, 'size must be a number'); + + var fillColor = goog.isNull(this.fillColor_) ? + undefined : + /** @type {string} */ (this.fillColor_.evaluate(feature, attrs)); + goog.asserts.assert(!goog.isDef(fillColor) || goog.isString(fillColor)); + + var strokeColor = goog.isNull(this.strokeColor_) ? + undefined : + /** @type {string} */ (this.strokeColor_.evaluate(feature, attrs)); + goog.asserts.assert(!goog.isDef(strokeColor) || goog.isString(strokeColor)); + + var strokeWidth = goog.isNull(this.strokeWidth_) ? + undefined : + /** @type {number} */ (this.strokeWidth_.evaluate(feature, attrs)); + goog.asserts.assert(!goog.isDef(strokeWidth) || goog.isNumber(strokeWidth)); + + goog.asserts.assert( + goog.isDef(fillColor) || + (goog.isDef(strokeColor) && goog.isDef(strokeWidth)), + 'either fill style or strokeColor and strokeWidth must be defined'); + + var opacity = this.opacity_.evaluate(feature, attrs); + goog.asserts.assertNumber(opacity, 'opacity must be a number'); + + return new ol.style.ShapeLiteral({ + type: this.type_, + size: size, + fillColor: fillColor, + strokeColor: strokeColor, + strokeWidth: strokeWidth, + opacity: opacity + }); +}; + + +/** + * @type {ol.style.ShapeLiteral} + */ +ol.style.ShapeDefaults = new ol.style.ShapeLiteral({ + type: ol.style.ShapeType.CIRCLE, + size: 5, + fillColor: '#ffffff', + strokeColor: '#696969', + strokeWidth: 1.5, + opacity: 0.75 +}); diff --git a/master/ol/ol/style/style.js b/master/ol/ol/style/style.js new file mode 100644 index 0000000000..07edb53086 --- /dev/null +++ b/master/ol/ol/style/style.js @@ -0,0 +1,70 @@ +goog.provide('ol.style.Style'); + +goog.require('ol.Feature'); +goog.require('ol.geom.GeometryType'); +goog.require('ol.style.Rule'); +goog.require('ol.style.SymbolizerLiteral'); + + + +/** + * @constructor + * @param {ol.style.StyleOptions} options Style options. + */ +ol.style.Style = function(options) { + + /** + * @type {Array.} + * @private + */ + this.rules_ = goog.isDef(options.rules) ? options.rules : []; + +}; + + +/** + * @param {ol.Feature} feature Feature. + * @return {Array.} Symbolizer literals for the + * feature. + */ +ol.style.Style.prototype.apply = function(feature) { + var rules = this.rules_, + literals = [], + rule, symbolizers; + for (var i = 0, ii = rules.length; i < ii; ++i) { + rule = rules[i]; + if (rule.applies(feature)) { + symbolizers = rule.getSymbolizers(); + for (var j = 0, jj = symbolizers.length; j < jj; ++j) { + literals.push(symbolizers[j].createLiteral(feature)); + } + } + } + return literals; +}; + + +/** + * @param {ol.Feature} feature Feature. + * @return {Array.} Default symbolizer literals for + * the feature. + */ +ol.style.Style.applyDefaultStyle = function(feature) { + var geometry = feature.getGeometry(), + symbolizerLiterals = []; + if (!goog.isNull(geometry)) { + var type = geometry.getType(); + if (type === ol.geom.GeometryType.POINT || + type === ol.geom.GeometryType.MULTIPOINT) { + symbolizerLiterals.push(ol.style.ShapeDefaults); + } else if (type === ol.geom.GeometryType.LINESTRING || + type === ol.geom.GeometryType.MULTILINESTRING) { + symbolizerLiterals.push(ol.style.LineDefaults); + } else if (type === ol.geom.GeometryType.LINEARRING || + type === ol.geom.GeometryType.POLYGON || + type === ol.geom.GeometryType.MULTIPOLYGON) { + symbolizerLiterals.push(ol.style.PolygonDefaults); + } + } + return symbolizerLiterals; +}; diff --git a/master/ol/ol/style/symbolizer.js b/master/ol/ol/style/symbolizer.js new file mode 100644 index 0000000000..b35ad81561 --- /dev/null +++ b/master/ol/ol/style/symbolizer.js @@ -0,0 +1,33 @@ +goog.provide('ol.style.Symbolizer'); +goog.provide('ol.style.SymbolizerLiteral'); + +goog.require('ol.Feature'); + + + +/** + * @constructor + */ +ol.style.SymbolizerLiteral = function() {}; + + +/** + * @param {ol.style.SymbolizerLiteral} symbolizerLiteral Symbolizer literal to + * compare to. + * @return {boolean} Is the passed symbolizer literal equal to this instance? + */ +ol.style.SymbolizerLiteral.prototype.equals = goog.abstractMethod; + + + +/** + * @constructor + */ +ol.style.Symbolizer = function() {}; + + +/** + * @param {ol.Feature=} opt_feature Feature for evaluating expressions. + * @return {ol.style.SymbolizerLiteral} Literal symbolizer. + */ +ol.style.Symbolizer.prototype.createLiteral = goog.abstractMethod; diff --git a/master/ol/ol/tilegrid/tilegrid.js b/master/ol/ol/tilegrid/tilegrid.js index bcbbe26bd6..182b5d7dd3 100644 --- a/master/ol/ol/tilegrid/tilegrid.js +++ b/master/ol/ol/tilegrid/tilegrid.js @@ -368,7 +368,7 @@ ol.tilegrid.createForProjection = resolutions[z] = size / Math.pow(2, z); } return new ol.tilegrid.TileGrid({ - origin: projectionExtent.getTopLeft(), + origin: projectionExtent.getBottomLeft(), resolutions: resolutions, tileSize: tileSize }); diff --git a/master/ol/ol/tileurlfunction.js b/master/ol/ol/tileurlfunction.js index 209febe19c..f041b5f184 100644 --- a/master/ol/ol/tileurlfunction.js +++ b/master/ol/ol/tileurlfunction.js @@ -20,28 +20,15 @@ ol.TileUrlFunctionType; * @return {ol.TileUrlFunctionType} Tile URL function. */ ol.TileUrlFunction.createFromTemplate = function(template) { - var match = - /\{(\d)-(\d)\}/.exec(template) || /\{([a-z])-([a-z])\}/.exec(template); - if (match) { - var templates = []; - var startCharCode = match[1].charCodeAt(0); - var stopCharCode = match[2].charCodeAt(0); - var charCode; - for (charCode = startCharCode; charCode <= stopCharCode; ++charCode) { - templates.push(template.replace(match[0], String.fromCharCode(charCode))); + return function(tileCoord) { + if (goog.isNull(tileCoord)) { + return undefined; + } else { + return template.replace('{z}', tileCoord.z) + .replace('{x}', tileCoord.x) + .replace('{y}', tileCoord.y); } - return ol.TileUrlFunction.createFromTemplates(templates); - } else { - return function(tileCoord) { - if (goog.isNull(tileCoord)) { - return undefined; - } else { - return template.replace('{z}', tileCoord.z) - .replace('{x}', tileCoord.x) - .replace('{y}', tileCoord.y); - } - }; - } + }; }; @@ -120,3 +107,24 @@ ol.TileUrlFunction.withTileCoordTransform = } }; }; + + +/** + * @param {string} url Url. + * @return {Array.} Array of urls. + */ +ol.TileUrlFunction.expandUrl = function(url) { + var urls = []; + var match = /\{(\d)-(\d)\}/.exec(url) || /\{([a-z])-([a-z])\}/.exec(url); + if (match) { + var startCharCode = match[1].charCodeAt(0); + var stopCharCode = match[2].charCodeAt(0); + var charCode; + for (charCode = startCharCode; charCode <= stopCharCode; ++charCode) { + urls.push(url.replace(match[0], String.fromCharCode(charCode))); + } + } else { + urls.push(url); + } + return urls; +};