Compare commits

..

317 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
Tim Schaub
929ce05f81 Merge pull request #3958 from openlayers/release-v3.8.0
Release v3.8.0.
2015-08-04 00:16:31 -06:00
Tim Schaub
81b7a77954 Update package version to 3.8.0 2015-08-04 00:03:33 -06:00
Tim Schaub
91045b0ad1 Changelog for v3.8.0 2015-08-04 00:03:24 -06:00
Tim Schaub
b11f6abb3c Merge pull request #3957 from tschaub/shared-delete
Properly handle vertex deletion with multiple features.
2015-08-03 23:38:43 -06:00
Tim Schaub
571f3f30a4 Regression test for shared vertex deletion 2015-08-03 23:07:19 -06:00
Tim Schaub
85ddded15c Only remove the vertex feature if it exists
When deleting a vertex shared by multiple features, we iterate through drag segments and only need to remove the vertex feature once.
2015-08-03 22:44:22 -06:00
Tim Schaub
d3c8880b22 Merge pull request #3954 from fredj/rm_bindMouseOutFocusOutBlur
Remove ol.control.Control.bindMouseOutFocusOutBlur function.
2015-08-03 21:51:09 -06:00
Tim Schaub
54d3bbd625 Merge pull request #3214 from tschaub/raster
Pixel manipulation with raster sources.
2015-08-03 21:49:19 -06:00
Tim Schaub
405a8db075 Merge pull request #3946 from Turbo87/modify
Fix vertex deletion for Modify interaction on mobile devices.
2015-08-03 21:47:41 -06:00
Tim Schaub
27e58be43d Merge pull request #3910 from ahocevar/ol-ext-no-amd
Do not provide an AMD environment to ol.ext modules.
2015-08-03 21:43:42 -06:00
Tim Schaub
cee34fa51b Table for controls 2015-08-03 21:33:46 -06:00
Tim Schaub
16aa548383 Only create a worker if an operation is provided 2015-08-03 21:32:16 -06:00
Tim Schaub
860fdabd76 Simplify raster sources by working with a single operation 2015-08-03 20:10:46 -06:00
Frederic Junod
761aa0ea5c Remove ol.control.Control.bindMouseOutFocusOutBlur function
It was a workaround added in #1761 to hide the button tooltip on
OSX / Chrome 32 and 33.

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

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

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

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

Because the WebGL renderer creates the list of layers to render before the
precompose event, unmanaged layers are never rendered. This is also fixed
by dispatching the precompose event earlier.
2015-07-11 14:58:31 +02:00
Tim Schaub
c89fb3ccfe Merge pull request #3359 from Kenny806/deep_clone
Enable deep clone of MultiPolygon.
2015-07-10 23:11:25 -06:00
Tim Schaub
223d5ab60d Merge pull request #3895 from planetlabs/greedy-multi-queue
Rework the tile queue for multiple queues.
2015-07-10 16:33:49 -06:00
Alessandro Isaacs
2142b538ac Greedify the queue loading strategy 2015-07-10 15:06:41 -07:00
Alessandro Isaacs
5149889bd2 Improve the test 2015-07-10 15:06:41 -07:00
Alessandro Isaacs
b57cdb730c Only load tiles that are not yet loaded 2015-07-10 15:06:35 -07:00
Tim Schaub
8600d46a0e Merge pull request #3894 from tschaub/no-sudo
Install Python dependencies without sudo.
2015-07-10 14:20:35 -06:00
Tim Schaub
7509425aa4 Install Python dependencies without sudo 2015-07-10 11:00:13 -06:00
Pierre GIRAUD
c9ab9bc711 Hide the help tooltip when cursor is out of the map 2015-07-10 09:32:32 +02:00
Tim Schaub
cd6ac857b9 Merge pull request #3824 from probins/select
Improve docs for interaction.Select.
2015-07-09 16:54:05 -06:00
Tim Schaub
7b35557cee Merge pull request #3884 from tschaub/debug-server
Provide a debug loader for the library.
2015-07-09 16:02:12 -06:00
Tim Schaub
4549d2f7a8 Try multiple ports 2015-07-09 10:49:24 -06:00
Tim Schaub
7780d77ade Update to closure-util@1.5.0 2015-07-09 10:16:15 -06:00
Tim Schaub
bfaac061c8 Provide a debug loader for the library 2015-07-09 10:16:15 -06:00
Andreas Hocevar
afce912f11 Merge pull request #3883 from ahocevar/foreachfeatureatpixel-unmanaged-always
Ignore layer filter for unmanaged layers
2015-07-09 00:03:25 +02:00
Tim Schaub
a705c6fe11 Test two queues sharing tiles 2015-07-08 15:12:31 -06:00
Andreas Hocevar
26e146b1d8 Ignore layer filter for unmanaged layers
To make unmanaged vector layers work like the removed ol.FeatureOverlay,
the layer filter for ol.Map#forEachFeatureAtPixel needs to ignore unmanaged
layers.
2015-07-07 22:24:57 +02:00
geonux
64ab764827 Renaming the method description according to 'probins' proposal. 2015-07-06 15:07:56 +02:00
geonux
314b04df7a Add assertions to pass the validation step. 2015-07-06 13:49:42 +02:00
geonux
29b1f0d55d Add the capability to remove(undo) the last drawed segments. 2015-07-06 12:11:34 +02:00
Bart van den Eijnden
a62bbd6650 Merge pull request #3859 from llambanna/patch-2
Add in crossOrigin option
2015-07-06 11:58:39 +02:00
Bart van den Eijnden
38fa805f03 Merge pull request #3873 from probins/patch-1
Correct minor typo in modifyinteraction
2015-07-06 09:36:07 +02:00
Anna Lambrechtsen
1d3f8b5d7d Add in crossOrigin option 2015-07-06 14:07:40 +12:00
Peter Robins
c53aa7e8d5 Correct minor typo in modifyinteraction 2015-07-05 10:57:59 +01:00
Andreas Hocevar
109cd6f3a6 Merge pull request #3872 from probins/patch-1
Correct event notations in ol.Feature
2015-07-04 14:20:25 +02:00
Peter Robins
4f703efd23 Correct event notations in ol.Feature 2015-07-04 11:43:06 +01:00
Bart van den Eijnden
a157fff318 Merge pull request #3869 from openlayers/release-v3.7.0
Release v3.7.0
2015-07-03 11:36:40 +02:00
É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
Peter Robins
d6118f31e4 Improve docs for interaction.Select 2015-06-19 13:11:27 +00:00
Pierre GIRAUD
7065722fa6 Show measurement tooltip on geometry change instead of relying on pointermove 2015-06-08 16:19:28 +02:00
Jiri Matyas
ab9100450b enable deep clone of multipolygon endss 2015-03-17 11:09:03 +01:00
189 changed files with 4540 additions and 1738 deletions

View File

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

View File

