Compare commits
522 Commits
v3.1.0-pre
...
v3.1.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
78ac65e57d | ||
|
|
a796542223 | ||
|
|
dc7f60801a | ||
|
|
9b55d20f90 | ||
|
|
d8a845de39 | ||
|
|
ffea25fd6f | ||
|
|
aee37c4f90 | ||
|
|
62854f6e32 | ||
|
|
ab76c2cae3 | ||
|
|
eabb795624 | ||
|
|
0ae00fb277 | ||
|
|
9b0349f2d5 | ||
|
|
d4763a0fe7 | ||
|
|
3582445755 | ||
|
|
27b5036c62 | ||
|
|
a95327f18e | ||
|
|
95972b354e | ||
|
|
b7e0acf4fa | ||
|
|
3d86339b88 | ||
|
|
3bc84c7288 | ||
|
|
85a6de0ed6 | ||
|
|
a24716ac8a | ||
|
|
f1bf782133 | ||
|
|
2f5999529a | ||
|
|
fa68410e5d | ||
|
|
33cf4e6179 | ||
|
|
14ea2bf413 | ||
|
|
374f916b3a | ||
|
|
6d3103d4a9 | ||
|
|
4a311e66d7 | ||
|
|
6b46d5c76a | ||
|
|
1907de667a | ||
|
|
711ec705b7 | ||
|
|
8e8fc9977c | ||
|
|
ddc51ee267 | ||
|
|
cd0bed6291 | ||
|
|
440a85c6f4 | ||
|
|
5ca6b5dd81 | ||
|
|
fe0e17fdaf | ||
|
|
784701641d | ||
|
|
2bf191b5e3 | ||
|
|
19015d2ca9 | ||
|
|
e95a350203 | ||
|
|
b0cba674bc | ||
|
|
7c6ccca572 | ||
|
|
2ea685e18f | ||
|
|
13ce41a1d5 | ||
|
|
5192257a6d | ||
|
|
0bc96bb769 | ||
|
|
1bf4ddac6d | ||
|
|
d3365fb3a5 | ||
|
|
af30b88413 | ||
|
|
6478454a93 | ||
|
|
49f9690786 | ||
|
|
8d9acb8f48 | ||
|
|
2d12531105 | ||
|
|
e57ea1e66b | ||
|
|
a1c6662812 | ||
|
|
a101204ded | ||
|
|
fffeeaea97 | ||
|
|
babc33fcb0 | ||
|
|
abdae62481 | ||
|
|
7ece729d5f | ||
|
|
a8b7f3570d | ||
|
|
3623b4b31d | ||
|
|
5eb1537f48 | ||
|
|
7a09b11da5 | ||
|
|
3c00c7cf4c | ||
|
|
ae998a7585 | ||
|
|
86561e5ef2 | ||
|
|
e0f574bd25 | ||
|
|
f5722bbbf9 | ||
|
|
9b0b1543e0 | ||
|
|
aafe698285 | ||
|
|
c167b2b49d | ||
|
|
b60b0ecdb0 | ||
|
|
7fd017879f | ||
|
|
6dc90aefa2 | ||
|
|
a9f3367310 | ||
|
|
d07185e8f2 | ||
|
|
df170859cc | ||
|
|
ca355d2887 | ||
|
|
38dca7792c | ||
|
|
2c9fab22c8 | ||
|
|
65583a8b77 | ||
|
|
7bcd925cdb | ||
|
|
82a30b4cd5 | ||
|
|
e7db23761c | ||
|
|
31f7279de1 | ||
|
|
c3beae6b16 | ||
|
|
ae8f5149a7 | ||
|
|
0052116860 | ||
|
|
5c2501d982 | ||
|
|
1238ab0df0 | ||
|
|
f8b59dbd53 | ||
|
|
443c9749fb | ||
|
|
7bc2081138 | ||
|
|
0a01204bb3 | ||
|
|
aaf689bbec | ||
|
|
7922c08fe0 | ||
|
|
045109aaab | ||
|
|
de058c7889 | ||
|
|
39cb30308d | ||
|
|
a9e6b7115f | ||
|
|
ddcfe77897 | ||
|
|
f3824ec244 | ||
|
|
0c7e9a823c | ||
|
|
eb6aeee819 | ||
|
|
bcd983723f | ||
|
|
8fa628a11d | ||
|
|
4c504ede74 | ||
|
|
32a67801e5 | ||
|
|
b7d0e06f05 | ||
|
|
0fef608683 | ||
|
|
d28ffc4808 | ||
|
|
b03b762500 | ||
|
|
48478c6868 | ||
|
|
ca77a20b57 | ||
|
|
ac144d934f | ||
|
|
250a1e4da3 | ||
|
|
363ac54509 | ||
|
|
e3947fb09a | ||
|
|
c8bc3620d3 | ||
|
|
347c4c869d | ||
|
|
4b605d40d9 | ||
|
|
ef816d30ed | ||
|
|
99eab24b20 | ||
|
|
9f7e94ec85 | ||
|
|
641a829918 | ||
|
|
794c7950c8 | ||
|
|
d62ad47338 | ||
|
|
fdf52c1865 | ||
|
|
bdc05472bc | ||
|
|
47325cd4ae | ||
|
|
17e56d8357 | ||
|
|
3e2cc3c246 | ||
|
|
e4063102b7 | ||
|
|
3587418888 | ||
|
|
9802cfd56f | ||
|
|
12ddc7da57 | ||
|
|
571cd1c57a | ||
|
|
a820ccea5a | ||
|
|
9421bbd362 | ||
|
|
4c2a0d2053 | ||
|
|
b3ad50018d | ||
|
|
27d30e4286 | ||
|
|
3fb539460c | ||
|
|
61f0c55975 | ||
|
|
dfb55fb6a5 | ||
|
|
e716428895 | ||
|
|
87bb1b956b | ||
|
|
b2e419654b | ||
|
|
e109be4b57 | ||
|
|
0fd1a575a9 | ||
|
|
f0bf61bbf3 | ||
|
|
6d1d47a918 | ||
|
|
aef11b7471 | ||
|
|
b5d80679d8 | ||
|
|
dcd81ab4b3 | ||
|
|
ccc7c1b9b7 | ||
|
|
88a3fda514 | ||
|
|
22e33519c8 | ||
|
|
6255d8b493 | ||
|
|
0d16e0f0c8 | ||
|
|
c30233d9c7 | ||
|
|
4a07327dab | ||
|
|
cc39c26132 | ||
|
|
9f725f99ca | ||
|
|
4cbeb5ee22 | ||
|
|
8e4d7c0715 | ||
|
|
6790b8655a | ||
|
|
fabf05977a | ||
|
|
26ce8032eb | ||
|
|
d5bafc5e9f | ||
|
|
ce4ecb711b | ||
|
|
4734530ce2 | ||
|
|
1d7bae6b26 | ||
|
|
e385e81a20 | ||
|
|
25516fead9 | ||
|
|
f57f0e17ab | ||
|
|
56ad3ea9aa | ||
|
|
1a2544d30a | ||
|
|
6cd1f3f262 | ||
|
|
275f5bc796 | ||
|
|
c42ec27a4a | ||
|
|
6556e5eb52 | ||
|
|
da39e9f96a | ||
|
|
5878e7f839 | ||
|
|
802cfb59d5 | ||
|
|
2d74a6b10f | ||
|
|
34e82de8c8 | ||
|
|
9e591d21d0 | ||
|
|
890b96f1e9 | ||
|
|
5a29834555 | ||
|
|
5155e7a6ac | ||
|
|
1845665306 | ||
|
|
ed4bae064d | ||
|
|
b72fddf7f4 | ||
|
|
22491601ba | ||
|
|
638f8275aa | ||
|
|
fc16c4500d | ||
|
|
ec01aa45b9 | ||
|
|
8ba830f91f | ||
|
|
d6841e6d9d | ||
|
|
b8b48afc82 | ||
|
|
e307579d49 | ||
|
|
3ed46c50cc | ||
|
|
c0bbb6c4fa | ||
|
|
fe2f83e878 | ||
|
|
b3369cd516 | ||
|
|
857a8ca2bb | ||
|
|
37f91690f1 | ||
|
|
b904427087 | ||
|
|
57db47ac18 | ||
|
|
6360e4497d | ||
|
|
2e873d3e6d | ||
|
|
336de4b1b1 | ||
|
|
34953e8266 | ||
|
|
dae5bd53b7 | ||
|
|
a324f9805f | ||
|
|
32d5300682 | ||
|
|
fe74bd1b2c | ||
|
|
235f7c5bd1 | ||
|
|
fd9db053c0 | ||
|
|
ac24b615c3 | ||
|
|
44782c59a5 | ||
|
|
374f02c725 | ||
|
|
1e12e7ca90 | ||
|
|
fb8af71f25 | ||
|
|
283d878177 | ||
|
|
a665b76f8f | ||
|
|
8fcde092c7 | ||
|
|
40c33a21eb | ||
|
|
ab42965aa2 | ||
|
|
4132505313 | ||
|
|
97f8e4ac8d | ||
|
|
82ef80cf60 | ||
|
|
05f71383f9 | ||
|
|
ee54d21b89 | ||
|
|
7c88329354 | ||
|
|
2f7c97f25a | ||
|
|
3af2257345 | ||
|
|
7d01946fef | ||
|
|
257784e277 | ||
|
|
f1402522b5 | ||
|
|
20ceae2655 | ||
|
|
9681ec3e10 | ||
|
|
d5ffd8abac | ||
|
|
d73e183c89 | ||
|
|
d12db0419c | ||
|
|
c564a0963c | ||
|
|
4b61e864e7 | ||
|
|
3db26f1d2b | ||
|
|
aba47907ca | ||
|
|
ca3dfe2b35 | ||
|
|
4714c9b380 | ||
|
|
552f9483cb | ||
|
|
a77b7aa817 | ||
|
|
3bf4cf28f8 | ||
|
|
b1ac2ff2f2 | ||
|
|
46e33a2979 | ||
|
|
a306c5327c | ||
|
|
2b2f745248 | ||
|
|
327763cc82 | ||
|
|
f07e59d63f | ||
|
|
e9e76954b2 | ||
|
|
41eeed5f35 | ||
|
|
7593a18a19 | ||
|
|
ea65f65b37 | ||
|
|
c701ad6749 | ||
|
|
7e9dd65f8b | ||
|
|
cee1575a6c | ||
|
|
62e9d259b2 | ||
|
|
b3b7579f84 | ||
|
|
ffced21893 | ||
|
|
2a5fffaee4 | ||
|
|
41887e660b | ||
|
|
39010238b9 | ||
|
|
b991895c61 | ||
|
|
b269161276 | ||
|
|
96729baa9f | ||
|
|
3685626187 | ||
|
|
50c0bc6879 | ||
|
|
08aa6ee82d | ||
|
|
84889d9dc5 | ||
|
|
89248cf60a | ||
|
|
01bc02214c | ||
|
|
a7a2499bc7 | ||
|
|
344658edb0 | ||
|
|
46e436b599 | ||
|
|
23a24973eb | ||
|
|
c8e22bdb44 | ||
|
|
d9a4482393 | ||
|
|
501e7456c0 | ||
|
|
6c80ddcb14 | ||
|
|
87865be9f4 | ||
|
|
240f425c46 | ||
|
|
1de46c68d7 | ||
|
|
ce879e115f | ||
|
|
cb8167b31a | ||
|
|
96f8a806a6 | ||
|
|
fb816b7ab5 | ||
|
|
bdf3798c7a | ||
|
|
1df7f6c2c7 | ||
|
|
a2cf5b0889 | ||
|
|
d91330d83d | ||
|
|
c79f3aa101 | ||
|
|
b7376779fb | ||
|
|
2f17106b68 | ||
|
|
f32c550dbe | ||
|
|
bdeb195bfb | ||
|
|
583f47d24d | ||
|
|
d85c31e112 | ||
|
|
97dafa6425 | ||
|
|
5998011985 | ||
|
|
73e76fe468 | ||
|
|
4c3a7d0248 | ||
|
|
dee4d3b130 | ||
|
|
c05ffff629 | ||
|
|
6abe3047ec | ||
|
|
89e682ba9c | ||
|
|
f715e3186a | ||
|
|
fe3cdd8d1b | ||
|
|
440d253335 | ||
|
|
3268b20333 | ||
|
|
e0c5e742ad | ||
|
|
0a364b32ed | ||
|
|
c0acc8d825 | ||
|
|
c50b7d759c | ||
|
|
d4658837e2 | ||
|
|
1d221f8166 | ||
|
|
ebe0c6a88c | ||
|
|
0c6a40f5b5 | ||
|
|
64da2647a6 | ||
|
|
f0841b38cd | ||
|
|
4924f34287 | ||
|
|
5ba6ddcecf | ||
|
|
fb24c68b9c | ||
|
|
509fbaee1c | ||
|
|
815a22bd22 | ||
|
|
6b8a5870ba | ||
|
|
83025fb97d | ||
|
|
581b372c6a | ||
|
|
43756a2d59 | ||
|
|
64a7cdf372 | ||
|
|
9029c0fdad | ||
|
|
afe1467ddf | ||
|
|
03ed3fe43f | ||
|
|
84c11b08fa | ||
|
|
161d75dd22 | ||
|
|
1253177ae4 | ||
|
|
0f99f113e3 | ||
|
|
c0f2187310 | ||
|
|
d0d6215550 | ||
|
|
759386e37e | ||
|
|
4c8d8c21dc | ||
|
|
e32be091a4 | ||
|
|
cc442d964b | ||
|
|
e55caef0d2 | ||
|
|
c7a3fcd426 | ||
|
|
224d86802e | ||
|
|
8415a0c8ba | ||
|
|
02bfa42736 | ||
|
|
0115368649 | ||
|
|
7618c96c29 | ||
|
|
28e51740c6 | ||
|
|
1c9a87d50d | ||
|
|
209d39a460 | ||
|
|
d7a992ba83 | ||
|
|
1bd388188b | ||
|
|
05bbfd58a8 | ||
|
|
c99b1772ed | ||
|
|
46b03e79a4 | ||
|
|
787f98c5f2 | ||
|
|
2c92d9a709 | ||
|
|
14d7f2a797 | ||
|
|
4534bb8861 | ||
|
|
bf43816b66 | ||
|
|
a1dded3c27 | ||
|
|
26f025a409 | ||
|
|
00f20a11b5 | ||
|
|
22e1159736 | ||
|
|
6eea0a1fc6 | ||
|
|
95d2085cc4 | ||
|
|
495a7c95a1 | ||
|
|
64bc8f74be | ||
|
|
8bff6a1abe | ||
|
|
ed1be0d4e7 | ||
|
|
d4bd5f24c6 | ||
|
|
f332cdacf1 | ||
|
|
46ec078501 | ||
|
|
9201312737 | ||
|
|
178e3f1856 | ||
|
|
4b7e52c76f | ||
|
|
127818f9b7 | ||
|
|
6ca1640659 | ||
|
|
2d53eb7667 | ||
|
|
08c6e601b8 | ||
|
|
ffeda3f25a | ||
|
|
8027c577bc | ||
|
|
765189b86e | ||
|
|
fed6376e26 | ||
|
|
a1e19b4905 | ||
|
|
46870456ac | ||
|
|
f5761daa61 | ||
|
|
46eb14dc96 | ||
|
|
87a06c0086 | ||
|
|
b40c439d33 | ||
|
|
74410487aa | ||
|
|
9ebde652dc | ||
|
|
abb86e16f0 | ||
|
|
cd80ca6024 | ||
|
|
6fe80c4111 | ||
|
|
51da7bad8c | ||
|
|
f863386f39 | ||
|
|
e68eb726d2 | ||
|
|
44d9950e8c | ||
|
|
8a82048c12 | ||
|
|
1f54b33961 | ||
|
|
dc7aee1974 | ||
|
|
4d4d9abe76 | ||
|
|
aa41da1318 | ||
|
|
ef435d9deb | ||
|
|
88d1258e83 | ||
|
|
757b6a214c | ||
|
|
7c2e0fa627 | ||
|
|
ba2d39e683 | ||
|
|
aad9e4e8d3 | ||
|
|
67ec0b5988 | ||
|
|
ee3259d13e | ||
|
|
398b1f86ce | ||
|
|
f938ce82d9 | ||
|
|
70375d5227 | ||
|
|
d77d504d01 | ||
|
|
bd72f6117b | ||
|
|
bbea205a9c | ||
|
|
2ecd2eadf7 | ||
|
|
c8225e49b1 | ||
|
|
9f108391ae | ||
|
|
33adcd3903 | ||
|
|
5ddbe54310 | ||
|
|
2d415b6ce8 | ||
|
|
aa6a5d52dd | ||
|
|
8fb5dc75ef | ||
|
|
03fa9965c5 | ||
|
|
7152cdc87f | ||
|
|
d712b2ba54 | ||
|
|
c06774acb5 | ||
|
|
88030dbce7 | ||
|
|
773ac433ce | ||
|
|
771c418de3 | ||
|
|
1652da8e9d | ||
|
|
1d533d2924 | ||
|
|
5cab561f12 | ||
|
|
56e3ba4578 | ||
|
|
97acd989a2 | ||
|
|
8eaeb7bc35 | ||
|
|
c6b172aef2 | ||
|
|
120ace5cef | ||
|
|
47d17342ca | ||
|
|
478ecb80fd | ||
|
|
6d095bdf7c | ||
|
|
bf314f30d5 | ||
|
|
af4184e743 | ||
|
|
4785001548 | ||
|
|
780df9819b | ||
|
|
d917952615 | ||
|
|
fd6a5d8df3 | ||
|
|
01b64bc655 | ||
|
|
ed980e0e73 | ||
|
|
a6c3607897 | ||
|
|
45967992fb | ||
|
|
c83caa9686 | ||
|
|
f440de2446 | ||
|
|
0a93ad5430 | ||
|
|
473023d146 | ||
|
|
fa7f580053 | ||
|
|
3f5dd45310 | ||
|
|
119289040f | ||
|
|
d8d0f87ad6 | ||
|
|
b42b6ae1c5 | ||
|
|
6d531cdc29 | ||
|
|
b61c257124 | ||
|
|
5a2c206cab | ||
|
|
74fd55a3e8 | ||
|
|
017703f05d | ||
|
|
da479908e7 | ||
|
|
1ce43e323d | ||
|
|
dd337f3526 | ||
|
|
c4d6e04e4b | ||
|
|
4702aa496a | ||
|
|
27f32621ab | ||
|
|
93db3d42b7 | ||
|
|
8a07d241ff | ||
|
|
d290445048 | ||
|
|
1a7cbfd6ac | ||
|
|
47e182524f | ||
|
|
bea721349a | ||
|
|
0646056751 | ||
|
|
678c66f50c | ||
|
|
607543e4e7 | ||
|
|
563174383a | ||
|
|
d3ac01445e | ||
|
|
58485fc1f1 | ||
|
|
07d6b83154 | ||
|
|
8182396454 | ||
|
|
9324580c87 | ||
|
|
d8114012bb | ||
|
|
c9171b8682 | ||
|
|
82f267f0c5 | ||
|
|
f8e8653480 | ||
|
|
192c7827c9 | ||
|
|
13f10f6a98 | ||
|
|
074330707c | ||
|
|
8efab3d4be | ||
|
|
8b38367e2b | ||
|
|
b8e5ffaf31 | ||
|
|
4aad872d71 | ||
|
|
5884f7343a | ||
|
|
c49891dcce | ||
|
|
42b58cddbd | ||
|
|
f5e5419cb6 |
3
.gitignore
vendored
3
.gitignore
vendored
@@ -1,6 +1,7 @@
|
||||
*.pyc
|
||||
/build
|
||||
/build/
|
||||
/examples/*.html.png
|
||||
/examples/example-list.js
|
||||
/examples/example-list.xml
|
||||
/node_modules/
|
||||
/dist/
|
||||
|
||||
5
.npmignore
Normal file
5
.npmignore
Normal file
@@ -0,0 +1,5 @@
|
||||
*.pyc
|
||||
/build/
|
||||
/examples/*.html.png
|
||||
/examples/example-list.js
|
||||
/examples/example-list.xml
|
||||
44
build.py
44
build.py
@@ -32,7 +32,11 @@ class ThreadPool:
|
||||
try:
|
||||
function(*args, **kargs)
|
||||
except:
|
||||
print("ERROR")
|
||||
for count, thing in enumerate(args):
|
||||
print '{0}. {1}'.format(count, thing)
|
||||
print(sys.exc_info()[0])
|
||||
print("ERROR")
|
||||
self.tasks.errors = True
|
||||
self.tasks.task_done()
|
||||
|
||||
@@ -146,6 +150,7 @@ SRC = [path
|
||||
if path.endswith('.js')
|
||||
if path not in SHADER_SRC]
|
||||
|
||||
NPM_INSTALL = 'build/npm-install-timestamp'
|
||||
|
||||
def report_sizes(t):
|
||||
stringio = StringIO()
|
||||
@@ -176,18 +181,25 @@ virtual('check', 'lint', 'build/ol.js', 'test')
|
||||
virtual('todo', 'fixme')
|
||||
|
||||
|
||||
@target('build/ol.css', 'css/ol.css')
|
||||
@target(NPM_INSTALL, 'package.json')
|
||||
def npm_install(t):
|
||||
t.run('npm', 'install')
|
||||
t.touch()
|
||||
|
||||
|
||||
@target('build/ol.css', 'css/ol.css', NPM_INSTALL)
|
||||
def build_ol_css(t):
|
||||
t.output('%(CLEANCSS)s', 'css/ol.css')
|
||||
|
||||
|
||||
@target('build/ol.js', SRC, SHADER_SRC, 'config/ol.json')
|
||||
@target('build/ol.js', SRC, SHADER_SRC, 'config/ol.json', NPM_INSTALL)
|
||||
def build_ol_new_js(t):
|
||||
t.run('node', 'tasks/build.js', 'config/ol.json', 'build/ol.js')
|
||||
report_sizes(t)
|
||||
|
||||
|
||||
@target('build/ol-debug.js', SRC, SHADER_SRC, 'config/ol-debug.json')
|
||||
@target('build/ol-debug.js', SRC, SHADER_SRC, 'config/ol-debug.json',
|
||||
NPM_INSTALL)
|
||||
def build_ol_debug_js(t):
|
||||
t.run('node', 'tasks/build.js', 'config/ol-debug.json', 'build/ol-debug.js')
|
||||
report_sizes(t)
|
||||
@@ -236,7 +248,7 @@ def examples_examples_list_js(t):
|
||||
|
||||
|
||||
@target('build/examples/all.combined.js', 'build/examples/all.js',
|
||||
SRC, SHADER_SRC, 'config/examples-all.json')
|
||||
SRC, SHADER_SRC, 'config/examples-all.json', NPM_INSTALL)
|
||||
def build_examples_all_combined_js(t):
|
||||
t.run('node', 'tasks/build.js', 'config/examples-all.json',
|
||||
'build/examples/all.combined.js')
|
||||
@@ -270,6 +282,7 @@ def examples_star_json(name, match):
|
||||
"exports": [],
|
||||
"src": [
|
||||
"src/**/*.js",
|
||||
"build/ol.ext/*.js",
|
||||
"examples/%(id)s.js" % match.groupdict()],
|
||||
"compile": {
|
||||
"js": [
|
||||
@@ -281,6 +294,7 @@ def examples_star_json(name, match):
|
||||
"externs/bootstrap.js",
|
||||
"externs/closure-compiler.js",
|
||||
"externs/example.js",
|
||||
"externs/fastclick.js",
|
||||
"externs/geojson.js",
|
||||
"externs/jquery-1.9.js",
|
||||
"externs/proj4js.js",
|
||||
@@ -336,14 +350,16 @@ def examples_star_json(name, match):
|
||||
"api", "observable"
|
||||
],
|
||||
"compilation_level": "ADVANCED",
|
||||
"output_wrapper": "// OpenLayers 3. See http://ol3.js.org/\n(function(){%output%})();",
|
||||
"warning_level": "VERBOSE",
|
||||
"output_wrapper": "(function(){%output%})();",
|
||||
"use_types_for_optimization": True,
|
||||
"manage_closure_dependencies": True
|
||||
}
|
||||
})
|
||||
with open(t.name, 'wb') as f:
|
||||
f.write(content)
|
||||
return Target(name, action=action, dependencies=[__file__])
|
||||
return Target(name, action=action,
|
||||
dependencies=[__file__, NPM_INSTALL])
|
||||
|
||||
|
||||
@rule(r'\Abuild/examples/(?P<id>.*).combined.js\Z')
|
||||
@@ -354,11 +370,12 @@ def examples_star_combined_js(name, match):
|
||||
report_sizes(t)
|
||||
dependencies = [SRC, SHADER_SRC,
|
||||
'examples/%(id)s.js' % match.groupdict(),
|
||||
'build/examples/%(id)s.json' % match.groupdict()]
|
||||
'build/examples/%(id)s.json' % match.groupdict(),
|
||||
NPM_INSTALL]
|
||||
return Target(name, action=action, dependencies=dependencies)
|
||||
|
||||
|
||||
@target('serve', 'examples')
|
||||
@target('serve', 'examples', NPM_INSTALL)
|
||||
def serve(t):
|
||||
t.run('node', 'tasks/serve.js')
|
||||
|
||||
@@ -376,11 +393,10 @@ def build_lint_src_timestamp(t):
|
||||
t.newer(t.dependencies))
|
||||
t.touch()
|
||||
|
||||
|
||||
virtual('jshint', 'build/jshint-timestamp')
|
||||
|
||||
@target('build/jshint-timestamp', SRC, EXAMPLES_SRC, SPEC, TASKS,
|
||||
precious=True)
|
||||
NPM_INSTALL, precious=True)
|
||||
def build_jshint_timestamp(t):
|
||||
t.run(variables.JSHINT, '--verbose', t.newer(t.dependencies))
|
||||
t.touch()
|
||||
@@ -586,7 +602,8 @@ virtual('apidoc', 'build/jsdoc-%(BRANCH)s-timestamp' % vars(variables))
|
||||
|
||||
|
||||
@target('build/jsdoc-%(BRANCH)s-timestamp' % vars(variables), 'host-resources',
|
||||
SRC, SHADER_SRC, ifind('config/jsdoc/api/template'))
|
||||
SRC, SHADER_SRC, ifind('config/jsdoc/api/template'),
|
||||
NPM_INSTALL)
|
||||
def jsdoc_BRANCH_timestamp(t):
|
||||
t.run('%(JSDOC)s', 'config/jsdoc/api/index.md',
|
||||
'-c', 'config/jsdoc/api/conf.json',
|
||||
@@ -660,8 +677,11 @@ def host_examples(t):
|
||||
t.rm_rf('build/hosted/%(BRANCH)s/ol')
|
||||
t.makedirs('build/hosted/%(BRANCH)s/ol')
|
||||
t.cp_r('src/ol', 'build/hosted/%(BRANCH)s/ol/ol')
|
||||
t.rm_rf('build/hosted/%(BRANCH)s/ol.ext')
|
||||
t.cp_r('build/ol.ext', 'build/hosted/%(BRANCH)s/ol.ext')
|
||||
t.run('%(PYTHON)s', closure_lib_path + '/closure/bin/build/depswriter.py',
|
||||
'--root_with_prefix', 'src ../../../ol',
|
||||
'--root_with_prefix', 'build/ol.ext ../../../ol.ext',
|
||||
'--root', 'build/hosted/%(BRANCH)s/closure-library/closure/goog',
|
||||
'--root_with_prefix', 'build/hosted/%(BRANCH)s/closure-library/'
|
||||
'third_party ../../third_party',
|
||||
@@ -683,7 +703,7 @@ def check_examples(t):
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
@target('test', phony=True)
|
||||
@target('test', NPM_INSTALL, phony=True)
|
||||
def test(t):
|
||||
t.run('node', 'tasks/test.js')
|
||||
|
||||
|
||||
234
changelog/v3.1.0.md
Normal file
234
changelog/v3.1.0.md
Normal file
@@ -0,0 +1,234 @@
|
||||
# 3.1.0
|
||||
|
||||
## Summary
|
||||
|
||||
The 3.1.0 release includes a whopping 214 merged pull requests since 3.0.0. Of note, the WebGL renderer [now supports point rendering](https://github.com/openlayers/ol3/pull/2967). You can use [UTFGrids for interaction](https://github.com/openlayers/ol3/pull/3015)! Styles can now specify [alternate geometries for rendering](https://github.com/openlayers/ol3/pull/3010). Library builds [can now be loaded](https://github.com/openlayers/ol3/pull/3039) with module loaders like Browserify or RequireJS. You can now symbolize point features with stars, squares, enneadecagons, or [any other regular(ish) polygon](https://github.com/openlayers/ol3/pull/2706). See the full list of [changes](#changes) below.
|
||||
|
||||
## Upgrade notes
|
||||
|
||||
The 3.1.0 release maintains a backwards-compatible API with the 3.0.0 release, so upgrades should be painless. Some special considerations below.
|
||||
|
||||
* If you are using a `ol.source.ImageStatic`, you no longer need to provide an `imageSize` option if you don't want any special scaling on your image (see [#2796](https://github.com/openlayers/ol3/pull/2796)).
|
||||
|
||||
* Instead of calling `obj.unByKey(key)` you can now call `ol.Observable.unByKey(key)` (see [#2794](https://github.com/openlayers/ol3/pull/2794)).
|
||||
|
||||
* If you were using `format.writeFeatures(features)`, note that this method returns a string for all feature formats. We considered the previous behavior a bug (see [#3003](https://github.com/openlayers/ol3/pull/3003)).
|
||||
|
||||
* The `obj.dispatchChangeEvent()` method is now spelled `obj.changed()`. This method is still unstable (see [#2684](https://github.com/openlayers/ol3/pull/2684)).
|
||||
|
||||
## Changes
|
||||
|
||||
* [#3076](https://github.com/openlayers/ol3/pull/3076) - Add script to standardize changelog creation. ([@tschaub](https://github.com/tschaub))
|
||||
* [#3074](https://github.com/openlayers/ol3/pull/3074) - Remove misplaced function annotation. ([@fredj](https://github.com/fredj))
|
||||
* [#3075](https://github.com/openlayers/ol3/pull/3075) - Remove unneeded undefined from ol.proj.ProjectionLike definitions (r=@tschaub) ([@bartvde](https://github.com/bartvde))
|
||||
* [#3071](https://github.com/openlayers/ol3/pull/3071) - Add task for publishing to npm. ([@tschaub](https://github.com/tschaub))
|
||||
* [#3070](https://github.com/openlayers/ol3/pull/3070) - Define goog and assign to global when generating UMD debug builds. ([@tschaub](https://github.com/tschaub))
|
||||
* [#3068](https://github.com/openlayers/ol3/pull/3068) - Update pre-release version. ([@tschaub](https://github.com/tschaub))
|
||||
* [#3039](https://github.com/openlayers/ol3/pull/3039) - Support for UMD builds. ([@tschaub](https://github.com/tschaub))
|
||||
* [#3038](https://github.com/openlayers/ol3/pull/3038) - Update attribution CSS #2803 ([@acanimal](https://github.com/acanimal))
|
||||
* [#3061](https://github.com/openlayers/ol3/pull/3061) - Add a renderBuffer option to ol.layer.Vector ([@elemoine](https://github.com/elemoine))
|
||||
* [#3048](https://github.com/openlayers/ol3/pull/3048) - Add a drag-features example ([@elemoine](https://github.com/elemoine))
|
||||
* [#3060](https://github.com/openlayers/ol3/pull/3060) - Update closure-library version ([@fredj](https://github.com/fredj))
|
||||
* [#3058](https://github.com/openlayers/ol3/pull/3058) - Use an API function to extend the extent ([@ahocevar](https://github.com/ahocevar))
|
||||
* [#3010](https://github.com/openlayers/ol3/pull/3010) - Allow styles to override feature geometries ([@ahocevar](https://github.com/ahocevar))
|
||||
* [#3056](https://github.com/openlayers/ol3/pull/3056) - Reuse previousExtent_ local variable ([@fredj](https://github.com/fredj))
|
||||
* [#3055](https://github.com/openlayers/ol3/pull/3055) - ol.tilecoord.createOrUpdate: add 'opt_' prefix to optional param ([@fredj](https://github.com/fredj))
|
||||
* [#3044](https://github.com/openlayers/ol3/pull/3044) - Mark Image style constructor properties `@api` ([@gberaudo](https://github.com/gberaudo))
|
||||
* [#3052](https://github.com/openlayers/ol3/pull/3052) - Add a testcase for parsing GML feature with only boundedBy ([@bartvde](https://github.com/bartvde))
|
||||
* [#3051](https://github.com/openlayers/ol3/pull/3051) - Remove // NOCOMPILE from vector-wfs ([@elemoine](https://github.com/elemoine))
|
||||
* [#2699](https://github.com/openlayers/ol3/pull/2699) - No need for featureNS and featureType to be quoted ([@bartvde](https://github.com/bartvde))
|
||||
* [#3047](https://github.com/openlayers/ol3/pull/3047) - Move description above annotation to avoid JSDoc warnings. ([@tschaub](https://github.com/tschaub))
|
||||
* [#2996](https://github.com/openlayers/ol3/pull/2996) - Add getter functions for points and angle in ol.style.RegularShape ([@bartvde](https://github.com/bartvde))
|
||||
* [#3046](https://github.com/openlayers/ol3/pull/3046) - Need exportable constructor for constructor options in olx ([@ahocevar](https://github.com/ahocevar))
|
||||
* [#3043](https://github.com/openlayers/ol3/pull/3043) - Use // NOCOMPILE for vector-wfs ([@elemoine](https://github.com/elemoine))
|
||||
* [#3042](https://github.com/openlayers/ol3/pull/3042) - Print example name in check-examples exception ([@gberaudo](https://github.com/gberaudo))
|
||||
* [#3032](https://github.com/openlayers/ol3/pull/3032) - Extension points for custom controls and interactions ([@elemoine](https://github.com/elemoine))
|
||||
* [#3033](https://github.com/openlayers/ol3/pull/3033) - Allow custom mousemove conditions for Select interaction ([@ahocevar](https://github.com/ahocevar))
|
||||
* [#3040](https://github.com/openlayers/ol3/pull/3040) - Transform the coordinates in place ([@fredj](https://github.com/fredj))
|
||||
* [#3036](https://github.com/openlayers/ol3/pull/3036) - Respect geometry stride in modify interaction ([@tonio](https://github.com/tonio))
|
||||
* [#3020](https://github.com/openlayers/ol3/pull/3020) - Correct error message from generate-info.js. ([@tschaub](https://github.com/tschaub))
|
||||
* [#3037](https://github.com/openlayers/ol3/pull/3037) - Implement rotation for ol.style.RegularShape ([@bartvde](https://github.com/bartvde))
|
||||
* [#3015](https://github.com/openlayers/ol3/pull/3015) - UTFGrid Support ([@klokantech](https://github.com/klokantech))
|
||||
* [#3012](https://github.com/openlayers/ol3/pull/3012) - Failing tests in IE9 ([@bartvde](https://github.com/bartvde))
|
||||
* [#3029](https://github.com/openlayers/ol3/pull/3029) - Update closure compiler and library ([@fredj](https://github.com/fredj))
|
||||
* [#3031](https://github.com/openlayers/ol3/pull/3031) - Add missing maxZoom property in olx.view.FitGeometryOptions ([@fredj](https://github.com/fredj))
|
||||
* [#3028](https://github.com/openlayers/ol3/pull/3028) - ol.format.WFS cleanup ([@fredj](https://github.com/fredj))
|
||||
* [#3024](https://github.com/openlayers/ol3/pull/3024) - Add missing gmlFormat to olx.format.WFSOptions ([@fredj](https://github.com/fredj))
|
||||
* [#3023](https://github.com/openlayers/ol3/pull/3023) - Change loader function return type ([@fredj](https://github.com/fredj))
|
||||
* [#3021](https://github.com/openlayers/ol3/pull/3021) - Add missing properties in olx.control.AttributionOptions typedef ([@fredj](https://github.com/fredj))
|
||||
* [#3013](https://github.com/openlayers/ol3/pull/3013) - Improve vector source clear() performance ([@gberaudo](https://github.com/gberaudo))
|
||||
* [#3017](https://github.com/openlayers/ol3/pull/3017) - Use writeFeatures instead of writeFeaturesNode in GPX and KML example (r=@elemoine) ([@bartvde](https://github.com/bartvde))
|
||||
* [#3014](https://github.com/openlayers/ol3/pull/3014) - Simplify hit detection code ([@elemoine](https://github.com/elemoine))
|
||||
* [#3006](https://github.com/openlayers/ol3/pull/3006) - gml3.js and gml2.js don't follow file naming conventions ([@bartvde](https://github.com/bartvde))
|
||||
* [#3003](https://github.com/openlayers/ol3/pull/3003) - The writeFeatures method should always return a string (r=@elemoine) ([@bartvde](https://github.com/bartvde))
|
||||
* [#3011](https://github.com/openlayers/ol3/pull/3011) - opt_options may not be defined, use options ([@pagameba](https://github.com/pagameba))
|
||||
* [#3009](https://github.com/openlayers/ol3/pull/3009) - Fix hit detection bug ([@elemoine](https://github.com/elemoine))
|
||||
* [#3002](https://github.com/openlayers/ol3/pull/3002) - Passing options to RegularShape is mandatory ([@elemoine](https://github.com/elemoine))
|
||||
* [#2967](https://github.com/openlayers/ol3/pull/2967) - Add support for drawing points with WebGL ([@camptocamp](https://github.com/camptocamp))
|
||||
* [#2701](https://github.com/openlayers/ol3/pull/2701) - Writing GeoJSON does not respect the feature's geometryName ([@bartvde](https://github.com/bartvde))
|
||||
* [#3000](https://github.com/openlayers/ol3/pull/3000) - Explain that return of ol.color.asArray should not be modified ([@bartvde](https://github.com/bartvde))
|
||||
* [#2997](https://github.com/openlayers/ol3/pull/2997) - Use new demo GeoServer location ([@ahocevar](https://github.com/ahocevar))
|
||||
* [#2976](https://github.com/openlayers/ol3/pull/2976) - Add an example to show off ol.style.RegularShape ([@bartvde](https://github.com/bartvde))
|
||||
* [#2992](https://github.com/openlayers/ol3/pull/2992) - Add support for finding features at a given coordinates for vector tiles - fixes ([@pgiraud](https://github.com/pgiraud))
|
||||
* [#2987](https://github.com/openlayers/ol3/pull/2987) - Image layer renderers use source projection if given and equivalent ([@kartverket](https://github.com/kartverket))
|
||||
* [#2975](https://github.com/openlayers/ol3/pull/2975) - Use offsetX and offsetY if available ([@fredj](https://github.com/fredj))
|
||||
* [#2973](https://github.com/openlayers/ol3/pull/2973) - Making GetTileCoordFor methods public avaible ([@s093294](https://github.com/s093294))
|
||||
* [#2986](https://github.com/openlayers/ol3/pull/2986) - Add support for finding features at a given coordinates for vector tiles ([@pgiraud](https://github.com/pgiraud))
|
||||
* [#2937](https://github.com/openlayers/ol3/pull/2937) - Clip layer rendering to limited extent. ([@tschaub](https://github.com/tschaub))
|
||||
* [#2971](https://github.com/openlayers/ol3/pull/2971) - Two ol.source.TileVector fixes ([@elemoine](https://github.com/elemoine))
|
||||
* [#2988](https://github.com/openlayers/ol3/pull/2988) - Correct olx.style.RegularShapeOptions definition (r=@elemoine) ([@bartvde](https://github.com/bartvde))
|
||||
* [#2981](https://github.com/openlayers/ol3/pull/2981) - Use lineDash in ol.style.Circle's and ol.style.RegularShape's stroke (r=@fredj,@elemoine) ([@bartvde](https://github.com/bartvde))
|
||||
* [#2982](https://github.com/openlayers/ol3/pull/2982) - Allow radius1 as an alias for radius in ol.style.RegularShape ([@bartvde](https://github.com/bartvde))
|
||||
* [#2980](https://github.com/openlayers/ol3/pull/2980) - Export ol.source.TileVector#getFeatures in built mode ([@pgiraud](https://github.com/pgiraud))
|
||||
* [#2979](https://github.com/openlayers/ol3/pull/2979) - Support OGC srs urns without an EPSG database version ([@bartvde](https://github.com/bartvde))
|
||||
* [#2978](https://github.com/openlayers/ol3/pull/2978) - Fix zoom levels for the MapQuest Street layer ([@ahocevar](https://github.com/ahocevar))
|
||||
* [#2889](https://github.com/openlayers/ol3/pull/2889) - Add GetFeatureInfo format ([@fgravin](https://github.com/fgravin))
|
||||
* [#2965](https://github.com/openlayers/ol3/pull/2965) - Fix pan with select interaction in mousemove mode. ([@tonio](https://github.com/tonio))
|
||||
* [#2960](https://github.com/openlayers/ol3/pull/2960) - LayerGroup extent should be used if extent not set on child layer ([@bartvde](https://github.com/bartvde))
|
||||
* [#2956](https://github.com/openlayers/ol3/pull/2956) - Revert "Remove mousewheel event name workaround" ([@fredj](https://github.com/fredj))
|
||||
* [#2959](https://github.com/openlayers/ol3/pull/2959) - Fix typo in selector ([@ahocevar](https://github.com/ahocevar))
|
||||
* [#2895](https://github.com/openlayers/ol3/pull/2895) - Move font-family customization to layout.css ([@fredj](https://github.com/fredj))
|
||||
* [#2896](https://github.com/openlayers/ol3/pull/2896) - Remove duplicated style parameter ([@kalinbas](https://github.com/kalinbas))
|
||||
* [#2938](https://github.com/openlayers/ol3/pull/2938) - Additional image static docs. ([@tschaub](https://github.com/tschaub))
|
||||
* [#2939](https://github.com/openlayers/ol3/pull/2939) - Make stability checkbox sticky. ([@tschaub](https://github.com/tschaub))
|
||||
* [#2949](https://github.com/openlayers/ol3/pull/2949) - Add ol.ext to hosted dir ([@elemoine](https://github.com/elemoine))
|
||||
* [#2943](https://github.com/openlayers/ol3/pull/2943) - Mark applyTransform api stable ([@fredj](https://github.com/fredj))
|
||||
* [#2936](https://github.com/openlayers/ol3/pull/2936) - Fix unselection of selected features ([@ahocevar](https://github.com/ahocevar))
|
||||
* [#2935](https://github.com/openlayers/ol3/pull/2935) - Fix jsdoc comment ([@geosense](https://github.com/geosense))
|
||||
* [#2933](https://github.com/openlayers/ol3/pull/2933) - Fix compile warning ([@elemoine](https://github.com/elemoine))
|
||||
* [#2931](https://github.com/openlayers/ol3/pull/2931) - Improvement to view docs ([@elemoine](https://github.com/elemoine))
|
||||
* [#2906](https://github.com/openlayers/ol3/pull/2906) - Assume a latitude, longitude order for Polyline format ([@fredj](https://github.com/fredj))
|
||||
* [#2927](https://github.com/openlayers/ol3/pull/2927) - Make it possible to programmatically finish drawing ([@elemoine](https://github.com/elemoine))
|
||||
* [#2928](https://github.com/openlayers/ol3/pull/2928) - Do not rename handleMapBrowserEvent internally ([@elemoine](https://github.com/elemoine))
|
||||
* [#2924](https://github.com/openlayers/ol3/pull/2924) - Readability rearangement in canvasmaprenderer.js ([@gberaudo](https://github.com/gberaudo))
|
||||
* [#2911](https://github.com/openlayers/ol3/pull/2911) - List events fired in the navigation. ([@tschaub](https://github.com/tschaub))
|
||||
* [#2921](https://github.com/openlayers/ol3/pull/2921) - Small feature overlay optimization ([@gberaudo](https://github.com/gberaudo))
|
||||
* [#2897](https://github.com/openlayers/ol3/pull/2897) - Remove pointerup listener on controls ([@fredj](https://github.com/fredj))
|
||||
* [#2912](https://github.com/openlayers/ol3/pull/2912) - jQuery externs update ([@fredj](https://github.com/fredj))
|
||||
* [#2888](https://github.com/openlayers/ol3/pull/2888) - Element boundedBy must not be set as geometry field on GML reading ([@fgravin](https://github.com/fgravin))
|
||||
* [#2903](https://github.com/openlayers/ol3/pull/2903) - Improved docs for icon options ([@elemoine](https://github.com/elemoine))
|
||||
* [#2900](https://github.com/openlayers/ol3/pull/2900) - Allow build.js task to add header. ([@tschaub](https://github.com/tschaub))
|
||||
* [#2893](https://github.com/openlayers/ol3/pull/2893) - Don't pass an object to goog.dom.createDom for the class name ([@fredj](https://github.com/fredj))
|
||||
* [#2781](https://github.com/openlayers/ol3/pull/2781) - Use a standard title attribute for the control buttons ([@fredj](https://github.com/fredj))
|
||||
* [#2852](https://github.com/openlayers/ol3/pull/2852) - Add missing space between class names ([@fredj](https://github.com/fredj))
|
||||
* [#2891](https://github.com/openlayers/ol3/pull/2891) - Introduce a load function for image sources ([@ahocevar](https://github.com/ahocevar))
|
||||
* [#2885](https://github.com/openlayers/ol3/pull/2885) - Add wrapX option to TileJSON source ([@elemoine](https://github.com/elemoine))
|
||||
* [#2890](https://github.com/openlayers/ol3/pull/2890) - Use correct layer property names ([@elemoine](https://github.com/elemoine))
|
||||
* [#2887](https://github.com/openlayers/ol3/pull/2887) - Explicitly pass coordinate dimension before transforming. ([@tschaub](https://github.com/tschaub))
|
||||
* [#2886](https://github.com/openlayers/ol3/pull/2886) - Use ternary notation ([@elemoine](https://github.com/elemoine))
|
||||
* [#2869](https://github.com/openlayers/ol3/pull/2869) - Export useful xml functions ([@tonio](https://github.com/tonio))
|
||||
* [#2884](https://github.com/openlayers/ol3/pull/2884) - Make WKT methods throw errors instead of calling a method that throws. ([@tschaub](https://github.com/tschaub))
|
||||
* [#2746](https://github.com/openlayers/ol3/pull/2746) - Add versioning for GML format ([@fgravin](https://github.com/fgravin))
|
||||
* [#2882](https://github.com/openlayers/ol3/pull/2882) - Allow olx.source.WMTSOptions#requestEncoding to be a string ([@fredj](https://github.com/fredj))
|
||||
* [#2881](https://github.com/openlayers/ol3/pull/2881) - Add default requestEncoding in documentation ([@fredj](https://github.com/fredj))
|
||||
* [#2877](https://github.com/openlayers/ol3/pull/2877) - Remove FIXME in src/ol/structs/rbush.js ([@fredj](https://github.com/fredj))
|
||||
* [#2870](https://github.com/openlayers/ol3/pull/2870) - Use bulk-insertion for addFeatures ([@tsauerwein](https://github.com/tsauerwein))
|
||||
* [#2856](https://github.com/openlayers/ol3/pull/2856) - Allow layer source to be set. ([@tschaub](https://github.com/tschaub))
|
||||
* [#2875](https://github.com/openlayers/ol3/pull/2875) - Avoid modifying `map.logos_` with each frame. ([@tschaub](https://github.com/tschaub))
|
||||
* [#2874](https://github.com/openlayers/ol3/pull/2874) - Avoid shrinking logos. ([@tschaub](https://github.com/tschaub))
|
||||
* [#2872](https://github.com/openlayers/ol3/pull/2872) - Remove the beforepropertychange event from ol.Object ([@fredj](https://github.com/fredj))
|
||||
* [#2868](https://github.com/openlayers/ol3/pull/2868) - Remove doc about dispatching events. ([@tschaub](https://github.com/tschaub))
|
||||
* [#2871](https://github.com/openlayers/ol3/pull/2871) - Make `npm install` a dependency of node based targets. ([@tschaub](https://github.com/tschaub))
|
||||
* [#2867](https://github.com/openlayers/ol3/pull/2867) - Support for importing CommonJS style modules (like rbush). ([@openlayers](https://github.com/openlayers))
|
||||
* [#2865](https://github.com/openlayers/ol3/pull/2865) - Add old value to property change events ([@elemoine](https://github.com/elemoine))
|
||||
* [#2866](https://github.com/openlayers/ol3/pull/2866) - Cluster source calls loadFeatures on vector source ([@elemoine](https://github.com/elemoine))
|
||||
* [#2864](https://github.com/openlayers/ol3/pull/2864) - Avoid mixed content in Bing Maps (r=@elemoine) ([@bartvde](https://github.com/bartvde))
|
||||
* [#2855](https://github.com/openlayers/ol3/pull/2855) - Move touchstart preventDefault to ol.renderer.dom.Map ([@fredj](https://github.com/fredj))
|
||||
* [#2690](https://github.com/openlayers/ol3/pull/2690) - Vector rendering with the DOM renderer ([@ahocevar](https://github.com/ahocevar))
|
||||
* [#2859](https://github.com/openlayers/ol3/pull/2859) - Document exportable vector source symbols. ([@tschaub](https://github.com/tschaub))
|
||||
* [#2857](https://github.com/openlayers/ol3/pull/2857) - Update the OSM attribution. ([@tschaub](https://github.com/tschaub))
|
||||
* [#2847](https://github.com/openlayers/ol3/pull/2847) - Constrain center in zoomify example ([@elemoine](https://github.com/elemoine))
|
||||
* [#2838](https://github.com/openlayers/ol3/pull/2838) - ol.source.WMTS now passes tileClass option to ol.source.TileImage ([@mike-mcgann](https://github.com/mike-mcgann))
|
||||
* [#2821](https://github.com/openlayers/ol3/pull/2821) - Add ol.geom.Polygon.fromExtent ([@elemoine](https://github.com/elemoine))
|
||||
* [#2835](https://github.com/openlayers/ol3/pull/2835) - Use correct Stamen URL for SSL. ([@j16sdiz](https://github.com/j16sdiz))
|
||||
* [#2839](https://github.com/openlayers/ol3/pull/2839) - Dependency updates and new package name. ([@tschaub](https://github.com/tschaub))
|
||||
* [#2840](https://github.com/openlayers/ol3/pull/2840) - Fewer point resolution tests. ([@tschaub](https://github.com/tschaub))
|
||||
* [#2836](https://github.com/openlayers/ol3/pull/2836) - Give priority to feature's style instead of source's style ([@oterral](https://github.com/oterral))
|
||||
* [#2834](https://github.com/openlayers/ol3/pull/2834) - Use ADVANCED instead of ADVANCED_OPTIMIZATIONS ([@fredj](https://github.com/fredj))
|
||||
* [#2833](https://github.com/openlayers/ol3/pull/2833) - Avoid too many files open with graceful-fs@3.0.3. ([@tschaub](https://github.com/tschaub))
|
||||
* [#2829](https://github.com/openlayers/ol3/pull/2829) - Zoom slider refactor. ([@tschaub](https://github.com/tschaub))
|
||||
* [#2757](https://github.com/openlayers/ol3/pull/2757) - Clear the canvas on layer extent changes. ([@tschaub](https://github.com/tschaub))
|
||||
* [#2796](https://github.com/openlayers/ol3/pull/2796) - Determine image size on load. ([@tschaub](https://github.com/tschaub))
|
||||
* [#2825](https://github.com/openlayers/ol3/pull/2825) - Change comments for examples_star_json build target ([@elemoine](https://github.com/elemoine))
|
||||
* [#2822](https://github.com/openlayers/ol3/pull/2822) - Remove obsolete comment ([@gingerik](https://github.com/gingerik))
|
||||
* [#2769](https://github.com/openlayers/ol3/pull/2769) - OverviewMap control ([@adube](https://github.com/adube))
|
||||
* [#2820](https://github.com/openlayers/ol3/pull/2820) - Add parsing of LabelStyle in KML format ([@oterral](https://github.com/oterral))
|
||||
* [#2819](https://github.com/openlayers/ol3/pull/2819) - Improvements to the xyz-esri-4326-512 example ([@elemoine](https://github.com/elemoine))
|
||||
* [#2743](https://github.com/openlayers/ol3/pull/2743) - Handle ol.interaction.Draw activation/deactivation ([@elemoine](https://github.com/elemoine))
|
||||
* [#2816](https://github.com/openlayers/ol3/pull/2816) - Exit on check-examples failure ([@gberaudo](https://github.com/gberaudo))
|
||||
* [#2794](https://github.com/openlayers/ol3/pull/2794) - Add ol.Observable.unByKey ([@elemoine](https://github.com/elemoine))
|
||||
* [#2815](https://github.com/openlayers/ol3/pull/2815) - Fix jquery.min.js path in xyz-esri-4326-512 example ([@fredj](https://github.com/fredj))
|
||||
* [#2756](https://github.com/openlayers/ol3/pull/2756) - Add an example for using an Esri 512x512 tile server in EPSG:4326 (r=@elemoine) ([@bartvde](https://github.com/bartvde))
|
||||
* [#2814](https://github.com/openlayers/ol3/pull/2814) - Add missing whitespaces in CSS calc ([@fredj](https://github.com/fredj))
|
||||
* [#2811](https://github.com/openlayers/ol3/pull/2811) - Remove defaultProjection and object from typedef ([@fredj](https://github.com/fredj))
|
||||
* [#2779](https://github.com/openlayers/ol3/pull/2779) - Update jQuery to 1.9.1 ([@fredj](https://github.com/fredj))
|
||||
* [#2810](https://github.com/openlayers/ol3/pull/2810) - Remove unused properties from olx.source.TileVectorOptions ([@pagameba](https://github.com/pagameba))
|
||||
* [#2808](https://github.com/openlayers/ol3/pull/2808) - Remove reprojectTo option from olx.source.OSMXMLOptions ([@fredj](https://github.com/fredj))
|
||||
* [#2809](https://github.com/openlayers/ol3/pull/2809) - Miscellaneous controls cleanups ([@fredj](https://github.com/fredj))
|
||||
* [#2805](https://github.com/openlayers/ol3/pull/2805) - Enable subclassing Interaction in public API ([@sweco-sebhar](https://github.com/sweco-sebhar))
|
||||
* [#2798](https://github.com/openlayers/ol3/pull/2798) - Update closure-util to version 1.0.0 ([@fredj](https://github.com/fredj))
|
||||
* [#2785](https://github.com/openlayers/ol3/pull/2785) - Use goog.* types in externs ([@ahocevar](https://github.com/ahocevar))
|
||||
* [#2795](https://github.com/openlayers/ol3/pull/2795) - Externs ([@gingerik](https://github.com/gingerik))
|
||||
* [#2792](https://github.com/openlayers/ol3/pull/2792) - Use valid mediatype for GPX export. ([@pgiraud](https://github.com/pgiraud))
|
||||
* [#2784](https://github.com/openlayers/ol3/pull/2784) - Add 'tooltip'-tag to KML example. ([@marcjansen](https://github.com/marcjansen))
|
||||
* [#2782](https://github.com/openlayers/ol3/pull/2782) - Hide the rotate control when the rotation is 0 ([@fredj](https://github.com/fredj))
|
||||
* [#2774](https://github.com/openlayers/ol3/pull/2774) - Remove unused distinctFeatures object in ol.interaction.Modify#handlePointerDown ([@fredj](https://github.com/fredj))
|
||||
* [#2771](https://github.com/openlayers/ol3/pull/2771) - Allow package to be published in npm registry. ([@tschaub](https://github.com/tschaub))
|
||||
* [#2773](https://github.com/openlayers/ol3/pull/2773) - Type-related changes to ol.style.Image ([@elemoine](https://github.com/elemoine))
|
||||
* [#2751](https://github.com/openlayers/ol3/pull/2751) - Export constructors and options of ol.source.Source children ([@gberaudo](https://github.com/gberaudo))
|
||||
* [#2772](https://github.com/openlayers/ol3/pull/2772) - Rename updatefeature event to changefeature ([@fredj](https://github.com/fredj))
|
||||
* [#2766](https://github.com/openlayers/ol3/pull/2766) - Make interaction "active" an ol.Object property ([@elemoine](https://github.com/elemoine))
|
||||
* [#2765](https://github.com/openlayers/ol3/pull/2765) - Treat unknown opt types as Object in ol externs ([@elemoine](https://github.com/elemoine))
|
||||
* [#2759](https://github.com/openlayers/ol3/pull/2759) - Fix test failures. ([@tschaub](https://github.com/tschaub))
|
||||
* [#2762](https://github.com/openlayers/ol3/pull/2762) - Report test failures to the console. ([@tschaub](https://github.com/tschaub))
|
||||
* [#2768](https://github.com/openlayers/ol3/pull/2768) - Write the function name correctly in the doc. ([@xamgreen](https://github.com/xamgreen))
|
||||
* [#2764](https://github.com/openlayers/ol3/pull/2764) - Remove rtree example ([@fredj](https://github.com/fredj))
|
||||
* [#2763](https://github.com/openlayers/ol3/pull/2763) - Miscellaneous coding style and typo fixes ([@fredj](https://github.com/fredj))
|
||||
* [#2758](https://github.com/openlayers/ol3/pull/2758) - Correctly generate child tile ranges for XYZ tiles. ([@tschaub](https://github.com/tschaub))
|
||||
* [#2734](https://github.com/openlayers/ol3/pull/2734) - Add maxZoom option to BingMaps ([@elemoine](https://github.com/elemoine))
|
||||
* [#2752](https://github.com/openlayers/ol3/pull/2752) - Call loadFeatures from ol.source.ImageVector ([@elemoine](https://github.com/elemoine))
|
||||
* [#2658](https://github.com/openlayers/ol3/pull/2658) - Set inherited values when parsing a GetCapabilities ([@oterral](https://github.com/oterral))
|
||||
* [#2750](https://github.com/openlayers/ol3/pull/2750) - Export ol.layer.Base ([@fredj](https://github.com/fredj))
|
||||
* [#2749](https://github.com/openlayers/ol3/pull/2749) - Export ol.source.Source ([@fredj](https://github.com/fredj))
|
||||
* [#2742](https://github.com/openlayers/ol3/pull/2742) - Dispatch an 'updatefeature' from the vector source ([@fredj](https://github.com/fredj))
|
||||
* [#2747](https://github.com/openlayers/ol3/pull/2747) - Fix incorrect web address. ([@lazaruslarue](https://github.com/lazaruslarue))
|
||||
* [#2745](https://github.com/openlayers/ol3/pull/2745) - DragBox Interaction: getGeometry return type can be ol.geom.Polygon (r=@fredj) ([@bartvde](https://github.com/bartvde))
|
||||
* [#2744](https://github.com/openlayers/ol3/pull/2744) - Fix ol.Feature 'change' event documentation ([@fredj](https://github.com/fredj))
|
||||
* [#2741](https://github.com/openlayers/ol3/pull/2741) - issue with reading scientific notation coordinates in ol.format.GML (r=@fredj) ([@bartvde](https://github.com/bartvde))
|
||||
* [#2739](https://github.com/openlayers/ol3/pull/2739) - Revert "Function circular renamed to createCircularOnSphere" ([@elemoine](https://github.com/elemoine))
|
||||
* [#2616](https://github.com/openlayers/ol3/pull/2616) - Target for attribution links differs between maps ([@fredj](https://github.com/fredj))
|
||||
* [#2740](https://github.com/openlayers/ol3/pull/2740) - Make interactions activable and deactivable ([@elemoine](https://github.com/elemoine))
|
||||
* [#2727](https://github.com/openlayers/ol3/pull/2727) - Rename ol.geom.Polygon#circular to createCircularOnSphere ([@elemoine](https://github.com/elemoine))
|
||||
* [#2730](https://github.com/openlayers/ol3/pull/2730) - Do not call toLowerCase when forming a change:property event ([@elemoine](https://github.com/elemoine))
|
||||
* [#2728](https://github.com/openlayers/ol3/pull/2728) - Mark `ol.extent.getIntersection` as stable. ([@tschaub](https://github.com/tschaub))
|
||||
* [#2726](https://github.com/openlayers/ol3/pull/2726) - Make ol.Feature#setStyle accept null ([@elemoine](https://github.com/elemoine))
|
||||
* [#2724](https://github.com/openlayers/ol3/pull/2724) - Error when compiling individual example ([@fredj](https://github.com/fredj))
|
||||
* [#1959](https://github.com/openlayers/ol3/pull/1959) - Add a feature box selection example ([@elemoine](https://github.com/elemoine))
|
||||
* [#2722](https://github.com/openlayers/ol3/pull/2722) - Make ol.Map#setView do not accept undefined ([@elemoine](https://github.com/elemoine))
|
||||
* [#2696](https://github.com/openlayers/ol3/pull/2696) - Consistent circle transform. ([@gberaudo](https://github.com/gberaudo))
|
||||
* [#2717](https://github.com/openlayers/ol3/pull/2717) - Change the control visibility by using css class ([@fredj](https://github.com/fredj))
|
||||
* [#2715](https://github.com/openlayers/ol3/pull/2715) - Add an EPSG:3857 map to Tissot example ([@elemoine](https://github.com/elemoine))
|
||||
* [#2714](https://github.com/openlayers/ol3/pull/2714) - Set the opacity directly to element.style.opacity ([@fredj](https://github.com/fredj))
|
||||
* [#2647](https://github.com/openlayers/ol3/pull/2647) - Upgrade closure library version ([@fredj](https://github.com/fredj))
|
||||
* [#2549](https://github.com/openlayers/ol3/pull/2549) - Use goog.array.ASSUME_NATIVE_FUNCTIONS define ([@fredj](https://github.com/fredj))
|
||||
* [#2711](https://github.com/openlayers/ol3/pull/2711) - Remove Google Maps example ([@elemoine](https://github.com/elemoine))
|
||||
* [#2684](https://github.com/openlayers/ol3/pull/2684) - Rename ol.Observable#dispatchChangeEvent() to #changed() ([@ahocevar](https://github.com/ahocevar))
|
||||
* [#2678](https://github.com/openlayers/ol3/pull/2678) - Mutable symbolizer properties for styles ([@ahocevar](https://github.com/ahocevar))
|
||||
* [#2568](https://github.com/openlayers/ol3/pull/2568) - re-implement auto-configure code for ol.format.GML (r=@ahocevar) ([@bartvde](https://github.com/bartvde))
|
||||
* [#2704](https://github.com/openlayers/ol3/pull/2704) - Use pool thread for calling bin/check-example.js. ([@gberaudo](https://github.com/gberaudo))
|
||||
* [#2698](https://github.com/openlayers/ol3/pull/2698) - StaticVector is not an abstract base class ([@ahocevar](https://github.com/ahocevar))
|
||||
* [#2702](https://github.com/openlayers/ol3/pull/2702) - Add vector layer in export-map example ([@fredj](https://github.com/fredj))
|
||||
* [#2687](https://github.com/openlayers/ol3/pull/2687) - Use ol.LEGACY_IE_SUPPORT and ol.IS_LEGACY_IE define ([@fredj](https://github.com/fredj))
|
||||
* [#2675](https://github.com/openlayers/ol3/pull/2675) - Remove undefined from ol.Map#getLayers return type ([@fredj](https://github.com/fredj))
|
||||
* [#2692](https://github.com/openlayers/ol3/pull/2692) - Unset z-index in overlay example ([@fredj](https://github.com/fredj))
|
||||
* [#2681](https://github.com/openlayers/ol3/pull/2681) - Make tileSize a config option for ol.source.XYZ ([@ahocevar](https://github.com/ahocevar))
|
||||
* [#2534](https://github.com/openlayers/ol3/pull/2534) - Document ol.geom.Polygon#getLinearRing function ([@fredj](https://github.com/fredj))
|
||||
* [#2677](https://github.com/openlayers/ol3/pull/2677) - Add TextStyle offsets getters to API. ([@gberaudo](https://github.com/gberaudo))
|
||||
* [#2676](https://github.com/openlayers/ol3/pull/2676) - ol.FeatureOverlay: use the feature style if defined ([@fredj](https://github.com/fredj))
|
||||
* [#2656](https://github.com/openlayers/ol3/pull/2656) - Set ol.layer.Image#getSource return type to ol.source.Image ([@fredj](https://github.com/fredj))
|
||||
* [#2651](https://github.com/openlayers/ol3/pull/2651) - ol.layer.Vector.getSource return type specialisation. ([@gberaudo](https://github.com/gberaudo))
|
||||
* [#2669](https://github.com/openlayers/ol3/pull/2669) - Revert "snapshot" ([@fredj](https://github.com/fredj))
|
||||
* [#2663](https://github.com/openlayers/ol3/pull/2663) - Set tracking property to false on geolocation error ([@fredj](https://github.com/fredj))
|
||||
* [#2662](https://github.com/openlayers/ol3/pull/2662) - Delegate transformation in ol.source.FormatVector#readFeatures to `ol.format.*` ([@gingerik](https://github.com/gingerik))
|
||||
* [#2447](https://github.com/openlayers/ol3/pull/2447) - Correct documentation typo. ([@lazaruslarue](https://github.com/lazaruslarue))
|
||||
* [#2660](https://github.com/openlayers/ol3/pull/2660) - New domain in the build header ([@elemoine](https://github.com/elemoine))
|
||||
@@ -1,3 +1,3 @@
|
||||
{
|
||||
"library_url": "https://github.com/google/closure-library/archive/fb35d5232edef340dd9a7c6e479556829d0fa452.zip"
|
||||
"library_url": "https://github.com/google/closure-library/archive/ad5e66c1e7d7829b0d77feae49aaf5f011265715.zip"
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
"exports": [],
|
||||
"src": [
|
||||
"src/**/*.js",
|
||||
"build/ol.ext/*.js",
|
||||
"build/examples/all.js"
|
||||
],
|
||||
"compile": {
|
||||
@@ -14,6 +15,7 @@
|
||||
"externs/bootstrap.js",
|
||||
"externs/closure-compiler.js",
|
||||
"externs/example.js",
|
||||
"externs/fastclick.js",
|
||||
"externs/geojson.js",
|
||||
"externs/jquery-1.9.js",
|
||||
"externs/proj4js.js",
|
||||
@@ -67,7 +69,8 @@
|
||||
"api", "observable"
|
||||
],
|
||||
"compilation_level": "ADVANCED",
|
||||
"output_wrapper": "// OpenLayers 3. See http://ol3js.org/\n(function(){%output%})();",
|
||||
"warning_level": "VERBOSE",
|
||||
"output_wrapper": "(function(){%output%})();",
|
||||
"use_types_for_optimization": true,
|
||||
"manage_closure_dependencies": true
|
||||
|
||||
|
||||
@@ -54,11 +54,25 @@ $(function () {
|
||||
_onResize();
|
||||
|
||||
// show/hide unstable items
|
||||
var links = $('a[href^="ol."]');
|
||||
var unstable = $('.unstable');
|
||||
var stabilityToggle = $('#stability-toggle');
|
||||
stabilityToggle.change(function() {
|
||||
unstable.toggle(!this.checked);
|
||||
unstable.toggleClass('hidden', this.checked);
|
||||
var search = this.checked ? '' : '?unstable=true';
|
||||
links.each(function(i, el) {
|
||||
this.href = this.pathname + search + this.hash;
|
||||
});
|
||||
if (history.replaceState) {
|
||||
var url = window.location.pathname + search + window.location.hash;
|
||||
history.replaceState({}, '', url);
|
||||
}
|
||||
return false;
|
||||
});
|
||||
unstable.toggle(!stabilityToggle[0].checked);
|
||||
var search = window.location.search;
|
||||
links.each(function(i, el) {
|
||||
this.href = this.pathname + search + this.hash;
|
||||
});
|
||||
stabilityToggle.prop('checked', search !== '?unstable=true');
|
||||
unstable.toggleClass('hidden', stabilityToggle[0].checked);
|
||||
});
|
||||
|
||||
@@ -372,7 +372,7 @@ footer {
|
||||
.main .readme table ul li {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.unstable {
|
||||
.hidden {
|
||||
display: none;
|
||||
}
|
||||
#stability {
|
||||
|
||||
@@ -64,6 +64,23 @@ var self = this;
|
||||
}
|
||||
?>
|
||||
</ul>
|
||||
<ul class="fires itemMembers">
|
||||
<?js
|
||||
if (item.fires && item.fires.length) {
|
||||
?>
|
||||
<span class="subtitle">Fires</span>
|
||||
<?js
|
||||
item.fires.forEach(function (v) {
|
||||
v = self.find({longname: v})[0] || {longname: v, name: v.split(/#?event:/)[1]};
|
||||
?>
|
||||
<li data-name="<?js= v.longname ?>" class="<?js= (v.stability != 'stable' ? 'unstable' : '') ?>">
|
||||
<?js= self.linkto(v.longname, v.name) ?>
|
||||
</li>
|
||||
<?js
|
||||
});
|
||||
}
|
||||
?>
|
||||
</ul>
|
||||
</li>
|
||||
<?js }); ?>
|
||||
</ul>
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
{
|
||||
"exports": ["*"]
|
||||
"exports": ["*"],
|
||||
"umd": true
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
{
|
||||
"exports": ["*"],
|
||||
"umd": true,
|
||||
"compile": {
|
||||
"externs": [
|
||||
"externs/bingmaps.js",
|
||||
@@ -58,7 +59,7 @@
|
||||
"api", "observable"
|
||||
],
|
||||
"compilation_level": "ADVANCED",
|
||||
"output_wrapper": "(function(){%output%})();",
|
||||
"warning_level": "VERBOSE",
|
||||
"use_types_for_optimization": true,
|
||||
"manage_closure_dependencies": true
|
||||
}
|
||||
|
||||
71
css/ol.css
71
css/ol.css
@@ -99,7 +99,6 @@
|
||||
}
|
||||
.ol-compass {
|
||||
display: block;
|
||||
font-family: Arial;
|
||||
font-weight: normal;
|
||||
font-size: 1.2em;
|
||||
}
|
||||
@@ -131,65 +130,6 @@ button.ol-full-screen-true:after {
|
||||
content: "\00d7";
|
||||
}
|
||||
|
||||
/* invisible but not hidden */
|
||||
.ol-has-tooltip [role=tooltip] {
|
||||
position: absolute;
|
||||
clip: rect(1px 1px 1px 1px); /* < IE8 */
|
||||
clip: rect(1px, 1px, 1px, 1px);
|
||||
padding: 0;
|
||||
border: 0;
|
||||
height: 1px;
|
||||
width: 1px;
|
||||
overflow: hidden;
|
||||
font-weight: normal;
|
||||
font-size: 14px;
|
||||
text-shadow: 0 0 2px #fff;
|
||||
}
|
||||
|
||||
/* show a tooltip offset to below and right */
|
||||
.ol-has-tooltip:hover [role=tooltip], .ol-has-tooltip:focus [role=tooltip] {
|
||||
-moz-box-sizing: content-box;
|
||||
-webkit-box-sizing: content-box;
|
||||
box-sizing: content-box;
|
||||
clip: auto;
|
||||
padding: 0 .4em;
|
||||
font-size: .8em;
|
||||
height: 1.2em;
|
||||
width: auto;
|
||||
line-height: 1.2em;
|
||||
z-index: 1100;
|
||||
max-height: 100px;
|
||||
white-space: nowrap;
|
||||
display: inline-block;
|
||||
background: #FFF;
|
||||
background: rgba(255,255,255,0.6);
|
||||
color: #000;
|
||||
border: 3px solid rgba(255,255,255,0);
|
||||
border-left-width: 0;
|
||||
border-radius: 0 4px 4px 0;
|
||||
bottom: .3em;
|
||||
left: 2.2em;
|
||||
}
|
||||
.ol-touch .ol-has-tooltip:hover [role=tooltip],
|
||||
.ol-touch .ol-has-tooltip:focus [role=tooltip] {
|
||||
display: none;
|
||||
}
|
||||
.ol-zoom .ol-has-tooltip:hover [role=tooltip],
|
||||
.ol-zoom .ol-has-tooltip:focus [role=tooltip] {
|
||||
top: 1.1em;
|
||||
}
|
||||
.ol-rotate .ol-has-tooltip:hover [role=tooltip],
|
||||
.ol-rotate .ol-has-tooltip:focus [role=tooltip],
|
||||
.ol-attribution .ol-has-tooltip:hover [role=tooltip],
|
||||
.ol-attribution .ol-has-tooltip:focus [role=tooltip],
|
||||
.ol-full-screen .ol-has-tooltip:hover [role=tooltip],
|
||||
.ol-full-screen .ol-has-tooltip:focus [role=tooltip] {
|
||||
right: 2.2em;
|
||||
left: auto;
|
||||
border-radius: 4px 0 0 4px;
|
||||
border-left-width: 3px;
|
||||
border-right-width: 0;
|
||||
}
|
||||
|
||||
.ol-attribution {
|
||||
text-align: right;
|
||||
@@ -205,7 +145,6 @@ button.ol-full-screen-true:after {
|
||||
line-height: 1.375em;
|
||||
color: #000;
|
||||
text-shadow: 0 0 2px #fff;
|
||||
max-width: calc(100% - 3.6em);
|
||||
}
|
||||
.ol-attribution li {
|
||||
display: inline;
|
||||
@@ -217,11 +156,11 @@ button.ol-full-screen-true:after {
|
||||
}
|
||||
.ol-attribution img {
|
||||
max-height: 2em;
|
||||
max-width: inherit;
|
||||
}
|
||||
.ol-attribution ul, .ol-attribution button {
|
||||
display: inline-block;
|
||||
}
|
||||
.ol-attribution:not(.ol-collapsed) button:hover [role=tooltip],
|
||||
.ol-attribution.ol-collapsed ul {
|
||||
display: none;
|
||||
}
|
||||
@@ -281,13 +220,6 @@ button.ol-full-screen-true:after {
|
||||
width: 1.8em;
|
||||
}
|
||||
|
||||
.ol-control button,
|
||||
.ol-attribution,
|
||||
.ol-scale-line-inner,
|
||||
.ol-has-tooltip [role=tooltip] {
|
||||
font-family: 'Lucida Grande',Verdana,Geneva,Lucida,Arial,Helvetica,sans-serif;
|
||||
}
|
||||
|
||||
.ol-overviewmap {
|
||||
position: absolute;
|
||||
left: 0.5em;
|
||||
@@ -313,7 +245,6 @@ button.ol-full-screen-true:after {
|
||||
left: 2px;
|
||||
position: absolute;
|
||||
}
|
||||
.ol-overviewmap:not(.ol-collapsed) button:hover [role=tooltip],
|
||||
.ol-overviewmap.ol-collapsed .ol-overviewmap-map,
|
||||
.ol-overviewmap.ol-uncollapsible button {
|
||||
display: none;
|
||||
|
||||
62
examples/button-title.html
Normal file
62
examples/button-title.html
Normal file
@@ -0,0 +1,62 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="chrome=1">
|
||||
<meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
|
||||
<link rel="stylesheet" href="../css/ol.css" type="text/css">
|
||||
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap.min.css" type="text/css">
|
||||
<link rel="stylesheet" href="../resources/layout.css" type="text/css">
|
||||
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap-responsive.min.css" type="text/css">
|
||||
<style type="text/css">
|
||||
.tooltip-inner {
|
||||
white-space: nowrap;
|
||||
}
|
||||
</style>
|
||||
<title>ol3 custom tooltips example</title>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="navbar navbar-inverse navbar-fixed-top">
|
||||
<div class="navbar-inner">
|
||||
<div class="container">
|
||||
<a class="brand" href="./"><img src="../resources/logo.png"> OpenLayers 3 Examples</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="container-fluid">
|
||||
|
||||
<div class="row-fluid">
|
||||
<div class="span12">
|
||||
<div id="map" class="map"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row-fluid">
|
||||
<div class="span12">
|
||||
<h4 id="title">Custom tooltips</h4>
|
||||
<p id="shortdesc">
|
||||
This example shows how to customize the buttons tooltips with
|
||||
<a href="http://getbootstrap.com/javascript/#tooltips">Bootstrap</a>.
|
||||
</p>
|
||||
<div id="docs">
|
||||
<p>
|
||||
See the <a href="button-title.js" target="_blank">button-title.js source</a> to see how this is done.
|
||||
</p>
|
||||
</div>
|
||||
<div id="tags">
|
||||
custom, tooltip
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="../resources/jquery.min.js" type="text/javascript"></script>
|
||||
<script src="../resources/bootstrap/js/bootstrap.min.js" type="text/javascript"></script>
|
||||
<script src="../resources/example-behaviour.js" type="text/javascript"></script>
|
||||
<script src="loader.js?id=button-title" type="text/javascript"></script>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
27
examples/button-title.js
Normal file
27
examples/button-title.js
Normal file
@@ -0,0 +1,27 @@
|
||||
goog.require('ol.Map');
|
||||
goog.require('ol.View');
|
||||
goog.require('ol.layer.Tile');
|
||||
goog.require('ol.source.OSM');
|
||||
|
||||
var map = new ol.Map({
|
||||
layers: [
|
||||
new ol.layer.Tile({
|
||||
source: new ol.source.OSM()
|
||||
})
|
||||
],
|
||||
renderer: exampleNS.getRendererFromQueryString(),
|
||||
target: 'map',
|
||||
view: new ol.View({
|
||||
center: [-8730000, 5930000],
|
||||
rotation: Math.PI / 5,
|
||||
zoom: 8
|
||||
})
|
||||
});
|
||||
|
||||
|
||||
$('.ol-zoom-in, .ol-zoom-out').tooltip({
|
||||
placement: 'right'
|
||||
});
|
||||
$('.ol-rotate-reset, .ol-attribution button[title]').tooltip({
|
||||
placement: 'left'
|
||||
});
|
||||
BIN
examples/data/Butterfly.png
Normal file
BIN
examples/data/Butterfly.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 61 KiB |
51
examples/drag-features.html
Normal file
51
examples/drag-features.html
Normal file
@@ -0,0 +1,51 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="chrome=1">
|
||||
<meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
|
||||
<link rel="stylesheet" href="../css/ol.css" type="text/css">
|
||||
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap.min.css" type="text/css">
|
||||
<link rel="stylesheet" href="../resources/layout.css" type="text/css">
|
||||
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap-responsive.min.css" type="text/css">
|
||||
<title>Drag features example</title>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="navbar navbar-inverse navbar-fixed-top">
|
||||
<div class="navbar-inner">
|
||||
<div class="container">
|
||||
<a class="brand" href="./"><img src="../resources/logo.png"> OpenLayers 3 Examples</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="container-fluid">
|
||||
|
||||
<div class="row-fluid">
|
||||
<div class="span12">
|
||||
<div id="map" class="map"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row-fluid">
|
||||
|
||||
<div class="span12">
|
||||
<h4 id="title">Drag features example</h4>
|
||||
<p id="shortdesc">Example of a drag features interaction.</p>
|
||||
<div id="docs">
|
||||
<p>See the <a href="drag-features.js" target="_blank">drag-features.js source</a> to see how this is done.</p>
|
||||
</div>
|
||||
<div id="tags">drag, feature, vector, editing</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script src="../resources/jquery.min.js" type="text/javascript"></script>
|
||||
<script src="../resources/example-behaviour.js" type="text/javascript"></script>
|
||||
<script src="loader.js?id=drag-features" type="text/javascript"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
192
examples/drag-features.js
Normal file
192
examples/drag-features.js
Normal file
@@ -0,0 +1,192 @@
|
||||
goog.require('ol.Feature');
|
||||
goog.require('ol.Map');
|
||||
goog.require('ol.View');
|
||||
goog.require('ol.geom.LineString');
|
||||
goog.require('ol.geom.Point');
|
||||
goog.require('ol.geom.Polygon');
|
||||
goog.require('ol.interaction');
|
||||
goog.require('ol.interaction.Pointer');
|
||||
goog.require('ol.layer.Tile');
|
||||
goog.require('ol.layer.Vector');
|
||||
goog.require('ol.source.TileJSON');
|
||||
goog.require('ol.source.Vector');
|
||||
goog.require('ol.style.Fill');
|
||||
goog.require('ol.style.Icon');
|
||||
goog.require('ol.style.Stroke');
|
||||
goog.require('ol.style.Style');
|
||||
|
||||
|
||||
/**
|
||||
* Define a namespace for the application.
|
||||
*/
|
||||
window.app = {};
|
||||
var app = window.app;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
* @extends {ol.interaction.Pointer}
|
||||
*/
|
||||
app.Drag = function() {
|
||||
|
||||
ol.interaction.Pointer.call(this, {
|
||||
handleDownEvent: app.Drag.prototype.handleDownEvent,
|
||||
handleDragEvent: app.Drag.prototype.handleDragEvent,
|
||||
handleMoveEvent: app.Drag.prototype.handleMoveEvent,
|
||||
handleUpEvent: app.Drag.prototype.handleUpEvent
|
||||
});
|
||||
|
||||
/**
|
||||
* @type {ol.Pixel}
|
||||
* @private
|
||||
*/
|
||||
this.coordinate_ = null;
|
||||
|
||||
/**
|
||||
* @type {string|undefined}
|
||||
* @private
|
||||
*/
|
||||
this.cursor_ = 'pointer';
|
||||
|
||||
/**
|
||||
* @type {ol.Feature}
|
||||
* @private
|
||||
*/
|
||||
this.feature_ = null;
|
||||
|
||||
/**
|
||||
* @type {string|undefined}
|
||||
* @private
|
||||
*/
|
||||
this.previousCursor_ = undefined;
|
||||
|
||||
};
|
||||
ol.inherits(app.Drag, ol.interaction.Pointer);
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.MapBrowserEvent} evt Map browser event.
|
||||
* @return {boolean} `true` to start the drag sequence.
|
||||
*/
|
||||
app.Drag.prototype.handleDownEvent = function(evt) {
|
||||
var map = evt.map;
|
||||
|
||||
var feature = map.forEachFeatureAtPixel(evt.pixel,
|
||||
function(feature, layer) {
|
||||
return feature;
|
||||
});
|
||||
|
||||
if (feature) {
|
||||
this.coordinate_ = evt.coordinate;
|
||||
this.feature_ = feature;
|
||||
}
|
||||
|
||||
return !!feature;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.MapBrowserEvent} evt Map browser event.
|
||||
*/
|
||||
app.Drag.prototype.handleDragEvent = function(evt) {
|
||||
var map = evt.map;
|
||||
|
||||
var feature = map.forEachFeatureAtPixel(evt.pixel,
|
||||
function(feature, layer) {
|
||||
return feature;
|
||||
});
|
||||
|
||||
var deltaX = evt.coordinate[0] - this.coordinate_[0];
|
||||
var deltaY = evt.coordinate[1] - this.coordinate_[1];
|
||||
|
||||
var geometry = /** @type {ol.geom.SimpleGeometry} */
|
||||
(this.feature_.getGeometry());
|
||||
geometry.translate(deltaX, deltaY);
|
||||
|
||||
this.coordinate_[0] = evt.coordinate[0];
|
||||
this.coordinate_[1] = evt.coordinate[1];
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.MapBrowserEvent} evt Event.
|
||||
*/
|
||||
app.Drag.prototype.handleMoveEvent = function(evt) {
|
||||
if (this.cursor_) {
|
||||
var map = evt.map;
|
||||
var feature = map.forEachFeatureAtPixel(evt.pixel,
|
||||
function(feature, layer) {
|
||||
return feature;
|
||||
});
|
||||
var element = evt.map.getTargetElement();
|
||||
if (feature) {
|
||||
if (element.style.cursor != this.cursor_) {
|
||||
this.previousCursor_ = element.style.cursor;
|
||||
element.style.cursor = this.cursor_;
|
||||
}
|
||||
} else if (this.previousCursor_ !== undefined) {
|
||||
element.style.cursor = this.previousCursor_;
|
||||
this.previousCursor_ = undefined;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.MapBrowserEvent} evt Map browser event.
|
||||
* @return {boolean} `false` to stop the drag sequence.
|
||||
*/
|
||||
app.Drag.prototype.handleUpEvent = function(evt) {
|
||||
this.coordinate_ = null;
|
||||
this.feature_ = null;
|
||||
return false;
|
||||
};
|
||||
|
||||
|
||||
var pointFeature = new ol.Feature(new ol.geom.Point([0, 0]));
|
||||
|
||||
var lineFeature = new ol.Feature(
|
||||
new ol.geom.LineString([[-1e7, 1e6], [-1e6, 3e6]]));
|
||||
|
||||
var polygonFeature = new ol.Feature(
|
||||
new ol.geom.Polygon([[[-3e6, -1e6], [-3e6, 1e6],
|
||||
[-1e6, 1e6], [-1e6, -1e6], [-3e6, -1e6]]]));
|
||||
|
||||
|
||||
var map = new ol.Map({
|
||||
interactions: ol.interaction.defaults().extend([new app.Drag()]),
|
||||
layers: [
|
||||
new ol.layer.Tile({
|
||||
source: new ol.source.TileJSON({
|
||||
url: 'http://api.tiles.mapbox.com/v3/mapbox.geography-class.jsonp'
|
||||
})
|
||||
}),
|
||||
new ol.layer.Vector({
|
||||
source: new ol.source.Vector({
|
||||
features: [pointFeature, lineFeature, polygonFeature]
|
||||
}),
|
||||
style: new ol.style.Style({
|
||||
image: new ol.style.Icon(/** @type {olx.style.IconOptions} */ ({
|
||||
anchor: [0.5, 46],
|
||||
anchorXUnits: 'fraction',
|
||||
anchorYUnits: 'pixels',
|
||||
opacity: 0.95,
|
||||
src: 'data/icon.png'
|
||||
})),
|
||||
stroke: new ol.style.Stroke({
|
||||
width: 3,
|
||||
color: [255, 0, 0, 1]
|
||||
}),
|
||||
fill: new ol.style.Fill({
|
||||
color: [0, 0, 255, 0.6]
|
||||
})
|
||||
})
|
||||
})
|
||||
],
|
||||
target: 'map',
|
||||
view: new ol.View({
|
||||
center: [0, 0],
|
||||
zoom: 2
|
||||
})
|
||||
});
|
||||
@@ -38,6 +38,7 @@ var vector = new ol.layer.Vector({
|
||||
|
||||
var map = new ol.Map({
|
||||
layers: [raster, vector],
|
||||
renderer: exampleNS.getRendererFromQueryString(),
|
||||
target: 'map',
|
||||
view: new ol.View({
|
||||
center: [-11000000, 4600000],
|
||||
|
||||
@@ -1,11 +1,14 @@
|
||||
goog.require('ol.Feature');
|
||||
goog.require('ol.Map');
|
||||
goog.require('ol.View');
|
||||
goog.require('ol.geom.MultiPoint');
|
||||
goog.require('ol.geom.Point');
|
||||
goog.require('ol.layer.Tile');
|
||||
goog.require('ol.source.MapQuest');
|
||||
goog.require('ol.style.Circle');
|
||||
goog.require('ol.style.Fill');
|
||||
goog.require('ol.style.Stroke');
|
||||
goog.require('ol.style.Style');
|
||||
|
||||
|
||||
var map = new ol.Map({
|
||||
@@ -14,6 +17,7 @@ var map = new ol.Map({
|
||||
source: new ol.source.MapQuest({layer: 'sat'})
|
||||
})
|
||||
],
|
||||
renderer: exampleNS.getRendererFromQueryString(),
|
||||
target: 'map',
|
||||
view: new ol.View({
|
||||
center: [0, 0],
|
||||
@@ -28,6 +32,20 @@ var imageStyle = new ol.style.Circle({
|
||||
stroke: new ol.style.Stroke({color: 'red', width: 1})
|
||||
});
|
||||
|
||||
var headInnerImageStyle = new ol.style.Style({
|
||||
image: new ol.style.Circle({
|
||||
radius: 2,
|
||||
snapToPixel: false,
|
||||
fill: new ol.style.Fill({color: 'blue'})
|
||||
})
|
||||
});
|
||||
|
||||
var headOuterImageStyle = new ol.style.Circle({
|
||||
radius: 5,
|
||||
snapToPixel: false,
|
||||
fill: new ol.style.Fill({color: 'black'})
|
||||
});
|
||||
|
||||
var n = 200;
|
||||
var omegaTheta = 30000; // Rotation period in ms
|
||||
var R = 7e6;
|
||||
@@ -48,6 +66,14 @@ map.on('postcompose', function(event) {
|
||||
vectorContext.setImageStyle(imageStyle);
|
||||
vectorContext.drawMultiPointGeometry(
|
||||
new ol.geom.MultiPoint(coordinates), null);
|
||||
|
||||
var headPoint = new ol.geom.Point(coordinates[coordinates.length - 1]);
|
||||
var headFeature = new ol.Feature(headPoint);
|
||||
vectorContext.drawFeature(headFeature, headInnerImageStyle);
|
||||
|
||||
vectorContext.setImageStyle(headOuterImageStyle);
|
||||
vectorContext.drawMultiPointGeometry(headPoint, null);
|
||||
|
||||
map.render();
|
||||
});
|
||||
map.render();
|
||||
|
||||
75
examples/earthquake-clusters.html
Normal file
75
examples/earthquake-clusters.html
Normal file
@@ -0,0 +1,75 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="chrome=1">
|
||||
<meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
|
||||
<link rel="stylesheet" href="../css/ol.css" type="text/css">
|
||||
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap.min.css" type="text/css">
|
||||
<link rel="stylesheet" href="../resources/layout.css" type="text/css">
|
||||
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap-responsive.min.css" type="text/css">
|
||||
<title>Earthquake Clusters</title>
|
||||
<style>
|
||||
#map {
|
||||
position: relative;
|
||||
}
|
||||
#info {
|
||||
position: absolute;
|
||||
height: 1px;
|
||||
width: 1px;
|
||||
z-index: 100;
|
||||
}
|
||||
.tooltip.in {
|
||||
opacity: 1;
|
||||
filter: alpha(opacity=100);
|
||||
}
|
||||
.tooltip.top .tooltip-arrow {
|
||||
border-top-color: white;
|
||||
}
|
||||
.tooltip-inner {
|
||||
border: 2px solid white;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="navbar navbar-inverse navbar-fixed-top">
|
||||
<div class="navbar-inner">
|
||||
<div class="container">
|
||||
<a class="brand" href="./"><img src="../resources/logo.png"> OpenLayers 3 Examples</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="container-fluid">
|
||||
|
||||
<div class="row-fluid">
|
||||
<div class="span12">
|
||||
<div id="map" class="map"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row-fluid">
|
||||
|
||||
<div class="span12">
|
||||
<h4 id="title">Earthquake Clusters</h4>
|
||||
<p id="shortdesc">Demonstrates the use of style geometries to render source features of a cluster.</p>
|
||||
<div id="docs">
|
||||
<p>
|
||||
This example parses a KML file and renders the features as clusters on a vector layer. The styling in this example is quite involved. Single earthquake locations (rendered as stars) have a size relative to their magnitude. Clusters have an opacity relative to the number of features in the cluster, and a size that represents the extent of the features that make up the cluster. When clicking or hovering on a cluster, the individual features that make up the cluster will be shown.
|
||||
</p>
|
||||
<p>To achieve this, we make heavy use of style functions and <code>ol.style.Style#geometry</code>. See the <a href="earthquake-clusters.js" target="_blank">earthquake-clusters.js source</a> to see how this is done.</p>
|
||||
</div>
|
||||
<div id="tags">KML, vector, style, geometry, cluster</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script src="../resources/jquery.min.js" type="text/javascript"></script>
|
||||
<script src="../resources/bootstrap/js/bootstrap.min.js" type="text/javascript"></script>
|
||||
<script src="../resources/example-behaviour.js" type="text/javascript"></script>
|
||||
<script src="loader.js?id=earthquake-clusters" type="text/javascript"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
154
examples/earthquake-clusters.js
Normal file
154
examples/earthquake-clusters.js
Normal file
@@ -0,0 +1,154 @@
|
||||
goog.require('ol.Map');
|
||||
goog.require('ol.View');
|
||||
goog.require('ol.extent');
|
||||
goog.require('ol.interaction');
|
||||
goog.require('ol.interaction.Select');
|
||||
goog.require('ol.layer.Tile');
|
||||
goog.require('ol.layer.Vector');
|
||||
goog.require('ol.source.Cluster');
|
||||
goog.require('ol.source.KML');
|
||||
goog.require('ol.source.Stamen');
|
||||
goog.require('ol.style.Circle');
|
||||
goog.require('ol.style.Fill');
|
||||
goog.require('ol.style.RegularShape');
|
||||
goog.require('ol.style.Stroke');
|
||||
goog.require('ol.style.Style');
|
||||
goog.require('ol.style.Text');
|
||||
|
||||
|
||||
var earthquakeFill = new ol.style.Fill({
|
||||
color: 'rgba(255, 153, 0, 0.8)'
|
||||
});
|
||||
var earthquakeStroke = new ol.style.Stroke({
|
||||
color: 'rgba(255, 204, 0, 0.2)',
|
||||
width: 1
|
||||
});
|
||||
var textFill = new ol.style.Fill({
|
||||
color: '#fff'
|
||||
});
|
||||
var textStroke = new ol.style.Stroke({
|
||||
color: 'rgba(0, 0, 0, 0.6)',
|
||||
width: 3
|
||||
});
|
||||
var invisibleFill = new ol.style.Fill({
|
||||
color: 'rgba(255, 255, 255, 0.01)'
|
||||
});
|
||||
|
||||
function createEarthquakeStyle(feature) {
|
||||
// 2012_Earthquakes_Mag5.kml stores the magnitude of each earthquake in a
|
||||
// standards-violating <magnitude> tag in each Placemark. We extract it
|
||||
// from the Placemark's name instead.
|
||||
var name = feature.get('name');
|
||||
var magnitude = parseFloat(name.substr(2));
|
||||
var radius = 5 + 20 * (magnitude - 5);
|
||||
|
||||
return new ol.style.Style({
|
||||
geometry: feature.getGeometry(),
|
||||
image: new ol.style.RegularShape({
|
||||
radius1: radius,
|
||||
radius2: 3,
|
||||
points: 5,
|
||||
angle: Math.PI,
|
||||
fill: earthquakeFill,
|
||||
stroke: earthquakeStroke
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
var maxFeatureCount;
|
||||
function calculateClusterInfo(resolution) {
|
||||
maxFeatureCount = 0;
|
||||
var features = vector.getSource().getFeatures();
|
||||
var feature, radius;
|
||||
for (var i = features.length - 1; i >= 0; --i) {
|
||||
feature = features[i];
|
||||
var originalFeatures = feature.get('features');
|
||||
var extent = ol.extent.createEmpty();
|
||||
for (var j = 0, jj = originalFeatures.length; j < jj; ++j) {
|
||||
ol.extent.extend(extent, originalFeatures[j].getGeometry().getExtent());
|
||||
}
|
||||
maxFeatureCount = Math.max(maxFeatureCount, jj);
|
||||
radius = 0.25 * (ol.extent.getWidth(extent) + ol.extent.getHeight(extent)) /
|
||||
resolution;
|
||||
feature.set('radius', radius);
|
||||
}
|
||||
}
|
||||
|
||||
var currentResolution;
|
||||
function styleFunction(feature, resolution) {
|
||||
if (resolution != currentResolution) {
|
||||
calculateClusterInfo(resolution);
|
||||
currentResolution = resolution;
|
||||
}
|
||||
var style;
|
||||
var size = feature.get('features').length;
|
||||
if (size > 1) {
|
||||
style = [new ol.style.Style({
|
||||
image: new ol.style.Circle({
|
||||
radius: feature.get('radius'),
|
||||
fill: new ol.style.Fill({
|
||||
color: [255, 153, 0, Math.min(0.8, 0.4 + (size / maxFeatureCount))]
|
||||
})
|
||||
}),
|
||||
text: new ol.style.Text({
|
||||
text: size.toString(),
|
||||
fill: textFill,
|
||||
stroke: textStroke
|
||||
})
|
||||
})];
|
||||
} else {
|
||||
var originalFeature = feature.get('features')[0];
|
||||
style = [createEarthquakeStyle(originalFeature)];
|
||||
}
|
||||
return style;
|
||||
}
|
||||
|
||||
function selectStyleFunction(feature, resolution) {
|
||||
var styles = [new ol.style.Style({
|
||||
image: new ol.style.Circle({
|
||||
radius: feature.get('radius'),
|
||||
fill: invisibleFill
|
||||
})
|
||||
})];
|
||||
var originalFeatures = feature.get('features');
|
||||
var originalFeature;
|
||||
for (var i = originalFeatures.length - 1; i >= 0; --i) {
|
||||
originalFeature = originalFeatures[i];
|
||||
styles.push(createEarthquakeStyle(originalFeature));
|
||||
}
|
||||
return styles;
|
||||
}
|
||||
|
||||
var vector = new ol.layer.Vector({
|
||||
source: new ol.source.Cluster({
|
||||
distance: 40,
|
||||
source: new ol.source.KML({
|
||||
extractStyles: false,
|
||||
projection: 'EPSG:3857',
|
||||
url: 'data/kml/2012_Earthquakes_Mag5.kml'
|
||||
})
|
||||
}),
|
||||
style: styleFunction
|
||||
});
|
||||
|
||||
var raster = new ol.layer.Tile({
|
||||
source: new ol.source.Stamen({
|
||||
layer: 'toner'
|
||||
})
|
||||
});
|
||||
|
||||
var map = new ol.Map({
|
||||
layers: [raster, vector],
|
||||
interactions: ol.interaction.defaults().extend([new ol.interaction.Select({
|
||||
condition: function(evt) {
|
||||
return evt.originalEvent.type == 'mousemove' ||
|
||||
evt.type == 'singleclick';
|
||||
},
|
||||
style: selectStyleFunction
|
||||
})]),
|
||||
target: 'map',
|
||||
view: new ol.View({
|
||||
center: [0, 0],
|
||||
zoom: 2
|
||||
})
|
||||
});
|
||||
@@ -9,7 +9,7 @@ goog.require('ol.source.TileWMS');
|
||||
var layers = [
|
||||
new ol.layer.Tile({
|
||||
source: new ol.source.TileWMS({
|
||||
url: 'http://demo.opengeo.org/geoserver/wms',
|
||||
url: 'http://demo.boundlessgeo.com/geoserver/wms',
|
||||
params: {
|
||||
'LAYERS': 'ne:NE1_HR_LC_SR_W_DR'
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ goog.require('ol.source.ImageWMS');
|
||||
|
||||
|
||||
var wmsSource = new ol.source.ImageWMS({
|
||||
url: 'http://demo.opengeo.org/geoserver/wms',
|
||||
url: 'http://demo.boundlessgeo.com/geoserver/wms',
|
||||
params: {'LAYERS': 'ne:ne'},
|
||||
serverType: 'geoserver'
|
||||
});
|
||||
|
||||
@@ -5,7 +5,7 @@ goog.require('ol.source.TileWMS');
|
||||
|
||||
|
||||
var wmsSource = new ol.source.TileWMS({
|
||||
url: 'http://demo.opengeo.org/geoserver/wms',
|
||||
url: 'http://demo.boundlessgeo.com/geoserver/wms',
|
||||
params: {'LAYERS': 'ne:ne'},
|
||||
serverType: 'geoserver'
|
||||
});
|
||||
|
||||
@@ -105,9 +105,7 @@ if ('download' in exportGPXElement) {
|
||||
clone.getGeometry().transform(projection, 'EPSG:4326');
|
||||
features.push(clone);
|
||||
});
|
||||
var node = new ol.format.GPX().writeFeatures(features);
|
||||
var string = new XMLSerializer().serializeToString(
|
||||
/** @type {Node} */ (node));
|
||||
var string = new ol.format.GPX().writeFeatures(features);
|
||||
var base64 = exampleNS.strToBase64(string);
|
||||
exportGPXElement.href =
|
||||
'data:text/gpx+xml;base64,' + base64;
|
||||
|
||||
53
examples/icon-sprite-webgl.html
Normal file
53
examples/icon-sprite-webgl.html
Normal file
@@ -0,0 +1,53 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="chrome=1">
|
||||
<meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
|
||||
<link rel="stylesheet" href="../css/ol.css" type="text/css">
|
||||
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap.min.css" type="text/css">
|
||||
<link rel="stylesheet" href="../resources/layout.css" type="text/css">
|
||||
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap-responsive.min.css" type="text/css">
|
||||
<title>Icon sprites with WebGL example</title>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="navbar navbar-inverse navbar-fixed-top">
|
||||
<div class="navbar-inner">
|
||||
<div class="container">
|
||||
<a class="brand" href="./"><img src="../resources/logo.png"> OpenLayers 3 Examples</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="container-fluid">
|
||||
|
||||
<div class="row-fluid">
|
||||
<div class="span12">
|
||||
<div id="map" class="map"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row-fluid">
|
||||
|
||||
<div class="span12">
|
||||
<h4 id="title">Icon sprite with WebGL example</h4>
|
||||
<p id="shortdesc">Icon sprite with WebGL.</p>
|
||||
<div id="docs">
|
||||
<p>See the <a href="icon-sprite-webgl.js" target="_blank">icon-sprite-webgl.js source</a> to see how this is done.</p>
|
||||
<p>In this example a sprite image is used for the icon styles. Using a sprite is required to get good performance with WebGL.</p>
|
||||
</div>
|
||||
<div id="tags">webgl, icon, sprite, vector, point</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script src="../resources/jquery.min.js" type="text/javascript"></script>
|
||||
<script src="../resources/bootstrap/js/bootstrap.min.js" type="text/javascript"></script>
|
||||
<script src="../resources/example-behaviour.js" type="text/javascript"></script>
|
||||
<script src="loader.js?id=icon-sprite-webgl" type="text/javascript"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
111
examples/icon-sprite-webgl.js
Normal file
111
examples/icon-sprite-webgl.js
Normal file
@@ -0,0 +1,111 @@
|
||||
goog.require('ol.Feature');
|
||||
goog.require('ol.FeatureOverlay');
|
||||
goog.require('ol.Map');
|
||||
goog.require('ol.View');
|
||||
goog.require('ol.geom.Point');
|
||||
goog.require('ol.layer.Vector');
|
||||
goog.require('ol.source.Vector');
|
||||
goog.require('ol.style.Icon');
|
||||
goog.require('ol.style.Style');
|
||||
|
||||
|
||||
var iconInfo = [{
|
||||
offset: [0, 0],
|
||||
opacity: 1.0,
|
||||
rotateWithView: true,
|
||||
rotation: 0.0,
|
||||
scale: 1.0,
|
||||
size: [55, 55]
|
||||
}, {
|
||||
offset: [110, 86],
|
||||
opacity: 0.75,
|
||||
rotateWithView: false,
|
||||
rotation: Math.PI / 2.0,
|
||||
scale: 1.25,
|
||||
size: [55, 55]
|
||||
}, {
|
||||
offset: [55, 0],
|
||||
opacity: 0.5,
|
||||
rotateWithView: true,
|
||||
rotation: Math.PI / 3.0,
|
||||
scale: 1.5,
|
||||
size: [55, 86]
|
||||
}, {
|
||||
offset: [212, 0],
|
||||
opacity: 1.0,
|
||||
rotateWithView: true,
|
||||
rotation: 0.0,
|
||||
scale: 1.0,
|
||||
size: [44, 44]
|
||||
}];
|
||||
|
||||
var i;
|
||||
|
||||
var iconCount = iconInfo.length;
|
||||
var icons = new Array(iconCount);
|
||||
for (i = 0; i < iconCount; ++i) {
|
||||
var info = iconInfo[i];
|
||||
icons[i] = new ol.style.Icon({
|
||||
offset: info.offset,
|
||||
opacity: info.opacity,
|
||||
rotateWithView: info.rotateWithView,
|
||||
rotation: info.rotation,
|
||||
scale: info.scale,
|
||||
size: info.size,
|
||||
src: 'data/Butterfly.png'
|
||||
});
|
||||
}
|
||||
|
||||
var featureCount = 50000;
|
||||
var features = new Array(featureCount);
|
||||
var feature, geometry;
|
||||
var e = 25000000;
|
||||
for (i = 0; i < featureCount; ++i) {
|
||||
geometry = new ol.geom.Point(
|
||||
[2 * e * Math.random() - e, 2 * e * Math.random() - e]);
|
||||
feature = new ol.Feature(geometry);
|
||||
feature.setStyle(
|
||||
new ol.style.Style({
|
||||
image: icons[i % (iconCount - 1)]
|
||||
})
|
||||
);
|
||||
features[i] = feature;
|
||||
}
|
||||
|
||||
var vectorSource = new ol.source.Vector({
|
||||
features: features
|
||||
});
|
||||
var vector = new ol.layer.Vector({
|
||||
source: vectorSource
|
||||
});
|
||||
|
||||
// Use the "webgl" renderer by default.
|
||||
var renderer = exampleNS.getRendererFromQueryString();
|
||||
if (!renderer) {
|
||||
renderer = 'webgl';
|
||||
}
|
||||
|
||||
var map = new ol.Map({
|
||||
renderer: renderer,
|
||||
layers: [vector],
|
||||
target: document.getElementById('map'),
|
||||
view: new ol.View({
|
||||
center: [0, 0],
|
||||
zoom: 5
|
||||
})
|
||||
});
|
||||
|
||||
var overlayFeatures = [];
|
||||
for (i = 0; i < featureCount; i += 30) {
|
||||
var clone = features[i].clone();
|
||||
clone.setStyle(null);
|
||||
overlayFeatures.push(clone);
|
||||
}
|
||||
|
||||
var featureOverlay = new ol.FeatureOverlay({
|
||||
map: map,
|
||||
style: new ol.style.Style({
|
||||
image: icons[iconCount - 1]
|
||||
}),
|
||||
features: overlayFeatures
|
||||
});
|
||||
@@ -73,7 +73,7 @@ var map = new ol.Map({
|
||||
html: 'All maps © ' +
|
||||
'<a href="http://www.opencyclemap.org/">OpenCycleMap</a>'
|
||||
}),
|
||||
ol.source.OSM.DATA_ATTRIBUTION
|
||||
ol.source.OSM.ATTRIBUTION
|
||||
],
|
||||
url: 'http://{a-c}.tile.opencyclemap.org/cycle/{z}/{x}/{y}.png'
|
||||
})
|
||||
|
||||
@@ -73,9 +73,7 @@ if ('download' in exportKMLElement) {
|
||||
clone.getGeometry().transform(projection, 'EPSG:4326');
|
||||
features.push(clone);
|
||||
});
|
||||
var node = new ol.format.KML().writeFeatures(features);
|
||||
var string = new XMLSerializer().serializeToString(
|
||||
/** @type {Node} */ (node));
|
||||
var string = new ol.format.KML().writeFeatures(features);
|
||||
var base64 = exampleNS.strToBase64(string);
|
||||
exportKMLElement.href =
|
||||
'data:application/vnd.google-earth.kml+xml;base64,' + base64;
|
||||
|
||||
68
examples/layer-extent.html
Normal file
68
examples/layer-extent.html
Normal file
@@ -0,0 +1,68 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="chrome=1">
|
||||
<meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
|
||||
<link rel="stylesheet" href="../css/ol.css" type="text/css">
|
||||
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap.min.css" type="text/css">
|
||||
<link rel="stylesheet" href="../resources/layout.css" type="text/css">
|
||||
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap-responsive.min.css" type="text/css">
|
||||
<title>Limited Layer Extent</title>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="navbar navbar-inverse navbar-fixed-top">
|
||||
<div class="navbar-inner">
|
||||
<div class="container">
|
||||
<a class="brand" href="./"><img src="../resources/logo.png"> OpenLayers 3 Examples</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="container-fluid">
|
||||
|
||||
<div class="row-fluid">
|
||||
<div class="span12">
|
||||
<div id="map" class="map"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row-fluid">
|
||||
|
||||
<div class="span12">
|
||||
<h4 id="title">Limited layer extent</h4>
|
||||
<p id="shortdesc">Restricting layer rendering to a limited extent.</p>
|
||||
<div id="docs">
|
||||
<p>
|
||||
This example uses the <code>layer.setExtent()</code> method to
|
||||
modify the extent of the overlay layer. Use the controls below
|
||||
to limit rendering based on an extent.
|
||||
</p>
|
||||
<p>
|
||||
<div class="btn-group">
|
||||
<button type="button" class="btn btn-default" id="northwest">northwest</button>
|
||||
<button type="button" class="btn btn-default" id="northeast">northeast</button>
|
||||
<button type="button" class="btn btn-default" id="southeast">southeast</button>
|
||||
<button type="button" class="btn btn-default" id="southwest">southwest</button>
|
||||
<button type="button" class="btn btn-default" id="world">world</button>
|
||||
</div>
|
||||
</p>
|
||||
<p>
|
||||
See the <a href="layer-extent.js" target="_blank">layer-extent.js
|
||||
source</a> for details on how this is done.
|
||||
</p>
|
||||
</div>
|
||||
<div id="tags">extent, tilejson</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script src="../resources/jquery.min.js" type="text/javascript"></script>
|
||||
<script src="../resources/example-behaviour.js" type="text/javascript"></script>
|
||||
<script src="loader.js?id=layer-extent" type="text/javascript"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
50
examples/layer-extent.js
Normal file
50
examples/layer-extent.js
Normal file
@@ -0,0 +1,50 @@
|
||||
goog.require('ol.Map');
|
||||
goog.require('ol.View');
|
||||
goog.require('ol.layer.Tile');
|
||||
goog.require('ol.proj');
|
||||
goog.require('ol.source.TileJSON');
|
||||
|
||||
function transform(extent) {
|
||||
return ol.proj.transformExtent(extent, 'EPSG:4326', 'EPSG:3857');
|
||||
}
|
||||
|
||||
var extents = {
|
||||
northwest: transform([-180, 0, 0, 85]),
|
||||
northeast: transform([0, 0, 180, 85]),
|
||||
southeast: transform([0, -85, 180, 0]),
|
||||
southwest: transform([-180, -85, 0, 0]),
|
||||
world: transform([-180, -85, 180, 85])
|
||||
};
|
||||
|
||||
var base = new ol.layer.Tile({
|
||||
source: new ol.source.TileJSON({
|
||||
url: 'http://api.tiles.mapbox.com/v3/' +
|
||||
'mapbox.world-black.jsonp',
|
||||
crossOrigin: 'anonymous'
|
||||
})
|
||||
});
|
||||
|
||||
var overlay = new ol.layer.Tile({
|
||||
extent: extents.northwest,
|
||||
source: new ol.source.TileJSON({
|
||||
url: 'http://api.tiles.mapbox.com/v3/' +
|
||||
'mapbox.world-glass.jsonp',
|
||||
crossOrigin: 'anonymous'
|
||||
})
|
||||
});
|
||||
|
||||
var map = new ol.Map({
|
||||
layers: [base, overlay],
|
||||
renderer: exampleNS.getRendererFromQueryString(),
|
||||
target: 'map',
|
||||
view: new ol.View({
|
||||
center: [0, 0],
|
||||
zoom: 1
|
||||
})
|
||||
});
|
||||
|
||||
for (var key in extents) {
|
||||
document.getElementById(key).onclick = function(event) {
|
||||
overlay.setExtent(extents[event.target.id]);
|
||||
};
|
||||
}
|
||||
73
examples/lazy-source.html
Normal file
73
examples/lazy-source.html
Normal file
@@ -0,0 +1,73 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="chrome=1">
|
||||
<meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
|
||||
<link rel="stylesheet" href="../css/ol.css" type="text/css">
|
||||
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap.min.css" type="text/css">
|
||||
<link rel="stylesheet" href="../resources/layout.css" type="text/css">
|
||||
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap-responsive.min.css" type="text/css">
|
||||
<title>Lazy Source</title>
|
||||
<style>
|
||||
button.code {
|
||||
font-family: Monaco,Menlo,Consolas,"Courier New",monospace;
|
||||
font-size: 12px;
|
||||
padding: 5px;
|
||||
margin: 0 5px;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="navbar navbar-inverse navbar-fixed-top">
|
||||
<div class="navbar-inner">
|
||||
<div class="container">
|
||||
<a class="brand" href="./"><img src="../resources/logo.png"> OpenLayers 3 Examples</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="container-fluid">
|
||||
|
||||
<div class="row-fluid">
|
||||
<div class="span12">
|
||||
<div id="map" class="map"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row-fluid">
|
||||
|
||||
<div class="span12">
|
||||
<h4 id="title">Lazy source example</h4>
|
||||
<p id="shortdesc">Example of setting a layer source after construction.</p>
|
||||
<div id="docs">
|
||||
<p>
|
||||
Typically, the source for a layer is provided to the layer constructor.
|
||||
If you need to set a layer source after construction, this can be
|
||||
done with the <code>layer.setSource()</code> method.
|
||||
</p>
|
||||
<p>
|
||||
The layer in the map above is constructed with no source. Use the
|
||||
links below to set/unset the layer source. A layer is not rendered
|
||||
until its source is set.
|
||||
</p>
|
||||
<p>
|
||||
<button id="set-source" class="code">layer.setSource(source)</button>
|
||||
<button id="unset-source" class="code">layer.setSource(null)</button>
|
||||
</p>
|
||||
<p>See the <a href="lazy-source.js" target="_blank">lazy-source.js source</a> for details on how this is done.</p>
|
||||
</div>
|
||||
<div id="tags">source</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script src="../resources/jquery.min.js" type="text/javascript"></script>
|
||||
<script src="../resources/example-behaviour.js" type="text/javascript"></script>
|
||||
<script src="loader.js?id=lazy-source" type="text/javascript"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
26
examples/lazy-source.js
Normal file
26
examples/lazy-source.js
Normal file
@@ -0,0 +1,26 @@
|
||||
goog.require('ol.Map');
|
||||
goog.require('ol.View');
|
||||
goog.require('ol.layer.Tile');
|
||||
goog.require('ol.source.MapQuest');
|
||||
|
||||
var source = new ol.source.MapQuest({layer: 'sat'});
|
||||
|
||||
var layer = new ol.layer.Tile();
|
||||
|
||||
var map = new ol.Map({
|
||||
layers: [layer],
|
||||
renderer: exampleNS.getRendererFromQueryString(),
|
||||
target: 'map',
|
||||
view: new ol.View({
|
||||
center: [0, 0],
|
||||
zoom: 2
|
||||
})
|
||||
});
|
||||
|
||||
document.getElementById('set-source').onclick = function() {
|
||||
layer.setSource(source);
|
||||
};
|
||||
|
||||
document.getElementById('unset-source').onclick = function() {
|
||||
layer.setSource(null);
|
||||
};
|
||||
@@ -16,7 +16,7 @@ var openCycleMapLayer = new ol.layer.Tile({
|
||||
html: 'All maps © ' +
|
||||
'<a href="http://www.opencyclemap.org/">OpenCycleMap</a>'
|
||||
}),
|
||||
ol.source.OSM.DATA_ATTRIBUTION
|
||||
ol.source.OSM.ATTRIBUTION
|
||||
],
|
||||
url: 'http://{a-c}.tile.opencyclemap.org/cycle/{z}/{x}/{y}.png'
|
||||
})
|
||||
@@ -29,7 +29,7 @@ var openSeaMapLayer = new ol.layer.Tile({
|
||||
html: 'All maps © ' +
|
||||
'<a href="http://www.openseamap.org/">OpenSeaMap</a>'
|
||||
}),
|
||||
ol.source.OSM.DATA_ATTRIBUTION
|
||||
ol.source.OSM.ATTRIBUTION
|
||||
],
|
||||
crossOrigin: null,
|
||||
url: 'http://tiles.openseamap.org/seamark/{z}/{x}/{y}.png'
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
<div id="map" class="map"></div>
|
||||
<script src="../resources/jquery.min.js" type="text/javascript"></script>
|
||||
<script src="../resources/example-behaviour.js" type="text/javascript"></script>
|
||||
<script src="http://cdnjs.cloudflare.com/ajax/libs/fastclick/1.0.3/fastclick.js" type="text/javascript"></script>
|
||||
<script src="loader.js?id=mobile-full-screen" type="text/javascript"></script>
|
||||
|
||||
<div style="display: none;">
|
||||
|
||||
@@ -32,3 +32,11 @@ geolocation.once('change:position', function() {
|
||||
view.setCenter(geolocation.getPosition());
|
||||
view.setResolution(2.388657133911758);
|
||||
});
|
||||
|
||||
// Use FastClick to eliminate the 300ms delay between a physical tap
|
||||
// and the firing of a click event on mobile browsers.
|
||||
// See http://updates.html5rocks.com/2013/12/300ms-tap-delay-gone-away
|
||||
// for more information.
|
||||
$(function() {
|
||||
FastClick.attach(document.body);
|
||||
});
|
||||
|
||||
51
examples/regularshape.html
Normal file
51
examples/regularshape.html
Normal file
@@ -0,0 +1,51 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="chrome=1">
|
||||
<meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
|
||||
<link rel="stylesheet" href="../css/ol.css" type="text/css">
|
||||
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap.min.css" type="text/css">
|
||||
<link rel="stylesheet" href="../resources/layout.css" type="text/css">
|
||||
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap-responsive.min.css" type="text/css">
|
||||
<title>Regular Shape example</title>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="navbar navbar-inverse navbar-fixed-top">
|
||||
<div class="navbar-inner">
|
||||
<div class="container">
|
||||
<a class="brand" href="./"><img src="../resources/logo.png"> OpenLayers 3 Examples</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="container-fluid">
|
||||
|
||||
<div class="row-fluid">
|
||||
<div class="span12">
|
||||
<div id="map" class="map"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row-fluid">
|
||||
|
||||
<div class="span12">
|
||||
<h4 id="title">Regular Shape example</h4>
|
||||
<p id="shortdesc">Example of some Regular Shape styles.</p>
|
||||
<div id="docs">
|
||||
<p>See the <a href="regularshape.js" target="_blank">regularshape.js source</a> to see how this is done.</p>
|
||||
</div>
|
||||
<div id="tags">vector, symbol, regularshape, style, square, cross, star, triangle, x</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script src="../resources/jquery.min.js" type="text/javascript"></script>
|
||||
<script src="../resources/example-behaviour.js" type="text/javascript"></script>
|
||||
<script src="loader.js?id=regularshape" type="text/javascript"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
101
examples/regularshape.js
Normal file
101
examples/regularshape.js
Normal file
@@ -0,0 +1,101 @@
|
||||
goog.require('ol.Feature');
|
||||
goog.require('ol.Map');
|
||||
goog.require('ol.View');
|
||||
goog.require('ol.geom.Point');
|
||||
goog.require('ol.layer.Vector');
|
||||
goog.require('ol.source.Vector');
|
||||
goog.require('ol.style.Fill');
|
||||
goog.require('ol.style.RegularShape');
|
||||
goog.require('ol.style.Stroke');
|
||||
goog.require('ol.style.Style');
|
||||
|
||||
|
||||
var stroke = new ol.style.Stroke({color: 'black', width: 2});
|
||||
var fill = new ol.style.Fill({color: 'red'});
|
||||
|
||||
var styles = {
|
||||
'square': [new ol.style.Style({
|
||||
image: new ol.style.RegularShape(
|
||||
/** @type {olx.style.RegularShapeOptions} */({
|
||||
fill: fill,
|
||||
stroke: stroke,
|
||||
points: 4,
|
||||
radius: 10,
|
||||
angle: Math.PI / 4
|
||||
}))
|
||||
})],
|
||||
'triangle': [new ol.style.Style({
|
||||
image: new ol.style.RegularShape(
|
||||
/** @type {olx.style.RegularShapeOptions} */({
|
||||
fill: fill,
|
||||
stroke: stroke,
|
||||
points: 3,
|
||||
radius: 10,
|
||||
rotation: Math.PI / 4,
|
||||
angle: 0
|
||||
}))
|
||||
})],
|
||||
'star': [new ol.style.Style({
|
||||
image: new ol.style.RegularShape(
|
||||
/** @type {olx.style.RegularShapeOptions} */({
|
||||
fill: fill,
|
||||
stroke: stroke,
|
||||
points: 5,
|
||||
radius: 10,
|
||||
radius2: 4,
|
||||
angle: 0
|
||||
}))
|
||||
})],
|
||||
'cross': [new ol.style.Style({
|
||||
image: new ol.style.RegularShape(
|
||||
/** @type {olx.style.RegularShapeOptions} */({
|
||||
fill: fill,
|
||||
stroke: stroke,
|
||||
points: 4,
|
||||
radius: 10,
|
||||
radius2: 0,
|
||||
angle: 0
|
||||
}))
|
||||
})],
|
||||
'x': [new ol.style.Style({
|
||||
image: new ol.style.RegularShape(
|
||||
/** @type {olx.style.RegularShapeOptions} */({
|
||||
fill: fill,
|
||||
stroke: stroke,
|
||||
points: 4,
|
||||
radius: 10,
|
||||
radius2: 0,
|
||||
angle: Math.PI / 4
|
||||
}))
|
||||
})]
|
||||
};
|
||||
|
||||
|
||||
var styleKeys = ['x', 'cross', 'star', 'triangle', 'square'];
|
||||
var count = 250;
|
||||
var features = new Array(count);
|
||||
var e = 4500000;
|
||||
for (var i = 0; i < count; ++i) {
|
||||
var coordinates = [2 * e * Math.random() - e, 2 * e * Math.random() - e];
|
||||
features[i] = new ol.Feature(new ol.geom.Point(coordinates));
|
||||
features[i].setStyle(styles[styleKeys[Math.floor(Math.random() * 5)]]);
|
||||
}
|
||||
|
||||
var source = new ol.source.Vector({
|
||||
features: features
|
||||
});
|
||||
|
||||
var vectorLayer = new ol.layer.Vector({
|
||||
source: source
|
||||
});
|
||||
|
||||
var map = new ol.Map({
|
||||
layers: [
|
||||
vectorLayer
|
||||
],
|
||||
target: 'map',
|
||||
view: new ol.View({
|
||||
center: [0, 0],
|
||||
zoom: 2
|
||||
})
|
||||
});
|
||||
58
examples/symbol-atlas-webgl.html
Normal file
58
examples/symbol-atlas-webgl.html
Normal file
@@ -0,0 +1,58 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="chrome=1">
|
||||
<meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
|
||||
<link rel="stylesheet" href="../css/ol.css" type="text/css">
|
||||
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap.min.css" type="text/css">
|
||||
<link rel="stylesheet" href="../resources/layout.css" type="text/css">
|
||||
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap-responsive.min.css" type="text/css">
|
||||
<title>Symbols with WebGL example</title>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="navbar navbar-inverse navbar-fixed-top">
|
||||
<div class="navbar-inner">
|
||||
<div class="container">
|
||||
<a class="brand" href="./"><img src="../resources/logo.png"> OpenLayers 3 Examples</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="container-fluid">
|
||||
|
||||
<div class="row-fluid">
|
||||
<div class="span12">
|
||||
<div id="map" class="map"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row-fluid">
|
||||
|
||||
<div class="span12">
|
||||
<h4 id="title">Symbols with WebGL example</h4>
|
||||
<p id="shortdesc">Using symbols in an atlas with WebGL.</p>
|
||||
<div id="docs">
|
||||
<p>When using symbol styles with WebGL, OpenLayers would render the symbol
|
||||
on a temporary image and would create a WebGL texture for each image. For a
|
||||
better performance, it is recommended to use atlas images (similar to
|
||||
image sprites with CSS), so that the number of textures is reduced. OpenLayers
|
||||
provides an <code>AtlasManager</code>, which when passed to the constructor
|
||||
of a symbol style, will create atlases for the symbols.</p>
|
||||
<p>See the <a href="symbol-atlas-webgl.js" target="_blank">symbol-atlas-webgl.js source</a> to see how this is done.</p>
|
||||
</div>
|
||||
<div id="tags">webgl, symbol, atlas, vector, point</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script src="../resources/jquery.min.js" type="text/javascript"></script>
|
||||
<script src="../resources/bootstrap/js/bootstrap.min.js" type="text/javascript"></script>
|
||||
<script src="../resources/example-behaviour.js" type="text/javascript"></script>
|
||||
<script src="loader.js?id=symbol-atlas-webgl" type="text/javascript"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
123
examples/symbol-atlas-webgl.js
Normal file
123
examples/symbol-atlas-webgl.js
Normal file
@@ -0,0 +1,123 @@
|
||||
goog.require('ol.Feature');
|
||||
goog.require('ol.Map');
|
||||
goog.require('ol.View');
|
||||
goog.require('ol.geom.Point');
|
||||
goog.require('ol.layer.Vector');
|
||||
goog.require('ol.source.Vector');
|
||||
goog.require('ol.style.AtlasManager');
|
||||
goog.require('ol.style.Circle');
|
||||
goog.require('ol.style.Fill');
|
||||
goog.require('ol.style.RegularShape');
|
||||
goog.require('ol.style.Stroke');
|
||||
goog.require('ol.style.Style');
|
||||
|
||||
var atlasManager = new ol.style.AtlasManager({
|
||||
// we increase the initial size so that all symbols fit into
|
||||
// a single atlas image
|
||||
initialSize: 512
|
||||
});
|
||||
|
||||
var symbolInfo = [{
|
||||
opacity: 1.0,
|
||||
scale: 1.0,
|
||||
fillColor: 'rgba(255, 153, 0, 0.4)',
|
||||
strokeColor: 'rgba(255, 204, 0, 0.2)'
|
||||
}, {
|
||||
opacity: 0.75,
|
||||
scale: 1.25,
|
||||
fillColor: 'rgba(70, 80, 224, 0.4)',
|
||||
strokeColor: 'rgba(12, 21, 138, 0.2)'
|
||||
}, {
|
||||
opacity: 0.5,
|
||||
scale: 1.5,
|
||||
fillColor: 'rgba(66, 150, 79, 0.4)',
|
||||
strokeColor: 'rgba(20, 99, 32, 0.2)'
|
||||
}, {
|
||||
opacity: 1.0,
|
||||
scale: 1.0,
|
||||
fillColor: 'rgba(176, 61, 35, 0.4)',
|
||||
strokeColor: 'rgba(145, 43, 20, 0.2)'
|
||||
}];
|
||||
|
||||
var radiuses = [3, 6, 9, 15, 19, 25];
|
||||
var symbolCount = symbolInfo.length * radiuses.length * 2;
|
||||
var symbols = [];
|
||||
var i, j;
|
||||
for (i = 0; i < symbolInfo.length; ++i) {
|
||||
var info = symbolInfo[i];
|
||||
for (j = 0; j < radiuses.length; ++j) {
|
||||
// circle symbol
|
||||
symbols.push(new ol.style.Circle({
|
||||
opacity: info.opacity,
|
||||
scale: info.scale,
|
||||
radius: radiuses[j],
|
||||
fill: new ol.style.Fill({
|
||||
color: info.fillColor
|
||||
}),
|
||||
stroke: new ol.style.Stroke({
|
||||
color: info.strokeColor,
|
||||
width: 1
|
||||
}),
|
||||
// by passing the atlas manager to the symbol,
|
||||
// the symbol will be added to an atlas
|
||||
atlasManager: atlasManager
|
||||
}));
|
||||
|
||||
// star symbol
|
||||
symbols.push(new ol.style.RegularShape({
|
||||
points: 8,
|
||||
opacity: info.opacity,
|
||||
scale: info.scale,
|
||||
radius: radiuses[j],
|
||||
radius2: radiuses[j] * 0.7,
|
||||
angle: 1.4,
|
||||
fill: new ol.style.Fill({
|
||||
color: info.fillColor
|
||||
}),
|
||||
stroke: new ol.style.Stroke({
|
||||
color: info.strokeColor,
|
||||
width: 1
|
||||
}),
|
||||
atlasManager: atlasManager
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
var featureCount = 50000;
|
||||
var features = new Array(featureCount);
|
||||
var feature, geometry;
|
||||
var e = 25000000;
|
||||
for (i = 0; i < featureCount; ++i) {
|
||||
geometry = new ol.geom.Point(
|
||||
[2 * e * Math.random() - e, 2 * e * Math.random() - e]);
|
||||
feature = new ol.Feature(geometry);
|
||||
feature.setStyle(
|
||||
new ol.style.Style({
|
||||
image: symbols[i % symbolCount]
|
||||
})
|
||||
);
|
||||
features[i] = feature;
|
||||
}
|
||||
|
||||
var vectorSource = new ol.source.Vector({
|
||||
features: features
|
||||
});
|
||||
var vector = new ol.layer.Vector({
|
||||
source: vectorSource
|
||||
});
|
||||
|
||||
// Use the "webgl" renderer by default.
|
||||
var renderer = exampleNS.getRendererFromQueryString();
|
||||
if (!renderer) {
|
||||
renderer = 'webgl';
|
||||
}
|
||||
|
||||
var map = new ol.Map({
|
||||
renderer: renderer,
|
||||
layers: [vector],
|
||||
target: document.getElementById('map'),
|
||||
view: new ol.View({
|
||||
center: [0, 0],
|
||||
zoom: 4
|
||||
})
|
||||
});
|
||||
69
examples/tileutfgrid.html
Normal file
69
examples/tileutfgrid.html
Normal file
@@ -0,0 +1,69 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="chrome=1">
|
||||
<meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
|
||||
<link rel="stylesheet" href="../css/ol.css" type="text/css">
|
||||
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap.min.css" type="text/css">
|
||||
<link rel="stylesheet" href="../resources/layout.css" type="text/css">
|
||||
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap-responsive.min.css" type="text/css">
|
||||
<style type="text/css">
|
||||
#country-name {
|
||||
color: black;
|
||||
font-size: 12pt;
|
||||
font-weight: bold;
|
||||
text-shadow: white 0.1em 0.1em 0.2em;
|
||||
}
|
||||
</style>
|
||||
<title>TileUTFGrid example</title>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="navbar navbar-inverse navbar-fixed-top">
|
||||
<div class="navbar-inner">
|
||||
<div class="container">
|
||||
<a class="brand" href="./"><img src="../resources/logo.png"> OpenLayers 3 Examples</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="container-fluid">
|
||||
|
||||
<div class="row-fluid">
|
||||
<div class="span12">
|
||||
<div id="map" class="map"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row-fluid">
|
||||
|
||||
<div class="span12">
|
||||
<h4 id="title">TileUTFGrid example</h4>
|
||||
<p id="shortdesc">This example shows how to read data from a TileUTFGrid layer.</p>
|
||||
<p>Point to a country to see its name and flag.</p>
|
||||
<div id="docs">
|
||||
<p>Tiles made with <a href="http://tilemill.com/">TileMill</a>. Hosting on MapBox.com or with open-source <a href="https://github.com/klokantech/tileserver-php/">TileServer</a>.</p>
|
||||
<p>See the <a href="tileutfgrid.js" target="_blank">tileutfgrid.js source</a> to see how this is done.</p>
|
||||
</div>
|
||||
<div id="tags">utfgrid, tileutfgrid, tilejson</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div style="display: none;">
|
||||
<!-- Overlay with the country info -->
|
||||
<div id="country-info">
|
||||
<div id="country-name"> </div>
|
||||
<img id="country-flag" src="" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="../resources/jquery.min.js" type="text/javascript"></script>
|
||||
<script src="../resources/example-behaviour.js" type="text/javascript"></script>
|
||||
<script src="loader.js?id=tileutfgrid" type="text/javascript"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
68
examples/tileutfgrid.js
Normal file
68
examples/tileutfgrid.js
Normal file
@@ -0,0 +1,68 @@
|
||||
goog.require('ol.Map');
|
||||
goog.require('ol.Overlay');
|
||||
goog.require('ol.View');
|
||||
goog.require('ol.layer.Tile');
|
||||
goog.require('ol.source.TileJSON');
|
||||
goog.require('ol.source.TileUTFGrid');
|
||||
|
||||
var mapLayer = new ol.layer.Tile({
|
||||
source: new ol.source.TileJSON({
|
||||
url: 'http://api.tiles.mapbox.com/v3/mapbox.geography-class.json'
|
||||
})
|
||||
});
|
||||
|
||||
var gridSource = new ol.source.TileUTFGrid({
|
||||
url: 'http://api.tiles.mapbox.com/v3/mapbox.geography-class.json'
|
||||
});
|
||||
|
||||
var gridLayer = new ol.layer.Tile({source: gridSource});
|
||||
|
||||
var view = new ol.View({
|
||||
center: [0, 0],
|
||||
zoom: 1
|
||||
});
|
||||
|
||||
var mapElement = document.getElementById('map');
|
||||
var map = new ol.Map({
|
||||
layers: [mapLayer, gridLayer],
|
||||
target: mapElement,
|
||||
view: view
|
||||
});
|
||||
|
||||
var infoElement = document.getElementById('country-info');
|
||||
var flagElement = document.getElementById('country-flag');
|
||||
var nameElement = document.getElementById('country-name');
|
||||
|
||||
var infoOverlay = new ol.Overlay({
|
||||
element: infoElement,
|
||||
offset: [15, 15],
|
||||
stopEvent: false
|
||||
});
|
||||
map.addOverlay(infoOverlay);
|
||||
|
||||
var displayCountryInfo = function(coordinate) {
|
||||
var viewResolution = /** @type {number} */ (view.getResolution());
|
||||
gridSource.forDataAtCoordinateAndResolution(coordinate, viewResolution,
|
||||
function(data) {
|
||||
// If you want to use the template from the TileJSON,
|
||||
// load the mustache.js library separately and call
|
||||
// info.innerHTML = Mustache.render(gridSource.getTemplate(), data);
|
||||
mapElement.style.cursor = data ? 'pointer' : '';
|
||||
if (data) {
|
||||
/* jshint -W069 */
|
||||
flagElement.src = 'data:image/png;base64,' + data['flag_png'];
|
||||
nameElement.innerHTML = data['admin'];
|
||||
/* jshint +W069 */
|
||||
}
|
||||
infoOverlay.setPosition(data ? coordinate : undefined);
|
||||
});
|
||||
};
|
||||
|
||||
$(map.getViewport()).on('mousemove', function(evt) {
|
||||
var coordinate = map.getEventCoordinate(evt.originalEvent);
|
||||
displayCountryInfo(coordinate);
|
||||
});
|
||||
|
||||
map.on('click', function(evt) {
|
||||
displayCountryInfo(evt.coordinate);
|
||||
});
|
||||
@@ -20,7 +20,7 @@ var map4326 = new ol.Map({
|
||||
layers: [
|
||||
new ol.layer.Tile({
|
||||
source: new ol.source.TileWMS({
|
||||
url: 'http://demo.opengeo.org/geoserver/wms',
|
||||
url: 'http://demo.boundlessgeo.com/geoserver/wms',
|
||||
params: {
|
||||
'LAYERS': 'ne:NE1_HR_LC_SR_W_DR'
|
||||
}
|
||||
@@ -41,7 +41,7 @@ var map3857 = new ol.Map({
|
||||
layers: [
|
||||
new ol.layer.Tile({
|
||||
source: new ol.source.TileWMS({
|
||||
url: 'http://demo.opengeo.org/geoserver/wms',
|
||||
url: 'http://demo.boundlessgeo.com/geoserver/wms',
|
||||
params: {
|
||||
'LAYERS': 'ne:NE1_HR_LC_SR_W_DR'
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ goog.require('ol.tilegrid.XYZ');
|
||||
var vectorSource = new ol.source.ServerVector({
|
||||
format: new ol.format.GeoJSON(),
|
||||
loader: function(extent, resolution, projection) {
|
||||
var url = 'http://demo.opengeo.org/geoserver/wfs?service=WFS&' +
|
||||
var url = 'http://demo.boundlessgeo.com/geoserver/wfs?service=WFS&' +
|
||||
'version=1.1.0&request=GetFeature&typename=osm:water_areas&' +
|
||||
'outputFormat=text/javascript&format_options=callback:loadFeatures' +
|
||||
'&srsname=EPSG:3857&bbox=' + extent.join(',') + ',EPSG:3857';
|
||||
|
||||
@@ -13,7 +13,7 @@ var layers = [
|
||||
new ol.layer.Image({
|
||||
extent: [-13884991, 2870341, -7455066, 6338219],
|
||||
source: new ol.source.ImageWMS({
|
||||
url: 'http://demo.opengeo.org/geoserver/wms',
|
||||
url: 'http://demo.boundlessgeo.com/geoserver/wms',
|
||||
params: {'LAYERS': 'topp:states'},
|
||||
serverType: 'geoserver'
|
||||
})
|
||||
|
||||
@@ -12,7 +12,7 @@ var layers = [
|
||||
new ol.layer.Tile({
|
||||
extent: [-13884991, 2870341, -7455066, 6338219],
|
||||
source: new ol.source.TileWMS(/** @type {olx.source.TileWMSOptions} */ ({
|
||||
url: 'http://demo.opengeo.org/geoserver/wms',
|
||||
url: 'http://demo.boundlessgeo.com/geoserver/wms',
|
||||
params: {'LAYERS': 'topp:states', 'TILED': true},
|
||||
serverType: 'geoserver'
|
||||
}))
|
||||
|
||||
@@ -29,7 +29,7 @@ var source = new ol.source.WMTS({
|
||||
style: 'normal',
|
||||
matrixSet: 'google3857',
|
||||
urls: urls,
|
||||
requestEncoding: /** @type {ol.source.WMTSRequestEncoding} */ ('REST'),
|
||||
requestEncoding: 'REST',
|
||||
tileGrid: new ol.tilegrid.WMTS({
|
||||
origin: [-20037508.3428, 20037508.3428],
|
||||
resolutions: [
|
||||
|
||||
@@ -27,7 +27,7 @@ var map = new ol.Map({
|
||||
html: 'Tiles © <a href="http://www.opencyclemap.org/">' +
|
||||
'OpenCycleMap</a>'
|
||||
}),
|
||||
ol.source.OSM.DATA_ATTRIBUTION
|
||||
ol.source.OSM.ATTRIBUTION
|
||||
],
|
||||
url: 'http://{a-c}.tile.opencyclemap.org/cycle/{z}/{x}/{y}.png'
|
||||
})
|
||||
|
||||
@@ -45,6 +45,9 @@ var map = new ol.Map({
|
||||
view: new ol.View({
|
||||
projection: proj,
|
||||
center: imgCenter,
|
||||
zoom: 0
|
||||
zoom: 0,
|
||||
// constrain the center: center cannot be set outside
|
||||
// this extent
|
||||
extent: [0, -imgHeight, imgWidth, 0]
|
||||
})
|
||||
});
|
||||
|
||||
25
externs/fastclick.js
Normal file
25
externs/fastclick.js
Normal file
@@ -0,0 +1,25 @@
|
||||
/**
|
||||
* @fileoverview Externs for FastClick 1.0.3
|
||||
* @see https://github.com/ftlabs/fastclick
|
||||
* @externs
|
||||
*/
|
||||
|
||||
/**
|
||||
* @type {Object}
|
||||
* @const
|
||||
*/
|
||||
var FastClick = {};
|
||||
|
||||
/**
|
||||
* @typedef {{
|
||||
* touchBoundary: (number|undefined),
|
||||
* tapDelay: (number|undefined)
|
||||
* }}
|
||||
*/
|
||||
FastClick.AttachOptions;
|
||||
|
||||
/**
|
||||
* @param {Element} layer
|
||||
* @param {FastClick.AttachOptions=} opt_options
|
||||
*/
|
||||
FastClick.attach = function(layer, opt_options) {};
|
||||
@@ -34,9 +34,9 @@ var GeoJSONCRS = function() {};
|
||||
|
||||
|
||||
/**
|
||||
* @type {!GeoJSONCRSCode|!GeoJSONCRSName|!GeoJSONLink}
|
||||
* TODO: remove GeoJSONCRSCode when http://jira.codehaus.org/browse/GEOS-5996
|
||||
* is fixed and widely deployed.
|
||||
* @type {!GeoJSONCRSCode|!GeoJSONCRSName|!GeoJSONLink}
|
||||
*/
|
||||
GeoJSONCRS.prototype.properties;
|
||||
|
||||
@@ -60,9 +60,9 @@ var GeoJSONCRSName = function() {};
|
||||
|
||||
|
||||
/**
|
||||
* @type {string}
|
||||
* TODO: remove this when http://jira.codehaus.org/browse/GEOS-5996 is fixed
|
||||
* and widely deployed.
|
||||
* @type {string}
|
||||
*/
|
||||
GeoJSONCRSName.prototype.code;
|
||||
|
||||
|
||||
143
externs/jquery-1.9.js
vendored
143
externs/jquery-1.9.js
vendored
@@ -36,6 +36,44 @@ var jQuerySelector;
|
||||
/** @typedef {function(...)|Array.<function(...)>} */
|
||||
var jQueryCallback;
|
||||
|
||||
/** @typedef {
|
||||
{
|
||||
accepts: (Object.<string, string>|undefined),
|
||||
async: (?boolean|undefined),
|
||||
beforeSend: (function(jQuery.jqXHR, (jQueryAjaxSettings|Object.<string, *>))|undefined),
|
||||
cache: (?boolean|undefined),
|
||||
complete: (function(jQuery.jqXHR, string)|undefined),
|
||||
contents: (Object.<string, RegExp>|undefined),
|
||||
contentType: (?string|undefined),
|
||||
context: (Object.<?, ?>|jQueryAjaxSettings|undefined),
|
||||
converters: (Object.<string, Function>|undefined),
|
||||
crossDomain: (?boolean|undefined),
|
||||
data: (Object.<?, ?>|?string|Array.<?>|undefined),
|
||||
dataFilter: (function(string, string):Object.<?,?>|undefined),
|
||||
dataType: (?string|undefined),
|
||||
error: (function(jQuery.jqXHR, string, string)|undefined),
|
||||
global: (?boolean|undefined),
|
||||
headers: (Object.<?, ?>|undefined),
|
||||
ifModified: (?boolean|undefined),
|
||||
isLocal: (?boolean|undefined),
|
||||
jsonp: (?string|undefined),
|
||||
jsonpCallback: (?string|function()|undefined),
|
||||
mimeType: (?string|undefined),
|
||||
password: (?string|undefined),
|
||||
processData: (?boolean|undefined),
|
||||
scriptCharset: (?string|undefined),
|
||||
statusCode: (Object.<number, function()>|undefined),
|
||||
success: (function(?, string, jQuery.jqXHR)|undefined),
|
||||
timeout: (?number|undefined),
|
||||
traditional: (?boolean|undefined),
|
||||
type: (?string|undefined),
|
||||
url: (?string|undefined),
|
||||
username: (?string|undefined),
|
||||
xhr: (function():(ActiveXObject|XMLHttpRequest)|undefined),
|
||||
xhrFields: (Object.<?, ?>|undefined)
|
||||
}} */
|
||||
var jQueryAjaxSettings;
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
* @param {(jQuerySelector|Element|Object|Array.<Element>|jQuery|string|
|
||||
@@ -86,105 +124,61 @@ jQuery.prototype.addClass = function(arg1) {};
|
||||
jQuery.prototype.after = function(arg1, content) {};
|
||||
|
||||
/**
|
||||
* @param {(string|Object.<string,*>)} arg1
|
||||
* @param {Object.<string,*>=} settings
|
||||
* @param {(string|jQueryAjaxSettings|Object.<string,*>)} arg1
|
||||
* @param {(jQueryAjaxSettings|Object.<string, *>)=} settings
|
||||
* @return {jQuery.jqXHR}
|
||||
*/
|
||||
jQuery.ajax = function(arg1, settings) {};
|
||||
|
||||
/**
|
||||
* @param {(string|Object.<string,*>)} arg1
|
||||
* @param {Object.<string,*>=} settings
|
||||
* @param {(string|jQueryAjaxSettings|Object.<string, *>)} arg1
|
||||
* @param {(jQueryAjaxSettings|Object.<string, *>)=} settings
|
||||
* @return {jQuery.jqXHR}
|
||||
*/
|
||||
$.ajax = function(arg1, settings) {};
|
||||
|
||||
/**
|
||||
* @param {function(!jQuery.event,XMLHttpRequest,Object.<string, *>)} handler
|
||||
* @param {function(!jQuery.event,XMLHttpRequest,(jQueryAjaxSettings|Object.<string, *>))} handler
|
||||
* @return {!jQuery}
|
||||
*/
|
||||
jQuery.prototype.ajaxComplete = function(handler) {};
|
||||
|
||||
/**
|
||||
* @param {function(!jQuery.event,jQuery.jqXHR,Object.<string, *>,*)} handler
|
||||
* @param {function(!jQuery.event,jQuery.jqXHR,(jQueryAjaxSettings|Object.<string, *>),*)} handler
|
||||
* @return {!jQuery}
|
||||
*/
|
||||
jQuery.prototype.ajaxError = function(handler) {};
|
||||
|
||||
/**
|
||||
* @param {(string|
|
||||
* function(Object.<string,*>,Object.<string, *>,jQuery.jqXHR))} dataTypes
|
||||
* @param {function(Object.<string,*>,Object.<string, *>,jQuery.jqXHR)=} handler
|
||||
* @param {(string|function((jQueryAjaxSettings|Object.<string, *>),(jQueryAjaxSettings|Object.<string, *>),jQuery.jqXHR))} dataTypes
|
||||
* @param {function((jQueryAjaxSettings|Object.<string, *>),(jQueryAjaxSettings|Object.<string, *>),jQuery.jqXHR)=} handler
|
||||
*/
|
||||
jQuery.ajaxPrefilter = function(dataTypes, handler) {};
|
||||
|
||||
/**
|
||||
* @param {(string|
|
||||
* function(Object.<string,*>,Object.<string, *>,jQuery.jqXHR))} dataTypes
|
||||
* @param {function(Object.<string,*>,Object.<string, *>,jQuery.jqXHR)=} handler
|
||||
* @param {(string|function((jQueryAjaxSettings|Object.<string, *>),(jQueryAjaxSettings|Object.<string, *>),jQuery.jqXHR))} dataTypes
|
||||
* @param {function((jQueryAjaxSettings|Object.<string, *>),(jQueryAjaxSettings|Object.<string, *>),jQuery.jqXHR)=} handler
|
||||
*/
|
||||
$.ajaxPrefilter = function(dataTypes, handler) {};
|
||||
|
||||
/**
|
||||
* @param {function(!jQuery.event,jQuery.jqXHR,Object.<string, *>)} handler
|
||||
* @param {function(!jQuery.event,jQuery.jqXHR,(jQueryAjaxSettings|Object.<string, *>))} handler
|
||||
* @return {!jQuery}
|
||||
*/
|
||||
jQuery.prototype.ajaxSend = function(handler) {};
|
||||
|
||||
/** @const */
|
||||
jQuery.ajaxSettings = {};
|
||||
/** @const {jQueryAjaxSettings|Object.<string, *>} */
|
||||
jQuery.ajaxSettings;
|
||||
|
||||
/** @const */
|
||||
/** @const {jQueryAjaxSettings|Object.<string, *>} */
|
||||
$.ajaxSettings = {};
|
||||
|
||||
/** @type {Object.<string, string>} */
|
||||
jQuery.ajaxSettings.accepts = {};
|
||||
|
||||
/** @type {Object.<string, string>} */
|
||||
$.ajaxSettings.accepts = {};
|
||||
|
||||
/** @type {boolean} */
|
||||
jQuery.ajaxSettings.async;
|
||||
|
||||
/** @type {boolean} */
|
||||
$.ajaxSettings.async;
|
||||
|
||||
/** @type {Object.<string, RegExp>} */
|
||||
jQuery.ajaxSettings.contents = {};
|
||||
|
||||
/** @type {Object.<string, RegExp>} */
|
||||
$.ajaxSettings.contents = {};
|
||||
|
||||
/** @type {string} */
|
||||
jQuery.ajaxSettings.contentType;
|
||||
|
||||
/** @type {string} */
|
||||
$.ajaxSettings.contentType;
|
||||
|
||||
/** @type {Object.<string, *>} */
|
||||
jQuery.ajaxSettings.converters = {};
|
||||
|
||||
/** @type {Object.<string, *>} */
|
||||
$.ajaxSettings.converters = {};
|
||||
|
||||
/** @type {Object.<string, boolean>} */
|
||||
jQuery.ajaxSettings.flatOptions = {};
|
||||
|
||||
/** @type {Object.<string, boolean>} */
|
||||
$.ajaxSettings.flatOptions = {};
|
||||
|
||||
/** @type {boolean} */
|
||||
jQuery.ajaxSettings.global;
|
||||
|
||||
/** @type {boolean} */
|
||||
$.ajaxSettings.global;
|
||||
|
||||
/** @type {boolean} */
|
||||
jQuery.ajaxSettings.isLocal;
|
||||
|
||||
/** @type {boolean} */
|
||||
$.ajaxSettings.isLocal;
|
||||
|
||||
/** @type {boolean} */
|
||||
jQuery.ajaxSettings.processData;
|
||||
|
||||
@@ -197,34 +191,10 @@ jQuery.ajaxSettings.responseFields = {};
|
||||
/** @type {Object.<string, string>} */
|
||||
$.ajaxSettings.responseFields = {};
|
||||
|
||||
/** @type {boolean} */
|
||||
jQuery.ajaxSettings.traditional;
|
||||
|
||||
/** @type {boolean} */
|
||||
$.ajaxSettings.traditional;
|
||||
|
||||
/** @type {string} */
|
||||
jQuery.ajaxSettings.type;
|
||||
|
||||
/** @type {string} */
|
||||
$.ajaxSettings.type;
|
||||
|
||||
/** @type {string} */
|
||||
jQuery.ajaxSettings.url;
|
||||
|
||||
/** @type {string} */
|
||||
$.ajaxSettings.url;
|
||||
|
||||
/** @return {XMLHttpRequest|ActiveXObject} */
|
||||
jQuery.ajaxSettings.xhr = function() {};
|
||||
|
||||
/** @return {XMLHttpRequest|ActiveXObject} */
|
||||
$.ajaxSettings.xhr = function() {};
|
||||
|
||||
/** @param {Object.<string,*>} options */
|
||||
/** @param {jQueryAjaxSettings|Object.<string, *>} options */
|
||||
jQuery.ajaxSetup = function(options) {};
|
||||
|
||||
/** @param {Object.<string,*>} options */
|
||||
/** @param {jQueryAjaxSettings|Object.<string, *>} options */
|
||||
$.ajaxSetup = function(options) {};
|
||||
|
||||
/**
|
||||
@@ -240,7 +210,7 @@ jQuery.prototype.ajaxStart = function(handler) {};
|
||||
jQuery.prototype.ajaxStop = function(handler) {};
|
||||
|
||||
/**
|
||||
* @param {function(!jQuery.event,XMLHttpRequest,Object.<string, *>)} handler
|
||||
* @param {function(!jQuery.event,XMLHttpRequest,(jQueryAjaxSettings|Object.<string, *>), ?)} handler
|
||||
* @return {!jQuery}
|
||||
*/
|
||||
jQuery.prototype.ajaxSuccess = function(handler) {};
|
||||
@@ -834,8 +804,9 @@ jQuery.prototype.fadeTo = function(duration, opacity, arg3, callback) {};
|
||||
jQuery.prototype.fadeToggle = function(duration, easing, callback) {};
|
||||
|
||||
/**
|
||||
* @param {(jQuerySelector|function(number)|Element|jQuery)} arg1
|
||||
* @param {(jQuerySelector|function(number,Element)|Element|jQuery)} arg1
|
||||
* @return {!jQuery}
|
||||
* @see http://api.jquery.com/filter/
|
||||
*/
|
||||
jQuery.prototype.filter = function(arg1) {};
|
||||
|
||||
|
||||
@@ -55,10 +55,18 @@ oli.DrawEvent.prototype.feature;
|
||||
oli.ObjectEvent = function() {};
|
||||
|
||||
|
||||
/** @type {string} */
|
||||
/**
|
||||
* @type {string}
|
||||
*/
|
||||
oli.ObjectEvent.prototype.key;
|
||||
|
||||
|
||||
/**
|
||||
* @type {*}
|
||||
*/
|
||||
oli.ObjectEvent.prototype.oldValue;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @interface
|
||||
@@ -122,13 +130,13 @@ oli.control.Control = function() {};
|
||||
oli.control.Control.prototype.setMap = function(map) {};
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @type {Object}
|
||||
*/
|
||||
oli.interaction;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @interface
|
||||
*/
|
||||
|
||||
551
externs/olx.js
551
externs/olx.js
@@ -172,6 +172,25 @@ olx.GraticuleOptions.prototype.strokeStyle;
|
||||
olx.GraticuleOptions.prototype.targetSize;
|
||||
|
||||
|
||||
/**
|
||||
* Object literal with config options for interactions.
|
||||
* @typedef {{handleEvent: function(ol.MapBrowserEvent):boolean}}
|
||||
* @api
|
||||
*/
|
||||
olx.interaction.InteractionOptions;
|
||||
|
||||
|
||||
/**
|
||||
* Method called by the map to notify the interaction that a browser event was
|
||||
* dispatched to the map. The function may return `false` to prevent the
|
||||
* propagation of the event to other interactions in the map's interactions
|
||||
* chain. Required.
|
||||
* @type {function(ol.MapBrowserEvent):boolean}
|
||||
* @api
|
||||
*/
|
||||
olx.interaction.InteractionOptions.prototype.handleEvent;
|
||||
|
||||
|
||||
/**
|
||||
* Object literal with config options for the map.
|
||||
* @typedef {{controls: (ol.Collection.<ol.control.Control>|Array.<ol.control.Control>|undefined),
|
||||
@@ -474,7 +493,9 @@ olx.ViewOptions.prototype.constrainRotation;
|
||||
|
||||
|
||||
/**
|
||||
* Enable rotation. Default is `true`.
|
||||
* Enable rotation. Default is `true`. If `false` a rotation constraint that
|
||||
* always sets the rotation to zero is used. The `constrainRotation` option
|
||||
* has no effect if `enableRotation` is `false`.
|
||||
* @type {boolean|undefined}
|
||||
* @api
|
||||
*/
|
||||
@@ -795,6 +816,12 @@ olx.control;
|
||||
|
||||
/**
|
||||
* @typedef {{className: (string|undefined),
|
||||
* collapsible: (boolean|undefined),
|
||||
* collapsed: (boolean|undefined),
|
||||
* tipLabel: (string|undefined),
|
||||
* label: (string|undefined),
|
||||
* collapseLabel: (string|undefined),
|
||||
* render: (function(ol.MapEvent)|undefined),
|
||||
* target: (Element|undefined)}}
|
||||
* @api
|
||||
*/
|
||||
@@ -858,8 +885,19 @@ olx.control.AttributionOptions.prototype.label;
|
||||
*/
|
||||
olx.control.AttributionOptions.prototype.collapseLabel;
|
||||
|
||||
|
||||
/**
|
||||
* Function called when the control should be re-rendered. This is called
|
||||
* in a requestAnimationFrame callback.
|
||||
* @type {function(ol.MapEvent)|undefined}
|
||||
* @api
|
||||
*/
|
||||
olx.control.AttributionOptions.prototype.render;
|
||||
|
||||
|
||||
/**
|
||||
* @typedef {{element: (Element|undefined),
|
||||
* render: (function(ol.MapEvent)|undefined),
|
||||
* target: (Element|string|undefined)}}
|
||||
* @api stable
|
||||
*/
|
||||
@@ -875,6 +913,15 @@ olx.control.ControlOptions;
|
||||
olx.control.ControlOptions.prototype.element;
|
||||
|
||||
|
||||
/**
|
||||
* Function called when the control should be re-rendered. This is called
|
||||
* in a requestAnimationFrame callback.
|
||||
* @type {function(ol.MapEvent)|undefined}
|
||||
* @api
|
||||
*/
|
||||
olx.control.ControlOptions.prototype.render;
|
||||
|
||||
|
||||
/**
|
||||
* Specify a target if you want the control to be rendered outside of the map's
|
||||
* viewport.
|
||||
@@ -990,6 +1037,7 @@ olx.control.FullScreenOptions.prototype.target;
|
||||
* @typedef {{className: (string|undefined),
|
||||
* coordinateFormat: (ol.CoordinateFormatType|undefined),
|
||||
* projection: ol.proj.ProjectionLike,
|
||||
* render: (function(ol.MapEvent)|undefined),
|
||||
* target: (Element|undefined),
|
||||
* undefinedHTML: (string|undefined)}}
|
||||
* @api stable
|
||||
@@ -1021,6 +1069,15 @@ olx.control.MousePositionOptions.prototype.coordinateFormat;
|
||||
olx.control.MousePositionOptions.prototype.projection;
|
||||
|
||||
|
||||
/**
|
||||
* Function called when the control should be re-rendered. This is called
|
||||
* in a requestAnimationFrame callback.
|
||||
* @type {function(ol.MapEvent)|undefined}
|
||||
* @api
|
||||
*/
|
||||
olx.control.MousePositionOptions.prototype.render;
|
||||
|
||||
|
||||
/**
|
||||
* Target.
|
||||
* @type {Element|undefined}
|
||||
@@ -1043,6 +1100,7 @@ olx.control.MousePositionOptions.prototype.undefinedHTML;
|
||||
* collapsible: (boolean|undefined),
|
||||
* label: (string|undefined),
|
||||
* layers: (Array.<ol.layer.Layer>|ol.Collection|undefined),
|
||||
* render: (function(ol.MapEvent)|undefined),
|
||||
* target: (Element|undefined),
|
||||
* tipLabel: (string|undefined)}}
|
||||
* @api
|
||||
@@ -1092,6 +1150,15 @@ olx.control.OverviewMapOptions.prototype.label;
|
||||
olx.control.OverviewMapOptions.prototype.layers;
|
||||
|
||||
|
||||
/**
|
||||
* Function called when the control should be re-rendered. This is called
|
||||
* in a requestAnimationFrame callback.
|
||||
* @type {function(ol.MapEvent)|undefined}
|
||||
* @api
|
||||
*/
|
||||
olx.control.OverviewMapOptions.prototype.render;
|
||||
|
||||
|
||||
/**
|
||||
* Specify a target if you want the control to be rendered outside of the map's
|
||||
* viewport.
|
||||
@@ -1112,6 +1179,7 @@ olx.control.OverviewMapOptions.prototype.tipLabel;
|
||||
/**
|
||||
* @typedef {{className: (string|undefined),
|
||||
* minWidth: (number|undefined),
|
||||
* render: (function(ol.MapEvent)|undefined),
|
||||
* target: (Element|undefined),
|
||||
* units: (ol.control.ScaleLineUnits|string|undefined)}}
|
||||
* @api stable
|
||||
@@ -1135,6 +1203,15 @@ olx.control.ScaleLineOptions.prototype.className;
|
||||
olx.control.ScaleLineOptions.prototype.minWidth;
|
||||
|
||||
|
||||
/**
|
||||
* Function called when the control should be re-rendered. This is called
|
||||
* in a requestAnimationFrame callback.
|
||||
* @type {function(ol.MapEvent)|undefined}
|
||||
* @api
|
||||
*/
|
||||
olx.control.ScaleLineOptions.prototype.render;
|
||||
|
||||
|
||||
/**
|
||||
* Target.
|
||||
* @type {Element|undefined}
|
||||
@@ -1157,6 +1234,7 @@ olx.control.ScaleLineOptions.prototype.units;
|
||||
* label: (string|undefined),
|
||||
* tipLabel: (string|undefined),
|
||||
* target: (Element|undefined),
|
||||
* render: (function(ol.MapEvent)|undefined),
|
||||
* autoHide: (boolean|undefined)}}
|
||||
* @api stable
|
||||
*/
|
||||
@@ -1203,6 +1281,15 @@ olx.control.RotateOptions.prototype.duration;
|
||||
olx.control.RotateOptions.prototype.autoHide;
|
||||
|
||||
|
||||
/**
|
||||
* Function called when the control should be re-rendered. This is called
|
||||
* in a requestAnimationFrame callback.
|
||||
* @type {function(ol.MapEvent)|undefined}
|
||||
* @api
|
||||
*/
|
||||
olx.control.RotateOptions.prototype.render;
|
||||
|
||||
|
||||
/**
|
||||
* Target.
|
||||
* @type {Element|undefined}
|
||||
@@ -1292,8 +1379,9 @@ olx.control.ZoomOptions.prototype.target;
|
||||
/**
|
||||
* @typedef {{className: (string|undefined),
|
||||
* maxResolution: (number|undefined),
|
||||
* minResolution: (number|undefined)}}
|
||||
* @api stable
|
||||
* minResolution: (number|undefined),
|
||||
* render: (function(ol.MapEvent)|undefined)}}
|
||||
* @api
|
||||
*/
|
||||
olx.control.ZoomSliderOptions;
|
||||
|
||||
@@ -1322,6 +1410,15 @@ olx.control.ZoomSliderOptions.prototype.maxResolution;
|
||||
olx.control.ZoomSliderOptions.prototype.minResolution;
|
||||
|
||||
|
||||
/**
|
||||
* Function called when the control should be re-rendered. This is called
|
||||
* in a requestAnimationFrame callback.
|
||||
* @type {function(ol.MapEvent)|undefined}
|
||||
* @api
|
||||
*/
|
||||
olx.control.ZoomSliderOptions.prototype.render;
|
||||
|
||||
|
||||
/**
|
||||
* @typedef {{className: (string|undefined),
|
||||
* target: (Element|undefined),
|
||||
@@ -1373,8 +1470,8 @@ olx.format;
|
||||
|
||||
|
||||
/**
|
||||
* @typedef {{dataProjection: (ol.proj.ProjectionLike|undefined),
|
||||
* featureProjection: (ol.proj.ProjectionLike|undefined)}}
|
||||
* @typedef {{dataProjection: ol.proj.ProjectionLike,
|
||||
* featureProjection: ol.proj.ProjectionLike}}
|
||||
* @api
|
||||
*/
|
||||
olx.format.ReadOptions;
|
||||
@@ -1386,7 +1483,7 @@ olx.format.ReadOptions;
|
||||
* the format is assigned (where set). If the projection can not be derived from
|
||||
* the data and if no `defaultDataProjection` is set for a format, the features
|
||||
* will not be reprojected.
|
||||
* @type {ol.proj.ProjectionLike|undefined}
|
||||
* @type {ol.proj.ProjectionLike}
|
||||
* @api stable
|
||||
*/
|
||||
olx.format.ReadOptions.prototype.dataProjection;
|
||||
@@ -1395,14 +1492,14 @@ olx.format.ReadOptions.prototype.dataProjection;
|
||||
/**
|
||||
* Projection of the feature geometries created by the format reader. If not
|
||||
* provided, features will be returned in the `dataProjection`.
|
||||
* @type {ol.proj.ProjectionLike|undefined}
|
||||
* @type {ol.proj.ProjectionLike}
|
||||
* @api stable
|
||||
*/
|
||||
olx.format.ReadOptions.prototype.featureProjection;
|
||||
|
||||
|
||||
/**
|
||||
* @typedef {{dataProjection: (ol.proj.ProjectionLike|undefined),
|
||||
* @typedef {{dataProjection: ol.proj.ProjectionLike,
|
||||
* featureProjection: ol.proj.ProjectionLike}}
|
||||
* @api
|
||||
*/
|
||||
@@ -1414,7 +1511,7 @@ olx.format.WriteOptions;
|
||||
* `defaultDataProjection` of the format is assigned (where set). If no
|
||||
* `defaultDataProjection` is set for a format, the features will be returned
|
||||
* in the `featureProjection`.
|
||||
* @type {ol.proj.ProjectionLike|undefined}
|
||||
* @type {ol.proj.ProjectionLike}
|
||||
* @api stable
|
||||
*/
|
||||
olx.format.WriteOptions.prototype.dataProjection;
|
||||
@@ -1630,6 +1727,7 @@ olx.format.GPXOptions.prototype.readExtensions;
|
||||
/**
|
||||
* @typedef {{featureNS: string,
|
||||
* featureType: string,
|
||||
* gmlFormat: (ol.format.GMLBase|undefined),
|
||||
* schemaLocation: (string|undefined)}}
|
||||
* @api
|
||||
*/
|
||||
@@ -1652,6 +1750,14 @@ olx.format.WFSOptions.prototype.featureNS;
|
||||
olx.format.WFSOptions.prototype.featureType;
|
||||
|
||||
|
||||
/**
|
||||
* The GML format to use to parse the response. Default is `ol.format.GML3`.
|
||||
* @type {ol.format.GMLBase|undefined}
|
||||
* @api
|
||||
*/
|
||||
olx.format.WFSOptions.prototype.gmlFormat;
|
||||
|
||||
|
||||
/**
|
||||
* Optional schemaLocation to use for serialization, this will override the
|
||||
* default.
|
||||
@@ -2323,6 +2429,65 @@ olx.interaction.PinchZoomOptions;
|
||||
olx.interaction.PinchZoomOptions.prototype.duration;
|
||||
|
||||
|
||||
/**
|
||||
* @typedef {{handleDownEvent: (function(ol.MapBrowserPointerEvent):boolean|undefined),
|
||||
* handleDragEvent: (function(ol.MapBrowserPointerEvent)|undefined),
|
||||
* handleEvent: (function(ol.MapBrowserEvent):boolean|undefined),
|
||||
* handleMoveEvent: (function(ol.MapBrowserPointerEvent)|undefined),
|
||||
* handleUpEvent: (function(ol.MapBrowserPointerEvent):boolean|undefined)}}
|
||||
* @api
|
||||
*/
|
||||
olx.interaction.PointerOptions;
|
||||
|
||||
|
||||
/**
|
||||
* Function handling "down" events. If the function returns `true` then a drag
|
||||
* sequence is started.
|
||||
* @type {(function(ol.MapBrowserPointerEvent):boolean|undefined)}
|
||||
* @api
|
||||
*/
|
||||
olx.interaction.PointerOptions.prototype.handleDownEvent;
|
||||
|
||||
|
||||
/**
|
||||
* Function handling "drag" events. This function is called on "move" events
|
||||
* during a drag sequence.
|
||||
* @type {(function(ol.MapBrowserPointerEvent):boolean|undefined)}
|
||||
* @api
|
||||
*/
|
||||
olx.interaction.PointerOptions.prototype.handleDragEvent;
|
||||
|
||||
|
||||
/**
|
||||
* Method called by the map to notify the interaction that a browser event was
|
||||
* dispatched to the map. The function may return `false` to prevent the
|
||||
* propagation of the event to other interactions in the map's interactions
|
||||
* chain.
|
||||
* @type {(function(ol.MapBrowserEvent):boolean|undefined)}
|
||||
* @api
|
||||
*/
|
||||
olx.interaction.PointerOptions.prototype.handleEvent;
|
||||
|
||||
|
||||
/**
|
||||
* Function handling "move" events. This function is called on "move" events,
|
||||
* also during a drag sequence (so during a drag sequence both the
|
||||
* `handleDragEvent` function and this function are called).
|
||||
* @type {(function(ol.MapBrowserPointerEvent):boolean|undefined)}
|
||||
* @api
|
||||
*/
|
||||
olx.interaction.PointerOptions.prototype.handleMoveEvent;
|
||||
|
||||
|
||||
/**
|
||||
* Function handling "up" events. If the function returns `false` then the
|
||||
* current drag sequence is stopped.
|
||||
* @type {(function(ol.MapBrowserPointerEvent):boolean|undefined)}
|
||||
* @api
|
||||
*/
|
||||
olx.interaction.PointerOptions.prototype.handleUpEvent;
|
||||
|
||||
|
||||
/**
|
||||
* @typedef {{addCondition: (ol.events.ConditionType|undefined),
|
||||
* condition: (ol.events.ConditionType|undefined),
|
||||
@@ -2508,7 +2673,7 @@ olx.layer.BaseOptions.prototype.maxResolution;
|
||||
* hue: (number|undefined),
|
||||
* opacity: (number|undefined),
|
||||
* saturation: (number|undefined),
|
||||
* source: ol.source.Source,
|
||||
* source: (ol.source.Source|undefined),
|
||||
* visible: (boolean|undefined),
|
||||
* extent: (ol.Extent|undefined),
|
||||
* minResolution: (number|undefined),
|
||||
@@ -2559,8 +2724,10 @@ olx.layer.LayerOptions.prototype.saturation;
|
||||
|
||||
|
||||
/**
|
||||
* Source for this layer.
|
||||
* @type {ol.source.Source}
|
||||
* Source for this layer. If not provided to the constructor, the source can
|
||||
* be set by calling {@link ol.layer.Layer#setSource layer.setSource(source)}
|
||||
* after construction.
|
||||
* @type {ol.source.Source|undefined}
|
||||
* @api stable
|
||||
*/
|
||||
olx.layer.LayerOptions.prototype.source;
|
||||
@@ -2710,7 +2877,7 @@ olx.layer.GroupOptions.prototype.layers;
|
||||
* maxResolution: (number|undefined),
|
||||
* opacity: (number|undefined),
|
||||
* saturation: (number|undefined),
|
||||
* source: ol.source.Vector,
|
||||
* source: (ol.source.Vector|undefined),
|
||||
* visible: (boolean|undefined)}}
|
||||
* @api
|
||||
*/
|
||||
@@ -2847,7 +3014,7 @@ olx.layer.HeatmapOptions.prototype.visible;
|
||||
* hue: (number|undefined),
|
||||
* opacity: (number|undefined),
|
||||
* saturation: (number|undefined),
|
||||
* source: ol.source.Image,
|
||||
* source: (ol.source.Image|undefined),
|
||||
* visible: (boolean|undefined),
|
||||
* extent: (ol.Extent|undefined),
|
||||
* minResolution: (number|undefined),
|
||||
@@ -2945,7 +3112,7 @@ olx.layer.ImageOptions.prototype.maxResolution;
|
||||
* opacity: (number|undefined),
|
||||
* preload: (number|undefined),
|
||||
* saturation: (number|undefined),
|
||||
* source: ol.source.Tile,
|
||||
* source: (ol.source.Tile|undefined),
|
||||
* visible: (boolean|undefined),
|
||||
* extent: (ol.Extent|undefined),
|
||||
* minResolution: (number|undefined),
|
||||
@@ -3062,8 +3229,9 @@ olx.layer.TileOptions.prototype.useInterimTilesOnError;
|
||||
* minResolution: (number|undefined),
|
||||
* maxResolution: (number|undefined),
|
||||
* opacity: (number|undefined),
|
||||
* renderBuffer: (number|undefined),
|
||||
* saturation: (number|undefined),
|
||||
* source: ol.source.Vector,
|
||||
* source: (ol.source.Vector|undefined),
|
||||
* style: (ol.style.Style|Array.<ol.style.Style>|ol.style.StyleFunction|undefined),
|
||||
* visible: (boolean|undefined)}}
|
||||
* @api
|
||||
@@ -3138,6 +3306,16 @@ olx.layer.VectorOptions.prototype.maxResolution;
|
||||
olx.layer.VectorOptions.prototype.opacity;
|
||||
|
||||
|
||||
/**
|
||||
* The buffer around the viewport extent used by the renderer when getting
|
||||
* features from the vector source. Recommended value: the size of the
|
||||
* largest symbol or line width. Default is 100 pixels.
|
||||
* @type {number|undefined}
|
||||
* @api
|
||||
*/
|
||||
olx.layer.VectorOptions.prototype.renderBuffer;
|
||||
|
||||
|
||||
/**
|
||||
* Saturation.
|
||||
* @type {number|undefined}
|
||||
@@ -3531,6 +3709,34 @@ olx.source.GPXOptions.prototype.url;
|
||||
olx.source.GPXOptions.prototype.urls;
|
||||
|
||||
|
||||
/**
|
||||
* @typedef {{preemptive: (boolean|undefined),
|
||||
* url: string}}
|
||||
* @api
|
||||
*/
|
||||
olx.source.TileUTFGridOptions;
|
||||
|
||||
|
||||
/**
|
||||
* If `true` the TileUTFGrid source loads the tiles based on their "visibility".
|
||||
* This improves the speed of response, but increases traffic.
|
||||
* Note that if set to `false`, you need to pass `true` as `opt_request`
|
||||
* to the `forDataAtCoordinateAndResolution` method otherwise no data
|
||||
* will ever be loaded.
|
||||
* Default is `true`.
|
||||
* @type {boolean|undefined}
|
||||
* @api
|
||||
*/
|
||||
olx.source.TileUTFGridOptions.prototype.preemptive;
|
||||
|
||||
|
||||
/**
|
||||
* @type {string}
|
||||
* @api
|
||||
*/
|
||||
olx.source.TileUTFGridOptions.prototype.url;
|
||||
|
||||
|
||||
/**
|
||||
* @typedef {{attributions: (Array.<ol.Attribution>|undefined),
|
||||
* crossOrigin: (null|string|undefined),
|
||||
@@ -3559,7 +3765,11 @@ olx.source.TileImageOptions.prototype.attributions;
|
||||
|
||||
|
||||
/**
|
||||
* crossOrigin setting for image requests. Default is `null`.
|
||||
* The `crossOrigin` attribute for loaded images. Note that you must provide a
|
||||
* `crossOrigin` value if you are using the WebGL renderer or if you want to
|
||||
* access pixel data with the Canvas renderer. See
|
||||
* {@link https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image}
|
||||
* for more detail.
|
||||
* @type {null|string|undefined}
|
||||
* @api
|
||||
*/
|
||||
@@ -3599,7 +3809,7 @@ olx.source.TileImageOptions.prototype.state;
|
||||
|
||||
|
||||
/**
|
||||
* tile class
|
||||
* Class used to instantiate image tiles. Default is {@link ol.ImageTile}.
|
||||
* @type {function(new: ol.ImageTile, ol.TileCoord,
|
||||
* ol.TileState, string, ?string,
|
||||
* ol.TileLoadFunctionType)|undefined}
|
||||
@@ -3855,6 +4065,7 @@ olx.source.IGCOptions.prototype.urls;
|
||||
* projection: ol.proj.ProjectionLike,
|
||||
* ratio: (number|undefined),
|
||||
* resolutions: (Array.<number>|undefined),
|
||||
* imageLoadFunction: (ol.ImageLoadFunctionType|undefined),
|
||||
* params: (Object|undefined)}}
|
||||
* @api
|
||||
*/
|
||||
@@ -3927,6 +4138,15 @@ olx.source.ImageMapGuideOptions.prototype.ratio;
|
||||
olx.source.ImageMapGuideOptions.prototype.resolutions;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Optional function to load an image given a URL.
|
||||
* @type {ol.TileLoadFunctionType|undefined}
|
||||
* @api
|
||||
*/
|
||||
olx.source.ImageMapGuideOptions.prototype.imageLoadFunction;
|
||||
|
||||
|
||||
/**
|
||||
* Additional parameters.
|
||||
* @type {Object|undefined}
|
||||
@@ -4100,7 +4320,13 @@ olx.source.OSMOptions.prototype.attributions;
|
||||
|
||||
|
||||
/**
|
||||
* crossOrigin setting for image requests. Default is `anonymous`.
|
||||
* The `crossOrigin` attribute for loaded images. Note that you must provide a
|
||||
* `crossOrigin` value if you are using the WebGL renderer or if you want to
|
||||
* access pixel data with the Canvas renderer. See
|
||||
* {@link https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image}
|
||||
* for more detail.
|
||||
*
|
||||
* Default is `anonymous`.
|
||||
* @type {null|string|undefined}
|
||||
* @api stable
|
||||
*/
|
||||
@@ -4366,6 +4592,7 @@ olx.source.ImageVectorOptions.prototype.style;
|
||||
* hidpi: (boolean|undefined),
|
||||
* serverType: (ol.source.wms.ServerType|string|undefined),
|
||||
* logo: (string|olx.LogoOptions|undefined),
|
||||
* imageLoadFunction: (ol.ImageLoadFunctionType|undefined),
|
||||
* params: Object.<string,*>,
|
||||
* projection: ol.proj.ProjectionLike,
|
||||
* ratio: (number|undefined),
|
||||
@@ -4385,7 +4612,11 @@ olx.source.ImageWMSOptions.prototype.attributions;
|
||||
|
||||
|
||||
/**
|
||||
* crossOrigin setting for image requests.
|
||||
* The `crossOrigin` attribute for loaded images. Note that you must provide a
|
||||
* `crossOrigin` value if you are using the WebGL renderer or if you want to
|
||||
* access pixel data with the Canvas renderer. See
|
||||
* {@link https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image}
|
||||
* for more detail.
|
||||
* @type {null|string|undefined}
|
||||
* @api stable
|
||||
*/
|
||||
@@ -4410,6 +4641,14 @@ olx.source.ImageWMSOptions.prototype.hidpi;
|
||||
olx.source.ImageWMSOptions.prototype.serverType;
|
||||
|
||||
|
||||
/**
|
||||
* Optional function to load an image given a URL.
|
||||
* @type {ol.TileLoadFunctionType|undefined}
|
||||
* @api
|
||||
*/
|
||||
olx.source.ImageWMSOptions.prototype.imageLoadFunction;
|
||||
|
||||
|
||||
/**
|
||||
* Logo.
|
||||
* @type {string|olx.LogoOptions|undefined}
|
||||
@@ -4526,6 +4765,7 @@ olx.source.StamenOptions.prototype.url;
|
||||
* crossOrigin: (null|string|undefined),
|
||||
* imageExtent: (ol.Extent),
|
||||
* imageSize: (ol.Size|undefined),
|
||||
* imageLoadFunction: (ol.ImageLoadFunctionType|undefined),
|
||||
* logo: (string|olx.LogoOptions|undefined),
|
||||
* projection: ol.proj.ProjectionLike,
|
||||
* url: string}}
|
||||
@@ -4543,7 +4783,11 @@ olx.source.ImageStaticOptions.prototype.attributions;
|
||||
|
||||
|
||||
/**
|
||||
* crossOrigin setting for image requests.
|
||||
* The `crossOrigin` attribute for loaded images. Note that you must provide a
|
||||
* `crossOrigin` value if you are using the WebGL renderer or if you want to
|
||||
* access pixel data with the Canvas renderer. See
|
||||
* {@link https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image}
|
||||
* for more detail.
|
||||
* @type {null|string|undefined}
|
||||
* @api stable
|
||||
*/
|
||||
@@ -4551,7 +4795,8 @@ olx.source.ImageStaticOptions.prototype.crossOrigin;
|
||||
|
||||
|
||||
/**
|
||||
* Extent of the image.
|
||||
* Extent of the image in map coordinates. This is the [left, bottom, right,
|
||||
* top] map coordinates of your image.
|
||||
* @type {ol.Extent}
|
||||
* @api stable
|
||||
*/
|
||||
@@ -4559,7 +4804,7 @@ olx.source.ImageStaticOptions.prototype.imageExtent;
|
||||
|
||||
|
||||
/**
|
||||
* Size of the image.
|
||||
* Size of the image in pixels.
|
||||
* @type {ol.Size|undefined}
|
||||
* @api stable
|
||||
*/
|
||||
@@ -4567,7 +4812,15 @@ olx.source.ImageStaticOptions.prototype.imageSize;
|
||||
|
||||
|
||||
/**
|
||||
* Logo.
|
||||
* Optional function to load an image given a URL.
|
||||
* @type {ol.TileLoadFunctionType|undefined}
|
||||
* @api
|
||||
*/
|
||||
olx.source.ImageStaticOptions.prototype.imageLoadFunction;
|
||||
|
||||
|
||||
/**
|
||||
* Optional logo.
|
||||
* @type {string|olx.LogoOptions|undefined}
|
||||
* @api stable
|
||||
*/
|
||||
@@ -4583,7 +4836,7 @@ olx.source.ImageStaticOptions.prototype.projection;
|
||||
|
||||
|
||||
/**
|
||||
* Url.
|
||||
* Image URL.
|
||||
* @type {string}
|
||||
* @api stable
|
||||
*/
|
||||
@@ -4654,14 +4907,19 @@ olx.source.ServerVectorOptions.prototype.projection;
|
||||
/**
|
||||
* @typedef {{crossOrigin: (null|string|undefined),
|
||||
* tileLoadFunction: (ol.TileLoadFunctionType|undefined),
|
||||
* url: string}}
|
||||
* url: string,
|
||||
* wrapX: (boolean|undefined)}}
|
||||
* @api
|
||||
*/
|
||||
olx.source.TileJSONOptions;
|
||||
|
||||
|
||||
/**
|
||||
* crossOrigin setting for image requests.
|
||||
* The `crossOrigin` attribute for loaded images. Note that you must provide a
|
||||
* `crossOrigin` value if you are using the WebGL renderer or if you want to
|
||||
* access pixel data with the Canvas renderer. See
|
||||
* {@link https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image}
|
||||
* for more detail.
|
||||
* @type {null|string|undefined}
|
||||
* @api stable
|
||||
*/
|
||||
@@ -4684,6 +4942,14 @@ olx.source.TileJSONOptions.prototype.tileLoadFunction;
|
||||
olx.source.TileJSONOptions.prototype.url;
|
||||
|
||||
|
||||
/**
|
||||
* Whether to wrap the world horizontally. Default is `true`.
|
||||
* @type {boolean|undefined}
|
||||
* @api
|
||||
*/
|
||||
olx.source.TileJSONOptions.prototype.wrapX;
|
||||
|
||||
|
||||
/**
|
||||
* @typedef {{attributions: (Array.<ol.Attribution>|undefined),
|
||||
* params: Object.<string,*>,
|
||||
@@ -4722,7 +4988,11 @@ olx.source.TileWMSOptions.prototype.params;
|
||||
|
||||
|
||||
/**
|
||||
* crossOrigin setting for image requests.
|
||||
* The `crossOrigin` attribute for loaded images. Note that you must provide a
|
||||
* `crossOrigin` value if you are using the WebGL renderer or if you want to
|
||||
* access pixel data with the Canvas renderer. See
|
||||
* {@link https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image}
|
||||
* for more detail.
|
||||
* @type {null|string|undefined}
|
||||
* @api stable
|
||||
*/
|
||||
@@ -4985,7 +5255,7 @@ olx.source.StaticVectorOptions.prototype.urls;
|
||||
* logo: (string|olx.LogoOptions|undefined),
|
||||
* tileGrid: ol.tilegrid.WMTS,
|
||||
* projection: ol.proj.ProjectionLike,
|
||||
* requestEncoding: (ol.source.WMTSRequestEncoding|undefined),
|
||||
* requestEncoding: (ol.source.WMTSRequestEncoding|string|undefined),
|
||||
* layer: string,
|
||||
* style: string,
|
||||
* tilePixelRatio: (number|undefined),
|
||||
@@ -4996,7 +5266,10 @@ olx.source.StaticVectorOptions.prototype.urls;
|
||||
* url: (string|undefined),
|
||||
* maxZoom: (number|undefined),
|
||||
* tileLoadFunction: (ol.TileLoadFunctionType|undefined),
|
||||
* urls: (Array.<string>|undefined)}}
|
||||
* urls: (Array.<string>|undefined),
|
||||
* tileClass: (function(new: ol.ImageTile, ol.TileCoord,
|
||||
* ol.TileState, string, ?string,
|
||||
* ol.TileLoadFunctionType)|undefined)}}
|
||||
* @api
|
||||
*/
|
||||
olx.source.WMTSOptions;
|
||||
@@ -5011,7 +5284,11 @@ olx.source.WMTSOptions.prototype.attributions;
|
||||
|
||||
|
||||
/**
|
||||
* crossOrigin setting for image requests.
|
||||
* The `crossOrigin` attribute for loaded images. Note that you must provide a
|
||||
* `crossOrigin` value if you are using the WebGL renderer or if you want to
|
||||
* access pixel data with the Canvas renderer. See
|
||||
* {@link https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image}
|
||||
* for more detail.
|
||||
* @type {string|null|undefined}
|
||||
* @api
|
||||
*/
|
||||
@@ -5043,8 +5320,8 @@ olx.source.WMTSOptions.prototype.projection;
|
||||
|
||||
|
||||
/**
|
||||
* Request encoding.
|
||||
* @type {ol.source.WMTSRequestEncoding|undefined}
|
||||
* Request encoding. Default is `KVP`.
|
||||
* @type {ol.source.WMTSRequestEncoding|string|undefined}
|
||||
* @api
|
||||
*/
|
||||
olx.source.WMTSOptions.prototype.requestEncoding;
|
||||
@@ -5066,6 +5343,16 @@ olx.source.WMTSOptions.prototype.layer;
|
||||
olx.source.WMTSOptions.prototype.style;
|
||||
|
||||
|
||||
/**
|
||||
* Class used to instantiate image tiles. Default is {@link ol.ImageTile}.
|
||||
* @type {function(new: ol.ImageTile, ol.TileCoord,
|
||||
* ol.TileState, string, ?string,
|
||||
* ol.TileLoadFunctionType)|undefined}
|
||||
* @api
|
||||
*/
|
||||
olx.source.WMTSOptions.prototype.tileClass;
|
||||
|
||||
|
||||
/**
|
||||
* The pixel ratio used by the tile service. For example, if the tile
|
||||
* service advertizes 256px by 256px tiles but actually sends 512px
|
||||
@@ -5169,7 +5456,11 @@ olx.source.XYZOptions.prototype.attributions;
|
||||
|
||||
|
||||
/**
|
||||
* Cross origin setting for image requests.
|
||||
* The `crossOrigin` attribute for loaded images. Note that you must provide a
|
||||
* `crossOrigin` value if you are using the WebGL renderer or if you want to
|
||||
* access pixel data with the Canvas renderer. See
|
||||
* {@link https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image}
|
||||
* for more detail.
|
||||
* @type {null|string|undefined}
|
||||
* @api stable
|
||||
*/
|
||||
@@ -5289,7 +5580,11 @@ olx.source.ZoomifyOptions.prototype.attributions;
|
||||
|
||||
|
||||
/**
|
||||
* Cross origin setting for image requests.
|
||||
* The `crossOrigin` attribute for loaded images. Note that you must provide a
|
||||
* `crossOrigin` value if you are using the WebGL renderer or if you want to
|
||||
* access pixel data with the Canvas renderer. See
|
||||
* {@link https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image}
|
||||
* for more detail.
|
||||
* @type {null|string|undefined}
|
||||
* @api stable
|
||||
*/
|
||||
@@ -5339,7 +5634,8 @@ olx.style;
|
||||
* @typedef {{fill: (ol.style.Fill|undefined),
|
||||
* radius: number,
|
||||
* snapToPixel: (boolean|undefined),
|
||||
* stroke: (ol.style.Stroke|undefined)}}
|
||||
* stroke: (ol.style.Stroke|undefined),
|
||||
* atlasManager: (ol.style.AtlasManager|undefined)}}
|
||||
* @api
|
||||
*/
|
||||
olx.style.CircleOptions;
|
||||
@@ -5383,6 +5679,16 @@ olx.style.CircleOptions.prototype.snapToPixel;
|
||||
olx.style.CircleOptions.prototype.stroke;
|
||||
|
||||
|
||||
/**
|
||||
* The atlas manager to use for this circle. When using WebGL it is
|
||||
* recommended to use an atlas manager to avoid texture switching.
|
||||
* If an atlas manager is given, the circle is added to an atlas.
|
||||
* By default no atlas manager is used.
|
||||
* @type {ol.style.AtlasManager|undefined}
|
||||
*/
|
||||
olx.style.CircleOptions.prototype.atlasManager;
|
||||
|
||||
|
||||
/**
|
||||
* @typedef {{color: (ol.Color|string|undefined)}}
|
||||
* @api
|
||||
@@ -5457,7 +5763,11 @@ olx.style.IconOptions.prototype.anchorYUnits;
|
||||
|
||||
|
||||
/**
|
||||
* crossOrigin setting for image.
|
||||
* The `crossOrigin` attribute for loaded images. Note that you must provide a
|
||||
* `crossOrigin` value if you are using the WebGL renderer or if you want to
|
||||
* access pixel data with the Canvas renderer. See
|
||||
* {@link https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image}
|
||||
* for more detail.
|
||||
* @type {null|string|undefined}
|
||||
* @api
|
||||
*/
|
||||
@@ -5466,7 +5776,8 @@ olx.style.IconOptions.prototype.crossOrigin;
|
||||
|
||||
/**
|
||||
* Image object for the icon. If the `src` option is not provided then the
|
||||
* provided image must already be loaded.
|
||||
* provided image must already be loaded. And in that case, it is required
|
||||
* to provide the size of the image, with the `size` option.
|
||||
* @type {Image|undefined}
|
||||
* @api
|
||||
*/
|
||||
@@ -5531,7 +5842,9 @@ olx.style.IconOptions.prototype.rotation;
|
||||
|
||||
|
||||
/**
|
||||
* Icon size in pixel.
|
||||
* Icon size in pixel. Can be used together with `offset` to define the
|
||||
* sub-rectangle to use from the origin (sprite) icon image. Also, setting
|
||||
* the `size` is required if `img` is set and `src` is not.
|
||||
* @type {ol.Size|undefined}
|
||||
* @api
|
||||
*/
|
||||
@@ -5546,6 +5859,114 @@ olx.style.IconOptions.prototype.size;
|
||||
olx.style.IconOptions.prototype.src;
|
||||
|
||||
|
||||
/**
|
||||
* Specify radius for regular polygons, or radius1 and radius2 for stars.
|
||||
* @typedef {{fill: (ol.style.Fill|undefined),
|
||||
* points: number,
|
||||
* radius: (number|undefined),
|
||||
* radius1: (number|undefined),
|
||||
* radius2: (number|undefined),
|
||||
* angle: (number|undefined),
|
||||
* snapToPixel: (boolean|undefined),
|
||||
* stroke: (ol.style.Stroke|undefined),
|
||||
* rotation: (number|undefined),
|
||||
* atlasManager: (ol.style.AtlasManager|undefined)}}
|
||||
* @api
|
||||
*/
|
||||
olx.style.RegularShapeOptions;
|
||||
|
||||
|
||||
/**
|
||||
* Fill style.
|
||||
* @type {ol.style.Fill|undefined}
|
||||
* @api
|
||||
*/
|
||||
olx.style.RegularShapeOptions.prototype.fill;
|
||||
|
||||
|
||||
/**
|
||||
* Number of points for stars and regular polygons. In case of a polygon, the
|
||||
* number of points is the number of sides.
|
||||
* @type {number}
|
||||
* @api
|
||||
*/
|
||||
olx.style.RegularShapeOptions.prototype.points;
|
||||
|
||||
|
||||
/**
|
||||
* Radius of a regular polygon.
|
||||
* @type {number|undefined}
|
||||
* @api
|
||||
*/
|
||||
olx.style.RegularShapeOptions.prototype.radius;
|
||||
|
||||
|
||||
/**
|
||||
* Inner radius of a star.
|
||||
* @type {number|undefined}
|
||||
* @api
|
||||
*/
|
||||
olx.style.RegularShapeOptions.prototype.radius1;
|
||||
|
||||
|
||||
/**
|
||||
* Outer radius of a star.
|
||||
* @type {number|undefined}
|
||||
* @api
|
||||
*/
|
||||
olx.style.RegularShapeOptions.prototype.radius2;
|
||||
|
||||
|
||||
/**
|
||||
* Shape's angle in radians. A value of 0 will have one of the shape's point
|
||||
* facing up.
|
||||
* Default value is 0.
|
||||
* @type {number|undefined}
|
||||
* @api
|
||||
*/
|
||||
olx.style.RegularShapeOptions.prototype.angle;
|
||||
|
||||
|
||||
/**
|
||||
* If `true` integral numbers of pixels are used as the X and Y pixel
|
||||
* coordinate when drawing the shape in the output canvas. If `false`
|
||||
* fractional numbers may be used. Using `true` allows for "sharp"
|
||||
* rendering (no blur), while using `false` allows for "accurate"
|
||||
* rendering. Note that accuracy is important if the shape's
|
||||
* position is animated. Without it, the shape may jitter noticeably.
|
||||
* Default value is `true`.
|
||||
* @type {boolean|undefined}
|
||||
* @api
|
||||
*/
|
||||
olx.style.RegularShapeOptions.prototype.snapToPixel;
|
||||
|
||||
|
||||
/**
|
||||
* Stroke style.
|
||||
* @type {ol.style.Stroke|undefined}
|
||||
* @api
|
||||
*/
|
||||
olx.style.RegularShapeOptions.prototype.stroke;
|
||||
|
||||
|
||||
/**
|
||||
* Rotation in radians (positive rotation clockwise). Default is `0`.
|
||||
* @type {number|undefined}
|
||||
* @api
|
||||
*/
|
||||
olx.style.RegularShapeOptions.prototype.rotation;
|
||||
|
||||
|
||||
/**
|
||||
* The atlas manager to use for this symbol. When using WebGL it is
|
||||
* recommended to use an atlas manager to avoid texture switching.
|
||||
* If an atlas manager is given, the symbol is added to an atlas.
|
||||
* By default no atlas manager is used.
|
||||
* @type {ol.style.AtlasManager|undefined}
|
||||
*/
|
||||
olx.style.RegularShapeOptions.prototype.atlasManager;
|
||||
|
||||
|
||||
/**
|
||||
* @typedef {{color: (ol.Color|string|undefined),
|
||||
* lineCap: (string|undefined),
|
||||
@@ -5706,7 +6127,8 @@ olx.style.TextOptions.prototype.stroke;
|
||||
|
||||
|
||||
/**
|
||||
* @typedef {{fill: (ol.style.Fill|undefined),
|
||||
* @typedef {{geometry: (undefined|string|ol.geom.Geometry|ol.style.GeometryFunction),
|
||||
* fill: (ol.style.Fill|undefined),
|
||||
* image: (ol.style.Image|undefined),
|
||||
* stroke: (ol.style.Stroke|undefined),
|
||||
* text: (ol.style.Text|undefined),
|
||||
@@ -5716,6 +6138,15 @@ olx.style.TextOptions.prototype.stroke;
|
||||
olx.style.StyleOptions;
|
||||
|
||||
|
||||
/**
|
||||
* Feature property or geometry or function returning a geometry to render for
|
||||
* this style.
|
||||
* @type {undefined|string|ol.geom.Geometry|ol.style.GeometryFunction}
|
||||
* @api
|
||||
*/
|
||||
olx.style.StyleOptions.prototype.geometry;
|
||||
|
||||
|
||||
/**
|
||||
* Fill style.
|
||||
* @type {ol.style.Fill|undefined}
|
||||
@@ -5935,7 +6366,6 @@ olx.tilegrid.XYZOptions.prototype.tileSize;
|
||||
/**
|
||||
* @typedef {{resolutions: !Array.<number>}}
|
||||
* @api
|
||||
* @api
|
||||
*/
|
||||
olx.tilegrid.ZoomifyOptions;
|
||||
|
||||
@@ -5959,6 +6389,7 @@ olx.view;
|
||||
* @typedef {{padding: !Array.<number>,
|
||||
* constrainResolution: (boolean|undefined),
|
||||
* nearest: (boolean|undefined),
|
||||
* maxZoom: (number|undefined),
|
||||
* minResolution: (number|undefined)}}
|
||||
* @api
|
||||
*/
|
||||
@@ -6086,3 +6517,41 @@ olx.ViewState.prototype.resolution;
|
||||
* @api
|
||||
*/
|
||||
olx.ViewState.prototype.rotation;
|
||||
|
||||
|
||||
/**
|
||||
* @typedef {{initialSize: (number|undefined),
|
||||
* maxSize: (number|undefined),
|
||||
* space: (number|undefined)}}
|
||||
* @api
|
||||
*/
|
||||
olx.style.AtlasManagerOptions;
|
||||
|
||||
|
||||
/**
|
||||
* The size in pixels of the first atlas image. If no value is given the
|
||||
* `ol.INITIAL_ATLAS_SIZE` compile-time constant will be used.
|
||||
* @type {number|undefined}
|
||||
* @api
|
||||
*/
|
||||
olx.style.AtlasManagerOptions.prototype.initialSize;
|
||||
|
||||
|
||||
/**
|
||||
* The maximum size in pixels of atlas images. If no value is given then
|
||||
* the `ol.MAX_ATLAS_SIZE` compile-time constant will be used. And if
|
||||
* `ol.MAX_ATLAS_SIZE` is set to `-1` (the default) then
|
||||
* `ol.WEBGL_MAX_TEXTURE_SIZE` will used if WebGL is supported. Otherwise
|
||||
* 2048 is used.
|
||||
* @type {number|undefined}
|
||||
* @api
|
||||
*/
|
||||
olx.style.AtlasManagerOptions.prototype.maxSize;
|
||||
|
||||
|
||||
/**
|
||||
* The space in pixels between images (default: 1).
|
||||
* @type {number|undefined}
|
||||
* @api
|
||||
*/
|
||||
olx.style.AtlasManagerOptions.prototype.space;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/**
|
||||
* @externs
|
||||
* @see https://github.com/mapbox/tilejson-spec
|
||||
* @see https://github.com/mapbox/utfgrid-spec
|
||||
*/
|
||||
|
||||
|
||||
@@ -93,3 +94,28 @@ TileJSON.prototype.bounds;
|
||||
* @type {!Array.<number>|undefined}
|
||||
*/
|
||||
TileJSON.prototype.center;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
*/
|
||||
var UTFGridJSON = function() {};
|
||||
|
||||
|
||||
/**
|
||||
* @type {!Array.<string>}
|
||||
*/
|
||||
UTFGridJSON.prototype.grid;
|
||||
|
||||
|
||||
/**
|
||||
* @type {!Array.<string>}
|
||||
*/
|
||||
UTFGridJSON.prototype.keys;
|
||||
|
||||
|
||||
/**
|
||||
* @type {!Object.<string, Object>|undefined}
|
||||
*/
|
||||
UTFGridJSON.prototype.data;
|
||||
|
||||
13
package.json
13
package.json
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "openlayers",
|
||||
"version": "3.1.0-pre.2",
|
||||
"version": "3.1.0",
|
||||
"description": "Build tools and sources for developing OpenLayers based mapping applications",
|
||||
"keywords": [
|
||||
"map",
|
||||
@@ -9,11 +9,12 @@
|
||||
],
|
||||
"homepage": "http://openlayers.org/",
|
||||
"scripts": {
|
||||
"install": "node tasks/parse-examples.js",
|
||||
"install": "node tasks/install.js",
|
||||
"postinstall": "closure-util update",
|
||||
"start": "node tasks/serve.js",
|
||||
"test": "node tasks/test.js"
|
||||
},
|
||||
"main": "dist/ol.js",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/openlayers/ol3.git"
|
||||
@@ -24,12 +25,13 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"async": "0.9.0",
|
||||
"closure-util": "1.1.0",
|
||||
"closure-util": "1.2.0",
|
||||
"fs-extra": "0.12.0",
|
||||
"graceful-fs": "3.0.2",
|
||||
"htmlparser2": "3.7.3",
|
||||
"jsdoc": "3.3.0-alpha9",
|
||||
"nomnom": "1.8.0",
|
||||
"rbush": "1.3.4",
|
||||
"temp": "0.8.1",
|
||||
"walk": "2.3.4"
|
||||
},
|
||||
@@ -43,5 +45,8 @@
|
||||
"phantomjs": "1.9.10",
|
||||
"proj4": "2.3.3",
|
||||
"sinon": "1.10.3"
|
||||
}
|
||||
},
|
||||
"ext": [
|
||||
"rbush"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -11,6 +11,10 @@ body {
|
||||
.ol-attribution {
|
||||
max-width: calc(100% - 3em);
|
||||
}
|
||||
.ol-control button, .ol-attribution, .ol-scale-line-inner {
|
||||
font-family: 'Lucida Grande',Verdana,Geneva,Lucida,Arial,Helvetica,sans-serif;
|
||||
}
|
||||
|
||||
#tags {
|
||||
display: none;
|
||||
}
|
||||
|
||||
@@ -37,25 +37,6 @@ ol.array.binaryFindNearest = function(arr, target) {
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Safe version of goog.array.extend that does not risk to overflow the stack
|
||||
* even if `array2` contains a large number of elements.
|
||||
*
|
||||
* @param {Array.<T>} array1 Array 1.
|
||||
* @param {Array.<T>} array2 Array 2.
|
||||
* @template T
|
||||
*/
|
||||
ol.array.safeExtend = function(array1, array2) {
|
||||
// goog.array.extend uses Array.prototype.push.apply, which can overflow the
|
||||
// stack if array2 contains too many elements. Repeatedly calling push
|
||||
// performs as well on modern browsers.
|
||||
var i, ii;
|
||||
for (i = 0, ii = array2.length; i < ii; ++i) {
|
||||
array1.push(array2[i]);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {Array.<number>} arr Array.
|
||||
* @param {number} target Target.
|
||||
|
||||
@@ -16,7 +16,7 @@ goog.require('ol.TileRange');
|
||||
* html: 'All maps © ' +
|
||||
* '<a href="http://www.opencyclemap.org/">OpenCycleMap</a>'
|
||||
* }),
|
||||
* ol.source.OSM.DATA_ATTRIBUTION
|
||||
* ol.source.OSM.ATTRIBUTION
|
||||
* ],
|
||||
* ..
|
||||
*
|
||||
|
||||
@@ -94,6 +94,8 @@ ol.color.blend = function(dst, src, opt_color) {
|
||||
|
||||
|
||||
/**
|
||||
* Return the color as an array. This function maintains a cache of calculated
|
||||
* arrays which means the result should not be modified.
|
||||
* @param {ol.Color|string} color Color.
|
||||
* @return {ol.Color} Color.
|
||||
* @api
|
||||
@@ -109,6 +111,7 @@ ol.color.asArray = function(color) {
|
||||
|
||||
|
||||
/**
|
||||
* Return the color as an rgba string.
|
||||
* @param {ol.Color|string} color Color.
|
||||
* @return {string} Rgba string.
|
||||
* @api
|
||||
@@ -137,12 +140,11 @@ ol.color.equals = function(color1, color2) {
|
||||
|
||||
/**
|
||||
* @param {string} s String.
|
||||
* @param {ol.Color=} opt_color Color.
|
||||
* @return {ol.Color} Color.
|
||||
*/
|
||||
ol.color.fromString = (
|
||||
/**
|
||||
* @return {function(string, ol.Color=): ol.Color}
|
||||
* @return {function(string): ol.Color}
|
||||
*/
|
||||
function() {
|
||||
|
||||
@@ -169,10 +171,9 @@ ol.color.fromString = (
|
||||
return (
|
||||
/**
|
||||
* @param {string} s String.
|
||||
* @param {ol.Color=} opt_color Color.
|
||||
* @return {ol.Color} Color.
|
||||
*/
|
||||
function(s, opt_color) {
|
||||
function(s) {
|
||||
var color;
|
||||
if (cache.hasOwnProperty(s)) {
|
||||
color = cache[s];
|
||||
@@ -191,7 +192,7 @@ ol.color.fromString = (
|
||||
cache[s] = color;
|
||||
++cacheSize;
|
||||
}
|
||||
return ol.color.returnOrUpdate(color, opt_color);
|
||||
return color;
|
||||
});
|
||||
|
||||
})();
|
||||
@@ -275,24 +276,6 @@ ol.color.normalize = function(color, opt_color) {
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.Color} color Color.
|
||||
* @param {ol.Color=} opt_color Color.
|
||||
* @return {ol.Color} Color.
|
||||
*/
|
||||
ol.color.returnOrUpdate = function(color, opt_color) {
|
||||
if (goog.isDef(opt_color)) {
|
||||
opt_color[0] = color[0];
|
||||
opt_color[1] = color[1];
|
||||
opt_color[2] = color[2];
|
||||
opt_color[3] = color[3];
|
||||
return opt_color;
|
||||
} else {
|
||||
return color;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.Color} color Color.
|
||||
* @return {string} String.
|
||||
|
||||
@@ -12,7 +12,6 @@ goog.require('goog.style');
|
||||
goog.require('ol.Attribution');
|
||||
goog.require('ol.control.Control');
|
||||
goog.require('ol.css');
|
||||
goog.require('ol.pointer.PointerEventHandler');
|
||||
|
||||
|
||||
|
||||
@@ -69,9 +68,6 @@ ol.control.Attribution = function(opt_options) {
|
||||
|
||||
var tipLabel = goog.isDef(options.tipLabel) ?
|
||||
options.tipLabel : 'Attributions';
|
||||
var tip = goog.dom.createDom(goog.dom.TagName.SPAN, {
|
||||
'role' : 'tooltip'
|
||||
}, tipLabel);
|
||||
|
||||
/**
|
||||
* @private
|
||||
@@ -96,15 +92,10 @@ ol.control.Attribution = function(opt_options) {
|
||||
*/
|
||||
this.labelSpan_ = label;
|
||||
var button = goog.dom.createDom(goog.dom.TagName.BUTTON, {
|
||||
'class': 'ol-has-tooltip',
|
||||
'type': 'button'
|
||||
'type': 'button',
|
||||
'title': tipLabel
|
||||
}, this.labelSpan_);
|
||||
goog.dom.appendChild(button, tip);
|
||||
|
||||
var buttonHandler = new ol.pointer.PointerEventHandler(button);
|
||||
this.registerDisposable(buttonHandler);
|
||||
goog.events.listen(buttonHandler, ol.pointer.EventType.POINTERUP,
|
||||
this.handlePointerUp_, false, this);
|
||||
goog.events.listen(button, goog.events.EventType.CLICK,
|
||||
this.handleClick_, false, this);
|
||||
|
||||
@@ -115,15 +106,19 @@ ol.control.Attribution = function(opt_options) {
|
||||
this.blur();
|
||||
}, false);
|
||||
|
||||
var element = goog.dom.createDom(goog.dom.TagName.DIV, {
|
||||
'class': className + ' ' + ol.css.CLASS_UNSELECTABLE + ' ' +
|
||||
ol.css.CLASS_CONTROL +
|
||||
(this.collapsed_ && this.collapsible_ ? ' ol-collapsed' : '') +
|
||||
(this.collapsible_ ? '' : ' ol-uncollapsible')
|
||||
}, this.ulElement_, button);
|
||||
var cssClasses = className + ' ' + ol.css.CLASS_UNSELECTABLE + ' ' +
|
||||
ol.css.CLASS_CONTROL +
|
||||
(this.collapsed_ && this.collapsible_ ? ' ol-collapsed' : '') +
|
||||
(this.collapsible_ ? '' : ' ol-uncollapsible');
|
||||
var element = goog.dom.createDom(goog.dom.TagName.DIV,
|
||||
cssClasses, this.ulElement_, button);
|
||||
|
||||
var render = goog.isDef(options.render) ?
|
||||
options.render : ol.control.Attribution.render;
|
||||
|
||||
goog.base(this, {
|
||||
element: element,
|
||||
render: render,
|
||||
target: options.target
|
||||
});
|
||||
|
||||
@@ -169,6 +164,9 @@ ol.control.Attribution.prototype.getSourceAttributions = function(frameState) {
|
||||
var hiddenAttributions = {};
|
||||
for (i = 0, ii = layerStatesArray.length; i < ii; i++) {
|
||||
source = layerStatesArray[i].layer.getSource();
|
||||
if (goog.isNull(source)) {
|
||||
continue;
|
||||
}
|
||||
sourceKey = goog.getUid(source).toString();
|
||||
sourceAttributions = source.getAttributions();
|
||||
if (goog.isNull(sourceAttributions)) {
|
||||
@@ -198,9 +196,11 @@ ol.control.Attribution.prototype.getSourceAttributions = function(frameState) {
|
||||
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
* @param {ol.MapEvent} mapEvent Map event.
|
||||
* @this {ol.control.Attribution}
|
||||
* @api
|
||||
*/
|
||||
ol.control.Attribution.prototype.handleMapPostrender = function(mapEvent) {
|
||||
ol.control.Attribution.render = function(mapEvent) {
|
||||
this.updateElement_(mapEvent.frameState);
|
||||
};
|
||||
|
||||
@@ -331,19 +331,7 @@ ol.control.Attribution.prototype.insertLogos_ = function(frameState) {
|
||||
* @private
|
||||
*/
|
||||
ol.control.Attribution.prototype.handleClick_ = function(event) {
|
||||
if (event.screenX !== 0 && event.screenY !== 0) {
|
||||
return;
|
||||
}
|
||||
this.handleToggle_();
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.pointer.PointerEvent} pointerEvent The event to handle
|
||||
* @private
|
||||
*/
|
||||
ol.control.Attribution.prototype.handlePointerUp_ = function(pointerEvent) {
|
||||
pointerEvent.browserEvent.preventDefault();
|
||||
event.preventDefault();
|
||||
this.handleToggle_();
|
||||
};
|
||||
|
||||
|
||||
@@ -66,6 +66,11 @@ ol.control.Control = function(options) {
|
||||
*/
|
||||
this.listenerKeys = [];
|
||||
|
||||
/**
|
||||
* @type {function(ol.MapEvent)}
|
||||
*/
|
||||
this.render = goog.isDef(options.render) ? options.render : goog.nullFunction;
|
||||
|
||||
};
|
||||
goog.inherits(ol.control.Control, ol.Object);
|
||||
|
||||
@@ -89,15 +94,6 @@ ol.control.Control.prototype.getMap = function() {
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Function called on each map render. Executes in a requestAnimationFrame
|
||||
* callback. Can be implemented in sub-classes to re-render the control's
|
||||
* UI.
|
||||
* @param {ol.MapEvent} mapEvent Map event.
|
||||
*/
|
||||
ol.control.Control.prototype.handleMapPostrender = goog.nullFunction;
|
||||
|
||||
|
||||
/**
|
||||
* 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
|
||||
@@ -118,9 +114,9 @@ ol.control.Control.prototype.setMap = function(map) {
|
||||
var target = !goog.isNull(this.target_) ?
|
||||
this.target_ : map.getOverlayContainerStopEvent();
|
||||
goog.dom.appendChild(target, this.element);
|
||||
if (this.handleMapPostrender !== goog.nullFunction) {
|
||||
if (this.render !== goog.nullFunction) {
|
||||
this.listenerKeys.push(goog.events.listen(map,
|
||||
ol.MapEventType.POSTRENDER, this.handleMapPostrender, false, this));
|
||||
ol.MapEventType.POSTRENDER, this.render, false, this));
|
||||
}
|
||||
map.render();
|
||||
}
|
||||
|
||||
@@ -10,7 +10,6 @@ goog.require('goog.events');
|
||||
goog.require('goog.events.EventType');
|
||||
goog.require('ol.control.Control');
|
||||
goog.require('ol.css');
|
||||
goog.require('ol.pointer.PointerEventHandler');
|
||||
|
||||
|
||||
|
||||
@@ -40,20 +39,12 @@ ol.control.FullScreen = function(opt_options) {
|
||||
|
||||
var tipLabel = goog.isDef(options.tipLabel) ?
|
||||
options.tipLabel : 'Toggle full-screen';
|
||||
var tip = goog.dom.createDom(goog.dom.TagName.SPAN, {
|
||||
'role' : 'tooltip'
|
||||
}, tipLabel);
|
||||
|
||||
var button = goog.dom.createDom(goog.dom.TagName.BUTTON, {
|
||||
'class': this.cssClassName_ + '-' + goog.dom.fullscreen.isFullScreen() +
|
||||
' ol-has-tooltip',
|
||||
'type': 'button'
|
||||
'class': this.cssClassName_ + '-' + goog.dom.fullscreen.isFullScreen(),
|
||||
'type': 'button',
|
||||
'title': tipLabel
|
||||
});
|
||||
goog.dom.appendChild(button, tip);
|
||||
var buttonHandler = new ol.pointer.PointerEventHandler(button);
|
||||
this.registerDisposable(buttonHandler);
|
||||
goog.events.listen(buttonHandler,
|
||||
ol.pointer.EventType.POINTERUP, this.handlePointerUp_, false, this);
|
||||
|
||||
goog.events.listen(button, goog.events.EventType.CLICK,
|
||||
this.handleClick_, false, this);
|
||||
|
||||
@@ -69,7 +60,7 @@ ol.control.FullScreen = function(opt_options) {
|
||||
this.handleFullScreenChange_, false, this);
|
||||
|
||||
var cssClasses = this.cssClassName_ + ' ' + ol.css.CLASS_UNSELECTABLE +
|
||||
' ' + ol.css.CLASS_CONTROL +
|
||||
' ' + ol.css.CLASS_CONTROL + ' ' +
|
||||
(!goog.dom.fullscreen.isSupported() ? ol.css.CLASS_UNSUPPORTED : '');
|
||||
var element = goog.dom.createDom(goog.dom.TagName.DIV, cssClasses, button);
|
||||
|
||||
@@ -93,19 +84,7 @@ goog.inherits(ol.control.FullScreen, ol.control.Control);
|
||||
* @private
|
||||
*/
|
||||
ol.control.FullScreen.prototype.handleClick_ = function(event) {
|
||||
if (event.screenX !== 0 && event.screenY !== 0) {
|
||||
return;
|
||||
}
|
||||
this.handleFullScreen_();
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.pointer.PointerEvent} pointerEvent The event to handle
|
||||
* @private
|
||||
*/
|
||||
ol.control.FullScreen.prototype.handlePointerUp_ = function(pointerEvent) {
|
||||
pointerEvent.browserEvent.preventDefault();
|
||||
event.preventDefault();
|
||||
this.handleFullScreen_();
|
||||
};
|
||||
|
||||
|
||||
@@ -6,7 +6,6 @@ goog.require('goog.dom');
|
||||
goog.require('goog.dom.TagName');
|
||||
goog.require('goog.events');
|
||||
goog.require('goog.events.EventType');
|
||||
goog.require('goog.style');
|
||||
goog.require('ol.CoordinateFormatType');
|
||||
goog.require('ol.Object');
|
||||
goog.require('ol.Pixel');
|
||||
@@ -46,12 +45,14 @@ ol.control.MousePosition = function(opt_options) {
|
||||
var className = goog.isDef(options.className) ?
|
||||
options.className : 'ol-mouse-position';
|
||||
|
||||
var element = goog.dom.createDom(goog.dom.TagName.DIV, {
|
||||
'class': className
|
||||
});
|
||||
var element = goog.dom.createDom(goog.dom.TagName.DIV, className);
|
||||
|
||||
var render = goog.isDef(options.render) ?
|
||||
options.render : ol.control.MousePosition.render;
|
||||
|
||||
goog.base(this, {
|
||||
element: element,
|
||||
render: render,
|
||||
target: options.target
|
||||
});
|
||||
|
||||
@@ -102,9 +103,11 @@ goog.inherits(ol.control.MousePosition, ol.control.Control);
|
||||
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
* @param {ol.MapEvent} mapEvent Map event.
|
||||
* @this {ol.control.MousePosition}
|
||||
* @api
|
||||
*/
|
||||
ol.control.MousePosition.prototype.handleMapPostrender = function(mapEvent) {
|
||||
ol.control.MousePosition.render = function(mapEvent) {
|
||||
var frameState = mapEvent.frameState;
|
||||
if (goog.isNull(frameState)) {
|
||||
this.mapProjection_ = null;
|
||||
@@ -164,9 +167,7 @@ goog.exportProperty(
|
||||
*/
|
||||
ol.control.MousePosition.prototype.handleMouseMove = function(browserEvent) {
|
||||
var map = this.getMap();
|
||||
var eventPosition = goog.style.getRelativePosition(
|
||||
browserEvent, map.getViewport());
|
||||
this.lastMouseMovePixel_ = [eventPosition.x, eventPosition.y];
|
||||
this.lastMouseMovePixel_ = map.getEventPixel(browserEvent.getBrowserEvent());
|
||||
this.updateHTML_(this.lastMouseMovePixel_);
|
||||
};
|
||||
|
||||
|
||||
@@ -19,7 +19,6 @@ goog.require('ol.control.Control');
|
||||
goog.require('ol.coordinate');
|
||||
goog.require('ol.css');
|
||||
goog.require('ol.extent');
|
||||
goog.require('ol.pointer.PointerEventHandler');
|
||||
|
||||
|
||||
|
||||
@@ -57,9 +56,6 @@ ol.control.OverviewMap = function(opt_options) {
|
||||
|
||||
var tipLabel = goog.isDef(options.tipLabel) ?
|
||||
options.tipLabel : 'Overview map';
|
||||
var tip = goog.dom.createDom(goog.dom.TagName.SPAN, {
|
||||
'role' : 'tooltip'
|
||||
}, tipLabel);
|
||||
|
||||
/**
|
||||
* @private
|
||||
@@ -83,15 +79,10 @@ ol.control.OverviewMap = function(opt_options) {
|
||||
*/
|
||||
this.labelSpan_ = label;
|
||||
var button = goog.dom.createDom(goog.dom.TagName.BUTTON, {
|
||||
'class': 'ol-has-tooltip',
|
||||
'type': 'button'
|
||||
'type': 'button',
|
||||
'title': tipLabel
|
||||
}, this.labelSpan_);
|
||||
goog.dom.appendChild(button, tip);
|
||||
|
||||
var buttonHandler = new ol.pointer.PointerEventHandler(button);
|
||||
this.registerDisposable(buttonHandler);
|
||||
goog.events.listen(buttonHandler, ol.pointer.EventType.POINTERUP,
|
||||
this.handlePointerUp_, false, this);
|
||||
goog.events.listen(button, goog.events.EventType.CLICK,
|
||||
this.handleClick_, false, this);
|
||||
|
||||
@@ -138,15 +129,19 @@ ol.control.OverviewMap = function(opt_options) {
|
||||
});
|
||||
this.ovmap_.addOverlay(this.boxOverlay_);
|
||||
|
||||
var element = goog.dom.createDom(goog.dom.TagName.DIV, {
|
||||
'class': className + ' ' + ol.css.CLASS_UNSELECTABLE + ' ' +
|
||||
ol.css.CLASS_CONTROL +
|
||||
(this.collapsed_ && this.collapsible_ ? ' ol-collapsed' : '') +
|
||||
(this.collapsible_ ? '' : ' ol-uncollapsible')
|
||||
}, ovmapDiv, button);
|
||||
var cssClasses = className + ' ' + ol.css.CLASS_UNSELECTABLE + ' ' +
|
||||
ol.css.CLASS_CONTROL +
|
||||
(this.collapsed_ && this.collapsible_ ? ' ol-collapsed' : '') +
|
||||
(this.collapsible_ ? '' : ' ol-uncollapsible');
|
||||
var element = goog.dom.createDom(goog.dom.TagName.DIV,
|
||||
cssClasses, ovmapDiv, button);
|
||||
|
||||
var render = goog.isDef(options.render) ?
|
||||
options.render : ol.control.OverviewMap.render;
|
||||
|
||||
goog.base(this, {
|
||||
element: element,
|
||||
render: render,
|
||||
target: options.target
|
||||
});
|
||||
};
|
||||
@@ -210,12 +205,11 @@ ol.control.OverviewMap.prototype.bindView_ = function() {
|
||||
|
||||
|
||||
/**
|
||||
* Function called on each map render. Executes in a requestAnimationFrame
|
||||
* callback. Manage the extent of the overview map accordingly,
|
||||
* then update the overview map box.
|
||||
* @param {goog.events.Event} event Event.
|
||||
* @param {ol.MapEvent} mapEvent Map event.
|
||||
* @this {ol.control.OverviewMap}
|
||||
* @api
|
||||
*/
|
||||
ol.control.OverviewMap.prototype.handleMapPostrender = function(event) {
|
||||
ol.control.OverviewMap.render = function(mapEvent) {
|
||||
this.validateExtent_();
|
||||
this.updateBox_();
|
||||
};
|
||||
@@ -423,19 +417,7 @@ ol.control.OverviewMap.prototype.calculateCoordinateRotate_ = function(
|
||||
* @private
|
||||
*/
|
||||
ol.control.OverviewMap.prototype.handleClick_ = function(event) {
|
||||
if (event.screenX !== 0 && event.screenY !== 0) {
|
||||
return;
|
||||
}
|
||||
this.handleToggle_();
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.pointer.PointerEvent} pointerEvent The event to handle
|
||||
* @private
|
||||
*/
|
||||
ol.control.OverviewMap.prototype.handlePointerUp_ = function(pointerEvent) {
|
||||
pointerEvent.browserEvent.preventDefault();
|
||||
event.preventDefault();
|
||||
this.handleToggle_();
|
||||
};
|
||||
|
||||
|
||||
@@ -11,7 +11,6 @@ goog.require('ol.animation');
|
||||
goog.require('ol.control.Control');
|
||||
goog.require('ol.css');
|
||||
goog.require('ol.easing');
|
||||
goog.require('ol.pointer.PointerEventHandler');
|
||||
|
||||
|
||||
|
||||
@@ -38,24 +37,17 @@ ol.control.Rotate = function(opt_options) {
|
||||
* @private
|
||||
*/
|
||||
this.label_ = goog.dom.createDom(goog.dom.TagName.SPAN,
|
||||
{ 'class': 'ol-compass' },
|
||||
goog.isDef(options.label) ? options.label : '\u21E7');
|
||||
'ol-compass', goog.isDef(options.label) ? options.label : '\u21E7');
|
||||
|
||||
var tipLabel = goog.isDef(options.tipLabel) ?
|
||||
options.tipLabel : 'Reset rotation';
|
||||
|
||||
var tip = goog.dom.createDom(goog.dom.TagName.SPAN, {
|
||||
'role' : 'tooltip'
|
||||
}, tipLabel);
|
||||
var button = goog.dom.createDom(goog.dom.TagName.BUTTON, {
|
||||
'class': className + '-reset ol-has-tooltip',
|
||||
'type' : 'button'
|
||||
}, tip, this.label_);
|
||||
'class': className + '-reset',
|
||||
'type' : 'button',
|
||||
'title': tipLabel
|
||||
}, this.label_);
|
||||
|
||||
var handler = new ol.pointer.PointerEventHandler(button);
|
||||
this.registerDisposable(handler);
|
||||
goog.events.listen(handler, ol.pointer.EventType.POINTERUP,
|
||||
ol.control.Rotate.prototype.handlePointerUp_, false, this);
|
||||
goog.events.listen(button, goog.events.EventType.CLICK,
|
||||
ol.control.Rotate.prototype.handleClick_, false, this);
|
||||
|
||||
@@ -70,8 +62,12 @@ ol.control.Rotate = function(opt_options) {
|
||||
ol.css.CLASS_CONTROL;
|
||||
var element = goog.dom.createDom(goog.dom.TagName.DIV, cssClasses, button);
|
||||
|
||||
var render = goog.isDef(options.render) ?
|
||||
options.render : ol.control.Rotate.render;
|
||||
|
||||
goog.base(this, {
|
||||
element: element,
|
||||
render: render,
|
||||
target: options.target
|
||||
});
|
||||
|
||||
@@ -106,19 +102,7 @@ goog.inherits(ol.control.Rotate, ol.control.Control);
|
||||
* @private
|
||||
*/
|
||||
ol.control.Rotate.prototype.handleClick_ = function(event) {
|
||||
if (event.screenX !== 0 && event.screenY !== 0) {
|
||||
return;
|
||||
}
|
||||
this.resetNorth_();
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.pointer.PointerEvent} pointerEvent The event to handle
|
||||
* @private
|
||||
*/
|
||||
ol.control.Rotate.prototype.handlePointerUp_ = function(pointerEvent) {
|
||||
pointerEvent.browserEvent.preventDefault();
|
||||
event.preventDefault();
|
||||
this.resetNorth_();
|
||||
};
|
||||
|
||||
@@ -155,9 +139,11 @@ ol.control.Rotate.prototype.resetNorth_ = function() {
|
||||
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
* @param {ol.MapEvent} mapEvent Map event.
|
||||
* @this {ol.control.Rotate}
|
||||
* @api
|
||||
*/
|
||||
ol.control.Rotate.prototype.handleMapPostrender = function(mapEvent) {
|
||||
ol.control.Rotate.render = function(mapEvent) {
|
||||
var frameState = mapEvent.frameState;
|
||||
if (goog.isNull(frameState)) {
|
||||
return;
|
||||
|
||||
@@ -66,17 +66,15 @@ ol.control.ScaleLine = function(opt_options) {
|
||||
* @private
|
||||
* @type {Element}
|
||||
*/
|
||||
this.innerElement_ = goog.dom.createDom(goog.dom.TagName.DIV, {
|
||||
'class': className + '-inner'
|
||||
});
|
||||
this.innerElement_ = goog.dom.createDom(goog.dom.TagName.DIV,
|
||||
className + '-inner');
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @type {Element}
|
||||
*/
|
||||
this.element_ = goog.dom.createDom(goog.dom.TagName.DIV, {
|
||||
'class': className + ' ' + ol.css.CLASS_UNSELECTABLE
|
||||
}, this.innerElement_);
|
||||
this.element_ = goog.dom.createDom(goog.dom.TagName.DIV,
|
||||
className + ' ' + ol.css.CLASS_UNSELECTABLE, this.innerElement_);
|
||||
|
||||
/**
|
||||
* @private
|
||||
@@ -114,8 +112,12 @@ ol.control.ScaleLine = function(opt_options) {
|
||||
*/
|
||||
this.toEPSG4326_ = null;
|
||||
|
||||
var render = goog.isDef(options.render) ?
|
||||
options.render : ol.control.ScaleLine.render;
|
||||
|
||||
goog.base(this, {
|
||||
element: this.element_,
|
||||
render: render,
|
||||
target: options.target
|
||||
});
|
||||
|
||||
@@ -154,9 +156,11 @@ goog.exportProperty(
|
||||
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
* @param {ol.MapEvent} mapEvent Map event.
|
||||
* @this {ol.control.ScaleLine}
|
||||
* @api
|
||||
*/
|
||||
ol.control.ScaleLine.prototype.handleMapPostrender = function(mapEvent) {
|
||||
ol.control.ScaleLine.render = function(mapEvent) {
|
||||
var frameState = mapEvent.frameState;
|
||||
if (goog.isNull(frameState)) {
|
||||
this.viewState_ = null;
|
||||
|
||||
@@ -8,7 +8,6 @@ goog.require('ol.animation');
|
||||
goog.require('ol.control.Control');
|
||||
goog.require('ol.css');
|
||||
goog.require('ol.easing');
|
||||
goog.require('ol.pointer.PointerEventHandler');
|
||||
|
||||
|
||||
|
||||
@@ -41,19 +40,12 @@ ol.control.Zoom = function(opt_options) {
|
||||
var zoomOutTipLabel = goog.isDef(options.zoomOutTipLabel) ?
|
||||
options.zoomOutTipLabel : 'Zoom out';
|
||||
|
||||
var tTipZoomIn = goog.dom.createDom(goog.dom.TagName.SPAN, {
|
||||
'role' : 'tooltip'
|
||||
}, zoomInTipLabel);
|
||||
var inElement = goog.dom.createDom(goog.dom.TagName.BUTTON, {
|
||||
'class': className + '-in ol-has-tooltip',
|
||||
'type' : 'button'
|
||||
}, tTipZoomIn, zoomInLabel);
|
||||
'class': className + '-in',
|
||||
'type' : 'button',
|
||||
'title': zoomInTipLabel
|
||||
}, zoomInLabel);
|
||||
|
||||
var inElementHandler = new ol.pointer.PointerEventHandler(inElement);
|
||||
this.registerDisposable(inElementHandler);
|
||||
goog.events.listen(inElementHandler,
|
||||
ol.pointer.EventType.POINTERUP, goog.partial(
|
||||
ol.control.Zoom.prototype.handlePointerUp_, delta), false, this);
|
||||
goog.events.listen(inElement,
|
||||
goog.events.EventType.CLICK, goog.partial(
|
||||
ol.control.Zoom.prototype.handleClick_, delta), false, this);
|
||||
@@ -65,19 +57,12 @@ ol.control.Zoom = function(opt_options) {
|
||||
this.blur();
|
||||
}, false);
|
||||
|
||||
var tTipsZoomOut = goog.dom.createDom(goog.dom.TagName.SPAN, {
|
||||
'role' : 'tooltip'
|
||||
}, zoomOutTipLabel);
|
||||
var outElement = goog.dom.createDom(goog.dom.TagName.BUTTON, {
|
||||
'class': className + '-out ol-has-tooltip',
|
||||
'type' : 'button'
|
||||
}, tTipsZoomOut, zoomOutLabel);
|
||||
'class': className + '-out',
|
||||
'type' : 'button',
|
||||
'title': zoomOutTipLabel
|
||||
}, zoomOutLabel);
|
||||
|
||||
var outElementHandler = new ol.pointer.PointerEventHandler(outElement);
|
||||
this.registerDisposable(outElementHandler);
|
||||
goog.events.listen(outElementHandler,
|
||||
ol.pointer.EventType.POINTERUP, goog.partial(
|
||||
ol.control.Zoom.prototype.handlePointerUp_, -delta), false, this);
|
||||
goog.events.listen(outElement,
|
||||
goog.events.EventType.CLICK, goog.partial(
|
||||
ol.control.Zoom.prototype.handleClick_, -delta), false, this);
|
||||
@@ -115,20 +100,7 @@ goog.inherits(ol.control.Zoom, ol.control.Control);
|
||||
* @private
|
||||
*/
|
||||
ol.control.Zoom.prototype.handleClick_ = function(delta, event) {
|
||||
if (event.screenX !== 0 && event.screenY !== 0) {
|
||||
return;
|
||||
}
|
||||
this.zoomByDelta_(delta);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {number} delta Zoom delta.
|
||||
* @param {ol.pointer.PointerEvent} pointerEvent The event to handle
|
||||
* @private
|
||||
*/
|
||||
ol.control.Zoom.prototype.handlePointerUp_ = function(delta, pointerEvent) {
|
||||
pointerEvent.browserEvent.preventDefault();
|
||||
event.preventDefault();
|
||||
this.zoomByDelta_(delta);
|
||||
};
|
||||
|
||||
|
||||
@@ -100,8 +100,12 @@ ol.control.ZoomSlider = function(opt_options) {
|
||||
goog.events.listen(thumbElement, goog.events.EventType.CLICK,
|
||||
goog.events.Event.stopPropagation);
|
||||
|
||||
var render = goog.isDef(options.render) ?
|
||||
options.render : ol.control.ZoomSlider.render;
|
||||
|
||||
goog.base(this, {
|
||||
element: containerElement
|
||||
element: containerElement,
|
||||
render: render
|
||||
});
|
||||
};
|
||||
goog.inherits(ol.control.ZoomSlider, ol.control.Control);
|
||||
@@ -166,9 +170,11 @@ ol.control.ZoomSlider.prototype.initSlider_ = function() {
|
||||
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
* @param {ol.MapEvent} mapEvent Map event.
|
||||
* @this {ol.control.ZoomSlider}
|
||||
* @api
|
||||
*/
|
||||
ol.control.ZoomSlider.prototype.handleMapPostrender = function(mapEvent) {
|
||||
ol.control.ZoomSlider.render = function(mapEvent) {
|
||||
if (goog.isNull(mapEvent.frameState)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -7,7 +7,6 @@ goog.require('goog.events');
|
||||
goog.require('goog.events.EventType');
|
||||
goog.require('ol.control.Control');
|
||||
goog.require('ol.css');
|
||||
goog.require('ol.pointer.PointerEventHandler');
|
||||
|
||||
|
||||
|
||||
@@ -35,19 +34,11 @@ ol.control.ZoomToExtent = function(opt_options) {
|
||||
|
||||
var tipLabel = goog.isDef(options.tipLabel) ?
|
||||
options.tipLabel : 'Fit to extent';
|
||||
var tip = goog.dom.createDom(goog.dom.TagName.SPAN, {
|
||||
'role' : 'tooltip'
|
||||
}, tipLabel);
|
||||
var button = goog.dom.createDom(goog.dom.TagName.BUTTON, {
|
||||
'class': 'ol-has-tooltip',
|
||||
'type': 'button'
|
||||
'type': 'button',
|
||||
'title': tipLabel
|
||||
});
|
||||
goog.dom.appendChild(button, tip);
|
||||
|
||||
var buttonHandler = new ol.pointer.PointerEventHandler(button);
|
||||
this.registerDisposable(buttonHandler);
|
||||
goog.events.listen(buttonHandler, ol.pointer.EventType.POINTERUP,
|
||||
this.handlePointerUp_, false, this);
|
||||
goog.events.listen(button, goog.events.EventType.CLICK,
|
||||
this.handleClick_, false, this);
|
||||
|
||||
@@ -75,19 +66,7 @@ goog.inherits(ol.control.ZoomToExtent, ol.control.Control);
|
||||
* @private
|
||||
*/
|
||||
ol.control.ZoomToExtent.prototype.handleClick_ = function(event) {
|
||||
if (event.screenX !== 0 && event.screenY !== 0) {
|
||||
return;
|
||||
}
|
||||
this.handleZoomToExtent_();
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.pointer.PointerEvent} pointerEvent The event to handle
|
||||
* @private
|
||||
*/
|
||||
ol.control.ZoomToExtent.prototype.handlePointerUp_ = function(pointerEvent) {
|
||||
pointerEvent.browserEvent.preventDefault();
|
||||
event.preventDefault();
|
||||
this.handleZoomToExtent_();
|
||||
};
|
||||
|
||||
|
||||
@@ -176,6 +176,8 @@ ol.FeatureOverlay.prototype.handleMapPostCompose_ = function(event) {
|
||||
var frameState = event.frameState;
|
||||
var pixelRatio = frameState.pixelRatio;
|
||||
var resolution = frameState.viewState.resolution;
|
||||
var squaredTolerance = ol.renderer.vector.getSquaredTolerance(resolution,
|
||||
pixelRatio);
|
||||
var i, ii, styles, featureStyleFunction;
|
||||
this.features_.forEach(function(feature) {
|
||||
featureStyleFunction = feature.getStyleFunction();
|
||||
@@ -189,8 +191,7 @@ ol.FeatureOverlay.prototype.handleMapPostCompose_ = function(event) {
|
||||
ii = styles.length;
|
||||
for (i = 0; i < ii; ++i) {
|
||||
ol.renderer.vector.renderFeature(replayGroup, feature, styles[i],
|
||||
ol.renderer.vector.getSquaredTolerance(resolution, pixelRatio),
|
||||
feature, this.handleImageChange_, this);
|
||||
squaredTolerance, this.handleImageChange_, this);
|
||||
}
|
||||
}, this);
|
||||
};
|
||||
|
||||
@@ -128,7 +128,7 @@ ol.format.Feature.prototype.readProjection = goog.abstractMethod;
|
||||
*
|
||||
* @param {ol.Feature} feature Feature.
|
||||
* @param {olx.format.WriteOptions=} opt_options Write options.
|
||||
* @return {ArrayBuffer|Node|Object|string} Result.
|
||||
* @return {string} Result.
|
||||
*/
|
||||
ol.format.Feature.prototype.writeFeature = goog.abstractMethod;
|
||||
|
||||
@@ -138,7 +138,7 @@ ol.format.Feature.prototype.writeFeature = goog.abstractMethod;
|
||||
*
|
||||
* @param {Array.<ol.Feature>} features Features.
|
||||
* @param {olx.format.WriteOptions=} opt_options Write options.
|
||||
* @return {ArrayBuffer|Node|Object|string} Result.
|
||||
* @return {string} Result.
|
||||
*/
|
||||
ol.format.Feature.prototype.writeFeatures = goog.abstractMethod;
|
||||
|
||||
@@ -148,7 +148,7 @@ ol.format.Feature.prototype.writeFeatures = goog.abstractMethod;
|
||||
*
|
||||
* @param {ol.geom.Geometry} geometry Geometry.
|
||||
* @param {olx.format.WriteOptions=} opt_options Write options.
|
||||
* @return {ArrayBuffer|Node|Object|string} Node.
|
||||
* @return {string} Result.
|
||||
*/
|
||||
ol.format.Feature.prototype.writeGeometry = goog.abstractMethod;
|
||||
|
||||
|
||||
@@ -478,22 +478,28 @@ ol.format.GeoJSON.prototype.readProjectionFromObject = function(object) {
|
||||
|
||||
|
||||
/**
|
||||
* Encode a feature as a GeoJSON Feature object.
|
||||
* Encode a feature as a GeoJSON Feature string.
|
||||
*
|
||||
* @function
|
||||
* @param {ol.Feature} feature Feature.
|
||||
* @param {olx.format.WriteOptions} options Write options.
|
||||
* @return {GeoJSONFeature} GeoJSON.
|
||||
* @return {string} GeoJSON.
|
||||
* @api stable
|
||||
*/
|
||||
ol.format.GeoJSON.prototype.writeFeature;
|
||||
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
* Encode a feature as a GeoJSON Feature object.
|
||||
*
|
||||
* @param {ol.Feature} feature Feature.
|
||||
* @param {olx.format.WriteOptions=} opt_options Write options.
|
||||
* @api
|
||||
* @return {Object} Object.
|
||||
*/
|
||||
ol.format.GeoJSON.prototype.writeFeatureObject = function(
|
||||
feature, opt_options) {
|
||||
opt_options = this.adaptOptions(opt_options);
|
||||
var object = {
|
||||
'type': 'Feature'
|
||||
};
|
||||
@@ -508,7 +514,7 @@ ol.format.GeoJSON.prototype.writeFeatureObject = function(
|
||||
ol.format.GeoJSON.writeGeometry_(geometry, opt_options));
|
||||
}
|
||||
var properties = feature.getProperties();
|
||||
goog.object.remove(properties, 'geometry');
|
||||
goog.object.remove(properties, feature.getGeometryName());
|
||||
if (!goog.object.isEmpty(properties)) {
|
||||
goog.object.set(object, 'properties', properties);
|
||||
}
|
||||
@@ -522,17 +528,23 @@ ol.format.GeoJSON.prototype.writeFeatureObject = function(
|
||||
* @function
|
||||
* @param {Array.<ol.Feature>} features Features.
|
||||
* @param {olx.format.WriteOptions} options Write options.
|
||||
* @return {GeoJSONObject} GeoJSON.
|
||||
* @return {string} GeoJSON.
|
||||
* @api stable
|
||||
*/
|
||||
ol.format.GeoJSON.prototype.writeFeatures;
|
||||
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
* Encode an array of features as a GeoJSON object.
|
||||
*
|
||||
* @param {Array.<ol.Feature>} features Features.
|
||||
* @param {olx.format.WriteOptions=} opt_options Write options.
|
||||
* @return {Object} GeoJSON Object.
|
||||
* @api
|
||||
*/
|
||||
ol.format.GeoJSON.prototype.writeFeaturesObject =
|
||||
function(features, opt_options) {
|
||||
opt_options = this.adaptOptions(opt_options);
|
||||
var objects = [];
|
||||
var i, ii;
|
||||
for (i = 0, ii = features.length; i < ii; ++i) {
|
||||
@@ -546,19 +558,27 @@ ol.format.GeoJSON.prototype.writeFeaturesObject =
|
||||
|
||||
|
||||
/**
|
||||
* Encode a geometry as GeoJSON.
|
||||
* Encode a geometry as a GeoJSON string.
|
||||
*
|
||||
* @function
|
||||
* @param {ol.geom.Geometry} geometry Geometry.
|
||||
* @param {olx.format.WriteOptions} options Write options.
|
||||
* @return {GeoJSONGeometry|GeoJSONGeometryCollection} GeoJSON.
|
||||
* @return {string} GeoJSON.
|
||||
* @api stable
|
||||
*/
|
||||
ol.format.GeoJSON.prototype.writeGeometry;
|
||||
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
* Encode a geometry as a GeoJSON object.
|
||||
*
|
||||
* @param {ol.geom.Geometry} geometry Geometry.
|
||||
* @param {olx.format.WriteOptions=} opt_options Write options.
|
||||
* @return {GeoJSONGeometry|GeoJSONGeometryCollection} Object.
|
||||
* @api
|
||||
*/
|
||||
ol.format.GeoJSON.prototype.writeGeometryObject =
|
||||
ol.format.GeoJSON.writeGeometry_;
|
||||
ol.format.GeoJSON.prototype.writeGeometryObject = function(geometry,
|
||||
opt_options) {
|
||||
return ol.format.GeoJSON.writeGeometry_(geometry,
|
||||
this.adaptOptions(opt_options));
|
||||
};
|
||||
|
||||
218
src/ol/format/gml/gml2format.js
Normal file
218
src/ol/format/gml/gml2format.js
Normal file
@@ -0,0 +1,218 @@
|
||||
goog.provide('ol.format.GML2');
|
||||
|
||||
goog.require('goog.asserts');
|
||||
goog.require('goog.dom');
|
||||
goog.require('goog.dom.NodeType');
|
||||
goog.require('goog.object');
|
||||
goog.require('ol.extent');
|
||||
goog.require('ol.format.GML');
|
||||
goog.require('ol.format.GMLBase');
|
||||
goog.require('ol.format.XSD');
|
||||
goog.require('ol.proj');
|
||||
goog.require('ol.xml');
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @classdesc
|
||||
* Feature format for reading and writing data in the GML format,
|
||||
* version 2.1.2.
|
||||
*
|
||||
* @constructor
|
||||
* @param {olx.format.GMLOptions=} opt_options Optional configuration object.
|
||||
* @extends {ol.format.GMLBase}
|
||||
* @api
|
||||
*/
|
||||
ol.format.GML2 = function(opt_options) {
|
||||
var options = /** @type {olx.format.GMLOptions} */
|
||||
(goog.isDef(opt_options) ? opt_options : {});
|
||||
|
||||
goog.base(this, options);
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
this.schemaLocation = goog.isDef(options.schemaLocation) ?
|
||||
options.schemaLocation : ol.format.GML2.schemaLocation_;
|
||||
|
||||
};
|
||||
goog.inherits(ol.format.GML2, ol.format.GMLBase);
|
||||
|
||||
|
||||
/**
|
||||
* @const
|
||||
* @type {string}
|
||||
* @private
|
||||
*/
|
||||
ol.format.GML2.schemaLocation_ = 'http://www.opengis.net/gml ' +
|
||||
'http://schemas.opengis.net/gml/2.1.2/feature.xsd';
|
||||
|
||||
|
||||
/**
|
||||
* @param {Node} node Node.
|
||||
* @param {Array.<*>} objectStack Object stack.
|
||||
* @private
|
||||
* @return {Array.<number>|undefined} Flat coordinates.
|
||||
*/
|
||||
ol.format.GML2.prototype.readFlatCoordinates_ = function(node, objectStack) {
|
||||
var s = ol.xml.getAllTextContent(node, false).replace(/^\s*|\s*$/g, '');
|
||||
var context = objectStack[0];
|
||||
goog.asserts.assert(goog.isObject(context));
|
||||
var containerSrs = goog.object.get(context, 'srsName');
|
||||
var containerDimension = node.parentNode.getAttribute('srsDimension');
|
||||
var axisOrientation = 'enu';
|
||||
if (!goog.isNull(containerSrs)) {
|
||||
var proj = ol.proj.get(containerSrs);
|
||||
axisOrientation = proj.getAxisOrientation();
|
||||
}
|
||||
var coords = s.split(/[\s,]+/);
|
||||
// The "dimension" attribute is from the GML 3.0.1 spec.
|
||||
var dim = 2;
|
||||
if (!goog.isNull(node.getAttribute('srsDimension'))) {
|
||||
dim = ol.format.XSD.readNonNegativeIntegerString(
|
||||
node.getAttribute('srsDimension'));
|
||||
} else if (!goog.isNull(node.getAttribute('dimension'))) {
|
||||
dim = ol.format.XSD.readNonNegativeIntegerString(
|
||||
node.getAttribute('dimension'));
|
||||
} else if (!goog.isNull(containerDimension)) {
|
||||
dim = ol.format.XSD.readNonNegativeIntegerString(containerDimension);
|
||||
}
|
||||
var x, y, z;
|
||||
var flatCoordinates = [];
|
||||
for (var i = 0, ii = coords.length; i < ii; i += dim) {
|
||||
x = parseFloat(coords[i]);
|
||||
y = parseFloat(coords[i + 1]);
|
||||
z = (dim === 3) ? parseFloat(coords[i + 2]) : 0;
|
||||
if (axisOrientation.substr(0, 2) === 'en') {
|
||||
flatCoordinates.push(x, y, z);
|
||||
} else {
|
||||
flatCoordinates.push(y, x, z);
|
||||
}
|
||||
}
|
||||
return flatCoordinates;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {Node} node Node.
|
||||
* @param {Array.<*>} objectStack Object stack.
|
||||
* @private
|
||||
* @return {ol.Extent|undefined} Envelope.
|
||||
*/
|
||||
ol.format.GML2.prototype.readBox_ = function(node, objectStack) {
|
||||
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
|
||||
goog.asserts.assert(node.localName == 'Box');
|
||||
var flatCoordinates = ol.xml.pushParseAndPop(
|
||||
/** @type {Array.<number>} */ ([null]),
|
||||
this.BOX_PARSERS_, node, objectStack, this);
|
||||
return ol.extent.createOrUpdate(flatCoordinates[1][0],
|
||||
flatCoordinates[1][1], flatCoordinates[1][3],
|
||||
flatCoordinates[1][4]);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {Node} node Node.
|
||||
* @param {Array.<*>} objectStack Object stack.
|
||||
* @private
|
||||
*/
|
||||
ol.format.GML2.prototype.innerBoundaryIsParser_ =
|
||||
function(node, objectStack) {
|
||||
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
|
||||
goog.asserts.assert(node.localName == 'innerBoundaryIs');
|
||||
var flatLinearRing = ol.xml.pushParseAndPop(
|
||||
/** @type {Array.<number>|undefined} */ (undefined),
|
||||
this.RING_PARSERS, node, objectStack, this);
|
||||
if (goog.isDef(flatLinearRing)) {
|
||||
var flatLinearRings = /** @type {Array.<Array.<number>>} */
|
||||
(objectStack[objectStack.length - 1]);
|
||||
goog.asserts.assert(goog.isArray(flatLinearRings));
|
||||
goog.asserts.assert(flatLinearRings.length > 0);
|
||||
flatLinearRings.push(flatLinearRing);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {Node} node Node.
|
||||
* @param {Array.<*>} objectStack Object stack.
|
||||
* @private
|
||||
*/
|
||||
ol.format.GML2.prototype.outerBoundaryIsParser_ =
|
||||
function(node, objectStack) {
|
||||
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
|
||||
goog.asserts.assert(node.localName == 'outerBoundaryIs');
|
||||
var flatLinearRing = ol.xml.pushParseAndPop(
|
||||
/** @type {Array.<number>|undefined} */ (undefined),
|
||||
this.RING_PARSERS, node, objectStack, this);
|
||||
if (goog.isDef(flatLinearRing)) {
|
||||
var flatLinearRings = /** @type {Array.<Array.<number>>} */
|
||||
(objectStack[objectStack.length - 1]);
|
||||
goog.asserts.assert(goog.isArray(flatLinearRings));
|
||||
goog.asserts.assert(flatLinearRings.length > 0);
|
||||
flatLinearRings[0] = flatLinearRing;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @const
|
||||
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
|
||||
* @private
|
||||
*/
|
||||
ol.format.GML2.prototype.GEOMETRY_FLAT_COORDINATES_PARSERS_ = Object({
|
||||
'http://www.opengis.net/gml' : {
|
||||
'coordinates': ol.xml.makeReplacer(
|
||||
ol.format.GML2.prototype.readFlatCoordinates_)
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
/**
|
||||
* @const
|
||||
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
|
||||
* @private
|
||||
*/
|
||||
ol.format.GML2.prototype.FLAT_LINEAR_RINGS_PARSERS_ = Object({
|
||||
'http://www.opengis.net/gml' : {
|
||||
'innerBoundaryIs': ol.format.GML2.prototype.innerBoundaryIsParser_,
|
||||
'outerBoundaryIs': ol.format.GML2.prototype.outerBoundaryIsParser_
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
/**
|
||||
* @const
|
||||
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
|
||||
* @private
|
||||
*/
|
||||
ol.format.GML2.prototype.BOX_PARSERS_ = Object({
|
||||
'http://www.opengis.net/gml' : {
|
||||
'coordinates': ol.xml.makeArrayPusher(
|
||||
ol.format.GML2.prototype.readFlatCoordinates_)
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
/**
|
||||
* @const
|
||||
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
|
||||
* @private
|
||||
*/
|
||||
ol.format.GML2.prototype.GEOMETRY_PARSERS_ = Object({
|
||||
'http://www.opengis.net/gml' : {
|
||||
'Point': ol.xml.makeReplacer(ol.format.GMLBase.prototype.readPoint),
|
||||
'MultiPoint': ol.xml.makeReplacer(
|
||||
ol.format.GMLBase.prototype.readMultiPoint),
|
||||
'LineString': ol.xml.makeReplacer(
|
||||
ol.format.GMLBase.prototype.readLineString),
|
||||
'MultiLineString': ol.xml.makeReplacer(
|
||||
ol.format.GMLBase.prototype.readMultiLineString),
|
||||
'LinearRing' : ol.xml.makeReplacer(
|
||||
ol.format.GMLBase.prototype.readLinearRing),
|
||||
'Polygon': ol.xml.makeReplacer(ol.format.GMLBase.prototype.readPolygon),
|
||||
'MultiPolygon': ol.xml.makeReplacer(
|
||||
ol.format.GMLBase.prototype.readMultiPolygon),
|
||||
'Box': ol.xml.makeReplacer(ol.format.GML2.prototype.readBox_)
|
||||
}
|
||||
});
|
||||
File diff suppressed because it is too large
Load Diff
563
src/ol/format/gml/gmlbaseformat.js
Normal file
563
src/ol/format/gml/gmlbaseformat.js
Normal file
@@ -0,0 +1,563 @@
|
||||
// FIXME Envelopes should not be treated as geometries! readEnvelope_ is part
|
||||
// of GEOMETRY_PARSERS_ and methods using GEOMETRY_PARSERS_ do not expect
|
||||
// envelopes/extents, only geometries!
|
||||
goog.provide('ol.format.GMLBase');
|
||||
|
||||
goog.require('goog.array');
|
||||
goog.require('goog.asserts');
|
||||
goog.require('goog.dom');
|
||||
goog.require('goog.dom.NodeType');
|
||||
goog.require('goog.object');
|
||||
goog.require('goog.string');
|
||||
goog.require('ol.Feature');
|
||||
goog.require('ol.format.Feature');
|
||||
goog.require('ol.format.XMLFeature');
|
||||
goog.require('ol.geom.Geometry');
|
||||
goog.require('ol.geom.LineString');
|
||||
goog.require('ol.geom.LinearRing');
|
||||
goog.require('ol.geom.MultiLineString');
|
||||
goog.require('ol.geom.MultiPoint');
|
||||
goog.require('ol.geom.MultiPolygon');
|
||||
goog.require('ol.geom.Point');
|
||||
goog.require('ol.geom.Polygon');
|
||||
goog.require('ol.proj');
|
||||
goog.require('ol.xml');
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @classdesc
|
||||
* Abstract base class; normally only used for creating subclasses and not
|
||||
* instantiated in apps.
|
||||
* Feature base format for reading and writing data in the GML format.
|
||||
* This class cannot be instantiate, it contains only base content that
|
||||
* is shared with versioned format classes ol.format.GML2 and
|
||||
* ol.format.GML3.
|
||||
*
|
||||
* @constructor
|
||||
* @param {olx.format.GMLOptions=} opt_options
|
||||
* Optional configuration object.
|
||||
* @extends {ol.format.XMLFeature}
|
||||
* @api
|
||||
*/
|
||||
ol.format.GMLBase = function(opt_options) {
|
||||
var options = /** @type {olx.format.GMLOptions} */
|
||||
(goog.isDef(opt_options) ? opt_options : {});
|
||||
|
||||
/**
|
||||
* @protected
|
||||
* @type {string}
|
||||
*/
|
||||
this.featureType = options.featureType;
|
||||
|
||||
/**
|
||||
* @protected
|
||||
* @type {string}
|
||||
*/
|
||||
this.featureNS = options.featureNS;
|
||||
|
||||
/**
|
||||
* @protected
|
||||
* @type {string}
|
||||
*/
|
||||
this.srsName = options.srsName;
|
||||
|
||||
/**
|
||||
* @protected
|
||||
* @type {string}
|
||||
*/
|
||||
this.schemaLocation = '';
|
||||
|
||||
goog.base(this);
|
||||
};
|
||||
goog.inherits(ol.format.GMLBase, ol.format.XMLFeature);
|
||||
|
||||
|
||||
/**
|
||||
* @param {Node} node Node.
|
||||
* @param {Array.<*>} objectStack Object stack.
|
||||
* @return {Array.<ol.Feature>} Features.
|
||||
* @private
|
||||
*/
|
||||
ol.format.GMLBase.prototype.readFeatures_ = function(node, objectStack) {
|
||||
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
|
||||
var localName = ol.xml.getLocalName(node);
|
||||
var features;
|
||||
if (localName == 'FeatureCollection') {
|
||||
features = ol.xml.pushParseAndPop(null,
|
||||
this.FEATURE_COLLECTION_PARSERS, node,
|
||||
objectStack, this);
|
||||
} else if (localName == 'featureMembers' || localName == 'featureMember') {
|
||||
var context = objectStack[0];
|
||||
goog.asserts.assert(goog.isObject(context));
|
||||
var featureType = goog.object.get(context, 'featureType');
|
||||
if (!goog.isDef(featureType) && !goog.isNull(node.firstElementChild)) {
|
||||
var member = node.firstElementChild;
|
||||
featureType = member.nodeName.split(':').pop();
|
||||
goog.object.set(context, 'featureType', featureType);
|
||||
goog.object.set(context, 'featureNS', member.namespaceURI);
|
||||
}
|
||||
var parsers = {};
|
||||
var parsersNS = {};
|
||||
parsers[featureType] = (localName == 'featureMembers') ?
|
||||
ol.xml.makeArrayPusher(this.readFeatureElement, this) :
|
||||
ol.xml.makeReplacer(this.readFeatureElement, this);
|
||||
parsersNS[goog.object.get(context, 'featureNS')] = parsers;
|
||||
features = ol.xml.pushParseAndPop([], parsersNS, node, objectStack);
|
||||
}
|
||||
if (!goog.isDef(features)) {
|
||||
features = [];
|
||||
}
|
||||
return features;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @type {Object.<string, Object.<string, Object>>}
|
||||
*/
|
||||
ol.format.GMLBase.prototype.FEATURE_COLLECTION_PARSERS = Object({
|
||||
'http://www.opengis.net/gml': {
|
||||
'featureMember': ol.xml.makeArrayPusher(
|
||||
ol.format.GMLBase.prototype.readFeatures_),
|
||||
'featureMembers': ol.xml.makeReplacer(
|
||||
ol.format.GMLBase.prototype.readFeatures_)
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
/**
|
||||
* @param {Node} node Node.
|
||||
* @param {Array.<*>} objectStack Object stack.
|
||||
* @return {ol.geom.Geometry|undefined} Geometry.
|
||||
*/
|
||||
ol.format.GMLBase.prototype.readGeometryElement = function(node, objectStack) {
|
||||
var context = objectStack[0];
|
||||
goog.asserts.assert(goog.isObject(context));
|
||||
goog.object.set(context, 'srsName',
|
||||
node.firstElementChild.getAttribute('srsName'));
|
||||
var geometry = ol.xml.pushParseAndPop(/** @type {ol.geom.Geometry} */(null),
|
||||
this.GEOMETRY_PARSERS_, node, objectStack, this);
|
||||
if (goog.isDefAndNotNull(geometry)) {
|
||||
return /** @type {ol.geom.Geometry} */ (
|
||||
ol.format.Feature.transformWithOptions(geometry, false, context));
|
||||
} else {
|
||||
return undefined;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {Node} node Node.
|
||||
* @param {Array.<*>} objectStack Object stack.
|
||||
* @return {ol.Feature} Feature.
|
||||
*/
|
||||
ol.format.GMLBase.prototype.readFeatureElement = function(node, objectStack) {
|
||||
var n;
|
||||
var fid = node.getAttribute('fid') ||
|
||||
ol.xml.getAttributeNS(node, 'http://www.opengis.net/gml', 'id');
|
||||
var values = {}, geometryName;
|
||||
for (n = node.firstElementChild; !goog.isNull(n);
|
||||
n = n.nextElementSibling) {
|
||||
var localName = ol.xml.getLocalName(n);
|
||||
// Assume attribute elements have one child node and that the child
|
||||
// is a text node. Otherwise assume it is a geometry node.
|
||||
if (n.childNodes.length === 0 ||
|
||||
(n.childNodes.length === 1 &&
|
||||
n.firstChild.nodeType === 3)) {
|
||||
var value = ol.xml.getAllTextContent(n, false);
|
||||
if (goog.string.isEmpty(value)) {
|
||||
value = undefined;
|
||||
}
|
||||
values[localName] = value;
|
||||
} else {
|
||||
// boundedBy is an extent and must not be considered as a geometry
|
||||
if (localName !== 'boundedBy') {
|
||||
geometryName = localName;
|
||||
}
|
||||
values[localName] = this.readGeometryElement(n, objectStack);
|
||||
}
|
||||
}
|
||||
var feature = new ol.Feature(values);
|
||||
if (goog.isDef(geometryName)) {
|
||||
feature.setGeometryName(geometryName);
|
||||
}
|
||||
if (fid) {
|
||||
feature.setId(fid);
|
||||
}
|
||||
return feature;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {Node} node Node.
|
||||
* @param {Array.<*>} objectStack Object stack.
|
||||
* @return {ol.geom.Point|undefined} Point.
|
||||
*/
|
||||
ol.format.GMLBase.prototype.readPoint = function(node, objectStack) {
|
||||
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
|
||||
goog.asserts.assert(node.localName == 'Point');
|
||||
var flatCoordinates =
|
||||
this.readFlatCoordinatesFromNode_(node, objectStack);
|
||||
if (goog.isDefAndNotNull(flatCoordinates)) {
|
||||
var point = new ol.geom.Point(null);
|
||||
goog.asserts.assert(flatCoordinates.length == 3);
|
||||
point.setFlatCoordinates(ol.geom.GeometryLayout.XYZ, flatCoordinates);
|
||||
return point;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {Node} node Node.
|
||||
* @param {Array.<*>} objectStack Object stack.
|
||||
* @return {ol.geom.MultiPoint|undefined} MultiPoint.
|
||||
*/
|
||||
ol.format.GMLBase.prototype.readMultiPoint = function(node, objectStack) {
|
||||
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
|
||||
goog.asserts.assert(node.localName == 'MultiPoint');
|
||||
var coordinates = ol.xml.pushParseAndPop(
|
||||
/** @type {Array.<Array.<number>>} */ ([]),
|
||||
this.MULTIPOINT_PARSERS_, node, objectStack, this);
|
||||
if (goog.isDef(coordinates)) {
|
||||
return new ol.geom.MultiPoint(coordinates);
|
||||
} else {
|
||||
return undefined;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {Node} node Node.
|
||||
* @param {Array.<*>} objectStack Object stack.
|
||||
* @return {ol.geom.MultiLineString|undefined} MultiLineString.
|
||||
*/
|
||||
ol.format.GMLBase.prototype.readMultiLineString = function(node, objectStack) {
|
||||
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
|
||||
goog.asserts.assert(node.localName == 'MultiLineString');
|
||||
var lineStrings = ol.xml.pushParseAndPop(
|
||||
/** @type {Array.<ol.geom.LineString>} */ ([]),
|
||||
this.MULTILINESTRING_PARSERS_, node, objectStack, this);
|
||||
if (goog.isDef(lineStrings)) {
|
||||
var multiLineString = new ol.geom.MultiLineString(null);
|
||||
multiLineString.setLineStrings(lineStrings);
|
||||
return multiLineString;
|
||||
} else {
|
||||
return undefined;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {Node} node Node.
|
||||
* @param {Array.<*>} objectStack Object stack.
|
||||
* @return {ol.geom.MultiPolygon|undefined} MultiPolygon.
|
||||
*/
|
||||
ol.format.GMLBase.prototype.readMultiPolygon = function(node, objectStack) {
|
||||
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
|
||||
goog.asserts.assert(node.localName == 'MultiPolygon');
|
||||
var polygons = ol.xml.pushParseAndPop(
|
||||
/** @type {Array.<ol.geom.Polygon>} */ ([]),
|
||||
this.MULTIPOLYGON_PARSERS_, node, objectStack, this);
|
||||
if (goog.isDef(polygons)) {
|
||||
var multiPolygon = new ol.geom.MultiPolygon(null);
|
||||
multiPolygon.setPolygons(polygons);
|
||||
return multiPolygon;
|
||||
} else {
|
||||
return undefined;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {Node} node Node.
|
||||
* @param {Array.<*>} objectStack Object stack.
|
||||
* @private
|
||||
*/
|
||||
ol.format.GMLBase.prototype.pointMemberParser_ = function(node, objectStack) {
|
||||
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
|
||||
goog.asserts.assert(node.localName == 'pointMember' ||
|
||||
node.localName == 'pointMembers');
|
||||
ol.xml.parseNode(this.POINTMEMBER_PARSERS_,
|
||||
node, objectStack, this);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {Node} node Node.
|
||||
* @param {Array.<*>} objectStack Object stack.
|
||||
* @private
|
||||
*/
|
||||
ol.format.GMLBase.prototype.lineStringMemberParser_ =
|
||||
function(node, objectStack) {
|
||||
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
|
||||
goog.asserts.assert(node.localName == 'lineStringMember' ||
|
||||
node.localName == 'lineStringMembers');
|
||||
ol.xml.parseNode(this.LINESTRINGMEMBER_PARSERS_,
|
||||
node, objectStack, this);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {Node} node Node.
|
||||
* @param {Array.<*>} objectStack Object stack.
|
||||
* @private
|
||||
*/
|
||||
ol.format.GMLBase.prototype.polygonMemberParser_ =
|
||||
function(node, objectStack) {
|
||||
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
|
||||
goog.asserts.assert(node.localName == 'polygonMember' ||
|
||||
node.localName == 'polygonMembers');
|
||||
ol.xml.parseNode(this.POLYGONMEMBER_PARSERS_, node,
|
||||
objectStack, this);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {Node} node Node.
|
||||
* @param {Array.<*>} objectStack Object stack.
|
||||
* @return {ol.geom.LineString|undefined} LineString.
|
||||
*/
|
||||
ol.format.GMLBase.prototype.readLineString = function(node, objectStack) {
|
||||
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
|
||||
goog.asserts.assert(node.localName == 'LineString');
|
||||
var flatCoordinates =
|
||||
this.readFlatCoordinatesFromNode_(node, objectStack);
|
||||
if (goog.isDefAndNotNull(flatCoordinates)) {
|
||||
var lineString = new ol.geom.LineString(null);
|
||||
lineString.setFlatCoordinates(ol.geom.GeometryLayout.XYZ, flatCoordinates);
|
||||
return lineString;
|
||||
} else {
|
||||
return undefined;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {Node} node Node.
|
||||
* @param {Array.<*>} objectStack Object stack.
|
||||
* @private
|
||||
* @return {Array.<number>|undefined} LinearRing flat coordinates.
|
||||
*/
|
||||
ol.format.GMLBase.prototype.readFlatLinearRing_ = function(node, objectStack) {
|
||||
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
|
||||
goog.asserts.assert(node.localName == 'LinearRing');
|
||||
var ring = ol.xml.pushParseAndPop(/** @type {Array.<number>} */(null),
|
||||
this.GEOMETRY_FLAT_COORDINATES_PARSERS_, node,
|
||||
objectStack, this);
|
||||
if (goog.isDefAndNotNull(ring)) {
|
||||
return ring;
|
||||
} else {
|
||||
return undefined;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {Node} node Node.
|
||||
* @param {Array.<*>} objectStack Object stack.
|
||||
* @return {ol.geom.LinearRing|undefined} LinearRing.
|
||||
*/
|
||||
ol.format.GMLBase.prototype.readLinearRing = function(node, objectStack) {
|
||||
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
|
||||
goog.asserts.assert(node.localName == 'LinearRing');
|
||||
var flatCoordinates =
|
||||
this.readFlatCoordinatesFromNode_(node, objectStack);
|
||||
if (goog.isDef(flatCoordinates)) {
|
||||
var ring = new ol.geom.LinearRing(null);
|
||||
ring.setFlatCoordinates(ol.geom.GeometryLayout.XYZ, flatCoordinates);
|
||||
return ring;
|
||||
} else {
|
||||
return undefined;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {Node} node Node.
|
||||
* @param {Array.<*>} objectStack Object stack.
|
||||
* @return {ol.geom.Polygon|undefined} Polygon.
|
||||
*/
|
||||
ol.format.GMLBase.prototype.readPolygon = function(node, objectStack) {
|
||||
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
|
||||
goog.asserts.assert(node.localName == 'Polygon');
|
||||
var flatLinearRings = ol.xml.pushParseAndPop(
|
||||
/** @type {Array.<Array.<number>>} */ ([null]),
|
||||
this.FLAT_LINEAR_RINGS_PARSERS_, node, objectStack, this);
|
||||
if (goog.isDef(flatLinearRings) &&
|
||||
!goog.isNull(flatLinearRings[0])) {
|
||||
var polygon = new ol.geom.Polygon(null);
|
||||
var flatCoordinates = flatLinearRings[0];
|
||||
var ends = [flatCoordinates.length];
|
||||
var i, ii;
|
||||
for (i = 1, ii = flatLinearRings.length; i < ii; ++i) {
|
||||
goog.array.extend(flatCoordinates, flatLinearRings[i]);
|
||||
ends.push(flatCoordinates.length);
|
||||
}
|
||||
polygon.setFlatCoordinates(
|
||||
ol.geom.GeometryLayout.XYZ, flatCoordinates, ends);
|
||||
return polygon;
|
||||
} else {
|
||||
return undefined;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {Node} node Node.
|
||||
* @param {Array.<*>} objectStack Object stack.
|
||||
* @private
|
||||
* @return {Array.<number>} Flat coordinates.
|
||||
*/
|
||||
ol.format.GMLBase.prototype.readFlatCoordinatesFromNode_ =
|
||||
function(node, objectStack) {
|
||||
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
|
||||
return /** @type {Array.<number>} */ (ol.xml.pushParseAndPop(
|
||||
null,
|
||||
this.GEOMETRY_FLAT_COORDINATES_PARSERS_, node,
|
||||
objectStack, this));
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @const
|
||||
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
|
||||
* @private
|
||||
*/
|
||||
ol.format.GMLBase.prototype.MULTIPOINT_PARSERS_ = Object({
|
||||
'http://www.opengis.net/gml' : {
|
||||
'pointMember': ol.xml.makeArrayPusher(
|
||||
ol.format.GMLBase.prototype.pointMemberParser_),
|
||||
'pointMembers': ol.xml.makeArrayPusher(
|
||||
ol.format.GMLBase.prototype.pointMemberParser_)
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
/**
|
||||
* @const
|
||||
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
|
||||
* @private
|
||||
*/
|
||||
ol.format.GMLBase.prototype.MULTILINESTRING_PARSERS_ = Object({
|
||||
'http://www.opengis.net/gml' : {
|
||||
'lineStringMember': ol.xml.makeArrayPusher(
|
||||
ol.format.GMLBase.prototype.lineStringMemberParser_),
|
||||
'lineStringMembers': ol.xml.makeArrayPusher(
|
||||
ol.format.GMLBase.prototype.lineStringMemberParser_)
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
/**
|
||||
* @const
|
||||
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
|
||||
* @private
|
||||
*/
|
||||
ol.format.GMLBase.prototype.MULTIPOLYGON_PARSERS_ = Object({
|
||||
'http://www.opengis.net/gml' : {
|
||||
'polygonMember': ol.xml.makeArrayPusher(
|
||||
ol.format.GMLBase.prototype.polygonMemberParser_),
|
||||
'polygonMembers': ol.xml.makeArrayPusher(
|
||||
ol.format.GMLBase.prototype.polygonMemberParser_)
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
/**
|
||||
* @const
|
||||
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
|
||||
* @private
|
||||
*/
|
||||
ol.format.GMLBase.prototype.POINTMEMBER_PARSERS_ = Object({
|
||||
'http://www.opengis.net/gml' : {
|
||||
'Point': ol.xml.makeArrayPusher(
|
||||
ol.format.GMLBase.prototype.readFlatCoordinatesFromNode_)
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
/**
|
||||
* @const
|
||||
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
|
||||
* @private
|
||||
*/
|
||||
ol.format.GMLBase.prototype.LINESTRINGMEMBER_PARSERS_ = Object({
|
||||
'http://www.opengis.net/gml' : {
|
||||
'LineString': ol.xml.makeArrayPusher(
|
||||
ol.format.GMLBase.prototype.readLineString)
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
/**
|
||||
* @const
|
||||
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
|
||||
* @private
|
||||
*/
|
||||
ol.format.GMLBase.prototype.POLYGONMEMBER_PARSERS_ = Object({
|
||||
'http://www.opengis.net/gml' : {
|
||||
'Polygon': ol.xml.makeArrayPusher(
|
||||
ol.format.GMLBase.prototype.readPolygon)
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
/**
|
||||
* @const
|
||||
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
|
||||
* @protected
|
||||
*/
|
||||
ol.format.GMLBase.prototype.RING_PARSERS = Object({
|
||||
'http://www.opengis.net/gml' : {
|
||||
'LinearRing': ol.xml.makeReplacer(
|
||||
ol.format.GMLBase.prototype.readFlatLinearRing_)
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
ol.format.GMLBase.prototype.readGeometryFromNode =
|
||||
function(node, opt_options) {
|
||||
var geometry = this.readGeometryElement(node,
|
||||
[this.getReadOptions(node, goog.isDef(opt_options) ? opt_options : {})]);
|
||||
return goog.isDef(geometry) ? geometry : null;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Read all features from a GML FeatureCollection.
|
||||
*
|
||||
* @function
|
||||
* @param {ArrayBuffer|Document|Node|Object|string} source Source.
|
||||
* @param {olx.format.ReadOptions=} opt_options Options.
|
||||
* @return {Array.<ol.Feature>} Features.
|
||||
* @api stable
|
||||
*/
|
||||
ol.format.GMLBase.prototype.readFeatures;
|
||||
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
ol.format.GMLBase.prototype.readFeaturesFromNode =
|
||||
function(node, opt_options) {
|
||||
var options = {
|
||||
featureType: this.featureType,
|
||||
featureNS: this.featureNS
|
||||
};
|
||||
if (goog.isDef(opt_options)) {
|
||||
goog.object.extend(options, this.getReadOptions(node, opt_options));
|
||||
}
|
||||
return this.readFeatures_(node, [options]);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
ol.format.GMLBase.prototype.readProjectionFromNode = function(node) {
|
||||
return ol.proj.get(goog.isDef(this.srsName_) ? this.srsName_ :
|
||||
node.firstElementChild.getAttribute('srsName'));
|
||||
};
|
||||
@@ -100,7 +100,7 @@ ol.format.GPX.parseLink_ = function(node, objectStack) {
|
||||
if (!goog.isNull(href)) {
|
||||
goog.object.set(values, 'link', href);
|
||||
}
|
||||
ol.xml.parse(ol.format.GPX.LINK_PARSERS_, node, objectStack);
|
||||
ol.xml.parseNode(ol.format.GPX.LINK_PARSERS_, node, objectStack);
|
||||
};
|
||||
|
||||
|
||||
@@ -164,7 +164,7 @@ ol.format.GPX.parseTrkSeg_ = function(node, objectStack) {
|
||||
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
|
||||
goog.asserts.assert(node.localName == 'trkseg');
|
||||
var values = /** @type {Object} */ (objectStack[objectStack.length - 1]);
|
||||
ol.xml.parse(ol.format.GPX.TRKSEG_PARSERS_, node, objectStack);
|
||||
ol.xml.parseNode(ol.format.GPX.TRKSEG_PARSERS_, node, objectStack);
|
||||
var flatCoordinates = /** @type {Array.<number>} */
|
||||
(goog.object.get(values, 'flatCoordinates'));
|
||||
var ends = /** @type {Array.<number>} */ (goog.object.get(values, 'ends'));
|
||||
@@ -869,16 +869,22 @@ ol.format.GPX.GPX_SERIALIZERS_ = ol.xml.makeStructureNS(
|
||||
* @function
|
||||
* @param {Array.<ol.Feature>} features Features.
|
||||
* @param {olx.format.WriteOptions=} opt_options Write options.
|
||||
* @return {Node} Result.
|
||||
* @return {string} Result.
|
||||
* @api stable
|
||||
*/
|
||||
ol.format.GPX.prototype.writeFeatures;
|
||||
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
* Encode an array of features in the GPX format as an XML node.
|
||||
*
|
||||
* @param {Array.<ol.Feature>} features Features.
|
||||
* @param {olx.format.WriteOptions=} opt_options Options.
|
||||
* @return {Node} Node.
|
||||
* @api
|
||||
*/
|
||||
ol.format.GPX.prototype.writeFeaturesNode = function(features, opt_options) {
|
||||
opt_options = this.adaptOptions(opt_options);
|
||||
//FIXME Serialize metadata
|
||||
var gpx = ol.xml.createElementNS('http://www.topografix.com/GPX/1/1', 'gpx');
|
||||
|
||||
|
||||
@@ -122,14 +122,13 @@ ol.format.JSONFeature.prototype.readProjectionFromObject = goog.abstractMethod;
|
||||
* @inheritDoc
|
||||
*/
|
||||
ol.format.JSONFeature.prototype.writeFeature = function(feature, opt_options) {
|
||||
return this.writeFeatureObject(feature, this.adaptOptions(opt_options));
|
||||
return goog.json.serialize(this.writeFeatureObject(feature, opt_options));
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.Feature} feature Feature.
|
||||
* @param {olx.format.WriteOptions=} opt_options Write options.
|
||||
* @protected
|
||||
* @return {Object} Object.
|
||||
*/
|
||||
ol.format.JSONFeature.prototype.writeFeatureObject = goog.abstractMethod;
|
||||
@@ -140,14 +139,13 @@ ol.format.JSONFeature.prototype.writeFeatureObject = goog.abstractMethod;
|
||||
*/
|
||||
ol.format.JSONFeature.prototype.writeFeatures = function(
|
||||
features, opt_options) {
|
||||
return this.writeFeaturesObject(features, this.adaptOptions(opt_options));
|
||||
return goog.json.serialize(this.writeFeaturesObject(features, opt_options));
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {Array.<ol.Feature>} features Features.
|
||||
* @param {olx.format.WriteOptions=} opt_options Write options.
|
||||
* @protected
|
||||
* @return {Object} Object.
|
||||
*/
|
||||
ol.format.JSONFeature.prototype.writeFeaturesObject = goog.abstractMethod;
|
||||
@@ -158,14 +156,13 @@ ol.format.JSONFeature.prototype.writeFeaturesObject = goog.abstractMethod;
|
||||
*/
|
||||
ol.format.JSONFeature.prototype.writeGeometry = function(
|
||||
geometry, opt_options) {
|
||||
return this.writeGeometryObject(geometry, this.adaptOptions(opt_options));
|
||||
return goog.json.serialize(this.writeGeometryObject(geometry, opt_options));
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.geom.Geometry} geometry Geometry.
|
||||
* @param {olx.format.WriteOptions=} opt_options Write options.
|
||||
* @protected
|
||||
* @return {Object} Object.
|
||||
*/
|
||||
ol.format.JSONFeature.prototype.writeGeometryObject = goog.abstractMethod;
|
||||
|
||||
@@ -14,7 +14,6 @@ goog.require('goog.math');
|
||||
goog.require('goog.object');
|
||||
goog.require('goog.string');
|
||||
goog.require('ol.Feature');
|
||||
goog.require('ol.array');
|
||||
goog.require('ol.color');
|
||||
goog.require('ol.feature');
|
||||
goog.require('ol.format.Feature');
|
||||
@@ -850,7 +849,7 @@ ol.format.KML.readMultiGeometry_ = function(node, objectStack) {
|
||||
geometry = geometries[i];
|
||||
goog.asserts.assertInstanceof(geometry, ol.geom.Point);
|
||||
goog.asserts.assert(geometry.getLayout() == layout);
|
||||
ol.array.safeExtend(flatCoordinates, geometry.getFlatCoordinates());
|
||||
goog.array.extend(flatCoordinates, geometry.getFlatCoordinates());
|
||||
}
|
||||
var multiPoint = new ol.geom.MultiPoint(null);
|
||||
multiPoint.setFlatCoordinates(layout, flatCoordinates);
|
||||
@@ -916,7 +915,7 @@ ol.format.KML.readPolygon_ = function(node, objectStack) {
|
||||
var ends = [flatCoordinates.length];
|
||||
var i, ii;
|
||||
for (i = 1, ii = flatLinearRings.length; i < ii; ++i) {
|
||||
ol.array.safeExtend(flatCoordinates, flatLinearRings[i]);
|
||||
goog.array.extend(flatCoordinates, flatLinearRings[i]);
|
||||
ends.push(flatCoordinates.length);
|
||||
}
|
||||
polygon.setFlatCoordinates(
|
||||
@@ -1000,7 +999,7 @@ ol.format.KML.DataParser_ = function(node, objectStack) {
|
||||
ol.format.KML.ExtendedDataParser_ = function(node, objectStack) {
|
||||
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
|
||||
goog.asserts.assert(node.localName == 'ExtendedData');
|
||||
ol.xml.parse(ol.format.KML.EXTENDED_DATA_PARSERS_, node, objectStack);
|
||||
ol.xml.parseNode(ol.format.KML.EXTENDED_DATA_PARSERS_, node, objectStack);
|
||||
};
|
||||
|
||||
|
||||
@@ -1066,7 +1065,7 @@ ol.format.KML.PlacemarkStyleMapParser_ = function(node, objectStack) {
|
||||
ol.format.KML.SchemaDataParser_ = function(node, objectStack) {
|
||||
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
|
||||
goog.asserts.assert(node.localName == 'SchemaData');
|
||||
ol.xml.parse(ol.format.KML.SCHEMA_DATA_PARSERS_, node, objectStack);
|
||||
ol.xml.parseNode(ol.format.KML.SCHEMA_DATA_PARSERS_, node, objectStack);
|
||||
};
|
||||
|
||||
|
||||
@@ -1655,7 +1654,7 @@ ol.format.KML.prototype.readName = function(source) {
|
||||
} else if (ol.xml.isNode(source)) {
|
||||
return this.readNameFromNode(/** @type {Node} */ (source));
|
||||
} else if (goog.isString(source)) {
|
||||
var doc = ol.xml.load(source);
|
||||
var doc = ol.xml.parse(source);
|
||||
return this.readNameFromDocument(doc);
|
||||
} else {
|
||||
goog.asserts.fail();
|
||||
@@ -2581,16 +2580,22 @@ ol.format.KML.OUTER_BOUNDARY_NODE_FACTORY_ =
|
||||
* @function
|
||||
* @param {Array.<ol.Feature>} features Features.
|
||||
* @param {olx.format.WriteOptions=} opt_options Options.
|
||||
* @return {Node} Result.
|
||||
* @return {string} Result.
|
||||
* @api stable
|
||||
*/
|
||||
ol.format.KML.prototype.writeFeatures;
|
||||
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
* Encode an array of features in the KML format as an XML node.
|
||||
*
|
||||
* @param {Array.<ol.Feature>} features Features.
|
||||
* @param {olx.format.WriteOptions=} opt_options Options.
|
||||
* @return {Node} Node.
|
||||
* @api
|
||||
*/
|
||||
ol.format.KML.prototype.writeFeaturesNode = function(features, opt_options) {
|
||||
opt_options = this.adaptOptions(opt_options);
|
||||
var kml = ol.xml.createElementNS(ol.format.KML.NAMESPACE_URIS_[4], 'kml');
|
||||
var xmlnsUri = 'http://www.w3.org/2000/xmlns/';
|
||||
var xmlSchemaInstanceUri = 'http://www.w3.org/2001/XMLSchema-instance';
|
||||
|
||||
@@ -5,12 +5,17 @@ goog.require('ol.Feature');
|
||||
goog.require('ol.format.Feature');
|
||||
goog.require('ol.format.TextFeature');
|
||||
goog.require('ol.geom.LineString');
|
||||
goog.require('ol.geom.flat.flip');
|
||||
goog.require('ol.geom.flat.inflate');
|
||||
goog.require('ol.proj');
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @classdesc
|
||||
* Feature format for reading and writing data in the Encoded
|
||||
* Polyline Algorithm Format.
|
||||
*
|
||||
* @constructor
|
||||
* @extends {ol.format.TextFeature}
|
||||
* @param {olx.format.PolylineOptions=} opt_options
|
||||
@@ -250,7 +255,8 @@ ol.format.Polyline.encodeUnsignedInteger = function(num) {
|
||||
|
||||
|
||||
/**
|
||||
* Read the feature from the Polyline source.
|
||||
* Read the feature from the Polyline source. The coordinates are assumed to be
|
||||
* in two dimensions and in latitude, longitude order.
|
||||
*
|
||||
* @function
|
||||
* @param {ArrayBuffer|Document|Node|Object|string} source Source.
|
||||
@@ -311,6 +317,8 @@ ol.format.Polyline.prototype.readGeometry;
|
||||
ol.format.Polyline.prototype.readGeometryFromText =
|
||||
function(text, opt_options) {
|
||||
var flatCoordinates = ol.format.Polyline.decodeDeltas(text, 2, this.factor_);
|
||||
ol.geom.flat.flip.flipXY(
|
||||
flatCoordinates, 0, flatCoordinates.length, 2, flatCoordinates);
|
||||
var coordinates = ol.geom.flat.inflate.coordinates(
|
||||
flatCoordinates, 0, flatCoordinates.length, 2);
|
||||
|
||||
@@ -387,5 +395,7 @@ ol.format.Polyline.prototype.writeGeometryText =
|
||||
geometry, true, this.adaptOptions(opt_options)));
|
||||
var flatCoordinates = geometry.getFlatCoordinates();
|
||||
var stride = geometry.getStride();
|
||||
ol.geom.flat.flip.flipXY(
|
||||
flatCoordinates, 0, flatCoordinates.length, stride, flatCoordinates);
|
||||
return ol.format.Polyline.encodeDeltas(flatCoordinates, stride, this.factor_);
|
||||
};
|
||||
|
||||
@@ -3,7 +3,8 @@ goog.provide('ol.format.WFS');
|
||||
goog.require('goog.asserts');
|
||||
goog.require('goog.dom.NodeType');
|
||||
goog.require('goog.object');
|
||||
goog.require('ol.format.GML');
|
||||
goog.require('ol.format.GML3');
|
||||
goog.require('ol.format.GMLBase');
|
||||
goog.require('ol.format.XMLFeature');
|
||||
goog.require('ol.format.XSD');
|
||||
goog.require('ol.geom.Geometry');
|
||||
@@ -15,8 +16,9 @@ goog.require('ol.xml');
|
||||
/**
|
||||
* @classdesc
|
||||
* Feature format for reading and writing data in the WFS format.
|
||||
* Currently only supports WFS version 1.1.0.
|
||||
* Also see {@link ol.format.GML} which is used by this format.
|
||||
* By default, supports WFS version 1.1.0. You can pass a GML format
|
||||
* as option if you want to read a WFS that contains GML2 (WFS 1.0.0).
|
||||
* Also see {@link ol.format.GMLBase} which is used by this format.
|
||||
*
|
||||
* @constructor
|
||||
* @param {olx.format.WFSOptions=} opt_options
|
||||
@@ -25,8 +27,7 @@ goog.require('ol.xml');
|
||||
* @api stable
|
||||
*/
|
||||
ol.format.WFS = function(opt_options) {
|
||||
var options = /** @type {olx.format.WFSOptions} */
|
||||
(goog.isDef(opt_options) ? opt_options : {});
|
||||
var options = goog.isDef(opt_options) ? opt_options : {};
|
||||
|
||||
/**
|
||||
* @private
|
||||
@@ -40,12 +41,19 @@ ol.format.WFS = function(opt_options) {
|
||||
*/
|
||||
this.featureNS_ = options.featureNS;
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @type {ol.format.GMLBase}
|
||||
*/
|
||||
this.gmlFormat_ = goog.isDef(options.gmlFormat) ?
|
||||
options.gmlFormat : new ol.format.GML3();
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @type {string}
|
||||
*/
|
||||
this.schemaLocation_ = goog.isDef(options.schemaLocation) ?
|
||||
options.schemaLocation : ol.format.WFS.schemaLocation_;
|
||||
options.schemaLocation : ol.format.WFS.SCHEMA_LOCATION;
|
||||
|
||||
goog.base(this);
|
||||
};
|
||||
@@ -56,14 +64,14 @@ goog.inherits(ol.format.WFS, ol.format.XMLFeature);
|
||||
* @const
|
||||
* @type {string}
|
||||
*/
|
||||
ol.format.WFS.featurePrefix = 'feature';
|
||||
ol.format.WFS.FEATURE_PREFIX = 'feature';
|
||||
|
||||
|
||||
/**
|
||||
* @const
|
||||
* @type {string}
|
||||
*/
|
||||
ol.format.WFS.xmlns = 'http://www.w3.org/2000/xmlns/';
|
||||
ol.format.WFS.XMLNS = 'http://www.w3.org/2000/xmlns/';
|
||||
|
||||
|
||||
/**
|
||||
@@ -89,9 +97,8 @@ ol.format.WFS.TransactionResponse;
|
||||
/**
|
||||
* @const
|
||||
* @type {string}
|
||||
* @private
|
||||
*/
|
||||
ol.format.WFS.schemaLocation_ = 'http://www.opengis.net/wfs ' +
|
||||
ol.format.WFS.SCHEMA_LOCATION = 'http://www.opengis.net/wfs ' +
|
||||
'http://schemas.opengis.net/wfs/1.1.0/wfs.xsd';
|
||||
|
||||
|
||||
@@ -119,7 +126,8 @@ ol.format.WFS.prototype.readFeaturesFromNode = function(node, opt_options) {
|
||||
goog.isDef(opt_options) ? opt_options : {}));
|
||||
var objectStack = [context];
|
||||
var features = ol.xml.pushParseAndPop([],
|
||||
ol.format.GML.FEATURE_COLLECTION_PARSERS, node, objectStack);
|
||||
this.gmlFormat_.FEATURE_COLLECTION_PARSERS, node,
|
||||
objectStack, this.gmlFormat_);
|
||||
if (!goog.isDef(features)) {
|
||||
features = [];
|
||||
}
|
||||
@@ -139,7 +147,7 @@ ol.format.WFS.prototype.readTransactionResponse = function(source) {
|
||||
} else if (ol.xml.isNode(source)) {
|
||||
return this.readTransactionResponseFromNode(/** @type {Node} */ (source));
|
||||
} else if (goog.isString(source)) {
|
||||
var doc = ol.xml.load(source);
|
||||
var doc = ol.xml.parse(source);
|
||||
return this.readTransactionResponseFromDocument(doc);
|
||||
} else {
|
||||
goog.asserts.fail();
|
||||
@@ -162,7 +170,7 @@ ol.format.WFS.prototype.readFeatureCollectionMetadata = function(source) {
|
||||
return this.readFeatureCollectionMetadataFromNode(
|
||||
/** @type {Node} */ (source));
|
||||
} else if (goog.isString(source)) {
|
||||
var doc = ol.xml.load(source);
|
||||
var doc = ol.xml.parse(source);
|
||||
return this.readFeatureCollectionMetadataFromDocument(doc);
|
||||
} else {
|
||||
goog.asserts.fail();
|
||||
@@ -196,7 +204,7 @@ ol.format.WFS.prototype.readFeatureCollectionMetadataFromDocument =
|
||||
ol.format.WFS.FEATURE_COLLECTION_PARSERS_ = {
|
||||
'http://www.opengis.net/gml': {
|
||||
'boundedBy': ol.xml.makeObjectPropertySetter(
|
||||
ol.format.GML.readGeometry, 'bounds')
|
||||
ol.format.GMLBase.prototype.readGeometryElement, 'bounds')
|
||||
}
|
||||
};
|
||||
|
||||
@@ -215,7 +223,7 @@ ol.format.WFS.prototype.readFeatureCollectionMetadataFromNode = function(node) {
|
||||
goog.object.set(result, 'numberOfFeatures', value);
|
||||
return ol.xml.pushParseAndPop(
|
||||
/** @type {ol.format.WFS.FeatureCollectionMetadata} */ (result),
|
||||
ol.format.WFS.FEATURE_COLLECTION_PARSERS_, node, []);
|
||||
ol.format.WFS.FEATURE_COLLECTION_PARSERS_, node, [], this.gmlFormat_);
|
||||
};
|
||||
|
||||
|
||||
@@ -268,7 +276,7 @@ ol.format.WFS.OGC_FID_PARSERS_ = {
|
||||
* @private
|
||||
*/
|
||||
ol.format.WFS.fidParser_ = function(node, objectStack) {
|
||||
ol.xml.parse(ol.format.WFS.OGC_FID_PARSERS_, node, objectStack);
|
||||
ol.xml.parseNode(ol.format.WFS.OGC_FID_PARSERS_, node, objectStack);
|
||||
};
|
||||
|
||||
|
||||
@@ -363,7 +371,7 @@ ol.format.WFS.writeFeature_ = function(node, feature, objectStack) {
|
||||
var featureNS = goog.object.get(context, 'featureNS');
|
||||
var child = ol.xml.createElementNS(featureNS, featureType);
|
||||
node.appendChild(child);
|
||||
ol.format.GML.writeFeature(child, feature, objectStack);
|
||||
ol.format.GML3.prototype.writeFeatureElement(child, feature, objectStack);
|
||||
};
|
||||
|
||||
|
||||
@@ -394,10 +402,10 @@ ol.format.WFS.writeDelete_ = function(node, feature, objectStack) {
|
||||
var featureType = goog.object.get(context, 'featureType');
|
||||
var featurePrefix = goog.object.get(context, 'featurePrefix');
|
||||
featurePrefix = goog.isDef(featurePrefix) ? featurePrefix :
|
||||
ol.format.WFS.featurePrefix;
|
||||
ol.format.WFS.FEATURE_PREFIX;
|
||||
var featureNS = goog.object.get(context, 'featureNS');
|
||||
node.setAttribute('typeName', featurePrefix + ':' + featureType);
|
||||
ol.xml.setAttributeNS(node, ol.format.WFS.xmlns, 'xmlns:' + featurePrefix,
|
||||
ol.xml.setAttributeNS(node, ol.format.WFS.XMLNS, 'xmlns:' + featurePrefix,
|
||||
featureNS);
|
||||
var fid = feature.getId();
|
||||
if (goog.isDef(fid)) {
|
||||
@@ -418,10 +426,10 @@ ol.format.WFS.writeUpdate_ = function(node, feature, objectStack) {
|
||||
var featureType = goog.object.get(context, 'featureType');
|
||||
var featurePrefix = goog.object.get(context, 'featurePrefix');
|
||||
featurePrefix = goog.isDef(featurePrefix) ? featurePrefix :
|
||||
ol.format.WFS.featurePrefix;
|
||||
ol.format.WFS.FEATURE_PREFIX;
|
||||
var featureNS = goog.object.get(context, 'featureNS');
|
||||
node.setAttribute('typeName', featurePrefix + ':' + featureType);
|
||||
ol.xml.setAttributeNS(node, ol.format.WFS.xmlns, 'xmlns:' + featurePrefix,
|
||||
ol.xml.setAttributeNS(node, ol.format.WFS.XMLNS, 'xmlns:' + featurePrefix,
|
||||
featureNS);
|
||||
var fid = feature.getId();
|
||||
if (goog.isDef(fid)) {
|
||||
@@ -457,7 +465,8 @@ ol.format.WFS.writeProperty_ = function(node, pair, objectStack) {
|
||||
var value = ol.xml.createElementNS('http://www.opengis.net/wfs', 'Value');
|
||||
node.appendChild(value);
|
||||
if (pair.value instanceof ol.geom.Geometry) {
|
||||
ol.format.GML.writeGeometry(value, pair.value, objectStack);
|
||||
ol.format.GML3.prototype.writeGeometryElement(value,
|
||||
pair.value, objectStack);
|
||||
} else {
|
||||
ol.format.XSD.writeStringTextNode(value, pair.value);
|
||||
}
|
||||
@@ -519,7 +528,7 @@ ol.format.WFS.writeQuery_ = function(node, featureType, objectStack) {
|
||||
node.setAttribute('srsName', srsName);
|
||||
}
|
||||
if (goog.isDef(featureNS)) {
|
||||
ol.xml.setAttributeNS(node, ol.format.WFS.xmlns, 'xmlns:' + featurePrefix,
|
||||
ol.xml.setAttributeNS(node, ol.format.WFS.XMLNS, 'xmlns:' + featurePrefix,
|
||||
featureNS);
|
||||
}
|
||||
var item = goog.object.clone(context);
|
||||
@@ -564,7 +573,7 @@ ol.format.WFS.writeOgcBBOX_ = function(node, bbox, objectStack) {
|
||||
var bboxNode = ol.xml.createElementNS('http://www.opengis.net/ogc', 'BBOX');
|
||||
node.appendChild(bboxNode);
|
||||
ol.format.WFS.writeOgcPropertyName_(bboxNode, geometryName, objectStack);
|
||||
ol.format.GML.writeGeometry(bboxNode, bbox, objectStack);
|
||||
ol.format.GML3.prototype.writeGeometryElement(bboxNode, bbox, objectStack);
|
||||
};
|
||||
|
||||
|
||||
@@ -746,7 +755,7 @@ ol.format.WFS.prototype.readProjectionFromNode = function(node) {
|
||||
(n.childNodes.length === 1 &&
|
||||
n.firstChild.nodeType === 3))) {
|
||||
var objectStack = [{}];
|
||||
ol.format.GML.readGeometry(n, objectStack);
|
||||
this.gmlFormat_.readGeometryElement(n, objectStack);
|
||||
return ol.proj.get(objectStack.pop().srsName);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -582,7 +582,7 @@ ol.format.WKT.Parser.prototype.parse = function() {
|
||||
|
||||
|
||||
/**
|
||||
* @return {!ol.geom.Geometry|!ol.geom.GeometryCollection} The geometry.
|
||||
* @return {!(ol.geom.Geometry|ol.geom.GeometryCollection)} The geometry.
|
||||
* @private
|
||||
*/
|
||||
ol.format.WKT.Parser.prototype.parseGeometry_ = function() {
|
||||
@@ -602,7 +602,7 @@ ol.format.WKT.Parser.prototype.parseGeometry_ = function() {
|
||||
return new ctor(coordinates);
|
||||
}
|
||||
}
|
||||
this.raiseError_();
|
||||
throw new Error(this.formatErrorMessage_());
|
||||
};
|
||||
|
||||
|
||||
@@ -622,7 +622,7 @@ ol.format.WKT.Parser.prototype.parseGeometryCollectionText_ = function() {
|
||||
} else if (this.isEmptyGeometry_()) {
|
||||
return [];
|
||||
}
|
||||
this.raiseError_();
|
||||
throw new Error(this.formatErrorMessage_());
|
||||
};
|
||||
|
||||
|
||||
@@ -639,7 +639,7 @@ ol.format.WKT.Parser.prototype.parsePointText_ = function() {
|
||||
} else if (this.isEmptyGeometry_()) {
|
||||
return null;
|
||||
}
|
||||
this.raiseError_();
|
||||
throw new Error(this.formatErrorMessage_());
|
||||
};
|
||||
|
||||
|
||||
@@ -656,7 +656,7 @@ ol.format.WKT.Parser.prototype.parseLineStringText_ = function() {
|
||||
} else if (this.isEmptyGeometry_()) {
|
||||
return [];
|
||||
}
|
||||
this.raiseError_();
|
||||
throw new Error(this.formatErrorMessage_());
|
||||
};
|
||||
|
||||
|
||||
@@ -673,7 +673,7 @@ ol.format.WKT.Parser.prototype.parsePolygonText_ = function() {
|
||||
} else if (this.isEmptyGeometry_()) {
|
||||
return [];
|
||||
}
|
||||
this.raiseError_();
|
||||
throw new Error(this.formatErrorMessage_());
|
||||
};
|
||||
|
||||
|
||||
@@ -695,7 +695,7 @@ ol.format.WKT.Parser.prototype.parseMultiPointText_ = function() {
|
||||
} else if (this.isEmptyGeometry_()) {
|
||||
return [];
|
||||
}
|
||||
this.raiseError_();
|
||||
throw new Error(this.formatErrorMessage_());
|
||||
};
|
||||
|
||||
|
||||
@@ -713,7 +713,7 @@ ol.format.WKT.Parser.prototype.parseMultiLineStringText_ = function() {
|
||||
} else if (this.isEmptyGeometry_()) {
|
||||
return [];
|
||||
}
|
||||
this.raiseError_();
|
||||
throw new Error(this.formatErrorMessage_());
|
||||
};
|
||||
|
||||
|
||||
@@ -730,7 +730,7 @@ ol.format.WKT.Parser.prototype.parseMultiPolygonText_ = function() {
|
||||
} else if (this.isEmptyGeometry_()) {
|
||||
return [];
|
||||
}
|
||||
this.raiseError_();
|
||||
throw new Error(this.formatErrorMessage_());
|
||||
};
|
||||
|
||||
|
||||
@@ -751,7 +751,7 @@ ol.format.WKT.Parser.prototype.parsePoint_ = function() {
|
||||
if (coordinates.length == this.dimension_) {
|
||||
return coordinates;
|
||||
}
|
||||
this.raiseError_();
|
||||
throw new Error(this.formatErrorMessage_());
|
||||
};
|
||||
|
||||
|
||||
@@ -822,12 +822,13 @@ ol.format.WKT.Parser.prototype.isEmptyGeometry_ = function() {
|
||||
|
||||
|
||||
/**
|
||||
* Create an error message for an unexpected token error.
|
||||
* @return {string} Error message.
|
||||
* @private
|
||||
*/
|
||||
ol.format.WKT.Parser.prototype.raiseError_ = function() {
|
||||
throw new Error('Unexpected `' + this.token_.value +
|
||||
'` at position ' + this.token_.position +
|
||||
' in `' + this.lexer_.wkt + '`');
|
||||
ol.format.WKT.Parser.prototype.formatErrorMessage_ = function() {
|
||||
return 'Unexpected `' + this.token_.value + '` at position ' +
|
||||
this.token_.position + ' in `' + this.lexer_.wkt + '`';
|
||||
};
|
||||
|
||||
|
||||
|
||||
146
src/ol/format/wmsgetfeatureinfoformat.js
Normal file
146
src/ol/format/wmsgetfeatureinfoformat.js
Normal file
@@ -0,0 +1,146 @@
|
||||
goog.provide('ol.format.WMSGetFeatureInfo');
|
||||
|
||||
goog.require('goog.array');
|
||||
goog.require('goog.asserts');
|
||||
goog.require('goog.dom');
|
||||
goog.require('goog.dom.NodeType');
|
||||
goog.require('goog.object');
|
||||
goog.require('goog.string');
|
||||
goog.require('ol.format.GML');
|
||||
goog.require('ol.format.GML2');
|
||||
goog.require('ol.format.XMLFeature');
|
||||
goog.require('ol.xml');
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @classdesc
|
||||
* Format for reading WMSGetFeatureInfo format. It uses
|
||||
* {@link ol.format.GML2} to read features.
|
||||
*
|
||||
* @constructor
|
||||
* @extends {ol.format.XMLFeature}
|
||||
* @api
|
||||
*/
|
||||
ol.format.WMSGetFeatureInfo = function() {
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @type {string}
|
||||
*/
|
||||
this.featureNS_ = 'http://mapserver.gis.umn.edu/mapserver';
|
||||
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @type {ol.format.GML2}
|
||||
*/
|
||||
this.gmlFormat_ = new ol.format.GML2();
|
||||
|
||||
goog.base(this);
|
||||
};
|
||||
goog.inherits(ol.format.WMSGetFeatureInfo, ol.format.XMLFeature);
|
||||
|
||||
|
||||
/**
|
||||
* @const
|
||||
* @type {string}
|
||||
* @private
|
||||
*/
|
||||
ol.format.WMSGetFeatureInfo.featureIdentifier_ = '_feature';
|
||||
|
||||
|
||||
/**
|
||||
* @const
|
||||
* @type {string}
|
||||
* @private
|
||||
*/
|
||||
ol.format.WMSGetFeatureInfo.layerIdentifier_ = '_layer';
|
||||
|
||||
|
||||
/**
|
||||
* @param {Node} node Node.
|
||||
* @param {Array.<*>} objectStack Object stack.
|
||||
* @return {Array.<ol.Feature>} Features.
|
||||
* @private
|
||||
*/
|
||||
ol.format.WMSGetFeatureInfo.prototype.readFeatures_ =
|
||||
function(node, objectStack) {
|
||||
|
||||
node.namespaceURI = this.featureNS_;
|
||||
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
|
||||
var localName = ol.xml.getLocalName(node);
|
||||
/** @type {Array.<ol.Feature>} */
|
||||
var features = [];
|
||||
if (node.childNodes.length === 0) {
|
||||
return features;
|
||||
}
|
||||
if (localName == 'msGMLOutput') {
|
||||
goog.array.forEach(node.childNodes, function(layer) {
|
||||
if (layer.nodeType !== goog.dom.NodeType.ELEMENT) {
|
||||
return;
|
||||
}
|
||||
var context = objectStack[0];
|
||||
goog.asserts.assert(goog.isObject(context));
|
||||
|
||||
goog.asserts.assert(layer.localName.indexOf(
|
||||
ol.format.WMSGetFeatureInfo.layerIdentifier_) >= 0);
|
||||
|
||||
var featureType = goog.string.remove(layer.localName,
|
||||
ol.format.WMSGetFeatureInfo.layerIdentifier_) +
|
||||
ol.format.WMSGetFeatureInfo.featureIdentifier_;
|
||||
|
||||
goog.object.set(context, 'featureType', featureType);
|
||||
goog.object.set(context, 'featureNS', this.featureNS_);
|
||||
|
||||
var parsers = {};
|
||||
parsers[featureType] = ol.xml.makeArrayPusher(
|
||||
this.gmlFormat_.readFeatureElement, this.gmlFormat_);
|
||||
var parsersNS = ol.xml.makeParsersNS(
|
||||
[goog.object.get(context, 'featureNS'), null], parsers);
|
||||
layer.namespaceURI = this.featureNS_;
|
||||
var layerFeatures = ol.xml.pushParseAndPop(
|
||||
[], parsersNS, layer, objectStack, this.gmlFormat_);
|
||||
if (goog.isDef(layerFeatures)) {
|
||||
goog.array.extend(features, layerFeatures);
|
||||
}
|
||||
}, this);
|
||||
}
|
||||
if (localName == 'FeatureCollection') {
|
||||
var gmlFeatures = ol.xml.pushParseAndPop([],
|
||||
this.gmlFormat_.FEATURE_COLLECTION_PARSERS, node,
|
||||
[{}], this.gmlFormat_);
|
||||
if (goog.isDef(gmlFeatures)) {
|
||||
features = gmlFeatures;
|
||||
}
|
||||
}
|
||||
return features;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Read all features from a WMSGetFeatureInfo response.
|
||||
*
|
||||
* @function
|
||||
* @param {ArrayBuffer|Document|Node|Object|string} source Source.
|
||||
* @param {olx.format.ReadOptions=} opt_options Options.
|
||||
* @return {Array.<ol.Feature>} Features.
|
||||
* @api stable
|
||||
*/
|
||||
ol.format.WMSGetFeatureInfo.prototype.readFeatures;
|
||||
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
ol.format.WMSGetFeatureInfo.prototype.readFeaturesFromNode =
|
||||
function(node, opt_options) {
|
||||
var options = {
|
||||
'featureType': this.featureType,
|
||||
'featureNS': this.featureNS
|
||||
};
|
||||
if (goog.isDef(opt_options)) {
|
||||
goog.object.extend(options, this.getReadOptions(node, opt_options));
|
||||
}
|
||||
return this.readFeatures_(node, [options]);
|
||||
};
|
||||
@@ -3,6 +3,7 @@ goog.provide('ol.format.XMLFeature');
|
||||
goog.require('goog.array');
|
||||
goog.require('goog.asserts');
|
||||
goog.require('goog.dom.NodeType');
|
||||
goog.require('goog.dom.xml');
|
||||
goog.require('ol.format.Feature');
|
||||
goog.require('ol.format.FormatType');
|
||||
goog.require('ol.proj');
|
||||
@@ -43,7 +44,7 @@ ol.format.XMLFeature.prototype.readFeature = function(source, opt_options) {
|
||||
} else if (ol.xml.isNode(source)) {
|
||||
return this.readFeatureFromNode(/** @type {Node} */ (source), opt_options);
|
||||
} else if (goog.isString(source)) {
|
||||
var doc = ol.xml.load(source);
|
||||
var doc = ol.xml.parse(source);
|
||||
return this.readFeatureFromDocument(doc, opt_options);
|
||||
} else {
|
||||
goog.asserts.fail();
|
||||
@@ -86,7 +87,7 @@ ol.format.XMLFeature.prototype.readFeatures = function(source, opt_options) {
|
||||
} else if (ol.xml.isNode(source)) {
|
||||
return this.readFeaturesFromNode(/** @type {Node} */ (source), opt_options);
|
||||
} else if (goog.isString(source)) {
|
||||
var doc = ol.xml.load(source);
|
||||
var doc = ol.xml.parse(source);
|
||||
return this.readFeaturesFromDocument(doc, opt_options);
|
||||
} else {
|
||||
goog.asserts.fail();
|
||||
@@ -134,7 +135,7 @@ ol.format.XMLFeature.prototype.readGeometry = function(source, opt_options) {
|
||||
} else if (ol.xml.isNode(source)) {
|
||||
return this.readGeometryFromNode(/** @type {Node} */ (source), opt_options);
|
||||
} else if (goog.isString(source)) {
|
||||
var doc = ol.xml.load(source);
|
||||
var doc = ol.xml.parse(source);
|
||||
return this.readGeometryFromDocument(doc, opt_options);
|
||||
} else {
|
||||
goog.asserts.fail();
|
||||
@@ -170,7 +171,7 @@ ol.format.XMLFeature.prototype.readProjection = function(source) {
|
||||
} else if (ol.xml.isNode(source)) {
|
||||
return this.readProjectionFromNode(/** @type {Node} */ (source));
|
||||
} else if (goog.isString(source)) {
|
||||
var doc = ol.xml.load(source);
|
||||
var doc = ol.xml.parse(source);
|
||||
return this.readProjectionFromDocument(doc);
|
||||
} else {
|
||||
goog.asserts.fail();
|
||||
@@ -199,7 +200,9 @@ ol.format.XMLFeature.prototype.readProjectionFromNode = goog.abstractMethod;
|
||||
* @inheritDoc
|
||||
*/
|
||||
ol.format.XMLFeature.prototype.writeFeature = function(feature, opt_options) {
|
||||
return this.writeFeatureNode(feature, this.adaptOptions(opt_options));
|
||||
var node = this.writeFeatureNode(feature, opt_options);
|
||||
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
|
||||
return goog.dom.xml.serialize(/** @type {Element} */(node));
|
||||
};
|
||||
|
||||
|
||||
@@ -216,14 +219,15 @@ ol.format.XMLFeature.prototype.writeFeatureNode = goog.abstractMethod;
|
||||
* @inheritDoc
|
||||
*/
|
||||
ol.format.XMLFeature.prototype.writeFeatures = function(features, opt_options) {
|
||||
return this.writeFeaturesNode(features, this.adaptOptions(opt_options));
|
||||
var node = this.writeFeaturesNode(features, opt_options);
|
||||
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
|
||||
return goog.dom.xml.serialize(/** @type {Element} */(node));
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {Array.<ol.Feature>} features Features.
|
||||
* @param {olx.format.WriteOptions=} opt_options Options.
|
||||
* @protected
|
||||
* @return {Node} Node.
|
||||
*/
|
||||
ol.format.XMLFeature.prototype.writeFeaturesNode = goog.abstractMethod;
|
||||
@@ -233,14 +237,15 @@ ol.format.XMLFeature.prototype.writeFeaturesNode = goog.abstractMethod;
|
||||
* @inheritDoc
|
||||
*/
|
||||
ol.format.XMLFeature.prototype.writeGeometry = function(geometry, opt_options) {
|
||||
return this.writeGeometryNode(geometry, this.adaptOptions(opt_options));
|
||||
var node = this.writeGeometryNode(geometry, opt_options);
|
||||
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
|
||||
return goog.dom.xml.serialize(/** @type {Element} */(node));
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.geom.Geometry} geometry Geometry.
|
||||
* @param {olx.format.WriteOptions=} opt_options Options.
|
||||
* @protected
|
||||
* @return {Node} Node.
|
||||
*/
|
||||
ol.format.XMLFeature.prototype.writeGeometryNode = goog.abstractMethod;
|
||||
|
||||
@@ -25,7 +25,7 @@ ol.format.XML.prototype.read = function(source) {
|
||||
} else if (ol.xml.isNode(source)) {
|
||||
return this.readFromNode(/** @type {Node} */ (source));
|
||||
} else if (goog.isString(source)) {
|
||||
var doc = ol.xml.load(source);
|
||||
var doc = ol.xml.parse(source);
|
||||
return this.readFromDocument(doc);
|
||||
} else {
|
||||
goog.asserts.fail();
|
||||
|
||||
@@ -22,7 +22,7 @@ ol.geom.flat.transform.transform2D =
|
||||
var m13 = goog.vec.Mat4.getElement(transform, 1, 3);
|
||||
var dest = goog.isDef(opt_dest) ? opt_dest : [];
|
||||
var i = 0;
|
||||
var j, jj;
|
||||
var j;
|
||||
for (j = offset; j < end; j += stride) {
|
||||
var x = flatCoordinates[j];
|
||||
var y = flatCoordinates[j + 1];
|
||||
@@ -34,3 +34,32 @@ ol.geom.flat.transform.transform2D =
|
||||
}
|
||||
return dest;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {Array.<number>} flatCoordinates Flat coordinates.
|
||||
* @param {number} offset Offset.
|
||||
* @param {number} end End.
|
||||
* @param {number} stride Stride.
|
||||
* @param {number} deltaX Delta X.
|
||||
* @param {number} deltaY Delta Y.
|
||||
* @param {Array.<number>=} opt_dest Destination.
|
||||
* @return {Array.<number>} Transformed coordinates.
|
||||
*/
|
||||
ol.geom.flat.transform.translate =
|
||||
function(flatCoordinates, offset, end, stride, deltaX, deltaY, opt_dest) {
|
||||
var dest = goog.isDef(opt_dest) ? opt_dest : [];
|
||||
var i = 0;
|
||||
var j, k;
|
||||
for (j = offset; j < end; j += stride) {
|
||||
dest[i++] = flatCoordinates[j] + deltaX;
|
||||
dest[i++] = flatCoordinates[j + 1] + deltaY;
|
||||
for (k = j + 2; k < j + stride; ++k) {
|
||||
dest[i++] = flatCoordinates[k];
|
||||
}
|
||||
}
|
||||
if (goog.isDef(opt_dest) && dest.length != i) {
|
||||
dest.length = i;
|
||||
}
|
||||
return dest;
|
||||
};
|
||||
|
||||
@@ -194,6 +194,16 @@ ol.geom.Geometry.prototype.applyTransform = goog.abstractMethod;
|
||||
ol.geom.Geometry.prototype.intersectsExtent = goog.abstractMethod;
|
||||
|
||||
|
||||
/**
|
||||
* Translate the geometry.
|
||||
* @param {number} deltaX Delta X.
|
||||
* @param {number} deltaY Delta Y.
|
||||
* @function
|
||||
* @api
|
||||
*/
|
||||
ol.geom.Geometry.prototype.translate = goog.abstractMethod;
|
||||
|
||||
|
||||
/**
|
||||
* Transform each coordinate of the geometry from one coordinate reference
|
||||
* system to another. The geometry is modified in place.
|
||||
|
||||
@@ -265,6 +265,7 @@ ol.geom.GeometryCollection.prototype.setGeometriesArray = function(geometries) {
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
* @api stable
|
||||
*/
|
||||
ol.geom.GeometryCollection.prototype.applyTransform = function(transformFn) {
|
||||
var geometries = this.geometries_;
|
||||
@@ -276,6 +277,22 @@ ol.geom.GeometryCollection.prototype.applyTransform = function(transformFn) {
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Translate the geometry.
|
||||
* @param {number} deltaX Delta X.
|
||||
* @param {number} deltaY Delta Y.
|
||||
* @api
|
||||
*/
|
||||
ol.geom.GeometryCollection.prototype.translate = function(deltaX, deltaY) {
|
||||
var geometries = this.geometries_;
|
||||
var i, ii;
|
||||
for (i = 0, ii = geometries.length; i < ii; ++i) {
|
||||
geometries[i].translate(deltaX, deltaY);
|
||||
}
|
||||
this.changed();
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
goog.provide('ol.geom.LineString');
|
||||
|
||||
goog.require('goog.array');
|
||||
goog.require('goog.asserts');
|
||||
goog.require('ol.array');
|
||||
goog.require('ol.extent');
|
||||
goog.require('ol.geom.GeometryType');
|
||||
goog.require('ol.geom.SimpleGeometry');
|
||||
@@ -69,7 +69,7 @@ ol.geom.LineString.prototype.appendCoordinate = function(coordinate) {
|
||||
if (goog.isNull(this.flatCoordinates)) {
|
||||
this.flatCoordinates = coordinate.slice();
|
||||
} else {
|
||||
ol.array.safeExtend(this.flatCoordinates, coordinate);
|
||||
goog.array.extend(this.flatCoordinates, coordinate);
|
||||
}
|
||||
this.changed();
|
||||
};
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
goog.provide('ol.geom.MultiLineString');
|
||||
|
||||
goog.require('goog.array');
|
||||
goog.require('goog.asserts');
|
||||
goog.require('ol.array');
|
||||
goog.require('ol.extent');
|
||||
goog.require('ol.geom.GeometryType');
|
||||
goog.require('ol.geom.LineString');
|
||||
@@ -63,7 +63,7 @@ ol.geom.MultiLineString.prototype.appendLineString = function(lineString) {
|
||||
if (goog.isNull(this.flatCoordinates)) {
|
||||
this.flatCoordinates = lineString.getFlatCoordinates().slice();
|
||||
} else {
|
||||
ol.array.safeExtend(
|
||||
goog.array.extend(
|
||||
this.flatCoordinates, lineString.getFlatCoordinates().slice());
|
||||
}
|
||||
this.ends_.push(this.flatCoordinates.length);
|
||||
@@ -212,7 +212,7 @@ ol.geom.MultiLineString.prototype.getFlatMidpoints = function() {
|
||||
var end = ends[i];
|
||||
var midpoint = ol.geom.flat.interpolate.lineString(
|
||||
flatCoordinates, offset, end, stride, 0.5);
|
||||
ol.array.safeExtend(midpoints, midpoint);
|
||||
goog.array.extend(midpoints, midpoint);
|
||||
offset = end;
|
||||
}
|
||||
return midpoints;
|
||||
@@ -313,7 +313,7 @@ ol.geom.MultiLineString.prototype.setLineStrings = function(lineStrings) {
|
||||
// FIXME better handle the case of non-matching layouts
|
||||
goog.asserts.assert(lineString.getLayout() == layout);
|
||||
}
|
||||
ol.array.safeExtend(flatCoordinates, lineString.getFlatCoordinates());
|
||||
goog.array.extend(flatCoordinates, lineString.getFlatCoordinates());
|
||||
ends.push(flatCoordinates.length);
|
||||
}
|
||||
this.setFlatCoordinates(layout, flatCoordinates, ends);
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
goog.provide('ol.geom.MultiPoint');
|
||||
|
||||
goog.require('goog.array');
|
||||
goog.require('goog.asserts');
|
||||
goog.require('ol.array');
|
||||
goog.require('ol.extent');
|
||||
goog.require('ol.geom.GeometryType');
|
||||
goog.require('ol.geom.Point');
|
||||
@@ -39,7 +39,7 @@ ol.geom.MultiPoint.prototype.appendPoint = function(point) {
|
||||
if (goog.isNull(this.flatCoordinates)) {
|
||||
this.flatCoordinates = point.getFlatCoordinates().slice();
|
||||
} else {
|
||||
ol.array.safeExtend(this.flatCoordinates, point.getFlatCoordinates());
|
||||
goog.array.extend(this.flatCoordinates, point.getFlatCoordinates());
|
||||
}
|
||||
this.changed();
|
||||
};
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
goog.provide('ol.geom.MultiPolygon');
|
||||
|
||||
goog.require('goog.array');
|
||||
goog.require('goog.asserts');
|
||||
goog.require('ol.array');
|
||||
goog.require('ol.extent');
|
||||
goog.require('ol.geom.GeometryType');
|
||||
goog.require('ol.geom.MultiPoint');
|
||||
@@ -97,7 +97,7 @@ ol.geom.MultiPolygon.prototype.appendPolygon = function(polygon) {
|
||||
this.endss_.push();
|
||||
} else {
|
||||
var offset = this.flatCoordinates.length;
|
||||
ol.array.safeExtend(this.flatCoordinates, polygon.getFlatCoordinates());
|
||||
goog.array.extend(this.flatCoordinates, polygon.getFlatCoordinates());
|
||||
ends = polygon.getEnds().slice();
|
||||
var i, ii;
|
||||
for (i = 0, ii = ends.length; i < ii; ++i) {
|
||||
@@ -397,7 +397,7 @@ ol.geom.MultiPolygon.prototype.setPolygons = function(polygons) {
|
||||
for (j = 0, jj = ends.length; j < jj; ++j) {
|
||||
ends[j] += offset;
|
||||
}
|
||||
ol.array.safeExtend(flatCoordinates, polygon.getFlatCoordinates());
|
||||
goog.array.extend(flatCoordinates, polygon.getFlatCoordinates());
|
||||
endss.push(ends);
|
||||
}
|
||||
this.setFlatCoordinates(layout, flatCoordinates, endss);
|
||||
|
||||
@@ -2,7 +2,6 @@ goog.provide('ol.geom.Polygon');
|
||||
|
||||
goog.require('goog.array');
|
||||
goog.require('goog.asserts');
|
||||
goog.require('ol.array');
|
||||
goog.require('ol.extent');
|
||||
goog.require('ol.geom.GeometryType');
|
||||
goog.require('ol.geom.LinearRing');
|
||||
@@ -92,7 +91,7 @@ ol.geom.Polygon.prototype.appendLinearRing = function(linearRing) {
|
||||
if (goog.isNull(this.flatCoordinates)) {
|
||||
this.flatCoordinates = linearRing.getFlatCoordinates().slice();
|
||||
} else {
|
||||
ol.array.safeExtend(this.flatCoordinates, linearRing.getFlatCoordinates());
|
||||
goog.array.extend(this.flatCoordinates, linearRing.getFlatCoordinates());
|
||||
}
|
||||
this.ends_.push(this.flatCoordinates.length);
|
||||
this.changed();
|
||||
@@ -374,3 +373,23 @@ ol.geom.Polygon.circular = function(sphere, center, radius, opt_n) {
|
||||
ol.geom.GeometryLayout.XY, flatCoordinates, [flatCoordinates.length]);
|
||||
return polygon;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Create a polygon from an extent. The layout used is `XY`.
|
||||
* @param {ol.Extent} extent The extent.
|
||||
* @return {ol.geom.Polygon} The polygon.
|
||||
* @api
|
||||
*/
|
||||
ol.geom.Polygon.fromExtent = function(extent) {
|
||||
var minX = extent[0];
|
||||
var minY = extent[1];
|
||||
var maxX = extent[2];
|
||||
var maxY = extent[3];
|
||||
var flatCoordinates =
|
||||
[minX, minY, minX, maxY, maxX, maxY, maxX, minY, minX, minY];
|
||||
var polygon = new ol.geom.Polygon(null);
|
||||
polygon.setFlatCoordinates(
|
||||
ol.geom.GeometryLayout.XY, flatCoordinates, [flatCoordinates.length]);
|
||||
return polygon;
|
||||
};
|
||||
|
||||
@@ -245,6 +245,7 @@ ol.geom.SimpleGeometry.prototype.setLayout =
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
* @api stable
|
||||
*/
|
||||
ol.geom.SimpleGeometry.prototype.applyTransform = function(transformFn) {
|
||||
if (!goog.isNull(this.flatCoordinates)) {
|
||||
@@ -254,6 +255,24 @@ ol.geom.SimpleGeometry.prototype.applyTransform = function(transformFn) {
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Translate the geometry.
|
||||
* @param {number} deltaX Delta X.
|
||||
* @param {number} deltaY Delta Y.
|
||||
* @api
|
||||
*/
|
||||
ol.geom.SimpleGeometry.prototype.translate = function(deltaX, deltaY) {
|
||||
var flatCoordinates = this.getFlatCoordinates();
|
||||
if (!goog.isNull(flatCoordinates)) {
|
||||
var stride = this.getStride();
|
||||
ol.geom.flat.transform.translate(
|
||||
flatCoordinates, 0, flatCoordinates.length, stride,
|
||||
deltaX, deltaY, flatCoordinates);
|
||||
this.changed();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.geom.SimpleGeometry} simpleGeometry Simple geometry.
|
||||
* @param {goog.vec.Mat4.Number} transform Transform.
|
||||
|
||||
@@ -119,21 +119,32 @@ ol.has.MSPOINTER = !!(goog.global.navigator.msPointerEnabled);
|
||||
* @type {boolean}
|
||||
* @api stable
|
||||
*/
|
||||
ol.has.WEBGL = ol.ENABLE_WEBGL && (
|
||||
/**
|
||||
* @return {boolean} WebGL supported.
|
||||
*/
|
||||
function() {
|
||||
if (!('WebGLRenderingContext' in goog.global)) {
|
||||
return false;
|
||||
}
|
||||
ol.has.WEBGL;
|
||||
|
||||
|
||||
(function() {
|
||||
if (ol.ENABLE_WEBGL) {
|
||||
var hasWebGL = false;
|
||||
var textureSize;
|
||||
var /** @type {Array.<string>} */ extensions = [];
|
||||
|
||||
if ('WebGLRenderingContext' in goog.global) {
|
||||
try {
|
||||
var canvas = /** @type {HTMLCanvasElement} */
|
||||
(goog.dom.createElement(goog.dom.TagName.CANVAS));
|
||||
return !goog.isNull(ol.webgl.getContext(canvas, {
|
||||
var gl = ol.webgl.getContext(canvas, {
|
||||
failIfMajorPerformanceCaveat: true
|
||||
}));
|
||||
} catch (e) {
|
||||
return false;
|
||||
}
|
||||
})();
|
||||
});
|
||||
if (!goog.isNull(gl)) {
|
||||
hasWebGL = true;
|
||||
textureSize = /** @type {number} */
|
||||
(gl.getParameter(gl.MAX_TEXTURE_SIZE));
|
||||
extensions = gl.getSupportedExtensions();
|
||||
}
|
||||
} catch (e) {}
|
||||
}
|
||||
ol.has.WEBGL = hasWebGL;
|
||||
ol.WEBGL_EXTENSIONS = extensions;
|
||||
ol.WEBGL_MAX_TEXTURE_SIZE = textureSize;
|
||||
}
|
||||
})();
|
||||
|
||||
@@ -20,9 +20,10 @@ goog.require('ol.extent');
|
||||
* @param {Array.<ol.Attribution>} attributions Attributions.
|
||||
* @param {string} src Image source URI.
|
||||
* @param {?string} crossOrigin Cross origin.
|
||||
* @param {ol.ImageLoadFunctionType} imageLoadFunction Image load function.
|
||||
*/
|
||||
ol.Image =
|
||||
function(extent, resolution, pixelRatio, attributions, src, crossOrigin) {
|
||||
ol.Image = function(extent, resolution, pixelRatio, attributions, src,
|
||||
crossOrigin, imageLoadFunction) {
|
||||
|
||||
goog.base(this, extent, resolution, pixelRatio, ol.ImageState.IDLE,
|
||||
attributions);
|
||||
@@ -59,6 +60,13 @@ ol.Image =
|
||||
* @type {ol.ImageState}
|
||||
*/
|
||||
this.state = ol.ImageState.IDLE;
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @type {ol.ImageLoadFunctionType}
|
||||
*/
|
||||
this.imageLoadFunction_ = imageLoadFunction;
|
||||
|
||||
};
|
||||
goog.inherits(ol.Image, ol.ImageBase);
|
||||
|
||||
@@ -66,8 +74,9 @@ goog.inherits(ol.Image, ol.ImageBase);
|
||||
/**
|
||||
* @param {Object=} opt_context Object.
|
||||
* @return {HTMLCanvasElement|Image|HTMLVideoElement} Image.
|
||||
* @api
|
||||
*/
|
||||
ol.Image.prototype.getImageElement = function(opt_context) {
|
||||
ol.Image.prototype.getImage = function(opt_context) {
|
||||
if (goog.isDef(opt_context)) {
|
||||
var image;
|
||||
var key = goog.getUid(opt_context);
|
||||
@@ -126,7 +135,7 @@ ol.Image.prototype.load = function() {
|
||||
goog.events.listenOnce(this.image_, goog.events.EventType.LOAD,
|
||||
this.handleImageLoad_, false, this)
|
||||
];
|
||||
this.image_.src = this.src_;
|
||||
this.imageLoadFunction_(this, this.src_);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -95,7 +95,7 @@ ol.ImageBase.prototype.getExtent = function() {
|
||||
* @param {Object=} opt_context Object.
|
||||
* @return {HTMLCanvasElement|Image|HTMLVideoElement} Image.
|
||||
*/
|
||||
ol.ImageBase.prototype.getImageElement = goog.abstractMethod;
|
||||
ol.ImageBase.prototype.getImage = goog.abstractMethod;
|
||||
|
||||
|
||||
/**
|
||||
|
||||
@@ -33,6 +33,6 @@ goog.inherits(ol.ImageCanvas, ol.ImageBase);
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
ol.ImageCanvas.prototype.getImageElement = function(opt_context) {
|
||||
ol.ImageCanvas.prototype.getImage = function(opt_context) {
|
||||
return this.canvas_;
|
||||
};
|
||||
|
||||
21
src/ol/imageloadfunction.js
Normal file
21
src/ol/imageloadfunction.js
Normal file
@@ -0,0 +1,21 @@
|
||||
goog.provide('ol.ImageLoadFunctionType');
|
||||
|
||||
|
||||
/**
|
||||
* A function that takes an {@link ol.Image} for the image and a `{string}` for
|
||||
* the src as arguments. It is supposed to make it so the underlying image
|
||||
* {@link ol.Image#getImage} is assigned the content specified by the src. If
|
||||
* not specified, the default is
|
||||
*
|
||||
* function(image, src) {
|
||||
* image.getImage().src = src;
|
||||
* }
|
||||
*
|
||||
* Providing a custom `imageLoadFunction` can be useful to load images with
|
||||
* post requests or - in general - through XHR requests, where the src of the
|
||||
* image element would be set to a data URI when the content is loaded.
|
||||
*
|
||||
* @typedef {function(ol.Image, string)}
|
||||
* @api
|
||||
*/
|
||||
ol.ImageLoadFunctionType;
|
||||
@@ -26,7 +26,9 @@ ol.interaction.DoubleClickZoom = function(opt_options) {
|
||||
*/
|
||||
this.delta_ = goog.isDef(options.delta) ? options.delta : 1;
|
||||
|
||||
goog.base(this);
|
||||
goog.base(this, {
|
||||
handleEvent: ol.interaction.DoubleClickZoom.handleEvent
|
||||
});
|
||||
|
||||
/**
|
||||
* @private
|
||||
@@ -39,10 +41,12 @@ goog.inherits(ol.interaction.DoubleClickZoom, ol.interaction.Interaction);
|
||||
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
* @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.
|
||||
* @return {boolean} `false` to stop event propagation.
|
||||
* @this {ol.interaction.DoubleClickZoom}
|
||||
* @api
|
||||
*/
|
||||
ol.interaction.DoubleClickZoom.prototype.handleMapBrowserEvent =
|
||||
function(mapBrowserEvent) {
|
||||
ol.interaction.DoubleClickZoom.handleEvent = function(mapBrowserEvent) {
|
||||
var stopEvent = false;
|
||||
var browserEvent = mapBrowserEvent.browserEvent;
|
||||
if (mapBrowserEvent.type == ol.MapBrowserEvent.EventType.DBLCLICK) {
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user