Compare commits

..

206 Commits

Author SHA1 Message Date
É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
É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
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
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
Julien Enselme
b66a114873 Add test to check that Style is not added a feature property 2015-07-13 17:05:08 +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
É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
148 changed files with 2153 additions and 1574 deletions

View File

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

View File

@@ -7,7 +7,6 @@ env:
- DISPLAY=:99.0
before_install:
- "pip install -r requirements.txt"
- "npm install -g npm && npm install"
before_script:
@@ -19,3 +18,7 @@ script: "make ci"
after_success:
- "make test-coverage"
- "cat coverage/lcov.info | ./node_modules/.bin/coveralls"
branches:
only:
- master

View File

@@ -171,7 +171,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
@@ -188,13 +188,13 @@ build/timestamps/check-%-timestamp: $(BUILD_HOSTED)/examples/%.html \
build/timestamps/check-requires-timestamp: $(SRC_JS) $(EXAMPLES_JS) \
$(SRC_SHADER_JS) $(SPEC_JS) \
$(SPEC_RENDERING 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) \
$(SPEC_JS) $(SPEC_RENDERING_JS) \
$(SRC_JSDOC)
@mkdir -p $(@D)
@python bin/check-whitespace.py $^
@@ -323,5 +323,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

@@ -13,7 +13,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,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,21 @@
## Upgrade notes
### v3.10.0
### 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.

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 +1,3 @@
{
"library_url": "https://github.com/google/closure-library/archive/0011afd534469ba111786fe68300a634e08a4d80.zip"
"library_url": "https://github.com/google/closure-library/archive/a5f9b8a.zip"
}

View File

@@ -14,6 +14,7 @@
"externs/bingmaps.js",
"externs/bootstrap.js",
"externs/closure-compiler.js",
"externs/esrijson.js",
"externs/example.js",
"externs/fastclick.js",
"externs/geojson.js",
@@ -29,41 +30,13 @@
"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": [
"useOfGoogBase",
"unnecessaryCasts",
"lintChecks",
"missingProvide",
"unknownDefines"
],
"extra_annotation_name": [

View File

@@ -30,40 +30,12 @@
"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": [
"useOfGoogBase",
"unnecessaryCasts",
"lintChecks"
],
"extra_annotation_name": [
"api", "observable"

View File

@@ -4,12 +4,13 @@
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="chrome=1">
<meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
<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.5/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 }}}
{{{ css.tag }}}
<link rel="stylesheet" href="./resources/prism/prism.css" type="text/css">
<script src="./resources/zeroclipboard/ZeroClipboard.min.js"></script>
<title>{{ title }}</title>
</head>
@@ -36,24 +37,26 @@
</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/jquery/1.11.0/">
<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;
<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,http://openlayers.org/en/v{{ olVersion }}/css/ol.css,http://openlayers.org/en/v{{ olVersion }}/build/ol.js">
</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;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.5/css/bootstrap.min.css"&gt;
&lt;script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/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;
&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;
{{ extraHead }}
{{#if css.source}}
&lt;style&gt;
@@ -71,7 +74,6 @@
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
</form>
</div>
</div>

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

@@ -106,4 +106,4 @@ exports.handlers = {
}
}
};
};

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

@@ -37,10 +37,6 @@
<div class="main">
<h1 class="page-title" data-filename="<?js= filename ?>"><?js= title ?></h1>
<?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

@@ -49,7 +49,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 +144,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

@@ -20,40 +20,12 @@
"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": [
"useOfGoogBase",
"unnecessaryCasts",
"lintChecks"
],
"extra_annotation_name": [
"api", "observable"

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

@@ -239,7 +239,6 @@ Here is a version of `config.json` with more compilation checks enabled:
"ambiguousFunctionDecl",
"checkEventfulObjectDisposal",
"checkRegExp",
"checkStructDictInheritance",
"checkTypes",
"checkVars",
"const",

View File

@@ -14,8 +14,8 @@ tags: "animation"
</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-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>

View File

@@ -10,18 +10,18 @@ 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">
<div id="no-webgl" class="alert alert-danger" 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="increase-brightness"><i class="fa fa-plus"></i></button>
<button id="reset-brightness">Brightness</button>
<button id="decrease-brightness"><i class="icon-minus"></i></button>
<button id="decrease-brightness"><i class="fa fa-minus"></i></button>
</div>
<div class="btn-group">
<button id="increase-contrast"><i class="icon-plus"></i></button>
<button id="increase-contrast"><i class="fa fa-plus"></i></button>
<button id="reset-contrast">Contrast</button>
<button id="decrease-contrast"><i class="icon-minus"></i></button>
<button id="decrease-contrast"><i class="fa fa-minus"></i></button>
</div>
</div>
</div>

View File

@@ -1,10 +1,11 @@
---
template: example.html
title: Drag features example
shortdesc: Example of a drag features interaction.
title: Custom interaction example
shortdesc: Example of a custom drag features interaction.
docs: >
The drag features interaction can be used to drag features to a new position.
tags: "drag, feature, vector, editing"
This example demonstrates using a custom interaction with OpenLayers, by subclassing `ol.interaction.Pointer`.
Note that the built in interaction `ol.interaction.Translate` might be a better option for moving features.
tags: "drag, feature, vector, editing, custom, interaction"
---
<div class="row-fluid">
<div class="span12">

View File

@@ -9,10 +9,10 @@ tags: "export, png, openstreetmap"
<div class="row-fluid">
<div class="span12">
<div id="map" class="map"></div>
<div id="no-download" class="alert alert-error" style="display: none">
<div id="no-download" class="alert alert-danger" style="display: none">
This example requires a browser that supports the
<a href="http://caniuse.com/#feat=download">link download</a> attribute.
</div>
<a id="export-png" class="btn" download="map.png"><i class="icon-download"></i> Export PNG</a>
<a id="export-png" class="btn btn-default" download="map.png"><i class="fa fa-download"></i> Export PNG</a>
</div>
</div>

View File

@@ -10,7 +10,7 @@ tags: "geolocation, openstreetmap"
<div class="span12">
<div id="map" class="map"></div>
<div class="span4 pull-right">
<div id="info" class="alert alert-error" style="display: none;"></div>
<div id="info" class="alert alert-danger" style="display: none;"></div>
</div>
<label class="checkbox" for="track">
<input id="track" type="checkbox"/>track position

View File

@@ -9,18 +9,18 @@ tags: "custom, control"
<div class="row-fluid">
<div class="span12">
<div id="map" class="map"></div>
<div id="no-webgl" class="alert alert-error" style="display: none">
<div id="no-webgl" class="alert alert-danger" 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-hue"><i class="icon-plus"></i></button>
<button id="increase-hue"><i class="fa fa-plus"></i></button>
<button id="reset-hue">Hue</button>
<button id="decrease-hue"><i class="icon-minus"></i></button>
<button id="decrease-hue"><i class="fa fa-minus"></i></button>
</div>
<div class="btn-group">
<button id="increase-saturation"><i class="icon-plus"></i></button>
<button id="increase-saturation"><i class="fa fa-plus"></i></button>
<button id="reset-saturation">Saturation</button>
<button id="decrease-saturation"><i class="icon-minus"></i></button>
<button id="decrease-saturation"><i class="fa fa-minus"></i></button>
</div>
</div>
</div>

View File

@@ -33,10 +33,11 @@ Progress.prototype.addLoading = function() {
* Increment the count of loaded tiles.
*/
Progress.prototype.addLoaded = function() {
var this_ = this;
setTimeout(function() {
++this.loaded;
this.update();
}.bind(this), 100);
++this_.loaded;
this_.update();
}, 100);
};
@@ -49,7 +50,10 @@ Progress.prototype.update = function() {
if (this.loading === this.loaded) {
this.loading = 0;
this.loaded = 0;
setTimeout(this.hide.bind(this), 500);
var this_ = this;
setTimeout(function() {
this_.hide();
}, 500);
}
};

View File

@@ -11,6 +11,6 @@ tags: "clipping, webgl, openstreetmap"
<div id="map" class="map"></div>
</div>
</div>
<div id="no-webgl" class="alert alert-error" style="display: none">
<div id="no-webgl" class="alert alert-danger" style="display: none">
This example requires a browser that supports <a href="http://get.webgl.org/">WebGL</a>.
</div>

View File

@@ -0,0 +1,28 @@
---
template: example.html
title: Z-index layer ordering example
shortdesc: Example of ordering layers using Z-index.
docs: >
tags: "layer, ordering, z-index"
---
<div class="row-fluid">
<div class="span12">
<div id="map" class="map"></div>
</div>
</div>
<div>
There are are two managed layers (square and triangle) and one unmanaged layer (star).</br>
The Z-index determines the rendering order; with {square: 1, triangle: 0, star: unmanaged} indices, the rendering order is triangle, square and star on top.
</div>
<div>
<label for="idx1">
<input type="number" id="idx1"></input>
Square layer Z-index
</label></br>
<label for="idx2">
<input type="number" id="idx2"></input>
Triangle layer Z-index
</label>
</div>

92
examples/layer-z-index.js Normal file
View File

@@ -0,0 +1,92 @@
goog.require('ol.Feature');
goog.require('ol.Map');
goog.require('ol.View');
goog.require('ol.geom.Point');
goog.require('ol.layer.Vector');
goog.require('ol.source.Vector');
goog.require('ol.style.Fill');
goog.require('ol.style.RegularShape');
goog.require('ol.style.Stroke');
goog.require('ol.style.Style');
var stroke = new ol.style.Stroke({color: 'black', width: 1});
var styles = {
'square': [new ol.style.Style({
image: new ol.style.RegularShape({
fill: new ol.style.Fill({color: 'blue'}),
stroke: stroke,
points: 4,
radius: 80,
angle: Math.PI / 4
})
})],
'triangle': [new ol.style.Style({
image: new ol.style.RegularShape({
fill: new ol.style.Fill({color: 'red'}),
stroke: stroke,
points: 3,
radius: 80,
rotation: Math.PI / 4,
angle: 0
})
})],
'star': [new ol.style.Style({
image: new ol.style.RegularShape({
fill: new ol.style.Fill({color: 'green'}),
stroke: stroke,
points: 5,
radius: 80,
radius2: 4,
angle: 0
})
})]
};
function createLayer(coordinates, styles, zIndex) {
var feature = new ol.Feature(new ol.geom.Point(coordinates));
feature.setStyle(styles);
var source = new ol.source.Vector({
features: [feature]
});
var vectorLayer = new ol.layer.Vector({
source: source
});
vectorLayer.setZIndex(zIndex);
return vectorLayer;
}
var layer0 = createLayer([40, 40], styles['star'], 0);
var layer1 = createLayer([0, 0], styles['square'], 1);
var layer2 = createLayer([0, 40], styles['triangle'], 0);
var layers = [];
layers.push(layer1);
layers.push(layer2);
var map = new ol.Map({
layers: layers,
target: 'map',
view: new ol.View({
center: [0, 0],
zoom: 18
})
});
layer0.setMap(map);
function bindInputs(id, layer) {
var idxInput = $('#idx' + id);
idxInput.on('input change', function() {
layer.setZIndex(parseInt(this.value, 10) || 0);
});
idxInput.val(String(layer.getZIndex()));
}
bindInputs(1, layer1);
bindInputs(2, layer2);

View File

@@ -8,6 +8,7 @@
border: 1px solid #cccccc;
bottom: 12px;
left: -50px;
min-width: 280px;
}
.ol-popup:after, .ol-popup:before {
top: 100%;

View File

@@ -12,7 +12,7 @@ docs: >
</p>
<p>
In this case, a single tiled source of imagery is used as input.
For each pixel, the Vegetaion Greenness Index
For each pixel, the Vegetation Greenness Index
(<a href="http://www.tandfonline.com/doi/abs/10.1080/10106040108542184#.Vb90ITBViko">VGI</a>)
is calculated from the input pixels. A second operation colors
those pixels based on a threshold value (values above the

View File

@@ -10,6 +10,14 @@
});
}
var fiddleButton = document.getElementById('jsfiddle-button');
if (fiddleButton) {
fiddleButton.onclick = function(event) {
event.preventDefault();
document.getElementById('jsfiddle-form').submit();
};
}
if (window.location.host === 'localhost:3000') {
return;
}

View File

@@ -59,6 +59,36 @@ ol.inline>li {
font-family: 'Lucida Grande',Verdana,Geneva,Lucida,Arial,Helvetica,sans-serif;
}
pre[class*="language-"] {
margin-top: 20px;
background: #FFFFFF;
}
#source-controls {
position: absolute;
margin-top: 20px;
right: 40px;
}
#source-controls a {
margin-left: 15px;
}
#copy-button {
text-decoration: none;
cursor: pointer;
}
#jsfiddle-button {
text-decoration: none;
cursor: pointer;
}
pre {
border: 1px solid #eee;
border-radius: 0;
}
#tags, #shortdesc, .hidden {
display: none;
}

View File