@@ -1,8 +1,12 @@
language: python
sudo: false
cache:
directories:
- node_modules
env:
- DISPLAY=:99.0
before_install:
- "sudo pip install -r requirements.txt"
- "npm install -g npm && npm install"
before_script:
@@ -14,3 +18,7 @@ script: "make ci"
after_success:
- "make test-coverage"
- "cat coverage/lcov.info | ./node_modules/.bin/coveralls"
branches:
only:
- master

View File

@@ -19,7 +19,8 @@ BUILD_HOSTED := build/hosted/$(BRANCH)
BUILD_HOSTED_EXAMPLES := $(addprefix $(BUILD_HOSTED)/,$(EXAMPLES))
BUILD_HOSTED_EXAMPLES_JS := $(addprefix $(BUILD_HOSTED)/,$(EXAMPLES_JS))
CHECK_EXAMPLE_TIMESTAMPS = $(patsubst examples/%.html,build/timestamps/check-%-timestamp,$(EXAMPLES_HTML))
UNPHANTOMABLE_EXAMPLES = examples/shaded-relief.html examples/raster.html examples/region-growing.html
CHECK_EXAMPLE_TIMESTAMPS = $(patsubst examples/%.html,build/timestamps/check-%-timestamp,$(filter-out $(UNPHANTOMABLE_EXAMPLES),$(EXAMPLES_HTML)))
TASKS_JS := $(shell find tasks -name '*.js')
@@ -170,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
@@ -187,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 $^
@@ -322,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,7 +1,25 @@
## 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.
### v3.7.0
#### Removal of `ol.FeatureOverlay`

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

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

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

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

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

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

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

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

View File

@@ -1,3 +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,14 +14,14 @@
"externs/bingmaps.js",
"externs/bootstrap.js",
"externs/closure-compiler.js",
"externs/esrijson.js",
"externs/example.js",
"externs/fastclick.js",
"externs/geojson.js",
"externs/jquery-1.9.js",
"externs/proj4js.js",
"externs/tilejson.js",
"externs/topojson.js",
"externs/vbarray.js"
"externs/topojson.js"
],
"define": [
"goog.array.ASSUME_NATIVE_FUNCTIONS=true",
@@ -30,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

@@ -24,7 +24,7 @@ var self = this;
<?js } ?>
</dt>
<dd class="<?js= (data.stability && data.stability !== 'stable') ? 'unstable' : '' ?>">
<?js if (data.description) { ?>
<div class="description">
<?js= data.description ?>
@@ -39,20 +39,20 @@ var self = this;
</li>
</ul>
<?js } ?>
<?js if (data['this']) { ?>
<h5>This:</h5>
<ul><li><?js= this.linkto(data['this'], data['this']) ?></li></ul>
<?js } ?>
<?js if (data.stability || kind !== 'class') { ?>
<?js if (data.params && params.length) { ?>
<?js= this.partial('params.tmpl', params) ?>
<?js } ?>
<?js } ?>
<?js= this.partial('details.tmpl', data) ?>
<?js if (data.fires && fires.length) { ?>
<h5>Fires:</h5>
<ul><?js fires.forEach(function(f) {
@@ -68,7 +68,7 @@ var self = this;
}
?>
<li class="<?js= (eventDoclet || data).stability !== 'stable' ? 'unstable' : '' ?>">
<code><?js= self.linkto(f, type) ?></code>
<code><?js= eventClassName ? self.linkto(f, type) : type ?></code>
<?js if (eventClassName) {
var eventClass = self.find({longname: eventClassName})[0];
if (eventClass) { ?>
@@ -96,7 +96,7 @@ var self = this;
<li><?js= self.linkto(f) ?></li>
<?js }); ?></ul>
<?js } ?>
<?js if (data.exceptions && exceptions.length) { ?>
<h5>Throws:</h5>
<?js if (exceptions.length > 1) { ?><ul><?js
@@ -108,12 +108,12 @@ var self = this;
<?js= self.partial('exceptions.tmpl', r) ?>
<?js });
} } ?>
<?js if (data.returns && returns.length) { ?>
<?js if (returns.length > 1) { ?><h5>Returns:</h5><?js } ?>
<?js= self.partial('returns.tmpl', data.returns) ?>
<?js } ?>
<?js if (data.examples && examples.length) { ?>
<h5>Example<?js= examples.length > 1? 's':'' ?></h5>
<?js= this.partial('examples.tmpl', examples) ?>

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

@@ -72,7 +72,6 @@ Creating a custom build requires writing a build configuration file. The format
"api", "observable"
],
"compilation_level": "ADVANCED_OPTIMIZATIONS",
"use_types_for_optimization": true,
"manage_closure_dependencies": true
}
}
@@ -180,7 +179,7 @@ The Closure documentation explains that "externs" are for external names used in
### Other compiler options
There are a couple of other compiler options in the config file above. `manage_closure_dependencies` should always be used. `use_types_for_optimization` should be used for better compression rates.
There are a couple of other compiler options in the config file above. `manage_closure_dependencies` should always be used.
You can specify any of the other compiler options here as needed, such as the renaming reports, output manifest, or source maps. There is a full list of available options in [closure-util](https://github.com/openlayers/closure-util/blob/master/compiler-options.txt).
@@ -219,7 +218,6 @@ Now let's try a more complicated example: [`heatmaps-earthquakes`](http://openla
"goog.DEBUG=false"
],
"compilation_level": "ADVANCED_OPTIMIZATIONS",
"use_types_for_optimization": true,
"manage_closure_dependencies": true
}
}

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

@@ -1,6 +1,3 @@
#map {
position: relative;
}
#popup {
padding-bottom: 45px;
}

View File

