Compare commits

..

2490 Commits

Author SHA1 Message Date
Andreas Hocevar
7bc26050f0 Tagging temporary release 2016-07-06 21:24:26 +02:00
Andreas Hocevar
5d8b99ab10 Additional tests and code comments 2016-07-06 20:13:08 +02:00
Andreas Hocevar
3c37ce3990 Introduce new overlaps option for Vector and VectorTile sources
Instead of deciding whether to batch fills and strokes by looking at the
opacity of the style, we now rely on user input.
2016-07-06 16:37:06 +02:00
Andreas Hocevar
091dc9fbf4 Batch polygon and circle fills and strokes 2016-07-06 16:03:45 +02:00
Tobias Sauerwein
343d2c032d Merge pull request #5570 from bjornharrtell/jsts_1.2.0
Upgrade JSTS in example to 1.2.0
2016-07-05 22:24:47 +02:00
Björn Harrtell
7d4c7b7982 Upgrade JSTS in example to 1.2.0 2016-07-05 21:21:36 +02:00
Frédéric Junod
130052c935 Merge pull request #5566 from fredj/5253
Fix ol.style.Image#getAnchor documentation
2016-07-05 16:23:20 +02:00
Frederic Junod
8957e618a5 Fix ol.style.Image#getAnchor documentation 2016-07-05 14:51:33 +02:00
Andreas Hocevar
c49fbf9070 Merge pull request #5546 from ahocevar/event-no-target
Remove useless target argument from ol.Event and subclass constructors
2016-07-05 09:54:19 +02:00
Andreas Hocevar
d840bba905 Merge pull request #5565 from probins/enum
Reinsert goog.provide for enums in olx.js
2016-07-05 09:52:22 +02:00
Andreas Hocevar
ccf15b8be3 Remove useless target argument from ol.Event and subclass constructors 2016-07-05 09:40:00 +02:00
Peter Robins
d7180fd1e8 Reinsert goog.provide for enums in olx.js 2016-07-05 07:32:30 +00:00
Frédéric Junod
2845f50ff7 Merge pull request #5561 from fredj/test_centerConstraint
Add unit tests for ol.View.createCenterConstraint
2016-07-05 09:13:34 +02:00
Frédéric Junod
39e06151c5 Merge pull request #5563 from fredj/removeVertex_return
Return if a vertex was removed in ol.interaction.Modify#removeVertex_
2016-07-05 09:13:19 +02:00
Frederic Junod
460ea4e809 Return if a vertex was removed in ol.interaction.Modify#removeVertex_ 2016-07-04 17:09:01 +02:00
Frederic Junod
6910c471bf Add unit tests for ol.View.createCenterConstraint 2016-07-04 16:46:57 +02:00
Andreas Hocevar
b5da32340e Merge pull request #5533 from ahocevar/update-wms-params-reproj
Make sure reprojected tiles are recreated on updateParams
2016-07-04 11:21:42 +02:00
Andreas Hocevar
102eb1b94f Handle interim tiles correctly when reprojecting 2016-07-04 10:31:20 +02:00
Bart van den Eijnden
ee3e302f69 Merge pull request #5557 from openlayers/release-v3.17.1
Release v3.17.1
2016-07-04 10:14:16 +02:00
Bart van den Eijnden
eb92c268ab Update package version to 3.17.1 2016-07-04 10:01:47 +02:00
Bart van den Eijnden
518212ce7d Changelog for v3.17.1 2016-07-04 10:01:10 +02:00
Andreas Hocevar
bbfc93b1d8 Merge pull request #5548 from GaborFarkas/fullscreen_event_enum
Fix CHANGETYPE in ol.control.FullScreen
2016-07-04 09:59:03 +02:00
Andreas Hocevar
4d10a6b9a1 Merge pull request #5548 from GaborFarkas/fullscreen_event_enum
Fix CHANGETYPE in ol.control.FullScreen
2016-07-03 11:25:39 +02:00
GaborFarkas
2e68be13f6 Create a dedicated function to changeType. 2016-07-03 11:14:53 +02:00
Andreas Hocevar
d05f1ce743 Merge pull request #5534 from ahocevar/scaleline-docs
Fix ScaleLine control documentation
2016-07-02 21:36:53 +02:00
Tim Schaub
a30d4843cf Merge pull request #5541 from probins/isnumber
Replace goog.isNumber
2016-07-02 09:20:53 -06:00
Tim Schaub
5e98b27afd Merge pull request #5552 from probins/webgl
Replace goog.webgl.
2016-07-02 09:19:16 -06:00
Peter Robins
294a129083 Replace goog.webgl 2016-07-02 10:40:55 +00:00
Andreas Hocevar
c95c9846fb Fix ScaleLine control documentation
The scale line shown is derived from y-axis distances, not x-axis.
2016-07-02 09:44:47 +02:00
Andreas Hocevar
512c442ccc Merge pull request #5550 from ahocevar/rename-multvec2
Remove use of ol.vec.Mat4 calls remaining after #5482
2016-07-01 23:12:03 +02:00
Andreas Hocevar
2d4bccacb5 Remove use of ol.vec.Mat4 calls remaining after #5482 2016-07-01 23:00:29 +02:00
Andreas Hocevar
9624357bc3 Merge pull request #5507 from ahocevar/remove-goog-vec
Remove use of goog.vec.*
2016-07-01 22:46:42 +02:00
Bart van den Eijnden
9cc724550a Merge pull request #5549 from openlayers/release-v3.17.0
Release v3.17.0
2016-07-01 19:34:17 +02:00
Bart van den Eijnden
d3e15e4394 Update package version to 3.17.0 2016-07-01 19:20:18 +02:00
Bart van den Eijnden
0dbca294b2 Changelog for v3.17.0 2016-07-01 19:19:50 +02:00
GaborFarkas
27e3124dca Set changeType when the map exists 2016-07-01 18:28:36 +02:00
GaborFarkas
34cc5c6bde Fix error from early enum of CHANGETYPE 2016-07-01 18:06:11 +02:00
Andreas Hocevar
c74d7171aa Merge pull request #5539 from probins/dom
Remove outdated comments re goog.dom
2016-07-01 15:07:59 +02:00
Tobias Sauerwein
6ebc67f1c5 Merge pull request #5543 from tsauerwein/update-rbush-2
Update rbush to 2.0.1
2016-07-01 13:13:20 +02:00
Bart van den Eijnden
72568305c0 Merge pull request #5540 from bartvde/issue-5484
Remove MapQuest source
2016-07-01 13:08:26 +02:00
tsauerwein
749660dd22 Update rbush to 2.0.1 2016-07-01 12:01:48 +02:00
Bart van den Eijnden
ed80d243fb Remove MapQuest source 2016-07-01 11:38:52 +02:00
Peter Robins
3eea9d4558 Replace goog.isNumber 2016-07-01 09:35:54 +00:00
Bart van den Eijnden
0d26c33484 Merge pull request #5538 from probins/inherits
Replace remaining goog.inherits
2016-07-01 11:30:26 +02:00
Peter Robins
1775a5aeea Remove outdated comments re goog.dom 2016-07-01 08:56:24 +00:00
Peter Robins
f196ed8102 Replace remaining goog.inherits 2016-07-01 08:45:15 +00:00
Bart van den Eijnden
c56432cf2e Merge pull request #5536 from tschaub/more-layer-extent
Update to layer-extent example
2016-07-01 09:13:47 +02:00
Tim Schaub
17e11fb84a Source shuffle 2016-06-30 15:28:33 -06:00
Tim Schaub
4154df9aa8 Remove unnecessary interaction 2016-06-30 15:22:51 -06:00
Tim Schaub
728e1dd1f2 Merge pull request #5482 from ischneider/layer-extent
Fix for regression in tile layer extent
2016-06-30 15:19:13 -06:00
Frédéric Junod
6d41e87ff5 Merge pull request #5475 from probins/enumprovide
Remove goog.provide from enums only used internally or in olx.js
2016-06-30 16:57:21 +02:00
Frédéric Junod
77e66221c1 Merge pull request #5424 from fredj/select_event
Don't dispatch select event if no feature is selected or deselected
2016-06-29 15:15:13 +02:00
Frederic Junod
b562f4d68a Don't dispatch select event if a selected feature is selected again 2016-06-29 15:03:42 +02:00
Frederic Junod
e7c2d9ab32 Don't dispatch select event if no feature is selected or deselected 2016-06-29 15:03:42 +02:00
Frédéric Junod
39de933e64 Merge pull request #5522 from SamuelBerger/master
Add 'condition' option to ol.interaction.DragPanOptions in olx.js
2016-06-29 14:52:34 +02:00
Frédéric Junod
c43740a4ad Merge pull request #5443 from fredj/max_zoom_options
Remove olx.source.WMTSOptions#maxZoom option
2016-06-29 14:52:14 +02:00
Frederic Junod
7a43a667ce Remove olx.source.TileWMSOptions#maxZoom option 2016-06-29 13:44:10 +02:00
Frederic Junod
1b662ff048 Use minZoom and maxZoom olx.source.StamenOptions 2016-06-29 13:41:49 +02:00
Frederic Junod
93a98337d8 Remove olx.source.WMTSOptions#maxZoom option
The option is not handled by `ol.source.WMTS`
2016-06-29 13:41:49 +02:00
Frédéric Junod
65c8eba59b Merge pull request #5497 from openlayers/greenkeeper-istanbul-0.4.4
Update istanbul to version 0.4.4 🚀
2016-06-28 13:32:54 +02:00
greenkeeperio-bot
059ac56fef chore(package): update istanbul to version 0.4.4
https://greenkeeper.io/
2016-06-27 07:10:41 -06:00
Frédéric Junod
64afa2eab5 Merge pull request #5523 from openlayers/greenkeeper-closure-util-1.15.0
Update closure-util to version 1.15.0 🚀
2016-06-27 15:10:26 +02:00
greenkeeperio-bot
13546d27f2 chore(package): update closure-util to version 1.15.0
https://greenkeeper.io/
2016-06-27 06:49:14 -06:00
Samuel Berger
a2326f7180 Add 'condition' option to ol.interaction.DragPanOptions in olx.js 2016-06-27 14:01:40 +02:00
Frédéric Junod
ffe0529df8 Merge pull request #5508 from tsauerwein/compiler-properties
Fix problems with ol.format.WFS in compiled mode
2016-06-27 11:59:13 +02:00
Andreas Hocevar
38f7aef6b0 Merge pull request #5512 from ahocevar/foreachtilecoord
Use forEachTileCoord name instead of forEachTileCoordInExtentAndZ
2016-06-25 21:18:58 +02:00
Tim Schaub
618cb389e5 Use ol.transform.compose() for common transform compositions 2016-06-24 19:33:53 +02:00
Tim Schaub
a655234cc3 Convenience function for common composite transform 2016-06-24 19:32:29 +02:00
Tim Schaub
4cde6a0a6d Move assertions into it blocks 2016-06-24 19:32:13 +02:00
Andreas Hocevar
a1e0969d9f Add tests 2016-06-23 17:17:59 +02:00
Andreas Hocevar
3e928718f4 ol.vec.Mat4 improvements
* Rename ol.vec.Mat4.fromMatrix to ol.vec.Mat4.fromTransform
* Make result from ol.vec.Mat4.fromTransform immutable by adding result
  matrix as argument.
2016-06-23 15:52:25 +02:00
Bart van den Eijnden
f549f1946c Merge pull request #5513 from bartvde/view-getminmaxres
Add getters for min and max resolution of the view
2016-06-23 15:28:07 +02:00
Bart van den Eijnden
449ea370c0 Add getters for min and max resolution of the view 2016-06-23 15:00:30 +02:00
Andreas Hocevar
bc506389fc Use forEachTileCoord name instead of forEachTileCoordInExtentAndZ 2016-06-23 14:27:21 +02:00
Andreas Hocevar
5d85867fbf Merge pull request #5471 from probins/gpx
Fix GPX write of xsi ns
2016-06-23 14:24:48 +02:00
Andreas Hocevar
6b4ee42c90 Refactor to a more convenient internal API 2016-06-23 13:10:41 +02:00
Andreas Hocevar
cf7ff841a7 Remove use of goog.vec.* 2016-06-23 13:10:41 +02:00
Andreas Hocevar
55edf4003f Merge pull request #5134 from nicholas-l/removeGoogDom
Remove goog.dom
2016-06-23 12:15:03 +02:00
nicholas
6b465902cd Remove goog.dom 2016-06-23 22:06:35 +12:00
Andreas Hocevar
9453984f9a Merge pull request #5511 from ahocevar/keep-last-point
Do not optimize lines away entirely
2016-06-23 11:07:04 +02:00
Andreas Hocevar
35129af7f0 Do not optimize lines away entirely 2016-06-23 10:38:10 +02:00
Andreas Hocevar
3726b25ba2 Merge pull request #5509 from ahocevar/foreachtilecoordinextentandz
Make it easier to work with tile ranges in custom source implementations
2016-06-23 09:03:08 +02:00
tsauerwein
7048de8e83 Make sure properties are not renamed 2016-06-23 08:38:06 +02:00
Frederic Junod
4b7cdffaf4 Export getZForResolution from ol.tilegrid.TileGrid 2016-06-22 20:48:49 +02:00
Andreas Hocevar
14cecb7163 Add function to iterate over tile coordinates in extent and z 2016-06-22 18:05:18 +02:00
Frédéric Junod
29c8af7559 Merge pull request #5498 from openlayers/greenkeeper-eslint-2.13.1
Update eslint to version 2.13.1 🚀
2016-06-21 12:28:40 +02:00
Frédéric Junod
b19ac3c26d Merge pull request #5495 from fredj/rm_goog.isFunction
Get rid of goog.isFunction
2016-06-21 08:37:15 +02:00
greenkeeperio-bot
f26bcf5c3e chore(package): update eslint to version 2.13.1
https://greenkeeper.io/
2016-06-21 00:36:29 -06:00
Frédéric Junod
e4168e3582 Merge pull request #5499 from openlayers/greenkeeper-glob-7.0.5
Update glob to version 7.0.5 🚀
2016-06-21 08:36:15 +02:00
greenkeeperio-bot
dd8dc8ad0f chore(package): update glob to version 7.0.5
https://greenkeeper.io/
2016-06-20 19:13:36 -06:00
Frederic Junod
b8ce70fbf0 Get rid of goog.isFunction 2016-06-20 16:09:25 +02:00
Andreas Hocevar
e916345e8c Merge pull request #5125 from nicholas-l/removeGoogStyle
Remove goog style
2016-06-20 13:04:00 +02:00
Frédéric Junod
925a272fb8 Merge pull request #5494 from probins/global
Remove goog.global
2016-06-20 12:27:33 +02:00
Peter Robins
eaa0d70289 Remove goog.global 2016-06-20 09:47:32 +00:00
Andreas Hocevar
030c0dad3d Avoid creation of unnecessary object literals 2016-06-20 21:44:15 +12:00
Nicholas L
0fef14137c Remove unneeded comments and use ol.global 2016-06-20 21:41:20 +12:00
Andreas Hocevar
04287e0fd5 Merge pull request #5492 from openlayers/greenkeeper-eslint-2.13.0
Update eslint to version 2.13.0 🚀
2016-06-20 07:55:20 +02:00
nicholas
ea1c7a6551 Remove goog.style.getPageOffset 2016-06-19 19:26:25 +12:00
nicholas
6da5a1e9f7 Remove goog.style.getContentBoxSize 2016-06-19 19:22:11 +12:00
nicholas
ec12c34edd Remove goog.style.getBorderBoxSize 2016-06-19 19:22:11 +12:00
nicholas
837c48a2e2 Remove goog.style.getMarginBox 2016-06-19 19:22:11 +12:00
nicholas
04c4b4efc1 Remove goog.style.setElementShown 2016-06-19 19:22:11 +12:00
nicholas
96a14e0515 Remove getSize 2016-06-19 19:22:11 +12:00
greenkeeperio-bot
cd4f1c109b chore(package): update eslint to version 2.13.0
https://greenkeeper.io/
2016-06-17 11:35:35 -06:00
Andreas Hocevar
609c891524 Merge pull request #5490 from openlayers/greenkeeper-glob-7.0.4
Update glob to version 7.0.4 🚀
2016-06-17 09:12:45 +02:00
greenkeeperio-bot
5442c1f587 chore(package): update glob to version 7.0.4
https://greenkeeper.io/
2016-06-16 11:38:16 -06:00
Frédéric Junod
810c655940 Merge pull request #5460 from openlayers/greenkeeper-eslint-2.12.0
Update eslint to version 2.12.0 🚀
2016-06-16 16:26:09 +02:00
Ian Schneider
9d5232d9af canvas tests for tile rendering with layer.extent 2016-06-15 21:14:37 -06:00
Ian Schneider
265068e782 example - layer-extent uses country bboxes 2016-06-15 21:13:49 -06:00
Ian Schneider
44a4fbdda2 respect layer.extent in canvas tilelayer renderer 2016-06-15 12:42:38 -06:00
Ian Schneider
6902791dc5 layer extent example changes for testing
- add draw extent tool
- rotation control
2016-06-15 12:42:32 -06:00
greenkeeperio-bot
95a3f42315 chore(package): update eslint to version 2.12.0
https://greenkeeper.io/
2016-06-15 09:54:46 -06:00
Andreas Hocevar
6fe1a58b26 Merge pull request #5479 from openlayers/greenkeeper-slimerjs-0.906.2
Update slimerjs to version 0.906.2 🚀
2016-06-15 17:54:31 +02:00
greenkeeperio-bot
466b02836b chore(package): update slimerjs to version 0.906.2
https://greenkeeper.io/
2016-06-15 09:17:14 -06:00
Peter Robins
e5cc971dc9 Remove goog.provide for enums only in olx.js 2016-06-15 09:14:13 +00:00
Peter Robins
bda673f389 Remove goog.provide from internal enums 2016-06-15 09:04:44 +00:00
Frédéric Junod
fa995cf7f3 Merge pull request #5474 from openlayers/greenkeeper-clean-css-3.4.18
Update clean-css to version 3.4.18 🚀
2016-06-15 08:51:08 +02:00
greenkeeperio-bot
1a159f3ac4 chore(package): update clean-css to version 3.4.18
https://greenkeeper.io/
2016-06-15 00:39:12 -06:00
Andreas Hocevar
6718fc982e Merge pull request #5450 from probins/typedefs
Remove sub-namespaces from all remaining typedefs
2016-06-14 17:32:10 +02:00
Andreas Hocevar
2809df86ca Merge pull request #5465 from ahocevar/fix-custom-symbol
Fix custom icon positions and rotation
2016-06-14 17:29:00 +02:00
Andreas Hocevar
1d20215bfa Make all typedefs work without provide/require 2016-06-14 15:01:20 +00:00
Peter Robins
7d210948e8 Fix GPX write of xsi ns
Also add version/creator attributes to <gpx> node.
2016-06-14 11:14:19 +00:00
Frédéric Junod
3c50d12ad9 Merge pull request #5469 from gberaudo/webgl_typo
Fix typo
2016-06-14 09:28:06 +02:00
Guillaume Beraudo
bb32b6ac55 Fix typo 2016-06-14 09:10:07 +02:00
Andreas Hocevar
103ff01456 Fix custom icon positions and rotation 2016-06-13 22:08:02 +02:00
Andreas Hocevar
d26ac55ed0 Merge pull request #5453 from ahocevar/mapbrowserpointerevent
Reference ol.MapBrowserEvent instead of ol.MapBrowserPointerEvent
2016-06-13 14:01:49 +02:00
Bart van den Eijnden
31dcb80725 Merge pull request #5208 from probins/rtewpt
Stop GPX writing rtept properties
2016-06-10 13:10:53 +02:00
Peter Robins
f3acac5259 Stop GPX writing rtept properties 2016-06-10 10:56:30 +00:00
Andreas Hocevar
06249be6bd Remove last reference to ol.MapBrowserPointerEvent from the API
This is a bit of a hack, but in fact it improves the situation for the end
user because it asserts the correct event type instead of failing silently.
2016-06-09 18:22:11 +02:00
Andreas Hocevar
400484e663 Reference ol.MapBrowserEvent instead of ol.MapBrowserPointerEvent
There is nothing exportable in ol.MapBrowserEvent in addition to what is
exportable in ol.MapBrowserEvent.
2016-06-09 18:22:11 +02:00
Frédéric Junod
ab4da04312 Merge pull request #5452 from openlayers/greenkeeper-eslint-config-openlayers-5.0.0
Update eslint-config-openlayers to version 5.0.0 🚀
2016-06-09 16:06:45 +02:00
Frederic Junod
4bf1f56405 Add missing semicolon 2016-06-09 15:39:46 +02:00
greenkeeperio-bot
08f8cd0f16 chore(package): update eslint-config-openlayers to version 5.0.0
https://greenkeeper.io/
2016-06-09 07:25:37 -06:00
Andreas Hocevar
40ead5b329 Merge pull request #5432 from bjornharrtell/rm_goog.uri
Remove use of goog.uri
2016-06-09 14:20:56 +02:00
Peter Robins
2c29512c80 Remove sub-namespaces from all remaining typedefs 2016-06-09 10:01:52 +00:00
Andreas Hocevar
09202cf95d Merge pull request #5449 from ahocevar/examples-absolute-urls
Make example data/ paths absolute for source view and JSFiddle
2016-06-09 10:10:47 +02:00
Andreas Hocevar
e39ea746a7 Make example data/ paths absolute for source view and JSFiddle 2016-06-09 08:51:34 +02:00
Andreas Hocevar
54f7bb6958 Merge pull request #5399 from probins/raster
Remove ol.raster namespace
2016-06-08 16:09:37 +02:00
Björn Harrtell
27853ea7dd Remove use of goog.uri 2016-06-08 15:14:18 +02:00
Peter Robins
395f3c0756 Remove ol.raster namespace
Now used only for 1 typedefs and 1 enum, it serves little purpose,
so the typedef is renamed in the ol namespace, and the enum moved to rastersource.js
2016-06-08 12:37:20 +00:00
Frédéric Junod
e63b4d1f48 Merge pull request #5270 from fredj/load_error
Load erroneous image in ol.Image#load and ol.ImageTile#load
2016-06-08 09:25:57 +02:00
Frédéric Junod
3935b7db24 Merge pull request #5194 from fredj/rm_goog.inherits
Get rid of goog.inherits and goog.base
2016-06-08 09:17:07 +02:00
Frederic Junod
e289bfbb7d Use ol.inherits instead of goog.inherits 2016-06-08 08:38:12 +02:00
Frederic Junod
a598737ec5 Add unit tests for ol.ImageTile 2016-06-08 08:36:58 +02:00
Frederic Junod
1f48198e95 Allow tiles in ol.ImageState.ERROR state to be loaded. 2016-06-08 08:36:58 +02:00
Andreas Hocevar
072728b083 Merge pull request #5427 from ahocevar/auto-typedef-enum-options
Document typedefs and enums used by API symbols
2016-06-07 23:58:04 +02:00
Andreas Hocevar
abec4f4ba7 Fix ol.raster.Operation type and docs 2016-06-07 08:36:44 +02:00
Frédéric Junod
edb3987054 Merge pull request #5438 from fredj/filter_inherit_object
Don't make ol.format.ogc.filter.Filter inherit from ol.Object
2016-06-06 17:20:25 +02:00
Frederic Junod
c51fc84b72 Don't make ol.format.ogc.filter.Filter inherit from ol.Object 2016-06-06 17:05:04 +02:00
Frédéric Junod
de9c338fb1 Merge pull request #5433 from openlayers/greenkeeper-clean-css-3.4.17
Update clean-css to version 3.4.17 🚀
2016-06-06 08:51:19 +02:00
Frédéric Junod
26789d91d2 Merge pull request #5434 from tsauerwein/fix-externs
Fix externs in closure compiler tutorial
2016-06-06 08:47:04 +02:00
Andreas Hocevar
aa9dbb984a Work around undetected types in {function(argType):returnType} types 2016-06-06 08:02:10 +02:00
tsauerwein
b2120b2bab Fix externs in closure tutorial 2016-06-04 10:52:17 +02:00
greenkeeperio-bot
b4b61e737f chore(package): update clean-css to version 3.4.17
https://greenkeeper.io/
2016-06-03 23:13:17 -07:00
Andreas Hocevar
0dca194525 Handle types in arrays etc. 2016-06-04 00:27:25 +02:00
Andreas Hocevar
9e980663ee Remove api annotations from typedefs in olx.js 2016-06-03 10:38:55 +02:00
Andreas Hocevar
2ec4969ac7 Remove api annotations from enums 2016-06-03 09:29:14 +02:00
Andreas Hocevar
ca07de422c Remove api annotations from typedefs 2016-06-03 09:29:04 +02:00
Andreas Hocevar
eddd006fcf Document typedefs and enums used by API symbols
It is no longer necessary to add api annotations to typedefs and enums
that are used by API symbols.
2016-06-03 09:28:53 +02:00
Marc Jansen
9e209a3362 Merge pull request #5426 from frankrowe/icon-example
Fix icon example to anchor popup to feature location
2016-06-03 07:53:09 +02:00
Frank Rowe
30482f023e fix icon example to anchor popup to feature location 2016-06-02 15:28:37 -04:00
Frédéric Junod
3d8ca68bac Merge pull request #5421 from probins/patch-1
Correct typo in config/jsdoc/api/readme.md
2016-06-02 17:03:58 +02:00
Peter Robins
3b1c76a1da Correct typo in config/jsdoc/api/readme.md 2016-06-02 15:29:41 +01:00
Frédéric Junod
578b653c40 Merge pull request #5417 from openlayers/greenkeeper-clean-css-3.4.16
Update clean-css to version 3.4.16 🚀
2016-06-02 11:52:35 +02:00
greenkeeperio-bot
da5f47999f chore(package): update clean-css to version 3.4.16
https://greenkeeper.io/
2016-06-02 03:19:55 -06:00
Frédéric Junod
d51fecd827 Merge pull request #5413 from openlayers/greenkeeper-clean-css-3.4.15
Update clean-css to version 3.4.15 🚀
2016-06-01 11:37:50 +02:00
greenkeeperio-bot
370f810f6b chore(package): update clean-css to version 3.4.15
https://greenkeeper.io/
2016-06-01 03:22:28 -06:00
Frédéric Junod
d270643ce1 Merge pull request #5410 from openlayers/greenkeeper-eslint-2.11.1
Update eslint to version 2.11.1 🚀
2016-05-31 08:46:17 +02:00
greenkeeperio-bot
1e2ea333cc chore(package): update eslint to version 2.11.1
https://greenkeeper.io/
2016-05-31 08:35:42 +02:00
Frédéric Junod
a9df88004c Merge pull request #5408 from openlayers/greenkeeper-pbf-2.0.1
Update pbf to version 2.0.1 🚀
2016-05-30 09:45:44 +02:00
greenkeeperio-bot
f477a6ccb9 chore(package): update pbf to version 2.0.1
https://greenkeeper.io/
2016-05-30 01:27:19 -06:00
Frédéric Junod
2305991ee9 Merge pull request #5404 from openlayers/greenkeeper-eslint-2.11.0
Update eslint to version 2.11.0 🚀
2016-05-30 09:27:05 +02:00
greenkeeperio-bot
3bdcdb5937 chore(package): update eslint to version 2.11.0
https://greenkeeper.io/
2016-05-27 13:24:13 -06:00
Bart van den Eijnden
bb8b43abce Merge pull request #5402 from anzhihun/master
Pass in srsName option to writeTransaction
2016-05-27 11:49:06 +02:00
Wei Lin
4877a7864c Pass in srsName option to writeTransaction
Fix #5397 :  By passing `srsName` option to `ol.format.WFS.writeTransaction`
2016-05-27 17:36:37 +08:00
Frédéric Junod
1b70931433 Merge pull request #5393 from openlayers/greenkeeper-mocha-2.5.3
Update mocha to version 2.5.3 🚀
2016-05-25 14:17:47 +02:00
greenkeeperio-bot
0acbaa20f9 chore(package): update mocha to version 2.5.3
https://greenkeeper.io/
2016-05-25 05:39:47 -06:00
Frédéric Junod
d2c8823359 Merge pull request #5394 from openlayers/greenkeeper-resemblejs-2.2.1
Update resemblejs to version 2.2.1 🚀
2016-05-25 13:39:33 +02:00
greenkeeperio-bot
2cac34e938 chore(package): update resemblejs to version 2.2.1
https://greenkeeper.io/
2016-05-25 04:25:06 -06:00
Frédéric Junod
15ede94380 Merge pull request #5390 from fredj/wmts_guess_encoding
Fix the requestEncoding automatic selection
2016-05-25 10:29:27 +02:00
Frederic Junod
bd0140f42d Fix the requestEncoding automatic selection
If the `requestEncoding` parameter was not provided, the function used `KVP`
but without checking if it was supported.
2016-05-25 09:57:49 +02:00
Frédéric Junod
f3248e9c19 Merge pull request #5392 from openlayers/greenkeeper-closure-util-1.14.0
Update closure-util to version 1.14.0 🚀
2016-05-25 09:49:47 +02:00
Frederic Junod
420374294b Remove unnecessaryCasts compiler check
Removed from the compiler, see:
https://github.com/google/closure-compiler/wiki/Releases#may-17-2016-v20160517
2016-05-25 09:38:33 +02:00
greenkeeperio-bot
271e7c5bb1 chore(package): update closure-util to version 1.14.0
https://greenkeeper.io/
2016-05-25 01:28:55 -06:00
Frédéric Junod
b434a30603 Merge pull request #5388 from openlayers/greenkeeper-mocha-2.5.2
Update mocha to version 2.5.2 🚀
2016-05-24 13:28:20 +02:00
greenkeeperio-bot
ec1d21e29a chore(package): update mocha to version 2.5.2
https://greenkeeper.io/
2016-05-24 04:16:05 -06:00
Frédéric Junod
4e1decab52 Merge pull request #5382 from twpayne/igc-date
Handle UTC midnight wrap around, fixes #5371
2016-05-24 09:08:21 +02:00
Frédéric Junod
92632f1d63 Merge pull request #5381 from openlayers/greenkeeper-mocha-2.5.1
Update mocha to version 2.5.1 🚀
2016-05-24 08:49:25 +02:00
Frédéric Junod
2063c1be71 Merge pull request #5383 from openlayers/greenkeeper-clean-css-3.4.13
Update clean-css to version 3.4.13 🚀
2016-05-24 08:49:12 +02:00
greenkeeperio-bot
77baa67e71 chore(package): update mocha to version 2.5.1
https://greenkeeper.io/
2016-05-24 08:28:18 +02:00
Andreas Hocevar
f3e6630db3 Merge v3.16.0 2016-05-23 21:01:54 +02:00
Andreas Hocevar
1038b2abea Update package version to v3.16.0 2016-05-23 20:49:32 +02:00
Andreas Hocevar
e0cada9c5d Changelog for v3.16.0 2016-05-23 20:49:05 +02:00
Tom Payne
a6a621834f Handle UTC midnight wrap around, fixes #5371 2016-05-23 20:36:01 +02:00
greenkeeperio-bot
4653a01ba4 chore(package): update clean-css to version 3.4.13
https://greenkeeper.io/
2016-05-23 04:04:44 -06:00
Frédéric Junod
7196e18479 Merge pull request #5377 from fredj/jspdf.min.js
Fix link to jspdf.min.js in export-pdf example
2016-05-23 11:23:03 +02:00
Frederic Junod
e70ce9d624 Fix link to jspdf.min.js in export-pdf example 2016-05-23 10:57:19 +02:00
Frédéric Junod
0efb3994eb Merge pull request #5372 from openlayers/greenkeeper-jquery-2.2.4
Update jquery to version 2.2.4 🚀
2016-05-23 08:36:03 +02:00
greenkeeperio-bot
d666bb4a36 chore(package): update jquery to version 2.2.4
https://greenkeeper.io/
2016-05-20 11:32:25 -06:00
Tim Schaub
50408d7c1a Merge pull request #5364 from tschaub/less-flashy
Make it so things don't flash so much when you change the tile source URL.
2016-05-19 09:26:42 -06:00
Tim Schaub
d50082b860 Upgrade note regarding tile rendering 2016-05-19 09:17:23 -06:00
Tim Schaub
ac4653ada5 Tests for source.setKey() 2016-05-19 09:09:52 -06:00
Tim Schaub
feb6fe9dce Tests for setUrl() and setUrls() 2016-05-19 09:09:52 -06:00
Tim Schaub
b2b902e22f Less weird name 2016-05-19 09:09:52 -06:00
Tim Schaub
6f5965f6a5 Demonstrate how source.setUrl() works 2016-05-19 09:09:52 -06:00
Tim Schaub
9870e8c04c Allow XYZ source construction without options 2016-05-19 09:09:52 -06:00
Tim Schaub
5542f045d5 Less special handling for WMTS tiles 2016-05-19 09:09:52 -06:00
Tim Schaub
025c063251 Less special handling for WMS tiles 2016-05-19 09:09:52 -06:00
Tim Schaub
841c8a5747 Rename source.getKeyParams() to source.getKey() 2016-05-19 09:09:52 -06:00
Tim Schaub
81d5849207 Add a settable key for all tile sources
The source's key is used as the key for all tiles in the source.  For URL tile sources, the URL is the key.
2016-05-19 09:09:52 -06:00
Andreas Hocevar
bbd1af6056 Merge pull request #5368 from probins/wfs
Move WFS typedefs to typedefs.js
2016-05-19 14:52:54 +02:00
Frédéric Junod
e3f58b3e84 Merge pull request #5369 from Turbo87/patch-2
format/igc: Remove duplicate regex exec() call
2016-05-19 14:48:08 +02:00
Tobias Bieniek
d52586d586 format/igc: Remove duplicate regex exec() call
HFDTE_RECORD_RE_.exec(line) has already been called above
2016-05-19 14:35:15 +02:00
Peter Robins
4044ae4cd0 Move WFS typedefs to typedefs.js
By renaming them so they're no longer in any subnamespaces, they no longer need to be in their own file.
2016-05-19 08:48:43 +00:00
Andreas Hocevar
be2fc808be Merge pull request #5363 from probins/camels
Convert all typedefs to CamelCase
2016-05-19 09:12:38 +02:00
Frédéric Junod
d08cca5a0c Merge pull request #5362 from openlayers/greenkeeper-vector-tile-1.2.1
Update vector-tile to version 1.2.1 🚀
2016-05-19 08:31:37 +02:00
Peter Robins
2117f2e3b1 Convert all typedefs to CamelCase 2016-05-18 19:44:45 +00:00
greenkeeperio-bot
1345d049b1 chore(package): update vector-tile to version 1.2.1
https://greenkeeper.io/
2016-05-18 12:58:43 -06:00
Andreas Hocevar
9f501aeb0e Merge pull request #5352 from marlowp/Issue#5030
Add getResolutions() to ol.View
2016-05-18 18:03:09 +02:00
Andreas Hocevar
8afae37c4c Merge pull request #5359 from probins/notes
Move upgrade notes to correct place
2016-05-18 17:56:30 +02:00
Andreas Hocevar
2bff721227 Merge pull request #5343 from probins/nonapitypedefs
Rename non-api sub-namespace typedefs
2016-05-18 17:34:08 +02:00
Frédéric Junod
7a1756d8a9 Merge pull request #5361 from fredj/maki_url
Fix url to maki icons
2016-05-18 17:05:04 +02:00
Frederic Junod
412dc0457e Fix url to maki icons 2016-05-18 16:48:03 +02:00
Tobias Sauerwein
693e91970e Merge pull request #5358 from tsauerwein/ms-wfs-multiple-types
Handle multiple featureMember elements for different types (WFS format)
2016-05-18 15:12:57 +02:00
Peter Robins
557a3aee04 Move upgrade notes to correct place 2016-05-18 09:35:27 +00:00
tsauerwein
7080c508a4 Handle multiple featureMember elements for different types 2016-05-18 11:26:13 +02:00
Frédéric Junod
bc95ec053c Merge pull request #5355 from fredj/navigation-controls_descr
Fix navigation-controls example description
2016-05-18 08:25:54 +02:00
Andreas Hocevar
443d252ec1 Merge pull request #5353 from probins/api
Add API definition to docs landing page
2016-05-17 22:05:12 +02:00
Frédéric Junod
9a83339724 Merge pull request #5356 from openlayers/greenkeeper-rbush-1.4.3
Update rbush to version 1.4.3 🚀
2016-05-17 16:33:16 +02:00
Peter Robins
1a1d55d54e Add API policy to docs landing page 2016-05-17 14:27:12 +00:00
greenkeeperio-bot
57e9e96e5f chore(package): update rbush to version 1.4.3
https://greenkeeper.io/
2016-05-17 08:19:17 -06:00
Frederic Junod
5949170df0 Fix navigation-controls example description 2016-05-17 10:24:21 +02:00
Frédéric Junod
70dd26a412 Merge pull request #5354 from openlayers/greenkeeper-eslint-2.10.2
Update eslint to version 2.10.2 🚀
2016-05-17 08:26:49 +02:00
greenkeeperio-bot
21e8f69d97 chore(package): update eslint to version 2.10.2
https://greenkeeper.io/
2016-05-16 14:40:01 -06:00
Peter Marlow
9b9d006d75 Tests for #getResolutions on ol.View
Created tests for new getResolutions() function on ol.View.
2016-05-15 16:48:09 +01:00
Peter Marlow
350c4d525b Added getResolutions() function to ol.View
New getResolutions() function created for ol.View. This function returns
the array of resolutions passed to the ol.View constructor, or undefined
if none were given.
2016-05-15 16:47:27 +01:00
Andreas Hocevar
1c03814860 Merge pull request #5347 from openlayers/greenkeeper-eslint-2.10.1
Update eslint to version 2.10.1 🚀
2016-05-15 11:46:00 +02:00
greenkeeperio-bot
532275e779 chore(package): update eslint to version 2.10.1
https://greenkeeper.io/
2016-05-14 09:57:15 -06:00
Andreas Hocevar
ef52a757b1 Merge pull request #5344 from probins/rasterenum
Remove raster enum from test
2016-05-14 01:53:58 +02:00
Tim Schaub
048865d975 Merge pull request #5329 from tschaub/utfgrid
UTFGrid updates.
2016-05-13 12:59:56 -06:00
Tim Schaub
fb402d120e Removing access_token in notes for v3 use 2016-05-13 12:08:59 -06:00
Tim Schaub
5a5ad7ce31 Correct types 2016-05-13 12:08:59 -06:00
Tim Schaub
476191b0d0 Notes on using the v4 Mapbox API 2016-05-13 12:08:59 -06:00
Tim Schaub
94b8c853a7 Use legacy UTFGrid source (which doesn't require a token) 2016-05-13 12:08:59 -06:00
Tim Schaub
a810feb257 Test XHR loading 2016-05-13 12:08:58 -06:00
Tim Schaub
5c07628044 Return id if no data is present 2016-05-13 12:08:58 -06:00
Attila Berényi
4c82b3403c Use XHR by default 2016-05-13 12:08:58 -06:00
Peter Robins
cce7b148bb Remove raster enum from test 2016-05-13 16:26:26 +00:00
Peter Robins
176ddd3403 Rename non-api sub-namespace typedefs 2016-05-13 10:24:57 +00:00
Andreas Hocevar
4626554a18 Merge pull request #5335 from probins/typedefs
Move typedefs to separate file
2016-05-13 10:23:14 +02:00
Andreas Hocevar
9523fb6edd Merge pull request #5332 from ahocevar/examples-outdated-warning
Warn when viewing an outdated example, and offer a redirect to latest
2016-05-12 19:23:09 +02:00
Andreas Hocevar
31d0278dfb Merge pull request #5342 from ahocevar/fix-source-links
Fix incorrect source links
2016-05-12 18:55:35 +02:00
Andreas Hocevar
e74434299e Fix incorrect source links 2016-05-12 18:51:54 +02:00
Andreas Hocevar
3fc70bac00 Merge pull request #5339 from ahocevar/div-instead-of-alert
Use a div instead of alert for version warning
2016-05-12 18:20:56 +02:00
Andreas Hocevar
0d2b833e06 Use a div instead of alert for version warning
With this change, it is also no longer necessary to display the version in the
navigation bar. The accidently removed doctype is also brought back.
2016-05-12 17:13:44 +02:00
Andreas Hocevar
19692ed60a Warn when viewing an outdated example, and offer a redirect to latest 2016-05-12 13:40:48 +02:00
Peter Robins
0daa2cf574 Document typedef move 2016-05-12 07:45:48 +00:00
Peter Robins
dd358af0f2 Fix WFS errors by moving typedefs to own file
The WFS typedefs are the only sub-sub-namespace ones which are marked 'api', so cannot be renamed. Moving them to their own file resolves the errors.
2016-05-12 07:31:50 +00:00
Peter Robins
ab9ff536f5 Add goog.provides to typedefs.js to prevent compiler warnings
Without this there are 'defined before its owner' warnings, and issues of missing namespaces when compiling code with the library.
2016-05-11 19:51:14 +00:00
Peter Robins
c7aeebed8c Rename sub-sub-namespace typedefs to sub-namespace
These sub-sub-namespace typedefs are only used internally; some of them cause problems by creating a form of circular dependency. For example, ol.style.Atlas is created in style/atlasmanager.js; if ol.style.Atlas.Block is in a separate file, ol.style.Atlas is dependent on it, so the new file must precede ol.style.Atlas. However if it precedes it then it has to create the ol.style.Atlas namespace which should be created by atlasmanager.js. To get round this, these typedefs are renamed to remove the sub-sub-namespace.

Fortunately they are all non-api, so the rename should not affect anything.
2016-05-11 19:46:56 +00:00
Peter Robins
a1c86ed560 Fix eventTargetLike
This needs a goog.provide and a goog.require in events.js to compile.
2016-05-11 19:46:38 +00:00
Peter Robins
4f0b4dacbd Move sub-namespace typedefs to typedefs.js
Here too there is one problem case.
2016-05-11 19:45:59 +00:00
Peter Robins
ed34caa25a Fix ogc/filter
This only compiles if there is goog.provide('ol.Extent') in the typedefs file, and goog.require('ol.Extent') in this file. An alternative is to add an assert statement, but this means an extra dependency.

With this change there is no longer a need for the change to tasks/build.js
2016-05-11 17:18:05 +00:00
Peter Robins
535e8f5e35 Move top-level typedefs to typedefs.js
With one exception, those directly in the `ol` namespace can be moved without problem.
Some left-over goog.requires are also removed.
2016-05-11 17:18:05 +00:00
Frédéric Junod
d0e5b1e395 Merge pull request #5320 from fredj/modify_condition
Add a 'condition' option to ol.interaction.Modify
2016-05-11 17:15:41 +02:00
Andreas Hocevar
49e2fd0df3 Merge pull request #5333 from openlayers/improve-comments
Improve code readability with better comments
2016-05-11 16:13:15 +02:00
Andreas Hocevar
d59ace1a61 Improve code readability with better comments 2016-05-11 15:46:39 +02:00
Andreas Hocevar
d6395a3c82 Merge pull request #5330 from ahocevar/doc-fixes-improvements
Fix source links, display version and warn about outdated docs
2016-05-11 13:00:41 +02:00
Andreas Hocevar
d27ea0974e Fix source links, display version and warn about outdated docs 2016-05-11 12:45:58 +02:00
Frederic Junod
b49546d2af Add a 'condition' option to ol.interaction.Modify 2016-05-10 17:17:17 +02:00
Andreas Hocevar
8c8c4c3df4 Merge pull request #5324 from probins/rmrequires
Remove unneeded goog.provides/requires for typedefs
2016-05-10 16:31:42 +02:00
Tim Schaub
fa067b7e8a Merge pull request #5328 from tschaub/node-6
Use Node 6 on Travis.
2016-05-10 06:58:37 -06:00
Andreas Hocevar
c4387c14ff Merge pull request #5313 from ahocevar/rastersource-framestate-extent
Rastersource framestate extent
2016-05-10 14:35:25 +02:00
Tim Schaub
afcaa2ea51 Use Node 6 on Travis 2016-05-10 05:52:41 -06:00
Tobias Sauerwein
e55dc30257 Merge pull request #5326 from tsauerwein/example-clean-up
Fix wording in tile-load-event example
2016-05-10 11:39:25 +02:00
Andreas Hocevar
cb50e4a102 Merge pull request #5327 from openlayers/greenkeeper-closure-util-1.13.1
Update closure-util to version 1.13.1 🚀
2016-05-10 11:15:41 +02:00
greenkeeperio-bot
7d805393fc chore(package): update closure-util to version 1.13.1
https://greenkeeper.io/
2016-05-10 02:39:51 -06:00
tsauerwein
684d49cb78 Fix wording 2016-05-10 10:21:44 +02:00
Peter Robins
2a44669e18 Add some goog.requires to keep compiler happy 2016-05-09 16:00:07 +00:00
Andreas Hocevar
39087b2fa4 Reuse the frameState extent 2016-05-09 15:23:00 +02:00
Andreas Hocevar
5c76cb01af Use a snapshot of the frameState extent 2016-05-09 15:23:00 +02:00
Peter Robins
f57065c412 Remove unneeded goog.provides/requires for typedefs
In general, typedefs do not need and should not have goog.require/provide
2016-05-09 13:21:25 +00:00
Tim Schaub
e94939d01b Merge pull request #5289 from openlayers/greenkeeper-fs-extra-0.30.0
Update fs-extra to version 0.30.0 🚀
2016-05-09 06:42:20 -06:00
Tim Schaub
56a365acf4 Merge pull request #5319 from probins/patch-1
Remove outdated fixme from framestate.js.
2016-05-09 06:41:01 -06:00
Andreas Hocevar
fbb9194923 Merge pull request #5274 from samuellapointe/logofix
Allow using elements in logo attribution options
2016-05-09 13:46:11 +02:00
Peter Robins
ffe8daec66 Remove outdated fixme from framestate.js 2016-05-09 09:18:56 +01:00
Bart van den Eijnden
7984cc2b57 Merge pull request #5162 from probins/strategy
Improve docs/examples for loadingstrategy
2016-05-09 09:43:25 +02:00
greenkeeperio-bot
7944144c65 chore(package): update fs-extra to version 0.30.0
https://greenkeeper.io/
2016-05-09 01:08:25 -06:00
Frédéric Junod
ae46b40def Merge pull request #5314 from openlayers/greenkeeper-browserify-13.0.1
Update browserify to version 13.0.1 🚀
2016-05-09 09:08:11 +02:00
Andreas Hocevar
ed421ce4b2 Merge pull request #5315 from probins/tilecoordtransformtype
Remove unused ol.TileCoordTransformType
2016-05-07 12:06:57 +01:00
Peter Robins
51397ee294 Remove unused ol.TileCoordTransformType 2016-05-07 10:35:11 +00:00
greenkeeperio-bot
d316651c35 chore(package): update browserify to version 13.0.1
https://greenkeeper.io/
2016-05-06 09:48:53 -04:00
Tim Schaub
ff37fe128f Merge pull request #5310 from tschaub/fix-raster
Get raster sources working again.
2016-05-04 14:25:02 -04:00
Andreas Hocevar
72468f3470 Merge pull request #5291 from ahocevar/dispatch-while-dispatching-once-listener
Allow once listeners to dispatch events of same type
2016-05-04 12:10:21 -04:00
Andreas Hocevar
b2c6bb11cf Allow once listeners to dispatch events of same type 2016-05-04 11:55:30 -04:00
Frédéric Junod
088c439c34 Merge pull request #5309 from openlayers/greenkeeper-metalsmith-layouts-1.6.5
Update metalsmith-layouts to version 1.6.5 🚀
2016-05-04 08:32:16 +02:00
Tim Schaub
0b4ef31750 Get raster sources working again
This reverts 8e1ffbf91e
2016-05-03 17:47:05 -04:00
greenkeeperio-bot
f3cc873d65 chore(package): update metalsmith-layouts to version 1.6.5
https://greenkeeper.io/
2016-05-03 11:34:34 -04:00
Frédéric Junod
b1648c949e Merge pull request #5052 from openlayers/greenkeeper-fs-extra-0.26.7
Update fs-extra to version 0.26.7 🚀
2016-05-03 15:04:48 +02:00
Tobias Sauerwein
18520cd89d Merge pull request #5306 from gberaudo/unrequire_padding
Make olx.view.FitOptions.padding optional
2016-05-03 13:58:28 +02:00
Guillaume Beraudo
e2b2004aa4 Make olx.view.FitOptions.padding optional
Makes it consistent with other attributes.
2016-05-03 13:44:58 +02:00
Frédéric Junod
a6a0c88641 Merge pull request #5302 from fredj/rm_goog.partial
Remove use of goog.partial
2016-05-03 08:30:00 +02:00
greenkeeperio-bot
54e1e3408b chore(package): update fs-extra to version 0.26.7
https://greenkeeper.io/
2016-05-03 00:29:33 -06:00
Frédéric Junod
9ea297c54f Merge pull request #5304 from openlayers/greenkeeper-sinon-1.17.4
Update sinon to version 1.17.4 🚀
2016-05-03 08:29:18 +02:00
greenkeeperio-bot
5044c49ac3 chore(package): update sinon to version 1.17.4
https://greenkeeper.io/
2016-05-02 11:20:11 -06:00
Samuel Lapointe
f835d86333 Reduce closure dependency, fix GET issue 2016-05-02 09:34:58 -04:00
Frederic Junod
7c15280e81 Remove use of goog.partial
Use Function.prototype.bind instead, see:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind#Partially_applied_functions_(currying)
2016-05-02 14:52:09 +02:00
Frédéric Junod
9f3c951c71 Merge pull request #4644 from fredj/rm_check-requires
Remove check-requires script
2016-05-02 09:52:39 +02:00
Frederic Junod
6abecb0192 Remove check-requires script
The missingProvide and missingRequire compiler checks are already checking
if the goog.require and goog.provide are correct.
2016-05-02 09:29:42 +02:00
Marc Jansen
4e17f58b26 Merge pull request #5298 from openlayers/greenkeeper-eslint-2.9.0
Update eslint to version 2.9.0 🚀
2016-04-29 22:33:29 +02:00
greenkeeperio-bot
15b6921bc9 chore(package): update eslint to version 2.9.0
https://greenkeeper.io/
2016-04-29 11:24:56 -06:00
Andreas Hocevar
c7898bcb0e Merge pull request #5296 from probins/patch-1
Document handling of KML MultiGeometries
2016-04-29 12:04:18 +02:00
Peter Robins
c28fd2ae1c Document handling of KML MultiGeometries 2016-04-29 10:56:43 +01:00
Andreas Hocevar
690ef18ee2 Merge pull request #5293 from giohappy/master
Block removePoint while dragging
2016-04-29 10:46:40 +02:00
giohappy
cd2ea6c7d6 Block removePoint during while dragging 2016-04-29 09:00:14 +02:00
Marc Jansen
36b8f31f40 Merge pull request #5285 from marcjansen/scaleline-tests
Add more tests for the scaleline control
2016-04-28 13:23:50 +02:00
Andreas Hocevar
0151d802d3 Merge pull request #5287 from ahocevar/vectortile-tests
Add and fix vectortile tests
2016-04-28 13:07:29 +02:00
Andreas Hocevar
a54c686691 Merge pull request #5288 from giohappy/master
Expose removeVertex_ as removePoint
2016-04-28 13:01:11 +02:00
Andreas Hocevar
ebc28aefd4 Add and fix vectortile tests 2016-04-28 12:57:27 +02:00
giohappy
d49bcdeedc Expose removeVertex_ as removePoint 2016-04-28 12:47:46 +02:00
Andreas Hocevar
2939ebc9b9 Merge pull request #5286 from ahocevar/only-render-whats-necessary
Skip unnecessary render functions
2016-04-28 11:18:35 +02:00
Andreas Hocevar
c17e23f2ae Skip unnecessary render functions 2016-04-28 10:22:20 +02:00
Marc Jansen
73a04c14f5 Add more tests for the scaleline control 2016-04-28 10:04:52 +02:00
Andreas Hocevar
88d20a69ad Merge pull request #5177 from ahocevar/vector-tile-hybrid-rendering
Add render options for vector tile layers
2016-04-28 09:04:45 +02:00
Frédéric Junod
138fe6ede1 Merge pull request #5278 from fredj/cleanup
Fix invalid generics type instantiation
2016-04-28 08:27:15 +02:00
Andreas Hocevar
12849a678e Add note about opaque option removal 2016-04-27 17:50:38 +02:00
Andreas Hocevar
c72a39ff53 Coding style fixes 2016-04-27 17:33:55 +02:00
Andreas Hocevar
ec832243a2 Add comment making clear that 'vector' mode does not generate images 2016-04-27 17:31:20 +02:00
Andreas Hocevar
c5f81a5706 Unconditionally call drawImage - image is always available 2016-04-27 17:31:20 +02:00
Frederic Junod
664507b79b Fix invalid generics type instantiation 2016-04-27 14:51:31 +02:00
Andreas Hocevar
c3217e8d30 Merge pull request #5044 from fblackburn/snapinteraction
Snap interaction now handle feature without geometry properly
2016-04-27 14:25:17 +02:00
Frédéric Junod
e3e0d23a83 Merge pull request #5277 from fredj/cleanup
Type cleanup
2016-04-27 13:24:05 +02:00
Frederic Junod
6002d4c3e8 Remove duplicate type in type annotation 2016-04-27 12:24:01 +02:00
Frederic Junod
63ebed437b Don't use the string constructor 2016-04-27 12:22:43 +02:00
Andreas Hocevar
762aa3029c Merge pull request #5275 from ahocevar/fix-select-getlayer
Fix feature-layer association on replaced selections
2016-04-27 10:40:43 +02:00
Tobias Sauerwein
1ca28506ac Merge pull request #5252 from tsauerwein/wfs-getfeature-filter
Add filter option to ol.format.WFS#writeGetFeature
2016-04-27 09:11:55 +02:00
Andreas Hocevar
c11e95099c Fix feature-layer association on replaced selections 2016-04-27 08:13:45 +02:00
Samuel Lapointe
3a1ff59cfb Allow using elements in logo attribution options
This commit lets the user use an element object instead of a {src: href} object for an attribution logo when creating a map. This opens a lot of possibilities for that logo, for example setting the target to force the logo to open in a new tab when clicked.
2016-04-26 15:30:09 -04:00
Francois Blackburn
9186d1fbda Snap interaction now handle feature without geometry properly 2016-04-26 14:14:47 -04:00
tsauerwein
2f72804fc3 Add example for writeGetFeature 2016-04-26 16:36:57 +02:00
tsauerwein
af294bd44e Add filter option to ol.format.WFS#writeGetFeature 2016-04-26 16:36:50 +02:00
Andreas Hocevar
ed6ac93222 Merge pull request #5264 from matjos/master
Fix for close draw polygon error
2016-04-26 10:52:28 +02:00
Mattias Josefsson
8f96251618 Added wanted change for issue #5145 2016-04-26 10:34:55 +02:00
Andreas Hocevar
343f41e99e Merge pull request #5267 from ahocevar/no-goog-functions
Use ol.functions instead of goog.functions
2016-04-25 16:03:31 +02:00
Andreas Hocevar
255e449dd3 Merge pull request #5266 from ahocevar/colorlike-doc
Document ol.colorlike
2016-04-25 15:53:57 +02:00
Andreas Hocevar
b37cd3fae6 Use ol.functions instead of goog.functions 2016-04-25 15:46:00 +02:00
Andreas Hocevar
d425f75bea Merge pull request #5261 from giohappy/master
add finishCondition to ol.interaction.Draw
2016-04-25 15:42:39 +02:00
Andreas Hocevar
989c04cf12 Document ol.colorlike 2016-04-25 15:33:46 +02:00
Mattias Josefsson
e85d8fa749 Fix for close draw polygon error 2016-04-25 11:48:55 +02:00
giohappy
394ef94fd3 Fix finishCondition test 2016-04-22 23:17:21 +02:00
giohappy
5934f9d416 add olx.interaction.DrawOptions.prototype.finishCondition to typedef 2016-04-22 15:21:11 +02:00
giohappy
ead6063170 make lint happy with drawinteraction.test.js 2016-04-22 15:16:11 +02:00
giohappy
c7af6bd494 Add ol.interaction.Draw.finishCondition to olx.js 2016-04-22 15:11:54 +02:00
giohappy
2076ef02ca Add test for finishCondition 2016-04-22 15:07:59 +02:00
giohappy
130b4d9459 add finishCondition to ol.interaction.Draw 2016-04-22 11:07:42 +02:00
Andreas Hocevar
60926626df Merge pull request #5259 from ahocevar/squash-changelog
Include squash commit merges in changelog
2016-04-22 09:36:46 +02:00
Andreas Hocevar
405ed2af56 Include squash commit merges in changelog 2016-04-21 16:20:03 +02:00
Andreas Hocevar
44f09497f0 Merge pull request #5257 from bjornharrtell/mvt-api
Add readFeatures and readProjection as MVT experimental API
2016-04-21 15:38:45 +02:00
Björn Harrtell
c40993d0d3 Add readFeatures and readProjection as MVT experimental API 2016-04-21 14:16:06 +02:00
Anna Lambrechtsen
18a29ea6d3 Add ol.source.ImageArcGISRest (#3880)
* Add ol.source.ImageArcGISRest

ol.source.ImageArcGISRest is added so a single image can be retrieved
which is required when labelling is applied to the underlying map
service.
it's based on the approach used in ol.source.ImageWMS

* updating to remove as many good references as possible
changing so js passes lint checks

* fixing up so build and tests run

* putting back what was lost in the merge

* adding in an example
tidying up
2016-04-20 11:19:53 +02:00
Andreas Hocevar
f7147960a9 Add render options for vector tile layers 2016-04-19 13:04:38 +02:00
Tim Schaub
0e4692e69e Merge pull request #5239 from openlayers/greenkeeper-eslint-2.8.0
Update eslint to version 2.8.0 🚀
2016-04-16 08:48:53 -06:00
greenkeeperio-bot
3de5a021a9 chore(package): update eslint to version 2.8.0
http://greenkeeper.io/
2016-04-15 12:02:15 -06:00
Frédéric Junod
b7278f184c Merge pull request #5230 from fredj/reuse_frameState
Reuse frame state arrays
2016-04-14 14:57:30 +02:00
Frédéric Junod
e46c8370d5 Merge pull request #5213 from fredj/rm_ol.source.Source.prototype.setProjection
Remove unused ol.source.Source#setProjection function
2016-04-14 12:43:14 +02:00
Frédéric Junod
dca7d6fc8f Merge pull request #5223 from fredj/memory
Create tmpSize_ before calling calculateTileRanges_
2016-04-14 12:43:01 +02:00
Frédéric Junod
db9dbc96b2 Merge pull request #5225 from fredj/rm_ol.extent.transform2D
Remove unused ol.extent.transform2D function
2016-04-14 12:42:48 +02:00
Tim Schaub
2496662070 Merge pull request #5212 from probins/kmlwrite
KML: fix GeometryCollection write
2016-04-14 04:27:18 -06:00
Frédéric Junod
8e3e47bed4 Merge pull request #5228 from adube/translate-layers-filter
Add 'layers' option to Translate interaction
2016-04-14 10:44:34 +02:00
Frederic Junod
92c96b95f9 Reuse the frame state viewHints array if defined 2016-04-14 10:36:12 +02:00
Frederic Junod
8e1ffbf91e Reuse the frame state extent array if defined 2016-04-14 10:32:10 +02:00
Frédéric Junod
8562c9a4fc Merge pull request #5221 from fredj/examples_deps_update
Update jquery, bootstrap and proj4js in examples
2016-04-14 08:35:35 +02:00
Frédéric Junod
400204357f Merge pull request #5227 from fredj/less_garbage
Add a temporary ol.TileCoord in ol.renderer.canvas.TileLayer
2016-04-14 08:33:40 +02:00
Alexandre Dubé
e6e9b12bac Add 'layers' option to Translate interaction 2016-04-13 13:35:36 -04:00
Frederic Junod
a2c3dfd5de Add a temporary ol.TileCoord in ol.renderer.canvas.TileLayer
Avoid garbage creation
2016-04-13 17:21:10 +02:00
Frederic Junod
72e354dce3 Remove unused ol.extent.transform2D function 2016-04-13 17:18:57 +02:00
Frédéric Junod
f92a38b28c Merge pull request #5222 from fredj/unused_vars
Remove unused private variables in ol.renderer.canvas.Map
2016-04-13 17:15:52 +02:00
Frédéric Junod
c15f8c8f07 Merge pull request #5220 from fredj/externs_cleanup
Externs cleanup
2016-04-13 17:15:32 +02:00
Frédéric Junod
de4e51efe8 Merge pull request #5224 from fredj/fix_indent
Fix jsdoc tags indentation
2016-04-13 17:15:00 +02:00
Tim Schaub
d4ac5800d5 Merge pull request #5218 from aisaacs/export-cartodb-setconfig
Add @api annotation to setConfig.
2016-04-13 09:11:12 -06:00
Frederic Junod
9507020218 Fix jsdoc tags indentation 2016-04-13 15:13:50 +02:00
Frederic Junod
ccfc3f7798 Create tmpSize_ before calling calculateTileRanges_ 2016-04-13 12:19:00 +02:00
Frederic Junod
593132c902 Remove unused private variables in ol.renderer.canvas.Map 2016-04-13 10:54:11 +02:00
Frederic Junod
6a6a906e83 Update proj4js to version 2.2.14 2016-04-13 09:28:26 +02:00
Frederic Junod
ed4ac8d83b Update jquery to version 2.2.3 2016-04-13 09:25:37 +02:00
Frederic Junod
35f0928802 Update bootstrap to version 3.3.6 2016-04-13 09:21:20 +02:00
Frederic Junod
044f6638ea Remove externs/jspdf.js and add NOCOMPILE to examples/export-pdf.js 2016-04-13 09:00:02 +02:00
Frederic Junod
936d38ca6f Remove unused externs/webgl-debug.js 2016-04-13 08:56:29 +02:00
Alessandro Isaacs
737daaeea9 Add @api annotation to setConfig 2016-04-12 08:26:30 -07:00
Frédéric Junod
01a6612ab3 Merge pull request #5215 from fredj/getClosestFeatureToCoordinate_filter
Add an optional feature filter to getClosestFeatureToCoordinate
2016-04-12 12:44:11 +02:00
Frederic Junod
05ceaab620 Add an optional feature filter to getClosestFeatureToCoordinate 2016-04-12 12:17:07 +02:00
Frederic Junod
f9fd73c44e Remove unused ol.source.Source#setProjection function 2016-04-11 15:43:25 +02:00
Peter Robins
27f20e2f54 KML: fix GeometryCollection write 2016-04-11 12:36:07 +00:00
Frédéric Junod
50b956b108 Merge pull request #5132 from nicholas-l/removeGoogString
Remove goog.string
2016-04-11 10:28:32 +02:00
Frédéric Junod
33db3d4941 Merge pull request #5206 from probins/patch-1
Minor correction of StyleFunction docs
2016-04-11 09:42:57 +02:00
Frédéric Junod
06ac1b603c Merge pull request #4932 from fredj/undef_WMSGetFeatureInfo
Remove undefined parameters to ol.format.WMSGetFeatureInfo#readFeatures_
2016-04-11 08:41:43 +02:00
Frédéric Junod
fb96ed94ec Merge pull request #5207 from openlayers/greenkeeper-clean-css-3.4.12
Update clean-css to version 3.4.12 🚀
2016-04-11 08:41:06 +02:00
greenkeeperio-bot
664efa18fc chore(package): update clean-css to version 3.4.12
http://greenkeeper.io/
2016-04-09 09:30:50 -06:00
Peter Robins
2a64d9ef55 Minor correction of StyleFunction docs 2016-04-08 18:35:16 +01:00
Andreas Hocevar
1ecd47aeb9 Merge pull request #5201 from probins/patch-2
Small clarification for vector source loader docs
2016-04-08 12:17:03 +02:00
Bart van den Eijnden
bb5b461192 Merge pull request #5200 from bartvde/issue-5199
Fix typo in rotate control for css classList
2016-04-08 11:01:09 +02:00
Peter Robins
9fb4a88841 Small clarification for vector source loader docs 2016-04-08 09:52:54 +01:00
Bart van den Eijnden
231234f9d0 Fix typo in rotate control for css classList 2016-04-08 10:51:26 +02:00
nicholas
c92223d792 Remove Goog.string 2016-04-08 18:09:57 +12:00
Nicholas Latham
cd6494149b Remove goog.global (#5178)
* Remove goog.global

* Correct externs location

* Use Function('return this')

* Remove global externs
2016-04-07 23:36:48 +02:00
Andreas Hocevar
6efd3dab0b Add rendering tests to ensure correct circle and polygon rendering (#5189) 2016-04-07 18:03:57 +02:00
Frédéric Junod
935eb9994c Merge pull request #5192 from openlayers/release-v3.15.1
Release 3.15.1
2016-04-07 16:55:15 +02:00
Frederic Junod
cd32875f37 Update package version to 3.15.1 2016-04-07 16:50:59 +02:00
Frédéric Junod
6fc4427f4f Merge pull request #5191 from openlayers/release-v3.15.1
Release v3.15.1
2016-04-07 16:50:11 +02:00
Frederic Junod
481bcbd5b3 Changelog for v3.15.1 2016-04-07 16:34:17 +02:00
Andreas Hocevar
880d4b89a2 Revert "Batch polygon fill and stroke instructions" 2016-04-07 16:31:08 +02:00
Andreas Hocevar
fe33910ec2 Revert "Batch polygon fill and stroke instructions" 2016-04-07 16:30:04 +02:00
Frédéric Junod
c9ffcef766 Merge pull request #5183 from openlayers/greenkeeper-istanbul-0.4.3
Update istanbul to version 0.4.3 🚀
2016-04-07 13:44:03 +02:00
greenkeeperio-bot
8c9ac5932f chore(package): update istanbul to version 0.4.3
http://greenkeeper.io/
2016-04-07 12:15:38 +02:00
Frédéric Junod
6be704af69 Merge pull request #5187 from fredj/rm_goog.functions
Remove goog.functions.and from ol.interaction.Modify
2016-04-07 12:14:58 +02:00
Frederic Junod
c549fadc01 Remove goog.functions.and from ol.interaction.Modify 2016-04-07 11:46:52 +02:00
Frederic Junod
e099dcd9a9 Simplify ol.interaction.KeyboardPan#defaultCondition_
No need to invoke the function with 'call'
2016-04-07 11:44:23 +02:00
Renaud Michaëlis
53a9341ef0 Allow to delete the starting or ending vertex
* Allow to delete the starting or ending vertex

* Test if starting and ending vertex are removed
2016-04-06 13:47:37 +02:00
Nicholas Latham
18e9ff98ee Remove goog.labs.userAgent
* Remove goog.labs.*

* Change to function

* Change window to this

* Use goog.global
2016-04-06 11:05:49 +02:00
Frédéric Junod
f011b5266e Merge pull request #5176 from openlayers/greenkeeper-jquery-2.2.3
Update jquery to version 2.2.3 🚀
2016-04-06 08:36:12 +02:00
greenkeeperio-bot
d275b1cf74 chore(package): update jquery to version 2.2.3
http://greenkeeper.io/
2016-04-05 13:33:14 -06:00
Frédéric Junod
b691c47e78 Merge pull request #5173 from fredj/use_ol.dom.createCanvasContext2D
Use ol.dom.createCanvasContext2D
2016-04-05 14:42:49 +02:00
Frederic Junod
f2c30cffe2 Use ol.dom.createCanvasContext2D in ol.style.AtlasManager 2016-04-05 14:29:00 +02:00
Frederic Junod
f645d81fee Use ol.dom.createCanvasContext2D in ol.source.ImageStatic 2016-04-05 14:29:00 +02:00
Frederic Junod
38718ee5e6 Use ol.dom.createCanvasContext2D in ol.style.Circle 2016-04-05 14:29:00 +02:00
Frederic Junod
fc6b078642 Use ol.dom.createCanvasContext2D in ol.style.RegularShape 2016-04-05 14:29:00 +02:00
Frédéric Junod
587e8a6ecd Merge pull request #5171 from fredj/attribution_like_typedef
Move olx.source.AttributionOption out of externs/olx.js
2016-04-05 14:25:51 +02:00
Frederic Junod
db9c6a99c8 Move olx.source.AttributionOption out of externs/olx.js 2016-04-05 09:15:15 +02:00
Frédéric Junod
5302882fba Merge pull request #5170 from openlayers/greenkeeper-eslint-2.7.0
Update eslint to version 2.7.0 🚀
2016-04-05 08:29:56 +02:00
greenkeeperio-bot
60fb3b55ff chore(package): update eslint to version 2.7.0
http://greenkeeper.io/
2016-04-04 17:48:52 -06:00
Frédéric Junod
f20e446689 Merge pull request #5167 from fredj/rm_FastClick
Remove FastClick from mobile-full-screen example
2016-04-04 17:01:52 +02:00
Frédéric Junod
e36ffca838 Merge pull request #5166 from fredj/simplify_measure_example
Remove jquery dependency from measure example
2016-04-04 16:31:45 +02:00
Frederic Junod
4b832708e5 Remove FastClick from mobile-full-screen example 2016-04-04 16:31:28 +02:00
Frederic Junod
a7f61e6dda Remove jquery dependency from measure example 2016-04-04 16:14:11 +02:00
Frédéric Junod
825d525d3f Merge pull request #5164 from fredj/cartodb_cleanup
Cartodb cleanup
2016-04-04 14:55:27 +02:00
Frederic Junod
a42d76d69d Use ol.object.assign to update config properties in ol.source.CartoDB 2016-04-04 12:45:26 +02:00
Frederic Junod
02d262e387 Fix ol.source.CartoDB 'loading' state 2016-04-04 12:41:42 +02:00
Frédéric Junod
fe372847f8 Merge pull request #5163 from openlayers/release-v3.15.0
Release v3.15.0
2016-04-04 11:02:00 +02:00
Frederic Junod
9a57c8745e Update package version to 3.15.0 2016-04-04 10:40:12 +02:00
Frederic Junod
84401c132f Changelog for v3.15.0 2016-04-04 10:40:12 +02:00
Nicholas Latham
2ee1969de7 Remove goog.math.modulo and goog.math.lerp 2016-04-04 09:43:24 +02:00
Frédéric Junod
19fd3d6987 Merge pull request #5152 from fredj/cartodb_cleanup
Cartodb cleanup
2016-04-04 09:38:41 +02:00
Frédéric Junod
4b14c86fd1 Merge pull request #4804 from fredj/rm_goog.isArray
Use Array.isArray instead of goog.isArray
2016-04-04 09:25:41 +02:00
Andreas Hocevar
c535cf04e2 Merge pull request #5149 from ahocevar/batch-polygon-fill-stroke
Batch polygon fill and stroke instructions
2016-04-04 09:17:52 +02:00
Frederic Junod
80e984a9c3 Use Array.isArray instead of goog.isArray 2016-04-04 09:06:29 +02:00
Peter Robins
1cd7b76efe Improve docs/examples for loadingstrategy 2016-04-02 13:09:44 +00:00
Andreas Hocevar
fb4992b580 Merge pull request #5159 from openlayers/greenkeeper-eslint-2.6.0
Update eslint to version 2.6.0 🚀
2016-04-02 10:47:25 +02:00
Andreas Hocevar
4141572725 Merge pull request #5160 from openlayers/greenkeeper-clean-css-3.4.11
Update clean-css to version 3.4.11 🚀
2016-04-02 10:46:17 +02:00
greenkeeperio-bot
02f4f8b1d5 chore(package): update clean-css to version 3.4.11
http://greenkeeper.io/
2016-04-01 14:52:42 -06:00
greenkeeperio-bot
0dc7313afb chore(package): update eslint to version 2.6.0
http://greenkeeper.io/
2016-04-01 12:14:37 -06:00
Andreas Hocevar
3ba2d71784 Merge pull request #5157 from probins/measure
Improve docs for measure example
2016-04-01 17:49:29 +02:00
Peter Robins
3416991166 Improve docs for measure example 2016-04-01 13:39:06 +00:00
Frédéric Junod
106657572d Merge pull request #5155 from fredj/ff_zoomify_tests
Fix ol.source.Zoomify tests on firefox
2016-04-01 14:15:51 +02:00
Frederic Junod
c9aff61110 Fix ol.source.Zoomify tests on firefox 2016-04-01 13:36:43 +02:00
Frederic Junod
e222409f50 Add externs for CartoDB response 2016-04-01 10:55:38 +02:00
Frederic Junod
b96de85044 Add cacheSize option to olx.source.CartoDBOptions 2016-04-01 10:44:31 +02:00
Frederic Junod
3f0de09dd7 Fix ol.source.CartoDB goog.base params 2016-04-01 10:44:31 +02:00
Frederic Junod
13a0eb4ca7 Add jsdoc tags in ol.source.CartoDB constructor 2016-04-01 10:44:31 +02:00
Frederic Junod
fb6353a816 Fix olx.source.CartoDBOptions definition 2016-04-01 10:44:31 +02:00
Frederic Junod
24665747b3 Fix cartodb links 2016-04-01 10:44:31 +02:00
Frederic Junod
c2749bbdd1 Fix olx.source.CartoDBOptions#attributions type 2016-04-01 10:44:31 +02:00
Marc Jansen
4077886165 Merge pull request #5086 from bjornharrtell/rm_goog.functions
Get rid of goog.functions
2016-04-01 10:44:03 +02:00
Björn Harrtell
44e04be67f Get rid of goog.functions 2016-04-01 10:32:15 +02:00
Frédéric Junod
baf5287ad2 Merge pull request #5105 from fredj/stamen_minZoom
Support minZoom in ol.source.Stamen
2016-04-01 09:56:20 +02:00
Frederic Junod
548e4abd35 Support minZoom in ol.source.Stamen 2016-04-01 09:46:36 +02:00
Tim Schaub
cc9d4d8794 Merge pull request #4926 from aisaacs/cartodb
Add CartoDB tile source.
2016-03-31 17:35:54 -07:00
Andreas Hocevar
ee53fd772d Remove unnecessary duplicated polygon close points 2016-03-31 14:47:07 +02:00
Andreas Hocevar
18f3d7243d Batch polygon fill and stroke instructions 2016-03-31 13:26:42 +02:00
Marc Jansen
dfc1bb7592 Merge pull request #5151 from marcjansen/fse-fs
Use fs-extra as fs, remove usage of graceful-fs
2016-03-31 11:34:39 +02:00
Marc Jansen
5a00289e8e Remove usage of graceful-fs 2016-03-31 10:30:58 +02:00
Marc Jansen
d3de8c38b5 Use fs-extra as fs 2016-03-31 10:30:58 +02:00
Andreas Hocevar
627632ce1b Merge pull request #5124 from nicholas-l/removeDOMClassList
Removed goog.dom.classlist
2016-03-31 10:25:05 +02:00
Frédéric Junod
c3447873b6 Merge pull request #5150 from fredj/rm_wrench
Use fs-extra instead of wrench
2016-03-31 10:10:36 +02:00
Frederic Junod
03d78cdd1c Use removeSync function from fs-extra 2016-03-31 09:52:26 +02:00
Frederic Junod
19b0c65e4c Use fs-extra instead of wrench 2016-03-31 09:27:56 +02:00
nicholas
4d26305564 Add polyfill for IE 2016-03-31 19:25:42 +13:00
nicholas
863589e5ed Remove commented out code 2016-03-31 19:09:13 +13:00
nicholas
68fd5267c2 Removed goog.dom.classlist.enable 2016-03-31 19:09:13 +13:00
nicholas
126e49cd39 Removed goog.dom.classlist.contains 2016-03-31 19:09:13 +13:00
nicholas
b9073013db Remove goog.classlist.toggle 2016-03-31 19:09:13 +13:00
nicholas
8f8068b88c Removed goog.dom.classlist 2016-03-31 19:09:13 +13:00
Alessandro Isaacs
85f11b093d Use XHR 2016-03-30 15:05:43 -07:00
Alessandro Isaacs
4a33db370b Update example yml 2016-03-30 11:45:20 -07:00
Alessandro Isaacs
2fd6352a57 Use https always 2016-03-30 11:45:20 -07:00
Alessandro Isaacs
94998c8ec7 Update olx 2016-03-30 11:45:20 -07:00
Alessandro Isaacs
8389c16315 Add CartoDB tile source. 2016-03-30 11:45:20 -07:00
Marc Jansen
cf9e24feb1 Merge pull request #5109 from marcjansen/tileutfgridsource-tests
Add some tests for ol.source.TileUTFGrid
2016-03-30 17:49:39 +02:00
Marc Jansen
f4b4e26f19 Add some tests for ol.source.TileUTFGrid 2016-03-30 16:46:35 +02:00
Frédéric Junod
e5012856a1 Merge pull request #5139 from openlayers/greenkeeper-closure-util-1.13.0
Update closure-util to version 1.13.0 🚀
2016-03-30 14:53:55 +02:00
Frederic Junod
927d73d410 Add missing return jsdoc annotations 2016-03-30 09:02:12 +02:00
Frederic Junod
f29bc74b7f Ignore unnecessaryCasts errors 2016-03-30 09:02:12 +02:00
greenkeeperio-bot
03038b123f chore(package): update closure-util to version 1.13.0
http://greenkeeper.io/
2016-03-30 09:02:11 +02:00
Frédéric Junod
bc1b9b9677 Merge pull request #5141 from fredj/reuse_array
Reuse dragListenerKeys_ variable in ol.control.ZoomSlider
2016-03-30 08:55:56 +02:00
Frederic Junod
0bb3f1e228 Reuse dragListenerKeys_ variable in ol.control.ZoomSlider 2016-03-29 16:52:28 +02:00
Frédéric Junod
8ef230768b Merge pull request #5118 from fredj/rm_goog.dom.classlist
Remove goog.dom.classlist usage
2016-03-29 10:46:13 +02:00
Frederic Junod
64654e1e72 Remove goog.dom.classlist usage 2016-03-29 10:28:20 +02:00
Marc Jansen
ae905593b3 Merge pull request #5115 from marcjansen/line-dash-doc
Clarify that lineDash has no effect in IE 10 and below
2016-03-29 10:15:09 +02:00
Marc Jansen
09370952fd Clarify that lineDash has no effect in IE < 10 2016-03-29 09:58:41 +02:00
Frédéric Junod
9425088610 Merge pull request #5136 from openlayers/greenkeeper-eslint-2.5.3
Update eslint to version 2.5.3 🚀
2016-03-29 09:54:22 +02:00
greenkeeperio-bot
94f83b53df chore(package): update eslint to version 2.5.3
http://greenkeeper.io/
2016-03-29 09:22:58 +02:00
Frédéric Junod
b3796aa3a1 Merge pull request #5123 from openlayers/greenkeeper-coveralls-2.11.9
Update coveralls to version 2.11.9 🚀
2016-03-29 09:17:26 +02:00
greenkeeperio-bot
5276fd0580 chore(package): update coveralls to version 2.11.9
http://greenkeeper.io/
2016-03-29 09:06:01 +02:00
Frédéric Junod
2f67fca2a6 Merge pull request #5131 from openlayers/greenkeeper-phantomjs-prebuilt-2.1.7
Update phantomjs-prebuilt to version 2.1.7 🚀
2016-03-29 09:03:24 +02:00
greenkeeperio-bot
690152a07b chore(package): update phantomjs-prebuilt to version 2.1.7
http://greenkeeper.io/
2016-03-25 15:51:40 -06:00
Andreas Hocevar
feabf58740 Merge pull request #5122 from probins/patch-1
Update browser support info in intro tutorial
2016-03-25 19:14:18 +01:00
Peter Robins
8bf208558d Update browser support info in intro tutorial 2016-03-25 14:53:45 +00:00
Andreas Hocevar
d9d46bc1f7 Merge pull request #5112 from probins/decimals
Add decimals option to format write
2016-03-25 10:44:28 +01:00
Andreas Hocevar
f835364822 Merge pull request #5120 from ahocevar/utfgrid-config
Add tileJSON option to ol.source.TileUTFGrid
2016-03-24 23:13:19 +01:00
Andreas Hocevar
c0de5a6835 Add tileJSON option to ol.source.TileUTFGrid 2016-03-24 23:02:28 +01:00
Peter Robins
a18bf636f8 Add decimals option to format write 2016-03-24 17:14:02 +00:00
Frédéric Junod
2159a35bb8 Merge pull request #5119 from drnextgis/issue#5117
Add ol.source.Raster events on API docs page
2016-03-24 17:41:19 +01:00
drnextgis
f9a16898a5 Add ol.source.Raster events on API docs page 2016-03-24 22:25:48 +06:00
Andreas Hocevar
35ac1c4577 Merge pull request #5116 from ahocevar/responsive-examples
Improve examples pages on mobile devices a bit
2016-03-24 15:51:01 +01:00
Andreas Hocevar
26ed4c33a3 Improve examples pages on mobile devices a bit
Only show navigation when there is enough space.
2016-03-24 15:12:04 +01:00
Andreas Hocevar
3e5e271331 Merge pull request #5113 from AvatharDG/patch-1
Memory leak in ol.control.FullScreen
2016-03-24 11:09:04 +01:00
AvatharDG
e752a8cea3 Update fullscreencontrol.js 2016-03-24 09:41:01 +01:00
AvatharDG
290f8b5c7d Update fullscreencontrol.js 2016-03-24 09:39:31 +01:00
AvatharDG
c9cb9b6d36 Memory leak in ol.control.FullScreen
Register and unregister listener in setMap method.
2016-03-24 09:35:10 +01:00
Frédéric Junod
ce61fb300c Merge pull request #5111 from fredj/examples_cleanup
Remove CSS filter in examples
2016-03-23 17:18:26 +01:00
Frederic Junod
92ef1724d1 Remove CSS filter in examples
Was used to set the opacity for IE <= 8
2016-03-23 17:01:12 +01:00
Frédéric Junod
fe5219eb84 Merge pull request #5108 from fredj/rm_ol.xml.getAttributeNodeNS
Remove unused ol.xml.getAttributeNodeNS function
2016-03-23 15:39:37 +01:00
Frederic Junod
e9cf0bbf6e Remove unused ol.xml.getAttributeNodeNS function 2016-03-23 14:45:06 +01:00
Frédéric Junod
051ed439ca Merge pull request #5106 from fredj/rm_goog.math.Vec2
Get rid of goog.math.Vec2
2016-03-23 14:41:38 +01:00
Frederic Junod
e126df11e7 Remove use of goog.math.Vec2 2016-03-23 14:16:20 +01:00
Marc Jansen
e742181fe9 Merge pull request #5096 from marcjansen/zoomify-tests
Add tests for ol.source.Zoomify
2016-03-23 09:40:46 +01:00
Marc Jansen
399d8ce326 Add tests for ol.source.Zoomify 2016-03-23 09:22:17 +01:00
Marc Jansen
9fc2f5c19f Merge pull request #5102 from openlayers/jsonp-typo
Fix typo in API docs
2016-03-23 09:19:32 +01:00
Marc Jansen
0554c7f685 Fix typo in API docs 2016-03-23 09:11:10 +01:00
Andreas Hocevar
587817af94 Merge pull request #5098 from bjornharrtell/gl-log
Reintroduce log messages for relevant WebGL assertions
2016-03-22 17:54:44 +01:00
Björn Harrtell
a2a3ca84e2 Reintroduce log messages for relevant WebGL assertions 2016-03-22 16:35:46 +01:00
Andreas Hocevar
1634aaa9dd Merge pull request #5094 from probins/patch-2
FAQ: answer question 4
2016-03-22 14:53:28 +01:00
Peter Robins
f35887d6e7 FAQ: answer question 4 2016-03-22 13:17:44 +00:00
Frédéric Junod
14bed81994 Merge pull request #5092 from drnextgis/issue#5091
add raster.jsdoc
2016-03-22 09:55:35 +01:00
drnextgis
e00149562a add raster.jsdoc 2016-03-22 14:07:31 +06:00
Andreas Hocevar
0f86b1df69 Merge pull request #5081 from drnextgis/issue#3850
Snap to vertices or edges
2016-03-21 22:52:08 +01:00
Andreas Hocevar
5001f0896e Merge pull request #5090 from probins/patch-1
Update custom-builds.md
2016-03-21 17:56:18 +01:00
Andreas Hocevar
579ce6c5ad Merge pull request #5089 from probins/point
Test for both transform coords should use roughlyEqual
2016-03-21 16:53:03 +01:00
Peter Robins
4e3d6bd556 Update custom-builds.md 2016-03-21 14:37:40 +00:00
Peter Robins
caf3e4b062 Test for both transform coords should use roughlyEqual 2016-03-21 14:21:56 +00:00
Andreas Hocevar
cf6baf2cd1 Merge pull request #5080 from probins/geomcoll
Fix geojson write GeometryCollection
2016-03-21 13:28:46 +01:00
Peter Robins
e65c522cb4 Fix geojson write GeometryCollection 2016-03-21 12:11:31 +00:00
Andreas Hocevar
1e8f0026eb Merge pull request #5088 from probins/patch-1
DEVELOPING.md: remove section on running Travis on fork
2016-03-21 12:09:44 +01:00
Peter Robins
bd47db8a55 DEVELOPING.md: remove section on running Travis on fork 2016-03-21 10:32:24 +00:00
drnextgis
d41bfde25d snap to vertices or edges 2016-03-21 16:19:36 +06:00
Andreas Hocevar
7990bb3bf6 Merge pull request #5087 from drnextgis/issue#2974
assertion to check that there's a DOM node for target element
2016-03-21 11:11:59 +01:00
drnextgis
c6f568f99b assertion to check that there's a DOM node for target element 2016-03-21 16:02:13 +06:00
Frédéric Junod
f380f34468 Merge pull request #5069 from openlayers/greenkeeper-jquery-2.2.2
Update jquery to version 2.2.2 🚀
2016-03-21 08:53:49 +01:00
greenkeeperio-bot
d8f7aa193c chore(package): update jquery to version 2.2.2
http://greenkeeper.io/
2016-03-21 08:44:06 +01:00
Tim Schaub
d7ad543c12 Merge pull request #5083 from tschaub/canvas-immediate
Remove unnecessary lineTo calls in immediate polygon rendering
2016-03-20 21:50:40 -06:00
Tim Schaub
8437f95c86 Merge pull request #5082 from bjornharrtell/rm_goog.log
Get rid of goog.log.
2016-03-19 20:16:06 -06:00
Tim Schaub
01d2b84ee1 Merge pull request #5079 from tschaub/word
Correcting a typo in the upgrade notes
2016-03-19 16:55:13 -06:00
Tim Schaub
cd70f58e34 Rendering tests for vector context 2016-03-19 16:45:26 -06:00
Björn Harrtell
234e8c2fde Get rid of goog.log 2016-03-19 23:12:56 +01:00
Tim Schaub
22d03cb2ee Avoid duplicate lineTo and correctly close rings 2016-03-19 16:12:38 -06:00
Andreas Hocevar
309843b53d Merge pull request #5076 from openlayers/greenkeeper-phantomjs-prebuilt-2.1.6
Update phantomjs-prebuilt to version 2.1.6 🚀
2016-03-19 19:02:32 +01:00
Tim Schaub
f0cca94456 Correcting a typo in the upgrade notes 2016-03-18 22:41:19 -06:00
Tim Schaub
a421b4fb65 Merge pull request #5077 from tschaub/more-immediate
Make immediate API uniformly synchronous.
2016-03-18 18:00:33 -06:00
Tim Schaub
ed71cf74f6 Upgrade note on zIndex for drawFeature() styles 2016-03-18 17:52:16 -06:00
Tim Schaub
0eb7e8220d Immediate rendering for all vector contexts 2016-03-18 17:31:14 -06:00
Tim Schaub
f0814628b7 Synchronous rendering only 2016-03-18 17:26:10 -06:00
Tim Schaub
ec2daf2118 Make drawFeature() immediate 2016-03-18 17:26:10 -06:00
Tim Schaub
ef0487c3ab Merge pull request #5072 from tschaub/immediate-api
Add setStyle() and drawGeometry() to the immediate rendering API.
2016-03-18 17:18:08 -06:00
Tim Schaub
42c2dd8702 More geometry 2016-03-18 17:04:50 -06:00
Tim Schaub
42f41e1cf4 Variable named geometry 2016-03-18 17:04:50 -06:00
Tim Schaub
05cf57dcfc Remove unused arg 2016-03-18 17:04:50 -06:00
Tim Schaub
51dfe89425 Add assert message 2016-03-18 17:04:49 -06:00
Tim Schaub
1339d6b3a6 Correct to upgrade notes 2016-03-18 17:04:49 -06:00
Tim Schaub
d0b2016bb6 Add setStyle() to WebGL immediate API 2016-03-18 17:04:49 -06:00
Tim Schaub
f77c7dded2 Add drawGeometry() to WebGL immediate API 2016-03-18 17:04:49 -06:00
Tim Schaub
88f8515fb6 Shorter names for drawing methods 2016-03-18 17:04:44 -06:00
Tim Schaub
2133d6d081 Document the immediate rendering API 2016-03-18 17:03:18 -06:00
Tim Schaub
ef40f66c93 Use setStyle() and drawGeometry() in examples 2016-03-18 17:03:18 -06:00
Tim Schaub
cf0c4dcf3f Add methods to base class 2016-03-18 17:03:17 -06:00
Tim Schaub
873e4176c6 Add vectorContext.drawGeometry() method 2016-03-18 17:03:17 -06:00
Tim Schaub
8f0f278832 Add vectorContext.setStyle() method 2016-03-18 17:03:17 -06:00
Andreas Hocevar
109bda60d0 Merge pull request #5074 from ahocevar/stitch-rotated-tiles
Do not rotate map canvas after composition
2016-03-18 23:29:14 +01:00
greenkeeperio-bot
3492628dc4 chore(package): update phantomjs-prebuilt to version 2.1.6
http://greenkeeper.io/
2016-03-18 16:03:52 -06:00
Andreas Hocevar
19cfc140a8 Merge pull request #5071 from drnextgis/issue#5070
correct way to determine freehand mode is enabled
2016-03-18 23:02:32 +01:00
Andreas Hocevar
577e45cd97 Do not rotate map canvas after composition
This requires to draw tile layers to an intermediate canvas again, but
only when the view is rotated.
2016-03-18 21:53:19 +01:00
drnextgis
658a2b317e correct way to determine freehand mode is enabled 2016-03-18 11:10:27 +06:00
Bart van den Eijnden
9c573a5b3c Merge pull request #5066 from bartvde/getters
Add more getters to ol.source.Vector
2016-03-17 15:58:31 +01:00
Bart van den Eijnden
908d4051cd Add more getters to ol.source.Vector 2016-03-17 15:35:51 +01:00
Marc Jansen
a81150508d Merge pull request #5064 from probins/clonedocs
Fix inconsistency in geom docs
2016-03-17 11:45:20 +01:00
Peter Robins
8f9a8e9bb1 Fix inconsistency in geom docs 2016-03-17 10:13:30 +00:00
Andreas Hocevar
5ba64024ab Merge pull request #5063 from drnextgis/issue#5062
Remove inappropriate information from API docs
2016-03-17 09:34:07 +01:00
drnextgis
f4bb232279 remove inappropriate information from API docs 2016-03-17 12:50:52 +06:00
Marc Jansen
242a0937a3 Merge pull request #5061 from drnextgis/apidoc
Remove redundant required option
2016-03-17 07:22:01 +01:00
drnextgis
a857a66a98 remove redundant required option 2016-03-17 07:19:11 +06:00
Andreas Hocevar
def755f1eb Merge pull request #5058 from probins/patch-1
Note in docs that DOM renderer can also render vectors
2016-03-16 17:34:06 +01:00
Peter Robins
6f2747cf14 Note in docs that DOM renderer can also render vectors 2016-03-16 16:30:59 +00:00
Frédéric Junod
0181e525ce Merge pull request #5056 from probins/patch-1
Note in docs that WebGL can render points
2016-03-16 17:01:22 +01:00
Peter Robins
5da0fe3300 Note in docs that WebGL can render points 2016-03-16 15:41:57 +00:00
Andreas Hocevar
2f079ad059 Merge pull request #5055 from probins/kmlscalecruft
Fix cruft on kml scale output
2016-03-16 16:34:01 +01:00
Peter Robins
9ba4208616 Fix cruft on kml scale output 2016-03-16 15:12:23 +00:00
Frédéric Junod
4b5bb42961 Merge pull request #5051 from fredj/remove_aborted_tiles
Handle aborted tiles in ol.TileQueue
2016-03-16 14:38:59 +01:00
Frederic Junod
24886f2710 Add more ol.TileQueue tests 2016-03-16 14:21:21 +01:00
Frederic Junod
c30ecace75 Handle aborted tiles in ol.TileQueue 2016-03-16 14:21:20 +01:00
Frederic Junod
b0984070db Don't load an already loading tile 2016-03-16 14:21:20 +01:00
Marc Jansen
1c57686d1f Merge pull request #5049 from marcjansen/assume-getComputedStyle
Supported browsers all have getComputedStyle
2016-03-16 11:30:06 +01:00
Marc Jansen
0d24be6767 Supported browsers all have getComputedStyle 2016-03-16 11:16:14 +01:00
Marc Jansen
074eff1efd Merge pull request #5048 from marcjansen/dom-tests
Add tests for ol.dom methods
2016-03-16 10:59:40 +01:00
Marc Jansen
648011c64d Remove unneeded and wrong goog.provide 2016-03-16 10:48:06 +01:00
Marc Jansen
37899a3feb Add tests for ol.dom methods 2016-03-16 10:48:06 +01:00
Andreas Hocevar
d46407f7b6 Merge pull request #5031 from drnextgis/zoomout
support zooming out for ol.interaction.DragZoom
2016-03-16 10:45:09 +01:00
drnextgis
7b1e92580d zooming out option for ol.interaction.DragZoom 2016-03-16 11:47:18 +06:00
Andreas Hocevar
88701db4c4 Merge pull request #5036 from ahocevar/icon-imgsize
Use imgSize when provided
2016-03-15 18:56:27 +01:00
Andreas Hocevar
339c7c5c23 Use imgSize when provided 2016-03-15 16:17:11 +01:00
Andreas Hocevar
08b19549ce Merge pull request #5020 from openlayers/greenkeeper-gaze-1.0.0
Update gaze to version 1.0.0 🚀
2016-03-15 14:58:05 +01:00
Andreas Hocevar
f58b7cf347 Merge pull request #5039 from openlayers/greenkeeper-fs-extra-0.26.6
Update fs-extra to version 0.26.6 🚀
2016-03-15 14:39:52 +01:00
Andreas Hocevar
3186a411b2 Update closure-util to compatible version 1.12.0 2016-03-15 14:28:42 +01:00
greenkeeperio-bot
10fa741476 chore(package): update fs-extra to version 0.26.6
http://greenkeeper.io/
2016-03-15 04:46:30 -07:00
Andreas Hocevar
44d0578389 Merge pull request #5033 from probins/patch-1
Document GPX geometry output types
2016-03-15 00:18:03 +01:00
Peter Robins
0a3b7e56a9 Document GPX geometry output types 2016-03-14 16:56:23 +00:00
Andreas Hocevar
9db16bfa94 Merge pull request #5024 from ahocevar/less-aggressive-canvas-resizing
Resize the map canvas less aggressively
2016-03-14 09:41:53 +01:00
Frédéric Junod
c0b27bca8f Merge pull request #5000 from fredj/rm_goog.style.setBorderBoxSize
Remove use of goog.math.Size and goog.style.setBorderBoxSize
2016-03-14 08:53:32 +01:00
Frederic Junod
93abfc9a03 Remove use of goog.style.setBorderBoxSize 2016-03-14 08:45:18 +01:00
Frederic Junod
8eb3e55aa0 Remove use of goog.math.Size 2016-03-14 08:45:18 +01:00
Bart van den Eijnden
a2175afcad Merge pull request #5027 from probins/patch-1
Clarify default value of featureProjection on geometry write
2016-03-14 08:39:02 +01:00
Peter Robins
67e511765a Clarify default value of featureProjection on write 2016-03-13 16:30:30 +00:00
Andreas Hocevar
5b21ab8811 Merge pull request #5019 from openlayers/greenkeeper-eslint-2.4.0
Update eslint to version 2.4.0 🚀
2016-03-12 16:36:52 +01:00
Andreas Hocevar
a3cc322593 Fix indentation 2016-03-12 16:25:38 +01:00
Andreas Hocevar
600c139a61 Resize the map canvas less aggressively 2016-03-12 14:13:28 +01:00
greenkeeperio-bot
6c191d0fef chore(package): update gaze to version 1.0.0
http://greenkeeper.io/
2016-03-11 21:54:46 -07:00
greenkeeperio-bot
9365fbdb7e chore(package): update eslint to version 2.4.0
http://greenkeeper.io/
2016-03-11 15:06:34 -07:00
Marc Jansen
9cc628939a Merge pull request #5016 from marcjansen/centerflatgeom-tests
Add basic tests for ol.geom.flat.center
2016-03-11 17:22:13 +01:00
Marc Jansen
410dddaa46 Add basic tests for ol.geom.flat.center 2016-03-11 13:51:10 +01:00
Andreas Hocevar
7230b83cbd Merge pull request #5015 from openlayers/greenkeeper-proj4-2.3.14
Update proj4 to version 2.3.14 🚀
2016-03-11 11:37:20 +01:00
greenkeeperio-bot
194c47d962 chore(package): update proj4 to version 2.3.14
http://greenkeeper.io/
2016-03-11 02:45:20 -07:00
Marc Jansen
da40527077 Merge pull request #5013 from openlayers/test-typo
Fix typo in test description
2016-03-11 09:45:28 +01:00
Marc Jansen
c1263af9b1 Fix typo in test description 2016-03-11 09:25:50 +01:00
Marc Jansen
3197972e14 Merge pull request #5007 from marcjansen/plain-attr
Accept simpler forms of specifying attribution(s) for sources.
2016-03-11 09:15:03 +01:00
Marc Jansen
5b43e8a31e Use simple forms to create attributions in examples 2016-03-11 09:04:06 +01:00
Marc Jansen
df4f1c1389 Accept simpler attributions in sources 2016-03-11 09:04:06 +01:00
Andreas Hocevar
74006a91fe Merge pull request #5011 from ahocevar/vectortile-setprojection
Add missing setProjection function to ol.VectorTile API
2016-03-10 20:01:29 +01:00
Andreas Hocevar
fdee0d73de Merge pull request #5010 from ahocevar/event-docs-externs
Add and fix API docs for ol.events.Event stack
2016-03-10 19:57:57 +01:00
Andreas Hocevar
3164dc874e Add missing setProjection function to ol.VectorTile API 2016-03-10 19:50:30 +01:00
Andreas Hocevar
7c5e1b808d Add and fix API docs for ol.events.Event stack 2016-03-10 17:35:55 +01:00
Andreas Hocevar
fb6cd4f586 Merge pull request #5009 from gberaudo/update_tutorials
Update tutorials
2016-03-10 16:20:35 +01:00
Guillaume Beraudo
166dd98b72 Simplify and modernize closure tutorial
Use jscomp_error * and keep most advanced options for the last example.
2016-03-10 16:04:46 +01:00
Guillaume Beraudo
fedf477f29 Simplify custom-builds tutorial
Remove, the disturbing goog.dom.ASSUME_STANDARDS_MODE define.
Remove jscomp_off stuff.
2016-03-10 16:03:03 +01:00
Andreas Hocevar
bf30e86b84 Merge pull request #5006 from ahocevar/update-slimerjs
Use the maintained slimerjs package
2016-03-10 13:53:52 +01:00
Andreas Hocevar
6062128b4b Use the maintained slimerjs package 2016-03-10 12:25:16 +01:00
Frédéric Junod
cda6d678dc Merge pull request #5003 from fredj/jsdoc_rotate
Add 'function' jsdoc tag to ol.geom.Geometry#rotate
2016-03-10 08:39:48 +01:00
Frederic Junod
0dd36736c7 Add 'function' jsdoc tag to ol.geom.Geometry#rotate
Otherwise the function is in the 'Members' section of the API documentation.
2016-03-10 08:30:10 +01:00
Tim Schaub
6e45eef2a0 Merge pull request #5002 from openlayers/greenkeeper-eslint-config-openlayers-4.1.0
Update eslint-config-openlayers to version 4.1.0 🚀
2016-03-09 07:13:31 -07:00
greenkeeperio-bot
a118eeded9 chore(package): update eslint-config-openlayers to version 4.1.0
http://greenkeeper.io/
2016-03-09 05:44:50 -07:00
Frédéric Junod
ef2121bb70 Merge pull request #4999 from fredj/rm_goog.dom.removeNode
Remove use of goog.dom.removeNode
2016-03-09 13:16:51 +01:00
Frederic Junod
8a6962da9e Remove use of goog.dom.removeNode 2016-03-09 11:45:04 +01:00
Frédéric Junod
02aee14600 Merge pull request #4990 from fredj/getTileJSON
Add new ol.source.TileJSON#getTileJSON function
2016-03-09 11:44:35 +01:00
Frederic Junod
4157882f2e Add new ol.source.TileJSON#getTileJSON function 2016-03-09 10:55:19 +01:00
Frédéric Junod
441a7c093f Merge pull request #4998 from fredj/rm_map_isDef
Remove unused ol.Map#isDef function
2016-03-09 09:26:28 +01:00
Frederic Junod
cb251f1648 Remove unused ol.Map#isDef function 2016-03-09 08:36:36 +01:00
Tim Schaub
0b3155a47e Merge pull request #4995 from tschaub/uncolored
Remove unused ol.color functions.
2016-03-08 10:29:38 -07:00
Tim Schaub
249f3b2e47 Tests for ol.color.asString() 2016-03-08 10:05:54 -07:00
Tim Schaub
40397aa39e Tests for ol.color.asArray() 2016-03-08 10:05:54 -07:00
Tim Schaub
47a18d41f0 Remove unused ol.color.equals() 2016-03-08 10:05:53 -07:00
Tim Schaub
9ea9b29a69 Remove unused ol.color.transform() 2016-03-08 10:05:53 -07:00
Tim Schaub
8b1ad633be Remove unused ol.color.stringOrColorEquals() 2016-03-08 10:05:53 -07:00
Tim Schaub
7cf433eb68 Remove unused ol.color.blend() 2016-03-08 10:05:53 -07:00
Andreas Hocevar
091e8059c5 Merge pull request #4991 from ahocevar/soft-remove-listeners
Do not remove listeners while dispatching event
2016-03-08 17:46:03 +01:00
Frédéric Junod
fd256027ec Merge pull request #4984 from fredj/geom_rotate
Add new ol.geom.Geometry#rotate function
2016-03-08 17:17:09 +01:00
Frederic Junod
d5564a04db Add new ol.geom.Geometry#rotate function 2016-03-08 17:05:19 +01:00
Andreas Hocevar
0377e4a322 Add tests for corner cases 2016-03-08 17:04:25 +01:00
Frédéric Junod
6c74e90c5d Merge pull request #4994 from jonataswalker/array-alpha-color
Add alpha default value to ol.Color array form
2016-03-08 17:04:19 +01:00
jonataswalker
2564bb3e58 Add alpha default value to ol.Color array form 2016-03-08 12:43:42 -03:00
Andreas Hocevar
8a279dd94b Do not reset pendingRemovals if event is dispatched again 2016-03-08 15:54:51 +01:00
Andreas Hocevar
acd76a10b6 Clean up when propagation is stopped 2016-03-08 15:54:17 +01:00
Marc Jansen
b5dc619e0e Merge pull request #4992 from marcjansen/coverage-reporter
Allow configuration of the test reporter
2016-03-08 13:21:18 +01:00
Andreas Hocevar
93f26a90d0 Do not remove listeners while dispatching event 2016-03-08 13:11:22 +01:00
Marc Jansen
8c487d3036 Allow configuration of the test reporter
The reporter for the standard tests is still 'spec'; the one for the
gathering of code coverage is set to 'dot' to not clutter the output
of the logfile on travis.
2016-03-08 11:26:00 +01:00
Frédéric Junod
951b400227 Merge pull request #4988 from openlayers/greenkeeper-phantomjs-prebuilt-2.1.5
Update phantomjs-prebuilt to version 2.1.5 🚀
2016-03-08 08:35:20 +01:00
greenkeeperio-bot
f3479a4bc4 chore(package): update phantomjs-prebuilt to version 2.1.5
http://greenkeeper.io/
2016-03-07 11:31:59 -07:00
Andreas Hocevar
26078e1f34 Merge pull request #4983 from ahocevar/bing-maps-portal-url
Update Bing Maps Portal url
2016-03-07 15:33:34 +01:00
Andreas Hocevar
1cbb482900 Update Bing Maps Portal url 2016-03-07 14:52:14 +01:00
Frédéric Junod
a3d7a216d5 Merge pull request #4981 from fredj/dispose_viewport
Remove the viewport on map dispose
2016-03-07 12:10:11 +01:00
Frederic Junod
263f5bb8ab Remove the viewport on map dispose 2016-03-07 11:46:18 +01:00
Frédéric Junod
44de935ef0 Merge pull request #4980 from fredj/unused_require
Remove unused goog.require
2016-03-07 09:59:29 +01:00
Frederic Junod
8b95602211 Remove unused goog.require 2016-03-07 09:33:15 +01:00
Marc Jansen
dc2faea5eb Merge pull request #4977 from marcjansen/length-tests
Add basic tests for ol.geom.flat.length methods
2016-03-07 09:28:42 +01:00
Marc Jansen
2113c749b1 Add basic tests for ol.geom.flat.length methods 2016-03-06 15:08:40 +01:00
Andreas Hocevar
7fe1d1d68c Merge pull request #4973 from openlayers/greenkeeper-eslint-2.3.0
Update eslint to version 2.3.0 🚀
2016-03-05 07:38:29 +01:00
greenkeeperio-bot
bfb73c992e chore(package): update eslint to version 2.3.0
http://greenkeeper.io/
2016-03-04 17:57:19 -07:00
Andreas Hocevar
f1fee79ca4 Merge pull request #4971 from openlayers/release-v3.14.2
Release v3.14.2
2016-03-04 09:36:58 +01:00
Andreas Hocevar
4a73335839 Update package version to 3.14.2 2016-03-04 09:31:35 +01:00
Andreas Hocevar
124badb961 Changelog vor v3.14.2 2016-03-04 09:31:35 +01:00
Tim Schaub
8725b4fcf4 Merge pull request #4963 from tschaub/xhr-failures
Handle more XHR errors in the TileJSON source
2016-03-04 09:26:16 +01:00
Andreas Hocevar
d12dce1c03 Merge pull request #4960 from ahocevar/clip-rendered
Simplify clipping of lower resolution regions
2016-03-04 09:25:37 +01:00
Frédéric Junod
afb8efc0e9 Merge pull request #4958 from fredj/stop_wheel_events
Stop wheel events instead of DOMMouseScroll events
2016-03-04 09:25:14 +01:00
Andreas Hocevar
bef31dc386 Merge pull request #4956 from jonataswalker/fix-layout-examples
Fix Examples layout page
2016-03-04 09:24:54 +01:00
Tim Schaub
e8cd5e322f Merge pull request #4809 from fperucic/multpolygon-clone
Fix multipolygon clone.
2016-03-04 09:24:23 +01:00
Tim Schaub
82020bcd1f Merge pull request #4970 from tschaub/disposable-tests
Tests for ol.Disposable.
2016-03-03 09:35:29 -07:00
Frédéric Junod
258765dc48 Merge pull request #4967 from fredj/missing_goog.inherits
Add missing goog.inherits for ol.render.canvas.Immediate
2016-03-03 17:26:13 +01:00
Tim Schaub
787e5d4dbf Assert that map renderer is a disposable 2016-03-03 09:18:04 -07:00
Frederic Junod
3793bb18ae Add missing goog.inherits for ol.render.canvas.Immediate 2016-03-03 17:12:19 +01:00
Tim Schaub
167ee487d6 Assert that render box is a disposable 2016-03-03 09:05:08 -07:00
Tim Schaub
beb80ce987 Assert that event target is a disposable 2016-03-03 09:05:08 -07:00
Tim Schaub
0ab9dd8bd0 Tests for ol.Disposable 2016-03-03 09:05:02 -07:00
Frédéric Junod
9ba059a159 Merge pull request #4955 from fredj/ie_xml_workaround
Remove IE workarounds in src/ol/xml.js
2016-03-03 15:59:14 +01:00
Frederic Junod
7da7cba812 Don't use goog.dom.xml.createDocument
Use DOMImplementation.createDocument instead, available for IE >= 9
2016-03-03 15:46:29 +01:00
Frederic Junod
b09f7e30b2 Get rid of goog.dom.xml.serialize
Use XMLSerializer.serializeToString() function instead, available for IE >= 9
2016-03-03 15:46:29 +01:00
Frederic Junod
57f7811cd0 Remove ol.xml.isNode workaround for IE 2016-03-03 15:46:29 +01:00
Frederic Junod
90b4eea1cd Remove ol.xml.isDocument workaround for IE 2016-03-03 15:46:29 +01:00
Frederic Junod
544de3b91c Remove ol.xml.setAttributeNS workaround for IE 2016-03-03 15:46:29 +01:00
Frederic Junod
811eea0d3a Remove ol.xml.getAttributeNodeNS workaround for IE 2016-03-03 15:46:29 +01:00
Frederic Junod
e210328dba Remove ol.xml.getAttributeNS workaround for IE 2016-03-03 15:46:29 +01:00
Frederic Junod
1e98f1227b Remove ol.xml.createElementNS workaround for IE 2016-03-03 15:46:29 +01:00
Frederic Junod
b87a912ecc Remove ol.xml.getLocalName workaround for IE
This property is available for IE >= 9
2016-03-03 15:46:29 +01:00
Andreas Hocevar
750a01aa80 Merge pull request #4960 from ahocevar/clip-rendered
Simplify clipping of lower resolution regions
2016-03-03 15:44:47 +01:00
Tim Schaub
143af1e091 Merge pull request #4950 from tschaub/dispose
Remove use of goog.Disposable().
2016-03-03 07:44:39 -07:00
Tim Schaub
e1f0e8d75b No need for ol.webgl.Context to be an event target 2016-03-03 07:28:34 -07:00
Tim Schaub
2f9d4e68eb Unregister all listeners on the WebGL context's canvas 2016-03-03 07:26:45 -07:00
Frederic Junod
4eb6997be9 Remove undefined parameters to ol.format.WMSGetFeatureInfo#readFeatures_
`this.featureType` and `this.featureNS` are not defined in `ol.format.WMSGetFeatureInfo`
2016-03-03 09:38:18 +01:00
Tim Schaub
afb64ed2bf Make ol.webgl.Context an ol.events.EventTarget 2016-03-02 16:32:25 -07:00
Tim Schaub
71faef3dfd One fewer anonymous function 2016-03-02 15:44:07 -07:00
Tim Schaub
09eee46822 Use ol.Disposable instead of goog.Disposable 2016-03-02 15:44:07 -07:00
Tim Schaub
ae4d8195c0 Remove use of goog.dispose() 2016-03-02 15:44:06 -07:00
Tim Schaub
df4f154a93 Unused goog.dispose requires 2016-03-02 15:44:06 -07:00
Tim Schaub
34d8d77344 Merge pull request #4963 from tschaub/xhr-failures
Handle more XHR errors in the TileJSON source
2016-03-02 15:40:43 -07:00
Tim Schaub
c9852250e4 Merge pull request #4962 from tschaub/untestable
Skip tests where features are not available
2016-03-02 15:21:36 -07:00
Tim Schaub
1877910b7e Handle more XHR errors in the TileJSON source 2016-03-02 14:42:28 -07:00
Tim Schaub
9c594bc997 Use where function in MVT tests 2016-03-02 13:22:33 -07:00
Tim Schaub
1925e39b69 Allow tests to be ignored by feature 2016-03-02 13:20:37 -07:00
Andreas Hocevar
0c8bec2126 Merge pull request #4956 from jonataswalker/fix-layout-examples
Fix Examples layout page
2016-03-02 19:09:42 +01:00
jonataswalker
8b2259bf25 Fix Examples layout page 2016-03-02 14:37:19 -03:00
Andreas Hocevar
8ba04ac77a Simplify clipping of lower resolution regions 2016-03-02 15:54:06 +01:00
Frédéric Junod
f6f22b155c Merge pull request #4958 from fredj/stop_wheel_events
Stop wheel events instead of DOMMouseScroll events
2016-03-02 15:36:38 +01:00
Frederic Junod
2cb48d3d62 Stop wheel events instead of DOMMouseScroll events 2016-03-02 15:25:22 +01:00
Tim Schaub
e3b88b8785 Merge pull request #4947 from tschaub/pixelworks
IE support for ol.source.Raster.
2016-03-01 15:13:48 -07:00
Tim Schaub
efdc892219 Run ol.source.Raster tests in Phantom 2016-03-01 13:50:31 -07:00
Tim Schaub
5aa175241a No need to check for ImageData constructor in the tests 2016-03-01 13:43:55 -07:00
Tim Schaub
bc01fdb59a Return ImageData-like objects for IE support 2016-03-01 13:34:50 -07:00
Tim Schaub
66f23c1aed Upgrade to pixelworks@1.1.0 2016-03-01 13:34:50 -07:00
Andreas Hocevar
4cebe3d92b Merge pull request #4944 from openlayers/greenkeeper-resemblejs-2.2.0
Update resemblejs to version 2.2.0 🚀
2016-03-01 17:58:34 +01:00
greenkeeperio-bot
ad0a13ebb2 chore(package): update resemblejs to version 2.2.0
http://greenkeeper.io/
2016-03-01 06:46:51 -07:00
Frédéric Junod
e8e5dc6332 Merge pull request #4942 from fredj/unused_example_data
Remove unused files in examples/data/
2016-03-01 12:43:58 +01:00
Frederic Junod
f271fdb993 Remove unused files in examples/data/ 2016-03-01 12:26:06 +01:00
Frédéric Junod
fbbbcf5cdb Merge pull request #4805 from fredj/cacheSize
Add new cacheSize option to ol.source
2016-03-01 10:46:00 +01:00
Andreas Hocevar
9fe2970fb3 Merge pull request #4940 from openlayers/release-v3.14.1
Release v3.14.1
2016-03-01 10:20:50 +01:00
Andreas Hocevar
b4c4a81afb Update package version to 3.14.1 2016-03-01 10:10:41 +01:00
Andreas Hocevar
7478e82b9a Changelog for v3.14.1 2016-03-01 10:10:06 +01:00
Andreas Hocevar
4b586df2b5 Merge pull request #4939 from ahocevar/clip-opacity
Fix rendering of opaque layers with opacity != 1
2016-03-01 10:05:07 +01:00
Andreas Hocevar
ed62203527 Merge pull request #4921 from ahocevar/unlisten-earlier-and-bind-to-target
Unlisten before calling listener and bind to target by default
2016-03-01 10:03:51 +01:00
Andreas Hocevar
fbb3ffc9e5 Merge pull request #4939 from ahocevar/clip-opacity
Fix rendering of opaque layers with opacity != 1
2016-03-01 09:43:24 +01:00
Frederic Junod
9819aa38f5 Remove ol.DEFAULT_TILE_CACHE_HIGH_WATER_MARK 2016-03-01 09:05:12 +01:00
Frederic Junod
58d8b290af Add new cacheSize option to ol.source
Option added to:
 - olx.source.BingMapsOptions
 - olx.source.MapQuestOptions
 - olx.source.OSMOptions
 - olx.source.StamenOptions
 - olx.source.TileArcGISRestOptions
 - olx.source.TileImageOptions
 - olx.source.TileJSONOptions
 - olx.source.TileWMSOptions
 - olx.source.VectorTileOptions
 - olx.source.XYZOptions
 - olx.source.WMTSOptions
 - olx.source.ZoomifyOptions
2016-03-01 09:05:12 +01:00
Andreas Hocevar
16f63a7e0c Calculate low resolution tile clipping like current tile position 2016-02-29 21:30:57 +01:00
Andreas Hocevar
23172a3695 Use tile position coordinates for clip geometry outer ring 2016-02-29 21:28:20 +01:00
Andreas Hocevar
8553da6679 Refactor tile position calculation for readability 2016-02-29 21:23:19 +01:00
Andreas Hocevar
8256ff60b6 Consider layer opacity for lower resolution tile clipping 2016-02-29 21:13:31 +01:00
Frédéric Junod
d5fb6dda49 Merge pull request #4938 from fredj/rm_goog.dom.getFirstElementChild
Get rid of goog.dom.getFirstElementChild
2016-02-29 17:13:10 +01:00
Frederic Junod
e9a5fadacc Get rid of goog.dom.getFirstElementChild
Use [firstElementChild](https://developer.mozilla.org/en-US/docs/Web/API/ParentNode/firstElementChild) instead.
2016-02-29 16:59:29 +01:00
Frédéric Junod
8465875b24 Merge pull request #4937 from fredj/rm_goog.json
Get rid of goog.json
2016-02-29 16:56:32 +01:00
Frédéric Junod
41c12bcea9 Merge pull request #4936 from fredj/getfeatureinfo-layers
Remove jquery from getfeatureinfo-layers example
2016-02-29 16:37:46 +01:00
Frederic Junod
cf23d0541c Get rid of goog.json
Use JSON.parse and JSON.stringify instead.
2016-02-29 16:19:32 +01:00
Frederic Junod
aaf03a8fc2 Remove jquery from getfeatureinfo-layers example 2016-02-29 15:32:28 +01:00
Frédéric Junod
5b38eaa116 Merge pull request #4930 from fredj/custom-builds.md
Use ADVANCED instead of ADVANCED_OPTIMIZATIONS
2016-02-29 10:40:19 +01:00
Andreas Hocevar
9b8ab88e41 Merge pull request #4917 from ahocevar/flexible-cluster
Make ol.source.Cluster more flexible by adding a geometryFunction option
2016-02-29 10:40:12 +01:00
Frédéric Junod
3194d0ebd4 Merge pull request #4918 from fredj/canvas_clear
Don't change the canvas size to clear it
2016-02-29 10:40:00 +01:00
Frederic Junod
2a1bc70b97 Don't change the canvas size to clear it 2016-02-29 09:23:42 +01:00
Frederic Junod
2427d0e684 Use ADVANCED instead of ADVANCED_OPTIMIZATIONS 2016-02-29 08:39:54 +01:00
Frédéric Junod
941f220f3d Merge pull request #4923 from xlhomme/patch-1
Update custom-builds.md
2016-02-29 08:37:58 +01:00
Frédéric Junod
50aad8f42d Merge pull request #4929 from openlayers/greenkeeper-clean-css-3.4.10
Update clean-css to version 3.4.10 🚀
2016-02-29 08:26:01 +01:00
greenkeeperio-bot
24069fa7bf chore(package): update clean-css to version 3.4.10
http://greenkeeper.io/
2016-02-29 00:10:03 -07:00
Tim Schaub
0e5dfec3bf Merge pull request #4928 from bjornharrtell/jsts-upgrade2
Upgrade to JSTS 1.0.2 in example
2016-02-28 21:50:13 -07:00
Björn Harrtell
7b6820a012 Upgrade to JSTS 1.0.2 in example 2016-02-28 20:31:44 +01:00
Tim Schaub
a172e04d5b Merge pull request #4927 from bjornharrtell/jsts-upgrade
Upgrade JSTS in example.
2016-02-27 09:01:47 -07:00
Tim Schaub
750830b887 Merge pull request #4809 from fperucic/multpolygon-clone
Fix multipolygon clone.
2016-02-27 09:00:17 -07:00
Fran Peručić
a51e7804b8 added a test 2016-02-27 13:03:19 +01:00
Björn Harrtell
94debcfc3a Upgrade JSTS in example 2016-02-27 09:08:17 +01:00
Andreas Hocevar
c5d3dfd41c Merge pull request #4924 from openlayers/greenkeeper-coveralls-2.11.8
Update coveralls to version 2.11.8 🚀
2016-02-26 21:24:29 +01:00
greenkeeperio-bot
7491b90c30 chore(package): update coveralls to version 2.11.8
http://greenkeeper.io/
2016-02-26 12:40:20 -07:00
xavier lhomme
e3f25ee71f Update custom-builds.md
not sure we should add 
"ol.layer.Heatmap#setRadius",
"ol.layer.Heatmap#setBlur"
but it's work.
2016-02-26 19:45:59 +01:00
Andreas Hocevar
588dd54fb6 Merge pull request #4921 from ahocevar/unlisten-earlier-and-bind-to-target
Unlisten before calling listener and bind to target by default
2016-02-25 18:04:39 +01:00
Andreas Hocevar
00a0f14743 Unlisten before calling listener and bind to target by default 2016-02-25 17:48:15 +01:00
Tim Schaub
ef42267cfe Merge pull request #4868 from sebasbaumh/refreshSource
Allow to refresh a source and reload its data.
2016-02-25 07:15:46 -07:00
Andreas Hocevar
0407e779f9 Make ol.source.Cluster more flexible by adding a geometryFunction option 2016-02-25 15:02:41 +01:00
Frédéric Junod
78d6d5ab1b Merge pull request #4903 from fredj/rm_goog.style.getRelativePosition
Remove use of goog.style.getRelativePosition
2016-02-25 14:29:34 +01:00
Frédéric Junod
fa180cfa13 Merge pull request #4902 from fredj/getBoundingClientRect
Remove use of goog.style.getClientPosition
2016-02-25 11:05:56 +01:00
Frédéric Junod
d190d27534 Merge pull request #4916 from fredj/writeFeatureObject_return
Fix ol.format.GeoJSON#writeFeatureObject return type
2016-02-25 10:22:28 +01:00
Frederic Junod
916127d8f6 Fix ol.format.GeoJSON#writeFeatureObject return type 2016-02-25 10:09:37 +01:00
Frédéric Junod
7583d8d434 Merge pull request #4909 from fredj/dom_vector_clear
Add ol.renderer.dom.VectorLayer#clearFrame
2016-02-25 10:08:14 +01:00
Frédéric Junod
b19aa01b72 Merge pull request #4915 from fredj/object
Use {} instead of Object
2016-02-25 09:51:12 +01:00
Frederic Junod
148ef7afef Use {} instead of Object
We probably have these to trick the compiler but it's not needed anymore
2016-02-25 09:15:33 +01:00
Frédéric Junod
5ad42f3b25 Merge pull request #4914 from sebasbaumh/exportEquivalent
Export ol.proj.equivalent
2016-02-25 08:55:35 +01:00
Sebastian Baumhekel
33bcd7194f Export ol.proj.equivalent
The function ol.proj.equivalent is used for comparing two projections,
but not exposed publicly. It should be accessible using a public API to
be able to compare projections in the same way as OpenLayers does.

A test for the ol.proj.equivalent function itself already exists in
https://github.com/openlayers/ol3/blob/master/test/spec/ol/proj/proj.test.js

github issue #4913
2016-02-25 08:40:56 +01:00
Frederic Junod
edf2096b1b Remove use of goog.style.getClientPosition
Use Element.getBoundingClientRect() instead.
2016-02-25 08:36:40 +01:00
Sebastian Baumhekel
7fcf2650ee Allow to refresh a source and reload its data.
Provide an API to refresh a source and reload its data in an associated
layer, as for example already loaded tiles in a ol.source.Tile source
are not refreshed. Additionally a test for the new
ol.source.Source.refresh() function is provided.

Currently internal state is not cleaned up, e.g. already loaded tiles
in a `ol.source.Tile` source are still cached and not reloaded at all.

github issue #4867 (https://github.com/openlayers/ol3/issues/4867)
2016-02-25 08:05:56 +01:00
Frederic Junod
81e563b2b3 Remove use of goog.style.getRelativePosition
Use Element.getBoundingClientRect() and Event.clientX/Event.clientY instead.
2016-02-24 17:28:46 +01:00
Frédéric Junod
68088341d6 Merge pull request #4908 from fredj/rm_goog.math.Rect
Remove use of goog.math.Rect
2016-02-24 17:15:44 +01:00
Frederic Junod
348f61951c Add ol.renderer.dom.VectorLayer#clearFrame 2016-02-24 16:13:35 +01:00
Frederic Junod
48064306a1 Remove use of goog.math.Rect 2016-02-24 14:32:58 +01:00
Frederic Junod
373393dce7 Add missing 'private' jsdoc tag 2016-02-24 14:32:57 +01:00
Frédéric Junod
bd5c85acc3 Merge pull request #4900 from fredj/ol.format.XML_struct
Make ol.format.XML a @struct
2016-02-24 14:24:39 +01:00
Frédéric Junod
8a6afb3836 Merge pull request #4880 from openlayers/greenkeeper-closure-util-1.11.0
Update closure-util to version 1.11.0 🚀
2016-02-24 14:18:01 +01:00
Frédéric Junod
d8d7ae8e1b Merge pull request #4905 from fredj/rm_goog.style.setPosition
Remove use of goog.style.setPosition
2016-02-24 14:17:36 +01:00
Frederic Junod
805b81cea7 Remove use of goog.style.setPosition
Use element.style.left and element.style.top instead
2016-02-24 12:23:10 +01:00
Frédéric Junod
514243a8e9 Merge pull request #4879 from openlayers/greenkeeper-metalsmith-layouts-1.6.4
Update metalsmith-layouts to version 1.6.4 🚀
2016-02-24 12:05:02 +01:00
Andreas Hocevar
37113837d1 Merge pull request #4901 from openlayers/release-v3.14.0
Release v3.14.0
2016-02-24 09:53:01 +01:00
Andreas Hocevar
73d4c3565c Update package version to 3.14.0 2016-02-24 09:51:15 +01:00
Andreas Hocevar
cc30f5f3da Changelog for v3.14.0 2016-02-24 09:50:45 +01:00
Frédéric Junod
8395bea72d Merge pull request #4899 from fredj/srsName
Use ol.format.GMLBase#srsName instead of undeclared srsName_
2016-02-24 09:43:49 +01:00
Frederic Junod
ac17a2f2a7 Make ol.format.XML a @struct
And replace the undeclared `this.version` by a local variable.
2016-02-24 09:25:41 +01:00
Frederic Junod
a365f185cc Use ol.format.GMLBase#srsName instead of undeclared srsName_
The variable was changed from private to protected in 8182396
2016-02-24 09:20:22 +01:00
greenkeeperio-bot
7e7d8ac4e2 chore(package): update closure-util to version 1.11.0
- Remove closure-util.json, we're now using the same library version as closure-util
 - Disable analyzerChecks errors from closure-compiler
 - Remove WheelEvent constants from externs (fixed upstream)
 - Activate the unnecessaryCasts compiler check
2016-02-24 09:02:25 +01:00
Andreas Hocevar
4e11a86b4e Merge pull request #4896 from ahocevar/xml-ignore-order
Ignore XML sequence when comparing GML
2016-02-24 08:59:30 +01:00
Frédéric Junod
9f21f1dac4 Merge pull request #4890 from fredj/kmlformat_cleanup
ol.format.KML cleanup
2016-02-24 08:47:29 +01:00
Frederic Junod
d0f71bf64f Remove old fixme 2016-02-24 08:37:30 +01:00
Frederic Junod
950bb1810c Remove unneeded type cast 2016-02-24 08:37:30 +01:00
Frederic Junod
81d0e9ea63 Use get(key) instead of getProperties()[key] 2016-02-24 08:37:30 +01:00
Tim Schaub
4b55175b7e Merge pull request #4894 from tschaub/raster-tests
Only run raster operations after image sources have loaded.
2016-02-23 16:10:07 -07:00
Andreas Hocevar
cdf9eda132 Ignore element order for FeatureCollection round trip 2016-02-23 23:36:12 +01:00
Andreas Hocevar
7a953a166e Add option to ignore element order in xmleq 2016-02-23 23:35:53 +01:00
Andreas Hocevar
f2d5d572ab Only composeFrame when prepareFrame prepared something to render 2016-02-23 13:56:39 -07:00
Tim Schaub
02904cda8e Guard against handlers handling events after done 2016-02-23 13:13:15 -07:00
Tim Schaub
24b7b27836 Listen once when calling done 2016-02-23 13:10:47 -07:00
Tim Schaub
9da8cd890e Simpler alias 2016-02-23 13:06:38 -07:00
Tim Schaub
eaab8e47ce More cleanup 2016-02-23 12:57:39 -07:00
Tim Schaub
b440872e60 Less crazy indentation 2016-02-23 12:50:33 -07:00
Tim Schaub
247eb62e3b Avoid shadowing 2016-02-23 12:48:27 -07:00
Andreas Hocevar
960c51f95d Merge pull request #4892 from ahocevar/fix-edge
Stricter check for ImageData constructor
2016-02-23 19:58:51 +01:00
Andreas Hocevar
8e489304c1 Stricter check for ImageData constructor 2016-02-23 19:43:06 +01:00
Andreas Hocevar
2df40f4b88 Merge pull request #4891 from ahocevar/fix-ie9-tests
Fix tests so they all pass in IE9
2016-02-23 18:52:18 +01:00
Andreas Hocevar
c2d4bf113d Fix tests so they all pass in IE9 2016-02-23 18:21:22 +01:00
Andreas Hocevar
806588edc6 Merge pull request #4889 from ahocevar/ie9-polyfill
Use requestAnimation polyfill for examples and update release notes
2016-02-23 16:07:23 +01:00
Andreas Hocevar
ad6c731823 Use requestAnimation polyfill for examples and update release notes 2016-02-23 15:56:03 +01:00
Andreas Hocevar
17749dbf96 Merge pull request #4887 from ahocevar/jsonp-test
Use less aggressive DOM function overrides
2016-02-23 14:27:14 +01:00
Andreas Hocevar
a8c6baa188 Use less aggressive DOM function overrides 2016-02-23 14:14:49 +01:00
Frédéric Junod
ef63908539 Merge pull request #4885 from fredj/non-null_divs
Mark overlayContainer and overlayContainerStopEvent as non-nullable
2016-02-23 13:47:58 +01:00
Frédéric Junod
d642fe6783 Merge pull request #4884 from fredj/isFinite
Remove use of goog.math.isFiniteNumber()
2016-02-23 11:29:16 +01:00
Frederic Junod
268d6eda8f Mark overlayContainer and overlayContainerStopEvent as non-nullable
And remove an unnecessary cast
2016-02-23 11:25:38 +01:00
Frederic Junod
84288cd8bb Remove use of goog.math.isFiniteNumber()
This replaces `goog.math.isFiniteNumber()` with `isFinite()`.
2016-02-23 10:03:44 +01:00
Frédéric Junod
996e119b25 Merge pull request #4881 from openlayers/greenkeeper-jquery-2.2.1
Update jquery to version 2.2.1 🚀
2016-02-23 08:51:27 +01:00
greenkeeperio-bot
345763fcd3 chore(package): update metalsmith-layouts to version 1.6.4
http://greenkeeper.io/
2016-02-23 08:50:58 +01:00
greenkeeperio-bot
f54a8ea432 chore(package): update jquery to version 2.2.1
http://greenkeeper.io/
2016-02-22 12:19:08 -07:00
Frédéric Junod
5b21d61688 Merge pull request #4780 from fredj/update_compiler
Adapt the code for the new closure-compiler version
2016-02-22 15:31:11 +01:00
Frederic Junod
1f04495dc3 Change layers type to Object in reprojection example 2016-02-22 10:05:05 +01:00
Frederic Junod
8373814243 Remove unused goog.log logger from ol.renderer.webgl.Map 2016-02-22 10:02:15 +01:00
Frederic Junod
d7c0aa4887 Add missing ol.render.Feature type annotation
Leftover from #4219
2016-02-22 10:02:15 +01:00
Frederic Junod
e6c2fa52f5 Remove unneeded type cast 2016-02-22 10:02:15 +01:00
Frederic Junod
17b667d6e0 Add missing type casts for goog.partial 2016-02-22 10:02:15 +01:00
Andreas Hocevar
81750ea6b1 Merge pull request #3453 from bjornharrtell/set-multi
Consider multi in add/remove/toggle select logic
2016-02-22 09:49:00 +01:00
Tobias Sauerwein
12b8624cdb Merge pull request #4876 from tsauerwein/drag-n-drop-target
Add `target` property to Drag&Drop interaction
2016-02-22 09:36:50 +01:00
Björn Harrtell
a546e09b96 Merge branch 'master' into set-multi 2016-02-22 09:30:25 +01:00
tsauerwein
1e8bbb0ae4 Add target property to drag&drop interaction 2016-02-22 09:25:30 +01:00
Andreas Hocevar
6c7d6817bd Merge pull request #4854 from ahocevar/fix-select-and-everything-that-relies-on-unmanaged-layers-and-skipped-features-this-time-for-real---hopefully
Always report skipped feature hits for the original layer
2016-02-22 09:23:28 +01:00
Tim Schaub
8e72eb8652 Merge pull request #4877 from openlayers/greenkeeper-eslint-2.2.0
Update eslint to version 2.2.0 🚀
2016-02-19 13:52:53 -07:00
greenkeeperio-bot
308e37a48e chore(package): update eslint to version 2.2.0
http://greenkeeper.io/
2016-02-19 11:02:24 -07:00
Frédéric Junod
82f6fb9e6d Merge pull request #4870 from fredj/gc
Reuse dragListenerKeys_ local variable
2016-02-19 15:54:29 +01:00
Petr Sloup
1d21f76ad3 Merge pull request #4721 from klokantech/raster-reproj-gutter
Fix reprojection of raster sources with gutter
2016-02-19 12:25:24 +01:00
Petr Sloup
59574da74c Fix reprojection of raster sources with gutter 2016-02-19 12:17:03 +01:00
Bart van den Eijnden
ccf47de448 Merge pull request #4874 from bartvde/wfst-empty-update
Assert we have a feature id
2016-02-19 10:01:56 +01:00
Bart van den Eijnden
84b418b5c6 Assert we have a feature id 2016-02-19 09:41:13 +01:00
Petr Sloup
7b8feaa48f Merge pull request #4869 from klokantech/improve-reproj-precision
Improve precision of ol.reproj.render
2016-02-19 09:14:32 +01:00
Frederic Junod
612280c676 Fix variable declaration in constructor 2016-02-18 16:38:09 +01:00
Frederic Junod
35579ab714 Reuse dragListenerKeys_ local variable
Reuse the array instead of recreating a new one.
2016-02-18 16:26:04 +01:00
Petr Sloup
83e251621a Improve precision of ol.reproj.render 2016-02-18 16:25:12 +01:00
Andreas Hocevar
6e7b130a45 Merge pull request #4866 from ahocevar/requestanimationframe-polyfill
Use requestAnimationFrame polyfill (for IE9)
2016-02-18 11:42:39 +01:00
Andreas Hocevar
69aa277848 Use requestAnimationFrame polyfill (for IE9) 2016-02-18 11:30:58 +01:00
Frédéric Junod
a9675576d3 Merge pull request #4863 from fredj/rm_goog.dom
Remove use of goog.dom.createElement
2016-02-18 11:07:23 +01:00
Frédéric Junod
38e43e018c Merge pull request #4864 from fredj/rm_goog.dom.getElementsByClass
Use querySelectorAll instead of goog.dom.getElementsByClass
2016-02-18 11:06:55 +01:00
Andreas Hocevar
7cc43d36ef Merge pull request #4597 from ahocevar/direct-render
Render tiles directly to the map canvas
2016-02-18 11:06:34 +01:00
Frederic Junod
9cb86df61c Use querySelectorAll instead of goog.dom.getElementsByClass 2016-02-18 10:03:38 +01:00
Frederic Junod
00fbb77c19 Remove use of goog.dom.createElement 2016-02-18 09:55:36 +01:00
Andreas Hocevar
2d2ebe0e12 Merge pull request #4862 from ahocevar/osgeo-badge
Add OSGeo badge
2016-02-18 09:53:59 +01:00
Andreas Hocevar
92da3629d7 Add OSGeo badge 2016-02-18 09:47:45 +01:00
Björn Harrtell
7822f5ce5d Consider multi in add/remove/toggle select logic 2016-02-17 13:18:06 +01:00
Björn Harrtell
f77480ec28 Add tests excercising the add/remove/toggle select logic with and without multi 2016-02-17 13:15:45 +01:00
Björn Harrtell
2d6ce527e2 Merge branch 'fix-select-and-everything-that-relies-on-unmanaged-layers-and-skipped-features-this-time-for-real---hopefully' into set-multi 2016-02-17 13:07:24 +01:00
Frédéric Junod
9baa296a49 Merge pull request #4845 from gberaudo/fix_geolocation_error_type
Fix geolocation error cast
2016-02-17 11:02:30 +01:00
Marc Jansen
f36c02b0b8 Merge pull request #4851 from marcjansen/rm-goog-isboolean
Don't use goog.isBoolean()
2016-02-17 10:58:09 +01:00
Andreas Hocevar
5bc00d8535 Continue passing null instead of unmanaged layer to forEachFeatureAtCoordinate 2016-02-17 08:59:45 +01:00
Andreas Hocevar
9f0fefd42d Hit-detect skipped features, but not on unmanaged layer 2016-02-17 00:54:31 +01:00
Marc Jansen
068960e4b2 Don't use goog.isBoolean() 2016-02-16 23:52:20 +01:00
Marc Jansen
6276bbce38 Merge pull request #4852 from marcjansen/rm-goog-isstring
Don't use goog.isString()
2016-02-16 23:51:22 +01:00
Marc Jansen
5e4e9100e4 Don't use goog.isString() 2016-02-16 23:37:38 +01:00
Marc Jansen
c836f97ec3 Merge pull request #4849 from openlayers/logo-doc-minor
Fix docs of LogoOptions.prototype.src
2016-02-16 16:46:27 +01:00
Marc Jansen
e8ed9c7e49 Fix docs of LogoOptions.src 2016-02-16 16:36:02 +01:00
Andreas Hocevar
bcf379cc8e Merge pull request #4794 from ahocevar/fixed-tileloading
Make tile loading count no longer depend on source count
2016-02-16 15:51:55 +01:00
Guillaume Beraudo
7e6115a763 Fix geolocation error cast
Despite the dispatchEvent method accepting a hash with a "target" property of
"undefined", closure may still require the "target" property to be
explicit.
2016-02-16 11:36:24 +01:00
Frédéric Junod
a5e463464a Merge pull request #4843 from fredj/goog.dom.getParentElement
Remove use of goog.dom.getParentElement
2016-02-16 08:35:27 +01:00
Frédéric Junod
126e065d77 Merge pull request #4839 from fredj/collection_template
Add template type to ol.Collection
2016-02-16 08:34:23 +01:00
Tim Schaub
1902d597ef Merge pull request #4847 from openlayers/greenkeeper-eslint-2.1.0
Update eslint to version 2.1.0 🚀
2016-02-15 16:50:52 -07:00
Tim Schaub
03761642ed Correct indentation 2016-02-15 16:39:56 -07:00
Andreas Hocevar
44c6972f31 Merge pull request #4632 from bjnsn/fill-color-overload
Overloading fill color (polygon or text) with CanvasPattern and CanvasGradient
2016-02-15 20:01:35 +01:00
greenkeeperio-bot
55d56d65bc chore(package): update eslint to version 2.1.0
http://greenkeeper.io/
2016-02-15 12:00:49 -07:00
Brett Johnson
7f02b63ccc Overloading fill color (polygon or text) with CanvasPattern and CanvasGradient. 2016-02-15 08:30:56 -08:00
Frederic Junod
25f5776d8e Remove use of goog.dom.getParentElement 2016-02-15 17:13:04 +01:00
Andreas Hocevar
952b99742e Add tests, remove unused code, encapsulate repeated code in functions 2016-02-15 17:00:06 +01:00
Andreas Hocevar
a109062b1f Rotate map canvas after composition 2016-02-15 17:00:06 +01:00
Frédéric Junod
aa508acde4 Merge pull request #4842 from fredj/rm_goog.dom.createDom
Remove use of goog.dom.createDom
2016-02-15 16:55:10 +01:00
Frederic Junod
296ec9799f Remove use of goog.dom.createDom 2016-02-15 16:40:07 +01:00
Frédéric Junod
34392b464c Merge pull request #4808 from fredj/type_cleanup
Type cleanup
2016-02-15 12:01:40 +01:00
Frédéric Junod
7431990f70 Merge pull request #4737 from fredj/dnd_projection
Use olx.format.ReadOptions in ol.interaction.DragAndDrop
2016-02-15 09:37:14 +01:00
Frederic Junod
e7c57ada95 Use olx.format.ReadOptions in ol.interaction.DragAndDrop
Don't reproject the geometries in ol.interaction.DragAndDrop; use
the `featureProjection` option in `format.readFeatures`
2016-02-15 09:26:00 +01:00
Frederic Junod
7003920163 Fix olx.source.XYZOptions#tileGrid type
The typedef is already correct
2016-02-15 09:25:01 +01:00
Frederic Junod
332d6e9d5c Add missing olx.source.XYZOptions#opaque property 2016-02-15 09:25:01 +01:00
Frederic Junod
95fd0e177f Fix olx.render.ToContextOptions#pixelRatio type
The typedef is already correct
2016-02-15 09:25:01 +01:00
Frederic Junod
cf083e4f42 Remove return value from olx.interaction.PointerOptions functions
handleDragEvent and handleMoveEvent functions do not return a boolean value.
The typedef is already correct.
2016-02-15 09:25:01 +01:00
Frederic Junod
2f3c25cb95 Fix olx.control.RotateOptions#label type
Use the same as the typedef, leftover from a096ec5
2016-02-15 09:25:01 +01:00
Frederic Junod
df977d50b6 Fix type cast in ol.layer.Base constructor
ol.layer.Base takes a olx.layer.BaseOptions not olx.layer.LayerOptions
2016-02-15 09:25:01 +01:00
Andreas Hocevar
ff07f3a385 Merge pull request #4830 from ahocevar/proj4-tests
Make sure window.proj4 is always restored in tests
2016-02-15 09:22:54 +01:00
Frederic Junod
0303604c37 Add template type to ol.Collection 2016-02-15 09:06:57 +01:00
Andreas Hocevar
27f1fb6fc6 Merge pull request #4838 from ahocevar/regex-instead-of-endswith
Use regular expression instead of String#endsWith() check
2016-02-14 23:24:36 +01:00
Andreas Hocevar
cd2dfc7f10 Use regular expression instead of String#endsWith() check 2016-02-14 23:15:15 +01:00
Andreas Hocevar
09517659b1 Merge pull request #4837 from openlayers/greenkeeper-metalsmith-layouts-1.5.4
Update metalsmith-layouts to version 1.5.4 🚀
2016-02-14 18:54:05 +01:00
Andreas Hocevar
c27b1e4e3b Merge pull request #4836 from ahocevar/ua-lowercase
Use lowercase for all user agent checks
2016-02-14 16:14:26 +01:00
greenkeeperio-bot
58416b9883 chore(package): update metalsmith-layouts to version 1.5.4
http://greenkeeper.io/
2016-02-14 07:42:11 -07:00
Andreas Hocevar
0432c863c7 Use lowercase for all user agent checks 2016-02-14 14:53:30 +01:00
Tim Schaub
2336bbf5ef Merge pull request #4833 from tschaub/linter-config
Upgrade linter and config.
2016-02-13 14:19:15 -07:00
Tim Schaub
160294e05d Upgrade linter and config 2016-02-13 14:07:50 -07:00
Tim Schaub
a11ab03b99 Merge pull request #4831 from jonataswalker/add-examples-header-nav
Add navigation header to examples page
2016-02-13 08:30:20 -07:00
jonataswalker
9dbf9541e9 Add navigation header to Examples page 2016-02-13 12:39:42 -02:00
Andreas Hocevar
27908edea1 Make sure window.proj4 is always restored in tests 2016-02-13 14:09:25 +01:00
Marc Jansen
d15992bfc2 Merge pull request #4824 from marcjansen/rm-goog-string-newlines
Don't use goog.string.newlines.*
2016-02-12 15:20:44 +01:00
Marc Jansen
f1fdfb7971 Don't use goog.string.newlines.* 2016-02-12 15:07:56 +01:00
Marc Jansen
726e5613b3 Merge pull request #4825 from marcjansen/rm-goog-string-isempty
Don't use goog.string.isEmpty
2016-02-12 15:05:46 +01:00
Marc Jansen
48ff0b90d3 Don't use goog.string.isEmpty 2016-02-12 14:12:44 +01:00
Andreas Hocevar
98b823c5fc Render tiles directly to the map canvas
This change removes the overhead of rendering tiles to an intermediate canvas.
2016-02-12 12:54:19 +01:00
Andreas Hocevar
557372203f Merge pull request #4823 from ahocevar/layers-not-required
Fix type for layers option on ol.interaction.Select
2016-02-12 12:53:44 +01:00
Andreas Hocevar
6fbe160159 Fix type for layers option on ol.interaction.Select 2016-02-12 12:42:38 +01:00
Frédéric Junod
d7e275a309 Merge pull request #4815 from fredj/synthetic_wrap
wrapX false in synthetic examples
2016-02-11 11:49:45 +01:00
Frédéric Junod
0704453aff Merge pull request #4810 from gberaudo/control_undefined_checks
Add checks for undefined in controls
2016-02-11 11:26:23 +01:00
Guillaume Beraudo
3e9683d88d Fix checks for undefined in zoomtoextentcontrol 2016-02-11 11:03:35 +01:00
Guillaume Beraudo
4722d341af Fix checks for undefined in zoomslidercontrol 2016-02-11 11:03:35 +01:00
Guillaume Beraudo
b53d74285b Fix checks for undefined in zoom control 2016-02-11 11:03:35 +01:00
Guillaume Beraudo
6c1d0f1bbe Fix checks for undefined in scaline control 2016-02-11 11:03:35 +01:00
Guillaume Beraudo
cf5006617c Fix checks for undefined in rotate control 2016-02-11 11:03:35 +01:00
Guillaume Beraudo
adb5b78cb6 Fix checks for undefined in overviewmapcontrol 2016-02-11 11:03:35 +01:00
Guillaume Beraudo
6779ab5e29 Fix checks for undefined in mousepositioncontrol 2016-02-11 11:03:35 +01:00
Guillaume Beraudo
a513754d25 Fix checks for undefined in fullscreencontrol 2016-02-11 11:03:35 +01:00
Guillaume Beraudo
9703be932d Fix checks for undefined in attributioncontrol 2016-02-11 11:03:35 +01:00
Frédéric Junod
0493f3f5f8 Merge pull request #4787 from pfanguin/precision_coordinate_hdms
Add precision parameter for HDMS coordinate
2016-02-11 11:03:13 +01:00
Frederic Junod
a664dbb507 Set wrapX to false in synthetic examples 2016-02-11 09:34:38 +01:00
Frederic Junod
f3a3d34f71 Remove outdated performance results 2016-02-11 09:32:47 +01:00
pfanguin
b584a9aeb5 Add precision parameter for HDMS coordinate 2016-02-11 09:15:41 +01:00
Frédéric Junod
c621f8606b Merge pull request #4811 from fredj/style_struct
Make ol.style.Style a @struct
2016-02-11 08:33:03 +01:00
Frederic Junod
f7e20377ec Make ol.style.Style a @struct
And take into account that `styles` may be a style or an array of style.
2016-02-10 17:07:10 +01:00
Fran Peručić
b46cc5a241 fix multipolygon clone 2016-02-10 15:06:00 +01:00
Tim Schaub
a924908f12 Merge pull request #4800 from openlayers/greenkeeper-phantomjs-prebuilt-2.1.4
Update phantomjs-prebuilt to version 2.1.4 🚀
2016-02-06 18:20:37 -07:00
Frédéric Junod
2035bec7ad Merge pull request #4792 from fredj/snapinteraction_listen_key
Use ol.events.listen instead of ol.Observable#on
2016-02-06 19:01:55 +01:00
greenkeeperio-bot
42100e0ab1 chore(package): update phantomjs-prebuilt to version 2.1.4
http://greenkeeper.io/
2016-02-06 10:10:57 -07:00
Marc Jansen
00583e9b39 Merge pull request #4796 from marcjansen/rm-goog-isstring
Remove use of goog.isString()
2016-02-06 13:06:06 +01:00
Marc Jansen
efa82dccf9 Remove use of goog.isString() 2016-02-06 12:56:55 +01:00
Andreas Hocevar
057633c2c4 Merge pull request #4795 from ahocevar/goog-cleanup
Cleanup after goog.array, goog.object and goog.isDef removal
2016-02-05 21:38:57 +01:00
Andreas Hocevar
d0eb6322c3 Cleanup after goog.array, goog.object and goog.isDef removal 2016-02-05 14:52:52 +01:00
Andreas Hocevar
3f36e0967f Make tile loading count no longer depend on source count 2016-02-05 09:38:16 +01:00
Frederic Junod
a44e71aad1 Use ol.events.listen instead of ol.Observable#on
`ol.Observable#on` may return an array of `ol.events.Key`, `ol.events.listen` always
return a single `ol.events.Key`.
2016-02-04 17:24:29 +01:00
Frédéric Junod
57c5632de2 Merge pull request #4791 from fredj/unnecessary_cast
Remove unnecessary cast
2016-02-04 16:21:17 +01:00
Frederic Junod
8c6883db34 Remove unnecessary cast 2016-02-04 15:52:28 +01:00
Tim Schaub
ca5eaddfa0 Merge pull request #4778 from tschaub/no-goog-object
Remove use of goog.object.
2016-02-04 07:14:37 -07:00
Andreas Hocevar
0c23d9a7ff Keep track of tile source count 2016-02-04 06:54:45 -07:00
Tim Schaub
72ea0ecfd8 Remove remaining goog.object use from tests 2016-02-04 06:54:45 -07:00
Tim Schaub
d67f33bcd6 Remove use of goog.object.unsafeClone() 2016-02-04 06:54:44 -07:00
Tim Schaub
e2fe897811 Replace goog.object.getValues() with ol.object.getValues() 2016-02-04 06:54:44 -07:00
Tim Schaub
417dbf36c8 Remove use of goog.object.setIfUndefined() 2016-02-04 06:54:44 -07:00
Tim Schaub
fd394151fd Replace goog.object.clear() with ol.object.clear() 2016-02-04 06:54:44 -07:00
Tim Schaub
f38d8bf824 Remove use of goog.object.get() 2016-02-04 06:54:44 -07:00
Tim Schaub
8b9c393820 Remove use of goog.object.some() 2016-02-04 06:54:44 -07:00
Tim Schaub
8aecb3270c Replace goog.object.isEmpty() with ol.object.isEmpty() 2016-02-04 06:54:44 -07:00
Tim Schaub
0dce343d4f Remove use of goog.object.getCount() 2016-02-04 06:54:44 -07:00
Tim Schaub
1a9367228d Remove use of goog.object.contains() and findKey() 2016-02-04 06:54:44 -07:00
Tim Schaub
554887ae14 Remove use of goog.object.forEach() 2016-02-04 06:54:44 -07:00
Tim Schaub
3c0ef430db Use ol.object.assign() instead of goog.object.extend() 2016-02-04 06:54:43 -07:00
Tim Schaub
a74af66d5f Use ol.object.assign() instead of goog.object.clone() 2016-02-04 06:54:43 -07:00
Tim Schaub
619e070d80 Use ol.object.assign() in object.getPoperties() 2016-02-04 06:54:43 -07:00
Tim Schaub
3a4b504a5d Add polyfill for Object.assign() 2016-02-04 06:54:43 -07:00
Frédéric Junod
17a2466894 Merge pull request #4789 from fredj/use_ol.array
Use ol.array instead of goog.array
2016-02-04 14:38:34 +01:00
Frederic Junod
a2171124e1 Remove unneeded goog.array.ASSUME_NATIVE_FUNCTIONS define 2016-02-04 14:25:46 +01:00
Frederic Junod
49b210973e Use ol.array instead of goog.array 2016-02-04 14:21:26 +01:00
Frédéric Junod
aedbf45c8c Merge pull request #4788 from fredj/cleanup
Remove unnecessary newlines
2016-02-04 13:21:29 +01:00
Frederic Junod
c43de104ce Remove unnecessary newlines 2016-02-04 12:24:20 +01:00
Frédéric Junod
ff1f44773a Merge pull request #4783 from fredj/release-v3.13.1
Release v3.13.1
2016-02-04 08:27:35 +01:00
Tim Schaub
8444d066f5 Merge pull request #4731 from gberaudo/remove_unnecessary_casts
Remove all remaining unnecessary casts
2016-02-03 10:30:36 -07:00
Frederic Junod
f73dbc513b Update package version to 3.13.1 2016-02-03 17:04:10 +01:00
Frederic Junod
edb4f233b0 Changelog for v3.13.1 2016-02-03 17:03:28 +01:00
Guillaume Beraudo
a910ab626a Add test for URL template expansion 2016-02-03 16:54:29 +01:00
Andreas Hocevar
04db1c3e4d Expand urls before setting this.urls 2016-02-03 16:53:44 +01:00
Andreas Hocevar
b9b4778d05 Properly detect feature on unmanaged layer for toggle selection 2016-02-03 16:52:05 +01:00
Guillaume Beraudo
46fc1c2a1b Prevent unnecessary casts 2016-02-03 16:26:43 +01:00
Guillaume Beraudo
289e571fb0 Remove all remaining unnecessary casts
There is still such a cast in the goog library itself.
See https://github.com/google/closure-library/pull/637
2016-02-03 16:26:43 +01:00
Marc Jansen
473cbba26e Merge pull request #4776 from marcjansen/array-test-typo
Correct assertion message in ol.array.binarySearch-test
2016-02-03 14:57:44 +01:00
Marc Jansen
a29e7027ca Correct assertion message in binarySearch-test 2016-02-03 14:50:33 +01:00
Andreas Hocevar
00116b7c74 Merge pull request #4711 from ahocevar/no-goog-events
Removal of goog.events.*
2016-02-03 14:05:32 +01:00
Andreas Hocevar
a848321842 Merge pull request #4777 from gberaudo/expanded-urls
Fix source.UrlTile URL expansion
2016-02-03 13:03:37 +01:00
Guillaume Beraudo
42df157a04 Add test for URL template expansion 2016-02-03 12:49:12 +01:00
Andreas Hocevar
af1f2bdda8 Expand urls before setting this.urls 2016-02-03 12:49:12 +01:00
Andreas Hocevar
7a8d15fe47 Use more consistent variable names and reduce findListener_ calls 2016-02-03 11:19:38 +01:00
Tim Schaub
f3b97d6bef Use string instead of string|ol.events.EventType 2016-02-03 11:19:38 +01:00
Tim Schaub
f10c90bdba Simpler type for ol.events.Key
Instead of having `ol.events.Key` be a listener object or an array of listener objects, it should be less error prone to have it just be a single listener object.

To avoid using too many functions with multiple return types, the `ol.events.*` functions for registering and unregistering listeners no longer accept an array of event types (and only a single key is returned when registering).

To make it convenient for users to register multiple listeners at once, the `observable.on()` method accepts an array of event types.  Internally in the library, we should use the less risky `ol.events.listen()`.
2016-02-03 11:19:38 +01:00
Andreas Hocevar
78f44dcc8a Improve XHR and ol.net.jsonp result/failure handling 2016-02-03 11:19:38 +01:00
Tim Schaub
e48ab95735 Use originalEvent instead of browserEvent 2016-02-03 11:19:38 +01:00
Tim Schaub
c62e76ab67 Remove support for useCapture 2016-02-03 11:19:38 +01:00
Tim Schaub
80df1f5ae8 Move opt_useCapture arg to the end of the list 2016-02-03 11:19:38 +01:00
Andreas Hocevar
dc0393acff Add map tests for resize and animationDelay 2016-02-03 11:19:38 +01:00
Andreas Hocevar
73f5e11039 Add tests for ol.control.ZoomSlider 2016-02-03 11:19:38 +01:00
Andreas Hocevar
ac1d7572e4 Add tests for scroll zoom 2016-02-03 11:19:38 +01:00
Andreas Hocevar
ec6f2e575b Add tests for keyboard pan and zoom 2016-02-03 11:19:38 +01:00
Andreas Hocevar
8b171d3ca6 Add tests for file dragging 2016-02-03 11:19:38 +01:00
Andreas Hocevar
136c8af878 Add tests and documentation for ol.net.jsonp
ol.net.Jsonp was renamed to ol.net.jsonp, because it is not a constructor.
2016-02-03 11:19:38 +01:00
Andreas Hocevar
8d0ef13505 Add tests and documentation for goog.events.* 2016-02-03 11:19:38 +01:00
Andreas Hocevar
cf4556f115 Add tests and documentation for ol.events.Event 2016-02-03 11:19:38 +01:00
Andreas Hocevar
5ba8b13ccf Add tests and documentation of ol.events.EventTarget 2016-02-03 11:19:38 +01:00
Andreas Hocevar
c51d717657 Refactor event manager to remove memory leaks 2016-02-03 11:19:38 +01:00
Andreas Hocevar
d7497f9686 Always provide useCapture and async args to browser 2016-02-03 11:19:38 +01:00
Andreas Hocevar
f35d0106b8 Remove goog.net.* and goog.async.AnimationDelay 2016-02-03 11:19:38 +01:00
Andreas Hocevar
2b451e7893 Remove goog.dom.ViewportSizeMonitor 2016-02-03 11:19:38 +01:00
Andreas Hocevar
7e27ba1d42 Remove goog.fx.Dragger 2016-02-03 11:19:38 +01:00
Andreas Hocevar
6ac3f30c8f Remove goog.events.MouseWheelEvent and goog.events.MouseWheelHandler 2016-02-03 11:19:38 +01:00
Andreas Hocevar
1a6daa297e Remove goog.events.KeyHandler 2016-02-03 11:19:38 +01:00
Andreas Hocevar
0f216659f9 Remove goog.fs.FileReader and goog.events.FileDropHandler 2016-02-03 11:19:38 +01:00
Andreas Hocevar
3f2d79b7fe Replace goog.events.Event/EventTarget system with our own
This also removes goog.events.listen, goog.events.unlisten,
goog.events.unlistenByKey and goog.events.BrowserEvent.
2016-02-03 11:19:38 +01:00
Frédéric Junod
d87482e415 Merge pull request #4730 from fredj/geolocation_error_doc
Document ol.Geolocation error event
2016-02-03 11:11:23 +01:00
Bart van den Eijnden
9f2e2cd1e8 Merge pull request #4772 from adube/fix-namespaceuri
Use node.setAttribute to set namespaceURI of a node
2016-02-03 08:55:25 +01:00
Tim Schaub
cf7d30d41c Merge pull request #4774 from openlayers/greenkeeper-graceful-fs-4.1.3
Update graceful-fs to version 4.1.3 🚀
2016-02-02 21:58:17 -07:00
Tim Schaub
e5428a0738 Merge pull request #4680 from nicholas-l/removeGoogArray
Remove goog array.
2016-02-02 21:51:39 -07:00
Andreas Hocevar
ebc98ec1bb Address TODOs
To make sure that our binarySearch implementation meets the requirements of
the library, I added more tests for ol.geom.flat.interpolate.lineString, only
to find out that it does not handle line strings with repeated vertices
properly, regardless of what binarySearch implementation is used.
2016-02-03 11:41:41 +13:00
Nicholas L
1771df0109 Change binary search to return the lowest position 2016-02-03 11:41:41 +13:00
Marc Jansen
6586c7f007 Add tests stubs 2016-02-03 11:41:41 +13:00
Marc Jansen
665fdbdc2b Add tests for ol.array.extend 2016-02-03 11:41:41 +13:00
Marc Jansen
57f4d8cefb Add tests for ol.array.equals 2016-02-03 11:41:40 +13:00
Marc Jansen
31e1fbaf40 Add tests for ol.array.binarySearch 2016-02-03 11:41:40 +13:00
Marc Jansen
434349cb55 Check length of arrays when checking equality 2016-02-03 11:41:40 +13:00
Marc Jansen
4b17721a33 Sort tested methods alphabetically 2016-02-03 11:41:40 +13:00
Andreas Hocevar
2fb33ba940 Type fixes and simplifications 2016-02-03 11:41:40 +13:00
Nicholas L
d81af7594c Update JSDocs/functions after review 2016-02-03 11:41:40 +13:00
Nicholas L
e08a88b76c Remove low and high from binarysearch, use numberSafeCompareFunction 2016-02-03 11:41:40 +13:00
Nicholas L
ef0e95847f Remove goog.array.binarySearch 2016-02-03 11:41:40 +13:00
Nicholas L
9bcf624382 Forgot to remove a require 2016-02-03 11:41:39 +13:00
Nicholas L
5bd3fb494c Remove goog.array.repeat 2016-02-03 11:41:39 +13:00
Nicholas L
ab793a58b6 Remove goog.array.isSorted 2016-02-03 11:41:39 +13:00
Nicholas L
9b492f49c7 Remove goog.array.findIndex 2016-02-03 11:41:39 +13:00
Nicholas L
d820b54443 Remove goog.array.equals and goog.array.stableSort 2016-02-03 11:41:39 +13:00
Nicholas L
640c59d9af Remove goog.array.find 2016-02-03 11:41:39 +13:00
Nicholas L
d743ada8fd Remove goog.array.remove 2016-02-03 11:41:39 +13:00
Nicholas L
d1b6a17773 Remove goog.array.extend 2016-02-03 11:41:38 +13:00
Nicholas L
1089934486 Remove goog.array.removeAt 2016-02-03 11:41:38 +13:00
Nicholas L
0d5168ca0b Remove goog.array.insertAt 2016-02-03 11:41:38 +13:00
Nicholas L
39ead1bb49 Remove use of goog.array.flatten 2016-02-03 11:41:38 +13:00
greenkeeperio-bot
29a644d48c chore(package): update graceful-fs to version 4.1.3
http://greenkeeper.io/
2016-02-02 14:47:26 -07:00
Alexandre Dubé
3264d9a6ea Use node.setAttribute to set namespaceURI 2016-02-02 13:36:24 -05:00
Frédéric Junod
21b740ccf9 Merge pull request #4771 from fredj/nbsp
Use innerHTML instead of innerText to populate the status element
2016-02-02 17:21:14 +01:00
Frederic Junod
6c2302f6d3 Use innerHTML instead of innerText to populate the status element 2016-02-02 17:12:17 +01:00
Frédéric Junod
a1fbe2428f Merge pull request #4769 from fredj/osm_opaque
Add opaque option to olx.source.OSMOptions
2016-02-02 17:04:17 +01:00
Frederic Junod
7b202c4112 Add opaque option for OpenSeaMap source 2016-02-02 13:45:07 +01:00
Frederic Junod
44e17c440d Remove crossOrigin null option for OpenSeaMap source 2016-02-02 13:44:56 +01:00
Frederic Junod
d8330d56a0 Add opaque option to olx.source.OSMOptions 2016-02-02 13:42:05 +01:00
Frederic Junod
c989de3175 Document ol.Geolocation error event 2016-02-02 11:48:47 +01:00
Andreas Hocevar
39b9ba87fc Merge pull request #4736 from ahocevar/fix-select
Properly detect feature on unmanaged layer for toggle selection
2016-02-02 08:58:16 +01:00
Andreas Hocevar
b6fa480c97 Merge pull request #4756 from adube/fix-vector-tile-override
Remove VectorTile getSource re-definition of return value
2016-01-31 07:39:39 +01:00
Andreas Hocevar
ecb2a42900 Properly detect feature on unmanaged layer for toggle selection 2016-01-30 18:13:48 +01:00
Andreas Hocevar
dad92e723c Merge pull request #4733 from ahocevar/fix-scale
Avoid rendering too big and too small images for vector tiles
2016-01-30 17:51:35 +01:00
Tim Schaub
ae74ff1db7 Merge pull request #4754 from tschaub/upgrade-mocha
Upgrade to mocha@2.4.5.
2016-01-29 07:11:00 -07:00
Alexandre Dubé
0a51e4ac32 Remove VectorTile getSource re-definition of return value 2016-01-29 08:33:39 -05:00
Tim Schaub
80f6fb5802 Merge pull request #4750 from openlayers/greenkeeper-metalsmith-layouts-1.4.4
Update metalsmith-layouts to version 1.4.4 🚀
2016-01-28 17:57:20 -07:00
Tim Schaub
9cda669b3b Upgrade to mocha@2.4.5 2016-01-28 17:46:50 -07:00
Tim Schaub
8b64e9b3ea Merge pull request #4751 from openlayers/greenkeeper-phantomjs-2.1.3
Update phantomjs to version 2.1.3 🚀
2016-01-28 11:40:03 -07:00
Tim Schaub
950ce4c88e Merge pull request #4741 from openlayers/check-phantom-version
Report on installed versions in Travis.
2016-01-28 09:28:07 -07:00
Tim Schaub
f67a52d9ef Merge pull request #4742 from tschaub/update-eslint
Upgrade to eslint@2.0.0-beta.2.
2016-01-28 09:26:56 -07:00
Tim Schaub
6f525bfd2e Use new package name 2016-01-28 09:26:23 -07:00
greenkeeperio-bot
552d77f041 chore(package): update phantomjs to version 2.1.3
http://greenkeeper.io/
2016-01-27 21:54:47 -07:00
Tim Schaub
474fd8d47e Merge pull request #4746 from tschaub/roll-back-mocha
Downgrade to mocha@2.3.4.
2016-01-27 15:41:55 -07:00
greenkeeperio-bot
5e6b4e55c5 chore(package): update metalsmith-layouts to version 1.4.4
http://greenkeeper.io/
2016-01-27 14:03:59 -07:00
Tim Schaub
10c6d86d13 Merge pull request #4740 from openlayers/greenkeeper-fs-extra-0.26.5
Update fs-extra to version 0.26.5 🚀
2016-01-27 13:36:08 -07:00
Tim Schaub
49a5c832ea Report dependency versions 2016-01-27 13:33:53 -07:00
Tim Schaub
415ac07a60 Downgrade to mocha@2.3.4 2016-01-27 11:11:01 -07:00
Tim Schaub
aff41cfcc0 Upgrade to eslint@2.0.0-beta.2 2016-01-27 09:35:01 -07:00
greenkeeperio-bot
aca849ffb1 chore(package): update fs-extra to version 0.26.5
http://greenkeeper.io/
2016-01-27 08:54:37 -07:00
Frédéric Junod
a9cbea1563 Merge pull request #4738 from fredj/more_tests
Add unit tests for ol.control.Rotate and ol.control.Zoom
2016-01-27 16:46:25 +01:00
Frederic Junod
2b523fff7c Add tests for ol.control.Zoom 2016-01-27 15:46:06 +01:00
Frederic Junod
e53d8226db Add tests for ol.control.Rotate 2016-01-27 15:46:06 +01:00
Petr Sloup
9562756eeb Merge pull request #4718 from klokantech/raster-reproj-tile-error
Improve raster reprojection behavior when tiles fail to load
2016-01-27 15:05:36 +01:00
Petr Sloup
a05c932973 Improve raster reprojection behavior when tiles fail to load 2016-01-27 14:56:18 +01:00
Frédéric Junod
398a292053 Merge pull request #4734 from openlayers/greenkeeper-sinon-1.17.3
Update sinon to version 1.17.3 🚀
2016-01-27 14:18:39 +01:00
Frédéric Junod
551a2edf4b Merge pull request #4726 from openlayers/greenkeeper-mocha-2.4.2
Update mocha to version 2.4.2 🚀
2016-01-27 14:18:19 +01:00
Andreas Hocevar
9bf2242626 Merge pull request #4725 from ahocevar/vectortile-projection
Untangle vector tile feature reprojection
2016-01-27 14:12:16 +01:00
Frédéric Junod
be3e985344 Merge pull request #4735 from fredj/defaultDataProjection_jsdoc
Add default value for defaultDataProjection
2016-01-27 13:59:57 +01:00
Frédéric Junod
58abb9b165 Merge pull request #4732 from fredj/see_jsdoc
Fix '@see' link in src/ol/deviceorientation.js
2016-01-27 13:59:49 +01:00
Frederic Junod
98da9f1800 Add default value for defaultDataProjection 2016-01-27 13:39:21 +01:00
Andreas Hocevar
44764ec1d1 Use rendered tile size limit to avoid big images
When using tile sets with a high tilePixelRatio, the maximum pixel size can
trouble the browser. Instead, we now use replay rendering by tile size limits
instead of resolution ratio limits.
2016-01-27 13:38:56 +01:00
greenkeeperio-bot
f4582d2f46 chore(package): update sinon to version 1.17.3
http://greenkeeper.io/
2016-01-27 04:51:59 -07:00
Frederic Junod
e674255ebe Fix '@see' link in src/ol/deviceorientation.js 2016-01-27 12:31:08 +01:00
Andreas Hocevar
7b78c215ae Merge pull request #4720 from ahocevar/tileloadfunction-docs
Improve tileLoadFunction docs
2016-01-27 10:32:12 +01:00
Andreas Hocevar
52c6739b95 Improve tileLoadFunction docs 2016-01-27 10:17:46 +01:00
Andreas Hocevar
6290fb3227 Merge pull request #4717 from openlayers/greenkeeper-phantomjs-2.1.2
Update phantomjs to version 2.1.2 🚀
2016-01-27 10:08:06 +01:00
Andreas Hocevar
ebcccd2cf7 Merge pull request #4727 from nicholas-l/phantomjs2
Fix phantomjs
2016-01-27 09:56:47 +01:00
Nicholas L
73b6adba49 Remove polyfill and incorrect dependency 2016-01-27 21:52:50 +13:00
Nicholas L
d8631c35eb Fix phantomjs 2016-01-27 20:36:10 +13:00
greenkeeperio-bot
4c2b17a42e chore(package): update mocha to version 2.4.2
http://greenkeeper.io/
2016-01-26 17:47:01 -07:00
Andreas Hocevar
483376deb2 Untangle vector tile feature reprojection 2016-01-27 00:42:51 +01:00
Marc Jansen
d091f3f835 Merge pull request #4679 from gaf-ag/fullscreentarget
Add a source option for the full screen control
2016-01-26 17:37:27 +01:00
Yashar Moradi
299a62804c source option added to ol.control.FullScreen including an example 2016-01-26 09:27:39 +01:00
greenkeeperio-bot
98338565d0 chore(package): update phantomjs to version 2.1.2
http://greenkeeper.io/
2016-01-25 15:58:53 -07:00
Frédéric Junod
682e65fead Merge pull request #4712 from fredj/jsdoc_return
Add missing JSDoc tags
2016-01-25 15:00:19 +01:00
Frederic Junod
b7cbd20b6f Add missing JSDoc tags 2016-01-25 14:37:45 +01:00
Bart van den Eijnden
0b70124cdd Merge pull request #4700 from adube/feature-wmsgetfeatureinfo-layername
Add 'layers' option for WMSGetFeatureInfo format
2016-01-21 17:05:00 +01:00
Alexandre Dubé
906a132e89 Add layerName option for WMSGetFeatureInfo format
This option allows the format to read only features of a
given layer. This is useful if you wish to make a single
query to a WMS server with multiple layers in it.
2016-01-21 10:54:26 -05:00
Frédéric Junod
b9c3981261 Merge pull request #4705 from gberaudo/remaining_source_state_casts
Remove remaining unnecessary ol.source.State casts
2016-01-21 16:34:20 +01:00
Guillaume Beraudo
9132d91f66 Remove remaining unnecessary ol.source.State casts 2016-01-21 16:05:06 +01:00
Tim Schaub
f2c1fd207e Merge pull request #4703 from gberaudo/source_options_fixes
Source options fixes.
2016-01-21 07:54:26 -07:00
Guillaume Beraudo
d32d6e6851 Simplify source state option
The ol.source.State is already a string.
Removed extra union and cast.
2016-01-21 14:40:58 +01:00
Guillaume Beraudo
f0e396678c Add missing cacheSize attribute 2016-01-21 14:39:42 +01:00
Frédéric Junod
7787bc2c07 Merge pull request #4698 from fredj/regular_shape_rotate_with_view
Add rotateWithView option to ol.style.RegularShape
2016-01-21 11:20:04 +01:00
Frederic Junod
aec4e468e3 Add rotateWithView option to ol.style.RegularShape 2016-01-21 11:09:20 +01:00
Andreas Hocevar
7d168cb6e2 Merge pull request #4697 from gberaudo/bind_tileurl_function
Bind tileUrlFunction to the source
2016-01-20 22:10:47 +01:00
Guillaume Beraudo
d2cc04d770 Bind tileUrlFunction to the source
In order to have the function returned by ol.source.UrlTile#getTileUrlFunction()
to return a url even when executed outside the context of the source, then it
should be bound to the source.
2016-01-20 17:54:32 +01:00
Frédéric Junod
ccdb189e77 Merge pull request #4693 from openlayers/release-v3.13.0
Release v3.13.0
2016-01-20 15:35:16 +01:00
Frederic Junod
b5e7a2673d Update package version to 3.13.0 2016-01-20 14:59:08 +01:00
Frederic Junod
e782e1262c Changelog for v3.13.0 2016-01-20 14:59:08 +01:00
Frédéric Junod
2975b92fea Merge pull request #4694 from fredj/lint_errors
Fix eslint errors in wms-time example
2016-01-20 14:53:37 +01:00
Frederic Junod
031c31d367 Fix no-use-before-define eslint error 2016-01-20 14:43:27 +01:00
Frederic Junod
30d8d6efd7 Remove unused variable 2016-01-20 14:43:10 +01:00
Bart van den Eijnden
268298d2d8 Merge pull request #4527 from bartvde/wmstime_new
Add support for smooth TileWMS dimensions
2016-01-20 14:14:16 +01:00
Tim Schaub
10837fb91a Merge pull request #4691 from tschaub/bing
Updated Bing Maps key.
2016-01-20 06:01:49 -07:00
Andreas Hocevar
7277e295e6 Merge pull request #4673 from ahocevar/fixed-tileurlfunction
Respect fixed tile url functions when setting url(s)
2016-01-20 13:28:32 +01:00
Tim Schaub
85ead5486c New Bing Maps key 2016-01-19 14:08:51 -07:00
Frédéric Junod
b134b080db Merge pull request #4689 from openlayers/revert-4581-no-render-on-interaction-start
Revert "Do not render in handleDownEvent"
2016-01-19 15:48:19 +01:00
Frédéric Junod
eb395894e1 Revert "Do not render in handleDownEvent" 2016-01-19 15:26:10 +01:00
Andreas Hocevar
86c7f950d6 Add setUrl tests 2016-01-19 13:40:47 +01:00
Andreas Hocevar
4b441dc503 Respect fixed tile url functions when setting url(s) 2016-01-19 13:40:47 +01:00
Marc Jansen
1ad3d4e764 Merge pull request #4688 from marcjansen/focus-map
Give map a focus-outline in accessible-example
2016-01-19 11:58:12 +01:00
Marc Jansen
f0b0e00b06 Give map a focus-outline in accessible-example 2016-01-19 11:16:20 +01:00
Frédéric Junod
4dbc4c5bfd Merge pull request #4642 from alexbrault/colour-ex
Move the icon style color to its own example
2016-01-19 08:43:21 +01:00
Frédéric Junod
d8296e5dac Merge pull request #4685 from fredj/rm_check-whitespace
Remove bin/check-whitespace.py
2016-01-19 08:37:29 +01:00
Alexandre Brault
2d151fb353 Remove popup code from color example 2016-01-18 22:40:04 -05:00
Alexandre Brault
341ba5b859 Move the icon style color to its own example 2016-01-18 22:36:34 -05:00
Tim Schaub
308565f8f4 Merge pull request #4684 from openlayers/greenkeeper-eslint-config-openlayers-3.0.0
Update eslint-config-openlayers to version 3.0.0 🚀
2016-01-18 10:21:33 -07:00
Frederic Junod
5b98066d16 Remove bin/check-whitespace.py 2016-01-18 16:50:16 +01:00
greenkeeperio-bot
93ed1ee50a chore(package): update eslint-config-openlayers to version 3.0.0
http://greenkeeper.io/
2016-01-18 08:46:43 -07:00
Andreas Hocevar
5961431505 Merge pull request #4677 from ahocevar/pixel-proj
Make pixel projection handling work in compiled mode
2016-01-15 22:06:42 +01:00
Andreas Hocevar
d6a8c9465e Make pixel projection handling work in compiled mode
The compiler seems to have trouble with functions that can run with
different 'this' types. By moving the units handling to the callback, this
issue can be avoided.
2016-01-15 20:59:16 +01:00
Tim Schaub
dc820fced4 Merge pull request #4639 from nicholas-l/googBind
Remove use of goog.bind and use ES5 .bind.
2016-01-15 09:41:11 -08:00
Nicholas L
db3ad70a3d Remove use of goog.bind and use ES5 .bind 2016-01-15 22:10:55 +13:00
Frédéric Junod
5b40190cbe Merge pull request #4655 from openlayers/greenkeeper-browserify-13.0.0
Update browserify to version 13.0.0 🚀
2016-01-13 13:48:52 +01:00
Andreas Hocevar
69ad741dd4 Merge pull request #4666 from WeaveTeam/dragbox-dragevent-pr
Add a 'boxdrag' event to ol.interaction.DragBox. Resolves #4563 .
2016-01-13 12:43:26 +01:00
Frédéric Junod
ffb9674243 Merge pull request #4669 from fredj/eslint_contributing
Remove reference to Closure Linter in CONTRIBUTING.md
2016-01-13 12:19:48 +01:00
Frederic Junod
22dab733f0 Remove reference to Closure Linter in CONTRIBUTING.md
See #4602
2016-01-13 12:01:29 +01:00
Frédéric Junod
ace3ac4f1d Merge pull request #4665 from openlayers/greenkeeper-istanbul-0.4.2
Update istanbul to version 0.4.2 🚀
2016-01-13 08:47:15 +01:00
greenkeeperio-bot
3a368809fb chore(package): update istanbul to version 0.4.2
http://greenkeeper.io/
2016-01-13 08:35:28 +01:00
Frédéric Junod
50daa17c2a Merge pull request #4663 from openlayers/greenkeeper-glob-6.0.4
Update glob to version 6.0.4 🚀
2016-01-13 08:32:44 +01:00
Petr Sloup
cd308e47d2 Merge pull request #4667 from klokantech/mapquest-opaque-fix
Fix rendering of transparent MapQuest layer type
2016-01-13 07:01:30 +01:00
Petr Sloup
5dfb4199ca Fix rendering of transparent MapQuest layer type 2016-01-12 23:23:16 +01:00
Philip "digitalfox" Kovac
83e173d91f Add a 'boxdrag' event to ol.interaction.DragBox. Resolves #4563 . 2016-01-12 17:16:56 -05:00
Marc Jansen
fdc2f9d97e Merge pull request #4661 from gaf-ag/devdocnodejs
Fixes #4654 Developer Documentation Updated
2016-01-12 18:22:08 +01:00
Yashar Moradi
f725a46220 Fixes #4654 Metalsmith v2.0 and above uses generators which are not supported out of the box by node.js 0.12.x and below. 2016-01-12 18:00:16 +01:00
Frédéric Junod
08e51d1c8e Merge pull request #4658 from openlayers/greenkeeper-jquery-2.2.0
Update jquery to version 2.2.0 🚀
2016-01-12 16:09:50 +01:00
Bart van den Eijnden
3f5a8085b6 Merge pull request #4659 from bartvde/drawimage-safari-fix
Make sure icons show up in Safari
2016-01-12 16:07:16 +01:00
Bart van den Eijnden
4ef1f5e63f Make sure icons show up in Safari
Make sure that drawImage calls don't exceed source image dimensions.
2016-01-12 15:57:11 +01:00
Frédéric Junod
936cd6a028 Merge pull request #4652 from fredj/simplify_fullscreen
Use map.getTargetElement instead of map.getTarget
2016-01-12 11:48:14 +01:00
Frederic Junod
3df9ae8c5e Use map.getTargetElement instead of map.getTarget 2016-01-12 11:36:07 +01:00
greenkeeperio-bot
63b17022f6 chore(package): update browserify to version 13.0.0
http://greenkeeper.io/
2016-01-12 02:19:02 -08:00
greenkeeperio-bot
d2ecb1e819 chore(package): update glob to version 6.0.4
http://greenkeeper.io/
2016-01-12 02:08:16 -08:00
greenkeeperio-bot
1757fa973b chore(package): update jquery to version 2.2.0
http://greenkeeper.io/
2016-01-12 01:58:35 -08:00
Petr Sloup
dccf867308 Merge pull request #4649 from klokantech/getopaque-doc-fix
Missing parameter description for ol.source.Tile#getOpaque
2016-01-12 09:27:41 +01:00
Petr Sloup
3607cddcca Missing parameter description for ol.source.Tile#getOpaque 2016-01-12 09:16:40 +01:00
Tim Schaub
c9e2b384e7 Merge pull request #4602 from tschaub/eslint
Use ESLint.
2016-01-12 00:09:15 -08:00
Petr Sloup
11bd31c15b Merge pull request #4628 from klokantech/opaque-reprojection-fix
Fix for reprojecting opaque tile sources
2016-01-12 09:06:14 +01:00
Petr Sloup
2c3ed38714 Fix for reprojecting opaque tile sources 2016-01-12 08:58:16 +01:00
Frédéric Junod
5504916b80 Merge pull request #4618 from openlayers/greenkeeper-resemblejs-2.1.0
Update resemblejs to version 2.1.0 🚀
2016-01-12 08:56:42 +01:00
Tim Schaub
fd77ab64ad Use eslint@2.0.0-beta.1 2016-01-11 23:37:29 -08:00
Tim Schaub
13a981c94b Fewer blank lines 2016-01-11 22:03:23 -08:00
Tim Schaub
8d80924ba8 Remove gjslint.py 2016-01-11 22:03:12 -08:00
Tim Schaub
0a5d15db50 Remove jshint 2016-01-11 18:58:02 -08:00
Tim Schaub
8f0ecc4df2 Run ESLint with make lint 2016-01-11 18:56:09 -08:00
Tim Schaub
534124ec2f Lint free rendering tests 2016-01-11 18:56:09 -08:00
Tim Schaub
8c38d22b60 Lint free examples 2016-01-11 18:56:09 -08:00
Tim Schaub
0555bb081a Test indentation 2016-01-11 18:56:09 -08:00
Tim Schaub
3cf8618fc7 Prefer single line assignment to 80 character limit 2016-01-11 18:56:08 -08:00
Tim Schaub
59a66c7aaa Remaining valid-jsdoc corrections 2016-01-11 18:56:08 -08:00
Tim Schaub
e6f6dcc230 Partial valid-jsdoc corrections 2016-01-11 18:56:08 -08:00
Tim Schaub
b1d00af58b More globals 2016-01-11 18:56:08 -08:00
Tim Schaub
fd0e2436da Always provide a default case for switch 2016-01-11 18:56:08 -08:00
Tim Schaub
932bf4deb3 Explicitly mark fall-throughs 2016-01-11 18:56:08 -08:00
Tim Schaub
54df314936 Consistent curly brace style 2016-01-11 18:56:08 -08:00
Tim Schaub
ec10b661f3 Use block scoping 2016-01-11 18:56:08 -08:00
Tim Schaub
29a723166d No empty blocks 2016-01-11 18:56:07 -08:00
Tim Schaub
4e0cddcb41 Lint-free tests 2016-01-11 18:56:07 -08:00
Tim Schaub
cca86886f1 Define variables before use 2016-01-11 18:56:07 -08:00
Tim Schaub
3602a37c96 Remove this commit with ESLint 2.0 2016-01-11 18:56:07 -08:00
Tim Schaub
f627f7679b Valid JSDoc annotations 2016-01-11 18:56:07 -08:00
Tim Schaub
154b8babc4 Allow console use in Phantom 2016-01-11 18:56:07 -08:00
Tim Schaub
3f23dfb87b Indentation 2016-01-11 18:56:07 -08:00
Tim Schaub
aac1d921c7 Unused variables 2016-01-11 18:56:07 -08:00
Tim Schaub
179b241aec Declare variables before assignment 2016-01-11 18:56:07 -08:00
Tim Schaub
f0fc4d4e73 Curly brace spacing 2016-01-11 18:56:06 -08:00
Tim Schaub
9ae748408a Statement inside curly braces on its own line 2016-01-11 18:56:06 -08:00
Tim Schaub
8ab5a338b5 Unused origins 2016-01-11 18:56:06 -08:00
Tim Schaub
227c984d89 More test globals 2016-01-11 18:56:06 -08:00
Tim Schaub
abd0d66e66 Lint-free tileurlfunction.test.js 2016-01-11 18:56:06 -08:00
Tim Schaub
23eebf396c Lint-free view.test.js 2016-01-11 18:56:06 -08:00
Tim Schaub
98dedfd2ff Custom lint configuration for test directory 2016-01-11 18:56:06 -08:00
Tim Schaub
681948e71c Lint-free test-extensions.js 2016-01-11 18:56:06 -08:00
Tim Schaub
b3578325cb Lint free tasks 2016-01-11 18:56:06 -08:00
Tim Schaub
b0a70b0ca6 Correcting invalid JSDoc blocks 2016-01-11 18:56:05 -08:00
Tim Schaub
38d0e98ff5 Whitespace 2016-01-11 18:56:05 -08:00
Tim Schaub
23f3e21ba4 Unused variables 2016-01-11 18:56:05 -08:00
Tim Schaub
1d65bab158 Dangling commas 2016-01-11 18:56:05 -08:00
Tim Schaub
80f9a7c5a5 Use ESLint 2016-01-11 18:56:05 -08:00
Andreas Hocevar
c2f90f21db Merge pull request #4647 from ahocevar/snap-round-to-pixel
Proper rounding for possibly negative numbers
2016-01-11 16:34:24 +01:00
Andreas Hocevar
a3147c5d08 Proper rounding for possibly negative numbers 2016-01-11 16:25:09 +01:00
Tim Schaub
7222af3284 Merge pull request #4641 from tschaub/icon
Remove extra options from icon example.
2016-01-11 05:14:04 -07:00
Andreas Hocevar
d916e8ccaf Merge pull request #4629 from ahocevar/scaleline
Simplify scaleline calculation
2016-01-11 10:12:53 +01:00
Tim Schaub
5001272a2e Remove extra options from icon example 2016-01-10 17:02:02 -07:00
Andreas Hocevar
d05b519f2f Merge pull request #4457 from alexbrault/colour-icon
Add color option to ol.style.Icon
2016-01-10 23:19:54 +01:00
Andreas Hocevar
0f8373dd2d Merge pull request #4638 from ahocevar/proj-extent
Do not rely on projection extent
2016-01-08 10:44:59 +01:00
Andreas Hocevar
dfb534f1d4 Do not rely on projection extent 2016-01-08 10:25:56 +01:00
Tim Schaub
7a644730a5 Merge pull request #4635 from openlayers/greenkeeper-async-1.5.2
Update async to version 1.5.2 🚀
2016-01-07 18:16:20 -07:00
greenkeeperio-bot
4066d38e4a chore(package): update async to version 1.5.2
http://greenkeeper.io/
2016-01-07 17:08:46 -07:00
Andreas Hocevar
393a95e41c Properly handle modulo of negative numbers 2016-01-07 20:19:40 +01:00
Andreas Hocevar
7a8451adeb Add example with US scale line and reprojection 2016-01-07 20:14:45 +01:00
Andreas Hocevar
b8fc917016 Do not depend on units for resolutions calculation 2016-01-07 20:14:44 +01:00
Andreas Hocevar
6b8da1237c Simplify scaleline calculation 2016-01-07 20:14:44 +01:00
Andreas Hocevar
5c49e399ce Merge pull request #4581 from ahocevar/no-render-on-interaction-start
Do not render in handleDownEvent
2016-01-07 18:24:39 +01:00
Frédéric Junod
32dadc008b Merge pull request #4541 from fredj/linestring_interpolated_point
Add new ol.geom.LineString#getCoordinateAt function
2016-01-07 18:02:21 +01:00
Frédéric Junod
aff6449c74 Merge pull request #4489 from openlayers/greenkeeper-phantomjs-1.9.19
Update phantomjs to version 1.9.19 🚀
2016-01-07 15:34:34 +01:00
Petr Sloup
2237dc8e72 Merge pull request #4625 from klokantech/tilejson-xhr-default
Use XHR by default to load TileJSON in ol.source.TileJSON
2016-01-07 15:30:10 +01:00
greenkeeperio-bot
a4b34c16d7 chore(package): update phantomjs to version 1.9.19
http://greenkeeper.io/
2016-01-07 15:14:16 +01:00
Frederic Junod
e336947e8d Add new ol.geom.LineString#getCoordinateAt function 2016-01-07 11:32:25 +01:00
Petr Sloup
bc0d783f50 Use XHR by default to load TileJSON in ol.source.TileJSON 2016-01-07 09:19:23 +01:00
Tim Schaub
4ba443e829 Merge pull request #4622 from openlayers/greenkeeper-fs-extra-0.26.4
Update fs-extra to version 0.26.4 🚀
2016-01-06 12:48:02 -07:00
Andreas Hocevar
3d8adaab67 Merge pull request #4630 from ahocevar/meters-per-unit
Simplify meters per unit handling
2016-01-06 14:06:43 +01:00
Andreas Hocevar
24f8cba0a1 Simplify meters per unit handling 2016-01-06 13:53:55 +01:00
Frédéric Junod
607d8ad154 Merge pull request #4490 from openlayers/greenkeeper-istanbul-0.4.1
Update istanbul to version 0.4.1 🚀
2016-01-06 12:35:00 +01:00
Andreas Hocevar
cde6dce939 Merge pull request #4574 from WeaveTeam/dragbox-config-pr
Added boxEndCondition to DragBoxOptions to replace the hardcoded chec…
2016-01-06 11:47:56 +01:00
Frédéric Junod
1caaf6d75f Merge pull request #4553 from openlayers/greenkeeper-mustache-2.2.1
Update mustache to version 2.2.1 🚀
2016-01-06 11:43:33 +01:00
Frédéric Junod
1300cde76c Merge pull request #4626 from simonseyock/master
Fixed documentation error
2016-01-06 11:40:49 +01:00
Simon Seyock
310023e179 Fixed documentation error
The imageLoad function option of all ol.source.Image subclasses are not of type ol.TileLoadFunctionType but of type ol.ImageLoadFunctionType.
2016-01-06 11:31:54 +01:00
Frédéric Junod
8c6d9c9e66 Merge pull request #4606 from fredj/ol.DragBoxEvent_MapBrowserEvent
Include originating MapBrowserEvent in ol.DragBoxEvent
2016-01-06 09:15:32 +01:00
greenkeeperio-bot
bd6566f85b chore(package): update fs-extra to version 0.26.4
http://greenkeeper.io/
2016-01-05 22:38:23 -07:00
Tim Schaub
b8d69e0f3b Merge pull request #4614 from tschaub/one-fewer-interface
Remove checksum interface.
2016-01-05 11:16:34 -07:00
Philip "digitalfox" Kovac
10e2510f0f Added boxEndCondition to DragBoxOptions to replace the hardcoded check against DRAG_BOX_HYSTERESIS_PIXELS_SQUARED. 2016-01-05 13:14:30 -05:00
Andreas Hocevar
15be53e98c Merge pull request #4613 from ahocevar/select-self
Include own layer in layerFilter and only select unselected features
2016-01-05 17:48:20 +01:00
Frédéric Junod
ce3030268b Merge pull request #4612 from fredj/vector_event_type
Set oli.source.VectorEvent#feature to ol.Feature|undefined
2016-01-05 15:11:48 +01:00
Tim Schaub
aeffd48ccb Remove checksum interface 2016-01-05 07:07:45 -07:00
Frédéric Junod
2f1975636a Merge pull request #4620 from fredj/polyline_option_factor
Fix olx.format.PolylineOptions#factor type
2016-01-05 15:07:26 +01:00
Frédéric Junod
b7be16eac7 Merge pull request #4621 from fredj/gpx_option_readExtensions
Fix olx.format.GPXOptions#readExtensions type
2016-01-05 14:59:51 +01:00
Frederic Junod
d55afd57b5 Fix olx.format.GPXOptions#readExtensions type
This property is optional.
2016-01-05 13:55:14 +01:00
Petr Sloup
22b1460595 Merge pull request #4619 from klokantech/tilejson-xhr
Add option to load TileJSON via XHR
2016-01-05 13:48:23 +01:00
Frederic Junod
efc601a76d Fix olx.format.PolylineOptions#factor type
This property is optional.
2016-01-05 13:44:01 +01:00
Petr Sloup
ffd9ace84e Add option to load TileJSON via XHR 2016-01-05 13:40:20 +01:00
greenkeeperio-bot
251cddfa96 chore(package): update resemblejs to version 2.1.0
http://greenkeeper.io/
2016-01-05 04:54:25 -07:00
Bart van den Eijnden
d9b89a8ebe Merge pull request #4617 from gberaudo/type_geojson_writeFeatureObject
Add missing return type to GeoJSON format
2016-01-05 11:17:39 +01:00
Guillaume Beraudo
a1c72d8890 Add missing return type to GeoJSON format 2016-01-05 11:02:23 +01:00
Marc Jansen
9fe3d8b2e2 Merge pull request #4615 from marcjansen/copyright-2016
Adjust copyright to include 2016
2016-01-05 11:01:25 +01:00
Marc Jansen
52667c1166 Adjust copyright to include 2016 2016-01-05 08:54:32 +01:00
Frédéric Junod
de1f18417a Merge pull request #4616 from openlayers/greenkeeper-closure-util-1.10.0
Update closure-util to version 1.10.0 🚀
2016-01-05 08:42:47 +01:00
greenkeeperio-bot
acd8b3ddc1 chore(package): update closure-util to version 1.10.0
http://greenkeeper.io/
2016-01-05 00:31:44 -07:00
Andreas Hocevar
a65d2d4078 Include own layer in layerFilter and only select unselected features
When selecting an already selected feature, it will be on the Select
interaction's featureOverlay_. So we need to include that featureOverlay_
in the layer filter, regardless of what the user set as layer filter.

When in toggle mode, we need to make sure that we only select features that
are not already included in the selection.
2016-01-04 21:55:00 +01:00
Andreas Hocevar
9f43716723 Merge pull request #4596 from ahocevar/tile-key
Use consistent tile coordinate keys
2016-01-04 19:27:47 +01:00
Bart van den Eijnden
d6235e714e Merge pull request #4609 from bartvde/proj4js
Add ol.proj.setProj4 function
2016-01-04 19:08:30 +01:00
Bart van den Eijnden
cdf9a8e84d Add ol.proj.setProj4 function 2016-01-04 18:51:04 +01:00
Frederic Junod
437412362e Set oli.source.VectorEvent#feature to ol.Feature|undefined
This commit remove incoherency between the class and the interface.
2016-01-04 16:44:23 +01:00
Frederic Junod
7a364e0593 Include originating MapBrowserEvent in ol.DragBoxEvent 2016-01-04 13:29:26 +01:00
Tim Schaub
65b90df4b8 Merge pull request #4603 from openlayers/greenkeeper-async-1.5.1
Update async to version 1.5.1 🚀
2016-01-03 11:39:50 -07:00
Tim Schaub
38fd9f2685 Merge pull request #4604 from openlayers/greenkeeper-clean-css-3.4.9
Update clean-css to version 3.4.9 🚀
2016-01-03 11:39:01 -07:00
greenkeeperio-bot
de3e3d74ce chore(package): update clean-css to version 3.4.9
http://greenkeeper.io/
2016-01-03 08:28:55 -07:00
greenkeeperio-bot
becaf20ee9 chore(package): update async to version 1.5.1
http://greenkeeper.io/
2016-01-02 16:42:26 -07:00
Alexandre Brault
3f16b340fc Accept string as color input 2016-01-01 12:16:50 -05:00
Alexandre Brault
5c70d37da6 Don't tint the icon if the image is tainted 2016-01-01 12:16:50 -05:00
Alexandre Brault
c0b6eac0c2 Add color option to ol.style.Icon 2016-01-01 12:16:50 -05:00
Marc Jansen
a34c0e262b Merge pull request #4600 from openlayers/greenkeeper-glob-6.0.3
Update glob to version 6.0.3 🚀
2015-12-29 08:06:41 +01:00
greenkeeperio-bot
31a1aae02e chore(package): update glob to version 6.0.3
http://greenkeeper.io/
2015-12-28 16:51:47 -07:00
Andreas Hocevar
b208550e6e Merge pull request #4595 from ahocevar/opaque-xyz
Pass 'opaque' option on to superclass
2015-12-28 14:40:59 +01:00
Petr Sloup
cd1304aaae Merge pull request #4598 from klokantech/tilepixelratio
Make ol.source.Tile#getTilePixelRatio work correctly for all sources
2015-12-28 13:31:59 +01:00
Petr Sloup
767ac44e99 Make ol.source.Tile#getTilePixelRatio work for all sources
Even for sources which serve dynamic tile sizes based on devicePixelRatio
2015-12-28 13:19:03 +01:00
Petr Sloup
28240adaf5 Merge pull request #4594 from klokantech/tilequeue-reproj-jam
Fix for TileQueue gradually choking up when using raster reprojection
2015-12-28 13:17:39 +01:00
Petr Sloup
9cdf7678bb Make ol.reproj.Tile#load always async for consistency 2015-12-28 09:30:12 +01:00
Andreas Hocevar
300b5cad44 Use consistent tile coordinate keys
Tile coordinate keys from ol.tilecoord.toString() are different than the ones
from Array.prototype.toString(). Both were used, potentially causing problems.
This change makes them consistent and removes the now unnecessary
ol.tileCoord.toString() function.
2015-12-27 17:59:51 +01:00
Andreas Hocevar
72ec3fd48d Pass 'opaque' option on to superclass 2015-12-27 17:08:54 +01:00
Petr Sloup
e1712eb44a Initiate tile load only after registering it as loading 2015-12-26 10:49:21 +01:00
Andreas Hocevar
552063aeac Do not render in handleDownEvent 2015-12-18 18:21:32 +01:00
Andreas Hocevar
dad58ba622 Merge pull request #4557 from ahocevar/vectortile-canvas
Conditionally render tiles to a separate tile canvas
2015-12-18 10:43:52 +01:00
Andreas Hocevar
bbc49ca805 Merge pull request #4580 from openlayers/greenkeeper-fs-extra-0.26.3
Update fs-extra to version 0.26.3 🚀
2015-12-18 08:05:36 +01:00
Andreas Hocevar
38bb1569af Remove no longer needed buffer for direct rendering 2015-12-18 00:27:42 +01:00
greenkeeperio-bot
e07c0ec829 chore(package): update fs-extra to version 0.26.3
http://greenkeeper.io/
2015-12-17 10:21:32 -07:00
Bart van den Eijnden
6dbb4e6737 Merge pull request #4579 from openlayers/v3.12.x
Release v3.12.1
2015-12-17 16:20:01 +01:00
Bart van den Eijnden
863cc1bae3 Update package version to 3.12.1 2015-12-17 15:31:19 +01:00
Bart van den Eijnden
60179e9ab9 Changelog for v3.12.1 2015-12-17 15:30:57 +01:00
Andreas Hocevar
a512a5b115 Merge pull request #4578 from ahocevar/apidoc-landingpage
Fix apidoc landing page markup
2015-12-17 15:24:33 +01:00
Bart van den Eijnden
46647373ee Merge pull request #4570 from bartvde/numbersafe
Rename defaultSort to numberSafeCompareFunction on ol.array
2015-12-17 15:24:13 +01:00
Bart van den Eijnden
4b7e8f5f83 Merge pull request #4567 from bartvde/issue-4566
Always pass on a compare function to sort
2015-12-17 15:23:50 +01:00
Andreas Hocevar
20be8980e1 Merge pull request #4578 from ahocevar/apidoc-landingpage
Fix apidoc landing page markup
2015-12-17 15:15:04 +01:00
Andreas Hocevar
34139f4dce Fix apidoc landing page markup 2015-12-17 15:13:26 +01:00
Andreas Hocevar
9affb99899 More sensible split between direct and canvas rendering 2015-12-17 10:58:35 +01:00
Marc Jansen
f395a0f8c5 Merge pull request #4575 from openlayers/greenkeeper-rbush-1.4.2
Update rbush to version 1.4.2 🚀
2015-12-17 08:14:54 +01:00
Andreas Hocevar
80f10ce824 Avoid unnecessary calculation in loops 2015-12-17 00:17:28 +01:00
Andreas Hocevar
46a266fa5c Fix replays on transformed contexts 2015-12-17 00:17:27 +01:00
Andreas Hocevar
4f2df30f1d Avoid clipping by rendering tiles with rotated labels
This only works when the device pixel ratio is 1. Labels are incorrectly
positioned and not at all rotated for other pixel ratios. I cannot find the
cause for this problem.
2015-12-17 00:17:27 +01:00
Andreas Hocevar
c1b16217f2 Conditionally render tiles to a separate tile canvas
Because clip geometries are anti-aliased in most browsers, there will be tiny
gaps between tiles. If tiles are rendered to a tile canvas which is then drawn
to the map canvas upon composition, these gaps can be avoided. For rotated
views, it is stil necessary to clip the tile, but in this case a 1-pixel
buffer is used.

This change also brings a huge performance improvement for panning, because
the fully rendered tiles can be reused.

Because of the added cost of using drawImage in addition to replaying the tile
replay group, we fall back to directly drawing to the map canvas when the tile
canvas would be too large, or during interaction/animation when resolution or
rotation change.
2015-12-17 00:17:27 +01:00
greenkeeperio-bot
34fb85a9d7 chore(package): update rbush to version 1.4.2
http://greenkeeper.io/
2015-12-16 16:01:49 -07:00
Marc Jansen
6bc6fd9cbc Merge pull request #4571 from marcjansen/select-i-docs
Correct typedef of selectinteraction options obj
2015-12-16 14:55:19 +01:00
Marc Jansen
945f1e7580 Correct typedef of selectinteraction options obj
The key `features` of the constructor options that can be passed to
`ol.interaction.Select` can also be `undefined`.
2015-12-16 14:42:39 +01:00
Bart van den Eijnden
ae90c32f01 Merge pull request #4570 from bartvde/numbersafe
Rename defaultSort to numberSafeCompareFunction on ol.array
2015-12-16 13:50:59 +01:00
Bart van den Eijnden
25e0053a13 Rename defaultSort to numberSafeCompareFunction on ol.array 2015-12-16 13:40:05 +01:00
Bart van den Eijnden
88255fd776 Merge pull request #4567 from bartvde/issue-4566
Always pass on a compare function to sort
2015-12-16 11:35:59 +01:00
Bart van den Eijnden
e0be143ed5 Always pass on a compare function to sort 2015-12-16 10:54:46 +01:00
Bart van den Eijnden
dd4e88525e Merge pull request #4001 from bartvde/jspdf2
Export PDF's using jsPDF
2015-12-15 11:43:04 +01:00
Bart van den Eijnden
5d64762bcb Merge pull request #4562 from openlayers/release-v3.12.0
Release v3.12.0
2015-12-15 11:10:24 +01:00
Bart van den Eijnden
7c98e922c3 Update package version to 3.12.0 2015-12-15 10:57:53 +01:00
Bart van den Eijnden
41c81dec88 Changelog for v3.12.0 2015-12-15 10:57:30 +01:00
Bart van den Eijnden
887e90af1e Merge pull request #4559 from bartvde/kml-ff-test
Fix up failing KML test in Firefox
2015-12-15 10:45:42 +01:00
Bart van den Eijnden
69c44e50df Merge pull request #4561 from bartvde/ie-featureloader-test
Exclude feature loader MVT test from IE9
2015-12-15 10:40:58 +01:00
Bart van den Eijnden
bd4c1f8da6 Fix up failing KML test in Firefox 2015-12-15 10:34:47 +01:00
Bart van den Eijnden
95443d0c88 Exclude feature loader MVT test from IE9 2015-12-15 10:30:20 +01:00
Andreas Hocevar
9b1416da29 Merge pull request #4552 from ahocevar/fix-proj-compiler-issue
Make sure compiled code calls ol.VectorTile#setProjection
2015-12-13 13:31:47 +01:00
greenkeeperio-bot
195e802f7c chore(package): update mustache to version 2.2.1
http://greenkeeper.io/
2015-12-13 04:07:08 -07:00
Petr Sloup
48c8f9ea84 Merge pull request #4551 from klokantech/rasterreproj-wrapx
Handle tile coordinate wrapping when reprojecting raster tiles
2015-12-11 16:45:28 +01:00
Petr Sloup
9f5d85f2c6 Handle tile coordinate wrapping when reprojecting raster tiles 2015-12-11 16:35:23 +01:00
Andreas Hocevar
c4237c7858 Merge pull request #4544 from openlayers/greenkeeper-vector-tile-1.2.0
Update vector-tile to version 1.2.0 🚀
2015-12-11 15:36:08 +01:00
Andreas Hocevar
fbb59d29b9 Make sure compiled code calls ol.VectorTile#setProjection 2015-12-11 15:20:21 +01:00
Bart van den Eijnden
554aaf1574 Merge pull request #4537 from bartvde/issue-4312
Allow specifying non default DPI on ol.source.TileArcGISRest
2015-12-11 13:42:26 +01:00
Andreas Hocevar
2ebcadfcd5 Merge pull request #4548 from ahocevar/vectortile-docs
Improve vector tile related docs
2015-12-11 12:16:35 +01:00
Andreas Hocevar
d9bb3adbe8 Improve vector tile related docs 2015-12-11 12:01:24 +01:00
Tobias Sauerwein
070a6b11f0 Merge pull request #4549 from tsauerwein/multiline-example
Update vector label example
2015-12-11 10:25:57 +01:00
tsauerwein
43e1c86b6e Update vector label example 2015-12-11 10:14:02 +01:00
Bart van den Eijnden
b0b202f112 Merge pull request #4512 from flightaware/label-newlines
Support for multi-line labels (improved)
2015-12-11 09:38:07 +01:00
Marc Jansen
2fdf7f508d Merge pull request #4546 from openlayers/greenkeeper-coveralls-2.11.6
Update coveralls to version 2.11.6 🚀
2015-12-11 07:54:57 +01:00
greenkeeperio-bot
e14197c060 chore(package): update coveralls to version 2.11.6
http://greenkeeper.io/
2015-12-10 18:12:22 -07:00
greenkeeperio-bot
814fd858d8 chore(package): update vector-tile to version 1.2.0
http://greenkeeper.io/
2015-12-10 12:16:18 -07:00
Philip Clifton
97995cf20b Add newline support for text 2015-12-10 11:24:39 -06:00
Frédéric Junod
8fc85198b0 Merge pull request #4539 from fredj/examples_index
Ignore index.html in example list
2015-12-10 10:47:56 +01:00
Frederic Junod
2b64a7af7b Ignore index.html in example list
Fixes #3685
2015-12-10 10:18:23 +01:00
Frédéric Junod
fc2c9176a6 Merge pull request #4536 from fredj/tilequeue_listen_in_enqueue
Register the change callback when the tile is enqueued
2015-12-10 09:08:31 +01:00
Frederic Junod
7192644c07 Register the change callback when the tile is enqueued 2015-12-09 17:15:47 +01:00
Bart van den Eijnden
992870e2d2 Allow specifying non default DPI on ol.source.TileArcGISRest 2015-12-09 15:27:20 +01:00
Frederic Junod
ad3c6713da Return if the element is added to the ol.structs.PriorityQueue 2015-12-09 15:27:07 +01:00
Andreas Hocevar
3fef07f9e9 Merge pull request #4528 from ahocevar/simplify-tile-featureloader
Remove redundant code from ol.featureloader.tile
2015-12-09 14:12:17 +01:00
Bart van den Eijnden
0c3aed0083 Add support for smooth TileWMS dimensions 2015-12-09 14:06:47 +01:00
Andreas Hocevar
a5abd8df23 Merge pull request #4535 from ahocevar/osm-example-style
Do not use an array for a single style
2015-12-09 10:50:31 +01:00
Andreas Hocevar
73158b8c71 Do not use an array for a single style 2015-12-09 10:10:41 +01:00
Frédéric Junod
4f85cbec54 Merge pull request #4532 from fredj/dimensions_nonull
Mark olx.source.WMTSOptions#dimensions as not null
2015-12-09 08:59:06 +01:00
Andreas Hocevar
8f4c6a5bbf Remove redundant code from ol.featureloader.tile 2015-12-08 18:30:25 +01:00
Frederic Junod
5b7227a0bf Mark olx.source.WMTSOptions#dimensions as not null 2015-12-08 17:46:49 +01:00
Frédéric Junod
f387bb75bf Merge pull request #4530 from fredj/goog.isNull
Remove use of goog.isNull
2015-12-08 16:43:20 +01:00
Frédéric Junod
e27bfc4fa6 Merge pull request #4529 from fredj/coding_style
Update coding style rules
2015-12-08 16:23:48 +01:00
Frederic Junod
aa2838cdcd Remove use of goog.isNull 2015-12-08 16:05:38 +01:00
Frederic Junod
be16ba01ca Update coding style rules 2015-12-08 14:52:06 +01:00
Andreas Hocevar
3413f6d138 Merge pull request #4518 from ahocevar/osm-vector-tiles
Add support for OSM vector tiles
2015-12-08 11:01:49 +01:00
Andreas Hocevar
954a5077cf Merge pull request #4524 from ahocevar/custom-symbols
Add example for rendering custom point symbols
2015-12-07 22:22:20 +01:00
Andreas Hocevar
0050f00703 Add example for rendering custom point symbols 2015-12-07 21:41:42 +01:00
Andreas Hocevar
867bcce1cc Merge pull request #4523 from ahocevar/render-to-context
Allow rendering geometries to an arbitrary canvas
2015-12-07 19:13:47 +01:00
Andreas Hocevar
257abb63d7 Allow rendering geometries to an arbitrary canvas 2015-12-07 17:27:04 +01:00
Erik Timmers
004e7ad0d0 Add PDF example 2015-12-07 13:53:37 +01:00
Andreas Hocevar
ba93698c20 Merge pull request #4525 from ahocevar/test-render-retina
Make render tests work on more devices
2015-12-07 11:32:13 +01:00
Andreas Hocevar
35064a45f7 Merge pull request #4515 from ahocevar/icon-canvas
Accept HTMLCanvasElement for an icon's img
2015-12-07 11:26:02 +01:00
Andreas Hocevar
a940cdd6a7 Add support for OSM vector tiles 2015-12-07 11:15:25 +01:00
Andreas Hocevar
e978133b85 Make render tests work on more devices
By setting a device pixel ratio of 1.0 and increasing the tolerance for raster
reprojection tests, the render tests now also run from the console on OSX
devices with retina display.
2015-12-06 17:59:49 +01:00
Andreas Hocevar
0b4c0ee41c Merge pull request #4521 from ahocevar/imagestyle-docs
Fix imagestyle docs
2015-12-06 11:43:13 +01:00
Andreas Hocevar
5a1588a2dc Fix imagestyle docs 2015-12-06 11:33:40 +01:00
Andreas Hocevar
abb680d28f Accept HTMLCanvasElement for an icon's img 2015-12-04 14:14:01 +01:00
Frédéric Junod
8fcedb03a4 Merge pull request #4508 from fredj/rm_unused_underscore
Remove unused files
2015-12-04 13:44:56 +01:00
Frédéric Junod
7ecb6700fb Merge pull request #4487 from fredj/css_cleanup
Remove fallback css color
2015-12-04 13:44:41 +01:00
Frédéric Junod
4892a2f039 Merge pull request #4502 from fredj/optionsFromCapabilities_jsdoc
Improve ol.source.WMTS.optionsFromCapabilities jsdoc layout
2015-12-04 13:44:27 +01:00
Frédéric Junod
9363a6a340 Merge pull request #4511 from fredj/cleanup
Minor code cleanup
2015-12-02 16:05:42 +01:00
Frederic Junod
6e58be72bb Remove unused goog.require 2015-12-02 14:08:34 +01:00
Frederic Junod
6530fbe6c3 Remove '*.pyc' from .{git,npm}ignore
Not needed since the removal of pake (see #95)
2015-12-02 14:07:37 +01:00
Bart van den Eijnden
612aa3493b Merge pull request #4510 from GeoCat/master
Adding a check just in case the projection is not defined/supported
2015-12-02 11:54:27 +01:00
María Arias de Reyna
609e94a58a Adding a check just in case the projection is not defined/supported on current app. It will just ignore it, as if there was no containerSrs defined. 2015-12-02 11:44:24 +01:00
Frédéric Junod
652638e902 Merge pull request #4505 from fredj/rm_goog_object_getKeys
Remove use of goog.object.getKeys
2015-12-02 09:13:29 +01:00
Frederic Junod
7149113ab6 Remove unused files 2015-12-01 15:50:51 +01:00
Andreas Hocevar
2215f49617 Merge pull request #4472 from ahocevar/layer-filter
Do not ignore layer filter for unmanaged layers
2015-12-01 12:01:58 +01:00
Andreas Hocevar
40fec9ca35 Mention behaviour change in upgrade notes 2015-11-30 17:53:19 +01:00
Éric Lemoine
279eae1dba Do not ignore layer filter for unmanaged layers
PR #3883 made `forEachFeatureAtPixel` ignore unmanaged layers. This commit reverts that change.
2015-11-30 17:53:19 +01:00
Frederic Junod
cf1b1822b8 Remove use of goog.object.getKeys 2015-11-30 17:34:53 +01:00
Frédéric Junod
952a282756 Merge pull request #4476 from fredj/rm_goog.functions.constant
Remove use of goog.functions.constant
2015-11-30 16:22:47 +01:00
Frederic Junod
51b62fb188 Improve ol.source.WMTS.optionsFromCapabilities jsdoc layout 2015-11-30 12:39:24 +01:00
Frédéric Junod
5a123d0840 Merge pull request #4484 from fredj/rm_goog.dom.createDom
Remove use of goog.dom.createDom
2015-11-25 13:31:56 +01:00
Frederic Junod
a186254e14 Remove use of goog.dom.createDom 2015-11-25 12:40:45 +01:00
greenkeeperio-bot
8b0bd11fc8 chore(package): update istanbul to version 0.4.1
http://greenkeeper.io/
2015-11-24 11:46:44 -07:00
Frédéric Junod
d96d82939a Merge pull request #4486 from fredj/DragZoom_vector_doc
Remove note about DragZoom and vector support
2015-11-24 17:23:55 +01:00
Frederic Junod
1ebdba13a6 Remove note about DragZoom and vector support 2015-11-24 17:04:05 +01:00
Frederic Junod
f6326fcc99 Simplify css color notation 2015-11-24 17:01:22 +01:00
Frederic Junod
c8e35afecb Remove fallback css color
All browsers supports CSS3 color: http://caniuse.com/#feat=css3-colors
2015-11-24 16:42:38 +01:00
Frédéric Junod
a2e3f28060 Merge pull request #4483 from fredj/rm_goog.object.containsKey
Remove use of goog.object.containsKey
2015-11-24 16:25:40 +01:00
Bart van den Eijnden
ef54dddbbc Merge pull request #4475 from bartvde/ie-test-failures
Fix up failing tests in Internet Explorer
2015-11-24 14:53:24 +01:00
Bart van den Eijnden
46b7f80fef Skip tests for ol.format.MVT in IE9 2015-11-24 14:43:40 +01:00
Andreas Hocevar
890b515e44 Conditionally skip ol.source.Raster tests 2015-11-24 14:43:40 +01:00
Bart van den Eijnden
7174f65da3 Make test pass on Firefox on OSX as well 2015-11-24 14:43:40 +01:00
Bart van den Eijnden
fb52d472d2 Make regularshape tests pass on Safari on OSX
The threshold needed to be even higher for Safari on OSX.
2015-11-24 14:42:50 +01:00
Bart van den Eijnden
5f0ea2c2c7 Make the rendering tests pass in IE11
For 2 test cases, the thresholds were also too low for Chrome on OSX.
2015-11-24 14:35:18 +01:00
Frédéric Junod
f0048a5611 Merge pull request #4485 from fredj/overlay_dom_simplify
Use appendChild instead of goog.dom.append
2015-11-24 14:10:53 +01:00
Frederic Junod
a9cd2cd278 Use appendChild instead of goog.dom.append 2015-11-24 13:45:54 +01:00
Frederic Junod
8d72589743 Remove use of goog.object.containsKey 2015-11-24 10:17:01 +01:00
Frédéric Junod
90e224bd96 Merge pull request #4481 from fredj/cleanup
Remove blur workaround in ol.control.Attribution
2015-11-24 08:37:46 +01:00
Frederic Junod
290a83e2ed Remove blur workaround in ol.control.Attribution
leftover from #3954
2015-11-23 16:18:36 +01:00
Frédéric Junod
44a3595d77 Merge pull request #4479 from fredj/export_interaction_getMap
Export ol.interaction.Interaction#getMap function
2015-11-23 15:54:14 +01:00
Frederic Junod
6525bda9fd Export ol.interaction.Interaction#getMap function 2015-11-23 15:35:36 +01:00
Frédéric Junod
1b36050621 Merge pull request #4478 from fredj/apidoc
Fix olx.control.FullScreenOptions#label apidoc
2015-11-23 14:56:40 +01:00
Frederic Junod
7cc2a070e8 Fix olx.control.FullScreenOptions#label apidoc 2015-11-23 14:43:23 +01:00
Bart van den Eijnden
230f24208b Fix up EsriJSON format tests in IE9 2015-11-23 14:03:18 +01:00
Frédéric Junod
0ecf981673 Merge pull request #4477 from fredj/use_ol.nullFunction
Replace goog.nullFunction with ol.nullFunction
2015-11-23 12:19:19 +01:00
Frederic Junod
cacf2629fd Replace goog.nullFunction with ol.nullFunction 2015-11-23 11:18:34 +01:00
Frederic Junod
2c935dc4e0 Remove use of goog.functions.constant 2015-11-23 11:09:09 +01:00
Bart van den Eijnden
a2d7f56933 Fix up ol.source.TileWMS tests in IE 2015-11-23 10:38:19 +01:00
Bart van den Eijnden
b338c77726 Fix up ol.source.TileArcGISRest tests in IE 2015-11-23 10:23:54 +01:00
Bart van den Eijnden
40e9f0eaf2 Fix up ol.format.GPX tests in IE 2015-11-23 10:05:17 +01:00
Frédéric Junod
a2011b035d Merge pull request #4474 from fredj/rm_goog.dom
Remove use of goog.dom.createElement and goog.dom.createTextNode
2015-11-23 09:54:00 +01:00
Frederic Junod
e34c18a26e Remove use of goog.dom.createTextNode 2015-11-23 09:23:58 +01:00
Frederic Junod
1092f6b2a2 Remove use of goog.dom.createElement 2015-11-23 09:22:39 +01:00
Tim Schaub
6897e3cc52 Merge pull request #4469 from bjornharrtell/jsts_0.17
Upgrade to JSTS 0.17.0 in example
2015-11-21 12:22:12 -07:00
Björn Harrtell
2242224a0f Upgrade to JSTS 0.17.0 in example 2015-11-21 16:33:26 +01:00
Andreas Hocevar
f63963403b Merge pull request #4465 from openlayers/greenkeeper-handlebars-4.0.5
Update handlebars to version 4.0.5 🚀
2015-11-20 09:27:06 +01:00
greenkeeperio-bot
498e3aa3ee chore(package): update handlebars to version 4.0.5
http://greenkeeper.io/
2015-11-19 22:07:30 -07:00
Tim Schaub
b0c14cfe05 Merge pull request #4464 from openlayers/v3.11.x
Merge in changes from the 3.11.2 release.
2015-11-19 13:08:17 -07:00
Frédéric Junod
0259977fa9 Merge pull request #4463 from fredj/rm_goog.array.sort
Remove use of goog.array.sort
2015-11-19 20:24:08 +01:00
Tim Schaub
eb5607544c Update package version to 3.11.2 2015-11-19 11:32:41 -07:00
Tim Schaub
4999c792f1 Changelog for v3.11.2 2015-11-19 11:28:02 -07:00
Andreas Hocevar
5af338f92b Fix select interaction regression caused by #4391 2015-11-19 10:53:57 -07:00
Frederic Junod
071aad4815 Check ol.source.UrlTile#urls property for null value
Fixes #4446
2015-11-19 10:53:12 -07:00
Andreas Hocevar
a43cca7720 Allow '' for crossOrigin (as Anonymous alias)
This fixes a regression introduced by the goog.isDef removal.

From the HTML 5 spec: "The empty string is also a valid keyword, and
maps to the Anonymous state"
2015-11-19 10:48:35 -07:00
Andreas Hocevar
aa260f800e Merge pull request #4450 from ahocevar/fix-select
Fix select interaction regression caused by #4391
2015-11-19 18:20:04 +01:00
Frederic Junod
a4fb2501d8 Remove use of goog.array.sort
Fixes #4160
2015-11-19 16:53:11 +01:00
Frédéric Junod
627abaf1a7 Merge pull request #4458 from fredj/lint
Remove extra space in type annotation
2015-11-19 12:00:49 +01:00
Frederic Junod
5ead77bcd1 Remove extra space in type annotation 2015-11-19 10:03:42 +01:00
Tim Schaub
9ffed70ffd Merge pull request #4420 from openlayers/strapless
Remove Bootstrap and jQuery from example snippets.
2015-11-18 11:20:39 -07:00
Tim Schaub
cbfd533d49 Revert to jQuery for editing with Esri and IE 9 2015-11-18 10:21:00 -07:00
Tim Schaub
d3ff8d7fb0 More consistent markup 2015-11-18 10:06:35 -07:00
Tim Schaub
19fe73e78e Doc typos 2015-11-18 09:56:16 -07:00
Tim Schaub
72a0f70e7a Update simple title 2015-11-18 09:56:16 -07:00
Tim Schaub
645a0ce2d4 Update flight animation example 2015-11-18 09:56:16 -07:00
Tim Schaub
d19bf0970b Rename strapless template 2015-11-18 09:56:15 -07:00
Tim Schaub
10eb041199 Remove old example template 2015-11-18 09:56:15 -07:00
Tim Schaub
99ca4047dd Convert forgotten examples to strapless template 2015-11-18 09:56:15 -07:00
Tim Schaub
d838214f96 Convert X-Z examples to strapless template 2015-11-18 09:56:15 -07:00
Tim Schaub
c463321643 Convert WMTS examples to strapless template 2015-11-18 09:56:15 -07:00
Tim Schaub
a94a00de1d Convert WMS examples to strapless template 2015-11-18 09:56:15 -07:00
Tim Schaub
9a35c08300 Convert WKT example to strapless template 2015-11-18 09:56:15 -07:00
Tim Schaub
8bd97532df Convert V examples to strapless template 2015-11-18 09:56:15 -07:00
Tim Schaub
baed03d50d Convert S-T examples to strapless template 2015-11-18 09:56:15 -07:00
Tim Schaub
c984bedd09 Convert R examples to strapless template 2015-11-18 09:56:14 -07:00
Tim Schaub
e6343ca272 Convert M-P examples to strapless template 2015-11-18 09:56:14 -07:00
Tim Schaub
f88681951a Convert L examples to use strapless template 2015-11-18 09:56:14 -07:00
Tim Schaub
87fcca91bd Convert K examples to strapless template 2015-11-18 09:56:14 -07:00
Tim Schaub
6fd6b794ef Use fetch instead of $.ajax in JSTS example 2015-11-18 09:56:14 -07:00
Tim Schaub
2fff18fd0c Use cdn.polyfill.io for polyfills 2015-11-18 09:56:14 -07:00
Tim Schaub
91a772a952 Convert H-I examples to strapless template 2015-11-18 09:56:14 -07:00
Tim Schaub
88ec3b9f6c Convert F-G examples to strapless template 2015-11-18 09:56:14 -07:00
Tim Schaub
2e8f4806d2 Give the docs some breathing room 2015-11-18 09:56:14 -07:00
Tim Schaub
b8cf2b213b Make the titles more like titles 2015-11-18 09:56:14 -07:00
Tim Schaub
3035bbdfd3 Convert D-E examples to strapless template 2015-11-18 09:56:14 -07:00
Tim Schaub
c3165252f8 Move title above map 2015-11-18 09:56:13 -07:00
Tim Schaub
5a511c7591 Remove "// NOCOMPILE" lines from examples 2015-11-18 09:56:13 -07:00
Tim Schaub
48be3ee572 Simplify the simple example 2015-11-18 09:56:13 -07:00
Tim Schaub
734712bf9c Convert A-C examples to strapless template 2015-11-18 09:56:13 -07:00
Tim Schaub
a2f84b144f Avoid including bootstrap.min.css twice 2015-11-18 09:56:13 -07:00
Tim Schaub
74f2b4cb74 Intentional indentation and newlines 2015-11-18 09:56:13 -07:00
Tim Schaub
58d22350d8 New template that removes Bootstrap and jQuery from code snippet 2015-11-18 09:56:13 -07:00
Tim Schaub
b69e453061 Merge pull request #4442 from tschaub/new-jsdoc
Use jsdoc@3.4.0.
2015-11-18 09:27:21 -07:00
Andreas Hocevar
a8cd6b735f Fix select interaction regression caused by #4391 2015-11-18 11:57:18 +01:00
Bart van den Eijnden
51d5182592 Merge pull request #4449 from bartvde/issue-4445
Change the label of the full screen button to be more intuitive
2015-11-18 11:53:04 +01:00
Frédéric Junod
6240162ecf Merge pull request #4448 from fredj/ol.source.UrlTile_urls
Check ol.source.UrlTile#urls property for null value
2015-11-18 11:47:56 +01:00
Bart van den Eijnden
5c592731f3 Change the label of the full screen button to be more intuitive (closes #4445) 2015-11-18 11:42:27 +01:00
Frederic Junod
aef097e348 Check ol.source.UrlTile#urls property for null value
Fixes #4446
2015-11-18 11:30:14 +01:00
Petr Sloup
77ca38aa10 Merge pull request #4440 from klokantech/rasterreproj_tutorial
Raster reprojection tutorial
2015-11-18 09:40:40 +01:00
Petr Sloup
0b23eae429 Language fixes for raster reprojection tutorial 2015-11-18 09:27:35 +01:00
Petr Sloup
b92565a096 Add raster reprojection tutorial 2015-11-18 09:27:35 +01:00
Tim Schaub
3dcc2843ae Write directly to stdout in publish script 2015-11-17 18:06:29 -07:00
Tim Schaub
34dd7b76b1 Use jsdoc@3.4.0 2015-11-17 18:04:16 -07:00
Andreas Hocevar
b435723b8c Merge pull request #4439 from ahocevar/crossorigin-regression
Allow '' for crossOrigin (as Anonymous alias)
2015-11-17 16:39:34 +01:00
Andreas Hocevar
749dacc749 Allow '' for crossOrigin (as Anonymous alias)
This fixes a regression introduced by the goog.isDef removal.

From the HTML 5 spec: "The empty string is also a valid keyword, and
maps to the Anonymous state"
2015-11-17 12:55:48 +01:00
Frédéric Junod
fd44295b17 Merge pull request #4429 from fredj/object_change_evt
Dispatch a change event only if the value changes
2015-11-17 12:51:26 +01:00
Frédéric Junod
17e69f9326 Merge pull request #4435 from fredj/rm_cast
Remove unnecessary cast
2015-11-17 11:07:31 +01:00
Frédéric Junod
b44d1f4fec Merge pull request #4434 from fredj/lint
Remove unused local variables
2015-11-17 11:07:12 +01:00
Frederic Junod
10ed2997d8 Remove unnecessary cast
See 4977f3607b
2015-11-17 10:41:09 +01:00
Frederic Junod
bfd33becbc Remove unused local variables 2015-11-17 10:20:40 +01:00
Frédéric Junod
50c28cdd60 Merge pull request #4433 from fredj/lint
Remove unused local variables
2015-11-17 10:15:11 +01:00
Frederic Junod
764875147a Remove unused local variables 2015-11-17 09:57:56 +01:00
Tobias Sauerwein
440a8bdea7 Merge pull request #4140 from tsauerwein/animation-flights
Add flight animation example
2015-11-17 09:49:44 +01:00
tsauerwein
faf9e467e4 Use map.render() in examples 2015-11-17 09:26:28 +01:00
tsauerwein
072a347a54 Add flight animation example 2015-11-17 09:26:28 +01:00
Andreas Hocevar
eee205c688 Merge pull request #4428 from ahocevar/imagewms-imagesize-regression-test
Add imageSize regression test for ol.source.ImageWMS
2015-11-16 23:08:47 +01:00
Andreas Hocevar
f0dbedd39d Add imageSize regression test for ol.source.ImageWMS 2015-11-16 22:20:35 +01:00
Andreas Hocevar
f4ad1214e7 Merge pull request #4426 from ahocevar/nicer-staticimage
Improve ol.source.StaticImage
2015-11-16 22:15:48 +01:00
Frederic Junod
ca575bd35d Dispatch a change event only if the value is different 2015-11-16 16:48:00 +01:00
Andreas Hocevar
fabda7c4b2 Improve ol.source.StaticImage
Brings back the imgSize property, and puts all image load handler
code in a single listener.
2015-11-16 11:55:10 +01:00
Frédéric Junod
18c41bfc19 Merge pull request #4425 from fredj/duration_eq_0
Test number property with !== undefined
2015-11-16 09:53:32 +01:00
Frederic Junod
dfbe7447c9 Test number property with !== undefined
Fixes #4424
2015-11-16 09:39:35 +01:00
Tim Schaub
5e0b0e69a5 Merge pull request #4423 from openlayers/greenkeeper-mocha-2.3.4
Update mocha to version 2.3.4 🚀
2015-11-15 15:15:28 -07:00
greenkeeperio-bot
6280ed2201 chore(package): update mocha to version 2.3.4
http://greenkeeper.io/
2015-11-15 13:39:37 -07:00
Tim Schaub
44cfb190f3 Merge pull request #4416 from openlayers/greenkeeper-clean-css-3.4.8
Update clean-css to version 3.4.8 🚀
2015-11-13 09:22:54 -07:00
Andreas Hocevar
f86a7455c4 Merge pull request #4415 from ahocevar/fix-imagesize
Scale StaticImage image to imageExtent
2015-11-13 13:15:46 +01:00
greenkeeperio-bot
69c332b023 chore(package): update clean-css to version 3.4.8
http://greenkeeper.io/
2015-11-13 05:06:22 -07:00
Andreas Hocevar
6280b35035 Scale StaticImage image to imageExtent
The imageSize property was only used to determine the scale. It's usage was
never documented nor tested nor shown in an example, so I removed it because I
considered its presence a bug.
2015-11-13 12:23:31 +01:00
Andreas Hocevar
4a97e26bd9 Merge pull request #4414 from ahocevar/imageurlfunction-bye-bye
Remove ol.ImageUrlFunction
2015-11-13 11:40:43 +01:00
Andreas Hocevar
152dc6e5d0 Remove ol.ImageUrlFunction
This was only used in ol.source.ImageMapGuide, and added unnecessary
overhead there.
2015-11-13 11:27:44 +01:00
Éric Lemoine
f5a148e6b3 Merge pull request #4389 from elemoine/dynamic-params
Smooth transitions on parameter changes
2015-11-13 08:41:42 +01:00
Tim Schaub
a8a796f922 Merge pull request #4410 from openlayers/v3.11.x
Merge in changes from the 3.11.1 release.
2015-11-12 16:53:41 -07:00
Tim Schaub
4c19e13bf6 Update package version to 3.11.1 2015-11-12 16:17:57 -07:00
Tim Schaub
1c6a56f781 Changelog for v3.11.1 2015-11-12 16:17:06 -07:00
Bart van den Eijnden
3aabc44746 Merge pull request #4413 from bartvde/issue-4406
Revert "Merge pull request #4339 from bartvde/issue-4337"
2015-11-12 20:45:27 +01:00
Bart van den Eijnden
b426fa5509 Revert "Merge pull request #4339 from bartvde/issue-4337"
This reverts commit 7f4c6e3634, reversing
changes made to c5dac0aa70.
2015-11-12 20:29:54 +01:00
Andreas Hocevar
70d376f215 Merge pull request #4412 from ahocevar/revert-4344
Revert "Merge pull request #4344 from bartvde/issue-2844"
2015-11-12 19:36:27 +01:00
Andreas Hocevar
c5f4710b8d Revert "Merge pull request #4344 from bartvde/issue-2844"
This reverts commit e5c44b37c9, reversing
changes made to 7f4c6e3634.
2015-11-12 19:17:07 +01:00
Andreas Hocevar
14338e9c16 Merge pull request #4408 from ahocevar/fix-imagewms-ratio-3.11.x
Use ratio when calculating ImageWMS width and height
2015-11-12 18:30:31 +01:00
Tim Schaub
41a232de60 Merge pull request #4401 from tschaub/style
Allow style function to return a style.
2015-11-12 10:21:19 -07:00
Andreas Hocevar
ce5ab5b59c Use ratio when calculating width and height 2015-11-12 18:10:10 +01:00
Éric Lemoine
c3c8c4fa73 Add an wmts-dimensions example 2015-11-12 14:47:02 +01:00
Éric Lemoine
0f70a21ba6 Implement getKeyParams in ol.source.WMTS 2015-11-12 14:40:36 +01:00
Éric Lemoine
132861e175 Use interim tiles when changing dynamic parameters 2015-11-12 14:40:35 +01:00
Bart van den Eijnden
bd1febeb41 Merge pull request #4404 from oterral/writstyles
Set correctly the opt_this parameter when writing a KML document
2015-11-12 13:25:31 +01:00
oterral
f588fcf7b0 Set correctly the opt_this parameter when writing a KML document 2015-11-12 11:54:06 +01:00
Tim Schaub
99a902a311 Get rid of extra style arrays in examples 2015-11-11 18:24:08 -07:00
Tim Schaub
e8c99e4e63 Allow style function to return a style 2015-11-11 17:21:24 -07:00
Tim Schaub
afba132c13 Merge pull request #4397 from openlayers/greenkeeper-glob-6.0.1
Update glob to version 6.0.1 🚀
2015-11-11 15:56:29 -07:00
Tim Schaub
8a7907e4cf Merge pull request #4362 from tamarmot/rotate_reset_north
Rotate control now takes optional resetNorth function.
2015-11-11 15:54:22 -07:00
Tim Schaub
bb5377fb8c Merge pull request #4399 from openlayers/release-v3.11.0
Release v3.11.0.
2015-11-11 14:46:44 -07:00
Tim Schaub
657af1983d Update package version to 3.11.0 2015-11-11 14:25:37 -07:00
Tim Schaub
ab7e608129 Changelog for v3.11.0 2015-11-11 14:24:56 -07:00
Tim Schaub
0c2c058534 Merge pull request #4394 from openlayers/silent-update
Allow ol.Object property update without notification.
2015-11-11 12:59:06 -07:00
greenkeeperio-bot
a52187a276 chore(package): update glob to version 6.0.1
http://greenkeeper.io/
2015-11-11 12:48:38 -07:00
Tim Schaub
a9987de308 Merge pull request #4395 from adube/api-styletext-offsetxy
Flag ol.style.Text setOffsetX and Y as @api.
2015-11-11 11:15:17 -07:00
Tim Schaub
c02fdf2393 Doc corrections and truthy check 2015-11-11 11:12:58 -07:00
Alexandre Dubé
ca50e9e5b7 Flag ol.style.Text setOffsetX and Y as @api 2015-11-11 12:44:12 -05:00
DavidHequet
069a81db74 Allow ol.Object property update without notification
Add an optional notify argument to object set and setProperties methods.

If the argument is not provided, set and setProperties trigger an event.

If you update many objects or do so frequently and do not need notification, performance is improved by setting silent to true.
2015-11-11 10:35:30 -07:00
Andreas Hocevar
df460d2ed1 Merge pull request #4393 from ahocevar/faster-vector-tiles
Faster vector tiles
2015-11-10 19:15:30 +01:00
Andreas Hocevar
b29b969cfe Avoid goog.getUid() with empty skippedFeaturesHash 2015-11-10 19:01:03 +01:00
Andreas Hocevar
a020251f69 Do not use fractional stroke widths 2015-11-10 18:43:28 +01:00
Tim Schaub
b2292cc6fd Merge pull request #4392 from openlayers/greenkeeper-clean-css-3.4.7
Update clean-css to version 3.4.7 🚀
2015-11-10 08:47:50 -07:00
greenkeeperio-bot
647c1a6351 chore(package): update clean-css to version 3.4.7
http://greenkeeper.io/
2015-11-10 07:55:13 -07:00
Andreas Hocevar
bfbb802b85 Merge pull request #4391 from ahocevar/unmanaged-layer-foreachfeatureatpixel
Pass null as forEachFeatureAtPixel layer arg for unmanaged layers
2015-11-09 10:19:26 +01:00
Andreas Hocevar
a446147902 Add upgrade note about forEachFeatureAtPixel change 2015-11-09 09:45:21 +01:00
Andreas Hocevar
d968f32456 Exclude unmanaged layers from selection 2015-11-09 09:45:21 +01:00
Andreas Hocevar
1aea2c2b0c Pass null as forEachFeatureAtPixel layer arg for unmanaged layers 2015-11-09 09:45:21 +01:00
Andreas Hocevar
5b817f3146 Merge pull request #4390 from ahocevar/fix-mocha-phantomjs-usage
Fix usage of mocha-phantomjs-core after update
2015-11-07 07:37:08 +01:00
Andreas Hocevar
a58f66a9a9 Fix usage of mocha-phantomjs-core after update 2015-11-06 20:34:30 +01:00
Andreas Hocevar
8e15f80d7a Merge pull request #4387 from ahocevar/common-renderer-default
Add default argument to getRendererFromQueryString
2015-11-06 17:11:35 +01:00
Andreas Hocevar
a35b3a5f52 Add default argument to getRendererFromQueryString 2015-11-06 16:58:58 +01:00
Éric Lemoine
9cf26f1fac Merge pull request #4376 from elemoine/kml-non-icon
Make KML format ignore image styles that aren't icons
2015-11-06 16:46:10 +01:00
Bart van den Eijnden
fadf63cbd0 Merge pull request #4385 from oterral/scaledflt
Don't transform the scale specified by the user
2015-11-06 16:23:41 +01:00
Éric Lemoine
daa970fe4c Make KML format ignore image styles that aren't icons 2015-11-06 15:35:20 +01:00
Andreas Hocevar
3254e08785 Merge pull request #4388 from ahocevar/fix-mocha-phantomjs
Quick-fix running tests with PhantomJS
2015-11-06 15:04:27 +01:00
Andreas Hocevar
544f951c14 Quick-fix running tests with PhantomJS 2015-11-06 14:50:58 +01:00
oterral
08a640b793 Don't transform the scale specified by the user 2015-11-06 14:29:16 +01:00
Éric Lemoine
d29f3b9068 Merge pull request #4378 from elemoine/kml-write-styles
Add a writeStyles option to KML format
2015-11-06 11:26:48 +01:00
Andreas Hocevar
d68991e982 Merge pull request #4375 from simonseyock/master
Fixed documentation typo (ol.source.ImageWMS)
2015-11-05 08:11:26 +01:00
Éric Lemoine
5c536aafc7 Add a writeStyles option to KML format 2015-11-04 17:12:04 +01:00
Simon Seyock
757d46541c Fixed documentation error
the imageLoadFunction you can give the constructor of ol.source.ImageWMS is an ol.ImageLoadFunctionType not an ol.TileLoadFunctionType
2015-11-04 12:56:41 +01:00
Éric Lemoine
dc3bf0d04b Merge pull request #4371 from dtreiter/master
Fix typo in closure compilation tutorial
2015-11-03 21:52:52 +01:00
Daniel Reiter
9cde0ab860 Fix typo in closure compilation tutorial 2015-11-03 14:37:37 -06:00
Bart van den Eijnden
bb00f4dafd Merge pull request #4370 from jonataswalker/getLayer-improve-docs
Improve ol.interaction.Select#getLayer documentation.
2015-11-03 18:58:52 +01:00
jonataswalker
16670e4015 Improve ol.interaction.Select#getLayer documentation. 2015-11-03 14:35:17 -02:00
Tim Schaub
4b85dd89a5 Merge pull request #4365 from openlayers/greenkeeper-fs-extra-0.26.2
Update fs-extra to version 0.26.2 🚀
2015-11-03 07:45:46 -08:00
Tim Schaub
71f7c70279 Merge pull request #4366 from openlayers/greenkeeper-resemblejs-2.0.1
Update resemblejs to version 2.0.1 🚀
2015-11-03 07:43:49 -08:00
Marc Jansen
2d24c8942e Merge pull request #4368 from marcjansen/fix-4367
Append KML placemark text style to existing styles
2015-11-03 15:06:33 +01:00
Marc Jansen
d24dcc7753 Be less verbose when creating text style 2015-11-03 14:27:06 +01:00
Marc Jansen
bea1501bb7 Append textStyle to existing style 2015-11-03 14:26:16 +01:00
greenkeeperio-bot
5751d342ff chore(package): update resemblejs to version 2.0.1
http://greenkeeper.io/
2015-11-03 02:21:55 -08:00
greenkeeperio-bot
8514a85353 chore(package): update fs-extra to version 0.26.2
http://greenkeeper.io/
2015-11-02 19:07:52 -08:00
Tamar Cohen
4a163b54f3 Rotate control now takes optional resetNorth function 2015-11-02 10:06:59 -08:00
Éric Lemoine
ad85e0e98d Merge pull request #4361 from elemoine/gpx
Make GPX format not fail on unsupported geometries
2015-11-02 17:54:47 +01:00
Frédéric Junod
66a99dd6c4 Merge pull request #4360 from fredj/getExtent_undef
Update getExtent return value jsdoc tag
2015-11-02 16:56:08 +01:00
Frederic Junod
eb762b6f4a Update getExtent return value jsdoc tag
The extent is never `null`; if the source is empty, the extent is
`[Infinity, Infinity, -Infinity, -Infinity]`
2015-11-02 16:30:54 +01:00
Éric Lemoine
14a1add08d Make GPX format no fail on unsupported geometries 2015-11-02 16:26:17 +01:00
Éric Lemoine
cbd1aee0cc Remove describe('readFeatures') in GPX tests
Just a remove an unnecessary level of nesting. No functional change.
2015-11-02 15:58:47 +01:00
Frédéric Junod
135d66dac7 Merge pull request #4359 from openlayers/greenkeeper-closure-util-1.9.0
Update closure-util to version 1.9.0 🚀
2015-11-02 14:31:26 +01:00
greenkeeperio-bot
3f30072de5 chore(package): update closure-util to version 1.9.0
http://greenkeeper.io/
2015-11-02 05:44:34 -07:00
Tim Schaub
925a89ecdb Merge pull request #4357 from openlayers/greenkeeper-update-all
Update all dependencies.
2015-11-01 10:31:01 -07:00
Tim Schaub
d5c7f805ab Unregister postrender listener in tests 2015-11-01 09:03:23 -07:00
greenkeeperio-bot
67f42ed33a chore(package): update dependencies
http://greenkeeper.io/
2015-11-01 08:30:06 -07:00
Tim Schaub
610ed7294f Merge pull request #4356 from tschaub/metalsmith-updates
Update Metalsmith and layouts plugin.
2015-11-01 08:28:08 -07:00
Tim Schaub
6c813020c2 Correct error message for missing layout property 2015-11-01 08:15:05 -07:00
Tim Schaub
0149924551 Update Metalsmith and layout plugin 2015-11-01 02:18:09 -07:00
Tim Schaub
85264111cd Merge pull request #4355 from tschaub/phantom-update
Update PhantomJS.
2015-11-01 01:57:38 -07:00
Tim Schaub
921d736340 Run tests with Node 4 on Trusty 2015-11-01 01:19:07 -07:00
Tim Schaub
98c9b0eb39 Update phantomjs and use mocha-phantomjs-core 2015-11-01 01:18:59 -07:00
Tim Schaub
7946298e67 Merge pull request #4353 from tschaub/jsdoc-forked
Resolve path to jsdoc-fork.
2015-10-31 15:23:41 -06:00
Tim Schaub
c0271e3509 Prune before installing 2015-10-31 15:11:54 -06:00
Tim Schaub
ad3ee7cb33 Correctly resolve path to jsdoc 2015-10-31 15:10:05 -06:00
Tim Schaub
363ef8f45e Merge pull request #3627 from ThomasG77/ThomasG77-npm
Make package.json compatible for npm frontend use.
2015-10-31 13:49:40 -06:00
Tim Schaub
9529200d4f Merge pull request #4163 from tschaub/node-four
Fixes for building with Node 4.x.
2015-10-31 13:42:55 -06:00
Tim Schaub
85ca4e1888 Update JSDoc to get async publish support 2015-10-31 13:30:30 -06:00
Tim Schaub
c0da5ff8ef Merge pull request #4347 from tschaub/find-jsdoc
Use require.resolve() to find jsdoc.
2015-10-31 13:26:58 -06:00
Tim Schaub
0b7cd12eaa Merge pull request #4291 from jonataswalker/feature-move-example
Add 'Move a feature along a line' example.
2015-10-30 17:08:14 -06:00
jonataswalker
9e25251891 Add 'Move a feature along a line' example 2015-10-30 18:50:04 -02:00
Bart van den Eijnden
e5c44b37c9 Merge pull request #4344 from bartvde/issue-2844
Allow different resolutions in x and y direction for ol.source.ImageStatic
2015-10-30 20:53:46 +01:00
Bart van den Eijnden
979342091a Support different resolutions in x and y direction for ol.source.ImageStatic 2015-10-30 19:27:31 +01:00
Tim Schaub
dc0e37b782 Use require.resolve() to find jsdoc 2015-10-30 06:21:21 -06:00
Bart van den Eijnden
7f4c6e3634 Merge pull request #4339 from bartvde/issue-4337
Make sure drawImage width and height are not too big
2015-10-29 17:17:20 +01:00
Bart van den Eijnden
085a6c8135 Make sure drawImage works in Safari with an offset 2015-10-29 14:16:06 +01:00
Andreas Hocevar
c5dac0aa70 Merge pull request #4334 from ahocevar/extent-ratio
Check view extent within image extent
2015-10-29 07:07:21 +01:00
Andreas Hocevar
40c1a6d112 Check view extent within image extent 2015-10-28 23:58:00 +01:00
Frédéric Junod
6d9dd030a1 Merge pull request #4332 from fredj/geojson_id_0_write
Fix write out GeoJSON features with id equal to 0
2015-10-28 15:19:57 +01:00
Frédéric Junod
9f5240dd15 Merge pull request #4331 from fredj/topojson_id_0
Allow TopoJSON features with id equal to 0
2015-10-28 15:13:28 +01:00
Frédéric Junod
4a8782f1e0 Merge pull request #4330 from openlayers/fredj-patch-1
ol.format.TopoJSON is read only, update the jsdoc
2015-10-28 15:11:29 +01:00
Frederic Junod
d59f6979f7 Fix write out GeoJSON features with id equal to 0 2015-10-28 15:09:31 +01:00
Frédéric Junod
7b8b058190 ol.format.TopoJSON is read only, update the jsdoc 2015-10-28 15:02:02 +01:00
Frederic Junod
c6803838ab Allow TopoJSON features with id equal to 0 2015-10-28 14:56:33 +01:00
Frédéric Junod
4846a49258 Merge pull request #4327 from fredj/geojson_id_0
Allow GeoJSON features with id equal to 0
2015-10-28 11:34:31 +01:00
Frederic Junod
7cf12d1c12 Allow GeoJSON features with id equal to 0
fixes #4326
2015-10-28 11:21:17 +01:00
Andreas Hocevar
2f06d214f5 Merge pull request #4219 from ahocevar/vectortile
Support tiled vector data and Mapbox vector tiles
2015-10-28 10:43:55 +01:00
Andreas Hocevar
80b78b8b5a Avoid instanceof dependant assertions 2015-10-28 10:29:04 +01:00
Andreas Hocevar
5d264d2bf0 Remove right-handed polygon handling in renderer
Since ol.render.Feature assumes right-handed polygons anyway, this
extra optimization is not needed.
2015-10-28 10:29:04 +01:00
Andreas Hocevar
5832943773 Make changes suggested during the review 2015-10-28 10:29:04 +01:00
Andreas Hocevar
2b2ac47b1f Remove ol.source.TileVector 2015-10-28 10:29:04 +01:00
Andreas Hocevar
4be89715ed Add credit/attribution for the example style function 2015-10-28 10:29:04 +01:00
Andreas Hocevar
80fa26ddd8 Reduce the use of goog.* 2015-10-28 10:29:03 +01:00
Andreas Hocevar
656023e569 Use new createLoadedTileFinder signature
The signature of this method was changed with the introduction of
raster reprojection.
2015-10-28 10:29:03 +01:00
Andreas Hocevar
b99954e93a Cloak Mapbox access tokens 2015-10-28 10:29:03 +01:00
Andreas Hocevar
8daff341d0 Update after ol.interaction.Select changes 2015-10-28 10:29:03 +01:00
Andreas Hocevar
66338a662d Fix comparison of projections with same code but different units 2015-10-28 10:29:03 +01:00
Andreas Hocevar
4784b7f2e2 Handle urls and templates in ol.source.UrlTile
This makes url templates available for ol.source.VectorTile.
2015-10-28 10:29:03 +01:00
Andreas Hocevar
af69933c64 Enable wrapX by default 2015-10-28 10:29:03 +01:00
Andreas Hocevar
8e9b20db51 Additional tests, documentation and example 2015-10-28 10:29:02 +01:00
Andreas Hocevar
0e8e104a2d Handle righthanded polygons in format, not source 2015-10-28 10:29:02 +01:00
Andreas Hocevar
29b64d8628 Improve readability and reduce garbage creation 2015-10-28 10:29:02 +01:00
Andreas Hocevar
bda3a6803c Use tiles with lower or same resolution as view 2015-10-28 10:29:02 +01:00
Andreas Hocevar
cd2a2ebbc5 Do not call moveTo/lineTo when coordinates are the same
See http://jsperf.com/moveto-lineto-to-same-coordinate/3
2015-10-28 10:29:02 +01:00
Andreas Hocevar
9df280a884 Handle dirty tiles properly 2015-10-28 10:29:02 +01:00
Andreas Hocevar
6e2f82c397 Introduce ol.render.Feature 2015-10-28 10:29:02 +01:00
Andreas Hocevar
63629e1ee2 Add tile error handling 2015-10-28 10:29:01 +01:00
Andreas Hocevar
dbedbc19ee Create replay group for the tile's native resolution only 2015-10-28 10:29:01 +01:00
Andreas Hocevar
c0c5443782 Add example showing the use of Mapbox vector tiles 2015-10-28 10:29:01 +01:00
Andreas Hocevar
4b942bc4f6 Add VectorTile renderer 2015-10-28 10:29:01 +01:00
Andreas Hocevar
7d3fc3ccc7 Add VectorTile layer, source and tile 2015-10-28 10:29:01 +01:00
Andreas Hocevar
fa88b578a4 Create ol.source.UrlTile 2015-10-28 10:29:01 +01:00
Andreas Hocevar
598111b78e Introduce ol.format.MVT 2015-10-28 10:29:00 +01:00
Andreas Hocevar
8f4756c99b Introduce tile-pixels units 2015-10-28 10:29:00 +01:00
Andreas Hocevar
05dfc226b7 Merge pull request #4322 from FRizZL/master
Add wrapX override support for ol.source.Cluster
2015-10-27 08:28:38 +01:00
FRizZL
a60a7f7c09 Add wrapX override support for ol.source.Cluster
It was not possible to override the wrapX option for the cluster source.
This commit adds that functionality.
2015-10-27 08:26:52 +01:00
Marc Jansen
a3dbe4b658 Merge pull request #4316 from marcjansen/clean-4306
Render name labels if the geometry is a point in KML format (@tamarmot)
2015-10-25 19:52:22 +01:00
Tamar Cohen
c9beb6d4f4 Add upgrade notes for KML changes 2015-10-25 19:40:12 +01:00
Tamar Cohen
eb75f4eedf Add test for auto-labeling of placemark names 2015-10-25 19:40:12 +01:00
Tamar Cohen
80caaa5399 Make auto-labeling of placemark names configurable 2015-10-25 19:40:08 +01:00
Tamar Cohen
15c1323ff9 Render placemark names for points in KML format 2015-10-25 19:38:25 +01:00
Andreas Hocevar
48f98717b6 Merge pull request #4313 from ahocevar/nicer-attribution
Align logos nicely with attribution text
2015-10-25 10:39:13 +01:00
Andreas Hocevar
09063b47b5 Align logos nicely with attribution text 2015-10-25 10:32:50 +01:00
Andreas Hocevar
bd9aff46af Merge pull request #4297 from ahocevar/derequire
Create standalone versions of ol.ext packages
2015-10-24 21:04:20 +02:00
Andreas Hocevar
b27acb8d5e Merge pull request #4302 from tamarmot/master
scale icons by 0.5 so they are not huge
2015-10-22 01:01:09 +02:00
Tamar Cohen
9764dac149 added missing semicolon 2015-10-21 14:51:34 -07:00
Tamar Cohen
79d803aba8 scale icons by 0.5 so they are not huge 2015-10-21 14:30:14 -07:00
Frédéric Junod
78a961e6ef Merge pull request #4301 from fredj/jshint_cleanup
Remove jshint -W069 tags in source code
2015-10-21 17:19:18 +02:00
Frederic Junod
a84db3add6 Remove jshint -W069 tags in source code
The check in already disabled in .jshintrc
2015-10-21 16:15:54 +02:00
Andreas Hocevar
519e7976cd Merge pull request #4273 from Barryrowe/projection-documentation
Expand docs on ol.source url prop.
2015-10-20 17:26:01 +02:00
Barryrowe
7d95df1a9d Expand docs on ol.source url prop
Expanded documentation on the url property of the
ol.source.Vector property to include information about
how data loaded remotely will always be run through an
attempt to translate to the view's projection so the
format object must have the proper value for
defaultDataProjection when the remote data doesn't
include a CRS property.
2015-10-20 17:25:27 +02:00
Andreas Hocevar
1c1010a65d Create standalone versions of ol.ext packages 2015-10-20 14:00:18 +02:00
Andreas Hocevar
ac84e98c7f Merge pull request #4293 from ahocevar/contributing-developing
Refine the pull request process
2015-10-19 16:21:54 +02:00
Andreas Hocevar
945847d0a1 Refine the pull request process
This pull request splits the developer documentation into `CONTRIBUTING.md` and
`DEVELOPING.md`. `CONTRIBUTING.md` now contains an additional paragraph,
instructing contributors to create an issue before submitting a pull request.

The introduction of this additional step was discussed at this year's FOSS4G
conference. This new step would also affect contributions from core developers.
2015-10-19 13:39:03 +02:00
jonataswalker
e5c2a226dd Add 'Move a feature along a line' example 2015-10-19 08:40:59 -02:00
jonataswalker
5541e9a236 Add 'Move a feature along a line' example 2015-10-19 07:54:06 -02:00
Andreas Hocevar
c8eb3adf1e Merge pull request #4289 from ahocevar/image-static-maxzoom
Restrict maxZoom of the static-image example
2015-10-19 11:02:23 +02:00
Andreas Hocevar
c2bde4e482 Restrict maxZoom of the static-image example
Upscaling the image to zoom levels > 8 does not make sense, and it may even
cause canvas transformations to fail.
2015-10-19 10:44:43 +02:00
Frédéric Junod
eb174f7a82 Merge pull request #4275 from fredj/mouseOnly_type
Fix ol.events.condition.mouseOnly parameter type
2015-10-19 09:03:51 +02:00
Marc Jansen
55a969f95f Merge pull request #4248 from marcjansen/math-es6-2015
Use Math.cosh of ES6/2015 if available
2015-10-18 21:26:56 +02:00
Tim Schaub
f344f2cdb2 Merge pull request #4286 from tschaub/color-manipulation
Add a color manipulation example.
2015-10-17 19:30:37 -06:00
Tim Schaub
ecdbab40ba Add a color manipulation example 2015-10-17 15:11:37 -06:00
Andreas Hocevar
819b9ce6ca Merge pull request #4122 from klokantech/rasterreproj
Raster reprojection
2015-10-16 21:47:02 +02:00
Andreas Hocevar
c86a61eacb Merge pull request #4283 from adube/api-tilegrid-gettilecoordextent
Flag ol.tilegrid.TileGrid getTileCoordExtent as @api
2015-10-16 18:40:08 +02:00
Alexandre Dubé
571760fb32 Flag ol.tilegrid.TileGrid getTileCoordExtent as @api 2015-10-16 11:42:01 -04:00
Petr Sloup
965b88d7c8 Save context state only when it's actually necessary 2015-10-16 16:30:16 +02:00
Petr Sloup
d950dada31 Minor type fix 2015-10-16 16:30:16 +02:00
Petr Sloup
e49f529fe6 Add typedefs for functions returning tiles/images 2015-10-16 16:30:16 +02:00
Petr Sloup
6f9fa4c12e Minor documentation improvements 2015-10-16 16:30:04 +02:00
Petr Sloup
b816128728 Avoid assignment in return statement 2015-10-16 15:46:51 +02:00
Petr Sloup
70021be919 Use lower-case parameter names even for matrices 2015-10-16 15:45:34 +02:00
Petr Sloup
32fa3501df Update tests 2015-10-16 09:28:43 +02:00
Petr Sloup
a7cde96056 Simplified wrapX handling
"Unwrap" the coordinates obtained from transformations and utilize wrapX
capabilities of the sources to handle calculations of TileRanges and
unwrapped tile extents.
2015-10-16 09:28:43 +02:00
Petr Sloup
52a7c5e582 Rename some private/local variables to increase readability 2015-10-16 09:28:43 +02:00
Petr Sloup
f52f9b6817 Rename ol.RASTER_REPROJ_* constants to full ol.RASTER_REPROJECTION_* 2015-10-16 09:28:43 +02:00
Petr Sloup
9f8ab48f1f Minor improvements based on pull request comments 2015-10-16 09:28:43 +02:00
Petr Sloup
8fb1d1f244 Remove usage of various goog.* functions
goog.isNull, goog.isDefAndNotNull and goog.array.*
2015-10-16 09:28:43 +02:00
Petr Sloup
f3d5d16a82 Remove use of goog.isDef 2015-10-16 09:28:43 +02:00
Petr Sloup
783acfa961 Use ol.math.clamp instead of goog.math.clamp 2015-10-16 09:28:43 +02:00
Petr Sloup
3f897cfb79 Minor typo fix 2015-10-16 09:28:43 +02:00
Petr Sloup
c6e2c6a16e Add demonstration of layer extent setting to reprojection example 2015-10-16 09:28:43 +02:00
Petr Sloup
6431622881 Use better URL for BNG tiles in reprojection example 2015-10-16 09:28:43 +02:00
Petr Sloup
00a8b4da16 Increase readability of reprojection example
Use map/layer terminology more clearly and clarify checkbox usage
2015-10-16 09:28:43 +02:00
Petr Sloup
0f09607725 Slightly decrease build size when reprojection code is disabled 2015-10-16 09:28:43 +02:00
Petr Sloup
94caa07168 Minor code style, documentation and typo fixes 2015-10-16 09:28:43 +02:00
Petr Sloup
5388f96551 Reproject image sources only if actually needed 2015-10-16 09:28:42 +02:00
Petr Sloup
3353eeb0c3 Fix IE9 test timeouts by using different pixel placeholder
IE9 seems to have occasional problems with decoding
the data protocol url used before (single pixel placeholder).
2015-10-16 09:28:42 +02:00
Petr Sloup
402697c369 Specify crossOrigin in reprojection examples to fix WebGL errors 2015-10-16 09:28:42 +02:00
Petr Sloup
4bcea473eb Fix reprojection-by-code example in IE9 by using JSONP 2015-10-16 09:28:42 +02:00
Dalibor Janák
043b206705 OpenStreetMap reprojection example 2015-10-16 09:28:42 +02:00
Petr Sloup
76974a5888 Minor improvements of reprojection examples 2015-10-16 09:28:42 +02:00
Petr Sloup
59bce75d2a Improved documentation 2015-10-16 09:28:42 +02:00
Petr Sloup
7a1533925a Reprojection code refactoring and cleaning 2015-10-16 09:28:42 +02:00
Petr Sloup
a2ae2f0f3e Add rendering tests for ol.reproj.Image 2015-10-16 09:28:42 +02:00
Petr Sloup
f078a9c935 Add rendering tests for ol.reproj.Tile 2015-10-16 09:28:42 +02:00
Petr Sloup
404fa10bb7 Make resembleCanvas available to tests 2015-10-16 09:28:42 +02:00
Petr Sloup
8f1aab9236 Add tests for ol.source.TileImage 2015-10-16 09:28:42 +02:00
Petr Sloup
c899100dab Add tests for ol.reproj.* 2015-10-16 09:28:42 +02:00
Petr Sloup
0c48a560b2 Add reprojection example with proj4 defs loading from EPSG.io 2015-10-16 09:28:42 +02:00
Petr Sloup
690a5f1f90 Add reprojection example for ol.source.ImageStatic 2015-10-16 09:28:42 +02:00
Petr Sloup
87337570e0 Add reprojection example for tiled raster sources 2015-10-16 09:28:42 +02:00
Petr Sloup
7864ed7861 Force subdivision when transformation returns infinite coordinate 2015-10-16 09:28:42 +02:00
Petr Sloup
03c75a8648 Transformation caching during reprojection triangulation
This usually saves around 30-35% of transformation calls.
2015-10-16 09:28:42 +02:00
Petr Sloup
726bcbef83 Alternative reprojection triangulation strategy
The quads are now subdivided more granually (to 2 instead of 4), which
usually leads to reduced number of triangles and higher performance.
2015-10-16 09:28:42 +02:00
Petr Sloup
016df5b902 Minor ol.reproj.Image fixes 2015-10-16 09:28:42 +02:00
Petr Sloup
14e20e23a0 Correctly reproject projections with undefined units 2015-10-16 09:28:42 +02:00
Petr Sloup
aad5f94556 Minor type fix in ol.reproj.Image 2015-10-16 09:28:42 +02:00
Petr Sloup
615b54eb67 Use error threshold for image sources reprojection 2015-10-16 09:28:42 +02:00
Petr Sloup
fc23a38692 Take target extent into account when ensuring minimal reproj subdivision 2015-10-16 09:28:41 +02:00
Petr Sloup
3b1d72202a Correctly reproject sources in wrappable projection
With extent smaller than the projection extent
2015-10-16 09:28:41 +02:00
Petr Sloup
4c236a64b8 Handle canvas clip antialiasing during reprojection 2015-10-16 09:28:41 +02:00
Petr Sloup
3cc8291df4 Support pixelRatio during reprojection 2015-10-16 09:28:41 +02:00
Petr Sloup
c2b21985f4 Add ol.source.TileImage#setTileGridForProjection method 2015-10-16 09:28:41 +02:00
Petr Sloup
168b675191 Add reprojectionErrorThreshold option to the tiled image sources 2015-10-16 09:28:41 +02:00
Petr Sloup
ebc1bc0096 Better handling of tilegrids without extent during reprojection
For WMTS source, the tilegrid has no extent, but the projection can
2015-10-16 09:28:41 +02:00
Petr Sloup
be6bf00d74 Add defines for certain reprojection constants 2015-10-16 09:28:41 +02:00
Petr Sloup
f481070f82 Handle tilegrids without extent during tile reprojection 2015-10-16 09:28:41 +02:00
Petr Sloup
9a460b5f6b Handle cross-browser canvas antialiasing issues during reprojection
By doing strictly 1 drawImage per triangle; triangle overlapping and
using different blending mode.
2015-10-16 09:28:41 +02:00
Petr Sloup
8b38928aad Make rendering of reprojection edges configurable 2015-10-16 09:28:41 +02:00
Petr Sloup
30cd0aa584 Improve reprojection performance
Utilize the numerical shifting during reprojection to easily reduce
complexity of the linear system that needs to be solved.
2015-10-16 09:28:41 +02:00
Petr Sloup
8ab197eba6 Optimize the reprojection by stitching the sources prior to rendering
This solves canvas antialiasing issues and also simplifies the code
handling wrapX in the source projection.
2015-10-16 09:28:41 +02:00
Petr Sloup
6482ccf2f7 Make ol.reproj.Triangulation a class 2015-10-16 09:28:41 +02:00
Petr Sloup
0f408e341f Rename ol.source.Image#getImage implementations to #getImageInternal
This allows for the reprojection to be initialized in the #getImage,
while #getImageInternal is used to obtain the actual data.
2015-10-16 09:28:41 +02:00
Petr Sloup
ed1e49045a Allow different source and view projection in image layer renderers
To enable image layer reprojection.
2015-10-16 09:28:41 +02:00
Petr Sloup
be0a0de759 Integrate image reprojection with ol.source.Image 2015-10-16 09:28:41 +02:00
Petr Sloup
15575288e0 Add ol.ENABLE_RASTER_REPROJECTION define 2015-10-16 09:28:41 +02:00
Petr Sloup
f2f77091ad Handle tile sources without projection
Such sources should never be reprojected (and no additional tilecache or
tilegrid should be created).
2015-10-16 09:28:41 +02:00
Petr Sloup
c205323ff2 Reproject correctly when transform returns +-Infinity values 2015-10-16 09:28:41 +02:00
Petr Sloup
b0694c1e3b Add projection parameter to ol.source.Tile#expireCache and #useTile
This is required to be able to determine which cache the xyz coordinates
refer to (in case we have more caches).
2015-10-16 09:28:41 +02:00
Petr Sloup
e0cfa1951a Add projection parameter to ol.source.Tile#forEachLoadedTile 2015-10-16 09:28:41 +02:00
Petr Sloup
63084d30e9 Improve numerical stability of reprojection
By shifting the source points before calculating the affine transform to
obtain values from similar ranges (inputs and outputs of the transform).
2015-10-16 09:28:41 +02:00
Petr Sloup
9b82f19cc2 Simplify triangle-shifting logic for reprojection 2015-10-16 09:28:41 +02:00
Petr Sloup
3f567b0bf0 Use per-projection tilecaches and tilegrids (persistent instances) 2015-10-16 09:28:40 +02:00
Petr Sloup
bc74273208 Reproject every image only once per triangle
If the triangle has to be shifted, determine if the image has to be rendered shifted or not.
2015-10-16 09:28:40 +02:00
Petr Sloup
6e08fc9e13 Rename triangles to triangulation to be more precise 2015-10-16 09:28:40 +02:00
Petr Sloup
bf65b8a4fe Stronger typing of triangles and triangulation 2015-10-16 09:28:40 +02:00
Petr Sloup
e14bede9e9 Make projection parameter of ol.source.Tile#getTile no longer optional 2015-10-16 09:28:40 +02:00
Petr Sloup
ac76989447 Detect and handle triangles (tiles) crossing the dateline (projection edge) 2015-10-16 09:28:40 +02:00
Petr Sloup
b221e1ac1f Basic integration of raster reprojection for tiled sources
To allow for easier testing and debugging
2015-10-16 09:28:40 +02:00
Petr Sloup
ebc3f24671 Clamp the triangulation vertices if partially outside source extent 2015-10-16 09:28:40 +02:00
Petr Sloup
fcffce46b4 More robust way of handling non-global projections
If the target projection has specified extent, it is respected.
Also adds various checks to optimize performance and/or
prevent potential errors.
2015-10-16 09:28:40 +02:00
Petr Sloup
2cc2027353 More precise and robust way of calculating source resolution 2015-10-16 09:28:40 +02:00
Petr Sloup
c425b9c0e6 Verify triangulation against source/target extents
If we do this here, we can avoid some computations on triangles that will
be unused in the future anyway + reduce problems with non-global projections
without specified extents.
2015-10-16 09:28:40 +02:00
Petr Sloup
1222287f22 Add ol.reproj 2015-10-16 09:28:40 +02:00
Petr Sloup
44a64ba451 Add ol.math.solveLinearSystem 2015-10-16 09:28:40 +02:00
Andreas Hocevar
df6b90246a Merge pull request #4280 from ahocevar/box-overlaycontainer
Use overlay container instead of viewport for ol.render.Box
2015-10-15 21:00:20 +02:00
Andreas Hocevar
2d50511527 Use overlay container instead of viewport for ol.render.Box 2015-10-15 20:22:14 +02:00
Andreas Hocevar
fcdff1c841 Merge pull request #4278 from ahocevar/css-box
Use DOM instead of map canvas for ol.render.Box
2015-10-15 17:59:59 +02:00
Andreas Hocevar
7a070dd859 Use DOM instead of map canvas for ol.render.Box 2015-10-15 17:34:16 +02:00
Frédéric Junod
afdd22bd1d Merge pull request #4277 from fredj/box_select_example
Improve the box select example
2015-10-15 14:31:02 +02:00
Frederic Junod
a04022e8df Use Ctrl key / Meta key to activate the selection drag box 2015-10-15 14:12:08 +02:00
Frederic Junod
c27bcd86d3 Change the selection drag box colors 2015-10-15 13:49:06 +02:00
Frédéric Junod
a3550a5b00 Merge pull request #4276 from fredj/platformModifierKeyOnly_doc
Better ol.events.condition.platformModifierKeyOnly documentation
2015-10-15 13:34:45 +02:00
Frederic Junod
b477367099 Better ol.events.condition.platformModifierKeyOnly documentation
See https://github.com/google/closure-library/blob/master/closure/goog/events/browserevent.js#L175-L180
2015-10-15 12:55:23 +02:00
Frédéric Junod
671f774593 Merge pull request #4102 from fredj/ol.Observable_dispatchEvent
Export ol.Observable#dispatchEvent function
2015-10-15 12:53:41 +02:00
Frederic Junod
552e345fbf Fix ol.events.condition.mouseOnly parameter type
From `ol.MapBrowserEvent` to `ol.MapBrowserPointerEvent` and remove the
instanceof assert.
2015-10-15 11:43:30 +02:00
Frédéric Junod
4d43fe3346 Merge pull request #4261 from fredj/mouseOnly
ol.events.condition.mouseOnly may be wrong
2015-10-15 10:42:46 +02:00
Andreas Hocevar
6ec5e9a07d Merge pull request #4269 from adube/fix-zoomcontrol-duration
Fix Zoom control duration option - allow `0` as value
2015-10-14 22:43:05 +02:00
Andreas Hocevar
ee82fde184 Merge pull request #4268 from jonataswalker/get-overlay-by-id
Add method for retrieving ol.Overlay by id
2015-10-14 22:12:59 +02:00
jonataswalker
5dbaeb9ee5 Add method for retrieving ol.Overlay by id 2015-10-14 16:55:39 -03:00
Marc Jansen
cd99d44704 Use Math.cosh of ES6/2015 if available 2015-10-14 21:54:45 +02:00
Marc Jansen
449131a516 Use MDN polyfill for Math.cosh
This commit replaces the current implementation of ol.math.cosh with the
reference implementation of the Mozilla developer network. This method
only has one call to the Math.exp-function compared to two in the original
implementation.

See also: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Math/cosh
2015-10-14 21:54:45 +02:00
Marc Jansen
93f371ab9f Merge pull request #4257 from marcjansen/remove-unused-math
Remove unused ol.math-methods
2015-10-14 21:50:07 +02:00
Marc Jansen
2f5ccbd54d Remove unused ol.math-methods 2015-10-14 21:40:42 +02:00
Alexandre Dubé
718f32b177 Fix Zoom control duration option - allow 0 as value 2015-10-14 15:19:16 -04:00
Andreas Hocevar
1f8ee3a5ae Merge pull request #4270 from adube/fix-keyboardinteraction-options
Fix Keyboard zoom interation options
2015-10-14 21:08:57 +02:00
Andreas Hocevar
16b3893166 Merge pull request #4272 from adube/fix-interactiondefaults-zoomduration
Allow the DragZoom interaction created in defaults to use zoomDuration option.
2015-10-14 21:08:38 +02:00
jonataswalker
fce065e185 Add method for retrieving ol.Overlay by id 2015-10-14 16:01:48 -03:00
Alexandre Dubé
b54bc6cd42 Fix KeyboardZoom interation duration option, allow 0 value. 2015-10-14 14:43:04 -04:00
Andreas Hocevar
257313969c Merge pull request #4271 from adube/fix-dragzoominteraction-duration
Fix DragZoom interaction duration, allow `0` value
2015-10-14 20:19:04 +02:00
Alexandre Dubé
657b9dc018 Fix 'Shift' DragZoom in default interactions, use zoomDuration
This fix allows the DragZoom interaction created in the default
interactions to use the zoom duration defined in the options, if
set.
2015-10-14 13:46:30 -04:00
Alexandre Dubé
bd4b7a890d Fix DragZoom interaction duration, allow 0 value 2015-10-14 13:39:10 -04:00
jonataswalker
d29e5eaef1 Add method for retrieving ol.Overlay by id 2015-10-14 12:15:53 -03:00
Andreas Hocevar
a639291ea7 Merge pull request #4267 from ahocevar/example-improvements
Example usability improvements
2015-10-14 14:57:38 +02:00
Andreas Hocevar
53704379fa Make relative urls work for jsfiddle 2015-10-14 14:46:33 +02:00
Andreas Hocevar
3d82da1c7e Allow cloaking of API keys and apply to Bing keys 2015-10-14 14:31:42 +02:00
Frédéric Junod
b4061e7b35 Merge pull request #4263 from fredj/touchAction_extern
Add back CSSProperties.prototype.touchAction extern
2015-10-13 15:48:55 +02:00
Frederic Junod
00a6357c4d Add back CSSProperties.prototype.touchAction extern
See #4262
2015-10-13 15:38:55 +02:00
Frederic Junod
0a76145a93 Relay on the pointerType property in ol.events.condition.mouseOnly 2015-10-13 14:37:52 +02:00
Marc Jansen
b75ef3ae18 Merge pull request #4259 from marcjansen/math-radians-degrees
Remove use of toDegrees/toRadians util functions
2015-10-12 23:27:20 +02:00
Marc Jansen
f2df971eb0 Merge pull request #4258 from marcjansen/no-tagname-enum
Remove usage of goog.dom.TagName enum
2015-10-12 21:18:11 +02:00
Marc Jansen
47a7b03e0e Remove use of toDegrees/toRadians util functions
Instead of goog.math.toRadians and goog.math.toDegrees, we now use
our own implementations of these basic conversion functions.
2015-10-12 21:16:03 +02:00
Marc Jansen
9386415633 Remove usage of goog.dom.TagName enum 2015-10-12 20:45:49 +02:00
Andreas Hocevar
e111e30f33 Merge pull request #4255 from ahocevar/zoomslider-width
Fix zoom slider width for retina displays
2015-10-12 20:19:29 +02:00
Andreas Hocevar
61ce463cf9 Fix zoom slider width for retina displays
This also simplifies the css by using a button for the slider, like for other
controls.
2015-10-12 19:24:00 +02:00
Andreas Hocevar
758bab8e30 Merge pull request #4249 from ahocevar/tap-example
Make whole example box clickable
2015-10-12 11:04:17 +02:00
Andreas Hocevar
dea723bac3 Make whole example box clickable 2015-10-11 23:16:12 +02:00
Éric Lemoine
dcfeff11bf Merge pull request #4045 from Jenselme/wmts-capabilities-parser
Add parser for dimension property from WMTS Capabilities.xml
2015-10-09 18:59:22 +02:00
Julien Enselme
475504cd85 Add parser for dimension property from WMTS Capabilities.xml
- Correct parsing of dimension in ol.source.WMTS.optionsFromCapabilities
2015-10-09 18:43:26 +02:00
Éric Lemoine
936118955f Merge pull request #4161 from jonataswalker/translate-events
Add `translatestart`, `translateend` and `translating` events to `ol.interaction.Translate`
2015-10-09 18:16:17 +02:00
Éric Lemoine
d5ec75a643 Merge pull request #4186 from elemoine/webgl-context
Do not export ol.webgl.Context
2015-10-09 17:59:07 +02:00
Andreas Hocevar
d0f5585157 Merge pull request #4246 from openlayers/release-v3.10.1
Release v3.10.1
2015-10-09 17:40:29 +02:00
Andreas Hocevar
db0c8c3c3a Update package version to 3.10.1 2015-10-09 17:38:41 +02:00
Andreas Hocevar
1941be9995 Changelog for v3.10.1 2015-10-09 17:37:52 +02:00
Marc Jansen
313bff7aff Merge pull request #4242 from marcjansen/fix-drawtext-regression
Fix a drawText regression introduced with 31a68e2
2015-10-09 17:32:51 +02:00
Marc Jansen
2cd64d33ec Merge pull request #4242 from marcjansen/fix-drawtext-regression
Fix a drawText regression introduced with 31a68e2
2015-10-09 16:07:46 +02:00
Éric Lemoine
ba3e65c919 Merge pull request #4239 from austinkeeley/master
Changing highlighted to highlight
2015-10-09 15:40:55 +02:00
Marc Jansen
03ed8085b9 Fix a drawText regression introduced with 31a68e21 2015-10-09 11:49:45 +02:00
Austin Keeley
fa91748741 Changing highlighted to highlight 2015-10-08 18:38:57 -04:00
Andreas Hocevar
c067f40ecf Merge pull request #3727 from bogdanvaduva/overview_map
Added getOverviewMap getter method in overviewmapcontrol.js
2015-10-08 19:54:16 +02:00
Andreas Hocevar
c9c845394f Merge pull request #4238 from openlayers/release-v3.10.0
Release v3.10.0
2015-10-08 19:17:58 +02:00
Andreas Hocevar
63bc9459d9 Update package version to 3.10.0 2015-10-08 19:16:23 +02:00
Andreas Hocevar
f6d40faa3d Changelog for v3.10.0 2015-10-08 19:15:48 +02:00
Andreas Hocevar
c475902e19 Merge pull request #4237 from awaterme/master
#3328: GML3 - Writing features with multiple geometries
2015-10-08 18:11:53 +02:00
Bogdan Vaduva
1f7bdd10f8 Changed @api experimental to @api 2015-10-08 19:11:23 +03:00
Andreas Watermeyer
687a65aa95 #3328: reformatted fixjsstyle 2015-10-08 17:21:15 +02:00
Andreas Watermeyer
4c207d9460 #3328: Reformat once again 2015-10-08 17:09:48 +02:00
awaterme
5fb7a8bc34 #3328: Reformatted details. 2015-10-08 16:52:32 +02:00
Andreas Hocevar
391e2b6fea Merge pull request #4218 from jonataswalker/getlayer-from-selectinteraction
Add 'getLayer()' method to 'ol.interaction.Select'
2015-10-08 16:20:31 +02:00
jonataswalker
04c16106cd Add unit test to ol.interaction.Select#getLayer 2015-10-08 16:18:33 +02:00
jonataswalker
85163bceb6 Add 'getLayer()' method to 'ol.interaction.Select' 2015-10-08 16:18:33 +02:00
jonataswalker
094f8d5391 Add 'getLayer()' method to 'ol.interaction.Select' 2015-10-08 16:18:33 +02:00
Andreas Hocevar
09026af4fa Merge pull request #4236 from ahocevar/recover-from-conflict-4036
Recover from bad merge conflict resolution in #4036
2015-10-08 15:34:37 +02:00
Andreas Hocevar
d429eba4ae Merge pull request #3858 from Jebjum/master
Fix graticule on wrapped views
2015-10-08 15:27:37 +02:00
Andreas Hocevar
dc0c0877d7 Recover from bad merge conflict resolution in #4036 2015-10-08 15:18:11 +02:00
Andreas Hocevar
21d001b22a Merge pull request #4036 from alvinlindstam/fix-modify-events
Fix modify interaction event order
2015-10-08 12:23:38 +02:00
Alvin Lindstam
487c22ceae Fix miswritten test 2015-10-08 12:23:11 +02:00
Alvin Lindstam
72a9460ff6 Fix modify event trigger order, should trigger modifystart before any modification and modifyend last. 2015-10-08 12:23:11 +02:00
Andreas Hocevar
46a1140583 Merge pull request #4036 from alvinlindstam/fix-modify-events
Fix modify interaction event order
2015-10-08 12:17:57 +02:00
Andreas Hocevar
f95b154117 Merge pull request #4116 from ahocevar/overviewmap-view
Make ol.control.OverviewMap's view configurable
2015-10-08 11:44:38 +02:00
Andreas Hocevar
7c5bec260b Merge pull request #4234 from tbarsballe/ogcwkt-proj4
Support OGC WKT proj4 def.units and def.to_meter
2015-10-07 20:59:00 +02:00
Torben Barsbsballe
7cefe56167 Support OGC WKT proj4 def.units and def.to_meter 2015-10-07 11:18:52 -07:00
Frédéric Junod
ce9ac92028 Merge pull request #4224 from fredj/simplify_rotate
Don't transform the angle into degrees to rotate the element
2015-10-07 09:04:41 +02:00
Andreas Hocevar
da830a7670 Merge pull request #4231 from ahocevar/revert-4217
Revert "Merge pull request #4217 from ThomasG77/clipboardjs-replacement"
2015-10-06 16:19:25 +02:00
Andreas Hocevar
e242c2ca1d Revert "Merge pull request #4217 from ThomasG77/clipboardjs-replacement"
This reverts commit 82e989b652, reversing
changes made to 0e83c90377.
2015-10-06 16:17:43 +02:00
Andreas Hocevar
82e989b652 Merge pull request #4217 from ThomasG77/clipboardjs-replacement
Replace ZeroClipboard with Clipboard.js to remove flash dependency
2015-10-06 16:08:15 +02:00
Frédéric Junod
0e83c90377 Merge pull request #4223 from fredj/rm_easing
Remove goog.fx.easing
2015-10-06 14:38:52 +02:00
Frédéric Junod
fb243807e8 Merge pull request #4222 from fredj/cleanup
Remove unnecessary cast
2015-10-06 14:27:55 +02:00
Frederic Junod
d495b19448 Don't transform the angle into degrees to rotate the element 2015-10-06 14:04:47 +02:00
Frederic Junod
ef5cdb0ec6 Remove goog.fx.easing 2015-10-06 14:00:06 +02:00
Frederic Junod
b3493c6382 Remove unnecessary cast 2015-10-06 11:26:39 +02:00
Andreas Hocevar
17bac04030 Merge pull request #4209 from gberaudo/remove_goog_string_remove
Remove goog.string.remove
2015-10-05 10:04:13 +02:00
Andreas Hocevar
e01c16c00b Merge pull request #4207 from gberaudo/remove_goog_string_startsWith
Remove goog.string.startsWith
2015-10-05 09:28:44 +02:00
Frédéric Junod
5abeaf3716 Merge pull request #4208 from gberaudo/remove_goog_string_trim
Remove goog.string.trim()
2015-10-05 09:06:32 +02:00
Andreas Hocevar
1d86ae3e3f Merge pull request #4216 from ahocevar/fill-stroke-boolean
Fix canvas replay which broke with 31a68e2
2015-10-05 08:57:36 +02:00
ThomasG77
7192a6d1a5 Replace ZeroClipboard with Clipboard.js to remove flash dependency 2015-10-05 01:23:20 +02:00
Andreas Hocevar
deea8060af Fix canvas replay which broke with 31a68e2
See #4192
2015-10-04 23:12:39 +02:00
Andreas Hocevar
faff14c44c Merge pull request #4164 from spatialillusions/patch-1 2015-10-02 11:11:08 +02:00
Andreas Hocevar
2d7d002c85 Fix coding style 2015-10-02 11:05:19 +02:00
Guillaume Beraudo
9b3f61a084 Remove goog.string.remove
Use standard replace method instead.
2015-10-01 14:54:04 +02:00
Frédéric Junod
4cf1ee769e Merge pull request #4202 from fredj/rm_appendChild
Remove use of goog.dom.appendChild
2015-10-01 14:49:15 +02:00
Frédéric Junod
0a617bef12 Merge pull request #4205 from fredj/cleanup
Minor cleanup
2015-10-01 14:23:43 +02:00
Guillaume Beraudo
fef1b0981e Remove goog.string.trim()
Replace with standard ECMAScript 5.1.
2015-10-01 14:14:06 +02:00
Guillaume Beraudo
b092bce4ff Remove goog.string.startsWith
Replace with simple indexOf test
2015-10-01 14:00:42 +02:00
Frederic Junod
ef9b64673e Remove unused local variables 2015-10-01 13:38:55 +02:00
Frederic Junod
4d53049a7f Remove unnecessary cast 2015-10-01 13:38:49 +02:00
Marc Jansen
900827987a Merge pull request #4203 from marcjansen/formatting-post-4184
Cosmetic changes to example html / css
2015-10-01 13:00:05 +02:00
Marc Jansen
53d079ed95 Cosmetic changes to example html / css 2015-10-01 12:35:53 +02:00
Marc Jansen
63ae481dae Merge pull request #4184 from jonataswalker/getfeatureinfo-example
Adjust iframe's position of GetFeatureInfo examples
2015-10-01 12:32:15 +02:00
Frederic Junod
9b6ad1b36f Remove use of goog.dom.appendChild
Use `parent.appendChild(child)` instead.
2015-10-01 12:06:38 +02:00
Marc Jansen
e5397cbfca Merge pull request #4192 from marcjansen/simpler-no-is-null
Remove use of goog.isNull in favor of simple truthy checks
2015-10-01 09:30:34 +02:00
Marc Jansen
a38ac3a07b Use !!expr and not the verbose expr !== null
This addresses review comments by @tschaub.
2015-10-01 09:18:53 +02:00
Marc Jansen
d5c5d651cb Remove goog.isNull in xml class 2015-10-01 09:18:53 +02:00
Marc Jansen
ef0153692e Remove goog.isNull in tileurlfunction class 2015-10-01 09:18:53 +02:00
Marc Jansen
5daf741922 Remove goog.isNull in tilecoord class 2015-10-01 09:18:53 +02:00
Marc Jansen
ae657518c5 Remove goog.isNull in view class 2015-10-01 09:18:53 +02:00
Marc Jansen
7d110c829f Remove goog.isNull in tilegrid class 2015-10-01 09:18:53 +02:00
Marc Jansen
369f5a6171 Remove goog.isNull in lrucache class 2015-10-01 09:18:53 +02:00
Marc Jansen
b11c9c3b9c Remove goog.isNull in proj class 2015-10-01 09:18:53 +02:00
Marc Jansen
7530e46cfa Remove goog.isNull in pointereventhandler class 2015-10-01 09:18:53 +02:00
Marc Jansen
2b84e0f245 Remove goog.isNull in overlay class 2015-10-01 09:18:53 +02:00
Marc Jansen
5502083af9 Remove goog.isNull in mapbrowserevent class 2015-10-01 09:18:53 +02:00
Marc Jansen
02fe825113 Remove goog.isNull in map class 2015-10-01 09:18:53 +02:00
Marc Jansen
6aa75c490b Remove goog.isNull in has class 2015-10-01 09:18:53 +02:00
Marc Jansen
89456e7906 Remove goog.isNull in graticule class 2015-10-01 09:18:53 +02:00
Marc Jansen
442caade91 Remove goog.isNull in geolocation class 2015-10-01 09:18:53 +02:00
Marc Jansen
e479411614 Remove goog.isNull in feature class 2015-10-01 09:18:53 +02:00
Marc Jansen
f360080fa7 Remove goog.isNull in dom class 2015-10-01 09:18:53 +02:00
Marc Jansen
e65384a407 Remove goog.isNull in deviceorientation class 2015-10-01 09:18:53 +02:00
Marc Jansen
3552f5ff66 Remove goog.isNull in attribution class 2015-10-01 09:18:53 +02:00
Marc Jansen
54d4434900 Remove goog.isNull in animation class 2015-10-01 09:18:53 +02:00
Marc Jansen
7ceb7a439e Remove goog.isNull in webgl classes 2015-10-01 09:18:53 +02:00
Marc Jansen
f9b07991e1 Remove goog.isNull in style classes 2015-10-01 09:18:53 +02:00
Marc Jansen
e1f477ad8c Remove goog.isNull in source classes 2015-10-01 09:18:52 +02:00
Marc Jansen
30e2f44825 Remove goog.isNull in image classes 2015-10-01 09:17:14 +02:00
Marc Jansen
138adf0509 Remove goog.isNull in renderer classes 2015-10-01 09:17:14 +02:00
Marc Jansen
31a68e21a5 Remove goog.isNull in render classes 2015-10-01 09:17:14 +02:00
Marc Jansen
f5788a32a7 Remove goog.isNull in layer classes 2015-10-01 09:17:14 +02:00
Marc Jansen
be2e4a33ae Remove goog.isNull in interaction classes 2015-10-01 09:17:14 +02:00
Marc Jansen
3c4e663224 Remove goog.isNull in geom classes 2015-10-01 09:17:14 +02:00
Marc Jansen
eb5088eb40 Remove goog.isNull in format classes 2015-10-01 09:17:14 +02:00
Marc Jansen
d728c71f02 Remove goog.isNull in control classes 2015-10-01 09:15:15 +02:00
Andreas Hocevar
8813180d41 Merge pull request #4187 from ahocevar/dashy-tileurl
Fix {-y} template calculation for custom (TMS) tile grids
2015-10-01 08:11:05 +02:00
Tim Schaub
6bdacced92 Merge pull request #4176 from tschaub/remove-isdefandnotnull
Remove use of goog.isDefAndNotNull().
2015-10-01 00:05:57 -06:00
Marc Jansen
74fffd5851 Merge pull request #4200 from marcjansen/no-object-get
Do not use goog.object.get
2015-10-01 07:09:57 +02:00
Marc Jansen
c4d5036878 Do not use goog.object.get 2015-09-30 22:27:39 +02:00
Andreas Hocevar
e6c5fa9cd7 Merge pull request #4198 from denilsonsa/patch-2
Improve ol.control.Rotate.prototype.resetNorth_ performance
2015-09-30 16:26:09 +02:00
Frédéric Junod
d29db03863 Merge pull request #4197 from denilsonsa/patch-1
Remove blur action on MOUSEOUT on Zoom Out button
2015-09-30 14:42:47 +02:00
Denilson Figueiredo de Sá
c8f0bb0ade Improve ol.control.Rotate.prototype.resetNorth_ performance
Changing. resetNorth_ function from O(n) to O(1).

To reproduce this issue, open the developer console and execute:

    map.getView().setRotation(5000000000);

Then click on the rotation button. Before the commit, it takes a few
seconds, after this commit it is instantaneous.

In addition, due to limited floating point precision, the previous code
calculates a different value from this one.
2015-09-30 09:37:51 -03:00
Denilson Figueiredo de Sá
e7ba63e020 Remove blur action on MOUSEOUT on Zoom Out button
This is a follow up of commit 761aa0ea5c.
That commit removed ol.control.Control.bindMouseOutFocusOutBlur function,
but forgot to remove this piece of code here.
2015-09-30 08:56:35 -03:00
Andreas Hocevar
8e122334ed Merge pull request #4195 from awaterme/Issue-4171
#4171: Prefer current layout as default on MultiLineString.setLineStrings()
2015-09-30 11:07:28 +02:00
Andreas Watermeyer
ea8ffd8b6a Issue #4171: Prefer current layout as default on MultiLineString.setLineStrings() 2015-09-30 09:21:14 +02:00
Andreas Hocevar
8248ec63ba Fix {-y} template calculation for custom (TMS) tile grids
Previously, {-y} only worked for the standard web mercator tile grid. Now
a tile grid with an extent is required (which we get from
ol.tilegrid.createXYZ() anyway), and then the y calculation for TMS style
tile grids works as expected.
2015-09-30 09:07:55 +02:00
Andreas Hocevar
79766ad25c Merge pull request #4172 from awaterme/Issue-4171
#4171: Prefer current layout as default on Multipolygon.setPolygons()
2015-09-29 22:58:12 +02:00
Marc Jansen
901eee1887 Merge pull request #4190 from marcjansen/no-goog-functions-constant
Remove use of goog.functions.constant
2015-09-29 22:11:50 +02:00
Marc Jansen
cd5b15fa55 Remove use of goog.functions.constant 2015-09-29 20:28:06 +02:00
Tim Schaub
ab87eb8af0 Remove remaining goog.isDefAndNotNull() calls 2015-09-29 09:51:41 -06:00
Tim Schaub
1aca93d297 Remove goog.isDefAndNotNull() from vector sources 2015-09-29 09:48:19 -06:00
Tim Schaub
871575607f Remove goog.isDefAndNotNull() from tileutfgridsource.js 2015-09-29 09:44:03 -06:00
Andreas Watermeyer
509cb3a3c9 Issue #4171: Prefer current layout as default on Multipolygon.setPolygons() 2015-09-29 17:40:46 +02:00
Tim Schaub
5acf9023d0 Remove goog.isDefAndNotNull() from deviceorientation.js 2015-09-29 09:39:19 -06:00
Frédéric Junod
fd729216b5 Merge pull request #4188 from fredj/rm_goog_object_getKeys
Remove use of goog.object.getKeys
2015-09-29 17:33:13 +02:00
Tim Schaub
b48cabee28 Remove unnecessary goog.isDefAndNotNull() calls 2015-09-29 09:32:51 -06:00
Tim Schaub
ed3dcd636f Replace !goog.isDefAndNotNull() with falsey checks 2015-09-29 09:32:51 -06:00
Tim Schaub
ac7db89a91 Replace goog.isDefAndNotNull() with truthy checks 2015-09-29 09:32:51 -06:00
Marc Jansen
8209ed0a4c Merge pull request #4189 from marcjansen/null-function
Replace goog.nullFunction with ol.nullFunction
2015-09-29 17:25:18 +02:00
Marc Jansen
bc58c383ba Replace goog.nullFunction with ol.nullFunction 2015-09-29 16:39:35 +02:00
Frederic Junod
d2dd7584d8 Remove use of goog.object.getKeys 2015-09-29 14:24:34 +02:00
Frederic Junod
23de622d29 Use goog.object.isEmpty instead of goog.object.getKeys 2015-09-29 14:24:34 +02:00
Frédéric Junod
fbef99ae96 Merge pull request #4165 from fredj/es5
Use ECMAScript 5.1 Array functions instead of goog.array
2015-09-29 14:09:32 +02:00
jonataswalker
7d2c8be391 Add 'translatestart', 'translateend' and 'translating' events to 'ol.interaction.Translate' 2015-09-29 08:06:54 -03:00
jonataswalker
4a66289e5a Add 'translatestart', 'translateend' and 'translating' events to 'ol.interaction.Translate' 2015-09-29 06:59:05 -03:00
jonataswalker
9a923cc5dc Add 'translatestart', 'translateend' and 'translatedrag' events to 'ol.interaction.Translate' 2015-09-29 06:59:05 -03:00
jonataswalker
0188809918 Add 'translatestart', 'translateend' and 'translatedrag' events to 'ol.interaction.Translate' 2015-09-29 06:59:05 -03:00
Frederic Junod
496cece074 Remove use of goog.array.forEach 2015-09-29 10:55:17 +02:00
Frederic Junod
cd152cca14 Use a for loop instead of goog.array.forEach
The variable is a NodeList, not an Array.
https://developer.mozilla.org/en-US/docs/Web/API/NodeList#Why_is_NodeList_not_an_Array
2015-09-29 10:55:17 +02:00
Frederic Junod
252e60b5af Remove use of goog.array.indexOf 2015-09-29 10:55:17 +02:00
Frederic Junod
f49e82ade1 Remove use of goog.array.filter 2015-09-29 10:54:55 +02:00
Frederic Junod
9e2a393426 Remove use of goog.array.map 2015-09-29 10:54:55 +02:00
Frédéric Junod
4e7f558234 Merge pull request #4181 from fredj/ol.array.includes
Remove use of goog.array.contains
2015-09-29 10:54:45 +02:00
Frederic Junod
da611b9cb5 Use ol.array.includes instead of goog.array.indexOf 2015-09-29 10:46:04 +02:00
Frederic Junod
88c3891bef Replace goog.array.contains with ol.array.includes 2015-09-29 10:42:07 +02:00
Frédéric Junod
504e67303f Merge pull request #4162 from fredj/rm_legacy_ie
Remove ol.LEGACY_IE_SUPPORT
2015-09-29 10:37:04 +02:00
Tim Schaub
ba5b950d5c Merge pull request #4174 from tschaub/fewer-layer-props
Remove hue, saturation, contrast, and brightness as layer properties.
2015-09-29 01:16:11 -06:00
Éric Lemoine
5c274adddb Do not export ol.webgl.Context
We don't need to export the `ol.export.Context` constructor as users won't create `ol.webgl.Context` instances themselves.
2015-09-28 20:21:40 +02:00
jonataswalker
d939fcec3f Adjust iframe's position of GetFeatureInfo examples 2015-09-28 13:49:34 -03:00
Éric Lemoine
e8257e805d Merge pull request #4183 from elemoine/remove-extra-api
Remove @api on getHitDetectionFramebuffer
2015-09-28 16:34:51 +02:00
Éric Lemoine
4c32ec4d67 Remove @api on getHitDetectionFramebuffer
This removes the `@api` marker on `getHitDetectionFramebuffer`. I think this was added by mistake in 7404204.
2015-09-28 16:11:55 +02:00
Marc Jansen
fd69e5f2be Merge pull request #4179 from marcjansen/no-goog-now
Use Date.now() instead of goog.now()
2015-09-28 16:00:49 +02:00
Frederic Junod
e877a21b8e Remove legacy IE support 2015-09-28 15:36:49 +02:00
Marc Jansen
2ed3f28ab8 Use Date.now() instead of goog.now() 2015-09-28 15:23:36 +02:00
Tim Schaub
55908485f2 Add detail to the upgrade notes 2015-09-27 23:02:24 -06:00
Tim Schaub
d6f03697d7 Remove hue, saturation, contrast, and brightness 2015-09-27 13:16:30 -06:00
Tim Schaub
6c5775e6f6 Merge pull request #4175 from tschaub/clamp
Remove use of goog.math.clamp().
2015-09-27 13:13:25 -06:00
Andreas Hocevar
28eef6c479 Merge pull request #4173 from ahocevar/zoom-only-when-changed
Only animate when resolution is about to be changed
2015-09-27 21:13:02 +02:00
Andreas Hocevar
4e48170fac Only animate when resolution is about to be changed 2015-09-27 20:38:50 +02:00
Tim Schaub
f746cb7f57 Use ol.math.clamp() 2015-09-27 12:26:21 -06:00
Tim Schaub
5cac9d61cc Merge pull request #4129 from openlayers/no-is-def
Remove use of goog.isDef.
2015-09-27 12:10:10 -06:00
Tim Schaub
29a1ea9ae3 Remove remaining goog.isDef() calls 2015-09-27 11:13:58 -06:00
Tim Schaub
c48ce003ba Remove unnecessary goog.isDef() checks from map.js 2015-09-27 11:03:27 -06:00
Tim Schaub
27d1e808b8 Replace goog.isDef(foo[bar]) with bar in foo 2015-09-27 10:58:39 -06:00
Tim Schaub
b3b31ea16d Inline various goog.isDef() calls 2015-09-27 10:51:03 -06:00
Tim Schaub
83c59ee255 Inline goog.isDef() calls for properties 2015-09-27 10:40:20 -06:00
Tim Schaub
36e336f406 Inline !goog.isDef() calls for properties 2015-09-27 10:37:20 -06:00
Tim Schaub
e3951fa3c6 Inline simple goog.isDef() calls 2015-09-27 10:34:44 -06:00
Tim Schaub
a86c270f6a Inline simple !goog.isDef() calls 2015-09-27 10:31:16 -06:00
Tim Schaub
3a0683f373 Inline !goog.isDef() property checks 2015-09-27 10:24:38 -06:00
Tim Schaub
6638ae855d Inline simple !goog.isDef() checks 2015-09-27 10:23:30 -06:00
Tim Schaub
b36d697585 Inline goog.isDef() property checks 2015-09-27 10:21:50 -06:00
Tim Schaub
7659e47e07 Inline simple goog.isDef() checks 2015-09-27 10:18:44 -06:00
Tim Schaub
cf5eadebaa Define options 2015-09-27 10:11:30 -06:00
Tim Schaub
0927c55b3c Toward natural JavaScript syntax 2015-09-25 12:16:42 -06:00
Marc Jansen
d610b206f7 Adjust checks against undefined as suggested
This commit changes the various checks against undefined as suggested by
@elemoine, see e.g. his comments on 38636513bfc3792125de2e711a24bd3c898875ac.
2015-09-25 11:37:30 -06:00
Marc Jansen
7352ddeb89 Use ol.isDef in assertion
This addresses comment e558b5db63 (commitcomment-13406867)
by @elemoine.
2015-09-25 11:35:13 -06:00
Marc Jansen
8eea827343 Remove goog.isDef from maprenderer 2015-09-25 11:35:13 -06:00
Marc Jansen
710353784b Remove goog.isDef from render/vector 2015-09-25 11:35:13 -06:00
Marc Jansen
06b34055d1 Remove goog.isDef from touchsource 2015-09-25 11:35:13 -06:00
Marc Jansen
3de0aad52a Remove goog.isDef from pointerevent 2015-09-25 11:35:13 -06:00
Marc Jansen
4fa590965c Remove goog.isDef from vectorlayer 2015-09-25 11:35:12 -06:00
Marc Jansen
2b53d43faa Remove goog.isDef from tilelayer 2015-09-25 11:35:12 -06:00
Marc Jansen
0f55d173b8 Remove goog.isDef from layerbase 2015-09-25 11:35:12 -06:00
Marc Jansen
cbb72c1ce4 Remove goog.isDef from layer 2015-09-25 11:35:12 -06:00
Marc Jansen
66ad8364e0 Remove goog.isDef from imagelayer 2015-09-25 11:35:12 -06:00
Marc Jansen
b5ecc6e43c Remove goog.isDef from heatmaplayer 2015-09-25 11:35:12 -06:00
Marc Jansen
c1c07e2f3c Remove goog.isDef from snapinteraction 2015-09-25 11:35:12 -06:00
Marc Jansen
4b993727c8 Remove goog.isDef from selectinteraction 2015-09-25 11:35:12 -06:00
Marc Jansen
6c581b8eaf Remove goog.isDef from pointerinteraction 2015-09-25 11:35:11 -06:00
Marc Jansen
779811b52d Remove goog.isDef from pinchzoominteraction 2015-09-25 11:35:11 -06:00
Marc Jansen
c7a98f19b7 Remove goog.isDef from pinchrotateinteraction 2015-09-25 11:35:11 -06:00
Marc Jansen
10d4aeb1c6 Remove goog.isDef from mousewheelzoominteraction 2015-09-25 11:35:11 -06:00
Marc Jansen
20b694b8c1 Remove goog.isDef from keyboardpaninteraction 2015-09-25 11:35:11 -06:00
Marc Jansen
13273fb632 Add explicit type casts for options.duration 2015-09-25 11:35:11 -06:00
Marc Jansen
05da0ceaab Use ol.isDef when testing options.duration 2015-09-25 11:35:11 -06:00
Marc Jansen
68442578ba Use ol.isDef when checking booleans 2015-09-25 11:35:11 -06:00
Marc Jansen
0e4c73072f Remove goog.isDef from modifyinteraction 2015-09-25 11:35:11 -06:00
Marc Jansen
bd7ff16537 Remove goog.isDef from keyboardzoominteraction 2015-09-25 11:28:56 -06:00
Marc Jansen
241047795f Remove goog.isDef from interactiondefaults 2015-09-25 11:28:56 -06:00
Marc Jansen
293c65088d Remove goog.isDef from interaction 2015-09-25 11:28:56 -06:00
Marc Jansen
c56ee19763 Remove goog.isDef from dragzoominteraction 2015-09-25 11:28:56 -06:00
Marc Jansen
08699e2b04 Remove goog.isDef from dragrotateinteraction 2015-09-25 11:28:55 -06:00
Marc Jansen
35dfa6c811 Remove goog.isDef from dragrotateandzoominteraction 2015-09-25 11:28:55 -06:00
Marc Jansen
3e49fc6081 Remove goog.isDef from dragpaninteraction 2015-09-25 11:28:55 -06:00
Marc Jansen
a42e4d4f4e Remove goog.isDef from dragboxinteraction 2015-09-25 11:28:55 -06:00
Marc Jansen
631b92412e Remove goog.isDef from draganddropinteraction 2015-09-25 11:28:55 -06:00
Marc Jansen
27fb1b6fde Remove goog.isDef from geom/linestring 2015-09-25 11:28:55 -06:00
Marc Jansen
2b77e1601a Remove goog.isDef from doubleclickzoominteraction 2015-09-25 11:28:55 -06:00
Marc Jansen
eeba5f4d10 Remove goog.isDef from drawinteraction 2015-09-25 11:28:55 -06:00
Bart van den Eijnden
ceb39b0d07 Add docs for count and startIndex (WFS paging) 2015-09-25 11:28:55 -06:00
Tim Schaub
d7ca176362 Remove goog.isDef from more formats 2015-09-25 11:28:55 -06:00
Tim Schaub
b0fe36e609 Remove goog.isDef for geometries 2015-09-25 11:28:54 -06:00
Tim Schaub
1fceb4a709 Remove goog.isDef from formats 2015-09-25 11:28:54 -06:00
Tim Schaub
5350e9ba37 Remove goog.isDef from device orientation, dom, extent, and feature 2015-09-25 11:28:54 -06:00
Marc Jansen
390153adc8 Remove goog.isDef from coordinate.js 2015-09-25 11:28:54 -06:00
Tim Schaub
a096ec5bf7 Remove goog.isDef from controls (-278 B) 2015-09-25 11:28:54 -06:00
Tim Schaub
007194a18f Remove goog.isDef from attributioncontrol.js (-33 B) 2015-09-25 11:28:54 -06:00
Tim Schaub
4c0d857f41 Remove goog.isDef from colormatrix.js (-12 B) 2015-09-25 11:28:54 -06:00
Tim Schaub
c8e9525f3b Remove goog.isDef from attribution.js through color.js (-54 B) 2015-09-25 11:28:54 -06:00
Tim Schaub
37d0176642 Remove goog.isDef from animation.js (-42 B) 2015-09-25 11:28:53 -06:00
Andreas Watermeyer
7c3bf59084 Issue #4171: Prefer current layout as default on Multipolygon.setPolygons() 2015-09-25 13:58:44 +02:00
Tim Schaub
e4ea5e17f7 Merge pull request #4168 from wlerner/master
Tile preload example wording (fixes #4147)
2015-09-24 11:16:54 -06:00
Warren
0acb2a335d Modified the preload.html example to reflect the correct position of the maps displayed 2015-09-24 12:18:23 -04:00
Frédéric Junod
c06d7aeacc Merge pull request #4167 from fredj/externs-cleanup
Remove externs in externs/closure-compiler.js
2015-09-24 16:03:08 +02:00
Frederic Junod
e77d705d52 Update externs/jquery-1.9.js
From https://github.com/google/closure-compiler/blob/master/contrib/externs/jquery-1.9.js
2015-09-24 14:47:39 +02:00
Frederic Junod
7252227ac6 Remove externs in externs/closure-compiler.js
Fixed upstream:
 * https://github.com/google/closure-compiler/pull/1139
 * https://github.com/google/closure-compiler/pull/1140
2015-09-24 14:21:27 +02:00
Éric Lemoine
3ddc260687 Merge pull request #4166 from elemoine/upgrade-closure
Use version 20150920 of Closure Compiler
2015-09-24 13:43:50 +02:00
Éric Lemoine
f30744c0b8 Simplify test-rendering.js
Now that https://github.com/laurentj/slimerjs/issues/333 is properly fixed (see 911fcb671a) we can no longer read Slimer's exit code from a file. Instead, we can just use the process exit code, which simplifies the test-rendering.js script.
2015-09-24 13:30:54 +02:00
Éric Lemoine
c37e80cd97 Use version 20150920 of Closure Compiler 2015-09-24 12:02:31 +02:00
Måns Beckman
0a28c4282e Adding check to see if already loaded images taints the canvas 2015-09-23 20:03:33 +02:00
Frédéric Junod
dd8422c8a0 Merge pull request #4159 from fredj/rm-goog.object.containsKey
Remove use of goog.object.containsKey
2015-09-23 13:31:14 +02:00
Frederic Junod
ee4f009d2f Remove use of goog.object.containsKey 2015-09-23 12:24:54 +02:00
Frederic Junod
901c55bf41 Remove unnecessary newlines 2015-09-23 12:18:50 +02:00
Frederic Junod
e884a8704d Remove use of goog.object.containsKey 2015-09-23 12:17:02 +02:00
Éric Lemoine
b53e4e39ad Merge pull request #4157 from elemoine/typo
Fix typo in doc
2015-09-23 10:25:52 +02:00
Éric Lemoine
6963c3c037 Merge pull request #4138 from ekargee/doc_text
Enhanced documentation for ol.style.Text
2015-09-23 10:15:44 +02:00
Éric Lemoine
d0621a1949 Fix typo in doc 2015-09-23 10:13:49 +02:00
Éric Lemoine
0c21afc3e4 Merge pull request #4151 from elemoine/modify-assert
Remove bogus assertion
2015-09-23 10:12:07 +02:00
Frédéric Junod
9a83db1c85 Merge pull request #4110 from fredj/cleanup
Minor cleanups
2015-09-23 09:55:33 +02:00
Éric Lemoine
85498983c0 Merge pull request #4156 from elemoine/custom-interactions
Rename drag-features example to custom-interactions
2015-09-23 09:54:57 +02:00
Éric Lemoine
9894ceda2a Remove bogus assertion
This commit removes an incorrect assertion from the modify interaction, which currently triggers when adding vertices to a line string. A new condition is added to the `if` statement to prevent a compilation error. In practice, `depth` and `segmentDataMatch.depth` are either both defined or both undefined.
2015-09-23 09:42:02 +02:00
Éric Lemoine
880be210a1 Rename drag-features example to custom-interactions 2015-09-23 09:16:29 +02:00
Frédéric Junod
7a38a8945c Merge pull request #4150 from fredj/rm-goog.object.remove
Remove use of goog.object.remove
2015-09-23 09:01:02 +02:00
Tim Schaub
cdf6fe44d8 Merge pull request #4145 from tschaub/simplified-geom
API method for simplifying geometries.
2015-09-22 11:45:42 -06:00
Tim Schaub
483f567d26 Working Wikipedia links 2015-09-22 10:39:19 -06:00
Tim Schaub
436561d9dd Make geom.simplify() exportable 2015-09-22 10:34:43 -06:00
Éric Lemoine
5162fda686 Merge pull request #4153 from elemoine/select-features
Add a "features" option to ol.interaction.Select
2015-09-22 17:53:39 +02:00
Tim Schaub
250e86e5f2 Update simplification docs 2015-09-22 09:49:42 -06:00
Éric Lemoine
0bc8858760 Add a "features" option to ol.interaction.Select 2015-09-22 17:02:14 +02:00
ekargee
3978dd87be Updated documentation for ol.style.Text - font and text 2015-09-22 18:57:49 +08:00
Éric Lemoine
0def9728bb Merge pull request #4144 from elemoine/feature-animation
Set context.fillStyle to a string
2015-09-22 12:13:12 +02:00
Frederic Junod
b128675e60 Remove use of goog.object.remove 2015-09-22 12:08:09 +02:00
Frédéric Junod
9f57e57400 Merge pull request #4149 from fredj/no-is-empty
Remove use of goog.array.isEmpty
2015-09-22 12:07:45 +02:00
Frederic Junod
0d23ab44b3 Remove use of goog.array.isEmpty 2015-09-22 11:25:04 +02:00
Jonatas Walker
b5a6eba175 Merge pull request #1 from openlayers/master
Sync from original
2015-09-22 06:03:29 -03:00
Tobias Sauerwein
44b1c9da89 Merge pull request #4139 from tsauerwein/turf-jsts-example
Add turf.js and JSTS example
2015-09-22 08:47:45 +02:00
Tim Schaub
e81b68ce8b API method for simplifying geometries 2015-09-21 14:20:16 -06:00
Éric Lemoine
167480bde6 context.fillStyle should be a string
The value we set context.fillStyle to should always be a string. This commit fixes a bug in circlestyle.js where we did set context.fillStyle to an array instead of a string.
2015-09-21 20:49:05 +02:00
Éric Lemoine
4f45bbc05d ol.style.Stroke has no "opacity" option 2015-09-21 20:49:05 +02:00
tsauerwein
8a703640d0 Add example with turf.js 2015-09-21 13:44:17 +02:00
tsauerwein
a5626a0573 Add example with JSTS 2015-09-21 13:44:10 +02:00
Elizabeth-Kate Gulland
33dbaccb68 Enhanced documentation for ol.style.Text 2015-09-19 06:26:41 +02:00
Tobias Sauerwein
f65129850d Merge pull request #4136 from marcjansen/fork-me
Fix the 'click-to-fork' link in contributer notes
2015-09-19 11:02:53 +09:00
Marc Jansen
851d7e065a Fix the 'click-to-fork' link in contributer notes 2015-09-19 03:46:19 +02:00
Andreas Hocevar
37112e07b6 Merge pull request #4132 from tsauerwein/doc-lat-lon
Update quickstart tutorial
2015-09-19 08:23:21 +09:00
tsauerwein
263960aad1 Use ol.proj.fromLonLat 2015-09-18 16:42:19 +09:00
tsauerwein
b1f56c1e98 Fix lat/lon order 2015-09-18 16:35:44 +09:00
Marc Jansen
73b67f7a74 Merge pull request #4111 from marcjansen/text-default-fill
Use a blackish default for filling texts
2015-09-18 07:28:17 +09:00
Marc Jansen
80995159b1 Use a blackish default for filling texts 2015-09-17 16:52:59 +02:00
Frédéric Junod
bfa16529de Merge pull request #4120 from kalbermattenm/featureoverlay
Remove invalid link to featureOverlay in API doc
2015-09-17 11:53:23 +02:00
Michael Kalbermatten
9543cc10dd Remove invalid link to featureOverlay in API doc 2015-09-17 11:12:54 +02:00
Pierre GIRAUD
7896350fe4 Merge pull request #4117 from pgiraud/foreachfeatureatcoordinate_nosource
forEachFeatureAtPixel shouldn't fail if layer has no source
2015-09-16 13:53:02 +02:00
Pierre GIRAUD
badf14e0f1 forEachFeatureAtPixel shouldn't fail if layer has no source 2015-09-16 13:27:01 +02:00
Andreas Hocevar
ea8ad4fc16 Make ol.control.OverviewMap's view configurable
This is useful for creating an OverviewMap in a different projection than
EPSG:3857.
2015-09-16 17:28:16 +09:00
Frederic Junod
139bcca26a Use goog.array.forEach to unlisten the array of keys 2015-09-15 10:05:57 +02:00
Frederic Junod
a613420953 Don't use deprecated ol.Observable#unByKey function 2015-09-15 10:01:56 +02:00
Frederic Junod
946ef8878d Export ol.Observable#dispatchEvent function 2015-09-15 09:56:26 +02:00
Éric Lemoine
e88f06b70f Merge pull request #4106 from elemoine/search-focus
Focus to search field on page load
2015-09-15 16:22:07 +09:00
Marc Jansen
da627dda4b Merge pull request #4079 from marcjansen/mark-required-options
Automatically mark required options in API-docs
2015-09-15 16:13:36 +09:00
Frédéric Junod
059ee6eaa5 Merge pull request #4108 from fredj/touchAction_extern
Add missing CSSProperties.prototype.touchAction extern
2015-09-14 14:51:03 +02:00
Frederic Junod
8afa911eb5 Add missing CSSProperties.prototype.touchAction extern 2015-09-14 14:26:43 +02:00
Frédéric Junod
a6f16e58e5 Merge pull request #4107 from fredj/touchAction
Prevent page zoom on IE Edge
2015-09-14 13:54:49 +02:00
Frederic Junod
758118e00d Prevent page zoom on IE Edge
The deprecated msTouchAction property was removed in IE Edge.
2015-09-14 13:38:35 +02:00
Éric Lemoine
1bebf55d30 Focus to search field on page load
This uses the "autofocus" on the search field to focus the search field on page load.
2015-09-14 09:15:12 +02:00
Marc Jansen
32c776ba9f Merge pull request #3969 from samuellapointe/MouseZoomSimple
Add an option to use the mouse's location as an anchor when zooming
2015-09-12 08:57:22 +02:00
Samuel Lapointe
c2c4dbfc32 Add a zoom setting to MouseWheelZoomInteraction
By default, zooming in or out zooms using the mouse's location
as an anchor, which makes it possible to navigate the map
using scrolling only, and makes zooming in more intuitive.

This commit adds a new useAnchor option to the MouseWheelZoom
interaction. It is enabled by default, which changes nothing
to the current behavior of the interaction. When disabled,
the interaction stops registering its lastAnchor_ value. This
turns the zoom into a very basic one, that zooms to the center
of the screen.

To use the map center zoom, set the useAnchor option to
false when creating the MouseWheelZoomInteraction, or use its
setMouseAnchor function.
2015-09-11 16:20:10 -04:00
Éric Lemoine
b2566cb64c Merge pull request #4101 from elemoine/release-v3.9.0
Release v3.9.0
2015-09-10 10:57:13 +02:00
Éric Lemoine
dedf0a5d63 Update package version to 3.9.0 2015-09-10 10:45:01 +02:00
Éric Lemoine
41bb512952 Changelog for v3.9.0 2015-09-10 10:44:20 +02:00
Éric Lemoine
a1da682722 Merge pull request #4055 from fgravin/graticulePerf
Improve graticule perf
2015-09-10 09:31:10 +02:00
Frédéric Junod
6da7cf3f84 Merge pull request #4088 from fredj/update_jshint
Update jshint to v2.8.0
2015-09-10 09:28:07 +02:00
Pierre GIRAUD
216be8a673 Merge pull request #4089 from pgiraud/select_interaction
SelectEventType in ol.interaction namespace
2015-09-10 09:24:54 +02:00
Tim Schaub
411419e45f Merge pull request #4095 from tschaub/drag-zoom
Zoom to the extent of the drag box.
2015-09-09 11:21:49 -06:00
Tim Schaub
6617bdd57f Drag zoom interaction tests 2015-09-09 10:49:08 -06:00
Tim Schaub
6838fdd4c9 Merge pull request #4084 from tschaub/circle-exports
Fewer circle exports.
2015-09-09 09:12:42 -06:00
Tim Schaub
085c2d7e33 Merge pull request #4094 from tschaub/set-attributions
Allow source.setAttributions() to be exported.
2015-09-09 09:12:08 -06:00
Éric Lemoine
6c854ed056 Merge pull request #4096 from bjornharrtell/inheritdoc
Reinstate inheritdoc to fix #4082
2015-09-09 07:59:29 +02:00
Frédéric Junod
d0b87ecd63 Merge pull request #4091 from fredj/cleanup
Remove unused ol.renderer.webgl.Map.DEFAULT_COLOR_VALUES_
2015-09-09 07:43:55 +02:00
Frédéric Junod
0469a31ea9 Merge pull request #4092 from fredj/coding_style
Minor coding style fixes
2015-09-09 07:43:42 +02:00
Björn Harrtell
31f2e334cf Reinstate inheritdoc to fix #4082 2015-09-09 07:43:22 +02:00
Tim Schaub
b7f199c8cd Zoom to the extent of the drag box 2015-09-08 23:07:47 -06:00
Tim Schaub
d3a4fd115b Merge pull request #4083 from tschaub/missing-description
Add API descriptions.
2015-09-08 22:35:31 -06:00
Tim Schaub
0fec4c5ff7 Allow source.setAttributions() to be exported 2015-09-08 21:41:57 -06:00
Frederic Junod
d0722cab6a Use bracket notation instead of goog.object.get 2015-09-08 16:33:15 +02:00
Frederic Junod
f02ad3e584 Use bracket notation instead of goog.object.set 2015-09-08 16:33:12 +02:00
Frederic Junod
bb5b711dac Remove unused ol.renderer.webgl.Map.DEFAULT_COLOR_VALUES_ 2015-09-08 15:40:35 +02:00
Pierre GIRAUD
7c2fffed68 SelectEventType in ol.interaction namespace 2015-09-08 14:26:39 +02:00
Frederic Junod
989adabb1f Update jshint to v2.8.0 2015-09-08 10:41:12 +02:00
Frédéric Junod
1e78c45466 Merge pull request #4078 from fredj/jscomp_error
Enable all the compiler checks
2015-09-07 15:32:43 +02:00
Éric Lemoine
9b738b6cb6 Merge pull request #4085 from oterral/fix_nested_doc
Parse nested document tag
2015-09-07 14:58:08 +02:00
Frederic Junod
4aa2369244 Add missing type annotation in ol.format.WMSCapabilities
The error reported by the compiler was:
```
ERR! compile src/ol/format/wmscapabilitiesformat.js:160: ERROR - inconsistent return type
ERR! compile found   : Array
ERR! compile required: (null|ol.Extent|undefined)
ERR! compile   return [
ERR! compile          ^
ERR! compile
```
2015-09-07 14:48:48 +02:00
Frederic Junod
d702aad450 Fix return annotation in shaded-relief example 2015-09-07 14:48:48 +02:00
Frederic Junod
d41bb2663b Add esrijson externs in config/example.json 2015-09-07 14:48:48 +02:00
Frederic Junod
07b1f5ea45 Enable all the compiler checks 2015-09-07 14:48:48 +02:00
Frederic Junod
bf35b32a20 Suppress extraRequire compiler check in generated exports 2015-09-07 14:48:48 +02:00
oterral
dba6e04a1b Parse nested document tag 2015-09-07 13:14:24 +02:00
Frédéric Junod
cb9054f7fd Merge pull request #4060 from fredj/unnecessary_cast
Remove unnecessary cast
2015-09-07 09:33:03 +02:00
Frédéric Junod
ad56dea388 Merge pull request #4064 from fredj/lazy_ol.style.defaultStyleFunction
Use a private variable to cache the default style array
2015-09-07 09:24:52 +02:00
Frederic Junod
529f869803 Remove unnecessary cast
Found by the latest version of closure-compiler (v20150729)
2015-09-07 09:15:34 +02:00
Frederic Junod
5371d8dd34 Use a private variable to cache the default style array
See #1815
Fixes #4063
2015-09-07 09:12:52 +02:00
Tim Schaub
fc51ab05f4 Upgrade notes for circle symbolizer 2015-09-06 10:11:09 -06:00
Tim Schaub
053538cc42 Anchor, origin, and size are neither settable nor gettable for circle 2015-09-06 09:57:25 -06:00
Tim Schaub
8311f090de Missing ol.render.webgl.Immediate#drawAsync description 2015-09-06 09:46:33 -06:00
Tim Schaub
a09c07a427 Missing vector context description 2015-09-06 09:41:56 -06:00
Tim Schaub
eed926fa94 Missing ol.control.OverviewMap#getCollapsed description 2015-09-06 09:36:00 -06:00
Tim Schaub
fe153b94fb Missing drag and drop event description 2015-09-06 09:31:51 -06:00
Tim Schaub
fce931afbe Missing ol.render.Event#frameState description 2015-09-06 08:39:50 -06:00
Tim Schaub
d036602cec Missing ol.source.WMTS.optionsFromCapabilities description 2015-09-06 08:37:39 -06:00
Tim Schaub
1a240ccf9d Missing image style method descriptions 2015-09-06 08:35:38 -06:00
Tim Schaub
91f47a876c Missing ol.Observable#getRevision description 2015-09-06 07:57:41 -06:00
Tim Schaub
9f5d8d3901 Missing ol.ImageTile#getImage description 2015-09-06 07:56:15 -06:00
Tim Schaub
0bfd22b235 Missing ol.Feature#getId description 2015-09-06 07:54:38 -06:00
Tim Schaub
965a27b115 Merge pull request #4081 from tschaub/workshop-link
Update link to workshop.
2015-09-04 17:36:32 -06:00
Tim Schaub
47fbbf6ce2 Update link to workshop 2015-09-04 13:51:25 -06:00
Frédéric Junod
cc6e0f1b3c Merge pull request #4062 from fredj/rm_ol.xml.makeParsersNS
Remove ol.xml.makeParsersNS and use ol.xml.makeStructureNS instead
2015-09-04 17:03:17 +02:00
Éric Lemoine
0001e0989b Merge pull request #3986 from alvinlindstam/feature/url-function
Modify 'url' option of ol.source.Vector to accept a function
2015-09-04 14:23:00 +02:00
Frédéric Junod
6d87fffb73 Merge pull request #4077 from fredj/jsdoc_const
Add missing const jsdoc annotation
2015-09-04 07:02:52 +02:00
Frédéric Junod
5760e427d2 Merge pull request #4080 from fredj/unused-require
Remove unused goog.require in examples
2015-09-03 18:53:47 +02:00
Éric Lemoine
c4d4962806 Merge pull request #4041 from elemoine/custom-build-issue
Fix custom build issue
2015-09-03 18:41:19 +02:00
Éric Lemoine
250cb35f8e Merge pull request #4059 from alvinlindstam/documentation/drag-example
Clarify drag interaction example to inform about ol.interaction.Translate
2015-09-03 17:54:40 +02:00
Frederic Junod
2b995fd8cf Remove unused goog.require 2015-09-03 17:47:20 +02:00
Marc Jansen
0a99d0f211 Automatically mark required options in API-docs 2015-09-03 16:44:12 +02:00
Éric Lemoine
fd4eff7292 Merge pull request #4069 from gberaudo/layer_zindex
Add Z-index to layers
2015-09-03 16:38:50 +02:00
Frederic Junod
6f40544732 Add missing const jsdoc annotation 2015-09-03 12:06:33 +02:00
Andreas Hocevar
4e58ebd360 Merge pull request #4076 from weskamm/projectiondocs
Add assertion for required option 'code' on ol.proj.Projection
2015-09-03 11:33:27 +02:00
Guillaume Beraudo
43f72031f9 Add Z-index layer ordering tests 2015-09-03 11:31:57 +02:00
Guillaume Beraudo
3811228ac7 Add Z-index to layers
This commit allows setting a z-index property on the layers and uses
it in the canvas, WEBGL and DOM map renderers for ordering the layers
before rendering.

Default z-index is 0 for managed layers and 1000 for unmanaged ones.
It allows always on bottom, always on top and more complex layer layouts.
2015-09-03 11:31:57 +02:00
Johannes Weskamm
c57f5e5f0a Add assertion for required option 'code' on ol.proj.Projection
Additionally clarify docs.
2015-09-03 11:15:41 +02:00
Bart van den Eijnden
0d32a49244 Merge pull request #4075 from bartvde/set-opacity-api
setOpacity of Image undefined
2015-09-03 09:17:02 +02:00
Bart van den Eijnden
6a0fa114da Make setOpacity on ol.style.Image API 2015-09-03 08:58:50 +02:00
Éric Lemoine
7b805ead9e Merge pull request #4044 from elemoine/continue-drawing
Add ol.interaction.Draw#continueDrawing
2015-09-02 17:36:50 +02:00
Éric Lemoine
95030cd838 Add ol.interaction.Draw#extend
This commit adds an `extend` method to the draw interaction. This method makes it possible to extend (continue drawing) an existing line string feature. It only works on line string features, where this functionality makes the most sense.

Here's an example on how to use `extend`:

```js
var vectorSource = vectorLayer.getSource();
vectroSource.removeFeature(feature);
drawInteraction.extend(feature);
```
2015-09-02 17:21:10 +02:00
Frédéric Junod
e568eb3ccf Merge pull request #4073 from fredj/type_definition
Better type definition
2015-09-02 17:20:07 +02:00
Frederic Junod
813afe1e3f Better skippedFeaturesHash type definition 2015-09-02 14:18:34 +02:00
Frederic Junod
8b6ab65ca7 Better ol.Map#logos_ type definition 2015-09-02 14:02:56 +02:00
Éric Lemoine
f5df71ba70 Merge pull request #4072 from elemoine/closure-util-1-7
Update to closure-util 1.7.0
2015-09-02 10:01:18 +02:00
Éric Lemoine
1553dce3dc Remove extern definition duplicates 2015-09-02 09:48:43 +02:00
Éric Lemoine
055df25c58 Update to closure-util 1.7.0 2015-09-02 09:48:03 +02:00
Tim Schaub
4dddf4c3d9 Merge pull request #4070 from tschaub/debug-server
Make the debug server work regardless of the current working directory.
2015-09-01 22:14:20 -06:00
Tim Schaub
4d5cf372b0 Always look for ol deps in the root of the ol repo 2015-09-01 21:43:22 -06:00
Frédéric Junod
34f65a8908 Merge pull request #4067 from fredj/alert-error
Fix bootstrap class name in examples
2015-09-01 16:24:22 +02:00
Frederic Junod
b4dec522f1 Fix bootstrap class name in examples
`alert-error` was renamed to `alert-danger`
2015-09-01 15:28:25 +02:00
Frederic Junod
af553366d4 Remove ol.xml.makeParsersNS and use ol.xml.makeStructureNS instead 2015-08-31 14:06:49 +02:00
Alvin Lindstam
66524a8075 Clarify drag interaction example to inform about ol.interaction.Translate 2015-08-28 22:13:49 +02:00
Alvin Lindstam
33229597c8 Modify OSM and WFS examples to use FeatureUrlFunction instead of FeatureLoader 2015-08-28 21:57:48 +02:00
Alvin Lindstam
e41ba12445 Modify ol.featureloader (and consequently ol.source.Vector) to accept a function as a url. 2015-08-28 21:57:48 +02:00
Florent gravin
31a074daf5 Improve graticule perf 2015-08-27 17:04:43 +02:00
Frédéric Junod
4045e06aa9 Merge pull request #4050 from fredj/view_getState
Use view.getRotation and view.getResolution instead of view.getState
2015-08-26 14:15:31 +02:00
Frédéric Junod
61fe8a8418 Merge pull request #4051 from fredj/wrench_devDependencies
Move wrench node package to devDependencies
2015-08-26 14:15:00 +02:00
Frederic Junod
954c1c313e Move wrench node package to devDependencies
This package is only used by tasks/test-coverage.js (code coverage with istanbul)

Fixes #4048
2015-08-26 13:42:17 +02:00
Frederic Junod
c1575e810b Use view.getRotation and view.getResolution instead of view.getState
view.getState calls 4 functions and creates an object and an array.
It's more efficient to use view.getRotation and view.getResolution.
2015-08-26 13:37:30 +02:00
Frédéric Junod
16d687205d Merge pull request #4047 from fredj/rm_pystache
Remove pystache dependency
2015-08-26 11:35:34 +02:00
Frederic Junod
15ef7eec85 Remove pystache dependency
And use the mustache node module instead.
2015-08-26 10:36:55 +02:00
Frédéric Junod
db68c09e4d Merge pull request #4027 from fredj/20150729_compatibility
closure-compiler v20150729 compatibility
2015-08-26 10:17:02 +02:00
Frederic Junod
9d07300e71 Rename ol.SelectEvent to ol.interaction.SelectEvent 2015-08-25 09:26:10 +02:00
Frederic Junod
ffc24e892e Rename ol.ModifyEvent to ol.interaction.ModifyEvent 2015-08-25 09:26:10 +02:00
Frederic Junod
49b8f90e66 Add missing goog.provide
The new version of the closure-compiler (version 20150729) wants that all the classes
tagged with `@constructor` to be provided (with `goog.provide`).
2015-08-25 09:26:10 +02:00
Frederic Junod
eb4dab90e5 Better type for ol.interaction.Modify#rBush_ 2015-08-25 09:26:10 +02:00
Éric Lemoine
7b9828a7a7 Merge pull request #4040 from elemoine/has-enable
Better docs for ol.ENABLE_[WEBGL|CANVAS|DOM]
2015-08-24 17:26:56 +02:00
Éric Lemoine
727586ecb9 Merge pull request #4032 from gberaudo/improve_overlay_extensibility
Improve ol.Overlay extensibility
2015-08-24 16:46:36 +02:00
Éric Lemoine
b3860a8fd5 Fix custom build issue
This fixes a custom build issue by adding a goog.require to imagestaticsource.js.

Fixes #4012.
2015-08-24 16:41:44 +02:00
Guillaume Beraudo
e189667d20 Improve ol.Overlay extensibility
- make autoPan_ protected;
- split updatePixelPosition_() and make it protected;
- use a protected setVisible() function.
2015-08-24 16:15:26 +02:00
Éric Lemoine
fe69c0e354 Better docs for ol.ENABLE_[WEBGL|CANVAS|DOM] 2015-08-24 16:05:43 +02:00
Frédéric Junod
1c549b4df3 Merge pull request #4037 from fredj/travis_pip_install
Don't install python packages in before_install
2015-08-24 14:19:35 +02:00
Éric Lemoine
931100e030 Merge pull request #4028 from elemoine/closure-util-1-6
Update to closure-util 1.6
2015-08-24 14:16:27 +02:00
Éric Lemoine
6c13de715e Update to closure-util 1.6.1 2015-08-24 14:02:23 +02:00
Frederic Junod
37cdbcc72f Don't install python packages in before_install
Travis already installs the packages by default.
See http://docs.travis-ci.com/user/languages/python/#Travis-CI-uses-pip
2015-08-24 10:03:07 +02:00
Frédéric Junod
da5bf46dbf Merge pull request #4014 from fredj/rm_checkStructDictInheritance
Remove deprecated checkStructDictInheritance
2015-08-24 09:08:12 +02:00
Frédéric Junod
2c8e5600ce Merge pull request #3987 from fredj/unnecessary_cast
Remove unnecessary cast
2015-08-24 09:07:27 +02:00
Alvin Lindstam
cb8e4e0ee7 Fix miswritten test 2015-08-23 23:35:08 +02:00
Alvin Lindstam
c5fe7df2e4 Fix modify event trigger order, should trigger modifystart before any modification and modifyend last. 2015-08-23 23:35:07 +02:00
Tim Schaub
0194c8e3c2 Merge pull request #4035 from tschaub/remove-unused
Remove unused sphere and ellipsoid methods.
2015-08-23 13:06:13 -06:00
Tim Schaub
980dbc121a Remove unused ol.Ellipsoid 2015-08-23 12:27:57 -06:00
Tim Schaub
d09506f5b1 Remove unused ol.ellipsoid.WGS84 2015-08-23 12:26:51 -06:00
Tim Schaub
13a9d2f6af Remove unused ellipsoid.vincenty() method 2015-08-23 12:26:43 -06:00
Tim Schaub
d91f5ecc48 Remove unused ellipsoid.vincentyDistance() method 2015-08-23 12:11:46 -06:00
Tim Schaub
b180149100 Remove unused ellipsoid.vincentyFinalBearing() method 2015-08-23 12:08:39 -06:00
Tim Schaub
6bbc411521 Remove unused ellipsoid.vincentyInitialBearing() method 2015-08-23 12:06:31 -06:00
Tim Schaub
0ba7856d49 Remove FIXMEs 2015-08-23 11:59:39 -06:00
Tim Schaub
90ec289c89 Remove unused sphere.midpoint() method 2015-08-23 11:56:23 -06:00
Tim Schaub
b724ce6c0d Remove unused sphere.interpolate() method 2015-08-23 11:54:08 -06:00
Tim Schaub
9cccbd0712 Remove unused sphere.maximumLatitude() method 2015-08-23 11:51:00 -06:00
Tim Schaub
3852be0d7e Remove unused sphere.initialBearing() method 2015-08-23 11:50:00 -06:00
Tim Schaub
daa4781072 Remove unused sphere.equirectangularDistance() method 2015-08-23 11:48:09 -06:00
Tim Schaub
8ec2bcef17 Remove unused sphere.finalBearing() method 2015-08-23 11:46:20 -06:00
Tim Schaub
c74277cae8 Remove unused sphere.cosineDistance() method 2015-08-23 11:43:26 -06:00
Tim Schaub
bc1328528a Remove unused sphere.crossTrackDistance() method 2015-08-23 11:41:06 -06:00
Pierre GIRAUD
ff01bba55a Merge pull request #4031 from pgiraud/popup_size
Fixing size of popup
2015-08-21 13:08:33 +02:00
Pierre GIRAUD
8329da8d1c Fixing size of popup 2015-08-21 11:28:08 +02:00
Éric Lemoine
5865d5bc55 Merge pull request #4023 from elemoine/4003
Render map when layer.setMap(map) called
2015-08-20 15:31:07 +02:00
Frédéric Junod
6d7f51f111 Merge pull request #4026 from fredj/fa_css_class
Fix Font Awesome CSS class in examples
2015-08-20 12:15:16 +02:00
Frederic Junod
da4b863ad8 Fix Font Awesome CSS class in examples 2015-08-20 11:49:19 +02:00
Frederic Junod
2d92791b17 Remove deprecated checkStructDictInheritance
Deprecated since the 20150505 Closure Compiler release.
See https://github.com/google/closure-compiler/wiki/Releases#may-5-2015-v20150505
2015-08-20 11:40:22 +02:00
Frederic Junod
4c615d8ddf Remove unnecessary cast
Found by the latest version of closure-compiler (v20150729)
2015-08-20 11:39:40 +02:00
Marc Jansen
c14d64b4e7 Merge pull request #4024 from marcjansen/docs-featurestylefunction
Correct documentation for ol.FeatureStyleFunction
2015-08-20 10:59:08 +02:00
Marc Jansen
c2f4b38981 Correct documentation for ol.FeatureStyleFunction 2015-08-20 10:39:59 +02:00
Éric Lemoine
b1973fcdf4 Render map when layer.setMap(map) called 2015-08-20 10:12:51 +02:00
Éric Lemoine
6260c4d744 Merge pull request #4011 from elemoine/update-segment-data
Make Modify interaction listen to feature changes
2015-08-20 09:24:00 +02:00
Marc Jansen
5029b5dc97 Merge pull request #3917 from cmiles74/cluster-source-refresh
Resolved issue with cluster source reloading
2015-08-19 17:34:54 +02:00
Andreas Hocevar
7505460d65 Merge pull request #4015 from weskamm/xyzgeturls
Add a getUrls Method to ol.source.XYZ
2015-08-19 16:22:57 +02:00
Marc Jansen
e211c908f8 Merge pull request #4019 from marcjansen/editorconfig-cleanup
Simplify .editorconfig file
2015-08-19 15:16:54 +02:00
Frédéric Junod
87a1031de5 Merge pull request #4002 from fredj/closure-library
Update closure-library to latest commit
2015-08-19 14:51:06 +02:00
Marc Jansen
fef0088bf9 Simplify .editorconfig file 2015-08-19 14:49:28 +02:00
Marc Jansen
8a4bdd4046 Merge pull request #4018 from marcjansen/animation-example
Fix rotate buttons in animation example
2015-08-19 14:42:20 +02:00
Marc Jansen
da4d5caea8 Fix rotate buttons in animation example 2015-08-19 14:15:27 +02:00
Marc Jansen
2aa7812fc5 Merge pull request #4013 from marcjansen/update-marked
Use a more recent version of marked
2015-08-19 14:01:40 +02:00
Frederic Junod
fdba4fc381 Add a test for ol.Map#getEventPixel 2015-08-19 13:50:14 +02:00
Frederic Junod
8730fc8824 Remove goog.style.getRelativePosition workaround
Fixed upstream with https://github.com/google/closure-library/pull/424
2015-08-19 13:50:14 +02:00
Frederic Junod
35d26f1280 Update closure-library to latest commit 2015-08-19 13:50:14 +02:00
Andreas Hocevar
7e7494d5c7 Merge pull request #4017 from ahocevar/protect-proj-registry
Do not overwrite projections in the registry simply by using `new ol.proj.Projection()`
2015-08-19 13:17:33 +02:00
Andreas Hocevar
a8797ae1ff Do not overwrite projections in the registry 2015-08-19 13:06:23 +02:00
Johannes Weskamm
a6c49dabcf Add a getUrls Method to ol.source.XYZ
Added the getUrls method to get access to the url / urls property.
When using a tileUrlFunction, getUrls should return null.
This should fix issue #3886
2015-08-19 12:43:35 +02:00
Marc Jansen
296564a4ce Use a more recent version of marked
Quoting from https://nodesecurity.io/advisories/marked_redos:

> Marked 0.3.3 and earlier is vulnerable to regular expression denial of
> service (ReDoS) when certain types of input are passed in to be parsed.
2015-08-18 21:21:51 +02:00
Éric Lemoine
5f7e6ac61a Make Modify interaction listen to feature changes
This commit makes the Modify interaction modify its segment data when the candidate features change.
2015-08-18 16:39:49 +02:00
Éric Lemoine
33da0e7b66 Merge pull request #4008 from elemoine/translate-interaction
Add a Translate interaction
2015-08-18 12:26:31 +02:00
Christopher S. Case
d042b4c277 Add a translate-features example 2015-08-18 11:20:31 +02:00
Christopher S. Case
338d0570fd Add a Translate interaction
This allows features to be moved around the map. It works much like the Modify interaction, however it's significantly simpler. It uses the geometry's underlying `translate` function.
2015-08-18 11:17:01 +02:00
Pierre GIRAUD
cafbb82c41 Merge pull request #3230 from pgiraud/collection_editing_style
Add stroke to default editing style for geometry collections
2015-08-18 11:05:12 +02:00
Pierre GIRAUD
de0266ded7 Add stroke to default editing style for geometry collections 2015-08-18 10:54:45 +02:00
Éric Lemoine
e703a58c5d Merge pull request #4007 from elemoine/bind
Do not use Function.prototype.bind in examples
2015-08-18 10:53:38 +02:00
Éric Lemoine
fefc39147c Do not use Function.prototype.bind in examples
PhantomJS 1.x does not have Function.prototype.bind, so do not use that function in examples.
2015-08-18 09:47:13 +02:00
Éric Lemoine
d204d7764a Merge pull request #4006 from elemoine/typo
Fix typo (vegetaion -> vegetation)
2015-08-18 09:33:49 +02:00
Éric Lemoine
92655b2d20 Fix typo 2015-08-18 09:12:22 +02:00
Andreas Hocevar
204f8f9813 Merge pull request #3993 from ahocevar/no-duplicate-extenrs
Replace base symbols with overridden ones when generating info.json
2015-08-11 18:29:53 +02:00
Andreas Hocevar
b0dd3782a8 Replace base symbols with overridden ones 2015-08-11 17:08:31 +02:00
Frédéric Junod
2ae22a934d Merge pull request #3992 from fredj/makefile_typo
Fix typo in Makefile
2015-08-11 09:46:37 +02:00
Frederic Junod
594eb7fe95 Fix typo in Makefile 2015-08-11 08:59:37 +02:00
Frédéric Junod
c60b80b566 Merge pull request #3989 from fredj/3938
Handle JSONP errors in ol.source.TileJSON
2015-08-11 08:54:26 +02:00
Frederic Junod
0578e8f2f6 Handle JSONP errors in ol.source.TileJSON
Fixes #3938
2015-08-10 15:28:26 +02:00
Tim Schaub
daf85c75c7 Merge pull request #3983 from tschaub/doc-footer
Remove doc footer with timestamp.
2015-08-07 12:59:39 -06:00
Tim Schaub
b94a4832f7 Merge pull request #3984 from tschaub/fewer-blue-buttons
Style source control links in examples.
2015-08-07 12:59:10 -06:00
Tim Schaub
ab24d9043e Minimal source control links 2015-08-07 12:46:15 -06:00
Tim Schaub
6dc7f2cfec Remove footer with timestamp 2015-08-07 11:22:07 -06:00
Tim Schaub
5b80da7f6e Merge pull request #3982 from tschaub/build-examples
Rebuild examples if package.json changes.
2015-08-07 11:09:43 -06:00
Tim Schaub
0691d1d74e Rebuild examples if package.json changes 2015-08-07 11:00:28 -06:00
Tim Schaub
ade361479a Merge pull request #3980 from openlayers/release-v3.8.2
Release v3.8.2.
2015-08-07 10:42:53 -06:00
Tim Schaub
0c06a429fb Update package version to 3.8.2 2015-08-07 10:18:53 -06:00
Tim Schaub
4233061dda Changelog vor v3.8.2 2015-08-07 10:18:21 -06:00
Tim Schaub
7e579f1ec0 Merge pull request #3979 from tschaub/ol-url
Fix URLs for openlayers.org resources.
2015-08-07 10:14:38 -06:00
Andreas Hocevar
0e538b29c0 Fix URLs for openlayers.org resources 2015-08-07 10:03:00 -06:00
Éric Lemoine
23f29ab65a Merge pull request #3977 from gberaudo/mark_ol_style_icon_load_api
Mark ol.style.Icon#load() @api
2015-08-07 16:33:17 +02:00
Guillaume Beraudo
464ce13b13 Mark ol.style.Icon#load() @api
We currently rely on the renderer to load the styles it intents to use.

In Ol3-Cesium we want to allow different styles for 3D and for 2D.
This commit fixes the issue by allowing application code to explicitely
initiate the loading process.
2015-08-07 15:56:07 +02:00
Andreas Hocevar
861e1515d4 Merge pull request #3978 from ahocevar/ol-urls
Fix URLs for openlayers.org resources
2015-08-07 14:26:25 +02:00
Andreas Hocevar
2bd0fdf07b Fix URLs for openlayers.org resources 2015-08-07 13:48:28 +02:00
Éric Lemoine
1921e009e6 Merge pull request #3900 from Jenselme/kmlformat
Do not add Style as a feature property
2015-08-07 13:00:11 +02:00
Éric Lemoine
b0584acaa5 Add ol.format.KML.findStyle_ function
This commit adds an `ol.format.KML.findStyle_` function to prevent creating a function for every call to `ol.format.KML.createFeatureStyleFunction_`, as suggested by @ahocevar in #3900.
2015-08-07 11:54:38 +02:00
Éric Lemoine
eb8be03792 Merge pull request #3975 from gberaudo/skip_empty_features_in_webgl_replay
Skip features without geometry during webgl replay
2015-08-07 11:38:07 +02:00
Guillaume Beraudo
e57919e55b Skip features without geometry during webgl replay
Setting a feature geometry to null or undefined and triggering a hit
detection was throwing an exception.

This patch handles a batched feature without a geometry in the same
fashion as skipped features.

An equivalent patch has been applied to the canvas replay.
2015-08-07 09:50:25 +02:00
Tim Schaub
b01fa94ecd Merge pull request #3972 from openlayers/release-v3.8.1
Release v3.8.1.
2015-08-06 10:34:14 -06:00
Tim Schaub
47b53ded6d Update package version to 3.8.1 2015-08-06 09:12:51 -06:00
Tim Schaub
3c8aeb7287 Changelog for v3.8.1 2015-08-06 09:12:08 -06:00
Tim Schaub
7b899fa767 Merge pull request #3970 from tschaub/cdn-switch
Pull builds from openlayers.org.
2015-08-06 09:05:00 -06:00
Andreas Hocevar
73d4ba2a51 Merge pull request #3961 from gberaudo/skip_empty_features_in_replay
Skip features without geometry during canvas replay
2015-08-06 13:12:43 +02:00
Andreas Hocevar
a673c39251 Merge pull request #3971 from ahocevar/calculate-new-extent
Revert "Cache the image extent"
2015-08-06 08:37:03 +02:00
Andreas Hocevar
a1946a6e69 Revert "Cache the image extent"
This reverts commit eb2a30e461.
2015-08-06 08:15:02 +02:00
Tim Schaub
f695cb012a Pull builds from openlayers.org 2015-08-05 21:29:08 -06:00
Andreas Hocevar
317a27d6f3 Merge pull request #3964 from rattai/imagewms_extent
Compute new image extent for comparison to existing image extent
2015-08-05 22:52:10 +02:00
rattai
eb2a30e461 Cache the image extent 2015-08-05 12:59:41 -04:00
rattai
e49ce543a4 shorten long line 2015-08-04 20:00:59 -04:00
Tim Schaub
575fff6737 Merge pull request #3962 from bjornharrtell/jsdoc-upgrade
Upgrade JSDoc to 3.3.2 and remove obsoleted plugins.
2015-08-04 15:26:55 -06:00
rattai
b3f14f09c4 Compute new image extent for comparison to existing image extent 2015-08-04 17:25:47 -04:00
Björn Harrtell
6812de6a77 Upgrade JSDoc to 3.3.2 and remove obsoleted plugins 2015-08-04 22:04:15 +02:00
Andreas Hocevar
0ec70256d6 Merge pull request #3875 from geonux/draw_undo
Undo last points method to the draw interraction
2015-08-04 20:25:02 +02:00
Guillaume Beraudo
23ae91cfd5 Skip features without geometry during canvas replay
Setting a feature geometry to null or undefined and triggering a hit
detection was throwing an exception.

This patch handles a batched feature without a geometry in the same
fashion as skipped features.
2015-08-04 18:08:54 +02:00
geonux
999880f350 Add missing braces on statement 2015-08-04 15:02:49 +02:00
Frédéric Junod
85815a32a0 Merge pull request #3960 from fredj/extra_require
Remove unused goog.require
2015-08-04 10:25:39 +02:00
Frederic Junod
0a6745f1e4 Remove unused goog.require
Found by the latest version of closure-compiler (v20150729)
2015-08-04 10:01:11 +02:00
Tim Schaub
08c01de6b0 Merge pull request #3959 from tschaub/release-tweaks
Minor updates to release procedure.
2015-08-04 01:09:10 -06:00
Tim Schaub
ad2b4a3863 Configure travis-ci/push job to only build pushes to master 2015-08-04 00:32:39 -06:00
Tim Schaub
91d6844ecd Install latest dependencies before building 2015-08-04 00:30:39 -06:00
Tim Schaub
929ce05f81 Merge pull request #3958 from openlayers/release-v3.8.0
Release v3.8.0.
2015-08-04 00:16:31 -06:00
Tim Schaub
81b7a77954 Update package version to 3.8.0 2015-08-04 00:03:33 -06:00
Tim Schaub
91045b0ad1 Changelog for v3.8.0 2015-08-04 00:03:24 -06:00
Tim Schaub
b11f6abb3c Merge pull request #3957 from tschaub/shared-delete
Properly handle vertex deletion with multiple features.
2015-08-03 23:38:43 -06:00
Tim Schaub
571f3f30a4 Regression test for shared vertex deletion 2015-08-03 23:07:19 -06:00
Tim Schaub
85ddded15c Only remove the vertex feature if it exists
When deleting a vertex shared by multiple features, we iterate through drag segments and only need to remove the vertex feature once.
2015-08-03 22:44:22 -06:00
Tim Schaub
d3c8880b22 Merge pull request #3954 from fredj/rm_bindMouseOutFocusOutBlur
Remove ol.control.Control.bindMouseOutFocusOutBlur function.
2015-08-03 21:51:09 -06:00
Tim Schaub
54d3bbd625 Merge pull request #3214 from tschaub/raster
Pixel manipulation with raster sources.
2015-08-03 21:49:19 -06:00
Tim Schaub
405a8db075 Merge pull request #3946 from Turbo87/modify
Fix vertex deletion for Modify interaction on mobile devices.
2015-08-03 21:47:41 -06:00
Tim Schaub
27e58be43d Merge pull request #3910 from ahocevar/ol-ext-no-amd
Do not provide an AMD environment to ol.ext modules.
2015-08-03 21:43:42 -06:00
Tim Schaub
cee34fa51b Table for controls 2015-08-03 21:33:46 -06:00
Tim Schaub
16aa548383 Only create a worker if an operation is provided 2015-08-03 21:32:16 -06:00
Tim Schaub
860fdabd76 Simplify raster sources by working with a single operation 2015-08-03 20:10:46 -06:00
Frederic Junod
761aa0ea5c Remove ol.control.Control.bindMouseOutFocusOutBlur function
It was a workaround added in #1761 to hide the button tooltip on
OSX / Chrome 32 and 33.

Because we're not using the tooltips anymore (see #2781) and this
version of chrome is deprecated this workaround can be removed.
2015-08-03 17:12:33 +02:00
Frédéric Junod
d493d0a820 Merge pull request #3934 from fredj/drawpoint_events
Fix `drawstart` and `drawend` events when drawing a point
2015-08-03 16:26:00 +02:00
Pierre GIRAUD
d6e35edac5 Merge pull request #3774 from pgiraud/measure_tooltips_touchdevice
Measure tooltips touchdevice
2015-08-03 15:57:57 +02:00
Frederic Junod
2143eebd30 Fix drawstart and drawend events when drawing a point
The previous behavior was to fire a `drawstart` on the first `mousemove`.
2015-08-03 13:40:56 +02:00
Frédéric Junod
64225776d4 Merge pull request #3949 from fredj/expect_called
Remove count argument from `called` function
2015-08-03 13:40:16 +02:00
Éric Lemoine
355c3c7b58 Merge pull request #3950 from elemoine/vbarray
Remove reference to vbarray.js
2015-08-03 11:19:29 +02:00
Éric Lemoine
e792a121f4 Remove reference to vbarray.js
This file was removed with https://github.com/openlayers/ol3/pull/3516.

Fixes #3702.
2015-08-03 11:06:43 +02:00
Frederic Junod
3364dbb46e Remove count argument from called function
This function takes no arguments, use the `callCount` property instead.
2015-08-03 10:02:21 +02:00
Tim Schaub
23610efe30 Merge pull request #3947 from alvinlindstam/clarify-ratio-docs
Clarify documentation of Image source ratio option.
2015-08-02 12:46:00 -06:00
Alvin Lindstam
75bf3e1ccf Clarify documentation of Image source ratio option. 2015-08-02 19:51:00 +02:00
Tim Schaub
f2f5cd2630 Make seed coordinate sticky 2015-08-01 17:06:40 -06:00
Ian Schneider
6f6698dd6a Add a region growing example 2015-08-01 17:06:33 -06:00
Tim Schaub
4320b07c5d Doc corrections 2015-08-01 16:33:43 -06:00
Tim Schaub
25603d7cf1 Merge pull request #3920 from probins/patch-1
Remove use_types_for_optimization from custom build tutorial.
2015-08-01 16:23:51 -06:00
Tim Schaub
935eb63876 Merge pull request #3922 from probins/expandurl
Document {?-?} pattern in expandUrl
2015-08-01 15:54:51 -06:00
Tim Schaub
6111b91cca Merge pull request #3921 from bjornharrtell/travis-cache
Cache node_modules on Travis.
2015-08-01 15:52:20 -06:00
Tobias Bieniek
7a34d22b37 interaction/modify: Add missing goog.require() to test 2015-08-01 22:09:32 +02:00
Tobias Bieniek
c3f51c676a interaction/modify: Fix identation issue 2015-08-01 22:05:44 +02:00
Tobias Bieniek
968c8aa34e interaction/modify: Replace lastNewVertexPixel with ignoreNextSingleClick
The previous approach did not work on mobile devices where no `pointermove`
event is sent except from dragging.

Logic now is: Upon vertex creation due to `pointerdown` we will ignore
the next `singleclick` event unless there is a `pointerdrag` event, which will
not lead to a `singleclick` event following the vertex creation.

Resolves #3935
2015-08-01 22:00:41 +02:00
Tobias Bieniek
b001a48567 interaction/modify: Simplify lastNewVertexPixel condition 2015-08-01 21:12:59 +02:00
Tobias Bieniek
bf9156cbeb interaction/modify: Adjust simulated events
This is exactly matching the event sent by Chrome now
2015-08-01 21:03:18 +02:00
Tobias Bieniek
bafd8548d1 interaction/modify: Add tests for deleteCondition option 2015-08-01 20:52:31 +02:00
Tobias Bieniek
e3ead5df06 events/condition: Add doubleClick condition 2015-08-01 20:46:21 +02:00
Tobias Bieniek
22ca08179d interaction/modify: Use expect().to.be() assertion
... instead of expect(a === b).to.be.ok()
2015-08-01 20:20:06 +02:00
Andreas Hocevar
c8df907ff2 Merge pull request #3942 from ahocevar/matrixset-by-projection
Fix WMTS TileMatrixSet lookup by SRS identifier
2015-07-31 11:45:06 +02:00
Andreas Hocevar
c0950dee11 Merge pull request #3945 from ahocevar/popup-on-icon
Simplify icon example and show popup at clicked position
2015-07-31 11:24:58 +02:00
Andreas Hocevar
da3d8952da Simplify icon example and show popup at clicked position
By using the event's coordinate instead of the feature's, we make sure
that the popup is shown where the user clicked when on a wrapped world.
2015-07-31 10:09:16 +02:00
Andreas Hocevar
95e43c852d Fix WMTS TileMatrixSet lookup by SRS identifier 2015-07-30 19:48:28 +02:00
Frédéric Junod
d4d3555a88 Merge pull request #3930 from fredj/goog.functions.identity
Use goog.functions.identity instead of goog.identityFunction
2015-07-29 08:53:53 +02:00
Andreas Hocevar
ef9a1a25b1 Merge pull request #3929 from probins/patch-2
Expand description for XYZ source
2015-07-28 22:15:16 +02:00
Peter Robins
44fdfaa630 Expand description for XYZ source 2015-07-28 12:54:01 +00:00
Andreas Hocevar
112473afee Merge pull request #3933 from ahocevar/snap-center-to-pixel
Snap center to pixel to avoid floating point issues
2015-07-28 14:20:43 +02:00
Andreas Hocevar
5e505f200a Snap center to pixel to avoid floating point issues 2015-07-28 14:02:09 +02:00
Frédéric Junod
5e4474ca8c Merge pull request #3932 from Turbo87/patch-1
SnapOptions: Fix typo in pixelTolerance JSDoc
2015-07-28 13:03:14 +02:00
Tobias Bieniek
d3f766c748 SnapOptions: Fix typo in pixelTolerance JSDoc
This was apparently copy-pasted from the `ModifyOptions` without adjustment
2015-07-28 12:26:54 +02:00
Frédéric Junod
2b1acc6216 Merge pull request #3931 from fredj/rm_htmlparser2
Remove unused htmlparser2 package
2015-07-28 11:07:48 +02:00
Frederic Junod
c008de1a88 Remove unused htmlparser2 package
No longer used since #3542
2015-07-28 10:31:58 +02:00
Frederic Junod
e6a38d8211 Use goog.functions.identity instead of goog.identityFunction
goog.identityFunction is deprecated
2015-07-28 09:44:51 +02:00
Peter Robins
e6f4054d3b Document {?-?} pattern in expandUrl 2015-07-25 13:41:36 +00:00
Björn Harrtell
fe636a0e98 Use Travis CI dependency cache 2015-07-25 15:12:59 +02:00
Peter Robins
76d36d4b20 Remove use_types_for_optimization from custom build tutorial 2015-07-23 15:11:55 +01:00
cmiles74
89b62cd53b Resolved issue with cluster source reloading
The cluster source was not reloading when a map was panned, only when
the resolution changed.
2015-07-22 09:18:41 -04:00
Frédéric Junod
abb5fef043 Merge pull request #3912 from fredj/zoomslider_event_type
Fix the event type fired by goog.fx.Dragger
2015-07-22 14:39:40 +02:00
Tim Schaub
0c486c522a Allow UI thread to be used
Where workers are not available, or if operations are trivial to run, the main UI thread can be used instead.  This also adds tests that run in real browsers.
2015-07-21 17:12:08 -06:00
Tim Schaub
af3c38052e Avoid examples that cannot be run in Phantom 2015-07-21 17:12:08 -06:00
Tim Schaub
f1ff39cc8b Avoid compiling the shaded relief example
The compiler doesn't support the use of the ImageData constructor.
2015-07-21 17:12:08 -06:00
Tim Schaub
643c2e6f21 Only update canvas if not dirty 2015-07-21 17:12:07 -06:00
Tim Schaub
d5aa0d9a8e Update example to work with the latest pixelworks 2015-07-21 17:12:07 -06:00
Tim Schaub
793b27e9f5 Allow operations to be updated 2015-07-21 17:12:07 -06:00
Tim Schaub
9d28549b2b Pass along potentially modified data 2015-07-21 17:12:07 -06:00
Tim Schaub
ef90f5a097 Run operations in a worker 2015-07-21 17:12:07 -06:00
Tim Schaub
c50d775330 Vertical exaggeration control 2015-07-21 17:12:07 -06:00
Tim Schaub
6da6cef760 Improved shaded relief example 2015-07-21 17:12:07 -06:00
Tim Schaub
1d94d71a5b Shaded relief example 2015-07-21 17:12:07 -06:00
Tim Schaub
65fee5b7ac Pass data object to operations 2015-07-21 17:12:07 -06:00
Tim Schaub
5267776627 Provide extent and resolution in raster events 2015-07-21 17:12:06 -06:00
Tim Schaub
a721ce03c9 Support for image or pixel operations 2015-07-21 17:12:06 -06:00
Tim Schaub
23e2fcefef Only render if sources are ready 2015-07-21 17:12:06 -06:00
Tim Schaub
d17d470d48 Fire change when updating operations 2015-07-21 17:12:06 -06:00
Tim Schaub
c6dedbc40b Use the first pixel for rendering, allow setting operations 2015-07-21 17:12:06 -06:00
Tim Schaub
de107c5502 Frame and canvas have equal size 2015-07-21 17:12:06 -06:00
Tim Schaub
6740ca9ee8 More interactive example 2015-07-21 17:12:06 -06:00
Tim Schaub
2c82ca86f0 Fire events before and after running ops 2015-07-21 17:12:06 -06:00
Tim Schaub
b7ad9160ef Nicer example 2015-07-21 17:12:06 -06:00
Tim Schaub
acc97a53eb Raster source for composing pixels from other sources 2015-07-21 17:12:05 -06:00
Frederic Junod
7634c0c2c4 Fix the event type fired by goog.fx.Dragger 2015-07-20 15:33:44 +02:00
Andreas Hocevar
49cc39c4dd Merge pull request #3871 from ahocevar/change-event
Document change events properly
2015-07-18 15:41:05 +02:00
Andreas Hocevar
3595c2cce7 Document change events properly
With this change, the generic 'change' event is properly documented, as
all other events. It is no longer necessary to annotate `@fires change` for
every ol.Observable subclass.
2015-07-18 15:27:16 +02:00
Andreas Hocevar
80c4809aee Do not provide an AMD environment to ol.ext modules
This fixes issues with ol.source.Vector being unable to use ol.ext.rbush,
but it also means that potential future external modules without node
module loader support will not work. If we ever depend on such a module,
we can replace "var define;" with a minimal AMD define shim.
2015-07-17 18:07:39 +02:00
Andreas Hocevar
10b4aa1bab Merge pull request #3906 from ahocevar/featurescollection-only
Clear features properly when there is no spatial index
2015-07-16 08:57:14 +02:00
Andreas Hocevar
8f7cbc5ed6 Clear features properly when there is no spatial index
Previously clear() only kept the features collection in sync whern there
was also a features RTree.
2015-07-15 15:15:41 +02:00
Julien Enselme
b66a114873 Add test to check that Style is not added a feature property 2015-07-13 17:05:08 +02:00
Andreas Hocevar
7094f65ef7 Merge pull request #3896 from ahocevar/webgl-precompose
Fire WebGL precompose event in same sequence as other renderers
2015-07-12 10:05:45 +02:00
Andreas Hocevar
ac8e62818f Fire WebGL precompose event in same sequence as other renderers
In other map renderers, the precompose event is fired before preparing and
composing layer frames. In WebGL, it is fired in between. This change makes
it so the sequence of events is the same for all renderers.

Because the WebGL renderer creates the list of layers to render before the
precompose event, unmanaged layers are never rendered. This is also fixed
by dispatching the precompose event earlier.
2015-07-11 14:58:31 +02:00
Tim Schaub
c89fb3ccfe Merge pull request #3359 from Kenny806/deep_clone
Enable deep clone of MultiPolygon.
2015-07-10 23:11:25 -06:00
Tim Schaub
223d5ab60d Merge pull request #3895 from planetlabs/greedy-multi-queue
Rework the tile queue for multiple queues.
2015-07-10 16:33:49 -06:00
Alessandro Isaacs
2142b538ac Greedify the queue loading strategy 2015-07-10 15:06:41 -07:00
Alessandro Isaacs
5149889bd2 Improve the test 2015-07-10 15:06:41 -07:00
Alessandro Isaacs
b57cdb730c Only load tiles that are not yet loaded 2015-07-10 15:06:35 -07:00
Tim Schaub
8600d46a0e Merge pull request #3894 from tschaub/no-sudo
Install Python dependencies without sudo.
2015-07-10 14:20:35 -06:00
Tim Schaub
7509425aa4 Install Python dependencies without sudo 2015-07-10 11:00:13 -06:00
Pierre GIRAUD
c9ab9bc711 Hide the help tooltip when cursor is out of the map 2015-07-10 09:32:32 +02:00
Tim Schaub
cd6ac857b9 Merge pull request #3824 from probins/select
Improve docs for interaction.Select.
2015-07-09 16:54:05 -06:00
Tim Schaub
7b35557cee Merge pull request #3884 from tschaub/debug-server
Provide a debug loader for the library.
2015-07-09 16:02:12 -06:00
Tim Schaub
4549d2f7a8 Try multiple ports 2015-07-09 10:49:24 -06:00
Tim Schaub
7780d77ade Update to closure-util@1.5.0 2015-07-09 10:16:15 -06:00
Tim Schaub
bfaac061c8 Provide a debug loader for the library 2015-07-09 10:16:15 -06:00
Andreas Hocevar
afce912f11 Merge pull request #3883 from ahocevar/foreachfeatureatpixel-unmanaged-always
Ignore layer filter for unmanaged layers
2015-07-09 00:03:25 +02:00
Tim Schaub
a705c6fe11 Test two queues sharing tiles 2015-07-08 15:12:31 -06:00
Andreas Hocevar
26e146b1d8 Ignore layer filter for unmanaged layers
To make unmanaged vector layers work like the removed ol.FeatureOverlay,
the layer filter for ol.Map#forEachFeatureAtPixel needs to ignore unmanaged
layers.
2015-07-07 22:24:57 +02:00
geonux
64ab764827 Renaming the method description according to 'probins' proposal. 2015-07-06 15:07:56 +02:00
geonux
314b04df7a Add assertions to pass the validation step. 2015-07-06 13:49:42 +02:00
geonux
29b1f0d55d Add the capability to remove(undo) the last drawed segments. 2015-07-06 12:11:34 +02:00
Bart van den Eijnden
a62bbd6650 Merge pull request #3859 from llambanna/patch-2
Add in crossOrigin option
2015-07-06 11:58:39 +02:00
Bart van den Eijnden
38fa805f03 Merge pull request #3873 from probins/patch-1
Correct minor typo in modifyinteraction
2015-07-06 09:36:07 +02:00
Anna Lambrechtsen
1d3f8b5d7d Add in crossOrigin option 2015-07-06 14:07:40 +12:00
Peter Robins
c53aa7e8d5 Correct minor typo in modifyinteraction 2015-07-05 10:57:59 +01:00
Andreas Hocevar
109cd6f3a6 Merge pull request #3872 from probins/patch-1
Correct event notations in ol.Feature
2015-07-04 14:20:25 +02:00
Peter Robins
4f703efd23 Correct event notations in ol.Feature 2015-07-04 11:43:06 +01:00
Bart van den Eijnden
a157fff318 Merge pull request #3869 from openlayers/release-v3.7.0
Release v3.7.0
2015-07-03 11:36:40 +02:00
Bart van den Eijnden
84ed12ec46 Update package version to 3.7.0 2015-07-03 11:34:19 +02:00
Bart van den Eijnden
5fb692a876 Changelog for v3.7.0 2015-07-03 11:33:48 +02:00
Andreas Hocevar
06908775e8 Merge pull request #3867 from ahocevar/no-proj-extent-required
Do not require projection extent for x-wrapping tile sources
2015-07-03 11:25:06 +02:00
Andreas Hocevar
da66a37182 Do not require projection extent for x-wrapping tile sources 2015-07-03 11:05:49 +02:00
Bart van den Eijnden
96eaf2de06 Merge pull request #3635 from bjornharrtell/modify-singleclick-vertex
Create vertex on boundary single click
2015-07-03 11:00:33 +02:00
Andreas Hocevar
86d9d691e4 Merge pull request #3806 from ahocevar/clip-wrapx
Do not clip canvas for vector layers when wrapping the world
2015-07-03 10:47:45 +02:00
Björn Harrtell
c69ba6a3dd Create vertex on boundary single click 2015-07-03 10:26:38 +02:00
Bart van den Eijnden
2adf3befb8 Merge pull request #3461 from bjornharrtell/modifyevent
High level Modify interaction events
2015-07-03 10:24:43 +02:00
Björn Harrtell
f81e36d8e0 Add mapBrowserPointerEvent property to ModifyEvent 2015-07-03 10:11:24 +02:00
Björn Harrtell
f7d62f054c High level Modify interaction events 2015-07-03 10:11:24 +02:00
Ryan Curry
9a44895d41 Update graticule.js - fixed style / missing line
My comment on line 375 was too long, so I broke it up into multiple lines. Also I accidentally left a line out of the commit (line 384) when transcribing my changes into the web based editor.
2015-07-02 12:35:38 -07:00
Ryan Curry
56e871f8b5 Update graticule.js - fixed typo/build error
Corrected reference to variable frameState - it was misspelled by the previous commit.
2015-07-02 12:23:05 -07:00
Ryan Curry
de6ecb22a8 graticule.js - Fixed build. No functional change.
viewContext.extent_ is private, so we can't use it directly. Instead, re-calculate the corrected wrapped extent.
2015-07-02 12:20:05 -07:00
Bart van den Eijnden
c0b6eefd8f Merge pull request #3865 from bartvde/fit
ol.View#fit()
2015-07-02 16:58:33 +02:00
Andreas Hocevar
a09fa923a5 Merge pull request #3864 from klokantech/xyz-canwrapx
Check projection.canWrapX() before wrapping tiles
2015-07-02 17:04:11 +03:00
Bart van den Eijnden
7c207d47bb Move upgrade notes to 3.7 and fix typos 2015-07-02 15:23:34 +02:00
Petr Sloup
eac5d652cf Check projection.canWrapX() before wrapping tiles
Even if wrapX is true on the source
2015-07-02 15:21:34 +02:00
vmalaret
4d3e903670 ol.View#fit -- fix docs and add assertions 2015-07-02 15:19:09 +02:00
vmalaret
e7cd691362 rotation support for ol.View#calculateExtent 2015-07-02 15:19:08 +02:00
vmalaret
74759142d9 Replace fitGeometry and fitExtent with fit
Fit accepts either a geometry or an extent.

This combines two previously distinct functions
into one more flexible call.

Also brings the rotations support and options
previously available to fitGeometry to extents
2015-07-02 15:19:08 +02:00
Bart van den Eijnden
3021d3a6a7 Merge pull request #3863 from nhambletCCRI/cdataInGML
Handle CDATA in attribute parsing for GML format
2015-07-02 14:57:21 +02:00
Nick Hamblet
cfafe90235 Handle CDATA in attribute parsing for GML format
Following [3827](https://github.com/openlayers/ol3/issues/3827),
handle CDATA XML nodes in attribute parsing of GML data. Currently
such data will be expected to be a geometry, and will fail to parse.

Treating the CDATA node as text is the easiest way to handle such
an attribute.
2015-07-01 16:32:17 -04:00
Tim Schaub
ccaca9fc52 Merge pull request #3860 from tschaub/update-bootstrap
Update example layout.
2015-07-01 08:01:32 -06:00
Pierre GIRAUD
3f918f4e8d Merge pull request #3861 from openlayers/pgiraud-patch-1
Don't force 'dom' renderer
2015-07-01 12:59:01 +02:00
Pierre GIRAUD
5871d64c9d Don't force 'dom' renderer 2015-07-01 12:31:40 +02:00
Tim Schaub
d1f19b8e0d Use the latest Bootstrap 2015-06-30 22:30:28 -06:00
Ryan Curry
7b4a954c40 graticule.js now uses vectorContext.extent_
When creating the graticule use the extent from the vectorContext instead of the frameState to determine what parallels and meridians should be created. This will allow the graticule to be drawn correctly on views that wrap across the dateline.
2015-06-30 11:09:20 -07:00
Ryan Curry
1159e1f792 Merge pull request #1 from openlayers/master
Test Merge openlayers master
2015-06-30 11:03:24 -07:00
Pierre GIRAUD
3f214f6ac4 Merge pull request #3855 from pgiraud/wmts_ign
Adding an example with WMTS tiles from IGN Geoportail
2015-06-30 07:28:29 +02:00
Andreas Hocevar
0159d20d6d Merge pull request #3856 from plepe/bug-3851
ol.source.TileVector(): bind success function of tileLoadFunction to source
2015-06-29 22:35:15 +03:00
Stephan Bösch-Plepelits
ce20380078 ol.source.TileVector(): bind success function of tileLoadFunction to source
- fixes #3851
2015-06-29 21:01:08 +02:00
Pierre GIRAUD
f9e5c9c596 Adding an example with WMTS tiles from IGN Geoportail 2015-06-29 11:42:38 +02:00
Tim Schaub
7d04ef3e2d Merge pull request #3848 from tschaub/webpack
Check for exports before define.
2015-06-25 11:55:32 -06:00
Frédéric Junod
ced3633d80 Merge pull request #3845 from fredj/collection_null_array
Prevent null array to be passed to an ol.Collection
2015-06-25 09:25:37 +02:00
Pierre GIRAUD
e62b2e4479 Merge pull request #3849 from pgiraud/dms_notation_leading_zeros
Pad min. and sec. with leading zeros in DMS notation
2015-06-25 09:23:37 +02:00
Frederic Junod
8cf57941ac Prevent null array to be passed to ol.Collection 2015-06-25 09:11:38 +02:00
Frederic Junod
dd132c9fad Add non-nullable notation to features array 2015-06-25 09:11:38 +02:00
Pierre GIRAUD
1cdfc709ae Pad min. and sec. with leading zeros in DMS notation
FIxes 3776
2015-06-25 08:40:43 +02:00
Tim Schaub
1b01efc08b Check for exports before define 2015-06-24 21:53:52 -06:00
Pierre GIRAUD
28450cbb5a Merge pull request #3842 from pgiraud/feature_animation
Adding a feature-animation example
2015-06-24 16:09:50 +02:00
Pierre GIRAUD
1c341e288c Adding a feature-animation example 2015-06-24 15:31:43 +02:00
Andreas Hocevar
3f23deb09a Merge pull request #3833 from bjornharrtell/customtilexhr
Enable use of custom XHR loader for TileVector sources
2015-06-23 14:31:26 +02:00
Björn Harrtell
ceafa88dc8 Enable use of custom XHR loader for TileVector sources 2015-06-23 14:07:19 +02:00
Bart van den Eijnden
54186d7893 Merge pull request #3834 from bartvde/arcgisrest-dpi
ArcGIS tiled example broken in Chrome
2015-06-22 12:43:35 +02:00
Bart van den Eijnden
9a0c0e2f2b Make sure we don't generate any floating point DPI values for ol.source.TileArcGISRest 2015-06-22 12:01:14 +02:00
Éric Lemoine
ae1221d811 Do not add Style as a feature property
This makes the KML format not add a Style property on features, as this may cause problems when serializing to another format such as JSON.
2015-06-22 10:11:46 +02:00
Éric Lemoine
c6d1778202 Merge pull request #3829 from kzr-pzr/master
incorrect assert message
2015-06-20 12:24:35 +02:00
peterko
e532727713 incorrect assert message 2015-06-20 11:09:36 +02:00
Andreas Hocevar
edc16b9739 Merge pull request #3828 from ahocevar/fix-doc-typo
Fix typo in upgrade notes
2015-06-20 10:35:36 +02:00
Andreas Hocevar
59871274ca Fix typo in upgrade notes 2015-06-20 10:34:28 +02:00
Andreas Hocevar
039b54de48 Merge pull request #3826 from klokantech/xyzsource-tilegrid
Allow custom tileGrid in ol.source.XYZ
2015-06-20 10:25:28 +02:00
Petr Sloup
5993b45c63 Allow custom tileGrid in ol.source.XYZ 2015-06-19 19:58:06 +02:00
Andreas Hocevar
5c5364bbb7 Merge pull request #3815 from ahocevar/tilegrid-no-surprises
Simplify tilegrid API and internals
2015-06-19 19:05:19 +02:00
Andreas Hocevar
6411c9267b More clarity about origin and direction of tile coordinates 2015-06-19 18:49:49 +02:00
Andreas Hocevar
f85fcf30a2 Additional tests 2015-06-19 18:34:26 +02:00
Andreas Hocevar
b5e0ae6f8c Explain changes in upgrade notes 2015-06-19 18:34:20 +02:00
Andreas Hocevar
e6f5c2a008 Cleanup and example updates 2015-06-19 18:34:19 +02:00
Andreas Hocevar
31cfa0d952 Make tile range calculation work with arbitrary origins 2015-06-19 18:34:19 +02:00
Andreas Hocevar
a753d282cc Use top-left corner of extent for all generated tile grids 2015-06-19 18:34:18 +02:00
Andreas Hocevar
e3a8dc89de Fix calculation of tile coord from coordinate
Tile coord calculation was wrong in the case of reverseIntersectionPolicy
for y coords, and for extents with +/- Infinity.
2015-06-19 18:34:18 +02:00
Andreas Hocevar
18aa9b5091 Remove unused createFromQuadKey function 2015-06-19 18:34:18 +02:00
Andreas Hocevar
84e051d19b Fix TileDebugSource to display '' for out-of-range tiles 2015-06-19 18:34:18 +02:00
Andreas Hocevar
af319c259b Do not transform tile coordinates for tileUrlFunction 2015-06-19 18:34:09 +02:00
Andreas Hocevar
0af5642569 Merge pull request #3820 from ahocevar/vectorlayer-like-featureoverlay
Make unmanaged vector layers behave more like ol.FeatureOverlay
2015-06-19 18:18:07 +02:00
Peter Robins
d6118f31e4 Improve docs for interaction.Select 2015-06-19 13:11:27 +00:00
Andreas Hocevar
7463a58066 Do not clip canvas for vector layers when wrapping the world 2015-06-19 14:55:20 +02:00
Andreas Hocevar
f645a9e1e4 Make unmanaged vector layers behave more like ol.FeatureOverlay
* Skipped features need to be hit-detected on unmanaged layers.
* updateWhileAnimating and updateWhileInteracting are recommended to
  achieve the same instant visual feedback that ol.FeatureOverlay had.
2015-06-19 13:06:29 +02:00
Andreas Hocevar
a9591f8b99 Merge pull request #3822 from probins/update
Correct docs for updateWhileInteracting
2015-06-19 12:59:30 +02:00
Peter Robins
43d9ebe51d Correct docs for updateWhileInteracting 2015-06-19 07:24:12 +00:00
Tim Schaub
aa90c97ba3 Merge pull request #3818 from probins/transform
Make geometry.transform api stable again.
2015-06-18 10:42:08 -06:00
Peter Robins
874c4aef21 Make Geometry.transform api stable again 2015-06-18 16:01:25 +00:00
Andreas Hocevar
2249c82ac2 Merge pull request #3801 from ahocevar/tilevector-extent
Respect the tile grid's extent in ol.source.TileVector
2015-06-18 10:46:48 +02:00
Andreas Hocevar
a2c9a0796c Merge pull request #3810 from ahocevar/tilegrid-example-docs
Improve TileGrid documentation and examples
2015-06-16 23:53:49 +02:00
Andreas Hocevar
d6bb13b54b Add note about extent 2015-06-16 18:47:50 +02:00
Andreas Hocevar
d628f6b098 Use the tileSize variable 2015-06-16 17:16:28 +02:00
Andreas Hocevar
e2da56afa1 Tile grid documentation improvements
Using the term 'bottom-left' for origin and origins is misleading, because
many developers use -y-1 for the tile url's y in their tile url functions,
and the origin really only determines where tile coordinates start to
increase from left to right and from bottom to top.
2015-06-16 17:16:19 +02:00
Frédéric Junod
f74e4c95ff Merge pull request #3808 from probins/patch-1
Correct typo in OverlayOptions
2015-06-16 10:37:53 +02:00
Éric Lemoine
b8cb1fe795 Merge pull request #3766 from elemoine/draw-click-tolerance
Add a clickTolerance option to the Draw interaction
2015-06-16 10:06:01 +02:00
Peter Robins
1e8968d97a Correct typo in OverlayOptions 2015-06-16 09:04:12 +01:00
Andreas Hocevar
9c480d77f5 Merge pull request #3804 from ahocevar/fix-tilegrid-docs
Remove sentence that was only meant for WMTS tile grids
2015-06-15 16:44:54 +02:00
Andreas Hocevar
0e943f5832 Remove sentence that was only meant for WMTS tile grids 2015-06-15 16:08:29 +02:00
Éric Lemoine
e99f43af8d Add a clickTolerance option to the Draw interaction 2015-06-15 15:32:34 +02:00
Andreas Hocevar
2bcb10c973 Respect the tile grid's extent
By adding a getTileCoordForTileUrlFuction method like for ol.source.Tile,
we can now properly handle extent and resolution restrictions, and reuse
tiles on wrapped worlds. Also adds the missing wrapX option to
ol.source.TileVector.
2015-06-15 11:15:25 +02:00
Andreas Hocevar
9301fff6cb Merge pull request #3800 from probins/editstyle
Remove further references to FeatureOverlay
2015-06-13 19:08:50 +02:00
Peter Robins
83c33a03c6 Remove further references to FeatureOverlay 2015-06-13 14:01:45 +00:00
Andreas Hocevar
e848acd806 Merge pull request #3780 from ahocevar/call-tileurlfunction-with-transformed-tilecoord
Only expose transformed tile coordinates to the API
2015-06-12 11:18:16 +02:00
Andreas Hocevar
72cc824502 Explain changes in upgrade notes 2015-06-12 09:47:43 +02:00
Andreas Hocevar
4b3aac32c3 Return transformed tile coordinates from ol.TileGrid's API methods 2015-06-12 09:47:32 +02:00
Andreas Hocevar
acab0ebd57 Display transformed tile coordinates in ol.source.TileDebug 2015-06-12 09:46:17 +02:00
Andreas Hocevar
6a4d1c9b89 Pass transformed tile coordinates to the tileUrlFunction 2015-06-12 09:45:03 +02:00
Andreas Hocevar
698b62af98 Merge pull request #3793 from ahocevar/unmanaged-to-managed
Use 'managed' instead of 'unmanaged' in LayerState
2015-06-11 18:56:31 +02:00
Andreas Hocevar
817370a65b Use 'managed' instead of 'unmanaged' in LayerState 2015-06-11 18:34:20 +02:00
Marc Jansen
07d5211e30 Merge pull request #3792 from marcjansen/group-docs
Link to correct layer base class
2015-06-11 17:57:57 +02:00
Marc Jansen
3fcecc98e6 Merge pull request #3791 from marcjansen/overlay-remains
Remove docs referring to removed feature overlay
2015-06-11 17:55:50 +02:00
Marc Jansen
6ed677a3f0 Link to correct layer base class 2015-06-11 17:50:40 +02:00
Marc Jansen
dd16bb984c Remove docs referring to removed feature overlay 2015-06-11 17:47:16 +02:00
Frédéric Junod
f672c1792b Merge pull request #3790 from fredj/geojson_quotes
Remove unnecessary quotes around object keys
2015-06-11 13:32:58 +02:00
Frederic Junod
0286564e8a Remove unnecessary quotes around object keys 2015-06-11 11:58:11 +02:00
Andreas Hocevar
96e75ab17f Merge pull request #3787 from ahocevar/unmanaged-layerstate
Add 'unmanaged' to ol.layer.LayerState
2015-06-11 10:53:38 +02:00
Frédéric Junod
a6dddfa282 Merge pull request #3784 from fredj/geojson_geometry
Always write the GeoJSONFeature geometry property
2015-06-11 10:20:02 +02:00
Andreas Hocevar
5a2a7d30e6 Add 'unmanaged' to ol.layer.LayerState 2015-06-11 10:17:11 +02:00
Frederic Junod
d5ea855108 Add missing GeoJSONGeometryCollection type to GeoJSONFeature#geometry 2015-06-11 09:53:06 +02:00
Frederic Junod
d8a495b639 Always write the GeoJSONFeature geometry property 2015-06-11 09:53:06 +02:00
Andreas Hocevar
4aa3ef59d5 Merge pull request #3783 from ahocevar/wmts-hidpi-from-capabilities
Fix broken wmts-hidpi example
2015-06-10 20:03:53 +02:00
Andreas Hocevar
7451e176ef Use capabilities to create layer source options 2015-06-10 18:32:21 +02:00
Andreas Hocevar
872d869ded Merge pull request #3782 from gberaudo/typo
Fix assert documentation typo
2015-06-10 15:47:35 +02:00
Guillaume Beraudo
d48e818390 Fix assert documentation typo 2015-06-10 15:36:43 +02:00
Andreas Hocevar
fad3cf9672 Merge pull request #3758 from ahocevar/remove-featureoverlay
Removal of ol.FeatureOverlay
2015-06-10 14:33:28 +02:00
Andreas Hocevar
9acd65270a Make clear how to remove an unmanaged layer from a map 2015-06-09 15:44:39 +02:00
Andreas Hocevar
57e1dda5f1 Make sure that #clear() keeps the collection in sync 2015-06-09 15:44:39 +02:00
Andreas Hocevar
53d5d8c1d9 Get rid of ol.FeatureOverlay
This also introduces a wrapX option to the Draw, Modify and Select
interaction.
2015-06-09 15:44:31 +02:00
Andreas Hocevar
54da473991 Allow layers that are not managed by the map
When a layer is configured with a map, it will be added on top of other
layers, and not be managed in the map's features collection. The layerState
will have an 'unmanaged' flag for such layers. For vector layers, this flag
is used to not skip any features.
2015-06-09 15:44:29 +02:00
Andreas Hocevar
f186ed3deb Alternatively manage features in an ol.Collection
ol.layer.Vector can now manage both an RTree and a Collection of features.
The new useSpatialIndex option allows to opt out of RTree management, and
the new ol.Collection type of the features option allows to opt in for
Collection management.
2015-06-09 15:44:18 +02:00
Pierre GIRAUD
973cc6fd89 Merge pull request #3775 from pgiraud/touch-classname
Add ol-touch but keep ol-viewport className.
2015-06-09 12:20:55 +02:00
Pierre GIRAUD
36b521a00e Add ol-touch but keep ol-viewport className. 2015-06-09 11:34:19 +02:00
Pierre GIRAUD
7065722fa6 Show measurement tooltip on geometry change instead of relying on pointermove 2015-06-08 16:19:28 +02:00
Bart van den Eijnden
10b54a9f3f Merge pull request #3713 from bartvde/issue-3713
Add missing propertyNames member for olx.format.WFSWriteGetFeatureOptions
2015-06-08 16:15:17 +02:00
Bart van den Eijnden
e3bc0bca3e Add missing propertyNames member for olx.format.WFSWriteGetFeatureOptions extern 2015-06-08 15:56:42 +02:00
Andreas Hocevar
b903cee7dd Merge pull request #3763 from probins/drawmod
Standardise draw/modify descriptions
2015-06-07 17:34:47 +02:00
Peter Robins
282fdafad7 Standardise draw/modify descriptions 2015-06-05 07:54:22 +00:00
bogdanvaduva
2fd894ffb9 Changed overviewmapcontrol.js due to Travis ci errors 2015-05-25 20:50:06 +03:00
bogdanvaduva
5569bd9113 Added getOverviewMap getter method in overviewmapcontrol.js 2015-05-25 15:23:43 +03:00
Thomas Gratier
b044372cd8 Update package.json
When pushing previous content to npm, it complains that it only accepts `"browser": "dist/ol.js"` hence the correction again
2015-04-30 04:50:40 +02:00
Thomas Gratier
a3a33c1dcd Issue encountered in the PR
See PR comments for an update
2015-04-25 01:43:06 +02:00
Thomas Gratier
75a3c5f6ff Make package.json compatible for npm frontend use
This PR augments package.json to ease OpenLayers 3 frontend development through NPM.
See this post on NPM blog http://blog.npmjs.org/post/112712169830/making-your-jquery-plugin-work-better-with-npm to understand my viewpoint and evaluate if it's worth to accept.
2015-04-24 03:41:52 +02:00
Andreas Watermeyer
c530f872f9 #3328 - GML3: Writing features with multiple geometries 2015-04-07 10:32:26 +02:00
Jiri Matyas
ab9100450b enable deep clone of multipolygon endss 2015-03-17 11:09:03 +01:00
908 changed files with 162952 additions and 21884 deletions

View File

@@ -10,8 +10,6 @@ insert_final_newline = true
[*.md]
indent_size = 2
[*.md]
trim_trailing_whitespace = false
[Makefile]

2
.eslintignore Normal file
View File

@@ -0,0 +1,2 @@
examples/Jugl.js
examples/resources/

1
.gitignore vendored
View File

@@ -1,4 +1,3 @@
*.pyc
/build/
/node_modules/
/dist/

View File

@@ -1,5 +0,0 @@
{
"-W030": true,
"-W083": true,
"-W069": true
}

View File

@@ -1,2 +1 @@
*.pyc
/build/

View File

@@ -1,16 +1,30 @@
sudo: false
language: node_js
node_js:
- "6"
cache:
directories:
- node_modules
env:
- DISPLAY=:99.0
before_install:
- "sudo pip install -r requirements.txt"
- "npm install -g npm && npm install"
- "npm prune"
before_script:
- "rm src/ol/renderer/webgl/*shader.js"
- "sh -e /etc/init.d/xvfb start"
- "npm ls"
script: "make ci"
after_success:
- "make test-coverage"
- "cat coverage/lcov.info | ./node_modules/.bin/coveralls"
branches:
only:
- master

View File

@@ -21,11 +21,14 @@ Look for `readme.md` files! Several directories contain a `readme.md` file that
## Contributing Code
See [`DEVELOPING.md`](https://github.com/openlayers/ol3/blob/master/DEVELOPING.md) to learn how to get started developing.
Our preferred means of receiving contributions is through [pull requests](https://help.github.com/articles/using-pull-requests). Make sure
that your pull request follows our pull request guidelines below before submitting it.
This page describes what you need to know to contribute code to ol3 as a developer.
## Contributor License Agreement
Before accepting a contribution, we ask that you provide us a Contributor
@@ -35,162 +38,11 @@ Contributor License Agreement](https://raw.github.com/openlayers/cla/master/ccla
making your contribution as an individual, you can submit a digital [Individual
Contributor License Agreement](https://docs.google.com/spreadsheet/viewform?formkey=dGNNVUJEMXF2dERTU0FXM3JjNVBQblE6MQ).
## Setting up development environment
You will obviously start by
[forking](https://github.com/openlayers/ol3/fork_select) the ol3 repository.
### Travis CI
The Travis CI hook is enabled on the Github repository. This means every pull request
is run through a full test suite to ensure it compiles and passes the tests. Failing
pull requests will not be merged.
Although not mandatory, it is also recommended to set up Travis CI for your ol3 fork.
For that go to your ol3 fork's Service Hooks page and set up the Travis hook.
Then every time you push to your fork, the test suite will be run. This means
errors can be caught before creating a pull request. For those making
small or occasional contributions, this may be enough to check that your contributions
are ok; in this case, you do not need to install the build tools on your local environment
as described below.
### Development dependencies
The minimum requirements are:
* GNU Make
* Git
* [Node.js](http://nodejs.org/) (0.10.x or higher)
* Python 2.6 or 2.7 with a couple of extra modules (see below)
* Java 7 (JRE and JDK)
The executables `git`, `node`, `python` and `java` should be in your `PATH`.
You can check your configuration by running:
$ make check-deps
To install the Node.js dependencies run
$ npm install
To install the extra Python modules, run:
$ sudo pip install -r requirements.txt
or
$ cat requirements.txt | sudo xargs easy_install
depending on your OS and Python installation.
(You can also install the Python modules in a Python virtual environment if you want to.)
## Working with the build tool
As an ol3 developer you will use `make` to run build targets defined in the
`Makefile` located at the root of the repository. The `Makefile` includes
targets for running the linter, the compiler, the tests, etc.
The usage of `make` is as follows:
$ make <target>
where `<target>` is the name of the build target you want to execute. For
example:
$ make test
The main build targets are `serve`, `lint`, `build`, `test`, and `check`. The
latter is a meta-target that basically runs `lint`, `build`, and `test`.
The `serve` target starts a node-based web server, which we will refer to as the *dev server*. You'll need to start that server for running the examples and the tests in a browser. More information on that further down.
Other targets include `apidoc` and `ci`. The latter is the target used on Travis CI. See ol3's [Travis configuration file](https://github.com/openlayers/ol3/blob/master/.travis.yml).
## Running the `check` target
The `check` target is to be run before pushing code to GitHub and opening pull
requests. Branches that don't pass `check` won't pass the integration tests,
and have therefore no chance of being merged into `master`.
To run the `check` target:
$ make check
If you want to run the full suite of integration tests, see "Running the integration
tests" below.
## Running examples
To run the examples you first need to start the dev server:
$ make serve
Then, just point your browser <http://localhost:3000/build/examples> in your browser. For example <http://localhost:3000/build/examples/side-by-side.html>.
Run examples against the `ol.js` standalone build:
The examples can also be run against the `ol.js` standalone build, just like
the examples [hosted](http://openlayers.org/en/master/examples/) on GitHub.
Start by executing the `host-examples` build target:
$ make host-examples
After running `host-examples` you can now open the examples index page in the browser: <http://localhost:3000/build/hosted/master/examples/>. (This assumes that you still have the dev server running.)
Append `?mode=raw` to make the example work in full debug mode. In raw mode the OpenLayers and Closure Library scripts are loaded individually by the Closure Library's `base.js` script (which the example page loads and executes before any other script).
## Running tests
To run the tests in a browser start the dev server (`make serve`) and open <http://localhost:3000/test/index.html> in the browser.
To run the tests on the console (headless testing with PhantomJS) use the `test` target:
$ make test
See also the test-specific [README](../master/test/README.md).
## Running the integration tests
When you submit a pull request the [Travis continuous integration
server](https://travis-ci.org/) will run a full suite of tests, including
building all versions of the library and checking that all of the examples
work. You will receive an email with the results, and the status will be
displayed in the pull request.
To run the full suite of integration tests use the `ci` target:
$ make ci
Running the full suite of integration tests currently takes 5-10 minutes.
This makes sure that your commit won't break the build. It also runs JSDoc3 to
make sure that there are no invalid API doc directives.
## Adding examples
Adding functionality often implies adding one or several examples. This
section provides explanations related to adding examples.
The examples are located in the `examples` directory. Adding a new example
implies creating two or three files in this directory, an `.html` file, a `.js`
file, and, optionally, a `.css` file.
You can use `simple.js` and `simple.html` as templates for new examples.
### Use of the `goog` namespace in examples
Short story: the ol3 examples should not use the `goog` namespace, except
for `goog.require`.
Longer story: we want that the ol3 examples work in multiple modes, with the
standalone lib (which has implications of the symbols and properties we
export), and compiled together with the ol3 library.
Compiling the examples together with the library makes it mandatory to declare dependencies with `goog.require` statements.
## Pull request guidelines
Before working on a pull request, create an issue explaining what you want to contribute. This ensures that your pull request won't go unnoticed, and that you are not contributing something that is not suitable for the project. Once a core developer has set the `pull request accepted` label on the issue, you can submit a pull request. The pull request description should reference the original issue.
Your pull request must:
* Follow OpenLayers 3's coding style.
@@ -229,8 +81,7 @@ include:
OpenLayers 3 follows [Google's JavaScript Style
Guide](http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml).
This is checked using the [Closure
Linter](https://developers.google.com/closure/utilities/) in strict mode. You
This is checked using [ESLint](http://eslint.org/), you
can run the linter locally on your machine before committing using the `lint`
target:
@@ -250,13 +101,6 @@ style of the existing OpenLayers 3 code, which includes:
* Do not use assignments inside expressions.
* Avoid the use of `goog.array.clone` with arrays (use slice instead).
* Use `array.length = 0` instead of `goog.array.clear`.
* Use bracket notation instead of `goog.object.set` and `goog.object.get` (with
two arguments).
* Use uppercase for `@const` variables.
### Configure your editor

136
DEVELOPING.md Normal file
View File

@@ -0,0 +1,136 @@
# Developing
## Setting up development environment
You will obviously start by
[forking](https://github.com/openlayers/ol3/fork) the ol3 repository.
### Travis CI
The Travis CI hook is enabled on the Github repository. This means every pull request
is run through a full test suite to ensure it compiles and passes the tests. Failing
pull requests will not be merged.
### Development dependencies
The minimum requirements are:
* GNU Make
* Git
* [Node.js](http://nodejs.org/) (higher than 0.12.x)
* Python 2.6 or 2.7
* Java 7 (JRE and JDK)
The executables `git`, `node`, and `java` should be in your `PATH`.
You can check your configuration by running:
$ make check-deps
To install the Node.js dependencies run
$ npm install
## Working with the build tool
As an ol3 developer you will use `make` to run build targets defined in the
`Makefile` located at the root of the repository. The `Makefile` includes
targets for running the linter, the compiler, the tests, etc.
The usage of `make` is as follows:
$ make <target>
where `<target>` is the name of the build target you want to execute. For
example:
$ make test
The main build targets are `serve`, `lint`, `build`, `test`, and `check`. The
latter is a meta-target that basically runs `lint`, `build`, and `test`.
The `serve` target starts a node-based web server, which we will refer to as the *dev server*. You'll need to start that server for running the examples and the tests in a browser. More information on that further down.
Other targets include `apidoc` and `ci`. The latter is the target used on Travis CI. See ol3's [Travis configuration file](https://github.com/openlayers/ol3/blob/master/.travis.yml).
## Running the `check` target
The `check` target is to be run before pushing code to GitHub and opening pull
requests. Branches that don't pass `check` won't pass the integration tests,
and have therefore no chance of being merged into `master`.
To run the `check` target:
$ make check
If you want to run the full suite of integration tests, see "Running the integration
tests" below.
## Running examples
To run the examples you first need to start the dev server:
$ make serve
Then, just point your browser <http://localhost:3000/build/examples> in your browser. For example <http://localhost:3000/build/examples/side-by-side.html>.
Run examples against the `ol.js` standalone build:
The examples can also be run against the `ol.js` standalone build, just like
the examples [hosted](http://openlayers.org/en/master/examples/) on GitHub.
Start by executing the `host-examples` build target:
$ make host-examples
After running `host-examples` you can now open the examples index page in the browser: <http://localhost:3000/build/hosted/master/examples/>. (This assumes that you still have the dev server running.)
Append `?mode=raw` to make the example work in full debug mode. In raw mode the OpenLayers and Closure Library scripts are loaded individually by the Closure Library's `base.js` script (which the example page loads and executes before any other script).
## Running tests
To run the tests in a browser start the dev server (`make serve`) and open <http://localhost:3000/test/index.html> in the browser.
To run the tests on the console (headless testing with PhantomJS) use the `test` target:
$ make test
See also the test-specific [README](../master/test/README.md).
## Running the integration tests
When you submit a pull request the [Travis continuous integration
server](https://travis-ci.org/) will run a full suite of tests, including
building all versions of the library and checking that all of the examples
work. You will receive an email with the results, and the status will be
displayed in the pull request.
To run the full suite of integration tests use the `ci` target:
$ make ci
Running the full suite of integration tests currently takes 5-10 minutes.
This makes sure that your commit won't break the build. It also runs JSDoc3 to
make sure that there are no invalid API doc directives.
## Adding examples
Adding functionality often implies adding one or several examples. This
section provides explanations related to adding examples.
The examples are located in the `examples` directory. Adding a new example
implies creating two or three files in this directory, an `.html` file, a `.js`
file, and, optionally, a `.css` file.
You can use `simple.js` and `simple.html` as templates for new examples.
### Use of the `goog` namespace in examples
Short story: the ol3 examples should not use the `goog` namespace, except
for `goog.require`.
Longer story: we want that the ol3 examples work in multiple modes, with the
standalone lib (which has implications of the symbols and properties we
export), and compiled together with the ol3 library.
Compiling the examples together with the library makes it mandatory to declare dependencies with `goog.require` statements.

View File

@@ -1,4 +1,4 @@
Copyright 2005-2015 OpenLayers Contributors. All rights reserved.
Copyright 2005-2016 OpenLayers Contributors. All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:

View File

@@ -19,7 +19,8 @@ BUILD_HOSTED := build/hosted/$(BRANCH)
BUILD_HOSTED_EXAMPLES := $(addprefix $(BUILD_HOSTED)/,$(EXAMPLES))
BUILD_HOSTED_EXAMPLES_JS := $(addprefix $(BUILD_HOSTED)/,$(EXAMPLES_JS))
CHECK_EXAMPLE_TIMESTAMPS = $(patsubst examples/%.html,build/timestamps/check-%-timestamp,$(EXAMPLES_HTML))
UNPHANTOMABLE_EXAMPLES = examples/shaded-relief.html examples/raster.html examples/region-growing.html examples/color-manipulation.html
CHECK_EXAMPLE_TIMESTAMPS = $(patsubst examples/%.html,build/timestamps/check-%-timestamp,$(filter-out $(UNPHANTOMABLE_EXAMPLES),$(EXAMPLES_HTML)))
TASKS_JS := $(shell find tasks -name '*.js')
@@ -92,8 +93,7 @@ compile-examples: build/compiled-examples/all.combined.js
.PHONY: clean
clean:
rm -f build/timestamps/gjslint-timestamp
rm -f build/timestamps/jshint-timestamp
rm -f build/timestamps/eslint-timestamp
rm -f build/timestamps/check-*-timestamp
rm -f build/ol.css
rm -f build/ol.js
@@ -119,9 +119,7 @@ examples: $(BUILD_EXAMPLES)
install: build/timestamps/node-modules-timestamp
.PHONY: lint
lint: build/timestamps/gjslint-timestamp build/timestamps/jshint-timestamp \
build/timestamps/check-requires-timestamp \
build/timestamps/check-whitespace-timestamp
lint: build/timestamps/eslint-timestamp
.PHONY: npm-install
npm-install: build/timestamps/node-modules-timestamp
@@ -170,7 +168,7 @@ host-libraries: build/timestamps/node-modules-timestamp
@mkdir -p $(BUILD_HOSTED)/ol.ext
@cp -r build/ol.ext/* $(BUILD_HOSTED)/ol.ext/
$(BUILD_EXAMPLES): $(EXAMPLES)
$(BUILD_EXAMPLES): $(EXAMPLES) package.json
@mkdir -p $(@D)
@node tasks/build-examples.js
@@ -182,21 +180,7 @@ build/timestamps/check-%-timestamp: $(BUILD_HOSTED)/examples/%.html \
$(BUILD_HOSTED)/build/ol.js \
$(BUILD_HOSTED)/css/ol.css
@mkdir -p $(@D)
./node_modules/.bin/phantomjs --ssl-protocol=any --ignore-ssl-errors=true bin/check-example.js $(addsuffix ?mode=advanced, $<)
@touch $@
build/timestamps/check-requires-timestamp: $(SRC_JS) $(EXAMPLES_JS) \
$(SRC_SHADER_JS) $(SPEC_JS) \
$(SPEC_RENDERING JS)
@mkdir -p $(@D)
@python bin/check-requires.py $(CLOSURE_LIB) $^
@touch $@
build/timestamps/check-whitespace-timestamp: $(SRC_JS) $(EXAMPLES_JS) \
$(SPEC_JS) $(SPEC_RENDERING JS) \
$(SRC_JSDOC)
@mkdir -p $(@D)
@python bin/check-whitespace.py $^
./node_modules/.bin/phantomjs --local-to-remote-url-access=true --ssl-protocol=any --ignore-ssl-errors=true bin/check-example.js $<
@touch $@
build/compiled-examples/all.js: $(EXAMPLES_JS)
@@ -227,14 +211,7 @@ build/timestamps/jsdoc-$(BRANCH)-timestamp: config/jsdoc/api/index.md \
build/timestamps/node-modules-timestamp
@mkdir -p $(@D)
@rm -rf $(BUILD_HOSTED)/apidoc
./node_modules/.bin/jsdoc config/jsdoc/api/index.md -c config/jsdoc/api/conf.json -d $(BUILD_HOSTED)/apidoc
@touch $@
build/timestamps/gjslint-timestamp: $(SRC_JS) $(SPEC_JS) $(SPEC_RENDERING_JS) \
$(EXAMPLES_JS)
@mkdir -p $(@D)
@echo "Running gjslint..."
@gjslint --jslint_error=all --custom_jsdoc_tags=event,fires,function,classdesc,api,observable --strict $?
./node_modules/.bin/jsdoc config/jsdoc/api/index.md -c config/jsdoc/api/conf.json --package package.json -d $(BUILD_HOSTED)/apidoc
@touch $@
$(BUILD_HOSTED_EXAMPLES_JS): $(BUILD_HOSTED)/examples/%.js: build/examples/%.js
@@ -270,13 +247,12 @@ $(BUILD_HOSTED)/build/ol-deps.js: host-libraries
--root_with_prefix "$(BUILD_HOSTED)/closure-library/third_party ../../third_party" \
--output_file $@
build/timestamps/jshint-timestamp: $(SRC_JS) $(SPEC_JS) $(SPEC_RENDERING_JS) \
build/timestamps/eslint-timestamp: $(SRC_JS) $(SPEC_JS) $(SPEC_RENDERING_JS) \
$(TASKS_JS) $(EXAMPLES_JS) \
examples/resources/common.js \
build/timestamps/node-modules-timestamp
@mkdir -p $(@D)
@echo "Running jshint..."
@./node_modules/.bin/jshint --verbose $?
@echo "Running eslint..."
@./node_modules/.bin/eslint $?
@touch $@
build/timestamps/node-modules-timestamp: package.json
@@ -322,5 +298,5 @@ build/test_rendering_requires.js: $(SPEC_RENDERING_JS)
@mkdir -p $(@D)
@node tasks/generate-requires.js $^ > $@
%shader.js: %.glsl src/ol/webgl/shader.mustache bin/pyglslunit.py
@python bin/pyglslunit.py --input $< --template src/ol/webgl/shader.mustache --output $@
%shader.js: %.glsl src/ol/webgl/shader.mustache bin/pyglslunit.py build/timestamps/node-modules-timestamp
@python bin/pyglslunit.py --input $< | ./node_modules/.bin/mustache - src/ol/webgl/shader.mustache > $@

View File

@@ -2,6 +2,7 @@
[![Travis CI Status](https://secure.travis-ci.org/openlayers/ol3.svg)](http://travis-ci.org/#!/openlayers/ol3)
[![Coverage Status](https://coveralls.io/repos/openlayers/ol3/badge.svg?branch=master)](https://coveralls.io/r/openlayers/ol3?branch=master)
[![OSGeo Project](https://img.shields.io/badge/OSGeo-Project-brightgreen.svg)](http://osgeo.org/)
[OpenLayers 3](http://openlayers.org/) is a high-performance, feature-packed library for creating interactive maps on the web.
@@ -13,7 +14,7 @@
## Documentation
Check out the [hosted examples](http://openlayers.org/en/master/examples/), the [workshop](http://openlayers.org/ol3-workshop/) or [API docs](http://openlayers.org/en/master/apidoc/).
Check out the [hosted examples](http://openlayers.org/en/master/examples/), the [workshop](http://openlayers.org/workshop/) or [API docs](http://openlayers.org/en/master/apidoc/).
## Bugs

View File

@@ -1,193 +0,0 @@
import os
import logging
import re
import sys
logging.basicConfig(format='%(asctime)s %(name)s: %(message)s',
level=logging.INFO)
logger = logging.getLogger('check-requires')
class Node(object):
def __init__(self):
self.present = False
self.children = {}
def _build_re(self, key):
if key == '*':
assert len(self.children) == 0
# We want to match `.doIt` but not `.SomeClass` or `.more.stuff`
return '(?=\\.[a-z]\\w*\\b(?!\\.))'
elif len(self.children) == 1:
child_key, child = next(self.children.iteritems())
child_re = child._build_re(child_key)
if child_key != '*':
child_re = '\\.' + child_re
if self.present:
return key + '(' + child_re + ')?'
else:
return key + child_re
elif self.children:
children_re = '(?:' + '|'.join(
('\\.' if k != '*' else '') + self.children[k]._build_re(k)
for k in sorted(self.children.keys())) + ')'
if self.present:
return key + children_re + '?'
else:
return key + children_re
else:
assert self.present
return key
def build_re(self, key):
return re.compile('\\b' + self._build_re(key) + '\\b')
def ifind(*paths):
"""ifind is an iterative version of os.walk, yielding all walked paths and
normalizing paths to use forward slashes."""
for path in paths:
for dirpath, dirnames, names in os.walk(path):
for name in names:
if os.sep == '/':
yield os.path.join(dirpath, name)
else:
yield '/'.join(dirpath.split(os.sep) + [name])
def _strip_comments(lines):
# FIXME this is a horribe hack, we should use a proper JavaScript parser
# here
in_multiline_comment = False
lineno = 0
for line in lines:
lineno += 1
if in_multiline_comment:
index = line.find('*/')
if index != -1:
in_multiline_comment = False
line = line[index + 2:]
if not in_multiline_comment:
line = re.sub(r'//[^\n]*', '', line)
line = re.sub(r'/\*.*?\*/', '', line)
index = line.find('/*')
if index != -1:
yield lineno, line[:index]
in_multiline_comment = True
else:
yield lineno, line
def check_requires(closure_lib, *filenames):
unused_count = 0
all_provides = set()
for filename in ifind(closure_lib):
if filename.endswith('.js'):
if not re.match(r'.*/closure/goog/', filename):
continue
# Skip goog.i18n because it contains so many modules that it causes
# the generated regular expression to exceed Python's limits
if re.match(r'.*/closure/goog/i18n/', filename):
continue
for line in open(filename, 'rU'):
m = re.match(r'goog.provide\(\'(.*)\'\);', line)
if m:
all_provides.add(m.group(1))
for filename in sorted(filenames):
require_linenos = {}
uses = set()
lines = open(filename, 'rU').readlines()
for lineno, line in _strip_comments(lines):
m = re.match(r'goog.provide\(\'(.*)\'\);', line)
if m:
all_provides.add(m.group(1))
continue
m = re.match(r'goog.require\(\'(.*)\'\);', line)
if m:
require_linenos[m.group(1)] = lineno
continue
ignore_linenos = require_linenos.values()
for lineno, line in enumerate(lines):
if lineno in ignore_linenos:
continue
for require in require_linenos.iterkeys():
if require in line:
uses.add(require)
for require in sorted(set(require_linenos.keys()) - uses):
logger.info('%s:%d: unused goog.require: %r' % (
filename, require_linenos[require], require))
unused_count += 1
all_provides.discard('ol')
all_provides.discard('ol.MapProperty')
root = Node()
for provide in all_provides:
node = root
for component in provide.split('.'):
if component not in node.children:
node.children[component] = Node()
node = node.children[component]
if component[0].islower():
# We've arrived at a namespace provide like `ol.foo`.
# In this case, we want to match uses like `ol.foo.doIt()` but
# not match things like `new ol.foo.SomeClass()`.
# For this purpose, we use the special wildcard key for the child.
node.children['*'] = Node()
else:
node.present = True
provide_res = [child.build_re(key)
for key, child in root.children.iteritems()]
missing_count = 0
for filename in sorted(filenames):
provides = set()
requires = set()
uses = set()
uses_linenos = {}
for lineno, line in _strip_comments(open(filename, 'rU')):
m = re.match(r'goog.provide\(\'(.*)\'\);', line)
if m:
provides.add(m.group(1))
continue
m = re.match(r'goog.require\(\'(.*)\'\);', line)
if m:
requires.add(m.group(1))
continue
while True:
for provide_re in provide_res:
m = provide_re.search(line)
if m:
uses.add(m.group())
uses_linenos[m.group()] = lineno
line = line[:m.start()] + line[m.end():]
break
else:
break
if filename == 'src/ol/renderer/layerrenderer.js':
uses.discard('ol.renderer.Map')
m = re.match(
r'src/ol/renderer/(\w+)/\1(\w*)layerrenderer\.js\Z', filename)
if m:
uses.discard('ol.renderer.Map')
uses.discard('ol.renderer.%s.Map' % (m.group(1),))
missing_requires = uses - requires - provides
if missing_requires:
for missing_require in sorted(missing_requires):
logger.info("%s:%d missing goog.require('%s')" %
(filename, uses_linenos[missing_require],
missing_require))
missing_count += 1
return (unused_count, missing_count)
if __name__ == "__main__":
unused_count, missing_count = check_requires(*sys.argv[1:])
if unused_count > 0 or missing_count > 0:
logger.error('%d unused goog.requires, %d missing goog.requires' %
(unused_count, missing_count))
sys.exit(1)

View File

@@ -1,46 +0,0 @@
import logging
import re
import sys
logging.basicConfig(format='%(asctime)s %(name)s: %(message)s',
level=logging.INFO)
logger = logging.getLogger('check-whitespace')
CR_RE = re.compile(r'\r')
LEADING_WHITESPACE_RE = re.compile(r'\s+')
TRAILING_WHITESPACE_RE = re.compile(r'\s+\n\Z')
NO_NEWLINE_RE = re.compile(r'[^\n]\Z')
ALL_WHITESPACE_RE = re.compile(r'\s+\Z')
def check_whitespace(*filenames):
errors = 0
for filename in sorted(filenames):
whitespace = False
for lineno, line in enumerate(open(filename, 'rU')):
if lineno == 0 and LEADING_WHITESPACE_RE.match(line):
logger.info('%s:%d: leading whitespace', filename, lineno + 1)
errors += 1
if CR_RE.search(line):
logger.info('%s:%d: carriage return character in line',
filename, lineno + 1)
errors += 1
if TRAILING_WHITESPACE_RE.search(line):
logger.info('%s:%d: trailing whitespace', filename, lineno + 1)
errors += 1
if NO_NEWLINE_RE.search(line):
logger.info('%s:%d: no newline at end of file', filename,
lineno + 1)
errors += 1
whitespace = ALL_WHITESPACE_RE.match(line)
if whitespace:
logger.info('%s: trailing whitespace at end of file', filename)
errors += 1
return errors
if __name__ == "__main__":
errors = check_whitespace(*sys.argv[1:])
if errors > 0:
logger.error('%d whitespace errors' % (errors,))
sys.exit(1)

View File

@@ -1,10 +1,10 @@
#!/usr/bin/python
from optparse import OptionParser
import json
import re
import sys
import pystache
ESCAPE_SEQUENCE = {
@@ -42,7 +42,6 @@ def main(argv):
option_parser = OptionParser()
option_parser.add_option('--input')
option_parser.add_option('--output')
option_parser.add_option('--template')
options, args = option_parser.parse_args(argv[1:])
context = {}
@@ -114,7 +113,7 @@ def main(argv):
output = open(options.output, 'wb')
else:
output = sys.stdout
output.write(pystache.render(open(options.template, 'rb').read(), context))
json.dump(context, output)
if __name__ == '__main__':

View File

@@ -1,5 +1,385 @@
## Upgrade notes
### v3.17.0
#### `ol.source.MapQuest` removal
Because of changes at MapQuest (see: https://lists.openstreetmap.org/pipermail/talk/2016-June/076106.html) we had to remove the MapQuest source for now (see https://github.com/openlayers/ol3/issues/5484 for details).
#### `ol.interaction.ModifyEvent` changes
The event object previously had a `mapBrowserPointerEvent` property, which has been renamed to `mapBrowserEvent`.
#### Removal of ol.raster namespace
Users compiling their code with the library and using types in the `ol.raster` namespace should note that this has now been removed. `ol.raster.Pixel` has been deleted, and the other types have been renamed as follows, and your code may need changing if you use these:
* `ol.raster.Operation` to `ol.RasterOperation`
* `ol.raster.OperationType` to `ol.RasterOperationType`
#### All typedefs now in ol namespace
Users compiling their code with the library should note that the following typedefs have been renamed; your code may need changing if you use these:
* ol.events.ConditionType to ol.EventsConditionType
* ol.events.EventTargetLike to ol.EventTargetLike
* ol.events.Key to ol.EventsKey
* ol.events.ListenerFunctionType to ol.EventsListenerFunctionType
* ol.interaction.DragBoxEndConditionType to ol.DragBoxEndConditionType
* ol.interaction.DrawGeometryFunctionType to ol.DrawGeometryFunctionType
* ol.interaction.SegmentDataType to ol.ModifySegmentDataType
* ol.interaction.SelectFilterFunction to ol.SelectFilterFunction
* ol.interaction.SnapResultType to ol.SnapResultType
* ol.interaction.SnapSegmentDataType to ol.SnapSegmentDataType
* ol.proj.ProjectionLike to ol.ProjectionLike
* ol.style.AtlasBlock to ol.AtlasBlock
* ol.style.AtlasInfo to ol.AtlasInfo
* ol.style.AtlasManagerInfo to ol.AtlasManagerInfo
* ol.style.CircleRenderOptions to ol.CircleRenderOptions
* ol.style.ImageOptions to ol.StyleImageOptions
* ol.style.GeometryFunction to ol.StyleGeometryFunction
* ol.style.RegularShapeRenderOptions to ol.RegularShapeRenderOptions
* ol.style.StyleFunction to ol.StyleFunction
### v3.16.0
#### Rendering change for tile sources
Previously, if you called `source.setUrl()` on a tile source, all currently rendered tiles would be cleared before new tiles were loaded and rendered. This clearing of the map is undesirable if you are trying to smoothly update the tiles used by a source. This behavior has now changed, and calling `source.setUrl()` (or `source.setUrls()`) will *not* clear currently rendered tiles before loading and rendering new tiles. Instead, previously rendered tiles remain rendered until new tiles have loaded and can replace them. If you want to achieve the old behavior (render a blank map before loading new tiles), you can call `source.refresh()` or you can replace the old source with a new one (using `layer.setSource()`).
#### Move of typedefs out of code and into separate file
This change should not affect the great majority of application developers, but it's possible there are edge cases when compiling application code together with the library which cause compiler errors or warnings. In this case, please raise a GitHub issue. `goog.require`s for typedefs should not be necessary.
Users compiling their code with the library should note that the following API `@typedef`s have been renamed; your code may need changing if you use these:
* `ol.format.WFS.FeatureCollectionMetadata` to `ol.WFSFeatureCollectionMetadata`
* `ol.format.WFS.TransactionResponse` to `ol.WFSTransactionResponse`
#### Removal of `opaque` option for `ol.source.VectorTile`
This option is no longer needed, so it was removed from the API.
#### XHR loading for `ol.source.TileUTFGrid`
The `ol.source.TileUTFGrid` now uses XMLHttpRequest to load UTFGrid tiles by default. This works out of the box with the v4 Mapbox API. To work with the v3 API, you must use the new `jsonp` option on the source. See the examples below for detail.
```js
// To work with the v4 API
var v4source = new ol.source.TileUTFGrid({
url: 'https://api.tiles.mapbox.com/v4/example.json?access_token=' + YOUR_KEY_HERE
});
// To work with the v3 API
var v3source = new ol.source.TileUTFGrid({
jsonp: true, // <--- this is required for v3
url: 'http://api.tiles.mapbox.com/v3/example.json'
});
```
### v3.15.0
#### Internet Explorer 9 support
As of this release, OpenLayers requires a `classList` polyfill for IE 9 support. See http://cdn.polyfill.io/v2/docs/features#Element_prototype_classList.
#### Immediate rendering API
Listeners for `precompose`, `render`, and `postcompose` receive an event with a `vectorContext` property with methods for immediate vector rendering. The previous geometry drawing methods have been replaced with a single `vectorContext.drawGeometry(geometry)` method. If you were using any of the following experimental methods on the vector context, replace them with `drawGeometry`:
* Removed experimental geometry drawing methods: `drawPointGeometry`, `drawLineStringGeometry`, `drawPolygonGeometry`, `drawMultiPointGeometry`, `drawMultiLineStringGeometry`, `drawMultiPolygonGeometry`, and `drawCircleGeometry` (all have been replaced with `drawGeometry`).
In addition, the previous methods for setting style parts have been replaced with a single `vectorContext.setStyle(style)` method. If you were using any of the following experimental methods on the vector context, replace them with `setStyle`:
* Removed experimental style setting methods: `setFillStrokeStyle`, `setImageStyle`, `setTextStyle` (all have been replaced with `setStyle`).
Below is an example of how the vector context might have been used in the past:
```js
// OLD WAY, NO LONGER SUPPORTED
map.on('postcompose', function(event) {
event.vectorContext.setFillStrokeStyle(style.getFill(), style.getStroke());
event.vectorContext.drawPointGeometry(geometry);
});
```
Here is an example of how you could accomplish the same with the new methods:
```js
// NEW WAY, USE THIS INSTEAD OF THE CODE ABOVE
map.on('postcompose', function(event) {
event.vectorContext.setStyle(style);
event.vectorContext.drawGeometry(geometry);
});
```
A final change to the immediate rendering API is that `vectorContext.drawFeature()` calls are now "immediate" as well. The drawing now occurs synchronously. This means that any `zIndex` in a style passed to `drawFeature()` will be ignored. To achieve `zIndex` ordering, order your calls to `drawFeature()` instead.
#### Removal of `ol.DEFAULT_TILE_CACHE_HIGH_WATER_MARK`
The `ol.DEFAULT_TILE_CACHE_HIGH_WATER_MARK` define has been removed. The size of the cache can now be defined on every tile based `ol.source`:
```js
new ol.layer.Tile({
source: new ol.source.OSM({
cacheSize: 128
})
})
```
The default cache size is `2048`.
### v3.14.0
#### Internet Explorer 9 support
As of this release, OpenLayers requires a `requestAnimationFrame`/`cancelAnimationFrame` polyfill for IE 9 support. See http://cdn.polyfill.io/v2/docs/features/#requestAnimationFrame.
#### Layer pre-/postcompose event changes
It is the responsibility of the application to undo any canvas transform changes at the end of a layer 'precompose' or 'postcompose' handler. Previously, it was ok to set a null transform. The API now guarantees a device pixel coordinate system on the canvas with its origin in the top left corner of the map. However, applications should not rely on the underlying canvas being the same size as the visible viewport.
Old code:
```js
layer.on('precompose', function(e) {
// rely on canvas dimensions to move coordinate origin to center
e.context.translate(e.context.canvas.width / 2, e.context.canvas.height / 2);
e.context.scale(3, 3);
// draw an x in the center of the viewport
e.context.moveTo(-20, -20);
e.context.lineTo(20, 20);
e.context.moveTo(-20, 20);
e.context.lineTo(20, -20);
// rely on the canvas having a null transform
e.context.setTransform(1, 0, 0, 1, 0, 0);
});
```
New code:
```js
layer.on('precompose', function(e) {
// use map size and pixel ratio to move coordinate origin to center
var size = map.getSize();
var pixelRatio = e.frameState.pixelRatio;
e.context.translate(size[0] / 2 * pixelRatio, size[1] / 2 * pixelRatio);
e.context.scale(3, 3);
// draw an x in the center of the viewport
e.context.moveTo(-20, -20);
e.context.lineTo(20, 20);
e.context.moveTo(-20, 20);
e.context.lineTo(20, -20);
// undo all transforms
e.context.scale(1 / 3, 1 / 3);
e.context.translate(-size[0] / 2 * pixelRatio, -size[1] / 2 * pixelRatio);
});
```
### v3.13.0
#### `proj4js` integration
Before this release, OpenLayers depended on the global proj4 namespace. When using a module loader like Browserify, you might not want to depend on the global `proj4` namespace. You can use the `ol.proj.setProj4` function to set the proj4 function object. For example in a browserify ES6 environment:
```js
import ol from 'openlayers';
import proj4 from 'proj4';
ol.proj.setProj4(proj4);
```
#### `ol.source.TileJSON` changes
The `ol.source.TileJSON` now uses `XMLHttpRequest` to load the TileJSON instead of JSONP with callback.
When using server without proper CORS support, `jsonp: true` option can be passed to the constructor to get the same behavior as before:
```js
new ol.source.TileJSON({
url: 'http://serverwithoutcors.com/tilejson.json',
jsonp: true
})
```
Also for Mapbox v3, make sure you use urls ending with `.json` (which are able to handle both `XMLHttpRequest` and JSONP) instead of `.jsonp`.
### v3.12.0
#### `ol.Map#forEachFeatureAtPixel` changes
The optional `layerFilter` function is now also called for unmanaged layers. To get the same behaviour as before, wrap your layer filter code in an if block like this:
```js
function layerFilter(layer) {
if (map.getLayers().getArray().indexOf(layer) !== -1) {
// existing layer filter code
}
}
```
### v3.11.0
#### `ol.format.KML` changes
KML icons are scaled 50% so that the rendering better matches Google Earth rendering.
If a KML placemark has a name and is a point, an `ol.style.Text` is created with the name displayed to the right of the icon (if there is an icon).
This can be controlled with the showPointNames option which defaults to true.
To disable rendering of the point names for placemarks, use the option:
new ol.format.KML({ showPointNames: false });
#### `ol.interaction.DragBox` and `ol.interaction.DragZoom` changes
Styling is no longer done with `ol.Style`, but with pure CSS. The `style` constructor option is no longer required, and no longer available. Instead, there is a `className` option for the CSS selector. The default for `ol.interaction.DragBox` is `ol-dragbox`, and `ol.interaction.DragZoom` uses `ol-dragzoom`. If you previously had
```js
new ol.interaction.DragZoom({
style: new ol.style.Style({
stroke: new ol.style.Stroke({
color: 'red',
width: 3
}),
fill: new ol.style.Fill({
color: [255, 255, 255, 0.4]
})
})
});
```
you'll now just need
```js
new ol.interaction.DragZoom();
```
but with additional css:
```css
.ol-dragzoom {
border-color: red;
border-width: 3px;
background-color: rgba(255,255,255,0.4);
}
```
#### Removal of `ol.source.TileVector`
With the introduction of true vector tile support, `ol.source.TileVector` becomes obsolete. Change your code to use `ol.layer.VectorTile` and `ol.source.VectorTile` instead of `ol.layer.Vector` and `ol.source.TileVector`.
#### `ol.Map#forEachFeatureAtPixel` changes for unmanaged layers
`ol.Map#forEachFeatureAtPixel` will still be called for unmanaged layers, but the 2nd argument to the callback function will be `null` instead of a reference to the unmanaged layer. This brings back the behavior of the abandoned `ol.FeatureOverlay` that was replaced by unmanaged layers.
If you are affected by this change, please change your unmanaged layer to a regular layer by using e.g. `ol.Map#addLayer` instead of `ol.layer.Layer#setMap`.
### v3.10.0
#### `ol.layer.Layer` changes
The experimental `setHue`, `setContrast`, `setBrightness`, `setSaturation`, and the corresponding getter methods have been removed. These properties only worked with the WebGL renderer. If are interested in applying color transforms, look for the `postcompose` event in the API docs. In addition, the `ol.source.Raster` source provides a way to create new raster data based on arbitrary transforms run on any number of input sources.
### v3.9.0
#### `ol.style.Circle` changes
The experimental `getAnchor`, `getOrigin`, and `getSize` methods have been removed. The anchor and origin of a circle symbolizer are not modifiable, so these properties should not need to be accessed. The radius and stroke width can be used to calculate the rendered size of a circle symbolizer if needed:
```js
// calculate rendered size of a circle symbolizer
var width = 2 * circle.getRadius();
if (circle.getStroke()) {
width += circle.getStroke().getWidth() + 1;
}
```
### v3.8.0
There should be nothing special required when upgrading from v3.7.0 to v3.8.0.
### v3.7.0
#### Removal of `ol.FeatureOverlay`
Instead of an `ol.FeatureOverlay`, we now use an `ol.layer.Vector` with an
`ol.source.Vector`. If you previously had:
```js
var featureOverlay = new ol.FeatureOverlay({
map: map,
style: overlayStyle
});
featureOverlay.addFeature(feature);
featureOverlay.removeFeature(feature);
var collection = featureOverlay.getFeatures();
```
you will have to change this to:
```js
var collection = new ol.Collection();
var featureOverlay = new ol.layer.Vector({
map: map,
source: new ol.source.Vector({
features: collection,
useSpatialIndex: false // optional, might improve performance
}),
style: overlayStyle,
updateWhileAnimating: true, // optional, for instant visual feedback
updateWhileInteracting: true // optional, for instant visual feedback
});
featureOverlay.getSource().addFeature(feature);
featureOverlay.getSource().removeFeature(feature);
```
With the removal of `ol.FeatureOverlay`, `zIndex` symbolizer properties of overlays are no longer stacked per map, but per layer/overlay. If you previously had multiple feature overlays where you controlled the rendering order of features by using `zIndex` symbolizer properties, you can now achieve the same rendering order only if all overlay features are on the same layer.
Note that `ol.FeatureOverlay#getFeatures()` returned an `{ol.Collection.<ol.Feature>}`, whereas `ol.source.Vector#getFeatures()` returns an `{Array.<ol.Feature>}`.
#### `ol.TileCoord` changes
Until now, the API exposed two different types of `ol.TileCoord` tile coordinates: internal ones that increase left to right and upward, and transformed ones that may increase downward, as defined by a transform function on the tile grid. With this change, the API now only exposes tile coordinates that increase left to right and upward.
Previously, tile grids created by OpenLayers either had their origin at the top-left or at the bottom-left corner of the extent. To make it easier for application developers to transform tile coordinates to the common XYZ tiling scheme, all tile grids that OpenLayers creates internally have their origin now at the top-left corner of the extent.
This change affects applications that configure a custom `tileUrlFunction` for an `ol.source.Tile`. Previously, the `tileUrlFunction` was called with rather unpredictable tile coordinates, depending on whether a tile coordinate transform took place before calling the `tileUrlFunction`. Now it is always called with OpenLayers tile coordinates. To transform these into the common XYZ tiling scheme, a custom `tileUrlFunction` has to change the `y` value (tile row) of the `ol.TileCoord`:
```js
function tileUrlFunction = function(tileCoord, pixelRatio, projection) {
var urlTemplate = '{z}/{x}/{y}';
return urlTemplate
.replace('{z}', tileCoord[0].toString())
.replace('{x}', tileCoord[1].toString())
.replace('{y}', (-tileCoord[2] - 1).toString());
}
```
The `ol.tilegrid.TileGrid#createTileCoordTransform()` function which could be used to get the tile grid's tile coordinate transform function has been removed. This function was confusing and should no longer be needed now that application developers get tile coordinates in a known layout.
The code snippets below show how your application code needs to be changed:
Old application code (with `ol.tilegrid.TileGrid#createTileCoordTransform()`):
```js
var transform = source.getTileGrid().createTileCoordTransform();
var tileUrlFunction = function(tileCoord, pixelRatio, projection) {
tileCoord = transform(tileCoord, projection);
return 'http://mytiles.com/' +
tileCoord[0] + '/' + tileCoord[1] + '/' + tileCoord[2] + '.png';
};
```
Old application code (with custom `y` transform):
```js
var tileUrlFunction = function(tileCoord, pixelRatio, projection) {
var z = tileCoord[0];
var yFromBottom = tileCoord[2];
var resolution = tileGrid.getResolution(z);
var tileHeight = ol.size.toSize(tileSize)[1];
var matrixHeight =
Math.floor(ol.extent.getHeight(extent) / tileHeight / resolution);
return 'http://mytiles.com/' +
tileCoord[0] + '/' + tileCoord[1] + '/' +
(matrixHeight - yFromBottom - 1) + '.png';
};
```
New application code (simple -y - 1 transform):
```js
var tileUrlFunction = function(tileCoord, pixelRatio, projection) {
return 'http://mytiles.com/' +
tileCoord[0] + '/' + tileCoord[1] + '/' + (-tileCoord[2] - 1) + '.png';
};
```
#### Removal of `ol.tilegrid.Zoomify`
The replacement of `ol.tilegrid.Zoomify` is a plain `ol.tilegrid.TileGrid`, configured with `extent`, `origin` and `resolutions`. If the `size` passed to the `ol.source.Zoomify` source is `[width, height]`, then the extent for the tile grid will be `[0, -height, width, 0]`, and the origin will be `[0, 0]`.
#### Replace `ol.View.fitExtent()` and `ol.View.fitGeometry()` with `ol.View.fit()`
* This combines two previously distinct functions into one more flexible call which takes either a geometry or an extent.
* Rename all calls to `fitExtent` and `fitGeometry` to `fit`.
#### Change to `ol.interaction.Modify`
When single clicking a line or boundary within the `pixelTolerance`, a vertex is now created.
### v3.6.0
#### `ol.interaction.Draw` changes

93
changelog/v3.10.0.md Normal file
View File

@@ -0,0 +1,93 @@
# v3.10.0
## Summary
The v3.10.0 release includes features and fixes from 66 pull requests since the v3.9.0 release. New features and improvements include:
* Full touch gesture support for the Microsoft Edge browser.
* Improved API docs - required constructor options are now marked as such.
* Text styles (vector labels) now work with defaults instead of failing when only a label text is set.
* Write support for GML3 features with multiple geometries
See the complete list below for details. And see the following notes to know how to upgrade from v3.9.0 to v3.10.0.
## Upgrade notes
#### `ol.layer.Layer` changes
The experimental `setHue`, `setContrast`, `setBrightness`, `setSaturation`, and the corresponding getter methods have been removed. These properties only worked with the WebGL renderer. If you are interested in applying color transforms, look for the `postcompose` event in the API docs. In addition, the `ol.source.Raster` source provides a way to create new raster data based on arbitrary transforms run on any number of input sources.
#### Removal of legacy Internet Explorer support
If you are building an appliction that supports Internet Explorer 8 or older, you'll need to use ES5 shims to make OpenLayers work. As before, support for such old browsers is very basic, and we recommend to not support them.
## New features and fixes
* [#4237](https://github.com/openlayers/ol3/pull/4237) - #3328: GML3 - Writing features with multiple geometries ([@awaterme](https://github.com/awaterme))
* [#4218](https://github.com/openlayers/ol3/pull/4218) - Add 'getLayer()' method to 'ol.interaction.Select' ([@jonataswalker](https://github.com/jonataswalker))
* [#4036](https://github.com/openlayers/ol3/pull/4036) - Fix modify interaction event order ([@alvinlindstam](https://github.com/alvinlindstam))
* [#4036](https://github.com/openlayers/ol3/pull/4036) - Fix modify interaction event order ([@alvinlindstam](https://github.com/alvinlindstam))
* [#4116](https://github.com/openlayers/ol3/pull/4116) - Make ol.control.OverviewMap's view configurable ([@ahocevar](https://github.com/ahocevar))
* [#4234](https://github.com/openlayers/ol3/pull/4234) - Support OGC WKT proj4 def.units and def.to_meter ([@tbarsballe](https://github.com/tbarsballe))
* [#4224](https://github.com/openlayers/ol3/pull/4224) - Don't transform the angle into degrees to rotate the element ([@fredj](https://github.com/fredj))
* [#4231](https://github.com/openlayers/ol3/pull/4231) - Revert "Merge pull request #4217 from ThomasG77/clipboardjs-replacement" ([@ahocevar](https://github.com/ahocevar))
* [#4217](https://github.com/openlayers/ol3/pull/4217) - Replace ZeroClipboard with Clipboard.js to remove flash dependency ([@ThomasG77](https://github.com/ThomasG77))
* [#4223](https://github.com/openlayers/ol3/pull/4223) - Remove goog.fx.easing ([@fredj](https://github.com/fredj))
* [#4222](https://github.com/openlayers/ol3/pull/4222) - Remove unnecessary cast ([@fredj](https://github.com/fredj))
* [#4209](https://github.com/openlayers/ol3/pull/4209) - Remove goog.string.remove ([@gberaudo](https://github.com/gberaudo))
* [#4207](https://github.com/openlayers/ol3/pull/4207) - Remove goog.string.startsWith ([@gberaudo](https://github.com/gberaudo))
* [#4208](https://github.com/openlayers/ol3/pull/4208) - Remove goog.string.trim() ([@gberaudo](https://github.com/gberaudo))
* [#4216](https://github.com/openlayers/ol3/pull/4216) - Fix canvas replay which broke with 31a68e2 ([@ahocevar](https://github.com/ahocevar))
* [#4202](https://github.com/openlayers/ol3/pull/4202) - Remove use of goog.dom.appendChild ([@fredj](https://github.com/fredj))
* [#4205](https://github.com/openlayers/ol3/pull/4205) - Minor cleanup ([@fredj](https://github.com/fredj))
* [#4203](https://github.com/openlayers/ol3/pull/4203) - Cosmetic changes to example html / css ([@marcjansen](https://github.com/marcjansen))
* [#4184](https://github.com/openlayers/ol3/pull/4184) - Adjust iframe's position of GetFeatureInfo examples ([@jonataswalker](https://github.com/jonataswalker))
* [#4192](https://github.com/openlayers/ol3/pull/4192) - Remove use of goog.isNull in favor of simple truthy checks ([@marcjansen](https://github.com/marcjansen))
* [#4187](https://github.com/openlayers/ol3/pull/4187) - Fix {-y} template calculation for custom (TMS) tile grids ([@ahocevar](https://github.com/ahocevar))
* [#4176](https://github.com/openlayers/ol3/pull/4176) - Remove use of goog.isDefAndNotNull().
([@tschaub](https://github.com/tschaub))
* [#4200](https://github.com/openlayers/ol3/pull/4200) - Do not use goog.object.get ([@marcjansen](https://github.com/marcjansen))
* [#4198](https://github.com/openlayers/ol3/pull/4198) - Improve ol.control.Rotate.prototype.resetNorth_ performance ([@denilsonsa](https://github.com/denilsonsa))
* [#4197](https://github.com/openlayers/ol3/pull/4197) - Remove blur action on MOUSEOUT on Zoom Out button ([@denilsonsa](https://github.com/denilsonsa))
* [#4195](https://github.com/openlayers/ol3/pull/4195) - #4171: Prefer current layout as default on MultiLineString.setLineStrings() ([@awaterme](https://github.com/awaterme))
* [#4172](https://github.com/openlayers/ol3/pull/4172) - #4171: Prefer current layout as default on Multipolygon.setPolygons() ([@awaterme](https://github.com/awaterme))
* [#4190](https://github.com/openlayers/ol3/pull/4190) - Remove use of goog.functions.constant ([@marcjansen](https://github.com/marcjansen))
* [#4188](https://github.com/openlayers/ol3/pull/4188) - Remove use of goog.object.getKeys ([@fredj](https://github.com/fredj))
* [#4189](https://github.com/openlayers/ol3/pull/4189) - Replace goog.nullFunction with ol.nullFunction ([@marcjansen](https://github.com/marcjansen))
* [#4165](https://github.com/openlayers/ol3/pull/4165) - Use ECMAScript 5.1 Array functions instead of goog.array ([@fredj](https://github.com/fredj))
* [#4181](https://github.com/openlayers/ol3/pull/4181) - Remove use of goog.array.contains ([@fredj](https://github.com/fredj))
* [#4162](https://github.com/openlayers/ol3/pull/4162) - Remove ol.LEGACY_IE_SUPPORT ([@fredj](https://github.com/fredj))
* [#4174](https://github.com/openlayers/ol3/pull/4174) - Remove hue, saturation, contrast, and brightness as layer properties. ([@tschaub](https://github.com/tschaub))
* [#4183](https://github.com/openlayers/ol3/pull/4183) - Remove @api on getHitDetectionFramebuffer ([@elemoine](https://github.com/elemoine))
* [#4179](https://github.com/openlayers/ol3/pull/4179) - Use Date.now() instead of goog.now() ([@marcjansen](https://github.com/marcjansen))
* [#4175](https://github.com/openlayers/ol3/pull/4175) - Remove use of goog.math.clamp(). ([@tschaub](https://github.com/tschaub))
* [#4173](https://github.com/openlayers/ol3/pull/4173) - Only animate when resolution is about to be changed ([@ahocevar](https://github.com/ahocevar))
* [#4129](https://github.com/openlayers/ol3/pull/4129) - Remove use of goog.isDef. ([@openlayers](https://github.com/openlayers))
* [#4168](https://github.com/openlayers/ol3/pull/4168) - Tile preload example wording (fixes #4147) ([@wlerner](https://github.com/wlerner))
* [#4167](https://github.com/openlayers/ol3/pull/4167) - Remove externs in externs/closure-compiler.js ([@fredj](https://github.com/fredj))
* [#4166](https://github.com/openlayers/ol3/pull/4166) - Use version 20150920 of Closure Compiler ([@elemoine](https://github.com/elemoine))
* [#4159](https://github.com/openlayers/ol3/pull/4159) - Remove use of goog.object.containsKey ([@fredj](https://github.com/fredj))
* [#4157](https://github.com/openlayers/ol3/pull/4157) - Fix typo in doc ([@elemoine](https://github.com/elemoine))
* [#4138](https://github.com/openlayers/ol3/pull/4138) - Enhanced documentation for ol.style.Text ([@ekargee](https://github.com/ekargee))
* [#4151](https://github.com/openlayers/ol3/pull/4151) - Remove bogus assertion ([@elemoine](https://github.com/elemoine))
* [#4110](https://github.com/openlayers/ol3/pull/4110) - Minor cleanups ([@fredj](https://github.com/fredj))
* [#4156](https://github.com/openlayers/ol3/pull/4156) - Rename drag-features example to custom-interactions ([@elemoine](https://github.com/elemoine))
* [#4150](https://github.com/openlayers/ol3/pull/4150) - Remove use of goog.object.remove ([@fredj](https://github.com/fredj))
* [#4145](https://github.com/openlayers/ol3/pull/4145) - API method for simplifying geometries. ([@tschaub](https://github.com/tschaub))
* [#4153](https://github.com/openlayers/ol3/pull/4153) - Add a "features" option to ol.interaction.Select ([@elemoine](https://github.com/elemoine))
* [#4144](https://github.com/openlayers/ol3/pull/4144) - Set context.fillStyle to a string ([@elemoine](https://github.com/elemoine))
* [#4149](https://github.com/openlayers/ol3/pull/4149) - Remove use of goog.array.isEmpty ([@fredj](https://github.com/fredj))
* [#4139](https://github.com/openlayers/ol3/pull/4139) - Add turf.js and JSTS example ([@tsauerwein](https://github.com/tsauerwein))
* [#4136](https://github.com/openlayers/ol3/pull/4136) - Fix the 'click-to-fork' link in contributer notes ([@marcjansen](https://github.com/marcjansen))
* [#4132](https://github.com/openlayers/ol3/pull/4132) - Update quickstart tutorial ([@tsauerwein](https://github.com/tsauerwein))
* [#4111](https://github.com/openlayers/ol3/pull/4111) - Use a blackish default for filling texts ([@marcjansen](https://github.com/marcjansen))
* [#4120](https://github.com/openlayers/ol3/pull/4120) - Remove invalid link to featureOverlay in API doc ([@kalbermattenm](https://github.com/kalbermattenm))
* [#4117](https://github.com/openlayers/ol3/pull/4117) - forEachFeatureAtPixel shouldn't fail if layer has no source ([@pgiraud](https://github.com/pgiraud))
* [#4106](https://github.com/openlayers/ol3/pull/4106) - Focus to search field on page load ([@elemoine](https://github.com/elemoine))
* [#4079](https://github.com/openlayers/ol3/pull/4079) - Automatically mark required options in API-docs ([@marcjansen](https://github.com/marcjansen))
* [#4108](https://github.com/openlayers/ol3/pull/4108) - Add missing CSSProperties.prototype.touchAction extern ([@fredj](https://github.com/fredj))
* [#4107](https://github.com/openlayers/ol3/pull/4107) - Prevent page zoom on IE Edge ([@fredj](https://github.com/fredj))
* [#3969](https://github.com/openlayers/ol3/pull/3969) - Add an option to use the mouse's location as an anchor when zooming ([@samuellapointe](https://github.com/samuellapointe))

7
changelog/v3.10.1.md Normal file
View File

@@ -0,0 +1,7 @@
# v3.10.1
## Summary
This is a patch release that fixes a regression causing text styles with a fill but no stroke to not be rendered.
* [#4242](https://github.com/openlayers/ol3/pull/4242) - Fix a drawText regression introduced with 31a68e2 ([@marcjansen](https://github.com/marcjansen))

136
changelog/v3.11.0.md Normal file
View File

@@ -0,0 +1,136 @@
# v3.11.0
## Summary
The v3.11.0 release includes features and fixes from 73 pull requests since the v3.10.1 release. New features and improvements include:
* Support for raster reprojection - load raster sources in one projection and view them in another.
* Support for Mapbox Vector Tiles!
* Improved KML support, GeoJSON & TopoJSON fixes, and much more. See below for the full list.
## Upgrade notes
#### `ol.format.KML` changes
KML icons are scaled 50% so that the rendering better matches Google Earth rendering.
If a KML placemark has a name and is a point, an `ol.style.Text` is created with the name displayed to the right of the icon (if there is an icon).
This can be controlled with the showPointNames option which defaults to true.
To disable rendering of the point names for placemarks, use the option:
new ol.format.KML({ showPointNames: false });
#### `ol.interaction.DragBox` and `ol.interaction.DragZoom` changes
Styling is no longer done with `ol.Style`, but with pure CSS. The `style` constructor option is no longer required, and no longer available. Instead, there is a `className` option for the CSS selector. The default for `ol.interaction.DragBox` is `ol-dragbox`, and `ol.interaction.DragZoom` uses `ol-dragzoom`. If you previously had
```js
new ol.interaction.DragZoom({
style: new ol.style.Style({
stroke: new ol.style.Stroke({
color: 'red',
width: 3
}),
fill: new ol.style.Fill({
color: [255, 255, 255, 0.4]
})
})
});
```
you'll now just need
```js
new ol.interaction.DragZoom();
```
but with additional css:
```css
.ol-dragzoom {
border-color: red;
border-width: 3px;
background-color: rgba(255,255,255,0.4);
}
```
#### Removal of `ol.source.TileVector`
With the introduction of true vector tile support, `ol.source.TileVector` becomes obsolete. Change your code to use `ol.layer.VectorTile` and `ol.source.VectorTile` instead of `ol.layer.Vector` and `ol.source.TileVector`.
#### `ol.Map#forEachFeatureAtPixel` changes for unmanaged layers
`ol.Map#forEachFeatureAtPixel` will still be called for unmanaged layers, but the 2nd argument to the callback function will be `null` instead of a reference to the unmanaged layer. This brings back the behavior of the abandoned `ol.FeatureOverlay` that was replaced by unmanaged layers.
If you are affected by this change, please change your unmanaged layer to a regular layer by using e.g. `ol.Map#addLayer` instead of `ol.layer.Layer#setMap`.
## Full list of changes
* [#4394](https://github.com/openlayers/ol3/pull/4394) - Allow ol.Object property update without notification. ([@DavidHequet](https://github.com/DavidHequet))
* [#4395](https://github.com/openlayers/ol3/pull/4395) - Flag ol.style.Text setOffsetX and Y as @api. ([@adube](https://github.com/adube))
* [#4393](https://github.com/openlayers/ol3/pull/4393) - Faster vector tiles ([@ahocevar](https://github.com/ahocevar))
* [#4392](https://github.com/openlayers/ol3/pull/4392) - Update clean-css to version 3.4.7 🚀 ([@openlayers](https://github.com/openlayers))
* [#4391](https://github.com/openlayers/ol3/pull/4391) - Pass null as forEachFeatureAtPixel layer arg for unmanaged layers ([@ahocevar](https://github.com/ahocevar))
* [#4390](https://github.com/openlayers/ol3/pull/4390) - Fix usage of mocha-phantomjs-core after update ([@ahocevar](https://github.com/ahocevar))
* [#4387](https://github.com/openlayers/ol3/pull/4387) - Add default argument to getRendererFromQueryString ([@ahocevar](https://github.com/ahocevar))
* [#4376](https://github.com/openlayers/ol3/pull/4376) - Make KML format ignore image styles that aren't icons ([@elemoine](https://github.com/elemoine))
* [#4385](https://github.com/openlayers/ol3/pull/4385) - Don't transform the scale specified by the user ([@oterral](https://github.com/oterral))
* [#4388](https://github.com/openlayers/ol3/pull/4388) - Quick-fix running tests with PhantomJS ([@ahocevar](https://github.com/ahocevar))
* [#4378](https://github.com/openlayers/ol3/pull/4378) - Add a writeStyles option to KML format ([@elemoine](https://github.com/elemoine))
* [#4375](https://github.com/openlayers/ol3/pull/4375) - Fixed documentation typo (ol.source.ImageWMS) ([@simonseyock](https://github.com/simonseyock))
* [#4371](https://github.com/openlayers/ol3/pull/4371) - Fix typo in closure compilation tutorial ([@dtreiter](https://github.com/dtreiter))
* [#4370](https://github.com/openlayers/ol3/pull/4370) - Improve ol.interaction.Select#getLayer documentation. ([@jonataswalker](https://github.com/jonataswalker))
* [#4365](https://github.com/openlayers/ol3/pull/4365) - Update fs-extra to version 0.26.2 🚀 ([@openlayers](https://github.com/openlayers))
* [#4366](https://github.com/openlayers/ol3/pull/4366) - Update resemblejs to version 2.0.1 🚀 ([@openlayers](https://github.com/openlayers))
* [#4368](https://github.com/openlayers/ol3/pull/4368) - Append KML placemark text style to existing styles ([@marcjansen](https://github.com/marcjansen))
* [#4361](https://github.com/openlayers/ol3/pull/4361) - Make GPX format not fail on unsupported geometries ([@elemoine](https://github.com/elemoine))
* [#4360](https://github.com/openlayers/ol3/pull/4360) - Update getExtent return value jsdoc tag ([@fredj](https://github.com/fredj))
* [#4359](https://github.com/openlayers/ol3/pull/4359) - Update closure-util to version 1.9.0 🚀 ([@openlayers](https://github.com/openlayers))
* [#4357](https://github.com/openlayers/ol3/pull/4357) - Update all dependencies. ([@openlayers](https://github.com/openlayers))
* [#4356](https://github.com/openlayers/ol3/pull/4356) - Update Metalsmith and layouts plugin. ([@tschaub](https://github.com/tschaub))
* [#4355](https://github.com/openlayers/ol3/pull/4355) - Update PhantomJS. ([@tschaub](https://github.com/tschaub))
* [#4353](https://github.com/openlayers/ol3/pull/4353) - Resolve path to jsdoc-fork. ([@tschaub](https://github.com/tschaub))
* [#3627](https://github.com/openlayers/ol3/pull/3627) - Make package.json compatible for npm frontend use. ([@ThomasG77](https://github.com/ThomasG77))
* [#4163](https://github.com/openlayers/ol3/pull/4163) - Fixes for building with Node 4.x. ([@tschaub](https://github.com/tschaub))
* [#4347](https://github.com/openlayers/ol3/pull/4347) - Use require.resolve() to find jsdoc. ([@tschaub](https://github.com/tschaub))
* [#4291](https://github.com/openlayers/ol3/pull/4291) - Add 'Move a feature along a line' example. ([@jonataswalker](https://github.com/jonataswalker))
* [#4344](https://github.com/openlayers/ol3/pull/4344) - Allow different resolutions in x and y direction for ol.source.ImageStatic ([@bartvde](https://github.com/bartvde))
* [#4339](https://github.com/openlayers/ol3/pull/4339) - Make sure drawImage width and height are not too big ([@bartvde](https://github.com/bartvde))
* [#4334](https://github.com/openlayers/ol3/pull/4334) - Check view extent within image extent ([@ahocevar](https://github.com/ahocevar))
* [#4332](https://github.com/openlayers/ol3/pull/4332) - Fix write out GeoJSON features with id equal to 0 ([@fredj](https://github.com/fredj))
* [#4331](https://github.com/openlayers/ol3/pull/4331) - Allow TopoJSON features with id equal to 0 ([@fredj](https://github.com/fredj))
* [#4330](https://github.com/openlayers/ol3/pull/4330) - ol.format.TopoJSON is read only, update the jsdoc ([@openlayers](https://github.com/openlayers))
* [#4327](https://github.com/openlayers/ol3/pull/4327) - Allow GeoJSON features with id equal to 0 ([@fredj](https://github.com/fredj))
* [#4219](https://github.com/openlayers/ol3/pull/4219) - Support tiled vector data and Mapbox vector tiles ([@ahocevar](https://github.com/ahocevar))
* [#4322](https://github.com/openlayers/ol3/pull/4322) - Add wrapX override support for ol.source.Cluster ([@FRizZL](https://github.com/FRizZL))
* [#4316](https://github.com/openlayers/ol3/pull/4316) - Render name labels if the geometry is a point in KML format (@tamarmot) ([@marcjansen](https://github.com/marcjansen))
* [#4313](https://github.com/openlayers/ol3/pull/4313) - Align logos nicely with attribution text ([@ahocevar](https://github.com/ahocevar))
* [#4297](https://github.com/openlayers/ol3/pull/4297) - Create standalone versions of ol.ext packages ([@ahocevar](https://github.com/ahocevar))
* [#4302](https://github.com/openlayers/ol3/pull/4302) - scale icons by 0.5 so they are not huge ([@tamarmot](https://github.com/tamarmot))
* [#4301](https://github.com/openlayers/ol3/pull/4301) - Remove jshint -W069 tags in source code ([@fredj](https://github.com/fredj))
* [#4273](https://github.com/openlayers/ol3/pull/4273) - Expand docs on ol.source url prop. ([@Barryrowe](https://github.com/Barryrowe))
* [#4293](https://github.com/openlayers/ol3/pull/4293) - Refine the pull request process ([@ahocevar](https://github.com/ahocevar))
* [#4289](https://github.com/openlayers/ol3/pull/4289) - Restrict maxZoom of the static-image example ([@ahocevar](https://github.com/ahocevar))
* [#4275](https://github.com/openlayers/ol3/pull/4275) - Fix ol.events.condition.mouseOnly parameter type ([@fredj](https://github.com/fredj))
* [#4248](https://github.com/openlayers/ol3/pull/4248) - Use Math.cosh of ES6/2015 if available ([@marcjansen](https://github.com/marcjansen))
* [#4286](https://github.com/openlayers/ol3/pull/4286) - Add a color manipulation example. ([@tschaub](https://github.com/tschaub))
* [#4122](https://github.com/openlayers/ol3/pull/4122) - Raster reprojection ([@klokantech](https://github.com/klokantech))
* [#4283](https://github.com/openlayers/ol3/pull/4283) - Flag ol.tilegrid.TileGrid getTileCoordExtent as @api ([@adube](https://github.com/adube))
* [#4280](https://github.com/openlayers/ol3/pull/4280) - Use overlay container instead of viewport for ol.render.Box ([@ahocevar](https://github.com/ahocevar))
* [#4278](https://github.com/openlayers/ol3/pull/4278) - Use DOM instead of map canvas for ol.render.Box ([@ahocevar](https://github.com/ahocevar))
* [#4277](https://github.com/openlayers/ol3/pull/4277) - Improve the box select example ([@fredj](https://github.com/fredj))
* [#4276](https://github.com/openlayers/ol3/pull/4276) - Better ol.events.condition.platformModifierKeyOnly documentation ([@fredj](https://github.com/fredj))
* [#4102](https://github.com/openlayers/ol3/pull/4102) - Export ol.Observable#dispatchEvent function ([@fredj](https://github.com/fredj))
* [#4261](https://github.com/openlayers/ol3/pull/4261) - ol.events.condition.mouseOnly may be wrong ([@fredj](https://github.com/fredj))
* [#4269](https://github.com/openlayers/ol3/pull/4269) - Fix Zoom control duration option - allow `0` as value ([@adube](https://github.com/adube))
* [#4268](https://github.com/openlayers/ol3/pull/4268) - Add method for retrieving ol.Overlay by id ([@jonataswalker](https://github.com/jonataswalker))
* [#4257](https://github.com/openlayers/ol3/pull/4257) - Remove unused ol.math-methods ([@marcjansen](https://github.com/marcjansen))
* [#4270](https://github.com/openlayers/ol3/pull/4270) - Fix Keyboard zoom interation options ([@adube](https://github.com/adube))
* [#4272](https://github.com/openlayers/ol3/pull/4272) - Allow the DragZoom interaction created in defaults to use zoomDuration option. ([@adube](https://github.com/adube))
* [#4271](https://github.com/openlayers/ol3/pull/4271) - Fix DragZoom interaction duration, allow `0` value ([@adube](https://github.com/adube))
* [#4267](https://github.com/openlayers/ol3/pull/4267) - Example usability improvements ([@ahocevar](https://github.com/ahocevar))
* [#4263](https://github.com/openlayers/ol3/pull/4263) - Add back CSSProperties.prototype.touchAction extern ([@fredj](https://github.com/fredj))
* [#4259](https://github.com/openlayers/ol3/pull/4259) - Remove use of toDegrees/toRadians util functions ([@marcjansen](https://github.com/marcjansen))
* [#4258](https://github.com/openlayers/ol3/pull/4258) - Remove usage of goog.dom.TagName enum ([@marcjansen](https://github.com/marcjansen))
* [#4255](https://github.com/openlayers/ol3/pull/4255) - Fix zoom slider width for retina displays ([@ahocevar](https://github.com/ahocevar))
* [#4249](https://github.com/openlayers/ol3/pull/4249) - Make whole example box clickable ([@ahocevar](https://github.com/ahocevar))
* [#4045](https://github.com/openlayers/ol3/pull/4045) - Add parser for dimension property from WMTS Capabilities.xml ([@Jenselme](https://github.com/Jenselme))
* [#4161](https://github.com/openlayers/ol3/pull/4161) - Add `translatestart`, `translateend` and `translating` events to `ol.interaction.Translate` ([@jonataswalker](https://github.com/jonataswalker))
* [#4186](https://github.com/openlayers/ol3/pull/4186) - Do not export ol.webgl.Context ([@elemoine](https://github.com/elemoine))
* [#4239](https://github.com/openlayers/ol3/pull/4239) - Changing highlighted to highlight ([@austinkeeley](https://github.com/austinkeeley))
* [#3727](https://github.com/openlayers/ol3/pull/3727) - Added getOverviewMap getter method in overviewmapcontrol.js ([@bogdanvaduva](https://github.com/bogdanvaduva))

11
changelog/v3.11.1.md Normal file
View File

@@ -0,0 +1,11 @@
# v3.11.1
## Summary
The v3.11.1 release is a patch release that addresses a few regressions in the v3.11.0 release. See the [v3.11.0 release notes](https://github.com/openlayers/ol3/releases/tag/v3.11.0) for details on upgrading from v3.10.
## Fixes
* [#4413](https://github.com/openlayers/ol3/pull/4413) - Revert "Merge pull request #4339 from bartvde/issue-4337" ([@bartvde](https://github.com/bartvde))
* [#4412](https://github.com/openlayers/ol3/pull/4412) - Revert "Merge pull request #4344 from bartvde/issue-2844" ([@ahocevar](https://github.com/ahocevar))
* [#4408](https://github.com/openlayers/ol3/pull/4408) - Use ratio when calculating ImageWMS width and height ([@ahocevar](https://github.com/ahocevar))

11
changelog/v3.11.2.md Normal file
View File

@@ -0,0 +1,11 @@
# v3.11.2
## Summary
The v3.11.2 release is a patch release that addresses a few regressions in the v3.11.1 release. See the [v3.11.0 release notes](https://github.com/openlayers/ol3/releases/tag/v3.11.0) for details on upgrading from v3.10.
## Fixes
* [#4450](https://github.com/openlayers/ol3/pull/4450) - Fix select interaction regression caused by #4391 ([@ahocevar](https://github.com/ahocevar))
* [#4448](https://github.com/openlayers/ol3/pull/4448) - Check ol.source.UrlTile#urls property for null value ([@fredj](https://github.com/fredj))
* [#4439](https://github.com/openlayers/ol3/pull/4439) - Allow '' for crossOrigin (as Anonymous alias) ([@ahocevar](https://github.com/ahocevar))

96
changelog/v3.12.0.md Normal file
View File

@@ -0,0 +1,96 @@
# v3.12.0
## Summary
The v3.12.0 release includes features and fixes from 71 pull requests since the v3.11.2 release. New features and improvements include:
* Tile coordinate wrapping for raster reprojection.
* Support for multi-line labels.
* Allow rendering geometries to an arbitrary canvas (useful for vector legends).
## Upgrade notes
#### `ol.Map#forEachFeatureAtPixel` changes
The optional `layerFilter` function is now also called for unmanaged layers. To get the same behaviour as before, wrap your layer filter code in an if block like this:
```js
function layerFilter(layer) {
if (map.getLayers().getArray().indexOf(layer) !== -1) {
// existing layer filter code
}
}
```
## Full list of changes
* [#4559](https://github.com/openlayers/ol3/pull/4559) - Fix up failing KML test in Firefox ([@bartvde](https://github.com/bartvde))
* [#4561](https://github.com/openlayers/ol3/pull/4561) - Exclude feature loader MVT test from IE9 ([@bartvde](https://github.com/bartvde))
* [#4552](https://github.com/openlayers/ol3/pull/4552) - Make sure compiled code calls ol.VectorTile#setProjection ([@ahocevar](https://github.com/ahocevar))
* [#4551](https://github.com/openlayers/ol3/pull/4551) - Handle tile coordinate wrapping when reprojecting raster tiles ([@klokantech](https://github.com/klokantech))
* [#4544](https://github.com/openlayers/ol3/pull/4544) - Update vector-tile to version 1.2.0 🚀 ([@openlayers](https://github.com/openlayers))
* [#4537](https://github.com/openlayers/ol3/pull/4537) - Allow specifying non default DPI on ol.source.TileArcGISRest ([@bartvde](https://github.com/bartvde))
* [#4548](https://github.com/openlayers/ol3/pull/4548) - Improve vector tile related docs ([@ahocevar](https://github.com/ahocevar))
* [#4549](https://github.com/openlayers/ol3/pull/4549) - Update vector label example ([@tsauerwein](https://github.com/tsauerwein))
* [#4512](https://github.com/openlayers/ol3/pull/4512) - Support for multi-line labels (improved) ([@flightaware](https://github.com/flightaware))
* [#4546](https://github.com/openlayers/ol3/pull/4546) - Update coveralls to version 2.11.6 🚀 ([@openlayers](https://github.com/openlayers))
* [#4539](https://github.com/openlayers/ol3/pull/4539) - Ignore index.html in example list ([@fredj](https://github.com/fredj))
* [#4536](https://github.com/openlayers/ol3/pull/4536) - Register the change callback when the tile is enqueued ([@fredj](https://github.com/fredj))
* [#4528](https://github.com/openlayers/ol3/pull/4528) - Remove redundant code from ol.featureloader.tile ([@ahocevar](https://github.com/ahocevar))
* [#4535](https://github.com/openlayers/ol3/pull/4535) - Do not use an array for a single style ([@ahocevar](https://github.com/ahocevar))
* [#4532](https://github.com/openlayers/ol3/pull/4532) - Mark olx.source.WMTSOptions#dimensions as not null ([@fredj](https://github.com/fredj))
* [#4530](https://github.com/openlayers/ol3/pull/4530) - Remove use of goog.isNull ([@fredj](https://github.com/fredj))
* [#4529](https://github.com/openlayers/ol3/pull/4529) - Update coding style rules ([@fredj](https://github.com/fredj))
* [#4518](https://github.com/openlayers/ol3/pull/4518) - Add support for OSM vector tiles ([@ahocevar](https://github.com/ahocevar))
* [#4524](https://github.com/openlayers/ol3/pull/4524) - Add example for rendering custom point symbols ([@ahocevar](https://github.com/ahocevar))
* [#4523](https://github.com/openlayers/ol3/pull/4523) - Allow rendering geometries to an arbitrary canvas ([@ahocevar](https://github.com/ahocevar))
* [#4525](https://github.com/openlayers/ol3/pull/4525) - Make render tests work on more devices ([@ahocevar](https://github.com/ahocevar))
* [#4515](https://github.com/openlayers/ol3/pull/4515) - Accept HTMLCanvasElement for an icon's img ([@ahocevar](https://github.com/ahocevar))
* [#4521](https://github.com/openlayers/ol3/pull/4521) - Fix imagestyle docs ([@ahocevar](https://github.com/ahocevar))
* [#4508](https://github.com/openlayers/ol3/pull/4508) - Remove unused files ([@fredj](https://github.com/fredj))
* [#4487](https://github.com/openlayers/ol3/pull/4487) - Remove fallback css color ([@fredj](https://github.com/fredj))
* [#4502](https://github.com/openlayers/ol3/pull/4502) - Improve ol.source.WMTS.optionsFromCapabilities jsdoc layout ([@fredj](https://github.com/fredj))
* [#4511](https://github.com/openlayers/ol3/pull/4511) - Minor code cleanup ([@fredj](https://github.com/fredj))
* [#4510](https://github.com/openlayers/ol3/pull/4510) - Adding a check just in case the projection is not defined/supported ([@GeoCat](https://github.com/GeoCat))
* [#4505](https://github.com/openlayers/ol3/pull/4505) - Remove use of goog.object.getKeys ([@fredj](https://github.com/fredj))
* [#4472](https://github.com/openlayers/ol3/pull/4472) - Do not ignore layer filter for unmanaged layers ([@ahocevar](https://github.com/ahocevar))
* [#4476](https://github.com/openlayers/ol3/pull/4476) - Remove use of goog.functions.constant ([@fredj](https://github.com/fredj))
* [#4484](https://github.com/openlayers/ol3/pull/4484) - Remove use of goog.dom.createDom ([@fredj](https://github.com/fredj))
* [#4486](https://github.com/openlayers/ol3/pull/4486) - Remove note about DragZoom and vector support ([@fredj](https://github.com/fredj))
* [#4483](https://github.com/openlayers/ol3/pull/4483) - Remove use of goog.object.containsKey ([@fredj](https://github.com/fredj))
* [#4475](https://github.com/openlayers/ol3/pull/4475) - Fix up failing tests in Internet Explorer ([@bartvde](https://github.com/bartvde))
* [#4485](https://github.com/openlayers/ol3/pull/4485) - Use appendChild instead of goog.dom.append ([@fredj](https://github.com/fredj))
* [#4481](https://github.com/openlayers/ol3/pull/4481) - Remove blur workaround in ol.control.Attribution ([@fredj](https://github.com/fredj))
* [#4479](https://github.com/openlayers/ol3/pull/4479) - Export ol.interaction.Interaction#getMap function ([@fredj](https://github.com/fredj))
* [#4478](https://github.com/openlayers/ol3/pull/4478) - Fix olx.control.FullScreenOptions#label apidoc ([@fredj](https://github.com/fredj))
* [#4477](https://github.com/openlayers/ol3/pull/4477) - Replace goog.nullFunction with ol.nullFunction ([@fredj](https://github.com/fredj))
* [#4474](https://github.com/openlayers/ol3/pull/4474) - Remove use of goog.dom.createElement and goog.dom.createTextNode ([@fredj](https://github.com/fredj))
* [#4469](https://github.com/openlayers/ol3/pull/4469) - Upgrade to JSTS 0.17.0 in example ([@bjornharrtell](https://github.com/bjornharrtell))
* [#4465](https://github.com/openlayers/ol3/pull/4465) - Update handlebars to version 4.0.5 🚀 ([@openlayers](https://github.com/openlayers))
* [#4464](https://github.com/openlayers/ol3/pull/4464) - Merge in changes from the 3.11.2 release. ([@openlayers](https://github.com/openlayers))
* [#4463](https://github.com/openlayers/ol3/pull/4463) - Remove use of goog.array.sort ([@fredj](https://github.com/fredj))
* [#4450](https://github.com/openlayers/ol3/pull/4450) - Fix select interaction regression caused by #4391 ([@ahocevar](https://github.com/ahocevar))
* [#4458](https://github.com/openlayers/ol3/pull/4458) - Remove extra space in type annotation ([@fredj](https://github.com/fredj))
* [#4420](https://github.com/openlayers/ol3/pull/4420) - Remove Bootstrap and jQuery from example snippets. ([@openlayers](https://github.com/openlayers))
* [#4442](https://github.com/openlayers/ol3/pull/4442) - Use jsdoc@3.4.0. ([@tschaub](https://github.com/tschaub))
* [#4449](https://github.com/openlayers/ol3/pull/4449) - Change the label of the full screen button to be more intuitive ([@bartvde](https://github.com/bartvde))
* [#4448](https://github.com/openlayers/ol3/pull/4448) - Check ol.source.UrlTile#urls property for null value ([@fredj](https://github.com/fredj))
* [#4440](https://github.com/openlayers/ol3/pull/4440) - Raster reprojection tutorial ([@klokantech](https://github.com/klokantech))
* [#4439](https://github.com/openlayers/ol3/pull/4439) - Allow '' for crossOrigin (as Anonymous alias) ([@ahocevar](https://github.com/ahocevar))
* [#4429](https://github.com/openlayers/ol3/pull/4429) - Dispatch a change event only if the value changes ([@fredj](https://github.com/fredj))
* [#4435](https://github.com/openlayers/ol3/pull/4435) - Remove unnecessary cast ([@fredj](https://github.com/fredj))
* [#4434](https://github.com/openlayers/ol3/pull/4434) - Remove unused local variables ([@fredj](https://github.com/fredj))
* [#4433](https://github.com/openlayers/ol3/pull/4433) - Remove unused local variables ([@fredj](https://github.com/fredj))
* [#4140](https://github.com/openlayers/ol3/pull/4140) - Add flight animation example ([@tsauerwein](https://github.com/tsauerwein))
* [#4428](https://github.com/openlayers/ol3/pull/4428) - Add imageSize regression test for ol.source.ImageWMS ([@ahocevar](https://github.com/ahocevar))
* [#4426](https://github.com/openlayers/ol3/pull/4426) - Improve ol.source.StaticImage ([@ahocevar](https://github.com/ahocevar))
* [#4425](https://github.com/openlayers/ol3/pull/4425) - Test number property with !== undefined ([@fredj](https://github.com/fredj))
* [#4423](https://github.com/openlayers/ol3/pull/4423) - Update mocha to version 2.3.4 🚀 ([@openlayers](https://github.com/openlayers))
* [#4416](https://github.com/openlayers/ol3/pull/4416) - Update clean-css to version 3.4.8 🚀 ([@openlayers](https://github.com/openlayers))
* [#4415](https://github.com/openlayers/ol3/pull/4415) - Scale StaticImage image to imageExtent ([@ahocevar](https://github.com/ahocevar))
* [#4414](https://github.com/openlayers/ol3/pull/4414) - Remove ol.ImageUrlFunction ([@ahocevar](https://github.com/ahocevar))
* [#4389](https://github.com/openlayers/ol3/pull/4389) - Smooth transitions on parameter changes ([@elemoine](https://github.com/elemoine))
* [#4410](https://github.com/openlayers/ol3/pull/4410) - Merge in changes from the 3.11.1 release. ([@openlayers](https://github.com/openlayers))
* [#4401](https://github.com/openlayers/ol3/pull/4401) - Allow style function to return a style. ([@tschaub](https://github.com/tschaub))
* [#4404](https://github.com/openlayers/ol3/pull/4404) - Set correctly the opt_this parameter when writing a KML document ([@oterral](https://github.com/oterral))
* [#4397](https://github.com/openlayers/ol3/pull/4397) - Update glob to version 6.0.1 🚀 ([@openlayers](https://github.com/openlayers))
* [#4362](https://github.com/openlayers/ol3/pull/4362) - Rotate control now takes optional resetNorth function. ([@tamarmot](https://github.com/tamarmot))

11
changelog/v3.12.1.md Normal file
View File

@@ -0,0 +1,11 @@
# v3.12.1
## Summary
The v3.12.1 release is a patch release that addresses a few regressions in the v3.12.0 release. See the [v3.12.0 release notes](https://github.com/openlayers/ol3/releases/tag/v3.12.0) for details on upgrading from v3.11.
## Fixes
* [#4578](https://github.com/openlayers/ol3/pull/4578) - Fix apidoc landing page markup ([@ahocevar](https://github.com/ahocevar))
* [#4570](https://github.com/openlayers/ol3/pull/4570) - Rename defaultSort to numberSafeCompareFunction on ol.array ([@bartvde](https://github.com/bartvde))
* [#4567](https://github.com/openlayers/ol3/pull/4567) - Always pass on a compare function to sort ([@bartvde](https://github.com/bartvde))

109
changelog/v3.13.0.md Normal file
View File

@@ -0,0 +1,109 @@
# v3.13.0
## Summary
The v3.13.0 release includes features and fixes from 68 pull requests since the v3.12.1 release. New features and improvements include:
* Improved tiles rendering for the canvas renderer
* Improved MapQuest rendering
* Add color option to ol.style.Icon
* Load TileJSON sources via XMLHttpRequest by default
* Add new ol.geom.LineString#getCoordinateAt function
* Simplify meters per unit handling
* Use ESLint as a replacement for gjslint.py and jshint
## Upgrade notes
#### `proj4js` integration
Before this release, OpenLayers depended on the global proj4 namespace. When using a module loader like Browserify, you might not want to depend on the global `proj4` namespace. You can use the `ol.proj.setProj4` function to set the proj4 function object. For example in a browserify ES6 environment:
```js
import ol from 'openlayers';
import proj4 from 'proj4';
ol.proj.setProj4(proj4);
```
#### `ol.source.TileJSON` changes
The `ol.source.TileJSON` now uses `XMLHttpRequest` to load the TileJSON instead of JSONP with callback.
When using server without proper CORS support, `jsonp: true` option can be passed to the constructor to get the same behavior as before:
```js
new ol.source.TileJSON({
url: 'http://serverwithoutcors.com/tilejson.json',
jsonp: true
})
```
Also for Mapbox v3, make sure you use urls ending with `.json` (which are able to handle both `XMLHttpRequest` and JSONP) instead of `.jsonp`.
## Full list of changes
* [#4694](https://github.com/openlayers/ol3/pull/4694) - Fix eslint errors in wms-time example ([@fredj](https://github.com/fredj))
* [#4527](https://github.com/openlayers/ol3/pull/4527) - Add support for smooth TileWMS dimensions ([@bartvde](https://github.com/bartvde))
* [#4691](https://github.com/openlayers/ol3/pull/4691) - Updated Bing Maps key. ([@tschaub](https://github.com/tschaub))
* [#4673](https://github.com/openlayers/ol3/pull/4673) - Respect fixed tile url functions when setting url(s) ([@ahocevar](https://github.com/ahocevar))
* [#4689](https://github.com/openlayers/ol3/pull/4689) - Revert "Do not render in handleDownEvent" ([@openlayers](https://github.com/openlayers))
* [#4688](https://github.com/openlayers/ol3/pull/4688) - Give map a focus-outline in accessible-example ([@marcjansen](https://github.com/marcjansen))
* [#4642](https://github.com/openlayers/ol3/pull/4642) - Move the icon style color to its own example ([@alexbrault](https://github.com/alexbrault))
* [#4685](https://github.com/openlayers/ol3/pull/4685) - Remove bin/check-whitespace.py ([@fredj](https://github.com/fredj))
* [#4684](https://github.com/openlayers/ol3/pull/4684) - Update eslint-config-openlayers to version 3.0.0 🚀 ([@openlayers](https://github.com/openlayers))
* [#4677](https://github.com/openlayers/ol3/pull/4677) - Make pixel projection handling work in compiled mode ([@ahocevar](https://github.com/ahocevar))
* [#4639](https://github.com/openlayers/ol3/pull/4639) - Remove use of goog.bind and use ES5 .bind. ([@nicholas-l](https://github.com/nicholas-l))
* [#4655](https://github.com/openlayers/ol3/pull/4655) - Update browserify to version 13.0.0 🚀 ([@openlayers](https://github.com/openlayers))
* [#4666](https://github.com/openlayers/ol3/pull/4666) - Add a 'boxdrag' event to ol.interaction.DragBox. Resolves #4563 . ([@WeaveTeam](https://github.com/WeaveTeam))
* [#4669](https://github.com/openlayers/ol3/pull/4669) - Remove reference to Closure Linter in CONTRIBUTING.md ([@fredj](https://github.com/fredj))
* [#4665](https://github.com/openlayers/ol3/pull/4665) - Update istanbul to version 0.4.2 🚀 ([@openlayers](https://github.com/openlayers))
* [#4663](https://github.com/openlayers/ol3/pull/4663) - Update glob to version 6.0.4 🚀 ([@openlayers](https://github.com/openlayers))
* [#4667](https://github.com/openlayers/ol3/pull/4667) - Fix rendering of transparent MapQuest layer type ([@klokantech](https://github.com/klokantech))
* [#4661](https://github.com/openlayers/ol3/pull/4661) - Fixes #4654 Developer Documentation Updated ([@gaf-ag](https://github.com/gaf-ag))
* [#4658](https://github.com/openlayers/ol3/pull/4658) - Update jquery to version 2.2.0 🚀 ([@openlayers](https://github.com/openlayers))
* [#4659](https://github.com/openlayers/ol3/pull/4659) - Make sure icons show up in Safari ([@bartvde](https://github.com/bartvde))
* [#4652](https://github.com/openlayers/ol3/pull/4652) - Use map.getTargetElement instead of map.getTarget ([@fredj](https://github.com/fredj))
* [#4649](https://github.com/openlayers/ol3/pull/4649) - Missing parameter description for ol.source.Tile#getOpaque ([@klokantech](https://github.com/klokantech))
* [#4602](https://github.com/openlayers/ol3/pull/4602) - Use ESLint. ([@tschaub](https://github.com/tschaub))
* [#4628](https://github.com/openlayers/ol3/pull/4628) - Fix for reprojecting opaque tile sources ([@klokantech](https://github.com/klokantech))
* [#4618](https://github.com/openlayers/ol3/pull/4618) - Update resemblejs to version 2.1.0 🚀 ([@openlayers](https://github.com/openlayers))
* [#4647](https://github.com/openlayers/ol3/pull/4647) - Proper rounding for possibly negative numbers ([@ahocevar](https://github.com/ahocevar))
* [#4641](https://github.com/openlayers/ol3/pull/4641) - Remove extra options from icon example. ([@tschaub](https://github.com/tschaub))
* [#4629](https://github.com/openlayers/ol3/pull/4629) - Simplify scaleline calculation ([@ahocevar](https://github.com/ahocevar))
* [#4457](https://github.com/openlayers/ol3/pull/4457) - Add color option to ol.style.Icon ([@alexbrault](https://github.com/alexbrault))
* [#4638](https://github.com/openlayers/ol3/pull/4638) - Do not rely on projection extent ([@ahocevar](https://github.com/ahocevar))
* [#4635](https://github.com/openlayers/ol3/pull/4635) - Update async to version 1.5.2 🚀 ([@openlayers](https://github.com/openlayers))
* [#4581](https://github.com/openlayers/ol3/pull/4581) - Do not render in handleDownEvent ([@ahocevar](https://github.com/ahocevar))
* [#4541](https://github.com/openlayers/ol3/pull/4541) - Add new ol.geom.LineString#getCoordinateAt function ([@fredj](https://github.com/fredj))
* [#4489](https://github.com/openlayers/ol3/pull/4489) - Update phantomjs to version 1.9.19 🚀 ([@openlayers](https://github.com/openlayers))
* [#4625](https://github.com/openlayers/ol3/pull/4625) - Use XHR by default to load TileJSON in ol.source.TileJSON ([@klokantech](https://github.com/klokantech))
* [#4622](https://github.com/openlayers/ol3/pull/4622) - Update fs-extra to version 0.26.4 🚀 ([@openlayers](https://github.com/openlayers))
* [#4630](https://github.com/openlayers/ol3/pull/4630) - Simplify meters per unit handling ([@ahocevar](https://github.com/ahocevar))
* [#4490](https://github.com/openlayers/ol3/pull/4490) - Update istanbul to version 0.4.1 🚀 ([@openlayers](https://github.com/openlayers))
* [#4574](https://github.com/openlayers/ol3/pull/4574) - Added boxEndCondition to DragBoxOptions to replace the hardcoded chec… ([@WeaveTeam](https://github.com/WeaveTeam))
* [#4553](https://github.com/openlayers/ol3/pull/4553) - Update mustache to version 2.2.1 🚀 ([@openlayers](https://github.com/openlayers))
* [#4626](https://github.com/openlayers/ol3/pull/4626) - Fixed documentation error ([@simonseyock](https://github.com/simonseyock))
* [#4606](https://github.com/openlayers/ol3/pull/4606) - Include originating MapBrowserEvent in ol.DragBoxEvent ([@fredj](https://github.com/fredj))
* [#4614](https://github.com/openlayers/ol3/pull/4614) - Remove checksum interface. ([@tschaub](https://github.com/tschaub))
* [#4613](https://github.com/openlayers/ol3/pull/4613) - Include own layer in layerFilter and only select unselected features ([@ahocevar](https://github.com/ahocevar))
* [#4612](https://github.com/openlayers/ol3/pull/4612) - Set oli.source.VectorEvent#feature to ol.Feature|undefined ([@fredj](https://github.com/fredj))
* [#4620](https://github.com/openlayers/ol3/pull/4620) - Fix olx.format.PolylineOptions#factor type ([@fredj](https://github.com/fredj))
* [#4621](https://github.com/openlayers/ol3/pull/4621) - Fix olx.format.GPXOptions#readExtensions type ([@fredj](https://github.com/fredj))
* [#4619](https://github.com/openlayers/ol3/pull/4619) - Add option to load TileJSON via XHR ([@klokantech](https://github.com/klokantech))
* [#4617](https://github.com/openlayers/ol3/pull/4617) - Add missing return type to GeoJSON format ([@gberaudo](https://github.com/gberaudo))
* [#4615](https://github.com/openlayers/ol3/pull/4615) - Adjust copyright to include 2016 ([@marcjansen](https://github.com/marcjansen))
* [#4616](https://github.com/openlayers/ol3/pull/4616) - Update closure-util to version 1.10.0 🚀 ([@openlayers](https://github.com/openlayers))
* [#4596](https://github.com/openlayers/ol3/pull/4596) - Use consistent tile coordinate keys ([@ahocevar](https://github.com/ahocevar))
* [#4609](https://github.com/openlayers/ol3/pull/4609) - Add ol.proj.setProj4 function ([@bartvde](https://github.com/bartvde))
* [#4603](https://github.com/openlayers/ol3/pull/4603) - Update async to version 1.5.1 🚀 ([@openlayers](https://github.com/openlayers))
* [#4604](https://github.com/openlayers/ol3/pull/4604) - Update clean-css to version 3.4.9 🚀 ([@openlayers](https://github.com/openlayers))
* [#4600](https://github.com/openlayers/ol3/pull/4600) - Update glob to version 6.0.3 🚀 ([@openlayers](https://github.com/openlayers))
* [#4595](https://github.com/openlayers/ol3/pull/4595) - Pass 'opaque' option on to superclass ([@ahocevar](https://github.com/ahocevar))
* [#4598](https://github.com/openlayers/ol3/pull/4598) - Make ol.source.Tile#getTilePixelRatio work correctly for all sources ([@klokantech](https://github.com/klokantech))
* [#4594](https://github.com/openlayers/ol3/pull/4594) - Fix for TileQueue gradually choking up when using raster reprojection ([@klokantech](https://github.com/klokantech))
* [#4557](https://github.com/openlayers/ol3/pull/4557) - Conditionally render tiles to a separate tile canvas ([@ahocevar](https://github.com/ahocevar))
* [#4580](https://github.com/openlayers/ol3/pull/4580) - Update fs-extra to version 0.26.3 🚀 ([@openlayers](https://github.com/openlayers))
* [#4579](https://github.com/openlayers/ol3/pull/4579) - Release v3.12.1 ([@openlayers](https://github.com/openlayers))
* [#4578](https://github.com/openlayers/ol3/pull/4578) - Fix apidoc landing page markup ([@ahocevar](https://github.com/ahocevar))
* [#4575](https://github.com/openlayers/ol3/pull/4575) - Update rbush to version 1.4.2 🚀 ([@openlayers](https://github.com/openlayers))
* [#4571](https://github.com/openlayers/ol3/pull/4571) - Correct typedef of selectinteraction options obj ([@marcjansen](https://github.com/marcjansen))
* [#4570](https://github.com/openlayers/ol3/pull/4570) - Rename defaultSort to numberSafeCompareFunction on ol.array ([@bartvde](https://github.com/bartvde))
* [#4567](https://github.com/openlayers/ol3/pull/4567) - Always pass on a compare function to sort ([@bartvde](https://github.com/bartvde))
* [#4001](https://github.com/openlayers/ol3/pull/4001) - Export PDF's using jsPDF ([@bartvde](https://github.com/bartvde))

10
changelog/v3.13.1.md Normal file
View File

@@ -0,0 +1,10 @@
# v3.13.1
## Summary
The v3.13.1 release is a patch release that addresses a few regressions in the v3.13.0 release. See the [v3.13.0 release notes](https://github.com/openlayers/ol3/releases/tag/v3.13.0) for details on upgrading from v3.12.
## Fixes
* [#4736](https://github.com/openlayers/ol3/pull/4736) - Properly detect feature on unmanaged layer for toggle selection ([@ahocevar](https://github.com/ahocevar))
* [#4777](https://github.com/openlayers/ol3/pull/4777) - Fix source.UrlTile URL expansion ([@gberaudo](https://github.com/gberaudo))

154
changelog/v3.14.0.md Normal file
View File

@@ -0,0 +1,154 @@
# v3.14.0
## Summary
The v3.14.0 release includes features and fixes from 93 pull requests since the v3.13.1 release. New features and improvements include:
* New `source` option for the `ol.control.FullScreen`, to allow including other elements besides the map in a full screen view (#4679).
* New `target` property for the Drag&Drop interaction allows using a different drop target than the map viewport (#4876).
* `ol.style.RegularShape` has a new `rotateWithView` option, for controlling how regular shape symbols are rendered on rotated views (#4698).
* New `layers` option for `ol.format.WMSGetFeatureInfo` format, to selectively only read features from specific layers (#4700).
* New `precision` parameter for formatting coordinates with `ol.coordinate.toStringHDMS` (#4787).
* Smarter tile queue for improved tile loading user experience when more than one tile layer is used (#4794).
* Improved rendering performance for tile layers by rendering tiles directly to the map canvas (#4597).
* The `goog.events` event system was replaced with our own lightweight event system. This significally reduces the build size (#4711). Replacement of other `goog.*` components with ES5 features or custom code marks a huge step towards the complete removal of the Closure Library dependency.
## Upgrade notes
#### Internet Explorer 9 support
As of this release, OpenLayers requires a `requestAnimationFrame`/`cancelAnimationFrame` polyfill for IE 9 support. See http://cdn.polyfill.io/v2/docs/features/#requestAnimationFrame.
#### Layer pre-/postcompose event changes
It is the responsibility of the application to undo any canvas transform changes at the end of a layer 'precompose' or 'postcompose' handler. Previously, it was ok to set a null transform. The API now guarantees a device pixel coordinate system on the canvas with its origin in the top left corner of the map. However, applications should not rely on the underlying canvas being the same size as the visible viewport.
Old code:
```js
layer.on('precompose', function(e) {
// rely on canvas dimensions to move coordinate origin to center
e.context.translate(e.context.canvas.width / 2, e.context.canvas.height / 2);
e.context.scale(3, 3);
// draw an x in the center of the viewport
e.context.moveTo(-20, -20);
e.context.lineTo(20, 20);
e.context.moveTo(-20, 20);
e.context.lineTo(20, -20);
// rely on the canvas having a null transform
e.context.setTransform(1, 0, 0, 1, 0, 0);
});
```
New code:
```js
layer.on('precompose', function(e) {
// use map size and pixel ratio to move coordinate origin to center
var size = map.getSize();
var pixelRatio = e.frameState.pixelRatio;
e.context.translate(size[0] / 2 * pixelRatio, size[1] / 2 * pixelRatio);
e.context.scale(3, 3);
// draw an x in the center of the viewport
e.context.moveTo(-20, -20);
e.context.lineTo(20, 20);
e.context.moveTo(-20, 20);
e.context.lineTo(20, -20);
// undo all transforms
e.context.scale(1 / 3, 1 / 3);
e.context.translate(-size[0] / 2 * pixelRatio, -size[1] / 2 * pixelRatio);
});
```
## Full list of changes
* [#4896](https://github.com/openlayers/ol3/pull/4896) - Ignore XML sequence when comparing GML ([@ahocevar](https://github.com/ahocevar))
* [#4890](https://github.com/openlayers/ol3/pull/4890) - ol.format.KML cleanup ([@fredj](https://github.com/fredj))
* [#4894](https://github.com/openlayers/ol3/pull/4894) - Only run raster operations after image sources have loaded. ([@tschaub](https://github.com/tschaub))
* [#4892](https://github.com/openlayers/ol3/pull/4892) - Stricter check for ImageData constructor ([@ahocevar](https://github.com/ahocevar))
* [#4891](https://github.com/openlayers/ol3/pull/4891) - Fix tests so they all pass in IE9 ([@ahocevar](https://github.com/ahocevar))
* [#4889](https://github.com/openlayers/ol3/pull/4889) - Use requestAnimation polyfill for examples and update release notes ([@ahocevar](https://github.com/ahocevar))
* [#4887](https://github.com/openlayers/ol3/pull/4887) - Use less aggressive DOM function overrides ([@ahocevar](https://github.com/ahocevar))
* [#4885](https://github.com/openlayers/ol3/pull/4885) - Mark overlayContainer and overlayContainerStopEvent as non-nullable ([@fredj](https://github.com/fredj))
* [#4884](https://github.com/openlayers/ol3/pull/4884) - Remove use of goog.math.isFiniteNumber() ([@fredj](https://github.com/fredj))
* [#4881](https://github.com/openlayers/ol3/pull/4881) - Update jquery to version 2.2.1 🚀 ([@openlayers](https://github.com/openlayers))
* [#4780](https://github.com/openlayers/ol3/pull/4780) - Adapt the code for the new closure-compiler version ([@fredj](https://github.com/fredj))
* [#3453](https://github.com/openlayers/ol3/pull/3453) - Consider multi in add/remove/toggle select logic ([@bjornharrtell](https://github.com/bjornharrtell))
* [#4876](https://github.com/openlayers/ol3/pull/4876) - Add `target` property to Drag&Drop interaction ([@tsauerwein](https://github.com/tsauerwein))
* [#4854](https://github.com/openlayers/ol3/pull/4854) - Always report skipped feature hits for the original layer ([@ahocevar](https://github.com/ahocevar))
* [#4877](https://github.com/openlayers/ol3/pull/4877) - Update eslint to version 2.2.0 🚀 ([@openlayers](https://github.com/openlayers))
* [#4870](https://github.com/openlayers/ol3/pull/4870) - Reuse dragListenerKeys_ local variable ([@fredj](https://github.com/fredj))
* [#4721](https://github.com/openlayers/ol3/pull/4721) - Fix reprojection of raster sources with gutter ([@klokantech](https://github.com/klokantech))
* [#4874](https://github.com/openlayers/ol3/pull/4874) - Assert we have a feature id ([@bartvde](https://github.com/bartvde))
* [#4869](https://github.com/openlayers/ol3/pull/4869) - Improve precision of ol.reproj.render ([@klokantech](https://github.com/klokantech))
* [#4866](https://github.com/openlayers/ol3/pull/4866) - Use requestAnimationFrame polyfill (for IE9) ([@ahocevar](https://github.com/ahocevar))
* [#4863](https://github.com/openlayers/ol3/pull/4863) - Remove use of goog.dom.createElement ([@fredj](https://github.com/fredj))
* [#4864](https://github.com/openlayers/ol3/pull/4864) - Use querySelectorAll instead of goog.dom.getElementsByClass ([@fredj](https://github.com/fredj))
* [#4597](https://github.com/openlayers/ol3/pull/4597) - Render tiles directly to the map canvas ([@ahocevar](https://github.com/ahocevar))
* [#4862](https://github.com/openlayers/ol3/pull/4862) - Add OSGeo badge ([@ahocevar](https://github.com/ahocevar))
* [#4845](https://github.com/openlayers/ol3/pull/4845) - Fix geolocation error cast ([@gberaudo](https://github.com/gberaudo))
* [#4851](https://github.com/openlayers/ol3/pull/4851) - Don't use goog.isBoolean() ([@marcjansen](https://github.com/marcjansen))
* [#4852](https://github.com/openlayers/ol3/pull/4852) - Don't use goog.isString() ([@marcjansen](https://github.com/marcjansen))
* [#4849](https://github.com/openlayers/ol3/pull/4849) - Fix docs of LogoOptions.prototype.src ([@openlayers](https://github.com/openlayers))
* [#4794](https://github.com/openlayers/ol3/pull/4794) - Make tile loading count no longer depend on source count ([@ahocevar](https://github.com/ahocevar))
* [#4843](https://github.com/openlayers/ol3/pull/4843) - Remove use of goog.dom.getParentElement ([@fredj](https://github.com/fredj))
* [#4839](https://github.com/openlayers/ol3/pull/4839) - Add template type to ol.Collection ([@fredj](https://github.com/fredj))
* [#4847](https://github.com/openlayers/ol3/pull/4847) - Update eslint to version 2.1.0 🚀 ([@openlayers](https://github.com/openlayers))
* [#4632](https://github.com/openlayers/ol3/pull/4632) - Overloading fill color (polygon or text) with CanvasPattern and CanvasGradient ([@bjnsn](https://github.com/bjnsn))
* [#4842](https://github.com/openlayers/ol3/pull/4842) - Remove use of goog.dom.createDom ([@fredj](https://github.com/fredj))
* [#4808](https://github.com/openlayers/ol3/pull/4808) - Type cleanup ([@fredj](https://github.com/fredj))
* [#4737](https://github.com/openlayers/ol3/pull/4737) - Use olx.format.ReadOptions in ol.interaction.DragAndDrop ([@fredj](https://github.com/fredj))
* [#4830](https://github.com/openlayers/ol3/pull/4830) - Make sure window.proj4 is always restored in tests ([@ahocevar](https://github.com/ahocevar))
* [#4838](https://github.com/openlayers/ol3/pull/4838) - Use regular expression instead of String#endsWith() check ([@ahocevar](https://github.com/ahocevar))
* [#4837](https://github.com/openlayers/ol3/pull/4837) - Update metalsmith-layouts to version 1.5.4 🚀 ([@openlayers](https://github.com/openlayers))
* [#4836](https://github.com/openlayers/ol3/pull/4836) - Use lowercase for all user agent checks ([@ahocevar](https://github.com/ahocevar))
* [#4833](https://github.com/openlayers/ol3/pull/4833) - Upgrade linter and config. ([@tschaub](https://github.com/tschaub))
* [#4831](https://github.com/openlayers/ol3/pull/4831) - Add navigation header to examples page ([@jonataswalker](https://github.com/jonataswalker))
* [#4824](https://github.com/openlayers/ol3/pull/4824) - Don't use goog.string.newlines.* ([@marcjansen](https://github.com/marcjansen))
* [#4825](https://github.com/openlayers/ol3/pull/4825) - Don't use goog.string.isEmpty ([@marcjansen](https://github.com/marcjansen))
* [#4823](https://github.com/openlayers/ol3/pull/4823) - Fix type for layers option on ol.interaction.Select ([@ahocevar](https://github.com/ahocevar))
* [#4815](https://github.com/openlayers/ol3/pull/4815) - wrapX false in synthetic examples ([@fredj](https://github.com/fredj))
* [#4810](https://github.com/openlayers/ol3/pull/4810) - Add checks for undefined in controls ([@gberaudo](https://github.com/gberaudo))
* [#4787](https://github.com/openlayers/ol3/pull/4787) - Add precision parameter for HDMS coordinate ([@pfanguin](https://github.com/pfanguin))
* [#4811](https://github.com/openlayers/ol3/pull/4811) - Make ol.style.Style a @struct ([@fredj](https://github.com/fredj))
* [#4800](https://github.com/openlayers/ol3/pull/4800) - Update phantomjs-prebuilt to version 2.1.4 🚀 ([@openlayers](https://github.com/openlayers))
* [#4792](https://github.com/openlayers/ol3/pull/4792) - Use ol.events.listen instead of ol.Observable#on ([@fredj](https://github.com/fredj))
* [#4796](https://github.com/openlayers/ol3/pull/4796) - Remove use of goog.isString() ([@marcjansen](https://github.com/marcjansen))
* [#4795](https://github.com/openlayers/ol3/pull/4795) - Cleanup after goog.array, goog.object and goog.isDef removal ([@ahocevar](https://github.com/ahocevar))
* [#4791](https://github.com/openlayers/ol3/pull/4791) - Remove unnecessary cast ([@fredj](https://github.com/fredj))
* [#4778](https://github.com/openlayers/ol3/pull/4778) - Remove use of goog.object. ([@tschaub](https://github.com/tschaub))
* [#4789](https://github.com/openlayers/ol3/pull/4789) - Use ol.array instead of goog.array ([@fredj](https://github.com/fredj))
* [#4788](https://github.com/openlayers/ol3/pull/4788) - Remove unnecessary newlines ([@fredj](https://github.com/fredj))
* [#4731](https://github.com/openlayers/ol3/pull/4731) - Remove all remaining unnecessary casts ([@gberaudo](https://github.com/gberaudo))
* [#4776](https://github.com/openlayers/ol3/pull/4776) - Correct assertion message in ol.array.binarySearch-test ([@marcjansen](https://github.com/marcjansen))
* [#4711](https://github.com/openlayers/ol3/pull/4711) - Removal of goog.events.* ([@ahocevar](https://github.com/ahocevar))
* [#4777](https://github.com/openlayers/ol3/pull/4777) - Fix source.UrlTile URL expansion ([@gberaudo](https://github.com/gberaudo))
* [#4730](https://github.com/openlayers/ol3/pull/4730) - Document ol.Geolocation error event ([@fredj](https://github.com/fredj))
* [#4772](https://github.com/openlayers/ol3/pull/4772) - Use node.setAttribute to set namespaceURI of a node ([@adube](https://github.com/adube))
* [#4774](https://github.com/openlayers/ol3/pull/4774) - Update graceful-fs to version 4.1.3 🚀 ([@openlayers](https://github.com/openlayers))
* [#4680](https://github.com/openlayers/ol3/pull/4680) - Remove goog array. ([@nicholas-l](https://github.com/nicholas-l))
* [#4771](https://github.com/openlayers/ol3/pull/4771) - Use innerHTML instead of innerText to populate the status element ([@fredj](https://github.com/fredj))
* [#4769](https://github.com/openlayers/ol3/pull/4769) - Add opaque option to olx.source.OSMOptions ([@fredj](https://github.com/fredj))
* [#4736](https://github.com/openlayers/ol3/pull/4736) - Properly detect feature on unmanaged layer for toggle selection ([@ahocevar](https://github.com/ahocevar))
* [#4756](https://github.com/openlayers/ol3/pull/4756) - Remove VectorTile getSource re-definition of return value ([@adube](https://github.com/adube))
* [#4733](https://github.com/openlayers/ol3/pull/4733) - Avoid rendering too big and too small images for vector tiles ([@ahocevar](https://github.com/ahocevar))
* [#4754](https://github.com/openlayers/ol3/pull/4754) - Upgrade to mocha@2.4.5. ([@tschaub](https://github.com/tschaub))
* [#4750](https://github.com/openlayers/ol3/pull/4750) - Update metalsmith-layouts to version 1.4.4 🚀 ([@openlayers](https://github.com/openlayers))
* [#4751](https://github.com/openlayers/ol3/pull/4751) - Update phantomjs to version 2.1.3 🚀 ([@openlayers](https://github.com/openlayers))
* [#4741](https://github.com/openlayers/ol3/pull/4741) - Report on installed versions in Travis. ([@openlayers](https://github.com/openlayers))
* [#4742](https://github.com/openlayers/ol3/pull/4742) - Upgrade to eslint@2.0.0-beta.2. ([@tschaub](https://github.com/tschaub))
* [#4746](https://github.com/openlayers/ol3/pull/4746) - Downgrade to mocha@2.3.4. ([@tschaub](https://github.com/tschaub))
* [#4740](https://github.com/openlayers/ol3/pull/4740) - Update fs-extra to version 0.26.5 🚀 ([@openlayers](https://github.com/openlayers))
* [#4738](https://github.com/openlayers/ol3/pull/4738) - Add unit tests for ol.control.Rotate and ol.control.Zoom ([@fredj](https://github.com/fredj))
* [#4718](https://github.com/openlayers/ol3/pull/4718) - Improve raster reprojection behavior when tiles fail to load ([@klokantech](https://github.com/klokantech))
* [#4734](https://github.com/openlayers/ol3/pull/4734) - Update sinon to version 1.17.3 🚀 ([@openlayers](https://github.com/openlayers))
* [#4726](https://github.com/openlayers/ol3/pull/4726) - Update mocha to version 2.4.2 🚀 ([@openlayers](https://github.com/openlayers))
* [#4725](https://github.com/openlayers/ol3/pull/4725) - Untangle vector tile feature reprojection ([@ahocevar](https://github.com/ahocevar))
* [#4735](https://github.com/openlayers/ol3/pull/4735) - Add default value for defaultDataProjection ([@fredj](https://github.com/fredj))
* [#4732](https://github.com/openlayers/ol3/pull/4732) - Fix '@see' link in src/ol/deviceorientation.js ([@fredj](https://github.com/fredj))
* [#4720](https://github.com/openlayers/ol3/pull/4720) - Improve tileLoadFunction docs ([@ahocevar](https://github.com/ahocevar))
* [#4717](https://github.com/openlayers/ol3/pull/4717) - Update phantomjs to version 2.1.2 🚀 ([@openlayers](https://github.com/openlayers))
* [#4679](https://github.com/openlayers/ol3/pull/4679) - Add a source option for the full screen control ([@gaf-ag](https://github.com/gaf-ag))
* [#4712](https://github.com/openlayers/ol3/pull/4712) - Add missing JSDoc tags ([@fredj](https://github.com/fredj))
* [#4700](https://github.com/openlayers/ol3/pull/4700) - Add 'layers' option for WMSGetFeatureInfo format ([@adube](https://github.com/adube))
* [#4705](https://github.com/openlayers/ol3/pull/4705) - Remove remaining unnecessary ol.source.State casts ([@gberaudo](https://github.com/gberaudo))
* [#4703](https://github.com/openlayers/ol3/pull/4703) - Source options fixes. ([@gberaudo](https://github.com/gberaudo))
* [#4698](https://github.com/openlayers/ol3/pull/4698) - Add rotateWithView option to ol.style.RegularShape ([@fredj](https://github.com/fredj))
* [#4697](https://github.com/openlayers/ol3/pull/4697) - Bind tileUrlFunction to the source ([@gberaudo](https://github.com/gberaudo))

10
changelog/v3.14.1.md Normal file
View File

@@ -0,0 +1,10 @@
# v3.14.1
## Summary
The v3.14.1 release is a patch release that addresses a few regressions in the v3.14.0 release. See the [v3.14.0 release notes](https://github.com/openlayers/ol3/releases/tag/v3.14.0) for details on upgrading from v3.13.x.
## Fixes
* [#4939](https://github.com/openlayers/ol3/pull/4939) - Fix rendering of opaque layers with opacity != 1 ([@ahocevar](https://github.com/ahocevar))
* [#4921](https://github.com/openlayers/ol3/pull/4921) - Unlisten before calling listener and bind to target by default ([@ahocevar](https://github.com/ahocevar))

13
changelog/v3.14.2.md Normal file
View File

@@ -0,0 +1,13 @@
# v3.14.2
## Summary
The v3.14.2 release is a patch release that addresses a few regressions in the v3.14.1 release. See the [v3.14.0 release notes](https://github.com/openlayers/ol3/releases/tag/v3.14.0) for details on upgrading from v3.13.x.
## Fixes
* [#4963](https://github.com/openlayers/ol3/pull/4963) - Handle more XHR errors in the TileJSON source ([@tschaub](https://github.com/tschaub))
* [#4960](https://github.com/openlayers/ol3/pull/4960) - Simplify clipping of lower resolution regions ([@ahocevar](https://github.com/ahocevar))
* [#4958](https://github.com/openlayers/ol3/pull/4958) - Stop wheel events instead of DOMMouseScroll events ([@fredj](https://github.com/fredj))
* [#4956](https://github.com/openlayers/ol3/pull/4956) - Fix Examples layout page ([@jonataswalker](https://github.com/jonataswalker))
* [#4809](https://github.com/openlayers/ol3/pull/4809) - Fix multipolygon clone. ([@fperucic](https://github.com/fperucic))

204
changelog/v3.15.0.md Normal file
View File

@@ -0,0 +1,204 @@
# v3.15.0
## Summary
The v3.15.0 release includes features and fixes from 136 pull requests since the v3.14.2 release. New features and improvements include:
* Make ol.source.Cluster more flexible by adding a geometryFunction option (#4917).
* Add new CartoDB tile source (#4926).
* Improved rendering performance for vector layers by batching polygon fill and stroke instructions (#5149).
* Make the tile cache size configurable (#4805).
* Add new ol.geom.Geometry#rotate function (#4984).
* Accept simpler forms of specifying attribution(s) for sources (#5007).
* Support zooming out for ol.interaction.DragZoom (#5031).
## Upgrade notes
### v3.15.0
#### Internet Explorer 9 support
As of this release, OpenLayers requires a `classList` polyfill for IE 9 support. See http://cdn.polyfill.io/v2/docs/features#Element_prototype_classList.
#### Immediate rendering API
Listeners for `precompose`, `render`, and `postcompose` receive an event with a `vectorContext` property with methods for immediate vector rendering. The previous geometry drawing methods have been replaced with a single `vectorContext.drawGeometry(geometry)` method. If you were using any of the following experimental methods on the vector context, replace them with `drawGeometry`:
* Removed experimental geometry drawing methods: `drawPointGeometry`, `drawLineStringGeometry`, `drawPolygonGeometry`, `drawMultiPointGeometry`, `drawMultiLineStringGeometry`, `drawMultiPolygonGeometry`, and `drawCircleGeometry` (all have been replaced with `drawGeometry`).
In addition, the previous methods for setting style parts have been replaced with a single `vectorContext.setStyle(style)` method. If you were using any of the following experimental methods on the vector context, replace them with `setStyle`:
* Removed experimental style setting methods: `setFillStrokeStyle`, `setImageStyle`, `setTextStyle` (all have been replaced with `setStyle`).
Below is an example of how the vector context might have been used in the past:
```js
// OLD WAY, NO LONGER SUPPORTED
map.on('postcompose', function(event) {
event.vectorContext.setFillStrokeStyle(style.getFill(), style.getStroke());
event.vectorContext.drawPointGeometry(geometry);
});
```
Here is an example of how you could accomplish the same with the new methods:
```js
// NEW WAY, USE THIS INSTEAD OF THE CODE ABOVE
map.on('postcompose', function(event) {
event.vectorContext.setStyle(style);
event.vectorContext.drawGeometry(geometry);
});
```
A final change to the immediate rendering API is that `vectorContext.drawFeature()` calls are now "immediate" as well. The drawing now occurs synchronously. This means that any `zIndex` in a style passed to `drawFeature()` will be ignored. To achieve `zIndex` ordering, order your calls to `drawFeature()` instead.
#### Removal of `ol.DEFAULT_TILE_CACHE_HIGH_WATER_MARK`
The `ol.DEFAULT_TILE_CACHE_HIGH_WATER_MARK` define has been removed. The size of the cache can now be defined on every tile based `ol.source`:
```js
new ol.layer.Tile({
source: new ol.source.OSM({
cacheSize: 128
})
})
```
The default cache size is `2048`.
## Full list of changes
* [#4775](https://github.com/openlayers/ol3/pull/4775) - Remove goog.math.modulo and goog.math.lerp ([@nicholas-l](https://github.com/nicholas-l))
* [#5152](https://github.com/openlayers/ol3/pull/5152) - Cartodb cleanup ([@fredj](https://github.com/fredj))
* [#4804](https://github.com/openlayers/ol3/pull/4804) - Use Array.isArray instead of goog.isArray ([@fredj](https://github.com/fredj))
* [#5149](https://github.com/openlayers/ol3/pull/5149) - Batch polygon fill and stroke instructions ([@ahocevar](https://github.com/ahocevar))
* [#5159](https://github.com/openlayers/ol3/pull/5159) - Update eslint to version 2.6.0 🚀 ([@openlayers](https://github.com/openlayers))
* [#5160](https://github.com/openlayers/ol3/pull/5160) - Update clean-css to version 3.4.11 🚀 ([@openlayers](https://github.com/openlayers))
* [#5157](https://github.com/openlayers/ol3/pull/5157) - Improve docs for measure example ([@probins](https://github.com/probins))
* [#5155](https://github.com/openlayers/ol3/pull/5155) - Fix ol.source.Zoomify tests on firefox ([@fredj](https://github.com/fredj))
* [#5086](https://github.com/openlayers/ol3/pull/5086) - Get rid of goog.functions ([@bjornharrtell](https://github.com/bjornharrtell))
* [#5105](https://github.com/openlayers/ol3/pull/5105) - Support minZoom in ol.source.Stamen ([@fredj](https://github.com/fredj))
* [#4926](https://github.com/openlayers/ol3/pull/4926) - Add CartoDB tile source. ([@aisaacs](https://github.com/aisaacs))
* [#5151](https://github.com/openlayers/ol3/pull/5151) - Use fs-extra as fs, remove usage of graceful-fs ([@marcjansen](https://github.com/marcjansen))
* [#5124](https://github.com/openlayers/ol3/pull/5124) - Removed goog.dom.classlist ([@nicholas-l](https://github.com/nicholas-l))
* [#5150](https://github.com/openlayers/ol3/pull/5150) - Use fs-extra instead of wrench ([@fredj](https://github.com/fredj))
* [#5109](https://github.com/openlayers/ol3/pull/5109) - Add some tests for ol.source.TileUTFGrid ([@marcjansen](https://github.com/marcjansen))
* [#5139](https://github.com/openlayers/ol3/pull/5139) - Update closure-util to version 1.13.0 🚀 ([@openlayers](https://github.com/openlayers))
* [#5141](https://github.com/openlayers/ol3/pull/5141) - Reuse dragListenerKeys_ variable in ol.control.ZoomSlider ([@fredj](https://github.com/fredj))
* [#5118](https://github.com/openlayers/ol3/pull/5118) - Remove goog.dom.classlist usage ([@fredj](https://github.com/fredj))
* [#5115](https://github.com/openlayers/ol3/pull/5115) - Clarify that lineDash has no effect in IE 10 and below ([@marcjansen](https://github.com/marcjansen))
* [#5136](https://github.com/openlayers/ol3/pull/5136) - Update eslint to version 2.5.3 🚀 ([@openlayers](https://github.com/openlayers))
* [#5123](https://github.com/openlayers/ol3/pull/5123) - Update coveralls to version 2.11.9 🚀 ([@openlayers](https://github.com/openlayers))
* [#5131](https://github.com/openlayers/ol3/pull/5131) - Update phantomjs-prebuilt to version 2.1.7 🚀 ([@openlayers](https://github.com/openlayers))
* [#5122](https://github.com/openlayers/ol3/pull/5122) - Update browser support info in intro tutorial ([@probins](https://github.com/probins))
* [#5112](https://github.com/openlayers/ol3/pull/5112) - Add decimals option to format write ([@probins](https://github.com/probins))
* [#5120](https://github.com/openlayers/ol3/pull/5120) - Add tileJSON option to ol.source.TileUTFGrid ([@ahocevar](https://github.com/ahocevar))
* [#5119](https://github.com/openlayers/ol3/pull/5119) - Add ol.source.Raster events on API docs page ([@drnextgis](https://github.com/drnextgis))
* [#5116](https://github.com/openlayers/ol3/pull/5116) - Improve examples pages on mobile devices a bit ([@ahocevar](https://github.com/ahocevar))
* [#5113](https://github.com/openlayers/ol3/pull/5113) - Memory leak in ol.control.FullScreen ([@AvatharDG](https://github.com/AvatharDG))
* [#5111](https://github.com/openlayers/ol3/pull/5111) - Remove CSS filter in examples ([@fredj](https://github.com/fredj))
* [#5108](https://github.com/openlayers/ol3/pull/5108) - Remove unused ol.xml.getAttributeNodeNS function ([@fredj](https://github.com/fredj))
* [#5106](https://github.com/openlayers/ol3/pull/5106) - Get rid of goog.math.Vec2 ([@fredj](https://github.com/fredj))
* [#5096](https://github.com/openlayers/ol3/pull/5096) - Add tests for ol.source.Zoomify ([@marcjansen](https://github.com/marcjansen))
* [#5102](https://github.com/openlayers/ol3/pull/5102) - Fix typo in API docs ([@openlayers](https://github.com/openlayers))
* [#5098](https://github.com/openlayers/ol3/pull/5098) - Reintroduce log messages for relevant WebGL assertions ([@bjornharrtell](https://github.com/bjornharrtell))
* [#5094](https://github.com/openlayers/ol3/pull/5094) - FAQ: answer question 4 ([@probins](https://github.com/probins))
* [#5092](https://github.com/openlayers/ol3/pull/5092) - add raster.jsdoc ([@drnextgis](https://github.com/drnextgis))
* [#5081](https://github.com/openlayers/ol3/pull/5081) - Snap to vertices or edges ([@drnextgis](https://github.com/drnextgis))
* [#5090](https://github.com/openlayers/ol3/pull/5090) - Update custom-builds.md ([@probins](https://github.com/probins))
* [#5089](https://github.com/openlayers/ol3/pull/5089) - Test for both transform coords should use roughlyEqual ([@probins](https://github.com/probins))
* [#5080](https://github.com/openlayers/ol3/pull/5080) - Fix geojson write GeometryCollection ([@probins](https://github.com/probins))
* [#5088](https://github.com/openlayers/ol3/pull/5088) - DEVELOPING.md: remove section on running Travis on fork ([@probins](https://github.com/probins))
* [#5087](https://github.com/openlayers/ol3/pull/5087) - assertion to check that there's a DOM node for target element ([@drnextgis](https://github.com/drnextgis))
* [#5069](https://github.com/openlayers/ol3/pull/5069) - Update jquery to version 2.2.2 🚀 ([@openlayers](https://github.com/openlayers))
* [#5083](https://github.com/openlayers/ol3/pull/5083) - Remove unnecessary lineTo calls in immediate polygon rendering ([@tschaub](https://github.com/tschaub))
* [#5082](https://github.com/openlayers/ol3/pull/5082) - Get rid of goog.log. ([@bjornharrtell](https://github.com/bjornharrtell))
* [#5079](https://github.com/openlayers/ol3/pull/5079) - Correcting a typo in the upgrade notes ([@tschaub](https://github.com/tschaub))
* [#5076](https://github.com/openlayers/ol3/pull/5076) - Update phantomjs-prebuilt to version 2.1.6 🚀 ([@openlayers](https://github.com/openlayers))
* [#5077](https://github.com/openlayers/ol3/pull/5077) - Make immediate API uniformly synchronous. ([@tschaub](https://github.com/tschaub))
* [#5072](https://github.com/openlayers/ol3/pull/5072) - Add setStyle() and drawGeometry() to the immediate rendering API. ([@tschaub](https://github.com/tschaub))
* [#5074](https://github.com/openlayers/ol3/pull/5074) - Do not rotate map canvas after composition ([@ahocevar](https://github.com/ahocevar))
* [#5071](https://github.com/openlayers/ol3/pull/5071) - correct way to determine freehand mode is enabled ([@drnextgis](https://github.com/drnextgis))
* [#5066](https://github.com/openlayers/ol3/pull/5066) - Add more getters to ol.source.Vector ([@bartvde](https://github.com/bartvde))
* [#5064](https://github.com/openlayers/ol3/pull/5064) - Fix inconsistency in geom docs ([@probins](https://github.com/probins))
* [#5063](https://github.com/openlayers/ol3/pull/5063) - Remove inappropriate information from API docs ([@drnextgis](https://github.com/drnextgis))
* [#5061](https://github.com/openlayers/ol3/pull/5061) - Remove redundant required option ([@drnextgis](https://github.com/drnextgis))
* [#5058](https://github.com/openlayers/ol3/pull/5058) - Note in docs that DOM renderer can also render vectors ([@probins](https://github.com/probins))
* [#5056](https://github.com/openlayers/ol3/pull/5056) - Note in docs that WebGL can render points ([@probins](https://github.com/probins))
* [#5055](https://github.com/openlayers/ol3/pull/5055) - Fix cruft on kml scale output ([@probins](https://github.com/probins))
* [#5051](https://github.com/openlayers/ol3/pull/5051) - Handle aborted tiles in ol.TileQueue ([@fredj](https://github.com/fredj))
* [#5049](https://github.com/openlayers/ol3/pull/5049) - Supported browsers all have getComputedStyle ([@marcjansen](https://github.com/marcjansen))
* [#5048](https://github.com/openlayers/ol3/pull/5048) - Add tests for ol.dom methods ([@marcjansen](https://github.com/marcjansen))
* [#5031](https://github.com/openlayers/ol3/pull/5031) - support zooming out for ol.interaction.DragZoom ([@drnextgis](https://github.com/drnextgis))
* [#5036](https://github.com/openlayers/ol3/pull/5036) - Use imgSize when provided ([@ahocevar](https://github.com/ahocevar))
* [#5020](https://github.com/openlayers/ol3/pull/5020) - Update gaze to version 1.0.0 🚀 ([@openlayers](https://github.com/openlayers))
* [#5039](https://github.com/openlayers/ol3/pull/5039) - Update fs-extra to version 0.26.6 🚀 ([@openlayers](https://github.com/openlayers))
* [#5033](https://github.com/openlayers/ol3/pull/5033) - Document GPX geometry output types ([@probins](https://github.com/probins))
* [#5024](https://github.com/openlayers/ol3/pull/5024) - Resize the map canvas less aggressively ([@ahocevar](https://github.com/ahocevar))
* [#5000](https://github.com/openlayers/ol3/pull/5000) - Remove use of goog.math.Size and goog.style.setBorderBoxSize ([@fredj](https://github.com/fredj))
* [#5027](https://github.com/openlayers/ol3/pull/5027) - Clarify default value of featureProjection on geometry write ([@probins](https://github.com/probins))
* [#5019](https://github.com/openlayers/ol3/pull/5019) - Update eslint to version 2.4.0 🚀 ([@openlayers](https://github.com/openlayers))
* [#5016](https://github.com/openlayers/ol3/pull/5016) - Add basic tests for ol.geom.flat.center ([@marcjansen](https://github.com/marcjansen))
* [#5015](https://github.com/openlayers/ol3/pull/5015) - Update proj4 to version 2.3.14 🚀 ([@openlayers](https://github.com/openlayers))
* [#5013](https://github.com/openlayers/ol3/pull/5013) - Fix typo in test description ([@openlayers](https://github.com/openlayers))
* [#5007](https://github.com/openlayers/ol3/pull/5007) - Accept simpler forms of specifying attribution(s) for sources. ([@marcjansen](https://github.com/marcjansen))
* [#5011](https://github.com/openlayers/ol3/pull/5011) - Add missing setProjection function to ol.VectorTile API ([@ahocevar](https://github.com/ahocevar))
* [#5010](https://github.com/openlayers/ol3/pull/5010) - Add and fix API docs for ol.events.Event stack ([@ahocevar](https://github.com/ahocevar))
* [#5009](https://github.com/openlayers/ol3/pull/5009) - Update tutorials ([@gberaudo](https://github.com/gberaudo))
* [#5006](https://github.com/openlayers/ol3/pull/5006) - Use the maintained slimerjs package ([@ahocevar](https://github.com/ahocevar))
* [#5003](https://github.com/openlayers/ol3/pull/5003) - Add 'function' jsdoc tag to ol.geom.Geometry#rotate ([@fredj](https://github.com/fredj))
* [#5002](https://github.com/openlayers/ol3/pull/5002) - Update eslint-config-openlayers to version 4.1.0 🚀 ([@openlayers](https://github.com/openlayers))
* [#4999](https://github.com/openlayers/ol3/pull/4999) - Remove use of goog.dom.removeNode ([@fredj](https://github.com/fredj))
* [#4990](https://github.com/openlayers/ol3/pull/4990) - Add new ol.source.TileJSON#getTileJSON function ([@fredj](https://github.com/fredj))
* [#4998](https://github.com/openlayers/ol3/pull/4998) - Remove unused ol.Map#isDef function ([@fredj](https://github.com/fredj))
* [#4995](https://github.com/openlayers/ol3/pull/4995) - Remove unused ol.color functions. ([@tschaub](https://github.com/tschaub))
* [#4991](https://github.com/openlayers/ol3/pull/4991) - Do not remove listeners while dispatching event ([@ahocevar](https://github.com/ahocevar))
* [#4984](https://github.com/openlayers/ol3/pull/4984) - Add new ol.geom.Geometry#rotate function ([@fredj](https://github.com/fredj))
* [#4994](https://github.com/openlayers/ol3/pull/4994) - Add alpha default value to ol.Color array form ([@jonataswalker](https://github.com/jonataswalker))
* [#4992](https://github.com/openlayers/ol3/pull/4992) - Allow configuration of the test reporter ([@marcjansen](https://github.com/marcjansen))
* [#4988](https://github.com/openlayers/ol3/pull/4988) - Update phantomjs-prebuilt to version 2.1.5 🚀 ([@openlayers](https://github.com/openlayers))
* [#4983](https://github.com/openlayers/ol3/pull/4983) - Update Bing Maps Portal url ([@ahocevar](https://github.com/ahocevar))
* [#4981](https://github.com/openlayers/ol3/pull/4981) - Remove the viewport on map dispose ([@fredj](https://github.com/fredj))
* [#4980](https://github.com/openlayers/ol3/pull/4980) - Remove unused goog.require ([@fredj](https://github.com/fredj))
* [#4977](https://github.com/openlayers/ol3/pull/4977) - Add basic tests for ol.geom.flat.length methods ([@marcjansen](https://github.com/marcjansen))
* [#4973](https://github.com/openlayers/ol3/pull/4973) - Update eslint to version 2.3.0 🚀 ([@openlayers](https://github.com/openlayers))
* [#4971](https://github.com/openlayers/ol3/pull/4971) - Release v3.14.2 ([@openlayers](https://github.com/openlayers))
* [#4970](https://github.com/openlayers/ol3/pull/4970) - Tests for ol.Disposable. ([@tschaub](https://github.com/tschaub))
* [#4967](https://github.com/openlayers/ol3/pull/4967) - Add missing goog.inherits for ol.render.canvas.Immediate ([@fredj](https://github.com/fredj))
* [#4955](https://github.com/openlayers/ol3/pull/4955) - Remove IE workarounds in src/ol/xml.js ([@fredj](https://github.com/fredj))
* [#4960](https://github.com/openlayers/ol3/pull/4960) - Simplify clipping of lower resolution regions ([@ahocevar](https://github.com/ahocevar))
* [#4950](https://github.com/openlayers/ol3/pull/4950) - Remove use of goog.Disposable(). ([@tschaub](https://github.com/tschaub))
* [#4963](https://github.com/openlayers/ol3/pull/4963) - Handle more XHR errors in the TileJSON source ([@tschaub](https://github.com/tschaub))
* [#4962](https://github.com/openlayers/ol3/pull/4962) - Skip tests where features are not available ([@tschaub](https://github.com/tschaub))
* [#4956](https://github.com/openlayers/ol3/pull/4956) - Fix Examples layout page ([@jonataswalker](https://github.com/jonataswalker))
* [#4958](https://github.com/openlayers/ol3/pull/4958) - Stop wheel events instead of DOMMouseScroll events ([@fredj](https://github.com/fredj))
* [#4947](https://github.com/openlayers/ol3/pull/4947) - IE support for ol.source.Raster. ([@tschaub](https://github.com/tschaub))
* [#4944](https://github.com/openlayers/ol3/pull/4944) - Update resemblejs to version 2.2.0 🚀 ([@openlayers](https://github.com/openlayers))
* [#4942](https://github.com/openlayers/ol3/pull/4942) - Remove unused files in examples/data/ ([@fredj](https://github.com/fredj))
* [#4805](https://github.com/openlayers/ol3/pull/4805) - Add new cacheSize option to ol.source ([@fredj](https://github.com/fredj))
* [#4940](https://github.com/openlayers/ol3/pull/4940) - Release v3.14.1 ([@openlayers](https://github.com/openlayers))
* [#4939](https://github.com/openlayers/ol3/pull/4939) - Fix rendering of opaque layers with opacity != 1 ([@ahocevar](https://github.com/ahocevar))
* [#4938](https://github.com/openlayers/ol3/pull/4938) - Get rid of goog.dom.getFirstElementChild ([@fredj](https://github.com/fredj))
* [#4937](https://github.com/openlayers/ol3/pull/4937) - Get rid of goog.json ([@fredj](https://github.com/fredj))
* [#4936](https://github.com/openlayers/ol3/pull/4936) - Remove jquery from getfeatureinfo-layers example ([@fredj](https://github.com/fredj))
* [#4930](https://github.com/openlayers/ol3/pull/4930) - Use ADVANCED instead of ADVANCED_OPTIMIZATIONS ([@fredj](https://github.com/fredj))
* [#4917](https://github.com/openlayers/ol3/pull/4917) - Make ol.source.Cluster more flexible by adding a geometryFunction option ([@ahocevar](https://github.com/ahocevar))
* [#4918](https://github.com/openlayers/ol3/pull/4918) - Don't change the canvas size to clear it ([@fredj](https://github.com/fredj))
* [#4923](https://github.com/openlayers/ol3/pull/4923) - Update custom-builds.md ([@xlhomme](https://github.com/xlhomme))
* [#4929](https://github.com/openlayers/ol3/pull/4929) - Update clean-css to version 3.4.10 🚀 ([@openlayers](https://github.com/openlayers))
* [#4928](https://github.com/openlayers/ol3/pull/4928) - Upgrade to JSTS 1.0.2 in example ([@bjornharrtell](https://github.com/bjornharrtell))
* [#4927](https://github.com/openlayers/ol3/pull/4927) - Upgrade JSTS in example. ([@bjornharrtell](https://github.com/bjornharrtell))
* [#4809](https://github.com/openlayers/ol3/pull/4809) - Fix multipolygon clone. ([@fperucic](https://github.com/fperucic))
* [#4924](https://github.com/openlayers/ol3/pull/4924) - Update coveralls to version 2.11.8 🚀 ([@openlayers](https://github.com/openlayers))
* [#4921](https://github.com/openlayers/ol3/pull/4921) - Unlisten before calling listener and bind to target by default ([@ahocevar](https://github.com/ahocevar))
* [#4868](https://github.com/openlayers/ol3/pull/4868) - Allow to refresh a source and reload its data. ([@sebasbaumh](https://github.com/sebasbaumh))
* [#4903](https://github.com/openlayers/ol3/pull/4903) - Remove use of goog.style.getRelativePosition ([@fredj](https://github.com/fredj))
* [#4902](https://github.com/openlayers/ol3/pull/4902) - Remove use of goog.style.getClientPosition ([@fredj](https://github.com/fredj))
* [#4916](https://github.com/openlayers/ol3/pull/4916) - Fix ol.format.GeoJSON#writeFeatureObject return type ([@fredj](https://github.com/fredj))
* [#4909](https://github.com/openlayers/ol3/pull/4909) - Add ol.renderer.dom.VectorLayer#clearFrame ([@fredj](https://github.com/fredj))
* [#4915](https://github.com/openlayers/ol3/pull/4915) - Use {} instead of Object ([@fredj](https://github.com/fredj))
* [#4914](https://github.com/openlayers/ol3/pull/4914) - Export ol.proj.equivalent ([@sebasbaumh](https://github.com/sebasbaumh))
* [#4908](https://github.com/openlayers/ol3/pull/4908) - Remove use of goog.math.Rect ([@fredj](https://github.com/fredj))
* [#4900](https://github.com/openlayers/ol3/pull/4900) - Make ol.format.XML a @struct ([@fredj](https://github.com/fredj))
* [#4880](https://github.com/openlayers/ol3/pull/4880) - Update closure-util to version 1.11.0 🚀 ([@openlayers](https://github.com/openlayers))
* [#4905](https://github.com/openlayers/ol3/pull/4905) - Remove use of goog.style.setPosition ([@fredj](https://github.com/fredj))
* [#4879](https://github.com/openlayers/ol3/pull/4879) - Update metalsmith-layouts to version 1.6.4 🚀 ([@openlayers](https://github.com/openlayers))
* [#4901](https://github.com/openlayers/ol3/pull/4901) - Release v3.14.0 ([@openlayers](https://github.com/openlayers))
* [#4899](https://github.com/openlayers/ol3/pull/4899) - Use ol.format.GMLBase#srsName instead of undeclared srsName_ ([@fredj](https://github.com/fredj))

9
changelog/v3.15.1.md Normal file
View File

@@ -0,0 +1,9 @@
# v3.15.1
## Summary
The v3.15.1 release is a patch release that addresses a regression in the v3.15.0 release. See the [v3.15.0 release notes](https://github.com/openlayers/ol3/releases/tag/v3.15.0) for details on upgrading from v3.14.x.
## Fixes
* [#5190](https://github.com/openlayers/ol3/pull/5190) - Revert "Batch polygon fill and stroke instructions" ([@ahocevar](https://github.com/ahocevar))

148
changelog/v3.16.0.md Normal file
View File

@@ -0,0 +1,148 @@
# v3.16.0
## Summary
The v3.16.0 release includes features and fixes from 95 pull requests since the v3.15.1 release. New features and improvements include:
* Add `ol.source.ImageArcGISRest` for ArcGIS REST image layer support (#3880)
* New `finishCondition` option for `ol.interaction.Draw` to control which action should finish a geometry when drawing (#5261)
* New filter API for `ol.format.WFS#writeGetFeature` for WFS queries with OGC filters (#5252)
* New `renderMode` option for `ol.layer.VectorTile` to balance between rendering performance and rendering quality (#5177)
* More flexibility for configuring attribution logos by allowing HTML elements (#5274)
* UTFGrid updates, now supporting Mapbox API v4 (#5329)
* New `condition` option for `ol.interaction.Modify` for better reliability when combining with other interactions (#5320)
In addition to these new features, the code base has been simplified and refactored in the process of removing the dependency on Closure Library and Compiler.
## Upgrade notes
#### Rendering change for tile sources
Previously, if you called `source.setUrl()` on a tile source, all currently rendered tiles would be cleared before new tiles were loaded and rendered. This clearing of the map is undesirable if you are trying to smoothly update the tiles used by a source. This behavior has now changed, and calling `source.setUrl()` (or `source.setUrls()`) will *not* clear currently rendered tiles before loading and rendering new tiles. Instead, previously rendered tiles remain rendered until new tiles have loaded and can replace them. If you want to achieve the old behavior (render a blank map before loading new tiles), you can call `source.refresh()` or you can replace the old source with a new one (using `layer.setSource()`).
#### Move of typedefs out of code and into separate file
This change should not affect the great majority of application developers, but it's possible there are edge cases when compiling application code together with the library which cause compiler errors or warnings. In this case, please raise a GitHub issue. `goog.require`s for typedefs should not be necessary.
Users compiling their code with the library should note that the following API `@typedef`s have been renamed; your code may need changing if you use these:
* `ol.format.WFS.FeatureCollectionMetadata` to `ol.WFSFeatureCollectionMetadata`
* `ol.format.WFS.TransactionResponse` to `ol.WFSTransactionResponse`
#### Removal of `opaque` option for `ol.source.VectorTile`
This option is no longer needed, so it was removed from the API.
#### XHR loading for `ol.source.TileUTFGrid`
The `ol.source.TileUTFGrid` now uses XMLHttpRequest to load UTFGrid tiles by default. This works out of the box with the v4 Mapbox API. To work with the v3 API, you must use the new `jsonp` option on the source. See the examples below for detail.
```js
// To work with the v4 API
var v4source = new ol.source.TileUTFGrid({
url: 'https://api.tiles.mapbox.com/v4/example.json?access_token=' + YOUR_KEY_HERE
});
// To work with the v3 API
var v3source = new ol.source.TileUTFGrid({
jsonp: true, // <--- this is required for v3
url: 'http://api.tiles.mapbox.com/v3/example.json'
});
```
## Full list of changes
* [#5377](https://github.com/openlayers/ol3/pull/5377) - Fix link to jspdf.min.js in export-pdf example ([@fredj](https://github.com/fredj))
* [#5372](https://github.com/openlayers/ol3/pull/5372) - Update jquery to version 2.2.4 🚀 ([@openlayers](https://github.com/openlayers))
* [#5364](https://github.com/openlayers/ol3/pull/5364) - Make it so things don't flash so much when you change the tile source URL. ([@tschaub](https://github.com/tschaub))
* [#5368](https://github.com/openlayers/ol3/pull/5368) - Move WFS typedefs to typedefs.js ([@probins](https://github.com/probins))
* [#5369](https://github.com/openlayers/ol3/pull/5369) - format/igc: Remove duplicate regex exec() call ([@Turbo87](https://github.com/Turbo87))
* [#5363](https://github.com/openlayers/ol3/pull/5363) - Convert all typedefs to CamelCase ([@probins](https://github.com/probins))
* [#5362](https://github.com/openlayers/ol3/pull/5362) - Update vector-tile to version 1.2.1 🚀 ([@openlayers](https://github.com/openlayers))
* [#5352](https://github.com/openlayers/ol3/pull/5352) - Add getResolutions() to ol.View ([@marlowp](https://github.com/marlowp))
* [#5359](https://github.com/openlayers/ol3/pull/5359) - Move upgrade notes to correct place ([@probins](https://github.com/probins))
* [#5343](https://github.com/openlayers/ol3/pull/5343) - Rename non-api sub-namespace typedefs ([@probins](https://github.com/probins))
* [#5361](https://github.com/openlayers/ol3/pull/5361) - Fix url to maki icons ([@fredj](https://github.com/fredj))
* [#5358](https://github.com/openlayers/ol3/pull/5358) - Handle multiple featureMember elements for different types (WFS format) ([@tsauerwein](https://github.com/tsauerwein))
* [#5355](https://github.com/openlayers/ol3/pull/5355) - Fix navigation-controls example description ([@fredj](https://github.com/fredj))
* [#5353](https://github.com/openlayers/ol3/pull/5353) - Add API definition to docs landing page ([@probins](https://github.com/probins))
* [#5356](https://github.com/openlayers/ol3/pull/5356) - Update rbush to version 1.4.3 🚀 ([@openlayers](https://github.com/openlayers))
* [#5354](https://github.com/openlayers/ol3/pull/5354) - Update eslint to version 2.10.2 🚀 ([@openlayers](https://github.com/openlayers))
* [#5347](https://github.com/openlayers/ol3/pull/5347) - Update eslint to version 2.10.1 🚀 ([@openlayers](https://github.com/openlayers))
* [#5344](https://github.com/openlayers/ol3/pull/5344) - Remove raster enum from test ([@probins](https://github.com/probins))
* [#5329](https://github.com/openlayers/ol3/pull/5329) - UTFGrid updates. ([@tschaub](https://github.com/tschaub))
* [#5335](https://github.com/openlayers/ol3/pull/5335) - Move typedefs to separate file ([@probins](https://github.com/probins))
* [#5332](https://github.com/openlayers/ol3/pull/5332) - Warn when viewing an outdated example, and offer a redirect to latest ([@ahocevar](https://github.com/ahocevar))
* [#5342](https://github.com/openlayers/ol3/pull/5342) - Fix incorrect source links ([@ahocevar](https://github.com/ahocevar))
* [#5339](https://github.com/openlayers/ol3/pull/5339) - Use a div instead of alert for version warning ([@ahocevar](https://github.com/ahocevar))
* [#5320](https://github.com/openlayers/ol3/pull/5320) - Add a 'condition' option to ol.interaction.Modify ([@fredj](https://github.com/fredj))
* [#5333](https://github.com/openlayers/ol3/pull/5333) - Improve code readability with better comments ([@openlayers](https://github.com/openlayers))
* [#5330](https://github.com/openlayers/ol3/pull/5330) - Fix source links, display version and warn about outdated docs ([@ahocevar](https://github.com/ahocevar))
* [#5324](https://github.com/openlayers/ol3/pull/5324) - Remove unneeded goog.provides/requires for typedefs ([@probins](https://github.com/probins))
* [#5328](https://github.com/openlayers/ol3/pull/5328) - Use Node 6 on Travis. ([@tschaub](https://github.com/tschaub))
* [#5313](https://github.com/openlayers/ol3/pull/5313) - Rastersource framestate extent ([@ahocevar](https://github.com/ahocevar))
* [#5326](https://github.com/openlayers/ol3/pull/5326) - Fix wording in tile-load-event example ([@tsauerwein](https://github.com/tsauerwein))
* [#5327](https://github.com/openlayers/ol3/pull/5327) - Update closure-util to version 1.13.1 🚀 ([@openlayers](https://github.com/openlayers))
* [#5289](https://github.com/openlayers/ol3/pull/5289) - Update fs-extra to version 0.30.0 🚀 ([@openlayers](https://github.com/openlayers))
* [#5319](https://github.com/openlayers/ol3/pull/5319) - Remove outdated fixme from framestate.js. ([@probins](https://github.com/probins))
* [#5274](https://github.com/openlayers/ol3/pull/5274) - Allow using elements in logo attribution options ([@samuellapointe](https://github.com/samuellapointe))
* [#5162](https://github.com/openlayers/ol3/pull/5162) - Improve docs/examples for loadingstrategy ([@probins](https://github.com/probins))
* [#5314](https://github.com/openlayers/ol3/pull/5314) - Update browserify to version 13.0.1 🚀 ([@openlayers](https://github.com/openlayers))
* [#5315](https://github.com/openlayers/ol3/pull/5315) - Remove unused ol.TileCoordTransformType ([@probins](https://github.com/probins))
* [#5310](https://github.com/openlayers/ol3/pull/5310) - Get raster sources working again. ([@tschaub](https://github.com/tschaub))
* [#5291](https://github.com/openlayers/ol3/pull/5291) - Allow once listeners to dispatch events of same type ([@ahocevar](https://github.com/ahocevar))
* [#5309](https://github.com/openlayers/ol3/pull/5309) - Update metalsmith-layouts to version 1.6.5 🚀 ([@openlayers](https://github.com/openlayers))
* [#5052](https://github.com/openlayers/ol3/pull/5052) - Update fs-extra to version 0.26.7 🚀 ([@openlayers](https://github.com/openlayers))
* [#5306](https://github.com/openlayers/ol3/pull/5306) - Make olx.view.FitOptions.padding optional ([@gberaudo](https://github.com/gberaudo))
* [#5302](https://github.com/openlayers/ol3/pull/5302) - Remove use of goog.partial ([@fredj](https://github.com/fredj))
* [#5304](https://github.com/openlayers/ol3/pull/5304) - Update sinon to version 1.17.4 🚀 ([@openlayers](https://github.com/openlayers))
* [#4644](https://github.com/openlayers/ol3/pull/4644) - Remove check-requires script ([@fredj](https://github.com/fredj))
* [#5298](https://github.com/openlayers/ol3/pull/5298) - Update eslint to version 2.9.0 🚀 ([@openlayers](https://github.com/openlayers))
* [#5296](https://github.com/openlayers/ol3/pull/5296) - Document handling of KML MultiGeometries ([@probins](https://github.com/probins))
* [#5293](https://github.com/openlayers/ol3/pull/5293) - Block removePoint while dragging ([@giohappy](https://github.com/giohappy))
* [#5285](https://github.com/openlayers/ol3/pull/5285) - Add more tests for the scaleline control ([@marcjansen](https://github.com/marcjansen))
* [#5287](https://github.com/openlayers/ol3/pull/5287) - Add and fix vectortile tests ([@ahocevar](https://github.com/ahocevar))
* [#5288](https://github.com/openlayers/ol3/pull/5288) - Expose removeVertex_ as removePoint ([@giohappy](https://github.com/giohappy))
* [#5286](https://github.com/openlayers/ol3/pull/5286) - Skip unnecessary render functions ([@ahocevar](https://github.com/ahocevar))
* [#5177](https://github.com/openlayers/ol3/pull/5177) - Add render options for vector tile layers ([@ahocevar](https://github.com/ahocevar))
* [#5278](https://github.com/openlayers/ol3/pull/5278) - Fix invalid generics type instantiation ([@fredj](https://github.com/fredj))
* [#5044](https://github.com/openlayers/ol3/pull/5044) - Snap interaction now handle feature without geometry properly ([@fblackburn](https://github.com/fblackburn))
* [#5277](https://github.com/openlayers/ol3/pull/5277) - Type cleanup ([@fredj](https://github.com/fredj))
* [#5275](https://github.com/openlayers/ol3/pull/5275) - Fix feature-layer association on replaced selections ([@ahocevar](https://github.com/ahocevar))
* [#5252](https://github.com/openlayers/ol3/pull/5252) - Add filter option to ol.format.WFS#writeGetFeature ([@tsauerwein](https://github.com/tsauerwein))
* [#5264](https://github.com/openlayers/ol3/pull/5264) - Fix for close draw polygon error ([@matjos](https://github.com/matjos))
* [#5267](https://github.com/openlayers/ol3/pull/5267) - Use ol.functions instead of goog.functions ([@ahocevar](https://github.com/ahocevar))
* [#5266](https://github.com/openlayers/ol3/pull/5266) - Document ol.colorlike ([@ahocevar](https://github.com/ahocevar))
* [#5261](https://github.com/openlayers/ol3/pull/5261) - add finishCondition to ol.interaction.Draw ([@giohappy](https://github.com/giohappy))
* [#5259](https://github.com/openlayers/ol3/pull/5259) - Include squash commit merges in changelog ([@ahocevar](https://github.com/ahocevar))
* [#5257](https://github.com/openlayers/ol3/pull/5257) - Add readFeatures and readProjection as MVT experimental API ([@bjornharrtell](https://github.com/bjornharrtell))
* [#3880](https://github.com/openlayers/ol3/pull/3880) - Add ol.source.ImageArcGISRest ([Anna Lambrechtsen](https://github.com/search?q=Anna Lambrechtsen&type=Users))
* [#5239](https://github.com/openlayers/ol3/pull/5239) - Update eslint to version 2.8.0 🚀 ([@openlayers](https://github.com/openlayers))
* [#5230](https://github.com/openlayers/ol3/pull/5230) - Reuse frame state arrays ([@fredj](https://github.com/fredj))
* [#5213](https://github.com/openlayers/ol3/pull/5213) - Remove unused ol.source.Source#setProjection function ([@fredj](https://github.com/fredj))
* [#5223](https://github.com/openlayers/ol3/pull/5223) - Create tmpSize_ before calling calculateTileRanges_ ([@fredj](https://github.com/fredj))
* [#5225](https://github.com/openlayers/ol3/pull/5225) - Remove unused ol.extent.transform2D function ([@fredj](https://github.com/fredj))
* [#5212](https://github.com/openlayers/ol3/pull/5212) - KML: fix GeometryCollection write ([@probins](https://github.com/probins))
* [#5228](https://github.com/openlayers/ol3/pull/5228) - Add 'layers' option to Translate interaction ([@adube](https://github.com/adube))
* [#5221](https://github.com/openlayers/ol3/pull/5221) - Update jquery, bootstrap and proj4js in examples ([@fredj](https://github.com/fredj))
* [#5227](https://github.com/openlayers/ol3/pull/5227) - Add a temporary ol.TileCoord in ol.renderer.canvas.TileLayer ([@fredj](https://github.com/fredj))
* [#5222](https://github.com/openlayers/ol3/pull/5222) - Remove unused private variables in ol.renderer.canvas.Map ([@fredj](https://github.com/fredj))
* [#5220](https://github.com/openlayers/ol3/pull/5220) - Externs cleanup ([@fredj](https://github.com/fredj))
* [#5224](https://github.com/openlayers/ol3/pull/5224) - Fix jsdoc tags indentation ([@fredj](https://github.com/fredj))
* [#5218](https://github.com/openlayers/ol3/pull/5218) - Add @api annotation to setConfig. ([@aisaacs](https://github.com/aisaacs))
* [#5215](https://github.com/openlayers/ol3/pull/5215) - Add an optional feature filter to getClosestFeatureToCoordinate ([@fredj](https://github.com/fredj))
* [#5132](https://github.com/openlayers/ol3/pull/5132) - Remove goog.string ([@nicholas-l](https://github.com/nicholas-l))
* [#5206](https://github.com/openlayers/ol3/pull/5206) - Minor correction of StyleFunction docs ([@probins](https://github.com/probins))
* [#4932](https://github.com/openlayers/ol3/pull/4932) - Remove undefined parameters to ol.format.WMSGetFeatureInfo#readFeatures_ ([@fredj](https://github.com/fredj))
* [#5207](https://github.com/openlayers/ol3/pull/5207) - Update clean-css to version 3.4.12 🚀 ([@openlayers](https://github.com/openlayers))
* [#5201](https://github.com/openlayers/ol3/pull/5201) - Small clarification for vector source loader docs ([@probins](https://github.com/probins))
* [#5200](https://github.com/openlayers/ol3/pull/5200) - Fix typo in rotate control for css classList ([@bartvde](https://github.com/bartvde))
* [#5178](https://github.com/openlayers/ol3/pull/5178) - Remove goog.global ([Nicholas Latham](https://github.com/search?q=Nicholas Latham&type=Users))
* [#5189](https://github.com/openlayers/ol3/pull/5189) - Add rendering tests to ensure correct circle and polygon rendering ([Andreas Hocevar](https://github.com/search?q=Andreas Hocevar&type=Users))
* [#5183](https://github.com/openlayers/ol3/pull/5183) - Update istanbul to version 0.4.3 🚀 ([@openlayers](https://github.com/openlayers))
* [#5187](https://github.com/openlayers/ol3/pull/5187) - Remove goog.functions.and from ol.interaction.Modify ([@fredj](https://github.com/fredj))
* [#5176](https://github.com/openlayers/ol3/pull/5176) - Update jquery to version 2.2.3 🚀 ([@openlayers](https://github.com/openlayers))
* [#5173](https://github.com/openlayers/ol3/pull/5173) - Use ol.dom.createCanvasContext2D ([@fredj](https://github.com/fredj))
* [#5171](https://github.com/openlayers/ol3/pull/5171) - Move olx.source.AttributionOption out of externs/olx.js ([@fredj](https://github.com/fredj))
* [#5170](https://github.com/openlayers/ol3/pull/5170) - Update eslint to version 2.7.0 🚀 ([@openlayers](https://github.com/openlayers))
* [#5167](https://github.com/openlayers/ol3/pull/5167) - Remove FastClick from mobile-full-screen example ([@fredj](https://github.com/fredj))
* [#5166](https://github.com/openlayers/ol3/pull/5166) - Remove jquery dependency from measure example ([@fredj](https://github.com/fredj))
* [#5164](https://github.com/openlayers/ol3/pull/5164) - Cartodb cleanup ([@fredj](https://github.com/fredj))

107
changelog/v3.17.0.md Normal file
View File

@@ -0,0 +1,107 @@
# v3.17.0
## Summary
The v3.17.0 release includes features and fixes from 60 pull requests since the v3.16.0 release. Most of the changes are bug fixes and continuing removal of the dependency on Closure Library.
## Upgrade notes
#### `ol.source.MapQuest` removal
Because of changes at MapQuest (see: https://lists.openstreetmap.org/pipermail/talk/2016-June/076106.html) we had to remove the MapQuest source for now (see https://github.com/openlayers/ol3/issues/5484 for details).
#### `ol.interaction.ModifyEvent` changes
The event object previously had a `mapBrowserPointerEvent` property, which has been renamed to `mapBrowserEvent`.
#### Removal of ol.raster namespace
Users compiling their code with the library and using types in the `ol.raster` namespace should note that this has now been removed. `ol.raster.Pixel` has been deleted, and the other types have been renamed as follows, and your code may need changing if you use these:
* `ol.raster.Operation` to `ol.RasterOperation`
* `ol.raster.OperationType` to `ol.RasterOperationType`
#### All typedefs now in ol namespace
Users compiling their code with the library should note that the following typedefs have been renamed; your code may need changing if you use these:
* ol.events.ConditionType to ol.EventsConditionType
* ol.events.EventTargetLike to ol.EventTargetLike
* ol.events.Key to ol.EventsKey
* ol.events.ListenerFunctionType to ol.EventsListenerFunctionType
* ol.interaction.DragBoxEndConditionType to ol.DragBoxEndConditionType
* ol.interaction.DrawGeometryFunctionType to ol.DrawGeometryFunctionType
* ol.interaction.SegmentDataType to ol.ModifySegmentDataType
* ol.interaction.SelectFilterFunction to ol.SelectFilterFunction
* ol.interaction.SnapResultType to ol.SnapResultType
* ol.interaction.SnapSegmentDataType to ol.SnapSegmentDataType
* ol.proj.ProjectionLike to ol.ProjectionLike
* ol.style.AtlasBlock to ol.AtlasBlock
* ol.style.AtlasInfo to ol.AtlasInfo
* ol.style.AtlasManagerInfo to ol.AtlasManagerInfo
* ol.style.CircleRenderOptions to ol.CircleRenderOptions
* ol.style.ImageOptions to ol.StyleImageOptions
* ol.style.GeometryFunction to ol.StyleGeometryFunction
* ol.style.RegularShapeRenderOptions to ol.RegularShapeRenderOptions
* ol.style.StyleFunction to ol.StyleFunction
## Full list of changes
* [#5539](https://github.com/openlayers/ol3/pull/5539) - Remove outdated comments re goog.dom ([@probins](https://github.com/probins))
* [#5543](https://github.com/openlayers/ol3/pull/5543) - Update rbush to 2.0.1 ([@tsauerwein](https://github.com/tsauerwein))
* [#5540](https://github.com/openlayers/ol3/pull/5540) - Remove MapQuest source ([@bartvde](https://github.com/bartvde))
* [#5538](https://github.com/openlayers/ol3/pull/5538) - Replace remaining goog.inherits ([@probins](https://github.com/probins))
* [#5536](https://github.com/openlayers/ol3/pull/5536) - Update to layer-extent example ([@tschaub](https://github.com/tschaub))
* [#5482](https://github.com/openlayers/ol3/pull/5482) - Fix for regression in tile layer extent ([@ischneider](https://github.com/ischneider))
* [#5475](https://github.com/openlayers/ol3/pull/5475) - Remove goog.provide from enums only used internally or in olx.js ([@probins](https://github.com/probins))
* [#5424](https://github.com/openlayers/ol3/pull/5424) - Don't dispatch select event if no feature is selected or deselected ([@fredj](https://github.com/fredj))
* [#5522](https://github.com/openlayers/ol3/pull/5522) - Add 'condition' option to ol.interaction.DragPanOptions in olx.js ([@SamuelBerger](https://github.com/SamuelBerger))
* [#5443](https://github.com/openlayers/ol3/pull/5443) - Remove olx.source.WMTSOptions#maxZoom option ([@fredj](https://github.com/fredj))
* [#5497](https://github.com/openlayers/ol3/pull/5497) - Update istanbul to version 0.4.4 🚀 ([@openlayers](https://github.com/openlayers))
* [#5523](https://github.com/openlayers/ol3/pull/5523) - Update closure-util to version 1.15.0 🚀 ([@openlayers](https://github.com/openlayers))
* [#5508](https://github.com/openlayers/ol3/pull/5508) - Fix problems with ol.format.WFS in compiled mode ([@tsauerwein](https://github.com/tsauerwein))
* [#5512](https://github.com/openlayers/ol3/pull/5512) - Use forEachTileCoord name instead of forEachTileCoordInExtentAndZ ([@ahocevar](https://github.com/ahocevar))
* [#5513](https://github.com/openlayers/ol3/pull/5513) - Add getters for min and max resolution of the view ([@bartvde](https://github.com/bartvde))
* [#5471](https://github.com/openlayers/ol3/pull/5471) - Fix GPX write of xsi ns ([@probins](https://github.com/probins))
* [#5134](https://github.com/openlayers/ol3/pull/5134) - Remove goog.dom ([@nicholas-l](https://github.com/nicholas-l))
* [#5511](https://github.com/openlayers/ol3/pull/5511) - Do not optimize lines away entirely ([@ahocevar](https://github.com/ahocevar))
* [#5509](https://github.com/openlayers/ol3/pull/5509) - Make it easier to work with tile ranges in custom source implementations ([@ahocevar](https://github.com/ahocevar))
* [#5498](https://github.com/openlayers/ol3/pull/5498) - Update eslint to version 2.13.1 🚀 ([@openlayers](https://github.com/openlayers))
* [#5495](https://github.com/openlayers/ol3/pull/5495) - Get rid of goog.isFunction ([@fredj](https://github.com/fredj))
* [#5499](https://github.com/openlayers/ol3/pull/5499) - Update glob to version 7.0.5 🚀 ([@openlayers](https://github.com/openlayers))
* [#5125](https://github.com/openlayers/ol3/pull/5125) - Remove goog style ([@nicholas-l](https://github.com/nicholas-l))
* [#5494](https://github.com/openlayers/ol3/pull/5494) - Remove goog.global ([@probins](https://github.com/probins))
* [#5492](https://github.com/openlayers/ol3/pull/5492) - Update eslint to version 2.13.0 🚀 ([@openlayers](https://github.com/openlayers))
* [#5490](https://github.com/openlayers/ol3/pull/5490) - Update glob to version 7.0.4 🚀 ([@openlayers](https://github.com/openlayers))
* [#5460](https://github.com/openlayers/ol3/pull/5460) - Update eslint to version 2.12.0 🚀 ([@openlayers](https://github.com/openlayers))
* [#5479](https://github.com/openlayers/ol3/pull/5479) - Update slimerjs to version 0.906.2 🚀 ([@openlayers](https://github.com/openlayers))
* [#5474](https://github.com/openlayers/ol3/pull/5474) - Update clean-css to version 3.4.18 🚀 ([@openlayers](https://github.com/openlayers))
* [#5450](https://github.com/openlayers/ol3/pull/5450) - Remove sub-namespaces from all remaining typedefs ([@probins](https://github.com/probins))
* [#5465](https://github.com/openlayers/ol3/pull/5465) - Fix custom icon positions and rotation ([@ahocevar](https://github.com/ahocevar))
* [#5469](https://github.com/openlayers/ol3/pull/5469) - Fix typo ([@gberaudo](https://github.com/gberaudo))
* [#5453](https://github.com/openlayers/ol3/pull/5453) - Reference ol.MapBrowserEvent instead of ol.MapBrowserPointerEvent ([@ahocevar](https://github.com/ahocevar))
* [#5208](https://github.com/openlayers/ol3/pull/5208) - Stop GPX writing rtept properties ([@probins](https://github.com/probins))
* [#5452](https://github.com/openlayers/ol3/pull/5452) - Update eslint-config-openlayers to version 5.0.0 🚀 ([@openlayers](https://github.com/openlayers))
* [#5432](https://github.com/openlayers/ol3/pull/5432) - Remove use of goog.uri ([@bjornharrtell](https://github.com/bjornharrtell))
* [#5449](https://github.com/openlayers/ol3/pull/5449) - Make example data/ paths absolute for source view and JSFiddle ([@ahocevar](https://github.com/ahocevar))
* [#5399](https://github.com/openlayers/ol3/pull/5399) - Remove ol.raster namespace ([@probins](https://github.com/probins))
* [#5270](https://github.com/openlayers/ol3/pull/5270) - Load erroneous image in ol.Image#load and ol.ImageTile#load ([@fredj](https://github.com/fredj))
* [#5194](https://github.com/openlayers/ol3/pull/5194) - Get rid of goog.inherits and goog.base ([@fredj](https://github.com/fredj))
* [#5427](https://github.com/openlayers/ol3/pull/5427) - Document typedefs and enums used by API symbols ([@ahocevar](https://github.com/ahocevar))
* [#5438](https://github.com/openlayers/ol3/pull/5438) - Don't make ol.format.ogc.filter.Filter inherit from ol.Object ([@fredj](https://github.com/fredj))
* [#5433](https://github.com/openlayers/ol3/pull/5433) - Update clean-css to version 3.4.17 🚀 ([@openlayers](https://github.com/openlayers))
* [#5434](https://github.com/openlayers/ol3/pull/5434) - Fix externs in closure compiler tutorial ([@tsauerwein](https://github.com/tsauerwein))
* [#5426](https://github.com/openlayers/ol3/pull/5426) - Fix icon example to anchor popup to feature location ([@frankrowe](https://github.com/frankrowe))
* [#5421](https://github.com/openlayers/ol3/pull/5421) - Correct typo in config/jsdoc/api/readme.md ([@probins](https://github.com/probins))
* [#5417](https://github.com/openlayers/ol3/pull/5417) - Update clean-css to version 3.4.16 🚀 ([@openlayers](https://github.com/openlayers))
* [#5413](https://github.com/openlayers/ol3/pull/5413) - Update clean-css to version 3.4.15 🚀 ([@openlayers](https://github.com/openlayers))
* [#5410](https://github.com/openlayers/ol3/pull/5410) - Update eslint to version 2.11.1 🚀 ([@openlayers](https://github.com/openlayers))
* [#5408](https://github.com/openlayers/ol3/pull/5408) - Update pbf to version 2.0.1 🚀 ([@openlayers](https://github.com/openlayers))
* [#5404](https://github.com/openlayers/ol3/pull/5404) - Update eslint to version 2.11.0 🚀 ([@openlayers](https://github.com/openlayers))
* [#5402](https://github.com/openlayers/ol3/pull/5402) - Pass in srsName option to writeTransaction ([@anzhihun](https://github.com/anzhihun))
* [#5393](https://github.com/openlayers/ol3/pull/5393) - Update mocha to version 2.5.3 🚀 ([@openlayers](https://github.com/openlayers))
* [#5394](https://github.com/openlayers/ol3/pull/5394) - Update resemblejs to version 2.2.1 🚀 ([@openlayers](https://github.com/openlayers))
* [#5390](https://github.com/openlayers/ol3/pull/5390) - Fix the requestEncoding automatic selection ([@fredj](https://github.com/fredj))
* [#5392](https://github.com/openlayers/ol3/pull/5392) - Update closure-util to version 1.14.0 🚀 ([@openlayers](https://github.com/openlayers))
* [#5388](https://github.com/openlayers/ol3/pull/5388) - Update mocha to version 2.5.2 🚀 ([@openlayers](https://github.com/openlayers))
* [#5382](https://github.com/openlayers/ol3/pull/5382) - Handle UTC midnight wrap around, fixes #5371 ([@twpayne](https://github.com/twpayne))
* [#5381](https://github.com/openlayers/ol3/pull/5381) - Update mocha to version 2.5.1 🚀 ([@openlayers](https://github.com/openlayers))
* [#5383](https://github.com/openlayers/ol3/pull/5383) - Update clean-css to version 3.4.13 🚀 ([@openlayers](https://github.com/openlayers))

9
changelog/v3.17.1.md Normal file
View File

@@ -0,0 +1,9 @@
# v3.17.1
## Summary
The v3.17.1 release is a patch release that addresses a regression in the v3.17.0 release. See the [v3.17.0 release notes](https://github.com/openlayers/ol3/releases/tag/v3.17.0) for details on upgrading from v3.16.
## Fixes
* [#5548](https://github.com/openlayers/ol3/pull/5548) - Fix CHANGETYPE in ol.control.FullScreen ([@GaborFarkas](https://github.com/GaborFarkas))

152
changelog/v3.7.0.md Normal file
View File

@@ -0,0 +1,152 @@
# v3.7.0
## Summary
The v3.7.0 release includes features and fixes from 43 pull requests since v3.6.0. To simplify the code base, there were some changes to "experimental" features. Please follow the upgrade notes to make your applications work with the latest release.
## Upgrade notes
#### Removal of `ol.FeatureOverlay`
Instead of an `ol.FeatureOverlay`, we now use an `ol.layer.Vector` with an
`ol.source.Vector`. If you previously had:
```js
var featureOverlay = new ol.FeatureOverlay({
map: map,
style: overlayStyle
});
featureOverlay.addFeature(feature);
featureOverlay.removeFeature(feature);
var collection = featureOverlay.getFeatures();
```
you will have to change this to:
```js
var collection = new ol.Collection();
var featureOverlay = new ol.layer.Vector({
map: map,
source: new ol.source.Vector({
features: collection,
useSpatialIndex: false // optional, might improve performance
}),
style: overlayStyle,
updateWhileAnimating: true, // optional, for instant visual feedback
updateWhileInteracting: true // optional, for instant visual feedback
});
featureOverlay.getSource().addFeature(feature);
featureOverlay.getSource().removeFeature(feature);
```
With the removal of `ol.FeatureOverlay`, `zIndex` symbolizer properties of overlays are no longer stacked per map, but per layer/overlay. If you previously had multiple feature overlays where you controlled the rendering order of features by using `zIndex` symbolizer properties, you can now achieve the same rendering order only if all overlay features are on the same layer.
Note that `ol.FeatureOverlay#getFeatures()` returned an `{ol.Collection.<ol.Feature>}`, whereas `ol.source.Vector#getFeatures()` returns an `{Array.<ol.Feature>}`.
#### `ol.TileCoord` changes
Until now, the API exposed two different types of `ol.TileCoord` tile coordinates: internal ones that increase left to right and upward, and transformed ones that may increase downward, as defined by a transform function on the tile grid. With this change, the API now only exposes tile coordinates that increase left to right and upward.
Previously, tile grids created by OpenLayers either had their origin at the top-left or at the bottom-left corner of the extent. To make it easier for application developers to transform tile coordinates to the common XYZ tiling scheme, all tile grids that OpenLayers creates internally have their origin now at the top-left corner of the extent.
This change affects applications that configure a custom `tileUrlFunction` for an `ol.source.Tile`. Previously, the `tileUrlFunction` was called with rather unpredictable tile coordinates, depending on whether a tile coordinate transform took place before calling the `tileUrlFunction`. Now it is always called with OpenLayers tile coordinates. To transform these into the common XYZ tiling scheme, a custom `tileUrlFunction` has to change the `y` value (tile row) of the `ol.TileCoord`:
```js
function tileUrlFunction = function(tileCoord, pixelRatio, projection) {
var urlTemplate = '{z}/{x}/{y}';
return urlTemplate
.replace('{z}', tileCoord[0].toString())
.replace('{x}', tileCoord[1].toString())
.replace('{y}', (-tileCoord[2] - 1).toString());
}
```
The `ol.tilegrid.TileGrid#createTileCoordTransform()` function which could be used to get the tile grid's tile coordinate transform function has been removed. This function was confusing and should no longer be needed now that application developers get tile coordinates in a known layout.
The code snippets below show how your application code needs to be changed:
Old application code (with `ol.tilegrid.TileGrid#createTileCoordTransform()`):
```js
var transform = source.getTileGrid().createTileCoordTransform();
var tileUrlFunction = function(tileCoord, pixelRatio, projection) {
tileCoord = transform(tileCoord, projection);
return 'http://mytiles.com/' +
tileCoord[0] + '/' + tileCoord[1] + '/' + tileCoord[2] + '.png';
};
```
Old application code (with custom `y` transform):
```js
var tileUrlFunction = function(tileCoord, pixelRatio, projection) {
var z = tileCoord[0];
var yFromBottom = tileCoord[2];
var resolution = tileGrid.getResolution(z);
var tileHeight = ol.size.toSize(tileSize)[1];
var matrixHeight =
Math.floor(ol.extent.getHeight(extent) / tileHeight / resolution);
return 'http://mytiles.com/' +
tileCoord[0] + '/' + tileCoord[1] + '/' +
(matrixHeight - yFromBottom - 1) + '.png';
};
```
New application code (simple -y - 1 transform):
```js
var tileUrlFunction = function(tileCoord, pixelRatio, projection) {
return 'http://mytiles.com/' +
tileCoord[0] + '/' + tileCoord[1] + '/' + (-tileCoord[2] - 1) + '.png';
};
```
#### Removal of `ol.tilegrid.Zoomify`
The replacement of `ol.tilegrid.Zoomify` is a plain `ol.tilegrid.TileGrid`, configured with `extent`, `origin` and `resolutions`. If the `size` passed to the `ol.source.Zoomify` source is `[width, height]`, then the extent for the tile grid will be `[0, -height, width, 0]`, and the origin will be `[0, 0]`.
#### Replace `ol.View.fitExtent()` and `ol.View.fitGeometry()` with `ol.View.fit()`
* This combines two previously distinct functions into one more flexible call which takes either a geometry or an extent.
* Rename all calls to `fitExtent` and `fitGeometry` to `fit`.
#### Change to `ol.interaction.Modify`
When single clicking a line or boundary within the `pixelTolerance`, a vertex is now created.
## New features and fixes
* [#3867](https://github.com/openlayers/ol3/pull/3867) - Do not require projection extent for x-wrapping tile sources ([@ahocevar](https://github.com/ahocevar))
* [#3635](https://github.com/openlayers/ol3/pull/3635) - Create vertex on boundary single click ([@bjornharrtell](https://github.com/bjornharrtell))
* [#3806](https://github.com/openlayers/ol3/pull/3806) - Do not clip canvas for vector layers when wrapping the world ([@ahocevar](https://github.com/ahocevar))
* [#3461](https://github.com/openlayers/ol3/pull/3461) - High level Modify interaction events ([@bjornharrtell](https://github.com/bjornharrtell))
* [#3865](https://github.com/openlayers/ol3/pull/3865) - ol.View#fit() ([@bartvde](https://github.com/bartvde))
* [#3864](https://github.com/openlayers/ol3/pull/3864) - Check projection.canWrapX() before wrapping tiles ([@klokantech](https://github.com/klokantech))
* [#3863](https://github.com/openlayers/ol3/pull/3863) - Handle CDATA in attribute parsing for GML format ([@nhambletCCRI](https://github.com/nhambletCCRI))
* [#3860](https://github.com/openlayers/ol3/pull/3860) - Update example layout. ([@tschaub](https://github.com/tschaub))
* [#3861](https://github.com/openlayers/ol3/pull/3861) - Don't force 'dom' renderer ([@openlayers](https://github.com/openlayers))
* [#3855](https://github.com/openlayers/ol3/pull/3855) - Adding an example with WMTS tiles from IGN Geoportail ([@pgiraud](https://github.com/pgiraud))
* [#3856](https://github.com/openlayers/ol3/pull/3856) - ol.source.TileVector(): bind success function of tileLoadFunction to source ([@plepe](https://github.com/plepe))
* [#3848](https://github.com/openlayers/ol3/pull/3848) - Check for exports before define. ([@tschaub](https://github.com/tschaub))
* [#3845](https://github.com/openlayers/ol3/pull/3845) - Prevent null array to be passed to an ol.Collection ([@fredj](https://github.com/fredj))
* [#3849](https://github.com/openlayers/ol3/pull/3849) - Pad min. and sec. with leading zeros in DMS notation ([@pgiraud](https://github.com/pgiraud))
* [#3842](https://github.com/openlayers/ol3/pull/3842) - Adding a feature-animation example ([@pgiraud](https://github.com/pgiraud))
* [#3833](https://github.com/openlayers/ol3/pull/3833) - Enable use of custom XHR loader for TileVector sources ([@bjornharrtell](https://github.com/bjornharrtell))
* [#3834](https://github.com/openlayers/ol3/pull/3834) - ArcGIS tiled example broken in Chrome ([@bartvde](https://github.com/bartvde))
* [#3829](https://github.com/openlayers/ol3/pull/3829) - incorrect assert message ([@kzr-pzr](https://github.com/kzr-pzr))
* [#3828](https://github.com/openlayers/ol3/pull/3828) - Fix typo in upgrade notes ([@ahocevar](https://github.com/ahocevar))
* [#3826](https://github.com/openlayers/ol3/pull/3826) - Allow custom tileGrid in ol.source.XYZ ([@klokantech](https://github.com/klokantech))
* [#3815](https://github.com/openlayers/ol3/pull/3815) - Simplify tilegrid API and internals ([@ahocevar](https://github.com/ahocevar))
* [#3820](https://github.com/openlayers/ol3/pull/3820) - Make unmanaged vector layers behave more like ol.FeatureOverlay ([@ahocevar](https://github.com/ahocevar))
* [#3822](https://github.com/openlayers/ol3/pull/3822) - Correct docs for updateWhileInteracting ([@probins](https://github.com/probins))
* [#3818](https://github.com/openlayers/ol3/pull/3818) - Make geometry.transform api stable again. ([@probins](https://github.com/probins))
* [#3801](https://github.com/openlayers/ol3/pull/3801) - Respect the tile grid's extent in ol.source.TileVector ([@ahocevar](https://github.com/ahocevar))
* [#3810](https://github.com/openlayers/ol3/pull/3810) - Improve TileGrid documentation and examples ([@ahocevar](https://github.com/ahocevar))
* [#3808](https://github.com/openlayers/ol3/pull/3808) - Correct typo in OverlayOptions ([@probins](https://github.com/probins))
* [#3766](https://github.com/openlayers/ol3/pull/3766) - Add a clickTolerance option to the Draw interaction ([@elemoine](https://github.com/elemoine))
* [#3804](https://github.com/openlayers/ol3/pull/3804) - Remove sentence that was only meant for WMTS tile grids ([@ahocevar](https://github.com/ahocevar))
* [#3800](https://github.com/openlayers/ol3/pull/3800) - Remove further references to FeatureOverlay ([@probins](https://github.com/probins))
* [#3780](https://github.com/openlayers/ol3/pull/3780) - Only expose transformed tile coordinates to the API ([@ahocevar](https://github.com/ahocevar))
* [#3793](https://github.com/openlayers/ol3/pull/3793) - Use 'managed' instead of 'unmanaged' in LayerState ([@ahocevar](https://github.com/ahocevar))
* [#3792](https://github.com/openlayers/ol3/pull/3792) - Link to correct layer base class ([@marcjansen](https://github.com/marcjansen))
* [#3791](https://github.com/openlayers/ol3/pull/3791) - Remove docs referring to removed feature overlay ([@marcjansen](https://github.com/marcjansen))
* [#3790](https://github.com/openlayers/ol3/pull/3790) - Remove unnecessary quotes around object keys ([@fredj](https://github.com/fredj))
* [#3787](https://github.com/openlayers/ol3/pull/3787) - Add 'unmanaged' to ol.layer.LayerState ([@ahocevar](https://github.com/ahocevar))
* [#3784](https://github.com/openlayers/ol3/pull/3784) - Always write the GeoJSONFeature geometry property ([@fredj](https://github.com/fredj))
* [#3783](https://github.com/openlayers/ol3/pull/3783) - Fix broken wmts-hidpi example ([@ahocevar](https://github.com/ahocevar))
* [#3782](https://github.com/openlayers/ol3/pull/3782) - Fix assert documentation typo ([@gberaudo](https://github.com/gberaudo))
* [#3758](https://github.com/openlayers/ol3/pull/3758) - Removal of ol.FeatureOverlay ([@ahocevar](https://github.com/ahocevar))
* [#3775](https://github.com/openlayers/ol3/pull/3775) - Add ol-touch but keep ol-viewport className. ([@pgiraud](https://github.com/pgiraud))
* [#3713](https://github.com/openlayers/ol3/pull/3713) - Add missing propertyNames member for olx.format.WFSWriteGetFeatureOptions ([@bartvde](https://github.com/bartvde))
* [#3763](https://github.com/openlayers/ol3/pull/3763) - Standardise draw/modify descriptions ([@probins](https://github.com/probins))

41
changelog/v3.8.0.md Normal file
View File

@@ -0,0 +1,41 @@
# v3.8.0
## Summary
The v3.8.0 release includes features and fixes from 33 pull requests since v3.7.0. While summer vacations have slowed the pace of development a bit this month, there are some nice improvements in this release. See the complete list below for details.
## New features and fixes
* [#3957](https://github.com/openlayers/ol3/pull/3957) - Properly handle vertex deletion with multiple features. ([@tschaub](https://github.com/tschaub))
* [#3954](https://github.com/openlayers/ol3/pull/3954) - Remove ol.control.Control.bindMouseOutFocusOutBlur function. ([@fredj](https://github.com/fredj))
* [#3214](https://github.com/openlayers/ol3/pull/3214) - Pixel manipulation with raster sources. ([@tschaub](https://github.com/tschaub))
* [#3946](https://github.com/openlayers/ol3/pull/3946) - Fix vertex deletion for Modify interaction on mobile devices. ([@Turbo87](https://github.com/Turbo87))
* [#3910](https://github.com/openlayers/ol3/pull/3910) - Do not provide an AMD environment to ol.ext modules. ([@ahocevar](https://github.com/ahocevar))
* [#3934](https://github.com/openlayers/ol3/pull/3934) - Fix `drawstart` and `drawend` events when drawing a point ([@fredj](https://github.com/fredj))
* [#3774](https://github.com/openlayers/ol3/pull/3774) - Measure tooltips touchdevice ([@pgiraud](https://github.com/pgiraud))
* [#3949](https://github.com/openlayers/ol3/pull/3949) - Remove count argument from `called` function ([@fredj](https://github.com/fredj))
* [#3950](https://github.com/openlayers/ol3/pull/3950) - Remove reference to vbarray.js ([@elemoine](https://github.com/elemoine))
* [#3947](https://github.com/openlayers/ol3/pull/3947) - Clarify documentation of Image source ratio option. ([@alvinlindstam](https://github.com/alvinlindstam))
* [#3920](https://github.com/openlayers/ol3/pull/3920) - Remove use_types_for_optimization from custom build tutorial. ([@probins](https://github.com/probins))
* [#3922](https://github.com/openlayers/ol3/pull/3922) - Document {?-?} pattern in expandUrl ([@probins](https://github.com/probins))
* [#3921](https://github.com/openlayers/ol3/pull/3921) - Cache node_modules on Travis. ([@bjornharrtell](https://github.com/bjornharrtell))
* [#3942](https://github.com/openlayers/ol3/pull/3942) - Fix WMTS TileMatrixSet lookup by SRS identifier ([@ahocevar](https://github.com/ahocevar))
* [#3945](https://github.com/openlayers/ol3/pull/3945) - Simplify icon example and show popup at clicked position ([@ahocevar](https://github.com/ahocevar))
* [#3930](https://github.com/openlayers/ol3/pull/3930) - Use goog.functions.identity instead of goog.identityFunction ([@fredj](https://github.com/fredj))
* [#3929](https://github.com/openlayers/ol3/pull/3929) - Expand description for XYZ source ([@probins](https://github.com/probins))
* [#3933](https://github.com/openlayers/ol3/pull/3933) - Snap center to pixel to avoid floating point issues ([@ahocevar](https://github.com/ahocevar))
* [#3932](https://github.com/openlayers/ol3/pull/3932) - SnapOptions: Fix typo in pixelTolerance JSDoc ([@Turbo87](https://github.com/Turbo87))
* [#3931](https://github.com/openlayers/ol3/pull/3931) - Remove unused htmlparser2 package ([@fredj](https://github.com/fredj))
* [#3912](https://github.com/openlayers/ol3/pull/3912) - Fix the event type fired by goog.fx.Dragger ([@fredj](https://github.com/fredj))
* [#3871](https://github.com/openlayers/ol3/pull/3871) - Document change events properly ([@ahocevar](https://github.com/ahocevar))
* [#3906](https://github.com/openlayers/ol3/pull/3906) - Clear features properly when there is no spatial index ([@ahocevar](https://github.com/ahocevar))
* [#3896](https://github.com/openlayers/ol3/pull/3896) - Fire WebGL precompose event in same sequence as other renderers ([@ahocevar](https://github.com/ahocevar))
* [#3359](https://github.com/openlayers/ol3/pull/3359) - Enable deep clone of MultiPolygon. ([@Kenny806](https://github.com/Kenny806))
* [#3895](https://github.com/openlayers/ol3/pull/3895) - Rework the tile queue for multiple queues. ([@aisaacs](https://github.com/aisaacs))
* [#3894](https://github.com/openlayers/ol3/pull/3894) - Install Python dependencies without sudo. ([@tschaub](https://github.com/tschaub))
* [#3824](https://github.com/openlayers/ol3/pull/3824) - Improve docs for interaction.Select. ([@probins](https://github.com/probins))
* [#3884](https://github.com/openlayers/ol3/pull/3884) - Provide a debug loader for the library. ([@tschaub](https://github.com/tschaub))
* [#3883](https://github.com/openlayers/ol3/pull/3883) - Ignore layer filter for unmanaged layers ([@ahocevar](https://github.com/ahocevar))
* [#3859](https://github.com/openlayers/ol3/pull/3859) - Add in crossOrigin option ([@llambanna](https://github.com/llambanna))
* [#3873](https://github.com/openlayers/ol3/pull/3873) - Correct minor typo in modifyinteraction ([@probins](https://github.com/probins))
* [#3872](https://github.com/openlayers/ol3/pull/3872) - Correct event notations in ol.Feature ([@probins](https://github.com/probins))

7
changelog/v3.8.1.md Normal file
View File

@@ -0,0 +1,7 @@
# v3.8.1
## Summary
This is a patch release that updates the URL for builds shown in the examples. Details below.
* [#3970](https://github.com/openlayers/ol3/pull/3970) - Pull builds from openlayers.org. ([@tschaub](https://github.com/tschaub))

7
changelog/v3.8.2.md Normal file
View File

@@ -0,0 +1,7 @@
# v3.8.2
## Summary
This is a patch release that corrects the URL for builds shown in the examples. Details below.
* [#3979](https://github.com/openlayers/ol3/pull/3979) - Fix URLs for openlayers.org resources. ([@tschaub](https://github.com/tschaub))

91
changelog/v3.9.0.md Normal file
View File

@@ -0,0 +1,91 @@
# v3.9.0
## Summary
The v3.9.0 release includes features and fixes from 62 pull requests since the v3.8.2 release. New features include:
* [#3986](https://github.com/openlayers/ol3/pull/3986) - Modify 'url' option of ol.source.Vector to accept a function ([@alvinlindstam](https://github.com/alvinlindstam))
* [#4069](https://github.com/openlayers/ol3/pull/4069) - Add Z-index to layers ([@gberaudo](https://github.com/gberaudo))
* [#4044](https://github.com/openlayers/ol3/pull/4044) - Add ol.interaction.Draw#continueDrawing ([@elemoine](https://github.com/elemoine))
* [#4008](https://github.com/openlayers/ol3/pull/4008) - Add a Translate interaction ([@elemoine](https://github.com/elemoine))
See the complete list below for details. And see the following notes to know how to upgrade from v3.8.x to v3.9.0.
## Upgrade notes
#### `ol.style.Circle` changes
The experimental `getAnchor`, `getOrigin`, and `getSize` methods have been removed. The anchor and origin of a circle symbolizer are not modifiable, so these properties should not need to be accessed. The radius and stroke width can be used to calculate the rendered size of a circle symbolizer if needed:
```js
// calculate rendered size of a circle symbolizer
var width = 2 * circle.getRadius();
if (circle.getStroke()) {
width += circle.getStroke().getWidth() + 1;
}
```
## New features and fixes
* [#4055](https://github.com/openlayers/ol3/pull/4055) - Improve graticule perf ([@fgravin](https://github.com/fgravin))
* [#4088](https://github.com/openlayers/ol3/pull/4088) - Update jshint to v2.8.0 ([@fredj](https://github.com/fredj))
* [#4089](https://github.com/openlayers/ol3/pull/4089) - SelectEventType in ol.interaction namespace ([@pgiraud](https://github.com/pgiraud))
* [#4095](https://github.com/openlayers/ol3/pull/4095) - Zoom to the extent of the drag box. ([@tschaub](https://github.com/tschaub))
* [#4084](https://github.com/openlayers/ol3/pull/4084) - Fewer circle exports. ([@tschaub](https://github.com/tschaub))
* [#4094](https://github.com/openlayers/ol3/pull/4094) - Allow source.setAttributions() to be exported. ([@tschaub](https://github.com/tschaub))
* [#4096](https://github.com/openlayers/ol3/pull/4096) - Reinstate inheritdoc to fix #4082 ([@bjornharrtell](https://github.com/bjornharrtell))
* [#4091](https://github.com/openlayers/ol3/pull/4091) - Remove unused ol.renderer.webgl.Map.DEFAULT_COLOR_VALUES_ ([@fredj](https://github.com/fredj))
* [#4092](https://github.com/openlayers/ol3/pull/4092) - Minor coding style fixes ([@fredj](https://github.com/fredj))
* [#4083](https://github.com/openlayers/ol3/pull/4083) - Add API descriptions. ([@tschaub](https://github.com/tschaub))
* [#4078](https://github.com/openlayers/ol3/pull/4078) - Enable all the compiler checks ([@fredj](https://github.com/fredj))
* [#4085](https://github.com/openlayers/ol3/pull/4085) - Parse nested document tag ([@oterral](https://github.com/oterral))
* [#4060](https://github.com/openlayers/ol3/pull/4060) - Remove unnecessary cast ([@fredj](https://github.com/fredj))
* [#4064](https://github.com/openlayers/ol3/pull/4064) - Use a private variable to cache the default style array ([@fredj](https://github.com/fredj))
* [#4081](https://github.com/openlayers/ol3/pull/4081) - Update link to workshop. ([@tschaub](https://github.com/tschaub))
* [#4062](https://github.com/openlayers/ol3/pull/4062) - Remove ol.xml.makeParsersNS and use ol.xml.makeStructureNS instead ([@fredj](https://github.com/fredj))
* [#3986](https://github.com/openlayers/ol3/pull/3986) - Modify 'url' option of ol.source.Vector to accept a function ([@alvinlindstam](https://github.com/alvinlindstam))
* [#4077](https://github.com/openlayers/ol3/pull/4077) - Add missing const jsdoc annotation ([@fredj](https://github.com/fredj))
* [#4080](https://github.com/openlayers/ol3/pull/4080) - Remove unused goog.require in examples ([@fredj](https://github.com/fredj))
* [#4041](https://github.com/openlayers/ol3/pull/4041) - Fix custom build issue ([@elemoine](https://github.com/elemoine))
* [#4059](https://github.com/openlayers/ol3/pull/4059) - Clarify drag interaction example to inform about ol.interaction.Translate ([@alvinlindstam](https://github.com/alvinlindstam))
* [#4069](https://github.com/openlayers/ol3/pull/4069) - Add Z-index to layers ([@gberaudo](https://github.com/gberaudo))
* [#4076](https://github.com/openlayers/ol3/pull/4076) - Add assertion for required option 'code' on ol.proj.Projection ([@weskamm](https://github.com/weskamm))
* [#4075](https://github.com/openlayers/ol3/pull/4075) - setOpacity of Image undefined ([@bartvde](https://github.com/bartvde))
* [#4044](https://github.com/openlayers/ol3/pull/4044) - Add ol.interaction.Draw#continueDrawing ([@elemoine](https://github.com/elemoine))
* [#4073](https://github.com/openlayers/ol3/pull/4073) - Better type definition ([@fredj](https://github.com/fredj))
* [#4072](https://github.com/openlayers/ol3/pull/4072) - Update to closure-util 1.7.0 ([@elemoine](https://github.com/elemoine))
* [#4070](https://github.com/openlayers/ol3/pull/4070) - Make the debug server work regardless of the current working directory. ([@tschaub](https://github.com/tschaub))
* [#4067](https://github.com/openlayers/ol3/pull/4067) - Fix bootstrap class name in examples ([@fredj](https://github.com/fredj))
* [#4050](https://github.com/openlayers/ol3/pull/4050) - Use view.getRotation and view.getResolution instead of view.getState ([@fredj](https://github.com/fredj))
* [#4051](https://github.com/openlayers/ol3/pull/4051) - Move wrench node package to devDependencies ([@fredj](https://github.com/fredj))
* [#4047](https://github.com/openlayers/ol3/pull/4047) - Remove pystache dependency ([@fredj](https://github.com/fredj))
* [#4027](https://github.com/openlayers/ol3/pull/4027) - closure-compiler v20150729 compatibility ([@fredj](https://github.com/fredj))
* [#4040](https://github.com/openlayers/ol3/pull/4040) - Better docs for ol.ENABLE_[WEBGL|CANVAS|DOM] ([@elemoine](https://github.com/elemoine))
* [#4032](https://github.com/openlayers/ol3/pull/4032) - Improve ol.Overlay extensibility ([@gberaudo](https://github.com/gberaudo))
* [#4037](https://github.com/openlayers/ol3/pull/4037) - Don't install python packages in before_install ([@fredj](https://github.com/fredj))
* [#4028](https://github.com/openlayers/ol3/pull/4028) - Update to closure-util 1.6 ([@elemoine](https://github.com/elemoine))
* [#4014](https://github.com/openlayers/ol3/pull/4014) - Remove deprecated checkStructDictInheritance ([@fredj](https://github.com/fredj))
* [#3987](https://github.com/openlayers/ol3/pull/3987) - Remove unnecessary cast ([@fredj](https://github.com/fredj))
* [#4035](https://github.com/openlayers/ol3/pull/4035) - Remove unused sphere and ellipsoid methods. ([@tschaub](https://github.com/tschaub))
* [#4031](https://github.com/openlayers/ol3/pull/4031) - Fixing size of popup ([@pgiraud](https://github.com/pgiraud))
* [#4023](https://github.com/openlayers/ol3/pull/4023) - Render map when layer.setMap(map) called ([@elemoine](https://github.com/elemoine))
* [#4026](https://github.com/openlayers/ol3/pull/4026) - Fix Font Awesome CSS class in examples ([@fredj](https://github.com/fredj))
* [#4024](https://github.com/openlayers/ol3/pull/4024) - Correct documentation for ol.FeatureStyleFunction ([@marcjansen](https://github.com/marcjansen))
* [#4011](https://github.com/openlayers/ol3/pull/4011) - Make Modify interaction listen to feature changes ([@elemoine](https://github.com/elemoine))
* [#3917](https://github.com/openlayers/ol3/pull/3917) - Resolved issue with cluster source reloading ([@cmiles74](https://github.com/cmiles74))
* [#4015](https://github.com/openlayers/ol3/pull/4015) - Add a getUrls Method to ol.source.XYZ ([@weskamm](https://github.com/weskamm))
* [#4019](https://github.com/openlayers/ol3/pull/4019) - Simplify .editorconfig file ([@marcjansen](https://github.com/marcjansen))
* [#4002](https://github.com/openlayers/ol3/pull/4002) - Update closure-library to latest commit ([@fredj](https://github.com/fredj))
* [#4018](https://github.com/openlayers/ol3/pull/4018) - Fix rotate buttons in animation example ([@marcjansen](https://github.com/marcjansen))
* [#4013](https://github.com/openlayers/ol3/pull/4013) - Use a more recent version of marked ([@marcjansen](https://github.com/marcjansen))
* [#4017](https://github.com/openlayers/ol3/pull/4017) - Do not overwrite projections in the registry simply by using `new ol.proj.Projection()` ([@ahocevar](https://github.com/ahocevar))
* [#4008](https://github.com/openlayers/ol3/pull/4008) - Add a Translate interaction ([@elemoine](https://github.com/elemoine))
* [#3230](https://github.com/openlayers/ol3/pull/3230) - Add stroke to default editing style for geometry collections ([@pgiraud](https://github.com/pgiraud))
* [#4007](https://github.com/openlayers/ol3/pull/4007) - Do not use Function.prototype.bind in examples ([@elemoine](https://github.com/elemoine))
* [#4006](https://github.com/openlayers/ol3/pull/4006) - Fix typo (vegetaion -> vegetation) ([@elemoine](https://github.com/elemoine))
* [#3993](https://github.com/openlayers/ol3/pull/3993) - Replace base symbols with overridden ones when generating info.json ([@ahocevar](https://github.com/ahocevar))
* [#3992](https://github.com/openlayers/ol3/pull/3992) - Fix typo in Makefile ([@fredj](https://github.com/fredj))
* [#3989](https://github.com/openlayers/ol3/pull/3989) - Handle JSONP errors in ol.source.TileJSON ([@fredj](https://github.com/fredj))
* [#3983](https://github.com/openlayers/ol3/pull/3983) - Remove doc footer with timestamp. ([@tschaub](https://github.com/tschaub))
* [#3984](https://github.com/openlayers/ol3/pull/3984) - Style source control links in examples. ([@tschaub](https://github.com/tschaub))
* [#3982](https://github.com/openlayers/ol3/pull/3982) - Rebuild examples if package.json changes. ([@tschaub](https://github.com/tschaub))

View File

@@ -1,3 +0,0 @@
{
"library_url": "https://github.com/google/closure-library/archive/0011afd534469ba111786fe68300a634e08a4d80.zip"
}

View File

@@ -12,59 +12,27 @@
],
"externs": [
"externs/bingmaps.js",
"externs/cartodb.js",
"externs/bootstrap.js",
"externs/closure-compiler.js",
"externs/esrijson.js",
"externs/example.js",
"externs/fastclick.js",
"externs/geojson.js",
"externs/jquery-1.9.js",
"externs/proj4js.js",
"externs/tilejson.js",
"externs/topojson.js",
"externs/vbarray.js"
"externs/topojson.js"
],
"define": [
"goog.array.ASSUME_NATIVE_FUNCTIONS=true",
"goog.dom.ASSUME_STANDARDS_MODE=true",
"goog.json.USE_NATIVE_JSON=true",
"goog.DEBUG=false"
],
"jscomp_error": [
"accessControls",
"ambiguousFunctionDecl",
"checkEventfulObjectDisposal",
"checkRegExp",
"checkStructDictInheritance",
"checkTypes",
"checkVars",
"const",
"constantProperty",
"deprecated",
"duplicateMessage",
"es3",
"es5Strict",
"externsValidation",
"fileoverviewTags",
"globalThis",
"internetExplorerChecks",
"invalidCasts",
"misplacedTypeAnnotation",
"missingGetCssName",
"missingProperties",
"missingProvide",
"missingRequire",
"missingReturn",
"newCheckTypes",
"nonStandardJsDocs",
"suspiciousCode",
"strictModuleDepCheck",
"typeInvalidation",
"undefinedNames",
"undefinedVars",
"uselessCode",
"visibility"
"*"
],
"jscomp_off": [
"lintChecks",
"analyzerChecks",
"missingProvide",
"unknownDefines"
],
"extra_annotation_name": [

View File

@@ -13,10 +13,10 @@
"externs": [
"externs/bingmaps.js",
"externs/bootstrap.js",
"externs/cartodb.js",
"externs/closure-compiler.js",
"externs/esrijson.js",
"externs/example.js",
"externs/fastclick.js",
"externs/geojson.js",
"externs/jquery-1.9.js",
"externs/proj4js.js",
@@ -24,46 +24,14 @@
"externs/topojson.js"
],
"define": [
"goog.array.ASSUME_NATIVE_FUNCTIONS=true",
"goog.dom.ASSUME_STANDARDS_MODE=true",
"goog.json.USE_NATIVE_JSON=true",
"goog.DEBUG=false"
],
"jscomp_error": [
"accessControls",
"ambiguousFunctionDecl",
"checkEventfulObjectDisposal",
"checkRegExp",
"checkStructDictInheritance",
"checkTypes",
"checkVars",
"const",
"constantProperty",
"deprecated",
"duplicateMessage",
"es3",
"es5Strict",
"externsValidation",
"fileoverviewTags",
"globalThis",
"internetExplorerChecks",
"invalidCasts",
"misplacedTypeAnnotation",
"missingGetCssName",
"missingProperties",
"missingProvide",
"missingRequire",
"missingReturn",
"newCheckTypes",
"nonStandardJsDocs",
"suspiciousCode",
"strictModuleDepCheck",
"typeInvalidation",
"undefinedNames",
"undefinedVars",
"unknownDefines",
"uselessCode",
"visibility"
"*"
],
"jscomp_off": [
"lintChecks",
"analyzerChecks"
],
"extra_annotation_name": [
"api", "observable"

View File

@@ -1,87 +1,119 @@
<!doctype html>
<html lang="en">
<!DOCTYPE html>
<html lang="en-US">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="chrome=1">
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
<meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
<link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/twitter-bootstrap/2.3.1/css/bootstrap-combined.min.css" type="text/css">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css" type="text/css">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" type="text/css">
<link rel="stylesheet" href="./resources/prism/prism.css" type="text/css">
<link rel="stylesheet" href="../css/ol.css" type="text/css">
<link rel="stylesheet" href="./resources/layout.css" type="text/css">
{{{ extraHead }}}
{{{ extraHead.local }}}
{{{ css.tag }}}
<link rel="stylesheet" href="./resources/prism/prism.css" type="text/css">
<script src="https://cdn.polyfill.io/v2/polyfill.min.js?features=fetch,requestAnimationFrame,Element.prototype.classList"></script>
<script src="./resources/zeroclipboard/ZeroClipboard.min.js"></script>
<title>{{ title }}</title>
</head>
<body>
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="navbar-inner">
<div class="container" id="navbar-inner-container">
<a class="brand" href="./"><img src="./resources/logo-70x70.png"> OpenLayers 3 Examples</a>
<header class="navbar" role="navigation">
<div class="container">
<div class="display-table pull-left" id="navbar-logo-container">
<a class="navbar-brand" href="./"><img src="./resources/logo-70x70.png">&nbsp;OpenLayers Examples</a>
</div>
<!-- menu items that get hidden below 768px width -->
<nav class='collapse navbar-collapse navbar-responsive-collapse'>
<ul class="nav navbar-nav pull-right">
<li><a href="../doc">Docs</a></li>
<li><a class="active" href="index.html">Examples</a></li>
<li><a href="../apidoc">API</a></li>
<li><a href="https://github.com/openlayers/ol3">Code</a></li>
</ul>
</nav>
</div>
</div>
</header>
<div class="container-fluid">
{{{ contents }}}
<div id="latest-check" class="alert alert-warning alert-dismissible" role="alert" style="display:none">
<button id="latest-dismiss" type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>
This example uses OpenLayers v<span>{{ olVersion }}</span>. The <a id="latest-link" href="#" class="alert-link">latest</a> is v<span id="latest-version"></span>.
</div>
<div class="row-fluid">
<div class="span12">
<h4 id="title">{{ title }}</h4>
{{{ contents }}}
</div>
</div>
<div class="row-fluid">
<div class="span12">
<p id="shortdesc">{{ shortdesc }}</p>
<div id="docs">{{ md docs }}</div>
<div id="tags">{{ tags }}</div>
<div id="api-links">Related API documentation: {{{ js.apiHtml }}}</div>
</div>
</div>
<div class="row-fluid">
<hr>
<form method="POST" target="_blank" action="http://jsfiddle.net/api/post/jquery/1.11.0/">
<input type="button" class="btn btn-info" id="copy-button" value="Copy example code">
<input type="submit" class="btn btn-primary" id="jsfiddle-button" value="Create JSFiddle">
<div id="source-controls">
<a id="copy-button"><i class="fa fa-clipboard"></i> Copy</a>
<a id="jsfiddle-button"><i class="fa fa-jsfiddle"></i> Edit</a>
</div>
<form method="POST" id="jsfiddle-form" target="_blank" action="http://jsfiddle.net/api/post/library/pure/">
<textarea class="hidden" name="js">{{ js.source }}</textarea>
<textarea class="hidden" name="css">{{ css.source }}</textarea>
<textarea class="hidden" name="html">{{ contents }}</textarea>
<input type="hidden" name="wrap" value="l">
<input type="hidden" name="resources" value="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css,https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js,https://cdnjs.cloudflare.com/ajax/libs/ol3/{{ olVersion }}/ol.css,https://cdnjs.cloudflare.com/ajax/libs/ol3/{{ olVersion }}/ol.js">
<pre><code id="example-source" class="language-markup">&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;{{ title }}&lt;/title&gt;
&lt;script src="https://code.jquery.com/jquery-1.11.2.min.js"&gt;&lt;/script&gt;
&lt;link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css"&gt;
&lt;script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"&gt;&lt;/script&gt;
&lt;link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/ol3/{{ olVersion }}/ol.css" type="text/css"&gt;
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/ol3/{{ olVersion }}/ol.js"&gt;&lt;/script&gt;
{{ extraHead }}
{{#if css.source}}
&lt;style&gt;
{{ css.source }}
&lt;/style&gt;
{{/if}}
&lt;/head&gt;
&lt;body&gt;
&lt;div class="container-fluid"&gt;
{{ contents }}
&lt;/div&gt;
&lt;script&gt;
{{ js.source }}
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
<input type="hidden" name="resources" value="http://openlayers.org/en/v{{ olVersion }}/css/ol.css,http://openlayers.org/en/v{{ olVersion }}/build/ol.js{{ extraResources }}">
</form>
<pre><code id="example-source" class="language-markup">&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;{{ title }}&lt;/title&gt;
&lt;link rel="stylesheet" href="http://openlayers.org/en/v{{ olVersion }}/css/ol.css" type="text/css"&gt;
&lt;script src="http://openlayers.org/en/v{{ olVersion }}/build/ol.js"&gt;&lt;/script&gt;{{#if extraHead.remote}}
{{ indent extraHead.remote spaces=4 }}{{/if}}{{#if css.source}}
&lt;style&gt;
{{ indent css.source spaces=6 }} &lt;/style&gt;{{/if}}
&lt;/head&gt;
&lt;body&gt;
{{ indent contents spaces=4 }} &lt;script&gt;
{{ indent js.source spaces=6 }} &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
</div>
</div>
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script src="http://maxcdn.bootstrapcdn.com/twitter-bootstrap/2.3.1/js/bootstrap.min.js"></script>
<script src="./resources/common.js"></script>
<script src="./resources/prism/prism.min.js"></script>
{{{ js.tag }}}
</body>
<script>
var packageUrl = 'https://raw.githubusercontent.com/openlayers/openlayers.github.io/build/package.json';
fetch(packageUrl).then(function(response) {
return response.json();
}).then(function(json) {
var latestVersion = json.version;
document.getElementById('latest-version').innerHTML = latestVersion;
var url = window.location.href;
var branchSearch = url.match(/\/([^\/]*)\/examples\//);
var cookieText = 'dismissed=-' + latestVersion + '-';
var dismissed = document.cookie.indexOf(cookieText) != -1;
if (!dismissed && /^v[0-9\.]*$/.test(branchSearch[1]) && '{{ olVersion }}' != latestVersion) {
var link = url.replace(branchSearch[0], '/latest/examples/');
fetch(link, {method: 'head'}).then(function(response) {
var a = document.getElementById('latest-link');
a.href = response.status == 200 ? link : '../../latest/examples/';
});
var latestCheck = document.getElementById('latest-check');
latestCheck.style.display = '';
document.getElementById('latest-dismiss').onclick = function() {
latestCheck.style.display = 'none';
document.cookie = cookieText;
}
}
});
</script>
</html>

View File

@@ -16,6 +16,4 @@ To enable this, examples have the following, not needed in application code:
* html files load `resources/common.js` and some scripts use `common.getRendererFromQueryString()` to set the map renderer; application code would not need these
* in addition, examples use Twitter Bootstrap and jQuery; this is of course not a requirement - you may use whichever presentation/helper libraries you wish
At the bottom of each example generated in the `build/examples` folder, a modified version of its source code is shown. That modified version can be run standalone and is usually used as starting point for users to extend examples into their own application.

View File

@@ -18,7 +18,6 @@
"plugins": [
"node_modules/jsdoc/plugins/markdown",
"config/jsdoc/api/plugins/inheritdoc",
"config/jsdoc/api/plugins/interface",
"config/jsdoc/api/plugins/typedefs",
"config/jsdoc/api/plugins/events",
"config/jsdoc/api/plugins/observable",

View File

@@ -10,7 +10,8 @@
<td><p>Layers are lightweight containers that get their data from [sources](ol.source.html).</p>
[ol.layer.Tile](ol.layer.Tile.html)<br>
[ol.layer.Image](ol.layer.Image.html)<br>
[ol.layer.Vector](ol.layer.Vector.html)</td>
[ol.layer.Vector](ol.layer.Vector.html)<br>
[ol.layer.VectorTile](ol.layer.VectorTile.html)</td>
</tr><tr>
<th>Controls</th><th>Interactions</th><th>Sources and formats</th>
</tr><tr>
@@ -27,6 +28,7 @@ Interactions for [vector features](ol.Feature.html)
<td>[Tile sources](ol.source.Tile.html) for [ol.layer.Tile](ol.layer.Tile.html)
<br>[Image sources](ol.source.Image.html) for [ol.layer.Image](ol.layer.Image.html)
<br>[Vector sources](ol.source.Vector.html) for [ol.layer.Vector](ol.layer.Vector.html)
<br>[Vector tile sources](ol.source.VectorTile.html) for [ol.layer.VectorTile](ol.layer.VectorTile.html)
<br>[Formats](ol.format.Feature.html) for reading/writing vector data
<br>[ol.format.WMSCapabilities](ol.format.WMSCapabilities.html)</td></tr>
<tr><th>Projections</th><th>Observable objects</th><th>Other components</th></tr>
@@ -35,6 +37,28 @@ Interactions for [vector features](ol.Feature.html)
<td><p>Changes to all [ol.Objects](ol.Object.html) can observed by calling the [object.on('propertychange')](ol.Object.html#on) method. Listeners receive an [ol.ObjectEvent](ol.ObjectEvent.html) with information on the changed property and old value.</p>
<td>[ol.DeviceOrientation](ol.DeviceOrientation.html)<br>
[ol.Geolocation](ol.Geolocation.html)<br>
[ol.Overlay](ol.Overlay.html)<br>
[ol.FeatureOverlay](ol.FeatureOverlay.html)<br></td>
[ol.Overlay](ol.Overlay.html)<br></td>
</tr></table>
&nbsp;
#### API change policy
The OpenLayers 3.x API consists of
* names of classes, class methods and properties
* names of static functions and constants
* order and types of function arguments
* types of function return values
API elements marked as `experimental` provide stable and functioning code, but may change.
Any changes will be documented in upgrade notes so application code can be changed appropriately
before using the new version of the library. All other API elements will remain compatible throughout the 3.x releases so that no changes to existing application code are necessary when upgrading to a later version.
*Note*: The API change policy does not cover CSS class names that are used to theme the
OpenLayers UI.
*Note for Closure Compiler users compiling their application code together with OpenLayers*:
The names of types other than those in the list above (e.g. `ol.Pixel`) are subject to change. It
is therefore recommended to either use the resolved type as listed in the API docs (e.g.
`Array.<number>` instead of `ol.Pixel`), or pay attention to the upgrade notes, which will list
the changes for those types.

View File

@@ -11,12 +11,13 @@ exports.defineTags = function(dictionary) {
canHaveType: false,
canHaveName: false,
onTagged: function(doclet, tag) {
includeTypes(doclet);
var level = tag.text || "experimental";
if (levels.indexOf(level) >= 0) {
doclet.stability = level;
} else {
var errorText = util.format('Invalid stability level (%s) in %s line %s', tag.text, doclet.meta.filename, doclet.meta.lineno);
require('jsdoc/util/error').handle( new Error(errorText) );
require('jsdoc/lib/jsdoc/util/error').handle( new Error(errorText) );
}
}
});
@@ -25,11 +26,15 @@ exports.defineTags = function(dictionary) {
/*
* Based on @stability annotations, and assuming that items with no @stability
* annotation should not be documented, this plugin removes undocumented symbols
* Based on @api annotations, and assuming that items with no @api annotation
* should not be documented, this plugin removes undocumented symbols
* from the documentation.
*/
var api = [];
var classes = {};
var types = {};
function hasApiMembers(doclet) {
return doclet.longname.split('#')[0] == this.longname;
}
@@ -71,8 +76,30 @@ function includeAugments(doclet) {
}
}
var api = [];
var classes = {};
function extractTypes(item) {
item.type.names.forEach(function(type) {
var match = type.match(/^(.*<)?([^>]*)>?$/);
if (match) {
types[match[2]] = true;
}
});
}
function includeTypes(doclet) {
if (doclet.params && doclet.kind != 'class') {
doclet.params.forEach(extractTypes);
}
if (doclet.returns) {
doclet.returns.forEach(extractTypes);
}
if (doclet.isEnum) {
types[doclet.meta.code.name] = true;
}
if (doclet.type && doclet.meta.code.type == 'MemberExpression') {
// types in olx.js
extractTypes(doclet);
}
}
exports.handlers = {
@@ -80,6 +107,9 @@ exports.handlers = {
var doclet = e.doclet;
// Keep track of api items - needed in parseComplete to determine classes
// with api members.
if (doclet.meta.filename == 'olx.js' && doclet.kind == 'typedef') {
doclet.undocumented = false;
}
if (doclet.stability) {
api.push(doclet);
}
@@ -120,7 +150,7 @@ exports.handlers = {
// constructor from the docs.
doclet._hideConstructor = true;
includeAugments(doclet);
} else if (!doclet._hideConstructor) {
} else if (doclet.undocumented !== false && !doclet._hideConstructor && !(doclet.kind == 'typedef' && doclet.longname in types)) {
// Remove all other undocumented symbols
doclet.undocumented = true;
}

View File

@@ -1,25 +0,0 @@
exports.defineTags = function(dictionary) {
var classTag = dictionary.lookUp('class');
dictionary.defineTag('interface', {
mustHaveValue: false,
onTagged: function(doclet, tag) {
classTag.onTagged.apply(this, arguments);
doclet.interface = true;
}
});
var augmentsTag = dictionary.lookUp('augments');
dictionary.defineTag('implements', {
mustHaveValue: true,
onTagged: function(doclet, tag) {
tag.value = tag.value.match(/^\{?([^\}]*)\}?$/)[1];
augmentsTag.onTagged.apply(this, arguments);
if (!doclet.implements) {
doclet.implements = [];
}
doclet.implements.push(tag.value);
}
});
};

View File

@@ -5,6 +5,10 @@
var lastOlxTypedef = null;
var olxTypes = {};
// names of the olx typenames
var olxTypeNames = [];
// types that are undefined or typedefs containing undefined
var undefinedLikes = null;
function addSubparams(params) {
for (var j = 0, jj = params.length; j < jj; ++j) {
@@ -23,17 +27,71 @@ function addSubparams(params) {
}
}
/**
* Changes the description of the param, if it is found to be a required
* option of an olxTypeName.
*/
function markRequiredIfNeeded(doclet){
var memberof = doclet.memberof;
// only check doclets that belong to an olxTypeName
if (!memberof || olxTypeNames.indexOf(memberof) == -1) {
return doclet;
}
var types = doclet.type.names;
var isRequiredParam = true;
// iterate over all types that are like-undefined (see above for explanation)
for (var idx = undefinedLikes.length - 1; idx >= 0; idx--) {
var undefinedLike = undefinedLikes[idx];
// … if the current types contains a type that is undefined-like,
// it is not required.
if (types.indexOf(undefinedLike) != -1) {
isRequiredParam = false;
}
}
if (isRequiredParam) {
var reqSnippet = '<span class="required-option">Required.</span></p>';
var endsWithP = /<\/p>$/i;
var description = doclet.description;
if (description && endsWithP.test(description)) {
description = description.replace(endsWithP, ' ' + reqSnippet);
} else if (doclet.description === undefined) {
description = '<p>' + reqSnippet;
}
doclet.description = description;
}
return doclet;
}
/**
* Iterates over all doclets and finds the names of types that contain
* undefined. Stores the names in the global variable undefinedLikes, so
* that e.g. markRequiredIfNeeded can use these.
*/
function findTypesLikeUndefined(doclets) {
undefinedLikes = ['undefined']; // include type 'undefined' explicitly
for (var i = doclets.length - 1; i >= 0; --i) {
var doclet = doclets[i];
if(doclet.kind === 'typedef') {
var types = doclet.type.names;
if (types.indexOf('undefined') !== -1) {
// the typedef contains 'undefined', so it self is undefinedLike.
undefinedLikes.push(doclet.longname);
}
}
}
}
exports.handlers = {
newDoclet: function(e) {
var doclet = e.doclet;
if (doclet.meta.filename == 'olx.js') {
// do nothing if not marked @api
if (!doclet.stability) {
return;
}
if (doclet.kind == 'typedef') {
lastOlxTypedef = doclet;
olxTypeNames.push(doclet.longname);
olxTypes[doclet.longname] = [];
doclet.properties = [];
} else if (lastOlxTypedef && doclet.memberof == lastOlxTypedef.longname) {
@@ -51,12 +109,14 @@ exports.handlers = {
parseComplete: function(e) {
var doclets = e.doclets;
findTypesLikeUndefined(doclets);
for (var i = doclets.length - 1; i >= 0; --i) {
var doclet = doclets[i];
var params = doclet.params;
if (params) {
addSubparams(params);
}
markRequiredIfNeeded(doclet);
}
}

View File

@@ -24,7 +24,7 @@ The second line tells the Closure compiler the type of the argument.
The third line (`@api`) marks the method as part of the api and thus exportable. The stability can be added as value, e.g. `@api stable`. Without such an api annotation, the method will not be documented in the generated API documentation. Symbols without an api annotation will also not be exportable (unless they are explicitly exported with a `goog.exportProperty` call).
The `@api` annotation can be used in conjunciton with the `@inheritDoc` annotation to export a symbol that is documented on a parent class (where the method may be abstract). In general, `@api` annotations should never be used on abstract methods (only on their implementations).
The `@api` annotation can be used in conjunction with the `@inheritDoc` annotation to export a symbol that is documented on a parent class (where the method may be abstract). In general, `@api` annotations should never be used on abstract methods (only on their implementations).
### Events

View File

@@ -1,10 +1,10 @@
/*global env: true */
var template = require('jsdoc/template'),
fs = require('jsdoc/fs'),
path = require('jsdoc/path'),
var template = require('jsdoc/lib/jsdoc/template'),
fs = require('jsdoc/lib/jsdoc/fs'),
path = require('jsdoc/lib/jsdoc/path'),
taffy = require('taffydb').taffy,
handle = require('jsdoc/util/error').handle,
helper = require('jsdoc/util/templateHelper'),
handle = require('jsdoc/lib/jsdoc/util/error').handle,
helper = require('jsdoc/lib/jsdoc/util/templateHelper'),
_ = require('underscore'),
htmlsafe = helper.htmlsafe,
linkto = helper.linkto,
@@ -113,7 +113,8 @@ function generate(title, docs, filename, resolveLinks) {
var docData = {
filename: filename,
title: title,
docs: docs
docs: docs,
packageInfo: ( find({kind: 'package'}) || [] ) [0]
};
var outpath = path.join(outdir, filename),
@@ -327,11 +328,6 @@ exports.publish = function(taffyData, opts, tutorials) {
}
});
// update outdir if necessary, then create outdir
var packageInfo = ( find({kind: 'package'}) || [] ) [0];
if (packageInfo && packageInfo.name) {
outdir = path.join(outdir, packageInfo.name, packageInfo.version);
}
fs.mkPath(outdir);
// copy the template's static files to outdir
@@ -350,8 +346,8 @@ exports.publish = function(taffyData, opts, tutorials) {
var staticFileScanner;
if (conf['default'].staticFiles) {
staticFilePaths = conf['default'].staticFiles.paths || [];
staticFileFilter = new (require('jsdoc/src/filter')).Filter(conf['default'].staticFiles);
staticFileScanner = new (require('jsdoc/src/scanner')).Scanner();
staticFileFilter = new (require('jsdoc/lib/jsdoc/src/filter')).Filter(conf['default'].staticFiles);
staticFileScanner = new (require('jsdoc/lib/jsdoc/src/scanner')).Scanner();
staticFilePaths.forEach(function(filePath) {
var extraStaticFiles = staticFileScanner.scan([filePath], 10, staticFileFilter);
@@ -439,13 +435,10 @@ exports.publish = function(taffyData, opts, tutorials) {
if (members.globals.length) { generate('Global', [{kind: 'globalobj'}], globalUrl); }
// index page displays information from package.json and lists files
var files = find({kind: 'file'}),
packages = find({kind: 'package'});
var files = find({kind: 'file'});
generate('Index',
packages.concat(
[{kind: 'mainpage', readme: opts.readme, longname: (opts.mainpagetitle) ? opts.mainpagetitle : 'Main Page'}]
).concat(files),
[{kind: 'mainpage', readme: opts.readme, longname: (opts.mainpagetitle) ? opts.mainpagetitle : 'Main Page'}].concat(files),
indexUrl);
// set up the lists that we'll use to generate pages

View File

@@ -53,20 +53,44 @@ $(function () {
$(window).on('resize', _onResize);
_onResize();
var currentVersion = document.getElementById('package-version').innerHTML;
// warn about outdated version
var packageUrl = 'https://raw.githubusercontent.com/openlayers/openlayers.github.io/build/package.json';
fetch(packageUrl).then(function(response) {
return response.json();
}).then(function(json) {
var latestVersion = json.version;
document.getElementById('latest-version').innerHTML = latestVersion;
var url = window.location.href;
var branchSearch = url.match(/\/([^\/]*)\/apidoc\//);
var cookieText = 'dismissed=-' + latestVersion + '-';
var dismissed = document.cookie.indexOf(cookieText) != -1;
if (!dismissed && /^v[0-9\.]*$/.test(branchSearch[1]) && currentVersion != latestVersion) {
var link = url.replace(branchSearch[0], '/latest/apidoc/');
fetch(link, {method: 'head'}).then(function(response) {
var a = document.getElementById('latest-link');
a.href = response.status == 200 ? link : '../../latest/apidoc/';
});
var latestCheck = document.getElementById('latest-check');
latestCheck.style.display = '';
document.getElementById('latest-dismiss').onclick = function() {
latestCheck.style.display = 'none';
document.cookie = cookieText;
}
}
});
// create source code links to github
var srcLinks = $('div.tag-source');
var masterSearch = window.location.href.match(/\/([^\/]*\/)apidoc\//);
if (masterSearch && masterSearch.length) {
var branch = masterSearch[1];
srcLinks.each(function(i, el) {
var textParts = el.innerHTML.trim().split(', ');
var link = 'https://github.com/openlayers/ol3/blob/' + branch +
textParts[0];
el.innerHTML = '<a href="' + link + '">' + textParts[0] + '</a>, ' +
'<a href="' + link + textParts[1].replace('line ', '#l') + '">' +
textParts[1] + '</a>';
});
}
srcLinks.each(function(i, el) {
var textParts = el.innerHTML.trim().split(', ');
var link = 'https://github.com/openlayers/ol3/blob/v' + currentVersion + '/' +
textParts[0];
el.innerHTML = '<a href="' + link + '">' + textParts[0] + '</a>, ' +
'<a href="' + link + textParts[1].replace('line ', '#l') + '">' +
textParts[1] + '</a>';
});
// show/hide unstable items
var links = $('a[href^="ol."]');

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -416,3 +416,7 @@ footer {
left: 250px;
font-weight: normal;
}
#latest-check {
margin-top: -10px;
margin-bottom: 10px;
}

View File

@@ -1,8 +1,12 @@
<?js
var version = obj.packageInfo.version;
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>OpenLayers 3 API Reference - <?js= title ?></title>
<title>OpenLayers v<?js= version ?> API - <?js= title ?></title>
<script src="https://cdn.polyfill.io/v2/polyfill.min.js?features=fetch"></script>
<script src="scripts/prettify/prettify.js"> </script>
<script src="scripts/prettify/lang-css.js"> </script>
<script src="scripts/jquery.min.js"> </script>
@@ -36,11 +40,11 @@
<?js= this.partial('navigation.tmpl', this) ?>
<div class="main">
<h1 class="page-title" data-filename="<?js= filename ?>"><?js= title ?></h1>
<div id="latest-check" class="alert alert-warning alert-dismissible" role="alert" style="display:none">
<button id="latest-dismiss" type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>
This documentation is for OpenLayers v<span id="package-version"><?js= version ?></span>. The <a id="latest-link" href="#" class="alert-link">latest</a> is v<span id="latest-version"></span>.
</div>
<?js= content ?>
<footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc <?js= env.version.number ?></a> on <?js= (new Date()) ?>
</footer>
</div>
</div>
<script>prettyPrint();</script>

View File

@@ -68,7 +68,7 @@ var self = this;
}
?>
<li class="<?js= (eventDoclet || data).stability !== 'stable' ? 'unstable' : '' ?>">
<code><?js= self.linkto(f, type) ?></code>
<code><?js= eventClassName ? self.linkto(f, type) : type ?></code>
<?js if (eventClassName) {
var eventClass = self.find({longname: eventClassName})[0];
if (eventClass) { ?>

View File

@@ -39,7 +39,7 @@ var self = this;
<?js
item.typedefs.forEach(function (v) {
?>
<li data-name="<?js= v.longname ?>" class="<?js= v.stability !== 'stable' ? 'unstable' : ''?>">
<li data-name="<?js= v.longname ?>" class="<?js= (v.stability && v.stability !== 'stable') ? 'unstable' : ''?>">
<?js= self.linkto(v.longname, v.name) ?>
</li>
<?js
@@ -56,7 +56,7 @@ var self = this;
item.methods.forEach(function (v) {
?>
<li data-name="<?js= v.longname ?>" class="<?js= v.stability !== 'stable' ? 'unstable' : ''?>">
<li data-name="<?js= v.longname ?>" class="<?js= (v.stability && v.stability !== 'stable') ? 'unstable' : ''?>">
<?js= self.linkto(v.longname, v.name) ?>
</li>
<?js
@@ -73,7 +73,7 @@ var self = this;
item.fires.forEach(function (v) {
v = self.find({longname: v})[0] || {longname: v, name: v.split(/#?event:/)[1]};
?>
<li data-name="<?js= v.longname ?>" class="<?js= (v.stability != 'stable' ? 'unstable' : '') ?>">
<li data-name="<?js= v.longname ?>" class="<?js= (v.stability && v.stability != 'stable') ? 'unstable' : '' ?>">
<?js= self.linkto(v.longname, v.name) ?>
</li>
<?js

View File

@@ -21,7 +21,7 @@
var setter = prop.readonly ? 'no' : 'yes';
?>
<tr class="<?js= prop.stability !== 'stable' ? 'unstable' : '' ?>">
<tr class="<?js= (prop.stability && prop.stability !== 'stable') ? 'unstable' : '' ?>">
<td class="name"><code><?js= prop.name ?></code></td>
<td class="type">
<?js if (prop.type && prop.type.names) {?>

View File

@@ -2,6 +2,6 @@
var data = obj;
var self = this;
if (data.stability != 'stable') { ?>
if (data.stability && data.stability != 'stable') { ?>
<span class="stability <?js= data.stability ?>"><?js= data.stability ?></span>
<?js } ?>

View File

@@ -11,6 +11,7 @@ var path = require('path');
* Publish hook for the JSDoc template. Writes to JSON stdout.
* @param {function} data The root of the Taffy DB containing doclet records.
* @param {Object} opts Options.
* @return {Promise} A promise that resolves when writing is complete.
*/
exports.publish = function(data, opts) {
@@ -49,7 +50,7 @@ exports.publish = function(data, opts) {
var externs = [];
var base = [];
var augments = {};
var names = {};
var symbolsByName = {};
docs.filter(function(doc) {
var include = true;
var constructor = doc.memberof;
@@ -144,8 +145,13 @@ exports.publish = function(data, opts) {
}
var target = isExterns ? externs : (doc.api ? symbols : base);
var existingSymbol = symbolsByName[symbol.name];
if (existingSymbol) {
var idx = target.indexOf(existingSymbol);
target.splice(idx, 1);
}
target.push(symbol);
names[symbol.name] = true;
symbolsByName[symbol.name] = symbol;
if (doc.api && symbol.extends) {
while (symbol.extends in classes && !classes[symbol.extends].api &&

View File

@@ -4,6 +4,7 @@
"compile": {
"externs": [
"externs/bingmaps.js",
"externs/cartodb.js",
"externs/closure-compiler.js",
"externs/esrijson.js",
"externs/geojson.js",
@@ -14,46 +15,14 @@
"externs/topojson.js"
],
"define": [
"goog.array.ASSUME_NATIVE_FUNCTIONS=true",
"goog.dom.ASSUME_STANDARDS_MODE=true",
"goog.json.USE_NATIVE_JSON=true",
"goog.DEBUG=false"
],
"jscomp_error": [
"accessControls",
"ambiguousFunctionDecl",
"checkEventfulObjectDisposal",
"checkRegExp",
"checkStructDictInheritance",
"checkTypes",
"checkVars",
"const",
"constantProperty",
"deprecated",
"duplicateMessage",
"es3",
"es5Strict",
"externsValidation",
"fileoverviewTags",
"globalThis",
"internetExplorerChecks",
"invalidCasts",
"misplacedTypeAnnotation",
"missingGetCssName",
"missingProperties",
"missingProvide",
"missingRequire",
"missingReturn",
"newCheckTypes",
"nonStandardJsDocs",
"suspiciousCode",
"strictModuleDepCheck",
"typeInvalidation",
"undefinedNames",
"undefinedVars",
"unknownDefines",
"uselessCode",
"visibility"
"*"
],
"jscomp_off": [
"lintChecks",
"analyzerChecks"
],
"extra_annotation_name": [
"api", "observable"

View File

@@ -1,3 +1,8 @@
.ol-box {
box-sizing: border-box;
border-radius: 2px;
border: 2px solid blue;
}
.ol-mouse-position {
top: 8px;
@@ -6,7 +11,6 @@
}
.ol-scale-line {
background: #95b9e6;
background: rgba(0,60,136,0.3);
border-radius: 4px;
bottom: 8px;
@@ -15,9 +19,9 @@
position: absolute;
}
.ol-scale-line-inner {
border: 1px solid #eeeeee;
border: 1px solid #eee;
border-top: none;
color: #eeeeee;
color: #eee;
font-size: 10px;
text-align: center;
margin: 1px;
@@ -42,7 +46,6 @@
.ol-control {
position: absolute;
background-color: #eee;
background-color: rgba(255,255,255,0.4);
border-radius: 4px;
padding: 2px;
@@ -90,7 +93,6 @@
height: 1.375em;
width: 1.375em;
line-height: .4em;
background-color: #7b98bc;
background-color: rgba(0,60,136,0.5);
border: none;
border-radius: 2px;
@@ -117,7 +119,6 @@
.ol-control button:hover,
.ol-control button:focus {
text-decoration: none;
background-color: #4c6079;
background-color: rgba(0,60,136,0.7);
}
.ol-zoom .ol-zoom-in {
@@ -154,6 +155,7 @@
.ol-attribution img {
max-height: 2em;
max-width: inherit;
vertical-align: middle;
}
.ol-attribution ul, .ol-attribution button {
display: inline-block;
@@ -192,26 +194,15 @@
.ol-zoomslider {
top: 4.5em;
left: .5em;
width: 24px;
height: 200px;
}
.ol-zoomslider-thumb {
position: absolute;
background: #7b98bc;
background: rgba(0,60,136,0.5);
border-radius: 2px;
cursor: pointer;
.ol-zoomslider button {
position: relative;
height: 10px;
width: 22px;
margin: 3px;
}
.ol-touch .ol-zoomslider {
top: 5.5em;
width: 2.052em;
}
.ol-touch .ol-zoomslider-thumb {
width: 1.8em;
}
.ol-overviewmap {

241
dist/ol-debug.css vendored Normal file
View File

@@ -0,0 +1,241 @@
.ol-box {
box-sizing: border-box;
border-radius: 2px;
border: 2px solid blue;
}
.ol-mouse-position {
top: 8px;
right: 8px;
position: absolute;
}
.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;
text-align: center;
margin: 1px;
will-change: contents, width;
}
.ol-overlay-container {
will-change: left,right,top,bottom;
}
.ol-unsupported {
display: none;
}
.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-control {
position: absolute;
background-color: rgba(255,255,255,0.4);
border-radius: 4px;
padding: 2px;
}
.ol-control:hover {
background-color: rgba(255,255,255,0.6);
}
.ol-zoom {
top: .5em;
left: .5em;
}
.ol-rotate {
top: .5em;
right: .5em;
transition: opacity .25s linear, visibility 0s linear;
}
.ol-rotate.ol-hidden {
opacity: 0;
visibility: hidden;
transition: opacity .25s linear, visibility 0s linear .25s;
}
.ol-zoom-extent {
top: 4.643em;
left: .5em;
}
.ol-full-screen {
right: .5em;
top: .5em;
}
@media print {
.ol-control {
display: none;
}
}
.ol-control button {
display: block;
margin: 1px;
padding: 0;
color: white;
font-size: 1.14em;
font-weight: bold;
text-decoration: none;
text-align: center;
height: 1.375em;
width: 1.375em;
line-height: .4em;
background-color: rgba(0,60,136,0.5);
border: none;
border-radius: 2px;
}
.ol-control button::-moz-focus-inner {
border: none;
padding: 0;
}
.ol-zoom-extent button {
line-height: 1.4em;
}
.ol-compass {
display: block;
font-weight: normal;
font-size: 1.2em;
will-change: transform;
}
.ol-touch .ol-control button {
font-size: 1.5em;
}
.ol-touch .ol-zoom-extent {
top: 5.5em;
}
.ol-control button:hover,
.ol-control button:focus {
text-decoration: none;
background-color: rgba(0,60,136,0.7);
}
.ol-zoom .ol-zoom-in {
border-radius: 2px 2px 0 0;
}
.ol-zoom .ol-zoom-out {
border-radius: 0 0 2px 2px;
}
.ol-attribution {
text-align: right;
bottom: .5em;
right: .5em;
max-width: calc(100% - 1.3em);
}
.ol-attribution ul {
margin: 0;
padding: 0 .5em;
font-size: .7rem;
line-height: 1.375em;
color: #000;
text-shadow: 0 0 2px #fff;
}
.ol-attribution li {
display: inline;
list-style: none;
line-height: inherit;
}
.ol-attribution li:not(:last-child):after {
content: " ";
}
.ol-attribution img {
max-height: 2em;
max-width: inherit;
vertical-align: middle;
}
.ol-attribution ul, .ol-attribution button {
display: inline-block;
}
.ol-attribution.ol-collapsed ul {
display: none;
}
.ol-attribution.ol-logo-only ul {
display: block;
}
.ol-attribution:not(.ol-collapsed) {
background: rgba(255,255,255,0.8);
}
.ol-attribution.ol-uncollapsible {
bottom: 0;
right: 0;
border-radius: 4px 0 0;
height: 1.1em;
line-height: 1em;
}
.ol-attribution.ol-logo-only {
background: transparent;
bottom: .4em;
height: 1.1em;
line-height: 1em;
}
.ol-attribution.ol-uncollapsible img {
margin-top: -.2em;
max-height: 1.6em;
}
.ol-attribution.ol-logo-only button,
.ol-attribution.ol-uncollapsible button {
display: none;
}
.ol-zoomslider {
top: 4.5em;
left: .5em;
height: 200px;
}
.ol-zoomslider button {
position: relative;
height: 10px;
}
.ol-touch .ol-zoomslider {
top: 5.5em;
}
.ol-overviewmap {
left: 0.5em;
bottom: 0.5em;
}
.ol-overviewmap.ol-uncollapsible {
bottom: 0;
left: 0;
border-radius: 0 4px 0 0;
}
.ol-overviewmap .ol-overviewmap-map,
.ol-overviewmap button {
display: inline-block;
}
.ol-overviewmap .ol-overviewmap-map {
border: 1px solid #7b98bc;
height: 150px;
margin: 2px;
width: 150px;
}
.ol-overviewmap:not(.ol-collapsed) button{
bottom: 1px;
left: 2px;
position: absolute;
}
.ol-overviewmap.ol-collapsed .ol-overviewmap-map,
.ol-overviewmap.ol-uncollapsible button {
display: none;
}
.ol-overviewmap:not(.ol-collapsed) {
background: rgba(255,255,255,0.8);
}
.ol-overviewmap-box {
border: 2px dotted rgba(0,60,136,0.7);
}

109180
dist/ol-debug.js vendored Normal file

File diff suppressed because it is too large Load Diff

1
dist/ol.css vendored Normal file
View File

@@ -0,0 +1 @@
.ol-control,.ol-scale-line{position:absolute;padding:2px}.ol-box{box-sizing:border-box;border-radius:2px;border:2px solid #00f}.ol-mouse-position{top:8px;right:8px;position:absolute}.ol-scale-line{background:rgba(0,60,136,.3);border-radius:4px;bottom:8px;left:8px}.ol-scale-line-inner{border:1px solid #eee;border-top:none;color:#eee;font-size:10px;text-align:center;margin:1px;will-change:contents,width}.ol-overlay-container{will-change:left,right,top,bottom}.ol-unsupported{display:none}.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:transparent}.ol-control{background-color:rgba(255,255,255,.4);border-radius:4px}.ol-control:hover{background-color:rgba(255,255,255,.6)}.ol-zoom{top:.5em;left:.5em}.ol-rotate{top:.5em;right:.5em;transition:opacity .25s linear,visibility 0s linear}.ol-rotate.ol-hidden{opacity:0;visibility:hidden;transition:opacity .25s linear,visibility 0s linear .25s}.ol-zoom-extent{top:4.643em;left:.5em}.ol-full-screen{right:.5em;top:.5em}@media print{.ol-control{display:none}}.ol-control button{display:block;margin:1px;padding:0;color:#fff;font-size:1.14em;font-weight:700;text-decoration:none;text-align:center;height:1.375em;width:1.375em;line-height:.4em;background-color:rgba(0,60,136,.5);border:none;border-radius:2px}.ol-control button::-moz-focus-inner{border:none;padding:0}.ol-zoom-extent button{line-height:1.4em}.ol-compass{display:block;font-weight:400;font-size:1.2em;will-change:transform}.ol-touch .ol-control button{font-size:1.5em}.ol-touch .ol-zoom-extent{top:5.5em}.ol-control button:focus,.ol-control button:hover{text-decoration:none;background-color:rgba(0,60,136,.7)}.ol-zoom .ol-zoom-in{border-radius:2px 2px 0 0}.ol-zoom .ol-zoom-out{border-radius:0 0 2px 2px}.ol-attribution{text-align:right;bottom:.5em;right:.5em;max-width:calc(100% - 1.3em)}.ol-attribution ul{margin:0;padding:0 .5em;font-size:.7rem;line-height:1.375em;color:#000;text-shadow:0 0 2px #fff}.ol-attribution li{display:inline;list-style:none;line-height:inherit}.ol-attribution li:not(:last-child):after{content:" "}.ol-attribution img{max-height:2em;max-width:inherit;vertical-align:middle}.ol-attribution button,.ol-attribution ul{display:inline-block}.ol-attribution.ol-collapsed ul{display:none}.ol-attribution.ol-logo-only ul{display:block}.ol-attribution:not(.ol-collapsed){background:rgba(255,255,255,.8)}.ol-attribution.ol-uncollapsible{bottom:0;right:0;border-radius:4px 0 0;height:1.1em;line-height:1em}.ol-attribution.ol-logo-only{background:0 0;bottom:.4em;height:1.1em;line-height:1em}.ol-attribution.ol-uncollapsible img{margin-top:-.2em;max-height:1.6em}.ol-attribution.ol-logo-only button,.ol-attribution.ol-uncollapsible button{display:none}.ol-zoomslider{top:4.5em;left:.5em;height:200px}.ol-zoomslider button{position:relative;height:10px}.ol-touch .ol-zoomslider{top:5.5em}.ol-overviewmap{left:.5em;bottom:.5em}.ol-overviewmap.ol-uncollapsible{bottom:0;left:0;border-radius:0 4px 0 0}.ol-overviewmap .ol-overviewmap-map,.ol-overviewmap button{display:inline-block}.ol-overviewmap .ol-overviewmap-map{border:1px solid #7b98bc;height:150px;margin:2px;width:150px}.ol-overviewmap:not(.ol-collapsed) button{bottom:1px;left:2px;position:absolute}.ol-overviewmap.ol-collapsed .ol-overviewmap-map,.ol-overviewmap.ol-uncollapsible button{display:none}.ol-overviewmap:not(.ol-collapsed){background:rgba(255,255,255,.8)}.ol-overviewmap-box{border:2px dotted rgba(0,60,136,.7)}

990
dist/ol.js vendored Normal file
View File

@@ -0,0 +1,990 @@
// OpenLayers 3. See http://openlayers.org/
// License: https://raw.githubusercontent.com/openlayers/ol3/master/LICENSE.md
// Version: v3.16.0-192-g5d8b99a
(function (root, factory) {
if (typeof exports === "object") {
module.exports = factory();
} else if (typeof define === "function" && define.amd) {
define([], factory);
} else {
root.ol = factory();
}
}(this, function () {
var OPENLAYERS = {};
var k,aa=this;function ca(a){a.$b=function(){return a.Tg?a.Tg:a.Tg=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 ea(a){return"string"==typeof a}function fa(a){var b=typeof a;return"object"==b&&null!=a||"function"==b}function t(a){return a[ga]||(a[ga]=++ha)}var ga="closure_uid_"+(1E9*Math.random()>>>0),ha=0;function ia(a,b,c){return a.call.apply(a.bind,arguments)}
function ja(a,b,c){if(!a)throw Error();if(2<arguments.length){var d=Array.prototype.slice.call(arguments,2);return function(){var c=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(c,d);return a.apply(b,c)}}return function(){return a.apply(b,arguments)}}function ka(a,b,c){ka=Function.prototype.bind&&-1!=Function.prototype.bind.toString().indexOf("native code")?ia:ja;return ka.apply(null,arguments)}
function u(a,b){var c=a.split("."),d=OPENLAYERS||aa;c[0]in d||!d.execScript||d.execScript("var "+c[0]);for(var e;c.length&&(e=c.shift());)c.length||void 0===b?d[e]?d=d[e]:d=d[e]={}:d[e]=b};var la,na;function x(a,b){a.prototype=Object.create(b.prototype);a.prototype.constructor=a}function oa(){}var pa=Function("return this")();var qa=String.prototype.trim?function(a){return a.trim()}:function(a){return a.replace(/^[\s\xa0]+|[\s\xa0]+$/g,"")};function ra(a,b){return a<b?-1:a>b?1:0};function sa(a,b,c){return Math.min(Math.max(a,b),c)}var ta=function(){var a;"cosh"in Math?a=Math.cosh:a=function(a){a=Math.exp(a);return(a+1/a)/2};return a}();function ua(a,b,c,d,e,f){var g=e-c,h=f-d;if(0!==g||0!==h){var l=((a-c)*g+(b-d)*h)/(g*g+h*h);1<l?(c=e,d=f):0<l&&(c+=g*l,d+=h*l)}return va(a,b,c,d)}function va(a,b,c,d){a=c-a;b=d-b;return a*a+b*b}function wa(a){return a*Math.PI/180}function xa(a,b){var c=a%b;return 0>c*b?c+b:c}function ya(a,b,c){return a+c*(b-a)};function za(a){return function(b){if(b)return[sa(b[0],a[0],a[2]),sa(b[1],a[1],a[3])]}}function Aa(a){return a};function Ba(a,b,c){this.center=a;this.resolution=b;this.rotation=c};var Ca="function"===typeof Object.assign?Object.assign:function(a,b){if(!a||!a)throw new TypeError("Cannot convert undefined or null to object");for(var c=Object(a),d=1,e=arguments.length;d<e;++d){var f=arguments[d];if(void 0!==f&&null!==f)for(var g in f)f.hasOwnProperty(g)&&(c[g]=f[g])}return c};function Da(a){for(var b in a)delete a[b]}function Ea(a){var b=[],c;for(c in a)b.push(a[c]);return b}function Ga(a){for(var b in a)return!1;return!b};var Ha="olm_"+(1E4*Math.random()|0);function Ia(a){function b(b){var d=a.listener,e=a.ng||a.target;a.pg&&Ka(a);return d.call(e,b)}return a.og=b}function La(a,b,c,d){for(var e,f=0,g=a.length;f<g;++f)if(e=a[f],e.listener===b&&e.ng===c)return d&&(e.deleteIndex=f),e}function Ma(a,b){var c=a[Ha];return c?c[b]:void 0}function Na(a){var b=a[Ha];b||(b=a[Ha]={});return b}
function Oa(a,b){var c=Ma(a,b);if(c){for(var d=0,e=c.length;d<e;++d)a.removeEventListener(b,c[d].og),Da(c[d]);c.length=0;if(c=a[Ha])delete c[b],0===Object.keys(c).length&&delete a[Ha]}}function B(a,b,c,d,e){var f=Na(a),g=f[b];g||(g=f[b]=[]);(f=La(g,c,d,!1))?e||(f.pg=!1):(f={ng:d,pg:!!e,listener:c,target:a,type:b},a.addEventListener(b,Ia(f)),g.push(f));return f}function Pa(a,b,c,d){return B(a,b,c,d,!0)}function Qa(a,b,c,d){(a=Ma(a,b))&&(c=La(a,c,d,!0))&&Ka(c)}
function Ka(a){if(a&&a.target){a.target.removeEventListener(a.type,a.og);var b=Ma(a.target,a.type);if(b){var c="deleteIndex"in a?a.deleteIndex:b.indexOf(a);-1!==c&&b.splice(c,1);0===b.length&&Oa(a.target,a.type)}Da(a)}}function Ra(a){var b=Na(a),c;for(c in b)Oa(a,c)};function Sa(){}Sa.prototype.Hb=!1;function Ta(a){a.Hb||(a.Hb=!0,a.ka())}Sa.prototype.ka=oa;function Ua(a){this.type=a;this.target=null}Ua.prototype.preventDefault=Ua.prototype.stopPropagation=function(){this.to=!0};function Va(a){a.stopPropagation()}function Wa(a){a.preventDefault()};function Xa(){this.Ra={};this.Aa={};this.ya={}}x(Xa,Sa);Xa.prototype.addEventListener=function(a,b){var c=this.ya[a];c||(c=this.ya[a]=[]);-1===c.indexOf(b)&&c.push(b)};
Xa.prototype.b=function(a){var b="string"===typeof a?new Ua(a):a;a=b.type;b.target=this;var c=this.ya[a],d;if(c){a in this.Aa||(this.Aa[a]=0,this.Ra[a]=0);++this.Aa[a];for(var e=0,f=c.length;e<f;++e)if(!1===c[e].call(this,b)||b.to){d=!1;break}--this.Aa[a];if(0===this.Aa[a]){b=this.Ra[a];for(delete this.Ra[a];b--;)this.removeEventListener(a,oa);delete this.Aa[a]}return d}};Xa.prototype.ka=function(){Ra(this)};function Ya(a,b){return b?b in a.ya:0<Object.keys(a.ya).length}
Xa.prototype.removeEventListener=function(a,b){var c=this.ya[a];if(c){var d=c.indexOf(b);a in this.Ra?(c[d]=oa,++this.Ra[a]):(c.splice(d,1),0===c.length&&delete this.ya[a])}};function Za(){Xa.call(this);this.g=0}x(Za,Xa);function $a(a){if(Array.isArray(a))for(var b=0,c=a.length;b<c;++b)Ka(a[b]);else Ka(a)}k=Za.prototype;k.u=function(){++this.g;this.b("change")};k.K=function(){return this.g};k.I=function(a,b,c){if(Array.isArray(a)){for(var d=a.length,e=Array(d),f=0;f<d;++f)e[f]=B(this,a[f],b,c);return e}return B(this,a,b,c)};k.L=function(a,b,c){if(Array.isArray(a)){for(var d=a.length,e=Array(d),f=0;f<d;++f)e[f]=Pa(this,a[f],b,c);return e}return Pa(this,a,b,c)};
k.J=function(a,b,c){if(Array.isArray(a))for(var d=0,e=a.length;d<e;++d)Qa(this,a[d],b,c);else Qa(this,a,b,c)};k.M=$a;function ab(a,b,c){Ua.call(this,a);this.key=b;this.oldValue=c}x(ab,Ua);function bb(a){Za.call(this);t(this);this.U={};void 0!==a&&this.G(a)}x(bb,Za);var cb={};function db(a){return cb.hasOwnProperty(a)?cb[a]:cb[a]="change:"+a}k=bb.prototype;k.get=function(a){var b;this.U.hasOwnProperty(a)&&(b=this.U[a]);return b};k.N=function(){return Object.keys(this.U)};k.O=function(){return Ca({},this.U)};function eb(a,b,c){var d;d=db(b);a.b(new ab(d,b,c));a.b(new ab("propertychange",b,c))}
k.set=function(a,b,c){c?this.U[a]=b:(c=this.U[a],this.U[a]=b,c!==b&&eb(this,a,c))};k.G=function(a,b){for(var c in a)this.set(c,a[c],b)};k.R=function(a,b){if(a in this.U){var c=this.U[a];delete this.U[a];b||eb(this,a,c)}};function fb(a,b){return a>b?1:a<b?-1:0}function gb(a,b){return 0<=a.indexOf(b)}function hb(a,b,c){var d=a.length;if(a[0]<=b)return 0;if(!(b<=a[d-1]))if(0<c)for(c=1;c<d;++c){if(a[c]<b)return c-1}else if(0>c)for(c=1;c<d;++c){if(a[c]<=b)return c}else for(c=1;c<d;++c){if(a[c]==b)return c;if(a[c]<b)return a[c-1]-b<b-a[c]?c-1:c}return d-1}function ib(a){return a.reduce(function(a,c){return Array.isArray(c)?a.concat(ib(c)):a.concat(c)},[])}
function jb(a,b){var c;c=da(b);var d="array"==c||"object"==c&&"number"==typeof b.length?b:[b],e=d.length;for(c=0;c<e;c++)a[a.length]=d[c]}function kb(a,b){var c=a.indexOf(b),d=-1<c;d&&a.splice(c,1);return d}function lb(a,b){for(var c=a.length>>>0,d,e=0;e<c;e++)if(d=a[e],b(d,e,a))return d;return null}function mb(a,b){var c=a.length;if(c!==b.length)return!1;for(var d=0;d<c;d++)if(a[d]!==b[d])return!1;return!0}
function nb(a){var b=ob,c=a.length,d=Array(a.length),e;for(e=0;e<c;e++)d[e]={index:e,value:a[e]};d.sort(function(a,c){return b(a.value,c.value)||a.index-c.index});for(e=0;e<a.length;e++)a[e]=d[e].value}function pb(a,b){var c;return a.every(function(d,e){c=e;return!b(d,e,a)})?-1:c};function qb(a){return function(b,c,d){if(void 0!==b)return b=hb(a,b,d),b=sa(b+c,0,a.length-1),a[b]}}function rb(a,b,c){return function(d,e,f){if(void 0!==d)return d=Math.max(Math.floor(Math.log(b/d)/Math.log(a)+(0<f?0:0>f?1:.5))+e,0),void 0!==c&&(d=Math.min(d,c)),b/Math.pow(a,d)}};function sb(a){if(void 0!==a)return 0}function tb(a,b){if(void 0!==a)return a+b}function ub(a){var b=2*Math.PI/a;return function(a,d){if(void 0!==a)return a=Math.floor((a+d)/b+.5)*b}}function vb(){var a=wa(5);return function(b,c){if(void 0!==b)return Math.abs(b+c)<=a?0:b+c}};function wb(a,b){var c=void 0!==b?a.toFixed(b):""+a,d=c.indexOf("."),d=-1===d?c.length:d;return 2<d?c:Array(3-d).join("0")+c}function xb(a){a=(""+a).split(".");for(var b=["1","3"],c=0;c<Math.max(a.length,b.length);c++){var d=parseInt(a[c]||"0",10),e=parseInt(b[c]||"0",10);if(d>e)return 1;if(e>d)return-1}return 0};function yb(a,b){a[0]+=b[0];a[1]+=b[1];return a}function zb(a,b){var c=a[0],d=a[1],e=b[0],f=b[1],g=e[0],e=e[1],h=f[0],f=f[1],l=h-g,m=f-e,c=0===l&&0===m?0:(l*(c-g)+m*(d-e))/(l*l+m*m||0);0>=c||(1<=c?(g=h,e=f):(g+=c*l,e+=c*m));return[g,e]}function Ab(a,b,c){a=xa(a+180,360)-180;var d=Math.abs(3600*a);return Math.floor(d/3600)+"\u00b0 "+wb(Math.floor(d/60%60))+"\u2032 "+wb(d%60,c||0)+"\u2033 "+b.charAt(0>a?1:0)}
function Bb(a,b,c){return a?b.replace("{x}",a[0].toFixed(c)).replace("{y}",a[1].toFixed(c)):""}function Cb(a,b){for(var c=!0,d=a.length-1;0<=d;--d)if(a[d]!=b[d]){c=!1;break}return c}function Db(a,b){var c=Math.cos(b),d=Math.sin(b),e=a[1]*c+a[0]*d;a[0]=a[0]*c-a[1]*d;a[1]=e;return a}function Eb(a,b){var c=a[0]-b[0],d=a[1]-b[1];return c*c+d*d}function Fb(a,b){return Eb(a,zb(a,b))}function Gb(a,b){return Bb(a,"{x}, {y}",b)};function Ib(a){for(var b=Jb(),c=0,d=a.length;c<d;++c)Lb(b,a[c]);return b}function Mb(a,b,c){return c?(c[0]=a[0]-b,c[1]=a[1]-b,c[2]=a[2]+b,c[3]=a[3]+b,c):[a[0]-b,a[1]-b,a[2]+b,a[3]+b]}function Ob(a,b){return b?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b):a.slice()}function Pb(a,b,c){b=b<a[0]?a[0]-b:a[2]<b?b-a[2]:0;a=c<a[1]?a[1]-c:a[3]<c?c-a[3]:0;return b*b+a*a}function Qb(a,b){return Rb(a,b[0],b[1])}function Sb(a,b){return a[0]<=b[0]&&b[2]<=a[2]&&a[1]<=b[1]&&b[3]<=a[3]}
function Rb(a,b,c){return a[0]<=b&&b<=a[2]&&a[1]<=c&&c<=a[3]}function Tb(a,b){var c=a[1],d=a[2],e=a[3],f=b[0],g=b[1],h=0;f<a[0]?h|=16:f>d&&(h|=4);g<c?h|=8:g>e&&(h|=2);0===h&&(h=1);return h}function Jb(){return[Infinity,Infinity,-Infinity,-Infinity]}function Vb(a,b,c,d,e){return e?(e[0]=a,e[1]=b,e[2]=c,e[3]=d,e):[a,b,c,d]}function Wb(a,b){var c=a[0],d=a[1];return Vb(c,d,c,d,b)}function Yb(a,b,c,d,e){e=Vb(Infinity,Infinity,-Infinity,-Infinity,e);return Zb(e,a,b,c,d)}
function $b(a,b){return a[0]==b[0]&&a[2]==b[2]&&a[1]==b[1]&&a[3]==b[3]}function ac(a,b){b[0]<a[0]&&(a[0]=b[0]);b[2]>a[2]&&(a[2]=b[2]);b[1]<a[1]&&(a[1]=b[1]);b[3]>a[3]&&(a[3]=b[3]);return a}function Lb(a,b){b[0]<a[0]&&(a[0]=b[0]);b[0]>a[2]&&(a[2]=b[0]);b[1]<a[1]&&(a[1]=b[1]);b[1]>a[3]&&(a[3]=b[1])}function Zb(a,b,c,d,e){for(;c<d;c+=e){var f=a,g=b[c],h=b[c+1];f[0]=Math.min(f[0],g);f[1]=Math.min(f[1],h);f[2]=Math.max(f[2],g);f[3]=Math.max(f[3],h)}return a}
function bc(a,b,c){var d;return(d=b.call(c,cc(a)))||(d=b.call(c,dc(a)))||(d=b.call(c,ec(a)))?d:(d=b.call(c,fc(a)))?d:!1}function hc(a){var b=0;ic(a)||(b=jc(a)*kc(a));return b}function cc(a){return[a[0],a[1]]}function dc(a){return[a[2],a[1]]}function lc(a){return[(a[0]+a[2])/2,(a[1]+a[3])/2]}
function mc(a,b,c,d,e){var f=b*d[0]/2;d=b*d[1]/2;b=Math.cos(c);var g=Math.sin(c);c=f*b;f*=g;b*=d;var h=d*g,l=a[0],m=a[1];a=l-c+h;d=l-c-h;g=l+c-h;c=l+c+h;var h=m-f-b,l=m-f+b,n=m+f+b,f=m+f-b;return Vb(Math.min(a,d,g,c),Math.min(h,l,n,f),Math.max(a,d,g,c),Math.max(h,l,n,f),e)}function kc(a){return a[3]-a[1]}function nc(a,b,c){c=c?c:Jb();oc(a,b)&&(c[0]=a[0]>b[0]?a[0]:b[0],c[1]=a[1]>b[1]?a[1]:b[1],c[2]=a[2]<b[2]?a[2]:b[2],c[3]=a[3]<b[3]?a[3]:b[3]);return c}function fc(a){return[a[0],a[3]]}
function ec(a){return[a[2],a[3]]}function jc(a){return a[2]-a[0]}function oc(a,b){return a[0]<=b[2]&&a[2]>=b[0]&&a[1]<=b[3]&&a[3]>=b[1]}function ic(a){return a[2]<a[0]||a[3]<a[1]}function pc(a,b){var c=(a[2]-a[0])/2*(b-1),d=(a[3]-a[1])/2*(b-1);a[0]-=c;a[2]+=c;a[1]-=d;a[3]+=d}
function qc(a,b,c){a=[a[0],a[1],a[0],a[3],a[2],a[1],a[2],a[3]];b(a,a,2);var d=[a[0],a[2],a[4],a[6]],e=[a[1],a[3],a[5],a[7]];b=Math.min.apply(null,d);a=Math.min.apply(null,e);d=Math.max.apply(null,d);e=Math.max.apply(null,e);return Vb(b,a,d,e,c)};function rc(){return!0}function sc(){return!1};/*
Latitude/longitude spherical geodesy formulae taken from
http://www.movable-type.co.uk/scripts/latlong.html
Licensed under CC-BY-3.0.
*/
function tc(a){this.radius=a}tc.prototype.a=function(a){for(var b=0,c=a.length,d=a[c-1][0],e=a[c-1][1],f=0;f<c;f++)var g=a[f][0],h=a[f][1],b=b+wa(g-d)*(2+Math.sin(wa(e))+Math.sin(wa(h))),d=g,e=h;return b*this.radius*this.radius/2};tc.prototype.b=function(a,b){var c=wa(a[1]),d=wa(b[1]),e=(d-c)/2,f=wa(b[0]-a[0])/2,c=Math.sin(e)*Math.sin(e)+Math.sin(f)*Math.sin(f)*Math.cos(c)*Math.cos(d);return 2*this.radius*Math.atan2(Math.sqrt(c),Math.sqrt(1-c))};
tc.prototype.offset=function(a,b,c){var d=wa(a[1]);b/=this.radius;var e=Math.asin(Math.sin(d)*Math.cos(b)+Math.cos(d)*Math.sin(b)*Math.cos(c));return[180*(wa(a[0])+Math.atan2(Math.sin(c)*Math.sin(b)*Math.cos(d),Math.cos(b)-Math.sin(d)*Math.sin(e)))/Math.PI,180*e/Math.PI]};var uc=new tc(6370997);var vc={};vc.degrees=2*Math.PI*uc.radius/360;vc.ft=.3048;vc.m=1;vc["us-ft"]=1200/3937;
function wc(a){this.eb=a.code;this.c=a.units;this.f=void 0!==a.extent?a.extent:null;this.i=void 0!==a.worldExtent?a.worldExtent:null;this.b=void 0!==a.axisOrientation?a.axisOrientation:"enu";this.g=void 0!==a.global?a.global:!1;this.a=!(!this.g||!this.f);this.o=void 0!==a.getPointResolution?a.getPointResolution:this.sk;this.l=null;this.j=a.metersPerUnit;var b=xc,c=a.code,d=yc||pa.proj4;if("function"==typeof d&&void 0===b[c]){var e=d.defs(c);if(void 0!==e){void 0!==e.axis&&void 0===a.axisOrientation&&
(this.b=e.axis);void 0===a.metersPerUnit&&(this.j=e.to_meter);void 0===a.units&&(this.c=e.units);for(var f in b)b=d.defs(f),void 0!==b&&(a=zc(f),b===e?Ac([a,this]):(b=d(f,c),Bc(a,this,b.forward,b.inverse)))}}}k=wc.prototype;k.Sj=function(){return this.eb};k.H=function(){return this.f};k.xb=function(){return this.c};k.ac=function(){return this.j||vc[this.c]};k.Ek=function(){return this.i};k.pl=function(){return this.g};k.ep=function(a){this.g=a;this.a=!(!a||!this.f)};
k.Mm=function(a){this.f=a;this.a=!(!this.g||!a)};k.mp=function(a){this.i=a};k.cp=function(a){this.o=a};k.sk=function(a,b){if("degrees"==this.xb())return a;var c=Cc(this,zc("EPSG:4326")),d=[b[0]-a/2,b[1],b[0]+a/2,b[1],b[0],b[1]-a/2,b[0],b[1]+a/2],d=c(d,d,2),c=uc.b(d.slice(0,2),d.slice(2,4)),d=uc.b(d.slice(4,6),d.slice(6,8)),d=(c+d)/2,c=this.ac();void 0!==c&&(d/=c);return d};k.getPointResolution=function(a,b){return this.o(a,b)};var xc={},Dc={},yc=null;
function Ac(a){Ec(a);a.forEach(function(b){a.forEach(function(a){b!==a&&Fc(b,a,Gc)})})}function Hc(){var a=Ic,b=Jc,c=Kc;Lc.forEach(function(d){a.forEach(function(a){Fc(d,a,b);Fc(a,d,c)})})}function Mc(a){xc[a.eb]=a;Fc(a,a,Gc)}function Ec(a){var b=[];a.forEach(function(a){b.push(Mc(a))})}function Nc(a){return a?"string"===typeof a?zc(a):a:zc("EPSG:3857")}function Fc(a,b,c){a=a.eb;b=b.eb;a in Dc||(Dc[a]={});Dc[a][b]=c}function Bc(a,b,c,d){a=zc(a);b=zc(b);Fc(a,b,Oc(c));Fc(b,a,Oc(d))}
function Oc(a){return function(b,c,d){var e=b.length;d=void 0!==d?d:2;c=void 0!==c?c:Array(e);var f,g;for(g=0;g<e;g+=d)for(f=a([b[g],b[g+1]]),c[g]=f[0],c[g+1]=f[1],f=d-1;2<=f;--f)c[g+f]=b[g+f];return c}}function zc(a){var b;if(a instanceof wc)b=a;else if("string"===typeof a){b=xc[a];var c=yc||pa.proj4;void 0===b&&"function"==typeof c&&void 0!==c.defs(a)&&(b=new wc({code:a}),Mc(b))}else b=null;return b}function Pc(a,b){if(a===b)return!0;var c=a.xb()===b.xb();return a.eb===b.eb?c:Cc(a,b)===Gc&&c}
function Qc(a,b){var c=zc(a),d=zc(b);return Cc(c,d)}function Cc(a,b){var c=a.eb,d=b.eb,e;c in Dc&&d in Dc[c]&&(e=Dc[c][d]);void 0===e&&(e=Rc);return e}function Rc(a,b){if(void 0!==b&&a!==b){for(var c=0,d=a.length;c<d;++c)b[c]=a[c];a=b}return a}function Gc(a,b){var c;if(void 0!==b){c=0;for(var d=a.length;c<d;++c)b[c]=a[c];c=b}else c=a.slice();return c}function Sc(a,b,c){return Qc(b,c)(a,void 0,a.length)}function Tc(a,b,c){b=Qc(b,c);return qc(a,b)};function Uc(){bb.call(this);this.v=Jb();this.A=-1;this.l={};this.s=this.o=0}x(Uc,bb);k=Uc.prototype;k.wb=function(a,b){var c=b?b:[NaN,NaN];this.tb(a[0],a[1],c,Infinity);return c};k.sg=function(a){return this.Bc(a[0],a[1])};k.Bc=sc;k.H=function(a){this.A!=this.g&&(this.v=this.Od(this.v),this.A=this.g);var b=this.v;a?(a[0]=b[0],a[1]=b[1],a[2]=b[2],a[3]=b[3]):a=b;return a};k.Cb=function(a){return this.od(a*a)};k.kb=function(a,b){this.rc(Qc(a,b));return this};function Vc(a,b,c,d,e,f){for(var g=f?f:[],h=0;b<c;b+=d){var l=a[b],m=a[b+1];g[h++]=e[0]*l+e[2]*m+e[4];g[h++]=e[1]*l+e[3]*m+e[5]}f&&g.length!=h&&(g.length=h);return g};function Wc(){Uc.call(this);this.f="XY";this.a=2;this.B=null}x(Wc,Uc);function Xc(a){if("XY"==a)return 2;if("XYZ"==a||"XYM"==a)return 3;if("XYZM"==a)return 4}k=Wc.prototype;k.Bc=sc;k.Od=function(a){return Yb(this.B,0,this.B.length,this.a,a)};k.Ib=function(){return this.B.slice(0,this.a)};k.la=function(){return this.B};k.Jb=function(){return this.B.slice(this.B.length-this.a)};k.Kb=function(){return this.f};
k.od=function(a){this.s!=this.g&&(Da(this.l),this.o=0,this.s=this.g);if(0>a||0!==this.o&&a<=this.o)return this;var b=a.toString();if(this.l.hasOwnProperty(b))return this.l[b];var c=this.Nc(a);if(c.la().length<this.B.length)return this.l[b]=c;this.o=a;return this};k.Nc=function(){return this};k.va=function(){return this.a};function Yc(a,b,c){a.a=Xc(b);a.f=b;a.B=c}
function Zc(a,b,c,d){if(b)c=Xc(b);else{for(b=0;b<d;++b){if(0===c.length){a.f="XY";a.a=2;return}c=c[0]}c=c.length;b=2==c?"XY":3==c?"XYZ":4==c?"XYZM":void 0}a.f=b;a.a=c}k.rc=function(a){this.B&&(a(this.B,this.B,this.a),this.u())};k.rotate=function(a,b){var c=this.la();if(c){for(var d=c.length,e=this.va(),f=c?c:[],g=Math.cos(a),h=Math.sin(a),l=b[0],m=b[1],n=0,p=0;p<d;p+=e){var q=c[p]-l,r=c[p+1]-m;f[n++]=l+q*g-r*h;f[n++]=m+q*h+r*g;for(q=p+2;q<p+e;++q)f[n++]=c[q]}c&&f.length!=n&&(f.length=n);this.u()}};
k.Sc=function(a,b){var c=this.la();if(c){var d=c.length,e=this.va(),f=c?c:[],g=0,h,l;for(h=0;h<d;h+=e)for(f[g++]=c[h]+a,f[g++]=c[h+1]+b,l=h+2;l<h+e;++l)f[g++]=c[l];c&&f.length!=g&&(f.length=g);this.u()}};function $c(a,b,c,d){for(var e=0,f=a[c-d],g=a[c-d+1];b<c;b+=d)var h=a[b],l=a[b+1],e=e+(g*h-f*l),f=h,g=l;return e/2}function ad(a,b,c,d){var e=0,f,g;f=0;for(g=c.length;f<g;++f){var h=c[f],e=e+$c(a,b,h,d);b=h}return e};function bd(a,b,c,d,e,f,g){var h=a[b],l=a[b+1],m=a[c]-h,n=a[c+1]-l;if(0!==m||0!==n)if(f=((e-h)*m+(f-l)*n)/(m*m+n*n),1<f)b=c;else if(0<f){for(e=0;e<d;++e)g[e]=ya(a[b+e],a[c+e],f);g.length=d;return}for(e=0;e<d;++e)g[e]=a[b+e];g.length=d}function cd(a,b,c,d,e){var f=a[b],g=a[b+1];for(b+=d;b<c;b+=d){var h=a[b],l=a[b+1],f=va(f,g,h,l);f>e&&(e=f);f=h;g=l}return e}function dd(a,b,c,d,e){var f,g;f=0;for(g=c.length;f<g;++f){var h=c[f];e=cd(a,b,h,d,e);b=h}return e}
function ed(a,b,c,d,e,f,g,h,l,m,n){if(b==c)return m;var p;if(0===e){p=va(g,h,a[b],a[b+1]);if(p<m){for(n=0;n<d;++n)l[n]=a[b+n];l.length=d;return p}return m}for(var q=n?n:[NaN,NaN],r=b+d;r<c;)if(bd(a,r-d,r,d,g,h,q),p=va(g,h,q[0],q[1]),p<m){m=p;for(n=0;n<d;++n)l[n]=q[n];l.length=d;r+=d}else r+=d*Math.max((Math.sqrt(p)-Math.sqrt(m))/e|0,1);if(f&&(bd(a,c-d,b,d,g,h,q),p=va(g,h,q[0],q[1]),p<m)){m=p;for(n=0;n<d;++n)l[n]=q[n];l.length=d}return m}
function fd(a,b,c,d,e,f,g,h,l,m,n){n=n?n:[NaN,NaN];var p,q;p=0;for(q=c.length;p<q;++p){var r=c[p];m=ed(a,b,r,d,e,f,g,h,l,m,n);b=r}return m};function gd(a,b){var c=0,d,e;d=0;for(e=b.length;d<e;++d)a[c++]=b[d];return c}function hd(a,b,c,d){var e,f;e=0;for(f=c.length;e<f;++e){var g=c[e],h;for(h=0;h<d;++h)a[b++]=g[h]}return b}function id(a,b,c,d,e){e=e?e:[];var f=0,g,h;g=0;for(h=c.length;g<h;++g)b=hd(a,b,c[g],d),e[f++]=b;e.length=f;return e};function jd(a,b,c,d,e){e=void 0!==e?e:[];for(var f=0;b<c;b+=d)e[f++]=a.slice(b,b+d);e.length=f;return e}function kd(a,b,c,d,e){e=void 0!==e?e:[];var f=0,g,h;g=0;for(h=c.length;g<h;++g){var l=c[g];e[f++]=jd(a,b,l,d,e[f]);b=l}e.length=f;return e};function ld(a,b,c,d,e,f,g){var h=(c-b)/d;if(3>h){for(;b<c;b+=d)f[g++]=a[b],f[g++]=a[b+1];return g}var l=Array(h);l[0]=1;l[h-1]=1;c=[b,c-d];for(var m=0,n;0<c.length;){var p=c.pop(),q=c.pop(),r=0,v=a[q],y=a[q+1],w=a[p],G=a[p+1];for(n=q+d;n<p;n+=d){var z=ua(a[n],a[n+1],v,y,w,G);z>r&&(m=n,r=z)}r>e&&(l[(m-b)/d]=1,q+d<m&&c.push(q,m),m+d<p&&c.push(m,p))}for(n=0;n<h;++n)l[n]&&(f[g++]=a[b+n*d],f[g++]=a[b+n*d+1]);return g}
function md(a,b,c,d,e,f,g,h){var l,m;l=0;for(m=c.length;l<m;++l){var n=c[l];a:{var p=a,q=n,r=d,v=e,y=f;if(b!=q){var w=v*Math.round(p[b]/v),G=v*Math.round(p[b+1]/v);b+=r;y[g++]=w;y[g++]=G;var z,D;do if(z=v*Math.round(p[b]/v),D=v*Math.round(p[b+1]/v),b+=r,b==q){y[g++]=z;y[g++]=D;break a}while(z==w&&D==G);for(;b<q;){var H,ba;H=v*Math.round(p[b]/v);ba=v*Math.round(p[b+1]/v);b+=r;if(H!=z||ba!=D){var A=z-w,Fa=D-G,Ja=H-w,M=ba-G;A*M==Fa*Ja&&(0>A&&Ja<A||A==Ja||0<A&&Ja>A)&&(0>Fa&&M<Fa||Fa==M||0<Fa&&M>Fa)||
(y[g++]=z,y[g++]=D,w=z,G=D);z=H;D=ba}}y[g++]=z;y[g++]=D}}h.push(g);b=n}return g};function nd(a,b){Wc.call(this);this.i=this.j=-1;this.ra(a,b)}x(nd,Wc);k=nd.prototype;k.clone=function(){var a=new nd(null);od(a,this.f,this.B.slice());return a};k.tb=function(a,b,c,d){if(d<Pb(this.H(),a,b))return d;this.i!=this.g&&(this.j=Math.sqrt(cd(this.B,0,this.B.length,this.a,0)),this.i=this.g);return ed(this.B,0,this.B.length,this.a,this.j,!0,a,b,c,d)};k.nm=function(){return $c(this.B,0,this.B.length,this.a)};k.Z=function(){return jd(this.B,0,this.B.length,this.a)};
k.Nc=function(a){var b=[];b.length=ld(this.B,0,this.B.length,this.a,a,b,0);a=new nd(null);od(a,"XY",b);return a};k.Y=function(){return"LinearRing"};k.ra=function(a,b){a?(Zc(this,b,a,1),this.B||(this.B=[]),this.B.length=hd(this.B,0,a,this.a),this.u()):od(this,"XY",null)};function od(a,b,c){Yc(a,b,c);a.u()};function C(a,b){Wc.call(this);this.ra(a,b)}x(C,Wc);k=C.prototype;k.clone=function(){var a=new C(null);a.ba(this.f,this.B.slice());return a};k.tb=function(a,b,c,d){var e=this.B;a=va(a,b,e[0],e[1]);if(a<d){d=this.a;for(b=0;b<d;++b)c[b]=e[b];c.length=d;return a}return d};k.Z=function(){return this.B?this.B.slice():[]};k.Od=function(a){return Wb(this.B,a)};k.Y=function(){return"Point"};k.Ka=function(a){return Rb(a,this.B[0],this.B[1])};
k.ra=function(a,b){a?(Zc(this,b,a,0),this.B||(this.B=[]),this.B.length=gd(this.B,a),this.u()):this.ba("XY",null)};k.ba=function(a,b){Yc(this,a,b);this.u()};function pd(a,b,c,d,e){return!bc(e,function(e){return!qd(a,b,c,d,e[0],e[1])})}function qd(a,b,c,d,e,f){for(var g=!1,h=a[c-d],l=a[c-d+1];b<c;b+=d){var m=a[b],n=a[b+1];l>f!=n>f&&e<(m-h)*(f-l)/(n-l)+h&&(g=!g);h=m;l=n}return g}function rd(a,b,c,d,e,f){if(0===c.length||!qd(a,b,c[0],d,e,f))return!1;var g;b=1;for(g=c.length;b<g;++b)if(qd(a,c[b-1],c[b],d,e,f))return!1;return!0};function sd(a,b,c,d,e,f,g){var h,l,m,n,p,q=e[f+1],r=[],v=c[0];m=a[v-d];p=a[v-d+1];for(h=b;h<v;h+=d){n=a[h];l=a[h+1];if(q<=p&&l<=q||p<=q&&q<=l)m=(q-p)/(l-p)*(n-m)+m,r.push(m);m=n;p=l}v=NaN;p=-Infinity;r.sort(fb);m=r[0];h=1;for(l=r.length;h<l;++h){n=r[h];var y=Math.abs(n-m);y>p&&(m=(m+n)/2,rd(a,b,c,d,m,q)&&(v=m,p=y));m=n}isNaN(v)&&(v=e[f]);return g?(g.push(v,q),g):[v,q]};function td(a,b,c,d,e,f){for(var g=[a[b],a[b+1]],h=[],l;b+d<c;b+=d){h[0]=a[b+d];h[1]=a[b+d+1];if(l=e.call(f,g,h))return l;g[0]=h[0];g[1]=h[1]}return!1};function ud(a,b,c,d,e){var f=Zb(Jb(),a,b,c,d);return oc(e,f)?Sb(e,f)||f[0]>=e[0]&&f[2]<=e[2]||f[1]>=e[1]&&f[3]<=e[3]?!0:td(a,b,c,d,function(a,b){var c=!1,d=Tb(e,a),f=Tb(e,b);if(1===d||1===f)c=!0;else{var p=e[0],q=e[1],r=e[2],v=e[3],y=b[0],w=b[1],G=(w-a[1])/(y-a[0]);f&2&&!(d&2)&&(c=y-(w-v)/G,c=c>=p&&c<=r);c||!(f&4)||d&4||(c=w-(y-r)*G,c=c>=q&&c<=v);c||!(f&8)||d&8||(c=y-(w-q)/G,c=c>=p&&c<=r);c||!(f&16)||d&16||(c=w-(y-p)*G,c=c>=q&&c<=v)}return c}):!1}
function vd(a,b,c,d,e){var f=c[0];if(!(ud(a,b,f,d,e)||qd(a,b,f,d,e[0],e[1])||qd(a,b,f,d,e[0],e[3])||qd(a,b,f,d,e[2],e[1])||qd(a,b,f,d,e[2],e[3])))return!1;if(1===c.length)return!0;b=1;for(f=c.length;b<f;++b)if(pd(a,c[b-1],c[b],d,e))return!1;return!0};function wd(a,b,c,d){for(var e=0,f=a[c-d],g=a[c-d+1];b<c;b+=d)var h=a[b],l=a[b+1],e=e+(h-f)*(l+g),f=h,g=l;return 0<e}function xd(a,b,c,d){var e=0;d=void 0!==d?d:!1;var f,g;f=0;for(g=b.length;f<g;++f){var h=b[f],e=wd(a,e,h,c);if(0===f){if(d&&e||!d&&!e)return!1}else if(d&&!e||!d&&e)return!1;e=h}return!0}
function yd(a,b,c,d,e){e=void 0!==e?e:!1;var f,g;f=0;for(g=c.length;f<g;++f){var h=c[f],l=wd(a,b,h,d);if(0===f?e&&l||!e&&!l:e&&!l||!e&&l)for(var l=a,m=h,n=d;b<m-n;){var p;for(p=0;p<n;++p){var q=l[b+p];l[b+p]=l[m-n+p];l[m-n+p]=q}b+=n;m-=n}b=h}return b}function zd(a,b,c,d){var e=0,f,g;f=0;for(g=b.length;f<g;++f)e=yd(a,e,b[f],c,d);return e};function E(a,b){Wc.call(this);this.i=[];this.D=-1;this.C=null;this.T=this.S=this.P=-1;this.j=null;this.ra(a,b)}x(E,Wc);k=E.prototype;k.yj=function(a){this.B?jb(this.B,a.la()):this.B=a.la().slice();this.i.push(this.B.length);this.u()};k.clone=function(){var a=new E(null);a.ba(this.f,this.B.slice(),this.i.slice());return a};
k.tb=function(a,b,c,d){if(d<Pb(this.H(),a,b))return d;this.S!=this.g&&(this.P=Math.sqrt(dd(this.B,0,this.i,this.a,0)),this.S=this.g);return fd(this.B,0,this.i,this.a,this.P,!0,a,b,c,d)};k.Bc=function(a,b){return rd(this.Nb(),0,this.i,this.a,a,b)};k.qm=function(){return ad(this.Nb(),0,this.i,this.a)};k.Z=function(a){var b;void 0!==a?(b=this.Nb().slice(),yd(b,0,this.i,this.a,a)):b=this.B;return kd(b,0,this.i,this.a)};k.Eb=function(){return this.i};
function Ad(a){if(a.D!=a.g){var b=lc(a.H());a.C=sd(a.Nb(),0,a.i,a.a,b,0);a.D=a.g}return a.C}k.bk=function(){return new C(Ad(this))};k.gk=function(){return this.i.length};k.Hg=function(a){if(0>a||this.i.length<=a)return null;var b=new nd(null);od(b,this.f,this.B.slice(0===a?0:this.i[a-1],this.i[a]));return b};k.Vd=function(){var a=this.f,b=this.B,c=this.i,d=[],e=0,f,g;f=0;for(g=c.length;f<g;++f){var h=c[f],l=new nd(null);od(l,a,b.slice(e,h));d.push(l);e=h}return d};
k.Nb=function(){if(this.T!=this.g){var a=this.B;xd(a,this.i,this.a)?this.j=a:(this.j=a.slice(),this.j.length=yd(this.j,0,this.i,this.a));this.T=this.g}return this.j};k.Nc=function(a){var b=[],c=[];b.length=md(this.B,0,this.i,this.a,Math.sqrt(a),b,0,c);a=new E(null);a.ba("XY",b,c);return a};k.Y=function(){return"Polygon"};k.Ka=function(a){return vd(this.Nb(),0,this.i,this.a,a)};
k.ra=function(a,b){if(a){Zc(this,b,a,2);this.B||(this.B=[]);var c=id(this.B,0,a,this.a,this.i);this.B.length=0===c.length?0:c[c.length-1];this.u()}else this.ba("XY",null,this.i)};k.ba=function(a,b,c){Yc(this,a,b);this.i=c;this.u()};function Bd(a,b,c,d){var e=d?d:32;d=[];var f;for(f=0;f<e;++f)jb(d,a.offset(b,c,2*Math.PI*f/e));d.push(d[0],d[1]);a=new E(null);a.ba("XY",d,[d.length]);return a}
function Cd(a){var b=a[0],c=a[1],d=a[2];a=a[3];b=[b,c,b,a,d,a,d,c,b,c];c=new E(null);c.ba("XY",b,[b.length]);return c}function Dd(a,b,c){var d=b?b:32,e=a.va();b=a.f;for(var f=new E(null,b),d=e*(d+1),e=Array(d),g=0;g<d;g++)e[g]=0;f.ba(b,e,[e.length]);Ed(f,a.rd(),a.wf(),c);return f}function Ed(a,b,c,d){var e=a.la(),f=a.f,g=a.va(),h=a.Eb(),l=e.length/g-1;d=d?d:0;for(var m,n,p=0;p<=l;++p)n=p*g,m=d+2*xa(p,l)*Math.PI/l,e[n]=b[0]+c*Math.cos(m),e[n+1]=b[1]+c*Math.sin(m);a.ba(f,e,h)};function Fd(a){bb.call(this);a=a||{};this.f=[0,0];var b={};b.center=void 0!==a.center?a.center:null;this.l=Nc(a.projection);var c,d,e,f=void 0!==a.minZoom?a.minZoom:0;c=void 0!==a.maxZoom?a.maxZoom:28;var g=void 0!==a.zoomFactor?a.zoomFactor:2;if(void 0!==a.resolutions)c=a.resolutions,d=c[0],e=c[c.length-1],c=qb(c);else{d=Nc(a.projection);e=d.H();var h=(e?Math.max(jc(e),kc(e)):360*vc.degrees/d.ac())/256/Math.pow(2,0),l=h/Math.pow(2,28);d=a.maxResolution;void 0!==d?f=0:d=h/Math.pow(g,f);e=a.minResolution;
void 0===e&&(e=void 0!==a.maxZoom?void 0!==a.maxResolution?d/Math.pow(g,c):h/Math.pow(g,c):l);c=f+Math.floor(Math.log(d/e)/Math.log(g));e=d/Math.pow(g,c-f);c=rb(g,d,c-f)}this.a=d;this.c=e;this.j=a.resolutions;this.i=f;f=void 0!==a.extent?za(a.extent):Aa;(void 0!==a.enableRotation?a.enableRotation:1)?(d=a.constrainRotation,d=void 0===d||!0===d?vb():!1===d?tb:"number"===typeof d?ub(d):tb):d=sb;this.o=new Ba(f,c,d);void 0!==a.resolution?b.resolution=a.resolution:void 0!==a.zoom&&(b.resolution=this.constrainResolution(this.a,
a.zoom-this.i));b.rotation=void 0!==a.rotation?a.rotation:0;this.G(b)}x(Fd,bb);k=Fd.prototype;k.Pd=function(a){return this.o.center(a)};k.constrainResolution=function(a,b,c){return this.o.resolution(a,b||0,c||0)};k.constrainRotation=function(a,b){return this.o.rotation(a,b||0)};k.ab=function(){return this.get("center")};function Gd(a,b){return void 0!==b?(b[0]=a.f[0],b[1]=a.f[1],b):a.f.slice()}k.Kc=function(a){var b=this.ab(),c=this.$(),d=this.La();return mc(b,c,d,a)};k.Vl=function(){return this.a};
k.Wl=function(){return this.c};k.Xl=function(){return this.l};k.$=function(){return this.get("resolution")};k.Yl=function(){return this.j};function Hd(a,b){return Math.max(jc(a)/b[0],kc(a)/b[1])}function Id(a){var b=a.a,c=Math.log(b/a.c)/Math.log(2);return function(a){return b/Math.pow(2,a*c)}}k.La=function(){return this.get("rotation")};function Jd(a){var b=a.a,c=Math.log(b/a.c)/Math.log(2);return function(a){return Math.log(b/a)/Math.log(2)/c}}
k.V=function(){var a=this.ab(),b=this.l,c=this.$(),d=this.La();return{center:[Math.round(a[0]/c)*c,Math.round(a[1]/c)*c],projection:void 0!==b?b:null,resolution:c,rotation:d}};k.Fk=function(){var a,b=this.$();if(void 0!==b){var c,d=0;do{c=this.constrainResolution(this.a,d);if(c==b){a=d;break}++d}while(c>this.c)}return void 0!==a?this.i+a:a};
k.cf=function(a,b,c){a instanceof Wc||(a=Cd(a));var d=c||{};c=void 0!==d.padding?d.padding:[0,0,0,0];var e=void 0!==d.constrainResolution?d.constrainResolution:!0,f=void 0!==d.nearest?d.nearest:!1,g;void 0!==d.minResolution?g=d.minResolution:void 0!==d.maxZoom?g=this.constrainResolution(this.a,d.maxZoom-this.i,0):g=0;var h=a.la(),l=this.La(),d=Math.cos(-l),l=Math.sin(-l),m=Infinity,n=Infinity,p=-Infinity,q=-Infinity;a=a.va();for(var r=0,v=h.length;r<v;r+=a)var y=h[r]*d-h[r+1]*l,w=h[r]*l+h[r+1]*d,
m=Math.min(m,y),n=Math.min(n,w),p=Math.max(p,y),q=Math.max(q,w);b=Hd([m,n,p,q],[b[0]-c[1]-c[3],b[1]-c[0]-c[2]]);b=isNaN(b)?g:Math.max(b,g);e&&(g=this.constrainResolution(b,0,0),!f&&g<b&&(g=this.constrainResolution(g,-1,0)),b=g);this.Vb(b);l=-l;f=(m+p)/2+(c[1]-c[3])/2*b;c=(n+q)/2+(c[0]-c[2])/2*b;this.nb([f*d-c*l,c*d+f*l])};
k.Ej=function(a,b,c){var d=this.La(),e=Math.cos(-d),d=Math.sin(-d),f=a[0]*e-a[1]*d;a=a[1]*e+a[0]*d;var g=this.$(),f=f+(b[0]/2-c[0])*g;a+=(c[1]-b[1]/2)*g;d=-d;this.nb([f*e-a*d,a*e+f*d])};function Kd(a){return!!a.ab()&&void 0!==a.$()}k.rotate=function(a,b){if(void 0!==b){var c,d=this.ab();void 0!==d&&(c=[d[0]-b[0],d[1]-b[1]],Db(c,a-this.La()),yb(c,b));this.nb(c)}this.ie(a)};k.nb=function(a){this.set("center",a)};function Ld(a,b){a.f[1]+=b}k.Vb=function(a){this.set("resolution",a)};
k.ie=function(a){this.set("rotation",a)};k.np=function(a){a=this.constrainResolution(this.a,a-this.i,0);this.Vb(a)};function Md(a){return Math.pow(a,3)}function Nd(a){return 1-Md(1-a)}function Qd(a){return 3*a*a-2*a*a*a}function Rd(a){return a}function Sd(a){return.5>a?Qd(2*a):1-Qd(2*(a-.5))};function Td(a){var b=a.source,c=a.start?a.start:Date.now(),d=b[0],e=b[1],f=void 0!==a.duration?a.duration:1E3,g=a.easing?a.easing:Qd;return function(a,b){if(b.time<c)return b.animate=!0,b.viewHints[0]+=1,!0;if(b.time<c+f){var m=1-g((b.time-c)/f),n=d-b.viewState.center[0],p=e-b.viewState.center[1];b.animate=!0;b.viewState.center[0]+=m*n;b.viewState.center[1]+=m*p;b.viewHints[0]+=1;return!0}return!1}}
function Ud(a){var b=a.rotation?a.rotation:0,c=a.start?a.start:Date.now(),d=void 0!==a.duration?a.duration:1E3,e=a.easing?a.easing:Qd,f=a.anchor?a.anchor:null;return function(a,h){if(h.time<c)return h.animate=!0,h.viewHints[0]+=1,!0;if(h.time<c+d){var l=1-e((h.time-c)/d),l=(b-h.viewState.rotation)*l;h.animate=!0;h.viewState.rotation+=l;if(f){var m=h.viewState.center;m[0]-=f[0];m[1]-=f[1];Db(m,l);yb(m,f)}h.viewHints[0]+=1;return!0}return!1}}
function Vd(a){var b=a.resolution,c=a.start?a.start:Date.now(),d=void 0!==a.duration?a.duration:1E3,e=a.easing?a.easing:Qd;return function(a,g){if(g.time<c)return g.animate=!0,g.viewHints[0]+=1,!0;if(g.time<c+d){var h=1-e((g.time-c)/d),l=b-g.viewState.resolution;g.animate=!0;g.viewState.resolution+=h*l;g.viewHints[0]+=1;return!0}return!1}};function Wd(a,b,c,d){this.ca=a;this.ea=b;this.fa=c;this.ga=d}Wd.prototype.contains=function(a){return Xd(this,a[1],a[2])};function Xd(a,b,c){return a.ca<=b&&b<=a.ea&&a.fa<=c&&c<=a.ga}function Yd(a,b){return a.ca==b.ca&&a.fa==b.fa&&a.ea==b.ea&&a.ga==b.ga}function Zd(a,b){return a.ca<=b.ea&&a.ea>=b.ca&&a.fa<=b.ga&&a.ga>=b.fa};function $d(a){this.a=a.html;this.b=a.tileRanges?a.tileRanges:null}$d.prototype.g=function(){return this.a};function ae(a,b){Ua.call(this,a);this.element=b}x(ae,Ua);function be(a){bb.call(this);this.a=a?a:[];ce(this)}x(be,bb);k=be.prototype;k.clear=function(){for(;0<this.dc();)this.pop()};k.qf=function(a){var b,c;b=0;for(c=a.length;b<c;++b)this.push(a[b]);return this};k.forEach=function(a,b){this.a.forEach(a,b)};k.Gl=function(){return this.a};k.item=function(a){return this.a[a]};k.dc=function(){return this.get("length")};k.ee=function(a,b){this.a.splice(a,0,b);ce(this);this.b(new ae("add",b))};
k.pop=function(){return this.Rf(this.dc()-1)};k.push=function(a){var b=this.a.length;this.ee(b,a);return b};k.remove=function(a){var b=this.a,c,d;c=0;for(d=b.length;c<d;++c)if(b[c]===a)return this.Rf(c)};k.Rf=function(a){var b=this.a[a];this.a.splice(a,1);ce(this);this.b(new ae("remove",b));return b};k.Zo=function(a,b){var c=this.dc();if(a<c)c=this.a[a],this.a[a]=b,this.b(new ae("remove",c)),this.b(new ae("add",b));else{for(;c<a;++c)this.ee(c,void 0);this.ee(a,b)}};
function ce(a){a.set("length",a.a.length)};function de(a){return Array.prototype.concat.apply(Array.prototype,arguments)}function ee(a){var b=a.length;if(0<b){for(var c=Array(b),d=0;d<b;d++)c[d]=a[d];return c}return[]}function fe(a,b,c){return 2>=arguments.length?Array.prototype.slice.call(a,b):Array.prototype.slice.call(a,b,c)};var ge=/^#(?:[0-9a-f]{3}){1,2}$/i,he=/^(?:rgb)?\((0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2})\)$/i,ie=/^(?:rgba)?\((0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|1|0\.\d{0,10})\)$/i;function je(a){return Array.isArray(a)?a:ke(a)}function le(a){if("string"!==typeof a){var b=a[0];b!=(b|0)&&(b=b+.5|0);var c=a[1];c!=(c|0)&&(c=c+.5|0);var d=a[2];d!=(d|0)&&(d=d+.5|0);a="rgba("+b+","+c+","+d+","+(void 0===a[3]?1:a[3])+")"}return a}
var ke=function(){var a={},b=0;return function(c){var d;if(a.hasOwnProperty(c))d=a[c];else{if(1024<=b){d=0;for(var e in a)0===(d++&3)&&(delete a[e],--b)}var f,g;ge.exec(c)?(g=3==c.length-1?1:2,d=parseInt(c.substr(1+0*g,g),16),e=parseInt(c.substr(1+1*g,g),16),f=parseInt(c.substr(1+2*g,g),16),1==g&&(d=(d<<4)+d,e=(e<<4)+e,f=(f<<4)+f),d=[d,e,f,1]):(g=ie.exec(c))?(d=Number(g[1]),e=Number(g[2]),f=Number(g[3]),g=Number(g[4]),d=[d,e,f,g],d=me(d,d)):(g=he.exec(c))?(d=Number(g[1]),e=Number(g[2]),f=Number(g[3]),
d=[d,e,f,1],d=me(d,d)):d=void 0;a[c]=d;++b}return d}}();function me(a,b){var c=b||[];c[0]=sa(a[0]+.5|0,0,255);c[1]=sa(a[1]+.5|0,0,255);c[2]=sa(a[2]+.5|0,0,255);c[3]=sa(a[3],0,1);return c};function ne(a){return"string"===typeof a||a instanceof CanvasPattern||a instanceof CanvasGradient?a:le(a)};var oe;a:{var pe=aa.navigator;if(pe){var qe=pe.userAgent;if(qe){oe=qe;break a}}oe=""}function re(a){return-1!=oe.indexOf(a)};var se=re("Opera"),te=re("Trident")||re("MSIE"),ue=re("Edge"),ve=re("Gecko")&&!(-1!=oe.toLowerCase().indexOf("webkit")&&!re("Edge"))&&!(re("Trident")||re("MSIE"))&&!re("Edge"),we=-1!=oe.toLowerCase().indexOf("webkit")&&!re("Edge"),xe;
a:{var ye="",ze=function(){var a=oe;if(ve)return/rv\:([^\);]+)(\)|;)/.exec(a);if(ue)return/Edge\/([\d\.]+)/.exec(a);if(te)return/\b(?:MSIE|rv)[: ]([^\);]+)(\)|;)/.exec(a);if(we)return/WebKit\/(\S+)/.exec(a);if(se)return/(?:Version)[ \/]?(\S+)/.exec(a)}();ze&&(ye=ze?ze[1]:"");if(te){var Ae,Be=aa.document;Ae=Be?Be.documentMode:void 0;if(null!=Ae&&Ae>parseFloat(ye)){xe=String(Ae);break a}}xe=ye}var Ce={};function De(){return[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]}function Ee(a,b){a[0]=b[0];a[1]=b[1];a[4]=b[2];a[5]=b[3];a[12]=b[4];a[13]=b[5];return a};var Fe=De();function Ge(a,b){var c=document.createElement("CANVAS");a&&(c.width=a);b&&(c.height=b);return c.getContext("2d")}
var He=function(){var a;return function(){if(void 0===a){var b=document.createElement("P"),c,d={webkitTransform:"-webkit-transform",OTransform:"-o-transform",msTransform:"-ms-transform",MozTransform:"-moz-transform",transform:"transform"};document.body.appendChild(b);for(var e in d)e in b.style&&(b.style[e]="translate(1px,1px)",c=pa.getComputedStyle(b).getPropertyValue(d[e]));document.body.removeChild(b);a=c&&"none"!==c}return a}}(),Ie=function(){var a;return function(){if(void 0===a){var b=document.createElement("P"),
c,d={webkitTransform:"-webkit-transform",OTransform:"-o-transform",msTransform:"-ms-transform",MozTransform:"-moz-transform",transform:"transform"};document.body.appendChild(b);for(var e in d)e in b.style&&(b.style[e]="translate3d(1px,1px,1px)",c=pa.getComputedStyle(b).getPropertyValue(d[e]));document.body.removeChild(b);a=c&&"none"!==c}return a}}();
function Je(a,b){var c=a.style;c.WebkitTransform=b;c.MozTransform=b;c.b=b;c.msTransform=b;c.transform=b;if((c=te)&&!(c=Ce["9.0"])){for(var c=0,d=qa(String(xe)).split("."),e=qa("9.0").split("."),f=Math.max(d.length,e.length),g=0;0==c&&g<f;g++){var h=d[g]||"",l=e[g]||"",m=RegExp("(\\d*)(\\D*)","g"),n=RegExp("(\\d*)(\\D*)","g");do{var p=m.exec(h)||["","",""],q=n.exec(l)||["","",""];if(0==p[0].length&&0==q[0].length)break;c=ra(0==p[1].length?0:parseInt(p[1],10),0==q[1].length?0:parseInt(q[1],10))||ra(0==
p[2].length,0==q[2].length)||ra(p[2],q[2])}while(0==c)}c=Ce["9.0"]=0<=c}c&&(a.style.transformOrigin="0 0")}function Ke(a,b){var c;if(Ie()){var d=Ee(Fe,b),e=Array(16);for(c=0;16>c;++c)e[c]=d[c].toFixed(6);Je(a,"matrix3d("+e.join(",")+")")}else if(He()){d=Array(6);for(c=0;6>c;++c)d[c]=b[c].toFixed(6);Je(a,"matrix("+d.join(",")+")")}else a.style.left=Math.round(b[4])+"px",a.style.top=Math.round(b[5])+"px"}function Le(a,b){var c=b.parentNode;c&&c.replaceChild(a,b)}
function Me(a){a&&a.parentNode&&a.parentNode.removeChild(a)}function Ne(a){for(;a.lastChild;)a.removeChild(a.lastChild)};function Oe(a,b,c){Ua.call(this,a);this.map=b;this.frameState=void 0!==c?c:null}x(Oe,Ua);function Pe(a){bb.call(this);this.element=a.element?a.element:null;this.a=this.P=null;this.s=[];this.render=a.render?a.render:oa;a.target&&this.c(a.target)}x(Pe,bb);Pe.prototype.ka=function(){Me(this.element);bb.prototype.ka.call(this)};Pe.prototype.i=function(){return this.a};
Pe.prototype.setMap=function(a){this.a&&Me(this.element);for(var b=0,c=this.s.length;b<c;++b)Ka(this.s[b]);this.s.length=0;if(this.a=a)(this.P?this.P:a.v).appendChild(this.element),this.render!==oa&&this.s.push(B(a,"postrender",this.render,this)),a.render()};Pe.prototype.c=function(a){this.P="string"===typeof a?document.getElementById(a):a};function Qe(){this.g=0;this.f={};this.a=this.b=null}k=Qe.prototype;k.clear=function(){this.g=0;this.f={};this.a=this.b=null};function Re(a,b){return a.f.hasOwnProperty(b)}k.forEach=function(a,b){for(var c=this.b;c;)a.call(b,c.pc,c.Mb,this),c=c.zb};k.get=function(a){a=this.f[a];if(a===this.a)return a.pc;a===this.b?(this.b=this.b.zb,this.b.kc=null):(a.zb.kc=a.kc,a.kc.zb=a.zb);a.zb=null;a.kc=this.a;this.a=this.a.zb=a;return a.pc};k.wc=function(){return this.g};
k.N=function(){var a=Array(this.g),b=0,c;for(c=this.a;c;c=c.kc)a[b++]=c.Mb;return a};k.zc=function(){var a=Array(this.g),b=0,c;for(c=this.a;c;c=c.kc)a[b++]=c.pc;return a};k.pop=function(){var a=this.b;delete this.f[a.Mb];a.zb&&(a.zb.kc=null);this.b=a.zb;this.b||(this.a=null);--this.g;return a.pc};k.replace=function(a,b){this.get(a);this.f[a].pc=b};k.set=function(a,b){var c={Mb:a,zb:null,kc:this.a,pc:b};this.a?this.a.zb=c:this.b=c;this.a=c;this.f[a]=c;++this.g};function Se(a,b,c,d){return void 0!==d?(d[0]=a,d[1]=b,d[2]=c,d):[a,b,c]}function Te(a){var b=a[0],c=Array(b),d=1<<b-1,e,f;for(e=0;e<b;++e)f=48,a[1]&d&&(f+=1),a[2]&d&&(f+=2),c[e]=String.fromCharCode(f),d>>=1;return c.join("")};function Ue(a){Qe.call(this);this.c=void 0!==a?a:2048}x(Ue,Qe);function Ve(a){return a.wc()>a.c}Ue.prototype.Lc=function(a){for(var b,c;Ve(this)&&!(b=this.b.pc,c=b.ma[0].toString(),c in a&&a[c].contains(b.ma));)Ta(this.pop())};function We(a,b){Xa.call(this);this.ma=a;this.state=b;this.a=null;this.key=""}x(We,Xa);function Xe(a){a.b("change")}We.prototype.jb=function(){return t(this).toString()};We.prototype.i=function(){return this.ma};We.prototype.V=function(){return this.state};function Ye(a,b,c){void 0===c&&(c=[0,0]);c[0]=a[0]+2*b;c[1]=a[1]+2*b;return c}function Ze(a,b,c){void 0===c&&(c=[0,0]);c[0]=a[0]*b+.5|0;c[1]=a[1]*b+.5|0;return c}function $e(a,b){if(Array.isArray(a))return a;void 0===b?b=[a,a]:(b[0]=a,b[1]=a);return b};function af(a){bb.call(this);this.f=zc(a.projection);this.l=bf(a.attributions);this.S=a.logo;this.Ba=void 0!==a.state?a.state:"ready";this.C=void 0!==a.wrapX?a.wrapX:!1}x(af,bb);function bf(a){if("string"===typeof a)return[new $d({html:a})];if(a instanceof $d)return[a];if(Array.isArray(a)){for(var b=a.length,c=Array(b),d=0;d<b;d++){var e=a[d];c[d]="string"===typeof e?new $d({html:e}):e}return c}return null}k=af.prototype;k.sa=oa;k.wa=function(){return this.l};k.ua=function(){return this.S};k.xa=function(){return this.f};
k.V=function(){return this.Ba};k.ta=function(){this.u()};k.qa=function(a){this.l=bf(a);this.u()};function cf(a,b){a.Ba=b;a.u()};function df(a){this.minZoom=void 0!==a.minZoom?a.minZoom:0;this.b=a.resolutions;this.maxZoom=this.b.length-1;this.g=void 0!==a.origin?a.origin:null;this.c=null;void 0!==a.origins&&(this.c=a.origins);var b=a.extent;void 0===b||this.g||this.c||(this.g=fc(b));this.i=null;void 0!==a.tileSizes&&(this.i=a.tileSizes);this.o=void 0!==a.tileSize?a.tileSize:this.i?null:256;this.s=void 0!==b?b:null;this.a=null;this.f=[0,0];void 0!==a.sizes?this.a=a.sizes.map(function(a){return new Wd(Math.min(0,a[0]),Math.max(a[0]-
1,-1),Math.min(0,a[1]),Math.max(a[1]-1,-1))},this):b&&ef(this,b)}var ff=[0,0,0];k=df.prototype;k.yg=function(a,b,c){a=gf(this,a,b);for(var d=a.ca,e=a.ea;d<=e;++d)for(var f=a.fa,g=a.ga;f<=g;++f)c([b,d,f])};function hf(a,b,c,d,e){e=a.Ea(b,e);for(b=b[0]-1;b>=a.minZoom;){if(c.call(null,b,gf(a,e,b,d)))return!0;--b}return!1}k.H=function(){return this.s};k.Ig=function(){return this.maxZoom};k.Jg=function(){return this.minZoom};k.Ia=function(a){return this.g?this.g:this.c[a]};k.$=function(a){return this.b[a]};
k.Kh=function(){return this.b};function jf(a,b,c,d){return b[0]<a.maxZoom?(d=a.Ea(b,d),gf(a,d,b[0]+1,c)):null}function kf(a,b,c,d){lf(a,b[0],b[1],c,!1,ff);var e=ff[1],f=ff[2];lf(a,b[2],b[3],c,!0,ff);a=ff[1];b=ff[2];void 0!==d?(d.ca=e,d.ea=a,d.fa=f,d.ga=b):d=new Wd(e,a,f,b);return d}function gf(a,b,c,d){c=a.$(c);return kf(a,b,c,d)}function mf(a,b){var c=a.Ia(b[0]),d=a.$(b[0]),e=$e(a.Ja(b[0]),a.f);return[c[0]+(b[1]+.5)*e[0]*d,c[1]+(b[2]+.5)*e[1]*d]}
k.Ea=function(a,b){var c=this.Ia(a[0]),d=this.$(a[0]),e=$e(this.Ja(a[0]),this.f),f=c[0]+a[1]*e[0]*d,c=c[1]+a[2]*e[1]*d;return Vb(f,c,f+e[0]*d,c+e[1]*d,b)};k.Zd=function(a,b,c){return lf(this,a[0],a[1],b,!1,c)};function lf(a,b,c,d,e,f){var g=a.Lb(d),h=d/a.$(g),l=a.Ia(g);a=$e(a.Ja(g),a.f);b=h*Math.floor((b-l[0])/d+(e?.5:0))/a[0];c=h*Math.floor((c-l[1])/d+(e?0:.5))/a[1];e?(b=Math.ceil(b)-1,c=Math.ceil(c)-1):(b=Math.floor(b),c=Math.floor(c));return Se(g,b,c,f)}
k.qd=function(a,b,c){b=this.$(b);return lf(this,a[0],a[1],b,!1,c)};k.Ja=function(a){return this.o?this.o:this.i[a]};k.Lb=function(a,b){var c=hb(this.b,a,b||0);return sa(c,this.minZoom,this.maxZoom)};function ef(a,b){for(var c=a.b.length,d=Array(c),e=a.minZoom;e<c;++e)d[e]=gf(a,b,e);a.a=d}function nf(a){var b=a.l;if(!b){var b=of(a),c=pf(b,void 0,void 0),b=new df({extent:b,origin:fc(b),resolutions:c,tileSize:void 0});a.l=b}return b}
function qf(a){var b={};Ca(b,void 0!==a?a:{});void 0===b.extent&&(b.extent=zc("EPSG:3857").H());b.resolutions=pf(b.extent,b.maxZoom,b.tileSize);delete b.maxZoom;return new df(b)}function pf(a,b,c){b=void 0!==b?b:42;var d=kc(a);a=jc(a);c=$e(void 0!==c?c:256);c=Math.max(a/c[0],d/c[1]);b+=1;d=Array(b);for(a=0;a<b;++a)d[a]=c/Math.pow(2,a);return d}function of(a){a=zc(a);var b=a.H();b||(a=180*vc.degrees/a.ac(),b=Vb(-a,-a,a,a));return b};function rf(a){af.call(this,{attributions:a.attributions,extent:a.extent,logo:a.logo,projection:a.projection,state:a.state,wrapX:a.wrapX});this.ia=void 0!==a.opaque?a.opaque:!1;this.oa=void 0!==a.tilePixelRatio?a.tilePixelRatio:1;this.tileGrid=void 0!==a.tileGrid?a.tileGrid:null;this.a=new Ue(a.cacheSize);this.o=[0,0];this.Mb=""}x(rf,af);k=rf.prototype;k.Ah=function(){return Ve(this.a)};k.Lc=function(a,b){var c=this.pd(a);c&&c.Lc(b)};
function tf(a,b,c,d,e){b=a.pd(b);if(!b)return!1;for(var f=!0,g,h,l=d.ca;l<=d.ea;++l)for(var m=d.fa;m<=d.ga;++m)g=a.Fb(c,l,m),h=!1,Re(b,g)&&(g=b.get(g),(h=2===g.V())&&(h=!1!==e(g))),h||(f=!1);return f}k.Ud=function(){return 0};function uf(a,b){a.Mb!==b&&(a.Mb=b,a.u())}k.Fb=function(a,b,c){return a+"/"+b+"/"+c};k.jf=function(){return this.ia};k.Na=function(){return this.tileGrid};k.fb=function(a){return this.tileGrid?this.tileGrid:nf(a)};k.pd=function(a){var b=this.f;return b&&!Pc(b,a)?null:this.a};
k.cc=function(){return this.oa};k.$d=function(a,b,c){c=this.fb(c);b=this.cc(b);a=$e(c.Ja(a),this.o);return 1==b?a:Ze(a,b,this.o)};function vf(a,b,c){var d=void 0!==c?c:a.f;c=a.fb(d);if(a.C&&d.g){var e=b;b=e[0];a=mf(c,e);d=of(d);Qb(d,a)?b=e:(e=jc(d),a[0]+=e*Math.ceil((d[0]-a[0])/e),b=c.qd(a,b))}e=b[0];d=b[1];a=b[2];if(c.minZoom>e||e>c.maxZoom)c=!1;else{var f=c.H();c=(c=f?gf(c,f,e):c.a?c.a[e]:null)?Xd(c,d,a):!0}return c?b:null}k.ta=function(){this.a.clear();this.u()};k.Yf=oa;
function wf(a,b){Ua.call(this,a);this.tile=b}x(wf,Ua);function xf(a){a=a?a:{};this.S=document.createElement("UL");this.v=document.createElement("LI");this.S.appendChild(this.v);this.v.style.display="none";this.f=void 0!==a.collapsed?a.collapsed:!0;this.o=void 0!==a.collapsible?a.collapsible:!0;this.o||(this.f=!1);var b=void 0!==a.className?a.className:"ol-attribution",c=void 0!==a.tipLabel?a.tipLabel:"Attributions",d=void 0!==a.collapseLabel?a.collapseLabel:"\u00bb";"string"===typeof d?(this.A=document.createElement("span"),this.A.textContent=d):this.A=
d;d=void 0!==a.label?a.label:"i";"string"===typeof d?(this.D=document.createElement("span"),this.D.textContent=d):this.D=d;var e=this.o&&!this.f?this.A:this.D,d=document.createElement("button");d.setAttribute("type","button");d.title=c;d.appendChild(e);B(d,"click",this.am,this);c=document.createElement("div");c.className=b+" ol-unselectable ol-control"+(this.f&&this.o?" ol-collapsed":"")+(this.o?"":" ol-uncollapsible");c.appendChild(this.S);c.appendChild(d);Pe.call(this,{element:c,render:a.render?
a.render:yf,target:a.target});this.C=!0;this.j={};this.l={};this.T={}}x(xf,Pe);
function yf(a){if(a=a.frameState){var b,c,d,e,f,g,h,l,m,n,p,q=a.layerStatesArray,r=Ca({},a.attributions),v={},y=a.viewState.projection;c=0;for(b=q.length;c<b;c++)if(g=q[c].layer.ha())if(n=t(g).toString(),m=g.l)for(d=0,e=m.length;d<e;d++)if(h=m[d],l=t(h).toString(),!(l in r)){if(f=a.usedTiles[n]){var w=g.fb(y);a:{p=h;var G=y;if(p.b){var z,D,H,ba=void 0;for(ba in f)if(ba in p.b){H=f[ba];var A;z=0;for(D=p.b[ba].length;z<D;++z){A=p.b[ba][z];if(Zd(A,H)){p=!0;break a}var Fa=gf(w,of(G),parseInt(ba,10)),
Ja=Fa.ea-Fa.ca+1;if(H.ca<Fa.ca||H.ea>Fa.ea)if(Zd(A,new Wd(xa(H.ca,Ja),xa(H.ea,Ja),H.fa,H.ga))||H.ea-H.ca+1>Ja&&Zd(A,Fa)){p=!0;break a}}}p=!1}else p=!0}}else p=!1;p?(l in v&&delete v[l],r[l]=h):v[l]=h}b=[r,v];c=b[0];b=b[1];for(var M in this.j)M in c?(this.l[M]||(this.j[M].style.display="",this.l[M]=!0),delete c[M]):M in b?(this.l[M]&&(this.j[M].style.display="none",delete this.l[M]),delete b[M]):(Me(this.j[M]),delete this.j[M],delete this.l[M]);for(M in c)d=document.createElement("LI"),d.innerHTML=
c[M].a,this.S.appendChild(d),this.j[M]=d,this.l[M]=!0;for(M in b)d=document.createElement("LI"),d.innerHTML=b[M].a,d.style.display="none",this.S.appendChild(d),this.j[M]=d;M=!Ga(this.l)||!Ga(a.logos);this.C!=M&&(this.element.style.display=M?"":"none",this.C=M);M&&Ga(this.l)?this.element.classList.add("ol-logo-only"):this.element.classList.remove("ol-logo-only");var ma;a=a.logos;M=this.T;for(ma in M)ma in a||(Me(M[ma]),delete M[ma]);for(var Ub in a)b=a[Ub],b instanceof HTMLElement&&(this.v.appendChild(b),
M[Ub]=b),Ub in M||(ma=new Image,ma.src=Ub,""===b?c=ma:(c=document.createElement("a"),c.href=b,c.appendChild(ma)),this.v.appendChild(c),M[Ub]=c);this.v.style.display=Ga(a)?"none":""}else this.C&&(this.element.style.display="none",this.C=!1)}k=xf.prototype;k.am=function(a){a.preventDefault();zf(this)};function zf(a){a.element.classList.toggle("ol-collapsed");a.f?Le(a.A,a.D):Le(a.D,a.A);a.f=!a.f}k.$l=function(){return this.o};
k.cm=function(a){this.o!==a&&(this.o=a,this.element.classList.toggle("ol-uncollapsible"),!a&&this.f&&zf(this))};k.bm=function(a){this.o&&this.f!==a&&zf(this)};k.Zl=function(){return this.f};function Af(a){a=a?a:{};var b=void 0!==a.className?a.className:"ol-rotate",c=void 0!==a.label?a.label:"\u21e7";this.f=null;"string"===typeof c?(this.f=document.createElement("span"),this.f.className="ol-compass",this.f.textContent=c):(this.f=c,this.f.classList.add("ol-compass"));var d=a.tipLabel?a.tipLabel:"Reset rotation",c=document.createElement("button");c.className=b+"-reset";c.setAttribute("type","button");c.title=d;c.appendChild(this.f);B(c,"click",Af.prototype.A,this);d=document.createElement("div");
d.className=b+" ol-unselectable ol-control";d.appendChild(c);b=a.render?a.render:Bf;this.o=a.resetNorth?a.resetNorth:void 0;Pe.call(this,{element:d,render:b,target:a.target});this.j=void 0!==a.duration?a.duration:250;this.l=void 0!==a.autoHide?a.autoHide:!0;this.v=void 0;this.l&&this.element.classList.add("ol-hidden")}x(Af,Pe);
Af.prototype.A=function(a){a.preventDefault();if(void 0!==this.o)this.o();else{a=this.a;var b=a.aa();if(b){var c=b.La();void 0!==c&&(0<this.j&&(c%=2*Math.PI,c<-Math.PI&&(c+=2*Math.PI),c>Math.PI&&(c-=2*Math.PI),a.Wa(Ud({rotation:c,duration:this.j,easing:Nd}))),b.ie(0))}}};
function Bf(a){if(a=a.frameState){a=a.viewState.rotation;if(a!=this.v){var b="rotate("+a+"rad)";if(this.l){var c=this.element.classList.contains("ol-hidden");c||0!==a?c&&0!==a&&this.element.classList.remove("ol-hidden"):this.element.classList.add("ol-hidden")}this.f.style.msTransform=b;this.f.style.webkitTransform=b;this.f.style.transform=b}this.v=a}};function Cf(a){a=a?a:{};var b=void 0!==a.className?a.className:"ol-zoom",c=void 0!==a.delta?a.delta:1,d=void 0!==a.zoomInLabel?a.zoomInLabel:"+",e=void 0!==a.zoomOutLabel?a.zoomOutLabel:"\u2212",f=void 0!==a.zoomInTipLabel?a.zoomInTipLabel:"Zoom in",g=void 0!==a.zoomOutTipLabel?a.zoomOutTipLabel:"Zoom out",h=document.createElement("button");h.className=b+"-in";h.setAttribute("type","button");h.title=f;h.appendChild("string"===typeof d?document.createTextNode(d):d);B(h,"click",Cf.prototype.l.bind(this,
c));d=document.createElement("button");d.className=b+"-out";d.setAttribute("type","button");d.title=g;d.appendChild("string"===typeof e?document.createTextNode(e):e);B(d,"click",Cf.prototype.l.bind(this,-c));c=document.createElement("div");c.className=b+" ol-unselectable ol-control";c.appendChild(h);c.appendChild(d);Pe.call(this,{element:c,target:a.target});this.f=void 0!==a.duration?a.duration:250}x(Cf,Pe);
Cf.prototype.l=function(a,b){b.preventDefault();var c=this.a,d=c.aa();if(d){var e=d.$();e&&(0<this.f&&c.Wa(Vd({resolution:e,duration:this.f,easing:Nd})),c=d.constrainResolution(e,a),d.Vb(c))}};function Df(a){a=a?a:{};var b=new be;(void 0!==a.zoom?a.zoom:1)&&b.push(new Cf(a.zoomOptions));(void 0!==a.rotate?a.rotate:1)&&b.push(new Af(a.rotateOptions));(void 0!==a.attribution?a.attribution:1)&&b.push(new xf(a.attributionOptions));return b};function Ef(a){a=a?a:{};this.f=void 0!==a.className?a.className:"ol-full-screen";var b=void 0!==a.label?a.label:"\u2922";this.o="string"===typeof b?document.createTextNode(b):b;b=void 0!==a.labelActive?a.labelActive:"\u00d7";this.j="string"===typeof b?document.createTextNode(b):b;var c=a.tipLabel?a.tipLabel:"Toggle full-screen",b=document.createElement("button");b.className=this.f+"-"+Ff();b.setAttribute("type","button");b.title=c;b.appendChild(this.o);B(b,"click",this.D,this);c=document.createElement("div");
c.className=this.f+" ol-unselectable ol-control "+(Gf()?"":"ol-unsupported");c.appendChild(b);Pe.call(this,{element:c,target:a.target});this.A=void 0!==a.keys?a.keys:!1;this.l=a.source}x(Ef,Pe);
Ef.prototype.D=function(a){a.preventDefault();Gf()&&(a=this.a)&&(Ff()?document.exitFullscreen?document.exitFullscreen():document.msExitFullscreen?document.msExitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitExitFullscreen&&document.webkitExitFullscreen():(a=this.l?"string"===typeof this.l?document.getElementById(this.l):this.l:a.yc(),this.A?a.mozRequestFullScreenWithKeys?a.mozRequestFullScreenWithKeys():a.webkitRequestFullscreen?a.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT):
Hf(a):Hf(a)))};Ef.prototype.v=function(){var a=this.element.firstElementChild,b=this.a;Ff()?(a.className=this.f+"-true",Le(this.j,this.o)):(a.className=this.f+"-false",Le(this.o,this.j));b&&b.Xc()};Ef.prototype.setMap=function(a){Pe.prototype.setMap.call(this,a);a&&this.s.push(B(pa.document,If(),this.v,this))};
function Gf(){var a=document.body;return!!(a.webkitRequestFullscreen||a.mozRequestFullScreen&&document.mozFullScreenEnabled||a.msRequestFullscreen&&document.msFullscreenEnabled||a.requestFullscreen&&document.fullscreenEnabled)}function Ff(){return!!(document.webkitIsFullScreen||document.mozFullScreen||document.msFullscreenElement||document.fullscreenElement)}
function Hf(a){a.requestFullscreen?a.requestFullscreen():a.msRequestFullscreen?a.msRequestFullscreen():a.mozRequestFullScreen?a.mozRequestFullScreen():a.webkitRequestFullscreen&&a.webkitRequestFullscreen()}var If=function(){var a;return function(){if(!a){var b=document.body;b.webkitRequestFullscreen?a="webkitfullscreenchange":b.mozRequestFullScreen?a="mozfullscreenchange":b.msRequestFullscreen?a="MSFullscreenChange":b.requestFullscreen&&(a="fullscreenchange")}return a}}();function Jf(a){a=a?a:{};var b=document.createElement("DIV");b.className=void 0!==a.className?a.className:"ol-mouse-position";Pe.call(this,{element:b,render:a.render?a.render:Kf,target:a.target});B(this,db("projection"),this.dm,this);a.coordinateFormat&&this.ei(a.coordinateFormat);a.projection&&this.ih(zc(a.projection));this.v=void 0!==a.undefinedHTML?a.undefinedHTML:"";this.j=b.innerHTML;this.o=this.l=this.f=null}x(Jf,Pe);
function Kf(a){a=a.frameState;a?this.f!=a.viewState.projection&&(this.f=a.viewState.projection,this.l=null):this.f=null;Lf(this,this.o)}k=Jf.prototype;k.dm=function(){this.l=null};k.Cg=function(){return this.get("coordinateFormat")};k.hh=function(){return this.get("projection")};k.Xk=function(a){this.o=this.a.Td(a);Lf(this,this.o)};k.Yk=function(){Lf(this,null);this.o=null};
k.setMap=function(a){Pe.prototype.setMap.call(this,a);a&&(a=a.a,this.s.push(B(a,"mousemove",this.Xk,this),B(a,"mouseout",this.Yk,this)))};k.ei=function(a){this.set("coordinateFormat",a)};k.ih=function(a){this.set("projection",a)};function Lf(a,b){var c=a.v;if(b&&a.f){if(!a.l){var d=a.hh();a.l=d?Cc(a.f,d):Rc}if(d=a.a.Ma(b))a.l(d,d),c=(c=a.Cg())?c(d):d.toString()}a.j&&c==a.j||(a.element.innerHTML=c,a.j=c)};function Mf(a,b){var c=a;b&&(c=ka(a,b));"function"!=da(aa.setImmediate)||aa.Window&&aa.Window.prototype&&!re("Edge")&&aa.Window.prototype.setImmediate==aa.setImmediate?(Nf||(Nf=Of()),Nf(c)):aa.setImmediate(c)}var Nf;
function Of(){var a=aa.MessageChannel;"undefined"===typeof a&&"undefined"!==typeof window&&window.postMessage&&window.addEventListener&&!re("Presto")&&(a=function(){var a=document.createElement("IFRAME");a.style.display="none";a.src="";document.documentElement.appendChild(a);var b=a.contentWindow,a=b.document;a.open();a.write("");a.close();var c="callImmediate"+Math.random(),d="file:"==b.location.protocol?"*":b.location.protocol+"//"+b.location.host,a=ka(function(a){if(("*"==d||a.origin==d)&&a.data==
c)this.port1.onmessage()},this);b.addEventListener("message",a,!1);this.port1={};this.port2={postMessage:function(){b.postMessage(c,d)}}});if("undefined"!==typeof a&&!re("Trident")&&!re("MSIE")){var b=new a,c={},d=c;b.port1.onmessage=function(){if(void 0!==c.next){c=c.next;var a=c.rg;c.rg=null;a()}};return function(a){d.next={rg:a};d=d.next;b.port2.postMessage(0)}}return"undefined"!==typeof document&&"onreadystatechange"in document.createElement("SCRIPT")?function(a){var b=document.createElement("SCRIPT");
b.onreadystatechange=function(){b.onreadystatechange=null;b.parentNode.removeChild(b);b=null;a();a=null};document.documentElement.appendChild(b)}:function(a){aa.setTimeout(a,0)}};function Pf(a,b,c){Ua.call(this,a);this.b=b;a=c?c:{};this.buttons=Qf(a);this.pressure=Rf(a,this.buttons);this.bubbles="bubbles"in a?a.bubbles:!1;this.cancelable="cancelable"in a?a.cancelable:!1;this.view="view"in a?a.view:null;this.detail="detail"in a?a.detail:null;this.screenX="screenX"in a?a.screenX:0;this.screenY="screenY"in a?a.screenY:0;this.clientX="clientX"in a?a.clientX:0;this.clientY="clientY"in a?a.clientY:0;this.button="button"in a?a.button:0;this.relatedTarget="relatedTarget"in a?a.relatedTarget:
null;this.pointerId="pointerId"in a?a.pointerId:0;this.width="width"in a?a.width:0;this.height="height"in a?a.height:0;this.pointerType="pointerType"in a?a.pointerType:"";this.isPrimary="isPrimary"in a?a.isPrimary:!1;b.preventDefault&&(this.preventDefault=function(){b.preventDefault()})}x(Pf,Ua);function Qf(a){if(a.buttons||Sf)a=a.buttons;else switch(a.which){case 1:a=1;break;case 2:a=4;break;case 3:a=2;break;default:a=0}return a}
function Rf(a,b){var c=0;a.pressure?c=a.pressure:c=b?.5:0;return c}var Sf=!1;try{Sf=1===(new MouseEvent("click",{buttons:1})).buttons}catch(a){};var Tf=["experimental-webgl","webgl","webkit-3d","moz-webgl"];function Uf(a,b){var c,d,e=Tf.length;for(d=0;d<e;++d)try{if(c=a.getContext(Tf[d],b))return c}catch(f){}return null};var Vf,Wf="undefined"!==typeof navigator?navigator.userAgent.toLowerCase():"",Xf=-1!==Wf.indexOf("firefox"),Yf=-1!==Wf.indexOf("safari")&&-1===Wf.indexOf("chrom"),Zf=-1!==Wf.indexOf("macintosh"),$f=pa.devicePixelRatio||1,ag=!1,bg=function(){if(!("HTMLCanvasElement"in pa))return!1;try{var a=Ge();return a?(a.setLineDash&&(ag=!0),!0):!1}catch(b){return!1}}(),cg="DeviceOrientationEvent"in pa,dg="geolocation"in pa.navigator,eg="ontouchstart"in pa,fg="PointerEvent"in pa,gg=!!pa.navigator.msPointerEnabled,
hg=!1,ig,jg=[];if("WebGLRenderingContext"in pa)try{var kg=Uf(document.createElement("CANVAS"),{failIfMajorPerformanceCaveat:!0});kg&&(hg=!0,ig=kg.getParameter(kg.MAX_TEXTURE_SIZE),jg=kg.getSupportedExtensions())}catch(a){}Vf=hg;na=jg;la=ig;function lg(a,b){this.b=a;this.c=b};function mg(a){lg.call(this,a,{mousedown:this.rl,mousemove:this.sl,mouseup:this.vl,mouseover:this.ul,mouseout:this.tl});this.a=a.g;this.g=[]}x(mg,lg);function ng(a,b){for(var c=a.g,d=b.clientX,e=b.clientY,f=0,g=c.length,h;f<g&&(h=c[f]);f++){var l=Math.abs(e-h[1]);if(25>=Math.abs(d-h[0])&&25>=l)return!0}return!1}function og(a){var b=pg(a,a),c=b.preventDefault;b.preventDefault=function(){a.preventDefault();c()};b.pointerId=1;b.isPrimary=!0;b.pointerType="mouse";return b}k=mg.prototype;
k.rl=function(a){if(!ng(this,a)){if((1).toString()in this.a){var b=og(a);qg(this.b,rg,b,a);delete this.a[(1).toString()]}b=og(a);this.a[(1).toString()]=a;qg(this.b,sg,b,a)}};k.sl=function(a){if(!ng(this,a)){var b=og(a);qg(this.b,tg,b,a)}};k.vl=function(a){if(!ng(this,a)){var b=this.a[(1).toString()];b&&b.button===a.button&&(b=og(a),qg(this.b,ug,b,a),delete this.a[(1).toString()])}};k.ul=function(a){if(!ng(this,a)){var b=og(a);vg(this.b,b,a)}};
k.tl=function(a){if(!ng(this,a)){var b=og(a);wg(this.b,b,a)}};function xg(a){lg.call(this,a,{MSPointerDown:this.Al,MSPointerMove:this.Bl,MSPointerUp:this.El,MSPointerOut:this.Cl,MSPointerOver:this.Dl,MSPointerCancel:this.zl,MSGotPointerCapture:this.xl,MSLostPointerCapture:this.yl});this.a=a.g;this.g=["","unavailable","touch","pen","mouse"]}x(xg,lg);function yg(a,b){var c=b;"number"===typeof b.pointerType&&(c=pg(b,b),c.pointerType=a.g[b.pointerType]);return c}k=xg.prototype;k.Al=function(a){this.a[a.pointerId.toString()]=a;var b=yg(this,a);qg(this.b,sg,b,a)};
k.Bl=function(a){var b=yg(this,a);qg(this.b,tg,b,a)};k.El=function(a){var b=yg(this,a);qg(this.b,ug,b,a);delete this.a[a.pointerId.toString()]};k.Cl=function(a){var b=yg(this,a);wg(this.b,b,a)};k.Dl=function(a){var b=yg(this,a);vg(this.b,b,a)};k.zl=function(a){var b=yg(this,a);qg(this.b,rg,b,a);delete this.a[a.pointerId.toString()]};k.yl=function(a){this.b.b(new Pf("lostpointercapture",a,a))};k.xl=function(a){this.b.b(new Pf("gotpointercapture",a,a))};function zg(a){lg.call(this,a,{pointerdown:this.lo,pointermove:this.mo,pointerup:this.po,pointerout:this.no,pointerover:this.oo,pointercancel:this.ko,gotpointercapture:this.Gk,lostpointercapture:this.ql})}x(zg,lg);k=zg.prototype;k.lo=function(a){Ag(this.b,a)};k.mo=function(a){Ag(this.b,a)};k.po=function(a){Ag(this.b,a)};k.no=function(a){Ag(this.b,a)};k.oo=function(a){Ag(this.b,a)};k.ko=function(a){Ag(this.b,a)};k.ql=function(a){Ag(this.b,a)};k.Gk=function(a){Ag(this.b,a)};function Bg(a,b){lg.call(this,a,{touchstart:this.sp,touchmove:this.rp,touchend:this.qp,touchcancel:this.pp});this.a=a.g;this.l=b;this.g=void 0;this.i=0;this.f=void 0}x(Bg,lg);k=Bg.prototype;k.ci=function(){this.i=0;this.f=void 0};
function Cg(a,b,c){b=pg(b,c);b.pointerId=c.identifier+2;b.bubbles=!0;b.cancelable=!0;b.detail=a.i;b.button=0;b.buttons=1;b.width=c.webkitRadiusX||c.radiusX||0;b.height=c.webkitRadiusY||c.radiusY||0;b.pressure=c.webkitForce||c.force||.5;b.isPrimary=a.g===c.identifier;b.pointerType="touch";b.clientX=c.clientX;b.clientY=c.clientY;b.screenX=c.screenX;b.screenY=c.screenY;return b}
function Dg(a,b,c){function d(){b.preventDefault()}var e=Array.prototype.slice.call(b.changedTouches),f=e.length,g,h;for(g=0;g<f;++g)h=Cg(a,b,e[g]),h.preventDefault=d,c.call(a,b,h)}
k.sp=function(a){var b=a.touches,c=Object.keys(this.a),d=c.length;if(d>=b.length){var e=[],f,g,h;for(f=0;f<d;++f){g=c[f];h=this.a[g];var l;if(!(l=1==g))a:{l=b.length;for(var m,n=0;n<l;n++)if(m=b[n],m.identifier===g-2){l=!0;break a}l=!1}l||e.push(h.out)}for(f=0;f<e.length;++f)this.Ue(a,e[f])}b=a.changedTouches[0];c=Object.keys(this.a).length;if(0===c||1===c&&(1).toString()in this.a)this.g=b.identifier,void 0!==this.f&&pa.clearTimeout(this.f);Eg(this,a);this.i++;Dg(this,a,this.fo)};
k.fo=function(a,b){this.a[b.pointerId]={target:b.target,out:b,Lh:b.target};var c=this.b;b.bubbles=!0;qg(c,Fg,b,a);c=this.b;b.bubbles=!1;qg(c,Gg,b,a);qg(this.b,sg,b,a)};k.rp=function(a){a.preventDefault();Dg(this,a,this.wl)};k.wl=function(a,b){var c=this.a[b.pointerId];if(c){var d=c.out,e=c.Lh;qg(this.b,tg,b,a);d&&e!==b.target&&(d.relatedTarget=b.target,b.relatedTarget=e,d.target=e,b.target?(wg(this.b,d,a),vg(this.b,b,a)):(b.target=e,b.relatedTarget=null,this.Ue(a,b)));c.out=b;c.Lh=b.target}};
k.qp=function(a){Eg(this,a);Dg(this,a,this.tp)};k.tp=function(a,b){qg(this.b,ug,b,a);this.b.out(b,a);var c=this.b;b.bubbles=!1;qg(c,Hg,b,a);delete this.a[b.pointerId];b.isPrimary&&(this.g=void 0,this.f=pa.setTimeout(this.ci.bind(this),200))};k.pp=function(a){Dg(this,a,this.Ue)};k.Ue=function(a,b){qg(this.b,rg,b,a);this.b.out(b,a);var c=this.b;b.bubbles=!1;qg(c,Hg,b,a);delete this.a[b.pointerId];b.isPrimary&&(this.g=void 0,this.f=pa.setTimeout(this.ci.bind(this),200))};
function Eg(a,b){var c=a.l.g,d=b.changedTouches[0];if(a.g===d.identifier){var e=[d.clientX,d.clientY];c.push(e);pa.setTimeout(function(){kb(c,e)},2500)}};function Ig(a){Xa.call(this);this.i=a;this.g={};this.c={};this.a=[];fg?Jg(this,new zg(this)):gg?Jg(this,new xg(this)):(a=new mg(this),Jg(this,a),eg&&Jg(this,new Bg(this,a)));a=this.a.length;for(var b,c=0;c<a;c++)b=this.a[c],Kg(this,Object.keys(b.c))}x(Ig,Xa);function Jg(a,b){var c=Object.keys(b.c);c&&(c.forEach(function(a){var c=b.c[a];c&&(this.c[a]=c.bind(b))},a),a.a.push(b))}Ig.prototype.f=function(a){var b=this.c[a.type];b&&b(a)};
function Kg(a,b){b.forEach(function(a){B(this.i,a,this.f,this)},a)}function Lg(a,b){b.forEach(function(a){Qa(this.i,a,this.f,this)},a)}function pg(a,b){for(var c={},d,e=0,f=Mg.length;e<f;e++)d=Mg[e][0],c[d]=a[d]||b[d]||Mg[e][1];return c}Ig.prototype.out=function(a,b){a.bubbles=!0;qg(this,Ng,a,b)};function wg(a,b,c){a.out(b,c);var d=b.target,e=b.relatedTarget;d&&e&&d.contains(e)||(b.bubbles=!1,qg(a,Hg,b,c))}
function vg(a,b,c){b.bubbles=!0;qg(a,Fg,b,c);var d=b.target,e=b.relatedTarget;d&&e&&d.contains(e)||(b.bubbles=!1,qg(a,Gg,b,c))}function qg(a,b,c,d){a.b(new Pf(b,d,c))}function Ag(a,b){a.b(new Pf(b.type,b,b))}Ig.prototype.ka=function(){for(var a=this.a.length,b,c=0;c<a;c++)b=this.a[c],Lg(this,Object.keys(b.c));Xa.prototype.ka.call(this)};
var tg="pointermove",sg="pointerdown",ug="pointerup",Fg="pointerover",Ng="pointerout",Gg="pointerenter",Hg="pointerleave",rg="pointercancel",Mg=[["bubbles",!1],["cancelable",!1],["view",null],["detail",null],["screenX",0],["screenY",0],["clientX",0],["clientY",0],["ctrlKey",!1],["altKey",!1],["shiftKey",!1],["metaKey",!1],["button",0],["relatedTarget",null],["buttons",0],["pointerId",0],["width",0],["height",0],["pressure",0],["tiltX",0],["tiltY",0],["pointerType",""],["hwTimestamp",0],["isPrimary",
!1],["type",""],["target",null],["currentTarget",null],["which",0]];function Og(a,b,c,d,e){Oe.call(this,a,b,e);this.originalEvent=c;this.pixel=b.Td(c);this.coordinate=b.Ma(this.pixel);this.dragging=void 0!==d?d:!1}x(Og,Oe);Og.prototype.preventDefault=function(){Oe.prototype.preventDefault.call(this);this.originalEvent.preventDefault()};Og.prototype.stopPropagation=function(){Oe.prototype.stopPropagation.call(this);this.originalEvent.stopPropagation()};function Pg(a,b,c,d,e){Og.call(this,a,b,c.b,d,e);this.b=c}x(Pg,Og);
function Qg(a){Xa.call(this);this.f=a;this.l=0;this.o=!1;this.c=[];this.g=null;a=this.f.a;this.U=0;this.v={};this.i=new Ig(a);this.a=null;this.j=B(this.i,sg,this.$k,this);this.s=B(this.i,tg,this.No,this)}x(Qg,Xa);function Rg(a,b){var c;c=new Pg(Sg,a.f,b);a.b(c);0!==a.l?(pa.clearTimeout(a.l),a.l=0,c=new Pg(Tg,a.f,b),a.b(c)):a.l=pa.setTimeout(function(){this.l=0;var a=new Pg(Ug,this.f,b);this.b(a)}.bind(a),250)}
function Vg(a,b){b.type==Wg||b.type==Xg?delete a.v[b.pointerId]:b.type==Yg&&(a.v[b.pointerId]=!0);a.U=Object.keys(a.v).length}k=Qg.prototype;k.Qg=function(a){Vg(this,a);var b=new Pg(Wg,this.f,a);this.b(b);!this.o&&0===a.button&&Rg(this,this.g);0===this.U&&(this.c.forEach(Ka),this.c.length=0,this.o=!1,this.g=null,Ta(this.a),this.a=null)};
k.$k=function(a){Vg(this,a);var b=new Pg(Yg,this.f,a);this.b(b);this.g=a;0===this.c.length&&(this.a=new Ig(document),this.c.push(B(this.a,Zg,this.Sl,this),B(this.a,Wg,this.Qg,this),B(this.i,Xg,this.Qg,this)))};k.Sl=function(a){if(a.clientX!=this.g.clientX||a.clientY!=this.g.clientY){this.o=!0;var b=new Pg($g,this.f,a,this.o);this.b(b)}a.preventDefault()};k.No=function(a){this.b(new Pg(a.type,this.f,a,!(!this.g||a.clientX==this.g.clientX&&a.clientY==this.g.clientY)))};
k.ka=function(){this.s&&(Ka(this.s),this.s=null);this.j&&(Ka(this.j),this.j=null);this.c.forEach(Ka);this.c.length=0;this.a&&(Ta(this.a),this.a=null);this.i&&(Ta(this.i),this.i=null);Xa.prototype.ka.call(this)};var Ug="singleclick",Sg="click",Tg="dblclick",$g="pointerdrag",Zg="pointermove",Yg="pointerdown",Wg="pointerup",Xg="pointercancel",ah={Mp:Ug,Bp:Sg,Cp:Tg,Fp:$g,Ip:Zg,Ep:Yg,Lp:Wg,Kp:"pointerover",Jp:"pointerout",Gp:"pointerenter",Hp:"pointerleave",Dp:Xg};var bh=Array(6);function ch(){return[1,0,0,1,0,0]}function dh(a){return eh(a,1,0,0,1,0,0)}function fh(a,b){var c=a[0],d=a[1],e=a[2],f=a[3],g=a[4],h=a[5],l=b[0],m=b[1],n=b[2],p=b[3],q=b[4],r=b[5];a[0]=c*l+e*m;a[1]=d*l+f*m;a[2]=c*n+e*p;a[3]=d*n+f*p;a[4]=c*q+e*r+g;a[5]=d*q+f*r+h;return a}function eh(a,b,c,d,e,f,g){a[0]=b;a[1]=c;a[2]=d;a[3]=e;a[4]=f;a[5]=g;return a}function gh(a,b){a[0]=b[0];a[1]=b[1];a[2]=b[2];a[3]=b[3];a[4]=b[4];a[5]=b[5];return a}
function hh(a,b){var c=b[0],d=b[1];b[0]=a[0]*c+a[2]*d+a[4];b[1]=a[1]*c+a[3]*d+a[5];return b}function ih(a,b){var c=Math.cos(b),d=Math.sin(b);fh(a,eh(bh,c,d,-d,c,0,0))}function jh(a,b,c){return fh(a,eh(bh,b,0,0,c,0,0))}function kh(a,b,c){fh(a,eh(bh,1,0,0,1,b,c))}function lh(a,b,c,d,e,f,g,h){var l=Math.sin(f);f=Math.cos(f);a[0]=d*f;a[1]=e*l;a[2]=-d*l;a[3]=e*f;a[4]=g*d*f-h*d*l+b;a[5]=g*e*l+h*e*f+c;return a}
function mh(a){var b=a[0]*a[3]-a[1]*a[2],c=a[0],d=a[1],e=a[2],f=a[3],g=a[4],h=a[5];a[0]=f/b;a[1]=-d/b;a[2]=-e/b;a[3]=c/b;a[4]=(e*h-f*g)/b;a[5]=-(c*h-d*g)/b;return a};function nh(a){bb.call(this);var b=Ca({},a);b.opacity=void 0!==a.opacity?a.opacity:1;b.visible=void 0!==a.visible?a.visible:!0;b.zIndex=void 0!==a.zIndex?a.zIndex:0;b.maxResolution=void 0!==a.maxResolution?a.maxResolution:Infinity;b.minResolution=void 0!==a.minResolution?a.minResolution:0;this.G(b)}x(nh,bb);
function oh(a){var b=a.Qb(),c=a.kf(),d=a.yb(),e=a.H(),f=a.Rb(),g=a.Ob(),h=a.Pb();return{layer:a,opacity:sa(b,0,1),S:c,visible:d,Qc:!0,extent:e,zIndex:f,maxResolution:g,minResolution:Math.max(h,0)}}k=nh.prototype;k.H=function(){return this.get("extent")};k.Ob=function(){return this.get("maxResolution")};k.Pb=function(){return this.get("minResolution")};k.Qb=function(){return this.get("opacity")};k.yb=function(){return this.get("visible")};k.Rb=function(){return this.get("zIndex")};
k.fc=function(a){this.set("extent",a)};k.nc=function(a){this.set("maxResolution",a)};k.oc=function(a){this.set("minResolution",a)};k.gc=function(a){this.set("opacity",a)};k.hc=function(a){this.set("visible",a)};k.ic=function(a){this.set("zIndex",a)};function ph(){};function qh(a,b,c,d,e){Ua.call(this,a);this.vectorContext=b;this.frameState=c;this.context=d;this.glContext=e}x(qh,Ua);function rh(a){var b=Ca({},a);delete b.source;nh.call(this,b);this.v=this.j=this.o=null;a.map&&this.setMap(a.map);B(this,db("source"),this.fl,this);this.Fc(a.source?a.source:null)}x(rh,nh);function sh(a,b){return a.visible&&b>=a.minResolution&&b<a.maxResolution}k=rh.prototype;k.hf=function(a){a=a?a:[];a.push(oh(this));return a};k.ha=function(){return this.get("source")||null};k.kf=function(){var a=this.ha();return a?a.V():"undefined"};k.Lm=function(){this.u()};
k.fl=function(){this.v&&(Ka(this.v),this.v=null);var a=this.ha();a&&(this.v=B(a,"change",this.Lm,this));this.u()};k.setMap=function(a){this.o&&(Ka(this.o),this.o=null);a||this.u();this.j&&(Ka(this.j),this.j=null);a&&(this.o=B(a,"precompose",function(a){var c=oh(this);c.Qc=!1;c.zIndex=Infinity;a.frameState.layerStatesArray.push(c);a.frameState.layerStates[t(this)]=c},this),this.j=B(this,"change",a.render,a),this.u())};k.Fc=function(a){this.set("source",a)};function th(a,b,c,d,e){Xa.call(this);this.l=e;this.extent=a;this.f=c;this.resolution=b;this.state=d}x(th,Xa);function uh(a){a.b("change")}th.prototype.H=function(){return this.extent};th.prototype.$=function(){return this.resolution};th.prototype.V=function(){return this.state};function vh(a){Za.call(this);this.a=a}x(vh,Za);k=vh.prototype;k.sa=oa;k.Cc=function(a,b,c,d){a=hh(b.pixelToCoordinateTransform,a.slice());if(this.sa(a,b,rc,this))return c.call(d,this.a)};k.le=sc;k.Qd=function(a,b,c){return function(d,e){return tf(a,b,d,e,function(a){c[d]||(c[d]={});c[d][a.ma.toString()]=a})}};k.Om=function(a){2===a.target.V()&&wh(this)};function xh(a,b){var c=b.V();2!=c&&3!=c&&B(b,"change",a.Om,a);0==c&&(b.load(),c=b.V());return 2==c}
function wh(a){var b=a.a;b.yb()&&"ready"==b.kf()&&a.u()}function yh(a,b){b.Ah()&&a.postRenderFunctions.push(function(a,b,e){b=t(a).toString();a.Lc(e.viewState.projection,e.usedTiles[b])}.bind(null,b))}function zh(a,b){if(b){var c,d,e;d=0;for(e=b.length;d<e;++d)c=b[d],a[t(c).toString()]=c}}function Ah(a,b){var c=b.S;void 0!==c&&("string"===typeof c?a.logos[c]="":fa(c)&&(a.logos[c.src]=c.href))}
function Bh(a,b,c,d){b=t(b).toString();c=c.toString();b in a?c in a[b]?(a=a[b][c],d.ca<a.ca&&(a.ca=d.ca),d.ea>a.ea&&(a.ea=d.ea),d.fa<a.fa&&(a.fa=d.fa),d.ga>a.ga&&(a.ga=d.ga)):a[b][c]=d:(a[b]={},a[b][c]=d)}function Ch(a,b,c){return[b*(Math.round(a[0]/b)+c[0]%2/2),b*(Math.round(a[1]/b)+c[1]%2/2)]}
function Dh(a,b,c,d,e,f,g,h,l,m){var n=t(b).toString();n in a.wantedTiles||(a.wantedTiles[n]={});var p=a.wantedTiles[n];a=a.tileQueue;var q=c.minZoom,r,v,y,w,G,z;for(z=g;z>=q;--z)for(v=gf(c,f,z,v),y=c.$(z),w=v.ca;w<=v.ea;++w)for(G=v.fa;G<=v.ga;++G)g-z<=h?(r=b.bc(z,w,G,d,e),0==r.V()&&(p[r.ma.toString()]=!0,r.jb()in a.g||a.f([r,n,mf(c,r.ma),y])),void 0!==l&&l.call(m,r)):b.Yf(z,w,G,e)};function Eh(a){this.v=a.opacity;this.U=a.rotateWithView;this.j=a.rotation;this.i=a.scale;this.D=a.snapToPixel}k=Eh.prototype;k.qe=function(){return this.v};k.Xd=function(){return this.U};k.re=function(){return this.j};k.se=function(){return this.i};k.Yd=function(){return this.D};k.te=function(a){this.v=a};k.ue=function(a){this.j=a};k.ve=function(a){this.i=a};function Fh(a){a=a||{};this.c=void 0!==a.anchor?a.anchor:[.5,.5];this.f=null;this.a=void 0!==a.anchorOrigin?a.anchorOrigin:"top-left";this.o=void 0!==a.anchorXUnits?a.anchorXUnits:"fraction";this.s=void 0!==a.anchorYUnits?a.anchorYUnits:"fraction";var b=void 0!==a.crossOrigin?a.crossOrigin:null,c=void 0!==a.img?a.img:null,d=void 0!==a.imgSize?a.imgSize:null,e=a.src;void 0!==e&&0!==e.length||!c||(e=c.src||t(c).toString());var f=void 0!==a.src?0:2,g=void 0!==a.color?je(a.color):null,h=Gh.$b(),l=h.get(e,
b,g);l||(l=new Hh(c,e,d,b,f,g),h.set(e,b,g,l));this.b=l;this.C=void 0!==a.offset?a.offset:[0,0];this.g=void 0!==a.offsetOrigin?a.offsetOrigin:"top-left";this.l=null;this.A=void 0!==a.size?a.size:null;Eh.call(this,{opacity:void 0!==a.opacity?a.opacity:1,rotation:void 0!==a.rotation?a.rotation:0,scale:void 0!==a.scale?a.scale:1,snapToPixel:void 0!==a.snapToPixel?a.snapToPixel:!0,rotateWithView:void 0!==a.rotateWithView?a.rotateWithView:!1})}x(Fh,Eh);k=Fh.prototype;
k.Zb=function(){if(this.f)return this.f;var a=this.c,b=this.Gb();if("fraction"==this.o||"fraction"==this.s){if(!b)return null;a=this.c.slice();"fraction"==this.o&&(a[0]*=b[0]);"fraction"==this.s&&(a[1]*=b[1])}if("top-left"!=this.a){if(!b)return null;a===this.c&&(a=this.c.slice());if("top-right"==this.a||"bottom-right"==this.a)a[0]=-a[0]+b[0];if("bottom-left"==this.a||"bottom-right"==this.a)a[1]=-a[1]+b[1]}return this.f=a};k.jc=function(){var a=this.b;return a.c?a.c:a.a};k.ld=function(){return this.b.g};
k.td=function(){return this.b.f};k.pe=function(){var a=this.b;if(!a.o)if(a.s){var b=a.g[0],c=a.g[1],d=Ge(b,c);d.fillRect(0,0,b,c);a.o=d.canvas}else a.o=a.a;return a.o};k.Ia=function(){if(this.l)return this.l;var a=this.C;if("top-left"!=this.g){var b=this.Gb(),c=this.b.g;if(!b||!c)return null;a=a.slice();if("top-right"==this.g||"bottom-right"==this.g)a[0]=c[0]-b[0]-a[0];if("bottom-left"==this.g||"bottom-right"==this.g)a[1]=c[1]-b[1]-a[1]}return this.l=a};k.En=function(){return this.b.j};
k.Gb=function(){return this.A?this.A:this.b.g};k.pf=function(a,b){return B(this.b,"change",a,b)};k.load=function(){this.b.load()};k.Xf=function(a,b){Qa(this.b,"change",a,b)};function Hh(a,b,c,d,e,f){Xa.call(this);this.o=null;this.a=a?a:new Image;null!==d&&(this.a.crossOrigin=d);this.c=f?document.createElement("CANVAS"):null;this.l=f;this.i=null;this.f=e;this.g=c;this.j=b;this.s=!1;2==this.f&&Ih(this)}x(Hh,Xa);
function Ih(a){var b=Ge(1,1);try{b.drawImage(a.a,0,0),b.getImageData(0,0,1,1)}catch(c){a.s=!0}}Hh.prototype.v=function(){this.f=3;this.i.forEach(Ka);this.i=null;this.b("change")};
Hh.prototype.U=function(){this.f=2;this.g&&(this.a.width=this.g[0],this.a.height=this.g[1]);this.g=[this.a.width,this.a.height];this.i.forEach(Ka);this.i=null;Ih(this);if(!this.s&&null!==this.l){this.c.width=this.a.width;this.c.height=this.a.height;var a=this.c.getContext("2d");a.drawImage(this.a,0,0);for(var b=a.getImageData(0,0,this.a.width,this.a.height),c=b.data,d=this.l[0]/255,e=this.l[1]/255,f=this.l[2]/255,g=0,h=c.length;g<h;g+=4)c[g]*=d,c[g+1]*=e,c[g+2]*=f;a.putImageData(b,0,0)}this.b("change")};
Hh.prototype.load=function(){if(0==this.f){this.f=1;this.i=[Pa(this.a,"error",this.v,this),Pa(this.a,"load",this.U,this)];try{this.a.src=this.j}catch(a){this.v()}}};function Gh(){this.b={};this.a=0}ca(Gh);Gh.prototype.clear=function(){this.b={};this.a=0};Gh.prototype.get=function(a,b,c){a=b+":"+a+":"+(c?le(c):"null");return a in this.b?this.b[a]:null};Gh.prototype.set=function(a,b,c,d){this.b[b+":"+a+":"+(c?le(c):"null")]=d;++this.a};function Jh(a,b){this.i=b;this.g={};this.s={}}x(Jh,Sa);function Kh(a){var b=a.viewState,c=a.coordinateToPixelTransform,d=a.pixelToCoordinateTransform;lh(c,a.size[0]/2,a.size[1]/2,1/b.resolution,-1/b.resolution,-b.rotation,-b.center[0],-b.center[1]);mh(gh(d,c))}k=Jh.prototype;k.ka=function(){for(var a in this.g)Ta(this.g[a])};function Lh(){var a=Gh.$b();if(32<a.a){var b=0,c,d;for(c in a.b)d=a.b[c],0!==(b++&3)||Ya(d)||(delete a.b[c],--a.a)}}
k.sa=function(a,b,c,d,e,f){function g(a,e){var f=t(a).toString(),g=b.layerStates[t(e)].Qc;if(!(f in b.skippedFeatureUids)||g)return c.call(d,a,g?e:null)}var h,l=b.viewState,m=l.resolution,n=l.projection,l=a;if(n.a){var n=n.H(),p=jc(n),q=a[0];if(q<n[0]||q>n[2])l=[q+p*Math.ceil((n[0]-q)/p),a[1]]}n=b.layerStatesArray;for(p=n.length-1;0<=p;--p){var r=n[p],q=r.layer;if(sh(r,m)&&e.call(f,q)&&(r=Mh(this,q),q.ha()&&(h=r.sa(q.ha().C?l:a,b,g,d)),h))return h}};
k.rh=function(a,b,c,d,e,f){var g,h=b.viewState.resolution,l=b.layerStatesArray,m;for(m=l.length-1;0<=m;--m){g=l[m];var n=g.layer;if(sh(g,h)&&e.call(f,n)&&(g=Mh(this,n).Cc(a,b,c,d)))return g}};k.sh=function(a,b,c,d){return void 0!==this.sa(a,b,rc,this,c,d)};function Mh(a,b){var c=t(b).toString();if(c in a.g)return a.g[c];var d=a.Xe(b);a.g[c]=d;a.s[c]=B(d,"change",a.Rk,a);return d}k.Rk=function(){this.i.render()};k.Ce=oa;
k.To=function(a,b){for(var c in this.g)if(!(b&&c in b.layerStates)){var d=c,e=this.g[d];delete this.g[d];Ka(this.s[d]);delete this.s[d];Ta(e)}};function Nh(a,b){for(var c in a.g)if(!(c in b.layerStates)){b.postRenderFunctions.push(a.To.bind(a));break}}function ob(a,b){return a.zIndex-b.zIndex};function Oh(a,b){this.j=a;this.l=b;this.b=[];this.a=[];this.g={}}Oh.prototype.clear=function(){this.b.length=0;this.a.length=0;Da(this.g)};function Ph(a){var b=a.b,c=a.a,d=b[0];1==b.length?(b.length=0,c.length=0):(b[0]=b.pop(),c[0]=c.pop(),Qh(a,0));b=a.l(d);delete a.g[b];return d}Oh.prototype.f=function(a){var b=this.j(a);return Infinity!=b?(this.b.push(a),this.a.push(b),this.g[this.l(a)]=!0,Rh(this,0,this.b.length-1),!0):!1};Oh.prototype.wc=function(){return this.b.length};
Oh.prototype.Ya=function(){return 0===this.b.length};function Qh(a,b){for(var c=a.b,d=a.a,e=c.length,f=c[b],g=d[b],h=b;b<e>>1;){var l=2*b+1,m=2*b+2,l=m<e&&d[m]<d[l]?m:l;c[b]=c[l];d[b]=d[l];b=l}c[b]=f;d[b]=g;Rh(a,h,b)}function Rh(a,b,c){var d=a.b;a=a.a;for(var e=d[c],f=a[c];c>b;){var g=c-1>>1;if(a[g]>f)d[c]=d[g],a[c]=a[g],c=g;else break}d[c]=e;a[c]=f}
function Sh(a){var b=a.j,c=a.b,d=a.a,e=0,f=c.length,g,h,l;for(h=0;h<f;++h)g=c[h],l=b(g),Infinity==l?delete a.g[a.l(g)]:(d[e]=l,c[e++]=g);c.length=e;d.length=e;for(b=(a.b.length>>1)-1;0<=b;b--)Qh(a,b)};function Th(a,b){Oh.call(this,function(b){return a.apply(null,b)},function(a){return a[0].jb()});this.s=b;this.i=0;this.c={}}x(Th,Oh);Th.prototype.f=function(a){var b=Oh.prototype.f.call(this,a);b&&B(a[0],"change",this.o,this);return b};Th.prototype.o=function(a){a=a.target;var b=a.V();if(2===b||3===b||4===b||5===b)Qa(a,"change",this.o,this),a=a.jb(),a in this.c&&(delete this.c[a],--this.i),this.s()};
function Uh(a,b,c){for(var d=0,e,f;a.i<b&&d<c&&0<a.wc();)e=Ph(a)[0],f=e.jb(),0!==e.V()||f in a.c||(a.c[f]=!0,++a.i,++d,e.load())};function Vh(a,b,c){this.f=a;this.g=b;this.i=c;this.b=[];this.a=this.c=0}function Wh(a,b){var c=a.f,d=a.a,e=a.g-d,f=Math.log(a.g/a.a)/a.f;return Td({source:b,duration:f,easing:function(a){return d*(Math.exp(c*a*f)-1)/e}})};function Xh(a){bb.call(this);this.v=null;this.i(!0);this.handleEvent=a.handleEvent}x(Xh,bb);Xh.prototype.f=function(){return this.get("active")};Xh.prototype.l=function(){return this.v};Xh.prototype.i=function(a){this.set("active",a)};Xh.prototype.setMap=function(a){this.v=a};function Yh(a,b,c,d,e){if(void 0!==c){var f=b.La(),g=b.ab();void 0!==f&&g&&e&&0<e&&(a.Wa(Ud({rotation:f,duration:e,easing:Nd})),d&&a.Wa(Td({source:g,duration:e,easing:Nd})));b.rotate(c,d)}}
function Zh(a,b,c,d,e){var f=b.$();c=b.constrainResolution(f,c,0);$h(a,b,c,d,e)}function $h(a,b,c,d,e){if(c){var f=b.$(),g=b.ab();void 0!==f&&g&&c!==f&&e&&0<e&&(a.Wa(Vd({resolution:f,duration:e,easing:Nd})),d&&a.Wa(Td({source:g,duration:e,easing:Nd})));if(d){var h;a=b.ab();e=b.$();void 0!==a&&void 0!==e&&(h=[d[0]-c*(d[0]-a[0])/e,d[1]-c*(d[1]-a[1])/e]);b.nb(h)}b.Vb(c)}};function ai(a){a=a?a:{};this.a=a.delta?a.delta:1;Xh.call(this,{handleEvent:bi});this.c=void 0!==a.duration?a.duration:250}x(ai,Xh);function bi(a){var b=!1,c=a.originalEvent;if(a.type==Tg){var b=a.map,d=a.coordinate,c=c.shiftKey?-this.a:this.a,e=b.aa();Zh(b,e,c,d,this.c);a.preventDefault();b=!0}return!b};function ci(a){a=a.originalEvent;return a.altKey&&!(a.metaKey||a.ctrlKey)&&a.shiftKey}function di(a){a=a.originalEvent;return 0==a.button&&!(we&&Zf&&a.ctrlKey)}function ei(a){return"pointermove"==a.type}function fi(a){return a.type==Ug}function gi(a){a=a.originalEvent;return!a.altKey&&!(a.metaKey||a.ctrlKey)&&!a.shiftKey}function hi(a){a=a.originalEvent;return!a.altKey&&!(a.metaKey||a.ctrlKey)&&a.shiftKey}
function ii(a){a=a.originalEvent.target.tagName;return"INPUT"!==a&&"SELECT"!==a&&"TEXTAREA"!==a}function ji(a){return"mouse"==a.b.pointerType}function ki(a){a=a.b;return a.isPrimary&&0===a.button};function li(a){a=a?a:{};Xh.call(this,{handleEvent:a.handleEvent?a.handleEvent:mi});this.Oe=a.handleDownEvent?a.handleDownEvent:sc;this.Pe=a.handleDragEvent?a.handleDragEvent:oa;this.Mi=a.handleMoveEvent?a.handleMoveEvent:oa;this.tj=a.handleUpEvent?a.handleUpEvent:sc;this.D=!1;this.ia={};this.o=[]}x(li,Xh);function ni(a){for(var b=a.length,c=0,d=0,e=0;e<b;e++)c+=a[e].clientX,d+=a[e].clientY;return[c/b,d/b]}
function mi(a){if(!(a instanceof Pg))return!0;var b=!1,c=a.type;if(c===Yg||c===$g||c===Wg)c=a.b,a.type==Wg?delete this.ia[c.pointerId]:a.type==Yg?this.ia[c.pointerId]=c:c.pointerId in this.ia&&(this.ia[c.pointerId]=c),this.o=Ea(this.ia);this.D&&(a.type==$g?this.Pe(a):a.type==Wg&&(this.D=this.tj(a)));a.type==Yg?(this.D=a=this.Oe(a),b=this.Gc(a)):a.type==Zg&&this.Mi(a);return!b}li.prototype.Gc=function(a){return a};function oi(a){li.call(this,{handleDownEvent:pi,handleDragEvent:qi,handleUpEvent:ri});a=a?a:{};this.a=a.kinetic;this.c=this.j=null;this.A=a.condition?a.condition:gi;this.s=!1}x(oi,li);function qi(a){var b=ni(this.o);this.a&&this.a.b.push(b[0],b[1],Date.now());if(this.c){var c=this.c[0]-b[0],d=b[1]-this.c[1];a=a.map;var e=a.aa(),f=e.V(),d=c=[c,d],g=f.resolution;d[0]*=g;d[1]*=g;Db(c,f.rotation);yb(c,f.center);c=e.Pd(c);a.render();e.nb(c)}this.c=b}
function ri(a){a=a.map;var b=a.aa();if(0===this.o.length){var c;if(c=!this.s&&this.a)if(c=this.a,6>c.b.length)c=!1;else{var d=Date.now()-c.i,e=c.b.length-3;if(c.b[e+2]<d)c=!1;else{for(var f=e-3;0<f&&c.b[f+2]>d;)f-=3;var d=c.b[e+2]-c.b[f+2],g=c.b[e]-c.b[f],e=c.b[e+1]-c.b[f+1];c.c=Math.atan2(e,g);c.a=Math.sqrt(g*g+e*e)/d;c=c.a>c.g}}c&&(c=this.a,c=(c.g-c.a)/c.f,e=this.a.c,f=b.ab(),this.j=Wh(this.a,f),a.Wa(this.j),f=a.Ga(f),c=a.Ma([f[0]-c*Math.cos(e),f[1]-c*Math.sin(e)]),c=b.Pd(c),b.nb(c));Ld(b,-1);a.render();
return!1}this.c=null;return!0}function pi(a){if(0<this.o.length&&this.A(a)){var b=a.map,c=b.aa();this.c=null;this.D||Ld(c,1);b.render();this.j&&kb(b.S,this.j)&&(c.nb(a.frameState.viewState.center),this.j=null);this.a&&(a=this.a,a.b.length=0,a.c=0,a.a=0);this.s=1<this.o.length;return!0}return!1}oi.prototype.Gc=sc;function si(a){a=a?a:{};li.call(this,{handleDownEvent:ti,handleDragEvent:ui,handleUpEvent:vi});this.c=a.condition?a.condition:ci;this.a=void 0;this.j=void 0!==a.duration?a.duration:250}x(si,li);function ui(a){if(ji(a)){var b=a.map,c=b.Za();a=a.pixel;c=Math.atan2(c[1]/2-a[1],a[0]-c[0]/2);if(void 0!==this.a){a=c-this.a;var d=b.aa(),e=d.La();b.render();Yh(b,d,e-a)}this.a=c}}
function vi(a){if(!ji(a))return!0;a=a.map;var b=a.aa();Ld(b,-1);var c=b.La(),d=this.j,c=b.constrainRotation(c,0);Yh(a,b,c,void 0,d);return!1}function ti(a){return ji(a)&&di(a)&&this.c(a)?(a=a.map,Ld(a.aa(),1),a.render(),this.a=void 0,!0):!1}si.prototype.Gc=sc;function wi(a){this.f=null;this.a=document.createElement("div");this.a.style.position="absolute";this.a.className="ol-box "+a;this.g=this.c=this.b=null}x(wi,Sa);wi.prototype.ka=function(){this.setMap(null)};function xi(a){var b=a.c,c=a.g;a=a.a.style;a.left=Math.min(b[0],c[0])+"px";a.top=Math.min(b[1],c[1])+"px";a.width=Math.abs(c[0]-b[0])+"px";a.height=Math.abs(c[1]-b[1])+"px"}
wi.prototype.setMap=function(a){if(this.b){this.b.A.removeChild(this.a);var b=this.a.style;b.left=b.top=b.width=b.height="inherit"}(this.b=a)&&this.b.A.appendChild(this.a)};function yi(a){var b=a.c,c=a.g,b=[b,[b[0],c[1]],c,[c[0],b[1]]].map(a.b.Ma,a.b);b[4]=b[0].slice();a.f?a.f.ra([b]):a.f=new E([b])}wi.prototype.X=function(){return this.f};function zi(a,b,c){Ua.call(this,a);this.coordinate=b;this.mapBrowserEvent=c}x(zi,Ua);function Ai(a){li.call(this,{handleDownEvent:Bi,handleDragEvent:Ci,handleUpEvent:Di});a=a?a:{};this.a=new wi(a.className||"ol-dragbox");this.c=null;this.C=a.condition?a.condition:rc;this.A=a.boxEndCondition?a.boxEndCondition:Ei}x(Ai,li);function Ei(a,b,c){a=c[0]-b[0];b=c[1]-b[1];return 64<=a*a+b*b}
function Ci(a){if(ji(a)){var b=this.a,c=a.pixel;b.c=this.c;b.g=c;yi(b);xi(b);this.b(new zi("boxdrag",a.coordinate,a))}}Ai.prototype.X=function(){return this.a.X()};Ai.prototype.s=oa;function Di(a){if(!ji(a))return!0;this.a.setMap(null);this.A(a,this.c,a.pixel)&&(this.s(a),this.b(new zi("boxend",a.coordinate,a)));return!1}
function Bi(a){if(ji(a)&&di(a)&&this.C(a)){this.c=a.pixel;this.a.setMap(a.map);var b=this.a,c=this.c;b.c=this.c;b.g=c;yi(b);xi(b);this.b(new zi("boxstart",a.coordinate,a));return!0}return!1};function Fi(a){a=a?a:{};var b=a.condition?a.condition:hi;this.j=void 0!==a.duration?a.duration:200;this.S=void 0!==a.out?a.out:!1;Ai.call(this,{condition:b,className:a.className||"ol-dragzoom"})}x(Fi,Ai);
Fi.prototype.s=function(){var a=this.v,b=a.aa(),c=a.Za(),d=this.X().H();if(this.S){var e=b.Kc(c),d=[a.Ga(cc(d)),a.Ga(ec(d))],f=Vb(Infinity,Infinity,-Infinity,-Infinity,void 0),g,h;g=0;for(h=d.length;g<h;++g)Lb(f,d[g]);pc(e,1/Hd(f,c));d=e}c=b.constrainResolution(Hd(d,c));e=b.$();f=b.ab();a.Wa(Vd({resolution:e,duration:this.j,easing:Nd}));a.Wa(Td({source:f,duration:this.j,easing:Nd}));b.nb(lc(d));b.Vb(c)};function Gi(a){Xh.call(this,{handleEvent:Hi});a=a||{};this.a=function(a){return gi(a)&&ii(a)};this.c=void 0!==a.condition?a.condition:this.a;this.o=void 0!==a.duration?a.duration:100;this.j=void 0!==a.pixelDelta?a.pixelDelta:128}x(Gi,Xh);
function Hi(a){var b=!1;if("keydown"==a.type){var c=a.originalEvent.keyCode;if(this.c(a)&&(40==c||37==c||39==c||38==c)){var d=a.map,b=d.aa(),e=b.$()*this.j,f=0,g=0;40==c?g=-e:37==c?f=-e:39==c?f=e:g=e;c=[f,g];Db(c,b.La());e=this.o;if(f=b.ab())e&&0<e&&d.Wa(Td({source:f,duration:e,easing:Rd})),d=b.Pd([f[0]+c[0],f[1]+c[1]]),b.nb(d);a.preventDefault();b=!0}}return!b};function Ii(a){Xh.call(this,{handleEvent:Ji});a=a?a:{};this.c=a.condition?a.condition:ii;this.a=a.delta?a.delta:1;this.o=void 0!==a.duration?a.duration:100}x(Ii,Xh);function Ji(a){var b=!1;if("keydown"==a.type||"keypress"==a.type){var c=a.originalEvent.charCode;if(this.c(a)&&(43==c||45==c)){b=a.map;c=43==c?this.a:-this.a;b.render();var d=b.aa();Zh(b,d,c,void 0,this.o);a.preventDefault();b=!0}}return!b};function Ki(a){Xh.call(this,{handleEvent:Li});a=a||{};this.c=0;this.D=void 0!==a.duration?a.duration:250;this.s=void 0!==a.useAnchor?a.useAnchor:!0;this.a=null;this.j=this.o=void 0}x(Ki,Xh);
function Li(a){var b=!1;if("wheel"==a.type||"mousewheel"==a.type){var b=a.map,c=a.originalEvent;this.s&&(this.a=a.coordinate);var d;"wheel"==a.type?(d=c.deltaY,Xf&&c.deltaMode===pa.WheelEvent.DOM_DELTA_PIXEL&&(d/=$f),c.deltaMode===pa.WheelEvent.DOM_DELTA_LINE&&(d*=40)):"mousewheel"==a.type&&(d=-c.wheelDeltaY,Yf&&(d/=3));this.c+=d;void 0===this.o&&(this.o=Date.now());d=Math.max(80-(Date.now()-this.o),0);pa.clearTimeout(this.j);this.j=pa.setTimeout(this.A.bind(this,b),d);a.preventDefault();b=!0}return!b}
Ki.prototype.A=function(a){var b=sa(this.c,-1,1),c=a.aa();a.render();Zh(a,c,-b,this.a,this.D);this.c=0;this.a=null;this.j=this.o=void 0};Ki.prototype.C=function(a){this.s=a;a||(this.a=null)};function Mi(a){li.call(this,{handleDownEvent:Ni,handleDragEvent:Oi,handleUpEvent:Pi});a=a||{};this.c=null;this.j=void 0;this.a=!1;this.s=0;this.C=void 0!==a.threshold?a.threshold:.3;this.A=void 0!==a.duration?a.duration:250}x(Mi,li);
function Oi(a){var b=0,c=this.o[0],d=this.o[1],c=Math.atan2(d.clientY-c.clientY,d.clientX-c.clientX);void 0!==this.j&&(b=c-this.j,this.s+=b,!this.a&&Math.abs(this.s)>this.C&&(this.a=!0));this.j=c;a=a.map;c=a.a.getBoundingClientRect();d=ni(this.o);d[0]-=c.left;d[1]-=c.top;this.c=a.Ma(d);this.a&&(c=a.aa(),d=c.La(),a.render(),Yh(a,c,d+b,this.c))}
function Pi(a){if(2>this.o.length){a=a.map;var b=a.aa();Ld(b,-1);if(this.a){var c=b.La(),d=this.c,e=this.A,c=b.constrainRotation(c,0);Yh(a,b,c,d,e)}return!1}return!0}function Ni(a){return 2<=this.o.length?(a=a.map,this.c=null,this.j=void 0,this.a=!1,this.s=0,this.D||Ld(a.aa(),1),a.render(),!0):!1}Mi.prototype.Gc=sc;function Qi(a){li.call(this,{handleDownEvent:Ri,handleDragEvent:Si,handleUpEvent:Ti});a=a?a:{};this.c=null;this.s=void 0!==a.duration?a.duration:400;this.a=void 0;this.j=1}x(Qi,li);function Si(a){var b=1,c=this.o[0],d=this.o[1],e=c.clientX-d.clientX,c=c.clientY-d.clientY,e=Math.sqrt(e*e+c*c);void 0!==this.a&&(b=this.a/e);this.a=e;1!=b&&(this.j=b);a=a.map;var e=a.aa(),c=e.$(),d=a.a.getBoundingClientRect(),f=ni(this.o);f[0]-=d.left;f[1]-=d.top;this.c=a.Ma(f);a.render();$h(a,e,c*b,this.c)}
function Ti(a){if(2>this.o.length){a=a.map;var b=a.aa();Ld(b,-1);var c=b.$(),d=this.c,e=this.s,c=b.constrainResolution(c,0,this.j-1);$h(a,b,c,d,e);return!1}return!0}function Ri(a){return 2<=this.o.length?(a=a.map,this.c=null,this.a=void 0,this.j=1,this.D||Ld(a.aa(),1),a.render(),!0):!1}Qi.prototype.Gc=sc;function Ui(a){a=a?a:{};var b=new be,c=new Vh(-.005,.05,100);(void 0!==a.altShiftDragRotate?a.altShiftDragRotate:1)&&b.push(new si);(void 0!==a.doubleClickZoom?a.doubleClickZoom:1)&&b.push(new ai({delta:a.zoomDelta,duration:a.zoomDuration}));(void 0!==a.dragPan?a.dragPan:1)&&b.push(new oi({kinetic:c}));(void 0!==a.pinchRotate?a.pinchRotate:1)&&b.push(new Mi);(void 0!==a.pinchZoom?a.pinchZoom:1)&&b.push(new Qi({duration:a.zoomDuration}));if(void 0!==a.keyboard?a.keyboard:1)b.push(new Gi),b.push(new Ii({delta:a.zoomDelta,
duration:a.zoomDuration}));(void 0!==a.mouseWheelZoom?a.mouseWheelZoom:1)&&b.push(new Ki({duration:a.zoomDuration}));(void 0!==a.shiftDragZoom?a.shiftDragZoom:1)&&b.push(new Fi({duration:a.zoomDuration}));return b};function Vi(a){var b=a||{};a=Ca({},b);delete a.layers;b=b.layers;nh.call(this,a);this.f=[];this.a={};B(this,db("layers"),this.Tk,this);b?Array.isArray(b)&&(b=new be(b.slice())):b=new be;this.oh(b)}x(Vi,nh);k=Vi.prototype;k.ce=function(){this.yb()&&this.u()};
k.Tk=function(){this.f.forEach(Ka);this.f.length=0;var a=this.Tc();this.f.push(B(a,"add",this.Sk,this),B(a,"remove",this.Uk,this));for(var b in this.a)this.a[b].forEach(Ka);Da(this.a);var a=a.a,c,d;b=0;for(c=a.length;b<c;b++)d=a[b],this.a[t(d).toString()]=[B(d,"propertychange",this.ce,this),B(d,"change",this.ce,this)];this.u()};k.Sk=function(a){a=a.element;var b=t(a).toString();this.a[b]=[B(a,"propertychange",this.ce,this),B(a,"change",this.ce,this)];this.u()};
k.Uk=function(a){a=t(a.element).toString();this.a[a].forEach(Ka);delete this.a[a];this.u()};k.Tc=function(){return this.get("layers")};k.oh=function(a){this.set("layers",a)};
k.hf=function(a){var b=void 0!==a?a:[],c=b.length;this.Tc().forEach(function(a){a.hf(b)});a=oh(this);var d,e;for(d=b.length;c<d;c++)e=b[c],e.opacity*=a.opacity,e.visible=e.visible&&a.visible,e.maxResolution=Math.min(e.maxResolution,a.maxResolution),e.minResolution=Math.max(e.minResolution,a.minResolution),void 0!==a.extent&&(e.extent=void 0!==e.extent?nc(e.extent,a.extent):a.extent);return b};k.kf=function(){return"ready"};function Wi(a){wc.call(this,{code:a,units:"m",extent:Xi,global:!0,worldExtent:Yi})}x(Wi,wc);Wi.prototype.getPointResolution=function(a,b){return a/ta(b[1]/6378137)};var Zi=6378137*Math.PI,Xi=[-Zi,-Zi,Zi,Zi],Yi=[-180,-85,180,85],Ic="EPSG:3857 EPSG:102100 EPSG:102113 EPSG:900913 urn:ogc:def:crs:EPSG:6.18:3:3857 urn:ogc:def:crs:EPSG::3857 http://www.opengis.net/gml/srs/epsg.xml#3857".split(" ").map(function(a){return new Wi(a)});
function Jc(a,b,c){var d=a.length;c=1<c?c:2;void 0===b&&(2<c?b=a.slice():b=Array(d));for(var e=0;e<d;e+=c)b[e]=6378137*Math.PI*a[e]/180,b[e+1]=6378137*Math.log(Math.tan(Math.PI*(a[e+1]+90)/360));return b}function Kc(a,b,c){var d=a.length;c=1<c?c:2;void 0===b&&(2<c?b=a.slice():b=Array(d));for(var e=0;e<d;e+=c)b[e]=180*a[e]/(6378137*Math.PI),b[e+1]=360*Math.atan(Math.exp(a[e+1]/6378137))/Math.PI-90;return b};var $i=new tc(6378137);function aj(a,b){wc.call(this,{code:a,units:"degrees",extent:bj,axisOrientation:b,global:!0,metersPerUnit:cj,worldExtent:bj})}x(aj,wc);aj.prototype.getPointResolution=function(a){return a};
var bj=[-180,-90,180,90],cj=Math.PI*$i.radius/180,Lc=[new aj("CRS:84"),new aj("EPSG:4326","neu"),new aj("urn:ogc:def:crs:EPSG::4326","neu"),new aj("urn:ogc:def:crs:EPSG:6.6:4326","neu"),new aj("urn:ogc:def:crs:OGC:1.3:CRS84"),new aj("urn:ogc:def:crs:OGC:2:84"),new aj("http://www.opengis.net/gml/srs/epsg.xml#4326","neu"),new aj("urn:x-ogc:def:crs:EPSG:4326","neu")];function dj(){Ac(Ic);Ac(Lc);Hc()};function ej(a){rh.call(this,a?a:{})}x(ej,rh);function F(a){a=a?a:{};var b=Ca({},a);delete b.preload;delete b.useInterimTilesOnError;rh.call(this,b);this.l(void 0!==a.preload?a.preload:0);this.A(void 0!==a.useInterimTilesOnError?a.useInterimTilesOnError:!0)}x(F,rh);F.prototype.f=function(){return this.get("preload")};F.prototype.l=function(a){this.set("preload",a)};F.prototype.c=function(){return this.get("useInterimTilesOnError")};F.prototype.A=function(a){this.set("useInterimTilesOnError",a)};var fj=[0,0,0,1],gj=[],hj=[0,0,0,1];function ij(a,b,c,d){0!==b&&(a.translate(c,d),a.rotate(b),a.translate(-c,-d))};function jj(a){a=a||{};this.b=void 0!==a.color?a.color:null;this.a=void 0}jj.prototype.g=function(){return this.b};jj.prototype.f=function(a){this.b=a;this.a=void 0};function kj(a){void 0===a.a&&(a.a=a.b instanceof CanvasPattern||a.b instanceof CanvasGradient?t(a.b).toString():"f"+(a.b?le(a.b):"-"));return a.a};function lj(){this.a=-1};function mj(){this.a=64;this.b=Array(4);this.c=Array(this.a);this.b[0]=1732584193;this.b[1]=4023233417;this.b[2]=2562383102;this.b[3]=271733878;this.f=this.g=0}(function(){function a(){}a.prototype=lj.prototype;mj.a=lj.prototype;mj.prototype=new a;mj.prototype.constructor=mj;mj.b=function(a,c,d){for(var e=Array(arguments.length-2),f=2;f<arguments.length;f++)e[f-2]=arguments[f];return lj.prototype[c].apply(a,e)}})();
function nj(a,b,c){c||(c=0);var d=Array(16);if(ea(b))for(var e=0;16>e;++e)d[e]=b.charCodeAt(c++)|b.charCodeAt(c++)<<8|b.charCodeAt(c++)<<16|b.charCodeAt(c++)<<24;else for(e=0;16>e;++e)d[e]=b[c++]|b[c++]<<8|b[c++]<<16|b[c++]<<24;b=a.b[0];c=a.b[1];var e=a.b[2],f=a.b[3],g;g=b+(f^c&(e^f))+d[0]+3614090360&4294967295;b=c+(g<<7&4294967295|g>>>25);g=f+(e^b&(c^e))+d[1]+3905402710&4294967295;f=b+(g<<12&4294967295|g>>>20);g=e+(c^f&(b^c))+d[2]+606105819&4294967295;e=f+(g<<17&4294967295|g>>>15);g=c+(b^e&(f^b))+
d[3]+3250441966&4294967295;c=e+(g<<22&4294967295|g>>>10);g=b+(f^c&(e^f))+d[4]+4118548399&4294967295;b=c+(g<<7&4294967295|g>>>25);g=f+(e^b&(c^e))+d[5]+1200080426&4294967295;f=b+(g<<12&4294967295|g>>>20);g=e+(c^f&(b^c))+d[6]+2821735955&4294967295;e=f+(g<<17&4294967295|g>>>15);g=c+(b^e&(f^b))+d[7]+4249261313&4294967295;c=e+(g<<22&4294967295|g>>>10);g=b+(f^c&(e^f))+d[8]+1770035416&4294967295;b=c+(g<<7&4294967295|g>>>25);g=f+(e^b&(c^e))+d[9]+2336552879&4294967295;f=b+(g<<12&4294967295|g>>>20);g=e+(c^f&
(b^c))+d[10]+4294925233&4294967295;e=f+(g<<17&4294967295|g>>>15);g=c+(b^e&(f^b))+d[11]+2304563134&4294967295;c=e+(g<<22&4294967295|g>>>10);g=b+(f^c&(e^f))+d[12]+1804603682&4294967295;b=c+(g<<7&4294967295|g>>>25);g=f+(e^b&(c^e))+d[13]+4254626195&4294967295;f=b+(g<<12&4294967295|g>>>20);g=e+(c^f&(b^c))+d[14]+2792965006&4294967295;e=f+(g<<17&4294967295|g>>>15);g=c+(b^e&(f^b))+d[15]+1236535329&4294967295;c=e+(g<<22&4294967295|g>>>10);g=b+(e^f&(c^e))+d[1]+4129170786&4294967295;b=c+(g<<5&4294967295|g>>>
27);g=f+(c^e&(b^c))+d[6]+3225465664&4294967295;f=b+(g<<9&4294967295|g>>>23);g=e+(b^c&(f^b))+d[11]+643717713&4294967295;e=f+(g<<14&4294967295|g>>>18);g=c+(f^b&(e^f))+d[0]+3921069994&4294967295;c=e+(g<<20&4294967295|g>>>12);g=b+(e^f&(c^e))+d[5]+3593408605&4294967295;b=c+(g<<5&4294967295|g>>>27);g=f+(c^e&(b^c))+d[10]+38016083&4294967295;f=b+(g<<9&4294967295|g>>>23);g=e+(b^c&(f^b))+d[15]+3634488961&4294967295;e=f+(g<<14&4294967295|g>>>18);g=c+(f^b&(e^f))+d[4]+3889429448&4294967295;c=e+(g<<20&4294967295|
g>>>12);g=b+(e^f&(c^e))+d[9]+568446438&4294967295;b=c+(g<<5&4294967295|g>>>27);g=f+(c^e&(b^c))+d[14]+3275163606&4294967295;f=b+(g<<9&4294967295|g>>>23);g=e+(b^c&(f^b))+d[3]+4107603335&4294967295;e=f+(g<<14&4294967295|g>>>18);g=c+(f^b&(e^f))+d[8]+1163531501&4294967295;c=e+(g<<20&4294967295|g>>>12);g=b+(e^f&(c^e))+d[13]+2850285829&4294967295;b=c+(g<<5&4294967295|g>>>27);g=f+(c^e&(b^c))+d[2]+4243563512&4294967295;f=b+(g<<9&4294967295|g>>>23);g=e+(b^c&(f^b))+d[7]+1735328473&4294967295;e=f+(g<<14&4294967295|
g>>>18);g=c+(f^b&(e^f))+d[12]+2368359562&4294967295;c=e+(g<<20&4294967295|g>>>12);g=b+(c^e^f)+d[5]+4294588738&4294967295;b=c+(g<<4&4294967295|g>>>28);g=f+(b^c^e)+d[8]+2272392833&4294967295;f=b+(g<<11&4294967295|g>>>21);g=e+(f^b^c)+d[11]+1839030562&4294967295;e=f+(g<<16&4294967295|g>>>16);g=c+(e^f^b)+d[14]+4259657740&4294967295;c=e+(g<<23&4294967295|g>>>9);g=b+(c^e^f)+d[1]+2763975236&4294967295;b=c+(g<<4&4294967295|g>>>28);g=f+(b^c^e)+d[4]+1272893353&4294967295;f=b+(g<<11&4294967295|g>>>21);g=e+(f^
b^c)+d[7]+4139469664&4294967295;e=f+(g<<16&4294967295|g>>>16);g=c+(e^f^b)+d[10]+3200236656&4294967295;c=e+(g<<23&4294967295|g>>>9);g=b+(c^e^f)+d[13]+681279174&4294967295;b=c+(g<<4&4294967295|g>>>28);g=f+(b^c^e)+d[0]+3936430074&4294967295;f=b+(g<<11&4294967295|g>>>21);g=e+(f^b^c)+d[3]+3572445317&4294967295;e=f+(g<<16&4294967295|g>>>16);g=c+(e^f^b)+d[6]+76029189&4294967295;c=e+(g<<23&4294967295|g>>>9);g=b+(c^e^f)+d[9]+3654602809&4294967295;b=c+(g<<4&4294967295|g>>>28);g=f+(b^c^e)+d[12]+3873151461&4294967295;
f=b+(g<<11&4294967295|g>>>21);g=e+(f^b^c)+d[15]+530742520&4294967295;e=f+(g<<16&4294967295|g>>>16);g=c+(e^f^b)+d[2]+3299628645&4294967295;c=e+(g<<23&4294967295|g>>>9);g=b+(e^(c|~f))+d[0]+4096336452&4294967295;b=c+(g<<6&4294967295|g>>>26);g=f+(c^(b|~e))+d[7]+1126891415&4294967295;f=b+(g<<10&4294967295|g>>>22);g=e+(b^(f|~c))+d[14]+2878612391&4294967295;e=f+(g<<15&4294967295|g>>>17);g=c+(f^(e|~b))+d[5]+4237533241&4294967295;c=e+(g<<21&4294967295|g>>>11);g=b+(e^(c|~f))+d[12]+1700485571&4294967295;b=c+
(g<<6&4294967295|g>>>26);g=f+(c^(b|~e))+d[3]+2399980690&4294967295;f=b+(g<<10&4294967295|g>>>22);g=e+(b^(f|~c))+d[10]+4293915773&4294967295;e=f+(g<<15&4294967295|g>>>17);g=c+(f^(e|~b))+d[1]+2240044497&4294967295;c=e+(g<<21&4294967295|g>>>11);g=b+(e^(c|~f))+d[8]+1873313359&4294967295;b=c+(g<<6&4294967295|g>>>26);g=f+(c^(b|~e))+d[15]+4264355552&4294967295;f=b+(g<<10&4294967295|g>>>22);g=e+(b^(f|~c))+d[6]+2734768916&4294967295;e=f+(g<<15&4294967295|g>>>17);g=c+(f^(e|~b))+d[13]+1309151649&4294967295;
c=e+(g<<21&4294967295|g>>>11);g=b+(e^(c|~f))+d[4]+4149444226&4294967295;b=c+(g<<6&4294967295|g>>>26);g=f+(c^(b|~e))+d[11]+3174756917&4294967295;f=b+(g<<10&4294967295|g>>>22);g=e+(b^(f|~c))+d[2]+718787259&4294967295;e=f+(g<<15&4294967295|g>>>17);g=c+(f^(e|~b))+d[9]+3951481745&4294967295;a.b[0]=a.b[0]+b&4294967295;a.b[1]=a.b[1]+(e+(g<<21&4294967295|g>>>11))&4294967295;a.b[2]=a.b[2]+e&4294967295;a.b[3]=a.b[3]+f&4294967295}
function oj(a,b){var c;void 0===c&&(c=b.length);for(var d=c-a.a,e=a.c,f=a.g,g=0;g<c;){if(0==f)for(;g<=d;)nj(a,b,g),g+=a.a;if(ea(b))for(;g<c;){if(e[f++]=b.charCodeAt(g++),f==a.a){nj(a,e);f=0;break}}else for(;g<c;)if(e[f++]=b[g++],f==a.a){nj(a,e);f=0;break}}a.g=f;a.f+=c};function pj(a){a=a||{};this.b=void 0!==a.color?a.color:null;this.f=a.lineCap;this.g=void 0!==a.lineDash?a.lineDash:null;this.c=a.lineJoin;this.i=a.miterLimit;this.a=a.width;this.l=void 0}k=pj.prototype;k.Kn=function(){return this.b};k.dk=function(){return this.f};k.Ln=function(){return this.g};k.ek=function(){return this.c};k.jk=function(){return this.i};k.Mn=function(){return this.a};k.Nn=function(a){this.b=a;this.l=void 0};k.fp=function(a){this.f=a;this.l=void 0};
k.On=function(a){this.g=a;this.l=void 0};k.gp=function(a){this.c=a;this.l=void 0};k.hp=function(a){this.i=a;this.l=void 0};k.lp=function(a){this.a=a;this.l=void 0};
function qj(a){if(void 0===a.l){var b="s"+(a.b?le(a.b):"-")+","+(void 0!==a.f?a.f.toString():"-")+","+(a.g?a.g.toString():"-")+","+(void 0!==a.c?a.c:"-")+","+(void 0!==a.i?a.i.toString():"-")+","+(void 0!==a.a?a.a.toString():"-"),c=new mj;oj(c,b);b=Array((56>c.g?c.a:2*c.a)-c.g);b[0]=128;for(var d=1;d<b.length-8;++d)b[d]=0;for(var e=8*c.f,d=b.length-8;d<b.length;++d)b[d]=e&255,e/=256;oj(c,b);b=Array(16);for(d=e=0;4>d;++d)for(var f=0;32>f;f+=8)b[e++]=c.b[d]>>>f&255;if(8192>=b.length)c=String.fromCharCode.apply(null,
b);else for(c="",d=0;d<b.length;d+=8192)e=fe(b,d,d+8192),c+=String.fromCharCode.apply(null,e);a.l=c}return a.l};function rj(a){a=a||{};this.l=this.f=this.c=null;this.g=void 0!==a.fill?a.fill:null;this.b=void 0!==a.stroke?a.stroke:null;this.a=a.radius;this.A=[0,0];this.s=this.C=this.o=null;var b=a.atlasManager,c,d=null,e,f=0;this.b&&(e=le(this.b.b),f=this.b.a,void 0===f&&(f=1),d=this.b.g,ag||(d=null));var g=2*(this.a+f)+1;e={strokeStyle:e,Bd:f,size:g,lineDash:d};if(void 0===b)b=Ge(g,g),this.f=b.canvas,c=g=this.f.width,this.Gh(e,b,0,0),this.g?this.l=this.f:(b=Ge(e.size,e.size),this.l=b.canvas,this.Fh(e,b,0,0));
else{g=Math.round(g);(d=!this.g)&&(c=this.Fh.bind(this,e));var f=this.b?qj(this.b):"-",h=this.g?kj(this.g):"-";this.c&&f==this.c[1]&&h==this.c[2]&&this.a==this.c[3]||(this.c=["c"+f+h+(void 0!==this.a?this.a.toString():"-"),f,h,this.a]);b=b.add(this.c[0],g,g,this.Gh.bind(this,e),c);this.f=b.image;this.A=[b.offsetX,b.offsetY];c=b.image.width;this.l=d?b.Sg:this.f}this.o=[g/2,g/2];this.C=[g,g];this.s=[c,c];Eh.call(this,{opacity:1,rotateWithView:!1,rotation:0,scale:1,snapToPixel:void 0!==a.snapToPixel?
a.snapToPixel:!0})}x(rj,Eh);k=rj.prototype;k.Zb=function(){return this.o};k.Bn=function(){return this.g};k.pe=function(){return this.l};k.jc=function(){return this.f};k.td=function(){return 2};k.ld=function(){return this.s};k.Ia=function(){return this.A};k.Cn=function(){return this.a};k.Gb=function(){return this.C};k.Dn=function(){return this.b};k.pf=oa;k.load=oa;k.Xf=oa;
k.Gh=function(a,b,c,d){b.setTransform(1,0,0,1,0,0);b.translate(c,d);b.beginPath();b.arc(a.size/2,a.size/2,this.a,0,2*Math.PI,!0);this.g&&(b.fillStyle=ne(this.g.b),b.fill());this.b&&(b.strokeStyle=a.strokeStyle,b.lineWidth=a.Bd,a.lineDash&&b.setLineDash(a.lineDash),b.stroke());b.closePath()};
k.Fh=function(a,b,c,d){b.setTransform(1,0,0,1,0,0);b.translate(c,d);b.beginPath();b.arc(a.size/2,a.size/2,this.a,0,2*Math.PI,!0);b.fillStyle=le(fj);b.fill();this.b&&(b.strokeStyle=a.strokeStyle,b.lineWidth=a.Bd,a.lineDash&&b.setLineDash(a.lineDash),b.stroke());b.closePath()};function sj(a){a=a||{};this.i=null;this.g=tj;void 0!==a.geometry&&this.Jh(a.geometry);this.c=void 0!==a.fill?a.fill:null;this.a=void 0!==a.image?a.image:null;this.f=void 0!==a.stroke?a.stroke:null;this.l=void 0!==a.text?a.text:null;this.b=a.zIndex}k=sj.prototype;k.X=function(){return this.i};k.Zj=function(){return this.g};k.Pn=function(){return this.c};k.Qn=function(){return this.a};k.Rn=function(){return this.f};k.Ha=function(){return this.l};k.Sn=function(){return this.b};
k.Jh=function(a){"function"===typeof a?this.g=a:"string"===typeof a?this.g=function(b){return b.get(a)}:a?a&&(this.g=function(){return a}):this.g=tj;this.i=a};k.Tn=function(a){this.b=a};function uj(a){if("function"!==typeof a){var b;b=Array.isArray(a)?a:[a];a=function(){return b}}return a}var vj=null;function wj(){if(!vj){var a=new jj({color:"rgba(255,255,255,0.4)"}),b=new pj({color:"#3399CC",width:1.25});vj=[new sj({image:new rj({fill:a,stroke:b,radius:5}),fill:a,stroke:b})]}return vj}
function xj(){var a={},b=[255,255,255,1],c=[0,153,255,1];a.Polygon=[new sj({fill:new jj({color:[255,255,255,.5]})})];a.MultiPolygon=a.Polygon;a.LineString=[new sj({stroke:new pj({color:b,width:5})}),new sj({stroke:new pj({color:c,width:3})})];a.MultiLineString=a.LineString;a.Circle=a.Polygon.concat(a.LineString);a.Point=[new sj({image:new rj({radius:6,fill:new jj({color:c}),stroke:new pj({color:b,width:1.5})}),zIndex:Infinity})];a.MultiPoint=a.Point;a.GeometryCollection=a.Polygon.concat(a.LineString,
a.Point);return a}function tj(a){return a.X()};function I(a){a=a?a:{};var b=Ca({},a);delete b.style;delete b.renderBuffer;delete b.updateWhileAnimating;delete b.updateWhileInteracting;rh.call(this,b);this.a=void 0!==a.renderBuffer?a.renderBuffer:100;this.A=null;this.i=void 0;this.l(a.style);this.P=void 0!==a.updateWhileAnimating?a.updateWhileAnimating:!1;this.T=void 0!==a.updateWhileInteracting?a.updateWhileInteracting:!1}x(I,rh);function yj(a){return a.get("renderOrder")}I.prototype.D=function(){return this.A};I.prototype.C=function(){return this.i};
I.prototype.l=function(a){this.A=void 0!==a?a:wj;this.i=null===a?void 0:uj(this.A);this.u()};function J(a){a=a?a:{};var b=Ca({},a);delete b.preload;delete b.useInterimTilesOnError;I.call(this,b);this.W(a.preload?a.preload:0);this.ia(a.useInterimTilesOnError?a.useInterimTilesOnError:!0);this.s=a.renderMode||"hybrid"}x(J,I);J.prototype.f=function(){return this.get("preload")};J.prototype.c=function(){return this.get("useInterimTilesOnError")};J.prototype.W=function(a){this.set("preload",a)};J.prototype.ia=function(a){this.set("useInterimTilesOnError",a)};function zj(a,b,c,d,e){this.f=a;this.A=b;this.c=c;this.C=d;this.Hc=e;this.i=this.b=this.a=this.ia=this.Ra=this.W=null;this.Ba=this.na=this.v=this.Aa=this.ya=this.S=0;this.Hb=!1;this.l=this.oa=0;this.za=!1;this.P=0;this.g="";this.j=this.D=this.cb=this.Sa=0;this.T=this.s=this.o=null;this.U=[];this.rb=ch()}x(zj,ph);
function Aj(a,b,c){if(a.i){b=Vc(b,0,c,2,a.C,a.U);c=a.f;var d=a.rb,e=c.globalAlpha;1!=a.v&&(c.globalAlpha=e*a.v);var f=a.oa;a.Hb&&(f+=a.Hc);var g,h;g=0;for(h=b.length;g<h;g+=2){var l=b[g]-a.S,m=b[g+1]-a.ya;a.za&&(l=Math.round(l),m=Math.round(m));if(0!==f||1!=a.l){var n=l+a.S,p=m+a.ya;lh(d,n,p,a.l,a.l,f,-n,-p);c.setTransform.apply(c,d)}c.drawImage(a.i,a.na,a.Ba,a.P,a.Aa,l,m,a.P,a.Aa)}0===f&&1==a.l||c.setTransform(1,0,0,1,0,0);1!=a.v&&(c.globalAlpha=e)}}
function Bj(a,b,c,d){var e=0;if(a.T&&""!==a.g){a.o&&Cj(a,a.o);a.s&&Dj(a,a.s);var f=a.T,g=a.f,h=a.ia;h?(h.font!=f.font&&(h.font=g.font=f.font),h.textAlign!=f.textAlign&&(h.textAlign=g.textAlign=f.textAlign),h.textBaseline!=f.textBaseline&&(h.textBaseline=g.textBaseline=f.textBaseline)):(g.font=f.font,g.textAlign=f.textAlign,g.textBaseline=f.textBaseline,a.ia={font:f.font,textAlign:f.textAlign,textBaseline:f.textBaseline});b=Vc(b,e,c,d,a.C,a.U);for(f=a.f;e<c;e+=d){g=b[e]+a.Sa;h=b[e+1]+a.cb;if(0!==a.D||
1!=a.j){var l=lh(a.rb,g,h,a.j,a.j,a.D,-g,-h);f.setTransform.apply(f,l)}a.s&&f.strokeText(a.g,g,h);a.o&&f.fillText(a.g,g,h)}0===a.D&&1==a.j||f.setTransform(1,0,0,1,0,0)}}function Ej(a,b,c,d,e,f){var g=a.f;a=Vc(b,c,d,e,a.C,a.U);g.moveTo(a[0],a[1]);b=a.length;f&&(b-=2);for(c=2;c<b;c+=2)g.lineTo(a[c],a[c+1]);f&&g.closePath();return d}function Fj(a,b,c,d,e){var f,g;f=0;for(g=d.length;f<g;++f)c=Ej(a,b,c,d[f],e,!0);return c}k=zj.prototype;
k.Rd=function(a){if(oc(this.c,a.H())){if(this.a||this.b){this.a&&Cj(this,this.a);this.b&&Dj(this,this.b);var b;b=this.C;var c=this.U,d=a.la();b=d?Vc(d,0,d.length,a.va(),b,c):null;c=b[2]-b[0];d=b[3]-b[1];c=Math.sqrt(c*c+d*d);d=this.f;d.beginPath();d.arc(b[0],b[1],c,0,2*Math.PI);this.a&&d.fill();this.b&&d.stroke()}""!==this.g&&Bj(this,a.rd(),2,2)}};k.sd=function(a){this.Tb(a.c,a.f);this.Ub(a.a);this.Wb(a.Ha())};
k.sc=function(a){switch(a.Y()){case "Point":this.uc(a);break;case "LineString":this.hd(a);break;case "Polygon":this.bf(a);break;case "MultiPoint":this.tc(a);break;case "MultiLineString":this.$e(a);break;case "MultiPolygon":this.af(a);break;case "GeometryCollection":this.Ze(a);break;case "Circle":this.Rd(a)}};k.Ye=function(a,b){var c=(0,b.g)(a);c&&oc(this.c,c.H())&&(this.sd(b),this.sc(c))};k.Ze=function(a){a=a.c;var b,c;b=0;for(c=a.length;b<c;++b)this.sc(a[b])};
k.uc=function(a){var b=a.la();a=a.va();this.i&&Aj(this,b,b.length);""!==this.g&&Bj(this,b,b.length,a)};k.tc=function(a){var b=a.la();a=a.va();this.i&&Aj(this,b,b.length);""!==this.g&&Bj(this,b,b.length,a)};k.hd=function(a){if(oc(this.c,a.H())){if(this.b){Dj(this,this.b);var b=this.f,c=a.la();b.beginPath();Ej(this,c,0,c.length,a.va(),!1);b.stroke()}""!==this.g&&(a=Gj(a),Bj(this,a,2,2))}};
k.$e=function(a){var b=a.H();if(oc(this.c,b)){if(this.b){Dj(this,this.b);var b=this.f,c=a.la(),d=0,e=a.Eb(),f=a.va();b.beginPath();var g,h;g=0;for(h=e.length;g<h;++g)d=Ej(this,c,d,e[g],f,!1);b.stroke()}""!==this.g&&(a=Hj(a),Bj(this,a,a.length,2))}};k.bf=function(a){if(oc(this.c,a.H())){if(this.b||this.a){this.a&&Cj(this,this.a);this.b&&Dj(this,this.b);var b=this.f;b.beginPath();Fj(this,a.Nb(),0,a.Eb(),a.va());this.a&&b.fill();this.b&&b.stroke()}""!==this.g&&(a=Ad(a),Bj(this,a,2,2))}};
k.af=function(a){if(oc(this.c,a.H())){if(this.b||this.a){this.a&&Cj(this,this.a);this.b&&Dj(this,this.b);var b=this.f,c=Ij(a),d=0,e=a.i,f=a.va(),g,h;g=0;for(h=e.length;g<h;++g){var l=e[g];b.beginPath();d=Fj(this,c,d,l,f);this.a&&b.fill();this.b&&b.stroke()}}""!==this.g&&(a=Jj(a),Bj(this,a,a.length,2))}};function Cj(a,b){var c=a.f,d=a.W;d?d.fillStyle!=b.fillStyle&&(d.fillStyle=c.fillStyle=b.fillStyle):(c.fillStyle=b.fillStyle,a.W={fillStyle:b.fillStyle})}
function Dj(a,b){var c=a.f,d=a.Ra;d?(d.lineCap!=b.lineCap&&(d.lineCap=c.lineCap=b.lineCap),ag&&!mb(d.lineDash,b.lineDash)&&c.setLineDash(d.lineDash=b.lineDash),d.lineJoin!=b.lineJoin&&(d.lineJoin=c.lineJoin=b.lineJoin),d.lineWidth!=b.lineWidth&&(d.lineWidth=c.lineWidth=b.lineWidth),d.miterLimit!=b.miterLimit&&(d.miterLimit=c.miterLimit=b.miterLimit),d.strokeStyle!=b.strokeStyle&&(d.strokeStyle=c.strokeStyle=b.strokeStyle)):(c.lineCap=b.lineCap,ag&&c.setLineDash(b.lineDash),c.lineJoin=b.lineJoin,c.lineWidth=
b.lineWidth,c.miterLimit=b.miterLimit,c.strokeStyle=b.strokeStyle,a.Ra={lineCap:b.lineCap,lineDash:b.lineDash,lineJoin:b.lineJoin,lineWidth:b.lineWidth,miterLimit:b.miterLimit,strokeStyle:b.strokeStyle})}
k.Tb=function(a,b){if(a){var c=a.b;this.a={fillStyle:ne(c?c:fj)}}else this.a=null;if(b){var c=b.b,d=b.f,e=b.g,f=b.c,g=b.a,h=b.i;this.b={lineCap:void 0!==d?d:"round",lineDash:e?e:gj,lineJoin:void 0!==f?f:"round",lineWidth:this.A*(void 0!==g?g:1),miterLimit:void 0!==h?h:10,strokeStyle:le(c?c:hj)}}else this.b=null};
k.Ub=function(a){if(a){var b=a.Zb(),c=a.jc(1),d=a.Ia(),e=a.Gb();this.S=b[0];this.ya=b[1];this.Aa=e[1];this.i=c;this.v=a.v;this.na=d[0];this.Ba=d[1];this.Hb=a.U;this.oa=a.j;this.l=a.i;this.za=a.D;this.P=e[0]}else this.i=null};
k.Wb=function(a){if(a){var b=a.b;b?(b=b.b,this.o={fillStyle:ne(b?b:fj)}):this.o=null;var c=a.l;if(c){var b=c.b,d=c.f,e=c.g,f=c.c,g=c.a,c=c.i;this.s={lineCap:void 0!==d?d:"round",lineDash:e?e:gj,lineJoin:void 0!==f?f:"round",lineWidth:void 0!==g?g:1,miterLimit:void 0!==c?c:10,strokeStyle:le(b?b:hj)}}else this.s=null;var b=a.g,d=a.f,e=a.c,f=a.i,g=a.a,c=a.Ha(),h=a.o;a=a.j;this.T={font:void 0!==b?b:"10px sans-serif",textAlign:void 0!==h?h:"center",textBaseline:void 0!==a?a:"middle"};this.g=void 0!==c?
c:"";this.Sa=void 0!==d?this.A*d:0;this.cb=void 0!==e?this.A*e:0;this.D=void 0!==f?f:0;this.j=this.A*(void 0!==g?g:1)}else this.g=""};function Kj(a){vh.call(this,a);this.S=ch()}x(Kj,vh);
Kj.prototype.i=function(a,b,c){Lj(this,"precompose",c,a,void 0);var d=this.f?this.f.a():null;if(d){var e=b.extent,f=void 0!==e;if(f){var g=a.pixelRatio,h=a.size[0]*g,l=a.size[1]*g,m=a.viewState.rotation,n=fc(e),p=ec(e),q=dc(e),e=cc(e);hh(a.coordinateToPixelTransform,n);hh(a.coordinateToPixelTransform,p);hh(a.coordinateToPixelTransform,q);hh(a.coordinateToPixelTransform,e);c.save();ij(c,-m,h/2,l/2);c.beginPath();c.moveTo(n[0]*g,n[1]*g);c.lineTo(p[0]*g,p[1]*g);c.lineTo(q[0]*g,q[1]*g);c.lineTo(e[0]*
g,e[1]*g);c.clip();ij(c,m,h/2,l/2)}g=this.s;h=c.globalAlpha;c.globalAlpha=b.opacity;c.drawImage(d,0,0,+d.width,+d.height,Math.round(g[4]),Math.round(g[5]),Math.round(d.width*g[0]),Math.round(d.height*g[3]));c.globalAlpha=h;f&&c.restore()}Mj(this,c,a)};
function Lj(a,b,c,d,e){var f=a.a;if(Ya(f,b)){var g=d.size[0]*d.pixelRatio,h=d.size[1]*d.pixelRatio,l=d.viewState.rotation;ij(c,-l,g/2,h/2);a=void 0!==e?e:Nj(a,d,0);f.b(new qh(b,new zj(c,d.pixelRatio,d.extent,a,d.viewState.rotation),d,c,null));ij(c,l,g/2,h/2)}}function Mj(a,b,c,d){Lj(a,"postcompose",b,c,d)}function Nj(a,b,c){var d=b.viewState,e=b.pixelRatio,f=e/d.resolution;return lh(a.S,e*b.size[0]/2,e*b.size[1]/2,f,-f,-d.rotation,-d.center[0]+c,-d.center[1])};var Oj=["Polygon","LineString","Image","Text"];function Pj(a,b,c,d){this.Ba=a;this.T=b;this.overlaps=d;this.f=null;this.c=0;this.resolution=c;this.Aa=this.ya=null;this.a=[];this.coordinates=[];this.Ra=ch();this.b=[];this.W=[];this.ia=ch();this.na=ch()}x(Pj,ph);
function Qj(a,b,c,d,e,f){var g=a.coordinates.length,h=a.df(),l=[b[c],b[c+1]],m=[NaN,NaN],n=!0,p,q,r;for(p=c+e;p<d;p+=e)m[0]=b[p],m[1]=b[p+1],r=Tb(h,m),r!==q?(n&&(a.coordinates[g++]=l[0],a.coordinates[g++]=l[1]),a.coordinates[g++]=m[0],a.coordinates[g++]=m[1],n=!1):1===r?(a.coordinates[g++]=m[0],a.coordinates[g++]=m[1],n=!1):n=!0,l[0]=m[0],l[1]=m[1],q=r;p===c+e&&(a.coordinates[g++]=l[0],a.coordinates[g++]=l[1]);f&&(a.coordinates[g++]=b[c],a.coordinates[g++]=b[c+1]);return g}
function Rj(a,b){a.ya=[0,b,0];a.a.push(a.ya);a.Aa=[0,b,0];a.b.push(a.Aa)}
function Sj(a,b,c,d,e,f,g,h,l){var m;mb(d,a.Ra)?m=a.W:(m=Vc(a.coordinates,0,a.coordinates.length,2,d,a.W),gh(a.Ra,d));d=!Ga(f);var n=0,p=g.length,q,r,v=a.ia,y=a.na,w,G,z,D,H=0,ba=0;for(a=a.a!=g||a.overlaps?0:200;n<p;){var A=g[n],Fa,Ja,M,ma;switch(A[0]){case 0:q=A[1];d&&f[t(q).toString()]||!q.X()?n=A[2]:void 0===l||oc(l,q.X().H())?++n:n=A[2];break;case 1:H>a&&(b.fill(),H=0);ba>a&&(b.stroke(),ba=0);H||ba||b.beginPath();++n;break;case 2:q=A[1];r=m[q];A=m[q+1];z=m[q+2];q=m[q+3];D=z-r;ma=q-A;D=Math.sqrt(D*
D+ma*ma);b.moveTo(z,q);b.arc(r,A,D,0,2*Math.PI,!0);++n;break;case 3:b.closePath();++n;break;case 4:q=A[1];r=A[2];Fa=A[3];M=A[4]*c;var Ub=A[5]*c,Kb=A[6];Ja=A[7];var Hb=A[8],Xb=A[9];z=A[11];D=A[12];var gc=A[13],Nb=A[14];for(A[10]&&(z+=e);q<r;q+=2){A=m[q]-M;ma=m[q+1]-Ub;gc&&(A=Math.round(A),ma=Math.round(ma));if(1!=D||0!==z){var Od=A+M,sf=ma+Ub;lh(v,Od,sf,D,D,z,-Od,-sf);b.transform.apply(b,v)}Od=b.globalAlpha;1!=Ja&&(b.globalAlpha=Od*Ja);var sf=Nb+Hb>Fa.width?Fa.width-Hb:Nb,Pd=Kb+Xb>Fa.height?Fa.height-
Xb:Kb;b.drawImage(Fa,Hb,Xb,sf,Pd,A,ma,sf*c,Pd*c);1!=Ja&&(b.globalAlpha=Od);if(1!=D||0!==z)mh(gh(y,v)),b.transform.apply(b,y)}++n;break;case 5:q=A[1];r=A[2];M=A[3];Ub=A[4]*c;Kb=A[5]*c;z=A[6];D=A[7]*c;Fa=A[8];for(Ja=A[9];q<r;q+=2){A=m[q]+Ub;ma=m[q+1]+Kb;if(1!=D||0!==z)lh(v,A,ma,D,D,z,-A,-ma),b.transform.apply(b,v);Hb=M.split("\n");Xb=Hb.length;1<Xb?(gc=Math.round(1.5*b.measureText("M").width),ma-=(Xb-1)/2*gc):gc=0;for(Nb=0;Nb<Xb;Nb++)Od=Hb[Nb],Ja&&b.strokeText(Od,A,ma),Fa&&b.fillText(Od,A,ma),ma+=gc;
if(1!=D||0!==z)mh(gh(y,v)),b.transform.apply(b,y)}++n;break;case 6:if(void 0!==h&&(q=A[1],q=h(q)))return q;++n;break;case 7:a?H++:b.fill();++n;break;case 8:q=A[1];r=A[2];A=m[q];ma=m[q+1];z=A+.5|0;D=ma+.5|0;if(z!==w||D!==G)b.moveTo(A,ma),w=z,G=D;for(q+=2;q<r;q+=2)if(A=m[q],ma=m[q+1],z=A+.5|0,D=ma+.5|0,q==r-2||z!==w||D!==G)b.lineTo(A,ma),w=z,G=D;++n;break;case 9:H&&(b.fill(),H=0);b.fillStyle=A[1];++n;break;case 10:w=void 0!==A[7]?A[7]:!0;G=A[2];ba&&(b.stroke(),ba=0);b.strokeStyle=A[1];b.lineWidth=w?
G*c:G;b.lineCap=A[3];b.lineJoin=A[4];b.miterLimit=A[5];ag&&b.setLineDash(A[6]);G=w=NaN;++n;break;case 11:b.font=A[1];b.textAlign=A[2];b.textBaseline=A[3];++n;break;case 12:a?ba++:b.stroke();++n;break;default:++n}}H&&b.fill();ba&&b.stroke()}Pj.prototype.Pa=function(a,b,c,d,e){Sj(this,a,b,c,d,e,this.a,void 0,void 0)};
function Tj(a){var b=a.b;b.reverse();var c,d=b.length,e,f,g=-1;for(c=0;c<d;++c)if(e=b[c],f=e[0],6==f)g=c;else if(0==f){e[2]=c;e=a.b;for(f=c;g<f;){var h=e[g];e[g]=e[f];e[f]=h;++g;--f}g=-1}}function Uj(a,b){a.ya[2]=a.a.length;a.ya=null;a.Aa[2]=a.b.length;a.Aa=null;var c=[6,b];a.a.push(c);a.b.push(c)}Pj.prototype.ke=oa;Pj.prototype.df=function(){return this.T};
function Vj(a,b,c,d){Pj.call(this,a,b,c,d);this.o=this.P=null;this.S=this.C=this.D=this.A=this.U=this.v=this.s=this.j=this.l=this.i=this.g=void 0}x(Vj,Pj);Vj.prototype.uc=function(a,b){if(this.o){Rj(this,b);var c=a.la(),d=this.coordinates.length,c=Qj(this,c,0,c.length,a.va(),!1);this.a.push([4,d,c,this.o,this.g,this.i,this.l,this.j,this.s,this.v,this.U,this.A,this.D,this.C,this.S]);this.b.push([4,d,c,this.P,this.g,this.i,this.l,this.j,this.s,this.v,this.U,this.A,this.D,this.C,this.S]);Uj(this,b)}};
Vj.prototype.tc=function(a,b){if(this.o){Rj(this,b);var c=a.la(),d=this.coordinates.length,c=Qj(this,c,0,c.length,a.va(),!1);this.a.push([4,d,c,this.o,this.g,this.i,this.l,this.j,this.s,this.v,this.U,this.A,this.D,this.C,this.S]);this.b.push([4,d,c,this.P,this.g,this.i,this.l,this.j,this.s,this.v,this.U,this.A,this.D,this.C,this.S]);Uj(this,b)}};Vj.prototype.ke=function(){Tj(this);this.i=this.g=void 0;this.o=this.P=null;this.S=this.C=this.A=this.U=this.v=this.s=this.j=this.D=this.l=void 0};
Vj.prototype.Ub=function(a){var b=a.Zb(),c=a.Gb(),d=a.pe(1),e=a.jc(1),f=a.Ia();this.g=b[0];this.i=b[1];this.P=d;this.o=e;this.l=c[1];this.j=a.v;this.s=f[0];this.v=f[1];this.U=a.U;this.A=a.j;this.D=a.i;this.C=a.D;this.S=c[0]};function Wj(a,b,c,d){Pj.call(this,a,b,c,d);this.g={fd:void 0,ad:void 0,bd:null,cd:void 0,dd:void 0,ed:void 0,nf:0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}x(Wj,Pj);
function Xj(a,b,c,d,e){var f=a.coordinates.length;b=Qj(a,b,c,d,e,!1);f=[8,f,b];a.a.push(f);a.b.push(f);return d}k=Wj.prototype;k.df=function(){this.f||(this.f=Ob(this.T),0<this.c&&Mb(this.f,this.resolution*(this.c+1)/2,this.f));return this.f};
function Yj(a){var b=a.g,c=b.strokeStyle,d=b.lineCap,e=b.lineDash,f=b.lineJoin,g=b.lineWidth,h=b.miterLimit;b.fd==c&&b.ad==d&&mb(b.bd,e)&&b.cd==f&&b.dd==g&&b.ed==h||(b.nf!=a.coordinates.length&&(a.a.push([12]),b.nf=a.coordinates.length),a.a.push([10,c,g,d,f,h,e],[1]),b.fd=c,b.ad=d,b.bd=e,b.cd=f,b.dd=g,b.ed=h)}
k.hd=function(a,b){var c=this.g,d=c.lineWidth;void 0!==c.strokeStyle&&void 0!==d&&(Yj(this),Rj(this,b),this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash],[1]),c=a.la(),Xj(this,c,0,c.length,a.va()),this.b.push([12]),Uj(this,b))};
k.$e=function(a,b){var c=this.g,d=c.lineWidth;if(void 0!==c.strokeStyle&&void 0!==d){Yj(this);Rj(this,b);this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash],[1]);var c=a.Eb(),d=a.la(),e=a.va(),f=0,g,h;g=0;for(h=c.length;g<h;++g)f=Xj(this,d,f,c[g],e);this.b.push([12]);Uj(this,b)}};k.ke=function(){this.g.nf!=this.coordinates.length&&this.a.push([12]);Tj(this);this.g=null};
k.Tb=function(a,b){var c=b.b;this.g.strokeStyle=le(c?c:hj);c=b.f;this.g.lineCap=void 0!==c?c:"round";c=b.g;this.g.lineDash=c?c:gj;c=b.c;this.g.lineJoin=void 0!==c?c:"round";c=b.a;this.g.lineWidth=void 0!==c?c:1;c=b.i;this.g.miterLimit=void 0!==c?c:10;this.g.lineWidth>this.c&&(this.c=this.g.lineWidth,this.f=null)};
function Zj(a,b,c,d){Pj.call(this,a,b,c,d);this.g={ug:void 0,fd:void 0,ad:void 0,bd:null,cd:void 0,dd:void 0,ed:void 0,fillStyle:void 0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}x(Zj,Pj);
function ak(a,b,c,d,e){var f=a.g,g=[1];a.a.push(g);a.b.push(g);var h,g=0;for(h=d.length;g<h;++g){var l=d[g],m=a.coordinates.length;c=Qj(a,b,c,l,e,!0);c=[8,m,c];m=[3];a.a.push(c,m);a.b.push(c,m);c=l}b=[7];a.b.push(b);void 0!==f.fillStyle&&a.a.push(b);void 0!==f.strokeStyle&&(f=[12],a.a.push(f),a.b.push(f));return c}k=Zj.prototype;
k.Rd=function(a,b){var c=this.g,d=c.strokeStyle;if(void 0!==c.fillStyle||void 0!==d){bk(this);Rj(this,b);this.b.push([9,le(fj)]);void 0!==c.strokeStyle&&this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash]);var e=a.la(),d=this.coordinates.length;Qj(this,e,0,e.length,a.va(),!1);e=[1];d=[2,d];this.a.push(e,d);this.b.push(e,d);d=[7];this.b.push(d);void 0!==c.fillStyle&&this.a.push(d);void 0!==c.strokeStyle&&(c=[12],this.a.push(c),this.b.push(c));Uj(this,b)}};
k.bf=function(a,b){var c=this.g,d=c.strokeStyle;if(void 0!==c.fillStyle||void 0!==d)bk(this),Rj(this,b),this.b.push([9,le(fj)]),void 0!==c.strokeStyle&&this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash]),c=a.Eb(),d=a.Nb(),ak(this,d,0,c,a.va()),Uj(this,b)};
k.af=function(a,b){var c=this.g,d=c.strokeStyle;if(void 0!==c.fillStyle||void 0!==d){bk(this);Rj(this,b);this.b.push([9,le(fj)]);void 0!==c.strokeStyle&&this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash]);var c=a.i,d=Ij(a),e=a.va(),f=0,g,h;g=0;for(h=c.length;g<h;++g)f=ak(this,d,f,c[g],e);Uj(this,b)}};k.ke=function(){Tj(this);this.g=null;var a=this.Ba;if(0!==a){var b=this.coordinates,c,d;c=0;for(d=b.length;c<d;++c)b[c]=a*Math.round(b[c]/a)}};
k.df=function(){this.f||(this.f=Ob(this.T),0<this.c&&Mb(this.f,this.resolution*(this.c+1)/2,this.f));return this.f};
k.Tb=function(a,b){var c=this.g;if(a){var d=a.b;c.fillStyle=ne(d?d:fj)}else c.fillStyle=void 0;b?(d=b.b,c.strokeStyle=le(d?d:hj),d=b.f,c.lineCap=void 0!==d?d:"round",d=b.g,c.lineDash=d?d.slice():gj,d=b.c,c.lineJoin=void 0!==d?d:"round",d=b.a,c.lineWidth=void 0!==d?d:1,d=b.i,c.miterLimit=void 0!==d?d:10,c.lineWidth>this.c&&(this.c=c.lineWidth,this.f=null)):(c.strokeStyle=void 0,c.lineCap=void 0,c.lineDash=null,c.lineJoin=void 0,c.lineWidth=void 0,c.miterLimit=void 0)};
function bk(a){var b=a.g,c=b.fillStyle,d=b.strokeStyle,e=b.lineCap,f=b.lineDash,g=b.lineJoin,h=b.lineWidth,l=b.miterLimit;void 0!==c&&b.ug!=c&&(a.a.push([9,c]),b.ug=b.fillStyle);void 0===d||b.fd==d&&b.ad==e&&b.bd==f&&b.cd==g&&b.dd==h&&b.ed==l||(a.a.push([10,d,h,e,g,l,f]),b.fd=d,b.ad=e,b.bd=f,b.cd=g,b.dd=h,b.ed=l)}function ck(a,b,c,d){Pj.call(this,a,b,c,d);this.C=this.D=this.A=null;this.o="";this.U=this.v=this.s=this.j=0;this.l=this.i=this.g=null}x(ck,Pj);
function dk(a,b,c,d,e){if(""!==a.o&&a.l&&(a.g||a.i)){if(a.g){var f=a.g,g=a.A;if(!g||g.fillStyle!=f.fillStyle){var h=[9,f.fillStyle];a.a.push(h);a.b.push(h);g?g.fillStyle=f.fillStyle:a.A={fillStyle:f.fillStyle}}}a.i&&(f=a.i,g=a.D,g&&g.lineCap==f.lineCap&&g.lineDash==f.lineDash&&g.lineJoin==f.lineJoin&&g.lineWidth==f.lineWidth&&g.miterLimit==f.miterLimit&&g.strokeStyle==f.strokeStyle||(h=[10,f.strokeStyle,f.lineWidth,f.lineCap,f.lineJoin,f.miterLimit,f.lineDash,!1],a.a.push(h),a.b.push(h),g?(g.lineCap=
f.lineCap,g.lineDash=f.lineDash,g.lineJoin=f.lineJoin,g.lineWidth=f.lineWidth,g.miterLimit=f.miterLimit,g.strokeStyle=f.strokeStyle):a.D={lineCap:f.lineCap,lineDash:f.lineDash,lineJoin:f.lineJoin,lineWidth:f.lineWidth,miterLimit:f.miterLimit,strokeStyle:f.strokeStyle}));f=a.l;g=a.C;g&&g.font==f.font&&g.textAlign==f.textAlign&&g.textBaseline==f.textBaseline||(h=[11,f.font,f.textAlign,f.textBaseline],a.a.push(h),a.b.push(h),g?(g.font=f.font,g.textAlign=f.textAlign,g.textBaseline=f.textBaseline):a.C=
{font:f.font,textAlign:f.textAlign,textBaseline:f.textBaseline});Rj(a,e);f=a.coordinates.length;b=Qj(a,b,0,c,d,!1);b=[5,f,b,a.o,a.j,a.s,a.v,a.U,!!a.g,!!a.i];a.a.push(b);a.b.push(b);Uj(a,e)}}
ck.prototype.Wb=function(a){if(a){var b=a.b;b?(b=b.b,b=ne(b?b:fj),this.g?this.g.fillStyle=b:this.g={fillStyle:b}):this.g=null;var c=a.l;if(c){var b=c.b,d=c.f,e=c.g,f=c.c,g=c.a,c=c.i,d=void 0!==d?d:"round",e=e?e.slice():gj,f=void 0!==f?f:"round",g=void 0!==g?g:1,c=void 0!==c?c:10,b=le(b?b:hj);if(this.i){var h=this.i;h.lineCap=d;h.lineDash=e;h.lineJoin=f;h.lineWidth=g;h.miterLimit=c;h.strokeStyle=b}else this.i={lineCap:d,lineDash:e,lineJoin:f,lineWidth:g,miterLimit:c,strokeStyle:b}}else this.i=null;
var l=a.g,b=a.f,d=a.c,e=a.i,g=a.a,c=a.Ha(),f=a.o,h=a.j;a=void 0!==l?l:"10px sans-serif";f=void 0!==f?f:"center";h=void 0!==h?h:"middle";this.l?(l=this.l,l.font=a,l.textAlign=f,l.textBaseline=h):this.l={font:a,textAlign:f,textBaseline:h};this.o=void 0!==c?c:"";this.j=void 0!==b?b:0;this.s=void 0!==d?d:0;this.v=void 0!==e?e:0;this.U=void 0!==g?g:1}else this.o=""};function ek(a,b,c,d,e){this.j=a;this.g=b;this.l=d;this.o=c;this.f=e;this.a={};this.c=Ge(1,1);this.i=ch()}
function fk(a){for(var b in a.a){var c=a.a[b],d;for(d in c)c[d].ke()}}ek.prototype.sa=function(a,b,c,d,e){var f=lh(this.i,.5,.5,1/b,-1/b,-c,-a[0],-a[1]),g=this.c;g.clearRect(0,0,1,1);var h;void 0!==this.f&&(h=Jb(),Lb(h,a),Mb(h,b*this.f,h));return gk(this,g,f,c,d,function(a){if(0<g.getImageData(0,0,1,1).data[3]){if(a=e(a))return a;g.clearRect(0,0,1,1)}},h)};
ek.prototype.b=function(a,b){var c=void 0!==a?a.toString():"0",d=this.a[c];void 0===d&&(d={},this.a[c]=d);c=d[b];void 0===c&&(c=new hk[b](this.j,this.g,this.o,this.l),d[b]=c);return c};ek.prototype.Ya=function(){return Ga(this.a)};
ek.prototype.Pa=function(a,b,c,d,e,f){var g=Object.keys(this.a).map(Number);g.sort(fb);var h=this.g,l=h[0],m=h[1],n=h[2],h=h[3],l=[l,m,l,h,n,h,n,m];Vc(l,0,8,2,c,l);a.save();a.beginPath();a.moveTo(l[0],l[1]);a.lineTo(l[2],l[3]);a.lineTo(l[4],l[5]);a.lineTo(l[6],l[7]);a.closePath();a.clip();f=f?f:Oj;for(var p,q,l=0,m=g.length;l<m;++l)for(p=this.a[g[l].toString()],n=0,h=f.length;n<h;++n)q=p[f[n]],void 0!==q&&q.Pa(a,b,c,d,e);a.restore()};
function gk(a,b,c,d,e,f,g){var h=Object.keys(a.a).map(Number);h.sort(function(a,b){return b-a});var l,m,n,p,q;l=0;for(m=h.length;l<m;++l)for(p=a.a[h[l].toString()],n=Oj.length-1;0<=n;--n)if(q=p[Oj[n]],void 0!==q&&(q=Sj(q,b,1,c,d,e,q.b,f,g)))return q}var hk={Image:Vj,LineString:Wj,Polygon:Zj,Text:ck};function ik(a,b,c,d){this.g=a;this.b=b;this.c=c;this.f=d}k=ik.prototype;k.get=function(a){return this.f[a]};k.Eb=function(){return this.c};k.H=function(){this.a||(this.a="Point"===this.g?Wb(this.b):Yb(this.b,0,this.b.length,2));return this.a};k.Nb=function(){return this.b};k.la=ik.prototype.Nb;k.X=function(){return this};k.Nm=function(){return this.f};k.od=ik.prototype.X;k.va=function(){return 2};k.ec=oa;k.Y=function(){return this.g};function jk(a,b){return t(a)-t(b)}function kk(a,b){var c=.5*a/b;return c*c}function lk(a,b,c,d,e,f){var g=!1,h,l;if(h=c.a)l=h.td(),2==l||3==l?h.Xf(e,f):(0==l&&h.load(),h.pf(e,f),g=!0);if(e=(0,c.g)(b))d=e.od(d),(0,mk[d.Y()])(a,d,c,b);return g}
var mk={Point:function(a,b,c,d){var e=c.a;if(e){if(2!=e.td())return;var f=a.b(c.b,"Image");f.Ub(e);f.uc(b,d)}if(e=c.Ha())a=a.b(c.b,"Text"),a.Wb(e),dk(a,b.la(),2,2,d)},LineString:function(a,b,c,d){var e=c.f;if(e){var f=a.b(c.b,"LineString");f.Tb(null,e);f.hd(b,d)}if(e=c.Ha())a=a.b(c.b,"Text"),a.Wb(e),dk(a,Gj(b),2,2,d)},Polygon:function(a,b,c,d){var e=c.c,f=c.f;if(e||f){var g=a.b(c.b,"Polygon");g.Tb(e,f);g.bf(b,d)}if(e=c.Ha())a=a.b(c.b,"Text"),a.Wb(e),dk(a,Ad(b),2,2,d)},MultiPoint:function(a,b,c,d){var e=
c.a;if(e){if(2!=e.td())return;var f=a.b(c.b,"Image");f.Ub(e);f.tc(b,d)}if(e=c.Ha())a=a.b(c.b,"Text"),a.Wb(e),c=b.la(),dk(a,c,c.length,b.va(),d)},MultiLineString:function(a,b,c,d){var e=c.f;if(e){var f=a.b(c.b,"LineString");f.Tb(null,e);f.$e(b,d)}if(e=c.Ha())a=a.b(c.b,"Text"),a.Wb(e),b=Hj(b),dk(a,b,b.length,2,d)},MultiPolygon:function(a,b,c,d){var e=c.c,f=c.f;if(f||e){var g=a.b(c.b,"Polygon");g.Tb(e,f);g.af(b,d)}if(e=c.Ha())a=a.b(c.b,"Text"),a.Wb(e),b=Jj(b),dk(a,b,b.length,2,d)},GeometryCollection:function(a,
b,c,d){b=b.c;var e,f;e=0;for(f=b.length;e<f;++e)(0,mk[b[e].Y()])(a,b[e],c,d)},Circle:function(a,b,c,d){var e=c.c,f=c.f;if(e||f){var g=a.b(c.b,"Polygon");g.Tb(e,f);g.Rd(b,d)}if(e=c.Ha())a=a.b(c.b,"Text"),a.Wb(e),dk(a,b.rd(),2,2,d)}};function nk(a,b,c,d,e,f){this.c=void 0!==f?f:null;th.call(this,a,b,c,void 0!==f?0:2,d);this.g=e}x(nk,th);nk.prototype.i=function(a){this.state=a?3:2;uh(this)};nk.prototype.load=function(){0==this.state&&(this.state=1,uh(this),this.c(this.i.bind(this)))};nk.prototype.a=function(){return this.g};var ok,pk=pa.navigator,qk=pa.chrome,rk=-1<pk.userAgent.indexOf("OPR"),sk=-1<pk.userAgent.indexOf("Edge");ok=!(!pk.userAgent.match("CriOS")&&null!==qk&&void 0!==qk&&"Google Inc."===pk.vendor&&0==rk&&0==sk);function tk(a,b,c,d){var e=Sc(c,b,a);c=b.getPointResolution(d,c);b=b.ac();void 0!==b&&(c*=b);b=a.ac();void 0!==b&&(c/=b);a=a.getPointResolution(c,e)/c;isFinite(a)&&0<a&&(c/=a);return c}function uk(a,b,c,d){a=c-a;b=d-b;var e=Math.sqrt(a*a+b*b);return[Math.round(c+a/e),Math.round(d+b/e)]}
function vk(a,b,c,d,e,f,g,h,l,m,n){var p=Ge(Math.round(c*a),Math.round(c*b));if(0===l.length)return p.canvas;p.scale(c,c);var q=Jb();l.forEach(function(a){ac(q,a.extent)});var r=Ge(Math.round(c*jc(q)/d),Math.round(c*kc(q)/d)),v=c/d;l.forEach(function(a){r.drawImage(a.image,m,m,a.image.width-2*m,a.image.height-2*m,(a.extent[0]-q[0])*v,-(a.extent[3]-q[3])*v,jc(a.extent)*v,kc(a.extent)*v)});var y=fc(g);h.f.forEach(function(a){var b=a.source,e=a.target,g=b[1][0],h=b[1][1],l=b[2][0],m=b[2][1];a=(e[0][0]-
y[0])/f;var n=-(e[0][1]-y[1])/f,v=(e[1][0]-y[0])/f,M=-(e[1][1]-y[1])/f,ma=(e[2][0]-y[0])/f,Ub=-(e[2][1]-y[1])/f,e=b[0][0],b=b[0][1],g=g-e,h=h-b,l=l-e,m=m-b;a:{g=[[g,h,0,0,v-a],[l,m,0,0,ma-a],[0,0,g,h,M-n],[0,0,l,m,Ub-n]];h=g.length;for(l=0;l<h;l++){for(var m=l,Kb=Math.abs(g[l][l]),Hb=l+1;Hb<h;Hb++){var Xb=Math.abs(g[Hb][l]);Xb>Kb&&(Kb=Xb,m=Hb)}if(0===Kb){g=null;break a}Kb=g[m];g[m]=g[l];g[l]=Kb;for(m=l+1;m<h;m++)for(Kb=-g[m][l]/g[l][l],Hb=l;Hb<h+1;Hb++)g[m][Hb]=l==Hb?0:g[m][Hb]+Kb*g[l][Hb]}l=Array(h);
for(m=h-1;0<=m;m--)for(l[m]=g[m][h]/g[m][m],Kb=m-1;0<=Kb;Kb--)g[Kb][h]-=g[Kb][m]*l[m];g=l}g&&(p.save(),p.beginPath(),ok?(l=(a+v+ma)/3,m=(n+M+Ub)/3,h=uk(l,m,a,n),v=uk(l,m,v,M),ma=uk(l,m,ma,Ub),p.moveTo(h[0],h[1]),p.lineTo(v[0],v[1]),p.lineTo(ma[0],ma[1])):(p.moveTo(a,n),p.lineTo(v,M),p.lineTo(ma,Ub)),p.closePath(),p.clip(),p.transform(g[0],g[2],g[1],g[3],a,n),p.translate(q[0]-e,q[3]-b),p.scale(d/c,-d/c),p.drawImage(r.canvas,0,0),p.restore())});n&&(p.save(),p.strokeStyle="black",p.lineWidth=1,h.f.forEach(function(a){var b=
a.target;a=(b[0][0]-y[0])/f;var c=-(b[0][1]-y[1])/f,d=(b[1][0]-y[0])/f,e=-(b[1][1]-y[1])/f,g=(b[2][0]-y[0])/f,b=-(b[2][1]-y[1])/f;p.beginPath();p.moveTo(a,c);p.lineTo(d,e);p.lineTo(g,b);p.closePath();p.stroke()}),p.restore());return p.canvas};function wk(a,b,c,d,e){this.g=a;this.c=b;var f={},g=Qc(this.c,this.g);this.a=function(a){var b=a[0]+"/"+a[1];f[b]||(f[b]=g(a));return f[b]};this.i=d;this.s=e*e;this.f=[];this.o=!1;this.j=this.g.a&&!!d&&!!this.g.H()&&jc(d)==jc(this.g.H());this.b=this.g.H()?jc(this.g.H()):null;this.l=this.c.H()?jc(this.c.H()):null;a=fc(c);b=ec(c);d=dc(c);c=cc(c);e=this.a(a);var h=this.a(b),l=this.a(d),m=this.a(c);xk(this,a,b,d,c,e,h,l,m,10);if(this.o){var n=Infinity;this.f.forEach(function(a){n=Math.min(n,a.source[0][0],
a.source[1][0],a.source[2][0])});this.f.forEach(function(a){if(Math.max(a.source[0][0],a.source[1][0],a.source[2][0])-n>this.b/2){var b=[[a.source[0][0],a.source[0][1]],[a.source[1][0],a.source[1][1]],[a.source[2][0],a.source[2][1]]];b[0][0]-n>this.b/2&&(b[0][0]-=this.b);b[1][0]-n>this.b/2&&(b[1][0]-=this.b);b[2][0]-n>this.b/2&&(b[2][0]-=this.b);Math.max(b[0][0],b[1][0],b[2][0])-Math.min(b[0][0],b[1][0],b[2][0])<this.b/2&&(a.source=b)}},this)}f={}}
function xk(a,b,c,d,e,f,g,h,l,m){var n=Ib([f,g,h,l]),p=a.b?jc(n)/a.b:null,q=a.g.a&&.5<p&&1>p,r=!1;if(0<m){if(a.c.g&&a.l)var v=Ib([b,c,d,e]),r=r|.25<jc(v)/a.l;!q&&a.g.g&&p&&(r|=.25<p)}if(r||!a.i||oc(n,a.i)){if(!(r||isFinite(f[0])&&isFinite(f[1])&&isFinite(g[0])&&isFinite(g[1])&&isFinite(h[0])&&isFinite(h[1])&&isFinite(l[0])&&isFinite(l[1])))if(0<m)r=!0;else return;if(0<m&&(r||(p=a.a([(b[0]+d[0])/2,(b[1]+d[1])/2]),n=q?(xa(f[0],a.b)+xa(h[0],a.b))/2-xa(p[0],a.b):(f[0]+h[0])/2-p[0],p=(f[1]+h[1])/2-p[1],
r=n*n+p*p>a.s),r)){Math.abs(b[0]-d[0])<=Math.abs(b[1]-d[1])?(q=[(c[0]+d[0])/2,(c[1]+d[1])/2],n=a.a(q),p=[(e[0]+b[0])/2,(e[1]+b[1])/2],r=a.a(p),xk(a,b,c,q,p,f,g,n,r,m-1),xk(a,p,q,d,e,r,n,h,l,m-1)):(q=[(b[0]+c[0])/2,(b[1]+c[1])/2],n=a.a(q),p=[(d[0]+e[0])/2,(d[1]+e[1])/2],r=a.a(p),xk(a,b,q,p,e,f,n,r,l,m-1),xk(a,q,c,d,p,n,g,h,r,m-1));return}if(q){if(!a.j)return;a.o=!0}a.f.push({source:[f,h,l],target:[b,d,e]});a.f.push({source:[f,g,h],target:[b,c,d]})}}
function yk(a){var b=Jb();a.f.forEach(function(a){a=a.source;Lb(b,a[0]);Lb(b,a[1]);Lb(b,a[2])});return b};function zk(a,b,c,d,e,f){this.v=b;this.s=a.H();var g=b.H(),h=g?nc(c,g):c,g=tk(a,b,lc(h),d);this.o=new wk(a,b,h,this.s,.5*g);this.c=d;this.g=c;a=yk(this.o);this.j=(this.pb=f(a,g,e))?this.pb.f:1;this.Ad=this.i=null;e=2;f=[];this.pb&&(e=0,f=this.pb.l);th.call(this,c,d,this.j,e,f)}x(zk,th);zk.prototype.ka=function(){1==this.state&&(Ka(this.Ad),this.Ad=null);th.prototype.ka.call(this)};zk.prototype.a=function(){return this.i};
zk.prototype.zd=function(){var a=this.pb.V();2==a&&(this.i=vk(jc(this.g)/this.c,kc(this.g)/this.c,this.j,this.pb.$(),0,this.c,this.g,this.o,[{extent:this.pb.H(),image:this.pb.a()}],0));this.state=a;uh(this)};zk.prototype.load=function(){if(0==this.state){this.state=1;uh(this);var a=this.pb.V();2==a||3==a?this.zd():(this.Ad=B(this.pb,"change",function(){var a=this.pb.V();if(2==a||3==a)Ka(this.Ad),this.Ad=null,this.zd()},this),this.pb.load())}};function Ak(a){af.call(this,{attributions:a.attributions,extent:a.extent,logo:a.logo,projection:a.projection,state:a.state});this.D=void 0!==a.resolutions?a.resolutions:null;this.a=null;this.na=0}x(Ak,af);function Bk(a,b){if(a.D){var c=hb(a.D,b,0);b=a.D[c]}return b}
Ak.prototype.A=function(a,b,c,d){var e=this.f;if(e&&d&&!Pc(e,d)){if(this.a){if(this.na==this.g&&Pc(this.a.v,d)&&this.a.$()==b&&this.a.f==c&&$b(this.a.H(),a))return this.a;Ta(this.a);this.a=null}this.a=new zk(e,d,a,b,c,function(a,b,c){return this.Mc(a,b,c,e)}.bind(this));this.na=this.g;return this.a}e&&(d=e);return this.Mc(a,b,c,d)};Ak.prototype.o=function(a){a=a.target;switch(a.V()){case 1:this.b(new Ck(Dk,a));break;case 2:this.b(new Ck(Ek,a));break;case 3:this.b(new Ck(Fk,a))}};
function Gk(a,b){a.a().src=b}function Ck(a,b){Ua.call(this,a);this.image=b}x(Ck,Ua);var Dk="imageloadstart",Ek="imageloadend",Fk="imageloaderror";function Hk(a){Ak.call(this,{attributions:a.attributions,logo:a.logo,projection:a.projection,resolutions:a.resolutions,state:a.state});this.ia=a.canvasFunction;this.T=null;this.W=0;this.oa=void 0!==a.ratio?a.ratio:1.5}x(Hk,Ak);Hk.prototype.Mc=function(a,b,c,d){b=Bk(this,b);var e=this.T;if(e&&this.W==this.g&&e.$()==b&&e.f==c&&Sb(e.H(),a))return e;a=a.slice();pc(a,this.oa);(d=this.ia(a,b,c,[jc(a)/b*c,kc(a)/b*c],d))&&(e=new nk(a,b,c,this.l,d));this.T=e;this.W=this.g;return e};function Ik(a){bb.call(this);this.i=void 0;this.a="geometry";this.c=null;this.l=void 0;this.f=null;B(this,db(this.a),this.be,this);void 0!==a&&(a instanceof Uc||!a?this.Ua(a):this.G(a))}x(Ik,bb);k=Ik.prototype;k.clone=function(){var a=new Ik(this.O());a.Ec(this.a);var b=this.X();b&&a.Ua(b.clone());(b=this.c)&&a.sf(b);return a};k.X=function(){return this.get(this.a)};k.Xa=function(){return this.i};k.$j=function(){return this.a};k.Jl=function(){return this.c};k.ec=function(){return this.l};k.Kl=function(){this.u()};
k.be=function(){this.f&&(Ka(this.f),this.f=null);var a=this.X();a&&(this.f=B(a,"change",this.Kl,this));this.u()};k.Ua=function(a){this.set(this.a,a)};k.sf=function(a){this.l=(this.c=a)?Jk(a):void 0;this.u()};k.mc=function(a){this.i=a;this.u()};k.Ec=function(a){Qa(this,db(this.a),this.be,this);this.a=a;B(this,db(this.a),this.be,this);this.be()};function Jk(a){if("function"!==typeof a){var b;b=Array.isArray(a)?a:[a];a=function(){return b}}return a};function Kk(a,b,c,d,e){We.call(this,a,b);this.g=Ge();this.l=d;this.c=null;this.f={gd:!1,Tf:null,bi:-1,Uf:-1,yd:null,ui:[]};this.v=e;this.j=c}x(Kk,We);k=Kk.prototype;k.$a=function(){return-1==this.f.Uf?null:this.g.canvas};k.Ul=function(){return this.l};k.jb=function(){return this.j};k.load=function(){0==this.state&&(this.state=1,Xe(this),this.v(this,this.j),this.s(null,NaN,null))};k.gi=function(a){this.c=a;this.state=2;Xe(this)};k.vf=function(a){this.o=a};k.ki=function(a){this.s=a};var Lk=document.implementation.createDocument("","",null);function Mk(a,b){return Lk.createElementNS(a,b)}function Nk(a,b){return Ok(a,b,[]).join("")}function Ok(a,b,c){if(a.nodeType==Node.CDATA_SECTION_NODE||a.nodeType==Node.TEXT_NODE)b?c.push(String(a.nodeValue).replace(/(\r\n|\r|\n)/g,"")):c.push(a.nodeValue);else for(a=a.firstChild;a;a=a.nextSibling)Ok(a,b,c);return c}function Pk(a){return a instanceof Document}function Qk(a){return a instanceof Node}
function Rk(a){return(new DOMParser).parseFromString(a,"application/xml")}function Sk(a,b){return function(c,d){var e=a.call(b,c,d);void 0!==e&&jb(d[d.length-1],e)}}function Tk(a,b){return function(c,d){var e=a.call(void 0!==b?b:this,c,d);void 0!==e&&d[d.length-1].push(e)}}function Uk(a,b){return function(c,d){var e=a.call(void 0!==b?b:this,c,d);void 0!==e&&(d[d.length-1]=e)}}
function Vk(a){return function(b,c){var d=a.call(this,b,c);if(void 0!==d){var e=c[c.length-1],f=b.localName,g;f in e?g=e[f]:g=e[f]=[];g.push(d)}}}function K(a,b){return function(c,d){var e=a.call(this,c,d);void 0!==e&&(d[d.length-1][void 0!==b?b:c.localName]=e)}}function L(a,b){return function(c,d,e){a.call(void 0!==b?b:this,c,d,e);e[e.length-1].node.appendChild(c)}}
function Wk(a){var b,c;return function(d,e,f){if(!b){b={};var g={};g[d.localName]=a;b[d.namespaceURI]=g;c=Xk(d.localName)}Yk(b,c,e,f)}}function Xk(a,b){return function(c,d,e){c=d[d.length-1].node;d=a;void 0===d&&(d=e);e=b;void 0===b&&(e=c.namespaceURI);return Mk(e,d)}}var Zk=Xk();function $k(a,b){for(var c=b.length,d=Array(c),e=0;e<c;++e)d[e]=a[b[e]];return d}function N(a,b,c){c=void 0!==c?c:{};var d,e;d=0;for(e=a.length;d<e;++d)c[a[d]]=b;return c}
function al(a,b,c,d){for(b=b.firstElementChild;b;b=b.nextElementSibling){var e=a[b.namespaceURI];void 0!==e&&(e=e[b.localName])&&e.call(d,b,c)}}function O(a,b,c,d,e){d.push(a);al(b,c,d,e);return d.pop()}function Yk(a,b,c,d,e,f){for(var g=(void 0!==e?e:c).length,h,l,m=0;m<g;++m)h=c[m],void 0!==h&&(l=b.call(f,h,d,void 0!==e?e[m]:void 0),void 0!==l&&a[l.namespaceURI][l.localName].call(f,l,h,d))}function bl(a,b,c,d,e,f,g){e.push(a);Yk(b,c,d,e,f,g);e.pop()};function cl(a,b,c,d){return function(e,f,g){var h=new XMLHttpRequest;h.open("GET","function"===typeof a?a(e,f,g):a,!0);"arraybuffer"==b.Y()&&(h.responseType="arraybuffer");h.onload=function(){if(200<=h.status&&300>h.status){var a=b.Y(),e;"json"==a||"text"==a?e=h.responseText:"xml"==a?(e=h.responseXML)||(e=Rk(h.responseText)):"arraybuffer"==a&&(e=h.response);e&&c.call(this,b.Fa(e,{featureProjection:g}),b.Oa(e))}else d.call(this)}.bind(this);h.send()}}
function dl(a,b){return cl(a,b,function(a,b){this.vf(b);this.gi(a)},function(){this.state=3;Xe(this)})}function el(a,b){return cl(a,b,function(a){this.Jc(a)},oa)};function fl(){return[[-Infinity,-Infinity,Infinity,Infinity]]};var gl,hl,il,jl;
(function(){var a={},b={ja:a};(function(c){if("object"===typeof a&&"undefined"!==typeof b)b.ja=c();else{var d;"undefined"!==typeof window?d=window:"undefined"!==typeof global?d=global:"undefined"!==typeof self?d=self:d=this;d.Tp=c()}})(function(){return function d(a,b,g){function h(m,p){if(!b[m]){if(!a[m]){var q="function"==typeof require&&require;if(!p&&q)return q(m,!0);if(l)return l(m,!0);q=Error("Cannot find module '"+m+"'");throw q.code="MODULE_NOT_FOUND",q;}q=b[m]={ja:{}};a[m][0].call(q.ja,function(b){var d=
a[m][1][b];return h(d?d:b)},q,q.ja,d,a,b,g)}return b[m].ja}for(var l="function"==typeof require&&require,m=0;m<g.length;m++)h(g[m]);return h}({1:[function(a,b){function f(a,b,d,e,q){d=d||0;e=e||a.length-1;for(q=q||h;e>d;){if(600<e-d){var r=e-d+1,v=b-d+1,y=Math.log(r),w=.5*Math.exp(2*y/3),y=.5*Math.sqrt(y*w*(r-w)/r)*(0>v-r/2?-1:1);f(a,b,Math.max(d,Math.floor(b-v*w/r+y)),Math.min(e,Math.floor(b+(r-v)*w/r+y)),q)}r=a[b];v=d;w=e;g(a,d,b);for(0<q(a[e],r)&&g(a,d,e);v<w;){g(a,v,w);v++;for(w--;0>q(a[v],r);)v++;
for(;0<q(a[w],r);)w--}0===q(a[d],r)?g(a,d,w):(w++,g(a,w,e));w<=b&&(d=w+1);b<=w&&(e=w-1)}}function g(a,b,d){var e=a[b];a[b]=a[d];a[d]=e}function h(a,b){return a<b?-1:a>b?1:0}b.ja=f},{}],2:[function(a,b){function f(a,b){if(!(this instanceof f))return new f(a,b);this.Te=Math.max(4,a||9);this.hg=Math.max(2,Math.ceil(.4*this.Te));b&&this.mj(b);this.clear()}function g(a,b){h(a,0,a.children.length,b,a)}function h(a,b,d,e,f){f||(f=y(null));f.ca=Infinity;f.fa=Infinity;f.ea=-Infinity;f.ga=-Infinity;for(var g;b<
d;b++)g=a.children[b],l(f,a.Ta?e(g):g);return f}function l(a,b){a.ca=Math.min(a.ca,b.ca);a.fa=Math.min(a.fa,b.fa);a.ea=Math.max(a.ea,b.ea);a.ga=Math.max(a.ga,b.ga)}function m(a,b){return a.ca-b.ca}function n(a,b){return a.fa-b.fa}function p(a){return(a.ea-a.ca)*(a.ga-a.fa)}function q(a){return a.ea-a.ca+(a.ga-a.fa)}function r(a,b){return a.ca<=b.ca&&a.fa<=b.fa&&b.ea<=a.ea&&b.ga<=a.ga}function v(a,b){return b.ca<=a.ea&&b.fa<=a.ga&&b.ea>=a.ca&&b.ga>=a.fa}function y(a){return{children:a,height:1,Ta:!0,
ca:Infinity,fa:Infinity,ea:-Infinity,ga:-Infinity}}function w(a,b,d,e,f){for(var g=[b,d],h;g.length;)d=g.pop(),b=g.pop(),d-b<=e||(h=b+Math.ceil((d-b)/e/2)*e,G(a,h,b,d,f),g.push(b,h,h,d))}b.ja=f;var G=a("quickselect");f.prototype={all:function(){return this.cg(this.data,[])},search:function(a){var b=this.data,d=[],e=this.mb;if(!v(a,b))return d;for(var f=[],g,h,l,m;b;){g=0;for(h=b.children.length;g<h;g++)l=b.children[g],m=b.Ta?e(l):l,v(a,m)&&(b.Ta?d.push(l):r(a,m)?this.cg(l,d):f.push(l));b=f.pop()}return d},
load:function(a){if(!a||!a.length)return this;if(a.length<this.hg){for(var b=0,d=a.length;b<d;b++)this.Ca(a[b]);return this}a=this.eg(a.slice(),0,a.length-1,0);this.data.children.length?this.data.height===a.height?this.jg(this.data,a):(this.data.height<a.height&&(b=this.data,this.data=a,a=b),this.gg(a,this.data.height-a.height-1,!0)):this.data=a;return this},Ca:function(a){a&&this.gg(a,this.data.height-1);return this},clear:function(){this.data=y([]);return this},remove:function(a,b){if(!a)return this;
for(var d=this.data,e=this.mb(a),f=[],g=[],h,l,m,n;d||f.length;){d||(d=f.pop(),l=f[f.length-1],h=g.pop(),n=!0);if(d.Ta){a:{m=a;var p=d.children,q=b;if(q){for(var v=0;v<p.length;v++)if(q(m,p[v])){m=v;break a}m=-1}else m=p.indexOf(m)}if(-1!==m){d.children.splice(m,1);f.push(d);this.kj(f);break}}n||d.Ta||!r(d,e)?l?(h++,d=l.children[h],n=!1):d=null:(f.push(d),g.push(h),h=0,l=d,d=d.children[0])}return this},mb:function(a){return a},Ve:m,We:n,toJSON:function(){return this.data},cg:function(a,b){for(var d=
[];a;)a.Ta?b.push.apply(b,a.children):d.push.apply(d,a.children),a=d.pop();return b},eg:function(a,b,d,e){var f=d-b+1,h=this.Te,l;if(f<=h)return l=y(a.slice(b,d+1)),g(l,this.mb),l;e||(e=Math.ceil(Math.log(f)/Math.log(h)),h=Math.ceil(f/Math.pow(h,e-1)));l=y([]);l.Ta=!1;l.height=e;var f=Math.ceil(f/h),h=f*Math.ceil(Math.sqrt(h)),m,n,p;for(w(a,b,d,h,this.Ve);b<=d;b+=h)for(n=Math.min(b+h-1,d),w(a,b,n,f,this.We),m=b;m<=n;m+=f)p=Math.min(m+f-1,n),l.children.push(this.eg(a,m,p,e-1));g(l,this.mb);return l},
jj:function(a,b,d,e){for(var f,g,h,l,m,n,q,r;;){e.push(b);if(b.Ta||e.length-1===d)break;q=r=Infinity;f=0;for(g=b.children.length;f<g;f++)h=b.children[f],m=p(h),n=(Math.max(h.ea,a.ea)-Math.min(h.ca,a.ca))*(Math.max(h.ga,a.ga)-Math.min(h.fa,a.fa))-m,n<r?(r=n,q=m<q?m:q,l=h):n===r&&m<q&&(q=m,l=h);b=l||b.children[0]}return b},gg:function(a,b,d){var e=this.mb;d=d?a:e(a);var e=[],f=this.jj(d,this.data,b,e);f.children.push(a);for(l(f,d);0<=b;)if(e[b].children.length>this.Te)this.sj(e,b),b--;else break;this.gj(d,
e,b)},sj:function(a,b){var d=a[b],e=d.children.length,f=this.hg;this.hj(d,f,e);e=this.ij(d,f,e);e=y(d.children.splice(e,d.children.length-e));e.height=d.height;e.Ta=d.Ta;g(d,this.mb);g(e,this.mb);b?a[b-1].children.push(e):this.jg(d,e)},jg:function(a,b){this.data=y([a,b]);this.data.height=a.height+1;this.data.Ta=!1;g(this.data,this.mb)},ij:function(a,b,d){var e,f,g,l,m,n,q;m=n=Infinity;for(e=b;e<=d-b;e++)f=h(a,0,e,this.mb),g=h(a,e,d,this.mb),l=Math.max(0,Math.min(f.ea,g.ea)-Math.max(f.ca,g.ca))*Math.max(0,
Math.min(f.ga,g.ga)-Math.max(f.fa,g.fa)),f=p(f)+p(g),l<m?(m=l,q=e,n=f<n?f:n):l===m&&f<n&&(n=f,q=e);return q},hj:function(a,b,d){var e=a.Ta?this.Ve:m,f=a.Ta?this.We:n,g=this.dg(a,b,d,e);b=this.dg(a,b,d,f);g<b&&a.children.sort(e)},dg:function(a,b,d,e){a.children.sort(e);e=this.mb;var f=h(a,0,b,e),g=h(a,d-b,d,e),m=q(f)+q(g),n,p;for(n=b;n<d-b;n++)p=a.children[n],l(f,a.Ta?e(p):p),m+=q(f);for(n=d-b-1;n>=b;n--)p=a.children[n],l(g,a.Ta?e(p):p),m+=q(g);return m},gj:function(a,b,d){for(;0<=d;d--)l(b[d],a)},
kj:function(a){for(var b=a.length-1,d;0<=b;b--)0===a[b].children.length?0<b?(d=a[b-1].children,d.splice(d.indexOf(a[b]),1)):this.clear():g(a[b],this.mb)},mj:function(a){var b=["return a"," - b",";"];this.Ve=new Function("a","b",b.join(a[0]));this.We=new Function("a","b",b.join(a[1]));this.mb=new Function("a","return {minX: a"+a[0]+", minY: a"+a[1]+", maxX: a"+a[2]+", maxY: a"+a[3]+"};")}}},{quickselect:1}]},{},[2])(2)});gl=b.ja})();function kl(a){this.a=gl(a);this.b={}}k=kl.prototype;k.Ca=function(a,b){var c={ca:a[0],fa:a[1],ea:a[2],ga:a[3],value:b};this.a.Ca(c);this.b[t(b)]=c};k.load=function(a,b){for(var c=Array(b.length),d=0,e=b.length;d<e;d++){var f=a[d],g=b[d],f={ca:f[0],fa:f[1],ea:f[2],ga:f[3],value:g};c[d]=f;this.b[t(g)]=f}this.a.load(c)};k.remove=function(a){a=t(a);var b=this.b[a];delete this.b[a];return null!==this.a.remove(b)};
function ll(a,b,c){var d=t(c),d=a.b[d];$b([d.ca,d.fa,d.ea,d.ga],b)||(a.remove(c),a.Ca(b,c))}function ml(a){return a.a.all().map(function(a){return a.value})}function nl(a,b){return a.a.search({ca:b[0],fa:b[1],ea:b[2],ga:b[3]}).map(function(a){return a.value})}k.forEach=function(a,b){return pl(ml(this),a,b)};function ql(a,b,c,d){return pl(nl(a,b),c,d)}function pl(a,b,c){for(var d,e=0,f=a.length;e<f&&!(d=b.call(c,a[e]));e++);return d}k.Ya=function(){return Ga(this.b)};
k.clear=function(){this.a.clear();this.b={}};k.H=function(){var a=this.a.data;return[a.ca,a.fa,a.ea,a.ga]};function P(a){a=a||{};af.call(this,{attributions:a.attributions,logo:a.logo,projection:void 0,state:"ready",wrapX:void 0!==a.wrapX?a.wrapX:!0});this.P=oa;this.oa=a.format;this.T=a.overlaps||!0;this.W=a.url;void 0!==a.loader?this.P=a.loader:void 0!==this.W&&(this.P=el(this.W,this.oa));this.rb=void 0!==a.strategy?a.strategy:fl;var b=void 0!==a.useSpatialIndex?a.useSpatialIndex:!0;this.a=b?new kl:null;this.ia=new kl;this.i={};this.o={};this.j={};this.s={};this.c=null;var c,d;a.features instanceof be?
(c=a.features,d=c.a):Array.isArray(a.features)&&(d=a.features);b||void 0!==c||(c=new be(d));void 0!==d&&rl(this,d);void 0!==c&&sl(this,c)}x(P,af);k=P.prototype;k.sb=function(a){var b=t(a).toString();if(tl(this,b,a)){ul(this,b,a);var c=a.X();c?(b=c.H(),this.a&&this.a.Ca(b,a)):this.i[b]=a;this.b(new vl("addfeature",a))}this.u()};function ul(a,b,c){a.s[b]=[B(c,"change",a.Eh,a),B(c,"propertychange",a.Eh,a)]}
function tl(a,b,c){var d=!0,e=c.Xa();void 0!==e?e.toString()in a.o?d=!1:a.o[e.toString()]=c:a.j[b]=c;return d}k.Jc=function(a){rl(this,a);this.u()};function rl(a,b){var c,d,e,f,g=[],h=[],l=[];d=0;for(e=b.length;d<e;d++)f=b[d],c=t(f).toString(),tl(a,c,f)&&h.push(f);d=0;for(e=h.length;d<e;d++){f=h[d];c=t(f).toString();ul(a,c,f);var m=f.X();m?(c=m.H(),g.push(c),l.push(f)):a.i[c]=f}a.a&&a.a.load(g,l);d=0;for(e=h.length;d<e;d++)a.b(new vl("addfeature",h[d]))}
function sl(a,b){var c=!1;B(a,"addfeature",function(a){c||(c=!0,b.push(a.feature),c=!1)});B(a,"removefeature",function(a){c||(c=!0,b.remove(a.feature),c=!1)});B(b,"add",function(a){c||(a=a.element,c=!0,this.sb(a),c=!1)},a);B(b,"remove",function(a){c||(a=a.element,c=!0,this.ob(a),c=!1)},a);a.c=b}
k.clear=function(a){if(a){for(var b in this.s)this.s[b].forEach(Ka);this.c||(this.s={},this.o={},this.j={})}else if(this.a){this.a.forEach(this.Sf,this);for(var c in this.i)this.Sf(this.i[c])}this.c&&this.c.clear();this.a&&this.a.clear();this.ia.clear();this.i={};this.b(new vl("clear"));this.u()};k.wg=function(a,b){if(this.a)return this.a.forEach(a,b);if(this.c)return this.c.forEach(a,b)};function wl(a,b,c){a.vb([b[0],b[1],b[0],b[1]],function(a){if(a.X().sg(b))return c.call(void 0,a)})}
k.vb=function(a,b,c){if(this.a)return ql(this.a,a,b,c);if(this.c)return this.c.forEach(b,c)};k.xg=function(a,b,c){return this.vb(a,function(d){if(d.X().Ka(a)&&(d=b.call(c,d)))return d})};k.Fg=function(){return this.c};k.oe=function(){var a;this.c?a=this.c.a:this.a&&(a=ml(this.a),Ga(this.i)||jb(a,Ea(this.i)));return a};k.Eg=function(a){var b=[];wl(this,a,function(a){b.push(a)});return b};k.ef=function(a){return nl(this.a,a)};
k.Ag=function(a,b){var c=a[0],d=a[1],e=null,f=[NaN,NaN],g=Infinity,h=[-Infinity,-Infinity,Infinity,Infinity],l=b?b:rc;ql(this.a,h,function(a){if(l(a)){var b=a.X(),p=g;g=b.tb(c,d,f,g);g<p&&(e=a,a=Math.sqrt(g),h[0]=c-a,h[1]=d-a,h[2]=c+a,h[3]=d+a)}});return e};k.H=function(){return this.a.H()};k.Dg=function(a){a=this.o[a.toString()];return void 0!==a?a:null};k.Ch=function(){return this.oa};k.Dh=function(){return this.W};
k.Eh=function(a){a=a.target;var b=t(a).toString(),c=a.X();c?(c=c.H(),b in this.i?(delete this.i[b],this.a&&this.a.Ca(c,a)):this.a&&ll(this.a,c,a)):b in this.i||(this.a&&this.a.remove(a),this.i[b]=a);c=a.Xa();void 0!==c?(c=c.toString(),b in this.j?(delete this.j[b],this.o[c]=a):this.o[c]!==a&&(xl(this,a),this.o[c]=a)):b in this.j||(xl(this,a),this.j[b]=a);this.u();this.b(new vl("changefeature",a))};k.Ya=function(){return this.a.Ya()&&Ga(this.i)};
k.Pc=function(a,b,c){var d=this.ia;a=this.rb(a,b);var e,f;e=0;for(f=a.length;e<f;++e){var g=a[e];ql(d,g,function(a){return Sb(a.extent,g)})||(this.P.call(this,g,b,c),d.Ca(g,{extent:g.slice()}))}};k.ob=function(a){var b=t(a).toString();b in this.i?delete this.i[b]:this.a&&this.a.remove(a);this.Sf(a);this.u()};k.Sf=function(a){var b=t(a).toString();this.s[b].forEach(Ka);delete this.s[b];var c=a.Xa();void 0!==c?delete this.o[c.toString()]:delete this.j[b];this.b(new vl("removefeature",a))};
function xl(a,b){for(var c in a.o)if(a.o[c]===b){delete a.o[c];break}}function vl(a,b){Ua.call(this,a);this.feature=b}x(vl,Ua);function yl(a){this.c=a.source;this.za=ch();this.i=Ge();this.j=[0,0];this.v=null;Hk.call(this,{attributions:a.attributions,canvasFunction:this.Dj.bind(this),logo:a.logo,projection:a.projection,ratio:a.ratio,resolutions:a.resolutions,state:this.c.V()});this.P=null;this.s=void 0;this.xh(a.style);B(this.c,"change",this.en,this)}x(yl,Hk);k=yl.prototype;
k.Dj=function(a,b,c,d,e){var f=new ek(.5*b/c,a,b,this.c.T);this.c.Pc(a,b,e);var g=!1;this.c.vb(a,function(a){var d;if(!(d=g)){var e;(d=a.ec())?e=d.call(a,b):this.s&&(e=this.s(a,b));if(e){var n,p=!1;Array.isArray(e)||(e=[e]);d=0;for(n=e.length;d<n;++d)p=lk(f,a,e[d],kk(b,c),this.dn,this)||p;d=p}else d=!1}g=d},this);fk(f);if(g)return null;this.j[0]!=d[0]||this.j[1]!=d[1]?(this.i.canvas.width=d[0],this.i.canvas.height=d[1],this.j[0]=d[0],this.j[1]=d[1]):this.i.clearRect(0,0,d[0],d[1]);a=zl(this,lc(a),
b,c,d);f.Pa(this.i,c,a,0,{});this.v=f;return this.i.canvas};k.sa=function(a,b,c,d,e){if(this.v){var f={};return this.v.sa(a,b,0,d,function(a){var b=t(a).toString();if(!(b in f))return f[b]=!0,e(a)})}};k.an=function(){return this.c};k.bn=function(){return this.P};k.cn=function(){return this.s};function zl(a,b,c,d,e){c=d/c;return lh(a.za,e[0]/2,e[1]/2,c,-c,0,-b[0],-b[1])}k.dn=function(){this.u()};k.en=function(){cf(this,this.c.V())};
k.xh=function(a){this.P=void 0!==a?a:wj;this.s=a?uj(this.P):void 0;this.u()};function Al(a){Kj.call(this,a);this.f=null;this.s=ch();this.c=this.o=null}x(Al,Kj);Al.prototype.sa=function(a,b,c,d){var e=this.a;return e.ha().sa(a,b.viewState.resolution,b.viewState.rotation,b.skippedFeatureUids,function(a){return c.call(d,a,e)})};
Al.prototype.Cc=function(a,b,c,d){if(this.f&&this.f.a())if(this.a.ha()instanceof yl){if(a=hh(b.pixelToCoordinateTransform,a.slice()),this.sa(a,b,rc,this))return c.call(d,this.a)}else if(this.o||(this.o=mh(this.s.slice())),b=hh(this.o,a.slice()),this.c||(this.c=Ge(1,1)),this.c.clearRect(0,0,1,1),this.c.drawImage(this.f?this.f.a():null,b[0],b[1],1,1,0,0,1,1),0<this.c.getImageData(0,0,1,1).data[3])return c.call(d,this.a)};
Al.prototype.l=function(a,b){var c=a.pixelRatio,d=a.viewState,e=d.center,f=d.resolution,g=this.a.ha(),h=a.viewHints,l=a.extent;void 0!==b.extent&&(l=nc(l,b.extent));h[0]||h[1]||ic(l)||(d=g.A(l,f,c,d.projection))&&xh(this,d)&&(this.f=d);if(this.f){var d=this.f,h=d.H(),l=d.$(),m=d.f,f=c*l/(f*m),n=dh(this.s);kh(n,c*a.size[0]/2,c*a.size[1]/2);jh(n,f,f);kh(n,m*(h[0]-e[0])/l,m*(e[1]-h[3])/l);this.o=null;zh(a.attributions,d.l);Ah(a,g)}return!!this.f};function Bl(a){Kj.call(this,a);this.c=Ge();this.o=null;this.j=Jb();this.P=[0,0,0];this.C=ch();this.D=0}x(Bl,Kj);Bl.prototype.i=function(a,b,c){var d=Nj(this,a,0);Lj(this,"precompose",c,a,d);Cl(this,c,a,b);Mj(this,c,a,d)};
Bl.prototype.l=function(a,b){function c(a){a=a.V();return 2==a||4==a||3==a&&!r}var d=a.pixelRatio,e=a.viewState,f=e.projection,g=this.a,h=g.ha(),l=h.fb(f),m=l.Lb(e.resolution,this.D),n=l.$(m),p=e.center;n==e.resolution?(p=Ch(p,n,a.size),e=mc(p,n,e.rotation,a.size)):e=a.extent;void 0!==b.extent&&(e=nc(e,b.extent));if(ic(e))return!1;n=kf(l,e,n);p={};p[m]={};var q=this.Qd(h,f,p),r=g.c(),v=Jb(),y=new Wd(0,0,0,0),w,G,z,D;for(z=n.ca;z<=n.ea;++z)for(D=n.fa;D<=n.ga;++D)w=h.bc(m,z,D,d,f),!c(w)&&w.a&&(w=w.a),
c(w)?p[m][w.ma.toString()]=w:(G=hf(l,w.ma,q,y,v),G||(w=jf(l,w.ma,y,v))&&q(m+1,w));q=Object.keys(p).map(Number);q.sort(fb);var v=[],H,y=0;for(z=q.length;y<z;++y)for(H in w=q[y],D=p[w],D)w=D[H],2==w.V()&&v.push(w);this.o=v;Bh(a.usedTiles,h,m,n);Dh(a,h,l,d,f,e,m,g.f());yh(a,h);Ah(a,h);return!0};Bl.prototype.Cc=function(a,b,c,d){var e=this.c.canvas,f=b.size;e.width=f[0];e.height=f[1];this.i(b,oh(this.a),this.c);if(0<this.c.getImageData(a[0],a[1],1,1).data[3])return c.call(d,this.a)};
function Cl(a,b,c,d){var e=c.pixelRatio,f=c.viewState,g=f.center,h=f.projection,l=f.resolution,f=f.rotation,m=c.size,n=Math.round(e*m[0]/2),p=Math.round(e*m[1]/2),m=e/l,q=a.a,r=q.ha(),v=r.Ud(h),y=r.fb(h),q=Ya(q,"render"),w=b,G,z,D,H;if(f||q)w=a.c,G=w.canvas,H=y.Lb(l),D=r.$d(H,e,h),H=$e(y.Ja(H)),D=D[0]/H[0],l=b.canvas.width*D,z=b.canvas.height*D,H=Math.round(Math.sqrt(l*l+z*z)),G.width!=H?G.width=G.height=H:w.clearRect(0,0,H,H),G=(H-l)/2/D,z=(H-z)/2/D,m*=D,n=Math.round(D*(n+G)),p=Math.round(D*(p+z));
l=w.globalAlpha;w.globalAlpha=d.opacity;var ba=a.o,A,Fa=r.jf(h)&&1==d.opacity;Fa||(ba.reverse(),A=[]);var Ja=d.extent;if(d=void 0!==Ja){var M=fc(Ja),ma=ec(Ja),Ub=dc(Ja),Ja=cc(Ja);hh(c.coordinateToPixelTransform,M);hh(c.coordinateToPixelTransform,ma);hh(c.coordinateToPixelTransform,Ub);hh(c.coordinateToPixelTransform,Ja);var Kb=G||0,Hb=z||0;w.save();var Xb=w.canvas.width*e/2,gc=w.canvas.height*e/2;ij(w,-f,Xb,gc);w.beginPath();w.moveTo(M[0]*e+Kb,M[1]*e+Hb);w.lineTo(ma[0]*e+Kb,ma[1]*e+Hb);w.lineTo(Ub[0]*
e+Kb,Ub[1]*e+Hb);w.lineTo(Ja[0]*e+Kb,Ja[1]*e+Hb);w.clip();ij(w,f,Xb,gc)}M=0;for(ma=ba.length;M<ma;++M){var Ub=ba[M],Ja=Ub.ma,gc=y.Ea(Ja,a.j),Xb=Ja[0],Nb=cc(y.Ea(y.qd(g,Xb,a.P))),Ja=Math.round(jc(gc)*m),Kb=Math.round(kc(gc)*m),Hb=Math.round((gc[0]-Nb[0])*m/Ja)*Ja+n+Math.round((Nb[0]-g[0])*m),gc=Math.round((Nb[1]-gc[3])*m/Kb)*Kb+p+Math.round((g[1]-Nb[1])*m);if(!Fa){Nb=[Hb,gc,Hb+Ja,gc+Kb];w.save();for(var Od=0,sf=A.length;Od<sf;++Od){var Pd=A[Od];oc(Nb,Pd)&&(w.beginPath(),w.moveTo(Nb[0],Nb[1]),w.lineTo(Nb[0],
Nb[3]),w.lineTo(Nb[2],Nb[3]),w.lineTo(Nb[2],Nb[1]),w.moveTo(Pd[0],Pd[1]),w.lineTo(Pd[2],Pd[1]),w.lineTo(Pd[2],Pd[3]),w.lineTo(Pd[0],Pd[3]),w.closePath(),w.clip())}A.push(Nb)}Xb=r.$d(Xb,e,h);w.drawImage(Ub.$a(),v,v,Xb[0],Xb[1],Hb,gc,Ja,Kb);Fa||w.restore()}d&&w.restore();q&&(e=G-n/D+n,h=z-p/D+p,g=lh(a.C,H/2-e,H/2-h,m,-m,-f,-g[0]+e/m,-g[1]-h/m),Lj(a,"render",w,c,g));(f||q)&&b.drawImage(w.canvas,-Math.round(G),-Math.round(z),H/D,H/D);w.globalAlpha=l};function Dl(a){Kj.call(this,a);this.c=!1;this.D=-1;this.A=NaN;this.v=Jb();this.o=this.U=null;this.j=Ge()}x(Dl,Kj);
Dl.prototype.i=function(a,b,c){var d=a.extent,e=a.pixelRatio,f=b.Qc?a.skippedFeatureUids:{},g=a.viewState,h=g.projection,g=g.rotation,l=h.H(),m=this.a.ha(),n=Nj(this,a,0);Lj(this,"precompose",c,a,n);var p=this.o;if(p&&!p.Ya()){var q;Ya(this.a,"render")?(this.j.canvas.width=c.canvas.width,this.j.canvas.height=c.canvas.height,q=this.j):q=c;var r=q.globalAlpha;q.globalAlpha=b.opacity;b=a.size[0]*e;var v=a.size[1]*e;ij(q,-g,b/2,v/2);p.Pa(q,e,n,g,f);if(m.C&&h.a&&!Sb(l,d)){for(var h=d[0],m=jc(l),y=0;h<
l[0];)--y,n=m*y,n=Nj(this,a,n),p.Pa(q,e,n,g,f),h+=m;y=0;for(h=d[2];h>l[2];)++y,n=m*y,n=Nj(this,a,n),p.Pa(q,e,n,g,f),h-=m;n=Nj(this,a,0)}ij(q,g,b/2,v/2);q!=c&&(Lj(this,"render",q,a,n),c.drawImage(q.canvas,0,0));q.globalAlpha=r}Mj(this,c,a,n)};Dl.prototype.sa=function(a,b,c,d){if(this.o){var e=this.a,f={};return this.o.sa(a,b.viewState.resolution,b.viewState.rotation,{},function(a){var b=t(a).toString();if(!(b in f))return f[b]=!0,c.call(d,a,e)})}};Dl.prototype.C=function(){wh(this)};
Dl.prototype.l=function(a){function b(a){var b,d=a.ec();d?b=d.call(a,m):(d=c.i)&&(b=d(a,m));if(b){if(b){d=!1;if(Array.isArray(b))for(var e=0,f=b.length;e<f;++e)d=lk(q,a,b[e],kk(m,n),this.C,this)||d;else d=lk(q,a,b,kk(m,n),this.C,this)||d;a=d}else a=!1;this.c=this.c||a}}var c=this.a,d=c.ha();zh(a.attributions,d.l);Ah(a,d);var e=a.viewHints[0],f=a.viewHints[1],g=c.P,h=c.T;if(!this.c&&!g&&e||!h&&f)return!0;var l=a.extent,h=a.viewState,e=h.projection,m=h.resolution,n=a.pixelRatio,f=c.g,p=c.a,g=yj(c);
void 0===g&&(g=jk);l=Mb(l,p*m);p=h.projection.H();d.C&&h.projection.a&&!Sb(p,a.extent)&&(a=Math.max(jc(l)/2,jc(p)),l[0]=p[0]-a,l[2]=p[2]+a);if(!this.c&&this.A==m&&this.D==f&&this.U==g&&Sb(this.v,l))return!0;this.o=null;this.c=!1;var q=new ek(.5*m/n,l,m,d.T,c.a);d.Pc(l,m,e);if(g){var r=[];d.vb(l,function(a){r.push(a)},this);r.sort(g);r.forEach(b,this)}else d.vb(l,b,this);fk(q);this.A=m;this.D=f;this.U=g;this.v=l;this.o=q;return!0};function El(a,b){var c=/\{z\}/g,d=/\{x\}/g,e=/\{y\}/g,f=/\{-y\}/g;return function(g){if(g)return a.replace(c,g[0].toString()).replace(d,g[1].toString()).replace(e,function(){return(-g[2]-1).toString()}).replace(f,function(){var a=b.a?b.a[g[0]]:null;return(a.ga-a.fa+1+g[2]).toString()})}}function Fl(a,b){for(var c=a.length,d=Array(c),e=0;e<c;++e)d[e]=El(a[e],b);return Gl(d)}function Gl(a){return 1===a.length?a[0]:function(b,c,d){if(b)return a[xa((b[1]<<b[0])+b[2],a.length)](b,c,d)}}
function Hl(){}function Il(a){var b=[],c=/\{(\d)-(\d)\}/.exec(a)||/\{([a-z])-([a-z])\}/.exec(a);if(c){var d=c[2].charCodeAt(0),e;for(e=c[1].charCodeAt(0);e<=d;++e)b.push(a.replace(c[0],String.fromCharCode(e)))}else b.push(a);return b};function Jl(a){rf.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,extent:a.extent,logo:a.logo,opaque:a.opaque,projection:a.projection,state:a.state,tileGrid:a.tileGrid,tilePixelRatio:a.tilePixelRatio,wrapX:a.wrapX});this.tileLoadFunction=a.tileLoadFunction;this.tileUrlFunction=this.vc?this.vc.bind(this):Hl;this.urls=null;a.urls?this.bb(a.urls):a.url&&this.Va(a.url);a.tileUrlFunction&&this.Qa(a.tileUrlFunction)}x(Jl,rf);k=Jl.prototype;k.gb=function(){return this.tileLoadFunction};
k.hb=function(){return this.tileUrlFunction};k.ib=function(){return this.urls};k.Bh=function(a){a=a.target;switch(a.V()){case 1:this.b(new wf("tileloadstart",a));break;case 2:this.b(new wf("tileloadend",a));break;case 3:this.b(new wf("tileloaderror",a))}};k.lb=function(a){this.a.clear();this.tileLoadFunction=a;this.u()};k.Qa=function(a,b){this.tileUrlFunction=a;"undefined"!==typeof b?uf(this,b):this.u()};
k.Va=function(a){var b=this.urls=Il(a);this.Qa(this.vc?this.vc.bind(this):Fl(b,this.tileGrid),a)};k.bb=function(a){this.urls=a;var b=a.join("\n");this.Qa(this.vc?this.vc.bind(this):Fl(a,this.tileGrid),b)};k.Yf=function(a,b,c){a=this.Fb(a,b,c);Re(this.a,a)&&this.a.get(a)};function Kl(a){Jl.call(this,{attributions:a.attributions,cacheSize:void 0!==a.cacheSize?a.cacheSize:128,extent:a.extent,logo:a.logo,opaque:!1,projection:a.projection,state:a.state,tileGrid:a.tileGrid,tileLoadFunction:a.tileLoadFunction?a.tileLoadFunction:Ll,tileUrlFunction:a.tileUrlFunction,tilePixelRatio:a.tilePixelRatio,url:a.url,urls:a.urls,wrapX:void 0===a.wrapX?!0:a.wrapX});this.c=a.format?a.format:null;this.i=a.overlaps||!0;this.tileClass=a.tileClass?a.tileClass:Kk}x(Kl,Jl);
Kl.prototype.bc=function(a,b,c,d,e){var f=this.Fb(a,b,c);if(Re(this.a,f))return this.a.get(f);a=[a,b,c];d=(b=vf(this,a,e))?this.tileUrlFunction(b,d,e):void 0;d=new this.tileClass(a,void 0!==d?0:4,void 0!==d?d:"",this.c,this.tileLoadFunction);B(d,"change",this.Bh,this);this.a.set(f,d);return d};Kl.prototype.$d=function(a,b){var c=$e(this.tileGrid.Ja(a));return[c[0]*b,c[1]*b]};function Ll(a,b){a.ki(dl(b,a.l))};var Ml={image:Oj,hybrid:["Polygon","LineString"]},Nl={hybrid:["Image","Text"],vector:Oj};function Ol(a){Bl.call(this,a);this.U=!1;this.v=ch();this.D="vector"==a.s?1:0}x(Ol,Bl);
Ol.prototype.i=function(a,b,c){var d=Nj(this,a,0);Lj(this,"precompose",c,a,d);var e=this.a.s;"vector"!==e&&Cl(this,c,a,b);if("image"!==e){var f=this.a,e=Nl[f.s],g=a.pixelRatio,h=b.Qc?a.skippedFeatureUids:{},l=a.viewState,m=l.center,n=l.rotation,p=a.size,l=g/l.resolution,q=f.ha(),r=q.cc(g),v=Nj(this,a,0);Ya(f,"render")?(this.c.canvas.width=c.canvas.width,this.c.canvas.height=c.canvas.height,f=this.c):f=c;var y=f.globalAlpha;f.globalAlpha=b.opacity;b=this.o;var q=q.tileGrid,w,G,z,D,H,ba,A,Fa;G=0;for(z=
b.length;G<z;++G)D=b[G],A=D.f,H=q.Ea(D.ma,this.j),w=D.ma[0],ba="tile-pixels"==D.o.xb(),w=q.$(w),Fa=w/r,w=Math.round(g*p[0]/2),D=Math.round(g*p[1]/2),ba?(H=fc(H),dh(this.v),H=lh(this.v,w,D,l*Fa,l*Fa,n,(H[0]-m[0])/Fa,(m[1]-H[1])/Fa)):H=v,ij(f,-n,w,D),A.yd.Pa(f,g,H,n,h,e),ij(f,n,w,D);f!=c&&(Lj(this,"render",f,a,v),c.drawImage(f.canvas,0,0));f.globalAlpha=y}Mj(this,c,a,d)};
function Pl(a,b,c){function d(a){var b,c=a.ec();c?b=c.call(a,v):(c=e.i)&&(b=c(a,v));if(b){Array.isArray(b)||(b=[b]);var c=z,d=G;if(b){var f=!1;if(Array.isArray(b))for(var g=0,h=b.length;g<h;++g)f=lk(d,a,b[g],c,this.A,this)||f;else f=lk(d,a,b,c,this.A,this)||f;a=f}else a=!1;this.U=this.U||a;l.gd=l.gd||a}}var e=a.a,f=c.pixelRatio;c=c.viewState.projection;var g=e.g,h=yj(e)||null,l=b.f;if(l.gd||l.bi!=g||l.Tf!=h){l.yd=null;l.gd=!1;var m=e.ha(),n=m.tileGrid,p=b.ma,q=b.o,r="tile-pixels"==q.xb(),v=n.$(p[0]),
y;if(r)var w=r=m.cc(f),n=$e(n.Ja(p[0])),n=[0,0,n[0]*w,n[1]*w];else r=v,n=n.Ea(p),Pc(c,q)||(y=!0,b.vf(c));l.gd=!1;var G=new ek(0,n,r,m.i,e.a),z=kk(r,f);b=b.c;h&&h!==l.Tf&&b.sort(h);m=0;for(r=b.length;m<r;++m)f=b[m],y&&f.X().kb(q,c),d.call(a,f);fk(G);l.bi=g;l.Tf=h;l.yd=G;l.resolution=NaN}}
Ol.prototype.sa=function(a,b,c,d){var e=b.pixelRatio,f=b.viewState.resolution;b=b.viewState.rotation;var g=this.a,h={},l=this.o,m=g.ha(),n=m.tileGrid,p,q,r,v,y,w;r=0;for(v=l.length;r<v;++r)w=l[r],q=w.ma,y=m.tileGrid.Ea(q,this.j),Qb(y,a)&&("tile-pixels"===w.o.xb()?(y=fc(y),f=m.cc(e),q=n.$(q[0])/f,q=[(a[0]-y[0])/q,(y[1]-a[1])/q]):q=a,w=w.f.yd,p=p||w.sa(q,f,b,{},function(a){var b=t(a).toString();if(!(b in h))return h[b]=!0,c.call(d,a,g)}));return p};Ol.prototype.A=function(){wh(this)};
Ol.prototype.l=function(a,b){var c=Bl.prototype.l.call(this,a,b);if(c)for(var d=Object.keys(a.Ee||{}),e=0,f=this.o.length;e<f;++e){var g=this.o[e];Pl(this,g,a);var h=g,g=a,l=this.a,m=Ml[l.s];if(m){var n=g.pixelRatio,p=h.f,q=l.g;if(!mb(p.ui,d)||p.Uf!==q){p.ui=d;p.Uf=q;var q=h.g,r=l.ha(),v=r.tileGrid,y=h.ma[0],w=v.$(y),l=$e(v.Ja(y)),y=v.$(y),G=y/w,z=l[0]*n*G,D=l[1]*n*G;q.canvas.width=z/G+.5;q.canvas.height=D/G+.5;q.scale(1/G,1/G);q.translate(z/2,D/2);G="tile-pixels"==h.o.xb();w=n/w;r=r.cc(n);y/=r;v=
v.Ea(h.ma,this.j);h=dh(this.v);G?(jh(h,w*y,w*y),kh(h,-l[0]*r/2,-l[1]*r/2)):(l=lc(v),jh(h,w,-w),kh(h,-l[0],-l[1]));p.yd.Pa(q,n,h,0,g.skippedFeatureUids||{},m)}}}return c};function Ql(a,b){Jh.call(this,0,b);this.f=Ge();this.b=this.f.canvas;this.b.style.width="100%";this.b.style.height="100%";this.b.className="ol-unselectable";a.insertBefore(this.b,a.childNodes[0]||null);this.a=!0;this.c=ch()}x(Ql,Jh);Ql.prototype.Xe=function(a){return a instanceof ej?new Al(a):a instanceof F?new Bl(a):a instanceof J?new Ol(a):a instanceof I?new Dl(a):null};
function Rl(a,b,c){var d=a.i,e=a.f;if(Ya(d,b)){var f=c.extent,g=c.pixelRatio,h=c.viewState.rotation,l=c.viewState,m=c.pixelRatio/l.resolution;a=lh(a.c,a.b.width/2,a.b.height/2,m,-m,-l.rotation,-l.center[0],-l.center[1]);d.b(new qh(b,new zj(e,g,f,a,h),c,e,null))}}Ql.prototype.Y=function(){return"canvas"};
Ql.prototype.Ce=function(a){if(a){var b=this.f,c=a.pixelRatio,d=Math.round(a.size[0]*c),c=Math.round(a.size[1]*c);this.b.width!=d||this.b.height!=c?(this.b.width=d,this.b.height=c):b.clearRect(0,0,d,c);var e=a.viewState.rotation;Kh(a);Rl(this,"precompose",a);var f=a.layerStatesArray;nb(f);ij(b,e,d/2,c/2);var g=a.viewState.resolution,h,l,m,n;h=0;for(l=f.length;h<l;++h)n=f[h],m=n.layer,m=Mh(this,m),sh(n,g)&&"ready"==n.S&&m.l(a,n)&&m.i(a,n,b);ij(b,-e,d/2,c/2);Rl(this,"postcompose",a);this.a||(this.b.style.display=
"",this.a=!0);Nh(this,a);a.postRenderFunctions.push(Lh)}else this.a&&(this.b.style.display="none",this.a=!1)};function Sl(a,b){vh.call(this,a);this.target=b}x(Sl,vh);Sl.prototype.Nd=oa;Sl.prototype.th=oa;function Tl(a){var b=document.createElement("DIV");b.style.position="absolute";Sl.call(this,a,b);this.f=null;this.c=ch()}x(Tl,Sl);Tl.prototype.sa=function(a,b,c,d){var e=this.a;return e.ha().sa(a,b.viewState.resolution,b.viewState.rotation,b.skippedFeatureUids,function(a){return c.call(d,a,e)})};Tl.prototype.Nd=function(){Ne(this.target);this.f=null};
Tl.prototype.yf=function(a,b){var c=a.viewState,d=c.center,e=c.resolution,f=c.rotation,g=this.f,h=this.a.ha(),l=a.viewHints,m=a.extent;void 0!==b.extent&&(m=nc(m,b.extent));l[0]||l[1]||ic(m)||(c=h.A(m,e,a.pixelRatio,c.projection))&&xh(this,c)&&(g=c);g&&(l=g.H(),m=g.$(),c=ch(),lh(c,a.size[0]/2,a.size[1]/2,m/e,m/e,f,(l[0]-d[0])/m,(d[1]-l[3])/m),g!=this.f&&(d=g.a(this),d.style.maxWidth="none",d.style.position="absolute",Ne(this.target),this.target.appendChild(d),this.f=g),mb(c,this.c)||(Ke(this.target,
c),gh(this.c,c)),zh(a.attributions,g.l),Ah(a,h));return!0};function Ul(a){var b=document.createElement("DIV");b.style.position="absolute";Sl.call(this,a,b);this.c=!0;this.l=1;this.i=0;this.f={}}x(Ul,Sl);Ul.prototype.Nd=function(){Ne(this.target);this.i=0};
Ul.prototype.yf=function(a,b){if(!b.visible)return this.c&&(this.target.style.display="none",this.c=!1),!0;var c=a.pixelRatio,d=a.viewState,e=d.projection,f=this.a,g=f.ha(),h=g.fb(e),l=g.Ud(e),m=h.Lb(d.resolution),n=h.$(m),p=d.center,q;n==d.resolution?(p=Ch(p,n,a.size),q=mc(p,n,d.rotation,a.size)):q=a.extent;void 0!==b.extent&&(q=nc(q,b.extent));var n=kf(h,q,n),r={};r[m]={};var v=this.Qd(g,e,r),y=f.c(),w=Jb(),G=new Wd(0,0,0,0),z,D,H,ba;for(H=n.ca;H<=n.ea;++H)for(ba=n.fa;ba<=n.ga;++ba)z=g.bc(m,H,ba,
c,e),D=z.V(),D=2==D||4==D||3==D&&!y,!D&&z.a&&(z=z.a),D=z.V(),2==D?r[m][z.ma.toString()]=z:4==D||3==D&&!y||(D=hf(h,z.ma,v,G,w),D||(z=jf(h,z.ma,G,w))&&v(m+1,z));var A;if(this.i!=g.g){for(A in this.f)y=this.f[+A],Me(y.target);this.f={};this.i=g.g}w=Object.keys(r).map(Number);w.sort(fb);var v={},Fa;H=0;for(ba=w.length;H<ba;++H){A=w[H];A in this.f?y=this.f[A]:(y=h.qd(p,A),y=new Vl(h,y),v[A]=!0,this.f[A]=y);A=r[A];for(Fa in A){z=y;D=A[Fa];var Ja=l,M=D.ma,ma=M[0],Ub=M[1],Kb=M[2],M=M.toString();if(!(M in
z.a)){var ma=$e(z.c.Ja(ma),z.o),Hb=D.$a(z),Xb=Hb.style;Xb.maxWidth="none";var gc,Nb;0<Ja?(gc=document.createElement("DIV"),Nb=gc.style,Nb.overflow="hidden",Nb.width=ma[0]+"px",Nb.height=ma[1]+"px",Xb.position="absolute",Xb.left=-Ja+"px",Xb.top=-Ja+"px",Xb.width=ma[0]+2*Ja+"px",Xb.height=ma[1]+2*Ja+"px",gc.appendChild(Hb)):(Xb.width=ma[0]+"px",Xb.height=ma[1]+"px",gc=Hb,Nb=Xb);Nb.position="absolute";Nb.left=(Ub-z.g[1])*ma[0]+"px";Nb.top=(z.g[2]-Kb)*ma[1]+"px";z.b||(z.b=document.createDocumentFragment());
z.b.appendChild(gc);z.a[M]=D}}y.b&&(y.target.appendChild(y.b),y.b=null)}l=Object.keys(this.f).map(Number);l.sort(fb);H=ch();Fa=0;for(w=l.length;Fa<w;++Fa)if(A=l[Fa],y=this.f[A],A in r)if(z=y.$(),ba=y.Ia(),lh(H,a.size[0]/2,a.size[1]/2,z/d.resolution,z/d.resolution,d.rotation,(ba[0]-p[0])/z,(p[1]-ba[1])/z),y.setTransform(H),A in v){for(--A;0<=A;--A)if(A in this.f){this.f[A].target.parentNode&&this.f[A].target.parentNode.insertBefore(y.target,this.f[A].target.nextSibling);break}0>A&&this.target.insertBefore(y.target,
this.target.childNodes[0]||null)}else{if(!a.viewHints[0]&&!a.viewHints[1]){D=gf(y.c,q,y.g[0],G);A=[];z=void 0;for(z in y.a)ba=y.a[z],D.contains(ba.ma)||A.push(ba);D=0;for(Ja=A.length;D<Ja;++D)ba=A[D],z=ba.ma.toString(),Me(ba.$a(y)),delete y.a[z]}}else Me(y.target),delete this.f[A];b.opacity!=this.l&&(this.l=this.target.style.opacity=b.opacity);b.visible&&!this.c&&(this.target.style.display="",this.c=!0);Bh(a.usedTiles,g,m,n);Dh(a,g,h,c,e,q,m,f.f());yh(a,g);Ah(a,g);return!0};
function Vl(a,b){this.target=document.createElement("DIV");this.target.style.position="absolute";this.target.style.width="100%";this.target.style.height="100%";this.c=a;this.g=b;this.i=fc(a.Ea(b));this.l=a.$(b[0]);this.a={};this.b=null;this.f=ch();this.o=[0,0]}Vl.prototype.Ia=function(){return this.i};Vl.prototype.$=function(){return this.l};Vl.prototype.setTransform=function(a){mb(a,this.f)||(Ke(this.target,a),gh(this.f,a))};function Wl(a){this.i=Ge();var b=this.i.canvas;b.style.maxWidth="none";b.style.position="absolute";Sl.call(this,a,b);this.f=!1;this.l=-1;this.s=NaN;this.o=Jb();this.c=this.j=null;this.U=ch();this.v=ch()}x(Wl,Sl);k=Wl.prototype;k.Nd=function(){var a=this.i.canvas;a.width=a.width;this.l=0};
k.th=function(a,b){var c=a.viewState,d=c.center,e=c.rotation,f=c.resolution,c=a.pixelRatio,g=a.size[0],h=a.size[1],l=g*c,m=h*c,d=lh(this.U,c*g/2,c*h/2,c/f,-c/f,-e,-d[0],-d[1]),f=this.i;f.canvas.width=l;f.canvas.height=m;var n=dh(this.v);jh(n,1/c,1/c);kh(n,-(l-g)/2*c,-(m-h)/2*c);Ke(f.canvas,n);Xl(this,"precompose",a,d);(g=this.c)&&!g.Ya()&&(f.globalAlpha=b.opacity,g.Pa(f,c,d,e,b.Qc?a.skippedFeatureUids:{}),Xl(this,"render",a,d));Xl(this,"postcompose",a,d)};
function Xl(a,b,c,d){var e=a.i;a=a.a;Ya(a,b)&&a.b(new qh(b,new zj(e,c.pixelRatio,c.extent,d,c.viewState.rotation),c,e,null))}k.sa=function(a,b,c,d){if(this.c){var e=this.a,f={};return this.c.sa(a,b.viewState.resolution,b.viewState.rotation,{},function(a){var b=t(a).toString();if(!(b in f))return f[b]=!0,c.call(d,a,e)})}};k.uh=function(){wh(this)};
k.yf=function(a){function b(a){var b,d=a.ec();d?b=d.call(a,l):(d=c.i)&&(b=d(a,l));if(b){if(b){d=!1;if(Array.isArray(b))for(var e=0,f=b.length;e<f;++e)d=lk(n,a,b[e],kk(l,m),this.uh,this)||d;else d=lk(n,a,b,kk(l,m),this.uh,this)||d;a=d}else a=!1;this.f=this.f||a}}var c=this.a,d=c.ha();zh(a.attributions,d.l);Ah(a,d);var e=a.viewHints[0],f=a.viewHints[1],g=c.P,h=c.T;if(!this.f&&!g&&e||!h&&f)return!0;var f=a.extent,g=a.viewState,e=g.projection,l=g.resolution,m=a.pixelRatio;a=c.g;h=c.a;g=yj(c);void 0===
g&&(g=jk);f=Mb(f,h*l);if(!this.f&&this.s==l&&this.l==a&&this.j==g&&Sb(this.o,f))return!0;this.c=null;this.f=!1;var n=new ek(.5*l/m,f,l,d.T,c.a);d.Pc(f,l,e);if(g){var p=[];d.vb(f,function(a){p.push(a)},this);p.sort(g);p.forEach(b,this)}else d.vb(f,b,this);fk(n);this.s=l;this.l=a;this.j=g;this.o=f;this.c=n;return!0};function Yl(a,b){Jh.call(this,0,b);this.f=Ge();var c=this.f.canvas;c.style.position="absolute";c.style.width="100%";c.style.height="100%";c.className="ol-unselectable";a.insertBefore(c,a.childNodes[0]||null);this.c=ch();this.b=document.createElement("DIV");this.b.className="ol-unselectable";c=this.b.style;c.position="absolute";c.width="100%";c.height="100%";B(this.b,"touchstart",Wa);a.insertBefore(this.b,a.childNodes[0]||null);this.a=!0}x(Yl,Jh);Yl.prototype.ka=function(){Me(this.b);Jh.prototype.ka.call(this)};
Yl.prototype.Xe=function(a){if(a instanceof ej)a=new Tl(a);else if(a instanceof F)a=new Ul(a);else if(a instanceof I)a=new Wl(a);else return null;return a};function Zl(a,b,c){var d=a.i;if(Ya(d,b)){var e=c.extent,f=c.pixelRatio,g=c.viewState,h=g.rotation,l=a.f,m=l.canvas;a=lh(a.c,m.width/2,m.height/2,f/g.resolution,-f/g.resolution,-h,-g.center[0],-g.center[1]);d.b(new qh(b,new zj(l,f,e,a,h),c,l,null))}}Yl.prototype.Y=function(){return"dom"};
Yl.prototype.Ce=function(a){if(a){var b=this.i;if(Ya(b,"precompose")||Ya(b,"postcompose")){var b=this.f.canvas,c=a.pixelRatio;b.width=a.size[0]*c;b.height=a.size[1]*c}Zl(this,"precompose",a);b=a.layerStatesArray;nb(b);var c=a.viewState.resolution,d,e,f,g;d=0;for(e=b.length;d<e;++d)g=b[d],f=g.layer,f=Mh(this,f),this.b.insertBefore(f.target,this.b.childNodes[d]||null),sh(g,c)&&"ready"==g.S?f.yf(a,g)&&f.th(a,g):f.Nd();var b=a.layerStates,h;for(h in this.g)h in b||(f=this.g[h],Me(f.target));this.a||(this.b.style.display=
"",this.a=!0);Kh(a);Nh(this,a);a.postRenderFunctions.push(Lh);Zl(this,"postcompose",a)}else this.a&&(this.b.style.display="none",this.a=!1)};function $l(a){this.b=a}function am(a){this.b=a}x(am,$l);am.prototype.Y=function(){return 35632};function bm(a){this.b=a}x(bm,$l);bm.prototype.Y=function(){return 35633};function cm(){this.b="precision mediump float;varying vec2 a;varying float b;uniform float k;uniform sampler2D l;void main(void){vec4 texColor=texture2D(l,a);gl_FragColor.rgb=texColor.rgb;float alpha=texColor.a*b*k;if(alpha==0.0){discard;}gl_FragColor.a=alpha;}"}x(cm,am);ca(cm);
function dm(){this.b="varying vec2 a;varying float b;attribute vec2 c;attribute vec2 d;attribute vec2 e;attribute float f;attribute float g;uniform mat4 h;uniform mat4 i;uniform mat4 j;void main(void){mat4 offsetMatrix=i;if(g==1.0){offsetMatrix=i*j;}vec4 offsets=offsetMatrix*vec4(e,0.,0.);gl_Position=h*vec4(c,0.,1.)+offsets;a=d;b=f;}"}x(dm,bm);ca(dm);
function em(a,b){this.o=a.getUniformLocation(b,"j");this.j=a.getUniformLocation(b,"i");this.i=a.getUniformLocation(b,"k");this.l=a.getUniformLocation(b,"h");this.b=a.getAttribLocation(b,"e");this.a=a.getAttribLocation(b,"f");this.f=a.getAttribLocation(b,"c");this.g=a.getAttribLocation(b,"g");this.c=a.getAttribLocation(b,"d")};function fm(a){this.b=void 0!==a?a:[]};function gm(a,b){this.l=a;this.b=b;this.a={};this.c={};this.f={};this.j=this.s=this.i=this.o=null;(this.g=gb(na,"OES_element_index_uint"))&&b.getExtension("OES_element_index_uint");B(this.l,"webglcontextlost",this.ao,this);B(this.l,"webglcontextrestored",this.bo,this)}x(gm,Sa);
function hm(a,b,c){var d=a.b,e=c.b,f=String(t(c));if(f in a.a)d.bindBuffer(b,a.a[f].buffer);else{var g=d.createBuffer();d.bindBuffer(b,g);var h;34962==b?h=new Float32Array(e):34963==b&&(h=a.g?new Uint32Array(e):new Uint16Array(e));d.bufferData(b,h,35044);a.a[f]={Db:c,buffer:g}}}function im(a,b){var c=a.b,d=String(t(b)),e=a.a[d];c.isContextLost()||c.deleteBuffer(e.buffer);delete a.a[d]}k=gm.prototype;
k.ka=function(){Ra(this.l);var a=this.b;if(!a.isContextLost()){for(var b in this.a)a.deleteBuffer(this.a[b].buffer);for(b in this.f)a.deleteProgram(this.f[b]);for(b in this.c)a.deleteShader(this.c[b]);a.deleteFramebuffer(this.i);a.deleteRenderbuffer(this.j);a.deleteTexture(this.s)}};k.$n=function(){return this.b};
function jm(a){if(!a.i){var b=a.b,c=b.createFramebuffer();b.bindFramebuffer(b.FRAMEBUFFER,c);var d=km(b,1,1),e=b.createRenderbuffer();b.bindRenderbuffer(b.RENDERBUFFER,e);b.renderbufferStorage(b.RENDERBUFFER,b.DEPTH_COMPONENT16,1,1);b.framebufferTexture2D(b.FRAMEBUFFER,b.COLOR_ATTACHMENT0,b.TEXTURE_2D,d,0);b.framebufferRenderbuffer(b.FRAMEBUFFER,b.DEPTH_ATTACHMENT,b.RENDERBUFFER,e);b.bindTexture(b.TEXTURE_2D,null);b.bindRenderbuffer(b.RENDERBUFFER,null);b.bindFramebuffer(b.FRAMEBUFFER,null);a.i=c;
a.s=d;a.j=e}return a.i}function lm(a,b){var c=String(t(b));if(c in a.c)return a.c[c];var d=a.b,e=d.createShader(b.Y());d.shaderSource(e,b.b);d.compileShader(e);return a.c[c]=e}function mm(a,b,c){var d=t(b)+"/"+t(c);if(d in a.f)return a.f[d];var e=a.b,f=e.createProgram();e.attachShader(f,lm(a,b));e.attachShader(f,lm(a,c));e.linkProgram(f);return a.f[d]=f}k.ao=function(){Da(this.a);Da(this.c);Da(this.f);this.j=this.s=this.i=this.o=null};k.bo=function(){};
k.we=function(a){if(a==this.o)return!1;this.b.useProgram(a);this.o=a;return!0};function nm(a,b,c){var d=a.createTexture();a.bindTexture(a.TEXTURE_2D,d);a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MAG_FILTER,a.LINEAR);a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MIN_FILTER,a.LINEAR);void 0!==b&&a.texParameteri(3553,10242,b);void 0!==c&&a.texParameteri(3553,10243,c);return d}function km(a,b,c){var d=nm(a,void 0,void 0);a.texImage2D(a.TEXTURE_2D,0,a.RGBA,b,c,0,a.RGBA,a.UNSIGNED_BYTE,null);return d}
function om(a,b){var c=nm(a,33071,33071);a.texImage2D(a.TEXTURE_2D,0,a.RGBA,a.RGBA,a.UNSIGNED_BYTE,b);return c};function pm(a,b){this.D=this.A=void 0;this.j=lc(b);this.U=[];this.i=[];this.S=void 0;this.c=[];this.f=[];this.Aa=this.ya=void 0;this.a=[];this.C=this.o=null;this.P=void 0;this.za=ch();this.Sa=ch();this.W=this.T=void 0;this.cb=ch();this.Ba=De();this.na=this.ia=this.Ra=void 0;this.oa=[];this.l=[];this.b=[];this.v=null;this.g=[];this.s=[];this.Hb=void 0}x(pm,ph);
function qm(a,b){var c=a.v,d=a.o,e=a.oa,f=a.l,g=b.b;return function(){if(!g.isContextLost()){var a,l;a=0;for(l=e.length;a<l;++a)g.deleteTexture(e[a]);a=0;for(l=f.length;a<l;++a)g.deleteTexture(f[a])}im(b,c);im(b,d)}}
function rm(a,b,c,d){var e=a.A,f=a.D,g=a.S,h=a.ya,l=a.Aa,m=a.P,n=a.T,p=a.W,q=a.Ra?1:0,r=a.ia,v=a.na,y=a.Hb,w=Math.cos(r),r=Math.sin(r),G=a.a.length,z=a.b.length,D,H,ba,A,Fa,Ja;for(D=0;D<c;D+=d)Fa=b[D]-a.j[0],Ja=b[D+1]-a.j[1],H=z/8,ba=-v*e,A=-v*(g-f),a.b[z++]=Fa,a.b[z++]=Ja,a.b[z++]=ba*w-A*r,a.b[z++]=ba*r+A*w,a.b[z++]=n/l,a.b[z++]=(p+g)/h,a.b[z++]=m,a.b[z++]=q,ba=v*(y-e),A=-v*(g-f),a.b[z++]=Fa,a.b[z++]=Ja,a.b[z++]=ba*w-A*r,a.b[z++]=ba*r+A*w,a.b[z++]=(n+y)/l,a.b[z++]=(p+g)/h,a.b[z++]=m,a.b[z++]=q,ba=
v*(y-e),A=v*f,a.b[z++]=Fa,a.b[z++]=Ja,a.b[z++]=ba*w-A*r,a.b[z++]=ba*r+A*w,a.b[z++]=(n+y)/l,a.b[z++]=p/h,a.b[z++]=m,a.b[z++]=q,ba=-v*e,A=v*f,a.b[z++]=Fa,a.b[z++]=Ja,a.b[z++]=ba*w-A*r,a.b[z++]=ba*r+A*w,a.b[z++]=n/l,a.b[z++]=p/h,a.b[z++]=m,a.b[z++]=q,a.a[G++]=H,a.a[G++]=H+1,a.a[G++]=H+2,a.a[G++]=H,a.a[G++]=H+2,a.a[G++]=H+3}pm.prototype.tc=function(a,b){this.g.push(this.a.length);this.s.push(b);var c=a.la();rm(this,c,c.length,a.va())};
pm.prototype.uc=function(a,b){this.g.push(this.a.length);this.s.push(b);var c=a.la();rm(this,c,c.length,a.va())};function sm(a,b){var c=b.b;a.U.push(a.a.length);a.i.push(a.a.length);a.v=new fm(a.b);hm(b,34962,a.v);a.o=new fm(a.a);hm(b,34963,a.o);var d={};tm(a.oa,a.c,d,c);tm(a.l,a.f,d,c);a.A=void 0;a.D=void 0;a.S=void 0;a.c=null;a.f=null;a.ya=void 0;a.Aa=void 0;a.a=null;a.P=void 0;a.T=void 0;a.W=void 0;a.Ra=void 0;a.ia=void 0;a.na=void 0;a.b=null;a.Hb=void 0}
function tm(a,b,c,d){var e,f,g,h=b.length;for(g=0;g<h;++g)e=b[g],f=t(e).toString(),f in c?e=c[f]:(e=om(d,e),c[f]=e),a[g]=e}
pm.prototype.Pa=function(a,b,c,d,e,f,g,h,l,m,n){f=a.b;hm(a,34962,this.v);hm(a,34963,this.o);var p=cm.$b(),q=dm.$b(),q=mm(a,p,q);this.C?p=this.C:this.C=p=new em(f,q);a.we(q);f.enableVertexAttribArray(p.f);f.vertexAttribPointer(p.f,2,5126,!1,32,0);f.enableVertexAttribArray(p.b);f.vertexAttribPointer(p.b,2,5126,!1,32,8);f.enableVertexAttribArray(p.c);f.vertexAttribPointer(p.c,2,5126,!1,32,16);f.enableVertexAttribArray(p.a);f.vertexAttribPointer(p.a,1,5126,!1,32,24);f.enableVertexAttribArray(p.g);f.vertexAttribPointer(p.g,
1,5126,!1,32,28);q=dh(this.cb);jh(q,2/(c*e[0]),2/(c*e[1]));ih(q,-d);kh(q,-(b[0]-this.j[0]),-(b[1]-this.j[1]));b=dh(this.Sa);jh(b,2/e[0],2/e[1]);e=dh(this.za);0!==d&&ih(e,-d);f.uniformMatrix4fv(p.l,!1,Ee(this.Ba,q));f.uniformMatrix4fv(p.j,!1,Ee(this.Ba,b));f.uniformMatrix4fv(p.o,!1,Ee(this.Ba,e));f.uniform1f(p.i,g);var r;if(void 0===l)um(this,f,a,h,this.oa,this.U);else{if(m)a:{d=a.g?5125:5123;a=a.g?4:2;e=this.g.length-1;for(g=this.l.length-1;0<=g;--g)for(f.bindTexture(3553,this.l[g]),m=0<g?this.i[g-
1]:0,b=this.i[g];0<=e&&this.g[e]>=m;){r=this.g[e];c=this.s[e];q=t(c).toString();if(void 0===h[q]&&c.X()&&(void 0===n||oc(n,c.X().H()))&&(f.clear(f.COLOR_BUFFER_BIT|f.DEPTH_BUFFER_BIT),f.drawElements(4,b-r,d,r*a),b=l(c))){h=b;break a}b=r;e--}h=void 0}else f.clear(f.COLOR_BUFFER_BIT|f.DEPTH_BUFFER_BIT),um(this,f,a,h,this.l,this.i),h=(h=l(null))?h:void 0;r=h}f.disableVertexAttribArray(p.f);f.disableVertexAttribArray(p.b);f.disableVertexAttribArray(p.c);f.disableVertexAttribArray(p.a);f.disableVertexAttribArray(p.g);
return r};function um(a,b,c,d,e,f){var g=c.g?5125:5123;c=c.g?4:2;if(Ga(d)){var h;a=0;d=e.length;for(h=0;a<d;++a){b.bindTexture(3553,e[a]);var l=f[a];b.drawElements(4,l-h,g,h*c);h=l}}else{h=0;var m,l=0;for(m=e.length;l<m;++l){b.bindTexture(3553,e[l]);for(var n=0<l?f[l-1]:0,p=f[l],q=n;h<a.g.length&&a.g[h]<=p;){var r=t(a.s[h]).toString();void 0!==d[r]?(q!==n&&b.drawElements(4,n-q,g,q*c),n=q=h===a.g.length-1?p:a.g[h+1]):n=h===a.g.length-1?p:a.g[h+1];h++}q!==n&&b.drawElements(4,n-q,g,q*c)}}}
pm.prototype.Ub=function(a){var b=a.Zb(),c=a.jc(1),d=a.ld(),e=a.pe(1),f=a.v,g=a.Ia(),h=a.U,l=a.j,m=a.Gb();a=a.i;var n;0===this.c.length?this.c.push(c):(n=this.c[this.c.length-1],t(n)!=t(c)&&(this.U.push(this.a.length),this.c.push(c)));0===this.f.length?this.f.push(e):(n=this.f[this.f.length-1],t(n)!=t(e)&&(this.i.push(this.a.length),this.f.push(e)));this.A=b[0];this.D=b[1];this.S=m[1];this.ya=d[1];this.Aa=d[0];this.P=f;this.T=g[0];this.W=g[1];this.ia=l;this.Ra=h;this.na=a;this.Hb=m[0]};
function vm(a,b,c){this.f=b;this.c=a;this.g=c;this.a={}}function wm(a,b){var c=[],d;for(d in a.a)c.push(qm(a.a[d],b));return function(){for(var a=c.length,b,d=0;d<a;d++)b=c[d].apply(this,arguments);return b}}function xm(a,b){for(var c in a.a)sm(a.a[c],b)}vm.prototype.b=function(a,b){var c=this.a[b];void 0===c&&(c=new ym[b](this.c,this.f),this.a[b]=c);return c};vm.prototype.Ya=function(){return Ga(this.a)};
vm.prototype.Pa=function(a,b,c,d,e,f,g,h){var l,m,n;l=0;for(m=Oj.length;l<m;++l)n=this.a[Oj[l]],void 0!==n&&n.Pa(a,b,c,d,e,f,g,h,void 0,!1)};function zm(a,b,c,d,e,f,g,h,l,m,n){var p=Am,q,r;for(q=Oj.length-1;0<=q;--q)if(r=a.a[Oj[q]],void 0!==r&&(r=r.Pa(b,c,d,e,p,f,g,h,l,m,n)))return r}
vm.prototype.sa=function(a,b,c,d,e,f,g,h,l,m){var n=b.b;n.bindFramebuffer(n.FRAMEBUFFER,jm(b));var p;void 0!==this.g&&(p=Mb(Wb(a),d*this.g));return zm(this,b,a,d,e,g,h,l,function(a){var b=new Uint8Array(4);n.readPixels(0,0,1,1,n.RGBA,n.UNSIGNED_BYTE,b);if(0<b[3]&&(a=m(a)))return a},!0,p)};
function Bm(a,b,c,d,e,f,g,h){var l=c.b;l.bindFramebuffer(l.FRAMEBUFFER,jm(c));return void 0!==zm(a,c,b,d,e,f,g,h,function(){var a=new Uint8Array(4);l.readPixels(0,0,1,1,l.RGBA,l.UNSIGNED_BYTE,a);return 0<a[3]},!1)}var ym={Image:pm},Am=[1,1];function Cm(a,b,c,d,e,f,g){this.b=a;this.f=b;this.g=f;this.c=g;this.o=e;this.l=d;this.i=c;this.a=null}x(Cm,ph);k=Cm.prototype;k.sd=function(a){this.Ub(a.a)};k.sc=function(a){switch(a.Y()){case "Point":this.uc(a,null);break;case "MultiPoint":this.tc(a,null);break;case "GeometryCollection":this.Ze(a,null)}};k.Ye=function(a,b){var c=(0,b.g)(a);c&&oc(this.g,c.H())&&(this.sd(b),this.sc(c))};k.Ze=function(a){a=a.c;var b,c;b=0;for(c=a.length;b<c;++b)this.sc(a[b])};
k.uc=function(a,b){var c=this.b,d=(new vm(1,this.g)).b(0,"Image");d.Ub(this.a);d.uc(a,b);sm(d,c);d.Pa(this.b,this.f,this.i,this.l,this.o,this.c,1,{},void 0,!1);qm(d,c)()};k.tc=function(a,b){var c=this.b,d=(new vm(1,this.g)).b(0,"Image");d.Ub(this.a);d.tc(a,b);sm(d,c);d.Pa(this.b,this.f,this.i,this.l,this.o,this.c,1,{},void 0,!1);qm(d,c)()};k.Ub=function(a){this.a=a};function Dm(){this.b="precision mediump float;varying vec2 a;uniform float f;uniform sampler2D g;void main(void){vec4 texColor=texture2D(g,a);gl_FragColor.rgb=texColor.rgb;gl_FragColor.a=texColor.a*f;}"}x(Dm,am);ca(Dm);function Em(){this.b="varying vec2 a;attribute vec2 b;attribute vec2 c;uniform mat4 d;uniform mat4 e;void main(void){gl_Position=e*vec4(b,0.,1.);a=(d*vec4(c,0.,1.)).st;}"}x(Em,bm);ca(Em);
function Fm(a,b){this.g=a.getUniformLocation(b,"f");this.f=a.getUniformLocation(b,"e");this.i=a.getUniformLocation(b,"d");this.c=a.getUniformLocation(b,"g");this.b=a.getAttribLocation(b,"b");this.a=a.getAttribLocation(b,"c")};function Gm(a,b){vh.call(this,b);this.f=a;this.T=new fm([-1,-1,0,0,1,-1,1,0,-1,1,0,1,1,1,1,1]);this.i=this.qb=null;this.l=void 0;this.s=ch();this.U=ch();this.D=De();this.v=null}x(Gm,vh);
function Hm(a,b,c){var d=a.f.f;if(void 0===a.l||a.l!=c){b.postRenderFunctions.push(function(a,b,c){a.isContextLost()||(a.deleteFramebuffer(b),a.deleteTexture(c))}.bind(null,d,a.i,a.qb));b=km(d,c,c);var e=d.createFramebuffer();d.bindFramebuffer(36160,e);d.framebufferTexture2D(36160,36064,3553,b,0);a.qb=b;a.i=e;a.l=c}else d.bindFramebuffer(36160,a.i)}
Gm.prototype.vh=function(a,b,c){Im(this,"precompose",c,a);hm(c,34962,this.T);var d=c.b,e=Dm.$b(),f=Em.$b(),e=mm(c,e,f);this.v?f=this.v:this.v=f=new Fm(d,e);c.we(e)&&(d.enableVertexAttribArray(f.b),d.vertexAttribPointer(f.b,2,5126,!1,16,0),d.enableVertexAttribArray(f.a),d.vertexAttribPointer(f.a,2,5126,!1,16,8),d.uniform1i(f.c,0));d.uniformMatrix4fv(f.i,!1,Ee(this.D,this.s));d.uniformMatrix4fv(f.f,!1,Ee(this.D,this.U));d.uniform1f(f.g,b.opacity);d.bindTexture(3553,this.qb);d.drawArrays(5,0,4);Im(this,
"postcompose",c,a)};function Im(a,b,c,d){a=a.a;if(Ya(a,b)){var e=d.viewState;a.b(new qh(b,new Cm(c,e.center,e.resolution,e.rotation,d.size,d.extent,d.pixelRatio),d,null,c))}}Gm.prototype.zf=function(){this.i=this.qb=null;this.l=void 0};function Jm(a,b){Gm.call(this,a,b);this.j=this.o=this.c=null}x(Jm,Gm);function Km(a,b){var c=b.a();return om(a.f.f,c)}Jm.prototype.sa=function(a,b,c,d){var e=this.a;return e.ha().sa(a,b.viewState.resolution,b.viewState.rotation,b.skippedFeatureUids,function(a){return c.call(d,a,e)})};
Jm.prototype.Af=function(a,b){var c=this.f.f,d=a.pixelRatio,e=a.viewState,f=e.center,g=e.resolution,h=e.rotation,l=this.c,m=this.qb,n=this.a.ha(),p=a.viewHints,q=a.extent;void 0!==b.extent&&(q=nc(q,b.extent));p[0]||p[1]||ic(q)||(e=n.A(q,g,d,e.projection))&&xh(this,e)&&(l=e,m=Km(this,e),this.qb&&a.postRenderFunctions.push(function(a,b){a.isContextLost()||a.deleteTexture(b)}.bind(null,c,this.qb)));l&&(c=this.f.c.l,Lm(this,c.width,c.height,d,f,g,h,l.H()),this.j=null,d=this.s,dh(d),jh(d,1,-1),kh(d,0,
-1),this.c=l,this.qb=m,zh(a.attributions,l.l),Ah(a,n));return!0};function Lm(a,b,c,d,e,f,g,h){b*=f;c*=f;a=a.U;dh(a);jh(a,2*d/b,2*d/c);ih(a,-g);kh(a,h[0]-e[0],h[1]-e[1]);jh(a,(h[2]-h[0])/2,(h[3]-h[1])/2);kh(a,1,1)}Jm.prototype.le=function(a,b){return void 0!==this.sa(a,b,rc,this)};
Jm.prototype.Cc=function(a,b,c,d){if(this.c&&this.c.a())if(this.a.ha()instanceof yl){var e=hh(b.pixelToCoordinateTransform,a.slice());if(this.sa(e,b,rc,this))return c.call(d,this.a)}else{e=[this.c.a().width,this.c.a().height];if(!this.j){var f=b.size;b=ch();kh(b,-1,-1);jh(b,2/f[0],2/f[1]);kh(b,0,f[1]);jh(b,1,-1);var f=mh(this.U.slice()),g=ch();kh(g,0,e[1]);jh(g,1,-1);jh(g,e[0]/2,e[1]/2);kh(g,1,1);fh(g,f);fh(g,b);this.j=g}a=hh(this.j,a.slice());if(!(0>a[0]||a[0]>e[0]||0>a[1]||a[1]>e[1])&&(this.o||
(this.o=Ge(1,1)),this.o.clearRect(0,0,1,1),this.o.drawImage(this.c.a(),a[0],a[1],1,1,0,0,1,1),0<this.o.getImageData(0,0,1,1).data[3]))return c.call(d,this.a)}};function Mm(){this.b="precision mediump float;varying vec2 a;uniform sampler2D e;void main(void){gl_FragColor=texture2D(e,a);}"}x(Mm,am);ca(Mm);function Nm(){this.b="varying vec2 a;attribute vec2 b;attribute vec2 c;uniform vec4 d;void main(void){gl_Position=vec4(b*d.xy+d.zw,0.,1.);a=c;}"}x(Nm,bm);ca(Nm);function Om(a,b){this.g=a.getUniformLocation(b,"e");this.f=a.getUniformLocation(b,"d");this.b=a.getAttribLocation(b,"b");this.a=a.getAttribLocation(b,"c")};function Pm(a,b){Gm.call(this,a,b);this.S=Mm.$b();this.W=Nm.$b();this.c=null;this.C=new fm([0,0,0,1,1,0,1,1,0,1,0,0,1,1,1,0]);this.A=this.o=null;this.j=-1;this.P=[0,0]}x(Pm,Gm);k=Pm.prototype;k.ka=function(){im(this.f.c,this.C);Gm.prototype.ka.call(this)};k.Qd=function(a,b,c){var d=this.f;return function(e,f){return tf(a,b,e,f,function(a){var b=Re(d.a,a.jb());b&&(c[e]||(c[e]={}),c[e][a.ma.toString()]=a);return b})}};k.zf=function(){Gm.prototype.zf.call(this);this.c=null};
k.Af=function(a,b,c){var d=this.f,e=c.b,f=a.viewState,g=f.projection,h=this.a,l=h.ha(),m=l.fb(g),n=m.Lb(f.resolution),p=m.$(n),q=l.$d(n,a.pixelRatio,g),r=q[0]/$e(m.Ja(n),this.P)[0],v=p/r,y=l.Ud(g),w=f.center,G;p==f.resolution?(w=Ch(w,p,a.size),G=mc(w,p,f.rotation,a.size)):G=a.extent;p=kf(m,G,p);if(this.o&&Yd(this.o,p)&&this.j==l.g)v=this.A;else{var z=[p.ea-p.ca+1,p.ga-p.fa+1],D=Math.pow(2,Math.ceil(Math.log(Math.max(z[0]*q[0],z[1]*q[1]))/Math.LN2)),z=v*D,H=m.Ia(n),ba=H[0]+p.ca*q[0]*v,v=H[1]+p.fa*
q[1]*v,v=[ba,v,ba+z,v+z];Hm(this,a,D);e.viewport(0,0,D,D);e.clearColor(0,0,0,0);e.clear(16384);e.disable(3042);D=mm(c,this.S,this.W);c.we(D);this.c||(this.c=new Om(e,D));hm(c,34962,this.C);e.enableVertexAttribArray(this.c.b);e.vertexAttribPointer(this.c.b,2,5126,!1,16,0);e.enableVertexAttribArray(this.c.a);e.vertexAttribPointer(this.c.a,2,5126,!1,16,8);e.uniform1i(this.c.g,0);c={};c[n]={};var A=this.Qd(l,g,c),Fa=h.c(),D=!0,ba=Jb(),Ja=new Wd(0,0,0,0),M,ma,Ub;for(ma=p.ca;ma<=p.ea;++ma)for(Ub=p.fa;Ub<=
p.ga;++Ub){H=l.bc(n,ma,Ub,r,g);if(void 0!==b.extent&&(M=m.Ea(H.ma,ba),!oc(M,b.extent)))continue;M=H.V();M=2==M||4==M||3==M&&!Fa;!M&&H.a&&(H=H.a);M=H.V();if(2==M){if(Re(d.a,H.jb())){c[n][H.ma.toString()]=H;continue}}else if(4==M||3==M&&!Fa)continue;D=!1;M=hf(m,H.ma,A,Ja,ba);M||(H=jf(m,H.ma,Ja,ba))&&A(n+1,H)}b=Object.keys(c).map(Number);b.sort(fb);for(var A=new Float32Array(4),Kb,Fa=0,Ja=b.length;Fa<Ja;++Fa)for(Kb in ma=c[b[Fa]],ma)H=ma[Kb],M=m.Ea(H.ma,ba),A[0]=2*(M[2]-M[0])/z,A[1]=2*(M[3]-M[1])/z,
A[2]=2*(M[0]-v[0])/z-1,A[3]=2*(M[1]-v[1])/z-1,e.uniform4fv(this.c.f,A),Qm(d,H,q,y*r),e.drawArrays(5,0,4);D?(this.o=p,this.A=v,this.j=l.g):(this.A=this.o=null,this.j=-1,a.animate=!0)}Bh(a.usedTiles,l,n,p);var Hb=d.o;Dh(a,l,m,r,g,G,n,h.f(),function(a){var b;(b=2!=a.V()||Re(d.a,a.jb()))||(b=a.jb()in Hb.g);b||Hb.f([a,mf(m,a.ma),m.$(a.ma[0]),q,y*r])},this);yh(a,l);Ah(a,l);e=this.s;dh(e);kh(e,(w[0]-v[0])/(v[2]-v[0]),(w[1]-v[1])/(v[3]-v[1]));0!==f.rotation&&ih(e,f.rotation);jh(e,a.size[0]*f.resolution/(v[2]-
v[0]),a.size[1]*f.resolution/(v[3]-v[1]));kh(e,-.5,-.5);return!0};k.Cc=function(a,b,c,d){if(this.i){a=hh(this.s,[a[0]/b.size[0],(b.size[1]-a[1])/b.size[1]].slice());a=[a[0]*this.l,a[1]*this.l];b=this.f.c.b;b.bindFramebuffer(b.FRAMEBUFFER,this.i);var e=new Uint8Array(4);b.readPixels(a[0],a[1],1,1,b.RGBA,b.UNSIGNED_BYTE,e);if(0<e[3])return c.call(d,this.a)}};function Rm(a,b){Gm.call(this,a,b);this.j=!1;this.P=-1;this.S=NaN;this.A=Jb();this.o=this.c=this.C=null}x(Rm,Gm);k=Rm.prototype;k.vh=function(a,b,c){this.o=b;var d=a.viewState,e=this.c;e&&!e.Ya()&&e.Pa(c,d.center,d.resolution,d.rotation,a.size,a.pixelRatio,b.opacity,b.Qc?a.skippedFeatureUids:{})};k.ka=function(){var a=this.c;a&&(wm(a,this.f.c)(),this.c=null);Gm.prototype.ka.call(this)};
k.sa=function(a,b,c,d){if(this.c&&this.o){var e=b.viewState,f=this.a,g={};return this.c.sa(a,this.f.c,e.center,e.resolution,e.rotation,b.size,b.pixelRatio,this.o.opacity,{},function(a){var b=t(a).toString();if(!(b in g))return g[b]=!0,c.call(d,a,f)})}};k.le=function(a,b){if(this.c&&this.o){var c=b.viewState;return Bm(this.c,a,this.f.c,c.resolution,c.rotation,b.pixelRatio,this.o.opacity,b.skippedFeatureUids)}return!1};
k.Cc=function(a,b,c,d){a=hh(b.pixelToCoordinateTransform,a.slice());if(this.le(a,b))return c.call(d,this.a)};k.wh=function(){wh(this)};
k.Af=function(a,b,c){function d(a){var b,c=a.ec();c?b=c.call(a,m):(c=e.i)&&(b=c(a,m));if(b){if(b){c=!1;if(Array.isArray(b))for(var d=0,f=b.length;d<f;++d)c=lk(q,a,b[d],kk(m,n),this.wh,this)||c;else c=lk(q,a,b,kk(m,n),this.wh,this)||c;a=c}else a=!1;this.j=this.j||a}}var e=this.a;b=e.ha();zh(a.attributions,b.l);Ah(a,b);var f=a.viewHints[0],g=a.viewHints[1],h=e.P,l=e.T;if(!this.j&&!h&&f||!l&&g)return!0;var g=a.extent,h=a.viewState,f=h.projection,m=h.resolution,n=a.pixelRatio,h=e.g,p=e.a,l=yj(e);void 0===
l&&(l=jk);g=Mb(g,p*m);if(!this.j&&this.S==m&&this.P==h&&this.C==l&&Sb(this.A,g))return!0;this.c&&a.postRenderFunctions.push(wm(this.c,c));this.j=!1;var q=new vm(.5*m/n,g,e.a);b.Pc(g,m,f);if(l){var r=[];b.vb(g,function(a){r.push(a)},this);r.sort(l);r.forEach(d,this)}else b.vb(g,d,this);xm(q,c);this.S=m;this.P=h;this.C=l;this.A=g;this.c=q;return!0};function Sm(a,b){Jh.call(this,0,b);this.b=document.createElement("CANVAS");this.b.style.width="100%";this.b.style.height="100%";this.b.className="ol-unselectable";a.insertBefore(this.b,a.childNodes[0]||null);this.U=this.A=0;this.D=Ge();this.j=!0;this.f=Uf(this.b,{antialias:!0,depth:!1,failIfMajorPerformanceCaveat:!0,preserveDrawingBuffer:!1,stencil:!0});this.c=new gm(this.b,this.f);B(this.b,"webglcontextlost",this.Pm,this);B(this.b,"webglcontextrestored",this.Qm,this);this.a=new Qe;this.v=null;this.o=
new Oh(function(a){var b=a[1];a=a[2];var e=b[0]-this.v[0],b=b[1]-this.v[1];return 65536*Math.log(a)+Math.sqrt(e*e+b*b)/a}.bind(this),function(a){return a[0].jb()});this.C=function(){if(!this.o.Ya()){Sh(this.o);var a=Ph(this.o);Qm(this,a[0],a[3],a[4])}return!1}.bind(this);this.l=0;Tm(this)}x(Sm,Jh);
function Qm(a,b,c,d){var e=a.f,f=b.jb();if(Re(a.a,f))a=a.a.get(f),e.bindTexture(3553,a.qb),9729!=a.Wg&&(e.texParameteri(3553,10240,9729),a.Wg=9729),9729!=a.Yg&&(e.texParameteri(3553,10241,9729),a.Yg=9729);else{var g=e.createTexture();e.bindTexture(3553,g);if(0<d){var h=a.D.canvas,l=a.D;a.A!==c[0]||a.U!==c[1]?(h.width=c[0],h.height=c[1],a.A=c[0],a.U=c[1]):l.clearRect(0,0,c[0],c[1]);l.drawImage(b.$a(),d,d,c[0],c[1],0,0,c[0],c[1]);e.texImage2D(3553,0,6408,6408,5121,h)}else e.texImage2D(3553,0,6408,6408,
5121,b.$a());e.texParameteri(3553,10240,9729);e.texParameteri(3553,10241,9729);e.texParameteri(3553,10242,33071);e.texParameteri(3553,10243,33071);a.a.set(f,{qb:g,Wg:9729,Yg:9729})}}k=Sm.prototype;k.Xe=function(a){return a instanceof ej?new Jm(this,a):a instanceof F?new Pm(this,a):a instanceof I?new Rm(this,a):null};function Um(a,b,c){var d=a.i;if(Ya(d,b)){a=a.c;var e=c.viewState;d.b(new qh(b,new Cm(a,e.center,e.resolution,e.rotation,c.size,c.extent,c.pixelRatio),c,null,a))}}
k.ka=function(){var a=this.f;a.isContextLost()||this.a.forEach(function(b){b&&a.deleteTexture(b.qb)});Ta(this.c);Jh.prototype.ka.call(this)};k.Gj=function(a,b){for(var c=this.f,d;1024<this.a.wc()-this.l;){if(d=this.a.b.pc)c.deleteTexture(d.qb);else if(+this.a.b.Mb==b.index)break;else--this.l;this.a.pop()}};k.Y=function(){return"webgl"};k.Pm=function(a){a.preventDefault();this.a.clear();this.l=0;a=this.g;for(var b in a)a[b].zf()};k.Qm=function(){Tm(this);this.i.render()};
function Tm(a){a=a.f;a.activeTexture(33984);a.blendFuncSeparate(770,771,1,771);a.disable(2884);a.disable(2929);a.disable(3089);a.disable(2960)}
k.Ce=function(a){var b=this.c,c=this.f;if(c.isContextLost())return!1;if(!a)return this.j&&(this.b.style.display="none",this.j=!1),!1;this.v=a.focus;this.a.set((-a.index).toString(),null);++this.l;Um(this,"precompose",a);var d=[],e=a.layerStatesArray;nb(e);var f=a.viewState.resolution,g,h,l,m;g=0;for(h=e.length;g<h;++g)m=e[g],sh(m,f)&&"ready"==m.S&&(l=Mh(this,m.layer),l.Af(a,m,b)&&d.push(m));e=a.size[0]*a.pixelRatio;f=a.size[1]*a.pixelRatio;if(this.b.width!=e||this.b.height!=f)this.b.width=e,this.b.height=
f;c.bindFramebuffer(36160,null);c.clearColor(0,0,0,0);c.clear(16384);c.enable(3042);c.viewport(0,0,this.b.width,this.b.height);g=0;for(h=d.length;g<h;++g)m=d[g],l=Mh(this,m.layer),l.vh(a,m,b);this.j||(this.b.style.display="",this.j=!0);Kh(a);1024<this.a.wc()-this.l&&a.postRenderFunctions.push(this.Gj.bind(this));this.o.Ya()||(a.postRenderFunctions.push(this.C),a.animate=!0);Um(this,"postcompose",a);Nh(this,a);a.postRenderFunctions.push(Lh)};
k.sa=function(a,b,c,d,e,f){var g;if(this.f.isContextLost())return!1;var h=b.viewState,l=b.layerStatesArray,m;for(m=l.length-1;0<=m;--m){g=l[m];var n=g.layer;if(sh(g,h.resolution)&&e.call(f,n)&&(g=Mh(this,n).sa(a,b,c,d)))return g}};k.sh=function(a,b,c,d){var e=!1;if(this.f.isContextLost())return!1;var f=b.viewState,g=b.layerStatesArray,h;for(h=g.length-1;0<=h;--h){var l=g[h],m=l.layer;if(sh(l,f.resolution)&&c.call(d,m)&&(e=Mh(this,m).le(a,b)))return!0}return e};
k.rh=function(a,b,c,d,e){if(this.f.isContextLost())return!1;var f=b.viewState,g,h=b.layerStatesArray,l;for(l=h.length-1;0<=l;--l){g=h[l];var m=g.layer;if(sh(g,f.resolution)&&e.call(d,m)&&(g=Mh(this,m).Cc(a,b,c,d)))return g}};var Vm=["canvas","webgl","dom"];
function Q(a){bb.call(this);var b=Wm(a);this.rb=void 0!==a.loadTilesWhileAnimating?a.loadTilesWhileAnimating:!1;this.Hc=void 0!==a.loadTilesWhileInteracting?a.loadTilesWhileInteracting:!1;this.Oe=void 0!==a.pixelRatio?a.pixelRatio:$f;this.Ne=b.logos;this.W=function(){this.i=void 0;this.Uo.call(this,Date.now())}.bind(this);this.Sa=ch();this.Pe=ch();this.cb=0;this.f=null;this.za=Jb();this.C=this.P=null;this.a=document.createElement("DIV");this.a.className="ol-viewport"+(eg?" ol-touch":"");this.a.style.position=
"relative";this.a.style.overflow="hidden";this.a.style.width="100%";this.a.style.height="100%";this.a.style.msTouchAction="none";this.a.style.touchAction="none";this.A=document.createElement("DIV");this.A.className="ol-overlaycontainer";this.a.appendChild(this.A);this.v=document.createElement("DIV");this.v.className="ol-overlaycontainer-stopevent";a=["click","dblclick","mousedown","touchstart","mspointerdown",Yg,"mousewheel","wheel"];for(var c=0,d=a.length;c<d;++c)B(this.v,a[c],Va);this.a.appendChild(this.v);
this.na=new Qg(this);for(var e in ah)B(this.na,ah[e],this.Pg,this);this.ia=b.keyboardEventTarget;this.s=null;B(this.a,"wheel",this.Oc,this);B(this.a,"mousewheel",this.Oc,this);this.o=b.controls;this.l=b.interactions;this.j=b.overlays;this.Cf={};this.D=new b.Wo(this.a,this);this.T=null;this.S=[];this.oa=[];this.Ba=new Th(this.Bk.bind(this),this.hl.bind(this));this.Ee={};B(this,db("layergroup"),this.Ok,this);B(this,db("view"),this.il,this);B(this,db("size"),this.el,this);B(this,db("target"),this.gl,
this);this.G(b.values);this.o.forEach(function(a){a.setMap(this)},this);B(this.o,"add",function(a){a.element.setMap(this)},this);B(this.o,"remove",function(a){a.element.setMap(null)},this);this.l.forEach(function(a){a.setMap(this)},this);B(this.l,"add",function(a){a.element.setMap(this)},this);B(this.l,"remove",function(a){a.element.setMap(null)},this);this.j.forEach(this.mg,this);B(this.j,"add",function(a){this.mg(a.element)},this);B(this.j,"remove",function(a){var b=a.element.Xa();void 0!==b&&delete this.Cf[b.toString()];
a.element.setMap(null)},this)}x(Q,bb);k=Q.prototype;k.uj=function(a){this.o.push(a)};k.vj=function(a){this.l.push(a)};k.kg=function(a){this.xc().Tc().push(a)};k.lg=function(a){this.j.push(a)};k.mg=function(a){var b=a.Xa();void 0!==b&&(this.Cf[b.toString()]=a);a.setMap(this)};k.Wa=function(a){this.render();Array.prototype.push.apply(this.S,arguments)};
k.ka=function(){Ta(this.na);Ta(this.D);Qa(this.a,"wheel",this.Oc,this);Qa(this.a,"mousewheel",this.Oc,this);void 0!==this.c&&(pa.removeEventListener("resize",this.c,!1),this.c=void 0);this.i&&(pa.cancelAnimationFrame(this.i),this.i=void 0);this.fh(null);bb.prototype.ka.call(this)};k.kd=function(a,b,c,d,e){if(this.f)return a=this.Ma(a),this.D.sa(a,this.f,b,void 0!==c?c:null,void 0!==d?d:rc,void 0!==e?e:null)};
k.Tl=function(a,b,c,d,e){if(this.f)return this.D.rh(a,this.f,b,void 0!==c?c:null,void 0!==d?d:rc,void 0!==e?e:null)};k.kl=function(a,b,c){if(!this.f)return!1;a=this.Ma(a);return this.D.sh(a,this.f,void 0!==b?b:rc,void 0!==c?c:null)};k.Wj=function(a){return this.Ma(this.Td(a))};k.Td=function(a){var b=this.a.getBoundingClientRect();a=a.changedTouches?a.changedTouches[0]:a;return[a.clientX-b.left,a.clientY-b.top]};k.tf=function(){return this.get("target")};
k.yc=function(){var a=this.tf();return void 0!==a?"string"===typeof a?document.getElementById(a):a:null};k.Ma=function(a){var b=this.f;return b?hh(b.pixelToCoordinateTransform,a.slice()):null};k.Uj=function(){return this.o};k.nk=function(){return this.j};k.mk=function(a){a=this.Cf[a.toString()];return void 0!==a?a:null};k.ak=function(){return this.l};k.xc=function(){return this.get("layergroup")};k.eh=function(){return this.xc().Tc()};
k.Ga=function(a){var b=this.f;return b?hh(b.coordinateToPixelTransform,a.slice(0,2)):null};k.Za=function(){return this.get("size")};k.aa=function(){return this.get("view")};k.Dk=function(){return this.a};k.Bk=function(a,b,c,d){var e=this.f;if(!(e&&b in e.wantedTiles&&e.wantedTiles[b][a.ma.toString()]))return Infinity;a=c[0]-e.focus[0];c=c[1]-e.focus[1];return 65536*Math.log(d)+Math.sqrt(a*a+c*c)/d};k.Oc=function(a,b){var c=new Og(b||a.type,this,a);this.Pg(c)};
k.Pg=function(a){if(this.f){this.T=a.coordinate;a.frameState=this.f;var b=this.l.a,c;if(!1!==this.b(a))for(c=b.length-1;0<=c;c--){var d=b[c];if(d.f()&&!d.handleEvent(a))break}}};k.cl=function(){var a=this.f,b=this.Ba;if(!b.Ya()){var c=16,d=c;if(a){var e=a.viewHints;e[0]&&(c=this.rb?8:0,d=2);e[1]&&(c=this.Hc?8:0,d=2)}b.i<c&&(Sh(b),Uh(b,c,d))}b=this.oa;c=0;for(d=b.length;c<d;++c)b[c](this,a);b.length=0};k.el=function(){this.render()};
k.gl=function(){var a;this.tf()&&(a=this.yc());if(this.s){for(var b=0,c=this.s.length;b<c;++b)Ka(this.s[b]);this.s=null}a?(a.appendChild(this.a),a=this.ia?this.ia:a,this.s=[B(a,"keydown",this.Oc,this),B(a,"keypress",this.Oc,this)],this.c||(this.c=this.Xc.bind(this),pa.addEventListener("resize",this.c,!1))):(Me(this.a),void 0!==this.c&&(pa.removeEventListener("resize",this.c,!1),this.c=void 0));this.Xc()};k.hl=function(){this.render()};k.jl=function(){this.render()};
k.il=function(){this.P&&(Ka(this.P),this.P=null);var a=this.aa();a&&(this.P=B(a,"propertychange",this.jl,this));this.render()};k.Pk=function(){this.render()};k.Qk=function(){this.render()};k.Ok=function(){this.C&&(this.C.forEach(Ka),this.C=null);var a=this.xc();a&&(this.C=[B(a,"propertychange",this.Qk,this),B(a,"change",this.Pk,this)]);this.render()};k.Vo=function(){this.i&&pa.cancelAnimationFrame(this.i);this.W()};k.render=function(){void 0===this.i&&(this.i=pa.requestAnimationFrame(this.W))};
k.Oo=function(a){return this.o.remove(a)};k.Po=function(a){return this.l.remove(a)};k.Ro=function(a){return this.xc().Tc().remove(a)};k.So=function(a){return this.j.remove(a)};
k.Uo=function(a){var b,c,d,e=this.Za(),f=this.aa(),g=Jb(),h=null;if(void 0!==e&&0<e[0]&&0<e[1]&&f&&Kd(f)){var h=Gd(f,this.f?this.f.viewHints:void 0),l=this.xc().hf(),m={};b=0;for(c=l.length;b<c;++b)m[t(l[b].layer)]=l[b];d=f.V();h={animate:!1,attributions:{},coordinateToPixelTransform:this.Sa,extent:g,focus:this.T?this.T:d.center,index:this.cb++,layerStates:m,layerStatesArray:l,logos:Ca({},this.Ne),pixelRatio:this.Oe,pixelToCoordinateTransform:this.Pe,postRenderFunctions:[],size:e,skippedFeatureUids:this.Ee,
tileQueue:this.Ba,time:a,usedTiles:{},viewState:d,viewHints:h,wantedTiles:{}}}if(h){a=this.S;b=e=0;for(c=a.length;b<c;++b)f=a[b],f(this,h)&&(a[e++]=f);a.length=e;h.extent=mc(d.center,d.resolution,d.rotation,h.size,g)}this.f=h;this.D.Ce(h);h&&(h.animate&&this.render(),Array.prototype.push.apply(this.oa,h.postRenderFunctions),0!==this.S.length||h.viewHints[0]||h.viewHints[1]||$b(h.extent,this.za)||(this.b(new Oe("moveend",this,h)),Ob(h.extent,this.za)));this.b(new Oe("postrender",this,h));Mf(this.cl,
this)};k.ji=function(a){this.set("layergroup",a)};k.Wf=function(a){this.set("size",a)};k.fh=function(a){this.set("target",a)};k.kp=function(a){this.set("view",a)};k.ti=function(a){a=t(a).toString();this.Ee[a]=!0;this.render()};
k.Xc=function(){var a=this.yc();if(a){var b=pa.getComputedStyle(a);this.Wf([a.offsetWidth-parseFloat(b.borderLeftWidth)-parseFloat(b.paddingLeft)-parseFloat(b.paddingRight)-parseFloat(b.borderRightWidth),a.offsetHeight-parseFloat(b.borderTopWidth)-parseFloat(b.paddingTop)-parseFloat(b.paddingBottom)-parseFloat(b.borderBottomWidth)])}else this.Wf(void 0)};k.wi=function(a){a=t(a).toString();delete this.Ee[a];this.render()};
function Wm(a){var b=null;void 0!==a.keyboardEventTarget&&(b="string"===typeof a.keyboardEventTarget?document.getElementById(a.keyboardEventTarget):a.keyboardEventTarget);var c={},d={};if(void 0===a.logo||"boolean"===typeof a.logo&&a.logo)d["data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAHGAAABxgEXwfpGAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAhNQTFRF////AP//AICAgP//AFVVQECA////K1VVSbbbYL/fJ05idsTYJFtbbcjbJllmZszWWMTOIFhoHlNiZszTa9DdUcHNHlNlV8XRIVdiasrUHlZjIVZjaMnVH1RlIFRkH1RkH1ZlasvYasvXVsPQH1VkacnVa8vWIVZjIFRjVMPQa8rXIVVkXsXRsNveIFVkIFZlIVVj3eDeh6GmbMvXH1ZkIFRka8rWbMvXIFVkIFVjIFVkbMvWH1VjbMvWIFVlbcvWIFVla8vVIFVkbMvWbMvVH1VkbMvWIFVlbcvWIFVkbcvVbMvWjNPbIFVkU8LPwMzNIFVkbczWIFVkbsvWbMvXIFVkRnB8bcvW2+TkW8XRIFVkIlZlJVloJlpoKlxrLl9tMmJwOWd0Omh1RXF8TneCT3iDUHiDU8LPVMLPVcLPVcPQVsPPVsPQV8PQWMTQWsTQW8TQXMXSXsXRX4SNX8bSYMfTYcfTYsfTY8jUZcfSZsnUaIqTacrVasrVa8jTa8rWbI2VbMvWbcvWdJObdcvUdszUd8vVeJaee87Yfc3WgJyjhqGnitDYjaarldPZnrK2oNbborW5o9bbo9fbpLa6q9ndrL3ArtndscDDutzfu8fJwN7gwt7gxc/QyuHhy+HizeHi0NfX0+Pj19zb1+Tj2uXk29/e3uLg3+Lh3+bl4uXj4ufl4+fl5Ofl5ufl5ujm5+jmySDnBAAAAFp0Uk5TAAECAgMEBAYHCA0NDg4UGRogIiMmKSssLzU7PkJJT1JTVFliY2hrdHZ3foSFhYeJjY2QkpugqbG1tre5w8zQ09XY3uXn6+zx8vT09vf4+Pj5+fr6/P39/f3+gz7SsAAAAVVJREFUOMtjYKA7EBDnwCPLrObS1BRiLoJLnte6CQy8FLHLCzs2QUG4FjZ5GbcmBDDjxJBXDWxCBrb8aM4zbkIDzpLYnAcE9VXlJSWlZRU13koIeW57mGx5XjoMZEUqwxWYQaQbSzLSkYGfKFSe0QMsX5WbjgY0YS4MBplemI4BdGBW+DQ11eZiymfqQuXZIjqwyadPNoSZ4L+0FVM6e+oGI6g8a9iKNT3o8kVzNkzRg5lgl7p4wyRUL9Yt2jAxVh6mQCogae6GmflI8p0r13VFWTHBQ0rWPW7ahgWVcPm+9cuLoyy4kCJDzCm6d8PSFoh0zvQNC5OjDJhQopPPJqph1doJBUD5tnkbZiUEqaCnB3bTqLTFG1bPn71kw4b+GFdpLElKIzRxxgYgWNYc5SCENVHKeUaltHdXx0dZ8uBI1hJ2UUDgq82CM2MwKeibqAvSO7MCABq0wXEPiqWEAAAAAElFTkSuQmCC"]=
"http://openlayers.org/";else{var e=a.logo;"string"===typeof e?d[e]="":e instanceof HTMLElement?d[t(e).toString()]=e:fa(e)&&(d[e.src]=e.href)}e=a.layers instanceof Vi?a.layers:new Vi({layers:a.layers});c.layergroup=e;c.target=a.target;c.view=void 0!==a.view?a.view:new Fd;var e=Jh,f;void 0!==a.renderer?Array.isArray(a.renderer)?f=a.renderer:"string"===typeof a.renderer&&(f=[a.renderer]):f=Vm;var g,h;g=0;for(h=f.length;g<h;++g){var l=f[g];if("canvas"==l){if(bg){e=Ql;break}}else if("dom"==l){e=Yl;break}else if("webgl"==
l&&Vf){e=Sm;break}}var m;void 0!==a.controls?m=Array.isArray(a.controls)?new be(a.controls.slice()):a.controls:m=Df();var n;void 0!==a.interactions?n=Array.isArray(a.interactions)?new be(a.interactions.slice()):a.interactions:n=Ui();a=void 0!==a.overlays?Array.isArray(a.overlays)?new be(a.overlays.slice()):a.overlays:new be;return{controls:m,interactions:n,keyboardEventTarget:b,logos:d,overlays:a,Wo:e,values:c}}dj();function Xm(a){bb.call(this);this.j=a.id;this.o=void 0!==a.insertFirst?a.insertFirst:!0;this.s=void 0!==a.stopEvent?a.stopEvent:!0;this.f=document.createElement("DIV");this.f.className="ol-overlay-container";this.f.style.position="absolute";this.autoPan=void 0!==a.autoPan?a.autoPan:!1;this.i=void 0!==a.autoPanAnimation?a.autoPanAnimation:{};this.l=void 0!==a.autoPanMargin?a.autoPanMargin:20;this.a={Md:"",fe:"",De:"",Fe:"",visible:!0};this.c=null;B(this,db("element"),this.Jk,this);B(this,db("map"),
this.Vk,this);B(this,db("offset"),this.Zk,this);B(this,db("position"),this.al,this);B(this,db("positioning"),this.bl,this);void 0!==a.element&&this.fi(a.element);this.li(void 0!==a.offset?a.offset:[0,0]);this.oi(void 0!==a.positioning?a.positioning:"top-left");void 0!==a.position&&this.uf(a.position)}x(Xm,bb);k=Xm.prototype;k.Sd=function(){return this.get("element")};k.Xa=function(){return this.j};k.he=function(){return this.get("map")};k.Kg=function(){return this.get("offset")};k.gh=function(){return this.get("position")};
k.Lg=function(){return this.get("positioning")};k.Jk=function(){Ne(this.f);var a=this.Sd();a&&this.f.appendChild(a)};k.Vk=function(){this.c&&(Me(this.f),Ka(this.c),this.c=null);var a=this.he();a&&(this.c=B(a,"postrender",this.render,this),Ym(this),a=this.s?a.v:a.A,this.o?a.insertBefore(this.f,a.childNodes[0]||null):a.appendChild(this.f))};k.render=function(){Ym(this)};k.Zk=function(){Ym(this)};
k.al=function(){Ym(this);if(void 0!==this.get("position")&&this.autoPan){var a=this.he();if(void 0!==a&&a.yc()){var b=Zm(a.yc(),a.Za()),c=this.Sd(),d=c.offsetWidth,e=c.currentStyle||pa.getComputedStyle(c),d=d+(parseInt(e.marginLeft,10)+parseInt(e.marginRight,10)),e=c.offsetHeight,f=c.currentStyle||pa.getComputedStyle(c),e=e+(parseInt(f.marginTop,10)+parseInt(f.marginBottom,10)),g=Zm(c,[d,e]),c=this.l;Sb(b,g)||(d=g[0]-b[0],e=b[2]-g[2],f=g[1]-b[1],g=b[3]-g[3],b=[0,0],0>d?b[0]=d-c:0>e&&(b[0]=Math.abs(e)+
c),0>f?b[1]=f-c:0>g&&(b[1]=Math.abs(g)+c),0===b[0]&&0===b[1])||(c=a.aa().ab(),d=a.Ga(c),b=[d[0]+b[0],d[1]+b[1]],this.i&&(this.i.source=c,a.Wa(Td(this.i))),a.aa().nb(a.Ma(b)))}}};k.bl=function(){Ym(this)};k.fi=function(a){this.set("element",a)};k.setMap=function(a){this.set("map",a)};k.li=function(a){this.set("offset",a)};k.uf=function(a){this.set("position",a)};function Zm(a,b){var c=a.getBoundingClientRect(),d=c.left+pa.pageXOffset,c=c.top+pa.pageYOffset;return[d,c,d+b[0],c+b[1]]}
k.oi=function(a){this.set("positioning",a)};function $m(a,b){a.a.visible!==b&&(a.f.style.display=b?"":"none",a.a.visible=b)}
function Ym(a){var b=a.he(),c=a.gh();if(void 0!==b&&b.f&&void 0!==c){var c=b.Ga(c),d=b.Za(),b=a.f.style,e=a.Kg(),f=a.Lg(),g=e[0],e=e[1];if("bottom-right"==f||"center-right"==f||"top-right"==f)""!==a.a.fe&&(a.a.fe=b.left=""),g=Math.round(d[0]-c[0]-g)+"px",a.a.De!=g&&(a.a.De=b.right=g);else{""!==a.a.De&&(a.a.De=b.right="");if("bottom-center"==f||"center-center"==f||"top-center"==f)g-=a.f.offsetWidth/2;g=Math.round(c[0]+g)+"px";a.a.fe!=g&&(a.a.fe=b.left=g)}if("bottom-left"==f||"bottom-center"==f||"bottom-right"==
f)""!==a.a.Fe&&(a.a.Fe=b.top=""),c=Math.round(d[1]-c[1]-e)+"px",a.a.Md!=c&&(a.a.Md=b.bottom=c);else{""!==a.a.Md&&(a.a.Md=b.bottom="");if("center-left"==f||"center-center"==f||"center-right"==f)e-=a.f.offsetHeight/2;c=Math.round(c[1]+e)+"px";a.a.Fe!=c&&(a.a.Fe=b.top=c)}$m(a,!0)}else $m(a,!1)};function an(a){a=a?a:{};this.l=void 0!==a.collapsed?a.collapsed:!0;this.o=void 0!==a.collapsible?a.collapsible:!0;this.o||(this.l=!1);var b=void 0!==a.className?a.className:"ol-overviewmap",c=void 0!==a.tipLabel?a.tipLabel:"Overview map",d=void 0!==a.collapseLabel?a.collapseLabel:"\u00ab";"string"===typeof d?(this.j=document.createElement("span"),this.j.textContent=d):this.j=d;d=void 0!==a.label?a.label:"\u00bb";"string"===typeof d?(this.v=document.createElement("span"),this.v.textContent=d):this.v=
d;var e=this.o&&!this.l?this.j:this.v,d=document.createElement("button");d.setAttribute("type","button");d.title=c;d.appendChild(e);B(d,"click",this.gm,this);c=document.createElement("DIV");c.className="ol-overviewmap-map";var f=this.f=new Q({controls:new be,interactions:new be,target:c,view:a.view});a.layers&&a.layers.forEach(function(a){f.kg(a)},this);e=document.createElement("DIV");e.className="ol-overviewmap-box";e.style.boxSizing="border-box";this.A=new Xm({position:[0,0],positioning:"bottom-left",
element:e});this.f.lg(this.A);e=document.createElement("div");e.className=b+" ol-unselectable ol-control"+(this.l&&this.o?" ol-collapsed":"")+(this.o?"":" ol-uncollapsible");e.appendChild(c);e.appendChild(d);Pe.call(this,{element:e,render:a.render?a.render:bn,target:a.target})}x(an,Pe);k=an.prototype;
k.setMap=function(a){var b=this.a;a!==b&&(b&&(b=b.aa())&&Qa(b,db("rotation"),this.de,this),Pe.prototype.setMap.call(this,a),a&&(this.s.push(B(a,"propertychange",this.Wk,this)),0===this.f.eh().dc()&&this.f.ji(a.xc()),a=a.aa()))&&(B(a,db("rotation"),this.de,this),Kd(a)&&(this.f.Xc(),cn(this)))};k.Wk=function(a){"view"===a.key&&((a=a.oldValue)&&Qa(a,db("rotation"),this.de,this),a=this.a.aa(),B(a,db("rotation"),this.de,this))};k.de=function(){this.f.aa().ie(this.a.aa().La())};
function bn(){var a=this.a,b=this.f;if(a.f&&b.f){var c=a.Za(),a=a.aa().Kc(c),d=b.Za(),c=b.aa().Kc(d),e=b.Ga(fc(a)),f=b.Ga(dc(a)),b=Math.abs(e[0]-f[0]),e=Math.abs(e[1]-f[1]),f=d[0],d=d[1];b<.1*f||e<.1*d||b>.75*f||e>.75*d?cn(this):Sb(c,a)||(a=this.f,c=this.a.aa(),a.aa().nb(c.ab()))}dn(this)}function cn(a){var b=a.a;a=a.f;var c=b.Za(),b=b.aa().Kc(c),c=a.Za();a=a.aa();pc(b,1/(.1*Math.pow(2,Math.log(7.5)/Math.LN2/2)));a.cf(b,c)}
function dn(a){var b=a.a,c=a.f;if(b.f&&c.f){var d=b.Za(),e=b.aa(),f=c.aa();c.Za();var c=e.La(),b=a.A,g=a.A.Sd(),e=e.Kc(d),d=f.$(),f=cc(e),e=ec(e),h;if(a=a.a.aa().ab())h=[f[0]-a[0],f[1]-a[1]],Db(h,c),yb(h,a);b.uf(h);g&&(g.style.width=Math.abs((f[0]-e[0])/d)+"px",g.style.height=Math.abs((e[1]-f[1])/d)+"px")}}k.gm=function(a){a.preventDefault();en(this)};
function en(a){a.element.classList.toggle("ol-collapsed");a.l?Le(a.j,a.v):Le(a.v,a.j);a.l=!a.l;var b=a.f;a.l||b.f||(b.Xc(),cn(a),Pa(b,"postrender",function(){dn(this)},a))}k.fm=function(){return this.o};k.im=function(a){this.o!==a&&(this.o=a,this.element.classList.toggle("ol-uncollapsible"),!a&&this.l&&en(this))};k.hm=function(a){this.o&&this.l!==a&&en(this)};k.em=function(){return this.l};k.pk=function(){return this.f};function fn(a){a=a?a:{};var b=void 0!==a.className?a.className:"ol-scale-line";this.o=document.createElement("DIV");this.o.className=b+"-inner";this.f=document.createElement("DIV");this.f.className=b+" ol-unselectable";this.f.appendChild(this.o);this.v=null;this.j=void 0!==a.minWidth?a.minWidth:64;this.l=!1;this.D=void 0;this.A="";Pe.call(this,{element:this.f,render:a.render?a.render:gn,target:a.target});B(this,db("units"),this.S,this);this.C(a.units||"metric")}x(fn,Pe);var hn=[1,2,5];
fn.prototype.xb=function(){return this.get("units")};function gn(a){(a=a.frameState)?this.v=a.viewState:this.v=null;jn(this)}fn.prototype.S=function(){jn(this)};fn.prototype.C=function(a){this.set("units",a)};
function jn(a){var b=a.v;if(b){var c=b.projection,d=c.ac(),b=c.getPointResolution(b.resolution,b.center)*d,d=a.j*b,c="",e=a.xb();"degrees"==e?(c=vc.degrees,b/=c,d<c/60?(c="\u2033",b*=3600):d<c?(c="\u2032",b*=60):c="\u00b0"):"imperial"==e?.9144>d?(c="in",b/=.0254):1609.344>d?(c="ft",b/=.3048):(c="mi",b/=1609.344):"nautical"==e?(b/=1852,c="nm"):"metric"==e?1>d?(c="mm",b*=1E3):1E3>d?c="m":(c="km",b/=1E3):"us"==e&&(.9144>d?(c="in",b*=39.37):1609.344>d?(c="ft",b/=.30480061):(c="mi",b/=1609.3472));for(var e=
3*Math.floor(Math.log(a.j*b)/Math.log(10)),f;;){f=hn[(e%3+3)%3]*Math.pow(10,Math.floor(e/3));d=Math.round(f/b);if(isNaN(d)){a.f.style.display="none";a.l=!1;return}if(d>=a.j)break;++e}b=f+" "+c;a.A!=b&&(a.o.innerHTML=b,a.A=b);a.D!=d&&(a.o.style.width=d+"px",a.D=d);a.l||(a.f.style.display="",a.l=!0)}else a.l&&(a.f.style.display="none",a.l=!1)};function kn(a){a=a?a:{};this.f=void 0;this.l=ln;this.v=[];this.D=this.j=0;this.T=null;this.ia=!1;this.W=void 0!==a.duration?a.duration:200;var b=void 0!==a.className?a.className:"ol-zoomslider",c=document.createElement("button");c.setAttribute("type","button");c.className=b+"-thumb ol-unselectable";var d=document.createElement("div");d.className=b+" ol-unselectable ol-control";d.appendChild(c);this.o=new Ig(d);B(this.o,sg,this.Ik,this);B(this.o,tg,this.Ng,this);B(this.o,ug,this.Og,this);B(d,"click",
this.Hk,this);B(c,"click",Va);Pe.call(this,{element:d,render:a.render?a.render:mn})}x(kn,Pe);kn.prototype.ka=function(){Ta(this.o);Pe.prototype.ka.call(this)};var ln=0;k=kn.prototype;k.setMap=function(a){Pe.prototype.setMap.call(this,a);a&&a.render()};
function mn(a){if(a.frameState){if(!this.ia){var b=this.element,c=b.offsetWidth,d=b.offsetHeight,e=b.firstElementChild,f=pa.getComputedStyle(e),b=e.offsetWidth+parseFloat(f.marginRight)+parseFloat(f.marginLeft),e=e.offsetHeight+parseFloat(f.marginTop)+parseFloat(f.marginBottom);this.T=[b,e];c>d?(this.l=1,this.D=c-b):(this.l=ln,this.j=d-e);this.ia=!0}a=a.frameState.viewState.resolution;a!==this.f&&(this.f=a,nn(this,a))}}
k.Hk=function(a){var b=this.a,c=b.aa(),d=c.$();b.Wa(Vd({resolution:d,duration:this.W,easing:Nd}));a=on(this,sa(1===this.l?(a.offsetX-this.T[0]/2)/this.D:(a.offsetY-this.T[1]/2)/this.j,0,1));c.Vb(c.constrainResolution(a))};
k.Ik=function(a){if(!this.A&&a.b.target===this.element.firstElementChild&&(Ld(this.a.aa(),1),this.C=a.clientX,this.S=a.clientY,this.A=!0,0===this.v.length)){a=this.Ng;var b=this.Og;this.v.push(B(document,"mousemove",a,this),B(document,"touchmove",a,this),B(document,tg,a,this),B(document,"mouseup",b,this),B(document,"touchend",b,this),B(document,ug,b,this))}};
k.Ng=function(a){if(this.A){var b=this.element.firstElementChild;this.f=on(this,sa(1===this.l?(a.clientX-this.C+parseInt(b.style.left,10))/this.D:(a.clientY-this.S+parseInt(b.style.top,10))/this.j,0,1));this.a.aa().Vb(this.f);nn(this,this.f);this.C=a.clientX;this.S=a.clientY}};k.Og=function(){if(this.A){var a=this.a,b=a.aa();Ld(b,-1);a.Wa(Vd({resolution:this.f,duration:this.W,easing:Nd}));a=b.constrainResolution(this.f);b.Vb(a);this.A=!1;this.S=this.C=void 0;this.v.forEach(Ka);this.v.length=0}};
function nn(a,b){var c;c=1-Jd(a.a.aa())(b);var d=a.element.firstElementChild;1==a.l?d.style.left=a.D*c+"px":d.style.top=a.j*c+"px"}function on(a,b){return Id(a.a.aa())(1-b)};function pn(a){a=a?a:{};this.f=a.extent?a.extent:null;var b=void 0!==a.className?a.className:"ol-zoom-extent",c=void 0!==a.label?a.label:"E",d=void 0!==a.tipLabel?a.tipLabel:"Fit to extent",e=document.createElement("button");e.setAttribute("type","button");e.title=d;e.appendChild("string"===typeof c?document.createTextNode(c):c);B(e,"click",this.l,this);c=document.createElement("div");c.className=b+" ol-unselectable ol-control";c.appendChild(e);Pe.call(this,{element:c,target:a.target})}x(pn,Pe);
pn.prototype.l=function(a){a.preventDefault();var b=this.a;a=b.aa();var c=this.f?this.f:a.l.H(),b=b.Za();a.cf(c,b)};function qn(a){bb.call(this);a=a?a:{};this.a=null;B(this,db("tracking"),this.Il,this);this.rf(void 0!==a.tracking?a.tracking:!1)}x(qn,bb);k=qn.prototype;k.ka=function(){this.rf(!1);bb.prototype.ka.call(this)};
k.co=function(a){if(null!==a.alpha){var b=wa(a.alpha);this.set("alpha",b);"boolean"===typeof a.absolute&&a.absolute?this.set("heading",b):"number"===typeof a.webkitCompassHeading&&-1!=a.webkitCompassAccuracy&&this.set("heading",wa(a.webkitCompassHeading))}null!==a.beta&&this.set("beta",wa(a.beta));null!==a.gamma&&this.set("gamma",wa(a.gamma));this.u()};k.Oj=function(){return this.get("alpha")};k.Rj=function(){return this.get("beta")};k.Yj=function(){return this.get("gamma")};k.Hl=function(){return this.get("heading")};
k.$g=function(){return this.get("tracking")};k.Il=function(){if(cg){var a=this.$g();a&&!this.a?this.a=B(pa,"deviceorientation",this.co,this):a||null===this.a||(Ka(this.a),this.a=null)}};k.rf=function(a){this.set("tracking",a)};function rn(){this.defaultDataProjection=null}function sn(a,b,c){var d;c&&(d={dataProjection:c.dataProjection?c.dataProjection:a.Oa(b),featureProjection:c.featureProjection});return tn(a,d)}function tn(a,b){var c;b&&(c={featureProjection:b.featureProjection,dataProjection:b.dataProjection?b.dataProjection:a.defaultDataProjection,rightHanded:b.rightHanded},b.decimals&&(c.decimals=b.decimals));return c}
function un(a,b,c){var d=c?zc(c.featureProjection):null,e=c?zc(c.dataProjection):null,f;d&&e&&!Pc(d,e)?a instanceof Uc?f=(b?a.clone():a).kb(b?d:e,b?e:d):f=Tc(b?a.slice():a,b?d:e,b?e:d):f=a;if(b&&c&&c.decimals){var g=Math.pow(10,c.decimals);a=function(a){for(var b=0,c=a.length;b<c;++b)a[b]=Math.round(a[b]*g)/g;return a};Array.isArray(f)?a(f):f.rc(a)}return f};function vn(){this.defaultDataProjection=null}x(vn,rn);function wn(a){return fa(a)?a:"string"===typeof a?(a=JSON.parse(a))?a:null:null}k=vn.prototype;k.Y=function(){return"json"};k.Sb=function(a,b){return this.Uc(wn(a),sn(this,a,b))};k.Fa=function(a,b){return this.Jf(wn(a),sn(this,a,b))};k.Vc=function(a,b){return this.Rh(wn(a),sn(this,a,b))};k.Oa=function(a){return this.Yh(wn(a))};k.Dd=function(a,b){return JSON.stringify(this.Yc(a,b))};k.Yb=function(a,b){return JSON.stringify(this.Ie(a,b))};
k.Zc=function(a,b){return JSON.stringify(this.Ke(a,b))};function xn(a,b,c,d,e,f){var g=NaN,h=NaN,l=(c-b)/d;if(0!==l)if(1==l)g=a[b],h=a[b+1];else if(2==l)g=(1-e)*a[b]+e*a[b+d],h=(1-e)*a[b+1]+e*a[b+d+1];else{var h=a[b],l=a[b+1],m=0,g=[0],n;for(n=b+d;n<c;n+=d){var p=a[n],q=a[n+1],m=m+Math.sqrt((p-h)*(p-h)+(q-l)*(q-l));g.push(m);h=p;l=q}c=e*m;l=0;m=g.length;for(n=!1;l<m;)e=l+(m-l>>1),h=+fb(g[e],c),0>h?l=e+1:(m=e,n=!h);e=n?l:~l;0>e?(c=(c-g[-e-2])/(g[-e-1]-g[-e-2]),b+=(-e-2)*d,g=ya(a[b],a[b+d],c),h=ya(a[b+1],a[b+d+1],c)):(g=a[b+e*d],h=a[b+e*d+1])}return f?(f[0]=
g,f[1]=h,f):[g,h]}function yn(a,b,c,d,e,f){if(c==b)return null;if(e<a[b+d-1])return f?(c=a.slice(b,b+d),c[d-1]=e,c):null;if(a[c-1]<e)return f?(c=a.slice(c-d,c),c[d-1]=e,c):null;if(e==a[b+d-1])return a.slice(b,b+d);b/=d;for(c/=d;b<c;)f=b+c>>1,e<a[(f+1)*d-1]?c=f:b=f+1;c=a[b*d-1];if(e==c)return a.slice((b-1)*d,(b-1)*d+d);f=(e-c)/(a[(b+1)*d-1]-c);c=[];var g;for(g=0;g<d-1;++g)c.push(ya(a[(b-1)*d+g],a[b*d+g],f));c.push(e);return c}
function zn(a,b,c,d,e,f){var g=0;if(f)return yn(a,g,b[b.length-1],c,d,e);if(d<a[c-1])return e?(a=a.slice(0,c),a[c-1]=d,a):null;if(a[a.length-1]<d)return e?(a=a.slice(a.length-c),a[c-1]=d,a):null;e=0;for(f=b.length;e<f;++e){var h=b[e];if(g!=h){if(d<a[g+c-1])break;if(d<=a[h-1])return yn(a,g,h,c,d,!1);g=h}}return null};function R(a,b){Wc.call(this);this.i=null;this.D=this.C=this.j=-1;this.ra(a,b)}x(R,Wc);k=R.prototype;k.wj=function(a){this.B?jb(this.B,a):this.B=a.slice();this.u()};k.clone=function(){var a=new R(null);a.ba(this.f,this.B.slice());return a};k.tb=function(a,b,c,d){if(d<Pb(this.H(),a,b))return d;this.D!=this.g&&(this.C=Math.sqrt(cd(this.B,0,this.B.length,this.a,0)),this.D=this.g);return ed(this.B,0,this.B.length,this.a,this.C,!1,a,b,c,d)};
k.Lj=function(a,b){return td(this.B,0,this.B.length,this.a,a,b)};k.lm=function(a,b){return"XYM"!=this.f&&"XYZM"!=this.f?null:yn(this.B,0,this.B.length,this.a,a,void 0!==b?b:!1)};k.Z=function(){return jd(this.B,0,this.B.length,this.a)};k.Bg=function(a,b){return xn(this.B,0,this.B.length,this.a,a,b)};k.mm=function(){var a=this.B,b=this.a,c=a[0],d=a[1],e=0,f;for(f=0+b;f<this.B.length;f+=b)var g=a[f],h=a[f+1],e=e+Math.sqrt((g-c)*(g-c)+(h-d)*(h-d)),c=g,d=h;return e};
function Gj(a){a.j!=a.g&&(a.i=a.Bg(.5,a.i),a.j=a.g);return a.i}k.Nc=function(a){var b=[];b.length=ld(this.B,0,this.B.length,this.a,a,b,0);a=new R(null);a.ba("XY",b);return a};k.Y=function(){return"LineString"};k.Ka=function(a){return ud(this.B,0,this.B.length,this.a,a)};k.ra=function(a,b){a?(Zc(this,b,a,1),this.B||(this.B=[]),this.B.length=hd(this.B,0,a,this.a),this.u()):this.ba("XY",null)};k.ba=function(a,b){Yc(this,a,b);this.u()};function S(a,b){Wc.call(this);this.i=[];this.j=this.D=-1;this.ra(a,b)}x(S,Wc);k=S.prototype;k.xj=function(a){this.B?jb(this.B,a.la().slice()):this.B=a.la().slice();this.i.push(this.B.length);this.u()};k.clone=function(){var a=new S(null);a.ba(this.f,this.B.slice(),this.i.slice());return a};k.tb=function(a,b,c,d){if(d<Pb(this.H(),a,b))return d;this.j!=this.g&&(this.D=Math.sqrt(dd(this.B,0,this.i,this.a,0)),this.j=this.g);return fd(this.B,0,this.i,this.a,this.D,!1,a,b,c,d)};
k.om=function(a,b,c){return"XYM"!=this.f&&"XYZM"!=this.f||0===this.B.length?null:zn(this.B,this.i,this.a,a,void 0!==b?b:!1,void 0!==c?c:!1)};k.Z=function(){return kd(this.B,0,this.i,this.a)};k.Eb=function(){return this.i};k.fk=function(a){if(0>a||this.i.length<=a)return null;var b=new R(null);b.ba(this.f,this.B.slice(0===a?0:this.i[a-1],this.i[a]));return b};
k.md=function(){var a=this.B,b=this.i,c=this.f,d=[],e=0,f,g;f=0;for(g=b.length;f<g;++f){var h=b[f],l=new R(null);l.ba(c,a.slice(e,h));d.push(l);e=h}return d};function Hj(a){var b=[],c=a.B,d=0,e=a.i;a=a.a;var f,g;f=0;for(g=e.length;f<g;++f){var h=e[f],d=xn(c,d,h,a,.5);jb(b,d);d=h}return b}k.Nc=function(a){var b=[],c=[],d=this.B,e=this.i,f=this.a,g=0,h=0,l,m;l=0;for(m=e.length;l<m;++l){var n=e[l],h=ld(d,g,n,f,a,b,h);c.push(h);g=n}b.length=h;a=new S(null);a.ba("XY",b,c);return a};k.Y=function(){return"MultiLineString"};
k.Ka=function(a){a:{var b=this.B,c=this.i,d=this.a,e=0,f,g;f=0;for(g=c.length;f<g;++f){if(ud(b,e,c[f],d,a)){a=!0;break a}e=c[f]}a=!1}return a};k.ra=function(a,b){if(a){Zc(this,b,a,2);this.B||(this.B=[]);var c=id(this.B,0,a,this.a,this.i);this.B.length=0===c.length?0:c[c.length-1];this.u()}else this.ba("XY",null,this.i)};k.ba=function(a,b,c){Yc(this,a,b);this.i=c;this.u()};
function An(a,b){var c=a.f,d=[],e=[],f,g;f=0;for(g=b.length;f<g;++f){var h=b[f];0===f&&(c=h.f);jb(d,h.la());e.push(d.length)}a.ba(c,d,e)};function T(a,b){Wc.call(this);this.ra(a,b)}x(T,Wc);k=T.prototype;k.zj=function(a){this.B?jb(this.B,a.la()):this.B=a.la().slice();this.u()};k.clone=function(){var a=new T(null);a.ba(this.f,this.B.slice());return a};k.tb=function(a,b,c,d){if(d<Pb(this.H(),a,b))return d;var e=this.B,f=this.a,g,h,l;g=0;for(h=e.length;g<h;g+=f)if(l=va(a,b,e[g],e[g+1]),l<d){d=l;for(l=0;l<f;++l)c[l]=e[g+l];c.length=f}return d};k.Z=function(){return jd(this.B,0,this.B.length,this.a)};
k.rk=function(a){var b=this.B?this.B.length/this.a:0;if(0>a||b<=a)return null;b=new C(null);b.ba(this.f,this.B.slice(a*this.a,(a+1)*this.a));return b};k.je=function(){var a=this.B,b=this.f,c=this.a,d=[],e,f;e=0;for(f=a.length;e<f;e+=c){var g=new C(null);g.ba(b,a.slice(e,e+c));d.push(g)}return d};k.Y=function(){return"MultiPoint"};k.Ka=function(a){var b=this.B,c=this.a,d,e,f,g;d=0;for(e=b.length;d<e;d+=c)if(f=b[d],g=b[d+1],Rb(a,f,g))return!0;return!1};
k.ra=function(a,b){a?(Zc(this,b,a,1),this.B||(this.B=[]),this.B.length=hd(this.B,0,a,this.a),this.u()):this.ba("XY",null)};k.ba=function(a,b){Yc(this,a,b);this.u()};function U(a,b){Wc.call(this);this.i=[];this.D=-1;this.C=null;this.T=this.S=this.P=-1;this.j=null;this.ra(a,b)}x(U,Wc);k=U.prototype;k.Aj=function(a){if(this.B){var b=this.B.length;jb(this.B,a.la());a=a.Eb().slice();var c,d;c=0;for(d=a.length;c<d;++c)a[c]+=b}else this.B=a.la().slice(),a=a.Eb().slice(),this.i.push();this.i.push(a);this.u()};k.clone=function(){for(var a=new U(null),b=this.i.length,c=Array(b),d=0;d<b;++d)c[d]=this.i[d].slice();Bn(a,this.f,this.B.slice(),c);return a};
k.tb=function(a,b,c,d){if(d<Pb(this.H(),a,b))return d;if(this.S!=this.g){var e=this.i,f=0,g=0,h,l;h=0;for(l=e.length;h<l;++h)var m=e[h],g=dd(this.B,f,m,this.a,g),f=m[m.length-1];this.P=Math.sqrt(g);this.S=this.g}e=Ij(this);f=this.i;g=this.a;h=this.P;l=0;var m=[NaN,NaN],n,p;n=0;for(p=f.length;n<p;++n){var q=f[n];d=fd(e,l,q,g,h,!0,a,b,c,d,m);l=q[q.length-1]}return d};
k.Bc=function(a,b){var c;a:{c=Ij(this);var d=this.i,e=0;if(0!==d.length){var f,g;f=0;for(g=d.length;f<g;++f){var h=d[f];if(rd(c,e,h,this.a,a,b)){c=!0;break a}e=h[h.length-1]}}c=!1}return c};k.pm=function(){var a=Ij(this),b=this.i,c=0,d=0,e,f;e=0;for(f=b.length;e<f;++e)var g=b[e],d=d+ad(a,c,g,this.a),c=g[g.length-1];return d};
k.Z=function(a){var b;void 0!==a?(b=Ij(this).slice(),zd(b,this.i,this.a,a)):b=this.B;a=b;b=this.i;var c=this.a,d=0,e=[],f=0,g,h;g=0;for(h=b.length;g<h;++g){var l=b[g];e[f++]=kd(a,d,l,c,e[f]);d=l[l.length-1]}e.length=f;return e};
function Jj(a){if(a.D!=a.g){var b=a.B,c=a.i,d=a.a,e=0,f=[],g,h;g=0;for(h=c.length;g<h;++g){var l=c[g],e=Yb(b,e,l[0],d);f.push((e[0]+e[2])/2,(e[1]+e[3])/2);e=l[l.length-1]}b=Ij(a);c=a.i;d=a.a;g=0;h=[];l=0;for(e=c.length;l<e;++l){var m=c[l];h=sd(b,g,m,d,f,2*l,h);g=m[m.length-1]}a.C=h;a.D=a.g}return a.C}k.ck=function(){var a=new T(null);a.ba("XY",Jj(this).slice());return a};
function Ij(a){if(a.T!=a.g){var b=a.B,c;a:{c=a.i;var d,e;d=0;for(e=c.length;d<e;++d)if(!xd(b,c[d],a.a,void 0)){c=!1;break a}c=!0}c?a.j=b:(a.j=b.slice(),a.j.length=zd(a.j,a.i,a.a));a.T=a.g}return a.j}k.Nc=function(a){var b=[],c=[],d=this.B,e=this.i,f=this.a;a=Math.sqrt(a);var g=0,h=0,l,m;l=0;for(m=e.length;l<m;++l){var n=e[l],p=[],h=md(d,g,n,f,a,b,h,p);c.push(p);g=n[n.length-1]}b.length=h;d=new U(null);Bn(d,"XY",b,c);return d};
k.tk=function(a){if(0>a||this.i.length<=a)return null;var b;0===a?b=0:(b=this.i[a-1],b=b[b.length-1]);a=this.i[a].slice();var c=a[a.length-1];if(0!==b){var d,e;d=0;for(e=a.length;d<e;++d)a[d]-=b}d=new E(null);d.ba(this.f,this.B.slice(b,c),a);return d};k.Wd=function(){var a=this.f,b=this.B,c=this.i,d=[],e=0,f,g,h,l;f=0;for(g=c.length;f<g;++f){var m=c[f].slice(),n=m[m.length-1];if(0!==e)for(h=0,l=m.length;h<l;++h)m[h]-=e;h=new E(null);h.ba(a,b.slice(e,n),m);d.push(h);e=n}return d};k.Y=function(){return"MultiPolygon"};
k.Ka=function(a){a:{var b=Ij(this),c=this.i,d=this.a,e=0,f,g;f=0;for(g=c.length;f<g;++f){var h=c[f];if(vd(b,e,h,d,a)){a=!0;break a}e=h[h.length-1]}a=!1}return a};k.ra=function(a,b){if(a){Zc(this,b,a,3);this.B||(this.B=[]);var c=this.B,d=this.a,e=this.i,f=0,e=e?e:[],g=0,h,l;h=0;for(l=a.length;h<l;++h)f=id(c,f,a[h],d,e[g]),e[g++]=f,f=f[f.length-1];e.length=g;0===e.length?this.B.length=0:(c=e[e.length-1],this.B.length=0===c.length?0:c[c.length-1]);this.u()}else Bn(this,"XY",null,this.i)};
function Bn(a,b,c,d){Yc(a,b,c);a.i=d;a.u()}function Cn(a,b){var c=a.f,d=[],e=[],f,g,h;f=0;for(g=b.length;f<g;++f){var l=b[f];0===f&&(c=l.f);var m=d.length;h=l.Eb();var n,p;n=0;for(p=h.length;n<p;++n)h[n]+=m;jb(d,l.la());e.push(h)}Bn(a,c,d,e)};function Dn(a){a=a?a:{};this.defaultDataProjection=null;this.b=a.geometryName}x(Dn,vn);
function En(a,b){if(!a)return null;var c;if("number"===typeof a.x&&"number"===typeof a.y)c="Point";else if(a.points)c="MultiPoint";else if(a.paths)c=1===a.paths.length?"LineString":"MultiLineString";else if(a.rings){var d=a.rings,e=Fn(a),f=[];c=[];var g,h;g=0;for(h=d.length;g<h;++g){var l=ib(d[g]);wd(l,0,l.length,e.length)?f.push([d[g]]):c.push(d[g])}for(;c.length;){d=c.shift();e=!1;for(g=f.length-1;0<=g;g--)if(Sb((new nd(f[g][0])).H(),(new nd(d)).H())){f[g].push(d);e=!0;break}e||f.push([d.reverse()])}a=
Ca({},a);1===f.length?(c="Polygon",a.rings=f[0]):(c="MultiPolygon",a.rings=f)}return un((0,Gn[c])(a),!1,b)}function Fn(a){var b="XY";!0===a.hasZ&&!0===a.hasM?b="XYZM":!0===a.hasZ?b="XYZ":!0===a.hasM&&(b="XYM");return b}function Hn(a){a=a.f;return{hasZ:"XYZ"===a||"XYZM"===a,hasM:"XYM"===a||"XYZM"===a}}
var Gn={Point:function(a){return void 0!==a.m&&void 0!==a.z?new C([a.x,a.y,a.z,a.m],"XYZM"):void 0!==a.z?new C([a.x,a.y,a.z],"XYZ"):void 0!==a.m?new C([a.x,a.y,a.m],"XYM"):new C([a.x,a.y])},LineString:function(a){return new R(a.paths[0],Fn(a))},Polygon:function(a){return new E(a.rings,Fn(a))},MultiPoint:function(a){return new T(a.points,Fn(a))},MultiLineString:function(a){return new S(a.paths,Fn(a))},MultiPolygon:function(a){return new U(a.rings,Fn(a))}},In={Point:function(a){var b=a.Z();a=a.f;if("XYZ"===
a)return{x:b[0],y:b[1],z:b[2]};if("XYM"===a)return{x:b[0],y:b[1],m:b[2]};if("XYZM"===a)return{x:b[0],y:b[1],z:b[2],m:b[3]};if("XY"===a)return{x:b[0],y:b[1]}},LineString:function(a){var b=Hn(a);return{hasZ:b.hasZ,hasM:b.hasM,paths:[a.Z()]}},Polygon:function(a){var b=Hn(a);return{hasZ:b.hasZ,hasM:b.hasM,rings:a.Z(!1)}},MultiPoint:function(a){var b=Hn(a);return{hasZ:b.hasZ,hasM:b.hasM,points:a.Z()}},MultiLineString:function(a){var b=Hn(a);return{hasZ:b.hasZ,hasM:b.hasM,paths:a.Z()}},MultiPolygon:function(a){var b=
Hn(a);a=a.Z(!1);for(var c=[],d=0;d<a.length;d++)for(var e=a[d].length-1;0<=e;e--)c.push(a[d][e]);return{hasZ:b.hasZ,hasM:b.hasM,rings:c}}};k=Dn.prototype;k.Uc=function(a,b){var c=En(a.geometry,b),d=new Ik;this.b&&d.Ec(this.b);d.Ua(c);b&&b.mf&&a.attributes[b.mf]&&d.mc(a.attributes[b.mf]);a.attributes&&d.G(a.attributes);return d};
k.Jf=function(a,b){var c=b?b:{};if(a.features){var d=[],e=a.features,f,g;c.mf=a.objectIdFieldName;f=0;for(g=e.length;f<g;++f)d.push(this.Uc(e[f],c));return d}return[this.Uc(a,c)]};k.Rh=function(a,b){return En(a,b)};k.Yh=function(a){return a.spatialReference&&a.spatialReference.wkid?zc("EPSG:"+a.spatialReference.wkid):null};function Jn(a,b){return(0,In[a.Y()])(un(a,!0,b),b)}k.Ke=function(a,b){return Jn(a,tn(this,b))};
k.Yc=function(a,b){b=tn(this,b);var c={},d=a.X();d&&(c.geometry=Jn(d,b));d=a.O();delete d[a.a];c.attributes=Ga(d)?{}:d;b&&b.featureProjection&&(c.spatialReference={wkid:zc(b.featureProjection).eb.split(":").pop()});return c};k.Ie=function(a,b){b=tn(this,b);var c=[],d,e;d=0;for(e=a.length;d<e;++d)c.push(this.Yc(a[d],b));return{features:c}};function Kn(a){Uc.call(this);this.c=a?a:null;Ln(this)}x(Kn,Uc);function Mn(a){var b=[],c,d;c=0;for(d=a.length;c<d;++c)b.push(a[c].clone());return b}function Nn(a){var b,c;if(a.c)for(b=0,c=a.c.length;b<c;++b)Qa(a.c[b],"change",a.u,a)}function Ln(a){var b,c;if(a.c)for(b=0,c=a.c.length;b<c;++b)B(a.c[b],"change",a.u,a)}k=Kn.prototype;k.clone=function(){var a=new Kn(null);a.hi(this.c);return a};
k.tb=function(a,b,c,d){if(d<Pb(this.H(),a,b))return d;var e=this.c,f,g;f=0;for(g=e.length;f<g;++f)d=e[f].tb(a,b,c,d);return d};k.Bc=function(a,b){var c=this.c,d,e;d=0;for(e=c.length;d<e;++d)if(c[d].Bc(a,b))return!0;return!1};k.Od=function(a){Vb(Infinity,Infinity,-Infinity,-Infinity,a);for(var b=this.c,c=0,d=b.length;c<d;++c)ac(a,b[c].H());return a};k.ff=function(){return Mn(this.c)};
k.od=function(a){this.s!=this.g&&(Da(this.l),this.o=0,this.s=this.g);if(0>a||0!==this.o&&a<this.o)return this;var b=a.toString();if(this.l.hasOwnProperty(b))return this.l[b];var c=[],d=this.c,e=!1,f,g;f=0;for(g=d.length;f<g;++f){var h=d[f],l=h.od(a);c.push(l);l!==h&&(e=!0)}if(e)return a=new Kn(null),Nn(a),a.c=c,Ln(a),a.u(),this.l[b]=a;this.o=a;return this};k.Y=function(){return"GeometryCollection"};k.Ka=function(a){var b=this.c,c,d;c=0;for(d=b.length;c<d;++c)if(b[c].Ka(a))return!0;return!1};
k.Ya=function(){return 0===this.c.length};k.rotate=function(a,b){for(var c=this.c,d=0,e=c.length;d<e;++d)c[d].rotate(a,b);this.u()};k.hi=function(a){a=Mn(a);Nn(this);this.c=a;Ln(this);this.u()};k.rc=function(a){var b=this.c,c,d;c=0;for(d=b.length;c<d;++c)b[c].rc(a);this.u()};k.Sc=function(a,b){var c=this.c,d,e;d=0;for(e=c.length;d<e;++d)c[d].Sc(a,b);this.u()};k.ka=function(){Nn(this);Uc.prototype.ka.call(this)};function On(a){a=a?a:{};this.defaultDataProjection=null;this.defaultDataProjection=zc(a.defaultDataProjection?a.defaultDataProjection:"EPSG:4326");this.b=a.geometryName}x(On,vn);function Pn(a,b){return a?un((0,Qn[a.type])(a),!1,b):null}function Rn(a,b){return(0,Sn[a.Y()])(un(a,!0,b),b)}
var Qn={Point:function(a){return new C(a.coordinates)},LineString:function(a){return new R(a.coordinates)},Polygon:function(a){return new E(a.coordinates)},MultiPoint:function(a){return new T(a.coordinates)},MultiLineString:function(a){return new S(a.coordinates)},MultiPolygon:function(a){return new U(a.coordinates)},GeometryCollection:function(a,b){var c=a.geometries.map(function(a){return Pn(a,b)});return new Kn(c)}},Sn={Point:function(a){return{type:"Point",coordinates:a.Z()}},LineString:function(a){return{type:"LineString",
coordinates:a.Z()}},Polygon:function(a,b){var c;b&&(c=b.rightHanded);return{type:"Polygon",coordinates:a.Z(c)}},MultiPoint:function(a){return{type:"MultiPoint",coordinates:a.Z()}},MultiLineString:function(a){return{type:"MultiLineString",coordinates:a.Z()}},MultiPolygon:function(a,b){var c;b&&(c=b.rightHanded);return{type:"MultiPolygon",coordinates:a.Z(c)}},GeometryCollection:function(a,b){return{type:"GeometryCollection",geometries:a.c.map(function(a){var d=Ca({},b);delete d.featureProjection;return Rn(a,
d)})}},Circle:function(){return{type:"GeometryCollection",geometries:[]}}};k=On.prototype;k.Uc=function(a,b){var c=Pn(a.geometry,b),d=new Ik;this.b&&d.Ec(this.b);d.Ua(c);void 0!==a.id&&d.mc(a.id);a.properties&&d.G(a.properties);return d};k.Jf=function(a,b){if("Feature"==a.type)return[this.Uc(a,b)];if("FeatureCollection"==a.type){var c=[],d=a.features,e,f;e=0;for(f=d.length;e<f;++e)c.push(this.Uc(d[e],b));return c}return[]};k.Rh=function(a,b){return Pn(a,b)};
k.Yh=function(a){return(a=a.crs)?"name"==a.type?zc(a.properties.name):"EPSG"==a.type?zc("EPSG:"+a.properties.code):null:this.defaultDataProjection};k.Yc=function(a,b){b=tn(this,b);var c={type:"Feature"},d=a.Xa();void 0!==d&&(c.id=d);(d=a.X())?c.geometry=Rn(d,b):c.geometry=null;d=a.O();delete d[a.a];Ga(d)?c.properties=null:c.properties=d;return c};k.Ie=function(a,b){b=tn(this,b);var c=[],d,e;d=0;for(e=a.length;d<e;++d)c.push(this.Yc(a[d],b));return{type:"FeatureCollection",features:c}};
k.Ke=function(a,b){return Rn(a,tn(this,b))};function Tn(){this.f=new XMLSerializer;this.defaultDataProjection=null}x(Tn,rn);k=Tn.prototype;k.Y=function(){return"xml"};k.Sb=function(a,b){if(Pk(a))return Un(this,a,b);if(Qk(a))return this.Ph(a,b);if("string"===typeof a){var c=Rk(a);return Un(this,c,b)}return null};function Un(a,b,c){a=Vn(a,b,c);return 0<a.length?a[0]:null}k.Fa=function(a,b){if(Pk(a))return Vn(this,a,b);if(Qk(a))return this.lc(a,b);if("string"===typeof a){var c=Rk(a);return Vn(this,c,b)}return[]};
function Vn(a,b,c){var d=[];for(b=b.firstChild;b;b=b.nextSibling)b.nodeType==Node.ELEMENT_NODE&&jb(d,a.lc(b,c));return d}k.Vc=function(a,b){if(Pk(a))return this.v(a,b);if(Qk(a)){var c=this.ye(a,[sn(this,a,b?b:{})]);return c?c:null}return"string"===typeof a?(c=Rk(a),this.v(c,b)):null};k.Oa=function(a){return Pk(a)?this.Pf(a):Qk(a)?this.Be(a):"string"===typeof a?(a=Rk(a),this.Pf(a)):null};k.Pf=function(){return this.defaultDataProjection};k.Be=function(){return this.defaultDataProjection};
k.Dd=function(a,b){var c=this.A(a,b);return this.f.serializeToString(c)};k.Yb=function(a,b){var c=this.a(a,b);return this.f.serializeToString(c)};k.Zc=function(a,b){var c=this.s(a,b);return this.f.serializeToString(c)};function Wn(a){a=a?a:{};this.featureType=a.featureType;this.featureNS=a.featureNS;this.srsName=a.srsName;this.schemaLocation="";this.b={};this.b["http://www.opengis.net/gml"]={featureMember:Uk(Wn.prototype.vd),featureMembers:Uk(Wn.prototype.vd)};Tn.call(this)}x(Wn,Tn);var Xn=/^[\s\xa0]*$/;k=Wn.prototype;
k.vd=function(a,b){var c=a.localName,d=null;if("FeatureCollection"==c)"http://www.opengis.net/wfs"===a.namespaceURI?d=O([],this.b,a,b,this):d=O(null,this.b,a,b,this);else if("featureMembers"==c||"featureMember"==c){var e=b[0],f=e.featureType,g=e.featureNS,h,l;if(!f&&a.childNodes){f=[];g={};h=0;for(l=a.childNodes.length;h<l;++h){var m=a.childNodes[h];if(1===m.nodeType){var n=m.nodeName.split(":").pop();if(-1===f.indexOf(n)){var p="",q=0,m=m.namespaceURI,r;for(r in g){if(g[r]===m){p=r;break}++q}p||
(p="p"+q,g[p]=m);f.push(p+":"+n)}}}"featureMember"!=c&&(e.featureType=f,e.featureNS=g)}"string"===typeof g&&(h=g,g={},g.p0=h);var e={},f=Array.isArray(f)?f:[f],v;for(v in g){n={};h=0;for(l=f.length;h<l;++h)(-1===f[h].indexOf(":")?"p0":f[h].split(":")[0])===v&&(n[f[h].split(":").pop()]="featureMembers"==c?Tk(this.If,this):Uk(this.If,this));e[g[v]]=n}"featureMember"==c?d=O(void 0,e,a,b):d=O([],e,a,b)}null===d&&(d=[]);return d};
k.ye=function(a,b){var c=b[0];c.srsName=a.firstElementChild.getAttribute("srsName");var d=O(null,this.bg,a,b,this);if(d)return un(d,!1,c)};
k.If=function(a,b){var c,d;(d=a.getAttribute("fid"))||(d=a.getAttributeNS("http://www.opengis.net/gml","id")||"");var e={},f;for(c=a.firstElementChild;c;c=c.nextElementSibling){var g=c.localName;if(0===c.childNodes.length||1===c.childNodes.length&&(3===c.firstChild.nodeType||4===c.firstChild.nodeType)){var h=Nk(c,!1);Xn.test(h)&&(h=void 0);e[g]=h}else"boundedBy"!==g&&(f=g),e[g]=this.ye(c,b)}c=new Ik(e);f&&c.Ec(f);d&&c.mc(d);return c};
k.Xh=function(a,b){var c=this.xe(a,b);if(c){var d=new C(null);d.ba("XYZ",c);return d}};k.Vh=function(a,b){var c=O([],this.Ui,a,b,this);if(c)return new T(c)};k.Uh=function(a,b){var c=O([],this.Ti,a,b,this);if(c){var d=new S(null);An(d,c);return d}};k.Wh=function(a,b){var c=O([],this.Vi,a,b,this);if(c){var d=new U(null);Cn(d,c);return d}};k.Mh=function(a,b){al(this.Yi,a,b,this)};k.Ug=function(a,b){al(this.Ri,a,b,this)};k.Nh=function(a,b){al(this.Zi,a,b,this)};
k.ze=function(a,b){var c=this.xe(a,b);if(c){var d=new R(null);d.ba("XYZ",c);return d}};k.zo=function(a,b){var c=O(null,this.Fd,a,b,this);if(c)return c};k.Th=function(a,b){var c=this.xe(a,b);if(c){var d=new nd(null);od(d,"XYZ",c);return d}};k.Ae=function(a,b){var c=O([null],this.Me,a,b,this);if(c&&c[0]){var d=new E(null),e=c[0],f=[e.length],g,h;g=1;for(h=c.length;g<h;++g)jb(e,c[g]),f.push(e.length);d.ba("XYZ",e,f);return d}};k.xe=function(a,b){return O(null,this.Fd,a,b,this)};
k.Ui={"http://www.opengis.net/gml":{pointMember:Tk(Wn.prototype.Mh),pointMembers:Tk(Wn.prototype.Mh)}};k.Ti={"http://www.opengis.net/gml":{lineStringMember:Tk(Wn.prototype.Ug),lineStringMembers:Tk(Wn.prototype.Ug)}};k.Vi={"http://www.opengis.net/gml":{polygonMember:Tk(Wn.prototype.Nh),polygonMembers:Tk(Wn.prototype.Nh)}};k.Yi={"http://www.opengis.net/gml":{Point:Tk(Wn.prototype.xe)}};k.Ri={"http://www.opengis.net/gml":{LineString:Tk(Wn.prototype.ze)}};k.Zi={"http://www.opengis.net/gml":{Polygon:Tk(Wn.prototype.Ae)}};
k.Gd={"http://www.opengis.net/gml":{LinearRing:Uk(Wn.prototype.zo)}};k.lc=function(a,b){var c={featureType:this.featureType,featureNS:this.featureNS};b&&Ca(c,sn(this,a,b));return this.vd(a,[c])||[]};k.Be=function(a){return zc(this.srsName?this.srsName:a.firstElementChild.getAttribute("srsName"))};function Yn(a){a=Nk(a,!1);return Zn(a)}function Zn(a){if(a=/^\s*(true|1)|(false|0)\s*$/.exec(a))return void 0!==a[1]||!1}
function $n(a){a=Nk(a,!1);if(a=/^\s*(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(Z|(?:([+\-])(\d{2})(?::(\d{2}))?))\s*$/.exec(a)){var b=Date.UTC(parseInt(a[1],10),parseInt(a[2],10)-1,parseInt(a[3],10),parseInt(a[4],10),parseInt(a[5],10),parseInt(a[6],10))/1E3;if("Z"!=a[7]){var c="-"==a[8]?-1:1,b=b+60*c*parseInt(a[9],10);void 0!==a[10]&&(b+=3600*c*parseInt(a[10],10))}return b}}function ao(a){a=Nk(a,!1);return bo(a)}
function bo(a){if(a=/^\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?)\s*$/i.exec(a))return parseFloat(a[1])}function co(a){a=Nk(a,!1);return eo(a)}function eo(a){if(a=/^\s*(\d+)\s*$/.exec(a))return parseInt(a[1],10)}function V(a){return Nk(a,!1).trim()}function fo(a,b){go(a,b?"1":"0")}function ho(a,b){a.appendChild(Lk.createTextNode(b.toPrecision()))}function io(a,b){a.appendChild(Lk.createTextNode(b.toString()))}function go(a,b){a.appendChild(Lk.createTextNode(b))};function jo(a){a=a?a:{};Wn.call(this,a);this.b["http://www.opengis.net/gml"].featureMember=Tk(Wn.prototype.vd);this.schemaLocation=a.schemaLocation?a.schemaLocation:"http://www.opengis.net/gml http://schemas.opengis.net/gml/2.1.2/feature.xsd"}x(jo,Wn);k=jo.prototype;
k.Qh=function(a,b){var c=Nk(a,!1).replace(/^\s*|\s*$/g,""),d=b[0].srsName,e=a.parentNode.getAttribute("srsDimension"),f="enu";d&&(d=zc(d))&&(f=d.b);c=c.split(/[\s,]+/);d=2;a.getAttribute("srsDimension")?d=eo(a.getAttribute("srsDimension")):a.getAttribute("dimension")?d=eo(a.getAttribute("dimension")):e&&(d=eo(e));for(var g,h,l=[],m=0,n=c.length;m<n;m+=d)e=parseFloat(c[m]),g=parseFloat(c[m+1]),h=3===d?parseFloat(c[m+2]):0,"en"===f.substr(0,2)?l.push(e,g,h):l.push(g,e,h);return l};
k.wo=function(a,b){var c=O([null],this.Ni,a,b,this);return Vb(c[1][0],c[1][1],c[1][3],c[1][4])};k.ml=function(a,b){var c=O(void 0,this.Gd,a,b,this);c&&b[b.length-1].push(c)};k.eo=function(a,b){var c=O(void 0,this.Gd,a,b,this);c&&(b[b.length-1][0]=c)};k.Fd={"http://www.opengis.net/gml":{coordinates:Uk(jo.prototype.Qh)}};k.Me={"http://www.opengis.net/gml":{innerBoundaryIs:jo.prototype.ml,outerBoundaryIs:jo.prototype.eo}};k.Ni={"http://www.opengis.net/gml":{coordinates:Tk(jo.prototype.Qh)}};
k.bg={"http://www.opengis.net/gml":{Point:Uk(Wn.prototype.Xh),MultiPoint:Uk(Wn.prototype.Vh),LineString:Uk(Wn.prototype.ze),MultiLineString:Uk(Wn.prototype.Uh),LinearRing:Uk(Wn.prototype.Th),Polygon:Uk(Wn.prototype.Ae),MultiPolygon:Uk(Wn.prototype.Wh),Box:Uk(jo.prototype.wo)}};function ko(a){a=a?a:{};Wn.call(this,a);this.j=void 0!==a.surface?a.surface:!1;this.i=void 0!==a.curve?a.curve:!1;this.l=void 0!==a.multiCurve?a.multiCurve:!0;this.o=void 0!==a.multiSurface?a.multiSurface:!0;this.schemaLocation=a.schemaLocation?a.schemaLocation:"http://www.opengis.net/gml http://schemas.opengis.net/gml/3.1.1/profiles/gmlsfProfile/1.0.0/gmlsf.xsd"}x(ko,Wn);k=ko.prototype;k.Do=function(a,b){var c=O([],this.Si,a,b,this);if(c){var d=new S(null);An(d,c);return d}};
k.Eo=function(a,b){var c=O([],this.Wi,a,b,this);if(c){var d=new U(null);Cn(d,c);return d}};k.vg=function(a,b){al(this.Oi,a,b,this)};k.vi=function(a,b){al(this.cj,a,b,this)};k.Ho=function(a,b){return O([null],this.Xi,a,b,this)};k.Jo=function(a,b){return O([null],this.bj,a,b,this)};k.Io=function(a,b){return O([null],this.Me,a,b,this)};k.Co=function(a,b){return O([null],this.Fd,a,b,this)};k.ol=function(a,b){var c=O(void 0,this.Gd,a,b,this);c&&b[b.length-1].push(c)};
k.Hj=function(a,b){var c=O(void 0,this.Gd,a,b,this);c&&(b[b.length-1][0]=c)};k.Zh=function(a,b){var c=O([null],this.dj,a,b,this);if(c&&c[0]){var d=new E(null),e=c[0],f=[e.length],g,h;g=1;for(h=c.length;g<h;++g)jb(e,c[g]),f.push(e.length);d.ba("XYZ",e,f);return d}};k.Oh=function(a,b){var c=O([null],this.Pi,a,b,this);if(c){var d=new R(null);d.ba("XYZ",c);return d}};k.yo=function(a,b){var c=O([null],this.Qi,a,b,this);return Vb(c[1][0],c[1][1],c[2][0],c[2][1])};
k.Ao=function(a,b){for(var c=Nk(a,!1),d=/^\s*([+\-]?\d*\.?\d+(?:[eE][+\-]?\d+)?)\s*/,e=[],f;f=d.exec(c);)e.push(parseFloat(f[1])),c=c.substr(f[0].length);if(""===c){c=b[0].srsName;d="enu";c&&(d=zc(c).b);if("neu"===d)for(c=0,d=e.length;c<d;c+=3)f=e[c],e[c]=e[c+1],e[c+1]=f;c=e.length;2==c&&e.push(0);return 0===c?void 0:e}};
k.Mf=function(a,b){var c=Nk(a,!1).replace(/^\s*|\s*$/g,""),d=b[0].srsName,e=a.parentNode.getAttribute("srsDimension"),f="enu";d&&(f=zc(d).b);c=c.split(/\s+/);d=2;a.getAttribute("srsDimension")?d=eo(a.getAttribute("srsDimension")):a.getAttribute("dimension")?d=eo(a.getAttribute("dimension")):e&&(d=eo(e));for(var g,h,l=[],m=0,n=c.length;m<n;m+=d)e=parseFloat(c[m]),g=parseFloat(c[m+1]),h=3===d?parseFloat(c[m+2]):0,"en"===f.substr(0,2)?l.push(e,g,h):l.push(g,e,h);return l};
k.Fd={"http://www.opengis.net/gml":{pos:Uk(ko.prototype.Ao),posList:Uk(ko.prototype.Mf)}};k.Me={"http://www.opengis.net/gml":{interior:ko.prototype.ol,exterior:ko.prototype.Hj}};
k.bg={"http://www.opengis.net/gml":{Point:Uk(Wn.prototype.Xh),MultiPoint:Uk(Wn.prototype.Vh),LineString:Uk(Wn.prototype.ze),MultiLineString:Uk(Wn.prototype.Uh),LinearRing:Uk(Wn.prototype.Th),Polygon:Uk(Wn.prototype.Ae),MultiPolygon:Uk(Wn.prototype.Wh),Surface:Uk(ko.prototype.Zh),MultiSurface:Uk(ko.prototype.Eo),Curve:Uk(ko.prototype.Oh),MultiCurve:Uk(ko.prototype.Do),Envelope:Uk(ko.prototype.yo)}};k.Si={"http://www.opengis.net/gml":{curveMember:Tk(ko.prototype.vg),curveMembers:Tk(ko.prototype.vg)}};
k.Wi={"http://www.opengis.net/gml":{surfaceMember:Tk(ko.prototype.vi),surfaceMembers:Tk(ko.prototype.vi)}};k.Oi={"http://www.opengis.net/gml":{LineString:Tk(Wn.prototype.ze),Curve:Tk(ko.prototype.Oh)}};k.cj={"http://www.opengis.net/gml":{Polygon:Tk(Wn.prototype.Ae),Surface:Tk(ko.prototype.Zh)}};k.dj={"http://www.opengis.net/gml":{patches:Uk(ko.prototype.Ho)}};k.Pi={"http://www.opengis.net/gml":{segments:Uk(ko.prototype.Jo)}};k.Qi={"http://www.opengis.net/gml":{lowerCorner:Tk(ko.prototype.Mf),upperCorner:Tk(ko.prototype.Mf)}};
k.Xi={"http://www.opengis.net/gml":{PolygonPatch:Uk(ko.prototype.Io)}};k.bj={"http://www.opengis.net/gml":{LineStringSegment:Uk(ko.prototype.Co)}};function lo(a,b,c){c=c[c.length-1].srsName;b=b.Z();for(var d=b.length,e=Array(d),f,g=0;g<d;++g){f=b[g];var h=g,l="enu";c&&(l=zc(c).b);e[h]="en"===l.substr(0,2)?f[0]+" "+f[1]:f[1]+" "+f[0]}go(a,e.join(" "))}
k.Ji=function(a,b,c){var d=c[c.length-1].srsName;d&&a.setAttribute("srsName",d);d=Mk(a.namespaceURI,"pos");a.appendChild(d);c=c[c.length-1].srsName;a="enu";c&&(a=zc(c).b);b=b.Z();go(d,"en"===a.substr(0,2)?b[0]+" "+b[1]:b[1]+" "+b[0])};var mo={"http://www.opengis.net/gml":{lowerCorner:L(go),upperCorner:L(go)}};k=ko.prototype;k.xp=function(a,b,c){var d=c[c.length-1].srsName;d&&a.setAttribute("srsName",d);bl({node:a},mo,Zk,[b[0]+" "+b[1],b[2]+" "+b[3]],c,["lowerCorner","upperCorner"],this)};
k.Gi=function(a,b,c){var d=c[c.length-1].srsName;d&&a.setAttribute("srsName",d);d=Mk(a.namespaceURI,"posList");a.appendChild(d);lo(d,b,c)};k.aj=function(a,b){var c=b[b.length-1],d=c.node,e=c.exteriorWritten;void 0===e&&(c.exteriorWritten=!0);return Mk(d.namespaceURI,void 0!==e?"interior":"exterior")};
k.Le=function(a,b,c){var d=c[c.length-1].srsName;"PolygonPatch"!==a.nodeName&&d&&a.setAttribute("srsName",d);"Polygon"===a.nodeName||"PolygonPatch"===a.nodeName?(b=b.Vd(),bl({node:a,srsName:d},no,this.aj,b,c,void 0,this)):"Surface"===a.nodeName&&(d=Mk(a.namespaceURI,"patches"),a.appendChild(d),a=Mk(d.namespaceURI,"PolygonPatch"),d.appendChild(a),this.Le(a,b,c))};
k.Ge=function(a,b,c){var d=c[c.length-1].srsName;"LineStringSegment"!==a.nodeName&&d&&a.setAttribute("srsName",d);"LineString"===a.nodeName||"LineStringSegment"===a.nodeName?(d=Mk(a.namespaceURI,"posList"),a.appendChild(d),lo(d,b,c)):"Curve"===a.nodeName&&(d=Mk(a.namespaceURI,"segments"),a.appendChild(d),a=Mk(d.namespaceURI,"LineStringSegment"),d.appendChild(a),this.Ge(a,b,c))};
k.Ii=function(a,b,c){var d=c[c.length-1],e=d.srsName,d=d.surface;e&&a.setAttribute("srsName",e);b=b.Wd();bl({node:a,srsName:e,surface:d},oo,this.c,b,c,void 0,this)};k.yp=function(a,b,c){var d=c[c.length-1].srsName;d&&a.setAttribute("srsName",d);b=b.je();bl({node:a,srsName:d},po,Xk("pointMember"),b,c,void 0,this)};k.Hi=function(a,b,c){var d=c[c.length-1],e=d.srsName,d=d.curve;e&&a.setAttribute("srsName",e);b=b.md();bl({node:a,srsName:e,curve:d},qo,this.c,b,c,void 0,this)};
k.Ki=function(a,b,c){var d=Mk(a.namespaceURI,"LinearRing");a.appendChild(d);this.Gi(d,b,c)};k.Li=function(a,b,c){var d=this.g(b,c);d&&(a.appendChild(d),this.Le(d,b,c))};k.zp=function(a,b,c){var d=Mk(a.namespaceURI,"Point");a.appendChild(d);this.Ji(d,b,c)};k.Fi=function(a,b,c){var d=this.g(b,c);d&&(a.appendChild(d),this.Ge(d,b,c))};
k.Je=function(a,b,c){var d=c[c.length-1],e=Ca({},d);e.node=a;var f;Array.isArray(b)?d.dataProjection?f=Tc(b,d.featureProjection,d.dataProjection):f=b:f=un(b,!0,d);bl(e,ro,this.g,[f],c,void 0,this)};
k.Bi=function(a,b,c){var d=b.Xa();d&&a.setAttribute("fid",d);var d=c[c.length-1],e=d.featureNS,f=b.a;d.Dc||(d.Dc={},d.Dc[e]={});var g=b.O();b=[];var h=[],l;for(l in g){var m=g[l];null!==m&&(b.push(l),h.push(m),l==f||m instanceof Uc?l in d.Dc[e]||(d.Dc[e][l]=L(this.Je,this)):l in d.Dc[e]||(d.Dc[e][l]=L(go)))}l=Ca({},d);l.node=a;bl(l,d.Dc,Xk(void 0,e),h,c,b)};
var oo={"http://www.opengis.net/gml":{surfaceMember:L(ko.prototype.Li),polygonMember:L(ko.prototype.Li)}},po={"http://www.opengis.net/gml":{pointMember:L(ko.prototype.zp)}},qo={"http://www.opengis.net/gml":{lineStringMember:L(ko.prototype.Fi),curveMember:L(ko.prototype.Fi)}},no={"http://www.opengis.net/gml":{exterior:L(ko.prototype.Ki),interior:L(ko.prototype.Ki)}},ro={"http://www.opengis.net/gml":{Curve:L(ko.prototype.Ge),MultiCurve:L(ko.prototype.Hi),Point:L(ko.prototype.Ji),MultiPoint:L(ko.prototype.yp),
LineString:L(ko.prototype.Ge),MultiLineString:L(ko.prototype.Hi),LinearRing:L(ko.prototype.Gi),Polygon:L(ko.prototype.Le),MultiPolygon:L(ko.prototype.Ii),Surface:L(ko.prototype.Le),MultiSurface:L(ko.prototype.Ii),Envelope:L(ko.prototype.xp)}},so={MultiLineString:"lineStringMember",MultiCurve:"curveMember",MultiPolygon:"polygonMember",MultiSurface:"surfaceMember"};ko.prototype.c=function(a,b){return Mk("http://www.opengis.net/gml",so[b[b.length-1].node.nodeName])};
ko.prototype.g=function(a,b){var c=b[b.length-1],d=c.multiSurface,e=c.surface,f=c.curve,c=c.multiCurve,g;Array.isArray(a)?g="Envelope":(g=a.Y(),"MultiPolygon"===g&&!0===d?g="MultiSurface":"Polygon"===g&&!0===e?g="Surface":"LineString"===g&&!0===f?g="Curve":"MultiLineString"===g&&!0===c&&(g="MultiCurve"));return Mk("http://www.opengis.net/gml",g)};
ko.prototype.s=function(a,b){b=tn(this,b);var c=Mk("http://www.opengis.net/gml","geom"),d={node:c,srsName:this.srsName,curve:this.i,surface:this.j,multiSurface:this.o,multiCurve:this.l};b&&Ca(d,b);this.Je(c,a,[d]);return c};
ko.prototype.a=function(a,b){b=tn(this,b);var c=Mk("http://www.opengis.net/gml","featureMembers");c.setAttributeNS("http://www.w3.org/2001/XMLSchema-instance","xsi:schemaLocation",this.schemaLocation);var d={srsName:this.srsName,curve:this.i,surface:this.j,multiSurface:this.o,multiCurve:this.l,featureNS:this.featureNS,featureType:this.featureType};b&&Ca(d,b);var d=[d],e=d[d.length-1],f=e.featureType,g=e.featureNS,h={};h[g]={};h[g][f]=L(this.Bi,this);e=Ca({},e);e.node=c;bl(e,h,Xk(f,g),a,d);return c};function to(a){a=a?a:{};Tn.call(this);this.defaultDataProjection=zc("EPSG:4326");this.b=a.readExtensions}x(to,Tn);var uo=[null,"http://www.topografix.com/GPX/1/0","http://www.topografix.com/GPX/1/1"];function vo(a,b,c){a.push(parseFloat(b.getAttribute("lon")),parseFloat(b.getAttribute("lat")));"ele"in c?(a.push(c.ele),delete c.ele):a.push(0);"time"in c?(a.push(c.time),delete c.time):a.push(0);return a}function wo(a,b){var c=b[b.length-1],d=a.getAttribute("href");null!==d&&(c.link=d);al(xo,a,b)}
function yo(a,b){b[b.length-1].extensionsNode_=a}function zo(a,b){var c=b[0],d=O({flatCoordinates:[]},Ao,a,b);if(d){var e=d.flatCoordinates;delete d.flatCoordinates;var f=new R(null);f.ba("XYZM",e);un(f,!1,c);c=new Ik(f);c.G(d);return c}}function Bo(a,b){var c=b[0],d=O({flatCoordinates:[],ends:[]},Co,a,b);if(d){var e=d.flatCoordinates;delete d.flatCoordinates;var f=d.ends;delete d.ends;var g=new S(null);g.ba("XYZM",e,f);un(g,!1,c);c=new Ik(g);c.G(d);return c}}
function Do(a,b){var c=b[0],d=O({},Eo,a,b);if(d){var e=vo([],a,d),e=new C(e,"XYZM");un(e,!1,c);c=new Ik(e);c.G(d);return c}}
var Fo={rte:zo,trk:Bo,wpt:Do},Go=N(uo,{rte:Tk(zo),trk:Tk(Bo),wpt:Tk(Do)}),xo=N(uo,{text:K(V,"linkText"),type:K(V,"linkType")}),Ao=N(uo,{name:K(V),cmt:K(V),desc:K(V),src:K(V),link:wo,number:K(co),extensions:yo,type:K(V),rtept:function(a,b){var c=O({},Ho,a,b);c&&vo(b[b.length-1].flatCoordinates,a,c)}}),Ho=N(uo,{ele:K(ao),time:K($n)}),Co=N(uo,{name:K(V),cmt:K(V),desc:K(V),src:K(V),link:wo,number:K(co),type:K(V),extensions:yo,trkseg:function(a,b){var c=b[b.length-1];al(Io,a,b);c.ends.push(c.flatCoordinates.length)}}),
Io=N(uo,{trkpt:function(a,b){var c=O({},Jo,a,b);c&&vo(b[b.length-1].flatCoordinates,a,c)}}),Jo=N(uo,{ele:K(ao),time:K($n)}),Eo=N(uo,{ele:K(ao),time:K($n),magvar:K(ao),geoidheight:K(ao),name:K(V),cmt:K(V),desc:K(V),src:K(V),link:wo,sym:K(V),type:K(V),fix:K(V),sat:K(co),hdop:K(ao),vdop:K(ao),pdop:K(ao),ageofdgpsdata:K(ao),dgpsid:K(co),extensions:yo});
function Ko(a,b){b||(b=[]);for(var c=0,d=b.length;c<d;++c){var e=b[c];if(a.b){var f=e.get("extensionsNode_")||null;a.b(e,f)}e.set("extensionsNode_",void 0)}}to.prototype.Ph=function(a,b){if(!gb(uo,a.namespaceURI))return null;var c=Fo[a.localName];if(!c)return null;c=c(a,[sn(this,a,b)]);if(!c)return null;Ko(this,[c]);return c};to.prototype.lc=function(a,b){if(!gb(uo,a.namespaceURI))return[];if("gpx"==a.localName){var c=O([],Go,a,[sn(this,a,b)]);if(c)return Ko(this,c),c}return[]};
function Lo(a,b,c){a.setAttribute("href",b);b=c[c.length-1].properties;bl({node:a},Mo,Zk,[b.linkText,b.linkType],c,No)}function Oo(a,b,c){var d=c[c.length-1],e=d.node.namespaceURI,f=d.properties;a.setAttributeNS(null,"lat",b[1]);a.setAttributeNS(null,"lon",b[0]);switch(d.geometryLayout){case "XYZM":0!==b[3]&&(f.time=b[3]);case "XYZ":0!==b[2]&&(f.ele=b[2]);break;case "XYM":0!==b[2]&&(f.time=b[2])}b="rtept"==a.nodeName?Po[e]:Qo[e];d=$k(f,b);bl({node:a,properties:f},Ro,Zk,d,c,b)}
var No=["text","type"],Mo=N(uo,{text:L(go),type:L(go)}),So=N(uo,"name cmt desc src link number type rtept".split(" ")),To=N(uo,{name:L(go),cmt:L(go),desc:L(go),src:L(go),link:L(Lo),number:L(io),type:L(go),rtept:Wk(L(Oo))}),Po=N(uo,["ele","time"]),Uo=N(uo,"name cmt desc src link number type trkseg".split(" ")),Xo=N(uo,{name:L(go),cmt:L(go),desc:L(go),src:L(go),link:L(Lo),number:L(io),type:L(go),trkseg:Wk(L(function(a,b,c){bl({node:a,geometryLayout:b.f,properties:{}},Vo,Wo,b.Z(),c)}))}),Wo=Xk("trkpt"),
Vo=N(uo,{trkpt:L(Oo)}),Qo=N(uo,"ele time magvar geoidheight name cmt desc src link sym type fix sat hdop vdop pdop ageofdgpsdata dgpsid".split(" ")),Ro=N(uo,{ele:L(ho),time:L(function(a,b){var c=new Date(1E3*b);a.appendChild(Lk.createTextNode(c.getUTCFullYear()+"-"+wb(c.getUTCMonth()+1)+"-"+wb(c.getUTCDate())+"T"+wb(c.getUTCHours())+":"+wb(c.getUTCMinutes())+":"+wb(c.getUTCSeconds())+"Z"))}),magvar:L(ho),geoidheight:L(ho),name:L(go),cmt:L(go),desc:L(go),src:L(go),link:L(Lo),sym:L(go),type:L(go),fix:L(go),
sat:L(io),hdop:L(ho),vdop:L(ho),pdop:L(ho),ageofdgpsdata:L(ho),dgpsid:L(io)}),Yo={Point:"wpt",LineString:"rte",MultiLineString:"trk"};function Zo(a,b){var c=a.X();if(c&&(c=Yo[c.Y()]))return Mk(b[b.length-1].node.namespaceURI,c)}
var $o=N(uo,{rte:L(function(a,b,c){var d=c[0],e=b.O();a={node:a,properties:e};if(b=b.X())b=un(b,!0,d),a.geometryLayout=b.f,e.rtept=b.Z();d=So[c[c.length-1].node.namespaceURI];e=$k(e,d);bl(a,To,Zk,e,c,d)}),trk:L(function(a,b,c){var d=c[0],e=b.O();a={node:a,properties:e};if(b=b.X())b=un(b,!0,d),e.trkseg=b.md();d=Uo[c[c.length-1].node.namespaceURI];e=$k(e,d);bl(a,Xo,Zk,e,c,d)}),wpt:L(function(a,b,c){var d=c[0],e=c[c.length-1];e.properties=b.O();if(b=b.X())b=un(b,!0,d),e.geometryLayout=b.f,Oo(a,b.Z(),
c)})});to.prototype.a=function(a,b){b=tn(this,b);var c=Mk("http://www.topografix.com/GPX/1/1","gpx");c.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:xsi","http://www.w3.org/2001/XMLSchema-instance");c.setAttributeNS("http://www.w3.org/2001/XMLSchema-instance","xsi:schemaLocation","http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd");c.setAttribute("version","1.1");c.setAttribute("creator","OpenLayers 3");bl({node:c},$o,Zo,a,[b]);return c};function ap(){this.defaultDataProjection=null}x(ap,rn);function bp(a){return"string"===typeof a?a:""}k=ap.prototype;k.Y=function(){return"text"};k.Sb=function(a,b){return this.ud(bp(a),tn(this,b))};k.Fa=function(a,b){return this.Kf(bp(a),tn(this,b))};k.Vc=function(a,b){return this.wd(bp(a),tn(this,b))};k.Oa=function(a){bp(a);return this.defaultDataProjection};k.Dd=function(a,b){return this.He(a,tn(this,b))};k.Yb=function(a,b){return this.Ci(a,tn(this,b))};
k.Zc=function(a,b){return this.Ed(a,tn(this,b))};function cp(a){a=a?a:{};this.defaultDataProjection=null;this.defaultDataProjection=zc("EPSG:4326");this.b=a.altitudeMode?a.altitudeMode:"none"}x(cp,ap);var dp=/^B(\d{2})(\d{2})(\d{2})(\d{2})(\d{5})([NS])(\d{3})(\d{5})([EW])([AV])(\d{5})(\d{5})/,ep=/^H.([A-Z]{3}).*?:(.*)/,fp=/^HFDTE(\d{2})(\d{2})(\d{2})/,gp=/\r\n|\r|\n/;
cp.prototype.ud=function(a,b){var c=this.b,d=a.split(gp),e={},f=[],g=2E3,h=0,l=1,m=-1,n,p;n=0;for(p=d.length;n<p;++n){var q=d[n],r;if("B"==q.charAt(0)){if(r=dp.exec(q)){var q=parseInt(r[1],10),v=parseInt(r[2],10),y=parseInt(r[3],10),w=parseInt(r[4],10)+parseInt(r[5],10)/6E4;"S"==r[6]&&(w=-w);var G=parseInt(r[7],10)+parseInt(r[8],10)/6E4;"W"==r[9]&&(G=-G);f.push(G,w);"none"!=c&&f.push("gps"==c?parseInt(r[11],10):"barometric"==c?parseInt(r[12],10):0);r=Date.UTC(g,h,l,q,v,y);r<m&&(r=Date.UTC(g,h,l+1,
q,v,y));f.push(r/1E3);m=r}}else"H"==q.charAt(0)&&((r=fp.exec(q))?(l=parseInt(r[1],10),h=parseInt(r[2],10)-1,g=2E3+parseInt(r[3],10)):(r=ep.exec(q))&&(e[r[1]]=r[2].trim()))}if(0===f.length)return null;d=new R(null);d.ba("none"==c?"XYM":"XYZM",f);c=new Ik(un(d,!1,b));c.G(e);return c};cp.prototype.Kf=function(a,b){var c=this.ud(a,b);return c?[c]:[]};function hp(a,b){this.a={};this.b=[];this.g=0;var c=arguments.length;if(1<c){if(c%2)throw Error("Uneven number of arguments");for(var d=0;d<c;d+=2)this.set(arguments[d],arguments[d+1])}else if(a){var e;if(a instanceof hp)e=a.N(),d=a.zc();else{var c=[],f=0;for(e in a)c[f++]=e;e=c;c=[];f=0;for(d in a)c[f++]=a[d];d=c}for(c=0;c<e.length;c++)this.set(e[c],d[c])}}k=hp.prototype;k.wc=function(){return this.g};k.zc=function(){ip(this);for(var a=[],b=0;b<this.b.length;b++)a.push(this.a[this.b[b]]);return a};
k.N=function(){ip(this);return this.b.concat()};k.Ya=function(){return 0==this.g};k.clear=function(){this.a={};this.g=this.b.length=0};k.remove=function(a){return jp(this.a,a)?(delete this.a[a],this.g--,this.b.length>2*this.g&&ip(this),!0):!1};function ip(a){if(a.g!=a.b.length){for(var b=0,c=0;b<a.b.length;){var d=a.b[b];jp(a.a,d)&&(a.b[c++]=d);b++}a.b.length=c}if(a.g!=a.b.length){for(var e={},c=b=0;b<a.b.length;)d=a.b[b],jp(e,d)||(a.b[c++]=d,e[d]=1),b++;a.b.length=c}}
k.get=function(a,b){return jp(this.a,a)?this.a[a]:b};k.set=function(a,b){jp(this.a,a)||(this.g++,this.b.push(a));this.a[a]=b};k.forEach=function(a,b){for(var c=this.N(),d=0;d<c.length;d++){var e=c[d],f=this.get(e);a.call(b,f,e,this)}};k.clone=function(){return new hp(this)};function jp(a,b){return Object.prototype.hasOwnProperty.call(a,b)};var kp=/^(?:([^:/?#.]+):)?(?:\/\/(?:([^/?#]*)@)?([^/#?]*?)(?::([0-9]+))?(?=[/#?]|$))?([^?#]+)?(?:\?([^#]*))?(?:#(.*))?$/;function lp(a,b){if(a)for(var c=a.split("&"),d=0;d<c.length;d++){var e=c[d].indexOf("="),f,g=null;0<=e?(f=c[d].substring(0,e),g=c[d].substring(e+1)):f=c[d];b(f,g?decodeURIComponent(g.replace(/\+/g," ")):"")}};function mp(a,b){this.a=this.l=this.g="";this.o=null;this.f=this.b="";this.c=!1;var c;a instanceof mp?(this.c=void 0!==b?b:a.c,np(this,a.g),this.l=a.l,this.a=a.a,op(this,a.o),this.b=a.b,pp(this,a.i.clone()),this.f=a.f):a&&(c=String(a).match(kp))?(this.c=!!b,np(this,c[1]||"",!0),this.l=qp(c[2]||""),this.a=qp(c[3]||"",!0),op(this,c[4]),this.b=qp(c[5]||"",!0),pp(this,c[6]||"",!0),this.f=qp(c[7]||"")):(this.c=!!b,this.i=new rp(null,0,this.c))}
mp.prototype.toString=function(){var a=[],b=this.g;b&&a.push(sp(b,tp,!0),":");var c=this.a;if(c||"file"==b)a.push("//"),(b=this.l)&&a.push(sp(b,tp,!0),"@"),a.push(encodeURIComponent(String(c)).replace(/%25([0-9a-fA-F]{2})/g,"%$1")),c=this.o,null!=c&&a.push(":",String(c));if(c=this.b)this.a&&"/"!=c.charAt(0)&&a.push("/"),a.push(sp(c,"/"==c.charAt(0)?up:vp,!0));(c=this.i.toString())&&a.push("?",c);(c=this.f)&&a.push("#",sp(c,wp));return a.join("")};mp.prototype.clone=function(){return new mp(this)};
function np(a,b,c){a.g=c?qp(b,!0):b;a.g&&(a.g=a.g.replace(/:$/,""))}function op(a,b){if(b){b=Number(b);if(isNaN(b)||0>b)throw Error("Bad port number "+b);a.o=b}else a.o=null}function pp(a,b,c){b instanceof rp?(a.i=b,xp(a.i,a.c)):(c||(b=sp(b,yp)),a.i=new rp(b,0,a.c))}function zp(a){return a instanceof mp?a.clone():new mp(a,void 0)}
function Ap(a,b){a instanceof mp||(a=zp(a));b instanceof mp||(b=zp(b));var c=a,d=b,e=c.clone(),f=!!d.g;f?np(e,d.g):f=!!d.l;f?e.l=d.l:f=!!d.a;f?e.a=d.a:f=null!=d.o;var g=d.b;if(f)op(e,d.o);else if(f=!!d.b)if("/"!=g.charAt(0)&&(c.a&&!c.b?g="/"+g:(c=e.b.lastIndexOf("/"),-1!=c&&(g=e.b.substr(0,c+1)+g))),c=g,".."==c||"."==c)g="";else if(-1!=c.indexOf("./")||-1!=c.indexOf("/.")){for(var g=0==c.lastIndexOf("/",0),c=c.split("/"),h=[],l=0;l<c.length;){var m=c[l++];"."==m?g&&l==c.length&&h.push(""):".."==m?
((1<h.length||1==h.length&&""!=h[0])&&h.pop(),g&&l==c.length&&h.push("")):(h.push(m),g=!0)}g=h.join("/")}else g=c;f?e.b=g:f=""!==d.i.toString();f?pp(e,qp(d.i.toString())):f=!!d.f;f&&(e.f=d.f);return e}function qp(a,b){return a?b?decodeURI(a.replace(/%25/g,"%2525")):decodeURIComponent(a):""}function sp(a,b,c){return ea(a)?(a=encodeURI(a).replace(b,Bp),c&&(a=a.replace(/%25([0-9a-fA-F]{2})/g,"%$1")),a):null}function Bp(a){a=a.charCodeAt(0);return"%"+(a>>4&15).toString(16)+(a&15).toString(16)}
var tp=/[#\/\?@]/g,vp=/[\#\?:]/g,up=/[\#\?]/g,yp=/[\#\?@]/g,wp=/#/g;function rp(a,b,c){this.a=this.b=null;this.g=a||null;this.f=!!c}function Cp(a){a.b||(a.b=new hp,a.a=0,a.g&&lp(a.g,function(b,c){a.add(decodeURIComponent(b.replace(/\+/g," ")),c)}))}k=rp.prototype;k.wc=function(){Cp(this);return this.a};k.add=function(a,b){Cp(this);this.g=null;a=Dp(this,a);var c=this.b.get(a);c||this.b.set(a,c=[]);c.push(b);this.a=this.a+1;return this};
k.remove=function(a){Cp(this);a=Dp(this,a);return jp(this.b.a,a)?(this.g=null,this.a=this.a-this.b.get(a).length,this.b.remove(a)):!1};k.clear=function(){this.b=this.g=null;this.a=0};k.Ya=function(){Cp(this);return 0==this.a};function Ep(a,b){Cp(a);b=Dp(a,b);return jp(a.b.a,b)}k.N=function(){Cp(this);for(var a=this.b.zc(),b=this.b.N(),c=[],d=0;d<b.length;d++)for(var e=a[d],f=0;f<e.length;f++)c.push(b[d]);return c};
k.zc=function(a){Cp(this);var b=[];if(ea(a))Ep(this,a)&&(b=de(b,this.b.get(Dp(this,a))));else{a=this.b.zc();for(var c=0;c<a.length;c++)b=de(b,a[c])}return b};k.set=function(a,b){Cp(this);this.g=null;a=Dp(this,a);Ep(this,a)&&(this.a=this.a-this.b.get(a).length);this.b.set(a,[b]);this.a=this.a+1;return this};k.get=function(a,b){var c=a?this.zc(a):[];return 0<c.length?String(c[0]):b};
k.toString=function(){if(this.g)return this.g;if(!this.b)return"";for(var a=[],b=this.b.N(),c=0;c<b.length;c++)for(var d=b[c],e=encodeURIComponent(String(d)),d=this.zc(d),f=0;f<d.length;f++){var g=e;""!==d[f]&&(g+="="+encodeURIComponent(String(d[f])));a.push(g)}return this.g=a.join("&")};k.clone=function(){var a=new rp;a.g=this.g;this.b&&(a.b=this.b.clone(),a.a=this.a);return a};function Dp(a,b){var c=String(b);a.f&&(c=c.toLowerCase());return c}
function xp(a,b){b&&!a.f&&(Cp(a),a.g=null,a.b.forEach(function(a,b){var e=b.toLowerCase();b!=e&&(this.remove(b),this.remove(e),0<a.length&&(this.g=null,this.b.set(Dp(this,e),ee(a)),this.a=this.a+a.length))},a));a.f=b};function Fp(a){a=a||{};this.g=a.font;this.i=a.rotation;this.a=a.scale;this.s=a.text;this.o=a.textAlign;this.j=a.textBaseline;this.b=void 0!==a.fill?a.fill:new jj({color:"#333"});this.l=void 0!==a.stroke?a.stroke:null;this.f=void 0!==a.offsetX?a.offsetX:0;this.c=void 0!==a.offsetY?a.offsetY:0}k=Fp.prototype;k.Xj=function(){return this.g};k.kk=function(){return this.f};k.lk=function(){return this.c};k.Un=function(){return this.b};k.Vn=function(){return this.i};k.Wn=function(){return this.a};k.Xn=function(){return this.l};
k.Ha=function(){return this.s};k.yk=function(){return this.o};k.zk=function(){return this.j};k.bp=function(a){this.g=a};k.mi=function(a){this.f=a};k.ni=function(a){this.c=a};k.ap=function(a){this.b=a};k.Yn=function(a){this.i=a};k.Zn=function(a){this.a=a};k.ip=function(a){this.l=a};k.pi=function(a){this.s=a};k.ri=function(a){this.o=a};k.jp=function(a){this.j=a};function Gp(a){a=a?a:{};Tn.call(this);this.defaultDataProjection=zc("EPSG:4326");this.g=a.defaultStyle?a.defaultStyle:Hp;this.c=void 0!==a.extractStyles?a.extractStyles:!0;this.l=void 0!==a.writeStyles?a.writeStyles:!0;this.b={};this.i=void 0!==a.showPointNames?a.showPointNames:!0}x(Gp,Tn);
var Ip=["http://www.google.com/kml/ext/2.2"],Jp=[null,"http://earth.google.com/kml/2.0","http://earth.google.com/kml/2.1","http://earth.google.com/kml/2.2","http://www.opengis.net/kml/2.2"],Kp=[255,255,255,1],Lp=new jj({color:Kp}),Mp=[20,2],Np=[64,64],Op=new Fh({anchor:Mp,anchorOrigin:"bottom-left",anchorXUnits:"pixels",anchorYUnits:"pixels",crossOrigin:"anonymous",rotation:0,scale:.5,size:Np,src:"https://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png"}),Pp=new pj({color:Kp,width:1}),Qp=new Fp({font:"bold 16px Helvetica",
fill:Lp,stroke:new pj({color:[51,51,51,1],width:2}),scale:.8}),Hp=[new sj({fill:Lp,image:Op,text:Qp,stroke:Pp,zIndex:0})],Rp={fraction:"fraction",pixels:"pixels"};function Sp(a,b){var c,d=[0,0],e="start";if(a.a){var f=a.a.ld();f&&2==f.length&&(d[0]=a.a.i*f[0]/2,d[1]=-a.a.i*f[1]/2,e="left")}if(Ga(a.Ha()))c=new Fp({text:b,offsetX:d[0],offsetY:d[1],textAlign:e});else{var f=a.Ha(),g={};for(c in f)g[c]=f[c];c=g;c.pi(b);c.ri(e);c.mi(d[0]);c.ni(d[1])}return new sj({text:c})}
function Tp(a,b,c,d,e){return function(){var f=e,g="";f&&this.X()&&(f="Point"===this.X().Y());f&&(g=this.get("name"),f=f&&g);if(a)return f?(f=Sp(a[0],g),a.concat(f)):a;if(b){var h=Up(b,c,d);return f?(f=Sp(h[0],g),h.concat(f)):h}return f?(f=Sp(c[0],g),c.concat(f)):c}}function Up(a,b,c){return Array.isArray(a)?a:"string"===typeof a?(!(a in c)&&"#"+a in c&&(a="#"+a),Up(c[a],b,c)):b}
function Vp(a){a=Nk(a,!1);if(a=/^\s*#?\s*([0-9A-Fa-f]{8})\s*$/.exec(a))return a=a[1],[parseInt(a.substr(6,2),16),parseInt(a.substr(4,2),16),parseInt(a.substr(2,2),16),parseInt(a.substr(0,2),16)/255]}function Wp(a){a=Nk(a,!1);for(var b=[],c=/^\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?)\s*,\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?)(?:\s*,\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?))?\s*/i,d;d=c.exec(a);)b.push(parseFloat(d[1]),parseFloat(d[2]),d[3]?parseFloat(d[3]):0),a=a.substr(d[0].length);return""!==a?void 0:b}
function Xp(a){var b=Nk(a,!1);return a.baseURI?Ap(a.baseURI,b.trim()).toString():b.trim()}function Yp(a){a=ao(a);if(void 0!==a)return Math.sqrt(a)}function Zp(a,b){return O(null,$p,a,b)}function aq(a,b){var c=O({B:[],zi:[]},bq,a,b);if(c){var d=c.B,c=c.zi,e,f;e=0;for(f=Math.min(d.length,c.length);e<f;++e)d[4*e+3]=c[e];c=new R(null);c.ba("XYZM",d);return c}}function cq(a,b){var c=O({},dq,a,b),d=O(null,eq,a,b);if(d){var e=new R(null);e.ba("XYZ",d);e.G(c);return e}}
function fq(a,b){var c=O({},dq,a,b),d=O(null,eq,a,b);if(d){var e=new E(null);e.ba("XYZ",d,[d.length]);e.G(c);return e}}
function gq(a,b){var c=O([],hq,a,b);if(!c)return null;if(0===c.length)return new Kn(c);var d=!0,e=c[0].Y(),f,g,h;g=1;for(h=c.length;g<h;++g)if(f=c[g],f.Y()!=e){d=!1;break}if(d){if("Point"==e){f=c[0];d=f.f;e=f.la();g=1;for(h=c.length;g<h;++g)f=c[g],jb(e,f.la());f=new T(null);f.ba(d,e);iq(f,c);return f}return"LineString"==e?(f=new S(null),An(f,c),iq(f,c),f):"Polygon"==e?(f=new U(null),Cn(f,c),iq(f,c),f):"GeometryCollection"==e?new Kn(c):null}return new Kn(c)}
function jq(a,b){var c=O({},dq,a,b),d=O(null,eq,a,b);if(d){var e=new C(null);e.ba("XYZ",d);e.G(c);return e}}function kq(a,b){var c=O({},dq,a,b),d=O([null],lq,a,b);if(d&&d[0]){var e=new E(null),f=d[0],g=[f.length],h,l;h=1;for(l=d.length;h<l;++h)jb(f,d[h]),g.push(f.length);e.ba("XYZ",f,g);e.G(c);return e}}
function mq(a,b){var c=O({},nq,a,b);if(!c)return null;var d="fillStyle"in c?c.fillStyle:Lp,e=c.fill;void 0===e||e||(d=null);var e="imageStyle"in c?c.imageStyle:Op,f="textStyle"in c?c.textStyle:Qp,g="strokeStyle"in c?c.strokeStyle:Pp,c=c.outline;void 0===c||c||(g=null);return[new sj({fill:d,image:e,stroke:g,text:f,zIndex:void 0})]}
function iq(a,b){var c=b.length,d=Array(b.length),e=Array(b.length),f,g,h,l;h=l=!1;for(g=0;g<c;++g)f=b[g],d[g]=f.get("extrude"),e[g]=f.get("altitudeMode"),h=h||void 0!==d[g],l=l||e[g];h&&a.set("extrude",d);l&&a.set("altitudeMode",e)}function oq(a,b){al(pq,a,b)}
var qq=N(Jp,{value:Uk(V)}),pq=N(Jp,{Data:function(a,b){var c=a.getAttribute("name");if(null!==c){var d=O(void 0,qq,a,b);d&&(b[b.length-1][c]=d)}},SchemaData:function(a,b){al(rq,a,b)}}),dq=N(Jp,{extrude:K(Yn),altitudeMode:K(V)}),$p=N(Jp,{coordinates:Uk(Wp)}),lq=N(Jp,{innerBoundaryIs:function(a,b){var c=O(void 0,sq,a,b);c&&b[b.length-1].push(c)},outerBoundaryIs:function(a,b){var c=O(void 0,tq,a,b);c&&(b[b.length-1][0]=c)}}),bq=N(Jp,{when:function(a,b){var c=b[b.length-1].zi,d=Nk(a,!1);if(d=/^\s*(\d{4})($|-(\d{2})($|-(\d{2})($|T(\d{2}):(\d{2}):(\d{2})(Z|(?:([+\-])(\d{2})(?::(\d{2}))?)))))\s*$/.exec(d)){var e=
Date.UTC(parseInt(d[1],10),d[3]?parseInt(d[3],10)-1:0,d[5]?parseInt(d[5],10):1,d[7]?parseInt(d[7],10):0,d[8]?parseInt(d[8],10):0,d[9]?parseInt(d[9],10):0);if(d[10]&&"Z"!=d[10]){var f="-"==d[11]?-1:1,e=e+60*f*parseInt(d[12],10);d[13]&&(e+=3600*f*parseInt(d[13],10))}c.push(e)}else c.push(0)}},N(Ip,{coord:function(a,b){var c=b[b.length-1].B,d=Nk(a,!1);(d=/^\s*([+\-]?\d+(?:\.\d*)?(?:e[+\-]?\d*)?)\s+([+\-]?\d+(?:\.\d*)?(?:e[+\-]?\d*)?)\s+([+\-]?\d+(?:\.\d*)?(?:e[+\-]?\d*)?)\s*$/i.exec(d))?c.push(parseFloat(d[1]),
parseFloat(d[2]),parseFloat(d[3]),0):c.push(0,0,0,0)}})),eq=N(Jp,{coordinates:Uk(Wp)}),uq=N(Jp,{href:K(Xp)},N(Ip,{x:K(ao),y:K(ao),w:K(ao),h:K(ao)})),vq=N(Jp,{Icon:K(function(a,b){var c=O({},uq,a,b);return c?c:null}),heading:K(ao),hotSpot:K(function(a){var b=a.getAttribute("xunits"),c=a.getAttribute("yunits");return{x:parseFloat(a.getAttribute("x")),$f:Rp[b],y:parseFloat(a.getAttribute("y")),ag:Rp[c]}}),scale:K(Yp)}),sq=N(Jp,{LinearRing:Uk(Zp)}),wq=N(Jp,{color:K(Vp),scale:K(Yp)}),xq=N(Jp,{color:K(Vp),
width:K(ao)}),hq=N(Jp,{LineString:Tk(cq),LinearRing:Tk(fq),MultiGeometry:Tk(gq),Point:Tk(jq),Polygon:Tk(kq)}),yq=N(Ip,{Track:Tk(aq)}),Aq=N(Jp,{ExtendedData:oq,Link:function(a,b){al(zq,a,b)},address:K(V),description:K(V),name:K(V),open:K(Yn),phoneNumber:K(V),visibility:K(Yn)}),zq=N(Jp,{href:K(Xp)}),tq=N(Jp,{LinearRing:Uk(Zp)}),Bq=N(Jp,{Style:K(mq),key:K(V),styleUrl:K(function(a){var b=Nk(a,!1).trim();return a.baseURI?Ap(a.baseURI,b).toString():b})}),Dq=N(Jp,{ExtendedData:oq,MultiGeometry:K(gq,"geometry"),
LineString:K(cq,"geometry"),LinearRing:K(fq,"geometry"),Point:K(jq,"geometry"),Polygon:K(kq,"geometry"),Style:K(mq),StyleMap:function(a,b){var c=O(void 0,Cq,a,b);if(c){var d=b[b.length-1];Array.isArray(c)?d.Style=c:"string"===typeof c&&(d.styleUrl=c)}},address:K(V),description:K(V),name:K(V),open:K(Yn),phoneNumber:K(V),styleUrl:K(Xp),visibility:K(Yn)},N(Ip,{MultiTrack:K(function(a,b){var c=O([],yq,a,b);if(c){var d=new S(null);An(d,c);return d}},"geometry"),Track:K(aq,"geometry")})),Eq=N(Jp,{color:K(Vp),
fill:K(Yn),outline:K(Yn)}),rq=N(Jp,{SimpleData:function(a,b){var c=a.getAttribute("name");if(null!==c){var d=V(a);b[b.length-1][c]=d}}}),nq=N(Jp,{IconStyle:function(a,b){var c=O({},vq,a,b);if(c){var d=b[b.length-1],e="Icon"in c?c.Icon:{},f;f=(f=e.href)?f:"https://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png";var g,h,l,m=c.hotSpot;m?(g=[m.x,m.y],h=m.$f,l=m.ag):"https://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png"===f?(g=Mp,l=h="pixels"):/^http:\/\/maps\.(?:google|gstatic)\.com\//.test(f)&&
(g=[.5,0],l=h="fraction");var n,m=e.x,p=e.y;void 0!==m&&void 0!==p&&(n=[m,p]);var q,m=e.w,e=e.h;void 0!==m&&void 0!==e&&(q=[m,e]);var r,e=c.heading;void 0!==e&&(r=wa(e));c=c.scale;"https://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png"==f&&(q=Np,void 0===c&&(c=.5));g=new Fh({anchor:g,anchorOrigin:"bottom-left",anchorXUnits:h,anchorYUnits:l,crossOrigin:"anonymous",offset:n,offsetOrigin:"bottom-left",rotation:r,scale:c,size:q,src:f});d.imageStyle=g}},LabelStyle:function(a,b){var c=O({},wq,a,
b);c&&(b[b.length-1].textStyle=new Fp({fill:new jj({color:"color"in c?c.color:Kp}),scale:c.scale}))},LineStyle:function(a,b){var c=O({},xq,a,b);c&&(b[b.length-1].strokeStyle=new pj({color:"color"in c?c.color:Kp,width:"width"in c?c.width:1}))},PolyStyle:function(a,b){var c=O({},Eq,a,b);if(c){var d=b[b.length-1];d.fillStyle=new jj({color:"color"in c?c.color:Kp});var e=c.fill;void 0!==e&&(d.fill=e);c=c.outline;void 0!==c&&(d.outline=c)}}}),Cq=N(Jp,{Pair:function(a,b){var c=O({},Bq,a,b);if(c){var d=c.key;
d&&"normal"==d&&((d=c.styleUrl)&&(b[b.length-1]=d),(c=c.Style)&&(b[b.length-1]=c))}}});k=Gp.prototype;k.Gf=function(a,b){var c=N(Jp,{Document:Sk(this.Gf,this),Folder:Sk(this.Gf,this),Placemark:Tk(this.Of,this),Style:this.Lo.bind(this),StyleMap:this.Ko.bind(this)});if(c=O([],c,a,b,this))return c};
k.Of=function(a,b){var c=O({geometry:null},Dq,a,b);if(c){var d=new Ik,e=a.getAttribute("id");null!==e&&d.mc(e);var e=b[0],f=c.geometry;f&&un(f,!1,e);d.Ua(f);delete c.geometry;this.c&&d.sf(Tp(c.Style,c.styleUrl,this.g,this.b,this.i));delete c.Style;d.G(c);return d}};k.Lo=function(a,b){var c=a.getAttribute("id");if(null!==c){var d=mq(a,b);d&&(c=a.baseURI?Ap(a.baseURI,"#"+c).toString():"#"+c,this.b[c]=d)}};
k.Ko=function(a,b){var c=a.getAttribute("id");if(null!==c){var d=O(void 0,Cq,a,b);d&&(c=a.baseURI?Ap(a.baseURI,"#"+c).toString():"#"+c,this.b[c]=d)}};k.Ph=function(a,b){if(!gb(Jp,a.namespaceURI))return null;var c=this.Of(a,[sn(this,a,b)]);return c?c:null};
k.lc=function(a,b){if(!gb(Jp,a.namespaceURI))return[];var c;c=a.localName;if("Document"==c||"Folder"==c)return(c=this.Gf(a,[sn(this,a,b)]))?c:[];if("Placemark"==c)return(c=this.Of(a,[sn(this,a,b)]))?[c]:[];if("kml"==c){c=[];var d;for(d=a.firstElementChild;d;d=d.nextElementSibling){var e=this.lc(d,b);e&&jb(c,e)}return c}return[]};k.Fo=function(a){if(Pk(a))return Fq(this,a);if(Qk(a))return Gq(this,a);if("string"===typeof a)return a=Rk(a),Fq(this,a)};
function Fq(a,b){var c;for(c=b.firstChild;c;c=c.nextSibling)if(c.nodeType==Node.ELEMENT_NODE){var d=Gq(a,c);if(d)return d}}function Gq(a,b){var c;for(c=b.firstElementChild;c;c=c.nextElementSibling)if(gb(Jp,c.namespaceURI)&&"name"==c.localName)return V(c);for(c=b.firstElementChild;c;c=c.nextElementSibling){var d=c.localName;if(gb(Jp,c.namespaceURI)&&("Document"==d||"Folder"==d||"Placemark"==d||"kml"==d)&&(d=Gq(a,c)))return d}}
k.Go=function(a){var b=[];Pk(a)?jb(b,Hq(this,a)):Qk(a)?jb(b,Iq(this,a)):"string"===typeof a&&(a=Rk(a),jb(b,Hq(this,a)));return b};function Hq(a,b){var c,d=[];for(c=b.firstChild;c;c=c.nextSibling)c.nodeType==Node.ELEMENT_NODE&&jb(d,Iq(a,c));return d}
function Iq(a,b){var c,d=[];for(c=b.firstElementChild;c;c=c.nextElementSibling)if(gb(Jp,c.namespaceURI)&&"NetworkLink"==c.localName){var e=O({},Aq,c,[]);d.push(e)}for(c=b.firstElementChild;c;c=c.nextElementSibling)e=c.localName,!gb(Jp,c.namespaceURI)||"Document"!=e&&"Folder"!=e&&"kml"!=e||jb(d,Iq(a,c));return d}function Jq(a,b){var c=je(b),c=[255*(4==c.length?c[3]:1),c[2],c[1],c[0]],d;for(d=0;4>d;++d){var e=parseInt(c[d],10).toString(16);c[d]=1==e.length?"0"+e:e}go(a,c.join(""))}
function Kq(a,b,c){a={node:a};var d=b.Y(),e,f;"GeometryCollection"==d?(e=b.ff(),f=Lq):"MultiPoint"==d?(e=b.je(),f=Mq):"MultiLineString"==d?(e=b.md(),f=Nq):"MultiPolygon"==d&&(e=b.Wd(),f=Oq);bl(a,Pq,f,e,c)}function Qq(a,b,c){bl({node:a},Rq,Sq,[b],c)}
function Tq(a,b,c){var d={node:a};b.Xa()&&a.setAttribute("id",b.Xa());a=b.O();var e=b.ec();e&&(e=e.call(b,0))&&(e=Array.isArray(e)?e[0]:e,this.l&&(a.Style=e),(e=e.Ha())&&(a.name=e.Ha()));e=Uq[c[c.length-1].node.namespaceURI];a=$k(a,e);bl(d,Vq,Zk,a,c,e);a=c[0];(b=b.X())&&(b=un(b,!0,a));bl(d,Vq,Lq,[b],c)}function Wq(a,b,c){var d=b.la();a={node:a};a.layout=b.f;a.stride=b.va();bl(a,Xq,Yq,[d],c)}function Zq(a,b,c){b=b.Vd();var d=b.shift();a={node:a};bl(a,$q,ar,b,c);bl(a,$q,br,[d],c)}
function cr(a,b){ho(a,Math.round(b*b*1E6)/1E6)}
var dr=N(Jp,["Document","Placemark"]),gr=N(Jp,{Document:L(function(a,b,c){bl({node:a},er,fr,b,c,void 0,this)}),Placemark:L(Tq)}),er=N(Jp,{Placemark:L(Tq)}),hr={Point:"Point",LineString:"LineString",LinearRing:"LinearRing",Polygon:"Polygon",MultiPoint:"MultiGeometry",MultiLineString:"MultiGeometry",MultiPolygon:"MultiGeometry",GeometryCollection:"MultiGeometry"},ir=N(Jp,["href"],N(Ip,["x","y","w","h"])),jr=N(Jp,{href:L(go)},N(Ip,{x:L(ho),y:L(ho),w:L(ho),h:L(ho)})),kr=N(Jp,["scale","heading","Icon",
"hotSpot"]),mr=N(Jp,{Icon:L(function(a,b,c){a={node:a};var d=ir[c[c.length-1].node.namespaceURI],e=$k(b,d);bl(a,jr,Zk,e,c,d);d=ir[Ip[0]];e=$k(b,d);bl(a,jr,lr,e,c,d)}),heading:L(ho),hotSpot:L(function(a,b){a.setAttribute("x",b.x);a.setAttribute("y",b.y);a.setAttribute("xunits",b.$f);a.setAttribute("yunits",b.ag)}),scale:L(cr)}),nr=N(Jp,["color","scale"]),or=N(Jp,{color:L(Jq),scale:L(cr)}),pr=N(Jp,["color","width"]),qr=N(Jp,{color:L(Jq),width:L(ho)}),Rq=N(Jp,{LinearRing:L(Wq)}),Pq=N(Jp,{LineString:L(Wq),
Point:L(Wq),Polygon:L(Zq),GeometryCollection:L(Kq)}),Uq=N(Jp,"name open visibility address phoneNumber description styleUrl Style".split(" ")),Vq=N(Jp,{MultiGeometry:L(Kq),LineString:L(Wq),LinearRing:L(Wq),Point:L(Wq),Polygon:L(Zq),Style:L(function(a,b,c){a={node:a};var d={},e=b.c,f=b.f,g=b.a;b=b.Ha();g instanceof Fh&&(d.IconStyle=g);b&&(d.LabelStyle=b);f&&(d.LineStyle=f);e&&(d.PolyStyle=e);b=rr[c[c.length-1].node.namespaceURI];d=$k(d,b);bl(a,sr,Zk,d,c,b)}),address:L(go),description:L(go),name:L(go),
open:L(fo),phoneNumber:L(go),styleUrl:L(go),visibility:L(fo)}),Xq=N(Jp,{coordinates:L(function(a,b,c){c=c[c.length-1];var d=c.layout;c=c.stride;var e;"XY"==d||"XYM"==d?e=2:("XYZ"==d||"XYZM"==d)&&(e=3);var f,g=b.length,h="";if(0<g){h+=b[0];for(d=1;d<e;++d)h+=","+b[d];for(f=c;f<g;f+=c)for(h+=" "+b[f],d=1;d<e;++d)h+=","+b[f+d]}go(a,h)})}),$q=N(Jp,{outerBoundaryIs:L(Qq),innerBoundaryIs:L(Qq)}),tr=N(Jp,{color:L(Jq)}),rr=N(Jp,["IconStyle","LabelStyle","LineStyle","PolyStyle"]),sr=N(Jp,{IconStyle:L(function(a,
b,c){a={node:a};var d={},e=b.Gb(),f=b.ld(),g={href:b.b.j};if(e){g.w=e[0];g.h=e[1];var h=b.Zb(),l=b.Ia();l&&f&&0!==l[0]&&l[1]!==e[1]&&(g.x=l[0],g.y=f[1]-(l[1]+e[1]));h&&0!==h[0]&&h[1]!==e[1]&&(d.hotSpot={x:h[0],$f:"pixels",y:e[1]-h[1],ag:"pixels"})}d.Icon=g;e=b.i;1!==e&&(d.scale=e);b=b.j;0!==b&&(d.heading=b);b=kr[c[c.length-1].node.namespaceURI];d=$k(d,b);bl(a,mr,Zk,d,c,b)}),LabelStyle:L(function(a,b,c){a={node:a};var d={},e=b.b;e&&(d.color=e.b);(b=b.a)&&1!==b&&(d.scale=b);b=nr[c[c.length-1].node.namespaceURI];
d=$k(d,b);bl(a,or,Zk,d,c,b)}),LineStyle:L(function(a,b,c){a={node:a};var d=pr[c[c.length-1].node.namespaceURI];b=$k({color:b.b,width:b.a},d);bl(a,qr,Zk,b,c,d)}),PolyStyle:L(function(a,b,c){bl({node:a},tr,ur,[b.b],c)})});function lr(a,b,c){return Mk(Ip[0],"gx:"+c)}function fr(a,b){return Mk(b[b.length-1].node.namespaceURI,"Placemark")}function Lq(a,b){if(a)return Mk(b[b.length-1].node.namespaceURI,hr[a.Y()])}
var ur=Xk("color"),Yq=Xk("coordinates"),ar=Xk("innerBoundaryIs"),Mq=Xk("Point"),Nq=Xk("LineString"),Sq=Xk("LinearRing"),Oq=Xk("Polygon"),br=Xk("outerBoundaryIs");
Gp.prototype.a=function(a,b){b=tn(this,b);var c=Mk(Jp[4],"kml");c.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:gx",Ip[0]);c.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:xsi","http://www.w3.org/2001/XMLSchema-instance");c.setAttributeNS("http://www.w3.org/2001/XMLSchema-instance","xsi:schemaLocation","http://www.opengis.net/kml/2.2 https://developers.google.com/kml/schema/kml22gx.xsd");var d={node:c},e={};1<a.length?e.Document=a:1==a.length&&(e.Placemark=a[0]);var f=dr[c.namespaceURI],
e=$k(e,f);bl(d,gr,Zk,e,[b],f,this);return c};(function(){var a={},b={ja:a};(function(c){if("object"===typeof a&&"undefined"!==typeof b)b.ja=c();else{var d;"undefined"!==typeof window?d=window:"undefined"!==typeof global?d=global:"undefined"!==typeof self?d=self:d=this;d.Rp=c()}})(function(){return function d(a,b,g){function h(m,p){if(!b[m]){if(!a[m]){var q="function"==typeof require&&require;if(!p&&q)return q(m,!0);if(l)return l(m,!0);q=Error("Cannot find module '"+m+"'");throw q.code="MODULE_NOT_FOUND",q;}q=b[m]={ja:{}};a[m][0].call(q.ja,function(b){var d=
a[m][1][b];return h(d?d:b)},q,q.ja,d,a,b,g)}return b[m].ja}for(var l="function"==typeof require&&require,m=0;m<g.length;m++)h(g[m]);return h}({1:[function(a,b,f){f.read=function(a,b,d,e,f){var p;p=8*f-e-1;var q=(1<<p)-1,r=q>>1,v=-7;f=d?f-1:0;var y=d?-1:1,w=a[b+f];f+=y;d=w&(1<<-v)-1;w>>=-v;for(v+=p;0<v;d=256*d+a[b+f],f+=y,v-=8);p=d&(1<<-v)-1;d>>=-v;for(v+=e;0<v;p=256*p+a[b+f],f+=y,v-=8);if(0===d)d=1-r;else{if(d===q)return p?NaN:Infinity*(w?-1:1);p+=Math.pow(2,e);d-=r}return(w?-1:1)*p*Math.pow(2,d-
e)};f.write=function(a,b,d,e,f,p){var q,r=8*p-f-1,v=(1<<r)-1,y=v>>1,w=23===f?Math.pow(2,-24)-Math.pow(2,-77):0;p=e?0:p-1;var G=e?1:-1,z=0>b||0===b&&0>1/b?1:0;b=Math.abs(b);isNaN(b)||Infinity===b?(b=isNaN(b)?1:0,e=v):(e=Math.floor(Math.log(b)/Math.LN2),1>b*(q=Math.pow(2,-e))&&(e--,q*=2),b=1<=e+y?b+w/q:b+w*Math.pow(2,1-y),2<=b*q&&(e++,q/=2),e+y>=v?(b=0,e=v):1<=e+y?(b=(b*q-1)*Math.pow(2,f),e+=y):(b=b*Math.pow(2,y-1)*Math.pow(2,f),e=0));for(;8<=f;a[d+p]=b&255,p+=G,b/=256,f-=8);e=e<<f|b;for(r+=f;0<r;a[d+
p]=e&255,p+=G,e/=256,r-=8);a[d+p-G]|=128*z}},{}],2:[function(a,b){function f(a){var b;a&&a.length&&(b=a,a=b.length);a=new Uint8Array(a||0);b&&a.set(b);a.$h=l.$h;a.Zf=l.Zf;a.Sh=l.Sh;a.Ei=l.Ei;a.Nf=l.Nf;a.Di=l.Di;a.Hf=l.Hf;a.Ai=l.Ai;a.toString=l.toString;a.write=l.write;a.slice=l.slice;a.tg=l.tg;a.nj=!0;return a}function g(a){for(var b=a.length,d=[],e=0,f,g;e<b;e++){f=a.charCodeAt(e);if(55295<f&&57344>f)if(g)if(56320>f){d.push(239,191,189);g=f;continue}else f=g-55296<<10|f-56320|65536,g=null;else{56319<
f||e+1===b?d.push(239,191,189):g=f;continue}else g&&(d.push(239,191,189),g=null);128>f?d.push(f):2048>f?d.push(f>>6|192,f&63|128):65536>f?d.push(f>>12|224,f>>6&63|128,f&63|128):d.push(f>>18|240,f>>12&63|128,f>>6&63|128,f&63|128)}return d}b.ja=f;var h=a("ieee754"),l,m,n;l={$h:function(a){return(this[a]|this[a+1]<<8|this[a+2]<<16)+16777216*this[a+3]},Zf:function(a,b){this[b]=a;this[b+1]=a>>>8;this[b+2]=a>>>16;this[b+3]=a>>>24},Sh:function(a){return(this[a]|this[a+1]<<8|this[a+2]<<16)+(this[a+3]<<24)},
Nf:function(a){return h.read(this,a,!0,23,4)},Hf:function(a){return h.read(this,a,!0,52,8)},Di:function(a,b){return h.write(this,a,b,!0,23,4)},Ai:function(a,b){return h.write(this,a,b,!0,52,8)},toString:function(a,b,d){var e=a="";d=Math.min(this.length,d||this.length);for(b=b||0;b<d;b++){var f=this[b];127>=f?(a+=decodeURIComponent(e)+String.fromCharCode(f),e=""):e+="%"+f.toString(16)}return a+=decodeURIComponent(e)},write:function(a,b){for(var d=a===m?n:g(a),e=0;e<d.length;e++)this[b+e]=d[e]},slice:function(a,
b){return this.subarray(a,b)},tg:function(a,b){b=b||0;for(var d=0;d<this.length;d++)a[b+d]=this[d]}};l.Ei=l.Zf;f.byteLength=function(a){m=a;n=g(a);return n.length};f.isBuffer=function(a){return!(!a||!a.nj)}},{ieee754:1}],3:[function(a,b){(function(f){function g(a){this.Db=l.isBuffer(a)?a:new l(a||0);this.da=0;this.length=this.Db.length}function h(a,b){var d=b.Db,e;e=d[b.da++];a+=268435456*(e&127);if(128>e)return a;e=d[b.da++];a+=34359738368*(e&127);if(128>e)return a;e=d[b.da++];a+=4398046511104*(e&
127);if(128>e)return a;e=d[b.da++];a+=562949953421312*(e&127);if(128>e)return a;e=d[b.da++];a+=72057594037927936*(e&127);if(128>e)return a;e=d[b.da++];if(128>e)return a+0x7fffffffffffffff*(e&127);throw Error("Expected varint not more than 10 bytes");}b.ja=g;var l=f.Ap||a("./buffer");g.f=0;g.g=1;g.b=2;g.a=5;var m=Math.pow(2,63);g.prototype={Lf:function(a,b,d){for(d=d||this.length;this.da<d;){var e=this.Da(),f=this.da;a(e>>3,b,this);this.da===f&&this.op(e)}return b},Bo:function(){var a=this.Db.Nf(this.da);
this.da+=4;return a},xo:function(){var a=this.Db.Hf(this.da);this.da+=8;return a},Da:function(){var a=this.Db,b,d;d=a[this.da++];b=d&127;if(128>d)return b;d=a[this.da++];b|=(d&127)<<7;if(128>d)return b;d=a[this.da++];b|=(d&127)<<14;if(128>d)return b;d=a[this.da++];b|=(d&127)<<21;return 128>d?b:h(b,this)},Mo:function(){var a=this.da,b=this.Da();if(b<m)return b;for(var d=this.da-2;255===this.Db[d];)d--;d<a&&(d=a);for(var e=b=0;e<d-a+1;e++)var f=~this.Db[a+e]&127,b=b+(4>e?f<<7*e:f*Math.pow(2,7*e));return-b-
1},xd:function(){var a=this.Da();return 1===a%2?(a+1)/-2:a/2},vo:function(){return!!this.Da()},Qf:function(){var a=this.Da()+this.da,b=this.Db.toString("utf8",this.da,a);this.da=a;return b},op:function(a){a&=7;if(a===g.f)for(;127<this.Db[this.da++];);else if(a===g.b)this.da=this.Da()+this.da;else if(a===g.a)this.da+=4;else if(a===g.g)this.da+=8;else throw Error("Unimplemented type: "+a);}}}).call(this,"undefined"!==typeof global?global:"undefined"!==typeof self?self:"undefined"!==typeof window?window:
{})},{"./buffer":2}]},{},[3])(3)});hl=b.ja})();(function(){var a={},b={ja:a};(function(c){if("object"===typeof a&&"undefined"!==typeof b)b.ja=c();else{var d;"undefined"!==typeof window?d=window:"undefined"!==typeof global?d=global:"undefined"!==typeof self?d=self:d=this;d.Up=c()}})(function(){return function d(a,b,g){function h(m,p){if(!b[m]){if(!a[m]){var q="function"==typeof require&&require;if(!p&&q)return q(m,!0);if(l)return l(m,!0);q=Error("Cannot find module '"+m+"'");throw q.code="MODULE_NOT_FOUND",q;}q=b[m]={ja:{}};a[m][0].call(q.ja,function(b){var d=
a[m][1][b];return h(d?d:b)},q,q.ja,d,a,b,g)}return b[m].ja}for(var l="function"==typeof require&&require,m=0;m<g.length;m++)h(g[m]);return h}({1:[function(a,b){function f(a,b){this.x=a;this.y=b}b.ja=f;f.prototype={clone:function(){return new f(this.x,this.y)},add:function(a){return this.clone().fj(a)},rotate:function(a){return this.clone().qj(a)},round:function(){return this.clone().rj()},angle:function(){return Math.atan2(this.y,this.x)},fj:function(a){this.x+=a.x;this.y+=a.y;return this},qj:function(a){var b=
Math.cos(a);a=Math.sin(a);var d=a*this.x+b*this.y;this.x=b*this.x-a*this.y;this.y=d;return this},rj:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);return this}};f.b=function(a){return a instanceof f?a:Array.isArray(a)?new f(a[0],a[1]):a}},{}],2:[function(a,b){b.ja.ej=a("./lib/vectortile.js");b.ja.Np=a("./lib/vectortilefeature.js");b.ja.Op=a("./lib/vectortilelayer.js")},{"./lib/vectortile.js":3,"./lib/vectortilefeature.js":4,"./lib/vectortilelayer.js":5}],3:[function(a,b){function f(a,
b,d){3===a&&(a=new g(d,d.Da()+d.da),a.length&&(b[a.name]=a))}var g=a("./vectortilelayer");b.ja=function(a,b){this.layers=a.Lf(f,{},b)}},{"./vectortilelayer":5}],4:[function(a,b){function f(a,b,d,e,f){this.properties={};this.extent=d;this.type=0;this.qc=a;this.Qe=-1;this.Id=e;this.Kd=f;a.Lf(g,this,b)}function g(a,b,d){if(1==a)b.Qp=d.Da();else if(2==a)for(a=d.Da()+d.da;d.da<a;){var e=b.Id[d.Da()],f=b.Kd[d.Da()];b.properties[e]=f}else 3==a?b.type=d.Da():4==a&&(b.Qe=d.da)}var h=a("point-geometry");b.ja=
f;f.b=["Unknown","Point","LineString","Polygon"];f.prototype.Vg=function(){var a=this.qc;a.da=this.Qe;for(var b=a.Da()+a.da,d=1,e=0,f=0,g=0,v=[],y;a.da<b;)if(e||(e=a.Da(),d=e&7,e>>=3),e--,1===d||2===d)f+=a.xd(),g+=a.xd(),1===d&&(y&&v.push(y),y=[]),y.push(new h(f,g));else if(7===d)y&&y.push(y[0].clone());else throw Error("unknown command "+d);y&&v.push(y);return v};f.prototype.bbox=function(){var a=this.qc;a.da=this.Qe;for(var b=a.Da()+a.da,d=1,e=0,f=0,g=0,h=Infinity,y=-Infinity,w=Infinity,G=-Infinity;a.da<
b;)if(e||(e=a.Da(),d=e&7,e>>=3),e--,1===d||2===d)f+=a.xd(),g+=a.xd(),f<h&&(h=f),f>y&&(y=f),g<w&&(w=g),g>G&&(G=g);else if(7!==d)throw Error("unknown command "+d);return[h,w,y,G]}},{"point-geometry":1}],5:[function(a,b){function f(a,b){this.version=1;this.name=null;this.extent=4096;this.length=0;this.qc=a;this.Id=[];this.Kd=[];this.Hd=[];a.Lf(g,this,b);this.length=this.Hd.length}function g(a,b,d){15===a?b.version=d.Da():1===a?b.name=d.Qf():5===a?b.extent=d.Da():2===a?b.Hd.push(d.da):3===a?b.Id.push(d.Qf()):
4===a&&b.Kd.push(h(d))}function h(a){for(var b=null,d=a.Da()+a.da;a.da<d;)b=a.Da()>>3,b=1===b?a.Qf():2===b?a.Bo():3===b?a.xo():4===b?a.Mo():5===b?a.Da():6===b?a.xd():7===b?a.vo():null;return b}var l=a("./vectortilefeature.js");b.ja=f;f.prototype.feature=function(a){if(0>a||a>=this.Hd.length)throw Error("feature index out of bounds");this.qc.da=this.Hd[a];a=this.qc.Da()+this.qc.da;return new l(this.qc,a,this.extent,this.Id,this.Kd)}},{"./vectortilefeature.js":4}]},{},[2])(2)});il=b.ja})();function vr(a){this.defaultDataProjection=null;a=a?a:{};this.defaultDataProjection=new wc({code:"",units:"tile-pixels"});this.b=a.featureClass?a.featureClass:ik;this.g=a.geometryName?a.geometryName:"geometry";this.a=a.layerName?a.layerName:"layer";this.f=a.layers?a.layers:null}x(vr,rn);vr.prototype.Y=function(){return"arraybuffer"};
vr.prototype.Fa=function(a,b){var c=this.f,d=new hl(a),d=new il.ej(d),e=[],f=this.b,g,h,l;for(l in d.layers)if(!c||-1!=c.indexOf(l)){g=d.layers[l];for(var m=0,n=g.length;m<n;++m){if(f===ik){var p=g.feature(m);h=l;var q=p.Vg(),r=[],v=[];wr(q,v,r);var y=p.type,w=void 0;1===y?w=1===q.length?"Point":"MultiPoint":2===y?w=1===q.length?"LineString":"MultiLineString":3===y&&(w="Polygon");p=p.properties;p[this.a]=h;h=new this.b(w,v,r,p)}else{p=g.feature(m);w=l;v=b;h=new this.b;r=p.properties;r[this.a]=w;w=
p.type;if(0===w)w=null;else{p=p.Vg();q=[];y=[];wr(p,y,q);var G=void 0;1===w?G=1===p.length?new C(null):new T(null):2===w?1===p.length?G=new R(null):G=new S(null):3===w&&(G=new E(null));G.ba("XY",y,q);w=G}(v=un(w,!1,tn(this,v)))&&(r[this.g]=v);h.G(r);h.Ec(this.g)}e.push(h)}}return e};vr.prototype.Oa=function(){return this.defaultDataProjection};vr.prototype.c=function(a){this.f=a};
function wr(a,b,c){for(var d=0,e=0,f=a.length;e<f;++e){var g=a[e],h,l;h=0;for(l=g.length;h<l;++h){var m=g[h];b.push(m.x,m.y)}d+=2*h;c.push(d)}};function xr(a,b){return new yr(a,b)}function zr(a,b,c){return new Ar(a,b,c)}function Br(a){this.Xb=a}function Cr(a){this.Xb=a}x(Cr,Br);function Dr(a,b,c){this.Xb=a;this.b=b;this.a=c}x(Dr,Cr);function yr(a,b){Dr.call(this,"And",a,b)}x(yr,Dr);function Er(a,b){Dr.call(this,"Or",a,b)}x(Er,Dr);function Fr(a){this.Xb="Not";this.condition=a}x(Fr,Cr);function Ar(a,b,c){this.Xb="BBOX";this.geometryName=a;this.extent=b;this.srsName=c}x(Ar,Br);function Gr(a,b){this.Xb=a;this.b=b}x(Gr,Br);
function Hr(a,b,c,d){Gr.call(this,a,b);this.g=c;this.a=d}x(Hr,Gr);function Ir(a,b,c){Hr.call(this,"PropertyIsEqualTo",a,b,c)}x(Ir,Hr);function Jr(a,b,c){Hr.call(this,"PropertyIsNotEqualTo",a,b,c)}x(Jr,Hr);function Kr(a,b){Hr.call(this,"PropertyIsLessThan",a,b)}x(Kr,Hr);function Lr(a,b){Hr.call(this,"PropertyIsLessThanOrEqualTo",a,b)}x(Lr,Hr);function Mr(a,b){Hr.call(this,"PropertyIsGreaterThan",a,b)}x(Mr,Hr);function Nr(a,b){Hr.call(this,"PropertyIsGreaterThanOrEqualTo",a,b)}x(Nr,Hr);
function Or(a){Gr.call(this,"PropertyIsNull",a)}x(Or,Gr);function Pr(a,b,c){Gr.call(this,"PropertyIsBetween",a);this.a=b;this.g=c}x(Pr,Gr);function Qr(a,b,c,d,e,f){Gr.call(this,"PropertyIsLike",a);this.f=b;this.i=void 0!==c?c:"*";this.c=void 0!==d?d:".";this.g=void 0!==e?e:"!";this.a=f}x(Qr,Gr);function Rr(){Tn.call(this);this.defaultDataProjection=zc("EPSG:4326")}x(Rr,Tn);function Sr(a,b){b[b.length-1].Cd[a.getAttribute("k")]=a.getAttribute("v")}
var Tr=[null],Ur=N(Tr,{nd:function(a,b){b[b.length-1].Rc.push(a.getAttribute("ref"))},tag:Sr}),Wr=N(Tr,{node:function(a,b){var c=b[0],d=b[b.length-1],e=a.getAttribute("id"),f=[parseFloat(a.getAttribute("lon")),parseFloat(a.getAttribute("lat"))];d.Zg[e]=f;var g=O({Cd:{}},Vr,a,b);Ga(g.Cd)||(f=new C(f),un(f,!1,c),c=new Ik(f),c.mc(e),c.G(g.Cd),d.features.push(c))},way:function(a,b){for(var c=b[0],d=a.getAttribute("id"),e=O({Rc:[],Cd:{}},Ur,a,b),f=b[b.length-1],g=[],h=0,l=e.Rc.length;h<l;h++)jb(g,f.Zg[e.Rc[h]]);
e.Rc[0]==e.Rc[e.Rc.length-1]?(h=new E(null),h.ba("XY",g,[g.length])):(h=new R(null),h.ba("XY",g));un(h,!1,c);c=new Ik(h);c.mc(d);c.G(e.Cd);f.features.push(c)}}),Vr=N(Tr,{tag:Sr});Rr.prototype.lc=function(a,b){var c=sn(this,a,b);return"osm"==a.localName&&(c=O({Zg:{},features:[]},Wr,a,[c]),c.features)?c.features:[]};function Xr(a){return a.getAttributeNS("http://www.w3.org/1999/xlink","href")};function Yr(){}Yr.prototype.read=function(a){return Pk(a)?this.a(a):Qk(a)?this.b(a):"string"===typeof a?(a=Rk(a),this.a(a)):null};function Zr(){}x(Zr,Yr);Zr.prototype.a=function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType==Node.ELEMENT_NODE)return this.b(a);return null};Zr.prototype.b=function(a){return(a=O({},$r,a,[]))?a:null};
var as=[null,"http://www.opengis.net/ows/1.1"],$r=N(as,{ServiceIdentification:K(function(a,b){return O({},bs,a,b)}),ServiceProvider:K(function(a,b){return O({},cs,a,b)}),OperationsMetadata:K(function(a,b){return O({},ds,a,b)})}),es=N(as,{DeliveryPoint:K(V),City:K(V),AdministrativeArea:K(V),PostalCode:K(V),Country:K(V),ElectronicMailAddress:K(V)}),fs=N(as,{Value:Vk(function(a){return V(a)})}),gs=N(as,{AllowedValues:K(function(a,b){return O({},fs,a,b)})}),is=N(as,{Phone:K(function(a,b){return O({},
hs,a,b)}),Address:K(function(a,b){return O({},es,a,b)})}),ks=N(as,{HTTP:K(function(a,b){return O({},js,a,b)})}),js=N(as,{Get:Vk(function(a,b){var c=Xr(a);return c?O({href:c},ls,a,b):void 0}),Post:void 0}),ms=N(as,{DCP:K(function(a,b){return O({},ks,a,b)})}),ds=N(as,{Operation:function(a,b){var c=a.getAttribute("name"),d=O({},ms,a,b);d&&(b[b.length-1][c]=d)}}),hs=N(as,{Voice:K(V),Facsimile:K(V)}),ls=N(as,{Constraint:Vk(function(a,b){var c=a.getAttribute("name");return c?O({name:c},gs,a,b):void 0})}),
ns=N(as,{IndividualName:K(V),PositionName:K(V),ContactInfo:K(function(a,b){return O({},is,a,b)})}),bs=N(as,{Title:K(V),ServiceTypeVersion:K(V),ServiceType:K(V)}),cs=N(as,{ProviderName:K(V),ProviderSite:K(Xr),ServiceContact:K(function(a,b){return O({},ns,a,b)})});function os(a,b,c,d){var e;void 0!==d?e=d:e=[];for(var f=d=0;f<b;){var g=a[f++];e[d++]=a[f++];e[d++]=g;for(g=2;g<c;++g)e[d++]=a[f++]}e.length=d};function ps(a){a=a?a:{};this.defaultDataProjection=null;this.defaultDataProjection=zc("EPSG:4326");this.b=a.factor?a.factor:1E5;this.a=a.geometryLayout?a.geometryLayout:"XY"}x(ps,ap);function qs(a,b,c){var d,e=Array(b);for(d=0;d<b;++d)e[d]=0;var f,g;f=0;for(g=a.length;f<g;)for(d=0;d<b;++d,++f){var h=a[f],l=h-e[d];e[d]=h;a[f]=l}return rs(a,c?c:1E5)}
function ss(a,b,c){var d,e=Array(b);for(d=0;d<b;++d)e[d]=0;a=ts(a,c?c:1E5);var f;c=0;for(f=a.length;c<f;)for(d=0;d<b;++d,++c)e[d]+=a[c],a[c]=e[d];return a}function rs(a,b){var c=b?b:1E5,d,e;d=0;for(e=a.length;d<e;++d)a[d]=Math.round(a[d]*c);c=0;for(d=a.length;c<d;++c)e=a[c],a[c]=0>e?~(e<<1):e<<1;c="";d=0;for(e=a.length;d<e;++d){for(var f=a[d],g,h="";32<=f;)g=(32|f&31)+63,h+=String.fromCharCode(g),f>>=5;h+=String.fromCharCode(f+63);c+=h}return c}
function ts(a,b){var c=b?b:1E5,d=[],e=0,f=0,g,h;g=0;for(h=a.length;g<h;++g){var l=a.charCodeAt(g)-63,e=e|(l&31)<<f;32>l?(d.push(e),f=e=0):f+=5}e=0;for(f=d.length;e<f;++e)g=d[e],d[e]=g&1?~(g>>1):g>>1;e=0;for(f=d.length;e<f;++e)d[e]/=c;return d}k=ps.prototype;k.ud=function(a,b){var c=this.wd(a,b);return new Ik(c)};k.Kf=function(a,b){return[this.ud(a,b)]};k.wd=function(a,b){var c=Xc(this.a),d=ss(a,c,this.b);os(d,d.length,c,d);c=jd(d,0,d.length,c);return un(new R(c,this.a),!1,tn(this,b))};
k.He=function(a,b){var c=a.X();return c?this.Ed(c,b):""};k.Ci=function(a,b){return this.He(a[0],b)};k.Ed=function(a,b){a=un(a,!0,tn(this,b));var c=a.la(),d=a.va();os(c,c.length,d,c);return qs(c,d,this.b)};function us(a){a=a?a:{};this.defaultDataProjection=null;this.defaultDataProjection=zc(a.defaultDataProjection?a.defaultDataProjection:"EPSG:4326")}x(us,vn);function vs(a,b){var c=[],d,e,f,g;f=0;for(g=a.length;f<g;++f)d=a[f],0<f&&c.pop(),0<=d?e=b[d]:e=b[~d].slice().reverse(),c.push.apply(c,e);d=0;for(e=c.length;d<e;++d)c[d]=c[d].slice();return c}function ws(a,b,c,d,e){a=a.geometries;var f=[],g,h;g=0;for(h=a.length;g<h;++g)f[g]=xs(a[g],b,c,d,e);return f}
function xs(a,b,c,d,e){var f=a.type,g=ys[f];b="Point"===f||"MultiPoint"===f?g(a,c,d):g(a,b);c=new Ik;c.Ua(un(b,!1,e));void 0!==a.id&&c.mc(a.id);a.properties&&c.G(a.properties);return c}
us.prototype.Jf=function(a,b){if("Topology"==a.type){var c,d=null,e=null;a.transform&&(c=a.transform,d=c.scale,e=c.translate);var f=a.arcs;if(c){c=d;var g=e,h,l;h=0;for(l=f.length;h<l;++h){var m=f[h],n=c,p=g,q=0,r=0,v,y,w;y=0;for(w=m.length;y<w;++y)v=m[y],q+=v[0],r+=v[1],v[0]=q,v[1]=r,zs(v,n,p)}}c=[];g=Ea(a.objects);h=0;for(l=g.length;h<l;++h)"GeometryCollection"===g[h].type?(m=g[h],c.push.apply(c,ws(m,f,d,e,b))):(m=g[h],c.push(xs(m,f,d,e,b)));return c}return[]};
function zs(a,b,c){a[0]=a[0]*b[0]+c[0];a[1]=a[1]*b[1]+c[1]}us.prototype.Oa=function(){return this.defaultDataProjection};
var ys={Point:function(a,b,c){a=a.coordinates;b&&c&&zs(a,b,c);return new C(a)},LineString:function(a,b){var c=vs(a.arcs,b);return new R(c)},Polygon:function(a,b){var c=[],d,e;d=0;for(e=a.arcs.length;d<e;++d)c[d]=vs(a.arcs[d],b);return new E(c)},MultiPoint:function(a,b,c){a=a.coordinates;var d,e;if(b&&c)for(d=0,e=a.length;d<e;++d)zs(a[d],b,c);return new T(a)},MultiLineString:function(a,b){var c=[],d,e;d=0;for(e=a.arcs.length;d<e;++d)c[d]=vs(a.arcs[d],b);return new S(c)},MultiPolygon:function(a,b){var c=
[],d,e,f,g,h,l;h=0;for(l=a.arcs.length;h<l;++h){d=a.arcs[h];e=[];f=0;for(g=d.length;f<g;++f)e[f]=vs(d[f],b);c[h]=e}return new U(c)}};function As(a){a=a?a:{};this.i=a.featureType;this.g=a.featureNS;this.b=a.gmlFormat?a.gmlFormat:new ko;this.c=a.schemaLocation?a.schemaLocation:"http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd";Tn.call(this)}x(As,Tn);As.prototype.lc=function(a,b){var c={featureType:this.i,featureNS:this.g};Ca(c,sn(this,a,b?b:{}));c=[c];this.b.b["http://www.opengis.net/gml"].featureMember=Tk(Wn.prototype.vd);(c=O([],this.b.b,a,c,this.b))||(c=[]);return c};
As.prototype.o=function(a){if(Pk(a))return Bs(a);if(Qk(a))return O({},Cs,a,[]);if("string"===typeof a)return a=Rk(a),Bs(a)};As.prototype.l=function(a){if(Pk(a))return Ds(this,a);if(Qk(a))return Es(this,a);if("string"===typeof a)return a=Rk(a),Ds(this,a)};function Ds(a,b){for(var c=b.firstChild;c;c=c.nextSibling)if(c.nodeType==Node.ELEMENT_NODE)return Es(a,c)}var Fs={"http://www.opengis.net/gml":{boundedBy:K(Wn.prototype.ye,"bounds")}};
function Es(a,b){var c={},d=eo(b.getAttribute("numberOfFeatures"));c.numberOfFeatures=d;return O(c,Fs,b,[],a.b)}
var Gs={"http://www.opengis.net/wfs":{totalInserted:K(co),totalUpdated:K(co),totalDeleted:K(co)}},Hs={"http://www.opengis.net/ogc":{FeatureId:Tk(function(a){return a.getAttribute("fid")})}},Is={"http://www.opengis.net/wfs":{Feature:function(a,b){al(Hs,a,b)}}},Cs={"http://www.opengis.net/wfs":{TransactionSummary:K(function(a,b){return O({},Gs,a,b)},"transactionSummary"),InsertResults:K(function(a,b){return O([],Is,a,b)},"insertIds")}};
function Bs(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType==Node.ELEMENT_NODE)return O({},Cs,a,[])}var Js={"http://www.opengis.net/wfs":{PropertyName:L(go)}};function Ks(a,b){var c=Mk("http://www.opengis.net/ogc","Filter"),d=Mk("http://www.opengis.net/ogc","FeatureId");c.appendChild(d);d.setAttribute("fid",b);a.appendChild(c)}
var Ls={"http://www.opengis.net/wfs":{Insert:L(function(a,b,c){var d=c[c.length-1],d=Mk(d.featureNS,d.featureType);a.appendChild(d);ko.prototype.Bi(d,b,c)}),Update:L(function(a,b,c){var d=c[c.length-1],e=d.featureType,f=d.featurePrefix,f=f?f:"feature",g=d.featureNS;a.setAttribute("typeName",f+":"+e);a.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:"+f,g);e=b.Xa();if(void 0!==e){for(var f=b.N(),g=[],h=0,l=f.length;h<l;h++){var m=b.get(f[h]);void 0!==m&&g.push({name:f[h],value:m})}bl({node:a,
srsName:d.srsName},Ls,Xk("Property"),g,c);Ks(a,e)}}),Delete:L(function(a,b,c){var d=c[c.length-1];c=d.featureType;var e=d.featurePrefix,e=e?e:"feature",d=d.featureNS;a.setAttribute("typeName",e+":"+c);a.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:"+e,d);b=b.Xa();void 0!==b&&Ks(a,b)}),Property:L(function(a,b,c){var d=Mk("http://www.opengis.net/wfs","Name");a.appendChild(d);go(d,b.name);void 0!==b.value&&null!==b.value&&(d=Mk("http://www.opengis.net/wfs","Value"),a.appendChild(d),b.value instanceof
Uc?ko.prototype.Je(d,b.value,c):go(d,b.value))}),Native:L(function(a,b){b.wp&&a.setAttribute("vendorId",b.wp);void 0!==b.Yo&&a.setAttribute("safeToIgnore",b.Yo);void 0!==b.value&&go(a,b.value)})}};function Ms(a,b,c){a={node:a};var d=b.b;bl(a,Ns,Xk(d.Xb),[d],c);b=b.a;bl(a,Ns,Xk(b.Xb),[b],c)}function Os(a,b){void 0!==b.a&&a.setAttribute("matchCase",b.a.toString());Ps(a,b.b);Qs("Literal",a,""+b.g)}function Qs(a,b,c){a=Mk("http://www.opengis.net/ogc",a);go(a,c);b.appendChild(a)}
function Ps(a,b){Qs("PropertyName",a,b)}
var Ns={"http://www.opengis.net/wfs":{Query:L(function(a,b,c){var d=c[c.length-1],e=d.featurePrefix,f=d.featureNS,g=d.propertyNames,h=d.srsName;a.setAttribute("typeName",(e?e+":":"")+b);h&&a.setAttribute("srsName",h);f&&a.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:"+e,f);b=Ca({},d);b.node=a;bl(b,Js,Xk("PropertyName"),g,c);if(d=d.filter)g=Mk("http://www.opengis.net/ogc","Filter"),a.appendChild(g),bl({node:g},Ns,Xk(d.Xb),[d],c)})},"http://www.opengis.net/ogc":{And:L(Ms),Or:L(Ms),Not:L(function(a,
b,c){b=b.condition;bl({node:a},Ns,Xk(b.Xb),[b],c)}),BBOX:L(function(a,b,c){c[c.length-1].srsName=b.srsName;Ps(a,b.geometryName);ko.prototype.Je(a,b.extent,c)}),PropertyIsEqualTo:L(Os),PropertyIsNotEqualTo:L(Os),PropertyIsLessThan:L(Os),PropertyIsLessThanOrEqualTo:L(Os),PropertyIsGreaterThan:L(Os),PropertyIsGreaterThanOrEqualTo:L(Os),PropertyIsNull:L(function(a,b){Ps(a,b.b)}),PropertyIsBetween:L(function(a,b){Ps(a,b.b);Qs("LowerBoundary",a,""+b.a);Qs("UpperBoundary",a,""+b.g)}),PropertyIsLike:L(function(a,
b){a.setAttribute("wildCard",b.i);a.setAttribute("singleChar",b.c);a.setAttribute("escapeChar",b.g);void 0!==b.a&&a.setAttribute("matchCase",b.a.toString());Ps(a,b.b);Qs("Literal",a,""+b.f)})}};
As.prototype.j=function(a){var b=Mk("http://www.opengis.net/wfs","GetFeature");b.setAttribute("service","WFS");b.setAttribute("version","1.1.0");var c;if(a&&(a.handle&&b.setAttribute("handle",a.handle),a.outputFormat&&b.setAttribute("outputFormat",a.outputFormat),void 0!==a.maxFeatures&&b.setAttribute("maxFeatures",a.maxFeatures),a.resultType&&b.setAttribute("resultType",a.resultType),void 0!==a.startIndex&&b.setAttribute("startIndex",a.startIndex),void 0!==a.count&&b.setAttribute("count",a.count),
c=a.filter,a.bbox)){var d=zr(a.geometryName,a.bbox,a.srsName);c?c=xr(c,d):c=d}b.setAttributeNS("http://www.w3.org/2001/XMLSchema-instance","xsi:schemaLocation",this.c);d=a.featureTypes;a=[{node:b,srsName:a.srsName,featureNS:a.featureNS?a.featureNS:this.g,featurePrefix:a.featurePrefix,geometryName:a.geometryName,filter:c,propertyNames:a.propertyNames?a.propertyNames:[]}];c=Ca({},a[a.length-1]);c.node=b;bl(c,Ns,Xk("Query"),d,a);return b};
As.prototype.U=function(a,b,c,d){var e=[],f=Mk("http://www.opengis.net/wfs","Transaction");f.setAttribute("service","WFS");f.setAttribute("version","1.1.0");var g,h;d&&(g=d.gmlOptions?d.gmlOptions:{},d.handle&&f.setAttribute("handle",d.handle));f.setAttributeNS("http://www.w3.org/2001/XMLSchema-instance","xsi:schemaLocation",this.c);a&&(h={node:f,featureNS:d.featureNS,featureType:d.featureType,featurePrefix:d.featurePrefix,srsName:d.srsName},Ca(h,g),bl(h,Ls,Xk("Insert"),a,e));b&&(h={node:f,featureNS:d.featureNS,
featureType:d.featureType,featurePrefix:d.featurePrefix,srsName:d.srsName},Ca(h,g),bl(h,Ls,Xk("Update"),b,e));c&&bl({node:f,featureNS:d.featureNS,featureType:d.featureType,featurePrefix:d.featurePrefix,srsName:d.srsName},Ls,Xk("Delete"),c,e);d.nativeElements&&bl({node:f,featureNS:d.featureNS,featureType:d.featureType,featurePrefix:d.featurePrefix,srsName:d.srsName},Ls,Xk("Native"),d.nativeElements,e);return f};
As.prototype.Pf=function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType==Node.ELEMENT_NODE)return this.Be(a);return null};As.prototype.Be=function(a){if(a.firstElementChild&&a.firstElementChild.firstElementChild)for(a=a.firstElementChild.firstElementChild,a=a.firstElementChild;a;a=a.nextElementSibling)if(0!==a.childNodes.length&&(1!==a.childNodes.length||3!==a.firstChild.nodeType)){var b=[{}];this.b.ye(a,b);return zc(b.pop().srsName)}return null};function Rs(a){a=a?a:{};this.defaultDataProjection=null;this.b=void 0!==a.splitCollection?a.splitCollection:!1}x(Rs,ap);function Ss(a){a=a.Z();return 0===a.length?"":a[0]+" "+a[1]}function Ts(a){a=a.Z();for(var b=[],c=0,d=a.length;c<d;++c)b.push(a[c][0]+" "+a[c][1]);return b.join(",")}function Us(a){var b=[];a=a.Vd();for(var c=0,d=a.length;c<d;++c)b.push("("+Ts(a[c])+")");return b.join(",")}function Vs(a){var b=a.Y();a=(0,Ws[b])(a);b=b.toUpperCase();return 0===a.length?b+" EMPTY":b+"("+a+")"}
var Ws={Point:Ss,LineString:Ts,Polygon:Us,MultiPoint:function(a){var b=[];a=a.je();for(var c=0,d=a.length;c<d;++c)b.push("("+Ss(a[c])+")");return b.join(",")},MultiLineString:function(a){var b=[];a=a.md();for(var c=0,d=a.length;c<d;++c)b.push("("+Ts(a[c])+")");return b.join(",")},MultiPolygon:function(a){var b=[];a=a.Wd();for(var c=0,d=a.length;c<d;++c)b.push("("+Us(a[c])+")");return b.join(",")},GeometryCollection:function(a){var b=[];a=a.ff();for(var c=0,d=a.length;c<d;++c)b.push(Vs(a[c]));return b.join(",")}};
k=Rs.prototype;k.ud=function(a,b){var c=this.wd(a,b);if(c){var d=new Ik;d.Ua(c);return d}return null};k.Kf=function(a,b){var c=[],d=this.wd(a,b);this.b&&"GeometryCollection"==d.Y()?c=d.c:c=[d];for(var e=[],f=0,g=c.length;f<g;++f)d=new Ik,d.Ua(c[f]),e.push(d);return e};k.wd=function(a,b){var c;c=new Xs(new Ys(a));c.b=Zs(c.a);return(c=$s(c))?un(c,!1,b):null};k.He=function(a,b){var c=a.X();return c?this.Ed(c,b):""};
k.Ci=function(a,b){if(1==a.length)return this.He(a[0],b);for(var c=[],d=0,e=a.length;d<e;++d)c.push(a[d].X());c=new Kn(c);return this.Ed(c,b)};k.Ed=function(a,b){return Vs(un(a,!0,b))};function Ys(a){this.a=a;this.b=-1}
function Zs(a){var b=a.a.charAt(++a.b),c={position:a.b,value:b};if("("==b)c.type=2;else if(","==b)c.type=5;else if(")"==b)c.type=3;else if("0"<=b&&"9">=b||"."==b||"-"==b){c.type=4;var d,b=a.b,e=!1,f=!1;do{if("."==d)e=!0;else if("e"==d||"E"==d)f=!0;d=a.a.charAt(++a.b)}while("0"<=d&&"9">=d||"."==d&&(void 0===e||!e)||!f&&("e"==d||"E"==d)||f&&("-"==d||"+"==d));a=parseFloat(a.a.substring(b,a.b--));c.value=a}else if("a"<=b&&"z">=b||"A"<=b&&"Z">=b){c.type=1;b=a.b;do d=a.a.charAt(++a.b);while("a"<=d&&"z">=
d||"A"<=d&&"Z">=d);a=a.a.substring(b,a.b--).toUpperCase();c.value=a}else{if(" "==b||"\t"==b||"\r"==b||"\n"==b)return Zs(a);if(""===b)c.type=6;else throw Error("Unexpected character: "+b);}return c}function Xs(a){this.a=a}k=Xs.prototype;k.match=function(a){if(a=this.b.type==a)this.b=Zs(this.a);return a};
function $s(a){var b=a.b;if(a.match(1)){var c=b.value;if("GEOMETRYCOLLECTION"==c){a:{if(a.match(2)){b=[];do b.push($s(a));while(a.match(5));if(a.match(3)){a=b;break a}}else if(at(a)){a=[];break a}throw Error(bt(a));}return new Kn(a)}var d=ct[c],b=dt[c];if(!d||!b)throw Error("Invalid geometry type: "+c);a=d.call(a);return new b(a)}throw Error(bt(a));}k.Ef=function(){if(this.match(2)){var a=et(this);if(this.match(3))return a}else if(at(this))return null;throw Error(bt(this));};
k.Df=function(){if(this.match(2)){var a=ft(this);if(this.match(3))return a}else if(at(this))return[];throw Error(bt(this));};k.Ff=function(){if(this.match(2)){var a=gt(this);if(this.match(3))return a}else if(at(this))return[];throw Error(bt(this));};k.io=function(){if(this.match(2)){var a;if(2==this.b.type)for(a=[this.Ef()];this.match(5);)a.push(this.Ef());else a=ft(this);if(this.match(3))return a}else if(at(this))return[];throw Error(bt(this));};
k.ho=function(){if(this.match(2)){var a=gt(this);if(this.match(3))return a}else if(at(this))return[];throw Error(bt(this));};k.jo=function(){if(this.match(2)){for(var a=[this.Ff()];this.match(5);)a.push(this.Ff());if(this.match(3))return a}else if(at(this))return[];throw Error(bt(this));};function et(a){for(var b=[],c=0;2>c;++c){var d=a.b;if(a.match(4))b.push(d.value);else break}if(2==b.length)return b;throw Error(bt(a));}function ft(a){for(var b=[et(a)];a.match(5);)b.push(et(a));return b}
function gt(a){for(var b=[a.Df()];a.match(5);)b.push(a.Df());return b}function at(a){var b=1==a.b.type&&"EMPTY"==a.b.value;b&&(a.b=Zs(a.a));return b}function bt(a){return"Unexpected `"+a.b.value+"` at position "+a.b.position+" in `"+a.a.a+"`"}var dt={POINT:C,LINESTRING:R,POLYGON:E,MULTIPOINT:T,MULTILINESTRING:S,MULTIPOLYGON:U},ct={POINT:Xs.prototype.Ef,LINESTRING:Xs.prototype.Df,POLYGON:Xs.prototype.Ff,MULTIPOINT:Xs.prototype.io,MULTILINESTRING:Xs.prototype.ho,MULTIPOLYGON:Xs.prototype.jo};function ht(){this.version=void 0}x(ht,Yr);ht.prototype.a=function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType==Node.ELEMENT_NODE)return this.b(a);return null};ht.prototype.b=function(a){this.version=a.getAttribute("version").trim();return(a=O({version:this.version},it,a,[]))?a:null};function jt(a,b){return O({},kt,a,b)}function lt(a,b){return O({},mt,a,b)}function nt(a,b){var c=jt(a,b);if(c){var d=[eo(a.getAttribute("width")),eo(a.getAttribute("height"))];c.size=d;return c}}
function ot(a,b){return O([],pt,a,b)}
var qt=[null,"http://www.opengis.net/wms"],it=N(qt,{Service:K(function(a,b){return O({},rt,a,b)}),Capability:K(function(a,b){return O({},st,a,b)})}),st=N(qt,{Request:K(function(a,b){return O({},tt,a,b)}),Exception:K(function(a,b){return O([],ut,a,b)}),Layer:K(function(a,b){return O({},vt,a,b)})}),rt=N(qt,{Name:K(V),Title:K(V),Abstract:K(V),KeywordList:K(ot),OnlineResource:K(Xr),ContactInformation:K(function(a,b){return O({},wt,a,b)}),Fees:K(V),AccessConstraints:K(V),LayerLimit:K(co),MaxWidth:K(co),
MaxHeight:K(co)}),wt=N(qt,{ContactPersonPrimary:K(function(a,b){return O({},xt,a,b)}),ContactPosition:K(V),ContactAddress:K(function(a,b){return O({},yt,a,b)}),ContactVoiceTelephone:K(V),ContactFacsimileTelephone:K(V),ContactElectronicMailAddress:K(V)}),xt=N(qt,{ContactPerson:K(V),ContactOrganization:K(V)}),yt=N(qt,{AddressType:K(V),Address:K(V),City:K(V),StateOrProvince:K(V),PostCode:K(V),Country:K(V)}),ut=N(qt,{Format:Tk(V)}),vt=N(qt,{Name:K(V),Title:K(V),Abstract:K(V),KeywordList:K(ot),CRS:Vk(V),
EX_GeographicBoundingBox:K(function(a,b){var c=O({},zt,a,b);if(c){var d=c.westBoundLongitude,e=c.southBoundLatitude,f=c.eastBoundLongitude,c=c.northBoundLatitude;return void 0===d||void 0===e||void 0===f||void 0===c?void 0:[d,e,f,c]}}),BoundingBox:Vk(function(a){var b=[bo(a.getAttribute("minx")),bo(a.getAttribute("miny")),bo(a.getAttribute("maxx")),bo(a.getAttribute("maxy"))],c=[bo(a.getAttribute("resx")),bo(a.getAttribute("resy"))];return{crs:a.getAttribute("CRS"),extent:b,res:c}}),Dimension:Vk(function(a){return{name:a.getAttribute("name"),
units:a.getAttribute("units"),unitSymbol:a.getAttribute("unitSymbol"),"default":a.getAttribute("default"),multipleValues:Zn(a.getAttribute("multipleValues")),nearestValue:Zn(a.getAttribute("nearestValue")),current:Zn(a.getAttribute("current")),values:V(a)}}),Attribution:K(function(a,b){return O({},At,a,b)}),AuthorityURL:Vk(function(a,b){var c=jt(a,b);if(c)return c.name=a.getAttribute("name"),c}),Identifier:Vk(V),MetadataURL:Vk(function(a,b){var c=jt(a,b);if(c)return c.type=a.getAttribute("type"),
c}),DataURL:Vk(jt),FeatureListURL:Vk(jt),Style:Vk(function(a,b){return O({},Bt,a,b)}),MinScaleDenominator:K(ao),MaxScaleDenominator:K(ao),Layer:Vk(function(a,b){var c=b[b.length-1],d=O({},vt,a,b);if(d){var e=Zn(a.getAttribute("queryable"));void 0===e&&(e=c.queryable);d.queryable=void 0!==e?e:!1;e=eo(a.getAttribute("cascaded"));void 0===e&&(e=c.cascaded);d.cascaded=e;e=Zn(a.getAttribute("opaque"));void 0===e&&(e=c.opaque);d.opaque=void 0!==e?e:!1;e=Zn(a.getAttribute("noSubsets"));void 0===e&&(e=c.noSubsets);
d.noSubsets=void 0!==e?e:!1;(e=bo(a.getAttribute("fixedWidth")))||(e=c.fixedWidth);d.fixedWidth=e;(e=bo(a.getAttribute("fixedHeight")))||(e=c.fixedHeight);d.fixedHeight=e;["Style","CRS","AuthorityURL"].forEach(function(a){a in c&&(d[a]=(d[a]||[]).concat(c[a]))});"EX_GeographicBoundingBox BoundingBox Dimension Attribution MinScaleDenominator MaxScaleDenominator".split(" ").forEach(function(a){a in d||(d[a]=c[a])});return d}})}),At=N(qt,{Title:K(V),OnlineResource:K(Xr),LogoURL:K(nt)}),zt=N(qt,{westBoundLongitude:K(ao),
eastBoundLongitude:K(ao),southBoundLatitude:K(ao),northBoundLatitude:K(ao)}),tt=N(qt,{GetCapabilities:K(lt),GetMap:K(lt),GetFeatureInfo:K(lt)}),mt=N(qt,{Format:Vk(V),DCPType:Vk(function(a,b){return O({},Ct,a,b)})}),Ct=N(qt,{HTTP:K(function(a,b){return O({},Dt,a,b)})}),Dt=N(qt,{Get:K(jt),Post:K(jt)}),Bt=N(qt,{Name:K(V),Title:K(V),Abstract:K(V),LegendURL:Vk(nt),StyleSheetURL:K(jt),StyleURL:K(jt)}),kt=N(qt,{Format:K(V),OnlineResource:K(Xr)}),pt=N(qt,{Keyword:Tk(V)});function Et(a){a=a?a:{};this.g="http://mapserver.gis.umn.edu/mapserver";this.b=new jo;this.c=a.layers?a.layers:null;Tn.call(this)}x(Et,Tn);
Et.prototype.lc=function(a,b){var c={};b&&Ca(c,sn(this,a,b));var d=[c];a.setAttribute("namespaceURI",this.g);var e=a.localName,c=[];if(0!==a.childNodes.length){if("msGMLOutput"==e)for(var f=0,g=a.childNodes.length;f<g;f++){var h=a.childNodes[f];if(h.nodeType===Node.ELEMENT_NODE){var l=d[0],m=h.localName.replace("_layer","");if(!this.c||gb(this.c,m)){m+="_feature";l.featureType=m;l.featureNS=this.g;var n={};n[m]=Tk(this.b.If,this.b);l=N([l.featureNS,null],n);h.setAttribute("namespaceURI",this.g);(h=
O([],l,h,d,this.b))&&jb(c,h)}}}"FeatureCollection"==e&&(d=O([],this.b.b,a,[{}],this.b))&&(c=d)}return c};function Ft(){this.g=new Zr}x(Ft,Yr);Ft.prototype.a=function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType==Node.ELEMENT_NODE)return this.b(a);return null};Ft.prototype.b=function(a){var b=a.getAttribute("version").trim(),c=this.g.b(a);if(!c)return null;c.version=b;return(c=O(c,Gt,a,[]))?c:null};function Ht(a){var b=V(a).split(" ");if(b&&2==b.length)return a=+b[0],b=+b[1],isNaN(a)||isNaN(b)?void 0:[a,b]}
var It=[null,"http://www.opengis.net/wmts/1.0"],Jt=[null,"http://www.opengis.net/ows/1.1"],Gt=N(It,{Contents:K(function(a,b){return O({},Kt,a,b)})}),Kt=N(It,{Layer:Vk(function(a,b){return O({},Lt,a,b)}),TileMatrixSet:Vk(function(a,b){return O({},Mt,a,b)})}),Lt=N(It,{Style:Vk(function(a,b){var c=O({},Nt,a,b);if(c){var d="true"===a.getAttribute("isDefault");c.isDefault=d;return c}}),Format:Vk(V),TileMatrixSetLink:Vk(function(a,b){return O({},Ot,a,b)}),Dimension:Vk(function(a,b){return O({},Pt,a,b)}),
ResourceURL:Vk(function(a){var b=a.getAttribute("format"),c=a.getAttribute("template");a=a.getAttribute("resourceType");var d={};b&&(d.format=b);c&&(d.template=c);a&&(d.resourceType=a);return d})},N(Jt,{Title:K(V),Abstract:K(V),WGS84BoundingBox:K(function(a,b){var c=O([],Qt,a,b);return 2!=c.length?void 0:Ib(c)}),Identifier:K(V)})),Nt=N(It,{LegendURL:Vk(function(a){var b={};b.format=a.getAttribute("format");b.href=Xr(a);return b})},N(Jt,{Title:K(V),Identifier:K(V)})),Ot=N(It,{TileMatrixSet:K(V)}),
Pt=N(It,{Default:K(V),Value:Vk(V)},N(Jt,{Identifier:K(V)})),Qt=N(Jt,{LowerCorner:Tk(Ht),UpperCorner:Tk(Ht)}),Mt=N(It,{WellKnownScaleSet:K(V),TileMatrix:Vk(function(a,b){return O({},Rt,a,b)})},N(Jt,{SupportedCRS:K(V),Identifier:K(V)})),Rt=N(It,{TopLeftCorner:K(Ht),ScaleDenominator:K(ao),TileWidth:K(co),TileHeight:K(co),MatrixWidth:K(co),MatrixHeight:K(co)},N(Jt,{Identifier:K(V)}));function St(a){bb.call(this);a=a||{};this.a=null;this.c=Rc;this.f=void 0;B(this,db("projection"),this.Nl,this);B(this,db("tracking"),this.Ol,this);void 0!==a.projection&&this.dh(zc(a.projection));void 0!==a.trackingOptions&&this.si(a.trackingOptions);this.ge(void 0!==a.tracking?a.tracking:!1)}x(St,bb);k=St.prototype;k.ka=function(){this.ge(!1);bb.prototype.ka.call(this)};k.Nl=function(){var a=this.ah();a&&(this.c=Cc(zc("EPSG:4326"),a),this.a&&this.set("position",this.c(this.a)))};
k.Ol=function(){if(dg){var a=this.bh();a&&void 0===this.f?this.f=pa.navigator.geolocation.watchPosition(this.qo.bind(this),this.ro.bind(this),this.Mg()):a||void 0===this.f||(pa.navigator.geolocation.clearWatch(this.f),this.f=void 0)}};
k.qo=function(a){a=a.coords;this.set("accuracy",a.accuracy);this.set("altitude",null===a.altitude?void 0:a.altitude);this.set("altitudeAccuracy",null===a.altitudeAccuracy?void 0:a.altitudeAccuracy);this.set("heading",null===a.heading?void 0:wa(a.heading));this.a?(this.a[0]=a.longitude,this.a[1]=a.latitude):this.a=[a.longitude,a.latitude];var b=this.c(this.a);this.set("position",b);this.set("speed",null===a.speed?void 0:a.speed);a=Bd($i,this.a,a.accuracy);a.rc(this.c);this.set("accuracyGeometry",a);
this.u()};k.ro=function(a){a.type="error";this.ge(!1);this.b(a)};k.Mj=function(){return this.get("accuracy")};k.Nj=function(){return this.get("accuracyGeometry")||null};k.Pj=function(){return this.get("altitude")};k.Qj=function(){return this.get("altitudeAccuracy")};k.Ll=function(){return this.get("heading")};k.Ml=function(){return this.get("position")};k.ah=function(){return this.get("projection")};k.wk=function(){return this.get("speed")};k.bh=function(){return this.get("tracking")};k.Mg=function(){return this.get("trackingOptions")};
k.dh=function(a){this.set("projection",a)};k.ge=function(a){this.set("tracking",a)};k.si=function(a){this.set("trackingOptions",a)};function Tt(a,b,c){Wc.call(this);this.Vf(a,b?b:0,c)}x(Tt,Wc);k=Tt.prototype;k.clone=function(){var a=new Tt(null),b=this.B.slice();Yc(a,this.f,b);a.u();return a};k.tb=function(a,b,c,d){var e=this.B;a-=e[0];var f=b-e[1];b=a*a+f*f;if(b<d){if(0===b)for(d=0;d<this.a;++d)c[d]=e[d];else for(d=this.wf()/Math.sqrt(b),c[0]=e[0]+d*a,c[1]=e[1]+d*f,d=2;d<this.a;++d)c[d]=e[d];c.length=this.a;return b}return d};k.Bc=function(a,b){var c=this.B,d=a-c[0],c=b-c[1];return d*d+c*c<=Ut(this)};
k.rd=function(){return this.B.slice(0,this.a)};k.Od=function(a){var b=this.B,c=b[this.a]-b[0];return Vb(b[0]-c,b[1]-c,b[0]+c,b[1]+c,a)};k.wf=function(){return Math.sqrt(Ut(this))};function Ut(a){var b=a.B[a.a]-a.B[0];a=a.B[a.a+1]-a.B[1];return b*b+a*a}k.Y=function(){return"Circle"};k.Ka=function(a){var b=this.H();return oc(a,b)?(b=this.rd(),a[0]<=b[0]&&a[2]>=b[0]||a[1]<=b[1]&&a[3]>=b[1]?!0:bc(a,this.sg,this)):!1};
k.jm=function(a){var b=this.a,c=this.B[b]-this.B[0],d=a.slice();d[b]=d[0]+c;for(c=1;c<b;++c)d[b+c]=a[c];Yc(this,this.f,d);this.u()};k.Vf=function(a,b,c){if(a){Zc(this,c,a,0);this.B||(this.B=[]);c=this.B;a=gd(c,a);c[a++]=c[0]+b;var d;b=1;for(d=this.a;b<d;++b)c[a++]=c[b];c.length=a}else Yc(this,"XY",null);this.u()};k.km=function(a){this.B[this.a]=this.B[0]+a;this.u()};function Vt(a,b,c){for(var d=[],e=a(0),f=a(1),g=b(e),h=b(f),l=[f,e],m=[h,g],n=[1,0],p={},q=1E5,r,v,y,w,G;0<--q&&0<n.length;)y=n.pop(),e=l.pop(),g=m.pop(),f=y.toString(),f in p||(d.push(g[0],g[1]),p[f]=!0),w=n.pop(),f=l.pop(),h=m.pop(),G=(y+w)/2,r=a(G),v=b(r),ua(v[0],v[1],g[0],g[1],h[0],h[1])<c?(d.push(h[0],h[1]),f=w.toString(),p[f]=!0):(n.push(w,G,G,y),m.push(h,v,v,g),l.push(f,r,r,e));return d}function Wt(a,b,c,d,e){var f=zc("EPSG:4326");return Vt(function(d){return[a,b+(c-b)*d]},Qc(f,d),e)}
function Xt(a,b,c,d,e){var f=zc("EPSG:4326");return Vt(function(d){return[b+(c-b)*d,a]},Qc(f,d),e)};function Yt(a){a=a||{};this.c=this.o=null;this.g=this.i=Infinity;this.f=this.l=-Infinity;this.A=this.U=Infinity;this.C=this.D=-Infinity;this.Aa=void 0!==a.targetSize?a.targetSize:100;this.S=void 0!==a.maxLines?a.maxLines:100;this.b=[];this.a=[];this.ya=void 0!==a.strokeStyle?a.strokeStyle:Zt;this.v=this.j=void 0;this.s=null;this.setMap(void 0!==a.map?a.map:null)}var Zt=new pj({color:"rgba(0,0,0,0.2)"}),$t=[90,45,30,20,10,5,2,1,.5,.2,.1,.05,.01,.005,.002,.001];
function au(a,b,c,d,e,f,g){var h=g;b=Wt(b,c,d,a.c,e);h=void 0!==a.b[h]?a.b[h]:new R(null);h.ba("XY",b);oc(h.H(),f)&&(a.b[g++]=h);return g}function bu(a,b,c,d,e){var f=e;b=Xt(b,a.f,a.g,a.c,c);f=void 0!==a.a[f]?a.a[f]:new R(null);f.ba("XY",b);oc(f.H(),d)&&(a.a[e++]=f);return e}k=Yt.prototype;k.Pl=function(){return this.o};k.ik=function(){return this.b};k.qk=function(){return this.a};
k.Rg=function(a){var b=a.vectorContext,c=a.frameState,d=c.extent;a=c.viewState;var e=a.center,f=a.projection,g=a.resolution;a=c.pixelRatio;a=g*g/(4*a*a);if(!this.c||!Pc(this.c,f)){var h=zc("EPSG:4326"),l=f.H(),m=f.i,n=Tc(m,h,f),p=m[2],q=m[1],r=m[0],v=n[3],y=n[2],w=n[1],n=n[0];this.i=m[3];this.g=p;this.l=q;this.f=r;this.U=v;this.A=y;this.D=w;this.C=n;this.j=Qc(h,f);this.v=Qc(f,h);this.s=this.v(lc(l));this.c=f}f.a&&(f=f.H(),h=jc(f),c=c.focus[0],c<f[0]||c>f[2])&&(c=h*Math.ceil((f[0]-c)/h),d=[d[0]+c,
d[1],d[2]+c,d[3]]);c=this.s[0];f=this.s[1];h=-1;m=Math.pow(this.Aa*g,2);p=[];q=[];g=0;for(l=$t.length;g<l;++g){r=$t[g]/2;p[0]=c-r;p[1]=f-r;q[0]=c+r;q[1]=f+r;this.j(p,p);this.j(q,q);r=Math.pow(q[0]-p[0],2)+Math.pow(q[1]-p[1],2);if(r<=m)break;h=$t[g]}g=h;if(-1==g)this.b.length=this.a.length=0;else{c=this.v(e);e=c[0];c=c[1];f=this.S;h=[Math.max(d[0],this.C),Math.max(d[1],this.D),Math.min(d[2],this.A),Math.min(d[3],this.U)];h=Tc(h,this.c,"EPSG:4326");m=h[3];q=h[1];e=Math.floor(e/g)*g;p=sa(e,this.f,this.g);
l=au(this,p,q,m,a,d,0);for(h=0;p!=this.f&&h++<f;)p=Math.max(p-g,this.f),l=au(this,p,q,m,a,d,l);p=sa(e,this.f,this.g);for(h=0;p!=this.g&&h++<f;)p=Math.min(p+g,this.g),l=au(this,p,q,m,a,d,l);this.b.length=l;c=Math.floor(c/g)*g;e=sa(c,this.l,this.i);l=bu(this,e,a,d,0);for(h=0;e!=this.l&&h++<f;)e=Math.max(e-g,this.l),l=bu(this,e,a,d,l);e=sa(c,this.l,this.i);for(h=0;e!=this.i&&h++<f;)e=Math.min(e+g,this.i),l=bu(this,e,a,d,l);this.a.length=l}b.Tb(null,this.ya);a=0;for(e=this.b.length;a<e;++a)g=this.b[a],
b.hd(g,null);a=0;for(e=this.a.length;a<e;++a)g=this.a[a],b.hd(g,null)};k.setMap=function(a){this.o&&(this.o.J("postcompose",this.Rg,this),this.o.render());a&&(a.I("postcompose",this.Rg,this),a.render());this.o=a};function cu(a,b,c,d,e,f,g){th.call(this,a,b,c,0,d);this.j=e;this.g=new Image;null!==f&&(this.g.crossOrigin=f);this.i={};this.c=null;this.state=0;this.o=g}x(cu,th);cu.prototype.a=function(a){if(void 0!==a){var b;a=t(a);if(a in this.i)return this.i[a];Ga(this.i)?b=this.g:b=this.g.cloneNode(!1);return this.i[a]=b}return this.g};cu.prototype.s=function(){this.state=3;this.c.forEach(Ka);this.c=null;uh(this)};
cu.prototype.v=function(){void 0===this.resolution&&(this.resolution=kc(this.extent)/this.g.height);this.state=2;this.c.forEach(Ka);this.c=null;uh(this)};cu.prototype.load=function(){if(0==this.state||3==this.state)this.state=1,uh(this),this.c=[Pa(this.g,"error",this.s,this),Pa(this.g,"load",this.v,this)],this.o(this,this.j)};function du(a,b,c,d,e){We.call(this,a,b);this.s=c;this.g=new Image;null!==d&&(this.g.crossOrigin=d);this.c={};this.j=null;this.v=e}x(du,We);k=du.prototype;k.ka=function(){1==this.state&&eu(this);this.a&&Ta(this.a);this.state=5;Xe(this);We.prototype.ka.call(this)};k.$a=function(a){if(void 0!==a){var b=t(a);if(b in this.c)return this.c[b];a=Ga(this.c)?this.g:this.g.cloneNode(!1);return this.c[b]=a}return this.g};k.jb=function(){return this.s};k.Ql=function(){this.state=3;eu(this);Xe(this)};
k.Rl=function(){this.state=this.g.naturalWidth&&this.g.naturalHeight?2:4;eu(this);Xe(this)};k.load=function(){if(0==this.state||3==this.state)this.state=1,Xe(this),this.j=[Pa(this.g,"error",this.Ql,this),Pa(this.g,"load",this.Rl,this)],this.v(this,this.s)};function eu(a){a.j.forEach(Ka);a.j=null};function fu(a){a=a?a:{};Xh.call(this,{handleEvent:rc});this.c=a.formatConstructors?a.formatConstructors:[];this.j=a.projection?zc(a.projection):null;this.a=null;this.target=a.target?a.target:null}x(fu,Xh);function gu(a){a=a.dataTransfer.files;var b,c,d;b=0;for(c=a.length;b<c;++b){d=a.item(b);var e=new FileReader;e.addEventListener("load",this.o.bind(this,d));e.readAsText(d)}}function hu(a){a.stopPropagation();a.preventDefault();a.dataTransfer.dropEffect="copy"}
fu.prototype.o=function(a,b){var c=b.target.result,d=this.v,e=this.j;e||(e=d.aa().l);var d=this.c,f=[],g,h;g=0;for(h=d.length;g<h;++g){var l=new d[g];var m={featureProjection:e};try{f=l.Fa(c,m)}catch(n){f=null}if(f&&0<f.length)break}this.b(new iu(ju,a,f,e))};fu.prototype.setMap=function(a){this.a&&(this.a.forEach(Ka),this.a=null);Xh.prototype.setMap.call(this,a);a&&(a=this.target?this.target:a.a,this.a=[B(a,"drop",gu,this),B(a,"dragenter",hu,this),B(a,"dragover",hu,this),B(a,"drop",hu,this)])};
var ju="addfeatures";function iu(a,b,c,d){Ua.call(this,a);this.features=c;this.file=b;this.projection=d}x(iu,Ua);function ku(a){a=a?a:{};li.call(this,{handleDownEvent:lu,handleDragEvent:mu,handleUpEvent:nu});this.s=a.condition?a.condition:hi;this.a=this.c=void 0;this.j=0;this.A=void 0!==a.duration?a.duration:400}x(ku,li);
function mu(a){if(ji(a)){var b=a.map,c=b.Za(),d=a.pixel;a=d[0]-c[0]/2;d=c[1]/2-d[1];c=Math.atan2(d,a);a=Math.sqrt(a*a+d*d);d=b.aa();b.render();if(void 0!==this.c){var e=c-this.c;Yh(b,d,d.La()-e)}this.c=c;void 0!==this.a&&(c=this.a*(d.$()/a),$h(b,d,c));void 0!==this.a&&(this.j=this.a/a);this.a=a}}
function nu(a){if(!ji(a))return!0;a=a.map;var b=a.aa();Ld(b,-1);var c=this.j-1,d=b.La(),d=b.constrainRotation(d,0);Yh(a,b,d,void 0,void 0);var d=b.$(),e=this.A,d=b.constrainResolution(d,0,c);$h(a,b,d,void 0,e);this.j=0;return!1}function lu(a){return ji(a)&&this.s(a)?(Ld(a.map.aa(),1),this.a=this.c=void 0,!0):!1};function ou(a,b){Ua.call(this,a);this.feature=b}x(ou,Ua);
function pu(a){li.call(this,{handleDownEvent:qu,handleEvent:ru,handleUpEvent:su});this.na=null;this.P=!1;this.Hc=a.source?a.source:null;this.cb=a.features?a.features:null;this.Cj=a.snapTolerance?a.snapTolerance:12;this.W=a.type;this.c=tu(this.W);this.Sa=a.minPoints?a.minPoints:this.c===uu?3:2;this.za=a.maxPoints?a.maxPoints:Infinity;this.Ne=a.finishCondition?a.finishCondition:rc;var b=a.geometryFunction;if(!b)if("Circle"===this.W)b=function(a,b){var c=b?b:new Tt([NaN,NaN]);c.Vf(a[0],Math.sqrt(Eb(a[0],
a[1])));return c};else{var c,b=this.c;b===vu?c=C:b===wu?c=R:b===uu&&(c=E);b=function(a,b){var f=b;f?f.ra(a):f=new c(a);return f}}this.C=b;this.T=this.A=this.a=this.S=this.j=this.s=null;this.Fj=a.clickTolerance?a.clickTolerance*a.clickTolerance:36;this.Ba=new I({source:new P({useSpatialIndex:!1,wrapX:a.wrapX?a.wrapX:!1}),style:a.style?a.style:xu()});this.rb=a.geometryName;this.Bj=a.condition?a.condition:gi;this.oa=a.freehandCondition?a.freehandCondition:hi;B(this,db("active"),this.yi,this)}x(pu,li);
function xu(){var a=xj();return function(b){return a[b.X().Y()]}}k=pu.prototype;k.setMap=function(a){li.prototype.setMap.call(this,a);this.yi()};function ru(a){this.c!==wu&&this.c!==uu||!this.oa(a)||(this.P=!0);var b=!this.P;this.P&&a.type===$g?(yu(this,a),b=!1):a.type===Zg?b=zu(this,a):a.type===Tg&&(b=!1);return mi.call(this,a)&&b}function qu(a){return this.Bj(a)?(this.na=a.pixel,!0):this.P?(this.na=a.pixel,this.s||Au(this,a),!0):!1}
function su(a){this.P=!1;var b=this.na,c=a.pixel,d=b[0]-c[0],b=b[1]-c[1],c=!0;d*d+b*b<=this.Fj&&(zu(this,a),this.s?this.c===Bu?this.jd():Cu(this,a)?this.Ne(a)&&this.jd():yu(this,a):(Au(this,a),this.c===vu&&this.jd()),c=!1);return c}
function zu(a,b){if(a.s){var c=b.coordinate,d=a.j.X(),e;a.c===vu?e=a.a:a.c===uu?(e=a.a[0],e=e[e.length-1],Cu(a,b)&&(c=a.s.slice())):(e=a.a,e=e[e.length-1]);e[0]=c[0];e[1]=c[1];a.C(a.a,d);a.S&&a.S.X().ra(c);d instanceof E&&a.c!==uu?(a.A||(a.A=new Ik(new R(null))),d=d.Hg(0),c=a.A.X(),c.ba(d.f,d.la())):a.T&&(c=a.A.X(),c.ra(a.T));Du(a)}else c=b.coordinate.slice(),a.S?a.S.X().ra(c):(a.S=new Ik(new C(c)),Du(a));return!0}
function Cu(a,b){var c=!1;if(a.j){var d=!1,e=[a.s];a.c===wu?d=a.a.length>a.Sa:a.c===uu&&(d=a.a[0].length>a.Sa,e=[a.a[0][0],a.a[0][a.a[0].length-2]]);if(d)for(var d=b.map,f=0,g=e.length;f<g;f++){var h=e[f],l=d.Ga(h),m=b.pixel,c=m[0]-l[0],l=m[1]-l[1],m=a.P&&a.oa(b)?1:a.Cj;if(c=Math.sqrt(c*c+l*l)<=m){a.s=h;break}}}return c}
function Au(a,b){var c=b.coordinate;a.s=c;a.c===vu?a.a=c.slice():a.c===uu?(a.a=[[c.slice(),c.slice()]],a.T=a.a[0]):(a.a=[c.slice(),c.slice()],a.c===Bu&&(a.T=a.a));a.T&&(a.A=new Ik(new R(a.T)));c=a.C(a.a);a.j=new Ik;a.rb&&a.j.Ec(a.rb);a.j.Ua(c);Du(a);a.b(new ou("drawstart",a.j))}
function yu(a,b){var c=b.coordinate,d=a.j.X(),e,f;if(a.c===wu)a.s=c.slice(),f=a.a,f.push(c.slice()),e=f.length>a.za,a.C(f,d);else if(a.c===uu){f=a.a[0];f.push(c.slice());if(e=f.length>a.za)a.s=f[0];a.C(a.a,d)}Du(a);e&&a.jd()}k.Qo=function(){var a=this.j.X(),b,c;this.c===wu?(b=this.a,b.splice(-2,1),this.C(b,a)):this.c===uu&&(b=this.a[0],b.splice(-2,1),c=this.A.X(),c.ra(b),this.C(this.a,a));0===b.length&&(this.s=null);Du(this)};
k.jd=function(){var a=Eu(this),b=this.a,c=a.X();this.c===wu?(b.pop(),this.C(b,c)):this.c===uu&&(b[0].pop(),b[0].push(b[0][0]),this.C(b,c));"MultiPoint"===this.W?a.Ua(new T([b])):"MultiLineString"===this.W?a.Ua(new S([b])):"MultiPolygon"===this.W&&a.Ua(new U([b]));this.b(new ou("drawend",a));this.cb&&this.cb.push(a);this.Hc&&this.Hc.sb(a)};function Eu(a){a.s=null;var b=a.j;b&&(a.j=null,a.S=null,a.A=null,a.Ba.ha().clear(!0));return b}
k.rm=function(a){var b=a.X();this.j=a;this.a=b.Z();a=this.a[this.a.length-1];this.s=a.slice();this.a.push(a.slice());Du(this);this.b(new ou("drawstart",this.j))};k.Gc=sc;function Du(a){var b=[];a.j&&b.push(a.j);a.A&&b.push(a.A);a.S&&b.push(a.S);a=a.Ba.ha();a.clear(!0);a.Jc(b)}k.yi=function(){var a=this.v,b=this.f();a&&b||Eu(this);this.Ba.setMap(b?a:null)};
function tu(a){var b;"Point"===a||"MultiPoint"===a?b=vu:"LineString"===a||"MultiLineString"===a?b=wu:"Polygon"===a||"MultiPolygon"===a?b=uu:"Circle"===a&&(b=Bu);return b}var vu="Point",wu="LineString",uu="Polygon",Bu="Circle";function Fu(a,b,c){Ua.call(this,a);this.features=b;this.mapBrowserEvent=c}x(Fu,Ua);
function Gu(a){li.call(this,{handleDownEvent:Hu,handleDragEvent:Iu,handleEvent:Ju,handleUpEvent:Ku});this.rb=a.condition?a.condition:ki;this.Sa=function(a){return gi(a)&&fi(a)};this.cb=a.deleteCondition?a.deleteCondition:this.Sa;this.za=this.c=null;this.Ba=[0,0];this.C=this.T=!1;this.a=new kl;this.S=void 0!==a.pixelTolerance?a.pixelTolerance:10;this.s=this.oa=!1;this.j=[];this.P=new I({source:new P({useSpatialIndex:!1,wrapX:!!a.wrapX}),style:a.style?a.style:Lu(),updateWhileAnimating:!0,updateWhileInteracting:!0});
this.na={Point:this.ym,LineString:this.kh,LinearRing:this.kh,Polygon:this.zm,MultiPoint:this.wm,MultiLineString:this.vm,MultiPolygon:this.xm,GeometryCollection:this.um};this.A=a.features;this.A.forEach(this.xf,this);B(this.A,"add",this.sm,this);B(this.A,"remove",this.tm,this);this.W=null}x(Gu,li);k=Gu.prototype;k.xf=function(a){var b=a.X();b.Y()in this.na&&this.na[b.Y()].call(this,a,b);(b=this.v)&&Mu(this,this.Ba,b);B(a,"change",this.jh,this)};
function Nu(a,b){a.C||(a.C=!0,a.b(new Fu("modifystart",a.A,b)))}function Ou(a,b){Pu(a,b);a.c&&0===a.A.dc()&&(a.P.ha().ob(a.c),a.c=null);Qa(b,"change",a.jh,a)}function Pu(a,b){var c=a.a,d=[];c.forEach(function(a){b===a.feature&&d.push(a)});for(var e=d.length-1;0<=e;--e)c.remove(d[e])}k.setMap=function(a){this.P.setMap(a);li.prototype.setMap.call(this,a)};k.sm=function(a){this.xf(a.element)};k.jh=function(a){this.s||(a=a.target,Ou(this,a),this.xf(a))};k.tm=function(a){Ou(this,a.element)};
k.ym=function(a,b){var c=b.Z(),c={feature:a,geometry:b,pa:[c,c]};this.a.Ca(b.H(),c)};k.wm=function(a,b){var c=b.Z(),d,e,f;e=0;for(f=c.length;e<f;++e)d=c[e],d={feature:a,geometry:b,depth:[e],index:e,pa:[d,d]},this.a.Ca(b.H(),d)};k.kh=function(a,b){var c=b.Z(),d,e,f,g;d=0;for(e=c.length-1;d<e;++d)f=c.slice(d,d+2),g={feature:a,geometry:b,index:d,pa:f},this.a.Ca(Ib(f),g)};
k.vm=function(a,b){var c=b.Z(),d,e,f,g,h,l,m;g=0;for(h=c.length;g<h;++g)for(d=c[g],e=0,f=d.length-1;e<f;++e)l=d.slice(e,e+2),m={feature:a,geometry:b,depth:[g],index:e,pa:l},this.a.Ca(Ib(l),m)};k.zm=function(a,b){var c=b.Z(),d,e,f,g,h,l,m;g=0;for(h=c.length;g<h;++g)for(d=c[g],e=0,f=d.length-1;e<f;++e)l=d.slice(e,e+2),m={feature:a,geometry:b,depth:[g],index:e,pa:l},this.a.Ca(Ib(l),m)};
k.xm=function(a,b){var c=b.Z(),d,e,f,g,h,l,m,n,p,q;l=0;for(m=c.length;l<m;++l)for(n=c[l],g=0,h=n.length;g<h;++g)for(d=n[g],e=0,f=d.length-1;e<f;++e)p=d.slice(e,e+2),q={feature:a,geometry:b,depth:[g,l],index:e,pa:p},this.a.Ca(Ib(p),q)};k.um=function(a,b){var c,d=b.c;for(c=0;c<d.length;++c)this.na[d[c].Y()].call(this,a,d[c])};function Qu(a,b){var c=a.c;c?c.X().ra(b):(c=new Ik(new C(b)),a.c=c,a.P.ha().sb(c))}function Ru(a,b){return a.index-b.index}
function Hu(a){if(!this.rb(a))return!1;Mu(this,a.pixel,a.map);this.j.length=0;this.C=!1;var b=this.c;if(b){var c=[],b=b.X().Z(),d=Ib([b]),d=nl(this.a,d),e={};d.sort(Ru);for(var f=0,g=d.length;f<g;++f){var h=d[f],l=h.pa,m=t(h.feature),n=h.depth;n&&(m+="-"+n.join("-"));e[m]||(e[m]=Array(2));if(Cb(l[0],b)&&!e[m][0])this.j.push([h,0]),e[m][0]=h;else if(Cb(l[1],b)&&!e[m][1]){if("LineString"!==h.geometry.Y()&&"MultiLineString"!==h.geometry.Y()||!e[m][0]||0!==e[m][0].index)this.j.push([h,1]),e[m][1]=h}else t(l)in
this.za&&!e[m][0]&&!e[m][1]&&c.push([h,b])}c.length&&Nu(this,a);for(a=c.length-1;0<=a;--a)this.nl.apply(this,c[a])}return!!this.c}
function Iu(a){this.T=!1;Nu(this,a);a=a.coordinate;for(var b=0,c=this.j.length;b<c;++b){for(var d=this.j[b],e=d[0],f=e.depth,g=e.geometry,h=g.Z(),l=e.pa,d=d[1];a.length<g.va();)a.push(0);switch(g.Y()){case "Point":h=a;l[0]=l[1]=a;break;case "MultiPoint":h[e.index]=a;l[0]=l[1]=a;break;case "LineString":h[e.index+d]=a;l[d]=a;break;case "MultiLineString":h[f[0]][e.index+d]=a;l[d]=a;break;case "Polygon":h[f[0]][e.index+d]=a;l[d]=a;break;case "MultiPolygon":h[f[1]][f[0]][e.index+d]=a,l[d]=a}e=g;this.s=
!0;e.ra(h);this.s=!1}Qu(this,a)}function Ku(a){for(var b,c=this.j.length-1;0<=c;--c)b=this.j[c][0],ll(this.a,Ib(b.pa),b);this.C&&(this.b(new Fu("modifyend",this.A,a)),this.C=!1);return!1}function Ju(a){if(!(a instanceof Pg))return!0;this.W=a;var b;Gd(a.map.aa())[1]||a.type!=Zg||this.D||(this.Ba=a.pixel,Mu(this,a.pixel,a.map));this.c&&this.cb(a)&&(a.type==Ug&&this.T?b=!0:(this.c.X(),b=this.ai()));a.type==Ug&&(this.T=!1);return mi.call(this,a)&&!b}
function Mu(a,b,c){function d(a,b){return Fb(e,a.pa)-Fb(e,b.pa)}var e=c.Ma(b),f=c.Ma([b[0]-a.S,b[1]+a.S]),g=c.Ma([b[0]+a.S,b[1]-a.S]),f=Ib([f,g]),f=nl(a.a,f);if(0<f.length){f.sort(d);var g=f[0].pa,h=zb(e,g),l=c.Ga(h);if(Math.sqrt(Eb(b,l))<=a.S){b=c.Ga(g[0]);c=c.Ga(g[1]);b=Eb(l,b);c=Eb(l,c);a.oa=Math.sqrt(Math.min(b,c))<=a.S;a.oa&&(h=b>c?g[1]:g[0]);Qu(a,h);c={};c[t(g)]=!0;b=1;for(l=f.length;b<l;++b)if(h=f[b].pa,Cb(g[0],h[0])&&Cb(g[1],h[1])||Cb(g[0],h[1])&&Cb(g[1],h[0]))c[t(h)]=!0;else break;a.za=c;
return}}a.c&&(a.P.ha().ob(a.c),a.c=null)}
k.nl=function(a,b){for(var c=a.pa,d=a.feature,e=a.geometry,f=a.depth,g=a.index,h;b.length<e.va();)b.push(0);switch(e.Y()){case "MultiLineString":h=e.Z();h[f[0]].splice(g+1,0,b);break;case "Polygon":h=e.Z();h[f[0]].splice(g+1,0,b);break;case "MultiPolygon":h=e.Z();h[f[1]][f[0]].splice(g+1,0,b);break;case "LineString":h=e.Z();h.splice(g+1,0,b);break;default:return}this.s=!0;e.ra(h);this.s=!1;h=this.a;h.remove(a);Su(this,e,g,f,1);var l={pa:[c[0],b],feature:d,geometry:e,depth:f,index:g};h.Ca(Ib(l.pa),
l);this.j.push([l,1]);c={pa:[b,c[1]],feature:d,geometry:e,depth:f,index:g+1};h.Ca(Ib(c.pa),c);this.j.push([c,0]);this.T=!0};
k.ai=function(){var a=!1;if(this.W&&this.W.type!=$g){var b=this.W;Nu(this,b);var c=this.j,a={},d=!1,e,f,g,h,l,m,n,p;for(h=c.length-1;0<=h;--h)g=c[h],n=g[0],p=t(n.feature),n.depth&&(p+="-"+n.depth.join("-")),p in a||(a[p]={}),0===g[1]?(a[p].right=n,a[p].index=n.index):1==g[1]&&(a[p].left=n,a[p].index=n.index+1);for(p in a){m=a[p].right;h=a[p].left;g=a[p].index;l=g-1;n=void 0!==h?h:m;0>l&&(l=0);c=n.geometry;e=f=c.Z();d=!1;switch(c.Y()){case "MultiLineString":2<f[n.depth[0]].length&&(f[n.depth[0]].splice(g,
1),d=!0);break;case "LineString":2<f.length&&(f.splice(g,1),d=!0);break;case "MultiPolygon":e=e[n.depth[1]];case "Polygon":e=e[n.depth[0]],4<e.length&&(g==e.length-1&&(g=0),e.splice(g,1),d=!0,0===g&&(e.pop(),e.push(e[0]),l=e.length-1))}d&&(e=c,this.s=!0,e.ra(f),this.s=!1,f=[],void 0!==h&&(this.a.remove(h),f.push(h.pa[0])),void 0!==m&&(this.a.remove(m),f.push(m.pa[1])),void 0!==h&&void 0!==m&&(h={depth:n.depth,feature:n.feature,geometry:n.geometry,index:l,pa:f},this.a.Ca(Ib(h.pa),h)),Su(this,c,g,n.depth,
-1),this.c&&(this.P.ha().ob(this.c),this.c=null))}a=d;this.b(new Fu("modifyend",this.A,b));this.C=!1}return a};function Su(a,b,c,d,e){ql(a.a,b.H(),function(a){a.geometry===b&&(void 0===d||void 0===a.depth||mb(a.depth,d))&&a.index>c&&(a.index+=e)})}function Lu(){var a=xj();return function(){return a.Point}};function Tu(a,b,c,d){Ua.call(this,a);this.selected=b;this.deselected=c;this.mapBrowserEvent=d}x(Tu,Ua);
function Uu(a){Xh.call(this,{handleEvent:Vu});var b=a?a:{};this.D=b.condition?b.condition:fi;this.A=b.addCondition?b.addCondition:sc;this.C=b.removeCondition?b.removeCondition:sc;this.S=b.toggleCondition?b.toggleCondition:hi;this.j=b.multi?b.multi:!1;this.o=b.filter?b.filter:rc;this.c=new I({source:new P({useSpatialIndex:!1,features:b.features,wrapX:b.wrapX}),style:b.style?b.style:Wu(),updateWhileAnimating:!0,updateWhileInteracting:!0});if(b.layers)if("function"===typeof b.layers)a=function(a){return b.layers(a)};
else{var c=b.layers;a=function(a){return gb(c,a)}}else a=rc;this.s=a;this.a={};a=this.c.ha().c;B(a,"add",this.Am,this);B(a,"remove",this.Dm,this)}x(Uu,Xh);k=Uu.prototype;k.Bm=function(){return this.c.ha().c};k.Cm=function(a){a=t(a);return this.a[a]};
function Vu(a){if(!this.D(a))return!0;var b=this.A(a),c=this.C(a),d=this.S(a),e=!b&&!c&&!d,f=a.map,g=this.c.ha().c,h=[],l=[];if(e)Da(this.a),f.kd(a.pixel,function(a,b){if(this.o(a,b)){l.push(a);var c=t(a);this.a[c]=b;return!this.j}},this,this.s),0<l.length&&1==g.dc()&&g.item(0)==l[0]?l.length=0:(0!==g.dc()&&(h=Array.prototype.concat(g.a),g.clear()),g.qf(l));else{f.kd(a.pixel,function(a,e){if(this.o(a,e)){if(!b&&!d||gb(g.a,a))(c||d)&&gb(g.a,a)&&(h.push(a),f=t(a),delete this.a[f]);else{l.push(a);var f=
t(a);this.a[f]=e}return!this.j}},this,this.s);for(e=h.length-1;0<=e;--e)g.remove(h[e]);g.qf(l)}(0<l.length||0<h.length)&&this.b(new Tu("select",l,h,a));return ei(a)}k.setMap=function(a){var b=this.v,c=this.c.ha().c;b&&c.forEach(b.wi,b);Xh.prototype.setMap.call(this,a);this.c.setMap(a);a&&c.forEach(a.ti,a)};function Wu(){var a=xj();jb(a.Polygon,a.LineString);jb(a.GeometryCollection,a.LineString);return function(b){return a[b.X().Y()]}}k.Am=function(a){a=a.element;var b=this.v;b&&b.ti(a)};
k.Dm=function(a){a=a.element;var b=this.v;b&&b.wi(a)};function Xu(a){li.call(this,{handleEvent:Yu,handleDownEvent:rc,handleUpEvent:Zu});a=a?a:{};this.s=a.source?a.source:null;this.Ba=void 0!==a.vertex?a.vertex:!0;this.T=void 0!==a.edge?a.edge:!0;this.j=a.features?a.features:null;this.oa=[];this.C={};this.S={};this.W={};this.A={};this.P=null;this.c=void 0!==a.pixelTolerance?a.pixelTolerance:10;this.za=$u.bind(this);this.a=new kl;this.na={Point:this.Jm,LineString:this.nh,LinearRing:this.nh,Polygon:this.Km,MultiPoint:this.Hm,MultiLineString:this.Gm,MultiPolygon:this.Im,
GeometryCollection:this.Fm}}x(Xu,li);k=Xu.prototype;k.sb=function(a,b){var c=void 0!==b?b:!0,d=t(a),e=a.X();if(e){var f=this.na[e.Y()];f&&(this.W[d]=e.H(Jb()),f.call(this,a,e),c&&(this.S[d]=B(e,"change",this.Kk.bind(this,a),this)))}c&&(this.C[d]=B(a,db(a.a),this.Em,this))};k.Jj=function(a){this.sb(a)};k.Kj=function(a){this.ob(a)};k.lh=function(a){var b;a instanceof vl?b=a.feature:a instanceof ae&&(b=a.element);this.sb(b)};
k.mh=function(a){var b;a instanceof vl?b=a.feature:a instanceof ae&&(b=a.element);this.ob(b)};k.Em=function(a){a=a.target;this.ob(a,!0);this.sb(a,!0)};k.Kk=function(a){if(this.D){var b=t(a);b in this.A||(this.A[b]=a)}else this.xi(a)};k.ob=function(a,b){var c=void 0!==b?b:!0,d=t(a),e=this.W[d];if(e){var f=this.a,g=[];ql(f,e,function(b){a===b.feature&&g.push(b)});for(e=g.length-1;0<=e;--e)f.remove(g[e]);c&&($a(this.S[d]),delete this.S[d])}c&&($a(this.C[d]),delete this.C[d])};
k.setMap=function(a){var b=this.v,c=this.oa,d;this.j?d=this.j:this.s&&(d=this.s.oe());b&&(c.forEach($a),c.length=0,d.forEach(this.Kj,this));li.prototype.setMap.call(this,a);a&&(this.j?c.push(B(this.j,"add",this.lh,this),B(this.j,"remove",this.mh,this)):this.s&&c.push(B(this.s,"addfeature",this.lh,this),B(this.s,"removefeature",this.mh,this)),d.forEach(this.Jj,this))};k.Gc=sc;k.xi=function(a){this.ob(a,!1);this.sb(a,!1)};
k.Fm=function(a,b){var c,d=b.c;for(c=0;c<d.length;++c)this.na[d[c].Y()].call(this,a,d[c])};k.nh=function(a,b){var c=b.Z(),d,e,f,g;d=0;for(e=c.length-1;d<e;++d)f=c.slice(d,d+2),g={feature:a,pa:f},this.a.Ca(Ib(f),g)};k.Gm=function(a,b){var c=b.Z(),d,e,f,g,h,l,m;g=0;for(h=c.length;g<h;++g)for(d=c[g],e=0,f=d.length-1;e<f;++e)l=d.slice(e,e+2),m={feature:a,pa:l},this.a.Ca(Ib(l),m)};k.Hm=function(a,b){var c=b.Z(),d,e,f;e=0;for(f=c.length;e<f;++e)d=c[e],d={feature:a,pa:[d,d]},this.a.Ca(b.H(),d)};
k.Im=function(a,b){var c=b.Z(),d,e,f,g,h,l,m,n,p,q;l=0;for(m=c.length;l<m;++l)for(n=c[l],g=0,h=n.length;g<h;++g)for(d=n[g],e=0,f=d.length-1;e<f;++e)p=d.slice(e,e+2),q={feature:a,pa:p},this.a.Ca(Ib(p),q)};k.Jm=function(a,b){var c=b.Z(),c={feature:a,pa:[c,c]};this.a.Ca(b.H(),c)};k.Km=function(a,b){var c=b.Z(),d,e,f,g,h,l,m;g=0;for(h=c.length;g<h;++g)for(d=c[g],e=0,f=d.length-1;e<f;++e)l=d.slice(e,e+2),m={feature:a,pa:l},this.a.Ca(Ib(l),m)};
function Yu(a){var b,c,d=a.pixel,e=a.coordinate;b=a.map;var f=b.Ma([d[0]-this.c,d[1]+this.c]);c=b.Ma([d[0]+this.c,d[1]-this.c]);var f=Ib([f,c]),g=nl(this.a,f),h,f=!1,l=null;c=null;if(0<g.length){this.P=e;g.sort(this.za);g=g[0].pa;if(this.Ba&&!this.T){if(e=b.Ga(g[0]),h=b.Ga(g[1]),e=Eb(d,e),d=Eb(d,h),h=Math.sqrt(Math.min(e,d)),h=h<=this.c)f=!0,l=e>d?g[1]:g[0],c=b.Ga(l)}else this.T&&(l=zb(e,g),c=b.Ga(l),Math.sqrt(Eb(d,c))<=this.c&&(f=!0,this.Ba&&(e=b.Ga(g[0]),h=b.Ga(g[1]),e=Eb(c,e),d=Eb(c,h),h=Math.sqrt(Math.min(e,
d)),h=h<=this.c)))&&(l=e>d?g[1]:g[0],c=b.Ga(l));f&&(c=[Math.round(c[0]),Math.round(c[1])])}b=l;f&&(a.coordinate=b.slice(0,2),a.pixel=c);return mi.call(this,a)}function Zu(){var a=Ea(this.A);a.length&&(a.forEach(this.xi,this),this.A={});return!1}function $u(a,b){return Fb(this.P,a.pa)-Fb(this.P,b.pa)};function av(a,b,c){Ua.call(this,a);this.features=b;this.coordinate=c}x(av,Ua);function bv(a){li.call(this,{handleDownEvent:cv,handleDragEvent:dv,handleMoveEvent:ev,handleUpEvent:fv});this.s=void 0;this.a=null;this.c=void 0!==a.features?a.features:null;var b;if(a.layers)if("function"===typeof a.layers)b=function(b){return a.layers(b)};else{var c=a.layers;b=function(a){return gb(c,a)}}else b=rc;this.A=b;this.j=null}x(bv,li);
function cv(a){this.j=gv(this,a.pixel,a.map);return!this.a&&this.j?(this.a=a.coordinate,ev.call(this,a),this.b(new av("translatestart",this.c,a.coordinate)),!0):!1}function fv(a){return this.a?(this.a=null,ev.call(this,a),this.b(new av("translateend",this.c,a.coordinate)),!0):!1}
function dv(a){if(this.a){a=a.coordinate;var b=a[0]-this.a[0],c=a[1]-this.a[1];if(this.c)this.c.forEach(function(a){var d=a.X();d.Sc(b,c);a.Ua(d)});else if(this.j){var d=this.j.X();d.Sc(b,c);this.j.Ua(d)}this.a=a;this.b(new av("translating",this.c,a))}}
function ev(a){var b=a.map.yc();if(a=a.map.kd(a.pixel,function(a){return a})){var c=!1;this.c&&gb(this.c.a,a)&&(c=!0);this.s=b.style.cursor;b.style.cursor=this.a?"-webkit-grabbing":c?"-webkit-grab":"pointer";b.style.cursor=this.a?c?"grab":"pointer":"grabbing"}else b.style.cursor=void 0!==this.s?this.s:"",this.s=void 0}function gv(a,b,c){var d=null;b=c.kd(b,function(a){return a},a,a.A);a.c&&gb(a.c.a,b)&&(d=b);return d};function W(a){a=a?a:{};var b=Ca({},a);delete b.gradient;delete b.radius;delete b.blur;delete b.shadow;delete b.weight;I.call(this,b);this.f=null;this.ia=void 0!==a.shadow?a.shadow:250;this.W=void 0;this.c=null;B(this,db("gradient"),this.Lk,this);this.ii(a.gradient?a.gradient:hv);this.di(void 0!==a.blur?a.blur:15);this.qh(void 0!==a.radius?a.radius:8);B(this,db("blur"),this.lf,this);B(this,db("radius"),this.lf,this);this.lf();var c=a.weight?a.weight:"weight",d;"string"===typeof c?d=function(a){return a.get(c)}:
d=c;this.l(function(a){a=d(a);a=void 0!==a?sa(a,0,1):1;var b=255*a|0,c=this.c[b];c||(c=[new sj({image:new Fh({opacity:a,src:this.W})})],this.c[b]=c);return c}.bind(this));this.set("renderOrder",null);B(this,"render",this.dl,this)}x(W,I);var hv=["#00f","#0ff","#0f0","#ff0","#f00"];k=W.prototype;k.zg=function(){return this.get("blur")};k.Gg=function(){return this.get("gradient")};k.ph=function(){return this.get("radius")};
k.Lk=function(){for(var a=this.Gg(),b=Ge(1,256),c=b.createLinearGradient(0,0,1,256),d=1/(a.length-1),e=0,f=a.length;e<f;++e)c.addColorStop(e*d,a[e]);b.fillStyle=c;b.fillRect(0,0,1,256);this.f=b.getImageData(0,0,1,256).data};k.lf=function(){var a=this.ph(),b=this.zg(),c=a+b+1,d=2*c,d=Ge(d,d);d.shadowOffsetX=d.shadowOffsetY=this.ia;d.shadowBlur=b;d.shadowColor="#000";d.beginPath();b=c-this.ia;d.arc(b,b,a,0,2*Math.PI,!0);d.fill();this.W=d.canvas.toDataURL();this.c=Array(256);this.u()};
k.dl=function(a){a=a.context;var b=a.canvas,b=a.getImageData(0,0,b.width,b.height),c=b.data,d,e,f;d=0;for(e=c.length;d<e;d+=4)if(f=4*c[d+3])c[d]=this.f[f],c[d+1]=this.f[f+1],c[d+2]=this.f[f+2];a.putImageData(b,0,0)};k.di=function(a){this.set("blur",a)};k.ii=function(a){this.set("gradient",a)};k.qh=function(a){this.set("radius",a)};function iv(a,b,c,d){function e(){delete pa[g];f.parentNode.removeChild(f)}var f=pa.document.createElement("script"),g="olc_"+t(b);f.async=!0;f.src=a+(-1==a.indexOf("?")?"?":"&")+(d||"callback")+"="+g;var h=pa.setTimeout(function(){e();c&&c()},1E4);pa[g]=function(a){pa.clearTimeout(h);e();b(a)};pa.document.getElementsByTagName("head")[0].appendChild(f)};function jv(a,b,c,d,e,f,g,h,l,m,n){We.call(this,e,0);this.S=void 0!==n?n:!1;this.C=g;this.D=h;this.l=null;this.c={};this.j=b;this.v=d;this.U=f?f:e;this.g=[];this.Wc=null;this.s=0;f=d.Ea(this.U);h=this.v.H();e=this.j.H();f=h?nc(f,h):f;if(0===hc(f))this.state=4;else if((h=a.H())&&(e?e=nc(e,h):e=h),d=d.$(this.U[0]),d=tk(a,c,lc(f),d),!isFinite(d)||0>=d)this.state=4;else if(this.A=new wk(a,c,f,e,d*(void 0!==m?m:.5)),0===this.A.f.length)this.state=4;else if(this.s=b.Lb(d),c=yk(this.A),e&&(a.a?(c[1]=sa(c[1],
e[1],e[3]),c[3]=sa(c[3],e[1],e[3])):c=nc(c,e)),hc(c))if(a=gf(b,c,this.s),100>(a.ea-a.ca+1)*(a.ga-a.fa+1)){for(b=a.ca;b<=a.ea;b++)for(c=a.fa;c<=a.ga;c++)(m=l(this.s,b,c,g))&&this.g.push(m);0===this.g.length&&(this.state=4)}else this.state=3;else this.state=4}x(jv,We);jv.prototype.ka=function(){1==this.state&&(this.Wc.forEach(Ka),this.Wc=null);We.prototype.ka.call(this)};
jv.prototype.$a=function(a){if(void 0!==a){var b=t(a);if(b in this.c)return this.c[b];a=Ga(this.c)?this.l:this.l.cloneNode(!1);return this.c[b]=a}return this.l};
jv.prototype.zd=function(){var a=[];this.g.forEach(function(b){b&&2==b.V()&&a.push({extent:this.j.Ea(b.ma),image:b.$a()})},this);this.g.length=0;if(0===a.length)this.state=3;else{var b=this.U[0],c=this.v.Ja(b),d="number"===typeof c?c:c[0],c="number"===typeof c?c:c[1],b=this.v.$(b),e=this.j.$(this.s),f=this.v.Ea(this.U);this.l=vk(d,c,this.C,e,this.j.H(),b,f,this.A,a,this.D,this.S);this.state=2}Xe(this)};
jv.prototype.load=function(){if(0==this.state){this.state=1;Xe(this);var a=0;this.Wc=[];this.g.forEach(function(b){var c=b.V();if(0==c||1==c){a++;var d;d=B(b,"change",function(){var c=b.V();if(2==c||3==c||4==c)Ka(d),a--,0===a&&(this.Wc.forEach(Ka),this.Wc=null,this.zd())},this);this.Wc.push(d)}},this);this.g.forEach(function(a){0==a.V()&&a.load()});0===a&&pa.setTimeout(this.zd.bind(this),0)}};function X(a){Jl.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,extent:a.extent,logo:a.logo,opaque:a.opaque,projection:a.projection,state:a.state,tileGrid:a.tileGrid,tileLoadFunction:a.tileLoadFunction?a.tileLoadFunction:kv,tilePixelRatio:a.tilePixelRatio,tileUrlFunction:a.tileUrlFunction,url:a.url,urls:a.urls,wrapX:a.wrapX});this.crossOrigin=void 0!==a.crossOrigin?a.crossOrigin:null;this.tileClass=void 0!==a.tileClass?a.tileClass:du;this.i={};this.s={};this.na=a.reprojectionErrorThreshold;
this.D=!1}x(X,Jl);k=X.prototype;k.Ah=function(){if(Ve(this.a))return!0;for(var a in this.i)if(Ve(this.i[a]))return!0;return!1};k.Lc=function(a,b){var c=this.pd(a);this.a.Lc(this.a==c?b:{});for(var d in this.i){var e=this.i[d];e.Lc(e==c?b:{})}};k.Ud=function(a){return this.f&&a&&!Pc(this.f,a)?0:this.gf()};k.gf=function(){return 0};k.jf=function(a){return this.f&&a&&!Pc(this.f,a)?!1:Jl.prototype.jf.call(this,a)};
k.fb=function(a){var b=this.f;return!this.tileGrid||b&&!Pc(b,a)?(b=t(a).toString(),b in this.s||(this.s[b]=nf(a)),this.s[b]):this.tileGrid};k.pd=function(a){var b=this.f;if(!b||Pc(b,a))return this.a;a=t(a).toString();a in this.i||(this.i[a]=new Ue);return this.i[a]};function lv(a,b,c,d,e,f,g){b=[b,c,d];e=(c=vf(a,b,f))?a.tileUrlFunction(c,e,f):void 0;e=new a.tileClass(b,void 0!==e?0:4,void 0!==e?e:"",a.crossOrigin,a.tileLoadFunction);e.key=g;B(e,"change",a.Bh,a);return e}
k.bc=function(a,b,c,d,e){if(this.f&&e&&!Pc(this.f,e)){var f=this.pd(e);c=[a,b,c];var g;a=this.Fb.apply(this,c);Re(f,a)&&(g=f.get(a));b=this.Mb;if(g&&g.key==b)return g;var h=this.f,l=this.fb(h),m=this.fb(e),n=vf(this,c,e);d=new jv(h,l,e,m,c,n,this.cc(d),this.gf(),function(a,b,c,d){return mv(this,a,b,c,d,h)}.bind(this),this.na,this.D);d.key=b;g?(d.a=g,f.replace(a,d)):f.set(a,d);return d}return mv(this,a,b,c,d,e)};
function mv(a,b,c,d,e,f){var g,h=a.Fb(b,c,d),l=a.Mb;if(Re(a.a,h)){if(g=a.a.get(h),g.key!=l){var m=g;g.a&&g.a.key==l?(g=g.a,2==m.V()&&(g.a=m)):(g=lv(a,b,c,d,e,f,l),2==m.V()?g.a=m:m.a&&2==m.a.V()&&(g.a=m.a,m.a=null));g.a&&(g.a.a=null);a.a.replace(h,g)}}else g=lv(a,b,c,d,e,f,l),a.a.set(h,g);return g}k.Ab=function(a){if(this.D!=a){this.D=a;for(var b in this.i)this.i[b].clear();this.u()}};k.Bb=function(a,b){var c=zc(a);c&&(c=t(c).toString(),c in this.s||(this.s[c]=b))};function kv(a,b){a.$a().src=b};function nv(a){X.call(this,{cacheSize:a.cacheSize,crossOrigin:"anonymous",opaque:!0,projection:zc("EPSG:3857"),reprojectionErrorThreshold:a.reprojectionErrorThreshold,state:"loading",tileLoadFunction:a.tileLoadFunction,wrapX:void 0!==a.wrapX?a.wrapX:!0});this.j=void 0!==a.culture?a.culture:"en-us";this.c=void 0!==a.maxZoom?a.maxZoom:-1;iv("https://dev.virtualearth.net/REST/v1/Imagery/Metadata/"+a.imagerySet+"?uriScheme=https&include=ImageryProviders&key="+a.key,this.v.bind(this),void 0,"jsonp")}
x(nv,X);var ov=new $d({html:'<a class="ol-attribution-bing-tos" href="http://www.microsoft.com/maps/product/terms.html">Terms of Use</a>'});
nv.prototype.v=function(a){if(200!=a.statusCode||"OK"!=a.statusDescription||"ValidCredentials"!=a.authenticationResultCode||1!=a.resourceSets.length||1!=a.resourceSets[0].resources.length)cf(this,"error");else{var b=a.brandLogoUri;-1==b.indexOf("https")&&(b=b.replace("http","https"));var c=a.resourceSets[0].resources[0],d=-1==this.c?c.zoomMax:this.c;a=of(this.f);var e=qf({extent:a,minZoom:c.zoomMin,maxZoom:d,tileSize:c.imageWidth==c.imageHeight?c.imageWidth:[c.imageWidth,c.imageHeight]});this.tileGrid=
e;var f=this.j;this.tileUrlFunction=Gl(c.imageUrlSubdomains.map(function(a){var b=[0,0,0],d=c.imageUrl.replace("{subdomain}",a).replace("{culture}",f);return function(a){if(a)return Se(a[0],a[1],-a[2]-1,b),d.replace("{quadkey}",Te(b))}}));if(c.imageryProviders){var g=Cc(zc("EPSG:4326"),this.f);a=c.imageryProviders.map(function(a){var b=a.attribution,c={};a.coverageAreas.forEach(function(a){var b=a.zoomMin,f=Math.min(a.zoomMax,d);a=a.bbox;a=qc([a[1],a[0],a[3],a[2]],g);var h,l;for(h=b;h<=f;++h)l=h.toString(),
b=gf(e,a,h),l in c?c[l].push(b):c[l]=[b]});return new $d({html:b,tileRanges:c})});a.push(ov);this.qa(a)}this.S=b;cf(this,"ready")}};function pv(a){a=a||{};var b=void 0!==a.projection?a.projection:"EPSG:3857",c=void 0!==a.tileGrid?a.tileGrid:qf({extent:of(b),maxZoom:a.maxZoom,minZoom:a.minZoom,tileSize:a.tileSize});X.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,crossOrigin:a.crossOrigin,logo:a.logo,opaque:a.opaque,projection:b,reprojectionErrorThreshold:a.reprojectionErrorThreshold,tileGrid:c,tileLoadFunction:a.tileLoadFunction,tilePixelRatio:a.tilePixelRatio,tileUrlFunction:a.tileUrlFunction,url:a.url,urls:a.urls,
wrapX:void 0!==a.wrapX?a.wrapX:!0})}x(pv,X);function qv(a){this.v=a.account;this.A=a.map||"";this.c=a.config||{};this.j={};pv.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,crossOrigin:a.crossOrigin,logo:a.logo,maxZoom:void 0!==a.maxZoom?a.maxZoom:18,minZoom:a.minZoom,projection:a.projection,state:"loading",wrapX:a.wrapX});rv(this)}x(qv,pv);k=qv.prototype;k.Tj=function(){return this.c};k.up=function(a){Ca(this.c,a);rv(this)};k.$o=function(a){this.c=a||{};rv(this)};
function rv(a){var b=JSON.stringify(a.c);if(a.j[b])sv(a,a.j[b]);else{var c="https://"+a.v+".cartodb.com/api/v1/map";a.A&&(c+="/named/"+a.A);var d=new XMLHttpRequest;d.addEventListener("load",a.Nk.bind(a,b));d.addEventListener("error",a.Mk.bind(a));d.open("POST",c);d.setRequestHeader("Content-type","application/json");d.send(JSON.stringify(a.c))}}
k.Nk=function(a,b){var c=b.target;if(200<=c.status&&300>c.status){var d;try{d=JSON.parse(c.responseText)}catch(e){cf(this,"error");return}sv(this,d);this.j[a]=d;cf(this,"ready")}else cf(this,"error")};k.Mk=function(){cf(this,"error")};function sv(a,b){a.Va("https://"+b.cdn_url.https+"/"+a.v+"/api/v1/map/"+b.layergroupid+"/{z}/{x}/{y}.png")};function Y(a){P.call(this,{attributions:a.attributions,extent:a.extent,logo:a.logo,projection:a.projection,wrapX:a.wrapX});this.D=void 0;this.za=void 0!==a.distance?a.distance:20;this.A=[];this.na=a.geometryFunction||function(a){return a.X()};this.v=a.source;this.v.I("change",Y.prototype.cb,this)}x(Y,P);Y.prototype.Sa=function(){return this.v};Y.prototype.Pc=function(a,b,c){this.v.Pc(a,b,c);b!==this.D&&(this.clear(),this.D=b,tv(this),this.Jc(this.A))};
Y.prototype.cb=function(){this.clear();tv(this);this.Jc(this.A);this.u()};function tv(a){if(void 0!==a.D){a.A.length=0;for(var b=Jb(),c=a.za*a.D,d=a.v.oe(),e={},f=0,g=d.length;f<g;f++){var h=d[f];t(h).toString()in e||!(h=a.na(h))||(h=h.Z(),Wb(h,b),Mb(b,c,b),h=a.v.ef(b),h=h.filter(function(a){a=t(a).toString();return a in e?!1:e[a]=!0}),a.A.push(uv(a,h)))}}}
function uv(a,b){for(var c=[0,0],d=b.length-1;0<=d;--d){var e=a.na(b[d]);e?yb(c,e.Z()):b.splice(d,1)}d=1/b.length;c[0]*=d;c[1]*=d;c=new Ik(new C(c));c.set("features",b);return c};function vv(a,b){var c=Object.keys(b).map(function(a){return a+"="+encodeURIComponent(b[a])}).join("&");a=a.replace(/[?&]$/,"");a=-1===a.indexOf("?")?a+"?":a+"&";return a+c};function wv(a){a=a||{};Ak.call(this,{attributions:a.attributions,logo:a.logo,projection:a.projection,resolutions:a.resolutions});this.W=void 0!==a.crossOrigin?a.crossOrigin:null;this.i=a.url;this.j=void 0!==a.imageLoadFunction?a.imageLoadFunction:Gk;this.v=a.params||{};this.c=null;this.s=[0,0];this.T=0;this.P=void 0!==a.ratio?a.ratio:1.5}x(wv,Ak);k=wv.prototype;k.Sm=function(){return this.v};
k.Mc=function(a,b,c,d){if(void 0===this.i)return null;b=Bk(this,b);var e=this.c;if(e&&this.T==this.g&&e.$()==b&&e.f==c&&Sb(e.H(),a))return e;e={F:"image",FORMAT:"PNG32",TRANSPARENT:!0};Ca(e,this.v);a=a.slice();var f=(a[0]+a[2])/2,g=(a[1]+a[3])/2;if(1!=this.P){var h=this.P*jc(a)/2,l=this.P*kc(a)/2;a[0]=f-h;a[1]=g-l;a[2]=f+h;a[3]=g+l}var h=b/c,l=Math.ceil(jc(a)/h),m=Math.ceil(kc(a)/h);a[0]=f-h*l/2;a[2]=f+h*l/2;a[1]=g-h*m/2;a[3]=g+h*m/2;this.s[0]=l;this.s[1]=m;f=a;g=this.s;d=d.eb.split(":").pop();e.SIZE=
g[0]+","+g[1];e.BBOX=f.join(",");e.BBOXSR=d;e.IMAGESR=d;e.DPI=90*c;d=this.i.replace(/MapServer\/?$/,"MapServer/export").replace(/ImageServer\/?$/,"ImageServer/exportImage");e=vv(d,e);this.c=new cu(a,b,c,this.l,e,this.W,this.j);this.T=this.g;B(this.c,"change",this.o,this);return this.c};k.Rm=function(){return this.j};k.Tm=function(){return this.i};k.Um=function(a){this.c=null;this.j=a;this.u()};k.Vm=function(a){a!=this.i&&(this.i=a,this.c=null,this.u())};k.Wm=function(a){Ca(this.v,a);this.c=null;this.u()};function xv(a){Ak.call(this,{projection:a.projection,resolutions:a.resolutions});this.W=void 0!==a.crossOrigin?a.crossOrigin:null;this.s=void 0!==a.displayDpi?a.displayDpi:96;this.j=a.params||{};this.T=a.url;this.c=void 0!==a.imageLoadFunction?a.imageLoadFunction:Gk;this.ia=void 0!==a.hidpi?a.hidpi:!0;this.oa=void 0!==a.metersPerUnit?a.metersPerUnit:1;this.v=void 0!==a.ratio?a.ratio:1;this.za=void 0!==a.useOverlay?a.useOverlay:!1;this.i=null;this.P=0}x(xv,Ak);k=xv.prototype;k.Ym=function(){return this.j};
k.Mc=function(a,b,c){b=Bk(this,b);c=this.ia?c:1;var d=this.i;if(d&&this.P==this.g&&d.$()==b&&d.f==c&&Sb(d.H(),a))return d;1!=this.v&&(a=a.slice(),pc(a,this.v));var e=[jc(a)/b*c,kc(a)/b*c];if(void 0!==this.T){var d=this.T,f=lc(a),g=this.oa,h=jc(a),l=kc(a),m=e[0],n=e[1],p=.0254/this.s,e={OPERATION:this.za?"GETDYNAMICMAPOVERLAYIMAGE":"GETMAPIMAGE",VERSION:"2.0.0",LOCALE:"en",CLIENTAGENT:"ol.source.ImageMapGuide source",CLIP:"1",SETDISPLAYDPI:this.s,SETDISPLAYWIDTH:Math.round(e[0]),SETDISPLAYHEIGHT:Math.round(e[1]),
SETVIEWSCALE:n*h>m*l?h*g/(m*p):l*g/(n*p),SETVIEWCENTERX:f[0],SETVIEWCENTERY:f[1]};Ca(e,this.j);d=vv(d,e);d=new cu(a,b,c,this.l,d,this.W,this.c);B(d,"change",this.o,this)}else d=null;this.i=d;this.P=this.g;return d};k.Xm=function(){return this.c};k.$m=function(a){Ca(this.j,a);this.u()};k.Zm=function(a){this.i=null;this.c=a;this.u()};function yv(a){var b=a.imageExtent,c=void 0!==a.crossOrigin?a.crossOrigin:null,d=void 0!==a.imageLoadFunction?a.imageLoadFunction:Gk;Ak.call(this,{attributions:a.attributions,logo:a.logo,projection:zc(a.projection)});this.c=new cu(b,void 0,1,this.l,a.url,c,d);this.i=a.imageSize?a.imageSize:null;B(this.c,"change",this.o,this)}x(yv,Ak);yv.prototype.Mc=function(a){return oc(a,this.c.H())?this.c:null};
yv.prototype.o=function(a){if(2==this.c.V()){var b=this.c.H(),c=this.c.a(),d,e;this.i?(d=this.i[0],e=this.i[1]):(d=c.width,e=c.height);b=Math.ceil(jc(b)/(kc(b)/e));if(b!=d){var b=Ge(b,e),f=b.canvas;b.drawImage(c,0,0,d,e,0,0,f.width,f.height);this.c.g=f}}Ak.prototype.o.call(this,a)};function zv(a){a=a||{};Ak.call(this,{attributions:a.attributions,logo:a.logo,projection:a.projection,resolutions:a.resolutions});this.oa=void 0!==a.crossOrigin?a.crossOrigin:null;this.j=a.url;this.P=void 0!==a.imageLoadFunction?a.imageLoadFunction:Gk;this.i=a.params||{};this.v=!0;Av(this);this.ia=a.serverType;this.za=void 0!==a.hidpi?a.hidpi:!0;this.c=null;this.T=[0,0];this.W=0;this.s=void 0!==a.ratio?a.ratio:1.5}x(zv,Ak);var Bv=[101,101];k=zv.prototype;
k.fn=function(a,b,c,d){if(void 0!==this.j){var e=mc(a,b,0,Bv),f={SERVICE:"WMS",VERSION:"1.3.0",REQUEST:"GetFeatureInfo",FORMAT:"image/png",TRANSPARENT:!0,QUERY_LAYERS:this.i.LAYERS};Ca(f,this.i,d);d=Math.floor((e[3]-a[1])/b);f[this.v?"I":"X"]=Math.floor((a[0]-e[0])/b);f[this.v?"J":"Y"]=d;return Cv(this,e,Bv,1,zc(c),f)}};k.hn=function(){return this.i};
k.Mc=function(a,b,c,d){if(void 0===this.j)return null;b=Bk(this,b);1==c||this.za&&void 0!==this.ia||(c=1);a=a.slice();var e=(a[0]+a[2])/2,f=(a[1]+a[3])/2,g=b/c,h=jc(a)/g,g=kc(a)/g,l=this.c;if(l&&this.W==this.g&&l.$()==b&&l.f==c&&Sb(l.H(),a))return l;if(1!=this.s){var l=this.s*jc(a)/2,m=this.s*kc(a)/2;a[0]=e-l;a[1]=f-m;a[2]=e+l;a[3]=f+m}e={SERVICE:"WMS",VERSION:"1.3.0",REQUEST:"GetMap",FORMAT:"image/png",TRANSPARENT:!0};Ca(e,this.i);this.T[0]=Math.ceil(h*this.s);this.T[1]=Math.ceil(g*this.s);d=Cv(this,
a,this.T,c,d,e);this.c=new cu(a,b,c,this.l,d,this.oa,this.P);this.W=this.g;B(this.c,"change",this.o,this);return this.c};k.gn=function(){return this.P};
function Cv(a,b,c,d,e,f){f[a.v?"CRS":"SRS"]=e.eb;"STYLES"in a.i||(f.STYLES="");if(1!=d)switch(a.ia){case "geoserver":d=90*d+.5|0;f.FORMAT_OPTIONS="FORMAT_OPTIONS"in f?f.FORMAT_OPTIONS+(";dpi:"+d):"dpi:"+d;break;case "mapserver":f.MAP_RESOLUTION=90*d;break;case "carmentaserver":case "qgis":f.DPI=90*d}f.WIDTH=c[0];f.HEIGHT=c[1];c=e.b;var g;a.v&&"ne"==c.substr(0,2)?g=[b[1],b[0],b[3],b[2]]:g=b;f.BBOX=g.join(",");return vv(a.j,f)}k.jn=function(){return this.j};k.kn=function(a){this.c=null;this.P=a;this.u()};
k.ln=function(a){a!=this.j&&(this.j=a,this.c=null,this.u())};k.mn=function(a){Ca(this.i,a);Av(this);this.c=null;this.u()};function Av(a){a.v=0<=xb(a.i.VERSION||"1.3.0")};function Dv(a){a=a||{};var b;void 0!==a.attributions?b=a.attributions:b=[Ev];pv.call(this,{attributions:b,cacheSize:a.cacheSize,crossOrigin:void 0!==a.crossOrigin?a.crossOrigin:"anonymous",opaque:void 0!==a.opaque?a.opaque:!0,maxZoom:void 0!==a.maxZoom?a.maxZoom:19,reprojectionErrorThreshold:a.reprojectionErrorThreshold,tileLoadFunction:a.tileLoadFunction,url:void 0!==a.url?a.url:"https://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png",wrapX:a.wrapX})}x(Dv,pv);var Ev=new $d({html:'&copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors.'});(function(){var a={},b={ja:a};(function(c){if("object"===typeof a&&"undefined"!==typeof b)b.ja=c();else{var d;"undefined"!==typeof window?d=window:"undefined"!==typeof global?d=global:"undefined"!==typeof self?d=self:d=this;d.Sp=c()}})(function(){return function d(a,b,g){function h(m,p){if(!b[m]){if(!a[m]){var q="function"==typeof require&&require;if(!p&&q)return q(m,!0);if(l)return l(m,!0);q=Error("Cannot find module '"+m+"'");throw q.code="MODULE_NOT_FOUND",q;}q=b[m]={ja:{}};a[m][0].call(q.ja,function(b){var d=
a[m][1][b];return h(d?d:b)},q,q.ja,d,a,b,g)}return b[m].ja}for(var l="function"==typeof require&&require,m=0;m<g.length;m++)h(g[m]);return h}({1:[function(a,b,f){a=a("./processor");f.$i=a},{"./processor":2}],2:[function(a,b){function f(a){var b=!0;try{new ImageData(10,10)}catch(d){b=!1}return function(d){var e=d.buffers,f=d.meta,g=d.width,h=d.height,l=e.length,m=e[0].byteLength;if(d.imageOps){m=Array(l);for(d=0;d<l;++d){var D=m,H=d,ba;ba=new Uint8ClampedArray(e[d]);var A=g,Fa=h;ba=b?new ImageData(ba,
A,Fa):{data:ba,width:A,height:Fa};D[H]=ba}g=a(m,f).data}else{g=new Uint8ClampedArray(m);h=Array(l);D=Array(l);for(d=0;d<l;++d)h[d]=new Uint8ClampedArray(e[d]),D[d]=[0,0,0,0];for(e=0;e<m;e+=4){for(d=0;d<l;++d)H=h[d],D[d][0]=H[e],D[d][1]=H[e+1],D[d][2]=H[e+2],D[d][3]=H[e+3];d=a(D,f);g[e]=d[0];g[e+1]=d[1];g[e+2]=d[2];g[e+3]=d[3]}}return g.buffer}}function g(a,b){var d=Object.keys(a.lib||{}).map(function(b){return"var "+b+" = "+a.lib[b].toString()+";"}).concat(["var __minion__ = ("+f.toString()+")(",
a.operation.toString(),");",'self.addEventListener("message", function(event) {'," var buffer = __minion__(event.data);"," self.postMessage({buffer: buffer, meta: event.data.meta}, [buffer]);","});"]),d=URL.createObjectURL(new Blob(d,{type:"text/javascript"})),d=new Worker(d);d.addEventListener("message",b);return d}function h(a,b){var d=f(a.operation);return{postMessage:function(a){setTimeout(function(){b({data:{buffer:d(a),meta:a.meta}})},0)}}}function l(a){this.Re=!!a.ll;var b;0===a.threads?
b=0:this.Re?b=1:b=a.threads||1;var d=[];if(b)for(var e=0;e<b;++e)d[e]=g(a,this.ig.bind(this,e));else d[0]=h(a,this.ig.bind(this,0));this.Ld=d;this.$c=[];this.oj=a.uo||Infinity;this.Jd=0;this.Ic={};this.Se=null}var m=a("./util").Fl;l.prototype.so=function(a,b,d){this.lj({Ac:a,Xg:b,qg:d});this.fg()};l.prototype.lj=function(a){for(this.$c.push(a);this.$c.length>this.oj;)this.$c.shift().qg(null,null)};l.prototype.fg=function(){if(0===this.Jd&&0<this.$c.length){var a=this.Se=this.$c.shift(),b=a.Ac[0].width,
d=a.Ac[0].height,e=a.Ac.map(function(a){return a.data.buffer}),f=this.Ld.length;this.Jd=f;if(1===f)this.Ld[0].postMessage({buffers:e,meta:a.Xg,imageOps:this.Re,width:b,height:d},e);else for(var g=4*Math.ceil(a.Ac[0].data.length/4/f),h=0;h<f;++h){for(var l=h*g,m=[],D=0,H=e.length;D<H;++D)m.push(e[h].slice(l,l+g));this.Ld[h].postMessage({buffers:m,meta:a.Xg,imageOps:this.Re,width:b,height:d},m)}}};l.prototype.ig=function(a,b){this.Pp||(this.Ic[a]=b.data,--this.Jd,0===this.Jd&&this.pj())};l.prototype.pj=
function(){var a=this.Se,b=this.Ld.length,d,e;if(1===b)d=new Uint8ClampedArray(this.Ic[0].buffer),e=this.Ic[0].meta;else{var f=a.Ac[0].data.length;d=new Uint8ClampedArray(f);e=Array(f);for(var f=4*Math.ceil(f/4/b),g=0;g<b;++g){var h=g*f;d.set(new Uint8ClampedArray(this.Ic[g].buffer),h);e[g]=this.Ic[g].meta}}this.Se=null;this.Ic={};a.qg(null,m(d,a.Ac[0].width,a.Ac[0].height),e);this.fg()};b.ja=l},{"./util":3}],3:[function(a,b,f){var g=!0;try{new ImageData(10,10)}catch(l){g=!1}var h=document.createElement("canvas").getContext("2d");
f.Fl=function(a,b,d){if(g)return new ImageData(a,b,d);b=h.createImageData(b,d);b.data.set(a);return b}},{}]},{},[1])(1)});jl=b.ja})();function Fv(a){this.P=null;this.za=void 0!==a.operationType?a.operationType:"pixel";this.Sa=void 0!==a.threads?a.threads:1;this.c=Gv(a.sources);for(var b=0,c=this.c.length;b<c;++b)B(this.c[b],"change",this.u,this);this.i=Ge();this.ia=new Th(function(){return 1},this.u.bind(this));for(var b=Hv(this.c),c={},d=0,e=b.length;d<e;++d)c[t(b[d].layer)]=b[d];this.j=this.s=null;this.W={animate:!1,attributions:{},coordinateToPixelTransform:ch(),extent:null,focus:null,index:0,layerStates:c,layerStatesArray:b,
logos:{},pixelRatio:1,pixelToCoordinateTransform:ch(),postRenderFunctions:[],size:[0,0],skippedFeatureUids:{},tileQueue:this.ia,time:Date.now(),usedTiles:{},viewState:{rotation:0},viewHints:[],wantedTiles:{}};Ak.call(this,{});void 0!==a.operation&&this.v(a.operation,a.lib)}x(Fv,Ak);Fv.prototype.v=function(a,b){this.P=new jl.$i({operation:a,ll:"image"===this.za,uo:1,lib:b,threads:this.Sa});this.u()};function Iv(a,b,c){var d=a.s;return!d||a.g!==d.Xo||c!==d.resolution||!$b(b,d.extent)}
Fv.prototype.A=function(a,b,c,d){c=!0;for(var e,f=0,g=this.c.length;f<g;++f)if(e=this.c[f].a.ha(),"ready"!==e.V()){c=!1;break}if(!c)return null;a=a.slice();if(!Iv(this,a,b))return this.j;c=this.i.canvas;e=Math.round(jc(a)/b);f=Math.round(kc(a)/b);if(e!==c.width||f!==c.height)c.width=e,c.height=f;e=Ca({},this.W);e.viewState=Ca({},e.viewState);var f=lc(a),g=Math.round(jc(a)/b),h=Math.round(kc(a)/b);e.extent=a;e.focus=lc(a);e.size[0]=g;e.size[1]=h;g=e.viewState;g.center=f;g.projection=d;g.resolution=
b;this.j=d=new nk(a,b,1,this.l,c,this.T.bind(this,e));this.s={extent:a,resolution:b,Xo:this.g};return d};
Fv.prototype.T=function(a,b){for(var c=this.c.length,d=Array(c),e=0;e<c;++e){var f;f=this.c[e];var g=a,h=a.layerStatesArray[e];if(f.l(g,h)){var l=g.size[0],m=g.size[1];if(Jv){var n=Jv.canvas;n.width!==l||n.height!==m?Jv=Ge(l,m):Jv.clearRect(0,0,l,m)}else Jv=Ge(l,m);f.i(g,h,Jv);f=Jv.getImageData(0,0,l,m)}else f=null;if(f)d[e]=f;else return}c={};this.b(new Kv(Lv,a,c));this.P.so(d,c,this.oa.bind(this,a,b));Uh(a.tileQueue,16,16)};
Fv.prototype.oa=function(a,b,c,d,e){c?b(c):d&&(this.b(new Kv(Mv,a,e)),Iv(this,a.extent,a.viewState.resolution/a.pixelRatio)||this.i.putImageData(d,0,0),b(null))};var Jv=null;function Hv(a){return a.map(function(a){return oh(a.a)})}function Gv(a){for(var b=a.length,c=Array(b),d=0;d<b;++d){var e=d,f=a[d],g=null;f instanceof rf?(f=new F({source:f}),g=new Bl(f)):f instanceof Ak&&(f=new ej({source:f}),g=new Al(f));c[e]=g}return c}
function Kv(a,b,c){Ua.call(this,a);this.extent=b.extent;this.resolution=b.viewState.resolution/b.pixelRatio;this.data=c}x(Kv,Ua);var Lv="beforeoperations",Mv="afteroperations";var Nv={terrain:{ub:"jpg",opaque:!0},"terrain-background":{ub:"jpg",opaque:!0},"terrain-labels":{ub:"png",opaque:!1},"terrain-lines":{ub:"png",opaque:!1},"toner-background":{ub:"png",opaque:!0},toner:{ub:"png",opaque:!0},"toner-hybrid":{ub:"png",opaque:!1},"toner-labels":{ub:"png",opaque:!1},"toner-lines":{ub:"png",opaque:!1},"toner-lite":{ub:"png",opaque:!0},watercolor:{ub:"jpg",opaque:!0}},Ov={terrain:{minZoom:4,maxZoom:18},toner:{minZoom:0,maxZoom:20},watercolor:{minZoom:1,maxZoom:16}};
function Pv(a){var b=a.layer.indexOf("-"),b=-1==b?a.layer:a.layer.slice(0,b),b=Ov[b],c=Nv[a.layer];pv.call(this,{attributions:Qv,cacheSize:a.cacheSize,crossOrigin:"anonymous",maxZoom:void 0!=a.maxZoom?a.maxZoom:b.maxZoom,minZoom:void 0!=a.minZoom?a.minZoom:b.minZoom,opaque:c.opaque,reprojectionErrorThreshold:a.reprojectionErrorThreshold,tileLoadFunction:a.tileLoadFunction,url:void 0!==a.url?a.url:"https://stamen-tiles-{a-d}.a.ssl.fastly.net/"+a.layer+"/{z}/{x}/{y}."+c.ub})}x(Pv,pv);
var Qv=[new $d({html:'Map tiles by <a href="http://stamen.com/">Stamen Design</a>, under <a href="http://creativecommons.org/licenses/by/3.0/">CC BY 3.0</a>.'}),Ev];function Rv(a){a=a||{};X.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,crossOrigin:a.crossOrigin,logo:a.logo,projection:a.projection,reprojectionErrorThreshold:a.reprojectionErrorThreshold,tileGrid:a.tileGrid,tileLoadFunction:a.tileLoadFunction,url:a.url,urls:a.urls,wrapX:void 0!==a.wrapX?a.wrapX:!0});this.c=a.params||{};this.j=Jb()}x(Rv,X);Rv.prototype.v=function(){return this.c};Rv.prototype.cc=function(a){return a};
Rv.prototype.vc=function(a,b,c){var d=this.tileGrid;d||(d=this.fb(c));if(!(d.b.length<=a[0])){var e=d.Ea(a,this.j),f=$e(d.Ja(a[0]),this.o);1!=b&&(f=Ze(f,b,this.o));d={F:"image",FORMAT:"PNG32",TRANSPARENT:!0};Ca(d,this.c);var g=this.urls;g?(c=c.eb.split(":").pop(),d.SIZE=f[0]+","+f[1],d.BBOX=e.join(","),d.BBOXSR=c,d.IMAGESR=c,d.DPI=Math.round(d.DPI?d.DPI*b:90*b),a=(1==g.length?g[0]:g[xa((a[1]<<a[0])+a[2],g.length)]).replace(/MapServer\/?$/,"MapServer/export").replace(/ImageServer\/?$/,"ImageServer/exportImage"),
a=vv(a,d)):a=void 0;return a}};Rv.prototype.A=function(a){Ca(this.c,a);this.u()};function Sv(a,b,c){We.call(this,a,2);this.l=b;this.c=c;this.g={}}x(Sv,We);Sv.prototype.$a=function(a){a=void 0!==a?t(a):-1;if(a in this.g)return this.g[a];var b=this.l,c=Ge(b[0],b[1]);c.strokeStyle="black";c.strokeRect(.5,.5,b[0]+.5,b[1]+.5);c.fillStyle="black";c.textAlign="center";c.textBaseline="middle";c.font="24px sans-serif";c.fillText(this.c,b[0]/2,b[1]/2);return this.g[a]=c.canvas};
function Tv(a){rf.call(this,{opaque:!1,projection:a.projection,tileGrid:a.tileGrid,wrapX:void 0!==a.wrapX?a.wrapX:!0})}x(Tv,rf);Tv.prototype.bc=function(a,b,c){var d=this.Fb(a,b,c);if(Re(this.a,d))return this.a.get(d);var e=$e(this.tileGrid.Ja(a));a=[a,b,c];b=(b=vf(this,a))?vf(this,b).toString():"";e=new Sv(a,e,b);this.a.set(d,e);return e};function Uv(a){this.c=null;X.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,crossOrigin:a.crossOrigin,projection:zc("EPSG:3857"),reprojectionErrorThreshold:a.reprojectionErrorThreshold,state:"loading",tileLoadFunction:a.tileLoadFunction,wrapX:void 0!==a.wrapX?a.wrapX:!0});if(a.jsonp)iv(a.url,this.yh.bind(this),this.me.bind(this));else{var b=new XMLHttpRequest;b.addEventListener("load",this.pn.bind(this));b.addEventListener("error",this.nn.bind(this));b.open("GET",a.url);b.send()}}
x(Uv,X);k=Uv.prototype;k.pn=function(a){a=a.target;if(200<=a.status&&300>a.status){var b;try{b=JSON.parse(a.responseText)}catch(c){this.me();return}this.yh(b)}else this.me()};k.nn=function(){this.me()};k.Ak=function(){return this.c};
k.yh=function(a){var b=zc("EPSG:4326"),c=this.f,d;void 0!==a.bounds&&(d=qc(a.bounds,Cc(b,c)));var e=a.minzoom||0,f=a.maxzoom||22;this.tileGrid=c=qf({extent:of(c),maxZoom:f,minZoom:e});this.tileUrlFunction=Fl(a.tiles,c);if(void 0!==a.attribution&&!this.l){b=void 0!==d?d:b.H();d={};for(var g;e<=f;++e)g=e.toString(),d[g]=[gf(c,b,e)];this.qa([new $d({html:a.attribution,tileRanges:d})])}this.c=a;cf(this,"ready")};k.me=function(){cf(this,"error")};function Vv(a){rf.call(this,{projection:zc("EPSG:3857"),state:"loading"});this.s=void 0!==a.preemptive?a.preemptive:!0;this.j=Hl;this.i=void 0;this.c=a.jsonp||!1;if(a.url)if(this.c)iv(a.url,this.Bf.bind(this),this.ne.bind(this));else{var b=new XMLHttpRequest;b.addEventListener("load",this.tn.bind(this));b.addEventListener("error",this.sn.bind(this));b.open("GET",a.url);b.send()}else a.tileJSON&&this.Bf(a.tileJSON)}x(Vv,rf);k=Vv.prototype;
k.tn=function(a){a=a.target;if(200<=a.status&&300>a.status){var b;try{b=JSON.parse(a.responseText)}catch(c){this.ne();return}this.Bf(b)}else this.ne()};k.sn=function(){this.ne()};k.xk=function(){return this.i};k.Ij=function(a,b,c,d,e){this.tileGrid?(b=this.tileGrid.Zd(a,b),Wv(this.bc(b[0],b[1],b[2],1,this.f),a,c,d,e)):!0===e?Mf(function(){c.call(d,null)}):c.call(d,null)};k.ne=function(){cf(this,"error")};
k.Bf=function(a){var b=zc("EPSG:4326"),c=this.f,d;void 0!==a.bounds&&(d=qc(a.bounds,Cc(b,c)));var e=a.minzoom||0,f=a.maxzoom||22;this.tileGrid=c=qf({extent:of(c),maxZoom:f,minZoom:e});this.i=a.template;var g=a.grids;if(g){this.j=Fl(g,c);if(void 0!==a.attribution){b=void 0!==d?d:b.H();for(d={};e<=f;++e)g=e.toString(),d[g]=[gf(c,b,e)];this.qa([new $d({html:a.attribution,tileRanges:d})])}cf(this,"ready")}else cf(this,"error")};
k.bc=function(a,b,c,d,e){var f=this.Fb(a,b,c);if(Re(this.a,f))return this.a.get(f);a=[a,b,c];b=vf(this,a,e);d=this.j(b,d,e);d=new Xv(a,void 0!==d?0:4,void 0!==d?d:"",this.tileGrid.Ea(a),this.s,this.c);this.a.set(f,d);return d};k.Yf=function(a,b,c){a=this.Fb(a,b,c);Re(this.a,a)&&this.a.get(a)};function Xv(a,b,c,d,e,f){We.call(this,a,b);this.s=c;this.g=d;this.U=e;this.c=this.j=this.l=null;this.v=f}x(Xv,We);k=Xv.prototype;k.$a=function(){return null};
k.getData=function(a){if(!this.l||!this.j)return null;var b=this.l[Math.floor((1-(a[1]-this.g[1])/(this.g[3]-this.g[1]))*this.l.length)];if("string"!==typeof b)return null;b=b.charCodeAt(Math.floor((a[0]-this.g[0])/(this.g[2]-this.g[0])*b.length));93<=b&&b--;35<=b&&b--;b-=32;a=null;b in this.j&&(b=this.j[b],this.c&&b in this.c?a=this.c[b]:a=b);return a};
function Wv(a,b,c,d,e){0==a.state&&!0===e?(Pa(a,"change",function(){c.call(d,this.getData(b))},a),Yv(a)):!0===e?Mf(function(){c.call(d,this.getData(b))},a):c.call(d,a.getData(b))}k.jb=function(){return this.s};k.ae=function(){this.state=3;Xe(this)};k.zh=function(a){this.l=a.grid;this.j=a.keys;this.c=a.data;this.state=4;Xe(this)};
function Yv(a){if(0==a.state)if(a.state=1,a.v)iv(a.s,a.zh.bind(a),a.ae.bind(a));else{var b=new XMLHttpRequest;b.addEventListener("load",a.rn.bind(a));b.addEventListener("error",a.qn.bind(a));b.open("GET",a.s);b.send()}}k.rn=function(a){a=a.target;if(200<=a.status&&300>a.status){var b;try{b=JSON.parse(a.responseText)}catch(c){this.ae();return}this.zh(b)}else this.ae()};k.qn=function(){this.ae()};k.load=function(){this.U&&Yv(this)};function Zv(a){a=a||{};var b=a.params||{};X.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,crossOrigin:a.crossOrigin,logo:a.logo,opaque:!("TRANSPARENT"in b?b.TRANSPARENT:1),projection:a.projection,reprojectionErrorThreshold:a.reprojectionErrorThreshold,tileGrid:a.tileGrid,tileLoadFunction:a.tileLoadFunction,url:a.url,urls:a.urls,wrapX:void 0!==a.wrapX?a.wrapX:!0});this.v=void 0!==a.gutter?a.gutter:0;this.c=b;this.j=!0;this.A=a.serverType;this.T=void 0!==a.hidpi?a.hidpi:!0;this.P="";
$v(this);this.W=Jb();aw(this);uf(this,bw(this))}x(Zv,X);k=Zv.prototype;
k.vn=function(a,b,c,d){c=zc(c);var e=this.tileGrid;e||(e=this.fb(c));b=e.Zd(a,b);if(!(e.b.length<=b[0])){var f=e.$(b[0]),g=e.Ea(b,this.W),e=$e(e.Ja(b[0]),this.o),h=this.v;0!==h&&(e=Ye(e,h,this.o),g=Mb(g,f*h,g));h={SERVICE:"WMS",VERSION:"1.3.0",REQUEST:"GetFeatureInfo",FORMAT:"image/png",TRANSPARENT:!0,QUERY_LAYERS:this.c.LAYERS};Ca(h,this.c,d);d=Math.floor((g[3]-a[1])/f);h[this.j?"I":"X"]=Math.floor((a[0]-g[0])/f);h[this.j?"J":"Y"]=d;return cw(this,b,e,g,1,c,h)}};k.gf=function(){return this.v};
k.Fb=function(a,b,c){return this.P+X.prototype.Fb.call(this,a,b,c)};k.wn=function(){return this.c};
function cw(a,b,c,d,e,f,g){var h=a.urls;if(h){g.WIDTH=c[0];g.HEIGHT=c[1];g[a.j?"CRS":"SRS"]=f.eb;"STYLES"in a.c||(g.STYLES="");if(1!=e)switch(a.A){case "geoserver":c=90*e+.5|0;g.FORMAT_OPTIONS="FORMAT_OPTIONS"in g?g.FORMAT_OPTIONS+(";dpi:"+c):"dpi:"+c;break;case "mapserver":g.MAP_RESOLUTION=90*e;break;case "carmentaserver":case "qgis":g.DPI=90*e}f=f.b;a.j&&"ne"==f.substr(0,2)&&(a=d[0],d[0]=d[1],d[1]=a,a=d[2],d[2]=d[3],d[3]=a);g.BBOX=d.join(",");return vv(1==h.length?h[0]:h[xa((b[1]<<b[0])+b[2],h.length)],
g)}}k.cc=function(a){return this.T&&void 0!==this.A?a:1};function $v(a){var b=0,c=[];if(a.urls){var d,e;d=0;for(e=a.urls.length;d<e;++d)c[b++]=a.urls[d]}a.P=c.join("#")}function bw(a){var b=0,c=[],d;for(d in a.c)c[b++]=d+"-"+a.c[d];return c.join("/")}
k.vc=function(a,b,c){var d=this.tileGrid;d||(d=this.fb(c));if(!(d.b.length<=a[0])){1==b||this.T&&void 0!==this.A||(b=1);var e=d.$(a[0]),f=d.Ea(a,this.W),d=$e(d.Ja(a[0]),this.o),g=this.v;0!==g&&(d=Ye(d,g,this.o),f=Mb(f,e*g,f));1!=b&&(d=Ze(d,b,this.o));e={SERVICE:"WMS",VERSION:"1.3.0",REQUEST:"GetMap",FORMAT:"image/png",TRANSPARENT:!0};Ca(e,this.c);return cw(this,a,d,f,b,c,e)}};k.xn=function(a){Ca(this.c,a);$v(this);aw(this);uf(this,bw(this))};function aw(a){a.j=0<=xb(a.c.VERSION||"1.3.0")};function dw(a){this.l=a.matrixIds;df.call(this,{extent:a.extent,origin:a.origin,origins:a.origins,resolutions:a.resolutions,tileSize:a.tileSize,tileSizes:a.tileSizes,sizes:a.sizes})}x(dw,df);dw.prototype.j=function(){return this.l};
function ew(a,b){var c=[],d=[],e=[],f=[],g=[],h;h=zc(a.SupportedCRS.replace(/urn:ogc:def:crs:(\w+):(.*:)?(\w+)$/,"$1:$3"));var l=h.ac(),m="ne"==h.b.substr(0,2);a.TileMatrix.sort(function(a,b){return b.ScaleDenominator-a.ScaleDenominator});a.TileMatrix.forEach(function(a){d.push(a.Identifier);var b=2.8E-4*a.ScaleDenominator/l,h=a.TileWidth,r=a.TileHeight;m?e.push([a.TopLeftCorner[1],a.TopLeftCorner[0]]):e.push(a.TopLeftCorner);c.push(b);f.push(h==r?h:[h,r]);g.push([a.MatrixWidth,-a.MatrixHeight])});
return new dw({extent:b,origins:e,resolutions:c,matrixIds:d,tileSizes:f,sizes:g})};function Z(a){function b(a){a="KVP"==d?vv(a,f):a.replace(/\{(\w+?)\}/g,function(a,b){return b.toLowerCase()in f?f[b.toLowerCase()]:a});return function(b){if(b){var c={TileMatrix:e.l[b[0]],TileCol:b[1],TileRow:-b[2]-1};Ca(c,g);b=a;return b="KVP"==d?vv(b,c):b.replace(/\{(\w+?)\}/g,function(a,b){return c[b]})}}}this.T=void 0!==a.version?a.version:"1.0.0";this.v=void 0!==a.format?a.format:"image/jpeg";this.c=void 0!==a.dimensions?a.dimensions:{};this.A=a.layer;this.j=a.matrixSet;this.P=a.style;var c=
a.urls;void 0===c&&void 0!==a.url&&(c=Il(a.url));var d=this.W=void 0!==a.requestEncoding?a.requestEncoding:"KVP",e=a.tileGrid,f={layer:this.A,style:this.P,tilematrixset:this.j};"KVP"==d&&Ca(f,{Service:"WMTS",Request:"GetTile",Version:this.T,Format:this.v});var g=this.c,h=c&&0<c.length?Gl(c.map(b)):Hl;X.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,crossOrigin:a.crossOrigin,logo:a.logo,projection:a.projection,reprojectionErrorThreshold:a.reprojectionErrorThreshold,tileClass:a.tileClass,
tileGrid:e,tileLoadFunction:a.tileLoadFunction,tilePixelRatio:a.tilePixelRatio,tileUrlFunction:h,urls:c,wrapX:void 0!==a.wrapX?a.wrapX:!1});uf(this,fw(this))}x(Z,X);k=Z.prototype;k.Vj=function(){return this.c};k.yn=function(){return this.v};k.zn=function(){return this.A};k.hk=function(){return this.j};k.vk=function(){return this.W};k.An=function(){return this.P};k.Ck=function(){return this.T};function fw(a){var b=0,c=[],d;for(d in a.c)c[b++]=d+"-"+a.c[d];return c.join("/")}
k.vp=function(a){Ca(this.c,a);uf(this,fw(this))};function gw(a){a=a||{};var b=a.size,c=b[0],d=b[1],e=[],f=256;switch(void 0!==a.tierSizeCalculation?a.tierSizeCalculation:"default"){case "default":for(;c>f||d>f;)e.push([Math.ceil(c/f),Math.ceil(d/f)]),f+=f;break;case "truncated":for(;c>f||d>f;)e.push([Math.ceil(c/f),Math.ceil(d/f)]),c>>=1,d>>=1}e.push([1,1]);e.reverse();for(var f=[1],g=[0],d=1,c=e.length;d<c;d++)f.push(1<<d),g.push(e[d-1][0]*e[d-1][1]+g[d-1]);f.reverse();var b=[0,-b[1],b[0],0],b=new df({extent:b,origin:fc(b),resolutions:f}),h=a.url;
X.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,crossOrigin:a.crossOrigin,logo:a.logo,reprojectionErrorThreshold:a.reprojectionErrorThreshold,tileClass:hw,tileGrid:b,tileUrlFunction:function(a){if(a){var b=a[0],c=a[1];a=-a[2]-1;return h+"TileGroup"+((c+a*e[b][0]+g[b])/256|0)+"/"+b+"-"+c+"-"+a+".jpg"}}})}x(gw,X);function hw(a,b,c,d,e){du.call(this,a,b,c,d,e);this.l={}}x(hw,du);
hw.prototype.$a=function(a){var b=void 0!==a?t(a).toString():"";if(b in this.l)return this.l[b];a=du.prototype.$a.call(this,a);if(2==this.state){if(256==a.width&&256==a.height)return this.l[b]=a;var c=Ge(256,256);c.drawImage(a,0,0);return this.l[b]=c.canvas}return a};function iw(a){a=a||{};this.a=void 0!==a.initialSize?a.initialSize:256;this.g=void 0!==a.maxSize?a.maxSize:void 0!==la?la:2048;this.b=void 0!==a.space?a.space:1;this.c=[new jw(this.a,this.b)];this.f=this.a;this.i=[new jw(this.f,this.b)]}iw.prototype.add=function(a,b,c,d,e,f){if(b+this.b>this.g||c+this.b>this.g)return null;d=kw(this,!1,a,b,c,d,f);if(!d)return null;a=kw(this,!0,a,b,c,void 0!==e?e:oa,f);return{offsetX:d.offsetX,offsetY:d.offsetY,image:d.image,Sg:a.image}};
function kw(a,b,c,d,e,f,g){var h=b?a.i:a.c,l,m,n;m=0;for(n=h.length;m<n;++m){l=h[m];if(l=l.add(c,d,e,f,g))return l;l||m!==n-1||(b?(l=Math.min(2*a.f,a.g),a.f=l):(l=Math.min(2*a.a,a.g),a.a=l),l=new jw(l,a.b),h.push(l),++n)}}function jw(a,b){this.b=b;this.a=[{x:0,y:0,width:a,height:a}];this.f={};this.g=Ge(a,a);this.c=this.g.canvas}jw.prototype.get=function(a){return this.f[a]||null};
jw.prototype.add=function(a,b,c,d,e){var f,g,h;g=0;for(h=this.a.length;g<h;++g)if(f=this.a[g],f.width>=b+this.b&&f.height>=c+this.b)return h={offsetX:f.x+this.b,offsetY:f.y+this.b,image:this.c},this.f[a]=h,d.call(e,this.g,f.x+this.b,f.y+this.b),a=g,b+=this.b,d=c+this.b,f.width-b>f.height-d?(c={x:f.x+b,y:f.y,width:f.width-b,height:f.height},b={x:f.x,y:f.y+d,width:b,height:f.height-d},lw(this,a,c,b)):(c={x:f.x+b,y:f.y,width:f.width-b,height:d},b={x:f.x,y:f.y+d,width:f.width,height:f.height-d},lw(this,
a,c,b)),h;return null};function lw(a,b,c,d){b=[b,1];0<c.width&&0<c.height&&b.push(c);0<d.width&&0<d.height&&b.push(d);a.a.splice.apply(a.a,b)};function mw(a){this.A=this.s=this.f=null;this.o=void 0!==a.fill?a.fill:null;this.ya=[0,0];this.b=a.points;this.g=void 0!==a.radius?a.radius:a.radius1;this.c=void 0!==a.radius2?a.radius2:this.g;this.l=void 0!==a.angle?a.angle:0;this.a=void 0!==a.stroke?a.stroke:null;this.S=this.Aa=this.C=null;var b=a.atlasManager,c="",d="",e=0,f=null,g,h=0;this.a&&(g=le(this.a.b),h=this.a.a,void 0===h&&(h=1),f=this.a.g,ag||(f=null),d=this.a.c,void 0===d&&(d="round"),c=this.a.f,void 0===c&&(c="round"),e=this.a.i,void 0===
e&&(e=10));var l=2*(this.g+h)+1,c={strokeStyle:g,Bd:h,size:l,lineCap:c,lineDash:f,lineJoin:d,miterLimit:e};if(void 0===b){var m=Ge(l,l);this.s=m.canvas;b=l=this.s.width;this.Ih(c,m,0,0);this.o?this.A=this.s:(m=Ge(c.size,c.size),this.A=m.canvas,this.Hh(c,m,0,0))}else l=Math.round(l),(d=!this.o)&&(m=this.Hh.bind(this,c)),e=this.a?qj(this.a):"-",f=this.o?kj(this.o):"-",this.f&&e==this.f[1]&&f==this.f[2]&&this.g==this.f[3]&&this.c==this.f[4]&&this.l==this.f[5]&&this.b==this.f[6]||(this.f=["r"+e+f+(void 0!==
this.g?this.g.toString():"-")+(void 0!==this.c?this.c.toString():"-")+(void 0!==this.l?this.l.toString():"-")+(void 0!==this.b?this.b.toString():"-"),e,f,this.g,this.c,this.l,this.b]),m=b.add(this.f[0],l,l,this.Ih.bind(this,c),m),this.s=m.image,this.ya=[m.offsetX,m.offsetY],b=m.image.width,this.A=d?m.Sg:this.s;this.C=[l/2,l/2];this.Aa=[l,l];this.S=[b,b];Eh.call(this,{opacity:1,rotateWithView:void 0!==a.rotateWithView?a.rotateWithView:!1,rotation:void 0!==a.rotation?a.rotation:0,scale:1,snapToPixel:void 0!==
a.snapToPixel?a.snapToPixel:!0})}x(mw,Eh);k=mw.prototype;k.Zb=function(){return this.C};k.Fn=function(){return this.l};k.Gn=function(){return this.o};k.pe=function(){return this.A};k.jc=function(){return this.s};k.ld=function(){return this.S};k.td=function(){return 2};k.Ia=function(){return this.ya};k.Hn=function(){return this.b};k.In=function(){return this.g};k.uk=function(){return this.c};k.Gb=function(){return this.Aa};k.Jn=function(){return this.a};k.pf=oa;k.load=oa;k.Xf=oa;
k.Ih=function(a,b,c,d){var e;b.setTransform(1,0,0,1,0,0);b.translate(c,d);b.beginPath();this.c!==this.g&&(this.b*=2);for(c=0;c<=this.b;c++)d=2*c*Math.PI/this.b-Math.PI/2+this.l,e=0===c%2?this.g:this.c,b.lineTo(a.size/2+e*Math.cos(d),a.size/2+e*Math.sin(d));this.o&&(b.fillStyle=ne(this.o.b),b.fill());this.a&&(b.strokeStyle=a.strokeStyle,b.lineWidth=a.Bd,a.lineDash&&b.setLineDash(a.lineDash),b.lineCap=a.lineCap,b.lineJoin=a.lineJoin,b.miterLimit=a.miterLimit,b.stroke());b.closePath()};
k.Hh=function(a,b,c,d){b.setTransform(1,0,0,1,0,0);b.translate(c,d);b.beginPath();this.c!==this.g&&(this.b*=2);var e;for(c=0;c<=this.b;c++)e=2*c*Math.PI/this.b-Math.PI/2+this.l,d=0===c%2?this.g:this.c,b.lineTo(a.size/2+d*Math.cos(e),a.size/2+d*Math.sin(e));b.fillStyle=fj;b.fill();this.a&&(b.strokeStyle=a.strokeStyle,b.lineWidth=a.Bd,a.lineDash&&b.setLineDash(a.lineDash),b.stroke());b.closePath()};u("ol.animation.bounce",function(a){var b=a.resolution,c=a.start?a.start:Date.now(),d=void 0!==a.duration?a.duration:1E3,e=a.easing?a.easing:Sd;return function(a,g){if(g.time<c)return g.animate=!0,g.viewHints[0]+=1,!0;if(g.time<c+d){var h=e((g.time-c)/d),l=b-g.viewState.resolution;g.animate=!0;g.viewState.resolution+=h*l;g.viewHints[0]+=1;return!0}return!1}});u("ol.animation.pan",Td);u("ol.animation.rotate",Ud);u("ol.animation.zoom",Vd);u("ol.Attribution",$d);$d.prototype.getHTML=$d.prototype.g;
ae.prototype.element=ae.prototype.element;u("ol.Collection",be);be.prototype.clear=be.prototype.clear;be.prototype.extend=be.prototype.qf;be.prototype.forEach=be.prototype.forEach;be.prototype.getArray=be.prototype.Gl;be.prototype.item=be.prototype.item;be.prototype.getLength=be.prototype.dc;be.prototype.insertAt=be.prototype.ee;be.prototype.pop=be.prototype.pop;be.prototype.push=be.prototype.push;be.prototype.remove=be.prototype.remove;be.prototype.removeAt=be.prototype.Rf;be.prototype.setAt=be.prototype.Zo;
u("ol.colorlike.asColorLike",ne);u("ol.coordinate.add",yb);u("ol.coordinate.createStringXY",function(a){return function(b){return Gb(b,a)}});u("ol.coordinate.format",Bb);u("ol.coordinate.rotate",Db);u("ol.coordinate.toStringHDMS",function(a,b){return a?Ab(a[1],"NS",b)+" "+Ab(a[0],"EW",b):""});u("ol.coordinate.toStringXY",Gb);u("ol.DeviceOrientation",qn);qn.prototype.getAlpha=qn.prototype.Oj;qn.prototype.getBeta=qn.prototype.Rj;qn.prototype.getGamma=qn.prototype.Yj;qn.prototype.getHeading=qn.prototype.Hl;
qn.prototype.getTracking=qn.prototype.$g;qn.prototype.setTracking=qn.prototype.rf;u("ol.easing.easeIn",Md);u("ol.easing.easeOut",Nd);u("ol.easing.inAndOut",Qd);u("ol.easing.linear",Rd);u("ol.easing.upAndDown",Sd);u("ol.extent.boundingExtent",Ib);u("ol.extent.buffer",Mb);u("ol.extent.containsCoordinate",Qb);u("ol.extent.containsExtent",Sb);u("ol.extent.containsXY",Rb);u("ol.extent.createEmpty",Jb);u("ol.extent.equals",$b);u("ol.extent.extend",ac);u("ol.extent.getBottomLeft",cc);
u("ol.extent.getBottomRight",dc);u("ol.extent.getCenter",lc);u("ol.extent.getHeight",kc);u("ol.extent.getIntersection",nc);u("ol.extent.getSize",function(a){return[a[2]-a[0],a[3]-a[1]]});u("ol.extent.getTopLeft",fc);u("ol.extent.getTopRight",ec);u("ol.extent.getWidth",jc);u("ol.extent.intersects",oc);u("ol.extent.isEmpty",ic);u("ol.extent.applyTransform",qc);u("ol.Feature",Ik);Ik.prototype.clone=Ik.prototype.clone;Ik.prototype.getGeometry=Ik.prototype.X;Ik.prototype.getId=Ik.prototype.Xa;
Ik.prototype.getGeometryName=Ik.prototype.$j;Ik.prototype.getStyle=Ik.prototype.Jl;Ik.prototype.getStyleFunction=Ik.prototype.ec;Ik.prototype.setGeometry=Ik.prototype.Ua;Ik.prototype.setStyle=Ik.prototype.sf;Ik.prototype.setId=Ik.prototype.mc;Ik.prototype.setGeometryName=Ik.prototype.Ec;u("ol.featureloader.tile",dl);u("ol.featureloader.xhr",el);u("ol.Geolocation",St);St.prototype.getAccuracy=St.prototype.Mj;St.prototype.getAccuracyGeometry=St.prototype.Nj;St.prototype.getAltitude=St.prototype.Pj;
St.prototype.getAltitudeAccuracy=St.prototype.Qj;St.prototype.getHeading=St.prototype.Ll;St.prototype.getPosition=St.prototype.Ml;St.prototype.getProjection=St.prototype.ah;St.prototype.getSpeed=St.prototype.wk;St.prototype.getTracking=St.prototype.bh;St.prototype.getTrackingOptions=St.prototype.Mg;St.prototype.setProjection=St.prototype.dh;St.prototype.setTracking=St.prototype.ge;St.prototype.setTrackingOptions=St.prototype.si;u("ol.Graticule",Yt);Yt.prototype.getMap=Yt.prototype.Pl;
Yt.prototype.getMeridians=Yt.prototype.ik;Yt.prototype.getParallels=Yt.prototype.qk;Yt.prototype.setMap=Yt.prototype.setMap;u("ol.has.DEVICE_PIXEL_RATIO",$f);u("ol.has.CANVAS",bg);u("ol.has.DEVICE_ORIENTATION",cg);u("ol.has.GEOLOCATION",dg);u("ol.has.TOUCH",eg);u("ol.has.WEBGL",Vf);cu.prototype.getImage=cu.prototype.a;cu.prototype.load=cu.prototype.load;du.prototype.getImage=du.prototype.$a;du.prototype.load=du.prototype.load;u("ol.Kinetic",Vh);u("ol.loadingstrategy.all",fl);
u("ol.loadingstrategy.bbox",function(a){return[a]});u("ol.loadingstrategy.tile",function(a){return function(b,c){var d=a.Lb(c),e=gf(a,b,d),f=[],d=[d,0,0];for(d[1]=e.ca;d[1]<=e.ea;++d[1])for(d[2]=e.fa;d[2]<=e.ga;++d[2])f.push(a.Ea(d));return f}});u("ol.Map",Q);Q.prototype.addControl=Q.prototype.uj;Q.prototype.addInteraction=Q.prototype.vj;Q.prototype.addLayer=Q.prototype.kg;Q.prototype.addOverlay=Q.prototype.lg;Q.prototype.beforeRender=Q.prototype.Wa;Q.prototype.forEachFeatureAtPixel=Q.prototype.kd;
Q.prototype.forEachLayerAtPixel=Q.prototype.Tl;Q.prototype.hasFeatureAtPixel=Q.prototype.kl;Q.prototype.getEventCoordinate=Q.prototype.Wj;Q.prototype.getEventPixel=Q.prototype.Td;Q.prototype.getTarget=Q.prototype.tf;Q.prototype.getTargetElement=Q.prototype.yc;Q.prototype.getCoordinateFromPixel=Q.prototype.Ma;Q.prototype.getControls=Q.prototype.Uj;Q.prototype.getOverlays=Q.prototype.nk;Q.prototype.getOverlayById=Q.prototype.mk;Q.prototype.getInteractions=Q.prototype.ak;Q.prototype.getLayerGroup=Q.prototype.xc;
Q.prototype.getLayers=Q.prototype.eh;Q.prototype.getPixelFromCoordinate=Q.prototype.Ga;Q.prototype.getSize=Q.prototype.Za;Q.prototype.getView=Q.prototype.aa;Q.prototype.getViewport=Q.prototype.Dk;Q.prototype.renderSync=Q.prototype.Vo;Q.prototype.render=Q.prototype.render;Q.prototype.removeControl=Q.prototype.Oo;Q.prototype.removeInteraction=Q.prototype.Po;Q.prototype.removeLayer=Q.prototype.Ro;Q.prototype.removeOverlay=Q.prototype.So;Q.prototype.setLayerGroup=Q.prototype.ji;Q.prototype.setSize=Q.prototype.Wf;
Q.prototype.setTarget=Q.prototype.fh;Q.prototype.setView=Q.prototype.kp;Q.prototype.updateSize=Q.prototype.Xc;Og.prototype.originalEvent=Og.prototype.originalEvent;Og.prototype.pixel=Og.prototype.pixel;Og.prototype.coordinate=Og.prototype.coordinate;Og.prototype.dragging=Og.prototype.dragging;Oe.prototype.map=Oe.prototype.map;Oe.prototype.frameState=Oe.prototype.frameState;ab.prototype.key=ab.prototype.key;ab.prototype.oldValue=ab.prototype.oldValue;u("ol.Object",bb);bb.prototype.get=bb.prototype.get;
bb.prototype.getKeys=bb.prototype.N;bb.prototype.getProperties=bb.prototype.O;bb.prototype.set=bb.prototype.set;bb.prototype.setProperties=bb.prototype.G;bb.prototype.unset=bb.prototype.R;u("ol.Observable",Za);u("ol.Observable.unByKey",$a);Za.prototype.changed=Za.prototype.u;Za.prototype.dispatchEvent=Za.prototype.b;Za.prototype.getRevision=Za.prototype.K;Za.prototype.on=Za.prototype.I;Za.prototype.once=Za.prototype.L;Za.prototype.un=Za.prototype.J;Za.prototype.unByKey=Za.prototype.M;
u("ol.inherits",x);u("ol.Overlay",Xm);Xm.prototype.getElement=Xm.prototype.Sd;Xm.prototype.getId=Xm.prototype.Xa;Xm.prototype.getMap=Xm.prototype.he;Xm.prototype.getOffset=Xm.prototype.Kg;Xm.prototype.getPosition=Xm.prototype.gh;Xm.prototype.getPositioning=Xm.prototype.Lg;Xm.prototype.setElement=Xm.prototype.fi;Xm.prototype.setMap=Xm.prototype.setMap;Xm.prototype.setOffset=Xm.prototype.li;Xm.prototype.setPosition=Xm.prototype.uf;Xm.prototype.setPositioning=Xm.prototype.oi;
u("ol.render.toContext",function(a,b){var c=a.canvas,d=b?b:{},e=d.pixelRatio||$f;if(d=d.size)c.width=d[0]*e,c.height=d[1]*e,c.style.width=d[0]+"px",c.style.height=d[1]+"px";c=[0,0,c.width,c.height];d=jh(ch(),e,e);return new zj(a,e,c,d,0)});u("ol.size.toSize",$e);We.prototype.getTileCoord=We.prototype.i;We.prototype.load=We.prototype.load;Kk.prototype.getFormat=Kk.prototype.Ul;Kk.prototype.setFeatures=Kk.prototype.gi;Kk.prototype.setProjection=Kk.prototype.vf;Kk.prototype.setLoader=Kk.prototype.ki;
u("ol.View",Fd);Fd.prototype.constrainCenter=Fd.prototype.Pd;Fd.prototype.constrainResolution=Fd.prototype.constrainResolution;Fd.prototype.constrainRotation=Fd.prototype.constrainRotation;Fd.prototype.getCenter=Fd.prototype.ab;Fd.prototype.calculateExtent=Fd.prototype.Kc;Fd.prototype.getMaxResolution=Fd.prototype.Vl;Fd.prototype.getMinResolution=Fd.prototype.Wl;Fd.prototype.getProjection=Fd.prototype.Xl;Fd.prototype.getResolution=Fd.prototype.$;Fd.prototype.getResolutions=Fd.prototype.Yl;
Fd.prototype.getRotation=Fd.prototype.La;Fd.prototype.getZoom=Fd.prototype.Fk;Fd.prototype.fit=Fd.prototype.cf;Fd.prototype.centerOn=Fd.prototype.Ej;Fd.prototype.rotate=Fd.prototype.rotate;Fd.prototype.setCenter=Fd.prototype.nb;Fd.prototype.setResolution=Fd.prototype.Vb;Fd.prototype.setRotation=Fd.prototype.ie;Fd.prototype.setZoom=Fd.prototype.np;u("ol.xml.getAllTextContent",Nk);u("ol.xml.parse",Rk);gm.prototype.getGL=gm.prototype.$n;gm.prototype.useProgram=gm.prototype.we;
u("ol.tilegrid.TileGrid",df);df.prototype.forEachTileCoord=df.prototype.yg;df.prototype.getMaxZoom=df.prototype.Ig;df.prototype.getMinZoom=df.prototype.Jg;df.prototype.getOrigin=df.prototype.Ia;df.prototype.getResolution=df.prototype.$;df.prototype.getResolutions=df.prototype.Kh;df.prototype.getTileCoordExtent=df.prototype.Ea;df.prototype.getTileCoordForCoordAndResolution=df.prototype.Zd;df.prototype.getTileCoordForCoordAndZ=df.prototype.qd;df.prototype.getTileSize=df.prototype.Ja;
df.prototype.getZForResolution=df.prototype.Lb;u("ol.tilegrid.createXYZ",qf);u("ol.tilegrid.WMTS",dw);dw.prototype.getMatrixIds=dw.prototype.j;u("ol.tilegrid.WMTS.createFromCapabilitiesMatrixSet",ew);u("ol.style.AtlasManager",iw);u("ol.style.Circle",rj);rj.prototype.getFill=rj.prototype.Bn;rj.prototype.getImage=rj.prototype.jc;rj.prototype.getRadius=rj.prototype.Cn;rj.prototype.getStroke=rj.prototype.Dn;u("ol.style.Fill",jj);jj.prototype.getColor=jj.prototype.g;jj.prototype.setColor=jj.prototype.f;
u("ol.style.Icon",Fh);Fh.prototype.getAnchor=Fh.prototype.Zb;Fh.prototype.getImage=Fh.prototype.jc;Fh.prototype.getOrigin=Fh.prototype.Ia;Fh.prototype.getSrc=Fh.prototype.En;Fh.prototype.getSize=Fh.prototype.Gb;Fh.prototype.load=Fh.prototype.load;u("ol.style.Image",Eh);Eh.prototype.getOpacity=Eh.prototype.qe;Eh.prototype.getRotateWithView=Eh.prototype.Xd;Eh.prototype.getRotation=Eh.prototype.re;Eh.prototype.getScale=Eh.prototype.se;Eh.prototype.getSnapToPixel=Eh.prototype.Yd;
Eh.prototype.setOpacity=Eh.prototype.te;Eh.prototype.setRotation=Eh.prototype.ue;Eh.prototype.setScale=Eh.prototype.ve;u("ol.style.RegularShape",mw);mw.prototype.getAnchor=mw.prototype.Zb;mw.prototype.getAngle=mw.prototype.Fn;mw.prototype.getFill=mw.prototype.Gn;mw.prototype.getImage=mw.prototype.jc;mw.prototype.getOrigin=mw.prototype.Ia;mw.prototype.getPoints=mw.prototype.Hn;mw.prototype.getRadius=mw.prototype.In;mw.prototype.getRadius2=mw.prototype.uk;mw.prototype.getSize=mw.prototype.Gb;
mw.prototype.getStroke=mw.prototype.Jn;u("ol.style.Stroke",pj);pj.prototype.getColor=pj.prototype.Kn;pj.prototype.getLineCap=pj.prototype.dk;pj.prototype.getLineDash=pj.prototype.Ln;pj.prototype.getLineJoin=pj.prototype.ek;pj.prototype.getMiterLimit=pj.prototype.jk;pj.prototype.getWidth=pj.prototype.Mn;pj.prototype.setColor=pj.prototype.Nn;pj.prototype.setLineCap=pj.prototype.fp;pj.prototype.setLineDash=pj.prototype.On;pj.prototype.setLineJoin=pj.prototype.gp;pj.prototype.setMiterLimit=pj.prototype.hp;
pj.prototype.setWidth=pj.prototype.lp;u("ol.style.Style",sj);sj.prototype.getGeometry=sj.prototype.X;sj.prototype.getGeometryFunction=sj.prototype.Zj;sj.prototype.getFill=sj.prototype.Pn;sj.prototype.getImage=sj.prototype.Qn;sj.prototype.getStroke=sj.prototype.Rn;sj.prototype.getText=sj.prototype.Ha;sj.prototype.getZIndex=sj.prototype.Sn;sj.prototype.setGeometry=sj.prototype.Jh;sj.prototype.setZIndex=sj.prototype.Tn;u("ol.style.Text",Fp);Fp.prototype.getFont=Fp.prototype.Xj;
Fp.prototype.getOffsetX=Fp.prototype.kk;Fp.prototype.getOffsetY=Fp.prototype.lk;Fp.prototype.getFill=Fp.prototype.Un;Fp.prototype.getRotation=Fp.prototype.Vn;Fp.prototype.getScale=Fp.prototype.Wn;Fp.prototype.getStroke=Fp.prototype.Xn;Fp.prototype.getText=Fp.prototype.Ha;Fp.prototype.getTextAlign=Fp.prototype.yk;Fp.prototype.getTextBaseline=Fp.prototype.zk;Fp.prototype.setFont=Fp.prototype.bp;Fp.prototype.setOffsetX=Fp.prototype.mi;Fp.prototype.setOffsetY=Fp.prototype.ni;Fp.prototype.setFill=Fp.prototype.ap;
Fp.prototype.setRotation=Fp.prototype.Yn;Fp.prototype.setScale=Fp.prototype.Zn;Fp.prototype.setStroke=Fp.prototype.ip;Fp.prototype.setText=Fp.prototype.pi;Fp.prototype.setTextAlign=Fp.prototype.ri;Fp.prototype.setTextBaseline=Fp.prototype.jp;u("ol.Sphere",tc);tc.prototype.geodesicArea=tc.prototype.a;tc.prototype.haversineDistance=tc.prototype.b;u("ol.source.BingMaps",nv);u("ol.source.BingMaps.TOS_ATTRIBUTION",ov);u("ol.source.CartoDB",qv);qv.prototype.getConfig=qv.prototype.Tj;
qv.prototype.updateConfig=qv.prototype.up;qv.prototype.setConfig=qv.prototype.$o;u("ol.source.Cluster",Y);Y.prototype.getSource=Y.prototype.Sa;u("ol.source.ImageArcGISRest",wv);wv.prototype.getParams=wv.prototype.Sm;wv.prototype.getImageLoadFunction=wv.prototype.Rm;wv.prototype.getUrl=wv.prototype.Tm;wv.prototype.setImageLoadFunction=wv.prototype.Um;wv.prototype.setUrl=wv.prototype.Vm;wv.prototype.updateParams=wv.prototype.Wm;u("ol.source.ImageCanvas",Hk);u("ol.source.ImageMapGuide",xv);
xv.prototype.getParams=xv.prototype.Ym;xv.prototype.getImageLoadFunction=xv.prototype.Xm;xv.prototype.updateParams=xv.prototype.$m;xv.prototype.setImageLoadFunction=xv.prototype.Zm;u("ol.source.Image",Ak);Ck.prototype.image=Ck.prototype.image;u("ol.source.ImageStatic",yv);u("ol.source.ImageVector",yl);yl.prototype.getSource=yl.prototype.an;yl.prototype.getStyle=yl.prototype.bn;yl.prototype.getStyleFunction=yl.prototype.cn;yl.prototype.setStyle=yl.prototype.xh;u("ol.source.ImageWMS",zv);
zv.prototype.getGetFeatureInfoUrl=zv.prototype.fn;zv.prototype.getParams=zv.prototype.hn;zv.prototype.getImageLoadFunction=zv.prototype.gn;zv.prototype.getUrl=zv.prototype.jn;zv.prototype.setImageLoadFunction=zv.prototype.kn;zv.prototype.setUrl=zv.prototype.ln;zv.prototype.updateParams=zv.prototype.mn;u("ol.source.OSM",Dv);u("ol.source.OSM.ATTRIBUTION",Ev);u("ol.source.Raster",Fv);Fv.prototype.setOperation=Fv.prototype.v;Kv.prototype.extent=Kv.prototype.extent;Kv.prototype.resolution=Kv.prototype.resolution;
Kv.prototype.data=Kv.prototype.data;u("ol.source.Source",af);af.prototype.getAttributions=af.prototype.wa;af.prototype.getLogo=af.prototype.ua;af.prototype.getProjection=af.prototype.xa;af.prototype.getState=af.prototype.V;af.prototype.refresh=af.prototype.ta;af.prototype.setAttributions=af.prototype.qa;u("ol.source.Stamen",Pv);u("ol.source.TileArcGISRest",Rv);Rv.prototype.getParams=Rv.prototype.v;Rv.prototype.updateParams=Rv.prototype.A;u("ol.source.TileDebug",Tv);u("ol.source.TileImage",X);
X.prototype.setRenderReprojectionEdges=X.prototype.Ab;X.prototype.setTileGridForProjection=X.prototype.Bb;u("ol.source.TileJSON",Uv);Uv.prototype.getTileJSON=Uv.prototype.Ak;u("ol.source.Tile",rf);rf.prototype.getTileGrid=rf.prototype.Na;wf.prototype.tile=wf.prototype.tile;u("ol.source.TileUTFGrid",Vv);Vv.prototype.getTemplate=Vv.prototype.xk;Vv.prototype.forDataAtCoordinateAndResolution=Vv.prototype.Ij;u("ol.source.TileWMS",Zv);Zv.prototype.getGetFeatureInfoUrl=Zv.prototype.vn;
Zv.prototype.getParams=Zv.prototype.wn;Zv.prototype.updateParams=Zv.prototype.xn;Jl.prototype.getTileLoadFunction=Jl.prototype.gb;Jl.prototype.getTileUrlFunction=Jl.prototype.hb;Jl.prototype.getUrls=Jl.prototype.ib;Jl.prototype.setTileLoadFunction=Jl.prototype.lb;Jl.prototype.setTileUrlFunction=Jl.prototype.Qa;Jl.prototype.setUrl=Jl.prototype.Va;Jl.prototype.setUrls=Jl.prototype.bb;u("ol.source.Vector",P);P.prototype.addFeature=P.prototype.sb;P.prototype.addFeatures=P.prototype.Jc;
P.prototype.clear=P.prototype.clear;P.prototype.forEachFeature=P.prototype.wg;P.prototype.forEachFeatureInExtent=P.prototype.vb;P.prototype.forEachFeatureIntersectingExtent=P.prototype.xg;P.prototype.getFeaturesCollection=P.prototype.Fg;P.prototype.getFeatures=P.prototype.oe;P.prototype.getFeaturesAtCoordinate=P.prototype.Eg;P.prototype.getFeaturesInExtent=P.prototype.ef;P.prototype.getClosestFeatureToCoordinate=P.prototype.Ag;P.prototype.getExtent=P.prototype.H;P.prototype.getFeatureById=P.prototype.Dg;
P.prototype.getFormat=P.prototype.Ch;P.prototype.getUrl=P.prototype.Dh;P.prototype.removeFeature=P.prototype.ob;vl.prototype.feature=vl.prototype.feature;u("ol.source.VectorTile",Kl);u("ol.source.WMTS",Z);Z.prototype.getDimensions=Z.prototype.Vj;Z.prototype.getFormat=Z.prototype.yn;Z.prototype.getLayer=Z.prototype.zn;Z.prototype.getMatrixSet=Z.prototype.hk;Z.prototype.getRequestEncoding=Z.prototype.vk;Z.prototype.getStyle=Z.prototype.An;Z.prototype.getVersion=Z.prototype.Ck;
Z.prototype.updateDimensions=Z.prototype.vp;
u("ol.source.WMTS.optionsFromCapabilities",function(a,b){var c=lb(a.Contents.Layer,function(a){return a.Identifier==b.layer}),d=a.Contents.TileMatrixSet,e,f;e=1<c.TileMatrixSetLink.length?"projection"in b?pb(c.TileMatrixSetLink,function(a){return lb(d,function(b){return b.Identifier==a.TileMatrixSet}).SupportedCRS.replace(/urn:ogc:def:crs:(\w+):(.*:)?(\w+)$/,"$1:$3")==b.projection}):pb(c.TileMatrixSetLink,function(a){return a.TileMatrixSet==b.matrixSet}):0;0>e&&(e=0);f=c.TileMatrixSetLink[e].TileMatrixSet;
var g=c.Format[0];"format"in b&&(g=b.format);e=pb(c.Style,function(a){return"style"in b?a.Title==b.style:a.isDefault});0>e&&(e=0);e=c.Style[e].Identifier;var h={};"Dimension"in c&&c.Dimension.forEach(function(a){var b=a.Identifier,c=a.Default;void 0===c&&(c=a.Value[0]);h[b]=c});var l=lb(a.Contents.TileMatrixSet,function(a){return a.Identifier==f}),m;m="projection"in b?zc(b.projection):zc(l.SupportedCRS.replace(/urn:ogc:def:crs:(\w+):(.*:)?(\w+)$/,"$1:$3"));var n=c.WGS84BoundingBox,p,q;void 0!==n&&
(q=zc("EPSG:4326").H(),q=n[0]==q[0]&&n[2]==q[2],p=Tc(n,"EPSG:4326",m),(n=m.H())&&(Sb(n,p)||(p=void 0)));var l=ew(l,p),r=[];p=b.requestEncoding;p=void 0!==p?p:"";if("OperationsMetadata"in a&&"GetTile"in a.OperationsMetadata)for(var n=a.OperationsMetadata.GetTile.DCP.HTTP.Get,v=0,y=n.length;v<y;++v){var w=lb(n[v].Constraint,function(a){return"GetEncoding"==a.name}).AllowedValues.Value;""===p&&(p=w[0]);if("KVP"===p)gb(w,"KVP")&&r.push(n[v].href);else break}0===r.length&&(p="REST",c.ResourceURL.forEach(function(a){"tile"===
a.resourceType&&(g=a.format,r.push(a.template))}));return{urls:r,layer:b.layer,matrixSet:f,format:g,projection:m,requestEncoding:p,tileGrid:l,style:e,dimensions:h,wrapX:q}});u("ol.source.XYZ",pv);u("ol.source.Zoomify",gw);qh.prototype.vectorContext=qh.prototype.vectorContext;qh.prototype.frameState=qh.prototype.frameState;qh.prototype.context=qh.prototype.context;qh.prototype.glContext=qh.prototype.glContext;ik.prototype.get=ik.prototype.get;ik.prototype.getExtent=ik.prototype.H;
ik.prototype.getGeometry=ik.prototype.X;ik.prototype.getProperties=ik.prototype.Nm;ik.prototype.getType=ik.prototype.Y;u("ol.render.VectorContext",ph);Cm.prototype.setStyle=Cm.prototype.sd;Cm.prototype.drawGeometry=Cm.prototype.sc;Cm.prototype.drawFeature=Cm.prototype.Ye;zj.prototype.drawCircle=zj.prototype.Rd;zj.prototype.setStyle=zj.prototype.sd;zj.prototype.drawGeometry=zj.prototype.sc;zj.prototype.drawFeature=zj.prototype.Ye;u("ol.proj.common.add",dj);u("ol.proj.METERS_PER_UNIT",vc);
u("ol.proj.Projection",wc);wc.prototype.getCode=wc.prototype.Sj;wc.prototype.getExtent=wc.prototype.H;wc.prototype.getUnits=wc.prototype.xb;wc.prototype.getMetersPerUnit=wc.prototype.ac;wc.prototype.getWorldExtent=wc.prototype.Ek;wc.prototype.isGlobal=wc.prototype.pl;wc.prototype.setGlobal=wc.prototype.ep;wc.prototype.setExtent=wc.prototype.Mm;wc.prototype.setWorldExtent=wc.prototype.mp;wc.prototype.setGetPointResolution=wc.prototype.cp;wc.prototype.getPointResolution=wc.prototype.getPointResolution;
u("ol.proj.setProj4",function(a){yc=a});u("ol.proj.addEquivalentProjections",Ac);u("ol.proj.addProjection",Mc);u("ol.proj.addCoordinateTransforms",Bc);u("ol.proj.fromLonLat",function(a,b){return Sc(a,"EPSG:4326",void 0!==b?b:"EPSG:3857")});u("ol.proj.toLonLat",function(a,b){return Sc(a,void 0!==b?b:"EPSG:3857","EPSG:4326")});u("ol.proj.get",zc);u("ol.proj.equivalent",Pc);u("ol.proj.getTransform",Qc);u("ol.proj.transform",Sc);u("ol.proj.transformExtent",Tc);u("ol.layer.Heatmap",W);
W.prototype.getBlur=W.prototype.zg;W.prototype.getGradient=W.prototype.Gg;W.prototype.getRadius=W.prototype.ph;W.prototype.setBlur=W.prototype.di;W.prototype.setGradient=W.prototype.ii;W.prototype.setRadius=W.prototype.qh;u("ol.layer.Image",ej);ej.prototype.getSource=ej.prototype.ha;u("ol.layer.Layer",rh);rh.prototype.getSource=rh.prototype.ha;rh.prototype.setMap=rh.prototype.setMap;rh.prototype.setSource=rh.prototype.Fc;u("ol.layer.Base",nh);nh.prototype.getExtent=nh.prototype.H;
nh.prototype.getMaxResolution=nh.prototype.Ob;nh.prototype.getMinResolution=nh.prototype.Pb;nh.prototype.getOpacity=nh.prototype.Qb;nh.prototype.getVisible=nh.prototype.yb;nh.prototype.getZIndex=nh.prototype.Rb;nh.prototype.setExtent=nh.prototype.fc;nh.prototype.setMaxResolution=nh.prototype.nc;nh.prototype.setMinResolution=nh.prototype.oc;nh.prototype.setOpacity=nh.prototype.gc;nh.prototype.setVisible=nh.prototype.hc;nh.prototype.setZIndex=nh.prototype.ic;u("ol.layer.Group",Vi);
Vi.prototype.getLayers=Vi.prototype.Tc;Vi.prototype.setLayers=Vi.prototype.oh;u("ol.layer.Tile",F);F.prototype.getPreload=F.prototype.f;F.prototype.getSource=F.prototype.ha;F.prototype.setPreload=F.prototype.l;F.prototype.getUseInterimTilesOnError=F.prototype.c;F.prototype.setUseInterimTilesOnError=F.prototype.A;u("ol.layer.Vector",I);I.prototype.getSource=I.prototype.ha;I.prototype.getStyle=I.prototype.D;I.prototype.getStyleFunction=I.prototype.C;I.prototype.setStyle=I.prototype.l;
u("ol.layer.VectorTile",J);J.prototype.getPreload=J.prototype.f;J.prototype.getUseInterimTilesOnError=J.prototype.c;J.prototype.setPreload=J.prototype.W;J.prototype.setUseInterimTilesOnError=J.prototype.ia;u("ol.interaction.DoubleClickZoom",ai);u("ol.interaction.DoubleClickZoom.handleEvent",bi);u("ol.interaction.DragAndDrop",fu);u("ol.interaction.DragAndDrop.handleEvent",rc);iu.prototype.features=iu.prototype.features;iu.prototype.file=iu.prototype.file;iu.prototype.projection=iu.prototype.projection;
zi.prototype.coordinate=zi.prototype.coordinate;zi.prototype.mapBrowserEvent=zi.prototype.mapBrowserEvent;u("ol.interaction.DragBox",Ai);Ai.prototype.getGeometry=Ai.prototype.X;u("ol.interaction.DragPan",oi);u("ol.interaction.DragRotateAndZoom",ku);u("ol.interaction.DragRotate",si);u("ol.interaction.DragZoom",Fi);ou.prototype.feature=ou.prototype.feature;u("ol.interaction.Draw",pu);u("ol.interaction.Draw.handleEvent",ru);pu.prototype.removeLastPoint=pu.prototype.Qo;pu.prototype.finishDrawing=pu.prototype.jd;
pu.prototype.extend=pu.prototype.rm;u("ol.interaction.Draw.createRegularPolygon",function(a,b){return function(c,d){var e=c[0],f=c[1],g=Math.sqrt(Eb(e,f)),h=d?d:Dd(new Tt(e),a);Ed(h,e,g,b?b:Math.atan((f[1]-e[1])/(f[0]-e[0])));return h}});u("ol.interaction.Interaction",Xh);Xh.prototype.getActive=Xh.prototype.f;Xh.prototype.getMap=Xh.prototype.l;Xh.prototype.setActive=Xh.prototype.i;u("ol.interaction.defaults",Ui);u("ol.interaction.KeyboardPan",Gi);u("ol.interaction.KeyboardPan.handleEvent",Hi);
u("ol.interaction.KeyboardZoom",Ii);u("ol.interaction.KeyboardZoom.handleEvent",Ji);Fu.prototype.features=Fu.prototype.features;Fu.prototype.mapBrowserEvent=Fu.prototype.mapBrowserEvent;u("ol.interaction.Modify",Gu);u("ol.interaction.Modify.handleEvent",Ju);Gu.prototype.removePoint=Gu.prototype.ai;u("ol.interaction.MouseWheelZoom",Ki);u("ol.interaction.MouseWheelZoom.handleEvent",Li);Ki.prototype.setMouseAnchor=Ki.prototype.C;u("ol.interaction.PinchRotate",Mi);u("ol.interaction.PinchZoom",Qi);
u("ol.interaction.Pointer",li);u("ol.interaction.Pointer.handleEvent",mi);Tu.prototype.selected=Tu.prototype.selected;Tu.prototype.deselected=Tu.prototype.deselected;Tu.prototype.mapBrowserEvent=Tu.prototype.mapBrowserEvent;u("ol.interaction.Select",Uu);Uu.prototype.getFeatures=Uu.prototype.Bm;Uu.prototype.getLayer=Uu.prototype.Cm;u("ol.interaction.Select.handleEvent",Vu);Uu.prototype.setMap=Uu.prototype.setMap;u("ol.interaction.Snap",Xu);Xu.prototype.addFeature=Xu.prototype.sb;
Xu.prototype.removeFeature=Xu.prototype.ob;av.prototype.features=av.prototype.features;av.prototype.coordinate=av.prototype.coordinate;u("ol.interaction.Translate",bv);u("ol.geom.Circle",Tt);Tt.prototype.clone=Tt.prototype.clone;Tt.prototype.getCenter=Tt.prototype.rd;Tt.prototype.getRadius=Tt.prototype.wf;Tt.prototype.getType=Tt.prototype.Y;Tt.prototype.intersectsExtent=Tt.prototype.Ka;Tt.prototype.setCenter=Tt.prototype.jm;Tt.prototype.setCenterAndRadius=Tt.prototype.Vf;Tt.prototype.setRadius=Tt.prototype.km;
Tt.prototype.transform=Tt.prototype.kb;u("ol.geom.Geometry",Uc);Uc.prototype.getClosestPoint=Uc.prototype.wb;Uc.prototype.getExtent=Uc.prototype.H;Uc.prototype.rotate=Uc.prototype.rotate;Uc.prototype.simplify=Uc.prototype.Cb;Uc.prototype.transform=Uc.prototype.kb;u("ol.geom.GeometryCollection",Kn);Kn.prototype.clone=Kn.prototype.clone;Kn.prototype.getGeometries=Kn.prototype.ff;Kn.prototype.getType=Kn.prototype.Y;Kn.prototype.intersectsExtent=Kn.prototype.Ka;Kn.prototype.setGeometries=Kn.prototype.hi;
Kn.prototype.applyTransform=Kn.prototype.rc;Kn.prototype.translate=Kn.prototype.Sc;u("ol.geom.LinearRing",nd);nd.prototype.clone=nd.prototype.clone;nd.prototype.getArea=nd.prototype.nm;nd.prototype.getCoordinates=nd.prototype.Z;nd.prototype.getType=nd.prototype.Y;nd.prototype.setCoordinates=nd.prototype.ra;u("ol.geom.LineString",R);R.prototype.appendCoordinate=R.prototype.wj;R.prototype.clone=R.prototype.clone;R.prototype.forEachSegment=R.prototype.Lj;R.prototype.getCoordinateAtM=R.prototype.lm;
R.prototype.getCoordinates=R.prototype.Z;R.prototype.getCoordinateAt=R.prototype.Bg;R.prototype.getLength=R.prototype.mm;R.prototype.getType=R.prototype.Y;R.prototype.intersectsExtent=R.prototype.Ka;R.prototype.setCoordinates=R.prototype.ra;u("ol.geom.MultiLineString",S);S.prototype.appendLineString=S.prototype.xj;S.prototype.clone=S.prototype.clone;S.prototype.getCoordinateAtM=S.prototype.om;S.prototype.getCoordinates=S.prototype.Z;S.prototype.getLineString=S.prototype.fk;
S.prototype.getLineStrings=S.prototype.md;S.prototype.getType=S.prototype.Y;S.prototype.intersectsExtent=S.prototype.Ka;S.prototype.setCoordinates=S.prototype.ra;u("ol.geom.MultiPoint",T);T.prototype.appendPoint=T.prototype.zj;T.prototype.clone=T.prototype.clone;T.prototype.getCoordinates=T.prototype.Z;T.prototype.getPoint=T.prototype.rk;T.prototype.getPoints=T.prototype.je;T.prototype.getType=T.prototype.Y;T.prototype.intersectsExtent=T.prototype.Ka;T.prototype.setCoordinates=T.prototype.ra;
u("ol.geom.MultiPolygon",U);U.prototype.appendPolygon=U.prototype.Aj;U.prototype.clone=U.prototype.clone;U.prototype.getArea=U.prototype.pm;U.prototype.getCoordinates=U.prototype.Z;U.prototype.getInteriorPoints=U.prototype.ck;U.prototype.getPolygon=U.prototype.tk;U.prototype.getPolygons=U.prototype.Wd;U.prototype.getType=U.prototype.Y;U.prototype.intersectsExtent=U.prototype.Ka;U.prototype.setCoordinates=U.prototype.ra;u("ol.geom.Point",C);C.prototype.clone=C.prototype.clone;
C.prototype.getCoordinates=C.prototype.Z;C.prototype.getType=C.prototype.Y;C.prototype.intersectsExtent=C.prototype.Ka;C.prototype.setCoordinates=C.prototype.ra;u("ol.geom.Polygon",E);E.prototype.appendLinearRing=E.prototype.yj;E.prototype.clone=E.prototype.clone;E.prototype.getArea=E.prototype.qm;E.prototype.getCoordinates=E.prototype.Z;E.prototype.getInteriorPoint=E.prototype.bk;E.prototype.getLinearRingCount=E.prototype.gk;E.prototype.getLinearRing=E.prototype.Hg;E.prototype.getLinearRings=E.prototype.Vd;
E.prototype.getType=E.prototype.Y;E.prototype.intersectsExtent=E.prototype.Ka;E.prototype.setCoordinates=E.prototype.ra;u("ol.geom.Polygon.circular",Bd);u("ol.geom.Polygon.fromExtent",Cd);u("ol.geom.Polygon.fromCircle",Dd);u("ol.geom.SimpleGeometry",Wc);Wc.prototype.getFirstCoordinate=Wc.prototype.Ib;Wc.prototype.getLastCoordinate=Wc.prototype.Jb;Wc.prototype.getLayout=Wc.prototype.Kb;Wc.prototype.applyTransform=Wc.prototype.rc;Wc.prototype.translate=Wc.prototype.Sc;u("ol.format.EsriJSON",Dn);
Dn.prototype.readFeature=Dn.prototype.Sb;Dn.prototype.readFeatures=Dn.prototype.Fa;Dn.prototype.readGeometry=Dn.prototype.Vc;Dn.prototype.readProjection=Dn.prototype.Oa;Dn.prototype.writeGeometry=Dn.prototype.Zc;Dn.prototype.writeGeometryObject=Dn.prototype.Ke;Dn.prototype.writeFeature=Dn.prototype.Dd;Dn.prototype.writeFeatureObject=Dn.prototype.Yc;Dn.prototype.writeFeatures=Dn.prototype.Yb;Dn.prototype.writeFeaturesObject=Dn.prototype.Ie;u("ol.format.Feature",rn);u("ol.format.GeoJSON",On);
On.prototype.readFeature=On.prototype.Sb;On.prototype.readFeatures=On.prototype.Fa;On.prototype.readGeometry=On.prototype.Vc;On.prototype.readProjection=On.prototype.Oa;On.prototype.writeFeature=On.prototype.Dd;On.prototype.writeFeatureObject=On.prototype.Yc;On.prototype.writeFeatures=On.prototype.Yb;On.prototype.writeFeaturesObject=On.prototype.Ie;On.prototype.writeGeometry=On.prototype.Zc;On.prototype.writeGeometryObject=On.prototype.Ke;u("ol.format.GPX",to);to.prototype.readFeature=to.prototype.Sb;
to.prototype.readFeatures=to.prototype.Fa;to.prototype.readProjection=to.prototype.Oa;to.prototype.writeFeatures=to.prototype.Yb;to.prototype.writeFeaturesNode=to.prototype.a;u("ol.format.IGC",cp);cp.prototype.readFeature=cp.prototype.Sb;cp.prototype.readFeatures=cp.prototype.Fa;cp.prototype.readProjection=cp.prototype.Oa;u("ol.format.KML",Gp);Gp.prototype.readFeature=Gp.prototype.Sb;Gp.prototype.readFeatures=Gp.prototype.Fa;Gp.prototype.readName=Gp.prototype.Fo;Gp.prototype.readNetworkLinks=Gp.prototype.Go;
Gp.prototype.readProjection=Gp.prototype.Oa;Gp.prototype.writeFeatures=Gp.prototype.Yb;Gp.prototype.writeFeaturesNode=Gp.prototype.a;u("ol.format.MVT",vr);vr.prototype.readFeatures=vr.prototype.Fa;vr.prototype.readProjection=vr.prototype.Oa;vr.prototype.setLayers=vr.prototype.c;u("ol.format.OSMXML",Rr);Rr.prototype.readFeatures=Rr.prototype.Fa;Rr.prototype.readProjection=Rr.prototype.Oa;u("ol.format.Polyline",ps);u("ol.format.Polyline.encodeDeltas",qs);u("ol.format.Polyline.decodeDeltas",ss);
u("ol.format.Polyline.encodeFloats",rs);u("ol.format.Polyline.decodeFloats",ts);ps.prototype.readFeature=ps.prototype.Sb;ps.prototype.readFeatures=ps.prototype.Fa;ps.prototype.readGeometry=ps.prototype.Vc;ps.prototype.readProjection=ps.prototype.Oa;ps.prototype.writeGeometry=ps.prototype.Zc;u("ol.format.TopoJSON",us);us.prototype.readFeatures=us.prototype.Fa;us.prototype.readProjection=us.prototype.Oa;u("ol.format.WFS",As);As.prototype.readFeatures=As.prototype.Fa;
As.prototype.readTransactionResponse=As.prototype.o;As.prototype.readFeatureCollectionMetadata=As.prototype.l;As.prototype.writeGetFeature=As.prototype.j;As.prototype.writeTransaction=As.prototype.U;As.prototype.readProjection=As.prototype.Oa;u("ol.format.WKT",Rs);Rs.prototype.readFeature=Rs.prototype.Sb;Rs.prototype.readFeatures=Rs.prototype.Fa;Rs.prototype.readGeometry=Rs.prototype.Vc;Rs.prototype.writeFeature=Rs.prototype.Dd;Rs.prototype.writeFeatures=Rs.prototype.Yb;
Rs.prototype.writeGeometry=Rs.prototype.Zc;u("ol.format.WMSCapabilities",ht);ht.prototype.read=ht.prototype.read;u("ol.format.WMSGetFeatureInfo",Et);Et.prototype.readFeatures=Et.prototype.Fa;u("ol.format.WMTSCapabilities",Ft);Ft.prototype.read=Ft.prototype.read;u("ol.format.ogc.filter.and",xr);u("ol.format.ogc.filter.or",function(a,b){return new Er(a,b)});u("ol.format.ogc.filter.not",function(a){return new Fr(a)});u("ol.format.ogc.filter.bbox",zr);
u("ol.format.ogc.filter.equalTo",function(a,b,c){return new Ir(a,b,c)});u("ol.format.ogc.filter.notEqualTo",function(a,b,c){return new Jr(a,b,c)});u("ol.format.ogc.filter.lessThan",function(a,b){return new Kr(a,b)});u("ol.format.ogc.filter.lessThanOrEqualTo",function(a,b){return new Lr(a,b)});u("ol.format.ogc.filter.greaterThan",function(a,b){return new Mr(a,b)});u("ol.format.ogc.filter.greaterThanOrEqualTo",function(a,b){return new Nr(a,b)});u("ol.format.ogc.filter.isNull",function(a){return new Or(a)});
u("ol.format.ogc.filter.between",function(a,b,c){return new Pr(a,b,c)});u("ol.format.ogc.filter.like",function(a,b,c,d,e,f){return new Qr(a,b,c,d,e,f)});u("ol.format.ogc.filter.Filter",Br);u("ol.format.ogc.filter.And",yr);u("ol.format.ogc.filter.Or",Er);u("ol.format.ogc.filter.Not",Fr);u("ol.format.ogc.filter.Bbox",Ar);u("ol.format.ogc.filter.Comparison",Gr);u("ol.format.ogc.filter.ComparisonBinary",Hr);u("ol.format.ogc.filter.EqualTo",Ir);u("ol.format.ogc.filter.NotEqualTo",Jr);
u("ol.format.ogc.filter.LessThan",Kr);u("ol.format.ogc.filter.LessThanOrEqualTo",Lr);u("ol.format.ogc.filter.GreaterThan",Mr);u("ol.format.ogc.filter.GreaterThanOrEqualTo",Nr);u("ol.format.ogc.filter.IsNull",Or);u("ol.format.ogc.filter.IsBetween",Pr);u("ol.format.ogc.filter.IsLike",Qr);u("ol.format.GML2",jo);u("ol.format.GML3",ko);ko.prototype.writeGeometryNode=ko.prototype.s;ko.prototype.writeFeatures=ko.prototype.Yb;ko.prototype.writeFeaturesNode=ko.prototype.a;u("ol.format.GML",ko);
ko.prototype.writeFeatures=ko.prototype.Yb;ko.prototype.writeFeaturesNode=ko.prototype.a;Wn.prototype.readFeatures=Wn.prototype.Fa;u("ol.events.condition.altKeyOnly",function(a){a=a.originalEvent;return a.altKey&&!(a.metaKey||a.ctrlKey)&&!a.shiftKey});u("ol.events.condition.altShiftKeysOnly",ci);u("ol.events.condition.always",rc);u("ol.events.condition.click",function(a){return a.type==Sg});u("ol.events.condition.never",sc);u("ol.events.condition.pointerMove",ei);
u("ol.events.condition.singleClick",fi);u("ol.events.condition.doubleClick",function(a){return a.type==Tg});u("ol.events.condition.noModifierKeys",gi);u("ol.events.condition.platformModifierKeyOnly",function(a){a=a.originalEvent;return!a.altKey&&(Zf?a.metaKey:a.ctrlKey)&&!a.shiftKey});u("ol.events.condition.shiftKeyOnly",hi);u("ol.events.condition.targetNotEditable",ii);u("ol.events.condition.mouseOnly",ji);u("ol.events.condition.primaryAction",ki);Ua.prototype.type=Ua.prototype.type;
Ua.prototype.target=Ua.prototype.target;Ua.prototype.preventDefault=Ua.prototype.preventDefault;Ua.prototype.stopPropagation=Ua.prototype.stopPropagation;u("ol.control.Attribution",xf);u("ol.control.Attribution.render",yf);xf.prototype.getCollapsible=xf.prototype.$l;xf.prototype.setCollapsible=xf.prototype.cm;xf.prototype.setCollapsed=xf.prototype.bm;xf.prototype.getCollapsed=xf.prototype.Zl;u("ol.control.Control",Pe);Pe.prototype.getMap=Pe.prototype.i;Pe.prototype.setMap=Pe.prototype.setMap;
Pe.prototype.setTarget=Pe.prototype.c;u("ol.control.defaults",Df);u("ol.control.FullScreen",Ef);u("ol.control.MousePosition",Jf);u("ol.control.MousePosition.render",Kf);Jf.prototype.getCoordinateFormat=Jf.prototype.Cg;Jf.prototype.getProjection=Jf.prototype.hh;Jf.prototype.setCoordinateFormat=Jf.prototype.ei;Jf.prototype.setProjection=Jf.prototype.ih;u("ol.control.OverviewMap",an);u("ol.control.OverviewMap.render",bn);an.prototype.getCollapsible=an.prototype.fm;an.prototype.setCollapsible=an.prototype.im;
an.prototype.setCollapsed=an.prototype.hm;an.prototype.getCollapsed=an.prototype.em;an.prototype.getOverviewMap=an.prototype.pk;u("ol.control.Rotate",Af);u("ol.control.Rotate.render",Bf);u("ol.control.ScaleLine",fn);fn.prototype.getUnits=fn.prototype.xb;u("ol.control.ScaleLine.render",gn);fn.prototype.setUnits=fn.prototype.C;u("ol.control.Zoom",Cf);u("ol.control.ZoomSlider",kn);u("ol.control.ZoomSlider.render",mn);u("ol.control.ZoomToExtent",pn);u("ol.color.asArray",je);u("ol.color.asString",le);
ae.prototype.type=ae.prototype.type;ae.prototype.target=ae.prototype.target;ae.prototype.preventDefault=ae.prototype.preventDefault;ae.prototype.stopPropagation=ae.prototype.stopPropagation;bb.prototype.changed=bb.prototype.u;bb.prototype.dispatchEvent=bb.prototype.b;bb.prototype.getRevision=bb.prototype.K;bb.prototype.on=bb.prototype.I;bb.prototype.once=bb.prototype.L;bb.prototype.un=bb.prototype.J;bb.prototype.unByKey=bb.prototype.M;be.prototype.get=be.prototype.get;be.prototype.getKeys=be.prototype.N;
be.prototype.getProperties=be.prototype.O;be.prototype.set=be.prototype.set;be.prototype.setProperties=be.prototype.G;be.prototype.unset=be.prototype.R;be.prototype.changed=be.prototype.u;be.prototype.dispatchEvent=be.prototype.b;be.prototype.getRevision=be.prototype.K;be.prototype.on=be.prototype.I;be.prototype.once=be.prototype.L;be.prototype.un=be.prototype.J;be.prototype.unByKey=be.prototype.M;qn.prototype.get=qn.prototype.get;qn.prototype.getKeys=qn.prototype.N;qn.prototype.getProperties=qn.prototype.O;
qn.prototype.set=qn.prototype.set;qn.prototype.setProperties=qn.prototype.G;qn.prototype.unset=qn.prototype.R;qn.prototype.changed=qn.prototype.u;qn.prototype.dispatchEvent=qn.prototype.b;qn.prototype.getRevision=qn.prototype.K;qn.prototype.on=qn.prototype.I;qn.prototype.once=qn.prototype.L;qn.prototype.un=qn.prototype.J;qn.prototype.unByKey=qn.prototype.M;Ik.prototype.get=Ik.prototype.get;Ik.prototype.getKeys=Ik.prototype.N;Ik.prototype.getProperties=Ik.prototype.O;Ik.prototype.set=Ik.prototype.set;
Ik.prototype.setProperties=Ik.prototype.G;Ik.prototype.unset=Ik.prototype.R;Ik.prototype.changed=Ik.prototype.u;Ik.prototype.dispatchEvent=Ik.prototype.b;Ik.prototype.getRevision=Ik.prototype.K;Ik.prototype.on=Ik.prototype.I;Ik.prototype.once=Ik.prototype.L;Ik.prototype.un=Ik.prototype.J;Ik.prototype.unByKey=Ik.prototype.M;St.prototype.get=St.prototype.get;St.prototype.getKeys=St.prototype.N;St.prototype.getProperties=St.prototype.O;St.prototype.set=St.prototype.set;St.prototype.setProperties=St.prototype.G;
St.prototype.unset=St.prototype.R;St.prototype.changed=St.prototype.u;St.prototype.dispatchEvent=St.prototype.b;St.prototype.getRevision=St.prototype.K;St.prototype.on=St.prototype.I;St.prototype.once=St.prototype.L;St.prototype.un=St.prototype.J;St.prototype.unByKey=St.prototype.M;du.prototype.getTileCoord=du.prototype.i;Q.prototype.get=Q.prototype.get;Q.prototype.getKeys=Q.prototype.N;Q.prototype.getProperties=Q.prototype.O;Q.prototype.set=Q.prototype.set;Q.prototype.setProperties=Q.prototype.G;
Q.prototype.unset=Q.prototype.R;Q.prototype.changed=Q.prototype.u;Q.prototype.dispatchEvent=Q.prototype.b;Q.prototype.getRevision=Q.prototype.K;Q.prototype.on=Q.prototype.I;Q.prototype.once=Q.prototype.L;Q.prototype.un=Q.prototype.J;Q.prototype.unByKey=Q.prototype.M;Oe.prototype.type=Oe.prototype.type;Oe.prototype.target=Oe.prototype.target;Oe.prototype.preventDefault=Oe.prototype.preventDefault;Oe.prototype.stopPropagation=Oe.prototype.stopPropagation;Og.prototype.map=Og.prototype.map;
Og.prototype.frameState=Og.prototype.frameState;Og.prototype.type=Og.prototype.type;Og.prototype.target=Og.prototype.target;Og.prototype.preventDefault=Og.prototype.preventDefault;Og.prototype.stopPropagation=Og.prototype.stopPropagation;Pg.prototype.originalEvent=Pg.prototype.originalEvent;Pg.prototype.pixel=Pg.prototype.pixel;Pg.prototype.coordinate=Pg.prototype.coordinate;Pg.prototype.dragging=Pg.prototype.dragging;Pg.prototype.preventDefault=Pg.prototype.preventDefault;
Pg.prototype.stopPropagation=Pg.prototype.stopPropagation;Pg.prototype.map=Pg.prototype.map;Pg.prototype.frameState=Pg.prototype.frameState;Pg.prototype.type=Pg.prototype.type;Pg.prototype.target=Pg.prototype.target;ab.prototype.type=ab.prototype.type;ab.prototype.target=ab.prototype.target;ab.prototype.preventDefault=ab.prototype.preventDefault;ab.prototype.stopPropagation=ab.prototype.stopPropagation;Xm.prototype.get=Xm.prototype.get;Xm.prototype.getKeys=Xm.prototype.N;
Xm.prototype.getProperties=Xm.prototype.O;Xm.prototype.set=Xm.prototype.set;Xm.prototype.setProperties=Xm.prototype.G;Xm.prototype.unset=Xm.prototype.R;Xm.prototype.changed=Xm.prototype.u;Xm.prototype.dispatchEvent=Xm.prototype.b;Xm.prototype.getRevision=Xm.prototype.K;Xm.prototype.on=Xm.prototype.I;Xm.prototype.once=Xm.prototype.L;Xm.prototype.un=Xm.prototype.J;Xm.prototype.unByKey=Xm.prototype.M;Kk.prototype.getTileCoord=Kk.prototype.i;Fd.prototype.get=Fd.prototype.get;Fd.prototype.getKeys=Fd.prototype.N;
Fd.prototype.getProperties=Fd.prototype.O;Fd.prototype.set=Fd.prototype.set;Fd.prototype.setProperties=Fd.prototype.G;Fd.prototype.unset=Fd.prototype.R;Fd.prototype.changed=Fd.prototype.u;Fd.prototype.dispatchEvent=Fd.prototype.b;Fd.prototype.getRevision=Fd.prototype.K;Fd.prototype.on=Fd.prototype.I;Fd.prototype.once=Fd.prototype.L;Fd.prototype.un=Fd.prototype.J;Fd.prototype.unByKey=Fd.prototype.M;dw.prototype.forEachTileCoord=dw.prototype.yg;dw.prototype.getMaxZoom=dw.prototype.Ig;
dw.prototype.getMinZoom=dw.prototype.Jg;dw.prototype.getOrigin=dw.prototype.Ia;dw.prototype.getResolution=dw.prototype.$;dw.prototype.getResolutions=dw.prototype.Kh;dw.prototype.getTileCoordExtent=dw.prototype.Ea;dw.prototype.getTileCoordForCoordAndResolution=dw.prototype.Zd;dw.prototype.getTileCoordForCoordAndZ=dw.prototype.qd;dw.prototype.getTileSize=dw.prototype.Ja;dw.prototype.getZForResolution=dw.prototype.Lb;rj.prototype.getOpacity=rj.prototype.qe;rj.prototype.getRotateWithView=rj.prototype.Xd;
rj.prototype.getRotation=rj.prototype.re;rj.prototype.getScale=rj.prototype.se;rj.prototype.getSnapToPixel=rj.prototype.Yd;rj.prototype.setOpacity=rj.prototype.te;rj.prototype.setRotation=rj.prototype.ue;rj.prototype.setScale=rj.prototype.ve;Fh.prototype.getOpacity=Fh.prototype.qe;Fh.prototype.getRotateWithView=Fh.prototype.Xd;Fh.prototype.getRotation=Fh.prototype.re;Fh.prototype.getScale=Fh.prototype.se;Fh.prototype.getSnapToPixel=Fh.prototype.Yd;Fh.prototype.setOpacity=Fh.prototype.te;
Fh.prototype.setRotation=Fh.prototype.ue;Fh.prototype.setScale=Fh.prototype.ve;mw.prototype.getOpacity=mw.prototype.qe;mw.prototype.getRotateWithView=mw.prototype.Xd;mw.prototype.getRotation=mw.prototype.re;mw.prototype.getScale=mw.prototype.se;mw.prototype.getSnapToPixel=mw.prototype.Yd;mw.prototype.setOpacity=mw.prototype.te;mw.prototype.setRotation=mw.prototype.ue;mw.prototype.setScale=mw.prototype.ve;af.prototype.get=af.prototype.get;af.prototype.getKeys=af.prototype.N;
af.prototype.getProperties=af.prototype.O;af.prototype.set=af.prototype.set;af.prototype.setProperties=af.prototype.G;af.prototype.unset=af.prototype.R;af.prototype.changed=af.prototype.u;af.prototype.dispatchEvent=af.prototype.b;af.prototype.getRevision=af.prototype.K;af.prototype.on=af.prototype.I;af.prototype.once=af.prototype.L;af.prototype.un=af.prototype.J;af.prototype.unByKey=af.prototype.M;rf.prototype.getAttributions=rf.prototype.wa;rf.prototype.getLogo=rf.prototype.ua;
rf.prototype.getProjection=rf.prototype.xa;rf.prototype.getState=rf.prototype.V;rf.prototype.refresh=rf.prototype.ta;rf.prototype.setAttributions=rf.prototype.qa;rf.prototype.get=rf.prototype.get;rf.prototype.getKeys=rf.prototype.N;rf.prototype.getProperties=rf.prototype.O;rf.prototype.set=rf.prototype.set;rf.prototype.setProperties=rf.prototype.G;rf.prototype.unset=rf.prototype.R;rf.prototype.changed=rf.prototype.u;rf.prototype.dispatchEvent=rf.prototype.b;rf.prototype.getRevision=rf.prototype.K;
rf.prototype.on=rf.prototype.I;rf.prototype.once=rf.prototype.L;rf.prototype.un=rf.prototype.J;rf.prototype.unByKey=rf.prototype.M;Jl.prototype.getTileGrid=Jl.prototype.Na;Jl.prototype.refresh=Jl.prototype.ta;Jl.prototype.getAttributions=Jl.prototype.wa;Jl.prototype.getLogo=Jl.prototype.ua;Jl.prototype.getProjection=Jl.prototype.xa;Jl.prototype.getState=Jl.prototype.V;Jl.prototype.setAttributions=Jl.prototype.qa;Jl.prototype.get=Jl.prototype.get;Jl.prototype.getKeys=Jl.prototype.N;
Jl.prototype.getProperties=Jl.prototype.O;Jl.prototype.set=Jl.prototype.set;Jl.prototype.setProperties=Jl.prototype.G;Jl.prototype.unset=Jl.prototype.R;Jl.prototype.changed=Jl.prototype.u;Jl.prototype.dispatchEvent=Jl.prototype.b;Jl.prototype.getRevision=Jl.prototype.K;Jl.prototype.on=Jl.prototype.I;Jl.prototype.once=Jl.prototype.L;Jl.prototype.un=Jl.prototype.J;Jl.prototype.unByKey=Jl.prototype.M;X.prototype.getTileLoadFunction=X.prototype.gb;X.prototype.getTileUrlFunction=X.prototype.hb;
X.prototype.getUrls=X.prototype.ib;X.prototype.setTileLoadFunction=X.prototype.lb;X.prototype.setTileUrlFunction=X.prototype.Qa;X.prototype.setUrl=X.prototype.Va;X.prototype.setUrls=X.prototype.bb;X.prototype.getTileGrid=X.prototype.Na;X.prototype.refresh=X.prototype.ta;X.prototype.getAttributions=X.prototype.wa;X.prototype.getLogo=X.prototype.ua;X.prototype.getProjection=X.prototype.xa;X.prototype.getState=X.prototype.V;X.prototype.setAttributions=X.prototype.qa;X.prototype.get=X.prototype.get;
X.prototype.getKeys=X.prototype.N;X.prototype.getProperties=X.prototype.O;X.prototype.set=X.prototype.set;X.prototype.setProperties=X.prototype.G;X.prototype.unset=X.prototype.R;X.prototype.changed=X.prototype.u;X.prototype.dispatchEvent=X.prototype.b;X.prototype.getRevision=X.prototype.K;X.prototype.on=X.prototype.I;X.prototype.once=X.prototype.L;X.prototype.un=X.prototype.J;X.prototype.unByKey=X.prototype.M;nv.prototype.setRenderReprojectionEdges=nv.prototype.Ab;
nv.prototype.setTileGridForProjection=nv.prototype.Bb;nv.prototype.getTileLoadFunction=nv.prototype.gb;nv.prototype.getTileUrlFunction=nv.prototype.hb;nv.prototype.getUrls=nv.prototype.ib;nv.prototype.setTileLoadFunction=nv.prototype.lb;nv.prototype.setTileUrlFunction=nv.prototype.Qa;nv.prototype.setUrl=nv.prototype.Va;nv.prototype.setUrls=nv.prototype.bb;nv.prototype.getTileGrid=nv.prototype.Na;nv.prototype.refresh=nv.prototype.ta;nv.prototype.getAttributions=nv.prototype.wa;
nv.prototype.getLogo=nv.prototype.ua;nv.prototype.getProjection=nv.prototype.xa;nv.prototype.getState=nv.prototype.V;nv.prototype.setAttributions=nv.prototype.qa;nv.prototype.get=nv.prototype.get;nv.prototype.getKeys=nv.prototype.N;nv.prototype.getProperties=nv.prototype.O;nv.prototype.set=nv.prototype.set;nv.prototype.setProperties=nv.prototype.G;nv.prototype.unset=nv.prototype.R;nv.prototype.changed=nv.prototype.u;nv.prototype.dispatchEvent=nv.prototype.b;nv.prototype.getRevision=nv.prototype.K;
nv.prototype.on=nv.prototype.I;nv.prototype.once=nv.prototype.L;nv.prototype.un=nv.prototype.J;nv.prototype.unByKey=nv.prototype.M;pv.prototype.setRenderReprojectionEdges=pv.prototype.Ab;pv.prototype.setTileGridForProjection=pv.prototype.Bb;pv.prototype.getTileLoadFunction=pv.prototype.gb;pv.prototype.getTileUrlFunction=pv.prototype.hb;pv.prototype.getUrls=pv.prototype.ib;pv.prototype.setTileLoadFunction=pv.prototype.lb;pv.prototype.setTileUrlFunction=pv.prototype.Qa;pv.prototype.setUrl=pv.prototype.Va;
pv.prototype.setUrls=pv.prototype.bb;pv.prototype.getTileGrid=pv.prototype.Na;pv.prototype.refresh=pv.prototype.ta;pv.prototype.getAttributions=pv.prototype.wa;pv.prototype.getLogo=pv.prototype.ua;pv.prototype.getProjection=pv.prototype.xa;pv.prototype.getState=pv.prototype.V;pv.prototype.setAttributions=pv.prototype.qa;pv.prototype.get=pv.prototype.get;pv.prototype.getKeys=pv.prototype.N;pv.prototype.getProperties=pv.prototype.O;pv.prototype.set=pv.prototype.set;pv.prototype.setProperties=pv.prototype.G;
pv.prototype.unset=pv.prototype.R;pv.prototype.changed=pv.prototype.u;pv.prototype.dispatchEvent=pv.prototype.b;pv.prototype.getRevision=pv.prototype.K;pv.prototype.on=pv.prototype.I;pv.prototype.once=pv.prototype.L;pv.prototype.un=pv.prototype.J;pv.prototype.unByKey=pv.prototype.M;qv.prototype.setRenderReprojectionEdges=qv.prototype.Ab;qv.prototype.setTileGridForProjection=qv.prototype.Bb;qv.prototype.getTileLoadFunction=qv.prototype.gb;qv.prototype.getTileUrlFunction=qv.prototype.hb;
qv.prototype.getUrls=qv.prototype.ib;qv.prototype.setTileLoadFunction=qv.prototype.lb;qv.prototype.setTileUrlFunction=qv.prototype.Qa;qv.prototype.setUrl=qv.prototype.Va;qv.prototype.setUrls=qv.prototype.bb;qv.prototype.getTileGrid=qv.prototype.Na;qv.prototype.refresh=qv.prototype.ta;qv.prototype.getAttributions=qv.prototype.wa;qv.prototype.getLogo=qv.prototype.ua;qv.prototype.getProjection=qv.prototype.xa;qv.prototype.getState=qv.prototype.V;qv.prototype.setAttributions=qv.prototype.qa;
qv.prototype.get=qv.prototype.get;qv.prototype.getKeys=qv.prototype.N;qv.prototype.getProperties=qv.prototype.O;qv.prototype.set=qv.prototype.set;qv.prototype.setProperties=qv.prototype.G;qv.prototype.unset=qv.prototype.R;qv.prototype.changed=qv.prototype.u;qv.prototype.dispatchEvent=qv.prototype.b;qv.prototype.getRevision=qv.prototype.K;qv.prototype.on=qv.prototype.I;qv.prototype.once=qv.prototype.L;qv.prototype.un=qv.prototype.J;qv.prototype.unByKey=qv.prototype.M;P.prototype.getAttributions=P.prototype.wa;
P.prototype.getLogo=P.prototype.ua;P.prototype.getProjection=P.prototype.xa;P.prototype.getState=P.prototype.V;P.prototype.refresh=P.prototype.ta;P.prototype.setAttributions=P.prototype.qa;P.prototype.get=P.prototype.get;P.prototype.getKeys=P.prototype.N;P.prototype.getProperties=P.prototype.O;P.prototype.set=P.prototype.set;P.prototype.setProperties=P.prototype.G;P.prototype.unset=P.prototype.R;P.prototype.changed=P.prototype.u;P.prototype.dispatchEvent=P.prototype.b;P.prototype.getRevision=P.prototype.K;
P.prototype.on=P.prototype.I;P.prototype.once=P.prototype.L;P.prototype.un=P.prototype.J;P.prototype.unByKey=P.prototype.M;Y.prototype.addFeature=Y.prototype.sb;Y.prototype.addFeatures=Y.prototype.Jc;Y.prototype.clear=Y.prototype.clear;Y.prototype.forEachFeature=Y.prototype.wg;Y.prototype.forEachFeatureInExtent=Y.prototype.vb;Y.prototype.forEachFeatureIntersectingExtent=Y.prototype.xg;Y.prototype.getFeaturesCollection=Y.prototype.Fg;Y.prototype.getFeatures=Y.prototype.oe;
Y.prototype.getFeaturesAtCoordinate=Y.prototype.Eg;Y.prototype.getFeaturesInExtent=Y.prototype.ef;Y.prototype.getClosestFeatureToCoordinate=Y.prototype.Ag;Y.prototype.getExtent=Y.prototype.H;Y.prototype.getFeatureById=Y.prototype.Dg;Y.prototype.getFormat=Y.prototype.Ch;Y.prototype.getUrl=Y.prototype.Dh;Y.prototype.removeFeature=Y.prototype.ob;Y.prototype.getAttributions=Y.prototype.wa;Y.prototype.getLogo=Y.prototype.ua;Y.prototype.getProjection=Y.prototype.xa;Y.prototype.getState=Y.prototype.V;
Y.prototype.refresh=Y.prototype.ta;Y.prototype.setAttributions=Y.prototype.qa;Y.prototype.get=Y.prototype.get;Y.prototype.getKeys=Y.prototype.N;Y.prototype.getProperties=Y.prototype.O;Y.prototype.set=Y.prototype.set;Y.prototype.setProperties=Y.prototype.G;Y.prototype.unset=Y.prototype.R;Y.prototype.changed=Y.prototype.u;Y.prototype.dispatchEvent=Y.prototype.b;Y.prototype.getRevision=Y.prototype.K;Y.prototype.on=Y.prototype.I;Y.prototype.once=Y.prototype.L;Y.prototype.un=Y.prototype.J;
Y.prototype.unByKey=Y.prototype.M;Ak.prototype.getAttributions=Ak.prototype.wa;Ak.prototype.getLogo=Ak.prototype.ua;Ak.prototype.getProjection=Ak.prototype.xa;Ak.prototype.getState=Ak.prototype.V;Ak.prototype.refresh=Ak.prototype.ta;Ak.prototype.setAttributions=Ak.prototype.qa;Ak.prototype.get=Ak.prototype.get;Ak.prototype.getKeys=Ak.prototype.N;Ak.prototype.getProperties=Ak.prototype.O;Ak.prototype.set=Ak.prototype.set;Ak.prototype.setProperties=Ak.prototype.G;Ak.prototype.unset=Ak.prototype.R;
Ak.prototype.changed=Ak.prototype.u;Ak.prototype.dispatchEvent=Ak.prototype.b;Ak.prototype.getRevision=Ak.prototype.K;Ak.prototype.on=Ak.prototype.I;Ak.prototype.once=Ak.prototype.L;Ak.prototype.un=Ak.prototype.J;Ak.prototype.unByKey=Ak.prototype.M;wv.prototype.getAttributions=wv.prototype.wa;wv.prototype.getLogo=wv.prototype.ua;wv.prototype.getProjection=wv.prototype.xa;wv.prototype.getState=wv.prototype.V;wv.prototype.refresh=wv.prototype.ta;wv.prototype.setAttributions=wv.prototype.qa;
wv.prototype.get=wv.prototype.get;wv.prototype.getKeys=wv.prototype.N;wv.prototype.getProperties=wv.prototype.O;wv.prototype.set=wv.prototype.set;wv.prototype.setProperties=wv.prototype.G;wv.prototype.unset=wv.prototype.R;wv.prototype.changed=wv.prototype.u;wv.prototype.dispatchEvent=wv.prototype.b;wv.prototype.getRevision=wv.prototype.K;wv.prototype.on=wv.prototype.I;wv.prototype.once=wv.prototype.L;wv.prototype.un=wv.prototype.J;wv.prototype.unByKey=wv.prototype.M;Hk.prototype.getAttributions=Hk.prototype.wa;
Hk.prototype.getLogo=Hk.prototype.ua;Hk.prototype.getProjection=Hk.prototype.xa;Hk.prototype.getState=Hk.prototype.V;Hk.prototype.refresh=Hk.prototype.ta;Hk.prototype.setAttributions=Hk.prototype.qa;Hk.prototype.get=Hk.prototype.get;Hk.prototype.getKeys=Hk.prototype.N;Hk.prototype.getProperties=Hk.prototype.O;Hk.prototype.set=Hk.prototype.set;Hk.prototype.setProperties=Hk.prototype.G;Hk.prototype.unset=Hk.prototype.R;Hk.prototype.changed=Hk.prototype.u;Hk.prototype.dispatchEvent=Hk.prototype.b;
Hk.prototype.getRevision=Hk.prototype.K;Hk.prototype.on=Hk.prototype.I;Hk.prototype.once=Hk.prototype.L;Hk.prototype.un=Hk.prototype.J;Hk.prototype.unByKey=Hk.prototype.M;xv.prototype.getAttributions=xv.prototype.wa;xv.prototype.getLogo=xv.prototype.ua;xv.prototype.getProjection=xv.prototype.xa;xv.prototype.getState=xv.prototype.V;xv.prototype.refresh=xv.prototype.ta;xv.prototype.setAttributions=xv.prototype.qa;xv.prototype.get=xv.prototype.get;xv.prototype.getKeys=xv.prototype.N;
xv.prototype.getProperties=xv.prototype.O;xv.prototype.set=xv.prototype.set;xv.prototype.setProperties=xv.prototype.G;xv.prototype.unset=xv.prototype.R;xv.prototype.changed=xv.prototype.u;xv.prototype.dispatchEvent=xv.prototype.b;xv.prototype.getRevision=xv.prototype.K;xv.prototype.on=xv.prototype.I;xv.prototype.once=xv.prototype.L;xv.prototype.un=xv.prototype.J;xv.prototype.unByKey=xv.prototype.M;Ck.prototype.type=Ck.prototype.type;Ck.prototype.target=Ck.prototype.target;
Ck.prototype.preventDefault=Ck.prototype.preventDefault;Ck.prototype.stopPropagation=Ck.prototype.stopPropagation;yv.prototype.getAttributions=yv.prototype.wa;yv.prototype.getLogo=yv.prototype.ua;yv.prototype.getProjection=yv.prototype.xa;yv.prototype.getState=yv.prototype.V;yv.prototype.refresh=yv.prototype.ta;yv.prototype.setAttributions=yv.prototype.qa;yv.prototype.get=yv.prototype.get;yv.prototype.getKeys=yv.prototype.N;yv.prototype.getProperties=yv.prototype.O;yv.prototype.set=yv.prototype.set;
yv.prototype.setProperties=yv.prototype.G;yv.prototype.unset=yv.prototype.R;yv.prototype.changed=yv.prototype.u;yv.prototype.dispatchEvent=yv.prototype.b;yv.prototype.getRevision=yv.prototype.K;yv.prototype.on=yv.prototype.I;yv.prototype.once=yv.prototype.L;yv.prototype.un=yv.prototype.J;yv.prototype.unByKey=yv.prototype.M;yl.prototype.getAttributions=yl.prototype.wa;yl.prototype.getLogo=yl.prototype.ua;yl.prototype.getProjection=yl.prototype.xa;yl.prototype.getState=yl.prototype.V;
yl.prototype.refresh=yl.prototype.ta;yl.prototype.setAttributions=yl.prototype.qa;yl.prototype.get=yl.prototype.get;yl.prototype.getKeys=yl.prototype.N;yl.prototype.getProperties=yl.prototype.O;yl.prototype.set=yl.prototype.set;yl.prototype.setProperties=yl.prototype.G;yl.prototype.unset=yl.prototype.R;yl.prototype.changed=yl.prototype.u;yl.prototype.dispatchEvent=yl.prototype.b;yl.prototype.getRevision=yl.prototype.K;yl.prototype.on=yl.prototype.I;yl.prototype.once=yl.prototype.L;
yl.prototype.un=yl.prototype.J;yl.prototype.unByKey=yl.prototype.M;zv.prototype.getAttributions=zv.prototype.wa;zv.prototype.getLogo=zv.prototype.ua;zv.prototype.getProjection=zv.prototype.xa;zv.prototype.getState=zv.prototype.V;zv.prototype.refresh=zv.prototype.ta;zv.prototype.setAttributions=zv.prototype.qa;zv.prototype.get=zv.prototype.get;zv.prototype.getKeys=zv.prototype.N;zv.prototype.getProperties=zv.prototype.O;zv.prototype.set=zv.prototype.set;zv.prototype.setProperties=zv.prototype.G;
zv.prototype.unset=zv.prototype.R;zv.prototype.changed=zv.prototype.u;zv.prototype.dispatchEvent=zv.prototype.b;zv.prototype.getRevision=zv.prototype.K;zv.prototype.on=zv.prototype.I;zv.prototype.once=zv.prototype.L;zv.prototype.un=zv.prototype.J;zv.prototype.unByKey=zv.prototype.M;Dv.prototype.setRenderReprojectionEdges=Dv.prototype.Ab;Dv.prototype.setTileGridForProjection=Dv.prototype.Bb;Dv.prototype.getTileLoadFunction=Dv.prototype.gb;Dv.prototype.getTileUrlFunction=Dv.prototype.hb;
Dv.prototype.getUrls=Dv.prototype.ib;Dv.prototype.setTileLoadFunction=Dv.prototype.lb;Dv.prototype.setTileUrlFunction=Dv.prototype.Qa;Dv.prototype.setUrl=Dv.prototype.Va;Dv.prototype.setUrls=Dv.prototype.bb;Dv.prototype.getTileGrid=Dv.prototype.Na;Dv.prototype.refresh=Dv.prototype.ta;Dv.prototype.getAttributions=Dv.prototype.wa;Dv.prototype.getLogo=Dv.prototype.ua;Dv.prototype.getProjection=Dv.prototype.xa;Dv.prototype.getState=Dv.prototype.V;Dv.prototype.setAttributions=Dv.prototype.qa;
Dv.prototype.get=Dv.prototype.get;Dv.prototype.getKeys=Dv.prototype.N;Dv.prototype.getProperties=Dv.prototype.O;Dv.prototype.set=Dv.prototype.set;Dv.prototype.setProperties=Dv.prototype.G;Dv.prototype.unset=Dv.prototype.R;Dv.prototype.changed=Dv.prototype.u;Dv.prototype.dispatchEvent=Dv.prototype.b;Dv.prototype.getRevision=Dv.prototype.K;Dv.prototype.on=Dv.prototype.I;Dv.prototype.once=Dv.prototype.L;Dv.prototype.un=Dv.prototype.J;Dv.prototype.unByKey=Dv.prototype.M;Fv.prototype.getAttributions=Fv.prototype.wa;
Fv.prototype.getLogo=Fv.prototype.ua;Fv.prototype.getProjection=Fv.prototype.xa;Fv.prototype.getState=Fv.prototype.V;Fv.prototype.refresh=Fv.prototype.ta;Fv.prototype.setAttributions=Fv.prototype.qa;Fv.prototype.get=Fv.prototype.get;Fv.prototype.getKeys=Fv.prototype.N;Fv.prototype.getProperties=Fv.prototype.O;Fv.prototype.set=Fv.prototype.set;Fv.prototype.setProperties=Fv.prototype.G;Fv.prototype.unset=Fv.prototype.R;Fv.prototype.changed=Fv.prototype.u;Fv.prototype.dispatchEvent=Fv.prototype.b;
Fv.prototype.getRevision=Fv.prototype.K;Fv.prototype.on=Fv.prototype.I;Fv.prototype.once=Fv.prototype.L;Fv.prototype.un=Fv.prototype.J;Fv.prototype.unByKey=Fv.prototype.M;Kv.prototype.type=Kv.prototype.type;Kv.prototype.target=Kv.prototype.target;Kv.prototype.preventDefault=Kv.prototype.preventDefault;Kv.prototype.stopPropagation=Kv.prototype.stopPropagation;Pv.prototype.setRenderReprojectionEdges=Pv.prototype.Ab;Pv.prototype.setTileGridForProjection=Pv.prototype.Bb;
Pv.prototype.getTileLoadFunction=Pv.prototype.gb;Pv.prototype.getTileUrlFunction=Pv.prototype.hb;Pv.prototype.getUrls=Pv.prototype.ib;Pv.prototype.setTileLoadFunction=Pv.prototype.lb;Pv.prototype.setTileUrlFunction=Pv.prototype.Qa;Pv.prototype.setUrl=Pv.prototype.Va;Pv.prototype.setUrls=Pv.prototype.bb;Pv.prototype.getTileGrid=Pv.prototype.Na;Pv.prototype.refresh=Pv.prototype.ta;Pv.prototype.getAttributions=Pv.prototype.wa;Pv.prototype.getLogo=Pv.prototype.ua;Pv.prototype.getProjection=Pv.prototype.xa;
Pv.prototype.getState=Pv.prototype.V;Pv.prototype.setAttributions=Pv.prototype.qa;Pv.prototype.get=Pv.prototype.get;Pv.prototype.getKeys=Pv.prototype.N;Pv.prototype.getProperties=Pv.prototype.O;Pv.prototype.set=Pv.prototype.set;Pv.prototype.setProperties=Pv.prototype.G;Pv.prototype.unset=Pv.prototype.R;Pv.prototype.changed=Pv.prototype.u;Pv.prototype.dispatchEvent=Pv.prototype.b;Pv.prototype.getRevision=Pv.prototype.K;Pv.prototype.on=Pv.prototype.I;Pv.prototype.once=Pv.prototype.L;
Pv.prototype.un=Pv.prototype.J;Pv.prototype.unByKey=Pv.prototype.M;Rv.prototype.setRenderReprojectionEdges=Rv.prototype.Ab;Rv.prototype.setTileGridForProjection=Rv.prototype.Bb;Rv.prototype.getTileLoadFunction=Rv.prototype.gb;Rv.prototype.getTileUrlFunction=Rv.prototype.hb;Rv.prototype.getUrls=Rv.prototype.ib;Rv.prototype.setTileLoadFunction=Rv.prototype.lb;Rv.prototype.setTileUrlFunction=Rv.prototype.Qa;Rv.prototype.setUrl=Rv.prototype.Va;Rv.prototype.setUrls=Rv.prototype.bb;
Rv.prototype.getTileGrid=Rv.prototype.Na;Rv.prototype.refresh=Rv.prototype.ta;Rv.prototype.getAttributions=Rv.prototype.wa;Rv.prototype.getLogo=Rv.prototype.ua;Rv.prototype.getProjection=Rv.prototype.xa;Rv.prototype.getState=Rv.prototype.V;Rv.prototype.setAttributions=Rv.prototype.qa;Rv.prototype.get=Rv.prototype.get;Rv.prototype.getKeys=Rv.prototype.N;Rv.prototype.getProperties=Rv.prototype.O;Rv.prototype.set=Rv.prototype.set;Rv.prototype.setProperties=Rv.prototype.G;Rv.prototype.unset=Rv.prototype.R;
Rv.prototype.changed=Rv.prototype.u;Rv.prototype.dispatchEvent=Rv.prototype.b;Rv.prototype.getRevision=Rv.prototype.K;Rv.prototype.on=Rv.prototype.I;Rv.prototype.once=Rv.prototype.L;Rv.prototype.un=Rv.prototype.J;Rv.prototype.unByKey=Rv.prototype.M;Tv.prototype.getTileGrid=Tv.prototype.Na;Tv.prototype.refresh=Tv.prototype.ta;Tv.prototype.getAttributions=Tv.prototype.wa;Tv.prototype.getLogo=Tv.prototype.ua;Tv.prototype.getProjection=Tv.prototype.xa;Tv.prototype.getState=Tv.prototype.V;
Tv.prototype.setAttributions=Tv.prototype.qa;Tv.prototype.get=Tv.prototype.get;Tv.prototype.getKeys=Tv.prototype.N;Tv.prototype.getProperties=Tv.prototype.O;Tv.prototype.set=Tv.prototype.set;Tv.prototype.setProperties=Tv.prototype.G;Tv.prototype.unset=Tv.prototype.R;Tv.prototype.changed=Tv.prototype.u;Tv.prototype.dispatchEvent=Tv.prototype.b;Tv.prototype.getRevision=Tv.prototype.K;Tv.prototype.on=Tv.prototype.I;Tv.prototype.once=Tv.prototype.L;Tv.prototype.un=Tv.prototype.J;
Tv.prototype.unByKey=Tv.prototype.M;Uv.prototype.setRenderReprojectionEdges=Uv.prototype.Ab;Uv.prototype.setTileGridForProjection=Uv.prototype.Bb;Uv.prototype.getTileLoadFunction=Uv.prototype.gb;Uv.prototype.getTileUrlFunction=Uv.prototype.hb;Uv.prototype.getUrls=Uv.prototype.ib;Uv.prototype.setTileLoadFunction=Uv.prototype.lb;Uv.prototype.setTileUrlFunction=Uv.prototype.Qa;Uv.prototype.setUrl=Uv.prototype.Va;Uv.prototype.setUrls=Uv.prototype.bb;Uv.prototype.getTileGrid=Uv.prototype.Na;
Uv.prototype.refresh=Uv.prototype.ta;Uv.prototype.getAttributions=Uv.prototype.wa;Uv.prototype.getLogo=Uv.prototype.ua;Uv.prototype.getProjection=Uv.prototype.xa;Uv.prototype.getState=Uv.prototype.V;Uv.prototype.setAttributions=Uv.prototype.qa;Uv.prototype.get=Uv.prototype.get;Uv.prototype.getKeys=Uv.prototype.N;Uv.prototype.getProperties=Uv.prototype.O;Uv.prototype.set=Uv.prototype.set;Uv.prototype.setProperties=Uv.prototype.G;Uv.prototype.unset=Uv.prototype.R;Uv.prototype.changed=Uv.prototype.u;
Uv.prototype.dispatchEvent=Uv.prototype.b;Uv.prototype.getRevision=Uv.prototype.K;Uv.prototype.on=Uv.prototype.I;Uv.prototype.once=Uv.prototype.L;Uv.prototype.un=Uv.prototype.J;Uv.prototype.unByKey=Uv.prototype.M;wf.prototype.type=wf.prototype.type;wf.prototype.target=wf.prototype.target;wf.prototype.preventDefault=wf.prototype.preventDefault;wf.prototype.stopPropagation=wf.prototype.stopPropagation;Vv.prototype.getTileGrid=Vv.prototype.Na;Vv.prototype.refresh=Vv.prototype.ta;
Vv.prototype.getAttributions=Vv.prototype.wa;Vv.prototype.getLogo=Vv.prototype.ua;Vv.prototype.getProjection=Vv.prototype.xa;Vv.prototype.getState=Vv.prototype.V;Vv.prototype.setAttributions=Vv.prototype.qa;Vv.prototype.get=Vv.prototype.get;Vv.prototype.getKeys=Vv.prototype.N;Vv.prototype.getProperties=Vv.prototype.O;Vv.prototype.set=Vv.prototype.set;Vv.prototype.setProperties=Vv.prototype.G;Vv.prototype.unset=Vv.prototype.R;Vv.prototype.changed=Vv.prototype.u;Vv.prototype.dispatchEvent=Vv.prototype.b;
Vv.prototype.getRevision=Vv.prototype.K;Vv.prototype.on=Vv.prototype.I;Vv.prototype.once=Vv.prototype.L;Vv.prototype.un=Vv.prototype.J;Vv.prototype.unByKey=Vv.prototype.M;Zv.prototype.setRenderReprojectionEdges=Zv.prototype.Ab;Zv.prototype.setTileGridForProjection=Zv.prototype.Bb;Zv.prototype.getTileLoadFunction=Zv.prototype.gb;Zv.prototype.getTileUrlFunction=Zv.prototype.hb;Zv.prototype.getUrls=Zv.prototype.ib;Zv.prototype.setTileLoadFunction=Zv.prototype.lb;Zv.prototype.setTileUrlFunction=Zv.prototype.Qa;
Zv.prototype.setUrl=Zv.prototype.Va;Zv.prototype.setUrls=Zv.prototype.bb;Zv.prototype.getTileGrid=Zv.prototype.Na;Zv.prototype.refresh=Zv.prototype.ta;Zv.prototype.getAttributions=Zv.prototype.wa;Zv.prototype.getLogo=Zv.prototype.ua;Zv.prototype.getProjection=Zv.prototype.xa;Zv.prototype.getState=Zv.prototype.V;Zv.prototype.setAttributions=Zv.prototype.qa;Zv.prototype.get=Zv.prototype.get;Zv.prototype.getKeys=Zv.prototype.N;Zv.prototype.getProperties=Zv.prototype.O;Zv.prototype.set=Zv.prototype.set;
Zv.prototype.setProperties=Zv.prototype.G;Zv.prototype.unset=Zv.prototype.R;Zv.prototype.changed=Zv.prototype.u;Zv.prototype.dispatchEvent=Zv.prototype.b;Zv.prototype.getRevision=Zv.prototype.K;Zv.prototype.on=Zv.prototype.I;Zv.prototype.once=Zv.prototype.L;Zv.prototype.un=Zv.prototype.J;Zv.prototype.unByKey=Zv.prototype.M;vl.prototype.type=vl.prototype.type;vl.prototype.target=vl.prototype.target;vl.prototype.preventDefault=vl.prototype.preventDefault;vl.prototype.stopPropagation=vl.prototype.stopPropagation;
Kl.prototype.getTileLoadFunction=Kl.prototype.gb;Kl.prototype.getTileUrlFunction=Kl.prototype.hb;Kl.prototype.getUrls=Kl.prototype.ib;Kl.prototype.setTileLoadFunction=Kl.prototype.lb;Kl.prototype.setTileUrlFunction=Kl.prototype.Qa;Kl.prototype.setUrl=Kl.prototype.Va;Kl.prototype.setUrls=Kl.prototype.bb;Kl.prototype.getTileGrid=Kl.prototype.Na;Kl.prototype.refresh=Kl.prototype.ta;Kl.prototype.getAttributions=Kl.prototype.wa;Kl.prototype.getLogo=Kl.prototype.ua;Kl.prototype.getProjection=Kl.prototype.xa;
Kl.prototype.getState=Kl.prototype.V;Kl.prototype.setAttributions=Kl.prototype.qa;Kl.prototype.get=Kl.prototype.get;Kl.prototype.getKeys=Kl.prototype.N;Kl.prototype.getProperties=Kl.prototype.O;Kl.prototype.set=Kl.prototype.set;Kl.prototype.setProperties=Kl.prototype.G;Kl.prototype.unset=Kl.prototype.R;Kl.prototype.changed=Kl.prototype.u;Kl.prototype.dispatchEvent=Kl.prototype.b;Kl.prototype.getRevision=Kl.prototype.K;Kl.prototype.on=Kl.prototype.I;Kl.prototype.once=Kl.prototype.L;
Kl.prototype.un=Kl.prototype.J;Kl.prototype.unByKey=Kl.prototype.M;Z.prototype.setRenderReprojectionEdges=Z.prototype.Ab;Z.prototype.setTileGridForProjection=Z.prototype.Bb;Z.prototype.getTileLoadFunction=Z.prototype.gb;Z.prototype.getTileUrlFunction=Z.prototype.hb;Z.prototype.getUrls=Z.prototype.ib;Z.prototype.setTileLoadFunction=Z.prototype.lb;Z.prototype.setTileUrlFunction=Z.prototype.Qa;Z.prototype.setUrl=Z.prototype.Va;Z.prototype.setUrls=Z.prototype.bb;Z.prototype.getTileGrid=Z.prototype.Na;
Z.prototype.refresh=Z.prototype.ta;Z.prototype.getAttributions=Z.prototype.wa;Z.prototype.getLogo=Z.prototype.ua;Z.prototype.getProjection=Z.prototype.xa;Z.prototype.getState=Z.prototype.V;Z.prototype.setAttributions=Z.prototype.qa;Z.prototype.get=Z.prototype.get;Z.prototype.getKeys=Z.prototype.N;Z.prototype.getProperties=Z.prototype.O;Z.prototype.set=Z.prototype.set;Z.prototype.setProperties=Z.prototype.G;Z.prototype.unset=Z.prototype.R;Z.prototype.changed=Z.prototype.u;
Z.prototype.dispatchEvent=Z.prototype.b;Z.prototype.getRevision=Z.prototype.K;Z.prototype.on=Z.prototype.I;Z.prototype.once=Z.prototype.L;Z.prototype.un=Z.prototype.J;Z.prototype.unByKey=Z.prototype.M;gw.prototype.setRenderReprojectionEdges=gw.prototype.Ab;gw.prototype.setTileGridForProjection=gw.prototype.Bb;gw.prototype.getTileLoadFunction=gw.prototype.gb;gw.prototype.getTileUrlFunction=gw.prototype.hb;gw.prototype.getUrls=gw.prototype.ib;gw.prototype.setTileLoadFunction=gw.prototype.lb;
gw.prototype.setTileUrlFunction=gw.prototype.Qa;gw.prototype.setUrl=gw.prototype.Va;gw.prototype.setUrls=gw.prototype.bb;gw.prototype.getTileGrid=gw.prototype.Na;gw.prototype.refresh=gw.prototype.ta;gw.prototype.getAttributions=gw.prototype.wa;gw.prototype.getLogo=gw.prototype.ua;gw.prototype.getProjection=gw.prototype.xa;gw.prototype.getState=gw.prototype.V;gw.prototype.setAttributions=gw.prototype.qa;gw.prototype.get=gw.prototype.get;gw.prototype.getKeys=gw.prototype.N;
gw.prototype.getProperties=gw.prototype.O;gw.prototype.set=gw.prototype.set;gw.prototype.setProperties=gw.prototype.G;gw.prototype.unset=gw.prototype.R;gw.prototype.changed=gw.prototype.u;gw.prototype.dispatchEvent=gw.prototype.b;gw.prototype.getRevision=gw.prototype.K;gw.prototype.on=gw.prototype.I;gw.prototype.once=gw.prototype.L;gw.prototype.un=gw.prototype.J;gw.prototype.unByKey=gw.prototype.M;jv.prototype.getTileCoord=jv.prototype.i;jv.prototype.load=jv.prototype.load;vh.prototype.changed=vh.prototype.u;
vh.prototype.dispatchEvent=vh.prototype.b;vh.prototype.getRevision=vh.prototype.K;vh.prototype.on=vh.prototype.I;vh.prototype.once=vh.prototype.L;vh.prototype.un=vh.prototype.J;vh.prototype.unByKey=vh.prototype.M;Gm.prototype.changed=Gm.prototype.u;Gm.prototype.dispatchEvent=Gm.prototype.b;Gm.prototype.getRevision=Gm.prototype.K;Gm.prototype.on=Gm.prototype.I;Gm.prototype.once=Gm.prototype.L;Gm.prototype.un=Gm.prototype.J;Gm.prototype.unByKey=Gm.prototype.M;Jm.prototype.changed=Jm.prototype.u;
Jm.prototype.dispatchEvent=Jm.prototype.b;Jm.prototype.getRevision=Jm.prototype.K;Jm.prototype.on=Jm.prototype.I;Jm.prototype.once=Jm.prototype.L;Jm.prototype.un=Jm.prototype.J;Jm.prototype.unByKey=Jm.prototype.M;Pm.prototype.changed=Pm.prototype.u;Pm.prototype.dispatchEvent=Pm.prototype.b;Pm.prototype.getRevision=Pm.prototype.K;Pm.prototype.on=Pm.prototype.I;Pm.prototype.once=Pm.prototype.L;Pm.prototype.un=Pm.prototype.J;Pm.prototype.unByKey=Pm.prototype.M;Rm.prototype.changed=Rm.prototype.u;
Rm.prototype.dispatchEvent=Rm.prototype.b;Rm.prototype.getRevision=Rm.prototype.K;Rm.prototype.on=Rm.prototype.I;Rm.prototype.once=Rm.prototype.L;Rm.prototype.un=Rm.prototype.J;Rm.prototype.unByKey=Rm.prototype.M;Sl.prototype.changed=Sl.prototype.u;Sl.prototype.dispatchEvent=Sl.prototype.b;Sl.prototype.getRevision=Sl.prototype.K;Sl.prototype.on=Sl.prototype.I;Sl.prototype.once=Sl.prototype.L;Sl.prototype.un=Sl.prototype.J;Sl.prototype.unByKey=Sl.prototype.M;Tl.prototype.changed=Tl.prototype.u;
Tl.prototype.dispatchEvent=Tl.prototype.b;Tl.prototype.getRevision=Tl.prototype.K;Tl.prototype.on=Tl.prototype.I;Tl.prototype.once=Tl.prototype.L;Tl.prototype.un=Tl.prototype.J;Tl.prototype.unByKey=Tl.prototype.M;Ul.prototype.changed=Ul.prototype.u;Ul.prototype.dispatchEvent=Ul.prototype.b;Ul.prototype.getRevision=Ul.prototype.K;Ul.prototype.on=Ul.prototype.I;Ul.prototype.once=Ul.prototype.L;Ul.prototype.un=Ul.prototype.J;Ul.prototype.unByKey=Ul.prototype.M;Wl.prototype.changed=Wl.prototype.u;
Wl.prototype.dispatchEvent=Wl.prototype.b;Wl.prototype.getRevision=Wl.prototype.K;Wl.prototype.on=Wl.prototype.I;Wl.prototype.once=Wl.prototype.L;Wl.prototype.un=Wl.prototype.J;Wl.prototype.unByKey=Wl.prototype.M;Kj.prototype.changed=Kj.prototype.u;Kj.prototype.dispatchEvent=Kj.prototype.b;Kj.prototype.getRevision=Kj.prototype.K;Kj.prototype.on=Kj.prototype.I;Kj.prototype.once=Kj.prototype.L;Kj.prototype.un=Kj.prototype.J;Kj.prototype.unByKey=Kj.prototype.M;Al.prototype.changed=Al.prototype.u;
Al.prototype.dispatchEvent=Al.prototype.b;Al.prototype.getRevision=Al.prototype.K;Al.prototype.on=Al.prototype.I;Al.prototype.once=Al.prototype.L;Al.prototype.un=Al.prototype.J;Al.prototype.unByKey=Al.prototype.M;Bl.prototype.changed=Bl.prototype.u;Bl.prototype.dispatchEvent=Bl.prototype.b;Bl.prototype.getRevision=Bl.prototype.K;Bl.prototype.on=Bl.prototype.I;Bl.prototype.once=Bl.prototype.L;Bl.prototype.un=Bl.prototype.J;Bl.prototype.unByKey=Bl.prototype.M;Dl.prototype.changed=Dl.prototype.u;
Dl.prototype.dispatchEvent=Dl.prototype.b;Dl.prototype.getRevision=Dl.prototype.K;Dl.prototype.on=Dl.prototype.I;Dl.prototype.once=Dl.prototype.L;Dl.prototype.un=Dl.prototype.J;Dl.prototype.unByKey=Dl.prototype.M;Ol.prototype.changed=Ol.prototype.u;Ol.prototype.dispatchEvent=Ol.prototype.b;Ol.prototype.getRevision=Ol.prototype.K;Ol.prototype.on=Ol.prototype.I;Ol.prototype.once=Ol.prototype.L;Ol.prototype.un=Ol.prototype.J;Ol.prototype.unByKey=Ol.prototype.M;qh.prototype.type=qh.prototype.type;
qh.prototype.target=qh.prototype.target;qh.prototype.preventDefault=qh.prototype.preventDefault;qh.prototype.stopPropagation=qh.prototype.stopPropagation;Pf.prototype.type=Pf.prototype.type;Pf.prototype.target=Pf.prototype.target;Pf.prototype.preventDefault=Pf.prototype.preventDefault;Pf.prototype.stopPropagation=Pf.prototype.stopPropagation;nh.prototype.get=nh.prototype.get;nh.prototype.getKeys=nh.prototype.N;nh.prototype.getProperties=nh.prototype.O;nh.prototype.set=nh.prototype.set;
nh.prototype.setProperties=nh.prototype.G;nh.prototype.unset=nh.prototype.R;nh.prototype.changed=nh.prototype.u;nh.prototype.dispatchEvent=nh.prototype.b;nh.prototype.getRevision=nh.prototype.K;nh.prototype.on=nh.prototype.I;nh.prototype.once=nh.prototype.L;nh.prototype.un=nh.prototype.J;nh.prototype.unByKey=nh.prototype.M;rh.prototype.getExtent=rh.prototype.H;rh.prototype.getMaxResolution=rh.prototype.Ob;rh.prototype.getMinResolution=rh.prototype.Pb;rh.prototype.getOpacity=rh.prototype.Qb;
rh.prototype.getVisible=rh.prototype.yb;rh.prototype.getZIndex=rh.prototype.Rb;rh.prototype.setExtent=rh.prototype.fc;rh.prototype.setMaxResolution=rh.prototype.nc;rh.prototype.setMinResolution=rh.prototype.oc;rh.prototype.setOpacity=rh.prototype.gc;rh.prototype.setVisible=rh.prototype.hc;rh.prototype.setZIndex=rh.prototype.ic;rh.prototype.get=rh.prototype.get;rh.prototype.getKeys=rh.prototype.N;rh.prototype.getProperties=rh.prototype.O;rh.prototype.set=rh.prototype.set;
rh.prototype.setProperties=rh.prototype.G;rh.prototype.unset=rh.prototype.R;rh.prototype.changed=rh.prototype.u;rh.prototype.dispatchEvent=rh.prototype.b;rh.prototype.getRevision=rh.prototype.K;rh.prototype.on=rh.prototype.I;rh.prototype.once=rh.prototype.L;rh.prototype.un=rh.prototype.J;rh.prototype.unByKey=rh.prototype.M;I.prototype.setMap=I.prototype.setMap;I.prototype.setSource=I.prototype.Fc;I.prototype.getExtent=I.prototype.H;I.prototype.getMaxResolution=I.prototype.Ob;
I.prototype.getMinResolution=I.prototype.Pb;I.prototype.getOpacity=I.prototype.Qb;I.prototype.getVisible=I.prototype.yb;I.prototype.getZIndex=I.prototype.Rb;I.prototype.setExtent=I.prototype.fc;I.prototype.setMaxResolution=I.prototype.nc;I.prototype.setMinResolution=I.prototype.oc;I.prototype.setOpacity=I.prototype.gc;I.prototype.setVisible=I.prototype.hc;I.prototype.setZIndex=I.prototype.ic;I.prototype.get=I.prototype.get;I.prototype.getKeys=I.prototype.N;I.prototype.getProperties=I.prototype.O;
I.prototype.set=I.prototype.set;I.prototype.setProperties=I.prototype.G;I.prototype.unset=I.prototype.R;I.prototype.changed=I.prototype.u;I.prototype.dispatchEvent=I.prototype.b;I.prototype.getRevision=I.prototype.K;I.prototype.on=I.prototype.I;I.prototype.once=I.prototype.L;I.prototype.un=I.prototype.J;I.prototype.unByKey=I.prototype.M;W.prototype.getSource=W.prototype.ha;W.prototype.getStyle=W.prototype.D;W.prototype.getStyleFunction=W.prototype.C;W.prototype.setStyle=W.prototype.l;
W.prototype.setMap=W.prototype.setMap;W.prototype.setSource=W.prototype.Fc;W.prototype.getExtent=W.prototype.H;W.prototype.getMaxResolution=W.prototype.Ob;W.prototype.getMinResolution=W.prototype.Pb;W.prototype.getOpacity=W.prototype.Qb;W.prototype.getVisible=W.prototype.yb;W.prototype.getZIndex=W.prototype.Rb;W.prototype.setExtent=W.prototype.fc;W.prototype.setMaxResolution=W.prototype.nc;W.prototype.setMinResolution=W.prototype.oc;W.prototype.setOpacity=W.prototype.gc;W.prototype.setVisible=W.prototype.hc;
W.prototype.setZIndex=W.prototype.ic;W.prototype.get=W.prototype.get;W.prototype.getKeys=W.prototype.N;W.prototype.getProperties=W.prototype.O;W.prototype.set=W.prototype.set;W.prototype.setProperties=W.prototype.G;W.prototype.unset=W.prototype.R;W.prototype.changed=W.prototype.u;W.prototype.dispatchEvent=W.prototype.b;W.prototype.getRevision=W.prototype.K;W.prototype.on=W.prototype.I;W.prototype.once=W.prototype.L;W.prototype.un=W.prototype.J;W.prototype.unByKey=W.prototype.M;
ej.prototype.setMap=ej.prototype.setMap;ej.prototype.setSource=ej.prototype.Fc;ej.prototype.getExtent=ej.prototype.H;ej.prototype.getMaxResolution=ej.prototype.Ob;ej.prototype.getMinResolution=ej.prototype.Pb;ej.prototype.getOpacity=ej.prototype.Qb;ej.prototype.getVisible=ej.prototype.yb;ej.prototype.getZIndex=ej.prototype.Rb;ej.prototype.setExtent=ej.prototype.fc;ej.prototype.setMaxResolution=ej.prototype.nc;ej.prototype.setMinResolution=ej.prototype.oc;ej.prototype.setOpacity=ej.prototype.gc;
ej.prototype.setVisible=ej.prototype.hc;ej.prototype.setZIndex=ej.prototype.ic;ej.prototype.get=ej.prototype.get;ej.prototype.getKeys=ej.prototype.N;ej.prototype.getProperties=ej.prototype.O;ej.prototype.set=ej.prototype.set;ej.prototype.setProperties=ej.prototype.G;ej.prototype.unset=ej.prototype.R;ej.prototype.changed=ej.prototype.u;ej.prototype.dispatchEvent=ej.prototype.b;ej.prototype.getRevision=ej.prototype.K;ej.prototype.on=ej.prototype.I;ej.prototype.once=ej.prototype.L;ej.prototype.un=ej.prototype.J;
ej.prototype.unByKey=ej.prototype.M;Vi.prototype.getExtent=Vi.prototype.H;Vi.prototype.getMaxResolution=Vi.prototype.Ob;Vi.prototype.getMinResolution=Vi.prototype.Pb;Vi.prototype.getOpacity=Vi.prototype.Qb;Vi.prototype.getVisible=Vi.prototype.yb;Vi.prototype.getZIndex=Vi.prototype.Rb;Vi.prototype.setExtent=Vi.prototype.fc;Vi.prototype.setMaxResolution=Vi.prototype.nc;Vi.prototype.setMinResolution=Vi.prototype.oc;Vi.prototype.setOpacity=Vi.prototype.gc;Vi.prototype.setVisible=Vi.prototype.hc;
Vi.prototype.setZIndex=Vi.prototype.ic;Vi.prototype.get=Vi.prototype.get;Vi.prototype.getKeys=Vi.prototype.N;Vi.prototype.getProperties=Vi.prototype.O;Vi.prototype.set=Vi.prototype.set;Vi.prototype.setProperties=Vi.prototype.G;Vi.prototype.unset=Vi.prototype.R;Vi.prototype.changed=Vi.prototype.u;Vi.prototype.dispatchEvent=Vi.prototype.b;Vi.prototype.getRevision=Vi.prototype.K;Vi.prototype.on=Vi.prototype.I;Vi.prototype.once=Vi.prototype.L;Vi.prototype.un=Vi.prototype.J;Vi.prototype.unByKey=Vi.prototype.M;
F.prototype.setMap=F.prototype.setMap;F.prototype.setSource=F.prototype.Fc;F.prototype.getExtent=F.prototype.H;F.prototype.getMaxResolution=F.prototype.Ob;F.prototype.getMinResolution=F.prototype.Pb;F.prototype.getOpacity=F.prototype.Qb;F.prototype.getVisible=F.prototype.yb;F.prototype.getZIndex=F.prototype.Rb;F.prototype.setExtent=F.prototype.fc;F.prototype.setMaxResolution=F.prototype.nc;F.prototype.setMinResolution=F.prototype.oc;F.prototype.setOpacity=F.prototype.gc;F.prototype.setVisible=F.prototype.hc;
F.prototype.setZIndex=F.prototype.ic;F.prototype.get=F.prototype.get;F.prototype.getKeys=F.prototype.N;F.prototype.getProperties=F.prototype.O;F.prototype.set=F.prototype.set;F.prototype.setProperties=F.prototype.G;F.prototype.unset=F.prototype.R;F.prototype.changed=F.prototype.u;F.prototype.dispatchEvent=F.prototype.b;F.prototype.getRevision=F.prototype.K;F.prototype.on=F.prototype.I;F.prototype.once=F.prototype.L;F.prototype.un=F.prototype.J;F.prototype.unByKey=F.prototype.M;
J.prototype.getSource=J.prototype.ha;J.prototype.getStyle=J.prototype.D;J.prototype.getStyleFunction=J.prototype.C;J.prototype.setStyle=J.prototype.l;J.prototype.setMap=J.prototype.setMap;J.prototype.setSource=J.prototype.Fc;J.prototype.getExtent=J.prototype.H;J.prototype.getMaxResolution=J.prototype.Ob;J.prototype.getMinResolution=J.prototype.Pb;J.prototype.getOpacity=J.prototype.Qb;J.prototype.getVisible=J.prototype.yb;J.prototype.getZIndex=J.prototype.Rb;J.prototype.setExtent=J.prototype.fc;
J.prototype.setMaxResolution=J.prototype.nc;J.prototype.setMinResolution=J.prototype.oc;J.prototype.setOpacity=J.prototype.gc;J.prototype.setVisible=J.prototype.hc;J.prototype.setZIndex=J.prototype.ic;J.prototype.get=J.prototype.get;J.prototype.getKeys=J.prototype.N;J.prototype.getProperties=J.prototype.O;J.prototype.set=J.prototype.set;J.prototype.setProperties=J.prototype.G;J.prototype.unset=J.prototype.R;J.prototype.changed=J.prototype.u;J.prototype.dispatchEvent=J.prototype.b;
J.prototype.getRevision=J.prototype.K;J.prototype.on=J.prototype.I;J.prototype.once=J.prototype.L;J.prototype.un=J.prototype.J;J.prototype.unByKey=J.prototype.M;Xh.prototype.get=Xh.prototype.get;Xh.prototype.getKeys=Xh.prototype.N;Xh.prototype.getProperties=Xh.prototype.O;Xh.prototype.set=Xh.prototype.set;Xh.prototype.setProperties=Xh.prototype.G;Xh.prototype.unset=Xh.prototype.R;Xh.prototype.changed=Xh.prototype.u;Xh.prototype.dispatchEvent=Xh.prototype.b;Xh.prototype.getRevision=Xh.prototype.K;
Xh.prototype.on=Xh.prototype.I;Xh.prototype.once=Xh.prototype.L;Xh.prototype.un=Xh.prototype.J;Xh.prototype.unByKey=Xh.prototype.M;ai.prototype.getActive=ai.prototype.f;ai.prototype.getMap=ai.prototype.l;ai.prototype.setActive=ai.prototype.i;ai.prototype.get=ai.prototype.get;ai.prototype.getKeys=ai.prototype.N;ai.prototype.getProperties=ai.prototype.O;ai.prototype.set=ai.prototype.set;ai.prototype.setProperties=ai.prototype.G;ai.prototype.unset=ai.prototype.R;ai.prototype.changed=ai.prototype.u;
ai.prototype.dispatchEvent=ai.prototype.b;ai.prototype.getRevision=ai.prototype.K;ai.prototype.on=ai.prototype.I;ai.prototype.once=ai.prototype.L;ai.prototype.un=ai.prototype.J;ai.prototype.unByKey=ai.prototype.M;fu.prototype.getActive=fu.prototype.f;fu.prototype.getMap=fu.prototype.l;fu.prototype.setActive=fu.prototype.i;fu.prototype.get=fu.prototype.get;fu.prototype.getKeys=fu.prototype.N;fu.prototype.getProperties=fu.prototype.O;fu.prototype.set=fu.prototype.set;fu.prototype.setProperties=fu.prototype.G;
fu.prototype.unset=fu.prototype.R;fu.prototype.changed=fu.prototype.u;fu.prototype.dispatchEvent=fu.prototype.b;fu.prototype.getRevision=fu.prototype.K;fu.prototype.on=fu.prototype.I;fu.prototype.once=fu.prototype.L;fu.prototype.un=fu.prototype.J;fu.prototype.unByKey=fu.prototype.M;iu.prototype.type=iu.prototype.type;iu.prototype.target=iu.prototype.target;iu.prototype.preventDefault=iu.prototype.preventDefault;iu.prototype.stopPropagation=iu.prototype.stopPropagation;zi.prototype.type=zi.prototype.type;
zi.prototype.target=zi.prototype.target;zi.prototype.preventDefault=zi.prototype.preventDefault;zi.prototype.stopPropagation=zi.prototype.stopPropagation;li.prototype.getActive=li.prototype.f;li.prototype.getMap=li.prototype.l;li.prototype.setActive=li.prototype.i;li.prototype.get=li.prototype.get;li.prototype.getKeys=li.prototype.N;li.prototype.getProperties=li.prototype.O;li.prototype.set=li.prototype.set;li.prototype.setProperties=li.prototype.G;li.prototype.unset=li.prototype.R;
li.prototype.changed=li.prototype.u;li.prototype.dispatchEvent=li.prototype.b;li.prototype.getRevision=li.prototype.K;li.prototype.on=li.prototype.I;li.prototype.once=li.prototype.L;li.prototype.un=li.prototype.J;li.prototype.unByKey=li.prototype.M;Ai.prototype.getActive=Ai.prototype.f;Ai.prototype.getMap=Ai.prototype.l;Ai.prototype.setActive=Ai.prototype.i;Ai.prototype.get=Ai.prototype.get;Ai.prototype.getKeys=Ai.prototype.N;Ai.prototype.getProperties=Ai.prototype.O;Ai.prototype.set=Ai.prototype.set;
Ai.prototype.setProperties=Ai.prototype.G;Ai.prototype.unset=Ai.prototype.R;Ai.prototype.changed=Ai.prototype.u;Ai.prototype.dispatchEvent=Ai.prototype.b;Ai.prototype.getRevision=Ai.prototype.K;Ai.prototype.on=Ai.prototype.I;Ai.prototype.once=Ai.prototype.L;Ai.prototype.un=Ai.prototype.J;Ai.prototype.unByKey=Ai.prototype.M;oi.prototype.getActive=oi.prototype.f;oi.prototype.getMap=oi.prototype.l;oi.prototype.setActive=oi.prototype.i;oi.prototype.get=oi.prototype.get;oi.prototype.getKeys=oi.prototype.N;
oi.prototype.getProperties=oi.prototype.O;oi.prototype.set=oi.prototype.set;oi.prototype.setProperties=oi.prototype.G;oi.prototype.unset=oi.prototype.R;oi.prototype.changed=oi.prototype.u;oi.prototype.dispatchEvent=oi.prototype.b;oi.prototype.getRevision=oi.prototype.K;oi.prototype.on=oi.prototype.I;oi.prototype.once=oi.prototype.L;oi.prototype.un=oi.prototype.J;oi.prototype.unByKey=oi.prototype.M;ku.prototype.getActive=ku.prototype.f;ku.prototype.getMap=ku.prototype.l;ku.prototype.setActive=ku.prototype.i;
ku.prototype.get=ku.prototype.get;ku.prototype.getKeys=ku.prototype.N;ku.prototype.getProperties=ku.prototype.O;ku.prototype.set=ku.prototype.set;ku.prototype.setProperties=ku.prototype.G;ku.prototype.unset=ku.prototype.R;ku.prototype.changed=ku.prototype.u;ku.prototype.dispatchEvent=ku.prototype.b;ku.prototype.getRevision=ku.prototype.K;ku.prototype.on=ku.prototype.I;ku.prototype.once=ku.prototype.L;ku.prototype.un=ku.prototype.J;ku.prototype.unByKey=ku.prototype.M;si.prototype.getActive=si.prototype.f;
si.prototype.getMap=si.prototype.l;si.prototype.setActive=si.prototype.i;si.prototype.get=si.prototype.get;si.prototype.getKeys=si.prototype.N;si.prototype.getProperties=si.prototype.O;si.prototype.set=si.prototype.set;si.prototype.setProperties=si.prototype.G;si.prototype.unset=si.prototype.R;si.prototype.changed=si.prototype.u;si.prototype.dispatchEvent=si.prototype.b;si.prototype.getRevision=si.prototype.K;si.prototype.on=si.prototype.I;si.prototype.once=si.prototype.L;si.prototype.un=si.prototype.J;
si.prototype.unByKey=si.prototype.M;Fi.prototype.getGeometry=Fi.prototype.X;Fi.prototype.getActive=Fi.prototype.f;Fi.prototype.getMap=Fi.prototype.l;Fi.prototype.setActive=Fi.prototype.i;Fi.prototype.get=Fi.prototype.get;Fi.prototype.getKeys=Fi.prototype.N;Fi.prototype.getProperties=Fi.prototype.O;Fi.prototype.set=Fi.prototype.set;Fi.prototype.setProperties=Fi.prototype.G;Fi.prototype.unset=Fi.prototype.R;Fi.prototype.changed=Fi.prototype.u;Fi.prototype.dispatchEvent=Fi.prototype.b;
Fi.prototype.getRevision=Fi.prototype.K;Fi.prototype.on=Fi.prototype.I;Fi.prototype.once=Fi.prototype.L;Fi.prototype.un=Fi.prototype.J;Fi.prototype.unByKey=Fi.prototype.M;ou.prototype.type=ou.prototype.type;ou.prototype.target=ou.prototype.target;ou.prototype.preventDefault=ou.prototype.preventDefault;ou.prototype.stopPropagation=ou.prototype.stopPropagation;pu.prototype.getActive=pu.prototype.f;pu.prototype.getMap=pu.prototype.l;pu.prototype.setActive=pu.prototype.i;pu.prototype.get=pu.prototype.get;
pu.prototype.getKeys=pu.prototype.N;pu.prototype.getProperties=pu.prototype.O;pu.prototype.set=pu.prototype.set;pu.prototype.setProperties=pu.prototype.G;pu.prototype.unset=pu.prototype.R;pu.prototype.changed=pu.prototype.u;pu.prototype.dispatchEvent=pu.prototype.b;pu.prototype.getRevision=pu.prototype.K;pu.prototype.on=pu.prototype.I;pu.prototype.once=pu.prototype.L;pu.prototype.un=pu.prototype.J;pu.prototype.unByKey=pu.prototype.M;Gi.prototype.getActive=Gi.prototype.f;Gi.prototype.getMap=Gi.prototype.l;
Gi.prototype.setActive=Gi.prototype.i;Gi.prototype.get=Gi.prototype.get;Gi.prototype.getKeys=Gi.prototype.N;Gi.prototype.getProperties=Gi.prototype.O;Gi.prototype.set=Gi.prototype.set;Gi.prototype.setProperties=Gi.prototype.G;Gi.prototype.unset=Gi.prototype.R;Gi.prototype.changed=Gi.prototype.u;Gi.prototype.dispatchEvent=Gi.prototype.b;Gi.prototype.getRevision=Gi.prototype.K;Gi.prototype.on=Gi.prototype.I;Gi.prototype.once=Gi.prototype.L;Gi.prototype.un=Gi.prototype.J;Gi.prototype.unByKey=Gi.prototype.M;
Ii.prototype.getActive=Ii.prototype.f;Ii.prototype.getMap=Ii.prototype.l;Ii.prototype.setActive=Ii.prototype.i;Ii.prototype.get=Ii.prototype.get;Ii.prototype.getKeys=Ii.prototype.N;Ii.prototype.getProperties=Ii.prototype.O;Ii.prototype.set=Ii.prototype.set;Ii.prototype.setProperties=Ii.prototype.G;Ii.prototype.unset=Ii.prototype.R;Ii.prototype.changed=Ii.prototype.u;Ii.prototype.dispatchEvent=Ii.prototype.b;Ii.prototype.getRevision=Ii.prototype.K;Ii.prototype.on=Ii.prototype.I;Ii.prototype.once=Ii.prototype.L;
Ii.prototype.un=Ii.prototype.J;Ii.prototype.unByKey=Ii.prototype.M;Fu.prototype.type=Fu.prototype.type;Fu.prototype.target=Fu.prototype.target;Fu.prototype.preventDefault=Fu.prototype.preventDefault;Fu.prototype.stopPropagation=Fu.prototype.stopPropagation;Gu.prototype.getActive=Gu.prototype.f;Gu.prototype.getMap=Gu.prototype.l;Gu.prototype.setActive=Gu.prototype.i;Gu.prototype.get=Gu.prototype.get;Gu.prototype.getKeys=Gu.prototype.N;Gu.prototype.getProperties=Gu.prototype.O;Gu.prototype.set=Gu.prototype.set;
Gu.prototype.setProperties=Gu.prototype.G;Gu.prototype.unset=Gu.prototype.R;Gu.prototype.changed=Gu.prototype.u;Gu.prototype.dispatchEvent=Gu.prototype.b;Gu.prototype.getRevision=Gu.prototype.K;Gu.prototype.on=Gu.prototype.I;Gu.prototype.once=Gu.prototype.L;Gu.prototype.un=Gu.prototype.J;Gu.prototype.unByKey=Gu.prototype.M;Ki.prototype.getActive=Ki.prototype.f;Ki.prototype.getMap=Ki.prototype.l;Ki.prototype.setActive=Ki.prototype.i;Ki.prototype.get=Ki.prototype.get;Ki.prototype.getKeys=Ki.prototype.N;
Ki.prototype.getProperties=Ki.prototype.O;Ki.prototype.set=Ki.prototype.set;Ki.prototype.setProperties=Ki.prototype.G;Ki.prototype.unset=Ki.prototype.R;Ki.prototype.changed=Ki.prototype.u;Ki.prototype.dispatchEvent=Ki.prototype.b;Ki.prototype.getRevision=Ki.prototype.K;Ki.prototype.on=Ki.prototype.I;Ki.prototype.once=Ki.prototype.L;Ki.prototype.un=Ki.prototype.J;Ki.prototype.unByKey=Ki.prototype.M;Mi.prototype.getActive=Mi.prototype.f;Mi.prototype.getMap=Mi.prototype.l;Mi.prototype.setActive=Mi.prototype.i;
Mi.prototype.get=Mi.prototype.get;Mi.prototype.getKeys=Mi.prototype.N;Mi.prototype.getProperties=Mi.prototype.O;Mi.prototype.set=Mi.prototype.set;Mi.prototype.setProperties=Mi.prototype.G;Mi.prototype.unset=Mi.prototype.R;Mi.prototype.changed=Mi.prototype.u;Mi.prototype.dispatchEvent=Mi.prototype.b;Mi.prototype.getRevision=Mi.prototype.K;Mi.prototype.on=Mi.prototype.I;Mi.prototype.once=Mi.prototype.L;Mi.prototype.un=Mi.prototype.J;Mi.prototype.unByKey=Mi.prototype.M;Qi.prototype.getActive=Qi.prototype.f;
Qi.prototype.getMap=Qi.prototype.l;Qi.prototype.setActive=Qi.prototype.i;Qi.prototype.get=Qi.prototype.get;Qi.prototype.getKeys=Qi.prototype.N;Qi.prototype.getProperties=Qi.prototype.O;Qi.prototype.set=Qi.prototype.set;Qi.prototype.setProperties=Qi.prototype.G;Qi.prototype.unset=Qi.prototype.R;Qi.prototype.changed=Qi.prototype.u;Qi.prototype.dispatchEvent=Qi.prototype.b;Qi.prototype.getRevision=Qi.prototype.K;Qi.prototype.on=Qi.prototype.I;Qi.prototype.once=Qi.prototype.L;Qi.prototype.un=Qi.prototype.J;
Qi.prototype.unByKey=Qi.prototype.M;Tu.prototype.type=Tu.prototype.type;Tu.prototype.target=Tu.prototype.target;Tu.prototype.preventDefault=Tu.prototype.preventDefault;Tu.prototype.stopPropagation=Tu.prototype.stopPropagation;Uu.prototype.getActive=Uu.prototype.f;Uu.prototype.getMap=Uu.prototype.l;Uu.prototype.setActive=Uu.prototype.i;Uu.prototype.get=Uu.prototype.get;Uu.prototype.getKeys=Uu.prototype.N;Uu.prototype.getProperties=Uu.prototype.O;Uu.prototype.set=Uu.prototype.set;
Uu.prototype.setProperties=Uu.prototype.G;Uu.prototype.unset=Uu.prototype.R;Uu.prototype.changed=Uu.prototype.u;Uu.prototype.dispatchEvent=Uu.prototype.b;Uu.prototype.getRevision=Uu.prototype.K;Uu.prototype.on=Uu.prototype.I;Uu.prototype.once=Uu.prototype.L;Uu.prototype.un=Uu.prototype.J;Uu.prototype.unByKey=Uu.prototype.M;Xu.prototype.getActive=Xu.prototype.f;Xu.prototype.getMap=Xu.prototype.l;Xu.prototype.setActive=Xu.prototype.i;Xu.prototype.get=Xu.prototype.get;Xu.prototype.getKeys=Xu.prototype.N;
Xu.prototype.getProperties=Xu.prototype.O;Xu.prototype.set=Xu.prototype.set;Xu.prototype.setProperties=Xu.prototype.G;Xu.prototype.unset=Xu.prototype.R;Xu.prototype.changed=Xu.prototype.u;Xu.prototype.dispatchEvent=Xu.prototype.b;Xu.prototype.getRevision=Xu.prototype.K;Xu.prototype.on=Xu.prototype.I;Xu.prototype.once=Xu.prototype.L;Xu.prototype.un=Xu.prototype.J;Xu.prototype.unByKey=Xu.prototype.M;av.prototype.type=av.prototype.type;av.prototype.target=av.prototype.target;
av.prototype.preventDefault=av.prototype.preventDefault;av.prototype.stopPropagation=av.prototype.stopPropagation;bv.prototype.getActive=bv.prototype.f;bv.prototype.getMap=bv.prototype.l;bv.prototype.setActive=bv.prototype.i;bv.prototype.get=bv.prototype.get;bv.prototype.getKeys=bv.prototype.N;bv.prototype.getProperties=bv.prototype.O;bv.prototype.set=bv.prototype.set;bv.prototype.setProperties=bv.prototype.G;bv.prototype.unset=bv.prototype.R;bv.prototype.changed=bv.prototype.u;
bv.prototype.dispatchEvent=bv.prototype.b;bv.prototype.getRevision=bv.prototype.K;bv.prototype.on=bv.prototype.I;bv.prototype.once=bv.prototype.L;bv.prototype.un=bv.prototype.J;bv.prototype.unByKey=bv.prototype.M;Uc.prototype.get=Uc.prototype.get;Uc.prototype.getKeys=Uc.prototype.N;Uc.prototype.getProperties=Uc.prototype.O;Uc.prototype.set=Uc.prototype.set;Uc.prototype.setProperties=Uc.prototype.G;Uc.prototype.unset=Uc.prototype.R;Uc.prototype.changed=Uc.prototype.u;Uc.prototype.dispatchEvent=Uc.prototype.b;
Uc.prototype.getRevision=Uc.prototype.K;Uc.prototype.on=Uc.prototype.I;Uc.prototype.once=Uc.prototype.L;Uc.prototype.un=Uc.prototype.J;Uc.prototype.unByKey=Uc.prototype.M;Wc.prototype.getClosestPoint=Wc.prototype.wb;Wc.prototype.getExtent=Wc.prototype.H;Wc.prototype.rotate=Wc.prototype.rotate;Wc.prototype.simplify=Wc.prototype.Cb;Wc.prototype.transform=Wc.prototype.kb;Wc.prototype.get=Wc.prototype.get;Wc.prototype.getKeys=Wc.prototype.N;Wc.prototype.getProperties=Wc.prototype.O;Wc.prototype.set=Wc.prototype.set;
Wc.prototype.setProperties=Wc.prototype.G;Wc.prototype.unset=Wc.prototype.R;Wc.prototype.changed=Wc.prototype.u;Wc.prototype.dispatchEvent=Wc.prototype.b;Wc.prototype.getRevision=Wc.prototype.K;Wc.prototype.on=Wc.prototype.I;Wc.prototype.once=Wc.prototype.L;Wc.prototype.un=Wc.prototype.J;Wc.prototype.unByKey=Wc.prototype.M;Tt.prototype.getFirstCoordinate=Tt.prototype.Ib;Tt.prototype.getLastCoordinate=Tt.prototype.Jb;Tt.prototype.getLayout=Tt.prototype.Kb;Tt.prototype.rotate=Tt.prototype.rotate;
Tt.prototype.getClosestPoint=Tt.prototype.wb;Tt.prototype.getExtent=Tt.prototype.H;Tt.prototype.simplify=Tt.prototype.Cb;Tt.prototype.get=Tt.prototype.get;Tt.prototype.getKeys=Tt.prototype.N;Tt.prototype.getProperties=Tt.prototype.O;Tt.prototype.set=Tt.prototype.set;Tt.prototype.setProperties=Tt.prototype.G;Tt.prototype.unset=Tt.prototype.R;Tt.prototype.changed=Tt.prototype.u;Tt.prototype.dispatchEvent=Tt.prototype.b;Tt.prototype.getRevision=Tt.prototype.K;Tt.prototype.on=Tt.prototype.I;
Tt.prototype.once=Tt.prototype.L;Tt.prototype.un=Tt.prototype.J;Tt.prototype.unByKey=Tt.prototype.M;Kn.prototype.getClosestPoint=Kn.prototype.wb;Kn.prototype.getExtent=Kn.prototype.H;Kn.prototype.rotate=Kn.prototype.rotate;Kn.prototype.simplify=Kn.prototype.Cb;Kn.prototype.transform=Kn.prototype.kb;Kn.prototype.get=Kn.prototype.get;Kn.prototype.getKeys=Kn.prototype.N;Kn.prototype.getProperties=Kn.prototype.O;Kn.prototype.set=Kn.prototype.set;Kn.prototype.setProperties=Kn.prototype.G;
Kn.prototype.unset=Kn.prototype.R;Kn.prototype.changed=Kn.prototype.u;Kn.prototype.dispatchEvent=Kn.prototype.b;Kn.prototype.getRevision=Kn.prototype.K;Kn.prototype.on=Kn.prototype.I;Kn.prototype.once=Kn.prototype.L;Kn.prototype.un=Kn.prototype.J;Kn.prototype.unByKey=Kn.prototype.M;nd.prototype.getFirstCoordinate=nd.prototype.Ib;nd.prototype.getLastCoordinate=nd.prototype.Jb;nd.prototype.getLayout=nd.prototype.Kb;nd.prototype.rotate=nd.prototype.rotate;nd.prototype.getClosestPoint=nd.prototype.wb;
nd.prototype.getExtent=nd.prototype.H;nd.prototype.simplify=nd.prototype.Cb;nd.prototype.transform=nd.prototype.kb;nd.prototype.get=nd.prototype.get;nd.prototype.getKeys=nd.prototype.N;nd.prototype.getProperties=nd.prototype.O;nd.prototype.set=nd.prototype.set;nd.prototype.setProperties=nd.prototype.G;nd.prototype.unset=nd.prototype.R;nd.prototype.changed=nd.prototype.u;nd.prototype.dispatchEvent=nd.prototype.b;nd.prototype.getRevision=nd.prototype.K;nd.prototype.on=nd.prototype.I;
nd.prototype.once=nd.prototype.L;nd.prototype.un=nd.prototype.J;nd.prototype.unByKey=nd.prototype.M;R.prototype.getFirstCoordinate=R.prototype.Ib;R.prototype.getLastCoordinate=R.prototype.Jb;R.prototype.getLayout=R.prototype.Kb;R.prototype.rotate=R.prototype.rotate;R.prototype.getClosestPoint=R.prototype.wb;R.prototype.getExtent=R.prototype.H;R.prototype.simplify=R.prototype.Cb;R.prototype.transform=R.prototype.kb;R.prototype.get=R.prototype.get;R.prototype.getKeys=R.prototype.N;
R.prototype.getProperties=R.prototype.O;R.prototype.set=R.prototype.set;R.prototype.setProperties=R.prototype.G;R.prototype.unset=R.prototype.R;R.prototype.changed=R.prototype.u;R.prototype.dispatchEvent=R.prototype.b;R.prototype.getRevision=R.prototype.K;R.prototype.on=R.prototype.I;R.prototype.once=R.prototype.L;R.prototype.un=R.prototype.J;R.prototype.unByKey=R.prototype.M;S.prototype.getFirstCoordinate=S.prototype.Ib;S.prototype.getLastCoordinate=S.prototype.Jb;S.prototype.getLayout=S.prototype.Kb;
S.prototype.rotate=S.prototype.rotate;S.prototype.getClosestPoint=S.prototype.wb;S.prototype.getExtent=S.prototype.H;S.prototype.simplify=S.prototype.Cb;S.prototype.transform=S.prototype.kb;S.prototype.get=S.prototype.get;S.prototype.getKeys=S.prototype.N;S.prototype.getProperties=S.prototype.O;S.prototype.set=S.prototype.set;S.prototype.setProperties=S.prototype.G;S.prototype.unset=S.prototype.R;S.prototype.changed=S.prototype.u;S.prototype.dispatchEvent=S.prototype.b;S.prototype.getRevision=S.prototype.K;
S.prototype.on=S.prototype.I;S.prototype.once=S.prototype.L;S.prototype.un=S.prototype.J;S.prototype.unByKey=S.prototype.M;T.prototype.getFirstCoordinate=T.prototype.Ib;T.prototype.getLastCoordinate=T.prototype.Jb;T.prototype.getLayout=T.prototype.Kb;T.prototype.rotate=T.prototype.rotate;T.prototype.getClosestPoint=T.prototype.wb;T.prototype.getExtent=T.prototype.H;T.prototype.simplify=T.prototype.Cb;T.prototype.transform=T.prototype.kb;T.prototype.get=T.prototype.get;T.prototype.getKeys=T.prototype.N;
T.prototype.getProperties=T.prototype.O;T.prototype.set=T.prototype.set;T.prototype.setProperties=T.prototype.G;T.prototype.unset=T.prototype.R;T.prototype.changed=T.prototype.u;T.prototype.dispatchEvent=T.prototype.b;T.prototype.getRevision=T.prototype.K;T.prototype.on=T.prototype.I;T.prototype.once=T.prototype.L;T.prototype.un=T.prototype.J;T.prototype.unByKey=T.prototype.M;U.prototype.getFirstCoordinate=U.prototype.Ib;U.prototype.getLastCoordinate=U.prototype.Jb;U.prototype.getLayout=U.prototype.Kb;
U.prototype.rotate=U.prototype.rotate;U.prototype.getClosestPoint=U.prototype.wb;U.prototype.getExtent=U.prototype.H;U.prototype.simplify=U.prototype.Cb;U.prototype.transform=U.prototype.kb;U.prototype.get=U.prototype.get;U.prototype.getKeys=U.prototype.N;U.prototype.getProperties=U.prototype.O;U.prototype.set=U.prototype.set;U.prototype.setProperties=U.prototype.G;U.prototype.unset=U.prototype.R;U.prototype.changed=U.prototype.u;U.prototype.dispatchEvent=U.prototype.b;U.prototype.getRevision=U.prototype.K;
U.prototype.on=U.prototype.I;U.prototype.once=U.prototype.L;U.prototype.un=U.prototype.J;U.prototype.unByKey=U.prototype.M;C.prototype.getFirstCoordinate=C.prototype.Ib;C.prototype.getLastCoordinate=C.prototype.Jb;C.prototype.getLayout=C.prototype.Kb;C.prototype.rotate=C.prototype.rotate;C.prototype.getClosestPoint=C.prototype.wb;C.prototype.getExtent=C.prototype.H;C.prototype.simplify=C.prototype.Cb;C.prototype.transform=C.prototype.kb;C.prototype.get=C.prototype.get;C.prototype.getKeys=C.prototype.N;
C.prototype.getProperties=C.prototype.O;C.prototype.set=C.prototype.set;C.prototype.setProperties=C.prototype.G;C.prototype.unset=C.prototype.R;C.prototype.changed=C.prototype.u;C.prototype.dispatchEvent=C.prototype.b;C.prototype.getRevision=C.prototype.K;C.prototype.on=C.prototype.I;C.prototype.once=C.prototype.L;C.prototype.un=C.prototype.J;C.prototype.unByKey=C.prototype.M;E.prototype.getFirstCoordinate=E.prototype.Ib;E.prototype.getLastCoordinate=E.prototype.Jb;E.prototype.getLayout=E.prototype.Kb;
E.prototype.rotate=E.prototype.rotate;E.prototype.getClosestPoint=E.prototype.wb;E.prototype.getExtent=E.prototype.H;E.prototype.simplify=E.prototype.Cb;E.prototype.transform=E.prototype.kb;E.prototype.get=E.prototype.get;E.prototype.getKeys=E.prototype.N;E.prototype.getProperties=E.prototype.O;E.prototype.set=E.prototype.set;E.prototype.setProperties=E.prototype.G;E.prototype.unset=E.prototype.R;E.prototype.changed=E.prototype.u;E.prototype.dispatchEvent=E.prototype.b;E.prototype.getRevision=E.prototype.K;
E.prototype.on=E.prototype.I;E.prototype.once=E.prototype.L;E.prototype.un=E.prototype.J;E.prototype.unByKey=E.prototype.M;jo.prototype.readFeatures=jo.prototype.Fa;ko.prototype.readFeatures=ko.prototype.Fa;ko.prototype.readFeatures=ko.prototype.Fa;Pe.prototype.get=Pe.prototype.get;Pe.prototype.getKeys=Pe.prototype.N;Pe.prototype.getProperties=Pe.prototype.O;Pe.prototype.set=Pe.prototype.set;Pe.prototype.setProperties=Pe.prototype.G;Pe.prototype.unset=Pe.prototype.R;Pe.prototype.changed=Pe.prototype.u;
Pe.prototype.dispatchEvent=Pe.prototype.b;Pe.prototype.getRevision=Pe.prototype.K;Pe.prototype.on=Pe.prototype.I;Pe.prototype.once=Pe.prototype.L;Pe.prototype.un=Pe.prototype.J;Pe.prototype.unByKey=Pe.prototype.M;xf.prototype.getMap=xf.prototype.i;xf.prototype.setMap=xf.prototype.setMap;xf.prototype.setTarget=xf.prototype.c;xf.prototype.get=xf.prototype.get;xf.prototype.getKeys=xf.prototype.N;xf.prototype.getProperties=xf.prototype.O;xf.prototype.set=xf.prototype.set;xf.prototype.setProperties=xf.prototype.G;
xf.prototype.unset=xf.prototype.R;xf.prototype.changed=xf.prototype.u;xf.prototype.dispatchEvent=xf.prototype.b;xf.prototype.getRevision=xf.prototype.K;xf.prototype.on=xf.prototype.I;xf.prototype.once=xf.prototype.L;xf.prototype.un=xf.prototype.J;xf.prototype.unByKey=xf.prototype.M;Ef.prototype.getMap=Ef.prototype.i;Ef.prototype.setMap=Ef.prototype.setMap;Ef.prototype.setTarget=Ef.prototype.c;Ef.prototype.get=Ef.prototype.get;Ef.prototype.getKeys=Ef.prototype.N;Ef.prototype.getProperties=Ef.prototype.O;
Ef.prototype.set=Ef.prototype.set;Ef.prototype.setProperties=Ef.prototype.G;Ef.prototype.unset=Ef.prototype.R;Ef.prototype.changed=Ef.prototype.u;Ef.prototype.dispatchEvent=Ef.prototype.b;Ef.prototype.getRevision=Ef.prototype.K;Ef.prototype.on=Ef.prototype.I;Ef.prototype.once=Ef.prototype.L;Ef.prototype.un=Ef.prototype.J;Ef.prototype.unByKey=Ef.prototype.M;Jf.prototype.getMap=Jf.prototype.i;Jf.prototype.setMap=Jf.prototype.setMap;Jf.prototype.setTarget=Jf.prototype.c;Jf.prototype.get=Jf.prototype.get;
Jf.prototype.getKeys=Jf.prototype.N;Jf.prototype.getProperties=Jf.prototype.O;Jf.prototype.set=Jf.prototype.set;Jf.prototype.setProperties=Jf.prototype.G;Jf.prototype.unset=Jf.prototype.R;Jf.prototype.changed=Jf.prototype.u;Jf.prototype.dispatchEvent=Jf.prototype.b;Jf.prototype.getRevision=Jf.prototype.K;Jf.prototype.on=Jf.prototype.I;Jf.prototype.once=Jf.prototype.L;Jf.prototype.un=Jf.prototype.J;Jf.prototype.unByKey=Jf.prototype.M;an.prototype.getMap=an.prototype.i;an.prototype.setMap=an.prototype.setMap;
an.prototype.setTarget=an.prototype.c;an.prototype.get=an.prototype.get;an.prototype.getKeys=an.prototype.N;an.prototype.getProperties=an.prototype.O;an.prototype.set=an.prototype.set;an.prototype.setProperties=an.prototype.G;an.prototype.unset=an.prototype.R;an.prototype.changed=an.prototype.u;an.prototype.dispatchEvent=an.prototype.b;an.prototype.getRevision=an.prototype.K;an.prototype.on=an.prototype.I;an.prototype.once=an.prototype.L;an.prototype.un=an.prototype.J;an.prototype.unByKey=an.prototype.M;
Af.prototype.getMap=Af.prototype.i;Af.prototype.setMap=Af.prototype.setMap;Af.prototype.setTarget=Af.prototype.c;Af.prototype.get=Af.prototype.get;Af.prototype.getKeys=Af.prototype.N;Af.prototype.getProperties=Af.prototype.O;Af.prototype.set=Af.prototype.set;Af.prototype.setProperties=Af.prototype.G;Af.prototype.unset=Af.prototype.R;Af.prototype.changed=Af.prototype.u;Af.prototype.dispatchEvent=Af.prototype.b;Af.prototype.getRevision=Af.prototype.K;Af.prototype.on=Af.prototype.I;
Af.prototype.once=Af.prototype.L;Af.prototype.un=Af.prototype.J;Af.prototype.unByKey=Af.prototype.M;fn.prototype.getMap=fn.prototype.i;fn.prototype.setMap=fn.prototype.setMap;fn.prototype.setTarget=fn.prototype.c;fn.prototype.get=fn.prototype.get;fn.prototype.getKeys=fn.prototype.N;fn.prototype.getProperties=fn.prototype.O;fn.prototype.set=fn.prototype.set;fn.prototype.setProperties=fn.prototype.G;fn.prototype.unset=fn.prototype.R;fn.prototype.changed=fn.prototype.u;fn.prototype.dispatchEvent=fn.prototype.b;
fn.prototype.getRevision=fn.prototype.K;fn.prototype.on=fn.prototype.I;fn.prototype.once=fn.prototype.L;fn.prototype.un=fn.prototype.J;fn.prototype.unByKey=fn.prototype.M;Cf.prototype.getMap=Cf.prototype.i;Cf.prototype.setMap=Cf.prototype.setMap;Cf.prototype.setTarget=Cf.prototype.c;Cf.prototype.get=Cf.prototype.get;Cf.prototype.getKeys=Cf.prototype.N;Cf.prototype.getProperties=Cf.prototype.O;Cf.prototype.set=Cf.prototype.set;Cf.prototype.setProperties=Cf.prototype.G;Cf.prototype.unset=Cf.prototype.R;
Cf.prototype.changed=Cf.prototype.u;Cf.prototype.dispatchEvent=Cf.prototype.b;Cf.prototype.getRevision=Cf.prototype.K;Cf.prototype.on=Cf.prototype.I;Cf.prototype.once=Cf.prototype.L;Cf.prototype.un=Cf.prototype.J;Cf.prototype.unByKey=Cf.prototype.M;kn.prototype.getMap=kn.prototype.i;kn.prototype.setMap=kn.prototype.setMap;kn.prototype.setTarget=kn.prototype.c;kn.prototype.get=kn.prototype.get;kn.prototype.getKeys=kn.prototype.N;kn.prototype.getProperties=kn.prototype.O;kn.prototype.set=kn.prototype.set;
kn.prototype.setProperties=kn.prototype.G;kn.prototype.unset=kn.prototype.R;kn.prototype.changed=kn.prototype.u;kn.prototype.dispatchEvent=kn.prototype.b;kn.prototype.getRevision=kn.prototype.K;kn.prototype.on=kn.prototype.I;kn.prototype.once=kn.prototype.L;kn.prototype.un=kn.prototype.J;kn.prototype.unByKey=kn.prototype.M;pn.prototype.getMap=pn.prototype.i;pn.prototype.setMap=pn.prototype.setMap;pn.prototype.setTarget=pn.prototype.c;pn.prototype.get=pn.prototype.get;pn.prototype.getKeys=pn.prototype.N;
pn.prototype.getProperties=pn.prototype.O;pn.prototype.set=pn.prototype.set;pn.prototype.setProperties=pn.prototype.G;pn.prototype.unset=pn.prototype.R;pn.prototype.changed=pn.prototype.u;pn.prototype.dispatchEvent=pn.prototype.b;pn.prototype.getRevision=pn.prototype.K;pn.prototype.on=pn.prototype.I;pn.prototype.once=pn.prototype.L;pn.prototype.un=pn.prototype.J;pn.prototype.unByKey=pn.prototype.M;
return OPENLAYERS.ol;
}));

View File

@@ -161,6 +161,22 @@ var swissCoord = ol.proj.transform([8.23, 46.86], 'EPSG:4326', 'EPSG:21781');
## Why is the order of a coordinate [lon,lat], and not [lat,lon]?
Because of two different and incompatible conventions. Latitude and longitude
are normally given in that order. Maps are 2D representations/projections
of the earth's surface, with coordinates expressed in the `x,y` grid of the
[Cartesian system](https://en.wikipedia.org/wiki/Cartesian_coordinate_system).
As they are by convention drawn with west on the left and north at the top,
this means that `x` represents longitude, and `y` latitude. As stated above,
OpenLayers is designed to handle all projections, but the default view is in
projected Cartesian coordinates. It would make no sense to have duplicate
functions to handle coordinates in both the Cartesian `x,y` and `lat,lon`
systems, so the degrees of latitude and longitude should be entered as though
they were Cartesian, in other words, they are `lon,lat`.
If you have difficulty remembering which way round it is, use the language code
for English, `en`, as a mnemonic: East before North.
#### A practical example
So you want to center your map on a certain place on the earth and obviously you
need to have its coordinates for this. Let's assume you want your map centered
on Schladming, a beautiful place in Austria. Head over to the wikipedia

View File

@@ -9,7 +9,7 @@ If you're eager to get your first OpenLayers 3 map on a page, dive into the [qui
For a more in-depth overview of OpenLayers 3 core concepts, check out the [tutorials](tutorials/).
Make sure to also check out the [OpenLayers 3 workshop](../../../ol3-workshop/).
Make sure to also check out the [OpenLayers 3 workshop](/workshop/).
Find additional reference material in the [API docs](../apidoc).

View File

@@ -31,11 +31,11 @@ Below you'll find a complete working example. Create a new file, copy in the co
target: 'map',
layers: [
new ol.layer.Tile({
source: new ol.source.MapQuest({layer: 'sat'})
source: new ol.source.OSM()
})
],
view: new ol.View({
center: ol.proj.transform([37.41, 8.82], 'EPSG:4326', 'EPSG:3857'),
center: ol.proj.fromLonLat([37.41, 8.82]),
zoom: 4
})
});
@@ -85,17 +85,17 @@ The map in the application is contained in a [`<div>` HTML element](http://en.wi
target: 'map',
layers: [
new ol.layer.Tile({
source: new ol.source.MapQuest({layer: 'sat'})
source: new ol.source.OSM()
})
],
view: new ol.View({
center: ol.proj.transform([37.41, 8.82], 'EPSG:4326', 'EPSG:3857'),
center: ol.proj.fromLonLat([37.41, 8.82]),
zoom: 4
})
});
```
With this JavaScript code, a map object is created with a MapQuest Open Aerial layer zoomed on the African East coast. Let's break this down:
With this JavaScript code, a map object is created with an OSM layer zoomed on the African East coast. Let's break this down:
The following line creates an OpenLayers `Map` object. Just by itself, this does nothing since there's no layers or interaction attached to it.
@@ -114,7 +114,7 @@ The `layers: [ ... ]` array is used to define the list of layers available in th
```js
layers: [
new ol.layer.Tile({
source: new ol.source.MapQuest({layer: 'sat'})
source: new ol.source.OSM()
})
]
```
@@ -125,9 +125,9 @@ The next part of the `Map` object is the `View`. The view allow to specify the c
```js
view: new ol.View({
center: ol.proj.transform([37.41, 8.82], 'EPSG:4326', 'EPSG:3857'),
center: ol.proj.fromLonLat([37.41, 8.82]),
zoom: 4
})
```
You will notice that the `center` specified is in lat/lon coordinates (EPSG:4326). Since the only layer we use is in Spherical Mercator projection (EPSG:3857), we can reproject them on the fly to be able to zoom the map on the right coordinates.
You will notice that the `center` specified is in lon/lat coordinates (EPSG:4326). Since the only layer we use is in Spherical Mercator projection (EPSG:3857), we can reproject them on the fly to be able to zoom the map on the right coordinates.

View File

@@ -160,16 +160,15 @@ The minimum config file looks like this:
"closure_entry_point": "app",
"externs": [
"node_modules/openlayers/externs/bingmaps.js",
"node_modules/openlayers/externs/cartodb.js",
"node_modules/openlayers/externs/closure-compiler.js",
"node_modules/openlayers/externs/esrijson.js",
"node_modules/openlayers/externs/geojson.js",
"node_modules/openlayers/externs/proj4js.js",
"node_modules/openlayers/externs/tilejson.js",
"node_modules/openlayers/externs/topojson.js"
],
"define": [
"goog.array.ASSUME_NATIVE_FUNCTIONS=true",
"goog.dom.ASSUME_STANDARDS_MODE=true",
"goog.json.USE_NATIVE_JSON=true",
"goog.DEBUG=false",
"ol.ENABLE_DOM=false",
"ol.ENABLE_WEBGL=false"
@@ -178,9 +177,6 @@ The minimum config file looks like this:
"node_modules/openlayers/externs/olx.js",
"node_modules/openlayers/externs/oli.js"
],
"jscomp_off": [
"unknownDefines"
],
"extra_annotation_name": [
"api", "observable"
],
@@ -216,16 +212,15 @@ Here is a version of `config.json` with more compilation checks enabled:
"closure_entry_point": "app",
"externs": [
"node_modules/openlayers/externs/bingmaps.js",
"node_modules/openlayers/externs/cartodb.js",
"node_modules/openlayers/externs/closure-compiler.js",
"node_modules/openlayers/externs/esrijson.js",
"node_modules/openlayers/externs/geojson.js",
"node_modules/openlayers/externs/proj4js.js",
"node_modules/openlayers/externs/tilejson.js",
"node_modules/openlayers/externs/topojson.js"
],
"define": [
"goog.array.ASSUME_NATIVE_FUNCTIONS=true",
"goog.dom.ASSUME_STANDARDS_MODE=true",
"goog.json.USE_NATIVE_JSON=true",
"goog.DEBUG=false",
"ol.ENABLE_DOM=false",
"ol.ENABLE_WEBGL=false"
@@ -235,42 +230,12 @@ Here is a version of `config.json` with more compilation checks enabled:
"node_modules/openlayers/externs/oli.js"
],
"jscomp_error": [
"accessControls",
"ambiguousFunctionDecl",
"checkEventfulObjectDisposal",
"checkRegExp",
"checkStructDictInheritance",
"checkTypes",
"checkVars",
"const",
"constantProperty",
"deprecated",
"duplicateMessage",
"es3",
"es5Strict",
"externsValidation",
"fileoverviewTags",
"globalThis",
"internetExplorerChecks",
"invalidCasts",
"misplacedTypeAnnotation",
"missingGetCssName",
"missingProperties",
"missingProvide",
"missingRequire",
"missingReturn",
"newCheckTypes",
"nonStandardJsDocs",
"suspiciousCode",
"strictModuleDepCheck",
"typeInvalidation",
"undefinedNames",
"undefinedVars",
"uselessCode",
"visibility"
"*"
],
"jscomp_off": [
"unknownDefines"
"unknownDefines",
"lintChecks",
"analyzerChecks"
],
"extra_annotation_name": [
"api", "observable"
@@ -313,7 +278,7 @@ directory:
```
Note that the page includes a `script` tag referencing the `app.js` file,
which is the file resuted from the compilation.
which is the file resulting from the compilation.
You are done!

View File

@@ -13,7 +13,7 @@ This particular tutorial explains how to create custom builds of OpenLayers 3.
## Requirements
OpenLayers 3's build tools use Node and Java, so you need to have Node and Java installed on your machine. You can run `node --version` and `java -version` to test that Node and Java are installed, respectively.
OpenLayers 3's build tools use Node and Java, so you need to have Node and Java installed on your machine. You can run `node --version` and `java -version` to test that Node and Java are installed, respectively. See [developing guide](https://github.com/openlayers/ol3/blob/master/DEVELOPING.md) for minimum version numbers required.
## Download OpenLayers
@@ -60,19 +60,12 @@ Creating a custom build requires writing a build configuration file. The format
"externs/topojson.js"
],
"define": [
"goog.array.ASSUME_NATIVE_FUNCTIONS=true",
"goog.dom.ASSUME_STANDARDS_MODE=true",
"goog.json.USE_NATIVE_JSON=true",
"goog.DEBUG=false"
],
"jscomp_off": [
"unknownDefines"
],
"extra_annotation_name": [
"api", "observable"
],
"compilation_level": "ADVANCED_OPTIMIZATIONS",
"use_types_for_optimization": true,
"compilation_level": "ADVANCED",
"manage_closure_dependencies": true
}
}
@@ -180,7 +173,7 @@ The Closure documentation explains that "externs" are for external names used in
### Other compiler options
There are a couple of other compiler options in the config file above. `manage_closure_dependencies` should always be used. `use_types_for_optimization` should be used for better compression rates.
There are a couple of other compiler options in the config file above. `manage_closure_dependencies` should always be used.
You can specify any of the other compiler options here as needed, such as the renaming reports, output manifest, or source maps. There is a full list of available options in [closure-util](https://github.com/openlayers/closure-util/blob/master/compiler-options.txt).
@@ -194,16 +187,19 @@ Now let's try a more complicated example: [`heatmaps-earthquakes`](http://openla
{
"exports": [
"ol.layer.Heatmap",
"ol.source.KML",
"ol.source.Vector",
"ol.format.KML",
"ol.layer.Heatmap#getSource",
"ol.source.KML#on",
"ol.source.Vector#on",
"ol.source.VectorEvent#feature",
"ol.Feature#get",
"ol.Feature#set",
"ol.layer.Tile",
"ol.source.Stamen",
"ol.Map",
"ol.View"
"ol.View",
"ol.layer.Heatmap#setRadius",
"ol.layer.Heatmap#setBlur"
],
"compile": {
"externs": [
@@ -215,11 +211,9 @@ Now let's try a more complicated example: [`heatmaps-earthquakes`](http://openla
"ol.ENABLE_WEBGL=false",
"ol.ENABLE_PROJ4JS=false",
"ol.ENABLE_IMAGE=false",
"goog.dom.ASSUME_STANDARDS_MODE=true",
"goog.DEBUG=false"
],
"compilation_level": "ADVANCED_OPTIMIZATIONS",
"use_types_for_optimization": true,
"compilation_level": "ADVANCED",
"manage_closure_dependencies": true
}
}
@@ -229,6 +223,10 @@ The exports are given here in the order in which they occur in the `heatmaps-ear
As this example uses a vector layer it is necessary to remove `"ol.ENABLE_VECTOR=false"` in the `define` section of the configuration.
## Maintaining the code
If you installed OpenLayers from the Node package, you can use `npm` to upgrade to the latest version. If you cloned the Github repo, simply pulling in the latest code may not be enough, as some of the packages used, for example, the compiler, may need upgrading too. Do this by using `npm install` rather than `npm update`.
## Conclusion
This tutorial should have given you the information you need to create custom builds, i.e. builds tailored to your application. See the [tasks readme](https://github.com/openlayers/ol3/tree/master/tasks/readme.md) for more information on the build scripts and the properties you can use in the build configuration file.

View File

@@ -10,3 +10,4 @@ layout: doc.hbs
* [Create Custom Builds](custom-builds.html)
* [Bundle Application and OpenLayers using Browserify](browserify.html)
* [Compile Application and OpenLayers together](closure.html)
* [Raster Reprojection](raster-reprojection.html)

View File

@@ -24,7 +24,7 @@ Although Closure library functions are widely used within OL3, none of them are
Unlike in, say, Node, where a module's exports are fixed in the source, with Closure Compiler, exports can be defined at compile time. This makes it easy to create builds that are customized to the needs of a particular site or application: a __custom build__ only exports those properties and methods needed by the site or application. As the full build is large, and will probably become larger as new features are added to the API, it's recommended that sites create a custom build for production software.
## Renderers and Browser Support
The library currently includes three renderers: Canvas, DOM, and WebGL. All three support raster data from tile/image servers, but only the Canvas renderer currently supports vector data. This means that only those browsers that [support Canvas](http://caniuse.com/canvas) can handle vector data. In particular, this excludes Internet Explorer versions before 9, though there is some support for those in the DOM renderer. Clearly, the WebGL renderer can only be used on those devices and browsers supporting WebGL.
The library currently includes three renderers: Canvas, DOM, and WebGL. All three support both raster data from tile/image servers, and vector data; WebGL however only supports Point vectors and does not support labels. Clearly only those browsers that [support Canvas](http://caniuse.com/canvas) can use the Canvas renderer. Equally, the WebGL renderer can only be used on those devices and [browsers](http://caniuse.com/webgl) that support WebGL. Internet Explorer versions before 9 are not supported at all.
The library is intended for use on both desktop/laptop and mobile devices.

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 127 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View File

@@ -0,0 +1,132 @@
---
title: Raster Reprojection
layout: doc.hbs
---
# Raster Reprojection
OpenLayers 3 has an ability to display raster data from WMS, WMTS, static images and many other sources in a different coordinate system than delivered from the server.
Transformation of the map projections of the image happens directly in a web browser.
The view in any Proj4js supported coordinate reference system is possible and previously incompatible layers can now be combined and overlaid.
# Usage
The API usage is very simple. Just specify proper projection (using [EPSG](http://epsg.io) code) on `ol.View`:
``` javascript
var map = new ol.Map({
target: 'map',
view: new ol.View({
projection: 'EPSG:3857', //HERE IS THE VIEW PROJECTION
center: [0, 0],
zoom: 2
}),
layers: [
new ol.layer.Tile({
source: new ol.source.TileWMS({
projection: 'EPSG:4326', //HERE IS THE DATA SOURCE PROJECTION
url: 'http://demo.boundlessgeo.com/geoserver/wms',
params: {
'LAYERS': 'ne:NE1_HR_LC_SR_W_DR'
}
})
})
]
});
```
If a source (based on `ol.source.TileImage` or `ol.source.Image`) has a projection different from the current `ol.View`s projection then the reprojection happens automatically under the hood.
### Examples
- [Raster reprojection demo](http://openlayers.org/en/master/examples/reprojection.html)
- [OpenStreetMap to WGS84 reprojection](http://openlayers.org/en/master/examples/reprojection-wgs84.html)
- [Reprojection with EPSG.io database search](http://openlayers.org/en/master/examples/reprojection-by-code.html)
- [Image reprojection](http://openlayers.org/en/master/examples/reprojection-image.html)
### Custom projection
The easiest way to use a custom projection is to add the [Proj4js](http://proj4js.org/) library to your project and then define the projection using a proj4 definition string.
Following example shows definition of a [British National Grid](http://epsg.io/27700):
``` html
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/proj4js/2.3.14/proj4.js"></script>
```
``` javascript
proj4.defs('EPSG:27700', '+proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 ' +
'+x_0=400000 +y_0=-100000 +ellps=airy ' +
'+towgs84=446.448,-125.157,542.06,0.15,0.247,0.842,-20.489 ' +
'+units=m +no_defs');
var proj27700 = ol.proj.get('EPSG:27700');
proj27700.setExtent([0, 0, 700000, 1300000]);
```
### Change of the view projection
To switch the projection used to display the map you have to set a new `ol.View` with selected projection on the `ol.Map`:
``` javascript
map.setView(new ol.View({
projection: 'EPSG:27700',
center: [400000, 650000],
zoom: 4
}));
```
## TileGrid and Extents
When reprojection is needed, new tiles (in the target projection) are under the hood created from the original source tiles.
The TileGrid of the reprojected tiles is by default internally constructed using `ol.tilegrid.getForProjection(projection)`.
The projection should have extent defined (see above) for this to work properly.
Alternatively, a custom target TileGrid can be constructed manually and set on the source instance using `ol.source.TileImage#setTileGridForProjection(projection, tilegrid)`.
This TileGrid will then be used when reprojecting to the specified projection instead of creating the default one.
In certain cases, this can be used to optimize performance (by tweaking tile sizes) or visual quality (by specifying resolutions).
# How it works
The reprojection process is based on triangles -- the target raster is divided into a limited number of triangles with vertices transformed using `ol.proj` capabilities ([proj4js](http://proj4js.org/) is usually utilized to define custom transformations).
The reprojection of pixels inside the triangle is approximated with an affine transformation (with rendering hardware-accelerated by the canvas 2d context):
<img src="raster-reprojection-resources/how-it-works.jpg" alt="How it works" width="600" />
This way we can support a wide range of projections from proj4js (or even custom transformation functions) on almost any hardware (with canvas 2d support) with a relatively small number of actual transformation calculations.
The precision of the reprojection is then limited by the number of triangles.
The reprojection process preserves transparency on the raster data supplied from the source (png or gif) and the gaps and no-data pixels generated by reprojection are automatically transparent.
###Dynamic triangulation
The above image above shows a noticeable error (especially on the edges) when the original image (left; EPSG:27700) is transformed with only a limited number of triangles (right; EPSG:3857).
The error can be minimized by increasing the number of triangles used.
Since some transformations require a more detail triangulation network, the dynamic triangulation process automatically measures reprojection error and iteratively subdivides to meet a specific error threshold:
<img src="raster-reprojection-resources/iterative-triangulation.png" alt="Iterative triangulation" width="600" />
For debugging, rendering of the reprojection edges can be enabled by `ol.source.TileImage#setRenderReprojectionEdges(true)`.
# Advanced
### Disabling reprojection
In case you are creating a custom build of OpenLayers and do not need the reprojection code, you can reduce the build size by setting `ol.ENABLE_RASTER_REPROJECTION` to `false`, which completely disables the reprojection support.
See [Custom builds](custom-builds.html#defines) tutorial on how to do this.
### Triangulation precision threshold
The default [triangulation error threshold](#dynamic-triangulation) in pixels is given by `ol.DEFAULT_RASTER_REPROJECTION_ERROR_THRESHOLD` (0.5 pixel).
In case a different threshold needs to be defined for different sources, the `reprojectionErrorThreshold` option can be passed when constructing the tile image source.
###Limiting visibility of reprojected map by extent
The reprojection algorithm uses inverse transformation (from *view projection* to *data projection*).
For certain coordinate systems this can result in a "double occurrence" of the source data on a map.
For example, when reprojecting a map of Switzerland from EPSG:21781 to EPSG:3857, it is displayed twice: once at the proper place in Europe, but also in the Pacific Ocean near New Zealand, on the opposite side of the globe.
<img src="raster-reprojection-resources/double-occurrence.jpg" alt="Double occurrence of a reprojected map" width="600" />
Although this is mathematically correct behavior of the inverse transformation, visibility of the layer on multiple places is not expected by users.
A possible general solution would be to calculate the forward transformation for every vertex as well - but this would significantly decrease performance (especially for computationally expensive transformations).
Therefore a recommended workaround is to define a proper visibility extent on the `ol.layer.Tile` in the view projection.
Setting such a limit is demonstrated in the [reprojection demo example](http://openlayers.org/en/master/examples/reprojection.html).
### Resolution calculation
When determining source tiles to load, the ideal source resolution needs to be calculated.
The `ol.reproj.calculateSourceResolution(sourceProj, targetProj, targetCenter, targetResolution)` function calculates the ideal value in order to achieve pixel mapping as close as possible to 1:1 during reprojection, which is then used to select proper zoom level from the source.
It is, however, generally not practical to use the same source zoom level for the whole target zoom level -- different projections can have significantly different resolutions in different parts of the world (e.g. polar regions in EPSG:3857 vs EPSG:4326) and enforcing a single resolution for the whole zoom level would result in some tiles being scaled up/down, possibly requiring a huge number of source tiles to be loaded.
Therefore, the resolution mapping is calculated separately for each reprojected tile (in the middle of the tile extent).

16
examples/.eslintrc Normal file
View File

@@ -0,0 +1,16 @@
{
"globals": {
"$": false,
"arc": false,
"common": false,
"createMapboxStreetsV6Style": false,
"d3": false,
"jsPDF": false,
"jsts": false,
"topojson": false,
"turf": false
},
"rules": {
"no-unused-vars": [2, {"varsIgnorePattern": "^map"}]
}
}

View File

@@ -14,3 +14,6 @@ a.skiplink:focus {
background-color: #fff;
padding: 0.3em;
}
#map:focus {
outline: #4A74A8 solid 0.15em;
}

View File

@@ -1,6 +1,6 @@
---
template: example.html
title: Accessibility example
layout: example.html
title: Accessible Map
shortdesc: Example of an accessible map.
docs: >
This page's `map` element has its `tabindex` attribute set to `"0"`, that makes it focusable. To focus the map element you can either navigate to it using the "tab" key or use the skip link. When the `map` element is focused the + and - keys can be used to zoom in and out and the arrow keys can be used to pan.
@@ -10,11 +10,7 @@ docs: >
tags: "accessibility, tabindex"
---
<div class="row-fluid">
<div class="span12">
<a class="skiplink" href="#map">Go to map</a>
<div id="map" class="map" tabindex="0"></div>
<button id="zoom-out">Zoom out</button>
<button id="zoom-in">Zoom in</button>
</div>
</div>
<a class="skiplink" href="#map">Go to map</a>
<div id="map" class="map" tabindex="0"></div>
<button id="zoom-out">Zoom out</button>
<button id="zoom-in">Zoom in</button>

View File

@@ -1,27 +1,19 @@
---
template: example.html
title: Animation example
layout: example.html
title: View Animation
shortdesc: Demonstrates animated pan, zoom, and rotation.
docs: >
This example shows how to use the beforeRender function on the Map to run one
or more animations.
tags: "animation"
---
<div class="row-fluid">
<div class="span12">
<div id="map" class="map"></div>
</div>
</div>
<div class="row-fluid">
<div class="span12">
<button id="rotate-left"><i class="icon-arrow-left"></i></button>
<button id="rotate-right"><i class="icon-arrow-right"></i></button>
<button id="rotate-around-rome">Rotate around Rome</button>
<button id="pan-to-london">Pan to London</button>
<button id="elastic-to-moscow">Elastic to Moscow</button>
<button id="bounce-to-istanbul">Bounce to Istanbul</button>
<button id="spin-to-rome">Spin to Rome</button>
<button id="fly-to-bern">Fly to Bern</button>
<button id="spiral-to-madrid">Spiral to Madrid</button>
</div>
</div>
<div id="map" class="map"></div>
<button id="rotate-left" title="Rotate clockwise"></button>
<button id="rotate-right" title="Rotate counterclockwise"></button>
<button id="rotate-around-rome">Rotate around Rome</button>
<button id="pan-to-london">Pan to London</button>
<button id="elastic-to-moscow">Elastic to Moscow</button>
<button id="bounce-to-istanbul">Bounce to Istanbul</button>
<button id="spin-to-rome">Spin to Rome</button>
<button id="fly-to-bern">Fly to Bern</button>
<button id="spiral-to-madrid">Spiral to Madrid</button>

View File

@@ -0,0 +1,11 @@
---
layout: example.html
title: Image ArcGIS MapServer
shortdesc: Example of an image ArcGIS layer.
docs: >
This example shows how to use a dynamic ArcGIS REST MapService.
This source type supports Map and Image Services. For dyamic ArcGIS
services.
tags: arcgis, image, dynamiclayer"
---
<div id="map" class="map"></div>

30
examples/arcgis-image.js Normal file
View File

@@ -0,0 +1,30 @@
goog.require('ol.Map');
goog.require('ol.View');
goog.require('ol.layer.Tile');
goog.require('ol.layer.Image');
goog.require('ol.source.OSM');
goog.require('ol.source.ImageArcGISRest');
var url = 'http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/' +
'Specialty/ESRI_StateCityHighway_USA/MapServer';
var layers = [
new ol.layer.Tile({
source: new ol.source.OSM()
}),
new ol.layer.Image({
source: new ol.source.ImageArcGISRest({
ratio: 1,
params: {},
url: url
})
})
];
var map = new ol.Map({
layers: layers,
target: 'map',
view: new ol.View({
center: [-10997148, 4569099],
zoom: 4
})
});

View File

@@ -1,6 +1,6 @@
---
template: example.html
title: Tiled ArcGIS MapServer example
layout: example.html
title: Tiled ArcGIS MapServer
shortdesc: Example of a tiled ArcGIS layer.
docs: >
This example shows how to use an ArcGIS REST MapService as tiles.
@@ -9,8 +9,4 @@ docs: >
<code>ol.source.XYZ</code> instead.
tags: arcgis, tile, tilelayer"
---
<div class="row-fluid">
<div class="span12">
<div id="map" class="map"></div>
</div>
</div>
<div id="map" class="map"></div>

View File

@@ -1,7 +1,7 @@
goog.require('ol.Map');
goog.require('ol.View');
goog.require('ol.layer.Tile');
goog.require('ol.source.MapQuest');
goog.require('ol.source.OSM');
goog.require('ol.source.TileArcGISRest');
var url = 'http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/' +
@@ -9,7 +9,7 @@ var url = 'http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/' +
var layers = [
new ol.layer.Tile({
source: new ol.source.MapQuest({layer: 'sat'})
source: new ol.source.OSM()
}),
new ol.layer.Tile({
extent: [-13884991, 2870341, -7455066, 6338219],

View File

@@ -1,6 +1,6 @@
---
template: example.html
title: Attributions example
layout: example.html
title: Attributions
shortdesc: Example of a attributions visibily change on map resize, to collapse them on small maps.
docs: >
When the map gets too small because of a resize, the attribution will be collapsed.
@@ -8,8 +8,4 @@ docs: >
of the map gets smaller than 600 pixels.
tags: "attributions, openstreetmap"
---
<div class="row-fluid">
<div class="span12">
<div id="map" class="map"></div>
</div>
</div>
<div id="map" class="map"></div>

View File

@@ -14,7 +14,7 @@ var map = new ol.Map({
source: new ol.source.OSM()
})
],
controls: ol.control.defaults({ attribution: false }).extend([attribution]),
controls: ol.control.defaults({attribution: false}).extend([attribution]),
renderer: common.getRendererFromQueryString(),
target: 'map',
view: new ol.View({

View File

@@ -1,20 +1,18 @@
---
template: example.html
title: Bing Maps example
layout: example.html
title: Bing Maps
shortdesc: Example of a Bing Maps layer.
docs: >
<p>When the Bing Maps tile service doesn't have tiles for a given resolution and region it returns "placeholder" tiles indicating that. Zoom the map beyond level 19 to see the "placeholder" tiles. If you want OpenLayers to display stretched tiles in place of "placeholder" tiles beyond zoom level 19 then set <code>maxZoom</code> to <code>19</code> in the options passed to <code>ol.source.BingMaps</code>.</p>
tags: "bing, bing-maps"
cloak:
AkGbxXx6tDWf1swIhPJyoAVp06H0s0gDTYslNWWHZ6RoPqMpB9ld5FY1WutX8UoF: Your Bing Maps Key from http://www.bingmapsportal.com/ here
---
<div class="row-fluid">
<div class="span12">
<div id="map" class="map"></div>
<select id="layer-select">
<option value="Aerial">Aerial</option>
<option value="AerialWithLabels" selected>Aerial with labels</option>
<option value="Road">Road</option>
<option value="collinsBart">Collins Bart</option>
<option value="ordnanceSurvey">Ordnance Survey</option>
</select>
</div>
</div>
<div id="map" class="map"></div>
<select id="layer-select">
<option value="Aerial">Aerial</option>
<option value="AerialWithLabels" selected>Aerial with labels</option>
<option value="Road">Road</option>
<option value="collinsBart">Collins Bart</option>
<option value="ordnanceSurvey">Ordnance Survey</option>
</select>

View File

@@ -18,7 +18,7 @@ for (i = 0, ii = styles.length; i < ii; ++i) {
visible: false,
preload: Infinity,
source: new ol.source.BingMaps({
key: 'Ak-dzM4wZjSqTlzveKz5u0d4IQ4bRzVI309GxmkgSVr1ewS6iPSrOvOKhA-CJlm3',
key: 'AkGbxXx6tDWf1swIhPJyoAVp06H0s0gDTYslNWWHZ6RoPqMpB9ld5FY1WutX8UoF',
imagerySet: styles[i]
// use maxZoom 19 to see stretched tiles instead of the BingMaps
// "no photos at this zoom level" tiles

View File

@@ -1,6 +1,6 @@
---
template: example.html
title: Blend modes example
layout: example.html
title: Blend Modes
shortdesc: Shows how to change the canvas compositing / blending mode in post- and precompose eventhandlers.
docs: >
<p>This example shows how to change the canvas compositing / blending mode in
@@ -20,57 +20,49 @@ docs: >
checkboxes.</p>
tags: "blendmode, blend-mode, blend mode, blendingmode, blending-mode, blending mode, composition, compositing, canvas, vector"
---
<div class="row-fluid">
<div class="span12">
<div id="map" class="map"></div>
</div>
</div>
<div class="row-fluid">
<div class="span12">
<form class="form-horizontal">
<label>
<select id="blend-mode" class="form-control">
<option value="source-over">source-over (default)</option>
<option>source-in</option>
<option>source-out</option>
<option>source-atop</option>
<option>destination-over</option>
<option>destination-in</option>
<option>destination-out</option>
<option>destination-atop</option>
<option>lighter</option>
<option>copy</option>
<option>xor</option>
<option>multiply</option>
<option>screen</option>
<option>overlay</option>
<option>darken</option>
<option>lighten</option>
<option>color-dodge</option>
<option>color-burn</option>
<option>hard-light</option>
<option>soft-light</option>
<option selected>difference</option>
<option>exclusion</option>
<option>hue</option>
<option>saturation</option>
<option>color</option>
<option>luminosity</option>
</select>
Canvas compositing / blending mode
</label>
<label>
<input type="checkbox" id="affect-red" checked>
Red circle affected
</label>
<label>
<input type="checkbox" id="affect-green" checked>
Green circle affected
</label>
<label>
<input type="checkbox" id="affect-blue" checked>
Blue circle affected
</label>
</form>
</div>
</div>
<div id="map" class="map"></div>
<form class="form-horizontal">
<label>
<select id="blend-mode" class="form-control">
<option value="source-over">source-over (default)</option>
<option>source-in</option>
<option>source-out</option>
<option>source-atop</option>
<option>destination-over</option>
<option>destination-in</option>
<option>destination-out</option>
<option>destination-atop</option>
<option>lighter</option>
<option>copy</option>
<option>xor</option>
<option>multiply</option>
<option>screen</option>
<option>overlay</option>
<option>darken</option>
<option>lighten</option>
<option>color-dodge</option>
<option>color-burn</option>
<option>hard-light</option>
<option>soft-light</option>
<option selected>difference</option>
<option>exclusion</option>
<option>hue</option>
<option>saturation</option>
<option>color</option>
<option>luminosity</option>
</select>
Canvas compositing / blending mode
</label>
<label>
<input type="checkbox" id="affect-red" checked>
Red circle affected
</label>
<label>
<input type="checkbox" id="affect-green" checked>
Green circle affected
</label>
<label>
<input type="checkbox" id="affect-blue" checked>
Blue circle affected
</label>
</form>

View File

@@ -85,8 +85,13 @@ var map = new ol.Map({
})
});
// Get the form elements and bind the listeners
var select = document.getElementById('blend-mode');
var affectRed = document.getElementById('affect-red');
var affectGreen = document.getElementById('affect-green');
var affectBlue = document.getElementById('affect-blue');
// Various helper methods and event handlers
/**
* This method sets the globalCompositeOperation to the value of the select
* field and it is bound to the precompose event of the layers.
@@ -154,12 +159,6 @@ var affectLayerClicked = function() {
};
// Get the form elements and bind the listeners
var select = document.getElementById('blend-mode');
var affectRed = document.getElementById('affect-red');
var affectGreen = document.getElementById('affect-green');
var affectBlue = document.getElementById('affect-blue');
// Rerender map when blend mode changes
select.addEventListener('change', function() {
map.render();

View File

@@ -0,0 +1,4 @@
.ol-dragbox {
background-color: rgba(255,255,255,0.4);
border-color: rgba(100,150,0,1);
}

View File

@@ -1,20 +1,12 @@
---
template: example.html
title: Box selection example
layout: example.html
title: Box Selection
shortdesc: Using a DragBox interaction to select features.
docs: >
<p>This example shows how to use a <code>DragBox</code> interaction to select features. Selected features are added
to the feature overlay of a select interaction (<code>ol.interaction.Select</code>) for highlighting.</p>
<p>Use <code>SHIFT+drag</code> to draw boxes.</p>
<p>Use <code>Ctrl+Drag</code> (<code>Command+Drag</code> on Mac) to draw boxes.</p>
tags: "DragBox, feature, selection, box"
---
<div class="row-fluid">
<div class="span12">
<div id="map" class="map"></div>
</div>
<div class="span4 offset4 pull-right">
<div id="info" class="alert alert-success">
&nbsp;
</div>
</div>
</div>
<div id="map" class="map"></div>
<div id="info">No countries selected</div>

View File

@@ -8,8 +8,6 @@ goog.require('ol.layer.Tile');
goog.require('ol.layer.Vector');
goog.require('ol.source.OSM');
goog.require('ol.source.Vector');
goog.require('ol.style.Stroke');
goog.require('ol.style.Style');
var vectorSource = new ol.source.Vector({
@@ -43,19 +41,14 @@ var selectedFeatures = select.getFeatures();
// a DragBox interaction used to select features by drawing boxes
var dragBox = new ol.interaction.DragBox({
condition: ol.events.condition.shiftKeyOnly,
style: new ol.style.Style({
stroke: new ol.style.Stroke({
color: [0, 0, 255, 1]
})
})
condition: ol.events.condition.platformModifierKeyOnly
});
map.addInteraction(dragBox);
var infoBox = document.getElementById('info');
dragBox.on('boxend', function(e) {
dragBox.on('boxend', function() {
// features that intersect the box are added to the collection of
// selected features, and their names are displayed in the "info"
// div
@@ -71,7 +64,7 @@ dragBox.on('boxend', function(e) {
});
// clear selection when drawing a new box and when clicking on the map
dragBox.on('boxstart', function(e) {
dragBox.on('boxstart', function() {
selectedFeatures.clear();
infoBox.innerHTML = '&nbsp;';
});

View File

@@ -1,7 +0,0 @@
#reset-brightness {
min-width: 138px;
}
#reset-contrast {
min-width: 120px;
}

View File

@@ -1,27 +0,0 @@
---
template: example.html
title: Brightness/contrast example
shortdesc: Example of brightness/contrast control on the client (WebGL only).
docs: >
This example shows how to control brightness/contrast on the client,
the example is limited to WebGL.
tags: "brightness, contrast, webgl"
---
<div class="row-fluid">
<div class="span12">
<div id="map" class="map"></div>
<div id="no-webgl" class="alert alert-error" style="display: none">
This example requires a browser that supports <a href="http://get.webgl.org/">WebGL</a>.
</div>
<div class="btn-group">
<button id="increase-brightness"><i class="icon-plus"></i></button>
<button id="reset-brightness">Brightness</button>
<button id="decrease-brightness"><i class="icon-minus"></i></button>
</div>
<div class="btn-group">
<button id="increase-contrast"><i class="icon-plus"></i></button>
<button id="reset-contrast">Contrast</button>
<button id="decrease-contrast"><i class="icon-minus"></i></button>
</div>
</div>
</div>

View File

@@ -1,75 +0,0 @@
goog.require('ol.Map');
goog.require('ol.View');
goog.require('ol.has');
goog.require('ol.layer.Tile');
goog.require('ol.source.MapQuest');
function setResetBrightnessButtonHTML() {
resetBrightness.innerHTML = 'Brightness (' +
layer.getBrightness().toFixed(3) + ')';
}
function setResetContrastButtonHTML() {
resetContrast.innerHTML = 'Contrast (' + layer.getContrast().toFixed(3) + ')';
}
if (!ol.has.WEBGL) {
var info = document.getElementById('no-webgl');
/**
* display error message
*/
info.style.display = '';
} else {
var layer = new ol.layer.Tile({
source: new ol.source.MapQuest({layer: 'sat'})
});
var map = new ol.Map({
layers: [layer],
renderer: 'webgl',
target: 'map',
view: new ol.View({
center: [0, 0],
zoom: 2
})
});
var increaseBrightness = document.getElementById('increase-brightness');
var resetBrightness = document.getElementById('reset-brightness');
var decreaseBrightness = document.getElementById('decrease-brightness');
setResetBrightnessButtonHTML();
increaseBrightness.addEventListener('click', function() {
layer.setBrightness(Math.min(layer.getBrightness() + 0.125, 1));
setResetBrightnessButtonHTML();
}, false);
resetBrightness.addEventListener('click', function() {
layer.setBrightness(0);
setResetBrightnessButtonHTML();
}, false);
decreaseBrightness.addEventListener('click', function() {
layer.setBrightness(Math.max(layer.getBrightness() - 0.125, -1));
setResetBrightnessButtonHTML();
}, false);
var increaseContrast = document.getElementById('increase-contrast');
var resetContrast = document.getElementById('reset-contrast');
var decreaseContrast = document.getElementById('decrease-contrast');
setResetContrastButtonHTML();
increaseContrast.addEventListener('click', function() {
layer.setContrast(layer.getContrast() + 0.125);
setResetContrastButtonHTML();
}, false);
resetContrast.addEventListener('click', function() {
layer.setContrast(1);
setResetContrastButtonHTML();
}, false);
decreaseContrast.addEventListener('click', function() {
layer.setContrast(Math.max(layer.getContrast() - 0.125, 0));
setResetContrastButtonHTML();
}, false);
}

View File

@@ -1,4 +1,3 @@
.tooltip-inner {
white-space: nowrap;
}

View File

@@ -1,13 +1,13 @@
---
template: example.html
title: Custom tooltips example
layout: example.html
title: Custom Tooltips
shortdesc: This example shows how to customize the buttons tooltips with Bootstrap.
docs: >
This example shows how to customize the buttons tooltips with <a href="http://getbootstrap.com/javascript/#tooltips">Bootstrap</a>.
tags: "custom, tooltip"
resources:
- https://code.jquery.com/jquery-2.2.3.min.js
- https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css
- https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js
---
<div class="row-fluid">
<div class="span12">
<div id="map" class="map"></div>
</div>
</div>
<div id="map" class="map"></div>

View File

@@ -1,14 +1,13 @@
---
template: example.html
title: Canvas tiles example
layout: example.html
title: Canvas Tiles
shortdesc: Renders tiles with coordinates for debugging.
docs: >
<p>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).</p>
The black grid tiles are generated on the client with an HTML5 canvas. The
displayed tile coordinates are OpenLayers tile coordinates. These increase
from bottom to top, but standard XYZ tiling scheme coordinates increase from
top to bottom. To calculate the `y` for a standard XYZ tile coordinate, use
`-y - 1`.
tags: "layers, openstreetmap, canvas"
---
<div class="row-fluid">
<div class="span12">
<div id="map" class="map"></div>
</div>
</div>
<div id="map" class="map"></div>

View File

@@ -7,15 +7,16 @@ goog.require('ol.source.OSM');
goog.require('ol.source.TileDebug');
var osmSource = new ol.source.OSM();
var map = new ol.Map({
layers: [
new ol.layer.Tile({
source: new ol.source.OSM()
source: osmSource
}),
new ol.layer.Tile({
source: new ol.source.TileDebug({
projection: 'EPSG:3857',
tileGrid: ol.tilegrid.createXYZ({maxZoom: 22})
tileGrid: osmSource.getTileGrid()
})
})
],

Some files were not shown because too many files have changed in this diff Show More