@@ -13,7 +13,7 @@ goog.require('ol.source.XYZ');
* neighborhood for determining slope and aspect.
* @param {Array.<ImageData>} inputs Array of input images.
* @param {Object} data Data added in the "beforeoperations" event.
* @return {Array.<ImageData>} Output images (only the first is rendered).
* @return {ImageData} Output image.
*/
function shade(inputs, data) {
var elevationImage = inputs[0];

View File

@@ -14,7 +14,7 @@ tags: "side-by-side, canvas, webgl, dom, canvas, sync, object"
<div class="span4">
<h4>WebGL</h4>
<div id="webglMap" class="map"></div>
<div id="no-webgl" class="alert alert-error" style="display: none">
<div id="no-webgl" class="alert alert-danger" style="display: none">
This map requires a browser that supports <a href="http://get.webgl.org/">WebGL</a>.
</div>
</div>

View File

@@ -16,7 +16,7 @@ var sphereMollweideProjection = new ol.proj.Projection({
code: 'ESRI:53009',
extent: [-9009954.605703328, -9009954.605703328,
9009954.605703328, 9009954.605703328],
worldExtent: [-179, -90, 179, 90]
worldExtent: [-179, -89.99, 179, 89.99]
});
var map = new ol.Map({

View File

@@ -33,10 +33,11 @@ Progress.prototype.addLoading = function() {
* Increment the count of loaded tiles.
*/
Progress.prototype.addLoaded = function() {
var this_ = this;
setTimeout(function() {
++this.loaded;
this.update();
}.bind(this), 100);
++this_.loaded;
this_.update();
}, 100);
};
@@ -49,7 +50,10 @@ Progress.prototype.update = function() {
if (this.loading === this.loaded) {
this.loading = 0;
this.loaded = 0;
setTimeout(this.hide.bind(this), 500);
var this_ = this;
setTimeout(function() {
this_.hide();
}, 500);
}
};

View File

@@ -0,0 +1,13 @@
---
template: example.html
title: Translate features example
shortdesc: Example of a translate features interaction.
docs: >
This example demonstrates how the translate and select interactions can be used together. Zoom in to an area of interest and click to select a feature. Then drag the feature around to move it elsewhere on the map.
tags: "drag, translate, feature, vector, editing"
---
<div class="row-fluid">
<div class="span12">
<div id="map" class="map"></div>
</div>
</div>

View File

@@ -0,0 +1,52 @@
goog.require('ol.Feature');
goog.require('ol.Map');
goog.require('ol.View');
goog.require('ol.format.GeoJSON');
goog.require('ol.geom.LineString');
goog.require('ol.geom.Point');
goog.require('ol.interaction');
goog.require('ol.interaction.Select');
goog.require('ol.interaction.Translate');
goog.require('ol.layer.Tile');
goog.require('ol.layer.Vector');
goog.require('ol.source.MapQuest');
goog.require('ol.source.Vector');
var raster = new ol.layer.Tile({
source: new ol.source.MapQuest({layer: 'sat'})
});
var vector = new ol.layer.Vector({
source: new ol.source.Vector({
url: 'data/geojson/countries.geojson',
format: new ol.format.GeoJSON()
})
});
var pointFeature = new ol.Feature(new ol.geom.Point([0, 0]));
var lineFeature = new ol.Feature(
new ol.geom.LineString([[-1e7, 1e6], [-1e6, 3e6]]));
var vector2 = new ol.layer.Vector({
source: new ol.source.Vector({
features: [pointFeature, lineFeature]
})
});
var select = new ol.interaction.Select();
var translate = new ol.interaction.Translate({
features: select.getFeatures()
});
var map = new ol.Map({
interactions: ol.interaction.defaults().extend([select, translate]),
layers: [raster, vector, vector2],
target: 'map',
view: new ol.View({
center: [0, 0],
zoom: 2
})
});

View File

@@ -1,4 +1,3 @@
goog.require('ol.Feature');
goog.require('ol.Map');
goog.require('ol.View');
goog.require('ol.format.GeoJSON');

View File

@@ -87,19 +87,13 @@ var styles = {
}
};
var osmxmlFormat = new ol.format.OSMXML();
var vectorSource = new ol.source.Vector({
loader: function(extent, resolution, projection) {
format: new ol.format.OSMXML(),
url: function(extent, resolution, projection) {
var epsg4326Extent =
ol.proj.transformExtent(extent, projection, 'EPSG:4326');
var url = 'http://overpass-api.de/api/xapi?map?bbox=' +
return 'http://overpass-api.de/api/xapi?map?bbox=' +
epsg4326Extent.join(',');
$.ajax(url).then(function(response) {
var features = osmxmlFormat.readFeatures(response,
{featureProjection: projection});
vectorSource.addFeatures(features);
});
},
strategy: ol.loadingstrategy.tile(ol.tilegrid.createXYZ({
maxZoom: 19

View File

@@ -10,18 +10,14 @@ goog.require('ol.style.Stroke');
goog.require('ol.style.Style');
// format used to parse WFS GetFeature responses
var geojsonFormat = new ol.format.GeoJSON();
var vectorSource = new ol.source.Vector({
loader: function(extent, resolution, projection) {
var url = 'http://demo.boundlessgeo.com/geoserver/wfs?service=WFS&' +
format: new ol.format.GeoJSON(),
url: function(extent, resolution, projection) {
return 'http://demo.boundlessgeo.com/geoserver/wfs?service=WFS&' +
'version=1.1.0&request=GetFeature&typename=osm:water_areas&' +
'outputFormat=text/javascript&format_options=callback:loadFeatures' +
'&srsname=EPSG:3857&bbox=' + extent.join(',') + ',EPSG:3857';
// use jsonp: false to prevent jQuery from adding the "callback"
// parameter to the URL
$.ajax({url: url, dataType: 'jsonp', jsonp: false});
'outputFormat=application/json&srsname=EPSG:3857&' +
'bbox=' + extent.join(',') + ',EPSG:3857';
},
strategy: ol.loadingstrategy.tile(ol.tilegrid.createXYZ({
maxZoom: 19
@@ -29,14 +25,6 @@ var vectorSource = new ol.source.Vector({
});
/**
* JSONP WFS callback function.
* @param {Object} response The response object.
*/
window.loadFeatures = function(response) {
vectorSource.addFeatures(geojsonFormat.readFeatures(response));
};
var vector = new ol.layer.Vector({
source: vectorSource,
style: new ol.style.Style({

View File

@@ -1,4 +1,3 @@
goog.require('ol.Feature');
goog.require('ol.Map');
goog.require('ol.View');
goog.require('ol.format.WKT');

View File

@@ -30,15 +30,3 @@ Touch.prototype.webkitRadiusX;
/** @type {number} */
Touch.prototype.webkitRadiusY;
/**
* @type {boolean}
*/
WebGLContextAttributes.prototype.preferLowPowerToHighPerformance;
/**
* @type {boolean}
*/
WebGLContextAttributes.prototype.failIfMajorPerformanceCaveat;

View File

@@ -2504,6 +2504,22 @@ olx.interaction.DrawOptions.prototype.freehandCondition;
olx.interaction.DrawOptions.prototype.wrapX;
/**
* @typedef {{features: (ol.Collection.<ol.Feature>|undefined)}}
* @api
*/
olx.interaction.TranslateOptions;
/**
* Only features contained in this collection will be able to be translated. If
* not specified, all features on the map will be able to be translated.
* @type {ol.Collection.<ol.Feature>|undefined}
* @api
*/
olx.interaction.TranslateOptions.prototype.features;
/**
* @typedef {{condition: (ol.events.ConditionType|undefined),
* duration: (number|undefined),
@@ -2911,6 +2927,7 @@ olx.layer;
* saturation: (number|undefined),
* visible: (boolean|undefined),
* extent: (ol.Extent|undefined),
* zIndex: (number|undefined),
* minResolution: (number|undefined),
* maxResolution: (number|undefined)}}
* @api
@@ -2975,6 +2992,15 @@ olx.layer.BaseOptions.prototype.visible;
olx.layer.BaseOptions.prototype.extent;
/**
* The z-index for layer rendering. At rendering time, the layers will be
* ordered, first by Z-index and then by position. The default Z-index is 0.
* @type {number|undefined}
* @api
*/
olx.layer.BaseOptions.prototype.zIndex;
/**
* The minimum resolution (inclusive) at which this layer will be visible.
* @type {number|undefined}
@@ -3000,6 +3026,7 @@ olx.layer.BaseOptions.prototype.maxResolution;
* source: (ol.source.Source|undefined),
* visible: (boolean|undefined),
* extent: (ol.Extent|undefined),
* zIndex: (number|undefined),
* minResolution: (number|undefined),
* maxResolution: (number|undefined)}}
* @api
@@ -3074,6 +3101,15 @@ olx.layer.LayerOptions.prototype.visible;
olx.layer.LayerOptions.prototype.extent;
/**
* The z-index for layer rendering. At rendering time, the layers will be
* ordered, first by Z-index and then by position. The default Z-index is 0.
* @type {number|undefined}
* @api
*/
olx.layer.LayerOptions.prototype.zIndex;
/**
* The minimum resolution (inclusive) at which this layer will be visible.
* @type {number|undefined}
@@ -3098,6 +3134,7 @@ olx.layer.LayerOptions.prototype.maxResolution;
* saturation: (number|undefined),
* visible: (boolean|undefined),
* extent: (ol.Extent|undefined),
* zIndex: (number|undefined),
* minResolution: (number|undefined),
* maxResolution: (number|undefined),
* layers: (Array.<ol.layer.Base>|ol.Collection.<ol.layer.Base>|undefined)}}
@@ -3163,6 +3200,15 @@ olx.layer.GroupOptions.prototype.visible;
olx.layer.GroupOptions.prototype.extent;
/**
* The z-index for layer rendering. At rendering time, the layers will be
* ordered, first by Z-index and then by position. The default Z-index is 0.
* @type {number|undefined}
* @api
*/
olx.layer.GroupOptions.prototype.zIndex;
/**
* The minimum resolution (inclusive) at which this layer will be visible.
* @type {number|undefined}
@@ -5149,7 +5195,7 @@ olx.source.TileWMSOptions.prototype.wrapX;
* loader: (ol.FeatureLoader|undefined),
* logo: (string|olx.LogoOptions|undefined),
* strategy: (ol.LoadingStrategy|undefined),
* url: (string|undefined),
* url: (string|ol.FeatureUrlFunction|undefined),
* useSpatialIndex: (boolean|undefined),
* wrapX: (boolean|undefined)}}
* @api
@@ -5212,10 +5258,12 @@ olx.source.VectorOptions.prototype.strategy;
/**
* Setting this option instructs the source to use an XHR loader (see
* {@link ol.featureloader.xhr}) and an {@link ol.loadingstrategy.all} for a
* one-off download of all features from that URL.
* {@link ol.featureloader.xhr}). Use a `string` and an
* {@link ol.loadingstrategy.all} for a one-off download of all features from
* the given URL. Use a {@link ol.FeatureUrlFunction} to generate the url with
* other loading strategies.
* Requires `format` to be set as well.
* @type {string|undefined}
* @type {string|ol.FeatureUrlFunction|undefined}
* @api
*/
olx.source.VectorOptions.prototype.url;

View File

@@ -1,6 +1,6 @@
{
"name": "openlayers",
"version": "3.8.0",
"version": "3.9.0",
"description": "Build tools and sources for developing OpenLayers based mapping applications",
"keywords": [
"map",
@@ -27,21 +27,20 @@
"dependencies": {
"async": "0.9.0",
"browserify": "9.0.3",
"closure-util": "1.5.0",
"closure-util": "1.7.0",
"fs-extra": "0.12.0",
"glob": "5.0.3",
"graceful-fs": "3.0.2",
"handlebars": "3.0.1",
"jsdoc": "3.3.0-alpha9",
"marked": "0.3.3",
"jsdoc": "3.3.2",
"marked": "0.3.5",
"metalsmith": "1.6.0",
"metalsmith-templates": "0.7.0",
"nomnom": "1.8.0",
"pixelworks": "1.0.0",
"rbush": "1.3.5",
"temp": "0.8.1",
"walk": "2.3.4",
"wrench": "1.5.8"
"walk": "2.3.4"
},
"devDependencies": {
"clean-css": "2.2.16",
@@ -51,14 +50,16 @@
"gaze": "^0.5.1",
"istanbul": "0.3.13",
"jquery": "2.1.1",
"jshint": "2.5.6",
"jshint": "2.8.0",
"mocha": "1.21.5",
"mocha-phantomjs": "3.5.1",
"mustache": "2.1.3",
"phantomjs": "1.9.10",
"proj4": "2.3.6",
"resemblejs": "1.2.0",
"sinon": "1.10.3",
"slimerjs-edge": "0.10.0-pre-2"
"slimerjs-edge": "0.10.0-pre-2",
"wrench": "1.5.8"
},
"ext": [
"rbush",

View File

@@ -1,2 +1 @@
http://closure-linter.googlecode.com/files/closure_linter-latest.tar.gz
pystache

View File

@@ -1,6 +1,5 @@
goog.provide('ol.Attribution');
goog.require('goog.asserts');
goog.require('goog.math');
goog.require('ol.TileRange');

View File

@@ -515,7 +515,8 @@ ol.control.OverviewMap.prototype.setCollapsed = function(collapsed) {
/**
* @return {boolean} True if the widget is collapsed.
* Determine if the overview map is collapsed.
* @return {boolean} The overview map is collapsed.
* @api stable
*/
ol.control.OverviewMap.prototype.getCollapsed = function() {

View File

@@ -1,185 +0,0 @@
goog.provide('ol.Ellipsoid');
goog.require('goog.math');
goog.require('ol.Coordinate');
/**
* @constructor
* @param {number} a Major radius.
* @param {number} flattening Flattening.
*/
ol.Ellipsoid = function(a, flattening) {
/**
* @const
* @type {number}
*/
this.a = a;
/**
* @const
* @type {number}
*/
this.flattening = flattening;
/**
* @const
* @type {number}
*/
this.b = this.a * (1 - this.flattening);
/**
* @const
* @type {number}
*/
this.eSquared = 2 * flattening - flattening * flattening;
/**
* @const
* @type {number}
*/
this.e = Math.sqrt(this.eSquared);
};
/**
* @param {ol.Coordinate} c1 Coordinate 1.
* @param {ol.Coordinate} c2 Coordinate 1.
* @param {number=} opt_minDeltaLambda Minimum delta lambda for convergence.
* @param {number=} opt_maxIterations Maximum iterations.
* @return {{distance: number, initialBearing: number, finalBearing: number}}
* Vincenty.
*/
ol.Ellipsoid.prototype.vincenty =
function(c1, c2, opt_minDeltaLambda, opt_maxIterations) {
var minDeltaLambda = goog.isDef(opt_minDeltaLambda) ?
opt_minDeltaLambda : 1e-12;
var maxIterations = goog.isDef(opt_maxIterations) ?
opt_maxIterations : 100;
var f = this.flattening;
var lat1 = goog.math.toRadians(c1[1]);
var lat2 = goog.math.toRadians(c2[1]);
var deltaLon = goog.math.toRadians(c2[0] - c1[0]);
var U1 = Math.atan((1 - f) * Math.tan(lat1));
var cosU1 = Math.cos(U1);
var sinU1 = Math.sin(U1);
var U2 = Math.atan((1 - f) * Math.tan(lat2));
var cosU2 = Math.cos(U2);
var sinU2 = Math.sin(U2);
var lambda = deltaLon;
var cosSquaredAlpha, sinAlpha;
var cosLambda, deltaLambda = Infinity, sinLambda;
var cos2SigmaM, cosSigma, sigma, sinSigma;
var i;
for (i = maxIterations; i > 0; --i) {
cosLambda = Math.cos(lambda);
sinLambda = Math.sin(lambda);
var x = cosU2 * sinLambda;
var y = cosU1 * sinU2 - sinU1 * cosU2 * cosLambda;
sinSigma = Math.sqrt(x * x + y * y);
if (sinSigma === 0) {
return {
distance: 0,
initialBearing: 0,
finalBearing: 0
};
}
cosSigma = sinU1 * sinU2 + cosU1 * cosU2 * cosLambda;
sigma = Math.atan2(sinSigma, cosSigma);
sinAlpha = cosU1 * cosU2 * sinLambda / sinSigma;
cosSquaredAlpha = 1 - sinAlpha * sinAlpha;
cos2SigmaM = cosSigma - 2 * sinU1 * sinU2 / cosSquaredAlpha;
if (isNaN(cos2SigmaM)) {
cos2SigmaM = 0;
}
var C = f / 16 * cosSquaredAlpha * (4 + f * (4 - 3 * cosSquaredAlpha));
var lambdaPrime = deltaLon + (1 - C) * f * sinAlpha * (sigma +
C * sinSigma * (cos2SigmaM +
C * cosSigma * (2 * cos2SigmaM * cos2SigmaM - 1)));
deltaLambda = Math.abs(lambdaPrime - lambda);
lambda = lambdaPrime;
if (deltaLambda < minDeltaLambda) {
break;
}
}
if (i === 0) {
return {
distance: NaN,
finalBearing: NaN,
initialBearing: NaN
};
}
var aSquared = this.a * this.a;
var bSquared = this.b * this.b;
var uSquared = cosSquaredAlpha * (aSquared - bSquared) / bSquared;
var A = 1 + uSquared / 16384 *
(4096 + uSquared * (uSquared * (320 - 175 * uSquared) - 768));
var B = uSquared / 1024 *
(256 + uSquared * (uSquared * (74 - 47 * uSquared) - 128));
var deltaSigma = B * sinSigma * (cos2SigmaM + B / 4 *
(cosSigma * (2 * cos2SigmaM * cos2SigmaM - 1) -
B / 6 * cos2SigmaM * (4 * sinSigma * sinSigma - 3) *
(4 * cos2SigmaM * cos2SigmaM - 3)));
cosLambda = Math.cos(lambda);
sinLambda = Math.sin(lambda);
var alpha1 = Math.atan2(cosU2 * sinLambda,
cosU1 * sinU2 - sinU1 * cosU2 * cosLambda);
var alpha2 = Math.atan2(cosU1 * sinLambda,
cosU1 * sinU2 * cosLambda - sinU1 * cosU2);
return {
distance: this.b * A * (sigma - deltaSigma),
initialBearing: goog.math.toDegrees(alpha1),
finalBearing: goog.math.toDegrees(alpha2)
};
};
/**
* Returns the distance from c1 to c2 using Vincenty.
*
* @param {ol.Coordinate} c1 Coordinate 1.
* @param {ol.Coordinate} c2 Coordinate 1.
* @param {number=} opt_minDeltaLambda Minimum delta lambda for convergence.
* @param {number=} opt_maxIterations Maximum iterations.
* @return {number} Vincenty distance.
*/
ol.Ellipsoid.prototype.vincentyDistance =
function(c1, c2, opt_minDeltaLambda, opt_maxIterations) {
var vincenty = this.vincenty(c1, c2, opt_minDeltaLambda, opt_maxIterations);
return vincenty.distance;
};
/**
* Returns the final bearing from c1 to c2 using Vincenty.
*
* @param {ol.Coordinate} c1 Coordinate 1.
* @param {ol.Coordinate} c2 Coordinate 1.
* @param {number=} opt_minDeltaLambda Minimum delta lambda for convergence.
* @param {number=} opt_maxIterations Maximum iterations.
* @return {number} Initial bearing.
*/
ol.Ellipsoid.prototype.vincentyFinalBearing =
function(c1, c2, opt_minDeltaLambda, opt_maxIterations) {
var vincenty = this.vincenty(c1, c2, opt_minDeltaLambda, opt_maxIterations);
return vincenty.finalBearing;
};
/**
* Returns the initial bearing from c1 to c2 using Vincenty.
*
* @param {ol.Coordinate} c1 Coordinate 1.
* @param {ol.Coordinate} c2 Coordinate 1.
* @param {number=} opt_minDeltaLambda Minimum delta lambda for convergence.
* @param {number=} opt_maxIterations Maximum iterations.
* @return {number} Initial bearing.
*/
ol.Ellipsoid.prototype.vincentyInitialBearing =
function(c1, c2, opt_minDeltaLambda, opt_maxIterations) {
var vincenty = this.vincenty(c1, c2, opt_minDeltaLambda, opt_maxIterations);
return vincenty.initialBearing;
};

View File

@@ -1,10 +0,0 @@
goog.provide('ol.ellipsoid.WGS84');
goog.require('ol.Ellipsoid');
/**
* @const
* @type {ol.Ellipsoid}
*/
ol.ellipsoid.WGS84 = new ol.Ellipsoid(6378137, 1 / 298.257223563);

View File

@@ -149,6 +149,9 @@ ol.Feature.prototype.getGeometry = function() {
/**
* Get the feature identifier. This is a stable identifier for the feature and
* is either set when reading data from a remote source or set explicitly by
* calling {@link ol.Feature#setId}.
* @return {number|string|undefined} Id.
* @api stable
* @observable
@@ -283,8 +286,9 @@ ol.Feature.prototype.setGeometryName = function(name) {
/**
* A function that returns a style given a resolution. The `this` keyword inside
* the function references the {@link ol.Feature} to be styled.
* A function that returns an array of {@link ol.style.Style styles} given a
* resolution. The `this` keyword inside the function references the
* {@link ol.Feature} to be styled.
*
* @typedef {function(this: ol.Feature, number): Array.<ol.style.Style>}
* @api stable
@@ -301,13 +305,10 @@ ol.FeatureStyleFunction;
* @return {ol.FeatureStyleFunction} A style function.
*/
ol.Feature.createStyleFunction = function(obj) {
/**
* @type {ol.FeatureStyleFunction}
*/
var styleFunction;
if (goog.isFunction(obj)) {
styleFunction = /** @type {ol.FeatureStyleFunction} */ (obj);
styleFunction = obj;
} else {
/**
* @type {Array.<ol.style.Style>}

View File

@@ -1,4 +1,5 @@
goog.provide('ol.FeatureLoader');
goog.provide('ol.FeatureUrlFunction');
goog.provide('ol.featureloader');
goog.require('goog.asserts');
@@ -11,6 +12,16 @@ goog.require('ol.xml');
/**
* {@link ol.source.Vector} sources use a function of this type to load
* features.
*
* This function takes an {@link ol.Extent} representing the area to be loaded,
* a `{number}` representing the resolution (map units per pixel) and an
* {@link ol.proj.Projection} for the projection as arguments. `this` within
* the function is bound to the {@link ol.source.Vector} it's called from.
*
* The function is responsible for loading the features and adding them to the
* source.
* @api
* @typedef {function(this:ol.source.Vector, ol.Extent, number,
* ol.proj.Projection)}
@@ -19,7 +30,21 @@ ol.FeatureLoader;
/**
* @param {string} url Feature URL service.
* {@link ol.source.Vector} sources use a function of this type to get the url
* to load features from.
*
* This function takes an {@link ol.Extent} representing the area to be loaded,
* a `{number}` representing the resolution (map units per pixel) and an
* {@link ol.proj.Projection} for the projection as arguments and returns a
* `{string}` representing the URL.
* @api
* @typedef {function(ol.Extent, number, ol.proj.Projection) : string}
*/
ol.FeatureUrlFunction;
/**
* @param {string|ol.FeatureUrlFunction} url Feature URL service.
* @param {ol.format.Feature} format Feature format.
* @param {function(this:ol.source.Vector, Array.<ol.Feature>)} success
* Function called with the loaded features. Called with the vector
@@ -77,7 +102,12 @@ ol.featureloader.loadFeaturesXhr = function(url, format, success) {
}
goog.dispose(xhrIo);
}, false, this);
xhrIo.send(url);
if (goog.isFunction(url)) {
xhrIo.send(url(extent, resolution, projection));
} else {
xhrIo.send(url);
}
});
};
@@ -86,7 +116,7 @@ ol.featureloader.loadFeaturesXhr = function(url, format, success) {
* Create an XHR feature loader for a `url` and `format`. The feature loader
* loads features (with XHR), parses the features, and adds them to the
* vector source.
* @param {string} url Feature URL service.
* @param {string|ol.FeatureUrlFunction} url Feature URL service.
* @param {ol.format.Feature} format Feature format.
* @return {ol.FeatureLoader} The feature loader.
* @api

View File

@@ -3,7 +3,6 @@ goog.provide('ol.format.GML2');
goog.require('goog.asserts');
goog.require('goog.dom.NodeType');
goog.require('ol.extent');
goog.require('ol.format.GML');
goog.require('ol.format.GMLBase');
goog.require('ol.format.XSD');
goog.require('ol.proj');

View File

@@ -286,7 +286,7 @@ ol.format.GPX.FEATURE_READER_ = {
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.GPX.GPX_PARSERS_ = ol.xml.makeParsersNS(
ol.format.GPX.GPX_PARSERS_ = ol.xml.makeStructureNS(
ol.format.GPX.NAMESPACE_URIS_, {
'rte': ol.xml.makeArrayPusher(ol.format.GPX.readRte_),
'trk': ol.xml.makeArrayPusher(ol.format.GPX.readTrk_),
@@ -299,7 +299,7 @@ ol.format.GPX.GPX_PARSERS_ = ol.xml.makeParsersNS(
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.GPX.LINK_PARSERS_ = ol.xml.makeParsersNS(
ol.format.GPX.LINK_PARSERS_ = ol.xml.makeStructureNS(
ol.format.GPX.NAMESPACE_URIS_, {
'text':
ol.xml.makeObjectPropertySetter(ol.format.XSD.readString, 'linkText'),
@@ -313,7 +313,7 @@ ol.format.GPX.LINK_PARSERS_ = ol.xml.makeParsersNS(
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.GPX.RTE_PARSERS_ = ol.xml.makeParsersNS(
ol.format.GPX.RTE_PARSERS_ = ol.xml.makeStructureNS(
ol.format.GPX.NAMESPACE_URIS_, {
'name': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
'cmt': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
@@ -333,7 +333,7 @@ ol.format.GPX.RTE_PARSERS_ = ol.xml.makeParsersNS(
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.GPX.RTEPT_PARSERS_ = ol.xml.makeParsersNS(
ol.format.GPX.RTEPT_PARSERS_ = ol.xml.makeStructureNS(
ol.format.GPX.NAMESPACE_URIS_, {
'ele': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal),
'time': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDateTime)
@@ -345,7 +345,7 @@ ol.format.GPX.RTEPT_PARSERS_ = ol.xml.makeParsersNS(
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.GPX.TRK_PARSERS_ = ol.xml.makeParsersNS(
ol.format.GPX.TRK_PARSERS_ = ol.xml.makeStructureNS(
ol.format.GPX.NAMESPACE_URIS_, {
'name': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
'cmt': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
@@ -365,7 +365,7 @@ ol.format.GPX.TRK_PARSERS_ = ol.xml.makeParsersNS(
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.GPX.TRKSEG_PARSERS_ = ol.xml.makeParsersNS(
ol.format.GPX.TRKSEG_PARSERS_ = ol.xml.makeStructureNS(
ol.format.GPX.NAMESPACE_URIS_, {
'trkpt': ol.format.GPX.parseTrkPt_
});
@@ -376,7 +376,7 @@ ol.format.GPX.TRKSEG_PARSERS_ = ol.xml.makeParsersNS(
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.GPX.TRKPT_PARSERS_ = ol.xml.makeParsersNS(
ol.format.GPX.TRKPT_PARSERS_ = ol.xml.makeStructureNS(
ol.format.GPX.NAMESPACE_URIS_, {
'ele': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal),
'time': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDateTime)
@@ -388,7 +388,7 @@ ol.format.GPX.TRKPT_PARSERS_ = ol.xml.makeParsersNS(
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.GPX.WPT_PARSERS_ = ol.xml.makeParsersNS(
ol.format.GPX.WPT_PARSERS_ = ol.xml.makeStructureNS(
ol.format.GPX.NAMESPACE_URIS_, {
'ele': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal),
'time': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDateTime),

View File

@@ -77,34 +77,13 @@ ol.format.KML = function(opt_options) {
*/
this.defaultDataProjection = ol.proj.get('EPSG:4326');
var defaultStyle = goog.isDef(options.defaultStyle) ?
/**
* @private
* @type {Array.<ol.style.Style>}
*/
this.defaultStyle_ = goog.isDef(options.defaultStyle) ?
options.defaultStyle : ol.format.KML.DEFAULT_STYLE_ARRAY_;
/** @type {Object.<string, (Array.<ol.style.Style>|string)>} */
var sharedStyles = {};
var findStyle =
/**
* @param {Array.<ol.style.Style>|string|undefined} styleValue Style
* value.
* @return {Array.<ol.style.Style>} Style.
*/
function(styleValue) {
if (goog.isArray(styleValue)) {
return styleValue;
} else if (goog.isString(styleValue)) {
// KML files in the wild occasionally forget the leading `#` on styleUrls
// defined in the same document. Add a leading `#` if it enables to find
// a style.
if (!(styleValue in sharedStyles) && ('#' + styleValue in sharedStyles)) {
styleValue = '#' + styleValue;
}
return findStyle(sharedStyles[styleValue]);
} else {
return defaultStyle;
}
};
/**
* @private
* @type {boolean}
@@ -116,30 +95,7 @@ ol.format.KML = function(opt_options) {
* @private
* @type {Object.<string, (Array.<ol.style.Style>|string)>}
*/
this.sharedStyles_ = sharedStyles;
/**
* @private
* @type {ol.FeatureStyleFunction}
*/
this.featureStyleFunction_ =
/**
* @param {number} resolution Resolution.
* @return {Array.<ol.style.Style>} Style.
* @this {ol.Feature}
*/
function(resolution) {
var style = /** @type {Array.<ol.style.Style>|undefined} */
(this.get('Style'));
if (goog.isDef(style)) {
return style;
}
var styleUrl = /** @type {string|undefined} */ (this.get('styleUrl'));
if (goog.isDef(styleUrl)) {
return findStyle(styleUrl);
}
return defaultStyle;
};
this.sharedStyles_ = {};
};
goog.inherits(ol.format.KML, ol.format.XMLFeature);
@@ -322,6 +278,61 @@ ol.format.KML.ICON_ANCHOR_UNITS_MAP_ = {
};
/**
* @param {Array.<ol.style.Style>|undefined} style Style.
* @param {string} styleUrl Style URL.
* @param {Array.<ol.style.Style>} defaultStyle Default style.
* @param {Object.<string, (Array.<ol.style.Style>|string)>} sharedStyles
* Shared styles.
* @return {ol.FeatureStyleFunction} Feature style function.
* @private
*/
ol.format.KML.createFeatureStyleFunction_ = function(
style, styleUrl, defaultStyle, sharedStyles) {
return (
/**
* @param {number} resolution Resolution.
* @return {Array.<ol.style.Style>} Style.
* @this {ol.Feature}
*/
function(resolution) {
if (goog.isDef(style)) {
return style;
}
if (goog.isDef(styleUrl)) {
return ol.format.KML.findStyle_(styleUrl, defaultStyle, sharedStyles);
}
return defaultStyle;
});
};
/**
* @param {Array.<ol.style.Style>|string|undefined} styleValue Style value.
* @param {Array.<ol.style.Style>} defaultStyle Default style.
* @param {Object.<string, (Array.<ol.style.Style>|string)>} sharedStyles
* Shared styles.
* @return {Array.<ol.style.Style>} Style.
* @private
*/
ol.format.KML.findStyle_ = function(styleValue, defaultStyle, sharedStyles) {
if (goog.isArray(styleValue)) {
return styleValue;
} else if (goog.isString(styleValue)) {
// KML files in the wild occasionally forget the leading `#` on styleUrls
// defined in the same document. Add a leading `#` if it enables to find
// a style.
if (!(styleValue in sharedStyles) && ('#' + styleValue in sharedStyles)) {
styleValue = '#' + styleValue;
}
return ol.format.KML.findStyle_(
sharedStyles[styleValue], defaultStyle, sharedStyles);
} else {
return defaultStyle;
}
};
/**
* @param {Node} node Node.
* @private
@@ -1299,7 +1310,7 @@ ol.format.KML.whenParser_ = function(node, objectStack) {
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.KML.DATA_PARSERS_ = ol.xml.makeParsersNS(
ol.format.KML.DATA_PARSERS_ = ol.xml.makeStructureNS(
ol.format.KML.NAMESPACE_URIS_, {
'value': ol.xml.makeReplacer(ol.format.XSD.readString)
});
@@ -1310,7 +1321,7 @@ ol.format.KML.DATA_PARSERS_ = ol.xml.makeParsersNS(
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.KML.EXTENDED_DATA_PARSERS_ = ol.xml.makeParsersNS(
ol.format.KML.EXTENDED_DATA_PARSERS_ = ol.xml.makeStructureNS(
ol.format.KML.NAMESPACE_URIS_, {
'Data': ol.format.KML.DataParser_,
'SchemaData': ol.format.KML.SchemaDataParser_
@@ -1322,7 +1333,7 @@ ol.format.KML.EXTENDED_DATA_PARSERS_ = ol.xml.makeParsersNS(
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.KML.EXTRUDE_AND_ALTITUDE_MODE_PARSERS_ = ol.xml.makeParsersNS(
ol.format.KML.EXTRUDE_AND_ALTITUDE_MODE_PARSERS_ = ol.xml.makeStructureNS(
ol.format.KML.NAMESPACE_URIS_, {
'extrude': ol.xml.makeObjectPropertySetter(ol.format.XSD.readBoolean),
'altitudeMode': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString)
@@ -1334,7 +1345,7 @@ ol.format.KML.EXTRUDE_AND_ALTITUDE_MODE_PARSERS_ = ol.xml.makeParsersNS(
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.KML.FLAT_LINEAR_RING_PARSERS_ = ol.xml.makeParsersNS(
ol.format.KML.FLAT_LINEAR_RING_PARSERS_ = ol.xml.makeStructureNS(
ol.format.KML.NAMESPACE_URIS_, {
'coordinates': ol.xml.makeReplacer(ol.format.KML.readFlatCoordinates_)
});
@@ -1345,7 +1356,7 @@ ol.format.KML.FLAT_LINEAR_RING_PARSERS_ = ol.xml.makeParsersNS(
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.KML.FLAT_LINEAR_RINGS_PARSERS_ = ol.xml.makeParsersNS(
ol.format.KML.FLAT_LINEAR_RINGS_PARSERS_ = ol.xml.makeStructureNS(
ol.format.KML.NAMESPACE_URIS_, {
'innerBoundaryIs': ol.format.KML.innerBoundaryIsParser_,
'outerBoundaryIs': ol.format.KML.outerBoundaryIsParser_
@@ -1357,10 +1368,10 @@ ol.format.KML.FLAT_LINEAR_RINGS_PARSERS_ = ol.xml.makeParsersNS(
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.KML.GX_TRACK_PARSERS_ = ol.xml.makeParsersNS(
ol.format.KML.GX_TRACK_PARSERS_ = ol.xml.makeStructureNS(
ol.format.KML.NAMESPACE_URIS_, {
'when': ol.format.KML.whenParser_
}, ol.xml.makeParsersNS(
}, ol.xml.makeStructureNS(
ol.format.KML.GX_NAMESPACE_URIS_, {
'coord': ol.format.KML.gxCoordParser_
}));
@@ -1371,7 +1382,7 @@ ol.format.KML.GX_TRACK_PARSERS_ = ol.xml.makeParsersNS(
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.KML.GEOMETRY_FLAT_COORDINATES_PARSERS_ = ol.xml.makeParsersNS(
ol.format.KML.GEOMETRY_FLAT_COORDINATES_PARSERS_ = ol.xml.makeStructureNS(
ol.format.KML.NAMESPACE_URIS_, {
'coordinates': ol.xml.makeReplacer(ol.format.KML.readFlatCoordinates_)
});
@@ -1382,10 +1393,10 @@ ol.format.KML.GEOMETRY_FLAT_COORDINATES_PARSERS_ = ol.xml.makeParsersNS(
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.KML.ICON_PARSERS_ = ol.xml.makeParsersNS(
ol.format.KML.ICON_PARSERS_ = ol.xml.makeStructureNS(
ol.format.KML.NAMESPACE_URIS_, {
'href': ol.xml.makeObjectPropertySetter(ol.format.KML.readURI_)
}, ol.xml.makeParsersNS(
}, ol.xml.makeStructureNS(
ol.format.KML.GX_NAMESPACE_URIS_, {
'x': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal),
'y': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal),
@@ -1399,7 +1410,7 @@ ol.format.KML.ICON_PARSERS_ = ol.xml.makeParsersNS(
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.KML.ICON_STYLE_PARSERS_ = ol.xml.makeParsersNS(
ol.format.KML.ICON_STYLE_PARSERS_ = ol.xml.makeStructureNS(
ol.format.KML.NAMESPACE_URIS_, {
'Icon': ol.xml.makeObjectPropertySetter(ol.format.KML.readIcon_),
'heading': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal),
@@ -1413,7 +1424,7 @@ ol.format.KML.ICON_STYLE_PARSERS_ = ol.xml.makeParsersNS(
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.KML.INNER_BOUNDARY_IS_PARSERS_ = ol.xml.makeParsersNS(
ol.format.KML.INNER_BOUNDARY_IS_PARSERS_ = ol.xml.makeStructureNS(
ol.format.KML.NAMESPACE_URIS_, {
'LinearRing': ol.xml.makeReplacer(ol.format.KML.readFlatLinearRing_)
});
@@ -1424,7 +1435,7 @@ ol.format.KML.INNER_BOUNDARY_IS_PARSERS_ = ol.xml.makeParsersNS(
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.KML.LABEL_STYLE_PARSERS_ = ol.xml.makeParsersNS(
ol.format.KML.LABEL_STYLE_PARSERS_ = ol.xml.makeStructureNS(
ol.format.KML.NAMESPACE_URIS_, {
'color': ol.xml.makeObjectPropertySetter(ol.format.KML.readColor_),
'scale': ol.xml.makeObjectPropertySetter(ol.format.KML.readScale_)
@@ -1436,7 +1447,7 @@ ol.format.KML.LABEL_STYLE_PARSERS_ = ol.xml.makeParsersNS(
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.KML.LINE_STYLE_PARSERS_ = ol.xml.makeParsersNS(
ol.format.KML.LINE_STYLE_PARSERS_ = ol.xml.makeStructureNS(
ol.format.KML.NAMESPACE_URIS_, {
'color': ol.xml.makeObjectPropertySetter(ol.format.KML.readColor_),
'width': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal)
@@ -1448,7 +1459,7 @@ ol.format.KML.LINE_STYLE_PARSERS_ = ol.xml.makeParsersNS(
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.KML.MULTI_GEOMETRY_PARSERS_ = ol.xml.makeParsersNS(
ol.format.KML.MULTI_GEOMETRY_PARSERS_ = ol.xml.makeStructureNS(
ol.format.KML.NAMESPACE_URIS_, {
'LineString': ol.xml.makeArrayPusher(ol.format.KML.readLineString_),
'LinearRing': ol.xml.makeArrayPusher(ol.format.KML.readLinearRing_),
@@ -1463,7 +1474,7 @@ ol.format.KML.MULTI_GEOMETRY_PARSERS_ = ol.xml.makeParsersNS(
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.KML.GX_MULTITRACK_GEOMETRY_PARSERS_ = ol.xml.makeParsersNS(
ol.format.KML.GX_MULTITRACK_GEOMETRY_PARSERS_ = ol.xml.makeStructureNS(
ol.format.KML.GX_NAMESPACE_URIS_, {
'Track': ol.xml.makeArrayPusher(ol.format.KML.readGxTrack_)
});
@@ -1474,7 +1485,7 @@ ol.format.KML.GX_MULTITRACK_GEOMETRY_PARSERS_ = ol.xml.makeParsersNS(
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.KML.NETWORK_LINK_PARSERS_ = ol.xml.makeParsersNS(
ol.format.KML.NETWORK_LINK_PARSERS_ = ol.xml.makeStructureNS(
ol.format.KML.NAMESPACE_URIS_, {
'ExtendedData': ol.format.KML.ExtendedDataParser_,
'Link': ol.format.KML.LinkParser_,
@@ -1492,7 +1503,7 @@ ol.format.KML.NETWORK_LINK_PARSERS_ = ol.xml.makeParsersNS(
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.KML.LINK_PARSERS_ = ol.xml.makeParsersNS(
ol.format.KML.LINK_PARSERS_ = ol.xml.makeStructureNS(
ol.format.KML.NAMESPACE_URIS_, {
'href': ol.xml.makeObjectPropertySetter(ol.format.KML.readURI_)
});
@@ -1503,7 +1514,7 @@ ol.format.KML.LINK_PARSERS_ = ol.xml.makeParsersNS(
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.KML.OUTER_BOUNDARY_IS_PARSERS_ = ol.xml.makeParsersNS(
ol.format.KML.OUTER_BOUNDARY_IS_PARSERS_ = ol.xml.makeStructureNS(
ol.format.KML.NAMESPACE_URIS_, {
'LinearRing': ol.xml.makeReplacer(ol.format.KML.readFlatLinearRing_)
});
@@ -1514,7 +1525,7 @@ ol.format.KML.OUTER_BOUNDARY_IS_PARSERS_ = ol.xml.makeParsersNS(
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.KML.PAIR_PARSERS_ = ol.xml.makeParsersNS(
ol.format.KML.PAIR_PARSERS_ = ol.xml.makeStructureNS(
ol.format.KML.NAMESPACE_URIS_, {
'Style': ol.xml.makeObjectPropertySetter(ol.format.KML.readStyle_),
'key': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
@@ -1527,7 +1538,7 @@ ol.format.KML.PAIR_PARSERS_ = ol.xml.makeParsersNS(
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.KML.PLACEMARK_PARSERS_ = ol.xml.makeParsersNS(
ol.format.KML.PLACEMARK_PARSERS_ = ol.xml.makeStructureNS(
ol.format.KML.NAMESPACE_URIS_, {
'ExtendedData': ol.format.KML.ExtendedDataParser_,
'MultiGeometry': ol.xml.makeObjectPropertySetter(
@@ -1549,7 +1560,7 @@ ol.format.KML.PLACEMARK_PARSERS_ = ol.xml.makeParsersNS(
'phoneNumber': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
'styleUrl': ol.xml.makeObjectPropertySetter(ol.format.KML.readURI_),
'visibility': ol.xml.makeObjectPropertySetter(ol.format.XSD.readBoolean)
}, ol.xml.makeParsersNS(
}, ol.xml.makeStructureNS(
ol.format.KML.GX_NAMESPACE_URIS_, {
'MultiTrack': ol.xml.makeObjectPropertySetter(
ol.format.KML.readGxMultiTrack_, 'geometry'),
@@ -1564,7 +1575,7 @@ ol.format.KML.PLACEMARK_PARSERS_ = ol.xml.makeParsersNS(
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.KML.POLY_STYLE_PARSERS_ = ol.xml.makeParsersNS(
ol.format.KML.POLY_STYLE_PARSERS_ = ol.xml.makeStructureNS(
ol.format.KML.NAMESPACE_URIS_, {
'color': ol.xml.makeObjectPropertySetter(ol.format.KML.readColor_),
'fill': ol.xml.makeObjectPropertySetter(ol.format.XSD.readBoolean),
@@ -1577,7 +1588,7 @@ ol.format.KML.POLY_STYLE_PARSERS_ = ol.xml.makeParsersNS(
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.KML.SCHEMA_DATA_PARSERS_ = ol.xml.makeParsersNS(
ol.format.KML.SCHEMA_DATA_PARSERS_ = ol.xml.makeStructureNS(
ol.format.KML.NAMESPACE_URIS_, {
'SimpleData': ol.format.KML.SimpleDataParser_
});
@@ -1588,7 +1599,7 @@ ol.format.KML.SCHEMA_DATA_PARSERS_ = ol.xml.makeParsersNS(
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.KML.STYLE_PARSERS_ = ol.xml.makeParsersNS(
ol.format.KML.STYLE_PARSERS_ = ol.xml.makeStructureNS(
ol.format.KML.NAMESPACE_URIS_, {
'IconStyle': ol.format.KML.IconStyleParser_,
'LabelStyle': ol.format.KML.LabelStyleParser_,
@@ -1602,7 +1613,7 @@ ol.format.KML.STYLE_PARSERS_ = ol.xml.makeParsersNS(
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.KML.STYLE_MAP_PARSERS_ = ol.xml.makeParsersNS(
ol.format.KML.STYLE_MAP_PARSERS_ = ol.xml.makeStructureNS(
ol.format.KML.NAMESPACE_URIS_, {
'Pair': ol.format.KML.PairDataParser_
});
@@ -1629,8 +1640,9 @@ ol.format.KML.prototype.readDocumentOrFolder_ = function(node, objectStack) {
goog.asserts.assert(localName == 'Document' || localName == 'Folder',
'localName should be Document or Folder');
// FIXME use scope somehow
var parsersNS = ol.xml.makeParsersNS(
var parsersNS = ol.xml.makeStructureNS(
ol.format.KML.NAMESPACE_URIS_, {
'Document': ol.xml.makeArrayExtender(this.readDocumentOrFolder_, this),
'Folder': ol.xml.makeArrayExtender(this.readDocumentOrFolder_, this),
'Placemark': ol.xml.makeArrayPusher(this.readPlacemark_, this),
'Style': goog.bind(this.readSharedStyle_, this),
@@ -1668,13 +1680,27 @@ ol.format.KML.prototype.readPlacemark_ = function(node, objectStack) {
feature.setId(id);
}
var options = /** @type {olx.format.ReadOptions} */ (objectStack[0]);
if (goog.isDefAndNotNull(object.geometry)) {
ol.format.Feature.transformWithOptions(object.geometry, false, options);
var geometry = object['geometry'];
if (goog.isDefAndNotNull(geometry)) {
ol.format.Feature.transformWithOptions(geometry, false, options);
}
feature.setProperties(object);
feature.setGeometry(geometry);
goog.object.remove(object, 'geometry');
if (this.extractStyles_) {
feature.setStyle(this.featureStyleFunction_);
var style = object['Style'];
var styleUrl = object['styleUrl'];
var styleFunction = ol.format.KML.createFeatureStyleFunction_(
style, styleUrl, this.defaultStyle_, this.sharedStyles_);
feature.setStyle(styleFunction);
}
goog.object.remove(object, 'Style');
// we do not remove the styleUrl property from the object, so it
// gets stored on feature when setProperties is called
feature.setProperties(object);
return feature;
};

View File

@@ -169,7 +169,7 @@ ol.format.OSMXML.NAMESPACE_URIS_ = [
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.OSMXML.WAY_PARSERS_ = ol.xml.makeParsersNS(
ol.format.OSMXML.WAY_PARSERS_ = ol.xml.makeStructureNS(
ol.format.OSMXML.NAMESPACE_URIS_, {
'nd': ol.format.OSMXML.readNd_,
'tag': ol.format.OSMXML.readTag_
@@ -181,7 +181,7 @@ ol.format.OSMXML.WAY_PARSERS_ = ol.xml.makeParsersNS(
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.OSMXML.PARSERS_ = ol.xml.makeParsersNS(
ol.format.OSMXML.PARSERS_ = ol.xml.makeStructureNS(
ol.format.OSMXML.NAMESPACE_URIS_, {
'node': ol.format.OSMXML.readNode_,
'way': ol.format.OSMXML.readWay_
@@ -193,7 +193,7 @@ ol.format.OSMXML.PARSERS_ = ol.xml.makeParsersNS(
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.OSMXML.NODE_PARSERS_ = ol.xml.makeParsersNS(
ol.format.OSMXML.NODE_PARSERS_ = ol.xml.makeStructureNS(
ol.format.OSMXML.NAMESPACE_URIS_, {
'tag': ol.format.OSMXML.readTag_
});

View File

@@ -306,7 +306,7 @@ ol.format.OWS.NAMESPACE_URIS_ = [
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.OWS.PARSERS_ = ol.xml.makeParsersNS(
ol.format.OWS.PARSERS_ = ol.xml.makeStructureNS(
ol.format.OWS.NAMESPACE_URIS_, {
'ServiceIdentification': ol.xml.makeObjectPropertySetter(
ol.format.OWS.readServiceIdentification_),
@@ -322,7 +322,7 @@ ol.format.OWS.PARSERS_ = ol.xml.makeParsersNS(
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.OWS.ADDRESS_PARSERS_ = ol.xml.makeParsersNS(
ol.format.OWS.ADDRESS_PARSERS_ = ol.xml.makeStructureNS(
ol.format.OWS.NAMESPACE_URIS_, {
'DeliveryPoint': ol.xml.makeObjectPropertySetter(
ol.format.XSD.readString),
@@ -341,7 +341,7 @@ ol.format.OWS.ADDRESS_PARSERS_ = ol.xml.makeParsersNS(
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.OWS.ALLOWED_VALUES_PARSERS_ = ol.xml.makeParsersNS(
ol.format.OWS.ALLOWED_VALUES_PARSERS_ = ol.xml.makeStructureNS(
ol.format.OWS.NAMESPACE_URIS_, {
'Value': ol.xml.makeObjectPropertyPusher(ol.format.OWS.readValue_)
});
@@ -352,7 +352,7 @@ ol.format.OWS.ALLOWED_VALUES_PARSERS_ = ol.xml.makeParsersNS(
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.OWS.CONSTRAINT_PARSERS_ = ol.xml.makeParsersNS(
ol.format.OWS.CONSTRAINT_PARSERS_ = ol.xml.makeStructureNS(
ol.format.OWS.NAMESPACE_URIS_, {
'AllowedValues': ol.xml.makeObjectPropertySetter(
ol.format.OWS.readAllowedValues_)
@@ -364,7 +364,7 @@ ol.format.OWS.CONSTRAINT_PARSERS_ = ol.xml.makeParsersNS(
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.OWS.CONTACT_INFO_PARSERS_ = ol.xml.makeParsersNS(
ol.format.OWS.CONTACT_INFO_PARSERS_ = ol.xml.makeStructureNS(
ol.format.OWS.NAMESPACE_URIS_, {
'Phone': ol.xml.makeObjectPropertySetter(ol.format.OWS.readPhone_),
'Address': ol.xml.makeObjectPropertySetter(ol.format.OWS.readAddress_)
@@ -376,7 +376,7 @@ ol.format.OWS.CONTACT_INFO_PARSERS_ = ol.xml.makeParsersNS(
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.OWS.DCP_PARSERS_ = ol.xml.makeParsersNS(
ol.format.OWS.DCP_PARSERS_ = ol.xml.makeStructureNS(
ol.format.OWS.NAMESPACE_URIS_, {
'HTTP': ol.xml.makeObjectPropertySetter(ol.format.OWS.readHttp_)
});
@@ -387,7 +387,7 @@ ol.format.OWS.DCP_PARSERS_ = ol.xml.makeParsersNS(
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.OWS.HTTP_PARSERS_ = ol.xml.makeParsersNS(
ol.format.OWS.HTTP_PARSERS_ = ol.xml.makeStructureNS(
ol.format.OWS.NAMESPACE_URIS_, {
'Get': ol.xml.makeObjectPropertyPusher(ol.format.OWS.readGet_),
'Post': undefined // TODO
@@ -399,7 +399,7 @@ ol.format.OWS.HTTP_PARSERS_ = ol.xml.makeParsersNS(
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.OWS.OPERATION_PARSERS_ = ol.xml.makeParsersNS(
ol.format.OWS.OPERATION_PARSERS_ = ol.xml.makeStructureNS(
ol.format.OWS.NAMESPACE_URIS_, {
'DCP': ol.xml.makeObjectPropertySetter(ol.format.OWS.readDcp_)
});
@@ -410,7 +410,7 @@ ol.format.OWS.OPERATION_PARSERS_ = ol.xml.makeParsersNS(
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.OWS.OPERATIONS_METADATA_PARSERS_ = ol.xml.makeParsersNS(
ol.format.OWS.OPERATIONS_METADATA_PARSERS_ = ol.xml.makeStructureNS(
ol.format.OWS.NAMESPACE_URIS_, {
'Operation': ol.format.OWS.readOperation_
});
@@ -421,7 +421,7 @@ ol.format.OWS.OPERATIONS_METADATA_PARSERS_ = ol.xml.makeParsersNS(
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.OWS.PHONE_PARSERS_ = ol.xml.makeParsersNS(
ol.format.OWS.PHONE_PARSERS_ = ol.xml.makeStructureNS(
ol.format.OWS.NAMESPACE_URIS_, {
'Voice': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
'Facsimile': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString)
@@ -433,7 +433,7 @@ ol.format.OWS.PHONE_PARSERS_ = ol.xml.makeParsersNS(
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.OWS.REQUEST_METHOD_PARSERS_ = ol.xml.makeParsersNS(
ol.format.OWS.REQUEST_METHOD_PARSERS_ = ol.xml.makeStructureNS(
ol.format.OWS.NAMESPACE_URIS_, {
'Constraint': ol.xml.makeObjectPropertyPusher(
ol.format.OWS.readConstraint_)
@@ -446,7 +446,7 @@ ol.format.OWS.REQUEST_METHOD_PARSERS_ = ol.xml.makeParsersNS(
* @private
*/
ol.format.OWS.SERVICE_CONTACT_PARSERS_ =
ol.xml.makeParsersNS(
ol.xml.makeStructureNS(
ol.format.OWS.NAMESPACE_URIS_, {
'IndividualName': ol.xml.makeObjectPropertySetter(
ol.format.XSD.readString),
@@ -462,7 +462,7 @@ ol.format.OWS.SERVICE_CONTACT_PARSERS_ =
* @private
*/
ol.format.OWS.SERVICE_IDENTIFICATION_PARSERS_ =
ol.xml.makeParsersNS(
ol.xml.makeStructureNS(
ol.format.OWS.NAMESPACE_URIS_, {
'Title': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
'ServiceTypeVersion': ol.xml.makeObjectPropertySetter(
@@ -477,7 +477,7 @@ ol.format.OWS.SERVICE_IDENTIFICATION_PARSERS_ =
* @private
*/
ol.format.OWS.SERVICE_PROVIDER_PARSERS_ =
ol.xml.makeParsersNS(
ol.xml.makeStructureNS(
ol.format.OWS.NAMESPACE_URIS_, {
'ProviderName': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
'ProviderSite': ol.xml.makeObjectPropertySetter(ol.format.XLink.readHref),

View File

@@ -291,8 +291,7 @@ ol.format.TopoJSON.prototype.readFeaturesFromObject = function(
var topoJSONTopology = /** @type {TopoJSONTopology} */ (object);
var transform, scale = null, translate = null;
if (goog.isDef(topoJSONTopology.transform)) {
transform = /** @type {TopoJSONTransform} */
(topoJSONTopology.transform);
transform = topoJSONTopology.transform;
scale = transform.scale;
translate = transform.translate;
}

View File

@@ -157,10 +157,10 @@ ol.format.WMSCapabilities.readEXGeographicBoundingBox_ =
!goog.isDef(eastBoundLongitude) || !goog.isDef(northBoundLatitude)) {
return undefined;
}
return [
return /** @type {ol.Extent} */ ([
westBoundLongitude, southBoundLatitude,
eastBoundLongitude, northBoundLatitude
];
]);
};
@@ -583,7 +583,7 @@ ol.format.WMSCapabilities.NAMESPACE_URIS_ = [
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.WMSCapabilities.PARSERS_ = ol.xml.makeParsersNS(
ol.format.WMSCapabilities.PARSERS_ = ol.xml.makeStructureNS(
ol.format.WMSCapabilities.NAMESPACE_URIS_, {
'Service': ol.xml.makeObjectPropertySetter(
ol.format.WMSCapabilities.readService_),
@@ -597,7 +597,7 @@ ol.format.WMSCapabilities.PARSERS_ = ol.xml.makeParsersNS(
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.WMSCapabilities.CAPABILITY_PARSERS_ = ol.xml.makeParsersNS(
ol.format.WMSCapabilities.CAPABILITY_PARSERS_ = ol.xml.makeStructureNS(
ol.format.WMSCapabilities.NAMESPACE_URIS_, {
'Request': ol.xml.makeObjectPropertySetter(
ol.format.WMSCapabilities.readRequest_),
@@ -613,7 +613,7 @@ ol.format.WMSCapabilities.CAPABILITY_PARSERS_ = ol.xml.makeParsersNS(
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.WMSCapabilities.SERVICE_PARSERS_ = ol.xml.makeParsersNS(
ol.format.WMSCapabilities.SERVICE_PARSERS_ = ol.xml.makeStructureNS(
ol.format.WMSCapabilities.NAMESPACE_URIS_, {
'Name': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
'Title': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
@@ -641,7 +641,7 @@ ol.format.WMSCapabilities.SERVICE_PARSERS_ = ol.xml.makeParsersNS(
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.WMSCapabilities.CONTACT_INFORMATION_PARSERS_ = ol.xml.makeParsersNS(
ol.format.WMSCapabilities.CONTACT_INFORMATION_PARSERS_ = ol.xml.makeStructureNS(
ol.format.WMSCapabilities.NAMESPACE_URIS_, {
'ContactPersonPrimary': ol.xml.makeObjectPropertySetter(
ol.format.WMSCapabilities.readContactPersonPrimary_),
@@ -663,7 +663,7 @@ ol.format.WMSCapabilities.CONTACT_INFORMATION_PARSERS_ = ol.xml.makeParsersNS(
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.WMSCapabilities.CONTACT_PERSON_PARSERS_ = ol.xml.makeParsersNS(
ol.format.WMSCapabilities.CONTACT_PERSON_PARSERS_ = ol.xml.makeStructureNS(
ol.format.WMSCapabilities.NAMESPACE_URIS_, {
'ContactPerson': ol.xml.makeObjectPropertySetter(
ol.format.XSD.readString),
@@ -677,7 +677,7 @@ ol.format.WMSCapabilities.CONTACT_PERSON_PARSERS_ = ol.xml.makeParsersNS(
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.WMSCapabilities.CONTACT_ADDRESS_PARSERS_ = ol.xml.makeParsersNS(
ol.format.WMSCapabilities.CONTACT_ADDRESS_PARSERS_ = ol.xml.makeStructureNS(
ol.format.WMSCapabilities.NAMESPACE_URIS_, {
'AddressType': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
'Address': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
@@ -694,7 +694,7 @@ ol.format.WMSCapabilities.CONTACT_ADDRESS_PARSERS_ = ol.xml.makeParsersNS(
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.WMSCapabilities.EXCEPTION_PARSERS_ = ol.xml.makeParsersNS(
ol.format.WMSCapabilities.EXCEPTION_PARSERS_ = ol.xml.makeStructureNS(
ol.format.WMSCapabilities.NAMESPACE_URIS_, {
'Format': ol.xml.makeArrayPusher(ol.format.XSD.readString)
});
@@ -705,7 +705,7 @@ ol.format.WMSCapabilities.EXCEPTION_PARSERS_ = ol.xml.makeParsersNS(
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.WMSCapabilities.LAYER_PARSERS_ = ol.xml.makeParsersNS(
ol.format.WMSCapabilities.LAYER_PARSERS_ = ol.xml.makeStructureNS(
ol.format.WMSCapabilities.NAMESPACE_URIS_, {
'Name': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
'Title': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
@@ -746,7 +746,7 @@ ol.format.WMSCapabilities.LAYER_PARSERS_ = ol.xml.makeParsersNS(
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.WMSCapabilities.ATTRIBUTION_PARSERS_ = ol.xml.makeParsersNS(
ol.format.WMSCapabilities.ATTRIBUTION_PARSERS_ = ol.xml.makeStructureNS(
ol.format.WMSCapabilities.NAMESPACE_URIS_, {
'Title': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
'OnlineResource': ol.xml.makeObjectPropertySetter(
@@ -762,7 +762,7 @@ ol.format.WMSCapabilities.ATTRIBUTION_PARSERS_ = ol.xml.makeParsersNS(
* @private
*/
ol.format.WMSCapabilities.EX_GEOGRAPHIC_BOUNDING_BOX_PARSERS_ =
ol.xml.makeParsersNS(ol.format.WMSCapabilities.NAMESPACE_URIS_, {
ol.xml.makeStructureNS(ol.format.WMSCapabilities.NAMESPACE_URIS_, {
'westBoundLongitude': ol.xml.makeObjectPropertySetter(
ol.format.XSD.readDecimal),
'eastBoundLongitude': ol.xml.makeObjectPropertySetter(
@@ -779,7 +779,7 @@ ol.format.WMSCapabilities.EX_GEOGRAPHIC_BOUNDING_BOX_PARSERS_ =
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.WMSCapabilities.REQUEST_PARSERS_ = ol.xml.makeParsersNS(
ol.format.WMSCapabilities.REQUEST_PARSERS_ = ol.xml.makeStructureNS(
ol.format.WMSCapabilities.NAMESPACE_URIS_, {
'GetCapabilities': ol.xml.makeObjectPropertySetter(
ol.format.WMSCapabilities.readOperationType_),
@@ -795,7 +795,7 @@ ol.format.WMSCapabilities.REQUEST_PARSERS_ = ol.xml.makeParsersNS(
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.WMSCapabilities.OPERATIONTYPE_PARSERS_ = ol.xml.makeParsersNS(
ol.format.WMSCapabilities.OPERATIONTYPE_PARSERS_ = ol.xml.makeStructureNS(
ol.format.WMSCapabilities.NAMESPACE_URIS_, {
'Format': ol.xml.makeObjectPropertyPusher(ol.format.XSD.readString),
'DCPType': ol.xml.makeObjectPropertyPusher(
@@ -808,7 +808,7 @@ ol.format.WMSCapabilities.OPERATIONTYPE_PARSERS_ = ol.xml.makeParsersNS(
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.WMSCapabilities.DCPTYPE_PARSERS_ = ol.xml.makeParsersNS(
ol.format.WMSCapabilities.DCPTYPE_PARSERS_ = ol.xml.makeStructureNS(
ol.format.WMSCapabilities.NAMESPACE_URIS_, {
'HTTP': ol.xml.makeObjectPropertySetter(
ol.format.WMSCapabilities.readHTTP_)
@@ -820,7 +820,7 @@ ol.format.WMSCapabilities.DCPTYPE_PARSERS_ = ol.xml.makeParsersNS(
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.WMSCapabilities.HTTP_PARSERS_ = ol.xml.makeParsersNS(
ol.format.WMSCapabilities.HTTP_PARSERS_ = ol.xml.makeStructureNS(
ol.format.WMSCapabilities.NAMESPACE_URIS_, {
'Get': ol.xml.makeObjectPropertySetter(
ol.format.WMSCapabilities.readFormatOnlineresource_),
@@ -834,7 +834,7 @@ ol.format.WMSCapabilities.HTTP_PARSERS_ = ol.xml.makeParsersNS(
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.WMSCapabilities.STYLE_PARSERS_ = ol.xml.makeParsersNS(
ol.format.WMSCapabilities.STYLE_PARSERS_ = ol.xml.makeStructureNS(
ol.format.WMSCapabilities.NAMESPACE_URIS_, {
'Name': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
'Title': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
@@ -853,8 +853,8 @@ ol.format.WMSCapabilities.STYLE_PARSERS_ = ol.xml.makeParsersNS(
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.WMSCapabilities.FORMAT_ONLINERESOURCE_PARSERS_ = ol.xml.makeParsersNS(
ol.format.WMSCapabilities.NAMESPACE_URIS_, {
ol.format.WMSCapabilities.FORMAT_ONLINERESOURCE_PARSERS_ =
ol.xml.makeStructureNS(ol.format.WMSCapabilities.NAMESPACE_URIS_, {
'Format': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
'OnlineResource': ol.xml.makeObjectPropertySetter(
ol.format.XLink.readHref)
@@ -866,7 +866,7 @@ ol.format.WMSCapabilities.FORMAT_ONLINERESOURCE_PARSERS_ = ol.xml.makeParsersNS(
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.WMSCapabilities.KEYWORDLIST_PARSERS_ = ol.xml.makeParsersNS(
ol.format.WMSCapabilities.KEYWORDLIST_PARSERS_ = ol.xml.makeStructureNS(
ol.format.WMSCapabilities.NAMESPACE_URIS_, {
'Keyword': ol.xml.makeArrayPusher(ol.format.XSD.readString)
});

View File

@@ -5,7 +5,6 @@ goog.require('goog.asserts');
goog.require('goog.dom.NodeType');
goog.require('goog.object');
goog.require('goog.string');
goog.require('ol.format.GML');
goog.require('ol.format.GML2');
goog.require('ol.format.XMLFeature');
goog.require('ol.xml');
@@ -98,7 +97,7 @@ ol.format.WMSGetFeatureInfo.prototype.readFeatures_ =
var parsers = {};
parsers[featureType] = ol.xml.makeArrayPusher(
this.gmlFormat_.readFeatureElement, this.gmlFormat_);
var parsersNS = ol.xml.makeParsersNS(
var parsersNS = ol.xml.makeStructureNS(
[context['featureNS'], null], parsers);
layer.namespaceURI = this.featureNS_;
var layerFeatures = ol.xml.pushParseAndPop(

View File

@@ -2,7 +2,6 @@ goog.provide('ol.format.WMTSCapabilities');
goog.require('goog.asserts');
goog.require('goog.dom.NodeType');
goog.require('goog.object');
goog.require('goog.string');
goog.require('ol.extent');
goog.require('ol.format.OWS');
@@ -75,7 +74,7 @@ ol.format.WMTSCapabilities.prototype.readFromNode = function(node) {
if (!goog.isDef(WMTSCapabilityObject)) {
return null;
}
goog.object.set(WMTSCapabilityObject, 'version', this.version);
WMTSCapabilityObject['version'] = this.version;
WMTSCapabilityObject = ol.xml.pushParseAndPop(WMTSCapabilityObject,
ol.format.WMTSCapabilities.PARSERS_, node, []);
return goog.isDef(WMTSCapabilityObject) ? WMTSCapabilityObject : null;
@@ -271,7 +270,7 @@ ol.format.WMTSCapabilities.OWS_NAMESPACE_URIS_ = [
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.WMTSCapabilities.PARSERS_ = ol.xml.makeParsersNS(
ol.format.WMTSCapabilities.PARSERS_ = ol.xml.makeStructureNS(
ol.format.WMTSCapabilities.NAMESPACE_URIS_, {
'Contents': ol.xml.makeObjectPropertySetter(
ol.format.WMTSCapabilities.readContents_)
@@ -283,7 +282,7 @@ ol.format.WMTSCapabilities.PARSERS_ = ol.xml.makeParsersNS(
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.WMTSCapabilities.CONTENTS_PARSERS_ = ol.xml.makeParsersNS(
ol.format.WMTSCapabilities.CONTENTS_PARSERS_ = ol.xml.makeStructureNS(
ol.format.WMTSCapabilities.NAMESPACE_URIS_, {
'Layer': ol.xml.makeObjectPropertyPusher(
ol.format.WMTSCapabilities.readLayer_),
@@ -297,7 +296,7 @@ ol.format.WMTSCapabilities.CONTENTS_PARSERS_ = ol.xml.makeParsersNS(
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.WMTSCapabilities.LAYER_PARSERS_ = ol.xml.makeParsersNS(
ol.format.WMTSCapabilities.LAYER_PARSERS_ = ol.xml.makeStructureNS(
ol.format.WMTSCapabilities.NAMESPACE_URIS_, {
'Style': ol.xml.makeObjectPropertyPusher(
ol.format.WMTSCapabilities.readStyle_),
@@ -307,7 +306,7 @@ ol.format.WMTSCapabilities.LAYER_PARSERS_ = ol.xml.makeParsersNS(
ol.format.WMTSCapabilities.readTileMatrixSetLink_),
'ResourceURL': ol.xml.makeObjectPropertyPusher(
ol.format.WMTSCapabilities.readResourceUrl_)
}, ol.xml.makeParsersNS(ol.format.WMTSCapabilities.OWS_NAMESPACE_URIS_, {
}, ol.xml.makeStructureNS(ol.format.WMTSCapabilities.OWS_NAMESPACE_URIS_, {
'Title': ol.xml.makeObjectPropertySetter(
ol.format.XSD.readString),
'Abstract': ol.xml.makeObjectPropertySetter(
@@ -324,11 +323,11 @@ ol.format.WMTSCapabilities.LAYER_PARSERS_ = ol.xml.makeParsersNS(
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.WMTSCapabilities.STYLE_PARSERS_ = ol.xml.makeParsersNS(
ol.format.WMTSCapabilities.STYLE_PARSERS_ = ol.xml.makeStructureNS(
ol.format.WMTSCapabilities.NAMESPACE_URIS_, {
'LegendURL': ol.xml.makeObjectPropertyPusher(
ol.format.WMTSCapabilities.readLegendUrl_)
}, ol.xml.makeParsersNS(ol.format.WMTSCapabilities.OWS_NAMESPACE_URIS_, {
}, ol.xml.makeStructureNS(ol.format.WMTSCapabilities.OWS_NAMESPACE_URIS_, {
'Title': ol.xml.makeObjectPropertySetter(
ol.format.XSD.readString),
'Identifier': ol.xml.makeObjectPropertySetter(
@@ -341,7 +340,7 @@ ol.format.WMTSCapabilities.STYLE_PARSERS_ = ol.xml.makeParsersNS(
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.WMTSCapabilities.TMS_LINKS_PARSERS_ = ol.xml.makeParsersNS(
ol.format.WMTSCapabilities.TMS_LINKS_PARSERS_ = ol.xml.makeStructureNS(
ol.format.WMTSCapabilities.NAMESPACE_URIS_, {
'TileMatrixSet': ol.xml.makeObjectPropertySetter(
ol.format.XSD.readString)
@@ -353,7 +352,7 @@ ol.format.WMTSCapabilities.TMS_LINKS_PARSERS_ = ol.xml.makeParsersNS(
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.WMTSCapabilities.WGS84_BBOX_READERS_ = ol.xml.makeParsersNS(
ol.format.WMTSCapabilities.WGS84_BBOX_READERS_ = ol.xml.makeStructureNS(
ol.format.WMTSCapabilities.OWS_NAMESPACE_URIS_, {
'LowerCorner': ol.xml.makeArrayPusher(
ol.format.WMTSCapabilities.readCoordinates_),
@@ -367,13 +366,13 @@ ol.format.WMTSCapabilities.WGS84_BBOX_READERS_ = ol.xml.makeParsersNS(
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.WMTSCapabilities.TMS_PARSERS_ = ol.xml.makeParsersNS(
ol.format.WMTSCapabilities.TMS_PARSERS_ = ol.xml.makeStructureNS(
ol.format.WMTSCapabilities.NAMESPACE_URIS_, {
'WellKnownScaleSet': ol.xml.makeObjectPropertySetter(
ol.format.XSD.readString),
'TileMatrix': ol.xml.makeObjectPropertyPusher(
ol.format.WMTSCapabilities.readTileMatrix_)
}, ol.xml.makeParsersNS(ol.format.WMTSCapabilities.OWS_NAMESPACE_URIS_, {
}, ol.xml.makeStructureNS(ol.format.WMTSCapabilities.OWS_NAMESPACE_URIS_, {
'SupportedCRS': ol.xml.makeObjectPropertySetter(
ol.format.XSD.readString),
'Identifier': ol.xml.makeObjectPropertySetter(
@@ -386,7 +385,7 @@ ol.format.WMTSCapabilities.TMS_PARSERS_ = ol.xml.makeParsersNS(
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.WMTSCapabilities.TM_PARSERS_ = ol.xml.makeParsersNS(
ol.format.WMTSCapabilities.TM_PARSERS_ = ol.xml.makeStructureNS(
ol.format.WMTSCapabilities.NAMESPACE_URIS_, {
'TopLeftCorner': ol.xml.makeObjectPropertySetter(
ol.format.WMTSCapabilities.readCoordinates_),
@@ -400,7 +399,7 @@ ol.format.WMTSCapabilities.TM_PARSERS_ = ol.xml.makeParsersNS(
ol.format.XSD.readNonNegativeInteger),
'MatrixHeight': ol.xml.makeObjectPropertySetter(
ol.format.XSD.readNonNegativeInteger)
}, ol.xml.makeParsersNS(ol.format.WMTSCapabilities.OWS_NAMESPACE_URIS_, {
}, ol.xml.makeStructureNS(ol.format.WMTSCapabilities.OWS_NAMESPACE_URIS_, {
'Identifier': ol.xml.makeObjectPropertySetter(
ol.format.XSD.readString)
}));

View File

@@ -24,8 +24,7 @@ goog.require('ol.proj');
ol.geom.Circle = function(center, opt_radius, opt_layout) {
goog.base(this);
var radius = goog.isDef(opt_radius) ? opt_radius : 0;
this.setCenterAndRadius(center, radius,
/** @type {ol.geom.GeometryLayout|undefined} */ (opt_layout));
this.setCenterAndRadius(center, radius, opt_layout);
};
goog.inherits(ol.geom.Circle, ol.geom.SimpleGeometry);

View File

@@ -39,8 +39,7 @@ ol.geom.LinearRing = function(coordinates, opt_layout) {
*/
this.maxDeltaRevision_ = -1;
this.setCoordinates(coordinates,
/** @type {ol.geom.GeometryLayout|undefined} */ (opt_layout));
this.setCoordinates(coordinates, opt_layout);
};
goog.inherits(ol.geom.LinearRing, ol.geom.SimpleGeometry);

View File

@@ -55,8 +55,7 @@ ol.geom.LineString = function(coordinates, opt_layout) {
*/
this.maxDeltaRevision_ = -1;
this.setCoordinates(coordinates,
/** @type {ol.geom.GeometryLayout|undefined} */ (opt_layout));
this.setCoordinates(coordinates, opt_layout);
};
goog.inherits(ol.geom.LineString, ol.geom.SimpleGeometry);

View File

@@ -48,8 +48,7 @@ ol.geom.MultiLineString = function(coordinates, opt_layout) {
*/
this.maxDeltaRevision_ = -1;
this.setCoordinates(coordinates,
/** @type {ol.geom.GeometryLayout|undefined} */ (opt_layout));
this.setCoordinates(coordinates, opt_layout);
};
goog.inherits(ol.geom.MultiLineString, ol.geom.SimpleGeometry);

View File

@@ -25,8 +25,7 @@ goog.require('ol.math');
*/
ol.geom.MultiPoint = function(coordinates, opt_layout) {
goog.base(this);
this.setCoordinates(coordinates,
/** @type {ol.geom.GeometryLayout|undefined} */ (opt_layout));
this.setCoordinates(coordinates, opt_layout);
};
goog.inherits(ol.geom.MultiPoint, ol.geom.SimpleGeometry);

View File

@@ -78,8 +78,7 @@ ol.geom.MultiPolygon = function(coordinates, opt_layout) {
*/
this.orientedFlatCoordinates_ = null;
this.setCoordinates(coordinates,
/** @type {ol.geom.GeometryLayout|undefined} */ (opt_layout));
this.setCoordinates(coordinates, opt_layout);
};
goog.inherits(ol.geom.MultiPolygon, ol.geom.SimpleGeometry);

View File

@@ -21,8 +21,7 @@ goog.require('ol.math');
*/
ol.geom.Point = function(coordinates, opt_layout) {
goog.base(this);
this.setCoordinates(coordinates,
/** @type {ol.geom.GeometryLayout|undefined} */ (opt_layout));
this.setCoordinates(coordinates, opt_layout);
};
goog.inherits(ol.geom.Point, ol.geom.SimpleGeometry);

View File

@@ -77,8 +77,7 @@ ol.geom.Polygon = function(coordinates, opt_layout) {
*/
this.orientedFlatCoordinates_ = null;
this.setCoordinates(coordinates,
/** @type {ol.geom.GeometryLayout|undefined} */ (opt_layout));
this.setCoordinates(coordinates, opt_layout);
};
goog.inherits(ol.geom.Polygon, ol.geom.SimpleGeometry);

View File

@@ -58,6 +58,30 @@ ol.Graticule = function(opt_options) {
*/
this.minLon_ = -Infinity;
/**
* @type {number}
* @private
*/
this.maxLatP_ = Infinity;
/**
* @type {number}
* @private
*/
this.maxLonP_ = Infinity;
/**
* @type {number}
* @private
*/
this.minLatP_ = -Infinity;
/**
* @type {number}
* @private
*/
this.minLonP_ = -Infinity;
/**
* @type {number}
* @private
@@ -135,6 +159,8 @@ ol.Graticule.intervals_ = [90, 45, 30, 20, 10, 5, 2, 1, 0.5, 0.2, 0.1, 0.05,
/**
* @param {number} lon Longitude.
* @param {number} minLat Minimal latitude.
* @param {number} maxLat Maximal latitude.
* @param {number} squaredTolerance Squared tolerance.
* @param {ol.Extent} extent Extent.
* @param {number} index Index.
@@ -142,8 +168,9 @@ ol.Graticule.intervals_ = [90, 45, 30, 20, 10, 5, 2, 1, 0.5, 0.2, 0.1, 0.05,
* @private
*/
ol.Graticule.prototype.addMeridian_ =
function(lon, squaredTolerance, extent, index) {
var lineString = this.getMeridian_(lon, squaredTolerance, index);
function(lon, minLat, maxLat, squaredTolerance, extent, index) {
var lineString = this.getMeridian_(lon, minLat, maxLat,
squaredTolerance, index);
if (ol.extent.intersects(lineString.getExtent(), extent)) {
this.meridians_[index++] = lineString;
}
@@ -153,6 +180,8 @@ ol.Graticule.prototype.addMeridian_ =
/**
* @param {number} lat Latitude.
* @param {number} minLon Minimal longitude.
* @param {number} maxLon Maximal longitude.
* @param {number} squaredTolerance Squared tolerance.
* @param {ol.Extent} extent Extent.
* @param {number} index Index.
@@ -160,8 +189,9 @@ ol.Graticule.prototype.addMeridian_ =
* @private
*/
ol.Graticule.prototype.addParallel_ =
function(lat, squaredTolerance, extent, index) {
var lineString = this.getParallel_(lat, squaredTolerance, index);
function(lat, minLon, maxLon, squaredTolerance, extent, index) {
var lineString = this.getParallel_(lat, minLon, maxLon, squaredTolerance,
index);
if (ol.extent.intersects(lineString.getExtent(), extent)) {
this.parallels_[index++] = lineString;
}
@@ -191,17 +221,31 @@ ol.Graticule.prototype.createGraticule_ =
var maxLines = this.maxLines_;
var cnt, idx, lat, lon;
var validExtent = [
Math.max(extent[0], this.minLonP_),
Math.max(extent[1], this.minLatP_),
Math.min(extent[2], this.maxLonP_),
Math.min(extent[3], this.maxLatP_)
];
validExtent = ol.proj.transformExtent(validExtent, this.projection_,
'EPSG:4326');
var maxLat = validExtent[3];
var maxLon = validExtent[2];
var minLat = validExtent[1];
var minLon = validExtent[0];
// Create meridians
centerLon = Math.floor(centerLon / interval) * interval;
lon = goog.math.clamp(centerLon, this.minLon_, this.maxLon_);
idx = this.addMeridian_(lon, squaredTolerance, extent, 0);
idx = this.addMeridian_(lon, minLat, maxLat, squaredTolerance, extent, 0);
cnt = 0;
while (lon != this.minLon_ && cnt++ < maxLines) {
lon = Math.max(lon - interval, this.minLon_);
idx = this.addMeridian_(lon, squaredTolerance, extent, idx);
idx = this.addMeridian_(lon, minLat, maxLat, squaredTolerance, extent, idx);
}
lon = goog.math.clamp(centerLon, this.minLon_, this.maxLon_);
@@ -209,7 +253,7 @@ ol.Graticule.prototype.createGraticule_ =
cnt = 0;
while (lon != this.maxLon_ && cnt++ < maxLines) {
lon = Math.min(lon + interval, this.maxLon_);
idx = this.addMeridian_(lon, squaredTolerance, extent, idx);
idx = this.addMeridian_(lon, minLat, maxLat, squaredTolerance, extent, idx);
}
this.meridians_.length = idx;
@@ -219,12 +263,12 @@ ol.Graticule.prototype.createGraticule_ =
centerLat = Math.floor(centerLat / interval) * interval;
lat = goog.math.clamp(centerLat, this.minLat_, this.maxLat_);
idx = this.addParallel_(lat, squaredTolerance, extent, 0);
idx = this.addParallel_(lat, minLon, maxLon, squaredTolerance, extent, 0);
cnt = 0;
while (lat != this.minLat_ && cnt++ < maxLines) {
lat = Math.max(lat - interval, this.minLat_);
idx = this.addParallel_(lat, squaredTolerance, extent, idx);
idx = this.addParallel_(lat, minLon, maxLon, squaredTolerance, extent, idx);
}
lat = goog.math.clamp(centerLat, this.minLat_, this.maxLat_);
@@ -232,7 +276,7 @@ ol.Graticule.prototype.createGraticule_ =
cnt = 0;
while (lat != this.maxLat_ && cnt++ < maxLines) {
lat = Math.min(lat + interval, this.maxLat_);
idx = this.addParallel_(lat, squaredTolerance, extent, idx);
idx = this.addParallel_(lat, minLon, maxLon, squaredTolerance, extent, idx);
}
this.parallels_.length = idx;
@@ -285,18 +329,21 @@ ol.Graticule.prototype.getMap = function() {
/**
* @param {number} lon Longitude.
* @param {number} minLat Minimal latitude.
* @param {number} maxLat Maximal latitude.
* @param {number} squaredTolerance Squared tolerance.
* @return {ol.geom.LineString} The meridian line string.
* @param {number} index Index.
* @private
*/
ol.Graticule.prototype.getMeridian_ = function(lon, squaredTolerance, index) {
ol.Graticule.prototype.getMeridian_ = function(lon, minLat, maxLat,
squaredTolerance, index) {
goog.asserts.assert(lon >= this.minLon_,
'lon should be larger than or equal to this.minLon_');
goog.asserts.assert(lon <= this.maxLon_,
'lon should be smaller than or equal to this.maxLon_');
var flatCoordinates = ol.geom.flat.geodesic.meridian(lon,
this.minLat_, this.maxLat_, this.projection_, squaredTolerance);
minLat, maxLat, this.projection_, squaredTolerance);
goog.asserts.assert(flatCoordinates.length > 0,
'flatCoordinates cannot be empty');
var lineString = goog.isDef(this.meridians_[index]) ?
@@ -318,12 +365,15 @@ ol.Graticule.prototype.getMeridians = function() {
/**
* @param {number} lat Latitude.
* @param {number} minLon Minimal longitude.
* @param {number} maxLon Maximal longitude.
* @param {number} squaredTolerance Squared tolerance.
* @return {ol.geom.LineString} The parallel line string.
* @param {number} index Index.
* @private
*/
ol.Graticule.prototype.getParallel_ = function(lat, squaredTolerance, index) {
ol.Graticule.prototype.getParallel_ = function(lat, minLon, maxLon,
squaredTolerance, index) {
goog.asserts.assert(lat >= this.minLat_,
'lat should be larger than or equal to this.minLat_');
goog.asserts.assert(lat <= this.maxLat_,
@@ -395,25 +445,48 @@ ol.Graticule.prototype.handlePostCompose_ = function(e) {
ol.Graticule.prototype.updateProjectionInfo_ = function(projection) {
goog.asserts.assert(!goog.isNull(projection), 'projection cannot be null');
var epsg4326Projection = ol.proj.get('EPSG:4326');
var extent = projection.getExtent();
var worldExtent = projection.getWorldExtent();
var worldExtentP = ol.proj.transformExtent(worldExtent,
epsg4326Projection, projection);
var maxLat = worldExtent[3];
var maxLon = worldExtent[2];
var minLat = worldExtent[1];
var minLon = worldExtent[0];
var maxLatP = worldExtentP[3];
var maxLonP = worldExtentP[2];
var minLatP = worldExtentP[1];
var minLonP = worldExtentP[0];
goog.asserts.assert(!goog.isNull(extent), 'extent cannot be null');
goog.asserts.assert(goog.isDef(maxLat), 'maxLat should be defined');
goog.asserts.assert(goog.isDef(maxLon), 'maxLon should be defined');
goog.asserts.assert(goog.isDef(minLat), 'minLat should be defined');
goog.asserts.assert(goog.isDef(minLon), 'minLon should be defined');
goog.asserts.assert(goog.isDef(maxLatP),
'projected maxLat should be defined');
goog.asserts.assert(goog.isDef(maxLonP),
'projected maxLon should be defined');
goog.asserts.assert(goog.isDef(minLatP),
'projected minLat should be defined');
goog.asserts.assert(goog.isDef(minLonP),
'projected minLon should be defined');
this.maxLat_ = maxLat;
this.maxLon_ = maxLon;
this.minLat_ = minLat;
this.minLon_ = minLon;
var epsg4326Projection = ol.proj.get('EPSG:4326');
this.maxLatP_ = maxLatP;
this.maxLonP_ = maxLonP;
this.minLatP_ = minLatP;
this.minLonP_ = minLonP;
this.fromLonLatTransform_ = ol.proj.getTransform(
epsg4326Projection, projection);

View File

@@ -25,7 +25,8 @@ ol.has.CANVAS_LINE_DASH = false;
/**
* True if browser supports Canvas.
* True if both the library and browser support Canvas. Always `false`
* if `ol.ENABLE_CANVAS` is set to `false` at compile time.
* @const
* @type {boolean}
* @api stable
@@ -64,7 +65,7 @@ ol.has.DEVICE_ORIENTATION = 'DeviceOrientationEvent' in goog.global;
/**
* True if browser supports DOM.
* True if `ol.ENABLE_DOM` is set to `true` at compile time.
* @const
* @type {boolean}
*/
@@ -106,7 +107,8 @@ ol.has.MSPOINTER = !!(goog.global.navigator.msPointerEnabled);
/**
* True if browser supports WebGL.
* True if both OpenLayers and browser support WebGL. Always `false`
* if `ol.ENABLE_WEBGL` is set to `false` at compile time.
* @const
* @type {boolean}
* @api stable

View File

@@ -76,6 +76,7 @@ ol.ImageTile.prototype.disposeInternal = function() {
/**
* Get the image element for this tile.
* @inheritDoc
* @api
*/

View File

@@ -219,18 +219,21 @@ ol.interaction.DragAndDropEvent =
goog.base(this, type, target);
/**
* The features parsed from dropped data.
* @type {Array.<ol.Feature>|undefined}
* @api stable
*/
this.features = opt_features;
/**
* The dropped file.
* @type {File}
* @api stable
*/
this.file = file;
/**
* The feature projection.
* @type {ol.proj.Projection|undefined}
* @api
*/

View File

@@ -88,16 +88,15 @@ ol.interaction.DragRotateAndZoom.handleDragEvent_ = function(mapBrowserEvent) {
var theta = Math.atan2(delta.y, delta.x);
var magnitude = delta.magnitude();
var view = map.getView();
var viewState = view.getState();
map.render();
if (goog.isDef(this.lastAngle_)) {
var angleDelta = theta - this.lastAngle_;
ol.interaction.Interaction.rotateWithoutConstraints(
map, view, viewState.rotation - angleDelta);
map, view, view.getRotation() - angleDelta);
}
this.lastAngle_ = theta;
if (goog.isDef(this.lastMagnitude_)) {
var resolution = this.lastMagnitude_ * (viewState.resolution / magnitude);
var resolution = this.lastMagnitude_ * (view.getResolution() / magnitude);
ol.interaction.Interaction.zoomWithoutConstraints(map, view, resolution);
}
if (goog.isDef(this.lastMagnitude_)) {
@@ -121,10 +120,9 @@ ol.interaction.DragRotateAndZoom.handleUpEvent_ = function(mapBrowserEvent) {
var map = mapBrowserEvent.map;
var view = map.getView();
view.setHint(ol.ViewHint.INTERACTING, -1);
var viewState = view.getState();
var direction = this.lastScaleDelta_ - 1;
ol.interaction.Interaction.rotate(map, view, viewState.rotation);
ol.interaction.Interaction.zoom(map, view, viewState.resolution,
ol.interaction.Interaction.rotate(map, view, view.getRotation());
ol.interaction.Interaction.zoom(map, view, view.getResolution(),
undefined, this.duration_, direction);
this.lastScaleDelta_ = 0;
return false;

View File

@@ -1,10 +1,11 @@
goog.provide('ol.interaction.DragZoom');
goog.require('goog.asserts');
goog.require('ol.animation');
goog.require('ol.easing');
goog.require('ol.events.condition');
goog.require('ol.extent');
goog.require('ol.interaction.DragBox');
goog.require('ol.interaction.Interaction');
goog.require('ol.style.Stroke');
goog.require('ol.style.Style');
@@ -58,13 +59,35 @@ goog.inherits(ol.interaction.DragZoom, ol.interaction.DragBox);
*/
ol.interaction.DragZoom.prototype.onBoxEnd = function() {
var map = this.getMap();
var view = map.getView();
goog.asserts.assert(!goog.isNull(view), 'view should not be null');
var extent = this.getGeometry().getExtent();
var center = ol.extent.getCenter(extent);
var size = map.getSize();
goog.asserts.assert(goog.isDef(size), 'size should be defined');
ol.interaction.Interaction.zoom(map, view,
view.getResolutionForExtent(extent, size),
center, this.duration_);
var extent = this.getGeometry().getExtent();
var resolution = view.constrainResolution(
view.getResolutionForExtent(extent, size));
var currentResolution = view.getResolution();
goog.asserts.assert(goog.isDef(currentResolution), 'res should be defined');
var currentCenter = view.getCenter();
goog.asserts.assert(goog.isDef(currentCenter), 'center should be defined');
map.beforeRender(ol.animation.zoom({
resolution: currentResolution,
duration: this.duration_,
easing: ol.easing.easeOut
}));
map.beforeRender(ol.animation.pan({
source: currentCenter,
duration: this.duration_,
easing: ol.easing.easeOut
}));
view.setCenter(ol.extent.getCenter(extent));
view.setResolution(resolution);
};

View File

@@ -28,7 +28,6 @@ goog.require('ol.interaction.InteractionProperty');
goog.require('ol.interaction.Pointer');
goog.require('ol.layer.Vector');
goog.require('ol.source.Vector');
goog.require('ol.style.Style');
/**
@@ -616,6 +615,37 @@ ol.interaction.Draw.prototype.addToDrawing_ = function(event) {
};
/**
* Remove last point of the feature currently being drawn.
* @api
*/
ol.interaction.Draw.prototype.removeLastPoint = function() {
var geometry = this.sketchFeature_.getGeometry();
goog.asserts.assertInstanceof(geometry, ol.geom.SimpleGeometry,
'geometry must be an ol.geom.SimpleGeometry');
var coordinates, sketchLineGeom;
if (this.mode_ === ol.interaction.DrawMode.LINE_STRING) {
coordinates = this.sketchCoords_;
coordinates.splice(-2, 1);
this.geometryFunction_(coordinates, geometry);
} else if (this.mode_ === ol.interaction.DrawMode.POLYGON) {
coordinates = this.sketchCoords_[0];
coordinates.splice(-2, 1);
sketchLineGeom = this.sketchLine_.getGeometry();
goog.asserts.assertInstanceof(sketchLineGeom, ol.geom.LineString,
'sketchLineGeom must be an ol.geom.LineString');
sketchLineGeom.setCoordinates(coordinates);
this.geometryFunction_(this.sketchCoords_, geometry);
}
if (coordinates.length === 0) {
this.finishCoordinate_ = null;
}
this.updateSketchFeatures_();
};
/**
* Stop drawing and add the sketch feature to the target layer.
* The {@link ol.interaction.DrawEventType.DRAWEND} event is dispatched before
@@ -684,6 +714,33 @@ ol.interaction.Draw.prototype.abortDrawing_ = function() {
};
/**
* Extend an existing geometry by adding additional points. This only works
* on features with `LineString` geometries, where the interaction will
* extend lines by adding points to the end of the coordinates array.
* @param {!ol.Feature} feature Feature to be extended.
* @api
*/
ol.interaction.Draw.prototype.extend = function(feature) {
var geometry = feature.getGeometry();
goog.asserts.assert(this.mode_ == ol.interaction.DrawMode.LINE_STRING,
'interaction mode must be "line"');
goog.asserts.assert(goog.isDefAndNotNull(geometry),
'feature must have a geometry');
goog.asserts.assert(geometry.getType() == ol.geom.GeometryType.LINE_STRING,
'feature geometry must be a line string');
var lineString = /** @type {ol.geom.LineString} */ (geometry);
this.sketchFeature_ = feature;
this.sketchCoords_ = lineString.getCoordinates();
var last = this.sketchCoords_[this.sketchCoords_.length - 1];
this.finishCoordinate_ = last.slice();
this.sketchCoords_.push(last.slice());
this.updateSketchFeatures_();
this.dispatchEvent(new ol.interaction.DrawEvent(
ol.interaction.DrawEventType.DRAWSTART, this.sketchFeature_));
};
/**
* @inheritDoc
*/

View File

@@ -83,8 +83,7 @@ ol.interaction.KeyboardPan.handleEvent = function(mapBrowserEvent) {
var map = mapBrowserEvent.map;
var view = map.getView();
goog.asserts.assert(!goog.isNull(view), 'view should not be null');
var viewState = view.getState();
var mapUnitsDelta = viewState.resolution * this.pixelDelta_;
var mapUnitsDelta = view.getResolution() * this.pixelDelta_;
var deltaX = 0, deltaY = 0;
if (keyCode == goog.events.KeyCodes.DOWN) {
deltaY = -mapUnitsDelta;
@@ -96,7 +95,7 @@ ol.interaction.KeyboardPan.handleEvent = function(mapBrowserEvent) {
deltaY = mapUnitsDelta;
}
var delta = [deltaX, deltaY];
ol.coordinate.rotate(delta, viewState.rotation);
ol.coordinate.rotate(delta, view.getRotation());
ol.interaction.Interaction.pan(map, view, delta, this.duration_);
mapBrowserEvent.preventDefault();
stopEvent = true;

View File

@@ -1,9 +1,11 @@
goog.provide('ol.interaction.Modify');
goog.provide('ol.interaction.ModifyEvent');
goog.require('goog.array');
goog.require('goog.asserts');
goog.require('goog.events');
goog.require('goog.events.Event');
goog.require('goog.events.EventType');
goog.require('goog.functions');
goog.require('ol.Collection');
goog.require('ol.CollectionEventType');
@@ -24,7 +26,6 @@ goog.require('ol.interaction.Pointer');
goog.require('ol.layer.Vector');
goog.require('ol.source.Vector');
goog.require('ol.structs.RBush');
goog.require('ol.style.Style');
/**
@@ -33,13 +34,13 @@ goog.require('ol.style.Style');
ol.ModifyEventType = {
/**
* Triggered upon feature modification start
* @event ol.ModifyEvent#modifystart
* @event ol.interaction.ModifyEvent#modifystart
* @api
*/
MODIFYSTART: 'modifystart',
/**
* Triggered upon feature modification end
* @event ol.ModifyEvent#modifyend
* @event ol.interaction.ModifyEvent#modifyend
* @api
*/
MODIFYEND: 'modifyend'
@@ -60,7 +61,7 @@ ol.ModifyEventType = {
* @param {ol.MapBrowserPointerEvent} mapBrowserPointerEvent Associated
* {@link ol.MapBrowserPointerEvent}.
*/
ol.ModifyEvent = function(type, features, mapBrowserPointerEvent) {
ol.interaction.ModifyEvent = function(type, features, mapBrowserPointerEvent) {
goog.base(this, type);
@@ -78,7 +79,7 @@ ol.ModifyEvent = function(type, features, mapBrowserPointerEvent) {
*/
this.mapBrowserPointerEvent = mapBrowserPointerEvent;
};
goog.inherits(ol.ModifyEvent, goog.events.Event);
goog.inherits(ol.interaction.ModifyEvent, goog.events.Event);
/**
@@ -99,7 +100,7 @@ ol.interaction.SegmentDataType;
* @constructor
* @extends {ol.interaction.Pointer}
* @param {olx.interaction.ModifyOptions} options Options.
* @fires ol.ModifyEvent
* @fires ol.interaction.ModifyEvent
* @api
*/
ol.interaction.Modify = function(options) {
@@ -151,7 +152,7 @@ ol.interaction.Modify = function(options) {
/**
* Segment RTree for each layer
* @type {Object.<*, ol.structs.RBush>}
* @type {ol.structs.RBush.<ol.interaction.SegmentDataType>}
* @private
*/
this.rBush_ = new ol.structs.RBush();
@@ -169,6 +170,14 @@ ol.interaction.Modify = function(options) {
*/
this.snappedToVertex_ = false;
/**
* Indicate whether the interaction is currently changing a feature's
* coordinates.
* @type {boolean}
* @private
*/
this.changingFeature_ = false;
/**
* @type {Array}
* @private
@@ -236,6 +245,48 @@ ol.interaction.Modify.prototype.addFeature_ = function(feature) {
if (!goog.isNull(map)) {
this.handlePointerAtPixel_(this.lastPixel_, map);
}
goog.events.listen(feature, goog.events.EventType.CHANGE,
this.handleFeatureChange_, false, this);
};
/**
* @param {ol.Feature} feature Feature.
* @private
*/
ol.interaction.Modify.prototype.removeFeature_ = function(feature) {
this.removeFeatureSegmentData_(feature);
// Remove the vertex feature if the collection of canditate features
// is empty.
if (!goog.isNull(this.vertexFeature_) &&
this.features_.getLength() === 0) {
this.overlay_.getSource().removeFeature(this.vertexFeature_);
this.vertexFeature_ = null;
}
goog.events.unlisten(feature, goog.events.EventType.CHANGE,
this.handleFeatureChange_, false, this);
};
/**
* @param {ol.Feature} feature Feature.
* @private
*/
ol.interaction.Modify.prototype.removeFeatureSegmentData_ = function(feature) {
var rBush = this.rBush_;
var /** @type {Array.<ol.interaction.SegmentDataType>} */ nodesToRemove = [];
rBush.forEach(
/**
* @param {ol.interaction.SegmentDataType} node RTree node.
*/
function(node) {
if (feature === node.feature) {
nodesToRemove.push(node);
}
});
for (var i = nodesToRemove.length - 1; i >= 0; --i) {
rBush.remove(nodesToRemove[i]);
}
};
@@ -260,28 +311,26 @@ ol.interaction.Modify.prototype.handleFeatureAdd_ = function(evt) {
};
/**
* @param {goog.events.Event} evt Event.
* @private
*/
ol.interaction.Modify.prototype.handleFeatureChange_ = function(evt) {
if (!this.changingFeature_) {
var feature = /** @type {ol.Feature} */ (evt.target);
this.removeFeature_(feature);
this.addFeature_(feature);
}
};
/**
* @param {ol.CollectionEvent} evt Event.
* @private
*/
ol.interaction.Modify.prototype.handleFeatureRemove_ = function(evt) {
var feature = evt.element;
var rBush = this.rBush_;
var i, nodesToRemove = [];
rBush.forEachInExtent(feature.getGeometry().getExtent(), function(node) {
if (feature === node.feature) {
nodesToRemove.push(node);
}
});
for (i = nodesToRemove.length - 1; i >= 0; --i) {
rBush.remove(nodesToRemove[i]);
}
// There remains only vertexFeature…
if (!goog.isNull(this.vertexFeature_) &&
this.features_.getLength() === 0) {
this.overlay_.getSource().removeFeature(this.vertexFeature_);
this.vertexFeature_ = null;
}
var feature = /** @type {ol.Feature} */ (evt.element);
this.removeFeature_(feature);
};
@@ -530,7 +579,8 @@ ol.interaction.Modify.handleDownEvent_ = function(evt) {
for (i = insertVertices.length - 1; i >= 0; --i) {
this.insertVertex_.apply(this, insertVertices[i]);
}
this.dispatchEvent(new ol.ModifyEvent(ol.ModifyEventType.MODIFYSTART,
this.dispatchEvent(
new ol.interaction.ModifyEvent(ol.ModifyEventType.MODIFYSTART,
this.features_, evt));
}
return !goog.isNull(this.vertexFeature_);
@@ -586,7 +636,7 @@ ol.interaction.Modify.handleDragEvent_ = function(evt) {
break;
}
geometry.setCoordinates(coordinates);
this.setGeometryCoordinates_(geometry, coordinates);
}
this.createOrUpdateVertexFeature_(vertex);
};
@@ -605,7 +655,8 @@ ol.interaction.Modify.handleUpEvent_ = function(evt) {
this.rBush_.update(ol.extent.boundingExtent(segmentData.segment),
segmentData);
}
this.dispatchEvent(new ol.ModifyEvent(ol.ModifyEventType.MODIFYEND,
this.dispatchEvent(
new ol.interaction.ModifyEvent(ol.ModifyEventType.MODIFYEND,
this.features_, evt));
return false;
};
@@ -769,7 +820,7 @@ ol.interaction.Modify.prototype.insertVertex_ = function(segmentData, vertex) {
return;
}
geometry.setCoordinates(coordinates);
this.setGeometryCoordinates_(geometry, coordinates);
var rTree = this.rBush_;
goog.asserts.assert(goog.isDef(segment), 'segment should be defined');
rTree.remove(segmentData);
@@ -875,7 +926,7 @@ ol.interaction.Modify.prototype.removeVertex_ = function() {
if (deleted) {
this.rBush_.remove(newSegment[0]);
this.rBush_.remove(newSegment[1]);
geometry.setCoordinates(coordinates);
this.setGeometryCoordinates_(geometry, coordinates);
goog.asserts.assert(newIndex >= 0, 'newIndex should be larger than 0');
var newSegmentData = /** @type {ol.interaction.SegmentDataType} */ ({
depth: segmentData.depth,
@@ -899,6 +950,19 @@ ol.interaction.Modify.prototype.removeVertex_ = function() {
};
/**
* @param {ol.geom.SimpleGeometry} geometry Geometry.
* @param {Array} coordinates Coordinates.
* @private
*/
ol.interaction.Modify.prototype.setGeometryCoordinates_ =
function(geometry, coordinates) {
this.changingFeature_ = true;
geometry.setCoordinates(coordinates);
this.changingFeature_ = false;
};
/**
* @param {ol.geom.SimpleGeometry} geometry Geometry.
* @param {number} index Index.
@@ -909,6 +973,7 @@ ol.interaction.Modify.prototype.removeVertex_ = function() {
ol.interaction.Modify.prototype.updateSegmentIndices_ = function(
geometry, index, depth, delta) {
this.rBush_.forEachInExtent(geometry.getExtent(), function(segmentDataMatch) {
goog.asserts.assert(goog.isDef(segmentDataMatch.depth));
if (segmentDataMatch.geometry === geometry &&
(!goog.isDef(depth) ||
goog.array.equals(segmentDataMatch.depth, depth)) &&

View File

@@ -1,4 +1,6 @@
goog.provide('ol.interaction.Select');
goog.provide('ol.interaction.SelectEvent');
goog.provide('ol.interaction.SelectEventType');
goog.provide('ol.interaction.SelectFilterFunction');
goog.require('goog.array');
@@ -13,16 +15,15 @@ goog.require('ol.geom.GeometryType');
goog.require('ol.interaction.Interaction');
goog.require('ol.layer.Vector');
goog.require('ol.source.Vector');
goog.require('ol.style.Style');
/**
* @enum {string}
*/
ol.SelectEventType = {
ol.interaction.SelectEventType = {
/**
* Triggered when feature(s) has been (de)selected.
* @event ol.SelectEvent#select
* @event ol.interaction.SelectEvent#select
* @api
*/
SELECT: 'select'
@@ -53,7 +54,8 @@ ol.interaction.SelectFilterFunction;
* @extends {goog.events.Event}
* @constructor
*/
ol.SelectEvent = function(type, selected, deselected, mapBrowserEvent) {
ol.interaction.SelectEvent =
function(type, selected, deselected, mapBrowserEvent) {
goog.base(this, type);
/**
@@ -77,7 +79,7 @@ ol.SelectEvent = function(type, selected, deselected, mapBrowserEvent) {
*/
this.mapBrowserEvent = mapBrowserEvent;
};
goog.inherits(ol.SelectEvent, goog.events.Event);
goog.inherits(ol.interaction.SelectEvent, goog.events.Event);
@@ -94,7 +96,7 @@ goog.inherits(ol.SelectEvent, goog.events.Event);
* @constructor
* @extends {ol.interaction.Interaction}
* @param {olx.interaction.SelectOptions=} opt_options Options.
* @fires ol.SelectEvent
* @fires ol.interaction.SelectEvent
* @api stable
*/
ol.interaction.Select = function(opt_options) {
@@ -285,8 +287,8 @@ ol.interaction.Select.handleEvent = function(mapBrowserEvent) {
}
if (change) {
this.dispatchEvent(
new ol.SelectEvent(ol.SelectEventType.SELECT, selected, deselected,
mapBrowserEvent));
new ol.interaction.SelectEvent(ol.interaction.SelectEventType.SELECT,
selected, deselected, mapBrowserEvent));
}
return ol.events.condition.pointerMove(mapBrowserEvent);
};

View File

@@ -0,0 +1,180 @@
goog.provide('ol.interaction.Translate');
goog.require('goog.array');
goog.require('ol.interaction.Pointer');
/**
* @classdesc
* Interaction for translating (moving) features.
*
* @constructor
* @extends {ol.interaction.Pointer}
* @param {olx.interaction.TranslateOptions} options Options.
* @api
*/
ol.interaction.Translate = function(options) {
goog.base(this, {
handleDownEvent: ol.interaction.Translate.handleDownEvent_,
handleDragEvent: ol.interaction.Translate.handleDragEvent_,
handleMoveEvent: ol.interaction.Translate.handleMoveEvent_,
handleUpEvent: ol.interaction.Translate.handleUpEvent_
});
/**
* @type {string|undefined}
* @private
*/
this.previousCursor_ = undefined;
/**
* The last position we translated to.
* @type {ol.Coordinate}
* @private
*/
this.lastCoordinate_ = null;
/**
* @type {ol.Collection.<ol.Feature>}
* @private
*/
this.features_ = goog.isDef(options.features) ? options.features : null;
/**
* @type {ol.Feature}
* @private
*/
this.lastFeature_ = null;
};
goog.inherits(ol.interaction.Translate, ol.interaction.Pointer);
/**
* @param {ol.MapBrowserPointerEvent} event Event.
* @return {boolean} Start drag sequence?
* @this {ol.interaction.Translate}
* @private
*/
ol.interaction.Translate.handleDownEvent_ = function(event) {
this.lastFeature_ = this.featuresAtPixel_(event.pixel, event.map);
if (goog.isNull(this.lastCoordinate_) && !goog.isNull(this.lastFeature_)) {
this.lastCoordinate_ = event.coordinate;
ol.interaction.Translate.handleMoveEvent_.call(this, event);
return true;
}
return false;
};
/**
* @param {ol.MapBrowserPointerEvent} event Event.
* @return {boolean} Stop drag sequence?
* @this {ol.interaction.Translate}
* @private
*/
ol.interaction.Translate.handleUpEvent_ = function(event) {
if (!goog.isNull(this.lastCoordinate_)) {
this.lastCoordinate_ = null;
ol.interaction.Translate.handleMoveEvent_.call(this, event);
return true;
}
return false;
};
/**
* @param {ol.MapBrowserPointerEvent} event Event.
* @this {ol.interaction.Translate}
* @private
*/
ol.interaction.Translate.handleDragEvent_ = function(event) {
if (!goog.isNull(this.lastCoordinate_)) {
var newCoordinate = event.coordinate;
var deltaX = newCoordinate[0] - this.lastCoordinate_[0];
var deltaY = newCoordinate[1] - this.lastCoordinate_[1];
if (!goog.isNull(this.features_)) {
this.features_.forEach(function(feature) {
var geom = feature.getGeometry();
geom.translate(deltaX, deltaY);
feature.setGeometry(geom);
});
} else if (goog.isNull(this.lastFeature_)) {
var geom = this.lastFeature_.getGeometry();
geom.translate(deltaX, deltaY);
this.lastFeature_.setGeometry(geom);
}
this.lastCoordinate_ = newCoordinate;
}
};
/**
* @param {ol.MapBrowserEvent} event Event.
* @this {ol.interaction.Translate}
* @private
*/
ol.interaction.Translate.handleMoveEvent_ = function(event)
{
var elem = event.map.getTargetElement();
var intersectingFeature = event.map.forEachFeatureAtPixel(event.pixel,
function(feature) {
return feature;
});
if (intersectingFeature) {
var isSelected = false;
if (!goog.isNull(this.features_) &&
goog.array.contains(this.features_.getArray(), intersectingFeature)) {
isSelected = true;
}
this.previousCursor_ = elem.style.cursor;
// WebKit browsers don't support the grab icons without a prefix
elem.style.cursor = !goog.isNull(this.lastCoordinate_) ?
'-webkit-grabbing' : (isSelected ? '-webkit-grab' : 'pointer');
// Thankfully, attempting to set the standard ones will silently fail,
// keeping the prefixed icons
elem.style.cursor = goog.isNull(this.lastCoordinate_) ?
'grabbing' : (isSelected ? 'grab' : 'pointer');
} else {
elem.style.cursor = goog.isDef(this.previousCursor_) ?
this.previousCursor_ : '';
this.previousCursor_ = undefined;
}
};
/**
* Tests to see if the given coordinates intersects any of our selected
* features.
* @param {ol.Pixel} pixel Pixel coordinate to test for intersection.
* @param {ol.Map} map Map to test the intersection on.
* @return {ol.Feature} Returns the feature found at the specified pixel
* coordinates.
* @private
*/
ol.interaction.Translate.prototype.featuresAtPixel_ = function(pixel, map) {
var found = null;
var intersectingFeature = map.forEachFeatureAtPixel(pixel,
function(feature) {
return feature;
});
if (!goog.isNull(this.features_) &&
goog.array.contains(this.features_.getArray(), intersectingFeature)) {
found = intersectingFeature;
}
return found;
};

View File

@@ -161,18 +161,24 @@ ol.layer.Layer.prototype.handleSourcePropertyChange_ = function() {
*/
ol.layer.Layer.prototype.setMap = function(map) {
goog.events.unlistenByKey(this.mapPrecomposeKey_);
this.changed();
this.mapPrecomposeKey_ = null;
if (goog.isNull(map)) {
this.changed();
}
goog.events.unlistenByKey(this.mapRenderKey_);
this.mapRenderKey_ = null;
if (!goog.isNull(map)) {
this.mapPrecomposeKey_ = goog.events.listen(
map, ol.render.EventType.PRECOMPOSE, function(evt) {
var layerState = this.getLayerState();
layerState.managed = false;
layerState.zIndex = Infinity;
evt.frameState.layerStatesArray.push(layerState);
evt.frameState.layerStates[goog.getUid(this)] = layerState;
}, false, this);
this.mapRenderKey_ = goog.events.listen(
this, goog.events.EventType.CHANGE, map.render, false, map);
this.changed();
}
};

View File

@@ -2,7 +2,6 @@ goog.provide('ol.layer.Base');
goog.provide('ol.layer.LayerProperty');
goog.provide('ol.layer.LayerState');
goog.require('goog.events');
goog.require('goog.math');
goog.require('goog.object');
goog.require('ol.Object');
@@ -20,6 +19,7 @@ ol.layer.LayerProperty = {
SATURATION: 'saturation',
VISIBLE: 'visible',
EXTENT: 'extent',
Z_INDEX: 'zIndex',
MAX_RESOLUTION: 'maxResolution',
MIN_RESOLUTION: 'minResolution',
SOURCE: 'source'
@@ -37,6 +37,7 @@ ol.layer.LayerProperty = {
* visible: boolean,
* managed: boolean,
* extent: (ol.Extent|undefined),
* zIndex: number,
* maxResolution: number,
* minResolution: number}}
*/
@@ -77,6 +78,8 @@ ol.layer.Base = function(options) {
goog.isDef(options.saturation) ? options.saturation : 1;
properties[ol.layer.LayerProperty.VISIBLE] =
goog.isDef(options.visible) ? options.visible : true;
properties[ol.layer.LayerProperty.Z_INDEX] =
goog.isDef(options.zIndex) ? options.zIndex : 0;
properties[ol.layer.LayerProperty.MAX_RESOLUTION] =
goog.isDef(options.maxResolution) ? options.maxResolution : Infinity;
properties[ol.layer.LayerProperty.MIN_RESOLUTION] =
@@ -132,6 +135,7 @@ ol.layer.Base.prototype.getLayerState = function() {
var sourceState = this.getSourceState();
var visible = this.getVisible();
var extent = this.getExtent();
var zIndex = this.getZIndex();
var maxResolution = this.getMaxResolution();
var minResolution = this.getMinResolution();
return {
@@ -145,6 +149,7 @@ ol.layer.Base.prototype.getLayerState = function() {
visible: visible,
managed: true,
extent: extent,
zIndex: zIndex,
maxResolution: maxResolution,
minResolution: Math.max(minResolution, 0)
};
@@ -243,6 +248,18 @@ ol.layer.Base.prototype.getVisible = function() {
};
/**
* Return the Z-index of the layer, which is used to order layers before
* rendering. The default Z-index is 0.
* @return {number} The Z-index of the layer.
* @observable
* @api
*/
ol.layer.Base.prototype.getZIndex = function() {
return /** @type {number} */ (this.get(ol.layer.LayerProperty.Z_INDEX));
};
/**
* Adjust the layer brightness. A value of -1 will render the layer completely
* black. A value of 0 will leave the brightness unchanged. A value of 1 will
@@ -365,3 +382,15 @@ ol.layer.Base.prototype.setSaturation = function(saturation) {
ol.layer.Base.prototype.setVisible = function(visible) {
this.set(ol.layer.LayerProperty.VISIBLE, visible);
};
/**
* Set Z-index of the layer, which is used to order layers before rendering.
* The default Z-index is 0.
* @param {number} zindex The z-index of the layer.
* @observable
* @api
*/
ol.layer.Base.prototype.setZIndex = function(zindex) {
this.set(ol.layer.LayerProperty.Z_INDEX, zindex);
};

View File

@@ -101,6 +101,7 @@ ol.OL3_LOGO_URL = 'data:image/png;base64,' +
/**
* @type {Array.<ol.RendererType>}
* @const
*/
ol.DEFAULT_RENDERER_TYPES = [
ol.RendererType.CANVAS,
@@ -200,7 +201,7 @@ ol.Map = function(options) {
/**
* @private
* @type {Object}
* @type {Object.<string, string>}
*/
this.logos_ = optionsInternal.logos;
@@ -692,22 +693,8 @@ ol.Map.prototype.getEventCoordinate = function(event) {
* @api stable
*/
ol.Map.prototype.getEventPixel = function(event) {
// goog.style.getRelativePosition is based on event.targetTouches,
// but touchend and touchcancel events have no targetTouches when
// the last finger is removed from the screen.
// So we ourselves compute the position of touch events.
// See https://github.com/google/closure-library/pull/323
if (goog.isDef(event.changedTouches)) {
var touch = event.changedTouches[0];
var viewportPosition = goog.style.getClientPosition(this.viewport_);
return [
touch.clientX - viewportPosition.x,
touch.clientY - viewportPosition.y
];
} else {
var eventPosition = goog.style.getRelativePosition(event, this.viewport_);
return [eventPosition.x, eventPosition.y];
}
var eventPosition = goog.style.getRelativePosition(event, this.viewport_);
return [eventPosition.x, eventPosition.y];
};
@@ -1447,7 +1434,7 @@ ol.Map.prototype.unskipFeature = function(feature) {
* @typedef {{controls: ol.Collection.<ol.control.Control>,
* interactions: ol.Collection.<ol.interaction.Interaction>,
* keyboardEventTarget: (Element|Document),
* logos: Object,
* logos: Object.<string, string>,
* overlays: ol.Collection.<ol.Overlay>,
* rendererConstructor:
* function(new: ol.renderer.Map, Element, ol.Map),

View File

@@ -17,7 +17,6 @@ goog.require('goog.events.EventType');
* @constructor
* @extends {goog.events.EventTarget}
* @fires change
* @suppress {checkStructDictInheritance}
* @struct
* @api stable
*/
@@ -63,6 +62,8 @@ ol.Observable.prototype.changed = function() {
/**
* Get the version number for this object. Each time the object is modified,
* its version number will be incremented.
* @return {number} Revision.
* @api
*/

View File

@@ -97,10 +97,10 @@ ol.Overlay = function(options) {
this.element_.style.position = 'absolute';
/**
* @private
* @protected
* @type {boolean}
*/
this.autoPan_ = goog.isDef(options.autoPan) ? options.autoPan : false;
this.autoPan = goog.isDef(options.autoPan) ? options.autoPan : false;
/**
* @private
@@ -263,7 +263,7 @@ ol.Overlay.prototype.handleMapChanged = function() {
if (goog.isDefAndNotNull(map)) {
this.mapPostrenderListenerKey_ = goog.events.listen(map,
ol.MapEventType.POSTRENDER, this.render, false, this);
this.updatePixelPosition_();
this.updatePixelPosition();
var container = this.stopEvent_ ?
map.getOverlayContainerStopEvent() : map.getOverlayContainer();
if (this.insertFirst_) {
@@ -280,7 +280,7 @@ ol.Overlay.prototype.handleMapChanged = function() {
* @protected
*/
ol.Overlay.prototype.render = function() {
this.updatePixelPosition_();
this.updatePixelPosition();
};
@@ -288,7 +288,7 @@ ol.Overlay.prototype.render = function() {
* @protected
*/
ol.Overlay.prototype.handleOffsetChanged = function() {
this.updatePixelPosition_();
this.updatePixelPosition();
};
@@ -296,8 +296,8 @@ ol.Overlay.prototype.handleOffsetChanged = function() {
* @protected
*/
ol.Overlay.prototype.handlePositionChanged = function() {
this.updatePixelPosition_();
if (goog.isDef(this.get(ol.OverlayProperty.POSITION)) && this.autoPan_) {
this.updatePixelPosition();
if (goog.isDef(this.get(ol.OverlayProperty.POSITION)) && this.autoPan) {
this.panIntoView_();
}
};
@@ -307,7 +307,7 @@ ol.Overlay.prototype.handlePositionChanged = function() {
* @protected
*/
ol.Overlay.prototype.handlePositioningChanged = function() {
this.updatePixelPosition_();
this.updatePixelPosition();
};
@@ -363,7 +363,7 @@ ol.Overlay.prototype.setPosition = function(position) {
* @private
*/
ol.Overlay.prototype.panIntoView_ = function() {
goog.asserts.assert(this.autoPan_, 'this.autoPan_ should be true');
goog.asserts.assert(this.autoPan, 'this.autoPan should be true');
var map = this.getMap();
if (!goog.isDef(map) || goog.isNull(map.getTargetElement())) {
@@ -455,27 +455,48 @@ ol.Overlay.prototype.setPositioning = function(positioning) {
/**
* @private
* Modify the visibility of the element.
* @param {boolean} visible
* @protected
*/
ol.Overlay.prototype.updatePixelPosition_ = function() {
ol.Overlay.prototype.setVisible = function(visible) {
if (this.rendered_.visible !== visible) {
goog.style.setElementShown(this.element_, visible);
this.rendered_.visible = visible;
}
};
/**
* Update pixel position.
* @protected
*/
ol.Overlay.prototype.updatePixelPosition = function() {
var map = this.getMap();
var position = this.getPosition();
if (!goog.isDef(map) || !map.isRendered() || !goog.isDef(position)) {
if (this.rendered_.visible) {
goog.style.setElementShown(this.element_, false);
this.rendered_.visible = false;
}
this.setVisible(false);
return;
}
var pixel = map.getPixelFromCoordinate(position);
goog.asserts.assert(!goog.isNull(pixel), 'pixel should not be null');
var mapSize = map.getSize();
this.updateRenderedPosition(pixel, mapSize);
};
/**
* @param {ol.Pixel} pixel
* @param {ol.Size|undefined} mapSize
* @protected
*/
ol.Overlay.prototype.updateRenderedPosition = function(pixel, mapSize) {
goog.asserts.assert(!goog.isNull(pixel), 'pixel should not be null');
goog.asserts.assert(goog.isDef(mapSize), 'mapSize should be defined');
var style = this.element_.style;
var offset = this.getOffset();
goog.asserts.assert(goog.isArray(offset), 'offset should be an array');
var positioning = this.getPositioning();
goog.asserts.assert(goog.isDef(positioning),
'positioning should be defined');
@@ -531,9 +552,5 @@ ol.Overlay.prototype.updatePixelPosition_ = function() {
}
}
if (!this.rendered_.visible) {
goog.style.setElementShown(this.element_, true);
this.rendered_.visible = true;
}
this.setVisible(true);
};

View File

@@ -30,7 +30,6 @@
goog.provide('ol.pointer.NativeSource');
goog.require('goog.object');
goog.require('ol.pointer.EventSource');

View File

@@ -34,7 +34,6 @@ goog.require('goog.array');
goog.require('goog.dom');
goog.require('goog.events');
goog.require('goog.events.BrowserEvent');
goog.require('goog.events.Event');
goog.require('goog.events.EventTarget');
goog.require('ol.has');

View File

@@ -141,8 +141,12 @@ ol.proj.Projection = function(options) {
*/
this.defaultTileGrid_ = null;
if (ol.ENABLE_PROJ4JS && typeof proj4 == 'function') {
var code = options.code;
var projections = ol.proj.projections_;
var code = options.code;
goog.asserts.assert(goog.isDef(code),
'Option "code" is required for constructing instance');
if (ol.ENABLE_PROJ4JS && typeof proj4 == 'function' &&
!goog.isDef(projections[code])) {
var def = proj4.defs(code);
if (goog.isDef(def)) {
if (goog.isDef(def.axis) && !goog.isDef(options.axisOrientation)) {
@@ -158,7 +162,6 @@ ol.proj.Projection = function(options) {
}
this.units_ = units;
}
var projections = ol.proj.projections_;
var currentCode, currentDef, currentProj, proj4Transform;
for (currentCode in projections) {
currentDef = proj4.defs(currentCode);

View File

@@ -1,8 +1,12 @@
// FIXME add option to apply snapToPixel to all coordinates?
// FIXME can eliminate empty set styles and strokes (when all geoms skipped)
goog.provide('ol.render.canvas.ImageReplay');
goog.provide('ol.render.canvas.LineStringReplay');
goog.provide('ol.render.canvas.PolygonReplay');
goog.provide('ol.render.canvas.Replay');
goog.provide('ol.render.canvas.ReplayGroup');
goog.provide('ol.render.canvas.TextReplay');
goog.require('goog.array');
goog.require('goog.asserts');
@@ -216,7 +220,8 @@ ol.render.canvas.Replay.prototype.beginGeometry = function(geometry, feature) {
* @param {number} pixelRatio Pixel ratio.
* @param {goog.vec.Mat4.Number} transform Transform.
* @param {number} viewRotation View rotation.
* @param {Object} skippedFeaturesHash Ids of features to skip.
* @param {Object.<string, boolean>} skippedFeaturesHash Ids of features
* to skip.
* @param {Array.<*>} instructions Instructions array.
* @param {function(ol.Feature): T|undefined} featureCallback Feature callback.
* @param {ol.Extent=} opt_hitExtent Only check features that intersect this
@@ -252,7 +257,8 @@ ol.render.canvas.Replay.prototype.replay_ = function(
case ol.render.canvas.Instruction.BEGIN_GEOMETRY:
feature = /** @type {ol.Feature} */ (instruction[1]);
var featureUid = goog.getUid(feature).toString();
if (goog.isDef(skippedFeaturesHash[featureUid])) {
if (goog.isDef(skippedFeaturesHash[featureUid]) ||
!goog.isDefAndNotNull(feature.getGeometry())) {
i = /** @type {number} */ (instruction[2]);
} else if (goog.isDef(opt_hitExtent) && !ol.extent.intersects(
opt_hitExtent, feature.getGeometry().getExtent())) {
@@ -491,7 +497,8 @@ ol.render.canvas.Replay.prototype.replay_ = function(
* @param {number} pixelRatio Pixel ratio.
* @param {goog.vec.Mat4.Number} transform Transform.
* @param {number} viewRotation View rotation.
* @param {Object} skippedFeaturesHash Ids of features to skip
* @param {Object.<string, boolean>} skippedFeaturesHash Ids of features
* to skip.
*/
ol.render.canvas.Replay.prototype.replay = function(
context, pixelRatio, transform, viewRotation, skippedFeaturesHash) {
@@ -505,7 +512,8 @@ ol.render.canvas.Replay.prototype.replay = function(
* @param {CanvasRenderingContext2D} context Context.
* @param {goog.vec.Mat4.Number} transform Transform.
* @param {number} viewRotation View rotation.
* @param {Object} skippedFeaturesHash Ids of features to skip
* @param {Object.<string, boolean>} skippedFeaturesHash Ids of features
* to skip.
* @param {function(ol.Feature): T=} opt_featureCallback Feature callback.
* @param {ol.Extent=} opt_hitExtent Only check features that intersect this
* extent.
@@ -1858,7 +1866,8 @@ ol.render.canvas.ReplayGroup.prototype.finish = function() {
* @param {ol.Coordinate} coordinate Coordinate.
* @param {number} resolution Resolution.
* @param {number} rotation Rotation.
* @param {Object} skippedFeaturesHash Ids of features to skip
* @param {Object.<string, boolean>} skippedFeaturesHash Ids of features
* to skip.
* @param {function(ol.Feature): T} callback Feature callback.
* @return {T|undefined} Callback result.
* @template T
@@ -1941,7 +1950,8 @@ ol.render.canvas.ReplayGroup.prototype.isEmpty = function() {
* @param {number} pixelRatio Pixel ratio.
* @param {goog.vec.Mat4.Number} transform Transform.
* @param {number} viewRotation View rotation.
* @param {Object} skippedFeaturesHash Ids of features to skip
* @param {Object.<string, boolean>} skippedFeaturesHash Ids of features
* to skip.
*/
ol.render.canvas.ReplayGroup.prototype.replay = function(
context, pixelRatio, transform, viewRotation, skippedFeaturesHash) {
@@ -1990,7 +2000,8 @@ ol.render.canvas.ReplayGroup.prototype.replay = function(
* @param {CanvasRenderingContext2D} context Context.
* @param {goog.vec.Mat4.Number} transform Transform.
* @param {number} viewRotation View rotation.
* @param {Object} skippedFeaturesHash Ids of features to skip
* @param {Object.<string, boolean>} skippedFeaturesHash Ids of features
* to skip.
* @param {function(ol.Feature): T} featureCallback Feature callback.
* @param {ol.Extent=} opt_hitExtent Only check features that intersect this
* extent.

View File

@@ -53,6 +53,7 @@ ol.render.Event = function(
this.vectorContext = opt_vectorContext;
/**
* An object representing the current render frame state.
* @type {olx.FrameState|undefined}
* @api
*/

View File

@@ -3,6 +3,8 @@ goog.provide('ol.render.VectorContext');
/**
* Context for drawing geometries. A vector context is available on render
* events and does not need to be constructed directly.
* @constructor
* @struct
* @api

View File

@@ -1,5 +1,8 @@
// This file is automatically generated, do not edit
goog.provide('ol.render.webgl.imagereplay.shader.Color');
goog.provide('ol.render.webgl.imagereplay.shader.Color.Locations');
goog.provide('ol.render.webgl.imagereplay.shader.ColorFragment');
goog.provide('ol.render.webgl.imagereplay.shader.ColorVertex');
goog.require('ol.webgl.shader');

View File

@@ -1,5 +1,8 @@
// This file is automatically generated, do not edit
goog.provide('ol.render.webgl.imagereplay.shader.Default');
goog.provide('ol.render.webgl.imagereplay.shader.Default.Locations');
goog.provide('ol.render.webgl.imagereplay.shader.DefaultFragment');
goog.provide('ol.render.webgl.imagereplay.shader.DefaultVertex');
goog.require('ol.webgl.shader');

View File

@@ -93,6 +93,9 @@ ol.render.webgl.Immediate.prototype.flush = function() {
/**
* Register a function to be called for rendering at a given zIndex. The
* function will be called asynchronously. The callback will receive a
* reference to {@link ol.render.canvas.Immediate} context for drawing.
* @param {number} zIndex Z index.
* @param {function(ol.render.webgl.Immediate)} callback Callback.
* @api

View File

@@ -1,7 +1,6 @@
goog.provide('ol.render.webgl.ImageReplay');
goog.provide('ol.render.webgl.ReplayGroup');
goog.require('goog.array');
goog.require('goog.asserts');
goog.require('goog.functions');
goog.require('goog.object');
@@ -11,7 +10,13 @@ goog.require('ol.extent');
goog.require('ol.render.IReplayGroup');
goog.require('ol.render.VectorContext');
goog.require('ol.render.webgl.imagereplay.shader.Color');
goog.require('ol.render.webgl.imagereplay.shader.Color.Locations');
goog.require('ol.render.webgl.imagereplay.shader.ColorFragment');
goog.require('ol.render.webgl.imagereplay.shader.ColorVertex');
goog.require('ol.render.webgl.imagereplay.shader.Default');
goog.require('ol.render.webgl.imagereplay.shader.Default.Locations');
goog.require('ol.render.webgl.imagereplay.shader.DefaultFragment');
goog.require('ol.render.webgl.imagereplay.shader.DefaultVertex');
goog.require('ol.vec.Mat4');
goog.require('ol.webgl.Buffer');
goog.require('ol.webgl.Context');
@@ -513,7 +518,8 @@ ol.render.webgl.ImageReplay.prototype.createTextures_ =
* @param {number} contrast Global contrast.
* @param {number} hue Global hue.
* @param {number} saturation Global saturation.
* @param {Object} skippedFeaturesHash Ids of features to skip.
* @param {Object.<string, boolean>} skippedFeaturesHash Ids of features
* to skip.
* @param {function(ol.Feature): T|undefined} featureCallback Feature callback.
* @param {boolean} oneByOne Draw features one-by-one for the hit-detecion.
* @param {ol.Extent=} opt_hitExtent Hit extent: Only features intersecting
@@ -652,7 +658,8 @@ ol.render.webgl.ImageReplay.prototype.replay = function(context,
* @private
* @param {WebGLRenderingContext} gl gl.
* @param {ol.webgl.Context} context Context.
* @param {Object} skippedFeaturesHash Ids of features to skip.
* @param {Object.<string, boolean>} skippedFeaturesHash Ids of features
* to skip.
* @param {Array.<WebGLTexture>} textures Textures.
* @param {Array.<number>} groupIndices Texture group indices.
*/
@@ -700,7 +707,8 @@ ol.render.webgl.ImageReplay.prototype.drawReplay_ =
*
* @private
* @param {WebGLRenderingContext} gl gl.
* @param {Object} skippedFeaturesHash Ids of features to skip.
* @param {Object.<string, boolean>} skippedFeaturesHash Ids of features
* to skip.
* @param {Array.<WebGLTexture>} textures Textures.
* @param {Array.<number>} groupIndices Texture group indices.
* @param {number} elementType Element type.
@@ -771,7 +779,8 @@ ol.render.webgl.ImageReplay.prototype.drawElements_ = function(
* @private
* @param {WebGLRenderingContext} gl gl.
* @param {ol.webgl.Context} context Context.
* @param {Object} skippedFeaturesHash Ids of features to skip.
* @param {Object.<string, boolean>} skippedFeaturesHash Ids of features
* to skip.
* @param {function(ol.Feature): T|undefined} featureCallback Feature callback.
* @param {boolean} oneByOne Draw features one-by-one for the hit-detecion.
* @param {ol.Extent=} opt_hitExtent Hit extent: Only features intersecting
@@ -798,7 +807,8 @@ ol.render.webgl.ImageReplay.prototype.drawHitDetectionReplay_ =
* @private
* @param {WebGLRenderingContext} gl gl.
* @param {ol.webgl.Context} context Context.
* @param {Object} skippedFeaturesHash Ids of features to skip.
* @param {Object.<string, boolean>} skippedFeaturesHash Ids of features
* to skip.
* @param {function(ol.Feature): T|undefined} featureCallback Feature callback.
* @return {T|undefined} Callback result.
* @template T
@@ -822,7 +832,8 @@ ol.render.webgl.ImageReplay.prototype.drawHitDetectionReplayAll_ =
* @private
* @param {WebGLRenderingContext} gl gl.
* @param {ol.webgl.Context} context Context.
* @param {Object} skippedFeaturesHash Ids of features to skip.
* @param {Object.<string, boolean>} skippedFeaturesHash Ids of features
* to skip.
* @param {function(ol.Feature): T|undefined} featureCallback Feature callback.
* @param {ol.Extent=} opt_hitExtent Hit extent: Only features intersecting
* this extent are checked.
@@ -854,6 +865,7 @@ ol.render.webgl.ImageReplay.prototype.drawHitDetectionReplayOneByOne_ =
featureUid = goog.getUid(feature).toString();
if (!goog.isDef(skippedFeaturesHash[featureUid]) &&
goog.isDefAndNotNull(feature.getGeometry()) &&
(!goog.isDef(opt_hitExtent) || ol.extent.intersects(
opt_hitExtent, feature.getGeometry().getExtent()))) {
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
@@ -1057,7 +1069,8 @@ ol.render.webgl.ReplayGroup.prototype.isEmpty = function() {
* @param {number} contrast Global contrast.
* @param {number} hue Global hue.
* @param {number} saturation Global saturation.
* @param {Object} skippedFeaturesHash Ids of features to skip.
* @param {Object.<string, boolean>} skippedFeaturesHash Ids of features
* to skip.
*/
ol.render.webgl.ReplayGroup.prototype.replay = function(context,
center, resolution, rotation, size, pixelRatio,
@@ -1088,7 +1101,8 @@ ol.render.webgl.ReplayGroup.prototype.replay = function(context,
* @param {number} contrast Global contrast.
* @param {number} hue Global hue.
* @param {number} saturation Global saturation.
* @param {Object} skippedFeaturesHash Ids of features to skip.
* @param {Object.<string, boolean>} skippedFeaturesHash Ids of features
* to skip.
* @param {function(ol.Feature): T|undefined} featureCallback Feature callback.
* @param {boolean} oneByOne Draw features one-by-one for the hit-detecion.
* @param {ol.Extent=} opt_hitExtent Hit extent: Only features intersecting
@@ -1130,7 +1144,8 @@ ol.render.webgl.ReplayGroup.prototype.replayHitDetection_ = function(context,
* @param {number} contrast Global contrast.
* @param {number} hue Global hue.
* @param {number} saturation Global saturation.
* @param {Object} skippedFeaturesHash Ids of features to skip.
* @param {Object.<string, boolean>} skippedFeaturesHash Ids of features
* to skip.
* @param {function(ol.Feature): T|undefined} callback Feature callback.
* @return {T|undefined} Callback result.
* @template T
@@ -1191,7 +1206,8 @@ ol.render.webgl.ReplayGroup.prototype.forEachFeatureAtCoordinate = function(
* @param {number} contrast Global contrast.
* @param {number} hue Global hue.
* @param {number} saturation Global saturation.
* @param {Object} skippedFeaturesHash Ids of features to skip.
* @param {Object.<string, boolean>} skippedFeaturesHash Ids of features
* to skip.
* @return {boolean} Is there a feature at the given coordinate?
*/
ol.render.webgl.ReplayGroup.prototype.hasFeatureAtCoordinate = function(

View File

@@ -2,6 +2,7 @@
goog.provide('ol.renderer.canvas.Map');
goog.require('goog.array');
goog.require('goog.asserts');
goog.require('goog.dom');
goog.require('goog.style');
@@ -168,6 +169,8 @@ ol.renderer.canvas.Map.prototype.renderFrame = function(frameState) {
this.dispatchComposeEvent_(ol.render.EventType.PRECOMPOSE, frameState);
var layerStatesArray = frameState.layerStatesArray;
goog.array.stableSort(layerStatesArray, ol.renderer.Map.sortByZIndex);
var viewResolution = frameState.viewState.resolution;
var i, ii, layer, layerRenderer, layerState;
for (i = 0, ii = layerStatesArray.length; i < ii; ++i) {

View File

@@ -1,5 +1,6 @@
goog.provide('ol.renderer.dom.Map');
goog.require('goog.array');
goog.require('goog.asserts');
goog.require('goog.dom');
goog.require('goog.dom.TagName');
@@ -222,6 +223,8 @@ ol.renderer.dom.Map.prototype.renderFrame = function(frameState) {
this.dispatchComposeEvent_(ol.render.EventType.PRECOMPOSE, frameState);
var layerStatesArray = frameState.layerStatesArray;
goog.array.stableSort(layerStatesArray, ol.renderer.Map.sortByZIndex);
var viewResolution = frameState.viewState.resolution;
var i, ii, layer, layerRenderer, layerState;
for (i = 0, ii = layerStatesArray.length; i < ii; ++i) {

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