@@ -71,9 +71,7 @@ map.on('click', function(evt) {
return feature;
});
if (feature) {
var geometry = feature.getGeometry();
var coord = geometry.getCoordinates();
popup.setPosition(coord);
popup.setPosition(evt.coordinate);
$(element).popover({
'placement': 'top',
'html': true,

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

@@ -1,4 +1,5 @@
goog.require('ol.Map');
goog.require('ol.Observable');
goog.require('ol.Overlay');
goog.require('ol.Sphere');
goog.require('ol.View');
@@ -103,27 +104,20 @@ var pointerMoveHandler = function(evt) {
}
/** @type {string} */
var helpMsg = 'Click to start drawing';
/** @type {ol.Coordinate|undefined} */
var tooltipCoord = evt.coordinate;
if (sketch) {
var output;
var geom = (sketch.getGeometry());
if (geom instanceof ol.geom.Polygon) {
output = formatArea(/** @type {ol.geom.Polygon} */ (geom));
helpMsg = continuePolygonMsg;
tooltipCoord = geom.getInteriorPoint().getCoordinates();
} else if (geom instanceof ol.geom.LineString) {
output = formatLength( /** @type {ol.geom.LineString} */ (geom));
helpMsg = continueLineMsg;
tooltipCoord = geom.getLastCoordinate();
}
measureTooltipElement.innerHTML = output;
measureTooltip.setPosition(tooltipCoord);
}
helpTooltipElement.innerHTML = helpMsg;
helpTooltip.setPosition(evt.coordinate);
$(helpTooltipElement).removeClass('hidden');
};
@@ -138,6 +132,10 @@ var map = new ol.Map({
map.on('pointermove', pointerMoveHandler);
$(map.getViewport()).on('mouseout', function() {
$(helpTooltipElement).addClass('hidden');
});
var typeSelect = document.getElementById('type');
var geodesicCheckbox = document.getElementById('geodesic');
@@ -172,10 +170,28 @@ function addInteraction() {
createMeasureTooltip();
createHelpTooltip();
var listener;
draw.on('drawstart',
function(evt) {
// set sketch
sketch = evt.feature;
/** @type {ol.Coordinate|undefined} */
var tooltipCoord = evt.coordinate;
listener = sketch.getGeometry().on('change', function(evt) {
var geom = evt.target;
var output;
if (geom instanceof ol.geom.Polygon) {
output = formatArea(/** @type {ol.geom.Polygon} */ (geom));
tooltipCoord = geom.getInteriorPoint().getCoordinates();
} else if (geom instanceof ol.geom.LineString) {
output = formatLength( /** @type {ol.geom.LineString} */ (geom));
tooltipCoord = geom.getLastCoordinate();
}
measureTooltipElement.innerHTML = output;
measureTooltip.setPosition(tooltipCoord);
});
}, this);
draw.on('drawend',
@@ -187,6 +203,7 @@ function addInteraction() {
// unset tooltip so that a new one can be created
measureTooltipElement = null;
createMeasureTooltip();
ol.Observable.unByKey(listener);
}, this);
}
@@ -199,7 +216,7 @@ function createHelpTooltip() {
helpTooltipElement.parentNode.removeChild(helpTooltipElement);
}
helpTooltipElement = document.createElement('div');
helpTooltipElement.className = 'tooltip';
helpTooltipElement.className = 'tooltip hidden';
helpTooltip = new ol.Overlay({
element: helpTooltipElement,
offset: [15, 0],

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%;

31
examples/raster.css Normal file
View File

@@ -0,0 +1,31 @@
.rel {
position: relative
}
#plot {
pointer-events: none;
position: absolute;
bottom: 10px;
left: 10px;
}
.bar {
pointer-events: auto;
fill: #AFAFB9;
}
.bar.selected {
fill: green;
}
.tip {
position: absolute;
background: black;
color: white;
padding: 6px;
font-size: 12px;
border-radius: 4px;
margin-bottom: 10px;
display: none;
opacity: 0;
}

31
examples/raster.html Normal file
View File

@@ -0,0 +1,31 @@
---
template: example.html
title: Raster Source
shortdesc: Demonstrates pixelwise operations with a raster source.
docs: >
<p>
This example uses a <code>ol.source.Raster</code> to generate data
based on another source. The raster source accepts any number of
input sources (tile or image based) and runs a pipeline of
operations on the input pixels. The return from the final
operation is used as the data for the output source.
</p>
<p>
In this case, a single tiled source of imagery is used as input.
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
threshold are green and those below are transparent).
</p>
tags: "raster, pixel"
resources:
- http://d3js.org/d3.v3.min.js
- raster.css
---
<div class="row-fluid">
<div class="span12 rel">
<div id="map" class="map"></div>
<div id="plot"></div>
</div>
</div>

200
examples/raster.js Normal file
View File

@@ -0,0 +1,200 @@
// NOCOMPILE
// this example uses d3 for which we don't have an externs file.
goog.require('ol.Map');
goog.require('ol.View');
goog.require('ol.layer.Image');
goog.require('ol.layer.Tile');
goog.require('ol.source.BingMaps');
goog.require('ol.source.Raster');
var minVgi = 0;
var maxVgi = 0.25;
var bins = 10;
/**
* Calculate the Vegetation Greenness Index (VGI) from an input pixel. This
* is a rough estimate assuming that pixel values correspond to reflectance.
* @param {ol.raster.Pixel} pixel An array of [R, G, B, A] values.
* @return {number} The VGI value for the given pixel.
*/
function vgi(pixel) {
var r = pixel[0] / 255;
var g = pixel[1] / 255;
var b = pixel[2] / 255;
return (2 * g - r - b) / (2 * g + r + b);
}
/**
* Summarize values for a histogram.
* @param {numver} value A VGI value.
* @param {Object} counts An object for keeping track of VGI counts.
*/
function summarize(value, counts) {
var min = counts.min;
var max = counts.max;
var num = counts.values.length;
if (value < min) {
// do nothing
} else if (value >= max) {
counts.values[num - 1] += 1;
} else {
var index = Math.floor((value - min) / counts.delta);
counts.values[index] += 1;
}
}
/**
* Use aerial imagery as the input data for the raster source.
*/
var bing = new ol.source.BingMaps({
key: 'Ak-dzM4wZjSqTlzveKz5u0d4IQ4bRzVI309GxmkgSVr1ewS6iPSrOvOKhA-CJlm3',
imagerySet: 'Aerial'
});
/**
* Create a raster source where pixels with VGI values above a threshold will
* be colored green.
*/
var raster = new ol.source.Raster({
sources: [bing],
operation: function(pixels, data) {
var pixel = pixels[0];
var value = vgi(pixel);
summarize(value, data.counts);
if (value >= data.threshold) {
pixel[0] = 0;
pixel[1] = 255;
pixel[2] = 0;
pixel[3] = 128;
} else {
pixel[3] = 0;
}
return pixel;
},
lib: {
vgi: vgi,
summarize: summarize
}
});
raster.set('threshold', 0.1);
function createCounts(min, max, num) {
var values = new Array(num);
for (var i = 0; i < num; ++i) {
values[i] = 0;
}
return {
min: min,
max: max,
values: values,
delta: (max - min) / num
};
}
raster.on('beforeoperations', function(event) {
event.data.counts = createCounts(minVgi, maxVgi, bins);
event.data.threshold = raster.get('threshold');
});
raster.on('afteroperations', function(event) {
schedulePlot(event.resolution, event.data.counts, event.data.threshold);
});
var map = new ol.Map({
layers: [
new ol.layer.Tile({
source: bing
}),
new ol.layer.Image({
source: raster
})
],
target: 'map',
view: new ol.View({
center: [-9651695, 4937351],
zoom: 13,
minZoom: 12,
maxZoom: 19
})
});
var timer = null;
function schedulePlot(resolution, counts, threshold) {
if (timer) {
clearTimeout(timer);
timer = null;
}
timer = setTimeout(plot.bind(null, resolution, counts, threshold), 1000 / 60);
}
var barWidth = 15;
var plotHeight = 150;
var chart = d3.select('#plot').append('svg')
.attr('width', barWidth * bins)
.attr('height', plotHeight);
var chartRect = chart[0][0].getBoundingClientRect();
var tip = d3.select(document.body).append('div')
.attr('class', 'tip');
function plot(resolution, counts, threshold) {
var yScale = d3.scale.linear()
.domain([0, d3.max(counts.values)])
.range([0, plotHeight]);
var bar = chart.selectAll('rect').data(counts.values);
bar.enter().append('rect');
bar.attr('class', function(count, index) {
var value = counts.min + (index * counts.delta);
return 'bar' + (value >= threshold ? ' selected' : '');
})
.attr('width', barWidth - 2);
bar.transition().attr('transform', function(value, index) {
return 'translate(' + (index * barWidth) + ', ' +
(plotHeight - yScale(value)) + ')';
})
.attr('height', yScale);
bar.on('mousemove', function(count, index) {
var threshold = counts.min + (index * counts.delta);
if (raster.get('threshold') !== threshold) {
raster.set('threshold', threshold);
raster.changed();
}
});
bar.on('mouseover', function(count, index) {
var area = 0;
for (var i = counts.values.length - 1; i >= index; --i) {
area += resolution * resolution * counts.values[i];
}
tip.html(message(counts.min + (index * counts.delta), area));
tip.style('display', 'block');
tip.transition().style({
left: (chartRect.left + (index * barWidth) + (barWidth / 2)) + 'px',
top: (d3.event.y - 60) + 'px',
opacity: 1
});
});
bar.on('mouseout', function() {
tip.transition().style('opacity', 0).each('end', function() {
tip.style('display', 'none');
});
});
}
function message(value, area) {
var acres = (area / 4046.86).toFixed(0).replace(/\B(?=(\d{3})+(?!\d))/g, ',');
return acres + ' acres at<br>' + value.toFixed(2) + ' VGI or above';
}

View File

@@ -0,0 +1,4 @@
table.controls td {
min-width: 110px;
padding: 2px 5px;
}

View File

@@ -0,0 +1,38 @@
---
template: example.html
title: Region Growing
shortdesc: Grow a region from a seed pixel
docs: >
<p>Click a region on the map. The computed region will be red.</p>
<p>
This example uses a <code>ol.source.Raster</code> to generate data
based on another source. The raster source accepts any number of
input sources (tile or image based) and runs a pipeline of
operations on the input data. The return from the final
operation is used as the data for the output source.
</p>
<p>
In this case, a single tiled source of imagery data is used as input.
The region is calculated in a single "image" operation using the "seed"
pixel provided by the user clicking on the map. The "threshold" value
determines whether a given contiguous pixel belongs to the "region" - the
difference between a candidate pixel's RGB values and the seed values must
be below the threshold.
</p>
<p>
This example also shows how an additional function can be made available
to the operation.
</p>
tags: "raster, region growing"
---
<div class="row-fluid">
<div class="span12">
<div id="map" class="map" style="cursor: pointer"></div>
<table class="controls">
<tr>
<td>Threshold: <span id="threshold-value"></span></td>
<td><input id="threshold" type="range" min="1" max="50" value="20"></td>
</tr>
</table>
</div>
</div>

132
examples/region-growing.js Normal file
View File

@@ -0,0 +1,132 @@
// NOCOMPILE
goog.require('ol.Map');
goog.require('ol.View');
goog.require('ol.layer.Image');
goog.require('ol.layer.Tile');
goog.require('ol.proj');
goog.require('ol.source.BingMaps');
goog.require('ol.source.Raster');
function growRegion(inputs, data) {
var image = inputs[0];
var seed = data.pixel;
var delta = parseInt(data.delta);
if (!seed) {
return image;
}
seed = seed.map(Math.round);
var width = image.width;
var height = image.height;
var inputData = image.data;
var outputData = new Uint8ClampedArray(inputData);
var seedIdx = (seed[1] * width + seed[0]) * 4;
var seedR = inputData[seedIdx];
var seedG = inputData[seedIdx + 1];
var seedB = inputData[seedIdx + 2];
var edge = [seed];
while (edge.length) {
var newedge = [];
for (var i = 0, ii = edge.length; i < ii; i++) {
// As noted in the Raster source constructor, this function is provided
// using the `lib` option. Other functions will NOT be visible unless
// provided using the `lib` option.
var next = nextEdges(edge[i]);
for (var j = 0, jj = next.length; j < jj; j++) {
var s = next[j][0], t = next[j][1];
if (s >= 0 && s < width && t >= 0 && t < height) {
var ci = (t * width + s) * 4;
var cr = inputData[ci];
var cg = inputData[ci + 1];
var cb = inputData[ci + 2];
var ca = inputData[ci + 3];
// if alpha is zero, carry on
if (ca === 0) {
continue;
}
if (Math.abs(seedR - cr) < delta && Math.abs(seedG - cg) < delta &&
Math.abs(seedB - cb) < delta) {
outputData[ci] = 255;
outputData[ci + 1] = 0;
outputData[ci + 2] = 0;
outputData[ci + 3] = 255;
newedge.push([s, t]);
}
// mark as visited
inputData[ci + 3] = 0;
}
}
}
edge = newedge;
}
return new ImageData(outputData, width, height);
}
function next4Edges(edge) {
var x = edge[0], y = edge[1];
return [
[x + 1, y],
[x - 1, y],
[x, y + 1],
[x, y - 1]
];
}
var key = 'Ak-dzM4wZjSqTlzveKz5u0d4IQ4bRzVI309GxmkgSVr1ewS6iPSrOvOKhA-CJlm3';
var imagery = new ol.layer.Tile({
source: new ol.source.BingMaps({key: key, imagerySet: 'Aerial'})
});
var raster = new ol.source.Raster({
sources: [imagery.getSource()],
operationType: 'image',
operation: growRegion,
// Functions in the `lib` object will be available to the operation run in
// the web worker.
lib: {
nextEdges: next4Edges
}
});
var rasterImage = new ol.layer.Image({
opacity: 0.7,
source: raster
});
var map = new ol.Map({
layers: [imagery, rasterImage],
target: 'map',
view: new ol.View({
center: ol.proj.fromLonLat([-119.07, 47.65]),
zoom: 11
})
});
var coordinate;
map.on('click', function(event) {
coordinate = event.coordinate;
raster.changed();
});
raster.on('beforeoperations', function(event) {
// the event.data object will be passed to operations
var data = event.data;
data.delta = thresholdControl.value;
if (coordinate) {
data.pixel = map.getPixelFromCoordinate(coordinate);
}
});
var thresholdControl = document.getElementById('threshold');
function updateControlValue() {
document.getElementById('threshold-value').innerText = thresholdControl.value;
}
updateControlValue();
thresholdControl.addEventListener('input', function() {
updateControlValue();
raster.changed();
});

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

@@ -0,0 +1,4 @@
table.controls td {
text-align: center;
padding: 2px 5px;
}

View File

@@ -0,0 +1,46 @@
---
template: example.html
title: Shaded Relief
shortdesc: Calculate shaded relief from elevation data
docs: >
<p>
This example uses a <code>ol.source.Raster</code> to generate data
based on another source. The raster source accepts any number of
input sources (tile or image based) and runs a pipeline of
operations on the input data. The return from the final
operation is used as the data for the output source.
</p>
<p>
In this case, a single tiled source of elevation data is used as input.
The shaded relief is calculated in a single "image" operation. By setting
<code>operationType: 'image'</code> on the raster source, operations are
called with an <code>ImageData</code> object for each of the input sources.
Operations are also called with a general purpose <code>data</code> object.
In this example, the sun elevation and azimuth data from the inputs above
are assigned to this <code>data</code> object and accessed in the shading
operation. The shading operation returns an array of <code>ImageData</code>
objects. When the raster source is used by an image layer, the first
<code>ImageData</code> object returned by the last operation in the pipeline
is used for rendering.
</p>
tags: "raster, shaded relief"
---
<div class="row-fluid">
<div class="span12">
<div id="map" class="map"></div>
<table class="controls">
<tr>
<td>vertical exaggeration: <span id="vertOut"></span>x</td>
<td><input id="vert" type="range" min="1" max="5" value="1"/></td>
</tr>
<tr>
<td>sun elevation: <span id="sunElOut"></span>°</td>
<td><input id="sunEl" type="range" min="0" max="90" value="45"/></td>
</tr>
<tr>
<td>sun azimuth: <span id="sunAzOut"></span>°</td>
<td><input id="sunAz" type="range" min="0" max="360" value="45"/></td>
</tr>
</table>
</div>
</div>

158
examples/shaded-relief.js Normal file
View File

@@ -0,0 +1,158 @@
// NOCOMPILE
goog.require('ol.Map');
goog.require('ol.View');
goog.require('ol.layer.Image');
goog.require('ol.layer.Tile');
goog.require('ol.source.Raster');
goog.require('ol.source.TileJSON');
goog.require('ol.source.XYZ');
/**
* Generates a shaded relief image given elevation data. Uses a 3x3
* neighborhood for determining slope and aspect.
* @param {Array.<ImageData>} inputs Array of input images.
* @param {Object} data Data added in the "beforeoperations" event.
* @return {ImageData} Output image.
*/
function shade(inputs, data) {
var elevationImage = inputs[0];
var width = elevationImage.width;
var height = elevationImage.height;
var elevationData = elevationImage.data;
var shadeData = new Uint8ClampedArray(elevationData.length);
var dp = data.resolution * 2;
var maxX = width - 1;
var maxY = height - 1;
var pixel = [0, 0, 0, 0];
var twoPi = 2 * Math.PI;
var halfPi = Math.PI / 2;
var sunEl = Math.PI * data.sunEl / 180;
var sunAz = Math.PI * data.sunAz / 180;
var cosSunEl = Math.cos(sunEl);
var sinSunEl = Math.sin(sunEl);
var pixelX, pixelY, x0, x1, y0, y1, offset,
z0, z1, dzdx, dzdy, slope, aspect, cosIncidence, scaled;
for (pixelY = 0; pixelY <= maxY; ++pixelY) {
y0 = pixelY === 0 ? 0 : pixelY - 1;
y1 = pixelY === maxY ? maxY : pixelY + 1;
for (pixelX = 0; pixelX <= maxX; ++pixelX) {
x0 = pixelX === 0 ? 0 : pixelX - 1;
x1 = pixelX === maxX ? maxX : pixelX + 1;
// determine elevation for (x0, pixelY)
offset = (pixelY * width + x0) * 4;
pixel[0] = elevationData[offset];
pixel[1] = elevationData[offset + 1];
pixel[2] = elevationData[offset + 2];
pixel[3] = elevationData[offset + 3];
z0 = data.vert * (pixel[0] + pixel[1] * 2 + pixel[2] * 3);
// determine elevation for (x1, pixelY)
offset = (pixelY * width + x1) * 4;
pixel[0] = elevationData[offset];
pixel[1] = elevationData[offset + 1];
pixel[2] = elevationData[offset + 2];
pixel[3] = elevationData[offset + 3];
z1 = data.vert * (pixel[0] + pixel[1] * 2 + pixel[2] * 3);
dzdx = (z1 - z0) / dp;
// determine elevation for (pixelX, y0)
offset = (y0 * width + pixelX) * 4;
pixel[0] = elevationData[offset];
pixel[1] = elevationData[offset + 1];
pixel[2] = elevationData[offset + 2];
pixel[3] = elevationData[offset + 3];
z0 = data.vert * (pixel[0] + pixel[1] * 2 + pixel[2] * 3);
// determine elevation for (pixelX, y1)
offset = (y1 * width + pixelX) * 4;
pixel[0] = elevationData[offset];
pixel[1] = elevationData[offset + 1];
pixel[2] = elevationData[offset + 2];
pixel[3] = elevationData[offset + 3];
z1 = data.vert * (pixel[0] + pixel[1] * 2 + pixel[2] * 3);
dzdy = (z1 - z0) / dp;
slope = Math.atan(Math.sqrt(dzdx * dzdx + dzdy * dzdy));
aspect = Math.atan2(dzdy, -dzdx);
if (aspect < 0) {
aspect = halfPi - aspect;
} else if (aspect > halfPi) {
aspect = twoPi - aspect + halfPi;
} else {
aspect = halfPi - aspect;
}
cosIncidence = sinSunEl * Math.cos(slope) +
cosSunEl * Math.sin(slope) * Math.cos(sunAz - aspect);
offset = (pixelY * width + pixelX) * 4;
scaled = 255 * cosIncidence;
shadeData[offset] = scaled;
shadeData[offset + 1] = scaled;
shadeData[offset + 2] = scaled;
shadeData[offset + 3] = elevationData[offset + 3];
}
}
return new ImageData(shadeData, width, height);
}
var elevation = new ol.source.XYZ({
url: 'https://{a-d}.tiles.mapbox.com/v3/aj.sf-dem/{z}/{x}/{y}.png',
crossOrigin: 'anonymous'
});
var raster = new ol.source.Raster({
sources: [elevation],
operationType: 'image',
operation: shade
});
var map = new ol.Map({
target: 'map',
layers: [
new ol.layer.Tile({
source: new ol.source.TileJSON({
url: 'http://api.tiles.mapbox.com/v3/tschaub.miapgppd.jsonp'
})
}),
new ol.layer.Image({
opacity: 0.3,
source: raster
})
],
view: new ol.View({
extent: [-13675026, 4439648, -13580856, 4580292],
center: [-13615645, 4497969],
minZoom: 10,
maxZoom: 16,
zoom: 13
})
});
var controlIds = ['vert', 'sunEl', 'sunAz'];
var controls = {};
controlIds.forEach(function(id) {
var control = document.getElementById(id);
var output = document.getElementById(id + 'Out');
control.addEventListener('input', function() {
output.innerText = control.value;
raster.changed();
});
output.innerText = control.value;
controls[id] = control;
});
raster.on('beforeoperations', function(event) {
// the event.data object will be passed to operations
var data = event.data;
data.resolution = event.resolution;
for (var id in controls) {
data[id] = Number(controls[id].value);
}
});

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

@@ -266,6 +266,30 @@ oli.source.ImageEvent = function() {};
oli.source.ImageEvent.prototype.image;
/**
* @interface
*/
oli.source.RasterEvent = function() {};
/**
* @type {ol.Extent}
*/
oli.source.RasterEvent.prototype.extent;
/**
* @type {number}
*/
oli.source.RasterEvent.prototype.resolution;
/**
* @type {Object}
*/
oli.source.RasterEvent.prototype.data;
/**
* @interface
*/

View File

@@ -473,6 +473,7 @@ olx.ProjectionOptions.prototype.global;
*/
olx.ProjectionOptions.prototype.worldExtent;
/**
* Function to determine resolution at a point. The function is called with a
* `{number}` view resolution and an `{ol.Coordinate}` as arguments, and returns
@@ -912,6 +913,7 @@ olx.control.AttributionOptions.prototype.tipLabel;
*/
olx.control.AttributionOptions.prototype.label;
/**
* Text label to use for the expanded attributions button. Default is `»`.
* Instead of text, also a Node (e.g. a `span` element) can be used.
@@ -2502,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),
@@ -2829,6 +2847,7 @@ olx.interaction.SelectOptions.prototype.removeCondition;
*/
olx.interaction.SelectOptions.prototype.toggleCondition;
/**
* A boolean that determines if the default behaviour should select only
* single features or all (overlapping) features at the clicked map
@@ -2838,6 +2857,7 @@ olx.interaction.SelectOptions.prototype.toggleCondition;
*/
olx.interaction.SelectOptions.prototype.multi;
/**
* A function that takes an {@link ol.Feature} and an {@link ol.layer.Layer} and
* returns `true` if the feature may be selected or `false` otherwise.
@@ -2877,7 +2897,7 @@ olx.interaction.SnapOptions.prototype.features;
/**
* Pixel tolerance for considering the pointer close enough to a segment or
* vertex for editing. Default is `10` pixels.
* vertex for snapping. Default is `10` pixels.
* @type {number|undefined}
* @api
*/
@@ -2907,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
@@ -2971,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}
@@ -2996,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
@@ -3070,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}
@@ -3094,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)}}
@@ -3159,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}
@@ -4180,7 +4230,8 @@ olx.source.ImageMapGuideOptions.prototype.projection;
/**
* Ratio. `1` means image requests are the size of the map viewport, `2` means
* twice the size of the map viewport, and so on. Default is `1`.
* twice the width and height of the map viewport, and so on. Must be `1` or
* higher. Default is `1`.
* @type {number|undefined}
* @api stable
*/
@@ -4195,7 +4246,6 @@ olx.source.ImageMapGuideOptions.prototype.ratio;
olx.source.ImageMapGuideOptions.prototype.resolutions;
/**
* Optional function to load an image given a URL.
* @type {ol.TileLoadFunctionType|undefined}
@@ -4399,7 +4449,8 @@ olx.source.ImageCanvasOptions.prototype.projection;
/**
* Ratio. 1 means canvases are the size of the map viewport, 2 means twice the
* size of the map viewport, and so on. Default is `1.5`.
* width and height of the map viewport, and so on. Must be `1` or higher.
* Default is `1.5`.
* @type {number|undefined}
* @api
*/
@@ -4462,7 +4513,8 @@ olx.source.ImageVectorOptions.prototype.projection;
/**
* Ratio. 1 means canvases are the size of the map viewport, 2 means twice the
* size of the map viewport, and so on. Default is `1.5`.
* width and height of the map viewport, and so on. Must be `1` or higher.
* Default is `1.5`.
* @type {number|undefined}
* @api
*/
@@ -4495,6 +4547,65 @@ olx.source.ImageVectorOptions.prototype.source;
olx.source.ImageVectorOptions.prototype.style;
/**
* @typedef {{sources: Array.<ol.source.Source>,
* operation: (ol.raster.Operation|undefined),
* lib: (Object|undefined),
* threads: (number|undefined),
* operationType: (ol.raster.OperationType|undefined)}}
* @api
*/
olx.source.RasterOptions;
/**
* Input sources.
* @type {Array.<ol.source.Source>}
* @api
*/
olx.source.RasterOptions.prototype.sources;
/**
* Raster operation. The operation will be called with data from input sources
* and the output will be assigned to the raster source.
* @type {ol.raster.Operation|undefined}
* @api
*/
olx.source.RasterOptions.prototype.operation;
/**
* Functions that will be made available to operations run in a worker.
* @type {Object|undefined}
* @api
*/
olx.source.RasterOptions.prototype.lib;
/**
* By default, operations will be run in a single worker thread. To avoid using
* workers altogether, set `threads: 0`. For pixel operations, operations can
* be run in multiple worker threads. Note that there is additional overhead in
* transferring data to multiple workers, and that depending on the user's
* system, it may not be possible to parallelize the work.
* @type {number|undefined}
* @api
*/
olx.source.RasterOptions.prototype.threads;
/**
* Operation type. Supported values are `'pixel'` and `'image'`. By default,
* `'pixel'` operations are assumed, and operations will be called with an
* array of pixels from input sources. If set to `'image'`, operations will
* be called with an array of ImageData objects from input sources.
* @type {ol.raster.OperationType|undefined}
* @api
*/
olx.source.RasterOptions.prototype.operationType;
/**
* @typedef {{attributions: (Array.<ol.Attribution>|undefined),
* crossOrigin: (null|string|undefined),
@@ -4586,7 +4697,8 @@ olx.source.ImageWMSOptions.prototype.projection;
/**
* Ratio. `1` means image requests are the size of the map viewport, `2` means
* twice the size of the map viewport, and so on. Default is `1.5`.
* twice the width and height of the map viewport, and so on. Must be `1` or
* higher. Default is `1.5`.
* @type {number|undefined}
* @api stable
*/
@@ -4754,6 +4866,7 @@ olx.source.ImageStaticOptions.prototype.url;
/**
* @typedef {{attributions: (Array.<ol.Attribution>|undefined),
* crossOrigin: (null|string|undefined),
* params: (Object.<string, *>|undefined),
* logo: (string|olx.LogoOptions|undefined),
* tileGrid: (ol.tilegrid.TileGrid|undefined),
@@ -4766,6 +4879,7 @@ olx.source.ImageStaticOptions.prototype.url;
*/
olx.source.TileArcGISRestOptions;
/**
* Attributions.
* @type {Array.<ol.Attribution>|undefined}
@@ -4774,6 +4888,18 @@ olx.source.TileArcGISRestOptions;
olx.source.TileArcGISRestOptions.prototype.attributions;
/**
* The `crossOrigin` attribute for loaded images. Note that you must provide a
* `crossOrigin` value if you are using the WebGL renderer or if you want to
* access pixel data with the Canvas renderer. See
* {@link https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image}
* for more detail.
* @type {null|string|undefined}
* @api
*/
olx.source.TileArcGISRestOptions.prototype.crossOrigin;
/**
* ArcGIS Rest parameters. This field is optional. Service defaults will be
* used for any fields not specified. `FORMAT` is `PNG32` by default. `F` is `IMAGE` by
@@ -4807,6 +4933,7 @@ olx.source.TileArcGISRestOptions.prototype.logo;
*/
olx.source.TileArcGISRestOptions.prototype.tileGrid;
/**
* Projection.
* @type {ol.proj.ProjectionLike}
@@ -5068,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
@@ -5131,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;
@@ -5324,7 +5453,9 @@ olx.source.WMTSOptions.prototype.dimensions;
/**
* A URL for the service. For the RESTful request encoding, this is a URL
* template. For KVP encoding, it is normal URL.
* template. For KVP encoding, it is normal URL. A `{?-?}` template pattern,
* for example `subdomain{a-f}.domain.com`, may be used instead of defining
* each one separately in the `urls` option.
* @type {string|undefined}
* @api stable
*/
@@ -5481,6 +5612,8 @@ olx.source.XYZOptions.prototype.tileUrlFunction;
/**
* URL template. Must include `{x}`, `{y}` or `{-y}`, and `{z}` placeholders.
* A `{?-?}` template pattern, for example `subdomain{a-f}.domain.com`, may be
* used instead of defining each one separately in the `urls` option.
* @type {string|undefined}
* @api stable
*/

