Compare commits
317 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
dedf0a5d63 | ||
|
|
41bb512952 | ||
|
|
a1da682722 | ||
|
|
6da7cf3f84 | ||
|
|
216be8a673 | ||
|
|
411419e45f | ||
|
|
6617bdd57f | ||
|
|
6838fdd4c9 | ||
|
|
085c2d7e33 | ||
|
|
6c854ed056 | ||
|
|
d0b87ecd63 | ||
|
|
0469a31ea9 | ||
|
|
31f2e334cf | ||
|
|
b7f199c8cd | ||
|
|
d3a4fd115b | ||
|
|
0fec4c5ff7 | ||
|
|
d0722cab6a | ||
|
|
f02ad3e584 | ||
|
|
bb5b711dac | ||
|
|
7c2fffed68 | ||
|
|
989adabb1f | ||
|
|
1e78c45466 | ||
|
|
9b738b6cb6 | ||
|
|
4aa2369244 | ||
|
|
d702aad450 | ||
|
|
d41bb2663b | ||
|
|
07b1f5ea45 | ||
|
|
bf35b32a20 | ||
|
|
dba6e04a1b | ||
|
|
cb9054f7fd | ||
|
|
ad56dea388 | ||
|
|
529f869803 | ||
|
|
5371d8dd34 | ||
|
|
fc51ab05f4 | ||
|
|
053538cc42 | ||
|
|
8311f090de | ||
|
|
a09c07a427 | ||
|
|
eed926fa94 | ||
|
|
fe153b94fb | ||
|
|
fce931afbe | ||
|
|
d036602cec | ||
|
|
1a240ccf9d | ||
|
|
91f47a876c | ||
|
|
9f5d8d3901 | ||
|
|
0bfd22b235 | ||
|
|
965a27b115 | ||
|
|
47fbbf6ce2 | ||
|
|
cc6e0f1b3c | ||
|
|
0001e0989b | ||
|
|
6d87fffb73 | ||
|
|
5760e427d2 | ||
|
|
c4d4962806 | ||
|
|
250cb35f8e | ||
|
|
2b995fd8cf | ||
|
|
fd4eff7292 | ||
|
|
6f40544732 | ||
|
|
4e58ebd360 | ||
|
|
43f72031f9 | ||
|
|
3811228ac7 | ||
|
|
c57f5e5f0a | ||
|
|
0d32a49244 | ||
|
|
6a0fa114da | ||
|
|
7b805ead9e | ||
|
|
95030cd838 | ||
|
|
e568eb3ccf | ||
|
|
813afe1e3f | ||
|
|
8b6ab65ca7 | ||
|
|
f5df71ba70 | ||
|
|
1553dce3dc | ||
|
|
055df25c58 | ||
|
|
4dddf4c3d9 | ||
|
|
4d5cf372b0 | ||
|
|
34f65a8908 | ||
|
|
b4dec522f1 | ||
|
|
af553366d4 | ||
|
|
66524a8075 | ||
|
|
33229597c8 | ||
|
|
e41ba12445 | ||
|
|
31a074daf5 | ||
|
|
4045e06aa9 | ||
|
|
61fe8a8418 | ||
|
|
954c1c313e | ||
|
|
c1575e810b | ||
|
|
16d687205d | ||
|
|
15ef7eec85 | ||
|
|
db68c09e4d | ||
|
|
9d07300e71 | ||
|
|
ffc24e892e | ||
|
|
49b8f90e66 | ||
|
|
eb4dab90e5 | ||
|
|
7b9828a7a7 | ||
|
|
727586ecb9 | ||
|
|
b3860a8fd5 | ||
|
|
e189667d20 | ||
|
|
fe69c0e354 | ||
|
|
1c549b4df3 | ||
|
|
931100e030 | ||
|
|
6c13de715e | ||
|
|
37cdbcc72f | ||
|
|
da5bf46dbf | ||
|
|
2c8e5600ce | ||
|
|
0194c8e3c2 | ||
|
|
980dbc121a | ||
|
|
d09506f5b1 | ||
|
|
13a9d2f6af | ||
|
|
d91f5ecc48 | ||
|
|
b180149100 | ||
|
|
6bbc411521 | ||
|
|
0ba7856d49 | ||
|
|
90ec289c89 | ||
|
|
b724ce6c0d | ||
|
|
9cccbd0712 | ||
|
|
3852be0d7e | ||
|
|
daa4781072 | ||
|
|
8ec2bcef17 | ||
|
|
c74277cae8 | ||
|
|
bc1328528a | ||
|
|
ff01bba55a | ||
|
|
8329da8d1c | ||
|
|
5865d5bc55 | ||
|
|
6d7f51f111 | ||
|
|
da4b863ad8 | ||
|
|
2d92791b17 | ||
|
|
4c615d8ddf | ||
|
|
c14d64b4e7 | ||
|
|
c2f4b38981 | ||
|
|
b1973fcdf4 | ||
|
|
6260c4d744 | ||
|
|
5029b5dc97 | ||
|
|
7505460d65 | ||
|
|
e211c908f8 | ||
|
|
87a1031de5 | ||
|
|
fef0088bf9 | ||
|
|
8a4bdd4046 | ||
|
|
da4d5caea8 | ||
|
|
2aa7812fc5 | ||
|
|
fdba4fc381 | ||
|
|
8730fc8824 | ||
|
|
35d26f1280 | ||
|
|
7e7494d5c7 | ||
|
|
a8797ae1ff | ||
|
|
a6c49dabcf | ||
|
|
296564a4ce | ||
|
|
5f7e6ac61a | ||
|
|
33da0e7b66 | ||
|
|
d042b4c277 | ||
|
|
338d0570fd | ||
|
|
cafbb82c41 | ||
|
|
de0266ded7 | ||
|
|
e703a58c5d | ||
|
|
fefc39147c | ||
|
|
d204d7764a | ||
|
|
92655b2d20 | ||
|
|
204f8f9813 | ||
|
|
b0dd3782a8 | ||
|
|
2ae22a934d | ||
|
|
594eb7fe95 | ||
|
|
c60b80b566 | ||
|
|
0578e8f2f6 | ||
|
|
daf85c75c7 | ||
|
|
b94a4832f7 | ||
|
|
ab24d9043e | ||
|
|
6dc7f2cfec | ||
|
|
5b80da7f6e | ||
|
|
0691d1d74e | ||
|
|
ade361479a | ||
|
|
0c06a429fb | ||
|
|
4233061dda | ||
|
|
7e579f1ec0 | ||
|
|
0e538b29c0 | ||
|
|
23f29ab65a | ||
|
|
464ce13b13 | ||
|
|
861e1515d4 | ||
|
|
2bd0fdf07b | ||
|
|
1921e009e6 | ||
|
|
b0584acaa5 | ||
|
|
eb8be03792 | ||
|
|
e57919e55b | ||
|
|
b01fa94ecd | ||
|
|
47b53ded6d | ||
|
|
3c8aeb7287 | ||
|
|
7b899fa767 | ||
|
|
73d4ba2a51 | ||
|
|
a673c39251 | ||
|
|
a1946a6e69 | ||
|
|
f695cb012a | ||
|
|
317a27d6f3 | ||
|
|
eb2a30e461 | ||
|
|
e49ce543a4 | ||
|
|
575fff6737 | ||
|
|
b3f14f09c4 | ||
|
|
6812de6a77 | ||
|
|
0ec70256d6 | ||
|
|
23ae91cfd5 | ||
|
|
999880f350 | ||
|
|
85815a32a0 | ||
|
|
0a6745f1e4 | ||
|
|
08c01de6b0 | ||
|
|
ad2b4a3863 | ||
|
|
91d6844ecd | ||
|
|
929ce05f81 | ||
|
|
81b7a77954 | ||
|
|
91045b0ad1 | ||
|
|
b11f6abb3c | ||
|
|
571f3f30a4 | ||
|
|
85ddded15c | ||
|
|
d3c8880b22 | ||
|
|
54d3bbd625 | ||
|
|
405a8db075 | ||
|
|
27e58be43d | ||
|
|
cee34fa51b | ||
|
|
16aa548383 | ||
|
|
860fdabd76 | ||
|
|
761aa0ea5c | ||
|
|
d493d0a820 | ||
|
|
d6e35edac5 | ||
|
|
2143eebd30 | ||
|
|
64225776d4 | ||
|
|
355c3c7b58 | ||
|
|
e792a121f4 | ||
|
|
3364dbb46e | ||
|
|
23610efe30 | ||
|
|
75bf3e1ccf | ||
|
|
f2f5cd2630 | ||
|
|
6f6698dd6a | ||
|
|
4320b07c5d | ||
|
|
25603d7cf1 | ||
|
|
935eb63876 | ||
|
|
6111b91cca | ||
|
|
7a34d22b37 | ||
|
|
c3f51c676a | ||
|
|
968c8aa34e | ||
|
|
b001a48567 | ||
|
|
bf9156cbeb | ||
|
|
bafd8548d1 | ||
|
|
e3ead5df06 | ||
|
|
22ca08179d | ||
|
|
c8df907ff2 | ||
|
|
c0950dee11 | ||
|
|
da3d8952da | ||
|
|
95e43c852d | ||
|
|
d4d3555a88 | ||
|
|
ef9a1a25b1 | ||
|
|
44fdfaa630 | ||
|
|
112473afee | ||
|
|
5e505f200a | ||
|
|
5e4474ca8c | ||
|
|
d3f766c748 | ||
|
|
2b1acc6216 | ||
|
|
c008de1a88 | ||
|
|
e6a38d8211 | ||
|
|
e6f4054d3b | ||
|
|
fe636a0e98 | ||
|
|
76d36d4b20 | ||
|
|
89b62cd53b | ||
|
|
abb5fef043 | ||
|
|
0c486c522a | ||
|
|
af3c38052e | ||
|
|
f1ff39cc8b | ||
|
|
643c2e6f21 | ||
|
|
d5aa0d9a8e | ||
|
|
793b27e9f5 | ||
|
|
9d28549b2b | ||
|
|
ef90f5a097 | ||
|
|
c50d775330 | ||
|
|
6da6cef760 | ||
|
|
1d94d71a5b | ||
|
|
65fee5b7ac | ||
|
|
5267776627 | ||
|
|
a721ce03c9 | ||
|
|
23e2fcefef | ||
|
|
d17d470d48 | ||
|
|
c6dedbc40b | ||
|
|
de107c5502 | ||
|
|
6740ca9ee8 | ||
|
|
2c82ca86f0 | ||
|
|
b7ad9160ef | ||
|
|
acc97a53eb | ||
|
|
7634c0c2c4 | ||
|
|
49cc39c4dd | ||
|
|
3595c2cce7 | ||
|
|
80c4809aee | ||
|
|
10b4aa1bab | ||
|
|
8f7cbc5ed6 | ||
|
|
b66a114873 | ||
|
|
7094f65ef7 | ||
|
|
ac8e62818f | ||
|
|
c89fb3ccfe | ||
|
|
223d5ab60d | ||
|
|
2142b538ac | ||
|
|
5149889bd2 | ||
|
|
b57cdb730c | ||
|
|
8600d46a0e | ||
|
|
7509425aa4 | ||
|
|
c9ab9bc711 | ||
|
|
cd6ac857b9 | ||
|
|
7b35557cee | ||
|
|
4549d2f7a8 | ||
|
|
7780d77ade | ||
|
|
bfaac061c8 | ||
|
|
afce912f11 | ||
|
|
a705c6fe11 | ||
|
|
26e146b1d8 | ||
|
|
64ab764827 | ||
|
|
314b04df7a | ||
|
|
29b1f0d55d | ||
|
|
a62bbd6650 | ||
|
|
38fa805f03 | ||
|
|
1d3f8b5d7d | ||
|
|
c53aa7e8d5 | ||
|
|
109cd6f3a6 | ||
|
|
4f703efd23 | ||
|
|
a157fff318 | ||
|
|
ae1221d811 | ||
|
|
d6118f31e4 | ||
|
|
7065722fa6 | ||
|
|
ab9100450b |
@@ -10,8 +10,6 @@ insert_final_newline = true
|
||||
|
||||
[*.md]
|
||||
indent_size = 2
|
||||
|
||||
[*.md]
|
||||
trim_trailing_whitespace = false
|
||||
|
||||
[Makefile]
|
||||
|
||||
10
.travis.yml
10
.travis.yml
@@ -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
|
||||
|
||||
13
Makefile
13
Makefile
@@ -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 > $@
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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__':
|
||||
|
||||
@@ -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
41
changelog/v3.8.0.md
Normal 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
7
changelog/v3.8.1.md
Normal 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
7
changelog/v3.8.2.md
Normal 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
91
changelog/v3.9.0.md
Normal 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))
|
||||
@@ -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"
|
||||
}
|
||||
|
||||
@@ -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": [
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"><!DOCTYPE html>
|
||||
<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"><!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>{{ title }}</title>
|
||||
<script src="https://code.jquery.com/jquery-1.11.2.min.js"></script>
|
||||
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
|
||||
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/ol3/{{ olVersion }}/ol.css" type="text/css">
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/ol3/{{ olVersion }}/ol.js"></script>
|
||||
<link rel="stylesheet" href="http://openlayers.org/en/v{{ olVersion }}/css/ol.css" type="text/css">
|
||||
<script src="http://openlayers.org/en/v{{ olVersion }}/build/ol.js"></script>
|
||||
{{ extraHead }}
|
||||
{{#if css.source}}
|
||||
<style>
|
||||
@@ -71,7 +74,6 @@
|
||||
</script>
|
||||
</body>
|
||||
</html></code></pre>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -106,4 +106,4 @@ exports.handlers = {
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
});
|
||||
|
||||
};
|
||||
@@ -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>
|
||||
|
||||
@@ -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) ?>
|
||||
|
||||
@@ -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 &&
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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).
|
||||
|
||||
|
||||
@@ -239,7 +239,6 @@ Here is a version of `config.json` with more compilation checks enabled:
|
||||
"ambiguousFunctionDecl",
|
||||
"checkEventfulObjectDisposal",
|
||||
"checkRegExp",
|
||||
"checkStructDictInheritance",
|
||||
"checkTypes",
|
||||
"checkVars",
|
||||
"const",
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -1,6 +1,3 @@
|
||||
#map {
|
||||
position: relative;
|
||||
}
|
||||
#popup {
|
||||
padding-bottom: 45px;
|
||||
}
|
||||
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
28
examples/layer-z-index.html
Normal file
28
examples/layer-z-index.html
Normal 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
92
examples/layer-z-index.js
Normal 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);
|
||||
@@ -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],
|
||||
|
||||
@@ -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
31
examples/raster.css
Normal 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
31
examples/raster.html
Normal 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
200
examples/raster.js
Normal 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';
|
||||
}
|
||||
4
examples/region-growing.css
Normal file
4
examples/region-growing.css
Normal file
@@ -0,0 +1,4 @@
|
||||
table.controls td {
|
||||
min-width: 110px;
|
||||
padding: 2px 5px;
|
||||
}
|
||||
38
examples/region-growing.html
Normal file
38
examples/region-growing.html
Normal 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
132
examples/region-growing.js
Normal 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();
|
||||
});
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
4
examples/shaded-relief.css
Normal file
4
examples/shaded-relief.css
Normal file
@@ -0,0 +1,4 @@
|
||||
table.controls td {
|
||||
text-align: center;
|
||||
padding: 2px 5px;
|
||||
}
|
||||
46
examples/shaded-relief.html
Normal file
46
examples/shaded-relief.html
Normal 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
158
examples/shaded-relief.js
Normal 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);
|
||||
}
|
||||
});
|
||||
@@ -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>
|
||||
|
||||
@@ -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({
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
13
examples/translate-features.html
Normal file
13
examples/translate-features.html
Normal 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>
|
||||
52
examples/translate-features.js
Normal file
52
examples/translate-features.js
Normal 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
|
||||
})
|
||||
});
|
||||
@@ -1,4 +1,3 @@
|
||||
goog.require('ol.Feature');
|
||||
goog.require('ol.Map');
|
||||
goog.require('ol.View');
|
||||
goog.require('ol.format.GeoJSON');
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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({
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
goog.require('ol.Feature');
|
||||
goog.require('ol.Map');
|
||||
goog.require('ol.View');
|
||||
goog.require('ol.format.WKT');
|
||||
|
||||
@@ -30,15 +30,3 @@ Touch.prototype.webkitRadiusX;
|
||||
|
||||
/** @type {number} */
|
||||
Touch.prototype.webkitRadiusY;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @type {boolean}
|
||||
*/
|
||||
WebGLContextAttributes.prototype.preferLowPowerToHighPerformance;
|
||||
|
||||
/**
|
||||
* @type {boolean}
|
||||
*/
|
||||
WebGLContextAttributes.prototype.failIfMajorPerformanceCaveat;
|
||||
|
||||
@@ -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
|
||||
*/
|
||||
|
||||
155
externs/olx.js
155
externs/olx.js
@@ -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
|
||||
*/
|
||||
|
||||
27
package.json
27
package.json
@@ -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}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,2 +1 @@
|
||||
http://closure-linter.googlecode.com/files/closure_linter-latest.tar.gz
|
||||
pystache
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
goog.provide('ol.Attribution');
|
||||
|
||||
goog.require('goog.asserts');
|
||||
goog.require('goog.math');
|
||||
goog.require('ol.TileRange');
|
||||
|
||||
|
||||
@@ -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
|
||||
*/
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
*/
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
@@ -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);
|
||||
@@ -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.
|
||||
|
||||
@@ -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>}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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');
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
@@ -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_
|
||||
});
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
});
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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)
|
||||
}));
|
||||
|
||||
@@ -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
|
||||
*/
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
Reference in New Issue
Block a user