Compare commits
349 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
757fd8bde4 | ||
|
|
633e70b67d | ||
|
|
d4540c693d | ||
|
|
16aed2b33e | ||
|
|
0f53f61741 | ||
|
|
62461bc1d2 | ||
|
|
f9cf5a3523 | ||
|
|
fedb575118 | ||
|
|
2e16d04bbe | ||
|
|
f4de075c02 | ||
|
|
c54a1f5362 | ||
|
|
fdacd368f7 | ||
|
|
27b4b1fff1 | ||
|
|
3494a51578 | ||
|
|
8354d5f0a6 | ||
|
|
64aa3c25a4 | ||
|
|
68a1a497b0 | ||
|
|
3161e5bbaf | ||
|
|
8033e25663 | ||
|
|
22f0b30737 | ||
|
|
79e9dc8128 | ||
|
|
0f53d04361 | ||
|
|
ecc2a9059e | ||
|
|
f7bfee8497 | ||
|
|
16e6d13700 | ||
|
|
76726a3a6f | ||
|
|
90ee1013ad | ||
|
|
0c617abf70 | ||
|
|
50568a6394 | ||
|
|
325fac6886 | ||
|
|
7a3e11b9e4 | ||
|
|
9975528c76 | ||
|
|
c75040e7d8 | ||
|
|
99d67b1d75 | ||
|
|
35a2f90ecd | ||
|
|
080b93f1b8 | ||
|
|
521f001944 | ||
|
|
7a87c15959 | ||
|
|
ca11fd00c1 | ||
|
|
73b3213a96 | ||
|
|
3a8c873fa1 | ||
|
|
0503e3384d | ||
|
|
357d96986a | ||
|
|
d7a2446594 | ||
|
|
481645ab88 | ||
|
|
272a05ff94 | ||
|
|
bbde224f50 | ||
|
|
5c49371198 | ||
|
|
308d6e9081 | ||
|
|
510043d304 | ||
|
|
bd5fad4982 | ||
|
|
f4d8871936 | ||
|
|
34ffb7ee5b | ||
|
|
a862351702 | ||
|
|
bc3c4d905d | ||
|
|
82d0b2bb24 | ||
|
|
239b8f752e | ||
|
|
f46fdb261d | ||
|
|
b689ca2318 | ||
|
|
288a284fdd | ||
|
|
a5b3da1f8a | ||
|
|
57909a730f | ||
|
|
e398896e9e | ||
|
|
b200438a16 | ||
|
|
010dd87d49 | ||
|
|
53937642c8 | ||
|
|
6177c69a51 | ||
|
|
a0c96ea8ba | ||
|
|
d7d31ac571 | ||
|
|
f0fd866eaf | ||
|
|
6ed414e8f7 | ||
|
|
e63214a2cc | ||
|
|
199b9d4b14 | ||
|
|
0543b5a8d7 | ||
|
|
39ef72431a | ||
|
|
dc48a7d411 | ||
|
|
cd0de288e6 | ||
|
|
5e5c58b9be | ||
|
|
d7307c565b | ||
|
|
cd36c8e02f | ||
|
|
1d84bc52c6 | ||
|
|
e32e72f1a0 | ||
|
|
7729822253 | ||
|
|
5499028042 | ||
|
|
e876003684 | ||
|
|
d0e9fd68ff | ||
|
|
b920b78afe | ||
|
|
761f4318bc | ||
|
|
2d0805ca54 | ||
|
|
f73cda8ef5 | ||
|
|
c89bcae4c6 | ||
|
|
f5277c091b | ||
|
|
e2ebd05624 | ||
|
|
2306d08cf4 | ||
|
|
20e8a26b89 | ||
|
|
9abfa95735 | ||
|
|
9898112709 | ||
|
|
41cc3a58d3 | ||
|
|
8573a7ba64 | ||
|
|
b65c6f7e8e | ||
|
|
2907fc3297 | ||
|
|
85bfeda50e | ||
|
|
7a30e495ba | ||
|
|
94a4554083 | ||
|
|
abd50b8fcf | ||
|
|
ad5ce25559 | ||
|
|
efc86d59b0 | ||
|
|
37dcd79a86 | ||
|
|
ec578fa58e | ||
|
|
5c3c97ffa0 | ||
|
|
a28b128078 | ||
|
|
4c32535ff3 | ||
|
|
b03bb2c2ce | ||
|
|
dde9fb5bc4 | ||
|
|
416f7156e8 | ||
|
|
d7c732419d | ||
|
|
d9d371479a | ||
|
|
7c977e0c35 | ||
|
|
59417d4a52 | ||
|
|
9400d600ee | ||
|
|
73e88fc465 | ||
|
|
2925a9ceb3 | ||
|
|
531115b67b | ||
|
|
34efcea5b1 | ||
|
|
e1783fc788 | ||
|
|
c15aa414bd | ||
|
|
e412ba113c | ||
|
|
f118338c0a | ||
|
|
c43a46c5b7 | ||
|
|
ab59f79f6a | ||
|
|
2b0dfaeaed | ||
|
|
08a27a358e | ||
|
|
c1fb2d5d85 | ||
|
|
2ba7abc419 | ||
|
|
05339618e2 | ||
|
|
6d0cf001b9 | ||
|
|
d777edcc05 | ||
|
|
eb31b75caa | ||
|
|
f77c9180a0 | ||
|
|
f99300a83d | ||
|
|
5e6a4e8cb7 | ||
|
|
3860ef0198 | ||
|
|
ab16457d90 | ||
|
|
46a7d6c969 | ||
|
|
15922d3388 | ||
|
|
56a7f9f027 | ||
|
|
ba3570a268 | ||
|
|
8f28398684 | ||
|
|
b24e4c4f65 | ||
|
|
115b2eb937 | ||
|
|
040e67d166 | ||
|
|
53e471fd1f | ||
|
|
40ca32b393 | ||
|
|
2d3fa05b91 | ||
|
|
34428cfea6 | ||
|
|
48bcaf395f | ||
|
|
6ed8a9229f | ||
|
|
60b2290add | ||
|
|
afcc86558c | ||
|
|
0410a32868 | ||
|
|
39a26bf20f | ||
|
|
bfc3a14a2d | ||
|
|
60dfc1f96a | ||
|
|
b5966b8ff3 | ||
|
|
6469d3e864 | ||
|
|
35bd92b713 | ||
|
|
5f2b729c74 | ||
|
|
097c7b689a | ||
|
|
683e46bd58 | ||
|
|
61af120cc7 | ||
|
|
99d933b66f | ||
|
|
dd57b5a84b | ||
|
|
4987cf8ace | ||
|
|
5e42928937 | ||
|
|
cf8c72c992 | ||
|
|
5cfb1e4099 | ||
|
|
a4509e3246 | ||
|
|
9c0ea76be2 | ||
|
|
09e9759753 | ||
|
|
6726e0a98c | ||
|
|
d100ab1ef6 | ||
|
|
ba867f8ff8 | ||
|
|
bf2ff0ec8e | ||
|
|
a71946a7b5 | ||
|
|
3cb5060497 | ||
|
|
a0341f7c5b | ||
|
|
4b4f383043 | ||
|
|
0bfa59fb6f | ||
|
|
88415bae1a | ||
|
|
989b047dc1 | ||
|
|
5b13106cec | ||
|
|
b4ffc8cf75 | ||
|
|
27baa3d698 | ||
|
|
33adabf168 | ||
|
|
4476c1bb03 | ||
|
|
46e17530bc | ||
|
|
da60dafd7f | ||
|
|
d23f000846 | ||
|
|
cab34cb220 | ||
|
|
3b39ca350c | ||
|
|
2421ae0254 | ||
|
|
f3ccbeef18 | ||
|
|
2ef5f99599 | ||
|
|
1ed092e2fa | ||
|
|
e0278334e2 | ||
|
|
bd098c7821 | ||
|
|
400f754e44 | ||
|
|
d988e2871b | ||
|
|
53214f6ae1 | ||
|
|
f36c557aca | ||
|
|
98b863604b | ||
|
|
95e0e14794 | ||
|
|
f95e95a48d | ||
|
|
93cfc063c3 | ||
|
|
b44db8eb26 | ||
|
|
145505fa8a | ||
|
|
670c6d9f3f | ||
|
|
6113821d7c | ||
|
|
521f06e91c | ||
|
|
617e13f61a | ||
|
|
71370405c3 | ||
|
|
1e7f21f423 | ||
|
|
9a9901b9bd | ||
|
|
55fb814ec8 | ||
|
|
908fdbc311 | ||
|
|
83f87a1f1e | ||
|
|
682ef4ee08 | ||
|
|
ab132d5b3e | ||
|
|
5126002146 | ||
|
|
a3e3e99baa | ||
|
|
2d13f3c6e1 | ||
|
|
d6200ff625 | ||
|
|
d19dfa0775 | ||
|
|
74107816b4 | ||
|
|
f30f6da7bb | ||
|
|
f4420c5352 | ||
|
|
cdd9af8caa | ||
|
|
28c79af676 | ||
|
|
5161a99925 | ||
|
|
967cffc398 | ||
|
|
d3527bf910 | ||
|
|
13550fbb4c | ||
|
|
aeb9d45c19 | ||
|
|
738aa4c698 | ||
|
|
544953f932 | ||
|
|
66498c0da5 | ||
|
|
7ea5fb023f | ||
|
|
2a117cce8f | ||
|
|
2566c50a10 | ||
|
|
7b906b9e44 | ||
|
|
9b92fa1957 | ||
|
|
55be9b8d3c | ||
|
|
b710c1f76e | ||
|
|
a0b76a5604 | ||
|
|
42680307cc | ||
|
|
5fce1b0351 | ||
|
|
456c85979d | ||
|
|
890f83e54d | ||
|
|
ac9fb9f92c | ||
|
|
964f0f33b4 | ||
|
|
50e15dc3e7 | ||
|
|
df4b77b2bb | ||
|
|
a61e9f563c | ||
|
|
0f29ea4f0e | ||
|
|
1cad1ffab6 | ||
|
|
ea5484d676 | ||
|
|
1fdef48812 | ||
|
|
5d0b1efba7 | ||
|
|
73afb656d7 | ||
|
|
02b2cdbd27 | ||
|
|
fb820f4b81 | ||
|
|
3bdddeac1d | ||
|
|
a2c043d1b4 | ||
|
|
46bcce464f | ||
|
|
39cf0ee154 | ||
|
|
a5113715ef | ||
|
|
36f01e7b08 | ||
|
|
0dfd6da5a9 | ||
|
|
8e91d51d7c | ||
|
|
32c26c2524 | ||
|
|
44a976eb60 | ||
|
|
7abe24010a | ||
|
|
163fc2e8e6 | ||
|
|
86d0074386 | ||
|
|
44558b7c89 | ||
|
|
81acbc0f25 | ||
|
|
c69cf27218 | ||
|
|
1674fcc680 | ||
|
|
9277902535 | ||
|
|
8a08ab6463 | ||
|
|
8e90976bf2 | ||
|
|
1a6ea341fe | ||
|
|
cada78459f | ||
|
|
9271df7e1d | ||
|
|
9bdd643014 | ||
|
|
ae62f5a682 | ||
|
|
940f97e2a7 | ||
|
|
8292e0e311 | ||
|
|
f928209256 | ||
|
|
26270669df | ||
|
|
ee81a5e817 | ||
|
|
d218c4d454 | ||
|
|
81f37708c1 | ||
|
|
8b0c6196e6 | ||
|
|
93a9799e46 | ||
|
|
7f0c8fe899 | ||
|
|
b06efa387c | ||
|
|
48178f0e31 | ||
|
|
d65cabebd6 | ||
|
|
992cf2b2d6 | ||
|
|
1249b46e5d | ||
|
|
4733a5d0f9 | ||
|
|
dfe51e6195 | ||
|
|
24d1f4eac3 | ||
|
|
95bf18f6bd | ||
|
|
8b0ee6023e | ||
|
|
29fcf5f1c2 | ||
|
|
952a2cfba3 | ||
|
|
3b444978a7 | ||
|
|
13a761b7e7 | ||
|
|
89080cf8dd | ||
|
|
f1685cbe4f | ||
|
|
d3c2c7f96d | ||
|
|
bb593eaac8 | ||
|
|
bfd94445f1 | ||
|
|
7c5a208e07 | ||
|
|
b38336b17f | ||
|
|
1af4d35713 | ||
|
|
f2c51cb39e | ||
|
|
5f794ab562 | ||
|
|
f4752cee59 | ||
|
|
3629a66917 | ||
|
|
35f79f401b | ||
|
|
a58f162ed9 | ||
|
|
f3ebbf4b7c | ||
|
|
94fb7ca5a6 | ||
|
|
92c62e5432 | ||
|
|
87391e7795 | ||
|
|
87a10200e3 | ||
|
|
445c157ee3 | ||
|
|
15ddab7d0a | ||
|
|
3d72cc73b8 | ||
|
|
1b20f89c93 | ||
|
|
17b6088a79 | ||
|
|
23405b80a2 | ||
|
|
5063f4d868 | ||
|
|
0511202743 | ||
|
|
ca90157e9f | ||
|
|
132634f10c |
7
.github/ISSUE_TEMPLATE.md
vendored
7
.github/ISSUE_TEMPLATE.md
vendored
@@ -1,7 +1,8 @@
|
|||||||
This issue tracker is for reporting bugs or feature requests, not for asking questions. For usage questions, refer to the (documentation)[http://openlayers.org/en/latest/doc/].
|
Thank you for your interest in making OpenLayers better!
|
||||||
|
|
||||||
Ready to submit your bug or feature request? Make sure these boxes are checked before submitting your issue. Thank you!
|
To keep this project manageable for maintainers, we ask you to please check all boxes below before submitting an issue.
|
||||||
|
|
||||||
|
- [ ] I am submitting a bug or feature request, not a usage question. Go to https://stackoverflow.com/questions/tagged/openlayers for questions.
|
||||||
- [ ] I have searched GitHub to see if a similar bug or feature request has already been reported.
|
- [ ] I have searched GitHub to see if a similar bug or feature request has already been reported.
|
||||||
- [ ] If reporting a bug, I have tried with the latest version of OpenLayers (see 'LATEST' on https://openlayers.org/)
|
- [ ] I have verified that the issue is present in the latest version of OpenLayers (see 'LATEST' on https://openlayers.org/).
|
||||||
- [ ] If reporting a bug, I have created a [CodePen](https://codepen.io) or prepared a stack trace (using the latest version and unminified code, so e.g. `ol-debug.js`, not `ol.js`) that shows the issue.
|
- [ ] If reporting a bug, I have created a [CodePen](https://codepen.io) or prepared a stack trace (using the latest version and unminified code, so e.g. `ol-debug.js`, not `ol.js`) that shows the issue.
|
||||||
|
|||||||
8
.github/PULL_REQUEST_TEMPLATE.md
vendored
8
.github/PULL_REQUEST_TEMPLATE.md
vendored
@@ -1,5 +1,9 @@
|
|||||||
Make sure these boxes are checked before submitting your pull request. Thank you!
|
Thank you for your interest in making OpenLayers better!
|
||||||
|
|
||||||
- [ ] This pull request addresses an issue that has been marked with the 'Pull request accepted' label.
|
In order to get your proposed changes merged into the master branch, we ask you to please make sure the following boxes are checked *before* submitting your pull request.
|
||||||
|
|
||||||
|
- [ ] This pull request addresses an issue that has been marked with the 'Pull request accepted' label & I have added the link to that issue.
|
||||||
- [ ] It contains one or more small, incremental, logically separate commits, with no merge commits.
|
- [ ] It contains one or more small, incremental, logically separate commits, with no merge commits.
|
||||||
- [ ] I have used clear commit messages.
|
- [ ] I have used clear commit messages.
|
||||||
|
- [ ] Existing tests pass for me locally & I have added or updated tests for new or changed functionality.
|
||||||
|
- [ ] The work herein is covered by a valid [Contributor License Agreement (CLA)](https://github.com/openlayers/cla).
|
||||||
|
|||||||
4
.gitignore
vendored
4
.gitignore
vendored
@@ -1,4 +1,4 @@
|
|||||||
/build/
|
/build/
|
||||||
/node_modules/
|
|
||||||
/dist/
|
|
||||||
/coverage/
|
/coverage/
|
||||||
|
/dist/
|
||||||
|
/node_modules/
|
||||||
|
|||||||
37
.travis.yml
37
.travis.yml
@@ -1,33 +1,22 @@
|
|||||||
sudo: false
|
sudo: false
|
||||||
|
|
||||||
language: node_js
|
language: node_js
|
||||||
|
|
||||||
node_js:
|
node_js:
|
||||||
- "6.1"
|
- '8'
|
||||||
|
|
||||||
addons:
|
|
||||||
firefox: "52.0"
|
|
||||||
|
|
||||||
cache:
|
cache:
|
||||||
directories:
|
directories:
|
||||||
- node_modules
|
- node_modules
|
||||||
env:
|
|
||||||
- DISPLAY=:99.0
|
|
||||||
|
|
||||||
before_install:
|
|
||||||
- "npm prune"
|
|
||||||
|
|
||||||
before_script:
|
before_script:
|
||||||
- "rm src/ol/renderer/webgl/*shader.js"
|
- rm src/ol/renderer/webgl/*shader.js
|
||||||
- "sh -e /etc/init.d/xvfb start"
|
- rm src/ol/renderer/webgl/*shader/locations.js
|
||||||
- "npm ls || true"
|
script: make ci
|
||||||
|
|
||||||
script: "make ci"
|
|
||||||
|
|
||||||
after_success:
|
after_success:
|
||||||
- "make test-coverage"
|
- cat coverage/lcov.info | coveralls
|
||||||
- "cat coverage/lcov.info | ./node_modules/.bin/coveralls"
|
|
||||||
|
|
||||||
branches:
|
branches:
|
||||||
only:
|
only:
|
||||||
- master
|
- master
|
||||||
|
addons:
|
||||||
|
hosts:
|
||||||
|
- travis.dev
|
||||||
|
jwt:
|
||||||
|
# This is the encrypted SAUCE_ACCESS_KEY
|
||||||
|
secure: bb2Ibzu9RLe6ZlIG7JVcuH7IoLMxa/i3LTM7t8mbsPjVOGs5ycyJ7M9MbvqB/F2EzbeV4XB2c9ufI4TkaLYceY5kdWjfZVN8iasr+GFqKMv1uR4i6bpu8KmHJ+blxwfY1QOQ/cGwEx+fbeycMtpTc3Y3GyXaPlCQLhbZvesMg88=
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ The minimum requirements are:
|
|||||||
|
|
||||||
* GNU Make
|
* GNU Make
|
||||||
* Git
|
* Git
|
||||||
* [Node.js](http://nodejs.org/) (higher than 0.12.x)
|
* [Node.js](http://nodejs.org/) (version 8 and above)
|
||||||
* Python 2.6 or 2.7
|
* Python 2.6 or 2.7
|
||||||
* Java 7 (JRE and JDK)
|
* Java 7 (JRE and JDK)
|
||||||
|
|
||||||
|
|||||||
69
Makefile
69
Makefile
@@ -3,12 +3,10 @@ BRANCH := $(shell git rev-parse --abbrev-ref HEAD)
|
|||||||
|
|
||||||
SRC_GLSL := $(shell find src -type f -name '*.glsl')
|
SRC_GLSL := $(shell find src -type f -name '*.glsl')
|
||||||
SRC_SHADER_JS := $(patsubst %shader.glsl,%shader.js,$(SRC_GLSL))
|
SRC_SHADER_JS := $(patsubst %shader.glsl,%shader.js,$(SRC_GLSL))
|
||||||
SRC_JS := $(filter-out $(SRC_SHADER_JS),$(shell find src -name '*.js'))
|
SRC_SHADERLOCATIONS_JS := $(patsubst %shader.glsl,%shader/locations.js,$(SRC_GLSL))
|
||||||
|
SRC_JS := $(filter-out $(SRC_SHADER_JS) $(SRC_SHADERLOCATIONS_JS),$(shell find src -name '*.js'))
|
||||||
SRC_JSDOC = $(shell find src -type f -name '*.jsdoc')
|
SRC_JSDOC = $(shell find src -type f -name '*.jsdoc')
|
||||||
|
|
||||||
SPEC_JS := $(shell find test/spec -type f -name '*.js')
|
|
||||||
SPEC_RENDERING_JS := $(shell find test_rendering/spec -name '*.js')
|
|
||||||
|
|
||||||
EXAMPLES := $(shell find examples -type f)
|
EXAMPLES := $(shell find examples -type f)
|
||||||
EXAMPLES_HTML := $(filter-out examples/index.html,$(shell find examples -maxdepth 1 -type f -name '*.html'))
|
EXAMPLES_HTML := $(filter-out examples/index.html,$(shell find examples -maxdepth 1 -type f -name '*.html'))
|
||||||
EXAMPLES_JS := $(patsubst %.html,%.js,$(EXAMPLES_HTML))
|
EXAMPLES_JS := $(patsubst %.html,%.js,$(EXAMPLES_HTML))
|
||||||
@@ -56,7 +54,6 @@ help:
|
|||||||
@echo "Other less frequently used targets are:"
|
@echo "Other less frequently used targets are:"
|
||||||
@echo
|
@echo
|
||||||
@echo "- build Build ol.js, ol-debug.js, ol.js.map and ol.css"
|
@echo "- build Build ol.js, ol-debug.js, ol.js.map and ol.css"
|
||||||
@echo "- lint Check the code with the linter"
|
|
||||||
@echo "- ci Run the full continuous integration process"
|
@echo "- ci Run the full continuous integration process"
|
||||||
@echo "- apidoc Build the API documentation using JSDoc"
|
@echo "- apidoc Build the API documentation using JSDoc"
|
||||||
@echo "- cleanall Remove all the build artefacts"
|
@echo "- cleanall Remove all the build artefacts"
|
||||||
@@ -70,7 +67,7 @@ apidoc: build/timestamps/jsdoc-$(BRANCH)-timestamp
|
|||||||
build: build/ol.css build/ol.js build/ol-debug.js build/ol.js.map
|
build: build/ol.css build/ol.js build/ol-debug.js build/ol.js.map
|
||||||
|
|
||||||
.PHONY: check
|
.PHONY: check
|
||||||
check: lint build/ol.js test
|
check: build/ol.js test
|
||||||
|
|
||||||
.PHONY: check-examples
|
.PHONY: check-examples
|
||||||
check-examples: $(CHECK_EXAMPLE_TIMESTAMPS)
|
check-examples: $(CHECK_EXAMPLE_TIMESTAMPS)
|
||||||
@@ -86,21 +83,18 @@ check-deps:
|
|||||||
done ;\
|
done ;\
|
||||||
|
|
||||||
.PHONY: ci
|
.PHONY: ci
|
||||||
ci: lint build test test-rendering package compile-examples check-examples apidoc
|
ci: build test package compile-examples check-examples apidoc
|
||||||
|
|
||||||
.PHONY: compile-examples
|
.PHONY: compile-examples
|
||||||
compile-examples: build/compiled-examples/all.combined.js
|
compile-examples: build/compiled-examples/all.combined.js
|
||||||
|
|
||||||
.PHONY: clean
|
.PHONY: clean
|
||||||
clean:
|
clean:
|
||||||
rm -f build/timestamps/eslint-timestamp
|
|
||||||
rm -f build/timestamps/check-*-timestamp
|
rm -f build/timestamps/check-*-timestamp
|
||||||
rm -f build/ol.css
|
rm -f build/ol.css
|
||||||
rm -f build/ol.js
|
rm -f build/ol.js
|
||||||
rm -f build/ol.js.map
|
rm -f build/ol.js.map
|
||||||
rm -f build/ol-debug.js
|
rm -f build/ol-debug.js
|
||||||
rm -f build/test_requires.js
|
|
||||||
rm -f build/test_rendering_requires.js
|
|
||||||
rm -rf build/examples
|
rm -rf build/examples
|
||||||
rm -rf build/compiled-examples
|
rm -rf build/compiled-examples
|
||||||
rm -rf build/package
|
rm -rf build/package
|
||||||
@@ -119,34 +113,19 @@ examples: $(BUILD_EXAMPLES)
|
|||||||
.PHONY: install
|
.PHONY: install
|
||||||
install: build/timestamps/node-modules-timestamp
|
install: build/timestamps/node-modules-timestamp
|
||||||
|
|
||||||
.PHONY: lint
|
|
||||||
lint: build/timestamps/eslint-timestamp
|
|
||||||
|
|
||||||
.PHONY: npm-install
|
.PHONY: npm-install
|
||||||
npm-install: build/timestamps/node-modules-timestamp
|
npm-install: build/timestamps/node-modules-timestamp
|
||||||
|
|
||||||
.PHONY: shaders
|
.PHONY: shaders
|
||||||
shaders: $(SRC_SHADER_JS)
|
shaders: $(SRC_SHADER_JS $(SRC_SHADERLOCATIONS_JS)
|
||||||
|
|
||||||
.PHONY: serve
|
.PHONY: serve
|
||||||
serve: build/test_requires.js build/test_rendering_requires.js
|
serve:
|
||||||
node tasks/serve.js
|
node tasks/serve.js
|
||||||
|
|
||||||
.PHONY: test
|
.PHONY: test
|
||||||
test: build/timestamps/node-modules-timestamp build/test_requires.js
|
test: build/timestamps/node-modules-timestamp
|
||||||
node tasks/test.js
|
npm test
|
||||||
|
|
||||||
.PHONY: test-coverage
|
|
||||||
test-coverage: build/timestamps/node-modules-timestamp
|
|
||||||
node tasks/test-coverage.js
|
|
||||||
|
|
||||||
.PHONY: test-rendering
|
|
||||||
test-rendering: build/timestamps/node-modules-timestamp \
|
|
||||||
build/test_rendering_requires.js
|
|
||||||
@rm -rf build/slimerjs-profile
|
|
||||||
@mkdir -p build/slimerjs-profile
|
|
||||||
@cp -r test_rendering/slimerjs-profile/* build/slimerjs-profile/
|
|
||||||
node tasks/test-rendering.js
|
|
||||||
|
|
||||||
.PHONY: host-examples
|
.PHONY: host-examples
|
||||||
host-examples: $(BUILD_HOSTED_EXAMPLES) \
|
host-examples: $(BUILD_HOSTED_EXAMPLES) \
|
||||||
@@ -189,7 +168,7 @@ build/compiled-examples/all.js: $(EXAMPLES_JS)
|
|||||||
@python bin/combine-examples.py $^ > $@
|
@python bin/combine-examples.py $^ > $@
|
||||||
|
|
||||||
build/compiled-examples/all.combined.js: config/examples-all.json build/compiled-examples/all.js \
|
build/compiled-examples/all.combined.js: config/examples-all.json build/compiled-examples/all.js \
|
||||||
$(SRC_JS) $(SRC_SHADER_JS) \
|
$(SRC_JS) $(SRC_SHADER_JS) $(SRC_SHADERLOCATIONS_JS) \
|
||||||
build/timestamps/node-modules-timestamp
|
build/timestamps/node-modules-timestamp
|
||||||
@mkdir -p $(@D)
|
@mkdir -p $(@D)
|
||||||
node tasks/build.js $< $@
|
node tasks/build.js $< $@
|
||||||
@@ -200,14 +179,14 @@ build/compiled-examples/%.json: config/example.json build/examples/%.js \
|
|||||||
@sed -e 's|{{id}}|$*|' $< > $@
|
@sed -e 's|{{id}}|$*|' $< > $@
|
||||||
|
|
||||||
build/compiled-examples/%.combined.js: build/compiled-examples/%.json \
|
build/compiled-examples/%.combined.js: build/compiled-examples/%.json \
|
||||||
$(SRC_JS) $(SRC_SHADER_JS) \
|
$(SRC_JS) $(SRC_SHADER_JS) $(SRC_SHADERLOCATIONS_JS)\
|
||||||
build/timestamps/node-modules-timestamp
|
build/timestamps/node-modules-timestamp
|
||||||
@mkdir -p $(@D)
|
@mkdir -p $(@D)
|
||||||
node tasks/build.js $< $@
|
node tasks/build.js $< $@
|
||||||
|
|
||||||
build/timestamps/jsdoc-$(BRANCH)-timestamp: config/jsdoc/api/index.md \
|
build/timestamps/jsdoc-$(BRANCH)-timestamp: config/jsdoc/api/index.md \
|
||||||
config/jsdoc/api/conf.json $(SRC_JS) \
|
config/jsdoc/api/conf.json $(SRC_JS) \
|
||||||
$(SRC_SHADER_JS) \
|
$(SRC_SHADER_JS) $(SRC_SHADERLOCATIONS_JS) \
|
||||||
$(shell find config/jsdoc/api/template -type f) \
|
$(shell find config/jsdoc/api/template -type f) \
|
||||||
build/timestamps/node-modules-timestamp
|
build/timestamps/node-modules-timestamp
|
||||||
@mkdir -p $(@D)
|
@mkdir -p $(@D)
|
||||||
@@ -248,14 +227,6 @@ $(BUILD_HOSTED)/build/ol-deps.js: host-libraries
|
|||||||
--root_with_prefix "$(BUILD_HOSTED)/closure-library/third_party ../../third_party" \
|
--root_with_prefix "$(BUILD_HOSTED)/closure-library/third_party ../../third_party" \
|
||||||
--output_file $@
|
--output_file $@
|
||||||
|
|
||||||
build/timestamps/eslint-timestamp: $(SRC_JS) $(SPEC_JS) $(SPEC_RENDERING_JS) \
|
|
||||||
$(TASKS_JS) $(EXAMPLES_JS) \
|
|
||||||
build/timestamps/node-modules-timestamp
|
|
||||||
@mkdir -p $(@D)
|
|
||||||
@echo "Running eslint..."
|
|
||||||
@./node_modules/.bin/eslint tasks test test_rendering src examples
|
|
||||||
@touch $@
|
|
||||||
|
|
||||||
build/timestamps/node-modules-timestamp: package.json
|
build/timestamps/node-modules-timestamp: package.json
|
||||||
@mkdir -p $(@D)
|
@mkdir -p $(@D)
|
||||||
npm install
|
npm install
|
||||||
@@ -266,7 +237,7 @@ build/ol.css: css/ol.css build/timestamps/node-modules-timestamp
|
|||||||
@echo "Running cleancss..."
|
@echo "Running cleancss..."
|
||||||
@./node_modules/.bin/cleancss $< > $@
|
@./node_modules/.bin/cleancss $< > $@
|
||||||
|
|
||||||
build/ol.js: config/ol.json $(SRC_JS) $(SRC_SHADER_JS) \
|
build/ol.js: config/ol.json $(SRC_JS) $(SRC_SHADER_JS) $(SRC_SHADERLOCATIONS_JS) \
|
||||||
build/timestamps/node-modules-timestamp
|
build/timestamps/node-modules-timestamp
|
||||||
@mkdir -p $(@D)
|
@mkdir -p $(@D)
|
||||||
node tasks/build.js $< $@
|
node tasks/build.js $< $@
|
||||||
@@ -276,12 +247,12 @@ build/ol.js: config/ol.json $(SRC_JS) $(SRC_SHADER_JS) \
|
|||||||
@$(STAT_COMPRESSED) /tmp/ol.js.gz
|
@$(STAT_COMPRESSED) /tmp/ol.js.gz
|
||||||
@rm /tmp/ol.js.gz
|
@rm /tmp/ol.js.gz
|
||||||
|
|
||||||
build/ol.js.map: config/ol.json $(SRC_JS) $(SRC_SHADER_JS) \
|
build/ol.js.map: config/ol.json $(SRC_JS) $(SRC_SHADER_JS) $(SRC_SHADERLOCATIONS_JS) \
|
||||||
build/timestamps/node-modules-timestamp
|
build/timestamps/node-modules-timestamp
|
||||||
@mkdir -p $(@D)
|
@mkdir -p $(@D)
|
||||||
node tasks/build.js $< $@
|
node tasks/build.js $< $@
|
||||||
|
|
||||||
build/ol-debug.js: config/ol-debug.json $(SRC_JS) $(SRC_SHADER_JS) \
|
build/ol-debug.js: config/ol-debug.json $(SRC_JS) $(SRC_SHADER_JS) $(SRC_SHADERLOCATIONS_JS) \
|
||||||
build/timestamps/node-modules-timestamp
|
build/timestamps/node-modules-timestamp
|
||||||
@mkdir -p $(@D)
|
@mkdir -p $(@D)
|
||||||
node tasks/build.js $< $@
|
node tasks/build.js $< $@
|
||||||
@@ -291,16 +262,12 @@ build/ol-debug.js: config/ol-debug.json $(SRC_JS) $(SRC_SHADER_JS) \
|
|||||||
@$(STAT_COMPRESSED) /tmp/ol-debug.js.gz
|
@$(STAT_COMPRESSED) /tmp/ol-debug.js.gz
|
||||||
@rm /tmp/ol-debug.js.gz
|
@rm /tmp/ol-debug.js.gz
|
||||||
|
|
||||||
build/test_requires.js: $(SPEC_JS) $(SRC_JS)
|
%shader.js: %shader.glsl src/ol/webgl/shader.mustache tasks/glslunit.js build/timestamps/node-modules-timestamp
|
||||||
@mkdir -p $(@D)
|
@node tasks/glslunit.js --input $< | ./node_modules/.bin/mustache - src/ol/webgl/shader.mustache > $@
|
||||||
@node tasks/generate-requires.js $^ > $@
|
|
||||||
|
|
||||||
build/test_rendering_requires.js: $(SPEC_RENDERING_JS)
|
%shader/locations.js: %shader.glsl src/ol/webgl/shaderlocations.mustache tasks/glslunit.js build/timestamps/node-modules-timestamp
|
||||||
@mkdir -p $(@D)
|
@mkdir -p $(@D)
|
||||||
@node tasks/generate-requires.js $^ > $@
|
@node tasks/glslunit.js --input $< | ./node_modules/.bin/mustache - src/ol/webgl/shaderlocations.mustache > $@
|
||||||
|
|
||||||
%shader.js: %shader.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 > $@
|
|
||||||
|
|
||||||
.PHONY: package
|
.PHONY: package
|
||||||
package:
|
package:
|
||||||
|
|||||||
13
README.md
13
README.md
@@ -11,11 +11,14 @@
|
|||||||
|
|
||||||
Use one of the following methods to use OpenLayers in your project:
|
Use one of the following methods to use OpenLayers in your project:
|
||||||
|
|
||||||
- For use with mainstream bundlers and minifiers, install the [ol](https://www.npmjs.com/package/ol) npm package: `npm install ol`
|
* For use with webpack, Rollup, Browserify, or other module bundlers, install the [`ol` package](https://www.npmjs.com/package/ol):
|
||||||
- Use `ol.js` and `ol.css` from (cdnjs)[https://cdnjs.com/libraries/openlayers]
|
```
|
||||||
- Download the [latest release](https://openlayers.org/download/)
|
npm install ol
|
||||||
- Clone the repo: `git clone git@github.com:openlayers/openlayers.git`
|
```
|
||||||
- For use with Closure Library, install the [openlayers](https://npmjs.com/package/openlayers) npm package and read the [tutorial](http://openlayers.org/en/latest/doc/tutorials/closure.html).
|
|
||||||
|
* If you just want to add a `<script>` tag to test things out, you can link directly to one of the full builds from [cdnjs](https://cdnjs.com/libraries/openlayers) (not recommended for production)
|
||||||
|
|
||||||
|
* For use with Closure Library (rare), install the [`openlayers` package](https://npmjs.com/package/openlayers) and read the [tutorial](http://openlayers.org/en/latest/doc/tutorials/closure.html).
|
||||||
|
|
||||||
## Supported Browsers
|
## Supported Browsers
|
||||||
|
|
||||||
|
|||||||
@@ -1,120 +0,0 @@
|
|||||||
#!/usr/bin/python
|
|
||||||
|
|
||||||
from optparse import OptionParser
|
|
||||||
import json
|
|
||||||
import re
|
|
||||||
import sys
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
ESCAPE_SEQUENCE = {
|
|
||||||
'\\': '\\\\',
|
|
||||||
'\n': '\\n',
|
|
||||||
'\t': '\\t'
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
def js_escape(s):
|
|
||||||
return ''.join(ESCAPE_SEQUENCE.get(c, c) for c in s)
|
|
||||||
|
|
||||||
|
|
||||||
def glsl_compress(s, shortNames):
|
|
||||||
# strip leading whitespace
|
|
||||||
s = re.sub(r'\A\s+', '', s)
|
|
||||||
# strip trailing whitespace
|
|
||||||
s = re.sub(r'\s+\Z', '', s)
|
|
||||||
# strip multi-line comments
|
|
||||||
s = re.sub(r'/\*.*?\*/', '', s)
|
|
||||||
# strip single line comments
|
|
||||||
s = re.sub(r'//.*?\n', '', s)
|
|
||||||
# replace multiple whitespace with a single space
|
|
||||||
s = re.sub(r'\s+', ' ', s)
|
|
||||||
# remove whitespace between non-word tokens
|
|
||||||
s = re.sub(r'(\S)\s+([^\w])', r'\1\2', s)
|
|
||||||
s = re.sub(r'([^\w])\s+(\S)', r'\1\2', s)
|
|
||||||
# replace original names with short names
|
|
||||||
for originalName, shortName in shortNames.items():
|
|
||||||
s = s.replace(originalName, shortName)
|
|
||||||
return s
|
|
||||||
|
|
||||||
|
|
||||||
def main(argv):
|
|
||||||
option_parser = OptionParser()
|
|
||||||
option_parser.add_option('--input')
|
|
||||||
option_parser.add_option('--output')
|
|
||||||
options, args = option_parser.parse_args(argv[1:])
|
|
||||||
|
|
||||||
context = {}
|
|
||||||
nextShortName = ord('a')
|
|
||||||
shortNames = {}
|
|
||||||
|
|
||||||
common, vertex, fragment = [], [], []
|
|
||||||
attributes, uniforms, varyings = {}, {}, {}
|
|
||||||
block = None
|
|
||||||
for line in open(options.input, 'rU'):
|
|
||||||
if line.startswith('//!'):
|
|
||||||
m = re.match(r'//!\s+NAMESPACE=(\S+)\s*\Z', line)
|
|
||||||
if m:
|
|
||||||
context['namespace'] = m.group(1)
|
|
||||||
continue
|
|
||||||
m = re.match(r'//!\s+CLASS=(\S+)\s*\Z', line)
|
|
||||||
if m:
|
|
||||||
context['className'] = m.group(1)
|
|
||||||
continue
|
|
||||||
m = re.match(r'//!\s+COMMON\s*\Z', line)
|
|
||||||
if m:
|
|
||||||
block = common
|
|
||||||
continue
|
|
||||||
m = re.match(r'//!\s+VERTEX\s*\Z', line)
|
|
||||||
if m:
|
|
||||||
block = vertex
|
|
||||||
continue
|
|
||||||
m = re.match(r'//!\s+FRAGMENT\s*\Z', line)
|
|
||||||
if m:
|
|
||||||
block = fragment
|
|
||||||
continue
|
|
||||||
else:
|
|
||||||
if block is None:
|
|
||||||
assert line.rstrip() == ''
|
|
||||||
else:
|
|
||||||
block.append(line)
|
|
||||||
m = re.match(r'attribute\s+\S+\s+(\S+);\s*\Z', line)
|
|
||||||
if m:
|
|
||||||
attribute = m.group(1)
|
|
||||||
if attribute not in attributes:
|
|
||||||
shortName = chr(nextShortName)
|
|
||||||
nextShortName += 1
|
|
||||||
attributes[attribute] = {'originalName': attribute, 'shortName': shortName}
|
|
||||||
shortNames[attribute] = shortName
|
|
||||||
m = re.match(r'uniform\s+\S+\s+(\S+);\s*\Z', line)
|
|
||||||
if m:
|
|
||||||
uniform = m.group(1)
|
|
||||||
if uniform not in uniforms:
|
|
||||||
shortName = chr(nextShortName)
|
|
||||||
nextShortName += 1
|
|
||||||
uniforms[uniform] = {'originalName': uniform, 'shortName': shortName}
|
|
||||||
shortNames[uniform] = shortName
|
|
||||||
m = re.match(r'varying\s+\S+\s+(\S+);\s*\Z', line)
|
|
||||||
if m:
|
|
||||||
varying = m.group(1)
|
|
||||||
if varying not in varyings:
|
|
||||||
shortName = chr(nextShortName)
|
|
||||||
nextShortName += 1
|
|
||||||
shortNames[varying] = shortName
|
|
||||||
|
|
||||||
context['getOriginalFragmentSource'] = js_escape(''.join(common + fragment))
|
|
||||||
context['getOriginalVertexSource'] = js_escape(''.join(common + vertex))
|
|
||||||
context['getFragmentSource'] = glsl_compress(''.join(common + fragment), shortNames)
|
|
||||||
context['getVertexSource'] = glsl_compress(''.join(common + vertex), shortNames)
|
|
||||||
context['getAttributes'] = [attributes[a] for a in sorted(attributes.keys())]
|
|
||||||
context['getUniforms'] = [uniforms[u] for u in sorted(uniforms.keys())]
|
|
||||||
|
|
||||||
if options.output and options.output != '-':
|
|
||||||
output = open(options.output, 'wb')
|
|
||||||
else:
|
|
||||||
output = sys.stdout
|
|
||||||
json.dump(context, output)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
sys.exit(main(sys.argv))
|
|
||||||
@@ -1,6 +1,68 @@
|
|||||||
## Upgrade notes
|
## Upgrade notes
|
||||||
|
|
||||||
### Next release
|
### Next Release
|
||||||
|
|
||||||
|
#### Behavior change for polygon labels
|
||||||
|
|
||||||
|
Polygon labels are now only rendered when the label does not exceed the polygon at the label position. To get the old behavior, configure your `ol.style.Text` with `exceedLength: true`.
|
||||||
|
|
||||||
|
#### Minor change for custom `tileLoadFunction` with `ol.source.VectorTile`
|
||||||
|
|
||||||
|
It is no longer necessary to set the projection on the tile. Instead, the `readFeatures` method must be called with the tile's extent as `extent` option and the view's projection as `featureProjection`.
|
||||||
|
|
||||||
|
Before:
|
||||||
|
```js
|
||||||
|
tile.setLoader(function() {
|
||||||
|
var data = // ... fetch data
|
||||||
|
var format = tile.getFormat();
|
||||||
|
tile.setFeatures(format.readFeatures(data));
|
||||||
|
tile.setProjection(format.readProjection(data));
|
||||||
|
// uncomment the line below for ol.format.MVT only
|
||||||
|
//tile.setExtent(format.getLastExtent());
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
After:
|
||||||
|
```js
|
||||||
|
tile.setLoader(function() {
|
||||||
|
var data = // ... fetch data
|
||||||
|
var format = tile.getFormat();
|
||||||
|
tile.setFeatures(format.readFeatures(data, {
|
||||||
|
featureProjection: map.getView().getProjection(),
|
||||||
|
// uncomment the line below for ol.format.MVT only
|
||||||
|
//extent: tile.getExtent()
|
||||||
|
}));
|
||||||
|
);
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Deprecation of `ol.DeviceOrientation`
|
||||||
|
|
||||||
|
`ol.DeviceOrientation` is deprecated and will be removed in the next major version.
|
||||||
|
The device-orientation example has been updated to use the (gyronorm.js)[https://github.com/dorukeker/gyronorm.js] library.
|
||||||
|
|
||||||
|
|
||||||
|
### v4.3.0
|
||||||
|
|
||||||
|
#### `ol.source.VectorTile` no longer requires a `tileGrid` option
|
||||||
|
|
||||||
|
By default, the `ol.source.VectorTile` constructor creates an XYZ tile grid (in Web Mercator) for 512 pixel tiles and assumes a max zoom level of 22. If you were creating a vector tile source with an explicit `tileGrid` option, you can now remove this.
|
||||||
|
|
||||||
|
Before:
|
||||||
|
```js
|
||||||
|
var source = new ol.source.VectorTile({
|
||||||
|
tileGrid: ol.tilegrid.createXYZ({tileSize: 512, maxZoom: 22}),
|
||||||
|
url: url
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
After:
|
||||||
|
```js
|
||||||
|
var source = new ol.source.VectorTile({
|
||||||
|
url: url
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
If you need to change the max zoom level, you can pass the source a `maxZoom` option. If you need to change the tile size, you can pass the source a `tileSize` option. If you need a completely custom tile grid, you can still pass the source a `tileGrid` option.
|
||||||
|
|
||||||
#### `ol.interaction.Modify` deletes with `alt` key only
|
#### `ol.interaction.Modify` deletes with `alt` key only
|
||||||
|
|
||||||
|
|||||||
216
changelog/v4.3.0.md
Normal file
216
changelog/v4.3.0.md
Normal file
@@ -0,0 +1,216 @@
|
|||||||
|
# 4.3.0
|
||||||
|
|
||||||
|
## Summary
|
||||||
|
|
||||||
|
The v4.3.0 release includes features and fixes from 92 pull requests.
|
||||||
|
|
||||||
|
#### New `map.getFeaturesAtPixel()` method
|
||||||
|
|
||||||
|
When you want to get all features at a given pixel, use the new `map.getFeaturesAtPixel()` method.
|
||||||
|
|
||||||
|
Before:
|
||||||
|
```js
|
||||||
|
var features = [];
|
||||||
|
map.forEachFeatureAtPixel(pixel, function(feature) {
|
||||||
|
features.push(feature);
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
After:
|
||||||
|
```js
|
||||||
|
var features = map.getFeaturesAtPixel(pixel);
|
||||||
|
```
|
||||||
|
|
||||||
|
#### `ol.Sphere` functions for spherical measures
|
||||||
|
|
||||||
|
The new `ol.Sphere.getArea()` and `ol.Sphere.getLength()` methods can be used to calculate spherical measures on geometries. This is the recommended over using the `geometry.getArea()` or `geometry.getLength()` methods.
|
||||||
|
|
||||||
|
Bad:
|
||||||
|
```js
|
||||||
|
geometry.getArea();
|
||||||
|
```
|
||||||
|
|
||||||
|
Good:
|
||||||
|
```js
|
||||||
|
ol.Sphere.getArea(geometry);
|
||||||
|
```
|
||||||
|
|
||||||
|
#### `ol.interaction.DragAndDrop` can be configured with a vector source
|
||||||
|
|
||||||
|
It is now possible to configure the drag and drop interaction with a vector source:
|
||||||
|
|
||||||
|
```js
|
||||||
|
var dragAndDrop = new ol.interaction.DragAndDrop({source: source});
|
||||||
|
```
|
||||||
|
|
||||||
|
Any dropped features will replace all existing features on the source.
|
||||||
|
|
||||||
|
#### `ol.interaction.Modify` can be configured with a vector source
|
||||||
|
|
||||||
|
It is now possible to configure the modify interaction with a vector source (in addition to a feature collection):
|
||||||
|
|
||||||
|
```js
|
||||||
|
var modify = new ol.interaction.Modify({source: source});
|
||||||
|
```
|
||||||
|
|
||||||
|
With this configuration, all features on the source are eligible for modification while the interaction is active.
|
||||||
|
|
||||||
|
#### `ol.interaction.Modify` deletes with `alt` key only
|
||||||
|
|
||||||
|
To delete features with the modify interaction, press the `alt` key while clicking on an existing vertex. If you want to configure the modify interaction with a different delete condition, use the `deleteCondition` option. For example, to allow deletion on a single click with no modifier keys, configure the interaction like this:
|
||||||
|
```js
|
||||||
|
var interaction = new ol.interaction.Modify({
|
||||||
|
source: source,
|
||||||
|
deleteCondition: function(event) {
|
||||||
|
return ol.events.condition.noModifierKeys(event) && ol.events.condition.singleClick(event);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
The motivation for this change is to make the modify, draw, and snap interactions all work well together. Previously, the use of these interactions with the default configuration would make it so you couldn't reliably add new vertices (click with no modifier) and delete existing vertices (click with no modifier).
|
||||||
|
|
||||||
|
#### `ol.source.VectorTile` no longer requires a `tileGrid` option
|
||||||
|
|
||||||
|
By default, the `ol.source.VectorTile` constructor creates an XYZ tile grid (in Web Mercator) for 512 pixel tiles and assumes a max zoom level of 22. If you were creating a vector tile source with an explicit `tileGrid` option, you can now remove this.
|
||||||
|
|
||||||
|
Before:
|
||||||
|
```js
|
||||||
|
var source = new ol.source.VectorTile({
|
||||||
|
tileGrid: ol.tilegrid.createXYZ({tileSize: 512, maxZoom: 22}),
|
||||||
|
url: url
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
After:
|
||||||
|
```js
|
||||||
|
var source = new ol.source.VectorTile({
|
||||||
|
url: url
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
If you need to change the max zoom level, you can pass the source a `maxZoom` option. If you need to change the tile size, you can pass the source a `tileSize` option. If you need a completely custom tile grid, you can still pass the source a `tileGrid` option.
|
||||||
|
|
||||||
|
#### `ol.source.VectorTile` no longer has a `tilePixelRatio` option
|
||||||
|
|
||||||
|
The `tilePixelRatio` option was only used for tiles in projections with `tile-pixels` as units. For tiles read with `ol.format.MVT` and the default tile loader, or tiles with the default pixel size of 4096 pixels, no changes are necessary. For the very rare cases that do not fall under these categories, a custom `tileLoadFunction` now needs to be configured on the `ol.source.VectorTile`. In addition to calling `tile.setFeatures()` and `tile.setProjection()`, it also needs to contain code like the following:
|
||||||
|
```js
|
||||||
|
var extent = tile.getFormat() instanceof ol.format.MVT ?
|
||||||
|
tile.getLastExtent() :
|
||||||
|
[0, 0, tilePixelRatio * tileSize, tilePixelRatio * tileSize];
|
||||||
|
tile.setExtent(extent);
|
||||||
|
```
|
||||||
|
|
||||||
|
#### `ol.animate` now takes the shortest arc for rotation animation
|
||||||
|
|
||||||
|
Usually rotation animations should animate along the shortest arc. There are rare occasions where a spinning animation effect is desired. So if you previously had something like
|
||||||
|
```js
|
||||||
|
map.getView().animate({
|
||||||
|
rotation: 2 * Math.PI,
|
||||||
|
duration: 2000
|
||||||
|
});
|
||||||
|
```
|
||||||
|
we recommend to split the animation into two parts and use different easing functions. The code below results in the same effect as the snippet above did with previous versions:
|
||||||
|
```js
|
||||||
|
map.getView().animate({
|
||||||
|
rotation: Math.PI,
|
||||||
|
easing: ol.easing.easeIn
|
||||||
|
}, {
|
||||||
|
rotation: 2 * Math.PI,
|
||||||
|
easing: ol.easing.easeOut
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
## Full List of Changes
|
||||||
|
|
||||||
|
* [#7117](https://github.com/openlayers/openlayers/pull/7117) - Sensible default tilegrid for vector tiles ([@tschaub](https://github.com/tschaub))
|
||||||
|
* [#7116](https://github.com/openlayers/openlayers/pull/7116) - fix(package): update rollup to version 0.47.2 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#7111](https://github.com/openlayers/openlayers/pull/7111) - Remove broken wrapX handling from ol.Graticule ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#7107](https://github.com/openlayers/openlayers/pull/7107) - Update rollup to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#7106](https://github.com/openlayers/openlayers/pull/7106) - Update proj4 to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#7105](https://github.com/openlayers/openlayers/pull/7105) - Functions for spherical calculations ([@tschaub](https://github.com/tschaub))
|
||||||
|
* [#7104](https://github.com/openlayers/openlayers/pull/7104) - Update sinon to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#6807](https://github.com/openlayers/openlayers/pull/6807) - Initialize hasZ in the constructor of GML3 ([@Jenselme](https://github.com/Jenselme))
|
||||||
|
* [#7102](https://github.com/openlayers/openlayers/pull/7102) - Allow drag and drop interaction to be configured with a source ([@tschaub](https://github.com/tschaub))
|
||||||
|
* [#6825](https://github.com/openlayers/openlayers/pull/6825) - Read/write Tessellate tag in KML format ([@oterral](https://github.com/oterral))
|
||||||
|
* [#7098](https://github.com/openlayers/openlayers/pull/7098) - Use fractional coordinates for CSS positioning ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#7064](https://github.com/openlayers/openlayers/pull/7064) - Do not use Array.prototype.forEach when dealing with potentially large arrays ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#7093](https://github.com/openlayers/openlayers/pull/7093) - Allow modify interaction to be configured with a source ([@tschaub](https://github.com/tschaub))
|
||||||
|
* [#7096](https://github.com/openlayers/openlayers/pull/7096) - Add new Map#getFeaturesAtPixel method ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#7094](https://github.com/openlayers/openlayers/pull/7094) - Add missing zIndex options ([@icholy](https://github.com/icholy))
|
||||||
|
* [#7087](https://github.com/openlayers/openlayers/pull/7087) - Fix scale line for EPSG:4326 maps ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#7088](https://github.com/openlayers/openlayers/pull/7088) - Update sinon to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#7085](https://github.com/openlayers/openlayers/pull/7085) - Update eslint to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#7084](https://github.com/openlayers/openlayers/pull/7084) - Fix a typo in the street-labels example ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#7082](https://github.com/openlayers/openlayers/pull/7082) - Update eslint to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#7079](https://github.com/openlayers/openlayers/pull/7079) - Optimize custom renderer code, examples and API ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#7080](https://github.com/openlayers/openlayers/pull/7080) - Update jsdoc to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#7078](https://github.com/openlayers/openlayers/pull/7078) - Fix return type annotation of ol.layer.VectorTile.getSource ([@geosense](https://github.com/geosense))
|
||||||
|
* [#7073](https://github.com/openlayers/openlayers/pull/7073) - Make ol.layer.Group change handling consistent ([@gberaudo](https://github.com/gberaudo))
|
||||||
|
* [#7075](https://github.com/openlayers/openlayers/pull/7075) - Update sinon to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#7072](https://github.com/openlayers/openlayers/pull/7072) - Improve API docs for ol.VectorTile ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#7070](https://github.com/openlayers/openlayers/pull/7070) - Get tilePixelRatio from MVT tiles ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#7069](https://github.com/openlayers/openlayers/pull/7069) - Update mocha to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#7068](https://github.com/openlayers/openlayers/pull/7068) - Update fs-extra to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#7066](https://github.com/openlayers/openlayers/pull/7066) - Fix ol.interaction.Extent event type and documentation ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#7032](https://github.com/openlayers/openlayers/pull/7032) - Fix KML Export Icon Anchor ([@raiyni](https://github.com/raiyni))
|
||||||
|
* [#7065](https://github.com/openlayers/openlayers/pull/7065) - Only use API functions in example ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#7022](https://github.com/openlayers/openlayers/pull/7022) - Allow styles to configure a custom renderer ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#7061](https://github.com/openlayers/openlayers/pull/7061) - Update docs and issue and pull request instructions ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#7059](https://github.com/openlayers/openlayers/pull/7059) - Allow to configure Extent interaction with an extent ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#7060](https://github.com/openlayers/openlayers/pull/7060) - Removing invalid urn ([@wnordmann](https://github.com/wnordmann))
|
||||||
|
* [#7051](https://github.com/openlayers/openlayers/pull/7051) - Changing the EPSG3857.PROJECTION array assignment and adding urn:ogc:… ([@wnordmann](https://github.com/wnordmann))
|
||||||
|
* [#7045](https://github.com/openlayers/openlayers/pull/7045) - Respect pixelRatio when scaling images ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#7023](https://github.com/openlayers/openlayers/pull/7023) - Update tile size and resolutions of vector tile examples ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#7005](https://github.com/openlayers/openlayers/pull/7005) - Add spatial reference inside geometry in EsriFormat ([@Sol1du2](https://github.com/Sol1du2))
|
||||||
|
* [#7034](https://github.com/openlayers/openlayers/pull/7034) - Move non-build dependencies to devDependencies ([@probins](https://github.com/probins))
|
||||||
|
* [#7050](https://github.com/openlayers/openlayers/pull/7050) - Update sinon to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#6976](https://github.com/openlayers/openlayers/pull/6976) - Example - Earthquake Clusters - Change evt.type of interaction ([@ehanoj](https://github.com/ehanoj))
|
||||||
|
* [#7048](https://github.com/openlayers/openlayers/pull/7048) - Update sinon to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#7041](https://github.com/openlayers/openlayers/pull/7041) - Update eslint to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#7042](https://github.com/openlayers/openlayers/pull/7042) - Line dash offset ([@gkresic](https://github.com/gkresic))
|
||||||
|
* [#6980](https://github.com/openlayers/openlayers/pull/6980) - Added tileClass to TileWMS ([@ZachTRice](https://github.com/ZachTRice))
|
||||||
|
* [#7028](https://github.com/openlayers/openlayers/pull/7028) - Fix Graticule use of incorrect min/maxLon values ([@greggian](https://github.com/greggian))
|
||||||
|
* [#7021](https://github.com/openlayers/openlayers/pull/7021) - Update fs-extra to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#7018](https://github.com/openlayers/openlayers/pull/7018) - Update jsdoc to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#7015](https://github.com/openlayers/openlayers/pull/7015) - Update sinon to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#7014](https://github.com/openlayers/openlayers/pull/7014) - Update jsdoc to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#7013](https://github.com/openlayers/openlayers/pull/7013) - Remove ol.sphere.WGS84 and ol.sphere.NORMAL ([@tschaub](https://github.com/tschaub))
|
||||||
|
* [#6981](https://github.com/openlayers/openlayers/pull/6981) - Render transparent vector layers to an intermediate canvas ([@gberaudo](https://github.com/gberaudo))
|
||||||
|
* [#6899](https://github.com/openlayers/openlayers/pull/6899) - Use number literal for sphere radius ([@probins](https://github.com/probins))
|
||||||
|
* [#7011](https://github.com/openlayers/openlayers/pull/7011) - Update jsdoc to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#7008](https://github.com/openlayers/openlayers/pull/7008) - Update sinon to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#7007](https://github.com/openlayers/openlayers/pull/7007) - fix(package): update rollup to version 0.45.0 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#6996](https://github.com/openlayers/openlayers/pull/6996) - 6987: Memory leak with WMS time source with reprojection ([@ch08532](https://github.com/ch08532))
|
||||||
|
* [#7003](https://github.com/openlayers/openlayers/pull/7003) - Update jsdoc to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#7004](https://github.com/openlayers/openlayers/pull/7004) - Use https for bing and stamen attributions ([@fredj](https://github.com/fredj))
|
||||||
|
* [#6998](https://github.com/openlayers/openlayers/pull/6998) - Update eslint to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#6999](https://github.com/openlayers/openlayers/pull/6999) - Make VectorTile source work with multiple layers ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#6988](https://github.com/openlayers/openlayers/pull/6988) - Add missing type annotations ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#6984](https://github.com/openlayers/openlayers/pull/6984) - Update closure-util to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#6970](https://github.com/openlayers/openlayers/pull/6970) - Fix Bug when adding/removing layer with no cache ([@cmortazavi](https://github.com/cmortazavi))
|
||||||
|
* [#6972](https://github.com/openlayers/openlayers/pull/6972) - Handle error tiles properly ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#6973](https://github.com/openlayers/openlayers/pull/6973) - Update clean-css-cli to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#6971](https://github.com/openlayers/openlayers/pull/6971) - Update sinon to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#6968](https://github.com/openlayers/openlayers/pull/6968) - Shortest arc rotation animation improvements and upgrade notes ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#6966](https://github.com/openlayers/openlayers/pull/6966) - Add getResolutionForZoom method for ol.View ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#6965](https://github.com/openlayers/openlayers/pull/6965) - Use shortest rotation delta for animation ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#6967](https://github.com/openlayers/openlayers/pull/6967) - Add RoadOnDemand imagery set to Bing example ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#6964](https://github.com/openlayers/openlayers/pull/6964) - Fix KML ExtendedData reading ([@fredj](https://github.com/fredj))
|
||||||
|
* [#6958](https://github.com/openlayers/openlayers/pull/6958) - Remove error tiles after loading is finished ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#6793](https://github.com/openlayers/openlayers/pull/6793) - Webgl text ([@GaborFarkas](https://github.com/GaborFarkas))
|
||||||
|
* [#6960](https://github.com/openlayers/openlayers/pull/6960) - Queue tiles before loading ([@tschaub](https://github.com/tschaub))
|
||||||
|
* [#6957](https://github.com/openlayers/openlayers/pull/6957) - Greenkeeper/eslint 4.1.1 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#6955](https://github.com/openlayers/openlayers/pull/6955) - Update async to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#6916](https://github.com/openlayers/openlayers/pull/6916) - Upgrade eslint to v4.0.0 ([@marcjansen](https://github.com/marcjansen))
|
||||||
|
* [#6943](https://github.com/openlayers/openlayers/pull/6943) - Update sinon to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#6939](https://github.com/openlayers/openlayers/pull/6939) - Abort loading when tile is disposed ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#6930](https://github.com/openlayers/openlayers/pull/6930) - Handle setActive(false) on an interaction without map ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#6936](https://github.com/openlayers/openlayers/pull/6936) - Do not stop the render loop when all wanted tiles are aborted ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#6920](https://github.com/openlayers/openlayers/pull/6920) - Fix minor type strength inconsistency ([@klokantech](https://github.com/klokantech))
|
||||||
|
* [#6935](https://github.com/openlayers/openlayers/pull/6935) - Use transparent image from canvas context ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#6933](https://github.com/openlayers/openlayers/pull/6933) - Improve proj.get() logic ([@probins](https://github.com/probins))
|
||||||
|
* [#6931](https://github.com/openlayers/openlayers/pull/6931) - Make sure we use the default featurePrefix ([@bartvde](https://github.com/bartvde))
|
||||||
|
* [#6928](https://github.com/openlayers/openlayers/pull/6928) - Only adjust resolution when center within projection extent ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#6923](https://github.com/openlayers/openlayers/pull/6923) - Load tasks/build-ext.js in strict mode ([@fredj](https://github.com/fredj))
|
||||||
|
* [#6918](https://github.com/openlayers/openlayers/pull/6918) - Remove unnecessary pixelRatio check ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#6917](https://github.com/openlayers/openlayers/pull/6917) - Correct typo in graticule docs ([@probins](https://github.com/probins))
|
||||||
9
changelog/v4.3.1.md
Normal file
9
changelog/v4.3.1.md
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
# 4.3.1
|
||||||
|
|
||||||
|
The v4.3.1 release includes a few fixes that didn't make it into v4.3.0. No special upgrade considerations.
|
||||||
|
|
||||||
|
## Fixes
|
||||||
|
|
||||||
|
* [#7122](https://github.com/openlayers/openlayers/pull/7122) - Immediately complete no-op animations ([@tschaub](https://github.com/tschaub))
|
||||||
|
* [#7120](https://github.com/openlayers/openlayers/pull/7120) - Fix hit detection for overzoomed vector tiles ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#7114](https://github.com/openlayers/openlayers/pull/7114) - Immediate WebGL text renderer and other improvements ([@GaborFarkas](https://github.com/GaborFarkas))
|
||||||
7
changelog/v4.3.2.md
Normal file
7
changelog/v4.3.2.md
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
# 4.3.2
|
||||||
|
|
||||||
|
The v4.3.2 release includes a single fix.
|
||||||
|
|
||||||
|
## Fixes
|
||||||
|
|
||||||
|
* [#7140](https://github.com/openlayers/openlayers/pull/7140) - Export ol.Sphere.getLength and ol.Sphere.getArea ([@fredj](https://github.com/fredj))
|
||||||
7
changelog/v4.3.3.md
Normal file
7
changelog/v4.3.3.md
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
# 4.3.3
|
||||||
|
|
||||||
|
The v4.3.3 release reverts the fractional pixel positioning of overlays.
|
||||||
|
|
||||||
|
## Fixes
|
||||||
|
|
||||||
|
* [#7258](https://github.com/openlayers/openlayers/pull/7258) - Revert changes made in #7098 ([@ahocevar](https://github.com/ahocevar))
|
||||||
7
changelog/v4.3.4.md
Normal file
7
changelog/v4.3.4.md
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
# 4.3.4
|
||||||
|
|
||||||
|
The v4.3.4 release includes a fix for Safari on iOS 11.
|
||||||
|
|
||||||
|
## Fixes
|
||||||
|
|
||||||
|
* [#7285](https://github.com/openlayers/openlayers/pull/7285) - Convert pointerId to string for object lookups ([@tschaub](https://github.com/tschaub))
|
||||||
118
changelog/v4.4.0.md
Normal file
118
changelog/v4.4.0.md
Normal file
@@ -0,0 +1,118 @@
|
|||||||
|
# 4.3.0
|
||||||
|
|
||||||
|
## Summary
|
||||||
|
|
||||||
|
The 4.3.0 release includes features and fixes from 80 pull requests, including first time contributions from @EduardoNogueira, @ath0mas, @f7o, @trevorblades, @viethang, and @wb14123. There are some really nice rendering enhancements included in this release. It is now possible to render labels along lines (see [#7239](https://github.com/openlayers/openlayers/pull/7239) for more detail) and polygon labels are only rendered if they fit within the polygon ([#7292](https://github.com/openlayers/openlayers/pull/7292)). In addition, we now render tiles with an opacity transition, so tiled layers more gracefully fade in ([#7267](https://github.com/openlayers/openlayers/pull/7267)).
|
||||||
|
|
||||||
|
See below for the full list of changes.
|
||||||
|
|
||||||
|
* [#7306](https://github.com/openlayers/openlayers/pull/7306) - Enable mouse wheel in freehand draw mode ([@trevorblades](https://github.com/trevorblades))
|
||||||
|
* [#7297](https://github.com/openlayers/openlayers/pull/7297) - Fix multipoint instruction set ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#7267](https://github.com/openlayers/openlayers/pull/7267) - Render tiles with an opacity transition ([@tschaub](https://github.com/tschaub))
|
||||||
|
* [#7292](https://github.com/openlayers/openlayers/pull/7292) - Only render polygon labels when they fit ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#7289](https://github.com/openlayers/openlayers/pull/7289) - Release v4.3.4 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#7287](https://github.com/openlayers/openlayers/pull/7287) - Fix vertical stroke/fill alignment for text along lines ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#7285](https://github.com/openlayers/openlayers/pull/7285) - Convert pointerId to string for object lookups ([@tschaub](https://github.com/tschaub))
|
||||||
|
* [#7280](https://github.com/openlayers/openlayers/pull/7280) - Updated docs for deleteCondition ([@EduardoNogueira](https://github.com/EduardoNogueira))
|
||||||
|
* [#7274](https://github.com/openlayers/openlayers/pull/7274) - Add ability to change the loader of a vector source ([@bartvde](https://github.com/bartvde))
|
||||||
|
* [#7259](https://github.com/openlayers/openlayers/pull/7259) - Add missing param doc tag for ol.format.WKT.prototype.writeFeatures ([@fredj](https://github.com/fredj))
|
||||||
|
* [#7260](https://github.com/openlayers/openlayers/pull/7260) - Release v4.3.3 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#7258](https://github.com/openlayers/openlayers/pull/7258) - Revert changes made in #7098. ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#7220](https://github.com/openlayers/openlayers/pull/7220) - Mark ol.format.filter.Spatial as abstract class ([@fredj](https://github.com/fredj))
|
||||||
|
* [#7249](https://github.com/openlayers/openlayers/pull/7249) - Script to rename files so the case matches the module name ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#7252](https://github.com/openlayers/openlayers/pull/7252) - fix osmxml to read ways before the definition of nodes ([@wb14123](https://github.com/wb14123))
|
||||||
|
* [#7253](https://github.com/openlayers/openlayers/pull/7253) - Nicer wording in the issue template ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#7236](https://github.com/openlayers/openlayers/pull/7236) - reusing images in ol.style.Icon#clone ([@KlausBenndorf](https://github.com/KlausBenndorf))
|
||||||
|
* [#7246](https://github.com/openlayers/openlayers/pull/7246) - Compare measured lengths with a tolerance ([@marcjansen](https://github.com/marcjansen))
|
||||||
|
* [#7247](https://github.com/openlayers/openlayers/pull/7247) - Raise tolerance of rendering tests to pass on Firefox 55 (GNU/Linux) ([@marcjansen](https://github.com/marcjansen))
|
||||||
|
* [#7239](https://github.com/openlayers/openlayers/pull/7239) - Render text along lines ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#7242](https://github.com/openlayers/openlayers/pull/7242) - Use EMPTY and LOADED state properly on ol.VectorImageTile ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#7234](https://github.com/openlayers/openlayers/pull/7234) - Fix abort handling of tileload events ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#7221](https://github.com/openlayers/openlayers/pull/7221) - update zoomify source to accept tileIndex placeholders and handle iip… ([@thhomas](https://github.com/thhomas))
|
||||||
|
* [#6871](https://github.com/openlayers/openlayers/pull/6871) - Correct controls position in Center example ([@ath0mas](https://github.com/ath0mas))
|
||||||
|
* [#7229](https://github.com/openlayers/openlayers/pull/7229) - Fix JSDoc paths for custom builds ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#7230](https://github.com/openlayers/openlayers/pull/7230) - Remove unused context handling for ol.Image ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#7225](https://github.com/openlayers/openlayers/pull/7225) - Fix hit detection for image layers ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#7223](https://github.com/openlayers/openlayers/pull/7223) - Transform updates ([@tschaub](https://github.com/tschaub))
|
||||||
|
* [#7219](https://github.com/openlayers/openlayers/pull/7219) - Change cartodb domain from cartodb.com to carto.com ([@fredj](https://github.com/fredj))
|
||||||
|
* [#7210](https://github.com/openlayers/openlayers/pull/7210) - Avoid unnecessary calculations for a zoom factor of 2 ([@tschaub](https://github.com/tschaub))
|
||||||
|
* [#7209](https://github.com/openlayers/openlayers/pull/7209) - Remove grid.getTileRangeForExtentAndResolution() ([@tschaub](https://github.com/tschaub))
|
||||||
|
* [#7201](https://github.com/openlayers/openlayers/pull/7201) - Prerender text to images ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#7208](https://github.com/openlayers/openlayers/pull/7208) - Do not calculate coverage when running tests locally ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#7206](https://github.com/openlayers/openlayers/pull/7206) - Only load source tiles that intersect the source tile grid's extent ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#7203](https://github.com/openlayers/openlayers/pull/7203) - Enable Edge tests on SauceLabs ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#7194](https://github.com/openlayers/openlayers/pull/7194) - Deprecate ol.DeviceOrientation ([@fredj](https://github.com/fredj))
|
||||||
|
* [#7198](https://github.com/openlayers/openlayers/pull/7198) - Use geometry name in WFS updates ([@bartvde](https://github.com/bartvde))
|
||||||
|
* [#7205](https://github.com/openlayers/openlayers/pull/7205) - Release v4.3.2 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#7172](https://github.com/openlayers/openlayers/pull/7172) - added clear method to vectortile source ([@f7o](https://github.com/f7o))
|
||||||
|
* [#7196](https://github.com/openlayers/openlayers/pull/7196) - renderSync() to make sure overlay is initially visible ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#7193](https://github.com/openlayers/openlayers/pull/7193) - Fix KML links for documents created locally in Safari ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#6977](https://github.com/openlayers/openlayers/pull/6977) - Fixed modify feature test ([@KlausBenndorf](https://github.com/KlausBenndorf))
|
||||||
|
* [#7190](https://github.com/openlayers/openlayers/pull/7190) - Use jsts version 1.4.0 in example ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#7191](https://github.com/openlayers/openlayers/pull/7191) - Fix provide/require for autogenerated shader files ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#7192](https://github.com/openlayers/openlayers/pull/7192) - Fix typo ([@viethang](https://github.com/viethang))
|
||||||
|
* [#7133](https://github.com/openlayers/openlayers/pull/7133) - Issue/6991/WFS Write Dimension ([@Sol1du2](https://github.com/Sol1du2))
|
||||||
|
* [#7141](https://github.com/openlayers/openlayers/pull/7141) - Issue/6990/Wfs Read srsDimension ([@Sol1du2](https://github.com/Sol1du2))
|
||||||
|
* [#7187](https://github.com/openlayers/openlayers/pull/7187) - Simpler tile pixel handling and faster parsing for ol.format.MVT vector tiles ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#7182](https://github.com/openlayers/openlayers/pull/7182) - Avoid instanceof checks in global test extensions ([@tschaub](https://github.com/tschaub))
|
||||||
|
* [#7168](https://github.com/openlayers/openlayers/pull/7168) - Exclude greenkeeper merges from changelog ([@gberaudo](https://github.com/gberaudo))
|
||||||
|
* [#7162](https://github.com/openlayers/openlayers/pull/7162) - Bring back coverage ([@marcjansen](https://github.com/marcjansen))
|
||||||
|
* [#7165](https://github.com/openlayers/openlayers/pull/7165) - More assorted test fixes ([@tschaub](https://github.com/tschaub))
|
||||||
|
* [#7142](https://github.com/openlayers/openlayers/pull/7142) - Adds unit test to test the projection inside the geometry of esriJson ([@Sol1du2](https://github.com/Sol1du2))
|
||||||
|
* [#7163](https://github.com/openlayers/openlayers/pull/7163) - Remove bundling magic for Mapbox styles script ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#7160](https://github.com/openlayers/openlayers/pull/7160) - Assorted test updates ([@tschaub](https://github.com/tschaub))
|
||||||
|
* [#7158](https://github.com/openlayers/openlayers/pull/7158) - Retain comments when replacing nodes ([@tschaub](https://github.com/tschaub))
|
||||||
|
* [#7153](https://github.com/openlayers/openlayers/pull/7153) - Scripts for in-place transforms ([@tschaub](https://github.com/tschaub))
|
||||||
|
* [#7154](https://github.com/openlayers/openlayers/pull/7154) - Unused require in examples/d3.js ([@tschaub](https://github.com/tschaub))
|
||||||
|
* [#7151](https://github.com/openlayers/openlayers/pull/7151) - Get rid of useless test exports ([@tschaub](https://github.com/tschaub))
|
||||||
|
* [#7152](https://github.com/openlayers/openlayers/pull/7152) - Adjust the pull request template (tests, CLA, wording) ([@marcjansen](https://github.com/marcjansen))
|
||||||
|
* [#7150](https://github.com/openlayers/openlayers/pull/7150) - Remove problematic spies from scaleline tests ([@marcjansen](https://github.com/marcjansen))
|
||||||
|
* [#7149](https://github.com/openlayers/openlayers/pull/7149) - Remove unused requires ([@tschaub](https://github.com/tschaub))
|
||||||
|
* [#7148](https://github.com/openlayers/openlayers/pull/7148) - Remove ol.ENABLE_WEBGL wrap from WebGL files ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#7147](https://github.com/openlayers/openlayers/pull/7147) - Remove unnecessary import in events.test.js ([@tschaub](https://github.com/tschaub))
|
||||||
|
* [#7146](https://github.com/openlayers/openlayers/pull/7146) - Avoid modifying imports ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#7145](https://github.com/openlayers/openlayers/pull/7145) - Spaceless provides ([@tschaub](https://github.com/tschaub))
|
||||||
|
* [#7136](https://github.com/openlayers/openlayers/pull/7136) - Use data URI instead of whole empty image ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#7137](https://github.com/openlayers/openlayers/pull/7137) - Developer documentation updates ([@tschaub](https://github.com/tschaub))
|
||||||
|
* [#7138](https://github.com/openlayers/openlayers/pull/7138) - Improvements to the new test setup ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#7140](https://github.com/openlayers/openlayers/pull/7140) - Export ol.Sphere.getLength and ol.Sphere.getArea ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#7131](https://github.com/openlayers/openlayers/pull/7131) - Print ES6 import hint on each doc page ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#6953](https://github.com/openlayers/openlayers/pull/6953) - Run tests in real browsers with Karma ([@tschaub](https://github.com/tschaub))
|
||||||
|
* [#7127](https://github.com/openlayers/openlayers/pull/7127) - Use static GeoJSON instead of Overpass query for faster loading ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#7125](https://github.com/openlayers/openlayers/pull/7125) - Do not try to render error tiles from VectorTile source ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#6855](https://github.com/openlayers/openlayers/pull/6855) - Pluggable renderers ([@tschaub](https://github.com/tschaub))
|
||||||
|
* [#7128](https://github.com/openlayers/openlayers/pull/7128) - Make view.animate() tolerate undefined views ([@tschaub](https://github.com/tschaub))
|
||||||
|
* [#7124](https://github.com/openlayers/openlayers/pull/7124) - Release v4.3.1 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#7122](https://github.com/openlayers/openlayers/pull/7122) - Immediately complete no-op animations ([@tschaub](https://github.com/tschaub))
|
||||||
|
* [#7120](https://github.com/openlayers/openlayers/pull/7120) - Fix hit detection for overzoomed vector tiles ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#7114](https://github.com/openlayers/openlayers/pull/7114) - Immediate WebGL text renderer and other improvements ([@GaborFarkas](https://github.com/GaborFarkas))
|
||||||
|
|
||||||
|
|
||||||
|
Additionally a number of updates where made to our dependencies:
|
||||||
|
* [#7307](https://github.com/openlayers/openlayers/pull/7307) - Update sinon to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#7302](https://github.com/openlayers/openlayers/pull/7302) - Update mocha to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#7298](https://github.com/openlayers/openlayers/pull/7298) - Update eslint to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#7295](https://github.com/openlayers/openlayers/pull/7295) - chore(package): update coveralls to version 3.0.0 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#7291](https://github.com/openlayers/openlayers/pull/7291) - Update pbf to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#7290](https://github.com/openlayers/openlayers/pull/7290) - Update sinon to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#7281](https://github.com/openlayers/openlayers/pull/7281) - Update eslint to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#7273](https://github.com/openlayers/openlayers/pull/7273) - Update clean-css-cli to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#7272](https://github.com/openlayers/openlayers/pull/7272) - Update eslint to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#7269](https://github.com/openlayers/openlayers/pull/7269) - Update sinon to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#7265](https://github.com/openlayers/openlayers/pull/7265) - Update rollup to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#7263](https://github.com/openlayers/openlayers/pull/7263) - Update eslint to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#7254](https://github.com/openlayers/openlayers/pull/7254) - Update closure-util to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#7257](https://github.com/openlayers/openlayers/pull/7257) - Update jsdoc to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#7251](https://github.com/openlayers/openlayers/pull/7251) - Update fs-extra to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#7243](https://github.com/openlayers/openlayers/pull/7243) - Update mocha to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#7240](https://github.com/openlayers/openlayers/pull/7240) - Update mocha to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#7238](https://github.com/openlayers/openlayers/pull/7238) - Update mocha to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#7212](https://github.com/openlayers/openlayers/pull/7212) - chore(package): update clean-css-cli to version 4.1.9 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#7213](https://github.com/openlayers/openlayers/pull/7213) - Update eslint to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#7207](https://github.com/openlayers/openlayers/pull/7207) - Update eslint to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#7188](https://github.com/openlayers/openlayers/pull/7188) - fix(package): update rollup to version 0.49.1 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#7166](https://github.com/openlayers/openlayers/pull/7166) - fix(package): update rollup to version 0.48.1 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#7161](https://github.com/openlayers/openlayers/pull/7161) - Update eslint to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#7144](https://github.com/openlayers/openlayers/pull/7144) - Update sinon to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#7135](https://github.com/openlayers/openlayers/pull/7135) - Update closure-util to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#7126](https://github.com/openlayers/openlayers/pull/7126) - Update phantomjs-prebuilt to the latest version 🚀 ([@openlayers](https://github.com/openlayers))
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"opts": {
|
"opts": {
|
||||||
"recurse": true,
|
"recurse": true,
|
||||||
"template": "../../config/jsdoc/api/template"
|
"template": "config/jsdoc/api/template"
|
||||||
},
|
},
|
||||||
"tags": {
|
"tags": {
|
||||||
"allowUnknownTags": true
|
"allowUnknownTags": true
|
||||||
@@ -17,11 +17,11 @@
|
|||||||
},
|
},
|
||||||
"plugins": [
|
"plugins": [
|
||||||
"plugins/markdown",
|
"plugins/markdown",
|
||||||
"../../config/jsdoc/api/plugins/inheritdoc",
|
"config/jsdoc/api/plugins/inheritdoc",
|
||||||
"../../config/jsdoc/api/plugins/typedefs",
|
"config/jsdoc/api/plugins/typedefs",
|
||||||
"../../config/jsdoc/api/plugins/events",
|
"config/jsdoc/api/plugins/events",
|
||||||
"../../config/jsdoc/api/plugins/observable",
|
"config/jsdoc/api/plugins/observable",
|
||||||
"../../config/jsdoc/api/plugins/api"
|
"config/jsdoc/api/plugins/api"
|
||||||
],
|
],
|
||||||
"markdown": {
|
"markdown": {
|
||||||
"parser": "gfm"
|
"parser": "gfm"
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ Interactions for [vector features](ol.Feature.html)
|
|||||||
<tr><th>Projections</th><th>Observable objects</th><th>Other components</th></tr>
|
<tr><th>Projections</th><th>Observable objects</th><th>Other components</th></tr>
|
||||||
<tr><td><p>All coordinates and extents need to be provided in view projection (default: EPSG:3857). To transform, use [ol.proj.transform()](ol.proj.html#.transform) and [ol.proj.transformExtent()](ol.proj.html#.transformExtent).</p>
|
<tr><td><p>All coordinates and extents need to be provided in view projection (default: EPSG:3857). To transform, use [ol.proj.transform()](ol.proj.html#.transform) and [ol.proj.transformExtent()](ol.proj.html#.transformExtent).</p>
|
||||||
[ol.proj](ol.proj.html)</td>
|
[ol.proj](ol.proj.html)</td>
|
||||||
<td><p>Changes to all [ol.Objects](ol.Object.html) can observed by calling the [object.on('propertychange')](ol.Object.html#on) method. Listeners receive an [ol.Object.Event](ol.Object.Event.html) with information on the changed property and old value.</p>
|
<td><p>Changes to all [ol.Objects](ol.Object.html) can be observed by calling the [object.on('propertychange')](ol.Object.html#on) method. Listeners receive an [ol.Object.Event](ol.Object.Event.html) with information on the changed property and old value.</p>
|
||||||
<td>[ol.DeviceOrientation](ol.DeviceOrientation.html)<br>
|
<td>[ol.DeviceOrientation](ol.DeviceOrientation.html)<br>
|
||||||
[ol.Geolocation](ol.Geolocation.html)<br>
|
[ol.Geolocation](ol.Geolocation.html)<br>
|
||||||
[ol.Overlay](ol.Overlay.html)<br></td>
|
[ol.Overlay](ol.Overlay.html)<br></td>
|
||||||
|
|||||||
@@ -17,6 +17,19 @@
|
|||||||
<?js if (doc.variation) { ?>
|
<?js if (doc.variation) { ?>
|
||||||
<sup class="variation"><?js= doc.variation ?></sup>
|
<sup class="variation"><?js= doc.variation ?></sup>
|
||||||
<?js } ?></h2>
|
<?js } ?></h2>
|
||||||
|
<br>
|
||||||
|
<?js if (doc.stability || doc.kind == 'namespace') {
|
||||||
|
var ancestors = doc.ancestors.map(a => a.replace(/>\./g, '>').replace(/\.</g, '<')).join('/');
|
||||||
|
var name = doc.name.toLowerCase();
|
||||||
|
var parts = [];
|
||||||
|
if (ancestors) {
|
||||||
|
parts.push(ancestors);
|
||||||
|
}
|
||||||
|
parts.push(name);
|
||||||
|
var importPath = parts.join('/');
|
||||||
|
?>
|
||||||
|
<pre class="prettyprint source"><code>import <?js= doc.name ?> from '<?js= importPath ?>';</code></pre>
|
||||||
|
<?js } ?>
|
||||||
<?js if (doc.classdesc) { ?>
|
<?js if (doc.classdesc) { ?>
|
||||||
<div class="class-description"><?js= doc.classdesc ?></div>
|
<div class="class-description"><?js= doc.classdesc ?></div>
|
||||||
<?js } ?>
|
<?js } ?>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"opts": {
|
"opts": {
|
||||||
"recurse": true,
|
"recurse": true,
|
||||||
"template": "../../config/jsdoc/info"
|
"template": "config/jsdoc/info"
|
||||||
},
|
},
|
||||||
"tags": {
|
"tags": {
|
||||||
"allowUnknownTags": true
|
"allowUnknownTags": true
|
||||||
@@ -10,8 +10,8 @@
|
|||||||
"includePattern": "\\.js$"
|
"includePattern": "\\.js$"
|
||||||
},
|
},
|
||||||
"plugins": [
|
"plugins": [
|
||||||
"../../config/jsdoc/info/api-plugin",
|
"config/jsdoc/info/api-plugin",
|
||||||
"../../config/jsdoc/info/define-plugin",
|
"config/jsdoc/info/define-plugin",
|
||||||
"../../config/jsdoc/info/virtual-plugin"
|
"config/jsdoc/info/virtual-plugin"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -224,3 +224,7 @@ At least 2 conditions are required.
|
|||||||
### 58
|
### 58
|
||||||
|
|
||||||
Duplicate item added to a unique collection. For example, it may be that you tried to add the same layer to a map twice. Check for calls to `map.addLayer()` or other places where the map's layer collection is modified.
|
Duplicate item added to a unique collection. For example, it may be that you tried to add the same layer to a map twice. Check for calls to `map.addLayer()` or other places where the map's layer collection is modified.
|
||||||
|
|
||||||
|
### 59
|
||||||
|
|
||||||
|
Invalid command found in the PBF. This indicates that the loaded vector tile may be corrupt.
|
||||||
|
|||||||
@@ -124,7 +124,7 @@ goog.require('ol.source.OSM');
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @type {ol.Map}
|
* @type {ol.PluggableMap}
|
||||||
*/
|
*/
|
||||||
app.map = new ol.Map({
|
app.map = new ol.Map({
|
||||||
target: 'map',
|
target: 'map',
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ The easiest way to use a custom projection is to add the [Proj4js](http://proj4j
|
|||||||
Following example shows definition of a [British National Grid](https://epsg.io/27700):
|
Following example shows definition of a [British National Grid](https://epsg.io/27700):
|
||||||
|
|
||||||
``` html
|
``` html
|
||||||
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/proj4js/2.4.3/proj4.js"></script>
|
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/proj4js/2.4.4/proj4.js"></script>
|
||||||
```
|
```
|
||||||
|
|
||||||
``` javascript
|
``` javascript
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
"createMapboxStreetsV6Style": false,
|
"createMapboxStreetsV6Style": false,
|
||||||
"d3": false,
|
"d3": false,
|
||||||
"geojsonvt": false,
|
"geojsonvt": false,
|
||||||
|
"GyroNorm": false,
|
||||||
"jsPDF": false,
|
"jsPDF": false,
|
||||||
"jsts": false,
|
"jsts": false,
|
||||||
"saveAs": false,
|
"saveAs": false,
|
||||||
|
|||||||
@@ -10,7 +10,11 @@ div.ol-zoom {
|
|||||||
top: 178px;
|
top: 178px;
|
||||||
left: 158px;
|
left: 158px;
|
||||||
}
|
}
|
||||||
div.ol-attribution {
|
div.ol-rotate {
|
||||||
|
top: 178px;
|
||||||
|
right: 58px;
|
||||||
|
}
|
||||||
|
.map div.ol-attribution {
|
||||||
bottom: 30px;
|
bottom: 30px;
|
||||||
right: 50px;
|
right: 50px;
|
||||||
}
|
}
|
||||||
|
|||||||
1
examples/d3.js
vendored
1
examples/d3.js
vendored
@@ -1,5 +1,4 @@
|
|||||||
// NOCOMPILE
|
// NOCOMPILE
|
||||||
goog.require('ol');
|
|
||||||
goog.require('ol.Map');
|
goog.require('ol.Map');
|
||||||
goog.require('ol.View');
|
goog.require('ol.View');
|
||||||
goog.require('ol.extent');
|
goog.require('ol.extent');
|
||||||
|
|||||||
1
examples/data/geojson/vienna-streets.geojson
Normal file
1
examples/data/geojson/vienna-streets.geojson
Normal file
File diff suppressed because one or more lines are too long
@@ -4,16 +4,15 @@ title: Device Orientation
|
|||||||
shortdesc: Listen to DeviceOrientation events.
|
shortdesc: Listen to DeviceOrientation events.
|
||||||
docs: >
|
docs: >
|
||||||
This example shows how to track changes in device orientation.
|
This example shows how to track changes in device orientation.
|
||||||
tags: "orientation, openstreetmap"
|
[gyronorm.js](https://github.com/dorukeker/gyronorm.js) library is used to access and
|
||||||
|
normalize the events from the browser.
|
||||||
|
tags: "device, orientation, gyronorm"
|
||||||
|
resources:
|
||||||
|
- https://cdn.rawgit.com/dorukeker/gyronorm.js/v2.0.6/dist/gyronorm.complete.min.js
|
||||||
---
|
---
|
||||||
<div id="map" class="map"></div>
|
<div id="map" class="map"></div>
|
||||||
<label>
|
|
||||||
track changes
|
|
||||||
<input id="track" type="checkbox"/>
|
|
||||||
</label>
|
|
||||||
<p>
|
<p>
|
||||||
α : <code id="alpha"></code>
|
<div>α : <code id="alpha"></code></div>
|
||||||
β : <code id="beta"></code>
|
<div>β : <code id="beta"></code></div>
|
||||||
γ : <code id="gamma"></code>
|
<div>γ : <code id="gamma"></code></div>
|
||||||
heading : <code id="heading"></code>
|
|
||||||
</p>
|
</p>
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
goog.require('ol.DeviceOrientation');
|
// NOCOMPILE
|
||||||
goog.require('ol.Map');
|
goog.require('ol.Map');
|
||||||
goog.require('ol.View');
|
goog.require('ol.View');
|
||||||
goog.require('ol.control');
|
goog.require('ol.control');
|
||||||
goog.require('ol.layer.Tile');
|
goog.require('ol.layer.Tile');
|
||||||
|
goog.require('ol.math');
|
||||||
goog.require('ol.proj');
|
goog.require('ol.proj');
|
||||||
goog.require('ol.source.OSM');
|
goog.require('ol.source.OSM');
|
||||||
|
|
||||||
@@ -28,32 +29,28 @@ var map = new ol.Map({
|
|||||||
view: view
|
view: view
|
||||||
});
|
});
|
||||||
|
|
||||||
var deviceOrientation = new ol.DeviceOrientation();
|
|
||||||
|
|
||||||
function el(id) {
|
function el(id) {
|
||||||
return document.getElementById(id);
|
return document.getElementById(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
el('track').addEventListener('change', function() {
|
|
||||||
deviceOrientation.setTracking(this.checked);
|
var gn = new GyroNorm();
|
||||||
});
|
|
||||||
|
gn.init().then(function() {
|
||||||
deviceOrientation.on('change', function() {
|
gn.start(function(event) {
|
||||||
el('alpha').innerText = deviceOrientation.getAlpha() + ' [rad]';
|
var center = view.getCenter();
|
||||||
el('beta').innerText = deviceOrientation.getBeta() + ' [rad]';
|
var resolution = view.getResolution();
|
||||||
el('gamma').innerText = deviceOrientation.getGamma() + ' [rad]';
|
var alpha = ol.math.toRadians(event.do.beta);
|
||||||
el('heading').innerText = deviceOrientation.getHeading() + ' [rad]';
|
var beta = ol.math.toRadians(event.do.beta);
|
||||||
});
|
var gamma = ol.math.toRadians(event.do.gamma);
|
||||||
|
|
||||||
// tilt the map
|
el('alpha').innerText = alpha + ' [rad]';
|
||||||
deviceOrientation.on(['change:beta', 'change:gamma'], function(event) {
|
el('beta').innerText = beta + ' [rad]';
|
||||||
var center = view.getCenter();
|
el('gamma').innerText = gamma + ' [rad]';
|
||||||
var resolution = view.getResolution();
|
|
||||||
var beta = event.target.getBeta() || 0;
|
center[0] -= resolution * gamma * 25;
|
||||||
var gamma = event.target.getGamma() || 0;
|
center[1] += resolution * beta * 25;
|
||||||
|
|
||||||
center[0] -= resolution * gamma * 25;
|
view.setCenter(view.constrainCenter(center));
|
||||||
center[1] += resolution * beta * 25;
|
});
|
||||||
|
|
||||||
view.setCenter(view.constrainCenter(center));
|
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ goog.require('ol.source.OSM');
|
|||||||
goog.require('ol.source.VectorTile');
|
goog.require('ol.source.VectorTile');
|
||||||
goog.require('ol.layer.Tile');
|
goog.require('ol.layer.Tile');
|
||||||
goog.require('ol.layer.VectorTile');
|
goog.require('ol.layer.VectorTile');
|
||||||
goog.require('ol.tilegrid');
|
|
||||||
goog.require('ol.proj.Projection');
|
goog.require('ol.proj.Projection');
|
||||||
|
|
||||||
|
|
||||||
@@ -77,7 +76,6 @@ fetch(url).then(function(response) {
|
|||||||
});
|
});
|
||||||
var vectorSource = new ol.source.VectorTile({
|
var vectorSource = new ol.source.VectorTile({
|
||||||
format: new ol.format.GeoJSON(),
|
format: new ol.format.GeoJSON(),
|
||||||
tileGrid: ol.tilegrid.createXYZ(),
|
|
||||||
tileLoadFunction: function(tile) {
|
tileLoadFunction: function(tile) {
|
||||||
var format = tile.getFormat();
|
var format = tile.getFormat();
|
||||||
var tileCoord = tile.getTileCoord();
|
var tileCoord = tile.getTileCoord();
|
||||||
|
|||||||
@@ -10,12 +10,15 @@ goog.require('ol.style.Stroke');
|
|||||||
var map = new ol.Map({
|
var map = new ol.Map({
|
||||||
layers: [
|
layers: [
|
||||||
new ol.layer.Tile({
|
new ol.layer.Tile({
|
||||||
source: new ol.source.OSM()
|
source: new ol.source.OSM({
|
||||||
|
wrapX: false
|
||||||
|
})
|
||||||
})
|
})
|
||||||
],
|
],
|
||||||
target: 'map',
|
target: 'map',
|
||||||
view: new ol.View({
|
view: new ol.View({
|
||||||
center: ol.proj.fromLonLat([4.8, 47.75]),
|
center: ol.proj.fromLonLat([4.8, 47.75]),
|
||||||
|
extent: ol.proj.get('EPSG:3857').getExtent(),
|
||||||
zoom: 5
|
zoom: 5
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ var vector = new ol.layer.Vector({
|
|||||||
});
|
});
|
||||||
|
|
||||||
var map = new ol.Map({
|
var map = new ol.Map({
|
||||||
renderer: /** @type {ol.renderer.Type} */ ('webgl'),
|
renderer: /** @type {Array<ol.renderer.Type>} */ (['webgl', 'canvas']),
|
||||||
layers: [vector],
|
layers: [vector],
|
||||||
target: document.getElementById('map'),
|
target: document.getElementById('map'),
|
||||||
view: new ol.View({
|
view: new ol.View({
|
||||||
|
|||||||
@@ -7,6 +7,6 @@ docs: >
|
|||||||
with OpenLayers.
|
with OpenLayers.
|
||||||
tags: "vector, jsts, buffer"
|
tags: "vector, jsts, buffer"
|
||||||
resources:
|
resources:
|
||||||
- https://cdn.rawgit.com/bjornharrtell/jsts/gh-pages/1.2.0/jsts.min.js
|
- https://cdn.rawgit.com/bjornharrtell/jsts/gh-pages/1.4.0/jsts.min.js
|
||||||
---
|
---
|
||||||
<div id="map" class="map"></div>
|
<div id="map" class="map"></div>
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ if (!ol.has.WEBGL) {
|
|||||||
|
|
||||||
var map = new ol.Map({
|
var map = new ol.Map({
|
||||||
layers: [osm],
|
layers: [osm],
|
||||||
renderer: /** @type {ol.renderer.Type} */ ('webgl'),
|
renderer: /** @type {Array<ol.renderer.Type>} */ (['webgl', 'canvas']),
|
||||||
target: 'map',
|
target: 'map',
|
||||||
controls: ol.control.defaults({
|
controls: ol.control.defaults({
|
||||||
attributionOptions: /** @type {olx.control.AttributionOptions} */ ({
|
attributionOptions: /** @type {olx.control.AttributionOptions} */ ({
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
/* eslint-disable openlayers-internal/no-unused-requires */
|
|
||||||
goog.require('ol.Map');
|
goog.require('ol.Map');
|
||||||
goog.require('ol.View');
|
goog.require('ol.View');
|
||||||
goog.require('ol.format.MVT');
|
goog.require('ol.format.MVT');
|
||||||
@@ -46,7 +45,7 @@ var map = new ol.Map({
|
|||||||
}),
|
}),
|
||||||
tileUrlFunction: tileUrlFunction
|
tileUrlFunction: tileUrlFunction
|
||||||
}),
|
}),
|
||||||
style: createMapboxStreetsV6Style()
|
style: createMapboxStreetsV6Style(ol.style.Style, ol.style.Fill, ol.style.Stroke, ol.style.Icon, ol.style.Text)
|
||||||
})
|
})
|
||||||
],
|
],
|
||||||
target: 'map',
|
target: 'map',
|
||||||
@@ -56,6 +55,3 @@ var map = new ol.Map({
|
|||||||
zoom: 2
|
zoom: 2
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
|
||||||
// ol.style.Fill, ol.style.Icon, ol.style.Stroke, ol.style.Style and
|
|
||||||
// ol.style.Text are required for createMapboxStreetsV6Style()
|
|
||||||
|
|||||||
@@ -1,5 +1,3 @@
|
|||||||
/* eslint-disable openlayers-internal/no-unused-requires */
|
|
||||||
|
|
||||||
goog.require('ol.Map');
|
goog.require('ol.Map');
|
||||||
goog.require('ol.View');
|
goog.require('ol.View');
|
||||||
goog.require('ol.format.MVT');
|
goog.require('ol.format.MVT');
|
||||||
@@ -10,7 +8,6 @@ goog.require('ol.style.Icon');
|
|||||||
goog.require('ol.style.Stroke');
|
goog.require('ol.style.Stroke');
|
||||||
goog.require('ol.style.Style');
|
goog.require('ol.style.Style');
|
||||||
goog.require('ol.style.Text');
|
goog.require('ol.style.Text');
|
||||||
goog.require('ol.tilegrid');
|
|
||||||
|
|
||||||
|
|
||||||
var key = 'pk.eyJ1IjoiYWhvY2V2YXIiLCJhIjoiRk1kMWZaSSJ9.E5BkluenyWQMsBLsuByrmg';
|
var key = 'pk.eyJ1IjoiYWhvY2V2YXIiLCJhIjoiRk1kMWZaSSJ9.E5BkluenyWQMsBLsuByrmg';
|
||||||
@@ -23,11 +20,10 @@ var map = new ol.Map({
|
|||||||
'© <a href="https://www.openstreetmap.org/copyright">' +
|
'© <a href="https://www.openstreetmap.org/copyright">' +
|
||||||
'OpenStreetMap contributors</a>',
|
'OpenStreetMap contributors</a>',
|
||||||
format: new ol.format.MVT(),
|
format: new ol.format.MVT(),
|
||||||
tileGrid: ol.tilegrid.createXYZ({tileSize: 512, maxZoom: 22}),
|
|
||||||
url: 'https://{a-d}.tiles.mapbox.com/v4/mapbox.mapbox-streets-v6/' +
|
url: 'https://{a-d}.tiles.mapbox.com/v4/mapbox.mapbox-streets-v6/' +
|
||||||
'{z}/{x}/{y}.vector.pbf?access_token=' + key
|
'{z}/{x}/{y}.vector.pbf?access_token=' + key
|
||||||
}),
|
}),
|
||||||
style: createMapboxStreetsV6Style()
|
style: createMapboxStreetsV6Style(ol.style.Style, ol.style.Fill, ol.style.Stroke, ol.style.Icon, ol.style.Text)
|
||||||
})
|
})
|
||||||
],
|
],
|
||||||
target: 'map',
|
target: 'map',
|
||||||
@@ -36,6 +32,3 @@ var map = new ol.Map({
|
|||||||
zoom: 2
|
zoom: 2
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
|
||||||
// ol.style.Fill, ol.style.Icon, ol.style.Stroke, ol.style.Style and
|
|
||||||
// ol.style.Text are required for createMapboxStreetsV6Style()
|
|
||||||
|
|||||||
@@ -1,20 +1,24 @@
|
|||||||
---
|
---
|
||||||
layout: example.html
|
layout: example.html
|
||||||
title: Measure
|
title: Measure
|
||||||
shortdesc: Example of using the ol.interaction.Draw interaction to create a simple measuring application.
|
shortdesc: Using a draw interaction to measure lengths and areas.
|
||||||
docs: >
|
docs: >
|
||||||
<p><i>NOTE: By default, length and area are calculated using the projected coordinates. This is not accurate for projections like Mercator where the projected meters do not correspond to meters on the ground. To get a standarized measurement across all projections, use the geodesic measures.</i></p>
|
<p>The <code>ol.Sphere.getLength()</code> and <code>ol.Sphere.getArea()</code>
|
||||||
|
functions calculate spherical lengths and areas for geometries. Lengths are
|
||||||
|
calculated by assuming great circle segments between geometry coordinates.
|
||||||
|
Areas are calculated as if edges of polygons were great circle segments.</p>
|
||||||
|
<p>Note that the <code>geometry.getLength()</code> and <code>geometry.getArea()</code>
|
||||||
|
methods return measures of projected (planar) geometries. These can be very
|
||||||
|
different than on-the-ground measures in certain situations — in northern
|
||||||
|
and southern latitudes using Web Mercator for example. For better results,
|
||||||
|
use the functions on <code>ol.Sphere</code>.</p>
|
||||||
tags: "draw, edit, measure, vector"
|
tags: "draw, edit, measure, vector"
|
||||||
---
|
---
|
||||||
<div id="map" class="map"></div>
|
<div id="map" class="map"></div>
|
||||||
<form class="form-inline">
|
<form class="form-inline">
|
||||||
<label>Measurement type </label>
|
<label>Measurement type </label>
|
||||||
<select id="type">
|
<select id="type">
|
||||||
<option value="length">Length (LineString)</option>
|
<option value="length">Length (LineString)</option>
|
||||||
<option value="area">Area (Polygon)</option>
|
<option value="area">Area (Polygon)</option>
|
||||||
</select>
|
</select>
|
||||||
<label class="checkbox">
|
|
||||||
<input type="checkbox" id="geodesic">
|
|
||||||
use geodesic measures
|
|
||||||
</label>
|
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ goog.require('ol.geom.Polygon');
|
|||||||
goog.require('ol.interaction.Draw');
|
goog.require('ol.interaction.Draw');
|
||||||
goog.require('ol.layer.Tile');
|
goog.require('ol.layer.Tile');
|
||||||
goog.require('ol.layer.Vector');
|
goog.require('ol.layer.Vector');
|
||||||
goog.require('ol.proj');
|
|
||||||
goog.require('ol.source.OSM');
|
goog.require('ol.source.OSM');
|
||||||
goog.require('ol.source.Vector');
|
goog.require('ol.source.Vector');
|
||||||
goog.require('ol.style.Circle');
|
goog.require('ol.style.Circle');
|
||||||
@@ -17,8 +16,6 @@ goog.require('ol.style.Stroke');
|
|||||||
goog.require('ol.style.Style');
|
goog.require('ol.style.Style');
|
||||||
|
|
||||||
|
|
||||||
var wgs84Sphere = new ol.Sphere(6378137);
|
|
||||||
|
|
||||||
var raster = new ol.layer.Tile({
|
var raster = new ol.layer.Tile({
|
||||||
source: new ol.source.OSM()
|
source: new ol.source.OSM()
|
||||||
});
|
});
|
||||||
@@ -137,7 +134,6 @@ map.getViewport().addEventListener('mouseout', function() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
var typeSelect = document.getElementById('type');
|
var typeSelect = document.getElementById('type');
|
||||||
var geodesicCheckbox = document.getElementById('geodesic');
|
|
||||||
|
|
||||||
var draw; // global so we can remove it later
|
var draw; // global so we can remove it later
|
||||||
|
|
||||||
@@ -148,19 +144,7 @@ var draw; // global so we can remove it later
|
|||||||
* @return {string} The formatted length.
|
* @return {string} The formatted length.
|
||||||
*/
|
*/
|
||||||
var formatLength = function(line) {
|
var formatLength = function(line) {
|
||||||
var length;
|
var length = ol.Sphere.getLength(line);
|
||||||
if (geodesicCheckbox.checked) {
|
|
||||||
var coordinates = line.getCoordinates();
|
|
||||||
length = 0;
|
|
||||||
var sourceProj = map.getView().getProjection();
|
|
||||||
for (var i = 0, ii = coordinates.length - 1; i < ii; ++i) {
|
|
||||||
var c1 = ol.proj.transform(coordinates[i], sourceProj, 'EPSG:4326');
|
|
||||||
var c2 = ol.proj.transform(coordinates[i + 1], sourceProj, 'EPSG:4326');
|
|
||||||
length += wgs84Sphere.haversineDistance(c1, c2);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
length = Math.round(line.getLength() * 100) / 100;
|
|
||||||
}
|
|
||||||
var output;
|
var output;
|
||||||
if (length > 100) {
|
if (length > 100) {
|
||||||
output = (Math.round(length / 1000 * 100) / 100) +
|
output = (Math.round(length / 1000 * 100) / 100) +
|
||||||
@@ -179,16 +163,7 @@ var formatLength = function(line) {
|
|||||||
* @return {string} Formatted area.
|
* @return {string} Formatted area.
|
||||||
*/
|
*/
|
||||||
var formatArea = function(polygon) {
|
var formatArea = function(polygon) {
|
||||||
var area;
|
var area = ol.Sphere.getArea(polygon);
|
||||||
if (geodesicCheckbox.checked) {
|
|
||||||
var sourceProj = map.getView().getProjection();
|
|
||||||
var geom = /** @type {ol.geom.Polygon} */(polygon.clone().transform(
|
|
||||||
sourceProj, 'EPSG:4326'));
|
|
||||||
var coordinates = geom.getLinearRing(0).getCoordinates();
|
|
||||||
area = Math.abs(wgs84Sphere.geodesicArea(coordinates));
|
|
||||||
} else {
|
|
||||||
area = polygon.getArea();
|
|
||||||
}
|
|
||||||
var output;
|
var output;
|
||||||
if (area > 10000) {
|
if (area > 10000) {
|
||||||
output = (Math.round(area / 1000000 * 100) / 100) +
|
output = (Math.round(area / 1000000 * 100) / 100) +
|
||||||
|
|||||||
@@ -225,7 +225,7 @@ var modify = new ol.interaction.Modify({
|
|||||||
style: overlayStyle,
|
style: overlayStyle,
|
||||||
insertVertexCondition: function() {
|
insertVertexCondition: function() {
|
||||||
// prevent new vertices to be added to the polygons
|
// prevent new vertices to be added to the polygons
|
||||||
return !this.features_.getArray().every(function(feature) {
|
return !select.getFeatures().getArray().every(function(feature) {
|
||||||
return feature.getGeometry().getType().match(/Polygon/);
|
return feature.getGeometry().getType().match(/Polygon/);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,8 +7,6 @@ goog.require('ol.source.VectorTile');
|
|||||||
goog.require('ol.style.Fill');
|
goog.require('ol.style.Fill');
|
||||||
goog.require('ol.style.Stroke');
|
goog.require('ol.style.Stroke');
|
||||||
goog.require('ol.style.Style');
|
goog.require('ol.style.Style');
|
||||||
goog.require('ol.tilegrid');
|
|
||||||
|
|
||||||
|
|
||||||
var key = 'vector-tiles-5eJz6JX';
|
var key = 'vector-tiles-5eJz6JX';
|
||||||
|
|
||||||
@@ -70,7 +68,7 @@ var map = new ol.Map({
|
|||||||
layerName: 'layer',
|
layerName: 'layer',
|
||||||
layers: ['water', 'roads', 'buildings']
|
layers: ['water', 'roads', 'buildings']
|
||||||
}),
|
}),
|
||||||
tileGrid: ol.tilegrid.createXYZ({tileSize: 512, maxZoom: 19}),
|
maxZoom: 19,
|
||||||
url: 'https://tile.mapzen.com/mapzen/vector/v1/all/{z}/{x}/{y}.topojson?api_key=' + key
|
url: 'https://tile.mapzen.com/mapzen/vector/v1/all/{z}/{x}/{y}.topojson?api_key=' + key
|
||||||
}),
|
}),
|
||||||
style: function(feature, resolution) {
|
style: function(feature, resolution) {
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ docs: >
|
|||||||
in <a href="https://epsg.io/">EPSG.io</a> database.
|
in <a href="https://epsg.io/">EPSG.io</a> database.
|
||||||
tags: "reprojection, projection, proj4js, epsg.io"
|
tags: "reprojection, projection, proj4js, epsg.io"
|
||||||
resources:
|
resources:
|
||||||
- https://cdnjs.cloudflare.com/ajax/libs/proj4js/2.4.3/proj4.js
|
- https://cdnjs.cloudflare.com/ajax/libs/proj4js/2.4.4/proj4.js
|
||||||
---
|
---
|
||||||
<div id="map" class="map"></div>
|
<div id="map" class="map"></div>
|
||||||
<form class="form-inline">
|
<form class="form-inline">
|
||||||
|
|||||||
@@ -6,6 +6,6 @@ docs: >
|
|||||||
This example shows client-side reprojection of single image source.
|
This example shows client-side reprojection of single image source.
|
||||||
tags: "reprojection, projection, proj4js, image, imagestatic"
|
tags: "reprojection, projection, proj4js, image, imagestatic"
|
||||||
resources:
|
resources:
|
||||||
- https://cdnjs.cloudflare.com/ajax/libs/proj4js/2.4.3/proj4.js
|
- https://cdnjs.cloudflare.com/ajax/libs/proj4js/2.4.4/proj4.js
|
||||||
---
|
---
|
||||||
<div id="map" class="map"></div>
|
<div id="map" class="map"></div>
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ docs: >
|
|||||||
This example shows client-side raster reprojection between various projections.
|
This example shows client-side raster reprojection between various projections.
|
||||||
tags: "reprojection, projection, proj4js, osm, wms, wmts, hidpi"
|
tags: "reprojection, projection, proj4js, osm, wms, wmts, hidpi"
|
||||||
resources:
|
resources:
|
||||||
- https://cdnjs.cloudflare.com/ajax/libs/proj4js/2.4.3/proj4.js
|
- https://cdnjs.cloudflare.com/ajax/libs/proj4js/2.4.4/proj4.js
|
||||||
---
|
---
|
||||||
<div id="map" class="map"></div>
|
<div id="map" class="map"></div>
|
||||||
<form class="form-inline">
|
<form class="form-inline">
|
||||||
|
|||||||
@@ -1,20 +1,20 @@
|
|||||||
// Styles for the mapbox-streets-v6 vector tile data set. Loosely based on
|
// Styles for the mapbox-streets-v6 vector tile data set. Loosely based on
|
||||||
// http://a.tiles.mapbox.com/v4/mapbox.mapbox-streets-v6.json
|
// http://a.tiles.mapbox.com/v4/mapbox.mapbox-streets-v6.json
|
||||||
|
|
||||||
function createMapboxStreetsV6Style() {
|
function createMapboxStreetsV6Style(Style, Fill, Stroke, Icon, Text) {
|
||||||
var fill = new ol.style.Fill({color: ''});
|
var fill = new Fill({color: ''});
|
||||||
var stroke = new ol.style.Stroke({color: '', width: 1});
|
var stroke = new Stroke({color: '', width: 1});
|
||||||
var polygon = new ol.style.Style({fill: fill});
|
var polygon = new Style({fill: fill});
|
||||||
var strokedPolygon = new ol.style.Style({fill: fill, stroke: stroke});
|
var strokedPolygon = new Style({fill: fill, stroke: stroke});
|
||||||
var line = new ol.style.Style({stroke: stroke});
|
var line = new Style({stroke: stroke});
|
||||||
var text = new ol.style.Style({text: new ol.style.Text({
|
var text = new Style({text: new Text({
|
||||||
text: '', fill: fill, stroke: stroke
|
text: '', fill: fill, stroke: stroke
|
||||||
})});
|
})});
|
||||||
var iconCache = {};
|
var iconCache = {};
|
||||||
function getIcon(iconName) {
|
function getIcon(iconName) {
|
||||||
var icon = iconCache[iconName];
|
var icon = iconCache[iconName];
|
||||||
if (!icon) {
|
if (!icon) {
|
||||||
icon = new ol.style.Style({image: new ol.style.Icon({
|
icon = new Style({image: new Icon({
|
||||||
src: 'https://cdn.rawgit.com/mapbox/maki/master/icons/' + iconName + '-15.svg',
|
src: 'https://cdn.rawgit.com/mapbox/maki/master/icons/' + iconName + '-15.svg',
|
||||||
imgSize: [15, 15]
|
imgSize: [15, 15]
|
||||||
})});
|
})});
|
||||||
|
|||||||
@@ -6,6 +6,6 @@ docs: >
|
|||||||
This example shows client-side reprojection of OpenStreetMap to NAD83 Indiana East, including a ScaleLine control with US units.
|
This example shows client-side reprojection of OpenStreetMap to NAD83 Indiana East, including a ScaleLine control with US units.
|
||||||
tags: "reprojection, projection, openstreetmap, nad83, tile, scaleline"
|
tags: "reprojection, projection, openstreetmap, nad83, tile, scaleline"
|
||||||
resources:
|
resources:
|
||||||
- https://cdnjs.cloudflare.com/ajax/libs/proj4js/2.4.3/proj4.js
|
- https://cdnjs.cloudflare.com/ajax/libs/proj4js/2.4.4/proj4.js
|
||||||
---
|
---
|
||||||
<div id="map" class="map"></div>
|
<div id="map" class="map"></div>
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ var map1 = new ol.Map({
|
|||||||
if (ol.has.WEBGL) {
|
if (ol.has.WEBGL) {
|
||||||
var map2 = new ol.Map({
|
var map2 = new ol.Map({
|
||||||
target: 'webglMap',
|
target: 'webglMap',
|
||||||
renderer: /** @type {ol.renderer.Type} */ ('webgl'),
|
renderer: /** @type {Array<ol.renderer.Type>} */ (['webgl', 'canvas']),
|
||||||
layers: [layer],
|
layers: [layer],
|
||||||
view: view
|
view: view
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -6,6 +6,6 @@ docs: >
|
|||||||
Example of a Sphere Mollweide map with a Graticule component.
|
Example of a Sphere Mollweide map with a Graticule component.
|
||||||
tags: "graticule, Mollweide, projection, proj4js"
|
tags: "graticule, Mollweide, projection, proj4js"
|
||||||
resources:
|
resources:
|
||||||
- https://cdnjs.cloudflare.com/ajax/libs/proj4js/2.4.3/proj4.js
|
- https://cdnjs.cloudflare.com/ajax/libs/proj4js/2.4.4/proj4.js
|
||||||
---
|
---
|
||||||
<div id="map" class="map"></div>
|
<div id="map" class="map"></div>
|
||||||
|
|||||||
@@ -3,14 +3,8 @@ layout: example.html
|
|||||||
title: Street Labels
|
title: Street Labels
|
||||||
shortdesc: Render street names with a custom render.
|
shortdesc: Render street names with a custom render.
|
||||||
docs: >
|
docs: >
|
||||||
Example showing the use of a custom renderer to render text along a path. [Labelgun](https://github.com/Geovation/labelgun) is used to avoid label collisions. [label-segment](https://github.com/ahocevar/label-segment) makes sure that labels are placed on suitable street segments. [textpath](https://github.com/ahocevar/textpath) arranges the letters of a label along the geometry. The data is fetched from OSM using the [Overpass API](https://overpass-api.de).
|
Example showing the use of a text style with `placement: 'line'` to render text along a path.
|
||||||
tags: "vector, label, collision detection, labelgun, linelabel, overpass"
|
tags: "vector, label, streets"
|
||||||
resources:
|
|
||||||
- https://cdn.polyfill.io/v2/polyfill.min.js?features=Set"
|
|
||||||
- https://unpkg.com/rbush@2.0.1/rbush.min.js
|
|
||||||
- https://unpkg.com/labelgun@0.1.1/lib/labelgun.min.js
|
|
||||||
- https://unpkg.com/textpath@1.0.1/dist/textpath.js
|
|
||||||
- https://unpkg.com/label-segment@1.0.0/dist/label-segment.js
|
|
||||||
cloak:
|
cloak:
|
||||||
As1HiMj1PvLPlqc_gtM7AqZfBL8ZL3VrjaS3zIb22Uvb9WKhuJObROC-qUpa81U5: Your Bing Maps Key from http://www.bingmapsportal.com/ here
|
As1HiMj1PvLPlqc_gtM7AqZfBL8ZL3VrjaS3zIb22Uvb9WKhuJObROC-qUpa81U5: Your Bing Maps Key from http://www.bingmapsportal.com/ here
|
||||||
---
|
---
|
||||||
|
|||||||
@@ -1,82 +1,42 @@
|
|||||||
// NOCOMPILE
|
|
||||||
/* global labelgun, labelSegment, textPath */
|
|
||||||
goog.require('ol.Map');
|
goog.require('ol.Map');
|
||||||
goog.require('ol.View');
|
goog.require('ol.View');
|
||||||
goog.require('ol.extent');
|
goog.require('ol.extent');
|
||||||
goog.require('ol.format.OSMXML');
|
goog.require('ol.format.GeoJSON');
|
||||||
goog.require('ol.layer.Tile');
|
goog.require('ol.layer.Tile');
|
||||||
goog.require('ol.layer.Vector');
|
goog.require('ol.layer.Vector');
|
||||||
goog.require('ol.source.BingMaps');
|
goog.require('ol.source.BingMaps');
|
||||||
goog.require('ol.source.Vector');
|
goog.require('ol.source.Vector');
|
||||||
|
goog.require('ol.style.Fill');
|
||||||
goog.require('ol.style.Style');
|
goog.require('ol.style.Style');
|
||||||
|
goog.require('ol.style.Text');
|
||||||
var emptyFn = function() {};
|
|
||||||
var labelEngine = new labelgun['default'](emptyFn, emptyFn);
|
|
||||||
|
|
||||||
var context, pixelRatio; // Will be set in the map's postcompose listener
|
|
||||||
function measureText(text) {
|
|
||||||
return context.measureText(text).width * pixelRatio;
|
|
||||||
}
|
|
||||||
|
|
||||||
var extent, letters; // Will be set in the style's renderer function
|
|
||||||
function collectDrawData(letter, x, y, angle) {
|
|
||||||
ol.extent.extend(extent, [x, y, x, y]);
|
|
||||||
letters.push([x, y, angle, letter]);
|
|
||||||
}
|
|
||||||
|
|
||||||
var style = new ol.style.Style({
|
var style = new ol.style.Style({
|
||||||
renderer: function(coords, context) {
|
text: new ol.style.Text({
|
||||||
var feature = context.feature;
|
font: 'bold 11px "Open Sans", "Arial Unicode MS", "sans-serif"',
|
||||||
var text = feature.get('name');
|
placement: 'line',
|
||||||
// Only create label when geometry has a long and straight segment
|
fill: new ol.style.Fill({
|
||||||
var path = labelSegment(coords, Math.PI / 8, measureText(text));
|
color: 'white'
|
||||||
if (path) {
|
})
|
||||||
extent = ol.extent.createEmpty();
|
|
||||||
letters = [];
|
|
||||||
textPath(text, path, measureText, collectDrawData);
|
|
||||||
ol.extent.buffer(extent, 5 * pixelRatio, extent);
|
|
||||||
var bounds = {
|
|
||||||
bottomLeft: ol.extent.getBottomLeft(extent),
|
|
||||||
topRight: ol.extent.getTopRight(extent)
|
|
||||||
};
|
|
||||||
labelEngine.ingestLabel(bounds, feature.getId(), 1, letters, text, false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
var rasterLayer = new ol.layer.Tile({
|
|
||||||
source: new ol.source.BingMaps({
|
|
||||||
key: 'As1HiMj1PvLPlqc_gtM7AqZfBL8ZL3VrjaS3zIb22Uvb9WKhuJObROC-qUpa81U5',
|
|
||||||
imagerySet: 'Aerial'
|
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
|
||||||
var source = new ol.source.Vector();
|
|
||||||
// Request streets from OSM, using the Overpass API
|
|
||||||
fetch('https://overpass-api.de/api/interpreter', {
|
|
||||||
method: 'POST',
|
|
||||||
body: '(way["highway"](48.19642,16.32580,48.22050,16.41986));(._;>;);out meta;'
|
|
||||||
}).then(function(response) {
|
|
||||||
return response.text();
|
|
||||||
}).then(function(responseText) {
|
|
||||||
var features = new ol.format.OSMXML().readFeatures(responseText, {
|
|
||||||
featureProjection: 'EPSG:3857'
|
|
||||||
});
|
|
||||||
source.addFeatures(features);
|
|
||||||
});
|
|
||||||
|
|
||||||
var vectorLayer = new ol.layer.Vector({
|
|
||||||
source: source,
|
|
||||||
style: function(feature) {
|
|
||||||
if (feature.getGeometry().getType() == 'LineString' && feature.get('name')) {
|
|
||||||
return style;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
var viewExtent = [1817379, 6139595, 1827851, 6143616];
|
var viewExtent = [1817379, 6139595, 1827851, 6143616];
|
||||||
var map = new ol.Map({
|
var map = new ol.Map({
|
||||||
layers: [rasterLayer, vectorLayer],
|
layers: [new ol.layer.Tile({
|
||||||
|
source: new ol.source.BingMaps({
|
||||||
|
key: 'As1HiMj1PvLPlqc_gtM7AqZfBL8ZL3VrjaS3zIb22Uvb9WKhuJObROC-qUpa81U5',
|
||||||
|
imagerySet: 'Aerial'
|
||||||
|
})
|
||||||
|
}), new ol.layer.Vector({
|
||||||
|
source: new ol.source.Vector({
|
||||||
|
format: new ol.format.GeoJSON(),
|
||||||
|
url: 'data/geojson/vienna-streets.geojson'
|
||||||
|
}),
|
||||||
|
style: function(feature) {
|
||||||
|
style.getText().setText(feature.get('name'));
|
||||||
|
return style;
|
||||||
|
}
|
||||||
|
})],
|
||||||
target: 'map',
|
target: 'map',
|
||||||
view: new ol.View({
|
view: new ol.View({
|
||||||
extent: viewExtent,
|
extent: viewExtent,
|
||||||
@@ -85,31 +45,3 @@ var map = new ol.Map({
|
|||||||
minZoom: 14
|
minZoom: 14
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
|
||||||
vectorLayer.on('precompose', function() {
|
|
||||||
labelEngine.destroy();
|
|
||||||
});
|
|
||||||
vectorLayer.on('postcompose', function(e) {
|
|
||||||
context = e.context;
|
|
||||||
pixelRatio = e.frameState.pixelRatio;
|
|
||||||
context.save();
|
|
||||||
context.font = 'normal 11px "Open Sans", "Arial Unicode MS"';
|
|
||||||
context.fillStyle = 'white';
|
|
||||||
context.textBaseline = 'middle';
|
|
||||||
context.textAlign = 'center';
|
|
||||||
var labels = labelEngine.getShown();
|
|
||||||
for (var i = 0, ii = labels.length; i < ii; ++i) {
|
|
||||||
// Render label letter by letter
|
|
||||||
var letters = labels[i].labelObject;
|
|
||||||
for (var j = 0, jj = letters.length; j < jj; ++j) {
|
|
||||||
var labelData = letters[j];
|
|
||||||
context.save();
|
|
||||||
context.translate(labelData[0], labelData[1]);
|
|
||||||
context.rotate(labelData[2]);
|
|
||||||
context.scale(pixelRatio, pixelRatio);
|
|
||||||
context.fillText(labelData[3], 0, 0);
|
|
||||||
context.restore();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
context.restore();
|
|
||||||
});
|
|
||||||
|
|||||||
@@ -107,7 +107,7 @@ var vector = new ol.layer.Vector({
|
|||||||
});
|
});
|
||||||
|
|
||||||
var map = new ol.Map({
|
var map = new ol.Map({
|
||||||
renderer: /** @type {ol.renderer.Type} */ ('webgl'),
|
renderer: /** @type {Array<ol.renderer.Type>} */ (['webgl', 'canvas']),
|
||||||
layers: [vector],
|
layers: [vector],
|
||||||
target: document.getElementById('map'),
|
target: document.getElementById('map'),
|
||||||
view: new ol.View({
|
view: new ol.View({
|
||||||
|
|||||||
15
examples/tile-transitions.html
Normal file
15
examples/tile-transitions.html
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
---
|
||||||
|
layout: example.html
|
||||||
|
title: Tile Transitions
|
||||||
|
shortdesc: Custom configuration for opacity transitions on tiles.
|
||||||
|
docs: >
|
||||||
|
By default tiles are rendered with an opacity transition - fading in over
|
||||||
|
250 ms. To disable this behavior, set the <code>transition</code> option
|
||||||
|
of the tile source to 0.
|
||||||
|
tags: "fade, transition"
|
||||||
|
---
|
||||||
|
<div id="map" class="map"></div>
|
||||||
|
<label>
|
||||||
|
render with an opacity transition
|
||||||
|
<input id="transition" type="checkbox" checked>
|
||||||
|
</label>
|
||||||
31
examples/tile-transitions.js
Normal file
31
examples/tile-transitions.js
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
goog.require('ol.Map');
|
||||||
|
goog.require('ol.View');
|
||||||
|
goog.require('ol.layer.Tile');
|
||||||
|
goog.require('ol.source.XYZ');
|
||||||
|
|
||||||
|
var url = 'https://{a-c}.tiles.mapbox.com/v3/mapbox.world-bright/{z}/{x}/{y}.png';
|
||||||
|
|
||||||
|
var withTransition = new ol.layer.Tile({
|
||||||
|
source: new ol.source.XYZ({url: url})
|
||||||
|
});
|
||||||
|
|
||||||
|
var withoutTransition = new ol.layer.Tile({
|
||||||
|
source: new ol.source.XYZ({url: url, transition: 0}),
|
||||||
|
visible: false
|
||||||
|
});
|
||||||
|
|
||||||
|
var map = new ol.Map({
|
||||||
|
layers: [withTransition, withoutTransition],
|
||||||
|
target: 'map',
|
||||||
|
view: new ol.View({
|
||||||
|
center: [0, 0],
|
||||||
|
zoom: 2,
|
||||||
|
maxZoom: 11
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
|
document.getElementById('transition').addEventListener('change', function(event) {
|
||||||
|
var transition = event.target.checked;
|
||||||
|
withTransition.setVisible(transition);
|
||||||
|
withoutTransition.setVisible(!transition);
|
||||||
|
});
|
||||||
@@ -80,6 +80,25 @@ tags: "geojson, vector, openstreetmap, label"
|
|||||||
<option value="normal" selected="selected">Normal</option>
|
<option value="normal" selected="selected">Normal</option>
|
||||||
</select>
|
</select>
|
||||||
<br />
|
<br />
|
||||||
|
<label>Placement: </label>
|
||||||
|
<select disabled id="points-placement">
|
||||||
|
<option value="line">Line</option>
|
||||||
|
<option value="point" selected="selected">Point</option>
|
||||||
|
</select>
|
||||||
|
<br />
|
||||||
|
<label>Max Angle: </label>
|
||||||
|
<select disabled id="points-maxangle">
|
||||||
|
<option value="0.7853981633974483" selected="selected">45°</option>
|
||||||
|
<option value="2.0943951023931953">120°</option>
|
||||||
|
<option value="6.283185307179586">360°</option>
|
||||||
|
</select>
|
||||||
|
<br />
|
||||||
|
<label>Exceed Len: </label>
|
||||||
|
<select disabled id="points-exceedlength">
|
||||||
|
<option value="true">True</option>
|
||||||
|
<option value="false" selected="selected">False</option>
|
||||||
|
</select>
|
||||||
|
<br />
|
||||||
<label>Size: </label>
|
<label>Size: </label>
|
||||||
<input type="text" value="12px" id="points-size" />
|
<input type="text" value="12px" id="points-size" />
|
||||||
<br />
|
<br />
|
||||||
@@ -131,7 +150,8 @@ tags: "geojson, vector, openstreetmap, label"
|
|||||||
<br />
|
<br />
|
||||||
<label>Align: </label>
|
<label>Align: </label>
|
||||||
<select id="lines-align">
|
<select id="lines-align">
|
||||||
<option value="center" selected="selected">Center</option>
|
<option value="" selected="selected"></option>
|
||||||
|
<option value="center">Center</option>
|
||||||
<option value="end">End</option>
|
<option value="end">End</option>
|
||||||
<option value="left">Left</option>
|
<option value="left">Left</option>
|
||||||
<option value="right">Right</option>
|
<option value="right">Right</option>
|
||||||
@@ -169,6 +189,25 @@ tags: "geojson, vector, openstreetmap, label"
|
|||||||
<option value="normal">Normal</option>
|
<option value="normal">Normal</option>
|
||||||
</select>
|
</select>
|
||||||
<br />
|
<br />
|
||||||
|
<label>Placement: </label>
|
||||||
|
<select id="lines-placement">
|
||||||
|
<option value="line">Line</option>
|
||||||
|
<option value="point" selected="selected">Point</option>
|
||||||
|
</select>
|
||||||
|
<br />
|
||||||
|
<label>Max Angle: </label>
|
||||||
|
<select id="lines-maxangle">
|
||||||
|
<option value="0.7853981633974483" selected="selected">45°</option>
|
||||||
|
<option value="2.0943951023931953">120°</option>
|
||||||
|
<option value="6.283185307179586">360°</option>
|
||||||
|
</select>
|
||||||
|
<br />
|
||||||
|
<label>Exceed Len: </label>
|
||||||
|
<select id="lines-exceedlength">
|
||||||
|
<option value="true">True</option>
|
||||||
|
<option value="false" selected="selected">False</option>
|
||||||
|
</select>
|
||||||
|
<br />
|
||||||
<label>Size: </label>
|
<label>Size: </label>
|
||||||
<input type="text" value="12px" id="lines-size" />
|
<input type="text" value="12px" id="lines-size" />
|
||||||
<br />
|
<br />
|
||||||
@@ -220,7 +259,8 @@ tags: "geojson, vector, openstreetmap, label"
|
|||||||
<br />
|
<br />
|
||||||
<label>Align: </label>
|
<label>Align: </label>
|
||||||
<select id="polygons-align">
|
<select id="polygons-align">
|
||||||
<option value="center" selected="selected">Center</option>
|
<option value="" selected="selected"></option>
|
||||||
|
<option value="center">Center</option>
|
||||||
<option value="end">End</option>
|
<option value="end">End</option>
|
||||||
<option value="left">Left</option>
|
<option value="left">Left</option>
|
||||||
<option value="right">Right</option>
|
<option value="right">Right</option>
|
||||||
@@ -258,6 +298,25 @@ tags: "geojson, vector, openstreetmap, label"
|
|||||||
<option value="normal">Normal</option>
|
<option value="normal">Normal</option>
|
||||||
</select>
|
</select>
|
||||||
<br />
|
<br />
|
||||||
|
<label>Placement: </label>
|
||||||
|
<select id="polygons-placement">
|
||||||
|
<option value="line">Line</option>
|
||||||
|
<option value="point" selected="selected">Point</option>
|
||||||
|
</select>
|
||||||
|
<br />
|
||||||
|
<label>Max Angle: </label>
|
||||||
|
<select id="polygons-maxangle">
|
||||||
|
<option value="0.7853981633974483" selected="selected">45°</option>
|
||||||
|
<option value="2.0943951023931953">120°</option>
|
||||||
|
<option value="6.283185307179586">360°</option>
|
||||||
|
</select>
|
||||||
|
<br />
|
||||||
|
<label>Exceed Len: </label>
|
||||||
|
<select id="polygons-exceedlength">
|
||||||
|
<option value="true">True</option>
|
||||||
|
<option value="false" selected="selected">False</option>
|
||||||
|
</select>
|
||||||
|
<br />
|
||||||
<label>Size: </label>
|
<label>Size: </label>
|
||||||
<input type="text" value="10px" id="polygons-size" />
|
<input type="text" value="10px" id="polygons-size" />
|
||||||
<br />
|
<br />
|
||||||
|
|||||||
@@ -35,6 +35,9 @@ var myDom = {
|
|||||||
rotation: document.getElementById('lines-rotation'),
|
rotation: document.getElementById('lines-rotation'),
|
||||||
font: document.getElementById('lines-font'),
|
font: document.getElementById('lines-font'),
|
||||||
weight: document.getElementById('lines-weight'),
|
weight: document.getElementById('lines-weight'),
|
||||||
|
placement: document.getElementById('lines-placement'),
|
||||||
|
maxangle: document.getElementById('lines-maxangle'),
|
||||||
|
exceedlength: document.getElementById('lines-exceedlength'),
|
||||||
size: document.getElementById('lines-size'),
|
size: document.getElementById('lines-size'),
|
||||||
offsetX: document.getElementById('lines-offset-x'),
|
offsetX: document.getElementById('lines-offset-x'),
|
||||||
offsetY: document.getElementById('lines-offset-y'),
|
offsetY: document.getElementById('lines-offset-y'),
|
||||||
@@ -50,6 +53,9 @@ var myDom = {
|
|||||||
rotation: document.getElementById('polygons-rotation'),
|
rotation: document.getElementById('polygons-rotation'),
|
||||||
font: document.getElementById('polygons-font'),
|
font: document.getElementById('polygons-font'),
|
||||||
weight: document.getElementById('polygons-weight'),
|
weight: document.getElementById('polygons-weight'),
|
||||||
|
placement: document.getElementById('polygons-placement'),
|
||||||
|
maxangle: document.getElementById('polygons-maxangle'),
|
||||||
|
exceedlength: document.getElementById('polygons-exceedlength'),
|
||||||
size: document.getElementById('polygons-size'),
|
size: document.getElementById('polygons-size'),
|
||||||
offsetX: document.getElementById('polygons-offset-x'),
|
offsetX: document.getElementById('polygons-offset-x'),
|
||||||
offsetY: document.getElementById('polygons-offset-y'),
|
offsetY: document.getElementById('polygons-offset-y'),
|
||||||
@@ -86,6 +92,9 @@ var createTextStyle = function(feature, resolution, dom) {
|
|||||||
var offsetX = parseInt(dom.offsetX.value, 10);
|
var offsetX = parseInt(dom.offsetX.value, 10);
|
||||||
var offsetY = parseInt(dom.offsetY.value, 10);
|
var offsetY = parseInt(dom.offsetY.value, 10);
|
||||||
var weight = dom.weight.value;
|
var weight = dom.weight.value;
|
||||||
|
var placement = dom.placement ? dom.placement.value : undefined;
|
||||||
|
var maxAngle = dom.maxangle ? parseFloat(dom.maxangle.value) : undefined;
|
||||||
|
var exceedLength = dom.exceedlength ? (dom.exceedlength.value == 'true') : undefined;
|
||||||
var rotation = parseFloat(dom.rotation.value);
|
var rotation = parseFloat(dom.rotation.value);
|
||||||
var font = weight + ' ' + size + ' ' + dom.font.value;
|
var font = weight + ' ' + size + ' ' + dom.font.value;
|
||||||
var fillColor = dom.color.value;
|
var fillColor = dom.color.value;
|
||||||
@@ -93,7 +102,7 @@ var createTextStyle = function(feature, resolution, dom) {
|
|||||||
var outlineWidth = parseInt(dom.outlineWidth.value, 10);
|
var outlineWidth = parseInt(dom.outlineWidth.value, 10);
|
||||||
|
|
||||||
return new ol.style.Text({
|
return new ol.style.Text({
|
||||||
textAlign: align,
|
textAlign: align == '' ? undefined : align,
|
||||||
textBaseline: baseline,
|
textBaseline: baseline,
|
||||||
font: font,
|
font: font,
|
||||||
text: getText(feature, resolution, dom),
|
text: getText(feature, resolution, dom),
|
||||||
@@ -101,6 +110,9 @@ var createTextStyle = function(feature, resolution, dom) {
|
|||||||
stroke: new ol.style.Stroke({color: outlineColor, width: outlineWidth}),
|
stroke: new ol.style.Stroke({color: outlineColor, width: outlineWidth}),
|
||||||
offsetX: offsetX,
|
offsetX: offsetX,
|
||||||
offsetY: offsetY,
|
offsetY: offsetY,
|
||||||
|
placement: placement,
|
||||||
|
maxAngle: maxAngle,
|
||||||
|
exceedLength: exceedLength,
|
||||||
rotation: rotation
|
rotation: rotation
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -3,8 +3,8 @@ layout: example.html
|
|||||||
title: Vector Layer
|
title: Vector Layer
|
||||||
shortdesc: Example of a countries vector layer with country information.
|
shortdesc: Example of a countries vector layer with country information.
|
||||||
docs: >
|
docs: >
|
||||||
The countries are loaded from a GeoJSON file. Information about countries is shown on hover and click. Zoom in a few times to see country name labels.
|
The countries are loaded from a GeoJSON file. Information about countries is shown on hover and click.
|
||||||
tags: "vector, osm, xml, loading, server"
|
tags: "vector, geojson"
|
||||||
---
|
---
|
||||||
<div id="map" class="map"></div>
|
<div id="map" class="map"></div>
|
||||||
<div id="info"> </div>
|
<div id="info"> </div>
|
||||||
|
|||||||
@@ -1,9 +1,7 @@
|
|||||||
goog.require('ol.Map');
|
goog.require('ol.Map');
|
||||||
goog.require('ol.View');
|
goog.require('ol.View');
|
||||||
goog.require('ol.format.GeoJSON');
|
goog.require('ol.format.GeoJSON');
|
||||||
goog.require('ol.layer.Tile');
|
|
||||||
goog.require('ol.layer.Vector');
|
goog.require('ol.layer.Vector');
|
||||||
goog.require('ol.source.OSM');
|
|
||||||
goog.require('ol.source.Vector');
|
goog.require('ol.source.Vector');
|
||||||
goog.require('ol.style.Fill');
|
goog.require('ol.style.Fill');
|
||||||
goog.require('ol.style.Stroke');
|
goog.require('ol.style.Stroke');
|
||||||
@@ -36,19 +34,14 @@ var vectorLayer = new ol.layer.Vector({
|
|||||||
url: 'data/geojson/countries.geojson',
|
url: 'data/geojson/countries.geojson',
|
||||||
format: new ol.format.GeoJSON()
|
format: new ol.format.GeoJSON()
|
||||||
}),
|
}),
|
||||||
style: function(feature, resolution) {
|
style: function(feature) {
|
||||||
style.getText().setText(resolution < 5000 ? feature.get('name') : '');
|
style.getText().setText(feature.get('name'));
|
||||||
return style;
|
return style;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var map = new ol.Map({
|
var map = new ol.Map({
|
||||||
layers: [
|
layers: [vectorLayer],
|
||||||
new ol.layer.Tile({
|
|
||||||
source: new ol.source.OSM()
|
|
||||||
}),
|
|
||||||
vectorLayer
|
|
||||||
],
|
|
||||||
target: 'map',
|
target: 'map',
|
||||||
view: new ol.View({
|
view: new ol.View({
|
||||||
center: [0, 0],
|
center: [0, 0],
|
||||||
@@ -56,36 +49,32 @@ var map = new ol.Map({
|
|||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
|
||||||
var highlightStyleCache = {};
|
var highlightStyle = new ol.style.Style({
|
||||||
|
stroke: new ol.style.Stroke({
|
||||||
|
color: '#f00',
|
||||||
|
width: 1
|
||||||
|
}),
|
||||||
|
fill: new ol.style.Fill({
|
||||||
|
color: 'rgba(255,0,0,0.1)'
|
||||||
|
}),
|
||||||
|
text: new ol.style.Text({
|
||||||
|
font: '12px Calibri,sans-serif',
|
||||||
|
fill: new ol.style.Fill({
|
||||||
|
color: '#000'
|
||||||
|
}),
|
||||||
|
stroke: new ol.style.Stroke({
|
||||||
|
color: '#f00',
|
||||||
|
width: 3
|
||||||
|
})
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
var featureOverlay = new ol.layer.Vector({
|
var featureOverlay = new ol.layer.Vector({
|
||||||
source: new ol.source.Vector(),
|
source: new ol.source.Vector(),
|
||||||
map: map,
|
map: map,
|
||||||
style: function(feature, resolution) {
|
style: function(feature) {
|
||||||
var text = resolution < 5000 ? feature.get('name') : '';
|
highlightStyle.getText().setText(feature.get('name'));
|
||||||
if (!highlightStyleCache[text]) {
|
return highlightStyle;
|
||||||
highlightStyleCache[text] = new ol.style.Style({
|
|
||||||
stroke: new ol.style.Stroke({
|
|
||||||
color: '#f00',
|
|
||||||
width: 1
|
|
||||||
}),
|
|
||||||
fill: new ol.style.Fill({
|
|
||||||
color: 'rgba(255,0,0,0.1)'
|
|
||||||
}),
|
|
||||||
text: new ol.style.Text({
|
|
||||||
font: '12px Calibri,sans-serif',
|
|
||||||
text: text,
|
|
||||||
fill: new ol.style.Fill({
|
|
||||||
color: '#000'
|
|
||||||
}),
|
|
||||||
stroke: new ol.style.Stroke({
|
|
||||||
color: '#f00',
|
|
||||||
width: 3
|
|
||||||
})
|
|
||||||
})
|
|
||||||
});
|
|
||||||
}
|
|
||||||
return highlightStyleCache[text];
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ docs: >
|
|||||||
With [Proj4js](http://proj4js.org/) integration, OpenLayers can transform coordinates between arbitrary projections.
|
With [Proj4js](http://proj4js.org/) integration, OpenLayers can transform coordinates between arbitrary projections.
|
||||||
tags: "wms, single image, proj4js, projection"
|
tags: "wms, single image, proj4js, projection"
|
||||||
resources:
|
resources:
|
||||||
- https://cdnjs.cloudflare.com/ajax/libs/proj4js/2.4.3/proj4.js
|
- https://cdnjs.cloudflare.com/ajax/libs/proj4js/2.4.4/proj4.js
|
||||||
- https://epsg.io/21781-1753.js
|
- https://epsg.io/21781-1753.js
|
||||||
---
|
---
|
||||||
<div id="map" class="map"></div>
|
<div id="map" class="map"></div>
|
||||||
|
|||||||
@@ -3,7 +3,13 @@ layout: example.html
|
|||||||
title: Zoomify
|
title: Zoomify
|
||||||
shortdesc: Example of a Zoomify source.
|
shortdesc: Example of a Zoomify source.
|
||||||
docs: >
|
docs: >
|
||||||
Zoomify is a format for deep-zooming into high resolution images. This example shows how to use the Zoomify source with a pixel projection.
|
Zoomify is a format for deep-zooming into high resolution images. This example shows how to use the Zoomify source with a pixel projection. Internet Imaging Protocol (IIP) with JTL extension is also handled.
|
||||||
tags: "zoomify, deep zoom, pixel, projection"
|
tags: "zoomify, deep zoom, IIP, pixel, projection"
|
||||||
---
|
---
|
||||||
<div id="map" class="map"></div>
|
<div id="map" class="map"></div>
|
||||||
|
<div class="controls">
|
||||||
|
<select id="zoomifyProtocol">
|
||||||
|
<option value="zoomify">Zoomify</option>
|
||||||
|
<option value="iip">IIP</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
|||||||
@@ -6,26 +6,47 @@ goog.require('ol.source.Zoomify');
|
|||||||
var imgWidth = 9911;
|
var imgWidth = 9911;
|
||||||
var imgHeight = 6100;
|
var imgHeight = 6100;
|
||||||
|
|
||||||
var source = new ol.source.Zoomify({
|
var zoomifyUrl = 'http://vips.vtech.fr/cgi-bin/iipsrv.fcgi?zoomify=' +
|
||||||
url: 'http://vips.vtech.fr/cgi-bin/iipsrv.fcgi?zoomify=' +
|
'/mnt/MD1/AD00/plan_CHU-4HD-01/FOND.TIF/';
|
||||||
'/mnt/MD1/AD00/plan_CHU-4HD-01/FOND.TIF/',
|
var iipUrl = 'http://vips.vtech.fr/cgi-bin/iipsrv.fcgi?FIF=' + '/mnt/MD1/AD00/plan_CHU-4HD-01/FOND.TIF' + '&JTL={z},{tileIndex}';
|
||||||
size: [imgWidth, imgHeight],
|
|
||||||
crossOrigin: 'anonymous'
|
var layer = new ol.layer.Tile({
|
||||||
|
source: new ol.source.Zoomify({
|
||||||
|
url: zoomifyUrl,
|
||||||
|
size: [imgWidth, imgHeight],
|
||||||
|
crossOrigin: 'anonymous'
|
||||||
|
})
|
||||||
});
|
});
|
||||||
|
|
||||||
var extent = [0, -imgHeight, imgWidth, 0];
|
var extent = [0, -imgHeight, imgWidth, 0];
|
||||||
|
|
||||||
var map = new ol.Map({
|
var map = new ol.Map({
|
||||||
layers: [
|
layers: [layer],
|
||||||
new ol.layer.Tile({
|
|
||||||
source: source
|
|
||||||
})
|
|
||||||
],
|
|
||||||
target: 'map',
|
target: 'map',
|
||||||
view: new ol.View({
|
view: new ol.View({
|
||||||
// adjust zoom levels to those provided by the source
|
// adjust zoom levels to those provided by the source
|
||||||
resolutions: source.getTileGrid().getResolutions(),
|
resolutions: layer.getSource().getTileGrid().getResolutions(),
|
||||||
// constrain the center: center cannot be set outside this extent
|
// constrain the center: center cannot be set outside this extent
|
||||||
extent: extent
|
extent: extent
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
map.getView().fit(extent);
|
map.getView().fit(extent);
|
||||||
|
|
||||||
|
var control = document.getElementById('zoomifyProtocol');
|
||||||
|
control.addEventListener('change', function(event) {
|
||||||
|
var value = event.currentTarget.value;
|
||||||
|
if (value === 'iip') {
|
||||||
|
layer.setSource(new ol.source.Zoomify({
|
||||||
|
url: iipUrl,
|
||||||
|
size: [imgWidth, imgHeight],
|
||||||
|
crossOrigin: 'anonymous'
|
||||||
|
}));
|
||||||
|
} else if (value === 'zoomify') {
|
||||||
|
layer.setSource(new ol.source.Zoomify({
|
||||||
|
url: zoomifyUrl,
|
||||||
|
size: [imgWidth, imgHeight],
|
||||||
|
crossOrigin: 'anonymous'
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ goog.require('ol.source.OSM');
|
|||||||
* Helper method for map-creation.
|
* Helper method for map-creation.
|
||||||
*
|
*
|
||||||
* @param {string} divId The id of the div for the map.
|
* @param {string} divId The id of the div for the map.
|
||||||
* @return {ol.Map} The ol.Map instance.
|
* @return {ol.PluggableMap} The ol.Map instance.
|
||||||
*/
|
*/
|
||||||
var createMap = function(divId) {
|
var createMap = function(divId) {
|
||||||
var source, layer, map, zoomslider;
|
var source, layer, map, zoomslider;
|
||||||
|
|||||||
@@ -13,7 +13,12 @@ common.getRendererFromQueryString = function(opt_default) {};
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @param {function(new:ol.style.Style, olx.style.StyleOptions=)} Style Style constructor.
|
||||||
|
* @param {function(new:ol.style.Fill, olx.style.FillOptions=)} Fill Fill constructor.
|
||||||
|
* @param {function(new:ol.style.Stroke, olx.style.StrokeOptions=)} Stroke Stroke constructor.
|
||||||
|
* @param {function(new:ol.style.Icon, olx.style.IconOptions=)} Icon Icon constructor.
|
||||||
|
* @param {function(new:ol.style.Text, olx.style.TextOptions=)} Text Text constructor.
|
||||||
* @return {function((ol.Feature|ol.render.Feature), number):
|
* @return {function((ol.Feature|ol.render.Feature), number):
|
||||||
* Array.<ol.style.Style>}
|
* Array.<ol.style.Style>}
|
||||||
*/
|
*/
|
||||||
var createMapboxStreetsV6Style = function() {};
|
var createMapboxStreetsV6Style = function(Style, Fill, Stroke, Icon, Text) {};
|
||||||
|
|||||||
@@ -181,7 +181,7 @@ oli.MapEvent = function() {};
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @type {ol.Map}
|
* @type {ol.PluggableMap}
|
||||||
*/
|
*/
|
||||||
oli.MapEvent.prototype.map;
|
oli.MapEvent.prototype.map;
|
||||||
|
|
||||||
@@ -229,7 +229,7 @@ oli.control.Control = function() {};
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {ol.Map} map Map.
|
* @param {ol.PluggableMap} map Map.
|
||||||
* @return {undefined} Undefined.
|
* @return {undefined} Undefined.
|
||||||
*/
|
*/
|
||||||
oli.control.Control.prototype.setMap = function(map) {};
|
oli.control.Control.prototype.setMap = function(map) {};
|
||||||
|
|||||||
293
externs/olx.js
293
externs/olx.js
@@ -109,7 +109,7 @@ olx.LogoOptions.prototype.src;
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @typedef {{map: (ol.Map|undefined),
|
* @typedef {{map: (ol.PluggableMap|undefined),
|
||||||
* maxLines: (number|undefined),
|
* maxLines: (number|undefined),
|
||||||
* strokeStyle: (ol.style.Stroke|undefined),
|
* strokeStyle: (ol.style.Stroke|undefined),
|
||||||
* targetSize: (number|undefined),
|
* targetSize: (number|undefined),
|
||||||
@@ -126,7 +126,7 @@ olx.GraticuleOptions;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Reference to an `ol.Map` object.
|
* Reference to an `ol.Map` object.
|
||||||
* @type {ol.Map|undefined}
|
* @type {ol.PluggableMap|undefined}
|
||||||
* @api
|
* @api
|
||||||
*/
|
*/
|
||||||
olx.GraticuleOptions.prototype.map;
|
olx.GraticuleOptions.prototype.map;
|
||||||
@@ -436,6 +436,50 @@ olx.MapOptions.prototype.target;
|
|||||||
olx.MapOptions.prototype.view;
|
olx.MapOptions.prototype.view;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Object literal with options for the {@link ol.Sphere.getLength} or
|
||||||
|
* {@link ol.Sphere.getArea} functions.
|
||||||
|
* @typedef {{projection: (ol.ProjectionLike|undefined),
|
||||||
|
* radius: (number|undefined)}}
|
||||||
|
*/
|
||||||
|
olx.SphereMetricOptions;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Projection of the geometry. By default, the geometry is assumed to be in
|
||||||
|
* EPSG:3857 (Web Mercator).
|
||||||
|
* @type {(ol.ProjectionLike|undefined)}
|
||||||
|
* @api
|
||||||
|
*/
|
||||||
|
olx.SphereMetricOptions.prototype.projection;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sphere radius. By default, the radius of the earth is used (Clarke 1866
|
||||||
|
* Authalic Sphere).
|
||||||
|
* @type {(number|undefined)}
|
||||||
|
* @api
|
||||||
|
*/
|
||||||
|
olx.SphereMetricOptions.prototype.radius;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Options for tile constructors.
|
||||||
|
* @typedef {{transition: (number|undefined)}}
|
||||||
|
*/
|
||||||
|
olx.TileOptions;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A duration for tile opacity transitions. By default, tiles will render with
|
||||||
|
* an opacity transition that lasts 250 ms. To change the duration, pass a
|
||||||
|
* number in milliseconds. A duration of 0 disables the opacity transition.
|
||||||
|
* @type {number|undefined}
|
||||||
|
* @api
|
||||||
|
*/
|
||||||
|
olx.TileOptions.prototype.transition;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Object literal with options for the {@link ol.Map#forEachFeatureAtPixel} and
|
* Object literal with options for the {@link ol.Map#forEachFeatureAtPixel} and
|
||||||
* {@link ol.Map#hasFeatureAtPixel} methods.
|
* {@link ol.Map#hasFeatureAtPixel} methods.
|
||||||
@@ -1843,6 +1887,7 @@ olx.format;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @typedef {{dataProjection: ol.ProjectionLike,
|
* @typedef {{dataProjection: ol.ProjectionLike,
|
||||||
|
* extent: (ol.Extent|undefined),
|
||||||
* featureProjection: ol.ProjectionLike,
|
* featureProjection: ol.ProjectionLike,
|
||||||
* rightHanded: (boolean|undefined)}}
|
* rightHanded: (boolean|undefined)}}
|
||||||
*/
|
*/
|
||||||
@@ -1861,6 +1906,15 @@ olx.format.ReadOptions;
|
|||||||
olx.format.ReadOptions.prototype.dataProjection;
|
olx.format.ReadOptions.prototype.dataProjection;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tile extent of the tile being read. This is only used and required for
|
||||||
|
* {@link ol.format.MVT}.
|
||||||
|
* @type {ol.Extent}
|
||||||
|
* @api
|
||||||
|
*/
|
||||||
|
olx.format.ReadOptions.prototype.extent;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Projection of the feature geometries created by the format reader. If not
|
* Projection of the feature geometries created by the format reader. If not
|
||||||
* provided, features will be returned in the `dataProjection`.
|
* provided, features will be returned in the `dataProjection`.
|
||||||
@@ -2710,6 +2764,7 @@ olx.interaction.DoubleClickZoomOptions.prototype.delta;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @typedef {{formatConstructors: (Array.<function(new: ol.format.Feature)>|undefined),
|
* @typedef {{formatConstructors: (Array.<function(new: ol.format.Feature)>|undefined),
|
||||||
|
* source: (ol.source.Vector|undefined),
|
||||||
* projection: ol.ProjectionLike,
|
* projection: ol.ProjectionLike,
|
||||||
* target: (Element|undefined)}}
|
* target: (Element|undefined)}}
|
||||||
*/
|
*/
|
||||||
@@ -2724,6 +2779,18 @@ olx.interaction.DragAndDropOptions;
|
|||||||
olx.interaction.DragAndDropOptions.prototype.formatConstructors;
|
olx.interaction.DragAndDropOptions.prototype.formatConstructors;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Optional vector source where features will be added. If a source is provided
|
||||||
|
* all existing features will be removed and new features will be added when
|
||||||
|
* they are dropped on the target. If you want to add features to a vector
|
||||||
|
* source without removing the existing features (append only), instead of
|
||||||
|
* providing the source option listen for the "addfeatures" event.
|
||||||
|
* @type {ol.source.Vector|undefined}
|
||||||
|
* @api
|
||||||
|
*/
|
||||||
|
olx.interaction.DragAndDropOptions.prototype.source;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Target projection. By default, the map's view's projection is used.
|
* Target projection. By default, the map's view's projection is used.
|
||||||
* @type {ol.ProjectionLike}
|
* @type {ol.ProjectionLike}
|
||||||
@@ -3242,7 +3309,7 @@ olx.interaction.ModifyOptions.prototype.condition;
|
|||||||
* A function that takes an {@link ol.MapBrowserEvent} and returns a boolean
|
* A function that takes an {@link ol.MapBrowserEvent} and returns a boolean
|
||||||
* to indicate whether that event should be handled.
|
* to indicate whether that event should be handled.
|
||||||
* By default, {@link ol.events.condition.singleClick} with
|
* By default, {@link ol.events.condition.singleClick} with
|
||||||
* {@link ol.events.condition.noModifierKeys} results in a vertex deletion.
|
* {@link ol.events.condition.altKeyOnly} results in a vertex deletion.
|
||||||
* @type {ol.EventsConditionType|undefined}
|
* @type {ol.EventsConditionType|undefined}
|
||||||
* @api
|
* @api
|
||||||
*/
|
*/
|
||||||
@@ -3971,7 +4038,7 @@ olx.layer.HeatmapOptions.prototype.zIndex;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @typedef {{opacity: (number|undefined),
|
* @typedef {{opacity: (number|undefined),
|
||||||
* map: (ol.Map|undefined),
|
* map: (ol.PluggableMap|undefined),
|
||||||
* source: (ol.source.Image|undefined),
|
* source: (ol.source.Image|undefined),
|
||||||
* visible: (boolean|undefined),
|
* visible: (boolean|undefined),
|
||||||
* extent: (ol.Extent|undefined),
|
* extent: (ol.Extent|undefined),
|
||||||
@@ -4003,7 +4070,7 @@ olx.layer.ImageOptions.prototype.source;
|
|||||||
* layers collection, and the layer will be rendered on top. This is useful for
|
* layers collection, and the layer will be rendered on top. This is useful for
|
||||||
* temporary layers. The standard way to add a layer to a map and have it
|
* temporary layers. The standard way to add a layer to a map and have it
|
||||||
* managed by the map is to use {@link ol.Map#addLayer}.
|
* managed by the map is to use {@link ol.Map#addLayer}.
|
||||||
* @type {ol.Map|undefined}
|
* @type {ol.PluggableMap|undefined}
|
||||||
* @api
|
* @api
|
||||||
*/
|
*/
|
||||||
olx.layer.ImageOptions.prototype.map;
|
olx.layer.ImageOptions.prototype.map;
|
||||||
@@ -4055,7 +4122,7 @@ olx.layer.ImageOptions.prototype.zIndex;
|
|||||||
* @typedef {{opacity: (number|undefined),
|
* @typedef {{opacity: (number|undefined),
|
||||||
* preload: (number|undefined),
|
* preload: (number|undefined),
|
||||||
* source: (ol.source.Tile|undefined),
|
* source: (ol.source.Tile|undefined),
|
||||||
* map: (ol.Map|undefined),
|
* map: (ol.PluggableMap|undefined),
|
||||||
* visible: (boolean|undefined),
|
* visible: (boolean|undefined),
|
||||||
* extent: (ol.Extent|undefined),
|
* extent: (ol.Extent|undefined),
|
||||||
* minResolution: (number|undefined),
|
* minResolution: (number|undefined),
|
||||||
@@ -4096,7 +4163,7 @@ olx.layer.TileOptions.prototype.source;
|
|||||||
* layers collection, and the layer will be rendered on top. This is useful for
|
* layers collection, and the layer will be rendered on top. This is useful for
|
||||||
* temporary layers. The standard way to add a layer to a map and have it
|
* temporary layers. The standard way to add a layer to a map and have it
|
||||||
* managed by the map is to use {@link ol.Map#addLayer}.
|
* managed by the map is to use {@link ol.Map#addLayer}.
|
||||||
* @type {ol.Map|undefined}
|
* @type {ol.PluggableMap|undefined}
|
||||||
* @api
|
* @api
|
||||||
*/
|
*/
|
||||||
olx.layer.TileOptions.prototype.map;
|
olx.layer.TileOptions.prototype.map;
|
||||||
@@ -4159,7 +4226,7 @@ olx.layer.TileOptions.prototype.zIndex;
|
|||||||
* opacity: (number|undefined),
|
* opacity: (number|undefined),
|
||||||
* renderBuffer: (number|undefined),
|
* renderBuffer: (number|undefined),
|
||||||
* source: (ol.source.Vector|undefined),
|
* source: (ol.source.Vector|undefined),
|
||||||
* map: (ol.Map|undefined),
|
* map: (ol.PluggableMap|undefined),
|
||||||
* style: (ol.style.Style|Array.<ol.style.Style>|ol.StyleFunction|undefined),
|
* style: (ol.style.Style|Array.<ol.style.Style>|ol.StyleFunction|undefined),
|
||||||
* updateWhileAnimating: (boolean|undefined),
|
* updateWhileAnimating: (boolean|undefined),
|
||||||
* updateWhileInteracting: (boolean|undefined),
|
* updateWhileInteracting: (boolean|undefined),
|
||||||
@@ -4184,7 +4251,7 @@ olx.layer.VectorOptions.prototype.renderOrder;
|
|||||||
* layers collection, and the layer will be rendered on top. This is useful for
|
* layers collection, and the layer will be rendered on top. This is useful for
|
||||||
* temporary layers. The standard way to add a layer to a map and have it
|
* temporary layers. The standard way to add a layer to a map and have it
|
||||||
* managed by the map is to use {@link ol.Map#addLayer}.
|
* managed by the map is to use {@link ol.Map#addLayer}.
|
||||||
* @type {ol.Map|undefined}
|
* @type {ol.PluggableMap|undefined}
|
||||||
* @api
|
* @api
|
||||||
*/
|
*/
|
||||||
olx.layer.VectorOptions.prototype.map;
|
olx.layer.VectorOptions.prototype.map;
|
||||||
@@ -4290,7 +4357,7 @@ olx.layer.VectorOptions.prototype.zIndex;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @typedef {{extent: (ol.Extent|undefined),
|
* @typedef {{extent: (ol.Extent|undefined),
|
||||||
* map: (ol.Map|undefined),
|
* map: (ol.PluggableMap|undefined),
|
||||||
* minResolution: (number|undefined),
|
* minResolution: (number|undefined),
|
||||||
* maxResolution: (number|undefined),
|
* maxResolution: (number|undefined),
|
||||||
* opacity: (number|undefined),
|
* opacity: (number|undefined),
|
||||||
@@ -4352,7 +4419,7 @@ olx.layer.VectorTileOptions.prototype.renderOrder;
|
|||||||
* layers collection, and the layer will be rendered on top. This is useful for
|
* layers collection, and the layer will be rendered on top. This is useful for
|
||||||
* temporary layers. The standard way to add a layer to a map and have it
|
* temporary layers. The standard way to add a layer to a map and have it
|
||||||
* managed by the map is to use {@link ol.Map#addLayer}.
|
* managed by the map is to use {@link ol.Map#addLayer}.
|
||||||
* @type {ol.Map|undefined}
|
* @type {ol.PluggableMap|undefined}
|
||||||
* @api
|
* @api
|
||||||
*/
|
*/
|
||||||
olx.layer.VectorTileOptions.prototype.map;
|
olx.layer.VectorTileOptions.prototype.map;
|
||||||
@@ -4547,7 +4614,8 @@ olx.source;
|
|||||||
* maxZoom: (number|undefined),
|
* maxZoom: (number|undefined),
|
||||||
* reprojectionErrorThreshold: (number|undefined),
|
* reprojectionErrorThreshold: (number|undefined),
|
||||||
* tileLoadFunction: (ol.TileLoadFunctionType|undefined),
|
* tileLoadFunction: (ol.TileLoadFunctionType|undefined),
|
||||||
* wrapX: (boolean|undefined)}}
|
* wrapX: (boolean|undefined),
|
||||||
|
* transition: (number|undefined)}}
|
||||||
*/
|
*/
|
||||||
olx.source.BingMapsOptions;
|
olx.source.BingMapsOptions;
|
||||||
|
|
||||||
@@ -4631,6 +4699,15 @@ olx.source.BingMapsOptions.prototype.tileLoadFunction;
|
|||||||
olx.source.BingMapsOptions.prototype.wrapX;
|
olx.source.BingMapsOptions.prototype.wrapX;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Duration of the opacity transition for rendering. To disable the opacity
|
||||||
|
* transition, pass `transition: 0`.
|
||||||
|
* @type {number|undefined}
|
||||||
|
* @api
|
||||||
|
*/
|
||||||
|
olx.source.BingMapsOptions.prototype.transition;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @typedef {{attributions: (ol.AttributionLike|undefined),
|
* @typedef {{attributions: (ol.AttributionLike|undefined),
|
||||||
* distance: (number|undefined),
|
* distance: (number|undefined),
|
||||||
@@ -4795,7 +4872,8 @@ olx.source.TileUTFGridOptions.prototype.url;
|
|||||||
* tileUrlFunction: (ol.TileUrlFunctionType|undefined),
|
* tileUrlFunction: (ol.TileUrlFunctionType|undefined),
|
||||||
* url: (string|undefined),
|
* url: (string|undefined),
|
||||||
* urls: (Array.<string>|undefined),
|
* urls: (Array.<string>|undefined),
|
||||||
* wrapX: (boolean|undefined)}}
|
* wrapX: (boolean|undefined),
|
||||||
|
* transition: (number|undefined)}}
|
||||||
*/
|
*/
|
||||||
olx.source.TileImageOptions;
|
olx.source.TileImageOptions;
|
||||||
|
|
||||||
@@ -4948,6 +5026,15 @@ olx.source.TileImageOptions.prototype.urls;
|
|||||||
olx.source.TileImageOptions.prototype.wrapX;
|
olx.source.TileImageOptions.prototype.wrapX;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Duration of the opacity transition for rendering. To disable the opacity
|
||||||
|
* transition, pass `transition: 0`.
|
||||||
|
* @type {number|undefined}
|
||||||
|
* @api
|
||||||
|
*/
|
||||||
|
olx.source.TileImageOptions.prototype.transition;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @typedef {{attributions: (ol.AttributionLike|undefined),
|
* @typedef {{attributions: (ol.AttributionLike|undefined),
|
||||||
* cacheSize: (number|undefined),
|
* cacheSize: (number|undefined),
|
||||||
@@ -4964,7 +5051,8 @@ olx.source.TileImageOptions.prototype.wrapX;
|
|||||||
* tileUrlFunction: (ol.TileUrlFunctionType|undefined),
|
* tileUrlFunction: (ol.TileUrlFunctionType|undefined),
|
||||||
* url: (string|undefined),
|
* url: (string|undefined),
|
||||||
* urls: (Array.<string>|undefined),
|
* urls: (Array.<string>|undefined),
|
||||||
* wrapX: (boolean|undefined)}}
|
* wrapX: (boolean|undefined),
|
||||||
|
* transition: (number|undefined)}}
|
||||||
*/
|
*/
|
||||||
olx.source.VectorTileOptions;
|
olx.source.VectorTileOptions;
|
||||||
|
|
||||||
@@ -5054,10 +5142,11 @@ olx.source.VectorTileOptions.prototype.tileGrid;
|
|||||||
* tile.setLoader(function() {
|
* tile.setLoader(function() {
|
||||||
* var data = // ... fetch data
|
* var data = // ... fetch data
|
||||||
* var format = tile.getFormat();
|
* var format = tile.getFormat();
|
||||||
* tile.setFeatures(format.readFeatures(data));
|
* tile.setFeatures(format.readFeatures(data, {
|
||||||
* tile.setProjection(format.readProjection(data));
|
* // uncomment the line below for ol.format.MVT only
|
||||||
* // uncomment the line below for ol.format.MVT only
|
* extent: tile.getExtent(),
|
||||||
* //tile.setExtent(format.getLastExtent());
|
* featureProjection: map.getView().getProjection()
|
||||||
|
* }));
|
||||||
* };
|
* };
|
||||||
* });
|
* });
|
||||||
* ```
|
* ```
|
||||||
@@ -5103,6 +5192,15 @@ olx.source.VectorTileOptions.prototype.urls;
|
|||||||
olx.source.VectorTileOptions.prototype.wrapX;
|
olx.source.VectorTileOptions.prototype.wrapX;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Duration of the opacity transition for rendering. To disable the opacity
|
||||||
|
* transition, pass `transition: 0`.
|
||||||
|
* @type {number|undefined}
|
||||||
|
* @api
|
||||||
|
*/
|
||||||
|
olx.source.VectorTileOptions.prototype.transition;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @typedef {{url: (string|undefined),
|
* @typedef {{url: (string|undefined),
|
||||||
* displayDpi: (number|undefined),
|
* displayDpi: (number|undefined),
|
||||||
@@ -6019,7 +6117,8 @@ olx.source.ImageStaticOptions.prototype.url;
|
|||||||
* tileLoadFunction: (ol.TileLoadFunctionType|undefined),
|
* tileLoadFunction: (ol.TileLoadFunctionType|undefined),
|
||||||
* url: (string|undefined),
|
* url: (string|undefined),
|
||||||
* urls: (Array.<string>|undefined),
|
* urls: (Array.<string>|undefined),
|
||||||
* wrapX: (boolean|undefined)}}
|
* wrapX: (boolean|undefined),
|
||||||
|
* transition: (number|undefined)}}
|
||||||
*/
|
*/
|
||||||
olx.source.TileArcGISRestOptions;
|
olx.source.TileArcGISRestOptions;
|
||||||
|
|
||||||
@@ -6133,6 +6232,15 @@ olx.source.TileArcGISRestOptions.prototype.url;
|
|||||||
olx.source.TileArcGISRestOptions.prototype.wrapX;
|
olx.source.TileArcGISRestOptions.prototype.wrapX;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Duration of the opacity transition for rendering. To disable the opacity
|
||||||
|
* transition, pass `transition: 0`.
|
||||||
|
* @type {number|undefined}
|
||||||
|
* @api
|
||||||
|
*/
|
||||||
|
olx.source.TileArcGISRestOptions.prototype.transition;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ArcGIS Rest service urls. Use this instead of `url` when the ArcGIS Service supports multiple
|
* ArcGIS Rest service urls. Use this instead of `url` when the ArcGIS Service supports multiple
|
||||||
* urls for export requests.
|
* urls for export requests.
|
||||||
@@ -6151,7 +6259,8 @@ olx.source.TileArcGISRestOptions.prototype.urls;
|
|||||||
* tileJSON: (TileJSON|undefined),
|
* tileJSON: (TileJSON|undefined),
|
||||||
* tileLoadFunction: (ol.TileLoadFunctionType|undefined),
|
* tileLoadFunction: (ol.TileLoadFunctionType|undefined),
|
||||||
* url: (string|undefined),
|
* url: (string|undefined),
|
||||||
* wrapX: (boolean|undefined)}}
|
* wrapX: (boolean|undefined),
|
||||||
|
* transition: (number|undefined)}}
|
||||||
*/
|
*/
|
||||||
olx.source.TileJSONOptions;
|
olx.source.TileJSONOptions;
|
||||||
|
|
||||||
@@ -6242,6 +6351,15 @@ olx.source.TileJSONOptions.prototype.url;
|
|||||||
olx.source.TileJSONOptions.prototype.wrapX;
|
olx.source.TileJSONOptions.prototype.wrapX;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Duration of the opacity transition for rendering. To disable the opacity
|
||||||
|
* transition, pass `transition: 0`.
|
||||||
|
* @type {number|undefined}
|
||||||
|
* @api
|
||||||
|
*/
|
||||||
|
olx.source.TileJSONOptions.prototype.transition;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @typedef {{attributions: (ol.AttributionLike|undefined),
|
* @typedef {{attributions: (ol.AttributionLike|undefined),
|
||||||
* cacheSize: (number|undefined),
|
* cacheSize: (number|undefined),
|
||||||
@@ -6260,7 +6378,8 @@ olx.source.TileJSONOptions.prototype.wrapX;
|
|||||||
* tileLoadFunction: (ol.TileLoadFunctionType|undefined),
|
* tileLoadFunction: (ol.TileLoadFunctionType|undefined),
|
||||||
* url: (string|undefined),
|
* url: (string|undefined),
|
||||||
* urls: (Array.<string>|undefined),
|
* urls: (Array.<string>|undefined),
|
||||||
* wrapX: (boolean|undefined)}}
|
* wrapX: (boolean|undefined),
|
||||||
|
* transition: (number|undefined)}}
|
||||||
*/
|
*/
|
||||||
olx.source.TileWMSOptions;
|
olx.source.TileWMSOptions;
|
||||||
|
|
||||||
@@ -6424,6 +6543,15 @@ olx.source.TileWMSOptions.prototype.urls;
|
|||||||
olx.source.TileWMSOptions.prototype.wrapX;
|
olx.source.TileWMSOptions.prototype.wrapX;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Duration of the opacity transition for rendering. To disable the opacity
|
||||||
|
* transition, pass `transition: 0`.
|
||||||
|
* @type {number|undefined}
|
||||||
|
* @api
|
||||||
|
*/
|
||||||
|
olx.source.TileWMSOptions.prototype.transition;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @typedef {{attributions: (ol.AttributionLike|undefined),
|
* @typedef {{attributions: (ol.AttributionLike|undefined),
|
||||||
* features: (Array.<ol.Feature>|ol.Collection.<ol.Feature>|undefined),
|
* features: (Array.<ol.Feature>|ol.Collection.<ol.Feature>|undefined),
|
||||||
@@ -6579,7 +6707,8 @@ olx.source.VectorOptions.prototype.wrapX;
|
|||||||
* tileClass: (function(new: ol.ImageTile, ol.TileCoord,
|
* tileClass: (function(new: ol.ImageTile, ol.TileCoord,
|
||||||
* ol.TileState, string, ?string,
|
* ol.TileState, string, ?string,
|
||||||
* ol.TileLoadFunctionType)|undefined),
|
* ol.TileLoadFunctionType)|undefined),
|
||||||
* wrapX: (boolean|undefined)}}
|
* wrapX: (boolean|undefined),
|
||||||
|
* transition: (number|undefined)}}
|
||||||
*/
|
*/
|
||||||
olx.source.WMTSOptions;
|
olx.source.WMTSOptions;
|
||||||
|
|
||||||
@@ -6763,6 +6892,15 @@ olx.source.WMTSOptions.prototype.urls;
|
|||||||
olx.source.WMTSOptions.prototype.wrapX;
|
olx.source.WMTSOptions.prototype.wrapX;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Duration of the opacity transition for rendering. To disable the opacity
|
||||||
|
* transition, pass `transition: 0`.
|
||||||
|
* @type {number|undefined}
|
||||||
|
* @api
|
||||||
|
*/
|
||||||
|
olx.source.WMTSOptions.prototype.transition;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @typedef {{attributions: (ol.AttributionLike|undefined),
|
* @typedef {{attributions: (ol.AttributionLike|undefined),
|
||||||
* cacheSize: (number|undefined),
|
* cacheSize: (number|undefined),
|
||||||
@@ -6780,7 +6918,8 @@ olx.source.WMTSOptions.prototype.wrapX;
|
|||||||
* tileUrlFunction: (ol.TileUrlFunctionType|undefined),
|
* tileUrlFunction: (ol.TileUrlFunctionType|undefined),
|
||||||
* url: (string|undefined),
|
* url: (string|undefined),
|
||||||
* urls: (Array.<string>|undefined),
|
* urls: (Array.<string>|undefined),
|
||||||
* wrapX: (boolean|undefined)}}
|
* wrapX: (boolean|undefined),
|
||||||
|
* transition: (number|undefined)}}
|
||||||
*/
|
*/
|
||||||
olx.source.XYZOptions;
|
olx.source.XYZOptions;
|
||||||
|
|
||||||
@@ -6936,6 +7075,16 @@ olx.source.XYZOptions.prototype.urls;
|
|||||||
*/
|
*/
|
||||||
olx.source.XYZOptions.prototype.wrapX;
|
olx.source.XYZOptions.prototype.wrapX;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Duration of the opacity transition for rendering. To disable the opacity
|
||||||
|
* transition, pass `transition: 0`.
|
||||||
|
* @type {number|undefined}
|
||||||
|
* @api
|
||||||
|
*/
|
||||||
|
olx.source.XYZOptions.prototype.transition;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @typedef {{attributions: (ol.AttributionLike|undefined),
|
* @typedef {{attributions: (ol.AttributionLike|undefined),
|
||||||
* cacheSize: (number|undefined),
|
* cacheSize: (number|undefined),
|
||||||
@@ -7060,7 +7209,8 @@ olx.source.CartoDBOptions.prototype.account;
|
|||||||
* reprojectionErrorThreshold: (number|undefined),
|
* reprojectionErrorThreshold: (number|undefined),
|
||||||
* url: !string,
|
* url: !string,
|
||||||
* tierSizeCalculation: (string|undefined),
|
* tierSizeCalculation: (string|undefined),
|
||||||
* size: ol.Size}}
|
* size: ol.Size,
|
||||||
|
* transition: (number|undefined)}}
|
||||||
*/
|
*/
|
||||||
olx.source.ZoomifyOptions;
|
olx.source.ZoomifyOptions;
|
||||||
|
|
||||||
@@ -7124,6 +7274,9 @@ olx.source.ZoomifyOptions.prototype.reprojectionErrorThreshold;
|
|||||||
* `http://my.zoomify.info/IMAGE.TIF/`. A URL template must include
|
* `http://my.zoomify.info/IMAGE.TIF/`. A URL template must include
|
||||||
* `{TileGroup}`, `{x}`, `{y}`, and `{z}` placeholders, e.g.
|
* `{TileGroup}`, `{x}`, `{y}`, and `{z}` placeholders, e.g.
|
||||||
* `http://my.zoomify.info/IMAGE.TIF/{TileGroup}/{z}-{x}-{y}.jpg`.
|
* `http://my.zoomify.info/IMAGE.TIF/{TileGroup}/{z}-{x}-{y}.jpg`.
|
||||||
|
* Internet Imaging Protocol (IIP) with JTL extension can be also used with
|
||||||
|
* `{tileIndex}` and `{z}` placeholders, e.g.
|
||||||
|
* `http://my.zoomify.info?FIF=IMAGE.TIF&JTL={z},{tileIndex}`.
|
||||||
* A `{?-?}` template pattern, for example `subdomain{a-f}.domain.com`, may be
|
* A `{?-?}` template pattern, for example `subdomain{a-f}.domain.com`, may be
|
||||||
* used instead of defining each one separately in the `urls` option.
|
* used instead of defining each one separately in the `urls` option.
|
||||||
* @type {!string}
|
* @type {!string}
|
||||||
@@ -7148,6 +7301,15 @@ olx.source.ZoomifyOptions.prototype.tierSizeCalculation;
|
|||||||
olx.source.ZoomifyOptions.prototype.size;
|
olx.source.ZoomifyOptions.prototype.size;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Duration of the opacity transition for rendering. To disable the opacity
|
||||||
|
* transition, pass `transition: 0`.
|
||||||
|
* @type {number|undefined}
|
||||||
|
* @api
|
||||||
|
*/
|
||||||
|
olx.source.ZoomifyOptions.prototype.transition;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Namespace.
|
* Namespace.
|
||||||
* @type {Object}
|
* @type {Object}
|
||||||
@@ -7604,8 +7766,11 @@ olx.style.StrokeOptions.prototype.width;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @typedef {{font: (string|undefined),
|
* @typedef {{font: (string|undefined),
|
||||||
|
* exceedLength: (boolean|undefined),
|
||||||
|
* maxAngle: (number|undefined),
|
||||||
* offsetX: (number|undefined),
|
* offsetX: (number|undefined),
|
||||||
* offsetY: (number|undefined),
|
* offsetY: (number|undefined),
|
||||||
|
* placement: (ol.style.TextPlacement|string|undefined),
|
||||||
* scale: (number|undefined),
|
* scale: (number|undefined),
|
||||||
* rotateWithView: (boolean|undefined),
|
* rotateWithView: (boolean|undefined),
|
||||||
* rotation: (number|undefined),
|
* rotation: (number|undefined),
|
||||||
@@ -7618,6 +7783,16 @@ olx.style.StrokeOptions.prototype.width;
|
|||||||
olx.style.TextOptions;
|
olx.style.TextOptions;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* For polygon labels or when `placement` is set to `'line'`, allow text to
|
||||||
|
* exceed the width of the polygon at the the label position or the length of
|
||||||
|
* the path that it follows. Default is `false`.
|
||||||
|
* @type {boolean|undefined}
|
||||||
|
* @api
|
||||||
|
*/
|
||||||
|
olx.style.TextOptions.prototype.exceedLength;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Font style as CSS 'font' value, see:
|
* Font style as CSS 'font' value, see:
|
||||||
* {@link https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/font}.
|
* {@link https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/font}.
|
||||||
@@ -7628,6 +7803,16 @@ olx.style.TextOptions;
|
|||||||
olx.style.TextOptions.prototype.font;
|
olx.style.TextOptions.prototype.font;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* When `placement` is set to `'line'`, allow a maximum angle between adjacent
|
||||||
|
* characters. The expected value is in radians, and the default is 45°
|
||||||
|
* (`Math.PI / 4`).
|
||||||
|
* @type {number|undefined}
|
||||||
|
* @api
|
||||||
|
*/
|
||||||
|
olx.style.TextOptions.prototype.maxAngle;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Horizontal text offset in pixels. A positive will shift the text right.
|
* Horizontal text offset in pixels. A positive will shift the text right.
|
||||||
* Default is `0`.
|
* Default is `0`.
|
||||||
@@ -7646,6 +7831,14 @@ olx.style.TextOptions.prototype.offsetX;
|
|||||||
olx.style.TextOptions.prototype.offsetY;
|
olx.style.TextOptions.prototype.offsetY;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Text placement.
|
||||||
|
* @type {ol.style.TextPlacement|undefined}
|
||||||
|
* @api
|
||||||
|
*/
|
||||||
|
olx.style.TextOptions.prototype.placement;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Scale.
|
* Scale.
|
||||||
* @type {number|undefined}
|
* @type {number|undefined}
|
||||||
@@ -7680,7 +7873,9 @@ olx.style.TextOptions.prototype.text;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Text alignment. Possible values: 'left', 'right', 'center', 'end' or 'start'.
|
* Text alignment. Possible values: 'left', 'right', 'center', 'end' or 'start'.
|
||||||
* Default is 'start'.
|
* Default is 'center' for `placement: 'point'`. For `placement: 'line'`, the
|
||||||
|
* default is to let the renderer choose a placement where `maxAngle` is not
|
||||||
|
* exceeded.
|
||||||
* @type {string|undefined}
|
* @type {string|undefined}
|
||||||
* @api
|
* @api
|
||||||
*/
|
*/
|
||||||
@@ -7689,7 +7884,7 @@ olx.style.TextOptions.prototype.textAlign;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Text base line. Possible values: 'bottom', 'top', 'middle', 'alphabetic',
|
* Text base line. Possible values: 'bottom', 'top', 'middle', 'alphabetic',
|
||||||
* 'hanging', 'ideographic'. Default is 'alphabetic'.
|
* 'hanging', 'ideographic'. Default is 'middle'.
|
||||||
* @type {string|undefined}
|
* @type {string|undefined}
|
||||||
* @api
|
* @api
|
||||||
*/
|
*/
|
||||||
@@ -8250,3 +8445,49 @@ olx.style.AtlasManagerOptions.prototype.maxSize;
|
|||||||
* @api
|
* @api
|
||||||
*/
|
*/
|
||||||
olx.style.AtlasManagerOptions.prototype.space;
|
olx.style.AtlasManagerOptions.prototype.space;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef {{handles: function(ol.renderer.Type):boolean,
|
||||||
|
* create: function(Element, ol.PluggableMap):ol.renderer.Map}}
|
||||||
|
*/
|
||||||
|
olx.MapRendererPlugin;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine if this renderer handles the provided layer.
|
||||||
|
* @type {function(ol.renderer.Type):boolean}
|
||||||
|
* @api
|
||||||
|
*/
|
||||||
|
olx.MapRendererPlugin.prototype.handles;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create the map renderer.
|
||||||
|
* @type {function(Element, ol.PluggableMap):ol.renderer.Map}
|
||||||
|
* @api
|
||||||
|
*/
|
||||||
|
olx.MapRendererPlugin.prototype.create;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef {{handles: function(ol.renderer.Type, ol.layer.Layer):boolean,
|
||||||
|
* create: function(ol.renderer.Map, ol.layer.Layer):ol.renderer.Layer}}
|
||||||
|
*/
|
||||||
|
olx.LayerRendererPlugin;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine if this renderer handles the provided layer.
|
||||||
|
* @type {function(ol.renderer.Type, ol.layer.Layer):boolean}
|
||||||
|
* @api
|
||||||
|
*/
|
||||||
|
olx.LayerRendererPlugin.prototype.handles;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a layer renderer.
|
||||||
|
* @type {function(ol.renderer.Map, ol.layer.Layer):ol.renderer.Layer}
|
||||||
|
* @api
|
||||||
|
*/
|
||||||
|
olx.LayerRendererPlugin.prototype.create;
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ For custom subclasses in applications, which can be created using `ol.inherits`,
|
|||||||
oli.control.Control = function() {};
|
oli.control.Control = function() {};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {ol.Map} map Map.
|
* @param {ol.PluggableMap} map Map.
|
||||||
* @return {undefined} Undefined.
|
* @return {undefined} Undefined.
|
||||||
*/
|
*/
|
||||||
oli.control.Control.prototype.setMap = function(map) {};
|
oli.control.Control.prototype.setMap = function(map) {};
|
||||||
@@ -74,7 +74,7 @@ ol.control.Control = function(options) {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Application subclasses may override this.
|
* Application subclasses may override this.
|
||||||
* @param {ol.Map} map Map.
|
* @param {ol.PluggableMap} map Map.
|
||||||
* @api
|
* @api
|
||||||
*/
|
*/
|
||||||
ol.control.Control.prototype.setMap = function(map) {
|
ol.control.Control.prototype.setMap = function(map) {
|
||||||
|
|||||||
@@ -75,6 +75,11 @@ TopoJSONGeometry.prototype.type;
|
|||||||
TopoJSONGeometry.prototype.id;
|
TopoJSONGeometry.prototype.id;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @type {Object.<string, *>|undefined}
|
||||||
|
*/
|
||||||
|
TopoJSONGeometry.prototype.properties;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @constructor
|
* @constructor
|
||||||
|
|||||||
59
package.json
59
package.json
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "openlayers",
|
"name": "openlayers",
|
||||||
"version": "4.2.0",
|
"version": "4.4.0",
|
||||||
"description": "Build tools and sources for developing OpenLayers based mapping applications",
|
"description": "Build tools and sources for developing OpenLayers based mapping applications",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"map",
|
"map",
|
||||||
@@ -12,10 +12,17 @@
|
|||||||
"install": "node tasks/install.js",
|
"install": "node tasks/install.js",
|
||||||
"postinstall": "closure-util update",
|
"postinstall": "closure-util update",
|
||||||
"start": "node tasks/serve.js",
|
"start": "node tasks/serve.js",
|
||||||
"pretest": "eslint tasks test test_rendering src examples",
|
"lint": "eslint tasks test src examples transforms",
|
||||||
"lint-package": "eslint --fix build/package",
|
"lint-package": "eslint --fix build/package",
|
||||||
"test": "node tasks/test.js",
|
"pretest": "npm run lint",
|
||||||
"debug-server": "node tasks/serve-lib.js"
|
"test": "npm run karma -- --single-run",
|
||||||
|
"debug-server": "node tasks/serve-lib.js",
|
||||||
|
"karma": "node tasks/test.js start test/karma.config.js",
|
||||||
|
"transform-src": "jscodeshift --transform transforms/module.js src",
|
||||||
|
"changecase-src": "node tasks/filename-case-from-module.js",
|
||||||
|
"transform-examples": "jscodeshift --transform transforms/module.js examples",
|
||||||
|
"transform-test": "jscodeshift --transform transforms/module.js test",
|
||||||
|
"transform": "npm run changecase-src && npm run transform-src && npm run transform-examples && npm run transform-test && npm run lint -- --fix"
|
||||||
},
|
},
|
||||||
"main": "dist/ol.js",
|
"main": "dist/ol.js",
|
||||||
"repository": {
|
"repository": {
|
||||||
@@ -32,26 +39,25 @@
|
|||||||
],
|
],
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"async": "2.5.0",
|
"async": "2.5.0",
|
||||||
"closure-util": "1.22.0",
|
"closure-util": "1.24.0",
|
||||||
"fs-extra": "4.0.1",
|
"fs-extra": "4.0.2",
|
||||||
"jsdoc": "3.5.4",
|
"jsdoc": "3.5.5",
|
||||||
"nomnom": "1.8.1",
|
"nomnom": "1.8.1",
|
||||||
"pbf": "3.0.5",
|
"pbf": "3.1.0",
|
||||||
"pixelworks": "1.1.0",
|
"pixelworks": "1.1.0",
|
||||||
"rbush": "2.0.1",
|
"rbush": "2.0.1",
|
||||||
"rollup": "^0.45.0",
|
"rollup": "^0.50.0",
|
||||||
"rollup-plugin-cleanup": "^1.0.0",
|
"rollup-plugin-cleanup": "^1.0.0",
|
||||||
"rollup-plugin-commonjs": "^8.0.2",
|
"rollup-plugin-commonjs": "^8.0.2",
|
||||||
"rollup-plugin-node-resolve": "^3.0.0",
|
"rollup-plugin-node-resolve": "^3.0.0",
|
||||||
"temp": "0.8.3",
|
"temp": "0.8.3",
|
||||||
"@mapbox/vector-tile": "1.3.0",
|
|
||||||
"walk": "2.3.9"
|
"walk": "2.3.9"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"clean-css-cli": "4.1.6",
|
"clean-css-cli": "4.1.10",
|
||||||
"coveralls": "2.13.1",
|
"coveralls": "3.0.0",
|
||||||
"debounce": "^1.0.0",
|
"debounce": "^1.0.0",
|
||||||
"eslint": "4.4.1",
|
"eslint": "4.8.0",
|
||||||
"eslint-config-openlayers": "7.0.0",
|
"eslint-config-openlayers": "7.0.0",
|
||||||
"eslint-plugin-openlayers-internal": "^3.1.0",
|
"eslint-plugin-openlayers-internal": "^3.1.0",
|
||||||
"expect.js": "0.3.1",
|
"expect.js": "0.3.1",
|
||||||
@@ -61,21 +67,31 @@
|
|||||||
"istanbul": "0.4.5",
|
"istanbul": "0.4.5",
|
||||||
"jquery": "3.2.1",
|
"jquery": "3.2.1",
|
||||||
"jscodeshift": "^0.3.30",
|
"jscodeshift": "^0.3.30",
|
||||||
|
"karma": "^1.7.0",
|
||||||
|
"karma-chrome-launcher": "^2.1.1",
|
||||||
|
"karma-coverage": "^1.1.1",
|
||||||
|
"karma-firefox-launcher": "^1.0.1",
|
||||||
|
"karma-mocha": "^1.3.0",
|
||||||
|
"karma-sauce-launcher": "^1.1.0",
|
||||||
"marked": "0.3.6",
|
"marked": "0.3.6",
|
||||||
"metalsmith": "2.3.0",
|
"metalsmith": "2.3.0",
|
||||||
"metalsmith-layouts": "1.8.1",
|
"metalsmith-layouts": "1.8.1",
|
||||||
"mocha": "3.5.0",
|
"mocha": "4.0.0",
|
||||||
"mocha-phantomjs-core": "^2.1.0",
|
"mocha-phantomjs-core": "^2.1.0",
|
||||||
"mustache": "2.3.0",
|
"mustache": "2.3.0",
|
||||||
"phantomjs-prebuilt": "2.1.14",
|
"phantomjs-prebuilt": "2.1.15",
|
||||||
"proj4": "2.4.3",
|
"pixelmatch": "^4.0.2",
|
||||||
"resemblejs": "2.2.4",
|
"proj4": "2.4.4",
|
||||||
"serve-files": "1.0.1",
|
"serve-files": "1.0.1",
|
||||||
"sinon": "3.1.0",
|
"sinon": "4.0.1",
|
||||||
"slimerjs": "0.10.3"
|
"slimerjs": "0.10.3",
|
||||||
|
"url-polyfill": "^1.0.7"
|
||||||
},
|
},
|
||||||
"eslintConfig": {
|
"eslintConfig": {
|
||||||
"extends": "openlayers",
|
"extends": "openlayers",
|
||||||
|
"parserOptions": {
|
||||||
|
"sourceType": "module"
|
||||||
|
},
|
||||||
"globals": {
|
"globals": {
|
||||||
"ArrayBuffer": false,
|
"ArrayBuffer": false,
|
||||||
"Float32Array": false,
|
"Float32Array": false,
|
||||||
@@ -133,11 +149,6 @@
|
|||||||
{
|
{
|
||||||
"module": "pixelworks",
|
"module": "pixelworks",
|
||||||
"import": "Processor"
|
"import": "Processor"
|
||||||
},
|
|
||||||
{
|
|
||||||
"module": "@mapbox/vector-tile",
|
|
||||||
"name": "vectortile",
|
|
||||||
"import": "VectorTile"
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,15 +1,14 @@
|
|||||||
{
|
{
|
||||||
"name": "ol",
|
"name": "ol",
|
||||||
"version": "4.2.0",
|
"version": "4.4.0",
|
||||||
"description": "OpenLayers as ES2015 modules",
|
"description": "OpenLayers as ES2015 modules",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"module": "index.js",
|
"module": "index.js",
|
||||||
"license": "BSD-2-Clause",
|
"license": "BSD-2-Clause",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"pbf": "3.0.5",
|
"pbf": "3.1.0",
|
||||||
"pixelworks": "1.1.0",
|
"pixelworks": "1.1.0",
|
||||||
"rbush": "2.0.1",
|
"rbush": "2.0.1"
|
||||||
"@mapbox/vector-tile": "1.3.0"
|
|
||||||
},
|
},
|
||||||
"browserify": {
|
"browserify": {
|
||||||
"transform": [
|
"transform": [
|
||||||
|
|||||||
86
src/ol/canvasmap.js
Normal file
86
src/ol/canvasmap.js
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
goog.provide('ol.CanvasMap');
|
||||||
|
|
||||||
|
goog.require('ol');
|
||||||
|
goog.require('ol.PluggableMap');
|
||||||
|
goog.require('ol.PluginType');
|
||||||
|
goog.require('ol.control');
|
||||||
|
goog.require('ol.interaction');
|
||||||
|
goog.require('ol.obj');
|
||||||
|
goog.require('ol.plugins');
|
||||||
|
goog.require('ol.renderer.canvas.ImageLayer');
|
||||||
|
goog.require('ol.renderer.canvas.Map');
|
||||||
|
goog.require('ol.renderer.canvas.TileLayer');
|
||||||
|
goog.require('ol.renderer.canvas.VectorLayer');
|
||||||
|
goog.require('ol.renderer.canvas.VectorTileLayer');
|
||||||
|
|
||||||
|
|
||||||
|
ol.plugins.register(ol.PluginType.MAP_RENDERER, ol.renderer.canvas.Map);
|
||||||
|
ol.plugins.registerMultiple(ol.PluginType.LAYER_RENDERER, [
|
||||||
|
ol.renderer.canvas.ImageLayer,
|
||||||
|
ol.renderer.canvas.TileLayer,
|
||||||
|
ol.renderer.canvas.VectorLayer,
|
||||||
|
ol.renderer.canvas.VectorTileLayer
|
||||||
|
]);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @classdesc
|
||||||
|
* The map is the core component of OpenLayers. For a map to render, a view,
|
||||||
|
* one or more layers, and a target container are needed:
|
||||||
|
*
|
||||||
|
* var map = new ol.CanvasMap({
|
||||||
|
* view: new ol.View({
|
||||||
|
* center: [0, 0],
|
||||||
|
* zoom: 1
|
||||||
|
* }),
|
||||||
|
* layers: [
|
||||||
|
* new ol.layer.Tile({
|
||||||
|
* source: new ol.source.OSM()
|
||||||
|
* })
|
||||||
|
* ],
|
||||||
|
* target: 'map'
|
||||||
|
* });
|
||||||
|
*
|
||||||
|
* The above snippet creates a map using a {@link ol.layer.Tile} to display
|
||||||
|
* {@link ol.source.OSM} OSM data and render it to a DOM element with the
|
||||||
|
* id `map`.
|
||||||
|
*
|
||||||
|
* The constructor places a viewport container (with CSS class name
|
||||||
|
* `ol-viewport`) in the target element (see `getViewport()`), and then two
|
||||||
|
* further elements within the viewport: one with CSS class name
|
||||||
|
* `ol-overlaycontainer-stopevent` for controls and some overlays, and one with
|
||||||
|
* CSS class name `ol-overlaycontainer` for other overlays (see the `stopEvent`
|
||||||
|
* option of {@link ol.Overlay} for the difference). The map itself is placed in
|
||||||
|
* a further element within the viewport.
|
||||||
|
*
|
||||||
|
* Layers are stored as a `ol.Collection` in layerGroups. A top-level group is
|
||||||
|
* provided by the library. This is what is accessed by `getLayerGroup` and
|
||||||
|
* `setLayerGroup`. Layers entered in the options are added to this group, and
|
||||||
|
* `addLayer` and `removeLayer` change the layer collection in the group.
|
||||||
|
* `getLayers` is a convenience function for `getLayerGroup().getLayers()`.
|
||||||
|
* Note that `ol.layer.Group` is a subclass of `ol.layer.Base`, so layers
|
||||||
|
* entered in the options or added with `addLayer` can be groups, which can
|
||||||
|
* contain further groups, and so on.
|
||||||
|
*
|
||||||
|
* @constructor
|
||||||
|
* @extends {ol.PluggableMap}
|
||||||
|
* @param {olx.MapOptions} options Map options.
|
||||||
|
* @fires ol.MapBrowserEvent
|
||||||
|
* @fires ol.MapEvent
|
||||||
|
* @fires ol.render.Event#postcompose
|
||||||
|
* @fires ol.render.Event#precompose
|
||||||
|
* @api
|
||||||
|
*/
|
||||||
|
ol.CanvasMap = function(options) {
|
||||||
|
options = ol.obj.assign({}, options);
|
||||||
|
delete options.renderer;
|
||||||
|
if (!options.controls) {
|
||||||
|
options.controls = ol.control.defaults();
|
||||||
|
}
|
||||||
|
if (!options.interactions) {
|
||||||
|
options.interactions = ol.interaction.defaults();
|
||||||
|
}
|
||||||
|
|
||||||
|
ol.PluggableMap.call(this, options);
|
||||||
|
};
|
||||||
|
ol.inherits(ol.CanvasMap, ol.PluggableMap);
|
||||||
@@ -54,7 +54,7 @@ ol.control.Control = function(options) {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
* @type {ol.Map}
|
* @type {ol.PluggableMap}
|
||||||
*/
|
*/
|
||||||
this.map_ = null;
|
this.map_ = null;
|
||||||
|
|
||||||
@@ -88,7 +88,7 @@ ol.control.Control.prototype.disposeInternal = function() {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the map associated with this control.
|
* Get the map associated with this control.
|
||||||
* @return {ol.Map} Map.
|
* @return {ol.PluggableMap} Map.
|
||||||
* @api
|
* @api
|
||||||
*/
|
*/
|
||||||
ol.control.Control.prototype.getMap = function() {
|
ol.control.Control.prototype.getMap = function() {
|
||||||
@@ -100,7 +100,7 @@ ol.control.Control.prototype.getMap = function() {
|
|||||||
* Remove the control from its current map and attach it to the new map.
|
* Remove the control from its current map and attach it to the new map.
|
||||||
* Subclasses may set up event handlers to get notified about changes to
|
* Subclasses may set up event handlers to get notified about changes to
|
||||||
* the map here.
|
* the map here.
|
||||||
* @param {ol.Map} map Map.
|
* @param {ol.PluggableMap} map Map.
|
||||||
* @override
|
* @override
|
||||||
* @api
|
* @api
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ goog.provide('ol.control.OverviewMap');
|
|||||||
|
|
||||||
goog.require('ol');
|
goog.require('ol');
|
||||||
goog.require('ol.Collection');
|
goog.require('ol.Collection');
|
||||||
goog.require('ol.Map');
|
goog.require('ol.PluggableMap');
|
||||||
goog.require('ol.MapEventType');
|
goog.require('ol.MapEventType');
|
||||||
goog.require('ol.MapProperty');
|
goog.require('ol.MapProperty');
|
||||||
goog.require('ol.Object');
|
goog.require('ol.Object');
|
||||||
@@ -97,10 +97,10 @@ ol.control.OverviewMap = function(opt_options) {
|
|||||||
this.ovmapDiv_.className = 'ol-overviewmap-map';
|
this.ovmapDiv_.className = 'ol-overviewmap-map';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @type {ol.Map}
|
* @type {ol.PluggableMap}
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
this.ovmap_ = new ol.Map({
|
this.ovmap_ = new ol.PluggableMap({
|
||||||
controls: new ol.Collection(),
|
controls: new ol.Collection(),
|
||||||
interactions: new ol.Collection(),
|
interactions: new ol.Collection(),
|
||||||
view: options.view
|
view: options.view
|
||||||
@@ -551,7 +551,7 @@ ol.control.OverviewMap.prototype.getCollapsed = function() {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the overview map.
|
* Return the overview map.
|
||||||
* @return {ol.Map} Overview map.
|
* @return {ol.PluggableMap} Overview map.
|
||||||
* @api
|
* @api
|
||||||
*/
|
*/
|
||||||
ol.control.OverviewMap.prototype.getOverviewMap = function() {
|
ol.control.OverviewMap.prototype.getOverviewMap = function() {
|
||||||
|
|||||||
@@ -57,6 +57,8 @@ goog.require('ol.math');
|
|||||||
*
|
*
|
||||||
* @see {@link http://www.w3.org/TR/orientation-event/}
|
* @see {@link http://www.w3.org/TR/orientation-event/}
|
||||||
*
|
*
|
||||||
|
* @deprecated This class is deprecated and will removed in the next major release.
|
||||||
|
*
|
||||||
* @constructor
|
* @constructor
|
||||||
* @extends {ol.Object}
|
* @extends {ol.Object}
|
||||||
* @param {olx.DeviceOrientationOptions=} opt_options Options.
|
* @param {olx.DeviceOrientationOptions=} opt_options Options.
|
||||||
|
|||||||
@@ -7,7 +7,10 @@ goog.require('ol.format.filter.LogicalNary');
|
|||||||
* @classdesc
|
* @classdesc
|
||||||
* Represents a logical `<And>` operator between two or more filter conditions.
|
* Represents a logical `<And>` operator between two or more filter conditions.
|
||||||
*
|
*
|
||||||
|
* deprecated: This class will no longer be exported starting from the next major version.
|
||||||
|
*
|
||||||
* @constructor
|
* @constructor
|
||||||
|
* @abstract
|
||||||
* @param {...ol.format.filter.Filter} conditions Conditions.
|
* @param {...ol.format.filter.Filter} conditions Conditions.
|
||||||
* @extends {ol.format.filter.LogicalNary}
|
* @extends {ol.format.filter.LogicalNary}
|
||||||
* @api
|
* @api
|
||||||
|
|||||||
@@ -9,7 +9,10 @@ goog.require('ol.format.filter.Filter');
|
|||||||
* Abstract class; normally only used for creating subclasses and not instantiated in apps.
|
* Abstract class; normally only used for creating subclasses and not instantiated in apps.
|
||||||
* Base class for WFS GetFeature property comparison filters.
|
* Base class for WFS GetFeature property comparison filters.
|
||||||
*
|
*
|
||||||
|
* deprecated: This class will no longer be exported starting from the next major version.
|
||||||
|
*
|
||||||
* @constructor
|
* @constructor
|
||||||
|
* @abstract
|
||||||
* @param {!string} tagName The XML tag name for this filter.
|
* @param {!string} tagName The XML tag name for this filter.
|
||||||
* @param {!string} propertyName Name of the context property to compare.
|
* @param {!string} propertyName Name of the context property to compare.
|
||||||
* @extends {ol.format.filter.Filter}
|
* @extends {ol.format.filter.Filter}
|
||||||
|
|||||||
@@ -9,7 +9,10 @@ goog.require('ol.format.filter.Comparison');
|
|||||||
* Abstract class; normally only used for creating subclasses and not instantiated in apps.
|
* Abstract class; normally only used for creating subclasses and not instantiated in apps.
|
||||||
* Base class for WFS GetFeature property binary comparison filters.
|
* Base class for WFS GetFeature property binary comparison filters.
|
||||||
*
|
*
|
||||||
|
* deprecated: This class will no longer be exported starting from the next major version.
|
||||||
|
*
|
||||||
* @constructor
|
* @constructor
|
||||||
|
* @abstract
|
||||||
* @param {!string} tagName The XML tag name for this filter.
|
* @param {!string} tagName The XML tag name for this filter.
|
||||||
* @param {!string} propertyName Name of the context property to compare.
|
* @param {!string} propertyName Name of the context property to compare.
|
||||||
* @param {!(string|number)} expression The value to compare.
|
* @param {!(string|number)} expression The value to compare.
|
||||||
|
|||||||
@@ -6,7 +6,10 @@ goog.provide('ol.format.filter.Filter');
|
|||||||
* Abstract class; normally only used for creating subclasses and not instantiated in apps.
|
* Abstract class; normally only used for creating subclasses and not instantiated in apps.
|
||||||
* Base class for WFS GetFeature filters.
|
* Base class for WFS GetFeature filters.
|
||||||
*
|
*
|
||||||
|
* deprecated: This class will no longer be exported starting from the next major version.
|
||||||
|
*
|
||||||
* @constructor
|
* @constructor
|
||||||
|
* @abstract
|
||||||
* @param {!string} tagName The XML tag name for this filter.
|
* @param {!string} tagName The XML tag name for this filter.
|
||||||
* @struct
|
* @struct
|
||||||
* @api
|
* @api
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ goog.require('ol.format.filter.Filter');
|
|||||||
* Base class for WFS GetFeature n-ary logical filters.
|
* Base class for WFS GetFeature n-ary logical filters.
|
||||||
*
|
*
|
||||||
* @constructor
|
* @constructor
|
||||||
|
* @abstract
|
||||||
* @param {!string} tagName The XML tag name for this filter.
|
* @param {!string} tagName The XML tag name for this filter.
|
||||||
* @param {...ol.format.filter.Filter} conditions Conditions.
|
* @param {...ol.format.filter.Filter} conditions Conditions.
|
||||||
* @extends {ol.format.filter.Filter}
|
* @extends {ol.format.filter.Filter}
|
||||||
|
|||||||
@@ -6,10 +6,14 @@ goog.require('ol.format.filter.Filter');
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @classdesc
|
* @classdesc
|
||||||
|
* Abstract class; normally only used for creating subclasses and not instantiated in apps.
|
||||||
* Represents a spatial operator to test whether a geometry-valued property
|
* Represents a spatial operator to test whether a geometry-valued property
|
||||||
* relates to a given geometry.
|
* relates to a given geometry.
|
||||||
*
|
*
|
||||||
|
* deprecated: This class will no longer be exported starting from the next major version.
|
||||||
|
*
|
||||||
* @constructor
|
* @constructor
|
||||||
|
* @abstract
|
||||||
* @param {!string} tagName The XML tag name for this filter.
|
* @param {!string} tagName The XML tag name for this filter.
|
||||||
* @param {!string} geometryName Geometry name to use.
|
* @param {!string} geometryName Geometry name to use.
|
||||||
* @param {!ol.geom.Geometry} geometry Geometry.
|
* @param {!ol.geom.Geometry} geometry Geometry.
|
||||||
|
|||||||
@@ -67,6 +67,13 @@ ol.format.GML3 = function(opt_options) {
|
|||||||
this.schemaLocation = options.schemaLocation ?
|
this.schemaLocation = options.schemaLocation ?
|
||||||
options.schemaLocation : ol.format.GML3.schemaLocation_;
|
options.schemaLocation : ol.format.GML3.schemaLocation_;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @private
|
||||||
|
* @type {boolean}
|
||||||
|
*/
|
||||||
|
this.hasZ = options.hasZ !== undefined ?
|
||||||
|
options.hasZ : false;
|
||||||
|
|
||||||
};
|
};
|
||||||
ol.inherits(ol.format.GML3, ol.format.GMLBase);
|
ol.inherits(ol.format.GML3, ol.format.GMLBase);
|
||||||
|
|
||||||
@@ -345,7 +352,7 @@ ol.format.GML3.prototype.readFlatPosList_ = function(node, objectStack) {
|
|||||||
var s = ol.xml.getAllTextContent(node, false).replace(/^\s*|\s*$/g, '');
|
var s = ol.xml.getAllTextContent(node, false).replace(/^\s*|\s*$/g, '');
|
||||||
var context = objectStack[0];
|
var context = objectStack[0];
|
||||||
var containerSrs = context['srsName'];
|
var containerSrs = context['srsName'];
|
||||||
var containerDimension = node.parentNode.getAttribute('srsDimension');
|
var contextDimension = context['srsDimension'];
|
||||||
var axisOrientation = 'enu';
|
var axisOrientation = 'enu';
|
||||||
if (containerSrs) {
|
if (containerSrs) {
|
||||||
var proj = ol.proj.get(containerSrs);
|
var proj = ol.proj.get(containerSrs);
|
||||||
@@ -360,8 +367,11 @@ ol.format.GML3.prototype.readFlatPosList_ = function(node, objectStack) {
|
|||||||
} else if (node.getAttribute('dimension')) {
|
} else if (node.getAttribute('dimension')) {
|
||||||
dim = ol.format.XSD.readNonNegativeIntegerString(
|
dim = ol.format.XSD.readNonNegativeIntegerString(
|
||||||
node.getAttribute('dimension'));
|
node.getAttribute('dimension'));
|
||||||
} else if (containerDimension) {
|
} else if (node.parentNode.getAttribute('srsDimension')) {
|
||||||
dim = ol.format.XSD.readNonNegativeIntegerString(containerDimension);
|
dim = ol.format.XSD.readNonNegativeIntegerString(
|
||||||
|
node.parentNode.getAttribute('srsDimension'));
|
||||||
|
} else if (contextDimension) {
|
||||||
|
dim = ol.format.XSD.readNonNegativeIntegerString(contextDimension);
|
||||||
}
|
}
|
||||||
var x, y, z;
|
var x, y, z;
|
||||||
var flatCoordinates = [];
|
var flatCoordinates = [];
|
||||||
@@ -566,6 +576,8 @@ ol.format.GML3.prototype.SEGMENTS_PARSERS_ = {
|
|||||||
ol.format.GML3.prototype.writePos_ = function(node, value, objectStack) {
|
ol.format.GML3.prototype.writePos_ = function(node, value, objectStack) {
|
||||||
var context = objectStack[objectStack.length - 1];
|
var context = objectStack[objectStack.length - 1];
|
||||||
var hasZ = context['hasZ'];
|
var hasZ = context['hasZ'];
|
||||||
|
var srsDimension = hasZ ? 3 : 2;
|
||||||
|
node.setAttribute('srsDimension', srsDimension);
|
||||||
var srsName = context['srsName'];
|
var srsName = context['srsName'];
|
||||||
var axisOrientation = 'enu';
|
var axisOrientation = 'enu';
|
||||||
if (srsName) {
|
if (srsName) {
|
||||||
@@ -622,6 +634,8 @@ ol.format.GML3.prototype.getCoords_ = function(point, opt_srsName, opt_hasZ) {
|
|||||||
ol.format.GML3.prototype.writePosList_ = function(node, value, objectStack) {
|
ol.format.GML3.prototype.writePosList_ = function(node, value, objectStack) {
|
||||||
var context = objectStack[objectStack.length - 1];
|
var context = objectStack[objectStack.length - 1];
|
||||||
var hasZ = context['hasZ'];
|
var hasZ = context['hasZ'];
|
||||||
|
var srsDimension = hasZ ? 3 : 2;
|
||||||
|
node.setAttribute('srsDimension', srsDimension);
|
||||||
var srsName = context['srsName'];
|
var srsName = context['srsName'];
|
||||||
// only 2d for simple features profile
|
// only 2d for simple features profile
|
||||||
var points = value.getCoordinates();
|
var points = value.getCoordinates();
|
||||||
|
|||||||
@@ -198,6 +198,7 @@ ol.format.GMLBase.prototype.readFeaturesInternal = function(node, objectStack) {
|
|||||||
ol.format.GMLBase.prototype.readGeometryElement = function(node, objectStack) {
|
ol.format.GMLBase.prototype.readGeometryElement = function(node, objectStack) {
|
||||||
var context = /** @type {Object} */ (objectStack[0]);
|
var context = /** @type {Object} */ (objectStack[0]);
|
||||||
context['srsName'] = node.firstElementChild.getAttribute('srsName');
|
context['srsName'] = node.firstElementChild.getAttribute('srsName');
|
||||||
|
context['srsDimension'] = node.firstElementChild.getAttribute('srsDimension');
|
||||||
/** @type {ol.geom.Geometry} */
|
/** @type {ol.geom.Geometry} */
|
||||||
var geometry = ol.xml.pushParseAndPop(null,
|
var geometry = ol.xml.pushParseAndPop(null,
|
||||||
this.GEOMETRY_PARSERS_, node, objectStack, this);
|
this.GEOMETRY_PARSERS_, node, objectStack, this);
|
||||||
|
|||||||
@@ -488,8 +488,12 @@ ol.format.KML.readFlatCoordinates_ = function(node) {
|
|||||||
*/
|
*/
|
||||||
ol.format.KML.readURI_ = function(node) {
|
ol.format.KML.readURI_ = function(node) {
|
||||||
var s = ol.xml.getAllTextContent(node, false).trim();
|
var s = ol.xml.getAllTextContent(node, false).trim();
|
||||||
if (node.baseURI && node.baseURI !== 'about:blank') {
|
var baseURI = node.baseURI;
|
||||||
var url = new URL(s, node.baseURI);
|
if (!baseURI || baseURI == 'about:blank') {
|
||||||
|
baseURI = window.location.href;
|
||||||
|
}
|
||||||
|
if (baseURI) {
|
||||||
|
var url = new URL(s, baseURI);
|
||||||
return url.href;
|
return url.href;
|
||||||
} else {
|
} else {
|
||||||
return s;
|
return s;
|
||||||
@@ -1065,19 +1069,25 @@ ol.format.KML.setCommonGeometryProperties_ = function(multiGeometry,
|
|||||||
geometries) {
|
geometries) {
|
||||||
var ii = geometries.length;
|
var ii = geometries.length;
|
||||||
var extrudes = new Array(geometries.length);
|
var extrudes = new Array(geometries.length);
|
||||||
|
var tessellates = new Array(geometries.length);
|
||||||
var altitudeModes = new Array(geometries.length);
|
var altitudeModes = new Array(geometries.length);
|
||||||
var geometry, i, hasExtrude, hasAltitudeMode;
|
var geometry, i, hasExtrude, hasTessellate, hasAltitudeMode;
|
||||||
hasExtrude = hasAltitudeMode = false;
|
hasExtrude = hasTessellate = hasAltitudeMode = false;
|
||||||
for (i = 0; i < ii; ++i) {
|
for (i = 0; i < ii; ++i) {
|
||||||
geometry = geometries[i];
|
geometry = geometries[i];
|
||||||
extrudes[i] = geometry.get('extrude');
|
extrudes[i] = geometry.get('extrude');
|
||||||
|
tessellates[i] = geometry.get('tessellate');
|
||||||
altitudeModes[i] = geometry.get('altitudeMode');
|
altitudeModes[i] = geometry.get('altitudeMode');
|
||||||
hasExtrude = hasExtrude || extrudes[i] !== undefined;
|
hasExtrude = hasExtrude || extrudes[i] !== undefined;
|
||||||
|
hasTessellate = hasTessellate || tessellates[i] !== undefined;
|
||||||
hasAltitudeMode = hasAltitudeMode || altitudeModes[i];
|
hasAltitudeMode = hasAltitudeMode || altitudeModes[i];
|
||||||
}
|
}
|
||||||
if (hasExtrude) {
|
if (hasExtrude) {
|
||||||
multiGeometry.set('extrude', extrudes);
|
multiGeometry.set('extrude', extrudes);
|
||||||
}
|
}
|
||||||
|
if (hasTessellate) {
|
||||||
|
multiGeometry.set('tessellate', tessellates);
|
||||||
|
}
|
||||||
if (hasAltitudeMode) {
|
if (hasAltitudeMode) {
|
||||||
multiGeometry.set('altitudeMode', altitudeModes);
|
multiGeometry.set('altitudeMode', altitudeModes);
|
||||||
}
|
}
|
||||||
@@ -1371,6 +1381,7 @@ ol.format.KML.LOD_PARSERS_ = ol.xml.makeStructureNS(
|
|||||||
ol.format.KML.EXTRUDE_AND_ALTITUDE_MODE_PARSERS_ = ol.xml.makeStructureNS(
|
ol.format.KML.EXTRUDE_AND_ALTITUDE_MODE_PARSERS_ = ol.xml.makeStructureNS(
|
||||||
ol.format.KML.NAMESPACE_URIS_, {
|
ol.format.KML.NAMESPACE_URIS_, {
|
||||||
'extrude': ol.xml.makeObjectPropertySetter(ol.format.XSD.readBoolean),
|
'extrude': ol.xml.makeObjectPropertySetter(ol.format.XSD.readBoolean),
|
||||||
|
'tessellate': ol.xml.makeObjectPropertySetter(ol.format.XSD.readBoolean),
|
||||||
'altitudeMode': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString)
|
'altitudeMode': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString)
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1737,8 +1748,12 @@ ol.format.KML.prototype.readSharedStyle_ = function(node, objectStack) {
|
|||||||
var style = ol.format.KML.readStyle_(node, objectStack);
|
var style = ol.format.KML.readStyle_(node, objectStack);
|
||||||
if (style) {
|
if (style) {
|
||||||
var styleUri;
|
var styleUri;
|
||||||
if (node.baseURI && node.baseURI !== 'about:blank') {
|
var baseURI = node.baseURI;
|
||||||
var url = new URL('#' + id, node.baseURI);
|
if (!baseURI || baseURI == 'about:blank') {
|
||||||
|
baseURI = window.location.href;
|
||||||
|
}
|
||||||
|
if (baseURI) {
|
||||||
|
var url = new URL('#' + id, baseURI);
|
||||||
styleUri = url.href;
|
styleUri = url.href;
|
||||||
} else {
|
} else {
|
||||||
styleUri = '#' + id;
|
styleUri = '#' + id;
|
||||||
@@ -1764,8 +1779,12 @@ ol.format.KML.prototype.readSharedStyleMap_ = function(node, objectStack) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var styleUri;
|
var styleUri;
|
||||||
if (node.baseURI && node.baseURI !== 'about:blank') {
|
var baseURI = node.baseURI;
|
||||||
var url = new URL('#' + id, node.baseURI);
|
if (!baseURI || baseURI == 'about:blank') {
|
||||||
|
baseURI = window.location.href;
|
||||||
|
}
|
||||||
|
if (baseURI) {
|
||||||
|
var url = new URL('#' + id, baseURI);
|
||||||
styleUri = url.href;
|
styleUri = url.href;
|
||||||
} else {
|
} else {
|
||||||
styleUri = '#' + id;
|
styleUri = '#' + id;
|
||||||
@@ -2468,10 +2487,16 @@ ol.format.KML.writePrimitiveGeometry_ = function(node, geometry, objectStack) {
|
|||||||
var /** @type {ol.XmlNodeStackItem} */ context = {node: node};
|
var /** @type {ol.XmlNodeStackItem} */ context = {node: node};
|
||||||
context['layout'] = geometry.getLayout();
|
context['layout'] = geometry.getLayout();
|
||||||
context['stride'] = geometry.getStride();
|
context['stride'] = geometry.getStride();
|
||||||
ol.xml.pushSerializeAndPop(context,
|
|
||||||
ol.format.KML.PRIMITIVE_GEOMETRY_SERIALIZERS_,
|
// serialize properties (properties unknown to KML are not serialized)
|
||||||
ol.format.KML.COORDINATES_NODE_FACTORY_,
|
var properties = geometry.getProperties();
|
||||||
[flatCoordinates], objectStack);
|
properties.coordinates = flatCoordinates;
|
||||||
|
|
||||||
|
var parentNode = objectStack[objectStack.length - 1].node;
|
||||||
|
var orderedKeys = ol.format.KML.PRIMITIVE_GEOMETRY_SEQUENCE_[parentNode.namespaceURI];
|
||||||
|
var values = ol.xml.makeSequence(properties, orderedKeys);
|
||||||
|
ol.xml.pushSerializeAndPop(context, ol.format.KML.PRIMITIVE_GEOMETRY_SERIALIZERS_,
|
||||||
|
ol.xml.OBJECT_PROPERTY_NODE_FACTORY, values, objectStack, orderedKeys);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -2632,7 +2657,6 @@ ol.format.KML.GEOMETRY_TYPE_TO_NODENAME_ = {
|
|||||||
'GeometryCollection': 'MultiGeometry'
|
'GeometryCollection': 'MultiGeometry'
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @const
|
* @const
|
||||||
* @type {Object.<string, Array.<string>>}
|
* @type {Object.<string, Array.<string>>}
|
||||||
@@ -2808,6 +2832,17 @@ ol.format.KML.PLACEMARK_SERIALIZERS_ = ol.xml.makeStructureNS(
|
|||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @const
|
||||||
|
* @type {Object.<string, Array.<string>>}
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
ol.format.KML.PRIMITIVE_GEOMETRY_SEQUENCE_ = ol.xml.makeStructureNS(
|
||||||
|
ol.format.KML.NAMESPACE_URIS_, [
|
||||||
|
'extrude', 'tessellate', 'altitudeMode', 'coordinates'
|
||||||
|
]);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @const
|
* @const
|
||||||
* @type {Object.<string, Object.<string, ol.XmlSerializer>>}
|
* @type {Object.<string, Object.<string, ol.XmlSerializer>>}
|
||||||
@@ -2815,6 +2850,9 @@ ol.format.KML.PLACEMARK_SERIALIZERS_ = ol.xml.makeStructureNS(
|
|||||||
*/
|
*/
|
||||||
ol.format.KML.PRIMITIVE_GEOMETRY_SERIALIZERS_ = ol.xml.makeStructureNS(
|
ol.format.KML.PRIMITIVE_GEOMETRY_SERIALIZERS_ = ol.xml.makeStructureNS(
|
||||||
ol.format.KML.NAMESPACE_URIS_, {
|
ol.format.KML.NAMESPACE_URIS_, {
|
||||||
|
'extrude': ol.xml.makeChildAppender(ol.format.XSD.writeBooleanTextNode),
|
||||||
|
'tessellate': ol.xml.makeChildAppender(ol.format.XSD.writeBooleanTextNode),
|
||||||
|
'altitudeMode': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode),
|
||||||
'coordinates': ol.xml.makeChildAppender(
|
'coordinates': ol.xml.makeChildAppender(
|
||||||
ol.format.KML.writeCoordinatesTextNode_)
|
ol.format.KML.writeCoordinatesTextNode_)
|
||||||
});
|
});
|
||||||
@@ -2926,16 +2964,6 @@ ol.format.KML.GEOMETRY_NODE_FACTORY_ = function(value, objectStack,
|
|||||||
ol.format.KML.COLOR_NODE_FACTORY_ = ol.xml.makeSimpleNodeFactory('color');
|
ol.format.KML.COLOR_NODE_FACTORY_ = ol.xml.makeSimpleNodeFactory('color');
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A factory for creating coordinates nodes.
|
|
||||||
* @const
|
|
||||||
* @type {function(*, Array.<*>, string=): (Node|undefined)}
|
|
||||||
* @private
|
|
||||||
*/
|
|
||||||
ol.format.KML.COORDINATES_NODE_FACTORY_ =
|
|
||||||
ol.xml.makeSimpleNodeFactory('coordinates');
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A factory for creating Data nodes.
|
* A factory for creating Data nodes.
|
||||||
* @const
|
* @const
|
||||||
|
|||||||
@@ -3,8 +3,8 @@
|
|||||||
goog.provide('ol.format.MVT');
|
goog.provide('ol.format.MVT');
|
||||||
|
|
||||||
goog.require('ol');
|
goog.require('ol');
|
||||||
|
goog.require('ol.asserts');
|
||||||
goog.require('ol.ext.PBF');
|
goog.require('ol.ext.PBF');
|
||||||
goog.require('ol.ext.vectortile.VectorTile');
|
|
||||||
goog.require('ol.format.Feature');
|
goog.require('ol.format.Feature');
|
||||||
goog.require('ol.format.FormatType');
|
goog.require('ol.format.FormatType');
|
||||||
goog.require('ol.geom.GeometryLayout');
|
goog.require('ol.geom.GeometryLayout');
|
||||||
@@ -12,8 +12,10 @@ goog.require('ol.geom.GeometryType');
|
|||||||
goog.require('ol.geom.LineString');
|
goog.require('ol.geom.LineString');
|
||||||
goog.require('ol.geom.MultiLineString');
|
goog.require('ol.geom.MultiLineString');
|
||||||
goog.require('ol.geom.MultiPoint');
|
goog.require('ol.geom.MultiPoint');
|
||||||
|
goog.require('ol.geom.MultiPolygon');
|
||||||
goog.require('ol.geom.Point');
|
goog.require('ol.geom.Point');
|
||||||
goog.require('ol.geom.Polygon');
|
goog.require('ol.geom.Polygon');
|
||||||
|
goog.require('ol.geom.flat.orient');
|
||||||
goog.require('ol.proj.Projection');
|
goog.require('ol.proj.Projection');
|
||||||
goog.require('ol.proj.Units');
|
goog.require('ol.proj.Units');
|
||||||
goog.require('ol.render.Feature');
|
goog.require('ol.render.Feature');
|
||||||
@@ -38,7 +40,7 @@ ol.format.MVT = function(opt_options) {
|
|||||||
* @type {ol.proj.Projection}
|
* @type {ol.proj.Projection}
|
||||||
*/
|
*/
|
||||||
this.defaultDataProjection = new ol.proj.Projection({
|
this.defaultDataProjection = new ol.proj.Projection({
|
||||||
code: '',
|
code: 'EPSG:3857',
|
||||||
units: ol.proj.Units.TILE_PIXELS
|
units: ol.proj.Units.TILE_PIXELS
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -79,6 +81,256 @@ ol.format.MVT = function(opt_options) {
|
|||||||
ol.inherits(ol.format.MVT, ol.format.Feature);
|
ol.inherits(ol.format.MVT, ol.format.Feature);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reader callbacks for parsing the PBF.
|
||||||
|
* @type {Object.<string, function(number, Object, ol.ext.PBF)>}
|
||||||
|
*/
|
||||||
|
ol.format.MVT.pbfReaders_ = {
|
||||||
|
layers: function(tag, layers, pbf) {
|
||||||
|
if (tag === 3) {
|
||||||
|
var layer = {
|
||||||
|
keys: [],
|
||||||
|
values: [],
|
||||||
|
features: []
|
||||||
|
};
|
||||||
|
var end = pbf.readVarint() + pbf.pos;
|
||||||
|
pbf.readFields(ol.format.MVT.pbfReaders_.layer, layer, end);
|
||||||
|
layer.length = layer.features.length;
|
||||||
|
if (layer.length) {
|
||||||
|
layers[layer.name] = layer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
layer: function(tag, layer, pbf) {
|
||||||
|
if (tag === 15) {
|
||||||
|
layer.version = pbf.readVarint();
|
||||||
|
} else if (tag === 1) {
|
||||||
|
layer.name = pbf.readString();
|
||||||
|
} else if (tag === 5) {
|
||||||
|
layer.extent = pbf.readVarint();
|
||||||
|
} else if (tag === 2) {
|
||||||
|
layer.features.push(pbf.pos);
|
||||||
|
} else if (tag === 3) {
|
||||||
|
layer.keys.push(pbf.readString());
|
||||||
|
} else if (tag === 4) {
|
||||||
|
var value = null;
|
||||||
|
var end = pbf.readVarint() + pbf.pos;
|
||||||
|
while (pbf.pos < end) {
|
||||||
|
tag = pbf.readVarint() >> 3;
|
||||||
|
value = tag === 1 ? pbf.readString() :
|
||||||
|
tag === 2 ? pbf.readFloat() :
|
||||||
|
tag === 3 ? pbf.readDouble() :
|
||||||
|
tag === 4 ? pbf.readVarint64() :
|
||||||
|
tag === 5 ? pbf.readVarint() :
|
||||||
|
tag === 6 ? pbf.readSVarint() :
|
||||||
|
tag === 7 ? pbf.readBoolean() : null;
|
||||||
|
}
|
||||||
|
layer.values.push(value);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
feature: function(tag, feature, pbf) {
|
||||||
|
if (tag == 1) {
|
||||||
|
feature.id = pbf.readVarint();
|
||||||
|
} else if (tag == 2) {
|
||||||
|
var end = pbf.readVarint() + pbf.pos;
|
||||||
|
while (pbf.pos < end) {
|
||||||
|
var key = feature.layer.keys[pbf.readVarint()];
|
||||||
|
var value = feature.layer.values[pbf.readVarint()];
|
||||||
|
feature.properties[key] = value;
|
||||||
|
}
|
||||||
|
} else if (tag == 3) {
|
||||||
|
feature.type = pbf.readVarint();
|
||||||
|
} else if (tag == 4) {
|
||||||
|
feature.geometry = pbf.pos;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Read a raw feature from the pbf offset stored at index `i` in the raw layer.
|
||||||
|
* @suppress {missingProperties}
|
||||||
|
* @private
|
||||||
|
* @param {ol.ext.PBF} pbf PBF.
|
||||||
|
* @param {Object} layer Raw layer.
|
||||||
|
* @param {number} i Index of the feature in the raw layer's `features` array.
|
||||||
|
* @return {Object} Raw feature.
|
||||||
|
*/
|
||||||
|
ol.format.MVT.readRawFeature_ = function(pbf, layer, i) {
|
||||||
|
pbf.pos = layer.features[i];
|
||||||
|
var end = pbf.readVarint() + pbf.pos;
|
||||||
|
|
||||||
|
var feature = {
|
||||||
|
layer: layer,
|
||||||
|
type: 0,
|
||||||
|
properties: {}
|
||||||
|
};
|
||||||
|
pbf.readFields(ol.format.MVT.pbfReaders_.feature, feature, end);
|
||||||
|
return feature;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Read the raw geometry from the pbf offset stored in a raw feature's geometry
|
||||||
|
* proeprty.
|
||||||
|
* @suppress {missingProperties}
|
||||||
|
* @private
|
||||||
|
* @param {ol.ext.PBF} pbf PBF.
|
||||||
|
* @param {Object} feature Raw feature.
|
||||||
|
* @param {Array.<number>} flatCoordinates Array to store flat coordinates in.
|
||||||
|
* @param {Array.<number>} ends Array to store ends in.
|
||||||
|
*/
|
||||||
|
ol.format.MVT.readRawGeometry_ = function(pbf, feature, flatCoordinates, ends) {
|
||||||
|
pbf.pos = feature.geometry;
|
||||||
|
|
||||||
|
var end = pbf.readVarint() + pbf.pos;
|
||||||
|
var cmd = 1;
|
||||||
|
var length = 0;
|
||||||
|
var x = 0;
|
||||||
|
var y = 0;
|
||||||
|
var coordsLen = 0;
|
||||||
|
var currentEnd = 0;
|
||||||
|
|
||||||
|
while (pbf.pos < end) {
|
||||||
|
if (!length) {
|
||||||
|
var cmdLen = pbf.readVarint();
|
||||||
|
cmd = cmdLen & 0x7;
|
||||||
|
length = cmdLen >> 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
length--;
|
||||||
|
|
||||||
|
if (cmd === 1 || cmd === 2) {
|
||||||
|
x += pbf.readSVarint();
|
||||||
|
y += pbf.readSVarint();
|
||||||
|
|
||||||
|
if (cmd === 1) { // moveTo
|
||||||
|
if (coordsLen > currentEnd) {
|
||||||
|
ends.push(coordsLen);
|
||||||
|
currentEnd = coordsLen;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
flatCoordinates.push(x, y);
|
||||||
|
coordsLen += 2;
|
||||||
|
|
||||||
|
} else if (cmd === 7) {
|
||||||
|
|
||||||
|
if (coordsLen > currentEnd) {
|
||||||
|
// close polygon
|
||||||
|
flatCoordinates.push(
|
||||||
|
flatCoordinates[currentEnd], flatCoordinates[currentEnd + 1]);
|
||||||
|
coordsLen += 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
ol.asserts.assert(false, 59); // Invalid command found in the PBF
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (coordsLen > currentEnd) {
|
||||||
|
ends.push(coordsLen);
|
||||||
|
currentEnd = coordsLen;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @suppress {missingProperties}
|
||||||
|
* @private
|
||||||
|
* @param {number} type The raw feature's geometry type
|
||||||
|
* @param {number} numEnds Number of ends of the flat coordinates of the
|
||||||
|
* geometry.
|
||||||
|
* @return {ol.geom.GeometryType} The geometry type.
|
||||||
|
*/
|
||||||
|
ol.format.MVT.getGeometryType_ = function(type, numEnds) {
|
||||||
|
/** @type {ol.geom.GeometryType} */
|
||||||
|
var geometryType;
|
||||||
|
if (type === 1) {
|
||||||
|
geometryType = numEnds === 1 ?
|
||||||
|
ol.geom.GeometryType.POINT : ol.geom.GeometryType.MULTI_POINT;
|
||||||
|
} else if (type === 2) {
|
||||||
|
geometryType = numEnds === 1 ?
|
||||||
|
ol.geom.GeometryType.LINE_STRING :
|
||||||
|
ol.geom.GeometryType.MULTI_LINE_STRING;
|
||||||
|
} else if (type === 3) {
|
||||||
|
geometryType = ol.geom.GeometryType.POLYGON;
|
||||||
|
// MultiPolygon not relevant for rendering - winding order determines
|
||||||
|
// outer rings of polygons.
|
||||||
|
}
|
||||||
|
return geometryType;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @private
|
||||||
|
* @param {ol.ext.PBF} pbf PBF
|
||||||
|
* @param {Object} rawFeature Raw Mapbox feature.
|
||||||
|
* @param {olx.format.ReadOptions=} opt_options Read options.
|
||||||
|
* @return {ol.Feature|ol.render.Feature} Feature.
|
||||||
|
*/
|
||||||
|
ol.format.MVT.prototype.createFeature_ = function(pbf, rawFeature, opt_options) {
|
||||||
|
var type = rawFeature.type;
|
||||||
|
if (type === 0) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
var feature;
|
||||||
|
var id = rawFeature.id;
|
||||||
|
var values = rawFeature.properties;
|
||||||
|
values[this.layerName_] = rawFeature.layer.name;
|
||||||
|
|
||||||
|
var flatCoordinates = [];
|
||||||
|
var ends = [];
|
||||||
|
ol.format.MVT.readRawGeometry_(pbf, rawFeature, flatCoordinates, ends);
|
||||||
|
|
||||||
|
var geometryType = ol.format.MVT.getGeometryType_(type, ends.length);
|
||||||
|
|
||||||
|
if (this.featureClass_ === ol.render.Feature) {
|
||||||
|
feature = new this.featureClass_(geometryType, flatCoordinates, ends, values, id);
|
||||||
|
} else {
|
||||||
|
var geom;
|
||||||
|
if (geometryType == ol.geom.GeometryType.POLYGON) {
|
||||||
|
var endss = [];
|
||||||
|
var offset = 0;
|
||||||
|
var prevEndIndex = 0;
|
||||||
|
for (var i = 0, ii = ends.length; i < ii; ++i) {
|
||||||
|
var end = ends[i];
|
||||||
|
if (!ol.geom.flat.orient.linearRingIsClockwise(flatCoordinates, offset, end, 2)) {
|
||||||
|
endss.push(ends.slice(prevEndIndex, i));
|
||||||
|
prevEndIndex = i;
|
||||||
|
}
|
||||||
|
offset = end;
|
||||||
|
}
|
||||||
|
if (endss.length > 1) {
|
||||||
|
ends = endss;
|
||||||
|
geom = new ol.geom.MultiPolygon(null);
|
||||||
|
} else {
|
||||||
|
geom = new ol.geom.Polygon(null);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
geom = geometryType === ol.geom.GeometryType.POINT ? new ol.geom.Point(null) :
|
||||||
|
geometryType === ol.geom.GeometryType.LINE_STRING ? new ol.geom.LineString(null) :
|
||||||
|
geometryType === ol.geom.GeometryType.POLYGON ? new ol.geom.Polygon(null) :
|
||||||
|
geometryType === ol.geom.GeometryType.MULTI_POINT ? new ol.geom.MultiPoint (null) :
|
||||||
|
geometryType === ol.geom.GeometryType.MULTI_LINE_STRING ? new ol.geom.MultiLineString(null) :
|
||||||
|
null;
|
||||||
|
}
|
||||||
|
geom.setFlatCoordinates(ol.geom.GeometryLayout.XY, flatCoordinates, ends);
|
||||||
|
feature = new this.featureClass_();
|
||||||
|
if (this.geometryName_) {
|
||||||
|
feature.setGeometryName(this.geometryName_);
|
||||||
|
}
|
||||||
|
var geometry = ol.format.Feature.transformWithOptions(geom, false, this.adaptOptions(opt_options));
|
||||||
|
feature.setGeometry(geometry);
|
||||||
|
feature.setId(id);
|
||||||
|
feature.setProperties(values);
|
||||||
|
}
|
||||||
|
|
||||||
|
return feature;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @inheritDoc
|
* @inheritDoc
|
||||||
* @api
|
* @api
|
||||||
@@ -96,68 +348,6 @@ ol.format.MVT.prototype.getType = function() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @private
|
|
||||||
* @param {Object} rawFeature Raw Mapbox feature.
|
|
||||||
* @param {string} layer Layer.
|
|
||||||
* @param {olx.format.ReadOptions=} opt_options Read options.
|
|
||||||
* @return {ol.Feature} Feature.
|
|
||||||
*/
|
|
||||||
ol.format.MVT.prototype.readFeature_ = function(
|
|
||||||
rawFeature, layer, opt_options) {
|
|
||||||
var feature = new this.featureClass_();
|
|
||||||
var id = rawFeature.id;
|
|
||||||
var values = rawFeature.properties;
|
|
||||||
values[this.layerName_] = layer;
|
|
||||||
if (this.geometryName_) {
|
|
||||||
feature.setGeometryName(this.geometryName_);
|
|
||||||
}
|
|
||||||
var geometry = ol.format.Feature.transformWithOptions(
|
|
||||||
ol.format.MVT.readGeometry_(rawFeature), false,
|
|
||||||
this.adaptOptions(opt_options));
|
|
||||||
feature.setGeometry(geometry);
|
|
||||||
feature.setId(id);
|
|
||||||
feature.setProperties(values);
|
|
||||||
return feature;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @private
|
|
||||||
* @param {Object} rawFeature Raw Mapbox feature.
|
|
||||||
* @param {string} layer Layer.
|
|
||||||
* @return {ol.render.Feature} Feature.
|
|
||||||
*/
|
|
||||||
ol.format.MVT.prototype.readRenderFeature_ = function(rawFeature, layer) {
|
|
||||||
var coords = rawFeature.loadGeometry();
|
|
||||||
var ends = [];
|
|
||||||
var flatCoordinates = [];
|
|
||||||
ol.format.MVT.calculateFlatCoordinates_(coords, flatCoordinates, ends);
|
|
||||||
|
|
||||||
var type = rawFeature.type;
|
|
||||||
/** @type {ol.geom.GeometryType} */
|
|
||||||
var geometryType;
|
|
||||||
if (type === 1) {
|
|
||||||
geometryType = coords.length === 1 ?
|
|
||||||
ol.geom.GeometryType.POINT : ol.geom.GeometryType.MULTI_POINT;
|
|
||||||
} else if (type === 2) {
|
|
||||||
if (coords.length === 1) {
|
|
||||||
geometryType = ol.geom.GeometryType.LINE_STRING;
|
|
||||||
} else {
|
|
||||||
geometryType = ol.geom.GeometryType.MULTI_LINE_STRING;
|
|
||||||
}
|
|
||||||
} else if (type === 3) {
|
|
||||||
geometryType = ol.geom.GeometryType.POLYGON;
|
|
||||||
}
|
|
||||||
|
|
||||||
var values = rawFeature.properties;
|
|
||||||
values[this.layerName_] = layer;
|
|
||||||
var id = rawFeature.id;
|
|
||||||
|
|
||||||
return new this.featureClass_(geometryType, flatCoordinates, ends, values, id);
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @inheritDoc
|
* @inheritDoc
|
||||||
* @api
|
* @api
|
||||||
@@ -166,27 +356,22 @@ ol.format.MVT.prototype.readFeatures = function(source, opt_options) {
|
|||||||
var layers = this.layers_;
|
var layers = this.layers_;
|
||||||
|
|
||||||
var pbf = new ol.ext.PBF(/** @type {ArrayBuffer} */ (source));
|
var pbf = new ol.ext.PBF(/** @type {ArrayBuffer} */ (source));
|
||||||
var tile = new ol.ext.vectortile.VectorTile(pbf);
|
var pbfLayers = pbf.readFields(ol.format.MVT.pbfReaders_.layers, {});
|
||||||
|
/** @type {Array.<ol.Feature|ol.render.Feature>} */
|
||||||
var features = [];
|
var features = [];
|
||||||
var featureClass = this.featureClass_;
|
var pbfLayer;
|
||||||
var layer, feature;
|
for (var name in pbfLayers) {
|
||||||
for (var name in tile.layers) {
|
|
||||||
if (layers && layers.indexOf(name) == -1) {
|
if (layers && layers.indexOf(name) == -1) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
layer = tile.layers[name];
|
pbfLayer = pbfLayers[name];
|
||||||
|
|
||||||
var rawFeature;
|
var rawFeature;
|
||||||
for (var i = 0, ii = layer.length; i < ii; ++i) {
|
for (var i = 0, ii = pbfLayer.length; i < ii; ++i) {
|
||||||
rawFeature = layer.feature(i);
|
rawFeature = ol.format.MVT.readRawFeature_(pbf, pbfLayer, i);
|
||||||
if (featureClass === ol.render.Feature) {
|
features.push(this.createFeature_(pbf, rawFeature));
|
||||||
feature = this.readRenderFeature_(rawFeature, name);
|
|
||||||
} else {
|
|
||||||
feature = this.readFeature_(rawFeature, name, opt_options);
|
|
||||||
}
|
|
||||||
features.push(feature);
|
|
||||||
}
|
}
|
||||||
this.extent_ = layer ? [0, 0, layer.extent, layer.extent] : null;
|
this.extent_ = pbfLayer ? [0, 0, pbfLayer.extent, pbfLayer.extent] : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return features;
|
return features;
|
||||||
@@ -212,68 +397,6 @@ ol.format.MVT.prototype.setLayers = function(layers) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @private
|
|
||||||
* @param {Object} coords Raw feature coordinates.
|
|
||||||
* @param {Array.<number>} flatCoordinates Flat coordinates to be populated by
|
|
||||||
* this function.
|
|
||||||
* @param {Array.<number>} ends Ends to be populated by this function.
|
|
||||||
*/
|
|
||||||
ol.format.MVT.calculateFlatCoordinates_ = function(
|
|
||||||
coords, flatCoordinates, ends) {
|
|
||||||
var end = 0;
|
|
||||||
for (var i = 0, ii = coords.length; i < ii; ++i) {
|
|
||||||
var line = coords[i];
|
|
||||||
var j, jj;
|
|
||||||
for (j = 0, jj = line.length; j < jj; ++j) {
|
|
||||||
var coord = line[j];
|
|
||||||
// Non-tilespace coords can be calculated here when a TileGrid and
|
|
||||||
// TileCoord are known.
|
|
||||||
flatCoordinates.push(coord.x, coord.y);
|
|
||||||
}
|
|
||||||
end += 2 * j;
|
|
||||||
ends.push(end);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @private
|
|
||||||
* @param {Object} rawFeature Raw Mapbox feature.
|
|
||||||
* @return {ol.geom.Geometry} Geometry.
|
|
||||||
*/
|
|
||||||
ol.format.MVT.readGeometry_ = function(rawFeature) {
|
|
||||||
var type = rawFeature.type;
|
|
||||||
if (type === 0) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
var coords = rawFeature.loadGeometry();
|
|
||||||
var ends = [];
|
|
||||||
var flatCoordinates = [];
|
|
||||||
ol.format.MVT.calculateFlatCoordinates_(coords, flatCoordinates, ends);
|
|
||||||
|
|
||||||
var geom;
|
|
||||||
if (type === 1) {
|
|
||||||
geom = coords.length === 1 ?
|
|
||||||
new ol.geom.Point(null) : new ol.geom.MultiPoint(null);
|
|
||||||
} else if (type === 2) {
|
|
||||||
if (coords.length === 1) {
|
|
||||||
geom = new ol.geom.LineString(null);
|
|
||||||
} else {
|
|
||||||
geom = new ol.geom.MultiLineString(null);
|
|
||||||
}
|
|
||||||
} else if (type === 3) {
|
|
||||||
geom = new ol.geom.Polygon(null);
|
|
||||||
}
|
|
||||||
|
|
||||||
geom.setFlatCoordinates(ol.geom.GeometryLayout.XY, flatCoordinates,
|
|
||||||
ends);
|
|
||||||
|
|
||||||
return geom;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Not implemented.
|
* Not implemented.
|
||||||
* @override
|
* @override
|
||||||
|
|||||||
@@ -71,34 +71,14 @@ ol.format.OSMXML.readNode_ = function(node, objectStack) {
|
|||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
ol.format.OSMXML.readWay_ = function(node, objectStack) {
|
ol.format.OSMXML.readWay_ = function(node, objectStack) {
|
||||||
var options = /** @type {olx.format.ReadOptions} */ (objectStack[0]);
|
|
||||||
var id = node.getAttribute('id');
|
var id = node.getAttribute('id');
|
||||||
var values = ol.xml.pushParseAndPop({
|
var values = ol.xml.pushParseAndPop({
|
||||||
|
id: id,
|
||||||
ndrefs: [],
|
ndrefs: [],
|
||||||
tags: {}
|
tags: {}
|
||||||
}, ol.format.OSMXML.WAY_PARSERS_, node, objectStack);
|
}, ol.format.OSMXML.WAY_PARSERS_, node, objectStack);
|
||||||
var state = /** @type {Object} */ (objectStack[objectStack.length - 1]);
|
var state = /** @type {Object} */ (objectStack[objectStack.length - 1]);
|
||||||
/** @type {Array.<number>} */
|
state.ways.push(values);
|
||||||
var flatCoordinates = [];
|
|
||||||
for (var i = 0, ii = values.ndrefs.length; i < ii; i++) {
|
|
||||||
var point = state.nodes[values.ndrefs[i]];
|
|
||||||
ol.array.extend(flatCoordinates, point);
|
|
||||||
}
|
|
||||||
var geometry;
|
|
||||||
if (values.ndrefs[0] == values.ndrefs[values.ndrefs.length - 1]) {
|
|
||||||
// closed way
|
|
||||||
geometry = new ol.geom.Polygon(null);
|
|
||||||
geometry.setFlatCoordinates(ol.geom.GeometryLayout.XY, flatCoordinates,
|
|
||||||
[flatCoordinates.length]);
|
|
||||||
} else {
|
|
||||||
geometry = new ol.geom.LineString(null);
|
|
||||||
geometry.setFlatCoordinates(ol.geom.GeometryLayout.XY, flatCoordinates);
|
|
||||||
}
|
|
||||||
ol.format.Feature.transformWithOptions(geometry, false, options);
|
|
||||||
var feature = new ol.Feature(geometry);
|
|
||||||
feature.setId(id);
|
|
||||||
feature.setProperties(values.tags);
|
|
||||||
state.features.push(feature);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -189,8 +169,34 @@ ol.format.OSMXML.prototype.readFeaturesFromNode = function(node, opt_options) {
|
|||||||
if (node.localName == 'osm') {
|
if (node.localName == 'osm') {
|
||||||
var state = ol.xml.pushParseAndPop({
|
var state = ol.xml.pushParseAndPop({
|
||||||
nodes: {},
|
nodes: {},
|
||||||
|
ways: [],
|
||||||
features: []
|
features: []
|
||||||
}, ol.format.OSMXML.PARSERS_, node, [options]);
|
}, ol.format.OSMXML.PARSERS_, node, [options]);
|
||||||
|
// parse nodes in ways
|
||||||
|
for (var j = 0; j < state.ways.length; j++) {
|
||||||
|
var values = /** @type {Object} */ (state.ways[j]);
|
||||||
|
/** @type {Array.<number>} */
|
||||||
|
var flatCoordinates = [];
|
||||||
|
for (var i = 0, ii = values.ndrefs.length; i < ii; i++) {
|
||||||
|
var point = state.nodes[values.ndrefs[i]];
|
||||||
|
ol.array.extend(flatCoordinates, point);
|
||||||
|
}
|
||||||
|
var geometry;
|
||||||
|
if (values.ndrefs[0] == values.ndrefs[values.ndrefs.length - 1]) {
|
||||||
|
// closed way
|
||||||
|
geometry = new ol.geom.Polygon(null);
|
||||||
|
geometry.setFlatCoordinates(ol.geom.GeometryLayout.XY, flatCoordinates,
|
||||||
|
[flatCoordinates.length]);
|
||||||
|
} else {
|
||||||
|
geometry = new ol.geom.LineString(null);
|
||||||
|
geometry.setFlatCoordinates(ol.geom.GeometryLayout.XY, flatCoordinates);
|
||||||
|
}
|
||||||
|
ol.format.Feature.transformWithOptions(geometry, false, options);
|
||||||
|
var feature = new ol.Feature(geometry);
|
||||||
|
feature.setId(values.id);
|
||||||
|
feature.setProperties(values.tags);
|
||||||
|
state.features.push(feature);
|
||||||
|
}
|
||||||
if (state.features) {
|
if (state.features) {
|
||||||
return state.features;
|
return state.features;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -461,6 +461,7 @@ ol.format.WFS.writeUpdate_ = function(node, feature, objectStack) {
|
|||||||
var featurePrefix = context['featurePrefix'];
|
var featurePrefix = context['featurePrefix'];
|
||||||
var featureNS = context['featureNS'];
|
var featureNS = context['featureNS'];
|
||||||
var typeName = ol.format.WFS.getTypeName_(featurePrefix, featureType);
|
var typeName = ol.format.WFS.getTypeName_(featurePrefix, featureType);
|
||||||
|
var geometryName = feature.getGeometryName();
|
||||||
node.setAttribute('typeName', typeName);
|
node.setAttribute('typeName', typeName);
|
||||||
ol.xml.setAttributeNS(node, ol.format.WFS.XMLNS, 'xmlns:' + featurePrefix,
|
ol.xml.setAttributeNS(node, ol.format.WFS.XMLNS, 'xmlns:' + featurePrefix,
|
||||||
featureNS);
|
featureNS);
|
||||||
@@ -471,7 +472,11 @@ ol.format.WFS.writeUpdate_ = function(node, feature, objectStack) {
|
|||||||
for (var i = 0, ii = keys.length; i < ii; i++) {
|
for (var i = 0, ii = keys.length; i < ii; i++) {
|
||||||
var value = feature.get(keys[i]);
|
var value = feature.get(keys[i]);
|
||||||
if (value !== undefined) {
|
if (value !== undefined) {
|
||||||
values.push({name: keys[i], value: value});
|
var name = keys[i];
|
||||||
|
if (value instanceof ol.geom.Geometry) {
|
||||||
|
name = geometryName;
|
||||||
|
}
|
||||||
|
values.push({name: name, value: value});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ol.xml.pushSerializeAndPop(/** @type {ol.XmlNodeStackItem} */ (
|
ol.xml.pushSerializeAndPop(/** @type {ol.XmlNodeStackItem} */ (
|
||||||
|
|||||||
@@ -394,6 +394,7 @@ ol.format.WKT.prototype.writeFeaturesText = function(features, opt_options) {
|
|||||||
*
|
*
|
||||||
* @function
|
* @function
|
||||||
* @param {ol.geom.Geometry} geometry Geometry.
|
* @param {ol.geom.Geometry} geometry Geometry.
|
||||||
|
* @param {olx.format.WriteOptions=} opt_options Write options.
|
||||||
* @return {string} WKT string.
|
* @return {string} WKT string.
|
||||||
* @api
|
* @api
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -14,7 +14,8 @@ goog.require('ol.geom.flat.contains');
|
|||||||
* @param {Array.<number>} flatCenters Flat centers.
|
* @param {Array.<number>} flatCenters Flat centers.
|
||||||
* @param {number} flatCentersOffset Flat center offset.
|
* @param {number} flatCentersOffset Flat center offset.
|
||||||
* @param {Array.<number>=} opt_dest Destination.
|
* @param {Array.<number>=} opt_dest Destination.
|
||||||
* @return {Array.<number>} Destination.
|
* @return {Array.<number>} Destination point as XYM coordinate, where M is the
|
||||||
|
* length of the horizontal intersection that the point belongs to.
|
||||||
*/
|
*/
|
||||||
ol.geom.flat.interiorpoint.linearRings = function(flatCoordinates, offset,
|
ol.geom.flat.interiorpoint.linearRings = function(flatCoordinates, offset,
|
||||||
ends, stride, flatCenters, flatCentersOffset, opt_dest) {
|
ends, stride, flatCenters, flatCentersOffset, opt_dest) {
|
||||||
@@ -61,10 +62,10 @@ ol.geom.flat.interiorpoint.linearRings = function(flatCoordinates, offset,
|
|||||||
pointX = flatCenters[flatCentersOffset];
|
pointX = flatCenters[flatCentersOffset];
|
||||||
}
|
}
|
||||||
if (opt_dest) {
|
if (opt_dest) {
|
||||||
opt_dest.push(pointX, y);
|
opt_dest.push(pointX, y, maxSegmentLength);
|
||||||
return opt_dest;
|
return opt_dest;
|
||||||
} else {
|
} else {
|
||||||
return [pointX, y];
|
return [pointX, y, maxSegmentLength];
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -75,7 +76,8 @@ ol.geom.flat.interiorpoint.linearRings = function(flatCoordinates, offset,
|
|||||||
* @param {Array.<Array.<number>>} endss Endss.
|
* @param {Array.<Array.<number>>} endss Endss.
|
||||||
* @param {number} stride Stride.
|
* @param {number} stride Stride.
|
||||||
* @param {Array.<number>} flatCenters Flat centers.
|
* @param {Array.<number>} flatCenters Flat centers.
|
||||||
* @return {Array.<number>} Interior points.
|
* @return {Array.<number>} Interior points as XYM coordinates, where M is the
|
||||||
|
* length of the horizontal intersection that the point belongs to.
|
||||||
*/
|
*/
|
||||||
ol.geom.flat.interiorpoint.linearRingss = function(flatCoordinates, offset, endss, stride, flatCenters) {
|
ol.geom.flat.interiorpoint.linearRingss = function(flatCoordinates, offset, endss, stride, flatCenters) {
|
||||||
var interiorPoints = [];
|
var interiorPoints = [];
|
||||||
|
|||||||
49
src/ol/geom/flat/straightchunk.js
Normal file
49
src/ol/geom/flat/straightchunk.js
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
goog.provide('ol.geom.flat.straightchunk');
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {number} maxAngle Maximum acceptable angle delta between segments.
|
||||||
|
* @param {Array.<number>} flatCoordinates Flat coordinates.
|
||||||
|
* @param {number} offset Offset.
|
||||||
|
* @param {number} end End.
|
||||||
|
* @param {number} stride Stride.
|
||||||
|
* @return {Array.<number>} Start and end of the first suitable chunk of the
|
||||||
|
* given `flatCoordinates`.
|
||||||
|
*/
|
||||||
|
ol.geom.flat.straightchunk.lineString = function(maxAngle, flatCoordinates, offset, end, stride) {
|
||||||
|
var chunkStart = offset;
|
||||||
|
var chunkEnd = offset;
|
||||||
|
var chunkM = 0;
|
||||||
|
var m = 0;
|
||||||
|
var start = offset;
|
||||||
|
var acos, i, m12, m23, x1, y1, x12, y12, x23, y23;
|
||||||
|
for (i = offset; i < end; i += stride) {
|
||||||
|
var x2 = flatCoordinates[i];
|
||||||
|
var y2 = flatCoordinates[i + 1];
|
||||||
|
if (x1 !== undefined) {
|
||||||
|
x23 = x2 - x1;
|
||||||
|
y23 = y2 - y1;
|
||||||
|
m23 = Math.sqrt(x23 * x23 + y23 * y23);
|
||||||
|
if (x12 !== undefined) {
|
||||||
|
m += m12;
|
||||||
|
acos = Math.acos((x12 * x23 + y12 * y23) / (m12 * m23));
|
||||||
|
if (acos > maxAngle) {
|
||||||
|
if (m > chunkM) {
|
||||||
|
chunkM = m;
|
||||||
|
chunkStart = start;
|
||||||
|
chunkEnd = i;
|
||||||
|
}
|
||||||
|
m = 0;
|
||||||
|
start = i - stride;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
m12 = m23;
|
||||||
|
x12 = x23;
|
||||||
|
y12 = y23;
|
||||||
|
}
|
||||||
|
x1 = x2;
|
||||||
|
y1 = y2;
|
||||||
|
}
|
||||||
|
m += m23;
|
||||||
|
return m > chunkM ? [start, i] : [chunkStart, chunkEnd];
|
||||||
|
};
|
||||||
75
src/ol/geom/flat/textpath.js
Normal file
75
src/ol/geom/flat/textpath.js
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
goog.provide('ol.geom.flat.textpath');
|
||||||
|
|
||||||
|
goog.require('ol.math');
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {Array.<number>} flatCoordinates Path to put text on.
|
||||||
|
* @param {number} offset Start offset of the `flatCoordinates`.
|
||||||
|
* @param {number} end End offset of the `flatCoordinates`.
|
||||||
|
* @param {number} stride Stride.
|
||||||
|
* @param {string} text Text to place on the path.
|
||||||
|
* @param {function(string):number} measure Measure function returning the
|
||||||
|
* width of the character passed as 1st argument.
|
||||||
|
* @param {number} startM m along the path where the text starts.
|
||||||
|
* @param {number} maxAngle Max angle between adjacent chars in radians.
|
||||||
|
* @param {Array.<Array.<number>>=} opt_result Array that will be populated with the
|
||||||
|
* result. Each entry consists of an array of x, y and z of the char to draw.
|
||||||
|
* If provided, this array will not be truncated to the number of characters of
|
||||||
|
* the `text`.
|
||||||
|
* @return {Array.<Array.<number>>} The result array of null if `maxAngle` was
|
||||||
|
* exceeded.
|
||||||
|
*/
|
||||||
|
ol.geom.flat.textpath.lineString = function(
|
||||||
|
flatCoordinates, offset, end, stride, text, measure, startM, maxAngle, opt_result) {
|
||||||
|
var result = opt_result ? opt_result : [];
|
||||||
|
|
||||||
|
// Keep text upright
|
||||||
|
var reverse = flatCoordinates[offset] > flatCoordinates[end - stride];
|
||||||
|
|
||||||
|
var numChars = text.length;
|
||||||
|
|
||||||
|
var x1 = flatCoordinates[offset];
|
||||||
|
var y1 = flatCoordinates[offset + 1];
|
||||||
|
offset += stride;
|
||||||
|
var x2 = flatCoordinates[offset];
|
||||||
|
var y2 = flatCoordinates[offset + 1];
|
||||||
|
var segmentM = 0;
|
||||||
|
var segmentLength = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));
|
||||||
|
|
||||||
|
var index, previousAngle;
|
||||||
|
for (var i = 0; i < numChars; ++i) {
|
||||||
|
index = reverse ? numChars - i - 1 : i;
|
||||||
|
var char = text[index];
|
||||||
|
var charLength = measure(char);
|
||||||
|
var charM = startM + charLength / 2;
|
||||||
|
while (offset < end - stride && segmentM + segmentLength < charM) {
|
||||||
|
x1 = x2;
|
||||||
|
y1 = y2;
|
||||||
|
offset += stride;
|
||||||
|
x2 = flatCoordinates[offset];
|
||||||
|
y2 = flatCoordinates[offset + 1];
|
||||||
|
segmentM += segmentLength;
|
||||||
|
segmentLength = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));
|
||||||
|
}
|
||||||
|
var segmentPos = charM - segmentM;
|
||||||
|
var angle = Math.atan2(y2 - y1, x2 - x1);
|
||||||
|
if (reverse) {
|
||||||
|
angle += angle > 0 ? -Math.PI : Math.PI;
|
||||||
|
}
|
||||||
|
if (previousAngle !== undefined) {
|
||||||
|
var delta = angle - previousAngle;
|
||||||
|
delta += (delta > Math.PI) ? -2 * Math.PI : (delta < -Math.PI) ? 2 * Math.PI : 0;
|
||||||
|
if (Math.abs(delta) > maxAngle) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
previousAngle = angle;
|
||||||
|
var interpolate = segmentPos / segmentLength;
|
||||||
|
var x = ol.math.lerp(x1, x2, interpolate);
|
||||||
|
var y = ol.math.lerp(y1, y2, interpolate);
|
||||||
|
result[index] = [x, y, angle];
|
||||||
|
startM += charLength;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
};
|
||||||
@@ -4,7 +4,10 @@ goog.require('ol');
|
|||||||
goog.require('ol.Object');
|
goog.require('ol.Object');
|
||||||
goog.require('ol.extent');
|
goog.require('ol.extent');
|
||||||
goog.require('ol.functions');
|
goog.require('ol.functions');
|
||||||
|
goog.require('ol.geom.flat.transform');
|
||||||
goog.require('ol.proj');
|
goog.require('ol.proj');
|
||||||
|
goog.require('ol.proj.Units');
|
||||||
|
goog.require('ol.transform');
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -55,6 +58,12 @@ ol.geom.Geometry = function() {
|
|||||||
*/
|
*/
|
||||||
this.simplifiedGeometryRevision = 0;
|
this.simplifiedGeometryRevision = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @private
|
||||||
|
* @type {ol.Transform}
|
||||||
|
*/
|
||||||
|
this.tmpTransform_ = ol.transform.create();
|
||||||
|
|
||||||
};
|
};
|
||||||
ol.inherits(ol.geom.Geometry, ol.Object);
|
ol.inherits(ol.geom.Geometry, ol.Object);
|
||||||
|
|
||||||
@@ -244,6 +253,22 @@ ol.geom.Geometry.prototype.translate = function(deltaX, deltaY) {};
|
|||||||
* @api
|
* @api
|
||||||
*/
|
*/
|
||||||
ol.geom.Geometry.prototype.transform = function(source, destination) {
|
ol.geom.Geometry.prototype.transform = function(source, destination) {
|
||||||
this.applyTransform(ol.proj.getTransform(source, destination));
|
var tmpTransform = this.tmpTransform_;
|
||||||
|
source = ol.proj.get(source);
|
||||||
|
var transformFn = source.getUnits() == ol.proj.Units.TILE_PIXELS ?
|
||||||
|
function(inCoordinates, outCoordinates, stride) {
|
||||||
|
var pixelExtent = source.getExtent();
|
||||||
|
var projectedExtent = source.getWorldExtent();
|
||||||
|
var scale = ol.extent.getHeight(projectedExtent) / ol.extent.getHeight(pixelExtent);
|
||||||
|
ol.transform.compose(tmpTransform,
|
||||||
|
projectedExtent[0], projectedExtent[3],
|
||||||
|
scale, -scale, 0,
|
||||||
|
0, 0);
|
||||||
|
ol.geom.flat.transform.transform2D(inCoordinates, 0, inCoordinates.length, stride,
|
||||||
|
tmpTransform, outCoordinates);
|
||||||
|
return ol.proj.getTransform(source, destination)(inCoordinates, outCoordinates, stride);
|
||||||
|
} :
|
||||||
|
ol.proj.getTransform(source, destination);
|
||||||
|
this.applyTransform(transformFn);
|
||||||
return this;
|
return this;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -223,12 +223,13 @@ ol.geom.MultiPolygon.prototype.getFlatInteriorPoints = function() {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the interior points as {@link ol.geom.MultiPoint multipoint}.
|
* Return the interior points as {@link ol.geom.MultiPoint multipoint}.
|
||||||
* @return {ol.geom.MultiPoint} Interior points.
|
* @return {ol.geom.MultiPoint} Interior points as XYM coordinates, where M is
|
||||||
|
* the length of the horizontal intersection that the point belongs to.
|
||||||
* @api
|
* @api
|
||||||
*/
|
*/
|
||||||
ol.geom.MultiPolygon.prototype.getInteriorPoints = function() {
|
ol.geom.MultiPolygon.prototype.getInteriorPoints = function() {
|
||||||
var interiorPoints = new ol.geom.MultiPoint(null);
|
var interiorPoints = new ol.geom.MultiPoint(null);
|
||||||
interiorPoints.setFlatCoordinates(ol.geom.GeometryLayout.XY,
|
interiorPoints.setFlatCoordinates(ol.geom.GeometryLayout.XYM,
|
||||||
this.getFlatInteriorPoints().slice());
|
this.getFlatInteriorPoints().slice());
|
||||||
return interiorPoints;
|
return interiorPoints;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -210,11 +210,12 @@ ol.geom.Polygon.prototype.getFlatInteriorPoint = function() {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Return an interior point of the polygon.
|
* Return an interior point of the polygon.
|
||||||
* @return {ol.geom.Point} Interior point.
|
* @return {ol.geom.Point} Interior point as XYM coordinate, where M is the
|
||||||
|
* length of the horizontal intersection that the point belongs to.
|
||||||
* @api
|
* @api
|
||||||
*/
|
*/
|
||||||
ol.geom.Polygon.prototype.getInteriorPoint = function() {
|
ol.geom.Polygon.prototype.getInteriorPoint = function() {
|
||||||
return new ol.geom.Point(this.getFlatInteriorPoint());
|
return new ol.geom.Point(this.getFlatInteriorPoint(), ol.geom.GeometryLayout.XYM);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ ol.Graticule = function(opt_options) {
|
|||||||
var options = opt_options || {};
|
var options = opt_options || {};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @type {ol.Map}
|
* @type {ol.PluggableMap}
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
this.map_ = null;
|
this.map_ = null;
|
||||||
@@ -469,7 +469,7 @@ ol.Graticule.prototype.getInterval_ = function(resolution) {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the map associated with this graticule.
|
* Get the map associated with this graticule.
|
||||||
* @return {ol.Map} The map.
|
* @return {ol.PluggableMap} The map.
|
||||||
* @api
|
* @api
|
||||||
*/
|
*/
|
||||||
ol.Graticule.prototype.getMap = function() {
|
ol.Graticule.prototype.getMap = function() {
|
||||||
@@ -560,23 +560,6 @@ ol.Graticule.prototype.handlePostCompose_ = function(e) {
|
|||||||
this.updateProjectionInfo_(projection);
|
this.updateProjectionInfo_(projection);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Fix the extent if wrapped.
|
|
||||||
//(note: this is the same extent as vectorContext.extent_)
|
|
||||||
var offsetX = 0;
|
|
||||||
if (projection.canWrapX()) {
|
|
||||||
var projectionExtent = projection.getExtent();
|
|
||||||
var worldWidth = ol.extent.getWidth(projectionExtent);
|
|
||||||
var x = frameState.focus[0];
|
|
||||||
if (x < projectionExtent[0] || x > projectionExtent[2]) {
|
|
||||||
var worldsAway = Math.ceil((projectionExtent[0] - x) / worldWidth);
|
|
||||||
offsetX = worldWidth * worldsAway;
|
|
||||||
extent = [
|
|
||||||
extent[0] + offsetX, extent[1],
|
|
||||||
extent[2] + offsetX, extent[3]
|
|
||||||
];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
this.createGraticule_(extent, center, resolution, squaredTolerance);
|
this.createGraticule_(extent, center, resolution, squaredTolerance);
|
||||||
|
|
||||||
// Draw the lines
|
// Draw the lines
|
||||||
@@ -659,7 +642,7 @@ ol.Graticule.prototype.updateProjectionInfo_ = function(projection) {
|
|||||||
/**
|
/**
|
||||||
* Set the map for this graticule. The graticule will be rendered on the
|
* Set the map for this graticule. The graticule will be rendered on the
|
||||||
* provided map.
|
* provided map.
|
||||||
* @param {ol.Map} map Map.
|
* @param {ol.PluggableMap} map Map.
|
||||||
* @api
|
* @api
|
||||||
*/
|
*/
|
||||||
ol.Graticule.prototype.setMap = function(map) {
|
ol.Graticule.prototype.setMap = function(map) {
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ goog.require('ol.ImageState');
|
|||||||
goog.require('ol.events');
|
goog.require('ol.events');
|
||||||
goog.require('ol.events.EventType');
|
goog.require('ol.events.EventType');
|
||||||
goog.require('ol.extent');
|
goog.require('ol.extent');
|
||||||
goog.require('ol.obj');
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -41,12 +40,6 @@ ol.Image = function(extent, resolution, pixelRatio, attributions, src,
|
|||||||
this.image_.crossOrigin = crossOrigin;
|
this.image_.crossOrigin = crossOrigin;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @private
|
|
||||||
* @type {Object.<number, (HTMLCanvasElement|Image|HTMLVideoElement)>}
|
|
||||||
*/
|
|
||||||
this.imageByContext_ = {};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
* @type {Array.<ol.EventsKey>}
|
* @type {Array.<ol.EventsKey>}
|
||||||
@@ -73,22 +66,8 @@ ol.inherits(ol.Image, ol.ImageBase);
|
|||||||
* @inheritDoc
|
* @inheritDoc
|
||||||
* @api
|
* @api
|
||||||
*/
|
*/
|
||||||
ol.Image.prototype.getImage = function(opt_context) {
|
ol.Image.prototype.getImage = function() {
|
||||||
if (opt_context !== undefined) {
|
return this.image_;
|
||||||
var image;
|
|
||||||
var key = ol.getUid(opt_context);
|
|
||||||
if (key in this.imageByContext_) {
|
|
||||||
return this.imageByContext_[key];
|
|
||||||
} else if (ol.obj.isEmpty(this.imageByContext_)) {
|
|
||||||
image = this.image_;
|
|
||||||
} else {
|
|
||||||
image = /** @type {Image} */ (this.image_.cloneNode(false));
|
|
||||||
}
|
|
||||||
this.imageByContext_[key] = image;
|
|
||||||
return image;
|
|
||||||
} else {
|
|
||||||
return this.image_;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -79,10 +79,9 @@ ol.ImageBase.prototype.getExtent = function() {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @abstract
|
* @abstract
|
||||||
* @param {Object=} opt_context Object.
|
|
||||||
* @return {HTMLCanvasElement|Image|HTMLVideoElement} Image.
|
* @return {HTMLCanvasElement|Image|HTMLVideoElement} Image.
|
||||||
*/
|
*/
|
||||||
ol.ImageBase.prototype.getImage = function(opt_context) {};
|
ol.ImageBase.prototype.getImage = function() {};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -87,6 +87,6 @@ ol.ImageCanvas.prototype.load = function() {
|
|||||||
/**
|
/**
|
||||||
* @inheritDoc
|
* @inheritDoc
|
||||||
*/
|
*/
|
||||||
ol.ImageCanvas.prototype.getImage = function(opt_context) {
|
ol.ImageCanvas.prototype.getImage = function() {
|
||||||
return this.canvas_;
|
return this.canvas_;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -16,10 +16,11 @@ goog.require('ol.events.EventType');
|
|||||||
* @param {string} src Image source URI.
|
* @param {string} src Image source URI.
|
||||||
* @param {?string} crossOrigin Cross origin.
|
* @param {?string} crossOrigin Cross origin.
|
||||||
* @param {ol.TileLoadFunctionType} tileLoadFunction Tile load function.
|
* @param {ol.TileLoadFunctionType} tileLoadFunction Tile load function.
|
||||||
|
* @param {olx.TileOptions=} opt_options Tile options.
|
||||||
*/
|
*/
|
||||||
ol.ImageTile = function(tileCoord, state, src, crossOrigin, tileLoadFunction) {
|
ol.ImageTile = function(tileCoord, state, src, crossOrigin, tileLoadFunction, opt_options) {
|
||||||
|
|
||||||
ol.Tile.call(this, tileCoord, state);
|
ol.Tile.call(this, tileCoord, state, opt_options);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Image URI
|
* Image URI
|
||||||
@@ -60,7 +61,7 @@ ol.inherits(ol.ImageTile, ol.Tile);
|
|||||||
ol.ImageTile.prototype.disposeInternal = function() {
|
ol.ImageTile.prototype.disposeInternal = function() {
|
||||||
if (this.state == ol.TileState.LOADING) {
|
if (this.state == ol.TileState.LOADING) {
|
||||||
this.unlistenImage_();
|
this.unlistenImage_();
|
||||||
this.image_.src = ol.ImageTile.blankImage.toDataURL('image/png');
|
this.image_.src = ol.ImageTile.blankImageUrl;
|
||||||
}
|
}
|
||||||
if (this.interimTile) {
|
if (this.interimTile) {
|
||||||
this.interimTile.dispose();
|
this.interimTile.dispose();
|
||||||
@@ -97,7 +98,7 @@ ol.ImageTile.prototype.getKey = function() {
|
|||||||
ol.ImageTile.prototype.handleImageError_ = function() {
|
ol.ImageTile.prototype.handleImageError_ = function() {
|
||||||
this.state = ol.TileState.ERROR;
|
this.state = ol.TileState.ERROR;
|
||||||
this.unlistenImage_();
|
this.unlistenImage_();
|
||||||
this.image_ = ol.ImageTile.blankImage;
|
this.image_.src = ol.ImageTile.blankImageUrl;
|
||||||
this.changed();
|
this.changed();
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -149,12 +150,12 @@ ol.ImageTile.prototype.unlistenImage_ = function() {
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A blank image.
|
* Data URI for a blank image.
|
||||||
* @type {HTMLCanvasElement}
|
* @type {string}
|
||||||
*/
|
*/
|
||||||
ol.ImageTile.blankImage = (function() {
|
ol.ImageTile.blankImageUrl = (function() {
|
||||||
var ctx = ol.dom.createCanvasContext2D(1, 1);
|
var ctx = ol.dom.createCanvasContext2D(1, 1);
|
||||||
ctx.fillStyle = 'rgba(0,0,0,0)';
|
ctx.fillStyle = 'rgba(0,0,0,0)';
|
||||||
ctx.fillRect(0, 0, 1, 1);
|
ctx.fillRect(0, 0, 1, 1);
|
||||||
return ctx.canvas;
|
return ctx.canvas.toDataURL('image/png');
|
||||||
})();
|
})();
|
||||||
|
|||||||
@@ -49,6 +49,12 @@ ol.interaction.DragAndDrop = function(opt_options) {
|
|||||||
*/
|
*/
|
||||||
this.dropListenKeys_ = null;
|
this.dropListenKeys_ = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @private
|
||||||
|
* @type {ol.source.Vector}
|
||||||
|
*/
|
||||||
|
this.source_ = options.source || null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
* @type {Element}
|
* @type {Element}
|
||||||
@@ -122,6 +128,10 @@ ol.interaction.DragAndDrop.prototype.handleResult_ = function(file, event) {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (this.source_) {
|
||||||
|
this.source_.clear();
|
||||||
|
this.source_.addFeatures(features);
|
||||||
|
}
|
||||||
this.dispatchEvent(
|
this.dispatchEvent(
|
||||||
new ol.interaction.DragAndDrop.Event(
|
new ol.interaction.DragAndDrop.Event(
|
||||||
ol.interaction.DragAndDrop.EventType_.ADD_FEATURES, file,
|
ol.interaction.DragAndDrop.EventType_.ADD_FEATURES, file,
|
||||||
|
|||||||
@@ -309,13 +309,16 @@ ol.interaction.Draw.prototype.setMap = function(map) {
|
|||||||
*/
|
*/
|
||||||
ol.interaction.Draw.handleEvent = function(event) {
|
ol.interaction.Draw.handleEvent = function(event) {
|
||||||
this.freehand_ = this.mode_ !== ol.interaction.Draw.Mode_.POINT && this.freehandCondition_(event);
|
this.freehand_ = this.mode_ !== ol.interaction.Draw.Mode_.POINT && this.freehandCondition_(event);
|
||||||
var pass = !this.freehand_;
|
var pass = true;
|
||||||
if (this.freehand_ &&
|
if (this.freehand_ &&
|
||||||
event.type === ol.MapBrowserEventType.POINTERDRAG && this.sketchFeature_ !== null) {
|
event.type === ol.MapBrowserEventType.POINTERDRAG &&
|
||||||
|
this.sketchFeature_ !== null) {
|
||||||
this.addToDrawing_(event);
|
this.addToDrawing_(event);
|
||||||
pass = false;
|
pass = false;
|
||||||
} else if (event.type ===
|
} else if (this.freehand_ &&
|
||||||
ol.MapBrowserEventType.POINTERMOVE) {
|
event.type === ol.MapBrowserEventType.POINTERDOWN) {
|
||||||
|
pass = false;
|
||||||
|
} else if (event.type === ol.MapBrowserEventType.POINTERMOVE) {
|
||||||
pass = this.handlePointerMove_(event);
|
pass = this.handlePointerMove_(event);
|
||||||
} else if (event.type === ol.MapBrowserEventType.DBLCLICK) {
|
} else if (event.type === ol.MapBrowserEventType.DBLCLICK) {
|
||||||
pass = false;
|
pass = false;
|
||||||
|
|||||||
@@ -306,7 +306,7 @@ ol.interaction.Extent.getSegments_ = function(extent) {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {ol.Pixel} pixel cursor location
|
* @param {ol.Pixel} pixel cursor location
|
||||||
* @param {ol.Map} map map
|
* @param {ol.PluggableMap} map map
|
||||||
* @returns {ol.Coordinate|null} snapped vertex on extent
|
* @returns {ol.Coordinate|null} snapped vertex on extent
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ ol.interaction.Interaction = function(options) {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
* @type {ol.Map}
|
* @type {ol.PluggableMap}
|
||||||
*/
|
*/
|
||||||
this.map_ = null;
|
this.map_ = null;
|
||||||
|
|
||||||
@@ -60,7 +60,7 @@ ol.interaction.Interaction.prototype.getActive = function() {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the map associated with this interaction.
|
* Get the map associated with this interaction.
|
||||||
* @return {ol.Map} Map.
|
* @return {ol.PluggableMap} Map.
|
||||||
* @api
|
* @api
|
||||||
*/
|
*/
|
||||||
ol.interaction.Interaction.prototype.getMap = function() {
|
ol.interaction.Interaction.prototype.getMap = function() {
|
||||||
@@ -83,7 +83,7 @@ ol.interaction.Interaction.prototype.setActive = function(active) {
|
|||||||
* Remove the interaction from its current map and attach it to the new map.
|
* Remove the interaction from its current map and attach it to the new map.
|
||||||
* Subclasses may set up event handlers to get notified about changes to
|
* Subclasses may set up event handlers to get notified about changes to
|
||||||
* the map here.
|
* the map here.
|
||||||
* @param {ol.Map} map Map.
|
* @param {ol.PluggableMap} map Map.
|
||||||
*/
|
*/
|
||||||
ol.interaction.Interaction.prototype.setMap = function(map) {
|
ol.interaction.Interaction.prototype.setMap = function(map) {
|
||||||
this.map_ = map;
|
this.map_ = map;
|
||||||
|
|||||||
@@ -839,7 +839,7 @@ ol.interaction.Modify.prototype.handlePointerMove_ = function(evt) {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {ol.Pixel} pixel Pixel
|
* @param {ol.Pixel} pixel Pixel
|
||||||
* @param {ol.Map} map Map.
|
* @param {ol.PluggableMap} map Map.
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
ol.interaction.Modify.prototype.handlePointerAtPixel_ = function(pixel, map) {
|
ol.interaction.Modify.prototype.handlePointerAtPixel_ = function(pixel, map) {
|
||||||
|
|||||||
@@ -244,7 +244,7 @@ ol.interaction.MouseWheelZoom.prototype.decrementInteractingHint_ = function() {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
* @param {ol.Map} map Map.
|
* @param {ol.PluggableMap} map Map.
|
||||||
*/
|
*/
|
||||||
ol.interaction.MouseWheelZoom.prototype.handleWheelZoom_ = function(map) {
|
ol.interaction.MouseWheelZoom.prototype.handleWheelZoom_ = function(map) {
|
||||||
var view = map.getView();
|
var view = map.getView();
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user