View File

@@ -1,6 +1,6 @@
{
"name": "openlayers",
"version": "3.7.0",
"version": "3.9.0",
"description": "Build tools and sources for developing OpenLayers based mapping applications",
"keywords": [
"map",
@@ -12,7 +12,8 @@
"install": "node tasks/install.js",
"postinstall": "closure-util update",
"start": "node tasks/serve.js",
"test": "node tasks/test.js"
"test": "node tasks/test.js",
"debug-server": "node tasks/serve-lib.js"
},
"main": "dist/ol.js",
"repository": {
@@ -25,22 +26,21 @@
},
"dependencies": {
"async": "0.9.0",
"closure-util": "1.4.0",
"browserify": "9.0.3",
"closure-util": "1.7.0",
"fs-extra": "0.12.0",
"glob": "5.0.3",
"graceful-fs": "3.0.2",
"handlebars": "3.0.1",
"htmlparser2": "3.7.3",
"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",
"browserify": "9.0.3"
"walk": "2.3.4"
},
"devDependencies": {
"clean-css": "2.2.16",
@@ -50,16 +50,19 @@
"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"
"rbush",
{"module": "pixelworks", "browserify": true}
]
}

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

@@ -3,7 +3,6 @@ goog.provide('ol.control.Control');
goog.require('goog.array');
goog.require('goog.dom');
goog.require('goog.events');
goog.require('goog.events.EventType');
goog.require('ol.MapEventType');
goog.require('ol.Object');
@@ -79,24 +78,6 @@ ol.control.Control = function(options) {
goog.inherits(ol.control.Control, ol.Object);
/**
* Bind a listener that blurs the passed element on any mouseout- or
* focusout-event.
*
* @param {!Element} button The button which shall blur on mouseout- or
* focusout-event.
* @protected
*/
ol.control.Control.bindMouseOutFocusOutBlur = function(button) {
goog.events.listen(button, [
goog.events.EventType.MOUSEOUT,
goog.events.EventType.FOCUSOUT
], /** @this {Element} */ function() {
this.blur();
}, false);
};
/**
* @inheritDoc
*/

View File

@@ -67,8 +67,6 @@ ol.control.FullScreen = function(opt_options) {
goog.events.listen(button, goog.events.EventType.CLICK,
this.handleClick_, false, this);
ol.control.Control.bindMouseOutFocusOutBlur(button);
goog.events.listen(goog.global.document,
goog.dom.fullscreen.EventType.CHANGE,
this.handleFullScreenChange_, false, this);

View File

@@ -90,8 +90,6 @@ ol.control.OverviewMap = function(opt_options) {
goog.events.listen(button, goog.events.EventType.CLICK,
this.handleClick_, false, this);
ol.control.Control.bindMouseOutFocusOutBlur(button);
var ovmapDiv = goog.dom.createDom(goog.dom.TagName.DIV, 'ol-overviewmap-map');
/**
@@ -517,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

@@ -60,8 +60,6 @@ ol.control.Rotate = function(opt_options) {
goog.events.listen(button, goog.events.EventType.CLICK,
ol.control.Rotate.prototype.handleClick_, false, this);
ol.control.Control.bindMouseOutFocusOutBlur(button);
var cssClasses = className + ' ' + ol.css.CLASS_UNSELECTABLE + ' ' +
ol.css.CLASS_CONTROL;
var element = goog.dom.createDom(goog.dom.TagName.DIV, cssClasses, button);

View File

@@ -50,8 +50,6 @@ ol.control.Zoom = function(opt_options) {
goog.events.EventType.CLICK, goog.partial(
ol.control.Zoom.prototype.handleClick_, delta), false, this);
ol.control.Control.bindMouseOutFocusOutBlur(inElement);
var outElement = goog.dom.createDom(goog.dom.TagName.BUTTON, {
'class': className + '-out',
'type' : 'button',

View File

@@ -8,7 +8,7 @@ goog.require('goog.dom.TagName');
goog.require('goog.events');
goog.require('goog.events.Event');
goog.require('goog.events.EventType');
goog.require('goog.fx.DragDropEvent');
goog.require('goog.fx.DragEvent');
goog.require('goog.fx.Dragger');
goog.require('goog.fx.Dragger.EventType');
goog.require('goog.math');
@@ -222,7 +222,7 @@ ol.control.ZoomSlider.prototype.handleContainerClick_ = function(browserEvent) {
/**
* Handle dragger start events.
* @param {goog.fx.DragDropEvent} event The dragdropevent.
* @param {goog.fx.DragEvent} event The drag event.
* @private
*/
ol.control.ZoomSlider.prototype.handleDraggerStart_ = function(event) {
@@ -233,7 +233,7 @@ ol.control.ZoomSlider.prototype.handleDraggerStart_ = function(event) {
/**
* Handle dragger drag events.
*
* @param {goog.fx.DragDropEvent} event The dragdropevent.
* @param {goog.fx.DragEvent} event The drag event.
* @private
*/
ol.control.ZoomSlider.prototype.handleDraggerDrag_ = function(event) {
@@ -245,7 +245,7 @@ ol.control.ZoomSlider.prototype.handleDraggerDrag_ = function(event) {
/**
* Handle dragger end events.
* @param {goog.fx.DragDropEvent} event The dragdropevent.
* @param {goog.fx.DragEvent} event The drag event.
* @private
*/
ol.control.ZoomSlider.prototype.handleDraggerEnd_ = function(event) {

View File

@@ -43,8 +43,6 @@ ol.control.ZoomToExtent = function(opt_options) {
goog.events.listen(button, goog.events.EventType.CLICK,
this.handleClick_, false, this);
ol.control.Control.bindMouseOutFocusOutBlur(button);
var cssClasses = className + ' ' + ol.css.CLASS_UNSELECTABLE + ' ' +
ol.css.CLASS_CONTROL;
var element = goog.dom.createDom(goog.dom.TagName.DIV, cssClasses, button);

View File

@@ -67,9 +67,11 @@ ol.DeviceOrientationProperty = {
*
* @see http://www.w3.org/TR/orientation-event/
*
* To get notified of device orientation changes, register a listener for the
* generic `change` event on your `ol.DeviceOrientation` instance.
*
* @constructor
* @extends {ol.Object}
* @fires change Triggered when the device orientation changes.
* @param {olx.DeviceOrientationOptions=} opt_options Options.
* @api
*/

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

@@ -111,6 +111,18 @@ ol.events.condition.singleClick = function(mapBrowserEvent) {
};
/**
* Return `true` if the event is a map `dblclick` event, `false` otherwise.
*
* @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.
* @return {boolean} True if the event is a map `dblclick` event.
* @api stable
*/
ol.events.condition.doubleClick = function(mapBrowserEvent) {
return mapBrowserEvent.type == ol.MapBrowserEvent.EventType.DBLCLICK;
};
/**
* Return `true` if no modifier key (alt-, shift- or platform-modifier-key) is
* pressed.

View File

@@ -50,8 +50,6 @@ goog.require('ol.style.Style');
*
* @constructor
* @extends {ol.Object}
* @fires change Triggered when the id, the geometry or the style of the
* feature changes.
* @param {ol.geom.Geometry|Object.<string, *>=} opt_geometryOrProperties
* You may pass a Geometry object directly, or an object literal
* containing properties. If you pass an object literal, you may
@@ -151,8 +149,12 @@ 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
*/
ol.Feature.prototype.getId = function() {
return this.id_;
@@ -177,6 +179,7 @@ ol.Feature.prototype.getGeometryName = function() {
* @return {ol.style.Style|Array.<ol.style.Style>|
* ol.FeatureStyleFunction} The feature style.
* @api stable
* @observable
*/
ol.Feature.prototype.getStyle = function() {
return this.style_;
@@ -238,6 +241,7 @@ ol.Feature.prototype.setGeometry = function(geometry) {
* @param {ol.style.Style|Array.<ol.style.Style>|
* ol.FeatureStyleFunction} style Style for this feature.
* @api stable
* @observable
*/
ol.Feature.prototype.setStyle = function(style) {
this.style_ = style;
@@ -254,6 +258,7 @@ ol.Feature.prototype.setStyle = function(style) {
* method.
* @param {number|string|undefined} id The feature id.
* @api stable
* @observable
*/
ol.Feature.prototype.setId = function(id) {
this.id_ = id;
@@ -281,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
@@ -299,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

@@ -39,6 +39,9 @@ ol.GeolocationProperty = {
* The [Geolocation API](http://www.w3.org/TR/geolocation-API/)
* is used to locate a user's position.
*
* To get notified of position changes, register a listener for the generic
* `change` event on your instance of `ol.Geolocation`.
*
* Example:
*
* var geolocation = new ol.Geolocation({
@@ -52,7 +55,6 @@ ol.GeolocationProperty = {
*
* @constructor
* @extends {ol.Object}
* @fires change Triggered when the position changes.
* @param {olx.GeolocationOptions=} opt_options Options.
* @api stable
*/

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

@@ -50,9 +50,11 @@ ol.geom.GeometryLayout = {
* instantiated in apps.
* Base class for vector geometries.
*
* To get notified of changes to the geometry, register a listener for the
* generic `change` event on your geometry instance.
*
* @constructor
* @extends {ol.Object}
* @fires change Triggered when the geometry changes.
* @api stable
*/
ol.geom.Geometry = function() {

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

@@ -2,6 +2,7 @@ goog.provide('ol.geom.MultiPolygon');
goog.require('goog.array');
goog.require('goog.asserts');
goog.require('goog.object');
goog.require('ol.extent');
goog.require('ol.geom.GeometryLayout');
goog.require('ol.geom.GeometryType');
@@ -77,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);
@@ -119,8 +119,10 @@ ol.geom.MultiPolygon.prototype.appendPolygon = function(polygon) {
*/
ol.geom.MultiPolygon.prototype.clone = function() {
var multiPolygon = new ol.geom.MultiPolygon(null);
var newEndss = /** @type {Array.<Array.<number>>} */
(goog.object.unsafeClone(this.endss_));
multiPolygon.setFlatCoordinates(
this.layout, this.flatCoordinates.slice(), this.endss_.slice());
this.layout, this.flatCoordinates.slice(), newEndss);
return multiPolygon;
};

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

@@ -1,5 +1,6 @@
goog.provide('ol.ImageCanvas');
goog.require('goog.asserts');
goog.require('ol.ImageBase');
goog.require('ol.ImageState');
@@ -13,12 +14,23 @@ goog.require('ol.ImageState');
* @param {number} pixelRatio Pixel ratio.
* @param {Array.<ol.Attribution>} attributions Attributions.
* @param {HTMLCanvasElement} canvas Canvas.
* @param {ol.ImageCanvasLoader=} opt_loader Optional loader function to
* support asynchronous canvas drawing.
*/
ol.ImageCanvas = function(extent, resolution, pixelRatio, attributions,
canvas) {
canvas, opt_loader) {
goog.base(this, extent, resolution, pixelRatio, ol.ImageState.LOADED,
attributions);
/**
* Optional canvas loader function.
* @type {?ol.ImageCanvasLoader}
* @private
*/
this.loader_ = goog.isDef(opt_loader) ? opt_loader : null;
var state = goog.isDef(opt_loader) ?
ol.ImageState.IDLE : ol.ImageState.LOADED;
goog.base(this, extent, resolution, pixelRatio, state, attributions);
/**
* @private
@@ -26,13 +38,68 @@ ol.ImageCanvas = function(extent, resolution, pixelRatio, attributions,
*/
this.canvas_ = canvas;
/**
* @private
* @type {Error}
*/
this.error_ = null;
};
goog.inherits(ol.ImageCanvas, ol.ImageBase);
/**
* Get any error associated with asynchronous rendering.
* @return {Error} Any error that occurred during rendering.
*/
ol.ImageCanvas.prototype.getError = function() {
return this.error_;
};
/**
* Handle async drawing complete.
* @param {Error} err Any error during drawing.
* @private
*/
ol.ImageCanvas.prototype.handleLoad_ = function(err) {
if (err) {
this.error_ = err;
this.state = ol.ImageState.ERROR;
} else {
this.state = ol.ImageState.LOADED;
}
this.changed();
};
/**
* Trigger drawing on canvas.
*/
ol.ImageCanvas.prototype.load = function() {
if (this.state == ol.ImageState.IDLE) {
goog.asserts.assert(!goog.isNull(this.loader_));
this.state = ol.ImageState.LOADING;
this.changed();
this.loader_(goog.bind(this.handleLoad_, this));
}
};
/**
* @inheritDoc
*/
ol.ImageCanvas.prototype.getImage = function(opt_context) {
return this.canvas_;
};
/**
* A function that is called to trigger asynchronous canvas drawing. It is
* called with a "done" callback that should be called when drawing is done.
* If any error occurs during drawing, the "done" callback should be called with
* that error.
*
* @typedef {function(function(Error))}
*/
ol.ImageCanvasLoader;

View File

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

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