Compare commits
1092 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4c19e13bf6 | ||
|
|
1c6a56f781 | ||
|
|
3aabc44746 | ||
|
|
b426fa5509 | ||
|
|
70d376f215 | ||
|
|
c5f4710b8d | ||
|
|
14338e9c16 | ||
|
|
ce5ab5b59c | ||
|
|
bb5377fb8c | ||
|
|
657af1983d | ||
|
|
ab7e608129 | ||
|
|
0c2c058534 | ||
|
|
a9987de308 | ||
|
|
c02fdf2393 | ||
|
|
ca50e9e5b7 | ||
|
|
069a81db74 | ||
|
|
df460d2ed1 | ||
|
|
b29b969cfe | ||
|
|
a020251f69 | ||
|
|
b2292cc6fd | ||
|
|
647c1a6351 | ||
|
|
bfbb802b85 | ||
|
|
a446147902 | ||
|
|
d968f32456 | ||
|
|
1aea2c2b0c | ||
|
|
5b817f3146 | ||
|
|
a58f66a9a9 | ||
|
|
8e15f80d7a | ||
|
|
a35b3a5f52 | ||
|
|
9cf26f1fac | ||
|
|
fadf63cbd0 | ||
|
|
daa970fe4c | ||
|
|
3254e08785 | ||
|
|
544f951c14 | ||
|
|
08a640b793 | ||
|
|
d29f3b9068 | ||
|
|
d68991e982 | ||
|
|
5c536aafc7 | ||
|
|
757d46541c | ||
|
|
dc3bf0d04b | ||
|
|
9cde0ab860 | ||
|
|
bb00f4dafd | ||
|
|
16670e4015 | ||
|
|
4b85dd89a5 | ||
|
|
71f7c70279 | ||
|
|
2d24c8942e | ||
|
|
d24dcc7753 | ||
|
|
bea1501bb7 | ||
|
|
5751d342ff | ||
|
|
8514a85353 | ||
|
|
ad85e0e98d | ||
|
|
66a99dd6c4 | ||
|
|
eb762b6f4a | ||
|
|
14a1add08d | ||
|
|
cbd1aee0cc | ||
|
|
135d66dac7 | ||
|
|
3f30072de5 | ||
|
|
925a89ecdb | ||
|
|
d5c7f805ab | ||
|
|
67f42ed33a | ||
|
|
610ed7294f | ||
|
|
6c813020c2 | ||
|
|
0149924551 | ||
|
|
85264111cd | ||
|
|
921d736340 | ||
|
|
98c9b0eb39 | ||
|
|
7946298e67 | ||
|
|
c0271e3509 | ||
|
|
ad3ee7cb33 | ||
|
|
363ef8f45e | ||
|
|
9529200d4f | ||
|
|
85ca4e1888 | ||
|
|
c0da5ff8ef | ||
|
|
0b7cd12eaa | ||
|
|
9e25251891 | ||
|
|
e5c44b37c9 | ||
|
|
979342091a | ||
|
|
dc0e37b782 | ||
|
|
7f4c6e3634 | ||
|
|
085a6c8135 | ||
|
|
c5dac0aa70 | ||
|
|
40c1a6d112 | ||
|
|
6d9dd030a1 | ||
|
|
9f5240dd15 | ||
|
|
4a8782f1e0 | ||
|
|
d59f6979f7 | ||
|
|
7b8b058190 | ||
|
|
c6803838ab | ||
|
|
4846a49258 | ||
|
|
7cf12d1c12 | ||
|
|
2f06d214f5 | ||
|
|
80b78b8b5a | ||
|
|
5d264d2bf0 | ||
|
|
5832943773 | ||
|
|
2b2ac47b1f | ||
|
|
4be89715ed | ||
|
|
80fa26ddd8 | ||
|
|
656023e569 | ||
|
|
b99954e93a | ||
|
|
8daff341d0 | ||
|
|
66338a662d | ||
|
|
4784b7f2e2 | ||
|
|
af69933c64 | ||
|
|
8e9b20db51 | ||
|
|
0e8e104a2d | ||
|
|
29b64d8628 | ||
|
|
bda3a6803c | ||
|
|
cd2a2ebbc5 | ||
|
|
9df280a884 | ||
|
|
6e2f82c397 | ||
|
|
63629e1ee2 | ||
|
|
dbedbc19ee | ||
|
|
c0c5443782 | ||
|
|
4b942bc4f6 | ||
|
|
7d3fc3ccc7 | ||
|
|
fa88b578a4 | ||
|
|
598111b78e | ||
|
|
8f4756c99b | ||
|
|
05dfc226b7 | ||
|
|
a60a7f7c09 | ||
|
|
a3dbe4b658 | ||
|
|
c9beb6d4f4 | ||
|
|
eb75f4eedf | ||
|
|
80caaa5399 | ||
|
|
15c1323ff9 | ||
|
|
48f98717b6 | ||
|
|
09063b47b5 | ||
|
|
bd9aff46af | ||
|
|
b27acb8d5e | ||
|
|
9764dac149 | ||
|
|
79d803aba8 | ||
|
|
78a961e6ef | ||
|
|
a84db3add6 | ||
|
|
519e7976cd | ||
|
|
7d95df1a9d | ||
|
|
1c1010a65d | ||
|
|
ac84e98c7f | ||
|
|
945847d0a1 | ||
|
|
e5c2a226dd | ||
|
|
5541e9a236 | ||
|
|
c8eb3adf1e | ||
|
|
c2bde4e482 | ||
|
|
eb174f7a82 | ||
|
|
55a969f95f | ||
|
|
f344f2cdb2 | ||
|
|
ecdbab40ba | ||
|
|
819b9ce6ca | ||
|
|
c86a61eacb | ||
|
|
571760fb32 | ||
|
|
965b88d7c8 | ||
|
|
d950dada31 | ||
|
|
e49f529fe6 | ||
|
|
6f9fa4c12e | ||
|
|
b816128728 | ||
|
|
70021be919 | ||
|
|
32fa3501df | ||
|
|
a7cde96056 | ||
|
|
52a7c5e582 | ||
|
|
f52f9b6817 | ||
|
|
9f8ab48f1f | ||
|
|
8fb1d1f244 | ||
|
|
f3d5d16a82 | ||
|
|
783acfa961 | ||
|
|
3f897cfb79 | ||
|
|
c6e2c6a16e | ||
|
|
6431622881 | ||
|
|
00a8b4da16 | ||
|
|
0f09607725 | ||
|
|
94caa07168 | ||
|
|
5388f96551 | ||
|
|
3353eeb0c3 | ||
|
|
402697c369 | ||
|
|
4bcea473eb | ||
|
|
043b206705 | ||
|
|
76974a5888 | ||
|
|
59bce75d2a | ||
|
|
7a1533925a | ||
|
|
a2ae2f0f3e | ||
|
|
f078a9c935 | ||
|
|
404fa10bb7 | ||
|
|
8f1aab9236 | ||
|
|
c899100dab | ||
|
|
0c48a560b2 | ||
|
|
690a5f1f90 | ||
|
|
87337570e0 | ||
|
|
7864ed7861 | ||
|
|
03c75a8648 | ||
|
|
726bcbef83 | ||
|
|
016df5b902 | ||
|
|
14e20e23a0 | ||
|
|
aad5f94556 | ||
|
|
615b54eb67 | ||
|
|
fc23a38692 | ||
|
|
3b1d72202a | ||
|
|
4c236a64b8 | ||
|
|
3cc8291df4 | ||
|
|
c2b21985f4 | ||
|
|
168b675191 | ||
|
|
ebc1bc0096 | ||
|
|
be6bf00d74 | ||
|
|
f481070f82 | ||
|
|
9a460b5f6b | ||
|
|
8b38928aad | ||
|
|
30cd0aa584 | ||
|
|
8ab197eba6 | ||
|
|
6482ccf2f7 | ||
|
|
0f408e341f | ||
|
|
ed1e49045a | ||
|
|
be0a0de759 | ||
|
|
15575288e0 | ||
|
|
f2f77091ad | ||
|
|
c205323ff2 | ||
|
|
b0694c1e3b | ||
|
|
e0cfa1951a | ||
|
|
63084d30e9 | ||
|
|
9b82f19cc2 | ||
|
|
3f567b0bf0 | ||
|
|
bc74273208 | ||
|
|
6e08fc9e13 | ||
|
|
bf65b8a4fe | ||
|
|
e14bede9e9 | ||
|
|
ac76989447 | ||
|
|
b221e1ac1f | ||
|
|
ebc3f24671 | ||
|
|
fcffce46b4 | ||
|
|
2cc2027353 | ||
|
|
c425b9c0e6 | ||
|
|
1222287f22 | ||
|
|
44a64ba451 | ||
|
|
df6b90246a | ||
|
|
2d50511527 | ||
|
|
fcdff1c841 | ||
|
|
7a070dd859 | ||
|
|
afdd22bd1d | ||
|
|
a04022e8df | ||
|
|
c27bcd86d3 | ||
|
|
a3550a5b00 | ||
|
|
b477367099 | ||
|
|
671f774593 | ||
|
|
552e345fbf | ||
|
|
4d43fe3346 | ||
|
|
6ec5e9a07d | ||
|
|
ee82fde184 | ||
|
|
5dbaeb9ee5 | ||
|
|
cd99d44704 | ||
|
|
449131a516 | ||
|
|
93f371ab9f | ||
|
|
2f5ccbd54d | ||
|
|
718f32b177 | ||
|
|
1f8ee3a5ae | ||
|
|
16b3893166 | ||
|
|
fce065e185 | ||
|
|
b54bc6cd42 | ||
|
|
257313969c | ||
|
|
657b9dc018 | ||
|
|
bd4b7a890d | ||
|
|
d29e5eaef1 | ||
|
|
a639291ea7 | ||
|
|
53704379fa | ||
|
|
3d82da1c7e | ||
|
|
b4061e7b35 | ||
|
|
00a6357c4d | ||
|
|
0a76145a93 | ||
|
|
b75ef3ae18 | ||
|
|
f2df971eb0 | ||
|
|
47a7b03e0e | ||
|
|
9386415633 | ||
|
|
e111e30f33 | ||
|
|
61ce463cf9 | ||
|
|
758bab8e30 | ||
|
|
dea723bac3 | ||
|
|
dcfeff11bf | ||
|
|
475504cd85 | ||
|
|
936118955f | ||
|
|
d5ec75a643 | ||
|
|
d0f5585157 | ||
|
|
db0c8c3c3a | ||
|
|
1941be9995 | ||
|
|
313bff7aff | ||
|
|
2cd64d33ec | ||
|
|
ba3e65c919 | ||
|
|
03ed8085b9 | ||
|
|
fa91748741 | ||
|
|
c067f40ecf | ||
|
|
c9c845394f | ||
|
|
63bc9459d9 | ||
|
|
f6d40faa3d | ||
|
|
c475902e19 | ||
|
|
1f7bdd10f8 | ||
|
|
687a65aa95 | ||
|
|
4c207d9460 | ||
|
|
5fb7a8bc34 | ||
|
|
391e2b6fea | ||
|
|
04c16106cd | ||
|
|
85163bceb6 | ||
|
|
094f8d5391 | ||
|
|
09026af4fa | ||
|
|
d429eba4ae | ||
|
|
dc0c0877d7 | ||
|
|
21d001b22a | ||
|
|
487c22ceae | ||
|
|
72a9460ff6 | ||
|
|
46a1140583 | ||
|
|
f95b154117 | ||
|
|
7c5bec260b | ||
|
|
7cefe56167 | ||
|
|
ce9ac92028 | ||
|
|
da830a7670 | ||
|
|
e242c2ca1d | ||
|
|
82e989b652 | ||
|
|
0e83c90377 | ||
|
|
fb243807e8 | ||
|
|
d495b19448 | ||
|
|
ef5cdb0ec6 | ||
|
|
b3493c6382 | ||
|
|
17bac04030 | ||
|
|
e01c16c00b | ||
|
|
5abeaf3716 | ||
|
|
1d86ae3e3f | ||
|
|
7192a6d1a5 | ||
|
|
deea8060af | ||
|
|
faff14c44c | ||
|
|
2d7d002c85 | ||
|
|
9b3f61a084 | ||
|
|
4cf1ee769e | ||
|
|
0a617bef12 | ||
|
|
fef1b0981e | ||
|
|
b092bce4ff | ||
|
|
ef9b64673e | ||
|
|
4d53049a7f | ||
|
|
900827987a | ||
|
|
53d079ed95 | ||
|
|
63ae481dae | ||
|
|
9b6ad1b36f | ||
|
|
e5397cbfca | ||
|
|
a38ac3a07b | ||
|
|
d5c5d651cb | ||
|
|
ef0153692e | ||
|
|
5daf741922 | ||
|
|
ae657518c5 | ||
|
|
7d110c829f | ||
|
|
369f5a6171 | ||
|
|
b11c9c3b9c | ||
|
|
7530e46cfa | ||
|
|
2b84e0f245 | ||
|
|
5502083af9 | ||
|
|
02fe825113 | ||
|
|
6aa75c490b | ||
|
|
89456e7906 | ||
|
|
442caade91 | ||
|
|
e479411614 | ||
|
|
f360080fa7 | ||
|
|
e65384a407 | ||
|
|
3552f5ff66 | ||
|
|
54d4434900 | ||
|
|
7ceb7a439e | ||
|
|
f9b07991e1 | ||
|
|
e1f477ad8c | ||
|
|
30e2f44825 | ||
|
|
138adf0509 | ||
|
|
31a68e21a5 | ||
|
|
f5788a32a7 | ||
|
|
be2e4a33ae | ||
|
|
3c4e663224 | ||
|
|
eb5088eb40 | ||
|
|
d728c71f02 | ||
|
|
8813180d41 | ||
|
|
6bdacced92 | ||
|
|
74fffd5851 | ||
|
|
c4d5036878 | ||
|
|
e6c5fa9cd7 | ||
|
|
d29db03863 | ||
|
|
c8f0bb0ade | ||
|
|
e7ba63e020 | ||
|
|
8e122334ed | ||
|
|
ea8ffd8b6a | ||
|
|
8248ec63ba | ||
|
|
79766ad25c | ||
|
|
901eee1887 | ||
|
|
cd5b15fa55 | ||
|
|
ab87eb8af0 | ||
|
|
1aca93d297 | ||
|
|
871575607f | ||
|
|
509cb3a3c9 | ||
|
|
5acf9023d0 | ||
|
|
fd729216b5 | ||
|
|
b48cabee28 | ||
|
|
ed3dcd636f | ||
|
|
ac7db89a91 | ||
|
|
8209ed0a4c | ||
|
|
bc58c383ba | ||
|
|
d2dd7584d8 | ||
|
|
23de622d29 | ||
|
|
fbef99ae96 | ||
|
|
7d2c8be391 | ||
|
|
4a66289e5a | ||
|
|
9a923cc5dc | ||
|
|
0188809918 | ||
|
|
496cece074 | ||
|
|
cd152cca14 | ||
|
|
252e60b5af | ||
|
|
f49e82ade1 | ||
|
|
9e2a393426 | ||
|
|
4e7f558234 | ||
|
|
da611b9cb5 | ||
|
|
88c3891bef | ||
|
|
504e67303f | ||
|
|
ba5b950d5c | ||
|
|
5c274adddb | ||
|
|
d939fcec3f | ||
|
|
e8257e805d | ||
|
|
4c32ec4d67 | ||
|
|
fd69e5f2be | ||
|
|
e877a21b8e | ||
|
|
2ed3f28ab8 | ||
|
|
55908485f2 | ||
|
|
d6f03697d7 | ||
|
|
6c5775e6f6 | ||
|
|
28eef6c479 | ||
|
|
4e48170fac | ||
|
|
f746cb7f57 | ||
|
|
5cac9d61cc | ||
|
|
29a1ea9ae3 | ||
|
|
c48ce003ba | ||
|
|
27d1e808b8 | ||
|
|
b3b31ea16d | ||
|
|
83c59ee255 | ||
|
|
36e336f406 | ||
|
|
e3951fa3c6 | ||
|
|
a86c270f6a | ||
|
|
3a0683f373 | ||
|
|
6638ae855d | ||
|
|
b36d697585 | ||
|
|
7659e47e07 | ||
|
|
cf5eadebaa | ||
|
|
0927c55b3c | ||
|
|
d610b206f7 | ||
|
|
7352ddeb89 | ||
|
|
8eea827343 | ||
|
|
710353784b | ||
|
|
06b34055d1 | ||
|
|
3de0aad52a | ||
|
|
4fa590965c | ||
|
|
2b53d43faa | ||
|
|
0f55d173b8 | ||
|
|
cbb72c1ce4 | ||
|
|
66ad8364e0 | ||
|
|
b5ecc6e43c | ||
|
|
c1c07e2f3c | ||
|
|
4b993727c8 | ||
|
|
6c581b8eaf | ||
|
|
779811b52d | ||
|
|
c7a98f19b7 | ||
|
|
10d4aeb1c6 | ||
|
|
20b694b8c1 | ||
|
|
13273fb632 | ||
|
|
05da0ceaab | ||
|
|
68442578ba | ||
|
|
0e4c73072f | ||
|
|
bd7ff16537 | ||
|
|
241047795f | ||
|
|
293c65088d | ||
|
|
c56ee19763 | ||
|
|
08699e2b04 | ||
|
|
35dfa6c811 | ||
|
|
3e49fc6081 | ||
|
|
a42e4d4f4e | ||
|
|
631b92412e | ||
|
|
27fb1b6fde | ||
|
|
2b77e1601a | ||
|
|
eeba5f4d10 | ||
|
|
ceb39b0d07 | ||
|
|
d7ca176362 | ||
|
|
b0fe36e609 | ||
|
|
1fceb4a709 | ||
|
|
5350e9ba37 | ||
|
|
390153adc8 | ||
|
|
a096ec5bf7 | ||
|
|
007194a18f | ||
|
|
4c0d857f41 | ||
|
|
c8e9525f3b | ||
|
|
37d0176642 | ||
|
|
7c3bf59084 | ||
|
|
e4ea5e17f7 | ||
|
|
0acb2a335d | ||
|
|
c06d7aeacc | ||
|
|
e77d705d52 | ||
|
|
7252227ac6 | ||
|
|
3ddc260687 | ||
|
|
f30744c0b8 | ||
|
|
c37e80cd97 | ||
|
|
0a28c4282e | ||
|
|
dd8422c8a0 | ||
|
|
ee4f009d2f | ||
|
|
901c55bf41 | ||
|
|
e884a8704d | ||
|
|
b53e4e39ad | ||
|
|
6963c3c037 | ||
|
|
d0621a1949 | ||
|
|
0c21afc3e4 | ||
|
|
9a83db1c85 | ||
|
|
85498983c0 | ||
|
|
9894ceda2a | ||
|
|
880be210a1 | ||
|
|
7a38a8945c | ||
|
|
cdf6fe44d8 | ||
|
|
483f567d26 | ||
|
|
436561d9dd | ||
|
|
5162fda686 | ||
|
|
250e86e5f2 | ||
|
|
0bc8858760 | ||
|
|
3978dd87be | ||
|
|
0def9728bb | ||
|
|
b128675e60 | ||
|
|
9f57e57400 | ||
|
|
0d23ab44b3 | ||
|
|
b5a6eba175 | ||
|
|
44b1c9da89 | ||
|
|
e81b68ce8b | ||
|
|
167480bde6 | ||
|
|
4f45bbc05d | ||
|
|
8a703640d0 | ||
|
|
a5626a0573 | ||
|
|
33dbaccb68 | ||
|
|
f65129850d | ||
|
|
851d7e065a | ||
|
|
37112e07b6 | ||
|
|
263960aad1 | ||
|
|
b1f56c1e98 | ||
|
|
73b67f7a74 | ||
|
|
80995159b1 | ||
|
|
bfa16529de | ||
|
|
9543cc10dd | ||
|
|
7896350fe4 | ||
|
|
badf14e0f1 | ||
|
|
ea8ad4fc16 | ||
|
|
139bcca26a | ||
|
|
a613420953 | ||
|
|
946ef8878d | ||
|
|
e88f06b70f | ||
|
|
da627dda4b | ||
|
|
059ee6eaa5 | ||
|
|
8afa911eb5 | ||
|
|
a6f16e58e5 | ||
|
|
758118e00d | ||
|
|
1bebf55d30 | ||
|
|
32c776ba9f | ||
|
|
c2c4dbfc32 | ||
|
|
b2566cb64c | ||
|
|
dedf0a5d63 | ||
|
|
41bb512952 | ||
|
|
a1da682722 | ||
|
|
6da7cf3f84 | ||
|
|
216be8a673 | ||
|
|
411419e45f | ||
|
|
6617bdd57f | ||
|
|
6838fdd4c9 | ||
|
|
085c2d7e33 | ||
|
|
6c854ed056 | ||
|
|
d0b87ecd63 | ||
|
|
0469a31ea9 | ||
|
|
31f2e334cf | ||
|
|
b7f199c8cd | ||
|
|
d3a4fd115b | ||
|
|
0fec4c5ff7 | ||
|
|
d0722cab6a | ||
|
|
f02ad3e584 | ||
|
|
bb5b711dac | ||
|
|
7c2fffed68 | ||
|
|
989adabb1f | ||
|
|
1e78c45466 | ||
|
|
9b738b6cb6 | ||
|
|
4aa2369244 | ||
|
|
d702aad450 | ||
|
|
d41bb2663b | ||
|
|
07b1f5ea45 | ||
|
|
bf35b32a20 | ||
|
|
dba6e04a1b | ||
|
|
cb9054f7fd | ||
|
|
ad56dea388 | ||
|
|
529f869803 | ||
|
|
5371d8dd34 | ||
|
|
fc51ab05f4 | ||
|
|
053538cc42 | ||
|
|
8311f090de | ||
|
|
a09c07a427 | ||
|
|
eed926fa94 | ||
|
|
fe153b94fb | ||
|
|
fce931afbe | ||
|
|
d036602cec | ||
|
|
1a240ccf9d | ||
|
|
91f47a876c | ||
|
|
9f5d8d3901 | ||
|
|
0bfd22b235 | ||
|
|
965a27b115 | ||
|
|
47fbbf6ce2 | ||
|
|
cc6e0f1b3c | ||
|
|
0001e0989b | ||
|
|
6d87fffb73 | ||
|
|
5760e427d2 | ||
|
|
c4d4962806 | ||
|
|
250cb35f8e | ||
|
|
2b995fd8cf | ||
|
|
0a99d0f211 | ||
|
|
fd4eff7292 | ||
|
|
6f40544732 | ||
|
|
4e58ebd360 | ||
|
|
43f72031f9 | ||
|
|
3811228ac7 | ||
|
|
c57f5e5f0a | ||
|
|
0d32a49244 | ||
|
|
6a0fa114da | ||
|
|
7b805ead9e | ||
|
|
95030cd838 | ||
|
|
e568eb3ccf | ||
|
|
813afe1e3f | ||
|
|
8b6ab65ca7 | ||
|
|
f5df71ba70 | ||
|
|
1553dce3dc | ||
|
|
055df25c58 | ||
|
|
4dddf4c3d9 | ||
|
|
4d5cf372b0 | ||
|
|
34f65a8908 | ||
|
|
b4dec522f1 | ||
|
|
af553366d4 | ||
|
|
66524a8075 | ||
|
|
33229597c8 | ||
|
|
e41ba12445 | ||
|
|
31a074daf5 | ||
|
|
4045e06aa9 | ||
|
|
61fe8a8418 | ||
|
|
954c1c313e | ||
|
|
c1575e810b | ||
|
|
16d687205d | ||
|
|
15ef7eec85 | ||
|
|
db68c09e4d | ||
|
|
9d07300e71 | ||
|
|
ffc24e892e | ||
|
|
49b8f90e66 | ||
|
|
eb4dab90e5 | ||
|
|
7b9828a7a7 | ||
|
|
727586ecb9 | ||
|
|
b3860a8fd5 | ||
|
|
e189667d20 | ||
|
|
fe69c0e354 | ||
|
|
1c549b4df3 | ||
|
|
931100e030 | ||
|
|
6c13de715e | ||
|
|
37cdbcc72f | ||
|
|
da5bf46dbf | ||
|
|
2c8e5600ce | ||
|
|
cb8e4e0ee7 | ||
|
|
c5fe7df2e4 | ||
|
|
0194c8e3c2 | ||
|
|
980dbc121a | ||
|
|
d09506f5b1 | ||
|
|
13a9d2f6af | ||
|
|
d91f5ecc48 | ||
|
|
b180149100 | ||
|
|
6bbc411521 | ||
|
|
0ba7856d49 | ||
|
|
90ec289c89 | ||
|
|
b724ce6c0d | ||
|
|
9cccbd0712 | ||
|
|
3852be0d7e | ||
|
|
daa4781072 | ||
|
|
8ec2bcef17 | ||
|
|
c74277cae8 | ||
|
|
bc1328528a | ||
|
|
ff01bba55a | ||
|
|
8329da8d1c | ||
|
|
5865d5bc55 | ||
|
|
6d7f51f111 | ||
|
|
da4b863ad8 | ||
|
|
2d92791b17 | ||
|
|
4c615d8ddf | ||
|
|
c14d64b4e7 | ||
|
|
c2f4b38981 | ||
|
|
b1973fcdf4 | ||
|
|
6260c4d744 | ||
|
|
5029b5dc97 | ||
|
|
7505460d65 | ||
|
|
e211c908f8 | ||
|
|
87a1031de5 | ||
|
|
fef0088bf9 | ||
|
|
8a4bdd4046 | ||
|
|
da4d5caea8 | ||
|
|
2aa7812fc5 | ||
|
|
fdba4fc381 | ||
|
|
8730fc8824 | ||
|
|
35d26f1280 | ||
|
|
7e7494d5c7 | ||
|
|
a8797ae1ff | ||
|
|
a6c49dabcf | ||
|
|
296564a4ce | ||
|
|
5f7e6ac61a | ||
|
|
33da0e7b66 | ||
|
|
d042b4c277 | ||
|
|
338d0570fd | ||
|
|
cafbb82c41 | ||
|
|
de0266ded7 | ||
|
|
e703a58c5d | ||
|
|
fefc39147c | ||
|
|
d204d7764a | ||
|
|
92655b2d20 | ||
|
|
204f8f9813 | ||
|
|
b0dd3782a8 | ||
|
|
2ae22a934d | ||
|
|
594eb7fe95 | ||
|
|
c60b80b566 | ||
|
|
0578e8f2f6 | ||
|
|
daf85c75c7 | ||
|
|
b94a4832f7 | ||
|
|
ab24d9043e | ||
|
|
6dc7f2cfec | ||
|
|
5b80da7f6e | ||
|
|
0691d1d74e | ||
|
|
ade361479a | ||
|
|
0c06a429fb | ||
|
|
4233061dda | ||
|
|
7e579f1ec0 | ||
|
|
0e538b29c0 | ||
|
|
23f29ab65a | ||
|
|
464ce13b13 | ||
|
|
861e1515d4 | ||
|
|
2bd0fdf07b | ||
|
|
1921e009e6 | ||
|
|
b0584acaa5 | ||
|
|
eb8be03792 | ||
|
|
e57919e55b | ||
|
|
b01fa94ecd | ||
|
|
47b53ded6d | ||
|
|
3c8aeb7287 | ||
|
|
7b899fa767 | ||
|
|
73d4ba2a51 | ||
|
|
a673c39251 | ||
|
|
a1946a6e69 | ||
|
|
f695cb012a | ||
|
|
317a27d6f3 | ||
|
|
eb2a30e461 | ||
|
|
e49ce543a4 | ||
|
|
575fff6737 | ||
|
|
b3f14f09c4 | ||
|
|
6812de6a77 | ||
|
|
0ec70256d6 | ||
|
|
23ae91cfd5 | ||
|
|
999880f350 | ||
|
|
85815a32a0 | ||
|
|
0a6745f1e4 | ||
|
|
08c01de6b0 | ||
|
|
ad2b4a3863 | ||
|
|
91d6844ecd | ||
|
|
929ce05f81 | ||
|
|
81b7a77954 | ||
|
|
91045b0ad1 | ||
|
|
b11f6abb3c | ||
|
|
571f3f30a4 | ||
|
|
85ddded15c | ||
|
|
d3c8880b22 | ||
|
|
54d3bbd625 | ||
|
|
405a8db075 | ||
|
|
27e58be43d | ||
|
|
cee34fa51b | ||
|
|
16aa548383 | ||
|
|
860fdabd76 | ||
|
|
761aa0ea5c | ||
|
|
d493d0a820 | ||
|
|
d6e35edac5 | ||
|
|
2143eebd30 | ||
|
|
64225776d4 | ||
|
|
355c3c7b58 | ||
|
|
e792a121f4 | ||
|
|
3364dbb46e | ||
|
|
23610efe30 | ||
|
|
75bf3e1ccf | ||
|
|
f2f5cd2630 | ||
|
|
6f6698dd6a | ||
|
|
4320b07c5d | ||
|
|
25603d7cf1 | ||
|
|
935eb63876 | ||
|
|
6111b91cca | ||
|
|
7a34d22b37 | ||
|
|
c3f51c676a | ||
|
|
968c8aa34e | ||
|
|
b001a48567 | ||
|
|
bf9156cbeb | ||
|
|
bafd8548d1 | ||
|
|
e3ead5df06 | ||
|
|
22ca08179d | ||
|
|
c8df907ff2 | ||
|
|
c0950dee11 | ||
|
|
da3d8952da | ||
|
|
95e43c852d | ||
|
|
d4d3555a88 | ||
|
|
ef9a1a25b1 | ||
|
|
44fdfaa630 | ||
|
|
112473afee | ||
|
|
5e505f200a | ||
|
|
5e4474ca8c | ||
|
|
d3f766c748 | ||
|
|
2b1acc6216 | ||
|
|
c008de1a88 | ||
|
|
e6a38d8211 | ||
|
|
e6f4054d3b | ||
|
|
fe636a0e98 | ||
|
|
76d36d4b20 | ||
|
|
89b62cd53b | ||
|
|
abb5fef043 | ||
|
|
0c486c522a | ||
|
|
af3c38052e | ||
|
|
f1ff39cc8b | ||
|
|
643c2e6f21 | ||
|
|
d5aa0d9a8e | ||
|
|
793b27e9f5 | ||
|
|
9d28549b2b | ||
|
|
ef90f5a097 | ||
|
|
c50d775330 | ||
|
|
6da6cef760 | ||
|
|
1d94d71a5b | ||
|
|
65fee5b7ac | ||
|
|
5267776627 | ||
|
|
a721ce03c9 | ||
|
|
23e2fcefef | ||
|
|
d17d470d48 | ||
|
|
c6dedbc40b | ||
|
|
de107c5502 | ||
|
|
6740ca9ee8 | ||
|
|
2c82ca86f0 | ||
|
|
b7ad9160ef | ||
|
|
acc97a53eb | ||
|
|
7634c0c2c4 | ||
|
|
49cc39c4dd | ||
|
|
3595c2cce7 | ||
|
|
80c4809aee | ||
|
|
10b4aa1bab | ||
|
|
8f7cbc5ed6 | ||
|
|
b66a114873 | ||
|
|
7094f65ef7 | ||
|
|
ac8e62818f | ||
|
|
c89fb3ccfe | ||
|
|
223d5ab60d | ||
|
|
2142b538ac | ||
|
|
5149889bd2 | ||
|
|
b57cdb730c | ||
|
|
8600d46a0e | ||
|
|
7509425aa4 | ||
|
|
c9ab9bc711 | ||
|
|
cd6ac857b9 | ||
|
|
7b35557cee | ||
|
|
4549d2f7a8 | ||
|
|
7780d77ade | ||
|
|
bfaac061c8 | ||
|
|
afce912f11 | ||
|
|
a705c6fe11 | ||
|
|
26e146b1d8 | ||
|
|
64ab764827 | ||
|
|
314b04df7a | ||
|
|
29b1f0d55d | ||
|
|
a62bbd6650 | ||
|
|
38fa805f03 | ||
|
|
1d3f8b5d7d | ||
|
|
c53aa7e8d5 | ||
|
|
109cd6f3a6 | ||
|
|
4f703efd23 | ||
|
|
a157fff318 | ||
|
|
84ed12ec46 | ||
|
|
5fb692a876 | ||
|
|
06908775e8 | ||
|
|
da66a37182 | ||
|
|
96eaf2de06 | ||
|
|
86d9d691e4 | ||
|
|
c69ba6a3dd | ||
|
|
2adf3befb8 | ||
|
|
f81e36d8e0 | ||
|
|
f7d62f054c | ||
|
|
9a44895d41 | ||
|
|
56e871f8b5 | ||
|
|
de6ecb22a8 | ||
|
|
c0b6eefd8f | ||
|
|
a09fa923a5 | ||
|
|
7c207d47bb | ||
|
|
eac5d652cf | ||
|
|
4d3e903670 | ||
|
|
e7cd691362 | ||
|
|
74759142d9 | ||
|
|
3021d3a6a7 | ||
|
|
cfafe90235 | ||
|
|
ccaca9fc52 | ||
|
|
3f918f4e8d | ||
|
|
5871d64c9d | ||
|
|
d1f19b8e0d | ||
|
|
7b4a954c40 | ||
|
|
1159e1f792 | ||
|
|
3f214f6ac4 | ||
|
|
0159d20d6d | ||
|
|
ce20380078 | ||
|
|
f9e5c9c596 | ||
|
|
7d04ef3e2d | ||
|
|
ced3633d80 | ||
|
|
e62b2e4479 | ||
|
|
8cf57941ac | ||
|
|
dd132c9fad | ||
|
|
1cdfc709ae | ||
|
|
1b01efc08b | ||
|
|
28450cbb5a | ||
|
|
1c341e288c | ||
|
|
3f23deb09a | ||
|
|
ceafa88dc8 | ||
|
|
54186d7893 | ||
|
|
9a0c0e2f2b | ||
|
|
ae1221d811 | ||
|
|
c6d1778202 | ||
|
|
e532727713 | ||
|
|
edc16b9739 | ||
|
|
59871274ca | ||
|
|
039b54de48 | ||
|
|
5993b45c63 | ||
|
|
5c5364bbb7 | ||
|
|
6411c9267b | ||
|
|
f85fcf30a2 | ||
|
|
b5e0ae6f8c | ||
|
|
e6f5c2a008 | ||
|
|
31cfa0d952 | ||
|
|
a753d282cc | ||
|
|
e3a8dc89de | ||
|
|
18aa9b5091 | ||
|
|
84e051d19b | ||
|
|
af319c259b | ||
|
|
0af5642569 | ||
|
|
d6118f31e4 | ||
|
|
7463a58066 | ||
|
|
f645a9e1e4 | ||
|
|
a9591f8b99 | ||
|
|
43d9ebe51d | ||
|
|
aa90c97ba3 | ||
|
|
874c4aef21 | ||
|
|
2249c82ac2 | ||
|
|
a2c9a0796c | ||
|
|
d6bb13b54b | ||
|
|
d628f6b098 | ||
|
|
e2da56afa1 | ||
|
|
f74e4c95ff | ||
|
|
b8cb1fe795 | ||
|
|
1e8968d97a | ||
|
|
9c480d77f5 | ||
|
|
0e943f5832 | ||
|
|
e99f43af8d | ||
|
|
2bcb10c973 | ||
|
|
9301fff6cb | ||
|
|
83c33a03c6 | ||
|
|
e848acd806 | ||
|
|
72cc824502 | ||
|
|
4b3aac32c3 | ||
|
|
acab0ebd57 | ||
|
|
6a4d1c9b89 | ||
|
|
698b62af98 | ||
|
|
817370a65b | ||
|
|
07d5211e30 | ||
|
|
3fcecc98e6 | ||
|
|
6ed677a3f0 | ||
|
|
dd16bb984c | ||
|
|
f672c1792b | ||
|
|
0286564e8a | ||
|
|
96e75ab17f | ||
|
|
a6dddfa282 | ||
|
|
5a2a7d30e6 | ||
|
|
d5ea855108 | ||
|
|
d8a495b639 | ||
|
|
4aa3ef59d5 | ||
|
|
7451e176ef | ||
|
|
872d869ded | ||
|
|
d48e818390 | ||
|
|
fad3cf9672 | ||
|
|
9acd65270a | ||
|
|
57e1dda5f1 | ||
|
|
53d5d8c1d9 | ||
|
|
54da473991 | ||
|
|
f186ed3deb | ||
|
|
973cc6fd89 | ||
|
|
36b521a00e | ||
|
|
7065722fa6 | ||
|
|
10b54a9f3f | ||
|
|
e3bc0bca3e | ||
|
|
b903cee7dd | ||
|
|
2e406c9633 | ||
|
|
9f4112a8f9 | ||
|
|
30ddbad4fe | ||
|
|
efd1caf00f | ||
|
|
488a55c83c | ||
|
|
1dc6c99328 | ||
|
|
405d5666e2 | ||
|
|
282fdafad7 | ||
|
|
bad5a97d20 | ||
|
|
9a9b838235 | ||
|
|
5bdfc35d35 | ||
|
|
361d83dc73 | ||
|
|
8f2cfe9420 | ||
|
|
5d9708be11 | ||
|
|
ea7879f616 | ||
|
|
682c816b9b | ||
|
|
b1289dbae7 | ||
|
|
cf99bcbba1 | ||
|
|
5ae2521724 | ||
|
|
81b13f295b | ||
|
|
e43573bcf2 | ||
|
|
894be51b36 | ||
|
|
b06f3457da | ||
|
|
7f1053d2cd | ||
|
|
96741e1f0b | ||
|
|
f5cd9a3eba | ||
|
|
4196e34c73 | ||
|
|
22bed40f5c | ||
|
|
a33008be9e | ||
|
|
746116d266 | ||
|
|
1f6d2eff96 | ||
|
|
764f821a70 | ||
|
|
41596d808b | ||
|
|
ec208916d2 | ||
|
|
2fd894ffb9 | ||
|
|
5569bd9113 | ||
|
|
78dcbe6b8e | ||
|
|
074941bf1f | ||
|
|
824a77e41b | ||
|
|
e766d00e7b | ||
|
|
2e2d08f552 | ||
|
|
9870fe58e0 | ||
|
|
80efbb60d0 | ||
|
|
111e6db8c8 | ||
|
|
f40aa54c18 | ||
|
|
531b35d7c2 | ||
|
|
879307da1b | ||
|
|
acb0a8da53 | ||
|
|
e87b616de8 | ||
|
|
a3f9b3ba43 | ||
|
|
680f140858 | ||
|
|
b6a4188ce4 | ||
|
|
4be106d014 | ||
|
|
100020fd59 | ||
|
|
3580cdc823 | ||
|
|
f0720b2f97 | ||
|
|
e578f98c73 | ||
|
|
1dbf8cd4d6 | ||
|
|
0f36d1a7c2 | ||
|
|
2b76bc05a5 | ||
|
|
1ac41c7403 | ||
|
|
96550c8fcf | ||
|
|
26f1062dbf | ||
|
|
26ad3fe6b1 | ||
|
|
34986b0870 | ||
|
|
19c91235ce | ||
|
|
901a0f6d8e | ||
|
|
250221cded | ||
|
|
4e94908440 | ||
|
|
23b207dae4 | ||
|
|
16c4082898 | ||
|
|
51c8bcae57 | ||
|
|
b606f4996b | ||
|
|
7dc2a2b97e | ||
|
|
a243149d02 | ||
|
|
a314813511 | ||
|
|
fe79389fd3 | ||
|
|
d5c69b2e5e | ||
|
|
2724292de1 | ||
|
|
829337c219 | ||
|
|
549d0a7601 | ||
|
|
b602285992 | ||
|
|
82b1355591 | ||
|
|
249f432b2e | ||
|
|
45a5b1d24e | ||
|
|
c5b788f370 | ||
|
|
ebded733f7 | ||
|
|
e4e91b82d6 | ||
|
|
8f9cde0595 | ||
|
|
f47d873ae5 | ||
|
|
492a3c8f7a | ||
|
|
0bf70489b6 | ||
|
|
32efd99397 | ||
|
|
0650a97371 | ||
|
|
b05193fa45 | ||
|
|
a116878a57 | ||
|
|
700903ca5c | ||
|
|
4192092dcf | ||
|
|
c0d9a822f8 | ||
|
|
bb6192bc10 | ||
|
|
56e8575e41 | ||
|
|
762bb0f055 | ||
|
|
b044372cd8 | ||
|
|
dd07fd7977 | ||
|
|
a3a33c1dcd | ||
|
|
75a3c5f6ff | ||
|
|
c530f872f9 | ||
|
|
ab9100450b |
@@ -10,8 +10,6 @@ insert_final_newline = true
|
|||||||
|
|
||||||
[*.md]
|
[*.md]
|
||||||
indent_size = 2
|
indent_size = 2
|
||||||
|
|
||||||
[*.md]
|
|
||||||
trim_trailing_whitespace = false
|
trim_trailing_whitespace = false
|
||||||
|
|
||||||
[Makefile]
|
[Makefile]
|
||||||
|
|||||||
17
.travis.yml
17
.travis.yml
@@ -1,9 +1,20 @@
|
|||||||
|
sudo: required
|
||||||
|
dist: trusty
|
||||||
|
|
||||||
|
language: node_js
|
||||||
|
|
||||||
|
node_js:
|
||||||
|
- "4"
|
||||||
|
|
||||||
|
cache:
|
||||||
|
directories:
|
||||||
|
- node_modules
|
||||||
env:
|
env:
|
||||||
- DISPLAY=:99.0
|
- DISPLAY=:99.0
|
||||||
|
|
||||||
before_install:
|
before_install:
|
||||||
|
- "npm prune"
|
||||||
- "sudo pip install -r requirements.txt"
|
- "sudo pip install -r requirements.txt"
|
||||||
- "npm install -g npm && npm install"
|
|
||||||
|
|
||||||
before_script:
|
before_script:
|
||||||
- "rm src/ol/renderer/webgl/*shader.js"
|
- "rm src/ol/renderer/webgl/*shader.js"
|
||||||
@@ -14,3 +25,7 @@ script: "make ci"
|
|||||||
after_success:
|
after_success:
|
||||||
- "make test-coverage"
|
- "make test-coverage"
|
||||||
- "cat coverage/lcov.info | ./node_modules/.bin/coveralls"
|
- "cat coverage/lcov.info | ./node_modules/.bin/coveralls"
|
||||||
|
|
||||||
|
branches:
|
||||||
|
only:
|
||||||
|
- master
|
||||||
|
|||||||
188
CONTRIBUTING.md
188
CONTRIBUTING.md
@@ -21,11 +21,14 @@ Look for `readme.md` files! Several directories contain a `readme.md` file that
|
|||||||
|
|
||||||
## Contributing Code
|
## Contributing Code
|
||||||
|
|
||||||
|
See [`DEVELOPING.md`](https://github.com/openlayers/ol3/blob/master/DEVELOPING.md) to learn how to get started developing.
|
||||||
|
|
||||||
Our preferred means of receiving contributions is through [pull requests](https://help.github.com/articles/using-pull-requests). Make sure
|
Our preferred means of receiving contributions is through [pull requests](https://help.github.com/articles/using-pull-requests). Make sure
|
||||||
that your pull request follows our pull request guidelines below before submitting it.
|
that your pull request follows our pull request guidelines below before submitting it.
|
||||||
|
|
||||||
This page describes what you need to know to contribute code to ol3 as a developer.
|
This page describes what you need to know to contribute code to ol3 as a developer.
|
||||||
|
|
||||||
|
|
||||||
## Contributor License Agreement
|
## Contributor License Agreement
|
||||||
|
|
||||||
Before accepting a contribution, we ask that you provide us a Contributor
|
Before accepting a contribution, we ask that you provide us a Contributor
|
||||||
@@ -35,162 +38,11 @@ Contributor License Agreement](https://raw.github.com/openlayers/cla/master/ccla
|
|||||||
making your contribution as an individual, you can submit a digital [Individual
|
making your contribution as an individual, you can submit a digital [Individual
|
||||||
Contributor License Agreement](https://docs.google.com/spreadsheet/viewform?formkey=dGNNVUJEMXF2dERTU0FXM3JjNVBQblE6MQ).
|
Contributor License Agreement](https://docs.google.com/spreadsheet/viewform?formkey=dGNNVUJEMXF2dERTU0FXM3JjNVBQblE6MQ).
|
||||||
|
|
||||||
## Setting up development environment
|
|
||||||
|
|
||||||
You will obviously start by
|
|
||||||
[forking](https://github.com/openlayers/ol3/fork_select) the ol3 repository.
|
|
||||||
|
|
||||||
### Travis CI
|
|
||||||
|
|
||||||
The Travis CI hook is enabled on the Github repository. This means every pull request
|
|
||||||
is run through a full test suite to ensure it compiles and passes the tests. Failing
|
|
||||||
pull requests will not be merged.
|
|
||||||
|
|
||||||
Although not mandatory, it is also recommended to set up Travis CI for your ol3 fork.
|
|
||||||
For that go to your ol3 fork's Service Hooks page and set up the Travis hook.
|
|
||||||
Then every time you push to your fork, the test suite will be run. This means
|
|
||||||
errors can be caught before creating a pull request. For those making
|
|
||||||
small or occasional contributions, this may be enough to check that your contributions
|
|
||||||
are ok; in this case, you do not need to install the build tools on your local environment
|
|
||||||
as described below.
|
|
||||||
|
|
||||||
### Development dependencies
|
|
||||||
|
|
||||||
The minimum requirements are:
|
|
||||||
|
|
||||||
* GNU Make
|
|
||||||
* Git
|
|
||||||
* [Node.js](http://nodejs.org/) (0.10.x or higher)
|
|
||||||
* Python 2.6 or 2.7 with a couple of extra modules (see below)
|
|
||||||
* Java 7 (JRE and JDK)
|
|
||||||
|
|
||||||
The executables `git`, `node`, `python` and `java` should be in your `PATH`.
|
|
||||||
|
|
||||||
You can check your configuration by running:
|
|
||||||
|
|
||||||
$ make check-deps
|
|
||||||
|
|
||||||
To install the Node.js dependencies run
|
|
||||||
|
|
||||||
$ npm install
|
|
||||||
|
|
||||||
To install the extra Python modules, run:
|
|
||||||
|
|
||||||
$ sudo pip install -r requirements.txt
|
|
||||||
or
|
|
||||||
|
|
||||||
$ cat requirements.txt | sudo xargs easy_install
|
|
||||||
|
|
||||||
depending on your OS and Python installation.
|
|
||||||
|
|
||||||
(You can also install the Python modules in a Python virtual environment if you want to.)
|
|
||||||
|
|
||||||
## Working with the build tool
|
|
||||||
|
|
||||||
As an ol3 developer you will use `make` to run build targets defined in the
|
|
||||||
`Makefile` located at the root of the repository. The `Makefile` includes
|
|
||||||
targets for running the linter, the compiler, the tests, etc.
|
|
||||||
|
|
||||||
The usage of `make` is as follows:
|
|
||||||
|
|
||||||
$ make <target>
|
|
||||||
|
|
||||||
where `<target>` is the name of the build target you want to execute. For
|
|
||||||
example:
|
|
||||||
|
|
||||||
$ make test
|
|
||||||
|
|
||||||
The main build targets are `serve`, `lint`, `build`, `test`, and `check`. The
|
|
||||||
latter is a meta-target that basically runs `lint`, `build`, and `test`.
|
|
||||||
|
|
||||||
The `serve` target starts a node-based web server, which we will refer to as the *dev server*. You'll need to start that server for running the examples and the tests in a browser. More information on that further down.
|
|
||||||
|
|
||||||
Other targets include `apidoc` and `ci`. The latter is the target used on Travis CI. See ol3's [Travis configuration file](https://github.com/openlayers/ol3/blob/master/.travis.yml).
|
|
||||||
|
|
||||||
## Running the `check` target
|
|
||||||
|
|
||||||
The `check` target is to be run before pushing code to GitHub and opening pull
|
|
||||||
requests. Branches that don't pass `check` won't pass the integration tests,
|
|
||||||
and have therefore no chance of being merged into `master`.
|
|
||||||
|
|
||||||
To run the `check` target:
|
|
||||||
|
|
||||||
$ make check
|
|
||||||
|
|
||||||
If you want to run the full suite of integration tests, see "Running the integration
|
|
||||||
tests" below.
|
|
||||||
|
|
||||||
## Running examples
|
|
||||||
|
|
||||||
To run the examples you first need to start the dev server:
|
|
||||||
|
|
||||||
$ make serve
|
|
||||||
|
|
||||||
Then, just point your browser <http://localhost:3000/build/examples> in your browser. For example <http://localhost:3000/build/examples/side-by-side.html>.
|
|
||||||
|
|
||||||
Run examples against the `ol.js` standalone build:
|
|
||||||
|
|
||||||
The examples can also be run against the `ol.js` standalone build, just like
|
|
||||||
the examples [hosted](http://openlayers.org/en/master/examples/) on GitHub.
|
|
||||||
Start by executing the `host-examples` build target:
|
|
||||||
|
|
||||||
$ make host-examples
|
|
||||||
|
|
||||||
After running `host-examples` you can now open the examples index page in the browser: <http://localhost:3000/build/hosted/master/examples/>. (This assumes that you still have the dev server running.)
|
|
||||||
|
|
||||||
Append `?mode=raw` to make the example work in full debug mode. In raw mode the OpenLayers and Closure Library scripts are loaded individually by the Closure Library's `base.js` script (which the example page loads and executes before any other script).
|
|
||||||
|
|
||||||
## Running tests
|
|
||||||
|
|
||||||
To run the tests in a browser start the dev server (`make serve`) and open <http://localhost:3000/test/index.html> in the browser.
|
|
||||||
|
|
||||||
To run the tests on the console (headless testing with PhantomJS) use the `test` target:
|
|
||||||
|
|
||||||
$ make test
|
|
||||||
|
|
||||||
See also the test-specific [README](../master/test/README.md).
|
|
||||||
|
|
||||||
## Running the integration tests
|
|
||||||
|
|
||||||
When you submit a pull request the [Travis continuous integration
|
|
||||||
server](https://travis-ci.org/) will run a full suite of tests, including
|
|
||||||
building all versions of the library and checking that all of the examples
|
|
||||||
work. You will receive an email with the results, and the status will be
|
|
||||||
displayed in the pull request.
|
|
||||||
|
|
||||||
To run the full suite of integration tests use the `ci` target:
|
|
||||||
|
|
||||||
$ make ci
|
|
||||||
|
|
||||||
Running the full suite of integration tests currently takes 5-10 minutes.
|
|
||||||
|
|
||||||
This makes sure that your commit won't break the build. It also runs JSDoc3 to
|
|
||||||
make sure that there are no invalid API doc directives.
|
|
||||||
|
|
||||||
## Adding examples
|
|
||||||
|
|
||||||
Adding functionality often implies adding one or several examples. This
|
|
||||||
section provides explanations related to adding examples.
|
|
||||||
|
|
||||||
The examples are located in the `examples` directory. Adding a new example
|
|
||||||
implies creating two or three files in this directory, an `.html` file, a `.js`
|
|
||||||
file, and, optionally, a `.css` file.
|
|
||||||
|
|
||||||
You can use `simple.js` and `simple.html` as templates for new examples.
|
|
||||||
|
|
||||||
### Use of the `goog` namespace in examples
|
|
||||||
|
|
||||||
Short story: the ol3 examples should not use the `goog` namespace, except
|
|
||||||
for `goog.require`.
|
|
||||||
|
|
||||||
Longer story: we want that the ol3 examples work in multiple modes, with the
|
|
||||||
standalone lib (which has implications of the symbols and properties we
|
|
||||||
export), and compiled together with the ol3 library.
|
|
||||||
|
|
||||||
Compiling the examples together with the library makes it mandatory to declare dependencies with `goog.require` statements.
|
|
||||||
|
|
||||||
## Pull request guidelines
|
## Pull request guidelines
|
||||||
|
|
||||||
|
Before working on a pull request, create an issue explaining what you want to contribute. This ensures that your pull request won't go unnoticed, and that you are not contributing something that is not suitable for the project. Once a core developer has set the `pull request accepted` label on the issue, you can submit a pull request. The pull request description should reference the original issue.
|
||||||
|
|
||||||
Your pull request must:
|
Your pull request must:
|
||||||
|
|
||||||
* Follow OpenLayers 3's coding style.
|
* Follow OpenLayers 3's coding style.
|
||||||
@@ -329,3 +181,33 @@ Occasionally other changes to `master` might mean that your pull request cannot
|
|||||||
be merged automatically. In this case you may need to rebase your branch on a
|
be merged automatically. In this case you may need to rebase your branch on a
|
||||||
more recent `master`, resolve any conflicts, and `git push --force` to update
|
more recent `master`, resolve any conflicts, and `git push --force` to update
|
||||||
your branch so that it can be merged automatically.
|
your branch so that it can be merged automatically.
|
||||||
|
|
||||||
|
## Building on Windows
|
||||||
|
|
||||||
|
Most developers build on Linux. Building on Windows is possible under Cygwin.
|
||||||
|
When installing Cygwin from https://www.cygwin.com/, include the developer
|
||||||
|
tools to get GNU make.
|
||||||
|
|
||||||
|
First (before npm install), to avoid file permission problems between Windows
|
||||||
|
and Cygwin, edit Cygwin's /etc/fstab file to disable ACLs like this
|
||||||
|
`none /cygdrive cygdrive binary,noacl,posix=0,user 0 0`
|
||||||
|
|
||||||
|
Python is normally installed with Cygwin so need not be installed separately.
|
||||||
|
By default Cygwin will use its own version of Python rather than Window's,
|
||||||
|
so the Python modules should be installed for Cygwin's Python.
|
||||||
|
|
||||||
|
The build targets `check-deps`, `serve`, `lint`, `build`, `test`, `check` and
|
||||||
|
`host-examples` described above should all work. `host-examples` takes quite a
|
||||||
|
while to run. If a target does not run properly first time, try it again.
|
||||||
|
|
||||||
|
Currently, Firefox fails to run http://localhost:3000/build/examples
|
||||||
|
from make serve, but Chrome and Internet Explorer will.
|
||||||
|
|
||||||
|
Microsoft Visual Studio's javascript debugger may be used to debug the
|
||||||
|
build/hosted/your-branch/examples. It will be convenient to set
|
||||||
|
build/hosted/your-branch/examples/index.html as the startup page.
|
||||||
|
|
||||||
|
Your ol3 source tree need not be under the Cygwin root.
|
||||||
|
if you checkout to c:/ol3 then you can build under Cygwin at /cygdrive/c/ol3 .
|
||||||
|
However, keep the path to the ol3 files short otherwise you may see
|
||||||
|
`ENAMETOOLONG` errors.
|
||||||
|
|||||||
155
DEVELOPING.md
Normal file
155
DEVELOPING.md
Normal file
@@ -0,0 +1,155 @@
|
|||||||
|
# Developing
|
||||||
|
|
||||||
|
## Setting up development environment
|
||||||
|
|
||||||
|
You will obviously start by
|
||||||
|
[forking](https://github.com/openlayers/ol3/fork) the ol3 repository.
|
||||||
|
|
||||||
|
### Travis CI
|
||||||
|
|
||||||
|
The Travis CI hook is enabled on the Github repository. This means every pull request
|
||||||
|
is run through a full test suite to ensure it compiles and passes the tests. Failing
|
||||||
|
pull requests will not be merged.
|
||||||
|
|
||||||
|
Although not mandatory, it is also recommended to set up Travis CI for your ol3 fork.
|
||||||
|
For that go to your ol3 fork's Service Hooks page and set up the Travis hook.
|
||||||
|
Then every time you push to your fork, the test suite will be run. This means
|
||||||
|
errors can be caught before creating a pull request. For those making
|
||||||
|
small or occasional contributions, this may be enough to check that your contributions
|
||||||
|
are ok; in this case, you do not need to install the build tools on your local environment
|
||||||
|
as described below.
|
||||||
|
|
||||||
|
### Development dependencies
|
||||||
|
|
||||||
|
The minimum requirements are:
|
||||||
|
|
||||||
|
* GNU Make
|
||||||
|
* Git
|
||||||
|
* [Node.js](http://nodejs.org/) (0.10.x or higher)
|
||||||
|
* Python 2.6 or 2.7 with a couple of extra modules (see below)
|
||||||
|
* Java 7 (JRE and JDK)
|
||||||
|
|
||||||
|
The executables `git`, `node`, `python` and `java` should be in your `PATH`.
|
||||||
|
|
||||||
|
You can check your configuration by running:
|
||||||
|
|
||||||
|
$ make check-deps
|
||||||
|
|
||||||
|
To install the Node.js dependencies run
|
||||||
|
|
||||||
|
$ npm install
|
||||||
|
|
||||||
|
To install the extra Python modules, run:
|
||||||
|
|
||||||
|
$ sudo pip install -r requirements.txt
|
||||||
|
or
|
||||||
|
|
||||||
|
$ cat requirements.txt | sudo xargs easy_install
|
||||||
|
|
||||||
|
depending on your OS and Python installation.
|
||||||
|
|
||||||
|
(You can also install the Python modules in a Python virtual environment if you want to.)
|
||||||
|
|
||||||
|
## Working with the build tool
|
||||||
|
|
||||||
|
As an ol3 developer you will use `make` to run build targets defined in the
|
||||||
|
`Makefile` located at the root of the repository. The `Makefile` includes
|
||||||
|
targets for running the linter, the compiler, the tests, etc.
|
||||||
|
|
||||||
|
The usage of `make` is as follows:
|
||||||
|
|
||||||
|
$ make <target>
|
||||||
|
|
||||||
|
where `<target>` is the name of the build target you want to execute. For
|
||||||
|
example:
|
||||||
|
|
||||||
|
$ make test
|
||||||
|
|
||||||
|
The main build targets are `serve`, `lint`, `build`, `test`, and `check`. The
|
||||||
|
latter is a meta-target that basically runs `lint`, `build`, and `test`.
|
||||||
|
|
||||||
|
The `serve` target starts a node-based web server, which we will refer to as the *dev server*. You'll need to start that server for running the examples and the tests in a browser. More information on that further down.
|
||||||
|
|
||||||
|
Other targets include `apidoc` and `ci`. The latter is the target used on Travis CI. See ol3's [Travis configuration file](https://github.com/openlayers/ol3/blob/master/.travis.yml).
|
||||||
|
|
||||||
|
## Running the `check` target
|
||||||
|
|
||||||
|
The `check` target is to be run before pushing code to GitHub and opening pull
|
||||||
|
requests. Branches that don't pass `check` won't pass the integration tests,
|
||||||
|
and have therefore no chance of being merged into `master`.
|
||||||
|
|
||||||
|
To run the `check` target:
|
||||||
|
|
||||||
|
$ make check
|
||||||
|
|
||||||
|
If you want to run the full suite of integration tests, see "Running the integration
|
||||||
|
tests" below.
|
||||||
|
|
||||||
|
## Running examples
|
||||||
|
|
||||||
|
To run the examples you first need to start the dev server:
|
||||||
|
|
||||||
|
$ make serve
|
||||||
|
|
||||||
|
Then, just point your browser <http://localhost:3000/build/examples> in your browser. For example <http://localhost:3000/build/examples/side-by-side.html>.
|
||||||
|
|
||||||
|
Run examples against the `ol.js` standalone build:
|
||||||
|
|
||||||
|
The examples can also be run against the `ol.js` standalone build, just like
|
||||||
|
the examples [hosted](http://openlayers.org/en/master/examples/) on GitHub.
|
||||||
|
Start by executing the `host-examples` build target:
|
||||||
|
|
||||||
|
$ make host-examples
|
||||||
|
|
||||||
|
After running `host-examples` you can now open the examples index page in the browser: <http://localhost:3000/build/hosted/master/examples/>. (This assumes that you still have the dev server running.)
|
||||||
|
|
||||||
|
Append `?mode=raw` to make the example work in full debug mode. In raw mode the OpenLayers and Closure Library scripts are loaded individually by the Closure Library's `base.js` script (which the example page loads and executes before any other script).
|
||||||
|
|
||||||
|
## Running tests
|
||||||
|
|
||||||
|
To run the tests in a browser start the dev server (`make serve`) and open <http://localhost:3000/test/index.html> in the browser.
|
||||||
|
|
||||||
|
To run the tests on the console (headless testing with PhantomJS) use the `test` target:
|
||||||
|
|
||||||
|
$ make test
|
||||||
|
|
||||||
|
See also the test-specific [README](../master/test/README.md).
|
||||||
|
|
||||||
|
## Running the integration tests
|
||||||
|
|
||||||
|
When you submit a pull request the [Travis continuous integration
|
||||||
|
server](https://travis-ci.org/) will run a full suite of tests, including
|
||||||
|
building all versions of the library and checking that all of the examples
|
||||||
|
work. You will receive an email with the results, and the status will be
|
||||||
|
displayed in the pull request.
|
||||||
|
|
||||||
|
To run the full suite of integration tests use the `ci` target:
|
||||||
|
|
||||||
|
$ make ci
|
||||||
|
|
||||||
|
Running the full suite of integration tests currently takes 5-10 minutes.
|
||||||
|
|
||||||
|
This makes sure that your commit won't break the build. It also runs JSDoc3 to
|
||||||
|
make sure that there are no invalid API doc directives.
|
||||||
|
|
||||||
|
## Adding examples
|
||||||
|
|
||||||
|
Adding functionality often implies adding one or several examples. This
|
||||||
|
section provides explanations related to adding examples.
|
||||||
|
|
||||||
|
The examples are located in the `examples` directory. Adding a new example
|
||||||
|
implies creating two or three files in this directory, an `.html` file, a `.js`
|
||||||
|
file, and, optionally, a `.css` file.
|
||||||
|
|
||||||
|
You can use `simple.js` and `simple.html` as templates for new examples.
|
||||||
|
|
||||||
|
### Use of the `goog` namespace in examples
|
||||||
|
|
||||||
|
Short story: the ol3 examples should not use the `goog` namespace, except
|
||||||
|
for `goog.require`.
|
||||||
|
|
||||||
|
Longer story: we want that the ol3 examples work in multiple modes, with the
|
||||||
|
standalone lib (which has implications of the symbols and properties we
|
||||||
|
export), and compiled together with the ol3 library.
|
||||||
|
|
||||||
|
Compiling the examples together with the library makes it mandatory to declare dependencies with `goog.require` statements.
|
||||||
19
Makefile
19
Makefile
@@ -19,11 +19,16 @@ BUILD_HOSTED := build/hosted/$(BRANCH)
|
|||||||
BUILD_HOSTED_EXAMPLES := $(addprefix $(BUILD_HOSTED)/,$(EXAMPLES))
|
BUILD_HOSTED_EXAMPLES := $(addprefix $(BUILD_HOSTED)/,$(EXAMPLES))
|
||||||
BUILD_HOSTED_EXAMPLES_JS := $(addprefix $(BUILD_HOSTED)/,$(EXAMPLES_JS))
|
BUILD_HOSTED_EXAMPLES_JS := $(addprefix $(BUILD_HOSTED)/,$(EXAMPLES_JS))
|
||||||
|
|
||||||
CHECK_EXAMPLE_TIMESTAMPS = $(patsubst examples/%.html,build/timestamps/check-%-timestamp,$(EXAMPLES_HTML))
|
UNPHANTOMABLE_EXAMPLES = examples/shaded-relief.html examples/raster.html examples/region-growing.html examples/color-manipulation.html
|
||||||
|
CHECK_EXAMPLE_TIMESTAMPS = $(patsubst examples/%.html,build/timestamps/check-%-timestamp,$(filter-out $(UNPHANTOMABLE_EXAMPLES),$(EXAMPLES_HTML)))
|
||||||
|
|
||||||
TASKS_JS := $(shell find tasks -name '*.js')
|
TASKS_JS := $(shell find tasks -name '*.js')
|
||||||
|
|
||||||
CLOSURE_LIB = $(shell node -e 'process.stdout.write(require("closure-util").getLibraryPath())')
|
ifeq (CYGWIN,$(findstring CYGWIN,$(OS)))
|
||||||
|
CLOSURE_LIB = $(shell cygpath -u $(shell node -e 'process.stdout.write(require("closure-util").getLibraryPath())'))
|
||||||
|
else
|
||||||
|
CLOSURE_LIB = $(shell node -e 'process.stdout.write(require("closure-util").getLibraryPath())')
|
||||||
|
endif
|
||||||
|
|
||||||
ifeq ($(OS),Darwin)
|
ifeq ($(OS),Darwin)
|
||||||
STAT_COMPRESSED = stat -f ' compressed: %z bytes'
|
STAT_COMPRESSED = stat -f ' compressed: %z bytes'
|
||||||
@@ -166,7 +171,7 @@ host-libraries: build/timestamps/node-modules-timestamp
|
|||||||
@mkdir -p $(BUILD_HOSTED)/ol.ext
|
@mkdir -p $(BUILD_HOSTED)/ol.ext
|
||||||
@cp -r build/ol.ext/* $(BUILD_HOSTED)/ol.ext/
|
@cp -r build/ol.ext/* $(BUILD_HOSTED)/ol.ext/
|
||||||
|
|
||||||
$(BUILD_EXAMPLES): $(EXAMPLES)
|
$(BUILD_EXAMPLES): $(EXAMPLES) package.json
|
||||||
@mkdir -p $(@D)
|
@mkdir -p $(@D)
|
||||||
@node tasks/build-examples.js
|
@node tasks/build-examples.js
|
||||||
|
|
||||||
@@ -183,13 +188,13 @@ build/timestamps/check-%-timestamp: $(BUILD_HOSTED)/examples/%.html \
|
|||||||
|
|
||||||
build/timestamps/check-requires-timestamp: $(SRC_JS) $(EXAMPLES_JS) \
|
build/timestamps/check-requires-timestamp: $(SRC_JS) $(EXAMPLES_JS) \
|
||||||
$(SRC_SHADER_JS) $(SPEC_JS) \
|
$(SRC_SHADER_JS) $(SPEC_JS) \
|
||||||
$(SPEC_RENDERING JS)
|
$(SPEC_RENDERING_JS)
|
||||||
@mkdir -p $(@D)
|
@mkdir -p $(@D)
|
||||||
@python bin/check-requires.py $(CLOSURE_LIB) $^
|
@python bin/check-requires.py $(CLOSURE_LIB) $^
|
||||||
@touch $@
|
@touch $@
|
||||||
|
|
||||||
build/timestamps/check-whitespace-timestamp: $(SRC_JS) $(EXAMPLES_JS) \
|
build/timestamps/check-whitespace-timestamp: $(SRC_JS) $(EXAMPLES_JS) \
|
||||||
$(SPEC_JS) $(SPEC_RENDERING JS) \
|
$(SPEC_JS) $(SPEC_RENDERING_JS) \
|
||||||
$(SRC_JSDOC)
|
$(SRC_JSDOC)
|
||||||
@mkdir -p $(@D)
|
@mkdir -p $(@D)
|
||||||
@python bin/check-whitespace.py $^
|
@python bin/check-whitespace.py $^
|
||||||
@@ -318,5 +323,5 @@ build/test_rendering_requires.js: $(SPEC_RENDERING_JS)
|
|||||||
@mkdir -p $(@D)
|
@mkdir -p $(@D)
|
||||||
@node tasks/generate-requires.js $^ > $@
|
@node tasks/generate-requires.js $^ > $@
|
||||||
|
|
||||||
%shader.js: %.glsl src/ol/webgl/shader.mustache bin/pyglslunit.py
|
%shader.js: %.glsl src/ol/webgl/shader.mustache bin/pyglslunit.py build/timestamps/node-modules-timestamp
|
||||||
@python bin/pyglslunit.py --input $< --template src/ol/webgl/shader.mustache --output $@
|
@python bin/pyglslunit.py --input $< | ./node_modules/.bin/mustache - src/ol/webgl/shader.mustache > $@
|
||||||
|
|||||||
@@ -7,13 +7,13 @@
|
|||||||
|
|
||||||
## Getting Started
|
## Getting Started
|
||||||
|
|
||||||
- Download the [latest release](https://github.com/openlayers/ol3/releases/tag/v3.4.0)
|
- Download the [latest release](http://openlayers.org/download/)
|
||||||
- Install with npm: `npm install openlayers`
|
- Install with npm: `npm install openlayers`
|
||||||
- Clone the repo: `git clone git@github.com:openlayers/ol3.git`
|
- Clone the repo: `git clone git@github.com:openlayers/ol3.git`
|
||||||
|
|
||||||
## Documentation
|
## Documentation
|
||||||
|
|
||||||
Check out the [hosted examples](http://openlayers.org/en/master/examples/), the [workshop](http://openlayers.org/ol3-workshop/) or [API docs](http://openlayers.org/en/master/apidoc/).
|
Check out the [hosted examples](http://openlayers.org/en/master/examples/), the [workshop](http://openlayers.org/workshop/) or [API docs](http://openlayers.org/en/master/apidoc/).
|
||||||
|
|
||||||
## Bugs
|
## Bugs
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/python
|
||||||
|
|
||||||
from optparse import OptionParser
|
from optparse import OptionParser
|
||||||
|
import json
|
||||||
import re
|
import re
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
import pystache
|
|
||||||
|
|
||||||
|
|
||||||
ESCAPE_SEQUENCE = {
|
ESCAPE_SEQUENCE = {
|
||||||
@@ -42,7 +42,6 @@ def main(argv):
|
|||||||
option_parser = OptionParser()
|
option_parser = OptionParser()
|
||||||
option_parser.add_option('--input')
|
option_parser.add_option('--input')
|
||||||
option_parser.add_option('--output')
|
option_parser.add_option('--output')
|
||||||
option_parser.add_option('--template')
|
|
||||||
options, args = option_parser.parse_args(argv[1:])
|
options, args = option_parser.parse_args(argv[1:])
|
||||||
|
|
||||||
context = {}
|
context = {}
|
||||||
@@ -114,7 +113,7 @@ def main(argv):
|
|||||||
output = open(options.output, 'wb')
|
output = open(options.output, 'wb')
|
||||||
else:
|
else:
|
||||||
output = sys.stdout
|
output = sys.stdout
|
||||||
output.write(pystache.render(open(options.template, 'rb').read(), context))
|
json.dump(context, output)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
|||||||
@@ -1,5 +1,197 @@
|
|||||||
## Upgrade notes
|
## Upgrade notes
|
||||||
|
|
||||||
|
### v3.11.0
|
||||||
|
|
||||||
|
#### `ol.format.KML` changes
|
||||||
|
|
||||||
|
KML icons are scaled 50% so that the rendering better matches Google Earth rendering.
|
||||||
|
|
||||||
|
If a KML placemark has a name and is a point, an `ol.style.Text` is created with the name displayed to the right of the icon (if there is an icon).
|
||||||
|
This can be controlled with the showPointNames option which defaults to true.
|
||||||
|
|
||||||
|
To disable rendering of the point names for placemarks, use the option:
|
||||||
|
new ol.format.KML({ showPointNames: false });
|
||||||
|
|
||||||
|
|
||||||
|
#### `ol.interaction.DragBox` and `ol.interaction.DragZoom` changes
|
||||||
|
|
||||||
|
Styling is no longer done with `ol.Style`, but with pure CSS. The `style` constructor option is no longer required, and no longer available. Instead, there is a `className` option for the CSS selector. The default for `ol.interaction.DragBox` is `ol-dragbox`, and `ol.interaction.DragZoom` uses `ol-dragzoom`. If you previously had
|
||||||
|
```js
|
||||||
|
new ol.interaction.DragZoom({
|
||||||
|
style: new ol.style.Style({
|
||||||
|
stroke: new ol.style.Stroke({
|
||||||
|
color: 'red',
|
||||||
|
width: 3
|
||||||
|
}),
|
||||||
|
fill: new ol.style.Fill({
|
||||||
|
color: [255, 255, 255, 0.4]
|
||||||
|
})
|
||||||
|
})
|
||||||
|
});
|
||||||
|
```
|
||||||
|
you'll now just need
|
||||||
|
```js
|
||||||
|
new ol.interaction.DragZoom();
|
||||||
|
```
|
||||||
|
but with additional css:
|
||||||
|
```css
|
||||||
|
.ol-dragzoom {
|
||||||
|
border-color: red;
|
||||||
|
border-width: 3px;
|
||||||
|
background-color: rgba(255,255,255,0.4);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Removal of `ol.source.TileVector`
|
||||||
|
|
||||||
|
With the introduction of true vector tile support, `ol.source.TileVector` becomes obsolete. Change your code to use `ol.layer.VectorTile` and `ol.source.VectorTile` instead of `ol.layer.Vector` and `ol.source.TileVector`.
|
||||||
|
|
||||||
|
#### `ol.Map#forEachFeatureAtPixel` changes for unmanaged layers
|
||||||
|
|
||||||
|
`ol.Map#forEachFeatureAtPixel` will still be called for unmanaged layers, but the 2nd argument to the callback function will be `null` instead of a reference to the unmanaged layer. This brings back the behavior of the abandoned `ol.FeatureOverlay` that was replaced by unmanaged layers.
|
||||||
|
|
||||||
|
If you are affected by this change, please change your unmanaged layer to a regular layer by using e.g. `ol.Map#addLayer` instead of `ol.layer.Layer#setMap`.
|
||||||
|
|
||||||
|
### v3.10.0
|
||||||
|
|
||||||
|
#### `ol.layer.Layer` changes
|
||||||
|
|
||||||
|
The experimental `setHue`, `setContrast`, `setBrightness`, `setSaturation`, and the corresponding getter methods have been removed. These properties only worked with the WebGL renderer. If are interested in applying color transforms, look for the `postcompose` event in the API docs. In addition, the `ol.source.Raster` source provides a way to create new raster data based on arbitrary transforms run on any number of input sources.
|
||||||
|
|
||||||
|
### v3.9.0
|
||||||
|
|
||||||
|
#### `ol.style.Circle` changes
|
||||||
|
|
||||||
|
The experimental `getAnchor`, `getOrigin`, and `getSize` methods have been removed. The anchor and origin of a circle symbolizer are not modifiable, so these properties should not need to be accessed. The radius and stroke width can be used to calculate the rendered size of a circle symbolizer if needed:
|
||||||
|
|
||||||
|
```js
|
||||||
|
// calculate rendered size of a circle symbolizer
|
||||||
|
var width = 2 * circle.getRadius();
|
||||||
|
if (circle.getStroke()) {
|
||||||
|
width += circle.getStroke().getWidth() + 1;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### v3.8.0
|
||||||
|
|
||||||
|
There should be nothing special required when upgrading from v3.7.0 to v3.8.0.
|
||||||
|
|
||||||
|
### v3.7.0
|
||||||
|
|
||||||
|
#### Removal of `ol.FeatureOverlay`
|
||||||
|
|
||||||
|
Instead of an `ol.FeatureOverlay`, we now use an `ol.layer.Vector` with an
|
||||||
|
`ol.source.Vector`. If you previously had:
|
||||||
|
```js
|
||||||
|
var featureOverlay = new ol.FeatureOverlay({
|
||||||
|
map: map,
|
||||||
|
style: overlayStyle
|
||||||
|
});
|
||||||
|
featureOverlay.addFeature(feature);
|
||||||
|
featureOverlay.removeFeature(feature);
|
||||||
|
var collection = featureOverlay.getFeatures();
|
||||||
|
```
|
||||||
|
you will have to change this to:
|
||||||
|
```js
|
||||||
|
var collection = new ol.Collection();
|
||||||
|
var featureOverlay = new ol.layer.Vector({
|
||||||
|
map: map,
|
||||||
|
source: new ol.source.Vector({
|
||||||
|
features: collection,
|
||||||
|
useSpatialIndex: false // optional, might improve performance
|
||||||
|
}),
|
||||||
|
style: overlayStyle,
|
||||||
|
updateWhileAnimating: true, // optional, for instant visual feedback
|
||||||
|
updateWhileInteracting: true // optional, for instant visual feedback
|
||||||
|
});
|
||||||
|
featureOverlay.getSource().addFeature(feature);
|
||||||
|
featureOverlay.getSource().removeFeature(feature);
|
||||||
|
```
|
||||||
|
|
||||||
|
With the removal of `ol.FeatureOverlay`, `zIndex` symbolizer properties of overlays are no longer stacked per map, but per layer/overlay. If you previously had multiple feature overlays where you controlled the rendering order of features by using `zIndex` symbolizer properties, you can now achieve the same rendering order only if all overlay features are on the same layer.
|
||||||
|
|
||||||
|
Note that `ol.FeatureOverlay#getFeatures()` returned an `{ol.Collection.<ol.Feature>}`, whereas `ol.source.Vector#getFeatures()` returns an `{Array.<ol.Feature>}`.
|
||||||
|
|
||||||
|
#### `ol.TileCoord` changes
|
||||||
|
|
||||||
|
Until now, the API exposed two different types of `ol.TileCoord` tile coordinates: internal ones that increase left to right and upward, and transformed ones that may increase downward, as defined by a transform function on the tile grid. With this change, the API now only exposes tile coordinates that increase left to right and upward.
|
||||||
|
|
||||||
|
Previously, tile grids created by OpenLayers either had their origin at the top-left or at the bottom-left corner of the extent. To make it easier for application developers to transform tile coordinates to the common XYZ tiling scheme, all tile grids that OpenLayers creates internally have their origin now at the top-left corner of the extent.
|
||||||
|
|
||||||
|
This change affects applications that configure a custom `tileUrlFunction` for an `ol.source.Tile`. Previously, the `tileUrlFunction` was called with rather unpredictable tile coordinates, depending on whether a tile coordinate transform took place before calling the `tileUrlFunction`. Now it is always called with OpenLayers tile coordinates. To transform these into the common XYZ tiling scheme, a custom `tileUrlFunction` has to change the `y` value (tile row) of the `ol.TileCoord`:
|
||||||
|
```js
|
||||||
|
function tileUrlFunction = function(tileCoord, pixelRatio, projection) {
|
||||||
|
var urlTemplate = '{z}/{x}/{y}';
|
||||||
|
return urlTemplate
|
||||||
|
.replace('{z}', tileCoord[0].toString())
|
||||||
|
.replace('{x}', tileCoord[1].toString())
|
||||||
|
.replace('{y}', (-tileCoord[2] - 1).toString());
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
The `ol.tilegrid.TileGrid#createTileCoordTransform()` function which could be used to get the tile grid's tile coordinate transform function has been removed. This function was confusing and should no longer be needed now that application developers get tile coordinates in a known layout.
|
||||||
|
|
||||||
|
The code snippets below show how your application code needs to be changed:
|
||||||
|
|
||||||
|
Old application code (with `ol.tilegrid.TileGrid#createTileCoordTransform()`):
|
||||||
|
```js
|
||||||
|
var transform = source.getTileGrid().createTileCoordTransform();
|
||||||
|
var tileUrlFunction = function(tileCoord, pixelRatio, projection) {
|
||||||
|
tileCoord = transform(tileCoord, projection);
|
||||||
|
return 'http://mytiles.com/' +
|
||||||
|
tileCoord[0] + '/' + tileCoord[1] + '/' + tileCoord[2] + '.png';
|
||||||
|
};
|
||||||
|
```
|
||||||
|
Old application code (with custom `y` transform):
|
||||||
|
```js
|
||||||
|
var tileUrlFunction = function(tileCoord, pixelRatio, projection) {
|
||||||
|
var z = tileCoord[0];
|
||||||
|
var yFromBottom = tileCoord[2];
|
||||||
|
var resolution = tileGrid.getResolution(z);
|
||||||
|
var tileHeight = ol.size.toSize(tileSize)[1];
|
||||||
|
var matrixHeight =
|
||||||
|
Math.floor(ol.extent.getHeight(extent) / tileHeight / resolution);
|
||||||
|
return 'http://mytiles.com/' +
|
||||||
|
tileCoord[0] + '/' + tileCoord[1] + '/' +
|
||||||
|
(matrixHeight - yFromBottom - 1) + '.png';
|
||||||
|
|
||||||
|
};
|
||||||
|
```
|
||||||
|
New application code (simple -y - 1 transform):
|
||||||
|
```js
|
||||||
|
var tileUrlFunction = function(tileCoord, pixelRatio, projection) {
|
||||||
|
return 'http://mytiles.com/' +
|
||||||
|
tileCoord[0] + '/' + tileCoord[1] + '/' + (-tileCoord[2] - 1) + '.png';
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Removal of `ol.tilegrid.Zoomify`
|
||||||
|
|
||||||
|
The replacement of `ol.tilegrid.Zoomify` is a plain `ol.tilegrid.TileGrid`, configured with `extent`, `origin` and `resolutions`. If the `size` passed to the `ol.source.Zoomify` source is `[width, height]`, then the extent for the tile grid will be `[0, -height, width, 0]`, and the origin will be `[0, 0]`.
|
||||||
|
|
||||||
|
#### Replace `ol.View.fitExtent()` and `ol.View.fitGeometry()` with `ol.View.fit()`
|
||||||
|
* This combines two previously distinct functions into one more flexible call which takes either a geometry or an extent.
|
||||||
|
* Rename all calls to `fitExtent` and `fitGeometry` to `fit`.
|
||||||
|
|
||||||
|
#### Change to `ol.interaction.Modify`
|
||||||
|
|
||||||
|
When single clicking a line or boundary within the `pixelTolerance`, a vertex is now created.
|
||||||
|
|
||||||
|
### v3.6.0
|
||||||
|
|
||||||
|
#### `ol.interaction.Draw` changes
|
||||||
|
|
||||||
|
* The `minPointsPerRing` config option has been renamed to `minPoints`. It is now also available for linestring drawing, not only for polygons.
|
||||||
|
* The `ol.DrawEvent` and `ol.DrawEventType` types were renamed to `ol.interaction.DrawEvent` and `ol.interaction.DrawEventType`. This has an impact on your code only if your code is compiled together with ol3.
|
||||||
|
|
||||||
|
#### `ol.tilegrid` changes
|
||||||
|
|
||||||
|
* The `ol.tilegrid.XYZ` constructor has been replaced by a static `ol.tilegrid.createXYZ()` function. The `ol.tilegrid.createXYZ()` function takes the same arguments as the previous `ol.tilegrid.XYZ` constructor, but returns an `ol.tilegrid.TileGrid` instance.
|
||||||
|
* The internal tile coordinate scheme for XYZ sources has been changed. Previously, the `y` of tile coordinates was transformed to the coordinates used by sources by calculating `-y-1`. Now, it is transformed by calculating `height-y-1`, where height is the number of rows of the tile grid at the zoom level of the tile coordinate.
|
||||||
|
* The `widths` constructor option of `ol.tilegrid.TileGrid` and subclasses is no longer available, and it is no longer necessary to get proper wrapping at the 180° meridian. However, for `ol.tilegrid.WMTS`, there is a new option `sizes`, where each entry is an `ol.Size` with the `width` ('TileMatrixWidth' in WMTS capabilities) as first and the `height` ('TileMatrixHeight') as second entry of the array. For other tile grids, users can
|
||||||
|
now specify an `extent` instead of `widths`. These settings are used to restrict the range of tiles that sources will request.
|
||||||
|
* For `ol.source.TileWMS`, the default value of `warpX` used to be `undefined`, meaning that WMS requests with out-of-extent tile BBOXes would be sent. Now `wrapX` can only be `true` or `false`, and the new default is `true`. No application code changes should be required, but the resulting WMS requests for out-of-extent tiles will no longer use out-of-extent BBOXes, but ones that are shifted to real-world coordinates.
|
||||||
|
|
||||||
### v3.5.0
|
### v3.5.0
|
||||||
|
|
||||||
#### `ol.Object` and `bindTo`
|
#### `ol.Object` and `bindTo`
|
||||||
|
|||||||
93
changelog/v3.10.0.md
Normal file
93
changelog/v3.10.0.md
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
# v3.10.0
|
||||||
|
|
||||||
|
|
||||||
|
## Summary
|
||||||
|
|
||||||
|
The v3.10.0 release includes features and fixes from 66 pull requests since the v3.9.0 release. New features and improvements include:
|
||||||
|
|
||||||
|
* Full touch gesture support for the Microsoft Edge browser.
|
||||||
|
* Improved API docs - required constructor options are now marked as such.
|
||||||
|
* Text styles (vector labels) now work with defaults instead of failing when only a label text is set.
|
||||||
|
* Write support for GML3 features with multiple geometries
|
||||||
|
|
||||||
|
See the complete list below for details. And see the following notes to know how to upgrade from v3.9.0 to v3.10.0.
|
||||||
|
|
||||||
|
|
||||||
|
## Upgrade notes
|
||||||
|
|
||||||
|
#### `ol.layer.Layer` changes
|
||||||
|
|
||||||
|
The experimental `setHue`, `setContrast`, `setBrightness`, `setSaturation`, and the corresponding getter methods have been removed. These properties only worked with the WebGL renderer. If you are interested in applying color transforms, look for the `postcompose` event in the API docs. In addition, the `ol.source.Raster` source provides a way to create new raster data based on arbitrary transforms run on any number of input sources.
|
||||||
|
|
||||||
|
#### Removal of legacy Internet Explorer support
|
||||||
|
|
||||||
|
If you are building an appliction that supports Internet Explorer 8 or older, you'll need to use ES5 shims to make OpenLayers work. As before, support for such old browsers is very basic, and we recommend to not support them.
|
||||||
|
|
||||||
|
|
||||||
|
## New features and fixes
|
||||||
|
|
||||||
|
* [#4237](https://github.com/openlayers/ol3/pull/4237) - #3328: GML3 - Writing features with multiple geometries ([@awaterme](https://github.com/awaterme))
|
||||||
|
* [#4218](https://github.com/openlayers/ol3/pull/4218) - Add 'getLayer()' method to 'ol.interaction.Select' ([@jonataswalker](https://github.com/jonataswalker))
|
||||||
|
* [#4036](https://github.com/openlayers/ol3/pull/4036) - Fix modify interaction event order ([@alvinlindstam](https://github.com/alvinlindstam))
|
||||||
|
* [#4036](https://github.com/openlayers/ol3/pull/4036) - Fix modify interaction event order ([@alvinlindstam](https://github.com/alvinlindstam))
|
||||||
|
* [#4116](https://github.com/openlayers/ol3/pull/4116) - Make ol.control.OverviewMap's view configurable ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#4234](https://github.com/openlayers/ol3/pull/4234) - Support OGC WKT proj4 def.units and def.to_meter ([@tbarsballe](https://github.com/tbarsballe))
|
||||||
|
* [#4224](https://github.com/openlayers/ol3/pull/4224) - Don't transform the angle into degrees to rotate the element ([@fredj](https://github.com/fredj))
|
||||||
|
* [#4231](https://github.com/openlayers/ol3/pull/4231) - Revert "Merge pull request #4217 from ThomasG77/clipboardjs-replacement" ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#4217](https://github.com/openlayers/ol3/pull/4217) - Replace ZeroClipboard with Clipboard.js to remove flash dependency ([@ThomasG77](https://github.com/ThomasG77))
|
||||||
|
* [#4223](https://github.com/openlayers/ol3/pull/4223) - Remove goog.fx.easing ([@fredj](https://github.com/fredj))
|
||||||
|
* [#4222](https://github.com/openlayers/ol3/pull/4222) - Remove unnecessary cast ([@fredj](https://github.com/fredj))
|
||||||
|
* [#4209](https://github.com/openlayers/ol3/pull/4209) - Remove goog.string.remove ([@gberaudo](https://github.com/gberaudo))
|
||||||
|
* [#4207](https://github.com/openlayers/ol3/pull/4207) - Remove goog.string.startsWith ([@gberaudo](https://github.com/gberaudo))
|
||||||
|
* [#4208](https://github.com/openlayers/ol3/pull/4208) - Remove goog.string.trim() ([@gberaudo](https://github.com/gberaudo))
|
||||||
|
* [#4216](https://github.com/openlayers/ol3/pull/4216) - Fix canvas replay which broke with 31a68e2 ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#4202](https://github.com/openlayers/ol3/pull/4202) - Remove use of goog.dom.appendChild ([@fredj](https://github.com/fredj))
|
||||||
|
* [#4205](https://github.com/openlayers/ol3/pull/4205) - Minor cleanup ([@fredj](https://github.com/fredj))
|
||||||
|
* [#4203](https://github.com/openlayers/ol3/pull/4203) - Cosmetic changes to example html / css ([@marcjansen](https://github.com/marcjansen))
|
||||||
|
* [#4184](https://github.com/openlayers/ol3/pull/4184) - Adjust iframe's position of GetFeatureInfo examples ([@jonataswalker](https://github.com/jonataswalker))
|
||||||
|
* [#4192](https://github.com/openlayers/ol3/pull/4192) - Remove use of goog.isNull in favor of simple truthy checks ([@marcjansen](https://github.com/marcjansen))
|
||||||
|
* [#4187](https://github.com/openlayers/ol3/pull/4187) - Fix {-y} template calculation for custom (TMS) tile grids ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#4176](https://github.com/openlayers/ol3/pull/4176) - Remove use of goog.isDefAndNotNull().
|
||||||
|
([@tschaub](https://github.com/tschaub))
|
||||||
|
* [#4200](https://github.com/openlayers/ol3/pull/4200) - Do not use goog.object.get ([@marcjansen](https://github.com/marcjansen))
|
||||||
|
* [#4198](https://github.com/openlayers/ol3/pull/4198) - Improve ol.control.Rotate.prototype.resetNorth_ performance ([@denilsonsa](https://github.com/denilsonsa))
|
||||||
|
* [#4197](https://github.com/openlayers/ol3/pull/4197) - Remove blur action on MOUSEOUT on Zoom Out button ([@denilsonsa](https://github.com/denilsonsa))
|
||||||
|
* [#4195](https://github.com/openlayers/ol3/pull/4195) - #4171: Prefer current layout as default on MultiLineString.setLineStrings() ([@awaterme](https://github.com/awaterme))
|
||||||
|
* [#4172](https://github.com/openlayers/ol3/pull/4172) - #4171: Prefer current layout as default on Multipolygon.setPolygons() ([@awaterme](https://github.com/awaterme))
|
||||||
|
* [#4190](https://github.com/openlayers/ol3/pull/4190) - Remove use of goog.functions.constant ([@marcjansen](https://github.com/marcjansen))
|
||||||
|
* [#4188](https://github.com/openlayers/ol3/pull/4188) - Remove use of goog.object.getKeys ([@fredj](https://github.com/fredj))
|
||||||
|
* [#4189](https://github.com/openlayers/ol3/pull/4189) - Replace goog.nullFunction with ol.nullFunction ([@marcjansen](https://github.com/marcjansen))
|
||||||
|
* [#4165](https://github.com/openlayers/ol3/pull/4165) - Use ECMAScript 5.1 Array functions instead of goog.array ([@fredj](https://github.com/fredj))
|
||||||
|
* [#4181](https://github.com/openlayers/ol3/pull/4181) - Remove use of goog.array.contains ([@fredj](https://github.com/fredj))
|
||||||
|
* [#4162](https://github.com/openlayers/ol3/pull/4162) - Remove ol.LEGACY_IE_SUPPORT ([@fredj](https://github.com/fredj))
|
||||||
|
* [#4174](https://github.com/openlayers/ol3/pull/4174) - Remove hue, saturation, contrast, and brightness as layer properties. ([@tschaub](https://github.com/tschaub))
|
||||||
|
* [#4183](https://github.com/openlayers/ol3/pull/4183) - Remove @api on getHitDetectionFramebuffer ([@elemoine](https://github.com/elemoine))
|
||||||
|
* [#4179](https://github.com/openlayers/ol3/pull/4179) - Use Date.now() instead of goog.now() ([@marcjansen](https://github.com/marcjansen))
|
||||||
|
* [#4175](https://github.com/openlayers/ol3/pull/4175) - Remove use of goog.math.clamp(). ([@tschaub](https://github.com/tschaub))
|
||||||
|
* [#4173](https://github.com/openlayers/ol3/pull/4173) - Only animate when resolution is about to be changed ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#4129](https://github.com/openlayers/ol3/pull/4129) - Remove use of goog.isDef. ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#4168](https://github.com/openlayers/ol3/pull/4168) - Tile preload example wording (fixes #4147) ([@wlerner](https://github.com/wlerner))
|
||||||
|
* [#4167](https://github.com/openlayers/ol3/pull/4167) - Remove externs in externs/closure-compiler.js ([@fredj](https://github.com/fredj))
|
||||||
|
* [#4166](https://github.com/openlayers/ol3/pull/4166) - Use version 20150920 of Closure Compiler ([@elemoine](https://github.com/elemoine))
|
||||||
|
* [#4159](https://github.com/openlayers/ol3/pull/4159) - Remove use of goog.object.containsKey ([@fredj](https://github.com/fredj))
|
||||||
|
* [#4157](https://github.com/openlayers/ol3/pull/4157) - Fix typo in doc ([@elemoine](https://github.com/elemoine))
|
||||||
|
* [#4138](https://github.com/openlayers/ol3/pull/4138) - Enhanced documentation for ol.style.Text ([@ekargee](https://github.com/ekargee))
|
||||||
|
* [#4151](https://github.com/openlayers/ol3/pull/4151) - Remove bogus assertion ([@elemoine](https://github.com/elemoine))
|
||||||
|
* [#4110](https://github.com/openlayers/ol3/pull/4110) - Minor cleanups ([@fredj](https://github.com/fredj))
|
||||||
|
* [#4156](https://github.com/openlayers/ol3/pull/4156) - Rename drag-features example to custom-interactions ([@elemoine](https://github.com/elemoine))
|
||||||
|
* [#4150](https://github.com/openlayers/ol3/pull/4150) - Remove use of goog.object.remove ([@fredj](https://github.com/fredj))
|
||||||
|
* [#4145](https://github.com/openlayers/ol3/pull/4145) - API method for simplifying geometries. ([@tschaub](https://github.com/tschaub))
|
||||||
|
* [#4153](https://github.com/openlayers/ol3/pull/4153) - Add a "features" option to ol.interaction.Select ([@elemoine](https://github.com/elemoine))
|
||||||
|
* [#4144](https://github.com/openlayers/ol3/pull/4144) - Set context.fillStyle to a string ([@elemoine](https://github.com/elemoine))
|
||||||
|
* [#4149](https://github.com/openlayers/ol3/pull/4149) - Remove use of goog.array.isEmpty ([@fredj](https://github.com/fredj))
|
||||||
|
* [#4139](https://github.com/openlayers/ol3/pull/4139) - Add turf.js and JSTS example ([@tsauerwein](https://github.com/tsauerwein))
|
||||||
|
* [#4136](https://github.com/openlayers/ol3/pull/4136) - Fix the 'click-to-fork' link in contributer notes ([@marcjansen](https://github.com/marcjansen))
|
||||||
|
* [#4132](https://github.com/openlayers/ol3/pull/4132) - Update quickstart tutorial ([@tsauerwein](https://github.com/tsauerwein))
|
||||||
|
* [#4111](https://github.com/openlayers/ol3/pull/4111) - Use a blackish default for filling texts ([@marcjansen](https://github.com/marcjansen))
|
||||||
|
* [#4120](https://github.com/openlayers/ol3/pull/4120) - Remove invalid link to featureOverlay in API doc ([@kalbermattenm](https://github.com/kalbermattenm))
|
||||||
|
* [#4117](https://github.com/openlayers/ol3/pull/4117) - forEachFeatureAtPixel shouldn't fail if layer has no source ([@pgiraud](https://github.com/pgiraud))
|
||||||
|
* [#4106](https://github.com/openlayers/ol3/pull/4106) - Focus to search field on page load ([@elemoine](https://github.com/elemoine))
|
||||||
|
* [#4079](https://github.com/openlayers/ol3/pull/4079) - Automatically mark required options in API-docs ([@marcjansen](https://github.com/marcjansen))
|
||||||
|
* [#4108](https://github.com/openlayers/ol3/pull/4108) - Add missing CSSProperties.prototype.touchAction extern ([@fredj](https://github.com/fredj))
|
||||||
|
* [#4107](https://github.com/openlayers/ol3/pull/4107) - Prevent page zoom on IE Edge ([@fredj](https://github.com/fredj))
|
||||||
|
* [#3969](https://github.com/openlayers/ol3/pull/3969) - Add an option to use the mouse's location as an anchor when zooming ([@samuellapointe](https://github.com/samuellapointe))
|
||||||
7
changelog/v3.10.1.md
Normal file
7
changelog/v3.10.1.md
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
# v3.10.1
|
||||||
|
|
||||||
|
## Summary
|
||||||
|
|
||||||
|
This is a patch release that fixes a regression causing text styles with a fill but no stroke to not be rendered.
|
||||||
|
|
||||||
|
* [#4242](https://github.com/openlayers/ol3/pull/4242) - Fix a drawText regression introduced with 31a68e2 ([@marcjansen](https://github.com/marcjansen))
|
||||||
136
changelog/v3.11.0.md
Normal file
136
changelog/v3.11.0.md
Normal file
@@ -0,0 +1,136 @@
|
|||||||
|
# v3.11.0
|
||||||
|
|
||||||
|
## Summary
|
||||||
|
|
||||||
|
The v3.11.0 release includes features and fixes from 73 pull requests since the v3.10.1 release. New features and improvements include:
|
||||||
|
|
||||||
|
* Support for raster reprojection - load raster sources in one projection and view them in another.
|
||||||
|
* Support for Mapbox Vector Tiles!
|
||||||
|
* Improved KML support, GeoJSON & TopoJSON fixes, and much more. See below for the full list.
|
||||||
|
|
||||||
|
## Upgrade notes
|
||||||
|
|
||||||
|
#### `ol.format.KML` changes
|
||||||
|
|
||||||
|
KML icons are scaled 50% so that the rendering better matches Google Earth rendering.
|
||||||
|
|
||||||
|
If a KML placemark has a name and is a point, an `ol.style.Text` is created with the name displayed to the right of the icon (if there is an icon).
|
||||||
|
This can be controlled with the showPointNames option which defaults to true.
|
||||||
|
|
||||||
|
To disable rendering of the point names for placemarks, use the option:
|
||||||
|
new ol.format.KML({ showPointNames: false });
|
||||||
|
|
||||||
|
#### `ol.interaction.DragBox` and `ol.interaction.DragZoom` changes
|
||||||
|
|
||||||
|
Styling is no longer done with `ol.Style`, but with pure CSS. The `style` constructor option is no longer required, and no longer available. Instead, there is a `className` option for the CSS selector. The default for `ol.interaction.DragBox` is `ol-dragbox`, and `ol.interaction.DragZoom` uses `ol-dragzoom`. If you previously had
|
||||||
|
```js
|
||||||
|
new ol.interaction.DragZoom({
|
||||||
|
style: new ol.style.Style({
|
||||||
|
stroke: new ol.style.Stroke({
|
||||||
|
color: 'red',
|
||||||
|
width: 3
|
||||||
|
}),
|
||||||
|
fill: new ol.style.Fill({
|
||||||
|
color: [255, 255, 255, 0.4]
|
||||||
|
})
|
||||||
|
})
|
||||||
|
});
|
||||||
|
```
|
||||||
|
you'll now just need
|
||||||
|
```js
|
||||||
|
new ol.interaction.DragZoom();
|
||||||
|
```
|
||||||
|
but with additional css:
|
||||||
|
```css
|
||||||
|
.ol-dragzoom {
|
||||||
|
border-color: red;
|
||||||
|
border-width: 3px;
|
||||||
|
background-color: rgba(255,255,255,0.4);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Removal of `ol.source.TileVector`
|
||||||
|
|
||||||
|
With the introduction of true vector tile support, `ol.source.TileVector` becomes obsolete. Change your code to use `ol.layer.VectorTile` and `ol.source.VectorTile` instead of `ol.layer.Vector` and `ol.source.TileVector`.
|
||||||
|
|
||||||
|
#### `ol.Map#forEachFeatureAtPixel` changes for unmanaged layers
|
||||||
|
|
||||||
|
`ol.Map#forEachFeatureAtPixel` will still be called for unmanaged layers, but the 2nd argument to the callback function will be `null` instead of a reference to the unmanaged layer. This brings back the behavior of the abandoned `ol.FeatureOverlay` that was replaced by unmanaged layers.
|
||||||
|
|
||||||
|
If you are affected by this change, please change your unmanaged layer to a regular layer by using e.g. `ol.Map#addLayer` instead of `ol.layer.Layer#setMap`.
|
||||||
|
|
||||||
|
## Full list of changes
|
||||||
|
|
||||||
|
* [#4394](https://github.com/openlayers/ol3/pull/4394) - Allow ol.Object property update without notification. ([@DavidHequet](https://github.com/DavidHequet))
|
||||||
|
* [#4395](https://github.com/openlayers/ol3/pull/4395) - Flag ol.style.Text setOffsetX and Y as @api. ([@adube](https://github.com/adube))
|
||||||
|
* [#4393](https://github.com/openlayers/ol3/pull/4393) - Faster vector tiles ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#4392](https://github.com/openlayers/ol3/pull/4392) - Update clean-css to version 3.4.7 🚀 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#4391](https://github.com/openlayers/ol3/pull/4391) - Pass null as forEachFeatureAtPixel layer arg for unmanaged layers ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#4390](https://github.com/openlayers/ol3/pull/4390) - Fix usage of mocha-phantomjs-core after update ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#4387](https://github.com/openlayers/ol3/pull/4387) - Add default argument to getRendererFromQueryString ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#4376](https://github.com/openlayers/ol3/pull/4376) - Make KML format ignore image styles that aren't icons ([@elemoine](https://github.com/elemoine))
|
||||||
|
* [#4385](https://github.com/openlayers/ol3/pull/4385) - Don't transform the scale specified by the user ([@oterral](https://github.com/oterral))
|
||||||
|
* [#4388](https://github.com/openlayers/ol3/pull/4388) - Quick-fix running tests with PhantomJS ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#4378](https://github.com/openlayers/ol3/pull/4378) - Add a writeStyles option to KML format ([@elemoine](https://github.com/elemoine))
|
||||||
|
* [#4375](https://github.com/openlayers/ol3/pull/4375) - Fixed documentation typo (ol.source.ImageWMS) ([@simonseyock](https://github.com/simonseyock))
|
||||||
|
* [#4371](https://github.com/openlayers/ol3/pull/4371) - Fix typo in closure compilation tutorial ([@dtreiter](https://github.com/dtreiter))
|
||||||
|
* [#4370](https://github.com/openlayers/ol3/pull/4370) - Improve ol.interaction.Select#getLayer documentation. ([@jonataswalker](https://github.com/jonataswalker))
|
||||||
|
* [#4365](https://github.com/openlayers/ol3/pull/4365) - Update fs-extra to version 0.26.2 🚀 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#4366](https://github.com/openlayers/ol3/pull/4366) - Update resemblejs to version 2.0.1 🚀 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#4368](https://github.com/openlayers/ol3/pull/4368) - Append KML placemark text style to existing styles ([@marcjansen](https://github.com/marcjansen))
|
||||||
|
* [#4361](https://github.com/openlayers/ol3/pull/4361) - Make GPX format not fail on unsupported geometries ([@elemoine](https://github.com/elemoine))
|
||||||
|
* [#4360](https://github.com/openlayers/ol3/pull/4360) - Update getExtent return value jsdoc tag ([@fredj](https://github.com/fredj))
|
||||||
|
* [#4359](https://github.com/openlayers/ol3/pull/4359) - Update closure-util to version 1.9.0 🚀 ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#4357](https://github.com/openlayers/ol3/pull/4357) - Update all dependencies. ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#4356](https://github.com/openlayers/ol3/pull/4356) - Update Metalsmith and layouts plugin. ([@tschaub](https://github.com/tschaub))
|
||||||
|
* [#4355](https://github.com/openlayers/ol3/pull/4355) - Update PhantomJS. ([@tschaub](https://github.com/tschaub))
|
||||||
|
* [#4353](https://github.com/openlayers/ol3/pull/4353) - Resolve path to jsdoc-fork. ([@tschaub](https://github.com/tschaub))
|
||||||
|
* [#3627](https://github.com/openlayers/ol3/pull/3627) - Make package.json compatible for npm frontend use. ([@ThomasG77](https://github.com/ThomasG77))
|
||||||
|
* [#4163](https://github.com/openlayers/ol3/pull/4163) - Fixes for building with Node 4.x. ([@tschaub](https://github.com/tschaub))
|
||||||
|
* [#4347](https://github.com/openlayers/ol3/pull/4347) - Use require.resolve() to find jsdoc. ([@tschaub](https://github.com/tschaub))
|
||||||
|
* [#4291](https://github.com/openlayers/ol3/pull/4291) - Add 'Move a feature along a line' example. ([@jonataswalker](https://github.com/jonataswalker))
|
||||||
|
* [#4344](https://github.com/openlayers/ol3/pull/4344) - Allow different resolutions in x and y direction for ol.source.ImageStatic ([@bartvde](https://github.com/bartvde))
|
||||||
|
* [#4339](https://github.com/openlayers/ol3/pull/4339) - Make sure drawImage width and height are not too big ([@bartvde](https://github.com/bartvde))
|
||||||
|
* [#4334](https://github.com/openlayers/ol3/pull/4334) - Check view extent within image extent ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#4332](https://github.com/openlayers/ol3/pull/4332) - Fix write out GeoJSON features with id equal to 0 ([@fredj](https://github.com/fredj))
|
||||||
|
* [#4331](https://github.com/openlayers/ol3/pull/4331) - Allow TopoJSON features with id equal to 0 ([@fredj](https://github.com/fredj))
|
||||||
|
* [#4330](https://github.com/openlayers/ol3/pull/4330) - ol.format.TopoJSON is read only, update the jsdoc ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#4327](https://github.com/openlayers/ol3/pull/4327) - Allow GeoJSON features with id equal to 0 ([@fredj](https://github.com/fredj))
|
||||||
|
* [#4219](https://github.com/openlayers/ol3/pull/4219) - Support tiled vector data and Mapbox vector tiles ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#4322](https://github.com/openlayers/ol3/pull/4322) - Add wrapX override support for ol.source.Cluster ([@FRizZL](https://github.com/FRizZL))
|
||||||
|
* [#4316](https://github.com/openlayers/ol3/pull/4316) - Render name labels if the geometry is a point in KML format (@tamarmot) ([@marcjansen](https://github.com/marcjansen))
|
||||||
|
* [#4313](https://github.com/openlayers/ol3/pull/4313) - Align logos nicely with attribution text ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#4297](https://github.com/openlayers/ol3/pull/4297) - Create standalone versions of ol.ext packages ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#4302](https://github.com/openlayers/ol3/pull/4302) - scale icons by 0.5 so they are not huge ([@tamarmot](https://github.com/tamarmot))
|
||||||
|
* [#4301](https://github.com/openlayers/ol3/pull/4301) - Remove jshint -W069 tags in source code ([@fredj](https://github.com/fredj))
|
||||||
|
* [#4273](https://github.com/openlayers/ol3/pull/4273) - Expand docs on ol.source url prop. ([@Barryrowe](https://github.com/Barryrowe))
|
||||||
|
* [#4293](https://github.com/openlayers/ol3/pull/4293) - Refine the pull request process ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#4289](https://github.com/openlayers/ol3/pull/4289) - Restrict maxZoom of the static-image example ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#4275](https://github.com/openlayers/ol3/pull/4275) - Fix ol.events.condition.mouseOnly parameter type ([@fredj](https://github.com/fredj))
|
||||||
|
* [#4248](https://github.com/openlayers/ol3/pull/4248) - Use Math.cosh of ES6/2015 if available ([@marcjansen](https://github.com/marcjansen))
|
||||||
|
* [#4286](https://github.com/openlayers/ol3/pull/4286) - Add a color manipulation example. ([@tschaub](https://github.com/tschaub))
|
||||||
|
* [#4122](https://github.com/openlayers/ol3/pull/4122) - Raster reprojection ([@klokantech](https://github.com/klokantech))
|
||||||
|
* [#4283](https://github.com/openlayers/ol3/pull/4283) - Flag ol.tilegrid.TileGrid getTileCoordExtent as @api ([@adube](https://github.com/adube))
|
||||||
|
* [#4280](https://github.com/openlayers/ol3/pull/4280) - Use overlay container instead of viewport for ol.render.Box ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#4278](https://github.com/openlayers/ol3/pull/4278) - Use DOM instead of map canvas for ol.render.Box ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#4277](https://github.com/openlayers/ol3/pull/4277) - Improve the box select example ([@fredj](https://github.com/fredj))
|
||||||
|
* [#4276](https://github.com/openlayers/ol3/pull/4276) - Better ol.events.condition.platformModifierKeyOnly documentation ([@fredj](https://github.com/fredj))
|
||||||
|
* [#4102](https://github.com/openlayers/ol3/pull/4102) - Export ol.Observable#dispatchEvent function ([@fredj](https://github.com/fredj))
|
||||||
|
* [#4261](https://github.com/openlayers/ol3/pull/4261) - ol.events.condition.mouseOnly may be wrong ([@fredj](https://github.com/fredj))
|
||||||
|
* [#4269](https://github.com/openlayers/ol3/pull/4269) - Fix Zoom control duration option - allow `0` as value ([@adube](https://github.com/adube))
|
||||||
|
* [#4268](https://github.com/openlayers/ol3/pull/4268) - Add method for retrieving ol.Overlay by id ([@jonataswalker](https://github.com/jonataswalker))
|
||||||
|
* [#4257](https://github.com/openlayers/ol3/pull/4257) - Remove unused ol.math-methods ([@marcjansen](https://github.com/marcjansen))
|
||||||
|
* [#4270](https://github.com/openlayers/ol3/pull/4270) - Fix Keyboard zoom interation options ([@adube](https://github.com/adube))
|
||||||
|
* [#4272](https://github.com/openlayers/ol3/pull/4272) - Allow the DragZoom interaction created in defaults to use zoomDuration option. ([@adube](https://github.com/adube))
|
||||||
|
* [#4271](https://github.com/openlayers/ol3/pull/4271) - Fix DragZoom interaction duration, allow `0` value ([@adube](https://github.com/adube))
|
||||||
|
* [#4267](https://github.com/openlayers/ol3/pull/4267) - Example usability improvements ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#4263](https://github.com/openlayers/ol3/pull/4263) - Add back CSSProperties.prototype.touchAction extern ([@fredj](https://github.com/fredj))
|
||||||
|
* [#4259](https://github.com/openlayers/ol3/pull/4259) - Remove use of toDegrees/toRadians util functions ([@marcjansen](https://github.com/marcjansen))
|
||||||
|
* [#4258](https://github.com/openlayers/ol3/pull/4258) - Remove usage of goog.dom.TagName enum ([@marcjansen](https://github.com/marcjansen))
|
||||||
|
* [#4255](https://github.com/openlayers/ol3/pull/4255) - Fix zoom slider width for retina displays ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#4249](https://github.com/openlayers/ol3/pull/4249) - Make whole example box clickable ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#4045](https://github.com/openlayers/ol3/pull/4045) - Add parser for dimension property from WMTS Capabilities.xml ([@Jenselme](https://github.com/Jenselme))
|
||||||
|
* [#4161](https://github.com/openlayers/ol3/pull/4161) - Add `translatestart`, `translateend` and `translating` events to `ol.interaction.Translate` ([@jonataswalker](https://github.com/jonataswalker))
|
||||||
|
* [#4186](https://github.com/openlayers/ol3/pull/4186) - Do not export ol.webgl.Context ([@elemoine](https://github.com/elemoine))
|
||||||
|
* [#4239](https://github.com/openlayers/ol3/pull/4239) - Changing highlighted to highlight ([@austinkeeley](https://github.com/austinkeeley))
|
||||||
|
* [#3727](https://github.com/openlayers/ol3/pull/3727) - Added getOverviewMap getter method in overviewmapcontrol.js ([@bogdanvaduva](https://github.com/bogdanvaduva))
|
||||||
11
changelog/v3.11.1.md
Normal file
11
changelog/v3.11.1.md
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
# v3.11.1
|
||||||
|
|
||||||
|
## Summary
|
||||||
|
|
||||||
|
The v3.11.1 release is a patch release that addresses a few regressions in the v3.11.0 release. See the [v3.11.0 release notes](https://github.com/openlayers/ol3/releases/tag/v3.11.0) for details on upgrading from v3.10.
|
||||||
|
|
||||||
|
## Fixes
|
||||||
|
|
||||||
|
* [#4413](https://github.com/openlayers/ol3/pull/4413) - Revert "Merge pull request #4339 from bartvde/issue-4337" ([@bartvde](https://github.com/bartvde))
|
||||||
|
* [#4412](https://github.com/openlayers/ol3/pull/4412) - Revert "Merge pull request #4344 from bartvde/issue-2844" ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#4408](https://github.com/openlayers/ol3/pull/4408) - Use ratio when calculating ImageWMS width and height ([@ahocevar](https://github.com/ahocevar))
|
||||||
64
changelog/v3.6.0.md
Normal file
64
changelog/v3.6.0.md
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
# v3.6.0
|
||||||
|
|
||||||
|
## Summary
|
||||||
|
|
||||||
|
The v3.6.0 release includes features and fixes from 40 pull requests since v3.5.0. To simplify the code base, there were some changes to "experimental" features. Please follow the upgrade notes to make your applications work with the latest release.
|
||||||
|
|
||||||
|
## Upgrade notes
|
||||||
|
|
||||||
|
### `ol.interaction.Draw` changes
|
||||||
|
|
||||||
|
* The `minPointsPerRing` config option has been renamed to `minPoints`. It is now also available for linestring drawing, not only for polygons.
|
||||||
|
* The `ol.DrawEvent` and `ol.DrawEventType` types were renamed to `ol.interaction.DrawEvent` and `ol.interaction.DrawEventType`. This has an impact on your code only if your code is compiled together with ol3.
|
||||||
|
|
||||||
|
### `ol.tilegrid` changes
|
||||||
|
|
||||||
|
* The `ol.tilegrid.XYZ` constructor has been replaced by a static `ol.tilegrid.createXYZ()` function. The `ol.tilegrid.createXYZ()` function takes the same arguments as the previous `ol.tilegrid.XYZ` constructor, but returns an `ol.tilegrid.TileGrid` instance.
|
||||||
|
* The internal tile coordinate scheme for XYZ sources has been changed. Previously, the `y` of tile coordinates was transformed to the coordinates used by sources by calculating `-y-1`. Now, it is transformed by calculating `height-y-1`, where height is the number of rows of the tile grid at the zoom level of the tile coordinate.
|
||||||
|
* The `widths` constructor option of `ol.tilegrid.TileGrid` and subclasses is no longer available, and it is no longer necessary to get proper wrapping at the 180° meridian. However, for `ol.tilegrid.WMTS`, there is a new option `sizes`, where each entry is an `ol.Size` with the `width` ('TileMatrixWidth' in WMTS capabilities) as first and the `height` ('TileMatrixHeight') as second entry of the array. For other tile grids, users can
|
||||||
|
now specify an `extent` instead of `widths`. These settings are used to restrict the range of tiles that sources will request.
|
||||||
|
* For `ol.source.TileWMS`, the default value of `warpX` used to be `undefined`, meaning that WMS requests with out-of-extent tile BBOXes would be sent. Now `wrapX` can only be `true` or `false`, and the new default is `true`. No application code changes should be required, but the resulting WMS requests for out-of-extent tiles will no longer use out-of-extent BBOXes, but ones that are shifted to real-world coordinates.
|
||||||
|
|
||||||
|
## New features and fixes
|
||||||
|
|
||||||
|
* [#3764](https://github.com/openlayers/ol3/pull/3764) - Add tests and implementation for intersectsExtent (ol.geom.Geometry) ([@alvinlindstam](https://github.com/alvinlindstam))
|
||||||
|
* [#3757](https://github.com/openlayers/ol3/pull/3757) - Add mapBrowserEvent as a member of ol.SelectEvent ([@bjornharrtell](https://github.com/bjornharrtell))
|
||||||
|
* [#3759](https://github.com/openlayers/ol3/pull/3759) - Mark tilegrid.createTileCoordTransform() @api ([@gberaudo](https://github.com/gberaudo))
|
||||||
|
* [#3747](https://github.com/openlayers/ol3/pull/3747) - Make tileCoordTransform a member again ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#3751](https://github.com/openlayers/ol3/pull/3751) - Do not rely on remote services for tests ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#3749](https://github.com/openlayers/ol3/pull/3749) - Fix typo in API docs ([@marcjansen](https://github.com/marcjansen))
|
||||||
|
* [#3739](https://github.com/openlayers/ol3/pull/3739) - Simplify detection of scientific notation in WKT format ([@marcjansen](https://github.com/marcjansen))
|
||||||
|
* [#3741](https://github.com/openlayers/ol3/pull/3741) - Enhance docs of arguments and return values of callbacks / filters ([@marcjansen](https://github.com/marcjansen))
|
||||||
|
* [#3740](https://github.com/openlayers/ol3/pull/3740) - Add @fires to select interaction ([@probins](https://github.com/probins))
|
||||||
|
* [#3738](https://github.com/openlayers/ol3/pull/3738) - Improve doucmentation for ol.TileUrlFunctionType ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#3736](https://github.com/openlayers/ol3/pull/3736) - Fix invalid example HTML markup ([@fredj](https://github.com/fredj))
|
||||||
|
* [#3735](https://github.com/openlayers/ol3/pull/3735) - Snap example: remove featureoverlay from tags ([@probins](https://github.com/probins))
|
||||||
|
* [#3732](https://github.com/openlayers/ol3/pull/3732) - Add a method to bind button bluring on mouseout/focusout ([@marcjansen](https://github.com/marcjansen))
|
||||||
|
* [#3659](https://github.com/openlayers/ol3/pull/3659) - Revert "Implement ol.renderer.Layer#forEachFeatureAtCoordinate" ([@fredj](https://github.com/fredj))
|
||||||
|
* [#3683](https://github.com/openlayers/ol3/pull/3683) - Improve Map docs for layers and layergroups ([@probins](https://github.com/probins))
|
||||||
|
* [#3720](https://github.com/openlayers/ol3/pull/3720) - Add missing goog.provides in drawinteraction.js ([@elemoine](https://github.com/elemoine))
|
||||||
|
* [#3725](https://github.com/openlayers/ol3/pull/3725) - Document default value for olx.interaction.ModifyOptions#pixelTolerance ([@fredj](https://github.com/fredj))
|
||||||
|
* [#3722](https://github.com/openlayers/ol3/pull/3722) - Use the correct TileCoord transform function ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#3692](https://github.com/openlayers/ol3/pull/3692) - Updates for building on Windows using Cygwin. ([@bill-chadwick](https://github.com/bill-chadwick))
|
||||||
|
* [#3718](https://github.com/openlayers/ol3/pull/3718) - Add a assertion for renderOrder ([@tsauerwein](https://github.com/tsauerwein))
|
||||||
|
* [#3711](https://github.com/openlayers/ol3/pull/3711) - Fix and test ol.color.blend ([@marcjansen](https://github.com/marcjansen))
|
||||||
|
* [#3673](https://github.com/openlayers/ol3/pull/3673) - More control over ol.interaction.Draw, to allow e.g. square drawing ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#3710](https://github.com/openlayers/ol3/pull/3710) - Add more tests for ol.extent ([@marcjansen](https://github.com/marcjansen))
|
||||||
|
* [#3709](https://github.com/openlayers/ol3/pull/3709) - vector-wfs example does not work in JSFiddle ([@bartvde](https://github.com/bartvde))
|
||||||
|
* [#3699](https://github.com/openlayers/ol3/pull/3699) - Add support for scientific notation to WKT format ([@marcjansen](https://github.com/marcjansen))
|
||||||
|
* [#3696](https://github.com/openlayers/ol3/pull/3696) - Add an example for various blend modes ([@marcjansen](https://github.com/marcjansen))
|
||||||
|
* [#3697](https://github.com/openlayers/ol3/pull/3697) - Use a valid SPDX license expression ([@marcjansen](https://github.com/marcjansen))
|
||||||
|
* [#3694](https://github.com/openlayers/ol3/pull/3694) - Correct typo in upgrade-notes ([@probins](https://github.com/probins))
|
||||||
|
* [#3693](https://github.com/openlayers/ol3/pull/3693) - Fix ol.extent.containsExtent documentation ([@tremby](https://github.com/tremby))
|
||||||
|
* [#3689](https://github.com/openlayers/ol3/pull/3689) - Fix WMTS.optionsFromCapabilities if no OperationsMetadata section ([@probins](https://github.com/probins))
|
||||||
|
* [#3688](https://github.com/openlayers/ol3/pull/3688) - Add two missing properties to extern of WebGLContextAttributes ([@fredj](https://github.com/fredj))
|
||||||
|
* [#3682](https://github.com/openlayers/ol3/pull/3682) - Add a note about using the collection in addLayer ([@bartvde](https://github.com/bartvde))
|
||||||
|
* [#3649](https://github.com/openlayers/ol3/pull/3649) - More specific regex in serve.js ([@elemoine](https://github.com/elemoine))
|
||||||
|
* [#3677](https://github.com/openlayers/ol3/pull/3677) - Add metadata to examples, ([@tschaub](https://github.com/tschaub))
|
||||||
|
* [#3672](https://github.com/openlayers/ol3/pull/3672) - Add link to FAQ-document and fix internal links ([@marcjansen](https://github.com/marcjansen))
|
||||||
|
* [#3665](https://github.com/openlayers/ol3/pull/3665) - Add proj4js and projection definition files to example resources ([@marcjansen](https://github.com/marcjansen))
|
||||||
|
* [#3662](https://github.com/openlayers/ol3/pull/3662) - Clarify docs for renderBuffer option ([@tsauerwein](https://github.com/tsauerwein))
|
||||||
|
* [#3664](https://github.com/openlayers/ol3/pull/3664) - Link to download page. ([@tschaub](https://github.com/tschaub))
|
||||||
|
* [#3639](https://github.com/openlayers/ol3/pull/3639) - Add extent support to ol.tilegrid.TileGrid ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#3663](https://github.com/openlayers/ol3/pull/3663) - Readme should not include the version number. ([@tschaub](https://github.com/tschaub))
|
||||||
|
* [#3637](https://github.com/openlayers/ol3/pull/3637) - Implement ol.renderer.Layer#forEachFeatureAtCoordinate ([@fredj](https://github.com/fredj))
|
||||||
152
changelog/v3.7.0.md
Normal file
152
changelog/v3.7.0.md
Normal file
@@ -0,0 +1,152 @@
|
|||||||
|
# v3.7.0
|
||||||
|
|
||||||
|
## Summary
|
||||||
|
|
||||||
|
The v3.7.0 release includes features and fixes from 43 pull requests since v3.6.0. To simplify the code base, there were some changes to "experimental" features. Please follow the upgrade notes to make your applications work with the latest release.
|
||||||
|
|
||||||
|
## Upgrade notes
|
||||||
|
|
||||||
|
#### Removal of `ol.FeatureOverlay`
|
||||||
|
|
||||||
|
Instead of an `ol.FeatureOverlay`, we now use an `ol.layer.Vector` with an
|
||||||
|
`ol.source.Vector`. If you previously had:
|
||||||
|
```js
|
||||||
|
var featureOverlay = new ol.FeatureOverlay({
|
||||||
|
map: map,
|
||||||
|
style: overlayStyle
|
||||||
|
});
|
||||||
|
featureOverlay.addFeature(feature);
|
||||||
|
featureOverlay.removeFeature(feature);
|
||||||
|
var collection = featureOverlay.getFeatures();
|
||||||
|
```
|
||||||
|
you will have to change this to:
|
||||||
|
```js
|
||||||
|
var collection = new ol.Collection();
|
||||||
|
var featureOverlay = new ol.layer.Vector({
|
||||||
|
map: map,
|
||||||
|
source: new ol.source.Vector({
|
||||||
|
features: collection,
|
||||||
|
useSpatialIndex: false // optional, might improve performance
|
||||||
|
}),
|
||||||
|
style: overlayStyle,
|
||||||
|
updateWhileAnimating: true, // optional, for instant visual feedback
|
||||||
|
updateWhileInteracting: true // optional, for instant visual feedback
|
||||||
|
});
|
||||||
|
featureOverlay.getSource().addFeature(feature);
|
||||||
|
featureOverlay.getSource().removeFeature(feature);
|
||||||
|
```
|
||||||
|
|
||||||
|
With the removal of `ol.FeatureOverlay`, `zIndex` symbolizer properties of overlays are no longer stacked per map, but per layer/overlay. If you previously had multiple feature overlays where you controlled the rendering order of features by using `zIndex` symbolizer properties, you can now achieve the same rendering order only if all overlay features are on the same layer.
|
||||||
|
|
||||||
|
Note that `ol.FeatureOverlay#getFeatures()` returned an `{ol.Collection.<ol.Feature>}`, whereas `ol.source.Vector#getFeatures()` returns an `{Array.<ol.Feature>}`.
|
||||||
|
|
||||||
|
#### `ol.TileCoord` changes
|
||||||
|
|
||||||
|
Until now, the API exposed two different types of `ol.TileCoord` tile coordinates: internal ones that increase left to right and upward, and transformed ones that may increase downward, as defined by a transform function on the tile grid. With this change, the API now only exposes tile coordinates that increase left to right and upward.
|
||||||
|
|
||||||
|
Previously, tile grids created by OpenLayers either had their origin at the top-left or at the bottom-left corner of the extent. To make it easier for application developers to transform tile coordinates to the common XYZ tiling scheme, all tile grids that OpenLayers creates internally have their origin now at the top-left corner of the extent.
|
||||||
|
|
||||||
|
This change affects applications that configure a custom `tileUrlFunction` for an `ol.source.Tile`. Previously, the `tileUrlFunction` was called with rather unpredictable tile coordinates, depending on whether a tile coordinate transform took place before calling the `tileUrlFunction`. Now it is always called with OpenLayers tile coordinates. To transform these into the common XYZ tiling scheme, a custom `tileUrlFunction` has to change the `y` value (tile row) of the `ol.TileCoord`:
|
||||||
|
```js
|
||||||
|
function tileUrlFunction = function(tileCoord, pixelRatio, projection) {
|
||||||
|
var urlTemplate = '{z}/{x}/{y}';
|
||||||
|
return urlTemplate
|
||||||
|
.replace('{z}', tileCoord[0].toString())
|
||||||
|
.replace('{x}', tileCoord[1].toString())
|
||||||
|
.replace('{y}', (-tileCoord[2] - 1).toString());
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
The `ol.tilegrid.TileGrid#createTileCoordTransform()` function which could be used to get the tile grid's tile coordinate transform function has been removed. This function was confusing and should no longer be needed now that application developers get tile coordinates in a known layout.
|
||||||
|
|
||||||
|
The code snippets below show how your application code needs to be changed:
|
||||||
|
|
||||||
|
Old application code (with `ol.tilegrid.TileGrid#createTileCoordTransform()`):
|
||||||
|
```js
|
||||||
|
var transform = source.getTileGrid().createTileCoordTransform();
|
||||||
|
var tileUrlFunction = function(tileCoord, pixelRatio, projection) {
|
||||||
|
tileCoord = transform(tileCoord, projection);
|
||||||
|
return 'http://mytiles.com/' +
|
||||||
|
tileCoord[0] + '/' + tileCoord[1] + '/' + tileCoord[2] + '.png';
|
||||||
|
};
|
||||||
|
```
|
||||||
|
Old application code (with custom `y` transform):
|
||||||
|
```js
|
||||||
|
var tileUrlFunction = function(tileCoord, pixelRatio, projection) {
|
||||||
|
var z = tileCoord[0];
|
||||||
|
var yFromBottom = tileCoord[2];
|
||||||
|
var resolution = tileGrid.getResolution(z);
|
||||||
|
var tileHeight = ol.size.toSize(tileSize)[1];
|
||||||
|
var matrixHeight =
|
||||||
|
Math.floor(ol.extent.getHeight(extent) / tileHeight / resolution);
|
||||||
|
return 'http://mytiles.com/' +
|
||||||
|
tileCoord[0] + '/' + tileCoord[1] + '/' +
|
||||||
|
(matrixHeight - yFromBottom - 1) + '.png';
|
||||||
|
|
||||||
|
};
|
||||||
|
```
|
||||||
|
New application code (simple -y - 1 transform):
|
||||||
|
```js
|
||||||
|
var tileUrlFunction = function(tileCoord, pixelRatio, projection) {
|
||||||
|
return 'http://mytiles.com/' +
|
||||||
|
tileCoord[0] + '/' + tileCoord[1] + '/' + (-tileCoord[2] - 1) + '.png';
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Removal of `ol.tilegrid.Zoomify`
|
||||||
|
|
||||||
|
The replacement of `ol.tilegrid.Zoomify` is a plain `ol.tilegrid.TileGrid`, configured with `extent`, `origin` and `resolutions`. If the `size` passed to the `ol.source.Zoomify` source is `[width, height]`, then the extent for the tile grid will be `[0, -height, width, 0]`, and the origin will be `[0, 0]`.
|
||||||
|
|
||||||
|
#### Replace `ol.View.fitExtent()` and `ol.View.fitGeometry()` with `ol.View.fit()`
|
||||||
|
* This combines two previously distinct functions into one more flexible call which takes either a geometry or an extent.
|
||||||
|
* Rename all calls to `fitExtent` and `fitGeometry` to `fit`.
|
||||||
|
|
||||||
|
#### Change to `ol.interaction.Modify`
|
||||||
|
|
||||||
|
When single clicking a line or boundary within the `pixelTolerance`, a vertex is now created.
|
||||||
|
|
||||||
|
## New features and fixes
|
||||||
|
|
||||||
|
* [#3867](https://github.com/openlayers/ol3/pull/3867) - Do not require projection extent for x-wrapping tile sources ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#3635](https://github.com/openlayers/ol3/pull/3635) - Create vertex on boundary single click ([@bjornharrtell](https://github.com/bjornharrtell))
|
||||||
|
* [#3806](https://github.com/openlayers/ol3/pull/3806) - Do not clip canvas for vector layers when wrapping the world ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#3461](https://github.com/openlayers/ol3/pull/3461) - High level Modify interaction events ([@bjornharrtell](https://github.com/bjornharrtell))
|
||||||
|
* [#3865](https://github.com/openlayers/ol3/pull/3865) - ol.View#fit() ([@bartvde](https://github.com/bartvde))
|
||||||
|
* [#3864](https://github.com/openlayers/ol3/pull/3864) - Check projection.canWrapX() before wrapping tiles ([@klokantech](https://github.com/klokantech))
|
||||||
|
* [#3863](https://github.com/openlayers/ol3/pull/3863) - Handle CDATA in attribute parsing for GML format ([@nhambletCCRI](https://github.com/nhambletCCRI))
|
||||||
|
* [#3860](https://github.com/openlayers/ol3/pull/3860) - Update example layout. ([@tschaub](https://github.com/tschaub))
|
||||||
|
* [#3861](https://github.com/openlayers/ol3/pull/3861) - Don't force 'dom' renderer ([@openlayers](https://github.com/openlayers))
|
||||||
|
* [#3855](https://github.com/openlayers/ol3/pull/3855) - Adding an example with WMTS tiles from IGN Geoportail ([@pgiraud](https://github.com/pgiraud))
|
||||||
|
* [#3856](https://github.com/openlayers/ol3/pull/3856) - ol.source.TileVector(): bind success function of tileLoadFunction to source ([@plepe](https://github.com/plepe))
|
||||||
|
* [#3848](https://github.com/openlayers/ol3/pull/3848) - Check for exports before define. ([@tschaub](https://github.com/tschaub))
|
||||||
|
* [#3845](https://github.com/openlayers/ol3/pull/3845) - Prevent null array to be passed to an ol.Collection ([@fredj](https://github.com/fredj))
|
||||||
|
* [#3849](https://github.com/openlayers/ol3/pull/3849) - Pad min. and sec. with leading zeros in DMS notation ([@pgiraud](https://github.com/pgiraud))
|
||||||
|
* [#3842](https://github.com/openlayers/ol3/pull/3842) - Adding a feature-animation example ([@pgiraud](https://github.com/pgiraud))
|
||||||
|
* [#3833](https://github.com/openlayers/ol3/pull/3833) - Enable use of custom XHR loader for TileVector sources ([@bjornharrtell](https://github.com/bjornharrtell))
|
||||||
|
* [#3834](https://github.com/openlayers/ol3/pull/3834) - ArcGIS tiled example broken in Chrome ([@bartvde](https://github.com/bartvde))
|
||||||
|
* [#3829](https://github.com/openlayers/ol3/pull/3829) - incorrect assert message ([@kzr-pzr](https://github.com/kzr-pzr))
|
||||||
|
* [#3828](https://github.com/openlayers/ol3/pull/3828) - Fix typo in upgrade notes ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#3826](https://github.com/openlayers/ol3/pull/3826) - Allow custom tileGrid in ol.source.XYZ ([@klokantech](https://github.com/klokantech))
|
||||||
|
* [#3815](https://github.com/openlayers/ol3/pull/3815) - Simplify tilegrid API and internals ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#3820](https://github.com/openlayers/ol3/pull/3820) - Make unmanaged vector layers behave more like ol.FeatureOverlay ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#3822](https://github.com/openlayers/ol3/pull/3822) - Correct docs for updateWhileInteracting ([@probins](https://github.com/probins))
|
||||||
|
* [#3818](https://github.com/openlayers/ol3/pull/3818) - Make geometry.transform api stable again. ([@probins](https://github.com/probins))
|
||||||
|
* [#3801](https://github.com/openlayers/ol3/pull/3801) - Respect the tile grid's extent in ol.source.TileVector ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#3810](https://github.com/openlayers/ol3/pull/3810) - Improve TileGrid documentation and examples ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#3808](https://github.com/openlayers/ol3/pull/3808) - Correct typo in OverlayOptions ([@probins](https://github.com/probins))
|
||||||
|
* [#3766](https://github.com/openlayers/ol3/pull/3766) - Add a clickTolerance option to the Draw interaction ([@elemoine](https://github.com/elemoine))
|
||||||
|
* [#3804](https://github.com/openlayers/ol3/pull/3804) - Remove sentence that was only meant for WMTS tile grids ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#3800](https://github.com/openlayers/ol3/pull/3800) - Remove further references to FeatureOverlay ([@probins](https://github.com/probins))
|
||||||
|
* [#3780](https://github.com/openlayers/ol3/pull/3780) - Only expose transformed tile coordinates to the API ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#3793](https://github.com/openlayers/ol3/pull/3793) - Use 'managed' instead of 'unmanaged' in LayerState ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#3792](https://github.com/openlayers/ol3/pull/3792) - Link to correct layer base class ([@marcjansen](https://github.com/marcjansen))
|
||||||
|
* [#3791](https://github.com/openlayers/ol3/pull/3791) - Remove docs referring to removed feature overlay ([@marcjansen](https://github.com/marcjansen))
|
||||||
|
* [#3790](https://github.com/openlayers/ol3/pull/3790) - Remove unnecessary quotes around object keys ([@fredj](https://github.com/fredj))
|
||||||
|
* [#3787](https://github.com/openlayers/ol3/pull/3787) - Add 'unmanaged' to ol.layer.LayerState ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#3784](https://github.com/openlayers/ol3/pull/3784) - Always write the GeoJSONFeature geometry property ([@fredj](https://github.com/fredj))
|
||||||
|
* [#3783](https://github.com/openlayers/ol3/pull/3783) - Fix broken wmts-hidpi example ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#3782](https://github.com/openlayers/ol3/pull/3782) - Fix assert documentation typo ([@gberaudo](https://github.com/gberaudo))
|
||||||
|
* [#3758](https://github.com/openlayers/ol3/pull/3758) - Removal of ol.FeatureOverlay ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#3775](https://github.com/openlayers/ol3/pull/3775) - Add ol-touch but keep ol-viewport className. ([@pgiraud](https://github.com/pgiraud))
|
||||||
|
* [#3713](https://github.com/openlayers/ol3/pull/3713) - Add missing propertyNames member for olx.format.WFSWriteGetFeatureOptions ([@bartvde](https://github.com/bartvde))
|
||||||
|
* [#3763](https://github.com/openlayers/ol3/pull/3763) - Standardise draw/modify descriptions ([@probins](https://github.com/probins))
|
||||||
41
changelog/v3.8.0.md
Normal file
41
changelog/v3.8.0.md
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
# v3.8.0
|
||||||
|
|
||||||
|
## Summary
|
||||||
|
|
||||||
|
The v3.8.0 release includes features and fixes from 33 pull requests since v3.7.0. While summer vacations have slowed the pace of development a bit this month, there are some nice improvements in this release. See the complete list below for details.
|
||||||
|
|
||||||
|
## New features and fixes
|
||||||
|
|
||||||
|
* [#3957](https://github.com/openlayers/ol3/pull/3957) - Properly handle vertex deletion with multiple features. ([@tschaub](https://github.com/tschaub))
|
||||||
|
* [#3954](https://github.com/openlayers/ol3/pull/3954) - Remove ol.control.Control.bindMouseOutFocusOutBlur function. ([@fredj](https://github.com/fredj))
|
||||||
|
* [#3214](https://github.com/openlayers/ol3/pull/3214) - Pixel manipulation with raster sources. ([@tschaub](https://github.com/tschaub))
|
||||||
|
* [#3946](https://github.com/openlayers/ol3/pull/3946) - Fix vertex deletion for Modify interaction on mobile devices. ([@Turbo87](https://github.com/Turbo87))
|
||||||
|
* [#3910](https://github.com/openlayers/ol3/pull/3910) - Do not provide an AMD environment to ol.ext modules. ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#3934](https://github.com/openlayers/ol3/pull/3934) - Fix `drawstart` and `drawend` events when drawing a point ([@fredj](https://github.com/fredj))
|
||||||
|
* [#3774](https://github.com/openlayers/ol3/pull/3774) - Measure tooltips touchdevice ([@pgiraud](https://github.com/pgiraud))
|
||||||
|
* [#3949](https://github.com/openlayers/ol3/pull/3949) - Remove count argument from `called` function ([@fredj](https://github.com/fredj))
|
||||||
|
* [#3950](https://github.com/openlayers/ol3/pull/3950) - Remove reference to vbarray.js ([@elemoine](https://github.com/elemoine))
|
||||||
|
* [#3947](https://github.com/openlayers/ol3/pull/3947) - Clarify documentation of Image source ratio option. ([@alvinlindstam](https://github.com/alvinlindstam))
|
||||||
|
* [#3920](https://github.com/openlayers/ol3/pull/3920) - Remove use_types_for_optimization from custom build tutorial. ([@probins](https://github.com/probins))
|
||||||
|
* [#3922](https://github.com/openlayers/ol3/pull/3922) - Document {?-?} pattern in expandUrl ([@probins](https://github.com/probins))
|
||||||
|
* [#3921](https://github.com/openlayers/ol3/pull/3921) - Cache node_modules on Travis. ([@bjornharrtell](https://github.com/bjornharrtell))
|
||||||
|
* [#3942](https://github.com/openlayers/ol3/pull/3942) - Fix WMTS TileMatrixSet lookup by SRS identifier ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#3945](https://github.com/openlayers/ol3/pull/3945) - Simplify icon example and show popup at clicked position ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#3930](https://github.com/openlayers/ol3/pull/3930) - Use goog.functions.identity instead of goog.identityFunction ([@fredj](https://github.com/fredj))
|
||||||
|
* [#3929](https://github.com/openlayers/ol3/pull/3929) - Expand description for XYZ source ([@probins](https://github.com/probins))
|
||||||
|
* [#3933](https://github.com/openlayers/ol3/pull/3933) - Snap center to pixel to avoid floating point issues ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#3932](https://github.com/openlayers/ol3/pull/3932) - SnapOptions: Fix typo in pixelTolerance JSDoc ([@Turbo87](https://github.com/Turbo87))
|
||||||
|
* [#3931](https://github.com/openlayers/ol3/pull/3931) - Remove unused htmlparser2 package ([@fredj](https://github.com/fredj))
|
||||||
|
* [#3912](https://github.com/openlayers/ol3/pull/3912) - Fix the event type fired by goog.fx.Dragger ([@fredj](https://github.com/fredj))
|
||||||
|
* [#3871](https://github.com/openlayers/ol3/pull/3871) - Document change events properly ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#3906](https://github.com/openlayers/ol3/pull/3906) - Clear features properly when there is no spatial index ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#3896](https://github.com/openlayers/ol3/pull/3896) - Fire WebGL precompose event in same sequence as other renderers ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#3359](https://github.com/openlayers/ol3/pull/3359) - Enable deep clone of MultiPolygon. ([@Kenny806](https://github.com/Kenny806))
|
||||||
|
* [#3895](https://github.com/openlayers/ol3/pull/3895) - Rework the tile queue for multiple queues. ([@aisaacs](https://github.com/aisaacs))
|
||||||
|
* [#3894](https://github.com/openlayers/ol3/pull/3894) - Install Python dependencies without sudo. ([@tschaub](https://github.com/tschaub))
|
||||||
|
* [#3824](https://github.com/openlayers/ol3/pull/3824) - Improve docs for interaction.Select. ([@probins](https://github.com/probins))
|
||||||
|
* [#3884](https://github.com/openlayers/ol3/pull/3884) - Provide a debug loader for the library. ([@tschaub](https://github.com/tschaub))
|
||||||
|
* [#3883](https://github.com/openlayers/ol3/pull/3883) - Ignore layer filter for unmanaged layers ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#3859](https://github.com/openlayers/ol3/pull/3859) - Add in crossOrigin option ([@llambanna](https://github.com/llambanna))
|
||||||
|
* [#3873](https://github.com/openlayers/ol3/pull/3873) - Correct minor typo in modifyinteraction ([@probins](https://github.com/probins))
|
||||||
|
* [#3872](https://github.com/openlayers/ol3/pull/3872) - Correct event notations in ol.Feature ([@probins](https://github.com/probins))
|
||||||
7
changelog/v3.8.1.md
Normal file
7
changelog/v3.8.1.md
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
# v3.8.1
|
||||||
|
|
||||||
|
## Summary
|
||||||
|
|
||||||
|
This is a patch release that updates the URL for builds shown in the examples. Details below.
|
||||||
|
|
||||||
|
* [#3970](https://github.com/openlayers/ol3/pull/3970) - Pull builds from openlayers.org. ([@tschaub](https://github.com/tschaub))
|
||||||
7
changelog/v3.8.2.md
Normal file
7
changelog/v3.8.2.md
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
# v3.8.2
|
||||||
|
|
||||||
|
## Summary
|
||||||
|
|
||||||
|
This is a patch release that corrects the URL for builds shown in the examples. Details below.
|
||||||
|
|
||||||
|
* [#3979](https://github.com/openlayers/ol3/pull/3979) - Fix URLs for openlayers.org resources. ([@tschaub](https://github.com/tschaub))
|
||||||
91
changelog/v3.9.0.md
Normal file
91
changelog/v3.9.0.md
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
# v3.9.0
|
||||||
|
|
||||||
|
## Summary
|
||||||
|
|
||||||
|
The v3.9.0 release includes features and fixes from 62 pull requests since the v3.8.2 release. New features include:
|
||||||
|
|
||||||
|
* [#3986](https://github.com/openlayers/ol3/pull/3986) - Modify 'url' option of ol.source.Vector to accept a function ([@alvinlindstam](https://github.com/alvinlindstam))
|
||||||
|
* [#4069](https://github.com/openlayers/ol3/pull/4069) - Add Z-index to layers ([@gberaudo](https://github.com/gberaudo))
|
||||||
|
* [#4044](https://github.com/openlayers/ol3/pull/4044) - Add ol.interaction.Draw#continueDrawing ([@elemoine](https://github.com/elemoine))
|
||||||
|
* [#4008](https://github.com/openlayers/ol3/pull/4008) - Add a Translate interaction ([@elemoine](https://github.com/elemoine))
|
||||||
|
|
||||||
|
See the complete list below for details. And see the following notes to know how to upgrade from v3.8.x to v3.9.0.
|
||||||
|
|
||||||
|
## Upgrade notes
|
||||||
|
|
||||||
|
#### `ol.style.Circle` changes
|
||||||
|
|
||||||
|
The experimental `getAnchor`, `getOrigin`, and `getSize` methods have been removed. The anchor and origin of a circle symbolizer are not modifiable, so these properties should not need to be accessed. The radius and stroke width can be used to calculate the rendered size of a circle symbolizer if needed:
|
||||||
|
|
||||||
|
```js
|
||||||
|
// calculate rendered size of a circle symbolizer
|
||||||
|
var width = 2 * circle.getRadius();
|
||||||
|
if (circle.getStroke()) {
|
||||||
|
width += circle.getStroke().getWidth() + 1;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## New features and fixes
|
||||||
|
|
||||||
|
* [#4055](https://github.com/openlayers/ol3/pull/4055) - Improve graticule perf ([@fgravin](https://github.com/fgravin))
|
||||||
|
* [#4088](https://github.com/openlayers/ol3/pull/4088) - Update jshint to v2.8.0 ([@fredj](https://github.com/fredj))
|
||||||
|
* [#4089](https://github.com/openlayers/ol3/pull/4089) - SelectEventType in ol.interaction namespace ([@pgiraud](https://github.com/pgiraud))
|
||||||
|
* [#4095](https://github.com/openlayers/ol3/pull/4095) - Zoom to the extent of the drag box. ([@tschaub](https://github.com/tschaub))
|
||||||
|
* [#4084](https://github.com/openlayers/ol3/pull/4084) - Fewer circle exports. ([@tschaub](https://github.com/tschaub))
|
||||||
|
* [#4094](https://github.com/openlayers/ol3/pull/4094) - Allow source.setAttributions() to be exported. ([@tschaub](https://github.com/tschaub))
|
||||||
|
* [#4096](https://github.com/openlayers/ol3/pull/4096) - Reinstate inheritdoc to fix #4082 ([@bjornharrtell](https://github.com/bjornharrtell))
|
||||||
|
* [#4091](https://github.com/openlayers/ol3/pull/4091) - Remove unused ol.renderer.webgl.Map.DEFAULT_COLOR_VALUES_ ([@fredj](https://github.com/fredj))
|
||||||
|
* [#4092](https://github.com/openlayers/ol3/pull/4092) - Minor coding style fixes ([@fredj](https://github.com/fredj))
|
||||||
|
* [#4083](https://github.com/openlayers/ol3/pull/4083) - Add API descriptions. ([@tschaub](https://github.com/tschaub))
|
||||||
|
* [#4078](https://github.com/openlayers/ol3/pull/4078) - Enable all the compiler checks ([@fredj](https://github.com/fredj))
|
||||||
|
* [#4085](https://github.com/openlayers/ol3/pull/4085) - Parse nested document tag ([@oterral](https://github.com/oterral))
|
||||||
|
* [#4060](https://github.com/openlayers/ol3/pull/4060) - Remove unnecessary cast ([@fredj](https://github.com/fredj))
|
||||||
|
* [#4064](https://github.com/openlayers/ol3/pull/4064) - Use a private variable to cache the default style array ([@fredj](https://github.com/fredj))
|
||||||
|
* [#4081](https://github.com/openlayers/ol3/pull/4081) - Update link to workshop. ([@tschaub](https://github.com/tschaub))
|
||||||
|
* [#4062](https://github.com/openlayers/ol3/pull/4062) - Remove ol.xml.makeParsersNS and use ol.xml.makeStructureNS instead ([@fredj](https://github.com/fredj))
|
||||||
|
* [#3986](https://github.com/openlayers/ol3/pull/3986) - Modify 'url' option of ol.source.Vector to accept a function ([@alvinlindstam](https://github.com/alvinlindstam))
|
||||||
|
* [#4077](https://github.com/openlayers/ol3/pull/4077) - Add missing const jsdoc annotation ([@fredj](https://github.com/fredj))
|
||||||
|
* [#4080](https://github.com/openlayers/ol3/pull/4080) - Remove unused goog.require in examples ([@fredj](https://github.com/fredj))
|
||||||
|
* [#4041](https://github.com/openlayers/ol3/pull/4041) - Fix custom build issue ([@elemoine](https://github.com/elemoine))
|
||||||
|
* [#4059](https://github.com/openlayers/ol3/pull/4059) - Clarify drag interaction example to inform about ol.interaction.Translate ([@alvinlindstam](https://github.com/alvinlindstam))
|
||||||
|
* [#4069](https://github.com/openlayers/ol3/pull/4069) - Add Z-index to layers ([@gberaudo](https://github.com/gberaudo))
|
||||||
|
* [#4076](https://github.com/openlayers/ol3/pull/4076) - Add assertion for required option 'code' on ol.proj.Projection ([@weskamm](https://github.com/weskamm))
|
||||||
|
* [#4075](https://github.com/openlayers/ol3/pull/4075) - setOpacity of Image undefined ([@bartvde](https://github.com/bartvde))
|
||||||
|
* [#4044](https://github.com/openlayers/ol3/pull/4044) - Add ol.interaction.Draw#continueDrawing ([@elemoine](https://github.com/elemoine))
|
||||||
|
* [#4073](https://github.com/openlayers/ol3/pull/4073) - Better type definition ([@fredj](https://github.com/fredj))
|
||||||
|
* [#4072](https://github.com/openlayers/ol3/pull/4072) - Update to closure-util 1.7.0 ([@elemoine](https://github.com/elemoine))
|
||||||
|
* [#4070](https://github.com/openlayers/ol3/pull/4070) - Make the debug server work regardless of the current working directory. ([@tschaub](https://github.com/tschaub))
|
||||||
|
* [#4067](https://github.com/openlayers/ol3/pull/4067) - Fix bootstrap class name in examples ([@fredj](https://github.com/fredj))
|
||||||
|
* [#4050](https://github.com/openlayers/ol3/pull/4050) - Use view.getRotation and view.getResolution instead of view.getState ([@fredj](https://github.com/fredj))
|
||||||
|
* [#4051](https://github.com/openlayers/ol3/pull/4051) - Move wrench node package to devDependencies ([@fredj](https://github.com/fredj))
|
||||||
|
* [#4047](https://github.com/openlayers/ol3/pull/4047) - Remove pystache dependency ([@fredj](https://github.com/fredj))
|
||||||
|
* [#4027](https://github.com/openlayers/ol3/pull/4027) - closure-compiler v20150729 compatibility ([@fredj](https://github.com/fredj))
|
||||||
|
* [#4040](https://github.com/openlayers/ol3/pull/4040) - Better docs for ol.ENABLE_[WEBGL|CANVAS|DOM] ([@elemoine](https://github.com/elemoine))
|
||||||
|
* [#4032](https://github.com/openlayers/ol3/pull/4032) - Improve ol.Overlay extensibility ([@gberaudo](https://github.com/gberaudo))
|
||||||
|
* [#4037](https://github.com/openlayers/ol3/pull/4037) - Don't install python packages in before_install ([@fredj](https://github.com/fredj))
|
||||||
|
* [#4028](https://github.com/openlayers/ol3/pull/4028) - Update to closure-util 1.6 ([@elemoine](https://github.com/elemoine))
|
||||||
|
* [#4014](https://github.com/openlayers/ol3/pull/4014) - Remove deprecated checkStructDictInheritance ([@fredj](https://github.com/fredj))
|
||||||
|
* [#3987](https://github.com/openlayers/ol3/pull/3987) - Remove unnecessary cast ([@fredj](https://github.com/fredj))
|
||||||
|
* [#4035](https://github.com/openlayers/ol3/pull/4035) - Remove unused sphere and ellipsoid methods. ([@tschaub](https://github.com/tschaub))
|
||||||
|
* [#4031](https://github.com/openlayers/ol3/pull/4031) - Fixing size of popup ([@pgiraud](https://github.com/pgiraud))
|
||||||
|
* [#4023](https://github.com/openlayers/ol3/pull/4023) - Render map when layer.setMap(map) called ([@elemoine](https://github.com/elemoine))
|
||||||
|
* [#4026](https://github.com/openlayers/ol3/pull/4026) - Fix Font Awesome CSS class in examples ([@fredj](https://github.com/fredj))
|
||||||
|
* [#4024](https://github.com/openlayers/ol3/pull/4024) - Correct documentation for ol.FeatureStyleFunction ([@marcjansen](https://github.com/marcjansen))
|
||||||
|
* [#4011](https://github.com/openlayers/ol3/pull/4011) - Make Modify interaction listen to feature changes ([@elemoine](https://github.com/elemoine))
|
||||||
|
* [#3917](https://github.com/openlayers/ol3/pull/3917) - Resolved issue with cluster source reloading ([@cmiles74](https://github.com/cmiles74))
|
||||||
|
* [#4015](https://github.com/openlayers/ol3/pull/4015) - Add a getUrls Method to ol.source.XYZ ([@weskamm](https://github.com/weskamm))
|
||||||
|
* [#4019](https://github.com/openlayers/ol3/pull/4019) - Simplify .editorconfig file ([@marcjansen](https://github.com/marcjansen))
|
||||||
|
* [#4002](https://github.com/openlayers/ol3/pull/4002) - Update closure-library to latest commit ([@fredj](https://github.com/fredj))
|
||||||
|
* [#4018](https://github.com/openlayers/ol3/pull/4018) - Fix rotate buttons in animation example ([@marcjansen](https://github.com/marcjansen))
|
||||||
|
* [#4013](https://github.com/openlayers/ol3/pull/4013) - Use a more recent version of marked ([@marcjansen](https://github.com/marcjansen))
|
||||||
|
* [#4017](https://github.com/openlayers/ol3/pull/4017) - Do not overwrite projections in the registry simply by using `new ol.proj.Projection()` ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#4008](https://github.com/openlayers/ol3/pull/4008) - Add a Translate interaction ([@elemoine](https://github.com/elemoine))
|
||||||
|
* [#3230](https://github.com/openlayers/ol3/pull/3230) - Add stroke to default editing style for geometry collections ([@pgiraud](https://github.com/pgiraud))
|
||||||
|
* [#4007](https://github.com/openlayers/ol3/pull/4007) - Do not use Function.prototype.bind in examples ([@elemoine](https://github.com/elemoine))
|
||||||
|
* [#4006](https://github.com/openlayers/ol3/pull/4006) - Fix typo (vegetaion -> vegetation) ([@elemoine](https://github.com/elemoine))
|
||||||
|
* [#3993](https://github.com/openlayers/ol3/pull/3993) - Replace base symbols with overridden ones when generating info.json ([@ahocevar](https://github.com/ahocevar))
|
||||||
|
* [#3992](https://github.com/openlayers/ol3/pull/3992) - Fix typo in Makefile ([@fredj](https://github.com/fredj))
|
||||||
|
* [#3989](https://github.com/openlayers/ol3/pull/3989) - Handle JSONP errors in ol.source.TileJSON ([@fredj](https://github.com/fredj))
|
||||||
|
* [#3983](https://github.com/openlayers/ol3/pull/3983) - Remove doc footer with timestamp. ([@tschaub](https://github.com/tschaub))
|
||||||
|
* [#3984](https://github.com/openlayers/ol3/pull/3984) - Style source control links in examples. ([@tschaub](https://github.com/tschaub))
|
||||||
|
* [#3982](https://github.com/openlayers/ol3/pull/3982) - Rebuild examples if package.json changes. ([@tschaub](https://github.com/tschaub))
|
||||||
@@ -1,3 +1,3 @@
|
|||||||
{
|
{
|
||||||
"library_url": "https://github.com/google/closure-library/archive/0011afd534469ba111786fe68300a634e08a4d80.zip"
|
"library_url": "https://github.com/google/closure-library/archive/5b25e65.zip"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,14 +14,14 @@
|
|||||||
"externs/bingmaps.js",
|
"externs/bingmaps.js",
|
||||||
"externs/bootstrap.js",
|
"externs/bootstrap.js",
|
||||||
"externs/closure-compiler.js",
|
"externs/closure-compiler.js",
|
||||||
|
"externs/esrijson.js",
|
||||||
"externs/example.js",
|
"externs/example.js",
|
||||||
"externs/fastclick.js",
|
"externs/fastclick.js",
|
||||||
"externs/geojson.js",
|
"externs/geojson.js",
|
||||||
"externs/jquery-1.9.js",
|
"externs/jquery-1.9.js",
|
||||||
"externs/proj4js.js",
|
"externs/proj4js.js",
|
||||||
"externs/tilejson.js",
|
"externs/tilejson.js",
|
||||||
"externs/topojson.js",
|
"externs/topojson.js"
|
||||||
"externs/vbarray.js"
|
|
||||||
],
|
],
|
||||||
"define": [
|
"define": [
|
||||||
"goog.array.ASSUME_NATIVE_FUNCTIONS=true",
|
"goog.array.ASSUME_NATIVE_FUNCTIONS=true",
|
||||||
@@ -30,41 +30,13 @@
|
|||||||
"goog.DEBUG=false"
|
"goog.DEBUG=false"
|
||||||
],
|
],
|
||||||
"jscomp_error": [
|
"jscomp_error": [
|
||||||
"accessControls",
|
"*"
|
||||||
"ambiguousFunctionDecl",
|
|
||||||
"checkEventfulObjectDisposal",
|
|
||||||
"checkRegExp",
|
|
||||||
"checkStructDictInheritance",
|
|
||||||
"checkTypes",
|
|
||||||
"checkVars",
|
|
||||||
"const",
|
|
||||||
"constantProperty",
|
|
||||||
"deprecated",
|
|
||||||
"duplicateMessage",
|
|
||||||
"es3",
|
|
||||||
"es5Strict",
|
|
||||||
"externsValidation",
|
|
||||||
"fileoverviewTags",
|
|
||||||
"globalThis",
|
|
||||||
"internetExplorerChecks",
|
|
||||||
"invalidCasts",
|
|
||||||
"misplacedTypeAnnotation",
|
|
||||||
"missingGetCssName",
|
|
||||||
"missingProperties",
|
|
||||||
"missingProvide",
|
|
||||||
"missingRequire",
|
|
||||||
"missingReturn",
|
|
||||||
"newCheckTypes",
|
|
||||||
"nonStandardJsDocs",
|
|
||||||
"suspiciousCode",
|
|
||||||
"strictModuleDepCheck",
|
|
||||||
"typeInvalidation",
|
|
||||||
"undefinedNames",
|
|
||||||
"undefinedVars",
|
|
||||||
"uselessCode",
|
|
||||||
"visibility"
|
|
||||||
],
|
],
|
||||||
"jscomp_off": [
|
"jscomp_off": [
|
||||||
|
"useOfGoogBase",
|
||||||
|
"unnecessaryCasts",
|
||||||
|
"lintChecks",
|
||||||
|
"missingProvide",
|
||||||
"unknownDefines"
|
"unknownDefines"
|
||||||
],
|
],
|
||||||
"extra_annotation_name": [
|
"extra_annotation_name": [
|
||||||
|
|||||||
@@ -30,40 +30,12 @@
|
|||||||
"goog.DEBUG=false"
|
"goog.DEBUG=false"
|
||||||
],
|
],
|
||||||
"jscomp_error": [
|
"jscomp_error": [
|
||||||
"accessControls",
|
"*"
|
||||||
"ambiguousFunctionDecl",
|
],
|
||||||
"checkEventfulObjectDisposal",
|
"jscomp_off": [
|
||||||
"checkRegExp",
|
"useOfGoogBase",
|
||||||
"checkStructDictInheritance",
|
"unnecessaryCasts",
|
||||||
"checkTypes",
|
"lintChecks"
|
||||||
"checkVars",
|
|
||||||
"const",
|
|
||||||
"constantProperty",
|
|
||||||
"deprecated",
|
|
||||||
"duplicateMessage",
|
|
||||||
"es3",
|
|
||||||
"es5Strict",
|
|
||||||
"externsValidation",
|
|
||||||
"fileoverviewTags",
|
|
||||||
"globalThis",
|
|
||||||
"internetExplorerChecks",
|
|
||||||
"invalidCasts",
|
|
||||||
"misplacedTypeAnnotation",
|
|
||||||
"missingGetCssName",
|
|
||||||
"missingProperties",
|
|
||||||
"missingProvide",
|
|
||||||
"missingRequire",
|
|
||||||
"missingReturn",
|
|
||||||
"newCheckTypes",
|
|
||||||
"nonStandardJsDocs",
|
|
||||||
"suspiciousCode",
|
|
||||||
"strictModuleDepCheck",
|
|
||||||
"typeInvalidation",
|
|
||||||
"undefinedNames",
|
|
||||||
"undefinedVars",
|
|
||||||
"unknownDefines",
|
|
||||||
"uselessCode",
|
|
||||||
"visibility"
|
|
||||||
],
|
],
|
||||||
"extra_annotation_name": [
|
"extra_annotation_name": [
|
||||||
"api", "observable"
|
"api", "observable"
|
||||||
|
|||||||
@@ -4,24 +4,23 @@
|
|||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta http-equiv="X-UA-Compatible" content="chrome=1">
|
<meta http-equiv="X-UA-Compatible" content="chrome=1">
|
||||||
<meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
|
<meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
|
||||||
<link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/twitter-bootstrap/2.3.1/css/bootstrap-combined.min.css" type="text/css">
|
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css" type="text/css">
|
||||||
|
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" type="text/css">
|
||||||
|
<link rel="stylesheet" href="./resources/prism/prism.css" type="text/css">
|
||||||
<link rel="stylesheet" href="../css/ol.css" type="text/css">
|
<link rel="stylesheet" href="../css/ol.css" type="text/css">
|
||||||
<link rel="stylesheet" href="./resources/layout.css" type="text/css">
|
<link rel="stylesheet" href="./resources/layout.css" type="text/css">
|
||||||
{{{ extraHead }}}
|
{{{ extraHead.local }}}
|
||||||
{{{ css.tag }}}
|
{{{ css.tag }}}
|
||||||
<link rel="stylesheet" href="./resources/prism/prism.css" type="text/css">
|
|
||||||
<script src="./resources/zeroclipboard/ZeroClipboard.min.js"></script>
|
<script src="./resources/zeroclipboard/ZeroClipboard.min.js"></script>
|
||||||
<title>{{ title }}</title>
|
<title>{{ title }}</title>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
<div class="navbar navbar-inverse navbar-fixed-top">
|
<header class="navbar" role="navigation">
|
||||||
<div class="navbar-inner">
|
<div class="container" id="navbar-inner-container">
|
||||||
<div class="container" id="navbar-inner-container">
|
<a class="navbar-brand" href="./"><img src="./resources/logo-70x70.png"> OpenLayers 3 Examples</a>
|
||||||
<a class="brand" href="./"><img src="./resources/logo-70x70.png"> OpenLayers 3 Examples</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</header>
|
||||||
|
|
||||||
<div class="container-fluid">
|
<div class="container-fluid">
|
||||||
|
|
||||||
@@ -38,25 +37,27 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="row-fluid">
|
<div class="row-fluid">
|
||||||
<hr>
|
<div id="source-controls">
|
||||||
<form method="POST" target="_blank" action="http://jsfiddle.net/api/post/jquery/1.11.0/">
|
<a id="copy-button"><i class="fa fa-clipboard"></i> Copy</a>
|
||||||
<input type="button" class="btn btn-info" id="copy-button" value="Copy example code">
|
<a id="jsfiddle-button"><i class="fa fa-jsfiddle"></i> Edit</a>
|
||||||
<input type="submit" class="btn btn-primary" id="jsfiddle-button" value="Create JSFiddle">
|
</div>
|
||||||
|
<form method="POST" id="jsfiddle-form" target="_blank" action="http://jsfiddle.net/api/post/jquery/1.11.0/">
|
||||||
<textarea class="hidden" name="js">{{ js.source }}</textarea>
|
<textarea class="hidden" name="js">{{ js.source }}</textarea>
|
||||||
<textarea class="hidden" name="css">{{ css.source }}</textarea>
|
<textarea class="hidden" name="css">{{ css.source }}</textarea>
|
||||||
<textarea class="hidden" name="html">{{ contents }}</textarea>
|
<textarea class="hidden" name="html">{{ contents }}</textarea>
|
||||||
<input type="hidden" name="wrap" value="l">
|
<input type="hidden" name="wrap" value="l">
|
||||||
<input type="hidden" name="resources" value="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css,https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js,https://cdnjs.cloudflare.com/ajax/libs/ol3/{{ olVersion }}/ol.css,https://cdnjs.cloudflare.com/ajax/libs/ol3/{{ olVersion }}/ol.js">
|
<input type="hidden" name="resources" value="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css,https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js,http://openlayers.org/en/v{{ olVersion }}/css/ol.css,http://openlayers.org/en/v{{ olVersion }}/build/ol.js{{ extraResources }}">
|
||||||
<pre><code id="example-source" class="language-markup"><!DOCTYPE html>
|
</form>
|
||||||
|
<pre><code id="example-source" class="language-markup"><!DOCTYPE html>
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<title>{{ title }}</title>
|
<title>{{ title }}</title>
|
||||||
<script src="https://code.jquery.com/jquery-1.11.2.min.js"></script>
|
<script src="https://code.jquery.com/jquery-1.11.2.min.js"></script>
|
||||||
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">
|
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
|
||||||
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
|
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
|
||||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/ol3/{{ olVersion }}/ol.css" type="text/css">
|
<link rel="stylesheet" href="http://openlayers.org/en/v{{ olVersion }}/css/ol.css" type="text/css">
|
||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/ol3/{{ olVersion }}/ol.js"></script>
|
<script src="http://openlayers.org/en/v{{ olVersion }}/build/ol.js"></script>
|
||||||
{{ extraHead }}
|
{{ extraHead.remote }}
|
||||||
{{#if css.source}}
|
{{#if css.source}}
|
||||||
<style>
|
<style>
|
||||||
{{ css.source }}
|
{{ css.source }}
|
||||||
@@ -73,12 +74,11 @@
|
|||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html></code></pre>
|
</html></code></pre>
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
|
<script src="https://code.jquery.com/jquery-1.11.2.min.js"></script>
|
||||||
<script src="http://maxcdn.bootstrapcdn.com/twitter-bootstrap/2.3.1/js/bootstrap.min.js"></script>
|
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
|
||||||
<script src="./resources/common.js"></script>
|
<script src="./resources/common.js"></script>
|
||||||
<script src="./resources/prism/prism.min.js"></script>
|
<script src="./resources/prism/prism.min.js"></script>
|
||||||
{{{ js.tag }}}
|
{{{ js.tag }}}
|
||||||
|
|||||||
@@ -16,9 +16,8 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"plugins": [
|
"plugins": [
|
||||||
"node_modules/jsdoc/plugins/markdown",
|
"node_modules/jsdoc-fork/plugins/markdown",
|
||||||
"config/jsdoc/api/plugins/inheritdoc",
|
"config/jsdoc/api/plugins/inheritdoc",
|
||||||
"config/jsdoc/api/plugins/interface",
|
|
||||||
"config/jsdoc/api/plugins/typedefs",
|
"config/jsdoc/api/plugins/typedefs",
|
||||||
"config/jsdoc/api/plugins/events",
|
"config/jsdoc/api/plugins/events",
|
||||||
"config/jsdoc/api/plugins/observable",
|
"config/jsdoc/api/plugins/observable",
|
||||||
|
|||||||
@@ -35,6 +35,5 @@ Interactions for [vector features](ol.Feature.html)
|
|||||||
<td><p>Changes to all [ol.Objects](ol.Object.html) can observed by calling the [object.on('propertychange')](ol.Object.html#on) method. Listeners receive an [ol.ObjectEvent](ol.ObjectEvent.html) with information on the changed property and old value.</p>
|
<td><p>Changes to all [ol.Objects](ol.Object.html) can observed by calling the [object.on('propertychange')](ol.Object.html#on) method. Listeners receive an [ol.ObjectEvent](ol.ObjectEvent.html) with information on the changed property and old value.</p>
|
||||||
<td>[ol.DeviceOrientation](ol.DeviceOrientation.html)<br>
|
<td>[ol.DeviceOrientation](ol.DeviceOrientation.html)<br>
|
||||||
[ol.Geolocation](ol.Geolocation.html)<br>
|
[ol.Geolocation](ol.Geolocation.html)<br>
|
||||||
[ol.Overlay](ol.Overlay.html)<br>
|
[ol.Overlay](ol.Overlay.html)<br></td>
|
||||||
[ol.FeatureOverlay](ol.FeatureOverlay.html)<br></td>
|
|
||||||
</tr></table>
|
</tr></table>
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ exports.defineTags = function(dictionary) {
|
|||||||
doclet.stability = level;
|
doclet.stability = level;
|
||||||
} else {
|
} else {
|
||||||
var errorText = util.format('Invalid stability level (%s) in %s line %s', tag.text, doclet.meta.filename, doclet.meta.lineno);
|
var errorText = util.format('Invalid stability level (%s) in %s line %s', tag.text, doclet.meta.filename, doclet.meta.lineno);
|
||||||
require('jsdoc/util/error').handle( new Error(errorText) );
|
require('jsdoc-fork/lib/jsdoc/util/error').handle( new Error(errorText) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -106,4 +106,4 @@ exports.handlers = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,25 +0,0 @@
|
|||||||
exports.defineTags = function(dictionary) {
|
|
||||||
|
|
||||||
var classTag = dictionary.lookUp('class');
|
|
||||||
dictionary.defineTag('interface', {
|
|
||||||
mustHaveValue: false,
|
|
||||||
onTagged: function(doclet, tag) {
|
|
||||||
classTag.onTagged.apply(this, arguments);
|
|
||||||
doclet.interface = true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
var augmentsTag = dictionary.lookUp('augments');
|
|
||||||
dictionary.defineTag('implements', {
|
|
||||||
mustHaveValue: true,
|
|
||||||
onTagged: function(doclet, tag) {
|
|
||||||
tag.value = tag.value.match(/^\{?([^\}]*)\}?$/)[1];
|
|
||||||
augmentsTag.onTagged.apply(this, arguments);
|
|
||||||
if (!doclet.implements) {
|
|
||||||
doclet.implements = [];
|
|
||||||
}
|
|
||||||
doclet.implements.push(tag.value);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
};
|
|
||||||
@@ -5,6 +5,10 @@
|
|||||||
|
|
||||||
var lastOlxTypedef = null;
|
var lastOlxTypedef = null;
|
||||||
var olxTypes = {};
|
var olxTypes = {};
|
||||||
|
// names of the olx typenames
|
||||||
|
var olxTypeNames = [];
|
||||||
|
// types that are undefined or typedefs containing undefined
|
||||||
|
var undefinedLikes = null;
|
||||||
|
|
||||||
function addSubparams(params) {
|
function addSubparams(params) {
|
||||||
for (var j = 0, jj = params.length; j < jj; ++j) {
|
for (var j = 0, jj = params.length; j < jj; ++j) {
|
||||||
@@ -23,6 +27,63 @@ function addSubparams(params) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Changes the description of the param, if it is found to be a required
|
||||||
|
* option of an olxTypeName.
|
||||||
|
*/
|
||||||
|
function markRequiredIfNeeded(doclet){
|
||||||
|
var memberof = doclet.memberof;
|
||||||
|
// only check doclets that belong to an olxTypeName
|
||||||
|
if (!memberof || olxTypeNames.indexOf(memberof) == -1) {
|
||||||
|
return doclet;
|
||||||
|
}
|
||||||
|
|
||||||
|
var types = doclet.type.names;
|
||||||
|
var isRequiredParam = true;
|
||||||
|
|
||||||
|
// iterate over all types that are like-undefined (see above for explanation)
|
||||||
|
for (var idx = undefinedLikes.length - 1; idx >= 0; idx--) {
|
||||||
|
var undefinedLike = undefinedLikes[idx];
|
||||||
|
// … if the current types contains a type that is undefined-like,
|
||||||
|
// it is not required.
|
||||||
|
if (types.indexOf(undefinedLike) != -1) {
|
||||||
|
isRequiredParam = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isRequiredParam) {
|
||||||
|
var reqSnippet = '<span class="required-option">Required.</span></p>';
|
||||||
|
var endsWithP = /<\/p>$/i;
|
||||||
|
var description = doclet.description;
|
||||||
|
if (description && endsWithP.test(description)) {
|
||||||
|
description = description.replace(endsWithP, ' ' + reqSnippet);
|
||||||
|
} else if (doclet.description === undefined) {
|
||||||
|
description = '<p>' + reqSnippet;
|
||||||
|
}
|
||||||
|
doclet.description = description;
|
||||||
|
}
|
||||||
|
return doclet;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Iterates over all doclets and finds the names of types that contain
|
||||||
|
* undefined. Stores the names in the global variable undefinedLikes, so
|
||||||
|
* that e.g. markRequiredIfNeeded can use these.
|
||||||
|
*/
|
||||||
|
function findTypesLikeUndefined(doclets) {
|
||||||
|
undefinedLikes = ['undefined']; // include type 'undefined' explicitly
|
||||||
|
for (var i = doclets.length - 1; i >= 0; --i) {
|
||||||
|
var doclet = doclets[i];
|
||||||
|
if(doclet.kind === 'typedef') {
|
||||||
|
var types = doclet.type.names;
|
||||||
|
if (types.indexOf('undefined') !== -1) {
|
||||||
|
// the typedef contains 'undefined', so it self is undefinedLike.
|
||||||
|
undefinedLikes.push(doclet.longname);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
exports.handlers = {
|
exports.handlers = {
|
||||||
|
|
||||||
newDoclet: function(e) {
|
newDoclet: function(e) {
|
||||||
@@ -34,6 +95,7 @@ exports.handlers = {
|
|||||||
}
|
}
|
||||||
if (doclet.kind == 'typedef') {
|
if (doclet.kind == 'typedef') {
|
||||||
lastOlxTypedef = doclet;
|
lastOlxTypedef = doclet;
|
||||||
|
olxTypeNames.push(doclet.longname);
|
||||||
olxTypes[doclet.longname] = [];
|
olxTypes[doclet.longname] = [];
|
||||||
doclet.properties = [];
|
doclet.properties = [];
|
||||||
} else if (lastOlxTypedef && doclet.memberof == lastOlxTypedef.longname) {
|
} else if (lastOlxTypedef && doclet.memberof == lastOlxTypedef.longname) {
|
||||||
@@ -51,12 +113,14 @@ exports.handlers = {
|
|||||||
|
|
||||||
parseComplete: function(e) {
|
parseComplete: function(e) {
|
||||||
var doclets = e.doclets;
|
var doclets = e.doclets;
|
||||||
|
findTypesLikeUndefined(doclets);
|
||||||
for (var i = doclets.length - 1; i >= 0; --i) {
|
for (var i = doclets.length - 1; i >= 0; --i) {
|
||||||
var doclet = doclets[i];
|
var doclet = doclets[i];
|
||||||
var params = doclet.params;
|
var params = doclet.params;
|
||||||
if (params) {
|
if (params) {
|
||||||
addSubparams(params);
|
addSubparams(params);
|
||||||
}
|
}
|
||||||
|
markRequiredIfNeeded(doclet);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
/*global env: true */
|
/*global env: true */
|
||||||
var template = require('jsdoc/template'),
|
var template = require('jsdoc-fork/lib/jsdoc/template'),
|
||||||
fs = require('jsdoc/fs'),
|
fs = require('jsdoc-fork/lib/jsdoc/fs'),
|
||||||
path = require('jsdoc/path'),
|
path = require('jsdoc-fork/lib/jsdoc/path'),
|
||||||
taffy = require('taffydb').taffy,
|
taffy = require('taffydb').taffy,
|
||||||
handle = require('jsdoc/util/error').handle,
|
handle = require('jsdoc-fork/lib/jsdoc/util/error').handle,
|
||||||
helper = require('jsdoc/util/templateHelper'),
|
helper = require('jsdoc-fork/lib/jsdoc/util/templateHelper'),
|
||||||
_ = require('underscore'),
|
_ = require('underscore'),
|
||||||
htmlsafe = helper.htmlsafe,
|
htmlsafe = helper.htmlsafe,
|
||||||
linkto = helper.linkto,
|
linkto = helper.linkto,
|
||||||
@@ -29,9 +29,9 @@ function getAncestorLinks(doclet) {
|
|||||||
|
|
||||||
function hashToLink(doclet, hash) {
|
function hashToLink(doclet, hash) {
|
||||||
if ( !/^(#.+)/.test(hash) ) { return hash; }
|
if ( !/^(#.+)/.test(hash) ) { return hash; }
|
||||||
|
|
||||||
var url = helper.createLink(doclet);
|
var url = helper.createLink(doclet);
|
||||||
|
|
||||||
url = url.replace(/(#.+|$)/, hash);
|
url = url.replace(/(#.+|$)/, hash);
|
||||||
return '<a href="' + url + '">' + hash + '</a>';
|
return '<a href="' + url + '">' + hash + '</a>';
|
||||||
}
|
}
|
||||||
@@ -59,15 +59,15 @@ function needsSignature(doclet) {
|
|||||||
|
|
||||||
function addSignatureParams(f) {
|
function addSignatureParams(f) {
|
||||||
var params = helper.getSignatureParams(f, 'optional');
|
var params = helper.getSignatureParams(f, 'optional');
|
||||||
|
|
||||||
f.signature = (f.signature || '') + '('+params.join(', ')+')';
|
f.signature = (f.signature || '') + '('+params.join(', ')+')';
|
||||||
}
|
}
|
||||||
|
|
||||||
function addSignatureReturns(f) {
|
function addSignatureReturns(f) {
|
||||||
var returnTypes = helper.getSignatureReturns(f);
|
var returnTypes = helper.getSignatureReturns(f);
|
||||||
|
|
||||||
f.signature = '<span class="signature">'+(f.signature || '') + '</span>';
|
f.signature = '<span class="signature">'+(f.signature || '') + '</span>';
|
||||||
|
|
||||||
if (returnTypes.length) {
|
if (returnTypes.length) {
|
||||||
f.signature += '<span class="glyphicon glyphicon-circle-arrow-right"></span><span class="type-signature returnType">'+(returnTypes.length ? '{'+returnTypes.join('|')+'}' : '')+'</span>';
|
f.signature += '<span class="glyphicon glyphicon-circle-arrow-right"></span><span class="type-signature returnType">'+(returnTypes.length ? '{'+returnTypes.join('|')+'}' : '')+'</span>';
|
||||||
}
|
}
|
||||||
@@ -75,7 +75,7 @@ function addSignatureReturns(f) {
|
|||||||
|
|
||||||
function addSignatureTypes(f) {
|
function addSignatureTypes(f) {
|
||||||
var types = helper.getSignatureTypes(f);
|
var types = helper.getSignatureTypes(f);
|
||||||
|
|
||||||
f.signature = (f.signature || '') + '<span class="type-signature">'+(types.length? ' :'+types.join('|') : '')+' </span>';
|
f.signature = (f.signature || '') + '<span class="type-signature">'+(types.length? ' :'+types.join('|') : '')+' </span>';
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -106,7 +106,7 @@ function getPathFromDoclet(doclet) {
|
|||||||
|
|
||||||
return filepath;
|
return filepath;
|
||||||
}
|
}
|
||||||
|
|
||||||
function generate(title, docs, filename, resolveLinks) {
|
function generate(title, docs, filename, resolveLinks) {
|
||||||
resolveLinks = resolveLinks === false ? false : true;
|
resolveLinks = resolveLinks === false ? false : true;
|
||||||
|
|
||||||
@@ -115,14 +115,14 @@ function generate(title, docs, filename, resolveLinks) {
|
|||||||
title: title,
|
title: title,
|
||||||
docs: docs
|
docs: docs
|
||||||
};
|
};
|
||||||
|
|
||||||
var outpath = path.join(outdir, filename),
|
var outpath = path.join(outdir, filename),
|
||||||
html = view.render('container.tmpl', docData);
|
html = view.render('container.tmpl', docData);
|
||||||
|
|
||||||
if (resolveLinks) {
|
if (resolveLinks) {
|
||||||
html = helper.resolveLinks(html); // turn {@link foo} into <a href="foodoc.html">foo</a>
|
html = helper.resolveLinks(html); // turn {@link foo} into <a href="foodoc.html">foo</a>
|
||||||
}
|
}
|
||||||
|
|
||||||
fs.writeFileSync(outpath, html, 'utf8');
|
fs.writeFileSync(outpath, html, 'utf8');
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -153,7 +153,7 @@ function generateSourceFiles(sourceFiles) {
|
|||||||
* exports only that class or function), then attach the classes or functions to the `module`
|
* exports only that class or function), then attach the classes or functions to the `module`
|
||||||
* property of the appropriate module doclets. The name of each class or function is also updated
|
* property of the appropriate module doclets. The name of each class or function is also updated
|
||||||
* for display purposes. This function mutates the original arrays.
|
* for display purposes. This function mutates the original arrays.
|
||||||
*
|
*
|
||||||
* @private
|
* @private
|
||||||
* @param {Array.<module:jsdoc/doclet.Doclet>} doclets - The array of classes and functions to
|
* @param {Array.<module:jsdoc/doclet.Doclet>} doclets - The array of classes and functions to
|
||||||
* check.
|
* check.
|
||||||
@@ -268,7 +268,7 @@ exports.publish = function(taffyData, opts, tutorials) {
|
|||||||
|
|
||||||
var templatePath = opts.template;
|
var templatePath = opts.template;
|
||||||
view = new template.Template(templatePath + '/tmpl');
|
view = new template.Template(templatePath + '/tmpl');
|
||||||
|
|
||||||
// claim some special filenames in advance, so the All-Powerful Overseer of Filename Uniqueness
|
// claim some special filenames in advance, so the All-Powerful Overseer of Filename Uniqueness
|
||||||
// doesn't try to hand them out later
|
// doesn't try to hand them out later
|
||||||
var indexUrl = helper.getUniqueFilename('index');
|
var indexUrl = helper.getUniqueFilename('index');
|
||||||
@@ -291,16 +291,16 @@ exports.publish = function(taffyData, opts, tutorials) {
|
|||||||
var sourceFilePaths = [];
|
var sourceFilePaths = [];
|
||||||
data().each(function(doclet) {
|
data().each(function(doclet) {
|
||||||
doclet.attribs = '';
|
doclet.attribs = '';
|
||||||
|
|
||||||
if (doclet.examples) {
|
if (doclet.examples) {
|
||||||
doclet.examples = doclet.examples.map(function(example) {
|
doclet.examples = doclet.examples.map(function(example) {
|
||||||
var caption, code;
|
var caption, code;
|
||||||
|
|
||||||
if (example.match(/^\s*<caption>([\s\S]+?)<\/caption>(\s*[\n\r])([\s\S]+)$/i)) {
|
if (example.match(/^\s*<caption>([\s\S]+?)<\/caption>(\s*[\n\r])([\s\S]+)$/i)) {
|
||||||
caption = RegExp.$1;
|
caption = RegExp.$1;
|
||||||
code = RegExp.$3;
|
code = RegExp.$3;
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
caption: caption || '',
|
caption: caption || '',
|
||||||
code: code || example
|
code: code || example
|
||||||
@@ -326,7 +326,7 @@ exports.publish = function(taffyData, opts, tutorials) {
|
|||||||
sourceFilePaths.push(resolvedSourcePath);
|
sourceFilePaths.push(resolvedSourcePath);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// update outdir if necessary, then create outdir
|
// update outdir if necessary, then create outdir
|
||||||
var packageInfo = ( find({kind: 'package'}) || [] ) [0];
|
var packageInfo = ( find({kind: 'package'}) || [] ) [0];
|
||||||
if (packageInfo && packageInfo.name) {
|
if (packageInfo && packageInfo.name) {
|
||||||
@@ -350,8 +350,8 @@ exports.publish = function(taffyData, opts, tutorials) {
|
|||||||
var staticFileScanner;
|
var staticFileScanner;
|
||||||
if (conf['default'].staticFiles) {
|
if (conf['default'].staticFiles) {
|
||||||
staticFilePaths = conf['default'].staticFiles.paths || [];
|
staticFilePaths = conf['default'].staticFiles.paths || [];
|
||||||
staticFileFilter = new (require('jsdoc/src/filter')).Filter(conf['default'].staticFiles);
|
staticFileFilter = new (require('jsdoc-fork/lib/jsdoc/src/filter')).Filter(conf['default'].staticFiles);
|
||||||
staticFileScanner = new (require('jsdoc/src/scanner')).Scanner();
|
staticFileScanner = new (require('jsdoc-fork/lib/jsdoc/src/scanner')).Scanner();
|
||||||
|
|
||||||
staticFilePaths.forEach(function(filePath) {
|
staticFilePaths.forEach(function(filePath) {
|
||||||
var extraStaticFiles = staticFileScanner.scan([filePath], 10, staticFileFilter);
|
var extraStaticFiles = staticFileScanner.scan([filePath], 10, staticFileFilter);
|
||||||
@@ -365,7 +365,7 @@ exports.publish = function(taffyData, opts, tutorials) {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sourceFilePaths.length) {
|
if (sourceFilePaths.length) {
|
||||||
sourceFiles = shortenPaths( sourceFiles, path.commonPrefix(sourceFilePaths) );
|
sourceFiles = shortenPaths( sourceFiles, path.commonPrefix(sourceFilePaths) );
|
||||||
}
|
}
|
||||||
@@ -383,7 +383,7 @@ exports.publish = function(taffyData, opts, tutorials) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
data().each(function(doclet) {
|
data().each(function(doclet) {
|
||||||
var url = helper.longnameToUrl[doclet.longname];
|
var url = helper.longnameToUrl[doclet.longname];
|
||||||
|
|
||||||
@@ -393,13 +393,13 @@ exports.publish = function(taffyData, opts, tutorials) {
|
|||||||
else {
|
else {
|
||||||
doclet.id = doclet.name;
|
doclet.id = doclet.name;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( needsSignature(doclet) ) {
|
if ( needsSignature(doclet) ) {
|
||||||
addSignatureParams(doclet);
|
addSignatureParams(doclet);
|
||||||
addSignatureReturns(doclet);
|
addSignatureReturns(doclet);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// do this after the urls have all been generated
|
// do this after the urls have all been generated
|
||||||
data().each(function(doclet) {
|
data().each(function(doclet) {
|
||||||
doclet.ancestors = getAncestorLinks(doclet);
|
doclet.ancestors = getAncestorLinks(doclet);
|
||||||
@@ -407,13 +407,13 @@ exports.publish = function(taffyData, opts, tutorials) {
|
|||||||
if (doclet.kind === 'member') {
|
if (doclet.kind === 'member') {
|
||||||
addSignatureTypes(doclet);
|
addSignatureTypes(doclet);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (doclet.kind === 'constant') {
|
if (doclet.kind === 'constant') {
|
||||||
addSignatureTypes(doclet);
|
addSignatureTypes(doclet);
|
||||||
doclet.kind = 'member';
|
doclet.kind = 'member';
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var members = helper.getMembers(data);
|
var members = helper.getMembers(data);
|
||||||
members.tutorials = tutorials.children;
|
members.tutorials = tutorials.children;
|
||||||
|
|
||||||
@@ -437,7 +437,7 @@ exports.publish = function(taffyData, opts, tutorials) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (members.globals.length) { generate('Global', [{kind: 'globalobj'}], globalUrl); }
|
if (members.globals.length) { generate('Global', [{kind: 'globalobj'}], globalUrl); }
|
||||||
|
|
||||||
// index page displays information from package.json and lists files
|
// index page displays information from package.json and lists files
|
||||||
var files = find({kind: 'file'}),
|
var files = find({kind: 'file'}),
|
||||||
packages = find({kind: 'package'});
|
packages = find({kind: 'package'});
|
||||||
@@ -454,14 +454,14 @@ exports.publish = function(taffyData, opts, tutorials) {
|
|||||||
var namespaces = taffy(members.namespaces);
|
var namespaces = taffy(members.namespaces);
|
||||||
var mixins = taffy(members.mixins);
|
var mixins = taffy(members.mixins);
|
||||||
var externals = taffy(members.externals);
|
var externals = taffy(members.externals);
|
||||||
|
|
||||||
for (var longname in helper.longnameToUrl) {
|
for (var longname in helper.longnameToUrl) {
|
||||||
if ( hasOwnProp.call(helper.longnameToUrl, longname) ) {
|
if ( hasOwnProp.call(helper.longnameToUrl, longname) ) {
|
||||||
var myClasses = helper.find(classes, {longname: longname});
|
var myClasses = helper.find(classes, {longname: longname});
|
||||||
if (myClasses.length) {
|
if (myClasses.length) {
|
||||||
generate('Class: ' + myClasses[0].name, myClasses, helper.longnameToUrl[longname]);
|
generate('Class: ' + myClasses[0].name, myClasses, helper.longnameToUrl[longname]);
|
||||||
}
|
}
|
||||||
|
|
||||||
var myModules = helper.find(modules, {longname: longname});
|
var myModules = helper.find(modules, {longname: longname});
|
||||||
if (myModules.length) {
|
if (myModules.length) {
|
||||||
generate('Module: ' + myModules[0].name, myModules, helper.longnameToUrl[longname]);
|
generate('Module: ' + myModules[0].name, myModules, helper.longnameToUrl[longname]);
|
||||||
@@ -471,7 +471,7 @@ exports.publish = function(taffyData, opts, tutorials) {
|
|||||||
if (myNamespaces.length) {
|
if (myNamespaces.length) {
|
||||||
generate('Namespace: ' + myNamespaces[0].name, myNamespaces, helper.longnameToUrl[longname]);
|
generate('Namespace: ' + myNamespaces[0].name, myNamespaces, helper.longnameToUrl[longname]);
|
||||||
}
|
}
|
||||||
|
|
||||||
var myMixins = helper.find(mixins, {longname: longname});
|
var myMixins = helper.find(mixins, {longname: longname});
|
||||||
if (myMixins.length) {
|
if (myMixins.length) {
|
||||||
generate('Mixin: ' + myMixins[0].name, myMixins, helper.longnameToUrl[longname]);
|
generate('Mixin: ' + myMixins[0].name, myMixins, helper.longnameToUrl[longname]);
|
||||||
@@ -492,16 +492,16 @@ exports.publish = function(taffyData, opts, tutorials) {
|
|||||||
content: tutorial.parse(),
|
content: tutorial.parse(),
|
||||||
children: tutorial.children
|
children: tutorial.children
|
||||||
};
|
};
|
||||||
|
|
||||||
var tutorialPath = path.join(outdir, filename),
|
var tutorialPath = path.join(outdir, filename),
|
||||||
html = view.render('tutorial.tmpl', tutorialData);
|
html = view.render('tutorial.tmpl', tutorialData);
|
||||||
|
|
||||||
// yes, you can use {@link} in tutorials too!
|
// yes, you can use {@link} in tutorials too!
|
||||||
html = helper.resolveLinks(html); // turn {@link foo} into <a href="foodoc.html">foo</a>
|
html = helper.resolveLinks(html); // turn {@link foo} into <a href="foodoc.html">foo</a>
|
||||||
|
|
||||||
fs.writeFileSync(tutorialPath, html, 'utf8');
|
fs.writeFileSync(tutorialPath, html, 'utf8');
|
||||||
}
|
}
|
||||||
|
|
||||||
// tutorials can have only one parent so there is no risk for loops
|
// tutorials can have only one parent so there is no risk for loops
|
||||||
function saveChildren(node) {
|
function saveChildren(node) {
|
||||||
node.children.forEach(function(child) {
|
node.children.forEach(function(child) {
|
||||||
|
|||||||
@@ -37,10 +37,6 @@
|
|||||||
<div class="main">
|
<div class="main">
|
||||||
<h1 class="page-title" data-filename="<?js= filename ?>"><?js= title ?></h1>
|
<h1 class="page-title" data-filename="<?js= filename ?>"><?js= title ?></h1>
|
||||||
<?js= content ?>
|
<?js= content ?>
|
||||||
|
|
||||||
<footer>
|
|
||||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc <?js= env.version.number ?></a> on <?js= (new Date()) ?>
|
|
||||||
</footer>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script>prettyPrint();</script>
|
<script>prettyPrint();</script>
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ var self = this;
|
|||||||
<?js } ?>
|
<?js } ?>
|
||||||
</dt>
|
</dt>
|
||||||
<dd class="<?js= (data.stability && data.stability !== 'stable') ? 'unstable' : '' ?>">
|
<dd class="<?js= (data.stability && data.stability !== 'stable') ? 'unstable' : '' ?>">
|
||||||
|
|
||||||
<?js if (data.description) { ?>
|
<?js if (data.description) { ?>
|
||||||
<div class="description">
|
<div class="description">
|
||||||
<?js= data.description ?>
|
<?js= data.description ?>
|
||||||
@@ -39,20 +39,20 @@ var self = this;
|
|||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<?js } ?>
|
<?js } ?>
|
||||||
|
|
||||||
<?js if (data['this']) { ?>
|
<?js if (data['this']) { ?>
|
||||||
<h5>This:</h5>
|
<h5>This:</h5>
|
||||||
<ul><li><?js= this.linkto(data['this'], data['this']) ?></li></ul>
|
<ul><li><?js= this.linkto(data['this'], data['this']) ?></li></ul>
|
||||||
<?js } ?>
|
<?js } ?>
|
||||||
|
|
||||||
<?js if (data.stability || kind !== 'class') { ?>
|
<?js if (data.stability || kind !== 'class') { ?>
|
||||||
<?js if (data.params && params.length) { ?>
|
<?js if (data.params && params.length) { ?>
|
||||||
<?js= this.partial('params.tmpl', params) ?>
|
<?js= this.partial('params.tmpl', params) ?>
|
||||||
<?js } ?>
|
<?js } ?>
|
||||||
<?js } ?>
|
<?js } ?>
|
||||||
|
|
||||||
<?js= this.partial('details.tmpl', data) ?>
|
<?js= this.partial('details.tmpl', data) ?>
|
||||||
|
|
||||||
<?js if (data.fires && fires.length) { ?>
|
<?js if (data.fires && fires.length) { ?>
|
||||||
<h5>Fires:</h5>
|
<h5>Fires:</h5>
|
||||||
<ul><?js fires.forEach(function(f) {
|
<ul><?js fires.forEach(function(f) {
|
||||||
@@ -68,7 +68,7 @@ var self = this;
|
|||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
<li class="<?js= (eventDoclet || data).stability !== 'stable' ? 'unstable' : '' ?>">
|
<li class="<?js= (eventDoclet || data).stability !== 'stable' ? 'unstable' : '' ?>">
|
||||||
<code><?js= self.linkto(f, type) ?></code>
|
<code><?js= eventClassName ? self.linkto(f, type) : type ?></code>
|
||||||
<?js if (eventClassName) {
|
<?js if (eventClassName) {
|
||||||
var eventClass = self.find({longname: eventClassName})[0];
|
var eventClass = self.find({longname: eventClassName})[0];
|
||||||
if (eventClass) { ?>
|
if (eventClass) { ?>
|
||||||
@@ -96,7 +96,7 @@ var self = this;
|
|||||||
<li><?js= self.linkto(f) ?></li>
|
<li><?js= self.linkto(f) ?></li>
|
||||||
<?js }); ?></ul>
|
<?js }); ?></ul>
|
||||||
<?js } ?>
|
<?js } ?>
|
||||||
|
|
||||||
<?js if (data.exceptions && exceptions.length) { ?>
|
<?js if (data.exceptions && exceptions.length) { ?>
|
||||||
<h5>Throws:</h5>
|
<h5>Throws:</h5>
|
||||||
<?js if (exceptions.length > 1) { ?><ul><?js
|
<?js if (exceptions.length > 1) { ?><ul><?js
|
||||||
@@ -108,12 +108,12 @@ var self = this;
|
|||||||
<?js= self.partial('exceptions.tmpl', r) ?>
|
<?js= self.partial('exceptions.tmpl', r) ?>
|
||||||
<?js });
|
<?js });
|
||||||
} } ?>
|
} } ?>
|
||||||
|
|
||||||
<?js if (data.returns && returns.length) { ?>
|
<?js if (data.returns && returns.length) { ?>
|
||||||
<?js if (returns.length > 1) { ?><h5>Returns:</h5><?js } ?>
|
<?js if (returns.length > 1) { ?><h5>Returns:</h5><?js } ?>
|
||||||
<?js= self.partial('returns.tmpl', data.returns) ?>
|
<?js= self.partial('returns.tmpl', data.returns) ?>
|
||||||
<?js } ?>
|
<?js } ?>
|
||||||
|
|
||||||
<?js if (data.examples && examples.length) { ?>
|
<?js if (data.examples && examples.length) { ?>
|
||||||
<h5>Example<?js= examples.length > 1? 's':'' ?></h5>
|
<h5>Example<?js= examples.length > 1? 's':'' ?></h5>
|
||||||
<?js= this.partial('examples.tmpl', examples) ?>
|
<?js= this.partial('examples.tmpl', examples) ?>
|
||||||
|
|||||||
@@ -6,11 +6,14 @@ var assert = require('assert');
|
|||||||
var fs = require('fs');
|
var fs = require('fs');
|
||||||
var path = require('path');
|
var path = require('path');
|
||||||
|
|
||||||
|
var Promise = require('bluebird');
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Publish hook for the JSDoc template. Writes to JSON stdout.
|
* Publish hook for the JSDoc template. Writes to JSON stdout.
|
||||||
* @param {function} data The root of the Taffy DB containing doclet records.
|
* @param {function} data The root of the Taffy DB containing doclet records.
|
||||||
* @param {Object} opts Options.
|
* @param {Object} opts Options.
|
||||||
|
* @return {Promise} A promise that resolves when writing is complete.
|
||||||
*/
|
*/
|
||||||
exports.publish = function(data, opts) {
|
exports.publish = function(data, opts) {
|
||||||
|
|
||||||
@@ -49,7 +52,7 @@ exports.publish = function(data, opts) {
|
|||||||
var externs = [];
|
var externs = [];
|
||||||
var base = [];
|
var base = [];
|
||||||
var augments = {};
|
var augments = {};
|
||||||
var names = {};
|
var symbolsByName = {};
|
||||||
docs.filter(function(doc) {
|
docs.filter(function(doc) {
|
||||||
var include = true;
|
var include = true;
|
||||||
var constructor = doc.memberof;
|
var constructor = doc.memberof;
|
||||||
@@ -144,8 +147,13 @@ exports.publish = function(data, opts) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var target = isExterns ? externs : (doc.api ? symbols : base);
|
var target = isExterns ? externs : (doc.api ? symbols : base);
|
||||||
|
var existingSymbol = symbolsByName[symbol.name];
|
||||||
|
if (existingSymbol) {
|
||||||
|
var idx = target.indexOf(existingSymbol);
|
||||||
|
target.splice(idx, 1);
|
||||||
|
}
|
||||||
target.push(symbol);
|
target.push(symbol);
|
||||||
names[symbol.name] = true;
|
symbolsByName[symbol.name] = symbol;
|
||||||
|
|
||||||
if (doc.api && symbol.extends) {
|
if (doc.api && symbol.extends) {
|
||||||
while (symbol.extends in classes && !classes[symbol.extends].api &&
|
while (symbol.extends in classes && !classes[symbol.extends].api &&
|
||||||
@@ -163,13 +171,17 @@ exports.publish = function(data, opts) {
|
|||||||
return (symbol.name in augments || symbol.virtual);
|
return (symbol.name in augments || symbol.virtual);
|
||||||
});
|
});
|
||||||
|
|
||||||
process.stdout.write(
|
return new Promise(function(resolve, reject) {
|
||||||
JSON.stringify({
|
|
||||||
symbols: symbols,
|
process.stdout.write(
|
||||||
defines: defines,
|
JSON.stringify({
|
||||||
typedefs: typedefs,
|
symbols: symbols,
|
||||||
externs: externs,
|
defines: defines,
|
||||||
base: base
|
typedefs: typedefs,
|
||||||
}, null, 2));
|
externs: externs,
|
||||||
|
base: base
|
||||||
|
}, null, 2), resolve);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -20,40 +20,12 @@
|
|||||||
"goog.DEBUG=false"
|
"goog.DEBUG=false"
|
||||||
],
|
],
|
||||||
"jscomp_error": [
|
"jscomp_error": [
|
||||||
"accessControls",
|
"*"
|
||||||
"ambiguousFunctionDecl",
|
],
|
||||||
"checkEventfulObjectDisposal",
|
"jscomp_off": [
|
||||||
"checkRegExp",
|
"useOfGoogBase",
|
||||||
"checkStructDictInheritance",
|
"unnecessaryCasts",
|
||||||
"checkTypes",
|
"lintChecks"
|
||||||
"checkVars",
|
|
||||||
"const",
|
|
||||||
"constantProperty",
|
|
||||||
"deprecated",
|
|
||||||
"duplicateMessage",
|
|
||||||
"es3",
|
|
||||||
"es5Strict",
|
|
||||||
"externsValidation",
|
|
||||||
"fileoverviewTags",
|
|
||||||
"globalThis",
|
|
||||||
"internetExplorerChecks",
|
|
||||||
"invalidCasts",
|
|
||||||
"misplacedTypeAnnotation",
|
|
||||||
"missingGetCssName",
|
|
||||||
"missingProperties",
|
|
||||||
"missingProvide",
|
|
||||||
"missingRequire",
|
|
||||||
"missingReturn",
|
|
||||||
"newCheckTypes",
|
|
||||||
"nonStandardJsDocs",
|
|
||||||
"suspiciousCode",
|
|
||||||
"strictModuleDepCheck",
|
|
||||||
"typeInvalidation",
|
|
||||||
"undefinedNames",
|
|
||||||
"undefinedVars",
|
|
||||||
"unknownDefines",
|
|
||||||
"uselessCode",
|
|
||||||
"visibility"
|
|
||||||
],
|
],
|
||||||
"extra_annotation_name": [
|
"extra_annotation_name": [
|
||||||
"api", "observable"
|
"api", "observable"
|
||||||
|
|||||||
21
css/ol.css
21
css/ol.css
@@ -1,3 +1,8 @@
|
|||||||
|
.ol-box {
|
||||||
|
box-sizing: border-box;
|
||||||
|
border-radius: 2px;
|
||||||
|
border: 2px solid blue;
|
||||||
|
}
|
||||||
|
|
||||||
.ol-mouse-position {
|
.ol-mouse-position {
|
||||||
top: 8px;
|
top: 8px;
|
||||||
@@ -154,6 +159,7 @@
|
|||||||
.ol-attribution img {
|
.ol-attribution img {
|
||||||
max-height: 2em;
|
max-height: 2em;
|
||||||
max-width: inherit;
|
max-width: inherit;
|
||||||
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
.ol-attribution ul, .ol-attribution button {
|
.ol-attribution ul, .ol-attribution button {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
@@ -192,26 +198,15 @@
|
|||||||
.ol-zoomslider {
|
.ol-zoomslider {
|
||||||
top: 4.5em;
|
top: 4.5em;
|
||||||
left: .5em;
|
left: .5em;
|
||||||
width: 24px;
|
|
||||||
height: 200px;
|
height: 200px;
|
||||||
}
|
}
|
||||||
.ol-zoomslider-thumb {
|
.ol-zoomslider button {
|
||||||
position: absolute;
|
position: relative;
|
||||||
background: #7b98bc;
|
|
||||||
background: rgba(0,60,136,0.5);
|
|
||||||
border-radius: 2px;
|
|
||||||
cursor: pointer;
|
|
||||||
height: 10px;
|
height: 10px;
|
||||||
width: 22px;
|
|
||||||
margin: 3px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.ol-touch .ol-zoomslider {
|
.ol-touch .ol-zoomslider {
|
||||||
top: 5.5em;
|
top: 5.5em;
|
||||||
width: 2.052em;
|
|
||||||
}
|
|
||||||
.ol-touch .ol-zoomslider-thumb {
|
|
||||||
width: 1.8em;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.ol-overviewmap {
|
.ol-overviewmap {
|
||||||
|
|||||||
24
doc/faq.md
24
doc/faq.md
@@ -14,15 +14,16 @@ free to ping us or to send a pull request enhancing this document.
|
|||||||
|
|
||||||
Table of contents:
|
Table of contents:
|
||||||
|
|
||||||
* [What projection is OpenLayers using?](#what-projection-is-openlayers-using)
|
* [What projection is OpenLayers using?](#what-projection-is-openlayers-using-)
|
||||||
* [How do I change the projection of my map?](#how-do-i-change-the-projection-of-my-map)
|
* [How do I change the projection of my map?](#how-do-i-change-the-projection-of-my-map-)
|
||||||
* [Why is my map centered on the gulf of guinea (or africa, the ocean, null-island)?](#why-is-my-map-centered-on-the-gulf-of-guinea-or-africa-the-ocean-null-island)
|
* [Why is my map centered on the gulf of guinea (or africa, the ocean, null-island)?](#why-is-my-map-centered-on-the-gulf-of-guinea-or-africa-the-ocean-null-island-)
|
||||||
* [Why is the order of a coordinate [lon,lat], and not [lat,lon]?](#why-is-the-order-of-a-coordinate-lonlat-and-not-latlon)
|
* [Why is the order of a coordinate [lon,lat], and not [lat,lon]?](#why-is-the-order-of-a-coordinate-lon-lat-and-not-lat-lon-)
|
||||||
* [Why aren't there any features in my source?](#why-arent-there-any-features-in-my-source)
|
* [Why aren't there any features in my source?](#why-aren-t-there-any-features-in-my-source-)
|
||||||
* [How do I force a re-render of the map?](#how-do-i-force-a-re-render-of-the-map)
|
* [How do I force a re-render of the map?](#how-do-i-force-a-re-render-of-the-map-)
|
||||||
* [How do I create a custom build of OpenLayers?](#how-do-i-create-a-custom-build-of-openlayers)
|
* [How do I create a custom build of OpenLayers?](#how-do-i-create-a-custom-build-of-openlayers-)
|
||||||
* [Do I need to write my own code using Closure library?](#do-i-need-to-write-my-own-code-using-closure-library)
|
* [Do I need to write my own code using Closure library?](#do-i-need-to-write-my-own-code-using-closure-library-)
|
||||||
* [Do I need to compress my code with Closure compiler?](#do-i-need-to-compress-my-code-with-closure-compiler)
|
* [Do I need to compress my code with Closure compiler?](#do-i-need-to-compress-my-code-with-closure-compiler-)
|
||||||
|
|
||||||
|
|
||||||
## What projection is OpenLayers using?
|
## What projection is OpenLayers using?
|
||||||
|
|
||||||
@@ -302,7 +303,7 @@ map.renderSync();
|
|||||||
|
|
||||||
## How do I create a custom build of OpenLayers?
|
## How do I create a custom build of OpenLayers?
|
||||||
|
|
||||||
Please refer to [this blog post](http://boundlessgeo.com/2014/10/openlayers-custom-builds-revisited/)
|
Please refer to the [official create custom builds tutorial](tutorials/custom-builds.html)
|
||||||
which explains how to create a custom build of OpenLayers with just those parts
|
which explains how to create a custom build of OpenLayers with just those parts
|
||||||
included that you want.
|
included that you want.
|
||||||
|
|
||||||
@@ -326,7 +327,8 @@ compiler](https://developers.google.com/closure/compiler/).
|
|||||||
It may be a good choice though, because when your application code and the
|
It may be a good choice though, because when your application code and the
|
||||||
OpenLayers source code is compiled together using closure compiler, the
|
OpenLayers source code is compiled together using closure compiler, the
|
||||||
resulting build will most probably be the smallest in terms of byte-size. For
|
resulting build will most probably be the smallest in terms of byte-size. For
|
||||||
more details refer to [this tutorial](compile-application.md).
|
more details refer to the
|
||||||
|
[compile application and OpenLayers together tutorial](tutorials/closure.html).
|
||||||
|
|
||||||
If you don't want to use the closure compiler, or you can't, you are not at all
|
If you don't want to use the closure compiler, or you can't, you are not at all
|
||||||
forced to use it.
|
forced to use it.
|
||||||
|
|||||||
@@ -9,10 +9,14 @@ If you're eager to get your first OpenLayers 3 map on a page, dive into the [qui
|
|||||||
|
|
||||||
For a more in-depth overview of OpenLayers 3 core concepts, check out the [tutorials](tutorials/).
|
For a more in-depth overview of OpenLayers 3 core concepts, check out the [tutorials](tutorials/).
|
||||||
|
|
||||||
Make sure to also check out the [OpenLayers 3 workshop](../../../ol3-workshop/).
|
Make sure to also check out the [OpenLayers 3 workshop](/workshop/).
|
||||||
|
|
||||||
Find additional reference material in the [API docs](../apidoc).
|
Find additional reference material in the [API docs](../apidoc).
|
||||||
|
|
||||||
# Questions
|
# Frequently Asked Questions (FAQ)
|
||||||
|
|
||||||
If you cannot find an answer in the documentation, you can ask your question on [stackoverflow using the tag 'openlayers-3'](http://stackoverflow.com/questions/tagged/openlayers-3).
|
We have put together a document that lists [Frequently Asked Questions (FAQ)](faq.html) and our answers. Common problems that may arise when using OpenLayers 3 are explained there, and chances are you'll find an appropriate solution in this document.
|
||||||
|
|
||||||
|
# More questions?
|
||||||
|
|
||||||
|
If you cannot find an answer in the documentation or the FAQ, you can ask your question on [stackoverflow using the tag 'openlayers-3'](http://stackoverflow.com/questions/tagged/openlayers-3).
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ Below you'll find a complete working example. Create a new file, copy in the co
|
|||||||
})
|
})
|
||||||
],
|
],
|
||||||
view: new ol.View({
|
view: new ol.View({
|
||||||
center: ol.proj.transform([37.41, 8.82], 'EPSG:4326', 'EPSG:3857'),
|
center: ol.proj.fromLonLat([37.41, 8.82]),
|
||||||
zoom: 4
|
zoom: 4
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
@@ -89,7 +89,7 @@ The map in the application is contained in a [`<div>` HTML element](http://en.wi
|
|||||||
})
|
})
|
||||||
],
|
],
|
||||||
view: new ol.View({
|
view: new ol.View({
|
||||||
center: ol.proj.transform([37.41, 8.82], 'EPSG:4326', 'EPSG:3857'),
|
center: ol.proj.fromLonLat([37.41, 8.82]),
|
||||||
zoom: 4
|
zoom: 4
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
@@ -125,9 +125,9 @@ The next part of the `Map` object is the `View`. The view allow to specify the c
|
|||||||
|
|
||||||
```js
|
```js
|
||||||
view: new ol.View({
|
view: new ol.View({
|
||||||
center: ol.proj.transform([37.41, 8.82], 'EPSG:4326', 'EPSG:3857'),
|
center: ol.proj.fromLonLat([37.41, 8.82]),
|
||||||
zoom: 4
|
zoom: 4
|
||||||
})
|
})
|
||||||
```
|
```
|
||||||
|
|
||||||
You will notice that the `center` specified is in lat/lon coordinates (EPSG:4326). Since the only layer we use is in Spherical Mercator projection (EPSG:3857), we can reproject them on the fly to be able to zoom the map on the right coordinates.
|
You will notice that the `center` specified is in lon/lat coordinates (EPSG:4326). Since the only layer we use is in Spherical Mercator projection (EPSG:3857), we can reproject them on the fly to be able to zoom the map on the right coordinates.
|
||||||
|
|||||||
@@ -239,7 +239,6 @@ Here is a version of `config.json` with more compilation checks enabled:
|
|||||||
"ambiguousFunctionDecl",
|
"ambiguousFunctionDecl",
|
||||||
"checkEventfulObjectDisposal",
|
"checkEventfulObjectDisposal",
|
||||||
"checkRegExp",
|
"checkRegExp",
|
||||||
"checkStructDictInheritance",
|
|
||||||
"checkTypes",
|
"checkTypes",
|
||||||
"checkVars",
|
"checkVars",
|
||||||
"const",
|
"const",
|
||||||
@@ -313,7 +312,7 @@ directory:
|
|||||||
```
|
```
|
||||||
|
|
||||||
Note that the page includes a `script` tag referencing the `app.js` file,
|
Note that the page includes a `script` tag referencing the `app.js` file,
|
||||||
which is the file resuted from the compilation.
|
which is the file resulting from the compilation.
|
||||||
|
|
||||||
You are done!
|
You are done!
|
||||||
|
|
||||||
|
|||||||
@@ -72,7 +72,6 @@ Creating a custom build requires writing a build configuration file. The format
|
|||||||
"api", "observable"
|
"api", "observable"
|
||||||
],
|
],
|
||||||
"compilation_level": "ADVANCED_OPTIMIZATIONS",
|
"compilation_level": "ADVANCED_OPTIMIZATIONS",
|
||||||
"use_types_for_optimization": true,
|
|
||||||
"manage_closure_dependencies": true
|
"manage_closure_dependencies": true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -180,7 +179,7 @@ The Closure documentation explains that "externs" are for external names used in
|
|||||||
|
|
||||||
### Other compiler options
|
### Other compiler options
|
||||||
|
|
||||||
There are a couple of other compiler options in the config file above. `manage_closure_dependencies` should always be used. `use_types_for_optimization` should be used for better compression rates.
|
There are a couple of other compiler options in the config file above. `manage_closure_dependencies` should always be used.
|
||||||
|
|
||||||
You can specify any of the other compiler options here as needed, such as the renaming reports, output manifest, or source maps. There is a full list of available options in [closure-util](https://github.com/openlayers/closure-util/blob/master/compiler-options.txt).
|
You can specify any of the other compiler options here as needed, such as the renaming reports, output manifest, or source maps. There is a full list of available options in [closure-util](https://github.com/openlayers/closure-util/blob/master/compiler-options.txt).
|
||||||
|
|
||||||
@@ -219,7 +218,6 @@ Now let's try a more complicated example: [`heatmaps-earthquakes`](http://openla
|
|||||||
"goog.DEBUG=false"
|
"goog.DEBUG=false"
|
||||||
],
|
],
|
||||||
"compilation_level": "ADVANCED_OPTIMIZATIONS",
|
"compilation_level": "ADVANCED_OPTIMIZATIONS",
|
||||||
"use_types_for_optimization": true,
|
|
||||||
"manage_closure_dependencies": true
|
"manage_closure_dependencies": true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
template: example.html
|
layout: example.html
|
||||||
title: Accessibility example
|
title: Accessibility example
|
||||||
shortdesc: Example of an accessible map.
|
shortdesc: Example of an accessible map.
|
||||||
docs: >
|
docs: >
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
template: example.html
|
layout: example.html
|
||||||
title: Animation example
|
title: Animation example
|
||||||
shortdesc: Demonstrates animated pan, zoom, and rotation.
|
shortdesc: Demonstrates animated pan, zoom, and rotation.
|
||||||
docs: >
|
docs: >
|
||||||
@@ -14,8 +14,8 @@ tags: "animation"
|
|||||||
</div>
|
</div>
|
||||||
<div class="row-fluid">
|
<div class="row-fluid">
|
||||||
<div class="span12">
|
<div class="span12">
|
||||||
<button id="rotate-left"><i class="icon-arrow-left"></i></button>
|
<button id="rotate-left" title="Rotate clockwise">↻</button>
|
||||||
<button id="rotate-right"><i class="icon-arrow-right"></i></button>
|
<button id="rotate-right" title="Rotate counterclockwise">↺</button>
|
||||||
<button id="rotate-around-rome">Rotate around Rome</button>
|
<button id="rotate-around-rome">Rotate around Rome</button>
|
||||||
<button id="pan-to-london">Pan to London</button>
|
<button id="pan-to-london">Pan to London</button>
|
||||||
<button id="elastic-to-moscow">Elastic to Moscow</button>
|
<button id="elastic-to-moscow">Elastic to Moscow</button>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
template: example.html
|
layout: example.html
|
||||||
title: Tiled ArcGIS MapServer example
|
title: Tiled ArcGIS MapServer example
|
||||||
shortdesc: Example of a tiled ArcGIS layer.
|
shortdesc: Example of a tiled ArcGIS layer.
|
||||||
docs: >
|
docs: >
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
template: example.html
|
layout: example.html
|
||||||
title: Attributions example
|
title: Attributions example
|
||||||
shortdesc: Example of a attributions visibily change on map resize, to collapse them on small maps.
|
shortdesc: Example of a attributions visibily change on map resize, to collapse them on small maps.
|
||||||
docs: >
|
docs: >
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
---
|
---
|
||||||
template: example.html
|
layout: example.html
|
||||||
title: Bing Maps example
|
title: Bing Maps example
|
||||||
shortdesc: Example of a Bing Maps layer.
|
shortdesc: Example of a Bing Maps layer.
|
||||||
docs: >
|
docs: >
|
||||||
<p>When the Bing Maps tile service doesn't have tiles for a given resolution and region it returns "placeholder" tiles indicating that. Zoom the map beyond level 19 to see the "placeholder" tiles. If you want OpenLayers to display stretched tiles in place of "placeholder" tiles beyond zoom level 19 then set <code>maxZoom</code> to <code>19</code> in the options passed to <code>ol.source.BingMaps</code>.</p>
|
<p>When the Bing Maps tile service doesn't have tiles for a given resolution and region it returns "placeholder" tiles indicating that. Zoom the map beyond level 19 to see the "placeholder" tiles. If you want OpenLayers to display stretched tiles in place of "placeholder" tiles beyond zoom level 19 then set <code>maxZoom</code> to <code>19</code> in the options passed to <code>ol.source.BingMaps</code>.</p>
|
||||||
tags: "bing, bing-maps"
|
tags: "bing, bing-maps"
|
||||||
|
cloak:
|
||||||
|
Ak-dzM4wZjSqTlzveKz5u0d4IQ4bRzVI309GxmkgSVr1ewS6iPSrOvOKhA-CJlm3: Your Bing Maps Key from http://bingmapsportal.com/ here
|
||||||
---
|
---
|
||||||
<div class="row-fluid">
|
<div class="row-fluid">
|
||||||
<div class="span12">
|
<div class="span12">
|
||||||
|
|||||||
4
examples/blend-modes.css
Normal file
4
examples/blend-modes.css
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
.map{
|
||||||
|
background-repeat: repeat;
|
||||||
|
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAApSURBVBiVY7x///5/BjSgqKjIiC7GhC6ACwygQgxHMzAwMGDz4FDwDAD5/wevjSk4mwAAAABJRU5ErkJggg==);
|
||||||
|
}
|
||||||
76
examples/blend-modes.html
Normal file
76
examples/blend-modes.html
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
---
|
||||||
|
layout: example.html
|
||||||
|
title: Blend modes example
|
||||||
|
shortdesc: Shows how to change the canvas compositing / blending mode in post- and precompose eventhandlers.
|
||||||
|
docs: >
|
||||||
|
<p>This example shows how to change the canvas compositing / blending mode in
|
||||||
|
post- and precompose event handlers. The Canvas 2D API provides the property
|
||||||
|
<code>globalCompositeOperation</code> with which one can influence which
|
||||||
|
composition operation will be used when drawing on the canvas. The various
|
||||||
|
options are well described on the <a href="https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/globalCompositeOperation">MDN
|
||||||
|
documentation page</a>.</p>
|
||||||
|
|
||||||
|
<p>In this example three circles on the corners of an equilateral triangle are
|
||||||
|
drawn with red, green or blue styles respectively. By setting the
|
||||||
|
<code>globalCompositeOperation</code> you can change how these colors turn out
|
||||||
|
when they are combined on the map.</p>
|
||||||
|
|
||||||
|
<p>You can select an operation in the select-field and you can also control
|
||||||
|
which layers will be affected by the chosen operation through the layer
|
||||||
|
checkboxes.</p>
|
||||||
|
tags: "blendmode, blend-mode, blend mode, blendingmode, blending-mode, blending mode, composition, compositing, canvas, vector"
|
||||||
|
---
|
||||||
|
<div class="row-fluid">
|
||||||
|
<div class="span12">
|
||||||
|
<div id="map" class="map"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row-fluid">
|
||||||
|
<div class="span12">
|
||||||
|
<form class="form-horizontal">
|
||||||
|
<label>
|
||||||
|
<select id="blend-mode" class="form-control">
|
||||||
|
<option value="source-over">source-over (default)</option>
|
||||||
|
<option>source-in</option>
|
||||||
|
<option>source-out</option>
|
||||||
|
<option>source-atop</option>
|
||||||
|
<option>destination-over</option>
|
||||||
|
<option>destination-in</option>
|
||||||
|
<option>destination-out</option>
|
||||||
|
<option>destination-atop</option>
|
||||||
|
<option>lighter</option>
|
||||||
|
<option>copy</option>
|
||||||
|
<option>xor</option>
|
||||||
|
<option>multiply</option>
|
||||||
|
<option>screen</option>
|
||||||
|
<option>overlay</option>
|
||||||
|
<option>darken</option>
|
||||||
|
<option>lighten</option>
|
||||||
|
<option>color-dodge</option>
|
||||||
|
<option>color-burn</option>
|
||||||
|
<option>hard-light</option>
|
||||||
|
<option>soft-light</option>
|
||||||
|
<option selected>difference</option>
|
||||||
|
<option>exclusion</option>
|
||||||
|
<option>hue</option>
|
||||||
|
<option>saturation</option>
|
||||||
|
<option>color</option>
|
||||||
|
<option>luminosity</option>
|
||||||
|
</select>
|
||||||
|
Canvas compositing / blending mode
|
||||||
|
</label>
|
||||||
|
<label>
|
||||||
|
<input type="checkbox" id="affect-red" checked>
|
||||||
|
Red circle affected
|
||||||
|
</label>
|
||||||
|
<label>
|
||||||
|
<input type="checkbox" id="affect-green" checked>
|
||||||
|
Green circle affected
|
||||||
|
</label>
|
||||||
|
<label>
|
||||||
|
<input type="checkbox" id="affect-blue" checked>
|
||||||
|
Blue circle affected
|
||||||
|
</label>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
177
examples/blend-modes.js
Normal file
177
examples/blend-modes.js
Normal file
@@ -0,0 +1,177 @@
|
|||||||
|
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.Circle');
|
||||||
|
goog.require('ol.style.Fill');
|
||||||
|
goog.require('ol.style.Stroke');
|
||||||
|
goog.require('ol.style.Style');
|
||||||
|
|
||||||
|
|
||||||
|
// Create separate layers for red, green an blue circles.
|
||||||
|
//
|
||||||
|
// Every layer has one feature that is styled with a circle, together the
|
||||||
|
// features form the corners of an equilateral triangle and their styles overlap
|
||||||
|
var redLayer = new ol.layer.Vector({
|
||||||
|
source: new ol.source.Vector({
|
||||||
|
features: [new ol.Feature(new ol.geom.Point([0, 0]))]
|
||||||
|
}),
|
||||||
|
style: new ol.style.Style({
|
||||||
|
image: new ol.style.Circle({
|
||||||
|
fill: new ol.style.Fill({
|
||||||
|
color: 'rgba(255,0,0,0.8)'
|
||||||
|
}),
|
||||||
|
stroke: new ol.style.Stroke({
|
||||||
|
color: 'rgb(255,0,0)',
|
||||||
|
width: 15
|
||||||
|
}),
|
||||||
|
radius: 120
|
||||||
|
})
|
||||||
|
})
|
||||||
|
});
|
||||||
|
var greenLayer = new ol.layer.Vector({
|
||||||
|
source: new ol.source.Vector({
|
||||||
|
// 433.013 is roughly 250 * Math.sqrt(3)
|
||||||
|
features: [new ol.Feature(new ol.geom.Point([250, 433.013]))]
|
||||||
|
}),
|
||||||
|
style: new ol.style.Style({
|
||||||
|
image: new ol.style.Circle({
|
||||||
|
fill: new ol.style.Fill({
|
||||||
|
color: 'rgba(0,255,0,0.8)'
|
||||||
|
}),
|
||||||
|
stroke: new ol.style.Stroke({
|
||||||
|
color: 'rgb(0,255,0)',
|
||||||
|
width: 15
|
||||||
|
}),
|
||||||
|
radius: 120
|
||||||
|
})
|
||||||
|
})
|
||||||
|
});
|
||||||
|
var blueLayer = new ol.layer.Vector({
|
||||||
|
source: new ol.source.Vector({
|
||||||
|
features: [new ol.Feature(new ol.geom.Point([500, 0]))]
|
||||||
|
}),
|
||||||
|
style: new ol.style.Style({
|
||||||
|
image: new ol.style.Circle({
|
||||||
|
fill: new ol.style.Fill({
|
||||||
|
color: 'rgba(0,0,255,0.8)'
|
||||||
|
}),
|
||||||
|
stroke: new ol.style.Stroke({
|
||||||
|
color: 'rgb(0,0,255)',
|
||||||
|
width: 15
|
||||||
|
}),
|
||||||
|
radius: 120
|
||||||
|
})
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
|
// Create the map, the view is centered on the triangle. Zooming and panning is
|
||||||
|
// restricted to a sane area
|
||||||
|
var map = new ol.Map({
|
||||||
|
layers: [
|
||||||
|
redLayer,
|
||||||
|
greenLayer,
|
||||||
|
blueLayer
|
||||||
|
],
|
||||||
|
target: 'map',
|
||||||
|
view: new ol.View({
|
||||||
|
center: [250, 220],
|
||||||
|
extent: [0, 0, 500, 500],
|
||||||
|
resolution: 4,
|
||||||
|
minResolution: 2,
|
||||||
|
maxResolution: 32
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
// Various helper methods and event handlers
|
||||||
|
/**
|
||||||
|
* This method sets the globalCompositeOperation to the value of the select
|
||||||
|
* field and it is bound to the precompose event of the layers.
|
||||||
|
*
|
||||||
|
* @param {ol.render.Event} evt The render event.
|
||||||
|
*/
|
||||||
|
var setBlendModeFromSelect = function(evt) {
|
||||||
|
evt.context.globalCompositeOperation = select.value;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method resets the globalCompositeOperation to the default value of
|
||||||
|
* 'source-over' and it is bound to the postcompose event of the layers.
|
||||||
|
*
|
||||||
|
* @param {ol.render.Event} evt The render event.
|
||||||
|
*/
|
||||||
|
var resetBlendModeFromSelect = function(evt) {
|
||||||
|
evt.context.globalCompositeOperation = 'source-over';
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Bind the pre- and postcompose handlers to the passed layer.
|
||||||
|
*
|
||||||
|
* @param {ol.layer.Vector} layer The layer to bind the handlers to.
|
||||||
|
*/
|
||||||
|
var bindLayerListeners = function(layer) {
|
||||||
|
layer.on('precompose', setBlendModeFromSelect);
|
||||||
|
layer.on('postcompose', resetBlendModeFromSelect);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unind the pre- and postcompose handlers to the passed layers.
|
||||||
|
*
|
||||||
|
* @param {ol.layer.Vector} layer The layer to unbind the handlers from.
|
||||||
|
*/
|
||||||
|
var unbindLayerListeners = function(layer) {
|
||||||
|
layer.un('precompose', setBlendModeFromSelect);
|
||||||
|
layer.un('postcompose', resetBlendModeFromSelect);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handler for the click event of the 'affect-XXX' checkboxes.
|
||||||
|
*
|
||||||
|
* @this {HTMLInputElement}
|
||||||
|
*/
|
||||||
|
var affectLayerClicked = function() {
|
||||||
|
var layer;
|
||||||
|
if (this.id == 'affect-red') {
|
||||||
|
layer = redLayer;
|
||||||
|
} else if (this.id == 'affect-green') {
|
||||||
|
layer = greenLayer;
|
||||||
|
} else {
|
||||||
|
layer = blueLayer;
|
||||||
|
}
|
||||||
|
if (this.checked) {
|
||||||
|
bindLayerListeners(layer);
|
||||||
|
} else {
|
||||||
|
unbindLayerListeners(layer);
|
||||||
|
}
|
||||||
|
map.render();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Get the form elements and bind the listeners
|
||||||
|
var select = document.getElementById('blend-mode');
|
||||||
|
var affectRed = document.getElementById('affect-red');
|
||||||
|
var affectGreen = document.getElementById('affect-green');
|
||||||
|
var affectBlue = document.getElementById('affect-blue');
|
||||||
|
|
||||||
|
// Rerender map when blend mode changes
|
||||||
|
select.addEventListener('change', function() {
|
||||||
|
map.render();
|
||||||
|
});
|
||||||
|
|
||||||
|
// Unbind / bind listeners depending on the checked state when the checkboxes
|
||||||
|
// are clicked
|
||||||
|
affectRed.addEventListener('click', affectLayerClicked);
|
||||||
|
affectGreen.addEventListener('click', affectLayerClicked);
|
||||||
|
affectBlue.addEventListener('click', affectLayerClicked);
|
||||||
|
|
||||||
|
// Initially bind listeners
|
||||||
|
bindLayerListeners(redLayer);
|
||||||
|
bindLayerListeners(greenLayer);
|
||||||
|
bindLayerListeners(blueLayer);
|
||||||
4
examples/box-selection.css
Normal file
4
examples/box-selection.css
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
.ol-dragbox {
|
||||||
|
background-color: rgba(255,255,255,0.4);
|
||||||
|
border-color: rgba(100,150,0,1);
|
||||||
|
}
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
---
|
---
|
||||||
template: example.html
|
layout: example.html
|
||||||
title: Box selection example
|
title: Box selection example
|
||||||
shortdesc: Using a DragBox interaction to select features.
|
shortdesc: Using a DragBox interaction to select features.
|
||||||
docs: >
|
docs: >
|
||||||
<p>This example shows how to use a <code>DragBox</code> interaction to select features. Selected features are added
|
<p>This example shows how to use a <code>DragBox</code> interaction to select features. Selected features are added
|
||||||
to the feature overlay of a select interaction (<code>ol.interaction.Select</code>) for highlighting.</p>
|
to the feature overlay of a select interaction (<code>ol.interaction.Select</code>) for highlighting.</p>
|
||||||
<p>Use <code>SHIFT+drag</code> to draw boxes.</p>
|
<p>Use <code>Ctrl+drag</code> (<code>Meta+drag</code> on Mac) to draw boxes.</p>
|
||||||
tags: "DragBox, feature, selection, box"
|
tags: "DragBox, feature, selection, box"
|
||||||
---
|
---
|
||||||
<div class="row-fluid">
|
<div class="row-fluid">
|
||||||
|
|||||||
@@ -8,8 +8,6 @@ goog.require('ol.layer.Tile');
|
|||||||
goog.require('ol.layer.Vector');
|
goog.require('ol.layer.Vector');
|
||||||
goog.require('ol.source.OSM');
|
goog.require('ol.source.OSM');
|
||||||
goog.require('ol.source.Vector');
|
goog.require('ol.source.Vector');
|
||||||
goog.require('ol.style.Stroke');
|
|
||||||
goog.require('ol.style.Style');
|
|
||||||
|
|
||||||
|
|
||||||
var vectorSource = new ol.source.Vector({
|
var vectorSource = new ol.source.Vector({
|
||||||
@@ -43,12 +41,7 @@ var selectedFeatures = select.getFeatures();
|
|||||||
|
|
||||||
// a DragBox interaction used to select features by drawing boxes
|
// a DragBox interaction used to select features by drawing boxes
|
||||||
var dragBox = new ol.interaction.DragBox({
|
var dragBox = new ol.interaction.DragBox({
|
||||||
condition: ol.events.condition.shiftKeyOnly,
|
condition: ol.events.condition.platformModifierKeyOnly
|
||||||
style: new ol.style.Style({
|
|
||||||
stroke: new ol.style.Stroke({
|
|
||||||
color: [0, 0, 255, 1]
|
|
||||||
})
|
|
||||||
})
|
|
||||||
});
|
});
|
||||||
|
|
||||||
map.addInteraction(dragBox);
|
map.addInteraction(dragBox);
|
||||||
|
|||||||
@@ -1,7 +0,0 @@
|
|||||||
#reset-brightness {
|
|
||||||
min-width: 138px;
|
|
||||||
}
|
|
||||||
#reset-contrast {
|
|
||||||
min-width: 120px;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
---
|
|
||||||
template: example.html
|
|
||||||
title: Brightness/contrast example
|
|
||||||
shortdesc: Example of brightness/contrast control on the client (WebGL only).
|
|
||||||
docs: >
|
|
||||||
This example shows how to control brightness/contrast on the client,
|
|
||||||
the example is limited to WebGL.
|
|
||||||
tags: "brightness, contrast, webgl"
|
|
||||||
---
|
|
||||||
<div class="row-fluid">
|
|
||||||
<div class="span12">
|
|
||||||
<div id="map" class="map"></div>
|
|
||||||
<div id="no-webgl" class="alert alert-error" style="display: none">
|
|
||||||
This example requires a browser that supports <a href="http://get.webgl.org/">WebGL</a>.
|
|
||||||
</div>
|
|
||||||
<div class="btn-group">
|
|
||||||
<button id="increase-brightness"><i class="icon-plus"></i></button>
|
|
||||||
<button id="reset-brightness">Brightness</button>
|
|
||||||
<button id="decrease-brightness"><i class="icon-minus"></i></button>
|
|
||||||
</div>
|
|
||||||
<div class="btn-group">
|
|
||||||
<button id="increase-contrast"><i class="icon-plus"></i></button>
|
|
||||||
<button id="reset-contrast">Contrast</button>
|
|
||||||
<button id="decrease-contrast"><i class="icon-minus"></i></button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
@@ -1,75 +0,0 @@
|
|||||||
goog.require('ol.Map');
|
|
||||||
goog.require('ol.View');
|
|
||||||
goog.require('ol.has');
|
|
||||||
goog.require('ol.layer.Tile');
|
|
||||||
goog.require('ol.source.MapQuest');
|
|
||||||
|
|
||||||
|
|
||||||
function setResetBrightnessButtonHTML() {
|
|
||||||
resetBrightness.innerHTML = 'Brightness (' +
|
|
||||||
layer.getBrightness().toFixed(3) + ')';
|
|
||||||
}
|
|
||||||
|
|
||||||
function setResetContrastButtonHTML() {
|
|
||||||
resetContrast.innerHTML = 'Contrast (' + layer.getContrast().toFixed(3) + ')';
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!ol.has.WEBGL) {
|
|
||||||
var info = document.getElementById('no-webgl');
|
|
||||||
/**
|
|
||||||
* display error message
|
|
||||||
*/
|
|
||||||
info.style.display = '';
|
|
||||||
} else {
|
|
||||||
var layer = new ol.layer.Tile({
|
|
||||||
source: new ol.source.MapQuest({layer: 'sat'})
|
|
||||||
});
|
|
||||||
|
|
||||||
var map = new ol.Map({
|
|
||||||
layers: [layer],
|
|
||||||
renderer: 'webgl',
|
|
||||||
target: 'map',
|
|
||||||
view: new ol.View({
|
|
||||||
center: [0, 0],
|
|
||||||
zoom: 2
|
|
||||||
})
|
|
||||||
});
|
|
||||||
|
|
||||||
var increaseBrightness = document.getElementById('increase-brightness');
|
|
||||||
var resetBrightness = document.getElementById('reset-brightness');
|
|
||||||
var decreaseBrightness = document.getElementById('decrease-brightness');
|
|
||||||
|
|
||||||
setResetBrightnessButtonHTML();
|
|
||||||
|
|
||||||
increaseBrightness.addEventListener('click', function() {
|
|
||||||
layer.setBrightness(Math.min(layer.getBrightness() + 0.125, 1));
|
|
||||||
setResetBrightnessButtonHTML();
|
|
||||||
}, false);
|
|
||||||
resetBrightness.addEventListener('click', function() {
|
|
||||||
layer.setBrightness(0);
|
|
||||||
setResetBrightnessButtonHTML();
|
|
||||||
}, false);
|
|
||||||
decreaseBrightness.addEventListener('click', function() {
|
|
||||||
layer.setBrightness(Math.max(layer.getBrightness() - 0.125, -1));
|
|
||||||
setResetBrightnessButtonHTML();
|
|
||||||
}, false);
|
|
||||||
|
|
||||||
var increaseContrast = document.getElementById('increase-contrast');
|
|
||||||
var resetContrast = document.getElementById('reset-contrast');
|
|
||||||
var decreaseContrast = document.getElementById('decrease-contrast');
|
|
||||||
|
|
||||||
setResetContrastButtonHTML();
|
|
||||||
|
|
||||||
increaseContrast.addEventListener('click', function() {
|
|
||||||
layer.setContrast(layer.getContrast() + 0.125);
|
|
||||||
setResetContrastButtonHTML();
|
|
||||||
}, false);
|
|
||||||
resetContrast.addEventListener('click', function() {
|
|
||||||
layer.setContrast(1);
|
|
||||||
setResetContrastButtonHTML();
|
|
||||||
}, false);
|
|
||||||
decreaseContrast.addEventListener('click', function() {
|
|
||||||
layer.setContrast(Math.max(layer.getContrast() - 0.125, 0));
|
|
||||||
setResetContrastButtonHTML();
|
|
||||||
}, false);
|
|
||||||
}
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
template: example.html
|
layout: example.html
|
||||||
title: Custom tooltips example
|
title: Custom tooltips example
|
||||||
shortdesc: This example shows how to customize the buttons tooltips with Bootstrap.
|
shortdesc: This example shows how to customize the buttons tooltips with Bootstrap.
|
||||||
docs: >
|
docs: >
|
||||||
|
|||||||
@@ -1,10 +1,13 @@
|
|||||||
---
|
---
|
||||||
template: example.html
|
layout: example.html
|
||||||
title: Canvas tiles example
|
title: Canvas tiles example
|
||||||
shortdesc: Renders tiles with coordinates for debugging.
|
shortdesc: Renders tiles with coordinates for debugging.
|
||||||
docs: >
|
docs: >
|
||||||
<p>The black grid tiles are generated on the client with an HTML5 canvas. Note that the tile coordinates are ol3 normalized tile coordinates (origin bottom left), not
|
The black grid tiles are generated on the client with an HTML5 canvas. The
|
||||||
OSM tile coordinates (origin top left).</p>
|
displayed tile coordinates are OpenLayers tile coordinates. These increase
|
||||||
|
from bottom to top, but standard XYZ tiling scheme coordinates increase from
|
||||||
|
top to bottom. To calculate the `y` for a standard XYZ tile coordinate, use
|
||||||
|
`-y - 1`.
|
||||||
tags: "layers, openstreetmap, canvas"
|
tags: "layers, openstreetmap, canvas"
|
||||||
---
|
---
|
||||||
<div class="row-fluid">
|
<div class="row-fluid">
|
||||||
|
|||||||
@@ -5,20 +5,18 @@ goog.require('ol.layer.Tile');
|
|||||||
goog.require('ol.proj');
|
goog.require('ol.proj');
|
||||||
goog.require('ol.source.OSM');
|
goog.require('ol.source.OSM');
|
||||||
goog.require('ol.source.TileDebug');
|
goog.require('ol.source.TileDebug');
|
||||||
goog.require('ol.tilegrid.XYZ');
|
|
||||||
|
|
||||||
|
|
||||||
|
var osmSource = new ol.source.OSM();
|
||||||
var map = new ol.Map({
|
var map = new ol.Map({
|
||||||
layers: [
|
layers: [
|
||||||
new ol.layer.Tile({
|
new ol.layer.Tile({
|
||||||
source: new ol.source.OSM()
|
source: osmSource
|
||||||
}),
|
}),
|
||||||
new ol.layer.Tile({
|
new ol.layer.Tile({
|
||||||
source: new ol.source.TileDebug({
|
source: new ol.source.TileDebug({
|
||||||
projection: 'EPSG:3857',
|
projection: 'EPSG:3857',
|
||||||
tileGrid: new ol.tilegrid.XYZ({
|
tileGrid: osmSource.getTileGrid()
|
||||||
maxZoom: 22
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
---
|
---
|
||||||
template: example.html
|
layout: example.html
|
||||||
title: Advanced View Positioning example
|
title: Advanced View Positioning example
|
||||||
shortdesc: This example demonstrates how a map's view can be adjusted so a geometry or coordinate is positioned at a specific pixel location.
|
shortdesc: This example demonstrates how a map's view can be adjusted so a geometry or coordinate is positioned at a specific pixel location.
|
||||||
docs: >
|
docs: >
|
||||||
This example demonstrates how a map's view can be
|
This example demonstrates how a map's view can be
|
||||||
adjusted so a geometry or coordinate is positioned at a specific
|
adjusted so a geometry or coordinate is positioned at a specific
|
||||||
pixel location. The map above has top, right, bottom, and left
|
pixel location. The map above has top, right, bottom, and left
|
||||||
padding applied inside the viewport. The view's <code>fitGeometry</code> method
|
padding applied inside the viewport. The view's <code>fit</code> method
|
||||||
is used to fit a geometry in the view with the same padding. The
|
is used to fit a geometry in the view with the same padding. The
|
||||||
view's <code>centerOn</code> method is used to position a coordinate (Lausanne)
|
view's <code>centerOn</code> method is used to position a coordinate (Lausanne)
|
||||||
at a specific pixel location (the center of the black box).
|
at a specific pixel location (the center of the black box).
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ zoomtoswitzerlandbest.addEventListener('click', function() {
|
|||||||
var feature = source.getFeatures()[0];
|
var feature = source.getFeatures()[0];
|
||||||
var polygon = /** @type {ol.geom.SimpleGeometry} */ (feature.getGeometry());
|
var polygon = /** @type {ol.geom.SimpleGeometry} */ (feature.getGeometry());
|
||||||
var size = /** @type {ol.Size} */ (map.getSize());
|
var size = /** @type {ol.Size} */ (map.getSize());
|
||||||
view.fitGeometry(
|
view.fit(
|
||||||
polygon,
|
polygon,
|
||||||
size,
|
size,
|
||||||
{
|
{
|
||||||
@@ -81,7 +81,7 @@ zoomtoswitzerlandconstrained.addEventListener('click', function() {
|
|||||||
var feature = source.getFeatures()[0];
|
var feature = source.getFeatures()[0];
|
||||||
var polygon = /** @type {ol.geom.SimpleGeometry} */ (feature.getGeometry());
|
var polygon = /** @type {ol.geom.SimpleGeometry} */ (feature.getGeometry());
|
||||||
var size = /** @type {ol.Size} */ (map.getSize());
|
var size = /** @type {ol.Size} */ (map.getSize());
|
||||||
view.fitGeometry(
|
view.fit(
|
||||||
polygon,
|
polygon,
|
||||||
size,
|
size,
|
||||||
{
|
{
|
||||||
@@ -96,7 +96,7 @@ zoomtoswitzerlandnearest.addEventListener('click', function() {
|
|||||||
var feature = source.getFeatures()[0];
|
var feature = source.getFeatures()[0];
|
||||||
var polygon = /** @type {ol.geom.SimpleGeometry} */ (feature.getGeometry());
|
var polygon = /** @type {ol.geom.SimpleGeometry} */ (feature.getGeometry());
|
||||||
var size = /** @type {ol.Size} */ (map.getSize());
|
var size = /** @type {ol.Size} */ (map.getSize());
|
||||||
view.fitGeometry(
|
view.fit(
|
||||||
polygon,
|
polygon,
|
||||||
size,
|
size,
|
||||||
{
|
{
|
||||||
@@ -111,7 +111,7 @@ zoomtolausanne.addEventListener('click', function() {
|
|||||||
var feature = source.getFeatures()[1];
|
var feature = source.getFeatures()[1];
|
||||||
var point = /** @type {ol.geom.SimpleGeometry} */ (feature.getGeometry());
|
var point = /** @type {ol.geom.SimpleGeometry} */ (feature.getGeometry());
|
||||||
var size = /** @type {ol.Size} */ (map.getSize());
|
var size = /** @type {ol.Size} */ (map.getSize());
|
||||||
view.fitGeometry(
|
view.fit(
|
||||||
point,
|
point,
|
||||||
size,
|
size,
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
template: example.html
|
layout: example.html
|
||||||
title: Clustering example
|
title: Clustering example
|
||||||
shortdesc: Example of using <code>ol.source.Cluster</code>.
|
shortdesc: Example of using <code>ol.source.Cluster</code>.
|
||||||
docs: >
|
docs: >
|
||||||
|
|||||||
5
examples/color-manipulation.css
Normal file
5
examples/color-manipulation.css
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
table.controls td {
|
||||||
|
text-align: center;
|
||||||
|
padding: 2px 5px;
|
||||||
|
min-width: 60px;
|
||||||
|
}
|
||||||
30
examples/color-manipulation.html
Normal file
30
examples/color-manipulation.html
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
---
|
||||||
|
layout: example.html
|
||||||
|
title: Manipulating colors with a raster source
|
||||||
|
shortdesc: Demonstrates color manipulation with a raster source.
|
||||||
|
docs: >
|
||||||
|
A raster source allows arbitrary manipulation of pixel values. In this example, RGB values on the input tile source are adjusted in a pixel-wise operation before being rendered with a second raster source. The raster operation takes pixels in in RGB space, converts them to HCL color space, adjusts the values based on the controls above, and then converts them back to RGB space for rendering.
|
||||||
|
tags: "color, hue, lightness, chroma"
|
||||||
|
---
|
||||||
|
<div class="row-fluid">
|
||||||
|
<div class="span12">
|
||||||
|
<div id="map" class="map"></div>
|
||||||
|
<table class="controls">
|
||||||
|
<tr>
|
||||||
|
<td>hue</td>
|
||||||
|
<td><span id="hueOut"></span>°</td>
|
||||||
|
<td><input id="hue" type="range" min="-180" max="180" value="0"/></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>chroma</td>
|
||||||
|
<td><span id="chromaOut"></span> %</td>
|
||||||
|
<td><input id="chroma" type="range" min="0" max="100" value="100"/></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>lightness</td>
|
||||||
|
<td><span id="lightnessOut"></span> %</td>
|
||||||
|
<td><input id="lightness" type="range" min="0" max="100" value="100"/></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
173
examples/color-manipulation.js
Normal file
173
examples/color-manipulation.js
Normal file
@@ -0,0 +1,173 @@
|
|||||||
|
// NOCOMPILE
|
||||||
|
goog.require('ol.Map');
|
||||||
|
goog.require('ol.View');
|
||||||
|
goog.require('ol.layer.Image');
|
||||||
|
goog.require('ol.source.Raster');
|
||||||
|
goog.require('ol.source.Stamen');
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Color manipulation functions below are adapted from
|
||||||
|
* https://github.com/d3/d3-color.
|
||||||
|
*/
|
||||||
|
var Xn = 0.950470;
|
||||||
|
var Yn = 1;
|
||||||
|
var Zn = 1.088830;
|
||||||
|
var t0 = 4 / 29;
|
||||||
|
var t1 = 6 / 29;
|
||||||
|
var t2 = 3 * t1 * t1;
|
||||||
|
var t3 = t1 * t1 * t1;
|
||||||
|
var twoPi = 2 * Math.PI;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert an RGB pixel into an HCL pixel.
|
||||||
|
* @param {ol.raster.Pixel} pixel A pixel in RGB space.
|
||||||
|
* @return {ol.raster.Pixel} A pixel in HCL space.
|
||||||
|
*/
|
||||||
|
function rgb2hcl(pixel) {
|
||||||
|
var red = rgb2xyz(pixel[0]);
|
||||||
|
var green = rgb2xyz(pixel[1]);
|
||||||
|
var blue = rgb2xyz(pixel[2]);
|
||||||
|
|
||||||
|
var x = xyz2lab(
|
||||||
|
(0.4124564 * red + 0.3575761 * green + 0.1804375 * blue) / Xn);
|
||||||
|
var y = xyz2lab(
|
||||||
|
(0.2126729 * red + 0.7151522 * green + 0.0721750 * blue) / Yn);
|
||||||
|
var z = xyz2lab(
|
||||||
|
(0.0193339 * red + 0.1191920 * green + 0.9503041 * blue) / Zn);
|
||||||
|
|
||||||
|
var l = 116 * y - 16;
|
||||||
|
var a = 500 * (x - y);
|
||||||
|
var b = 200 * (y - z);
|
||||||
|
|
||||||
|
var c = Math.sqrt(a * a + b * b);
|
||||||
|
var h = Math.atan2(b, a);
|
||||||
|
if (h < 0) {
|
||||||
|
h += twoPi;
|
||||||
|
}
|
||||||
|
|
||||||
|
pixel[0] = h;
|
||||||
|
pixel[1] = c;
|
||||||
|
pixel[2] = l;
|
||||||
|
|
||||||
|
return pixel;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert an HCL pixel into an RGB pixel.
|
||||||
|
* @param {ol.raster.Pixel} pixel A pixel in HCL space.
|
||||||
|
* @return {ol.raster.Pixel} A pixel in RGB space.
|
||||||
|
*/
|
||||||
|
function hcl2rgb(pixel) {
|
||||||
|
var h = pixel[0];
|
||||||
|
var c = pixel[1];
|
||||||
|
var l = pixel[2];
|
||||||
|
|
||||||
|
var a = Math.cos(h) * c;
|
||||||
|
var b = Math.sin(h) * c;
|
||||||
|
|
||||||
|
var y = (l + 16) / 116;
|
||||||
|
var x = isNaN(a) ? y : y + a / 500;
|
||||||
|
var z = isNaN(b) ? y : y - b / 200;
|
||||||
|
|
||||||
|
y = Yn * lab2xyz(y);
|
||||||
|
x = Xn * lab2xyz(x);
|
||||||
|
z = Zn * lab2xyz(z);
|
||||||
|
|
||||||
|
pixel[0] = xyz2rgb(3.2404542 * x - 1.5371385 * y - 0.4985314 * z);
|
||||||
|
pixel[1] = xyz2rgb(-0.9692660 * x + 1.8760108 * y + 0.0415560 * z);
|
||||||
|
pixel[2] = xyz2rgb(0.0556434 * x - 0.2040259 * y + 1.0572252 * z);
|
||||||
|
|
||||||
|
return pixel;
|
||||||
|
}
|
||||||
|
|
||||||
|
function xyz2lab(t) {
|
||||||
|
return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;
|
||||||
|
}
|
||||||
|
|
||||||
|
function lab2xyz(t) {
|
||||||
|
return t > t1 ? t * t * t : t2 * (t - t0);
|
||||||
|
}
|
||||||
|
|
||||||
|
function rgb2xyz(x) {
|
||||||
|
return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);
|
||||||
|
}
|
||||||
|
|
||||||
|
function xyz2rgb(x) {
|
||||||
|
return 255 * (x <= 0.0031308 ?
|
||||||
|
12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);
|
||||||
|
}
|
||||||
|
|
||||||
|
var raster = new ol.source.Raster({
|
||||||
|
sources: [new ol.source.Stamen({
|
||||||
|
layer: 'watercolor'
|
||||||
|
})],
|
||||||
|
operation: function(pixels, data) {
|
||||||
|
var hcl = rgb2hcl(pixels[0]);
|
||||||
|
|
||||||
|
var h = hcl[0] + Math.PI * data.hue / 180;
|
||||||
|
if (h < 0) {
|
||||||
|
h += twoPi;
|
||||||
|
} else if (h > twoPi) {
|
||||||
|
h -= twoPi;
|
||||||
|
}
|
||||||
|
hcl[0] = h;
|
||||||
|
|
||||||
|
hcl[1] *= (data.chroma / 100);
|
||||||
|
hcl[2] *= (data.lightness / 100);
|
||||||
|
|
||||||
|
return hcl2rgb(hcl);
|
||||||
|
},
|
||||||
|
lib: {
|
||||||
|
rgb2hcl: rgb2hcl,
|
||||||
|
hcl2rgb: hcl2rgb,
|
||||||
|
rgb2xyz: rgb2xyz,
|
||||||
|
lab2xyz: lab2xyz,
|
||||||
|
xyz2lab: xyz2lab,
|
||||||
|
xyz2rgb: xyz2rgb,
|
||||||
|
Xn: Xn,
|
||||||
|
Yn: Yn,
|
||||||
|
Zn: Zn,
|
||||||
|
t0: t0,
|
||||||
|
t1: t1,
|
||||||
|
t2: t2,
|
||||||
|
t3: t3,
|
||||||
|
twoPi: twoPi
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
raster.on('beforeoperations', function(event) {
|
||||||
|
var data = event.data;
|
||||||
|
for (var id in controls) {
|
||||||
|
data[id] = Number(controls[id].value);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
var map = new ol.Map({
|
||||||
|
layers: [
|
||||||
|
new ol.layer.Image({
|
||||||
|
source: raster
|
||||||
|
})
|
||||||
|
],
|
||||||
|
target: 'map',
|
||||||
|
view: new ol.View({
|
||||||
|
center: [0, 2500000],
|
||||||
|
zoom: 2,
|
||||||
|
maxZoom: 18
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
|
var controlIds = ['hue', 'chroma', 'lightness'];
|
||||||
|
var controls = {};
|
||||||
|
controlIds.forEach(function(id) {
|
||||||
|
var control = document.getElementById(id);
|
||||||
|
var output = document.getElementById(id + 'Out');
|
||||||
|
control.addEventListener('input', function() {
|
||||||
|
output.innerText = control.value;
|
||||||
|
raster.changed();
|
||||||
|
});
|
||||||
|
output.innerText = control.value;
|
||||||
|
controls[id] = control;
|
||||||
|
});
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
template: example.html
|
layout: example.html
|
||||||
title: Custom control example
|
title: Custom control example
|
||||||
shortdesc: Shows how to create custom controls.
|
shortdesc: Shows how to create custom controls.
|
||||||
docs: >
|
docs: >
|
||||||
|
|||||||
14
examples/custom-interactions.html
Normal file
14
examples/custom-interactions.html
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
---
|
||||||
|
layout: example.html
|
||||||
|
title: Custom interaction example
|
||||||
|
shortdesc: Example of a custom interaction.
|
||||||
|
docs: >
|
||||||
|
This example demonstrates creating a custom interaction by subclassing `ol.interaction.Pointer`.
|
||||||
|
Note that the built in interaction `ol.interaction.Translate` might be a better option for moving features.
|
||||||
|
tags: "drag, feature, vector, editing, custom, interaction"
|
||||||
|
---
|
||||||
|
<div class="row-fluid">
|
||||||
|
<div class="span12">
|
||||||
|
<div id="map" class="map"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
template: example.html
|
layout: example.html
|
||||||
title: d3 integration example
|
title: d3 integration example
|
||||||
shortdesc: Example of using ol3 and d3 together.
|
shortdesc: Example of using ol3 and d3 together.
|
||||||
docs: >
|
docs: >
|
||||||
|
|||||||
4139
examples/data/geojson/roads-seoul.geojson
Normal file
4139
examples/data/geojson/roads-seoul.geojson
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
template: example.html
|
layout: example.html
|
||||||
title: Device-Orientation example
|
title: Device-Orientation example
|
||||||
shortdesc: Listen to DeviceOrientation events.
|
shortdesc: Listen to DeviceOrientation events.
|
||||||
docs: >
|
docs: >
|
||||||
|
|||||||
@@ -1,11 +1,13 @@
|
|||||||
---
|
---
|
||||||
template: example.html
|
layout: example.html
|
||||||
title: Drag-and-Drop image vector example
|
title: Drag-and-Drop image vector example
|
||||||
shortdesc: Example of using the drag-and-drop interaction with a ol.source.ImageVector. Drag and drop GPX, GeoJSON, IGC, KML, or TopoJSON files on to the map. Each file is rendered to an image on the client.
|
shortdesc: Example of using the drag-and-drop interaction with a ol.source.ImageVector. Drag and drop GPX, GeoJSON, IGC, KML, or TopoJSON files on to the map. Each file is rendered to an image on the client.
|
||||||
docs: >
|
docs: >
|
||||||
Example of using the drag-and-drop interaction with a ol.source.ImageVector. Drag and drop GPX, GeoJSON, IGC, KML, or TopoJSON files on to the map. Each file is rendered to
|
Example of using the drag-and-drop interaction with a ol.source.ImageVector. Drag and drop GPX, GeoJSON, IGC, KML, or TopoJSON files on to the map. Each file is rendered to
|
||||||
an image on the client.
|
an image on the client.
|
||||||
tags: "drag-and-drop-image-vector, gpx, geojson, igc, kml, topojson, vector, image"
|
tags: "drag-and-drop-image-vector, gpx, geojson, igc, kml, topojson, vector, image"
|
||||||
|
cloak:
|
||||||
|
Ak-dzM4wZjSqTlzveKz5u0d4IQ4bRzVI309GxmkgSVr1ewS6iPSrOvOKhA-CJlm3: Your Bing Maps Key from http://bingmapsportal.com/ here
|
||||||
---
|
---
|
||||||
<div class="row-fluid">
|
<div class="row-fluid">
|
||||||
<div class="span12">
|
<div class="span12">
|
||||||
|
|||||||
@@ -122,7 +122,7 @@ dragAndDropInteraction.on('addfeatures', function(event) {
|
|||||||
style: styleFunction
|
style: styleFunction
|
||||||
})
|
})
|
||||||
}));
|
}));
|
||||||
map.getView().fitExtent(
|
map.getView().fit(
|
||||||
vectorSource.getExtent(), /** @type {ol.Size} */ (map.getSize()));
|
vectorSource.getExtent(), /** @type {ol.Size} */ (map.getSize()));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,13 @@
|
|||||||
---
|
---
|
||||||
template: example.html
|
layout: example.html
|
||||||
title: Drag-and-Drop example
|
title: Drag-and-Drop example
|
||||||
shortdesc: Example of using the drag-and-drop interaction. Drag and drop GPX, GeoJSON, IGC, KML, or TopoJSON files on to the map. There is no projection transform support, so this will only work with data in EPSG:4326 and EPSG:3857.
|
shortdesc: Example of using the drag-and-drop interaction. Drag and drop GPX, GeoJSON, IGC, KML, or TopoJSON files on to the map. There is no projection transform support, so this will only work with data in EPSG:4326 and EPSG:3857.
|
||||||
docs: >
|
docs: >
|
||||||
Example of using the drag-and-drop interaction. Drag and drop GPX, GeoJSON, IGC, KML, or TopoJSON files on to the map. There is no projection transform support, so this will
|
Example of using the drag-and-drop interaction. Drag and drop GPX, GeoJSON, IGC, KML, or TopoJSON files on to the map. There is no projection transform support, so this will
|
||||||
only work with data in EPSG:4326 and EPSG:3857.
|
only work with data in EPSG:4326 and EPSG:3857.
|
||||||
tags: "drag-and-drop, gpx, geojson, igc, kml, topojson"
|
tags: "drag-and-drop, gpx, geojson, igc, kml, topojson"
|
||||||
|
cloak:
|
||||||
|
Ak-dzM4wZjSqTlzveKz5u0d4IQ4bRzVI309GxmkgSVr1ewS6iPSrOvOKhA-CJlm3: Your Bing Maps Key from http://bingmapsportal.com/ here
|
||||||
---
|
---
|
||||||
<div class="row-fluid">
|
<div class="row-fluid">
|
||||||
<div class="span12">
|
<div class="span12">
|
||||||
|
|||||||
@@ -118,7 +118,7 @@ dragAndDropInteraction.on('addfeatures', function(event) {
|
|||||||
source: vectorSource,
|
source: vectorSource,
|
||||||
style: styleFunction
|
style: styleFunction
|
||||||
}));
|
}));
|
||||||
map.getView().fitExtent(
|
map.getView().fit(
|
||||||
vectorSource.getExtent(), /** @type {ol.Size} */ (map.getSize()));
|
vectorSource.getExtent(), /** @type {ol.Size} */ (map.getSize()));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -1,13 +0,0 @@
|
|||||||
---
|
|
||||||
template: example.html
|
|
||||||
title: Drag features example
|
|
||||||
shortdesc: Example of a drag features interaction.
|
|
||||||
docs: >
|
|
||||||
The drag features interaction can be used to drag features to a new position.
|
|
||||||
tags: "drag, feature, vector, editing"
|
|
||||||
---
|
|
||||||
<div class="row-fluid">
|
|
||||||
<div class="span12">
|
|
||||||
<div id="map" class="map"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
template: example.html
|
layout: example.html
|
||||||
title: Drag rotate and zoom example
|
title: Drag rotate and zoom example
|
||||||
shortdesc: A single interaction to drag, rotate, and zoom.
|
shortdesc: A single interaction to drag, rotate, and zoom.
|
||||||
docs: >
|
docs: >
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
template: example.html
|
layout: example.html
|
||||||
title: Draw and modify features example
|
title: Draw and modify features example
|
||||||
shortdesc: Example of using the ol.interaction.Draw interaction together with the ol.interaction.Modify interaction.
|
shortdesc: Example of using the ol.interaction.Draw interaction together with the ol.interaction.Modify interaction.
|
||||||
docs: >
|
docs: >
|
||||||
|
|||||||
@@ -1,11 +1,13 @@
|
|||||||
goog.require('ol.FeatureOverlay');
|
goog.require('ol.Collection');
|
||||||
goog.require('ol.Map');
|
goog.require('ol.Map');
|
||||||
goog.require('ol.View');
|
goog.require('ol.View');
|
||||||
goog.require('ol.events.condition');
|
goog.require('ol.events.condition');
|
||||||
goog.require('ol.interaction.Draw');
|
goog.require('ol.interaction.Draw');
|
||||||
goog.require('ol.interaction.Modify');
|
goog.require('ol.interaction.Modify');
|
||||||
goog.require('ol.layer.Tile');
|
goog.require('ol.layer.Tile');
|
||||||
|
goog.require('ol.layer.Vector');
|
||||||
goog.require('ol.source.MapQuest');
|
goog.require('ol.source.MapQuest');
|
||||||
|
goog.require('ol.source.Vector');
|
||||||
goog.require('ol.style.Circle');
|
goog.require('ol.style.Circle');
|
||||||
goog.require('ol.style.Fill');
|
goog.require('ol.style.Fill');
|
||||||
goog.require('ol.style.Stroke');
|
goog.require('ol.style.Stroke');
|
||||||
@@ -24,11 +26,9 @@ var map = new ol.Map({
|
|||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
|
||||||
// The features are not added to a regular vector layer/source,
|
var features = new ol.Collection();
|
||||||
// but to a feature overlay which holds a collection of features.
|
var featureOverlay = new ol.layer.Vector({
|
||||||
// This collection is passed to the modify and also the draw
|
source: new ol.source.Vector({features: features}),
|
||||||
// interaction, so that both can add or modify features.
|
|
||||||
var featureOverlay = new ol.FeatureOverlay({
|
|
||||||
style: new ol.style.Style({
|
style: new ol.style.Style({
|
||||||
fill: new ol.style.Fill({
|
fill: new ol.style.Fill({
|
||||||
color: 'rgba(255, 255, 255, 0.2)'
|
color: 'rgba(255, 255, 255, 0.2)'
|
||||||
@@ -48,7 +48,7 @@ var featureOverlay = new ol.FeatureOverlay({
|
|||||||
featureOverlay.setMap(map);
|
featureOverlay.setMap(map);
|
||||||
|
|
||||||
var modify = new ol.interaction.Modify({
|
var modify = new ol.interaction.Modify({
|
||||||
features: featureOverlay.getFeatures(),
|
features: features,
|
||||||
// the SHIFT key must be pressed to delete vertices, so
|
// the SHIFT key must be pressed to delete vertices, so
|
||||||
// that new vertices can be drawn at the same position
|
// that new vertices can be drawn at the same position
|
||||||
// of existing vertices
|
// of existing vertices
|
||||||
@@ -62,7 +62,7 @@ map.addInteraction(modify);
|
|||||||
var draw; // global so we can remove it later
|
var draw; // global so we can remove it later
|
||||||
function addInteraction() {
|
function addInteraction() {
|
||||||
draw = new ol.interaction.Draw({
|
draw = new ol.interaction.Draw({
|
||||||
features: featureOverlay.getFeatures(),
|
features: features,
|
||||||
type: /** @type {ol.geom.GeometryType} */ (typeSelect.value)
|
type: /** @type {ol.geom.GeometryType} */ (typeSelect.value)
|
||||||
});
|
});
|
||||||
map.addInteraction(draw);
|
map.addInteraction(draw);
|
||||||
|
|||||||
@@ -1,12 +1,15 @@
|
|||||||
---
|
---
|
||||||
template: example.html
|
layout: example.html
|
||||||
title: Draw features example
|
title: Draw features example
|
||||||
shortdesc: Example of using the ol.interaction.Draw interaction.
|
shortdesc: Example of using the ol.interaction.Draw interaction.
|
||||||
docs: >
|
docs: >
|
||||||
Example of using the Draw interaction. Select a geometry type from the
|
Example of using the Draw interaction. Select a geometry type from the
|
||||||
dropdown above to start drawing. To finish drawing, click the last
|
dropdown above to start drawing. To finish drawing, click the last
|
||||||
point. To activate freehand drawing for lines and polygons, hold the `Shift`
|
point. To activate freehand drawing for lines and polygons, hold the `Shift`
|
||||||
key.
|
key. Square drawing is achieved by using Circle mode with a `geometryFunction`
|
||||||
|
that creates a 4-sided regular polygon instead of a circle. Box drawing uses a
|
||||||
|
custom `geometryFunction` that takes start and end point of a line with 2
|
||||||
|
points and creates a rectangular box.
|
||||||
tags: "draw, edit, freehand, vector"
|
tags: "draw, edit, freehand, vector"
|
||||||
---
|
---
|
||||||
<div class="row-fluid">
|
<div class="row-fluid">
|
||||||
@@ -20,6 +23,8 @@ tags: "draw, edit, freehand, vector"
|
|||||||
<option value="LineString">LineString</option>
|
<option value="LineString">LineString</option>
|
||||||
<option value="Polygon">Polygon</option>
|
<option value="Polygon">Polygon</option>
|
||||||
<option value="Circle">Circle</option>
|
<option value="Circle">Circle</option>
|
||||||
|
<option value="Square">Square</option>
|
||||||
|
<option value="Box">Box</option>
|
||||||
</select>
|
</select>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
goog.require('ol.Map');
|
goog.require('ol.Map');
|
||||||
goog.require('ol.View');
|
goog.require('ol.View');
|
||||||
|
goog.require('ol.geom.Polygon');
|
||||||
goog.require('ol.interaction.Draw');
|
goog.require('ol.interaction.Draw');
|
||||||
goog.require('ol.layer.Tile');
|
goog.require('ol.layer.Tile');
|
||||||
goog.require('ol.layer.Vector');
|
goog.require('ol.layer.Vector');
|
||||||
@@ -51,9 +52,30 @@ var draw; // global so we can remove it later
|
|||||||
function addInteraction() {
|
function addInteraction() {
|
||||||
var value = typeSelect.value;
|
var value = typeSelect.value;
|
||||||
if (value !== 'None') {
|
if (value !== 'None') {
|
||||||
|
var geometryFunction, maxPoints;
|
||||||
|
if (value === 'Square') {
|
||||||
|
value = 'Circle';
|
||||||
|
geometryFunction = ol.interaction.Draw.createRegularPolygon(4);
|
||||||
|
} else if (value === 'Box') {
|
||||||
|
value = 'LineString';
|
||||||
|
maxPoints = 2;
|
||||||
|
geometryFunction = function(coordinates, geometry) {
|
||||||
|
if (!geometry) {
|
||||||
|
geometry = new ol.geom.Polygon(null);
|
||||||
|
}
|
||||||
|
var start = coordinates[0];
|
||||||
|
var end = coordinates[1];
|
||||||
|
geometry.setCoordinates([
|
||||||
|
[start, [start[0], end[1]], end, [end[0], start[1]], start]
|
||||||
|
]);
|
||||||
|
return geometry;
|
||||||
|
};
|
||||||
|
}
|
||||||
draw = new ol.interaction.Draw({
|
draw = new ol.interaction.Draw({
|
||||||
source: source,
|
source: source,
|
||||||
type: /** @type {ol.geom.GeometryType} */ (value)
|
type: /** @type {ol.geom.GeometryType} */ (value),
|
||||||
|
geometryFunction: geometryFunction,
|
||||||
|
maxPoints: maxPoints
|
||||||
});
|
});
|
||||||
map.addInteraction(draw);
|
map.addInteraction(draw);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
template: example.html
|
layout: example.html
|
||||||
title: Dynamic data example
|
title: Dynamic data example
|
||||||
shortdesc: Example of dynamic data.
|
shortdesc: Example of dynamic data.
|
||||||
docs: >
|
docs: >
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
template: example.html
|
layout: example.html
|
||||||
title: Earthquake Clusters
|
title: Earthquake Clusters
|
||||||
shortdesc: Demonstrates the use of style geometries to render source features of a cluster.
|
shortdesc: Demonstrates the use of style geometries to render source features of a cluster.
|
||||||
docs: >
|
docs: >
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
template: example.html
|
layout: example.html
|
||||||
title: EPSG:4326 example
|
title: EPSG:4326 example
|
||||||
shortdesc: Example of a map in EPSG:4326.
|
shortdesc: Example of a map in EPSG:4326.
|
||||||
docs: >
|
docs: >
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
template: example.html
|
layout: example.html
|
||||||
title: Export map example
|
title: Export map example
|
||||||
shortdesc: Example of exporting a map as a PNG image.
|
shortdesc: Example of exporting a map as a PNG image.
|
||||||
docs: >
|
docs: >
|
||||||
@@ -9,10 +9,10 @@ tags: "export, png, openstreetmap"
|
|||||||
<div class="row-fluid">
|
<div class="row-fluid">
|
||||||
<div class="span12">
|
<div class="span12">
|
||||||
<div id="map" class="map"></div>
|
<div id="map" class="map"></div>
|
||||||
<div id="no-download" class="alert alert-error" style="display: none">
|
<div id="no-download" class="alert alert-danger" style="display: none">
|
||||||
This example requires a browser that supports the
|
This example requires a browser that supports the
|
||||||
<a href="http://caniuse.com/#feat=download">link download</a> attribute.
|
<a href="http://caniuse.com/#feat=download">link download</a> attribute.
|
||||||
</div>
|
</div>
|
||||||
<a id="export-png" class="btn" download="map.png"><i class="icon-download"></i> Export PNG</a>
|
<a id="export-png" class="btn btn-default" download="map.png"><i class="fa fa-download"></i> Export PNG</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
15
examples/feature-animation.html
Normal file
15
examples/feature-animation.html
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
---
|
||||||
|
layout: example.html
|
||||||
|
title: Feature animation example
|
||||||
|
shortdesc: Demonstrates how to animate features.
|
||||||
|
docs: >
|
||||||
|
This example shows how to use <b>postcompose</b> and <b>vectorContext</b> to
|
||||||
|
animate features. Here we choose to do a flash animation each time a feature
|
||||||
|
is added to the layer.
|
||||||
|
tags: "animation, vector, feature, flash"
|
||||||
|
---
|
||||||
|
<div class="row">
|
||||||
|
<div class="span8">
|
||||||
|
<div id="map" class="map"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
95
examples/feature-animation.js
Normal file
95
examples/feature-animation.js
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
goog.require('ol.Feature');
|
||||||
|
goog.require('ol.Map');
|
||||||
|
goog.require('ol.Observable');
|
||||||
|
goog.require('ol.View');
|
||||||
|
goog.require('ol.control');
|
||||||
|
goog.require('ol.easing');
|
||||||
|
goog.require('ol.geom.Point');
|
||||||
|
goog.require('ol.layer.Tile');
|
||||||
|
goog.require('ol.layer.Vector');
|
||||||
|
goog.require('ol.proj');
|
||||||
|
goog.require('ol.source.OSM');
|
||||||
|
goog.require('ol.source.Vector');
|
||||||
|
goog.require('ol.style.Circle');
|
||||||
|
goog.require('ol.style.Stroke');
|
||||||
|
|
||||||
|
|
||||||
|
var map = new ol.Map({
|
||||||
|
layers: [
|
||||||
|
new ol.layer.Tile({
|
||||||
|
source: new ol.source.OSM({
|
||||||
|
wrapX: false
|
||||||
|
})
|
||||||
|
})
|
||||||
|
],
|
||||||
|
controls: ol.control.defaults({
|
||||||
|
attributionOptions: /** @type {olx.control.AttributionOptions} */ ({
|
||||||
|
collapsible: false
|
||||||
|
})
|
||||||
|
}),
|
||||||
|
renderer: common.getRendererFromQueryString(),
|
||||||
|
target: 'map',
|
||||||
|
view: new ol.View({
|
||||||
|
center: [0, 0],
|
||||||
|
zoom: 1
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
|
var source = new ol.source.Vector({
|
||||||
|
wrapX: false
|
||||||
|
});
|
||||||
|
var vector = new ol.layer.Vector({
|
||||||
|
source: source
|
||||||
|
});
|
||||||
|
map.addLayer(vector);
|
||||||
|
|
||||||
|
function addRandomFeature() {
|
||||||
|
var x = Math.random() * 360 - 180;
|
||||||
|
var y = Math.random() * 180 - 90;
|
||||||
|
var geom = new ol.geom.Point(ol.proj.transform([x, y],
|
||||||
|
'EPSG:4326', 'EPSG:3857'));
|
||||||
|
var feature = new ol.Feature(geom);
|
||||||
|
source.addFeature(feature);
|
||||||
|
}
|
||||||
|
|
||||||
|
var duration = 3000;
|
||||||
|
function flash(feature) {
|
||||||
|
var start = new Date().getTime();
|
||||||
|
var listenerKey;
|
||||||
|
|
||||||
|
function animate(event) {
|
||||||
|
var vectorContext = event.vectorContext;
|
||||||
|
var frameState = event.frameState;
|
||||||
|
var flashGeom = feature.getGeometry().clone();
|
||||||
|
var elapsed = frameState.time - start;
|
||||||
|
var elapsedRatio = elapsed / duration;
|
||||||
|
// radius will be 5 at start and 30 at end.
|
||||||
|
var radius = ol.easing.easeOut(elapsedRatio) * 25 + 5;
|
||||||
|
var opacity = ol.easing.easeOut(1 - elapsedRatio);
|
||||||
|
|
||||||
|
var flashStyle = new ol.style.Circle({
|
||||||
|
radius: radius,
|
||||||
|
snapToPixel: false,
|
||||||
|
stroke: new ol.style.Stroke({
|
||||||
|
color: 'rgba(255, 0, 0, ' + opacity + ')',
|
||||||
|
width: 1
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
|
vectorContext.setImageStyle(flashStyle);
|
||||||
|
vectorContext.drawPointGeometry(flashGeom, null);
|
||||||
|
if (elapsed > duration) {
|
||||||
|
ol.Observable.unByKey(listenerKey);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// tell OL3 to continue postcompose animation
|
||||||
|
frameState.animate = true;
|
||||||
|
}
|
||||||
|
listenerKey = map.on('postcompose', animate);
|
||||||
|
}
|
||||||
|
|
||||||
|
source.on('addfeature', function(e) {
|
||||||
|
flash(e.feature);
|
||||||
|
});
|
||||||
|
|
||||||
|
window.setInterval(addRandomFeature, 1000);
|
||||||
24
examples/feature-move-animation.html
Normal file
24
examples/feature-move-animation.html
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
---
|
||||||
|
layout: example.html
|
||||||
|
title: Animate a feature movement
|
||||||
|
shortdesc: Demonstrates how to move a feature along a line.
|
||||||
|
docs: >
|
||||||
|
This example shows how to use <b>postcompose</b> and <b>vectorContext</b> to
|
||||||
|
animate a (marker) feature along a line. In this example an encoded polyline
|
||||||
|
is being used.
|
||||||
|
tags: "animation, feature, postcompose, polyline"
|
||||||
|
---
|
||||||
|
<div class="row-fluid">
|
||||||
|
<div class="span12">
|
||||||
|
<div id="map" class="map"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row-fluid">
|
||||||
|
<div class="span12">
|
||||||
|
<label for="speed">
|
||||||
|
speed:
|
||||||
|
<input id="speed" type="range" min="10" max="999" step="10" value="60">
|
||||||
|
</label>
|
||||||
|
<button id="start-animation">Start Animation</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
205
examples/feature-move-animation.js
Normal file
205
examples/feature-move-animation.js
Normal file
@@ -0,0 +1,205 @@
|
|||||||
|
goog.require('ol.Feature');
|
||||||
|
goog.require('ol.Map');
|
||||||
|
goog.require('ol.View');
|
||||||
|
goog.require('ol.format.Polyline');
|
||||||
|
goog.require('ol.geom.Point');
|
||||||
|
goog.require('ol.layer.Tile');
|
||||||
|
goog.require('ol.layer.Vector');
|
||||||
|
goog.require('ol.source.BingMaps');
|
||||||
|
goog.require('ol.source.Vector');
|
||||||
|
goog.require('ol.style.Circle');
|
||||||
|
goog.require('ol.style.Fill');
|
||||||
|
goog.require('ol.style.Icon');
|
||||||
|
goog.require('ol.style.Stroke');
|
||||||
|
goog.require('ol.style.Style');
|
||||||
|
|
||||||
|
// This long string is placed here due to jsFiddle limitations.
|
||||||
|
// It is usually loaded with AJAX.
|
||||||
|
var polyline = [
|
||||||
|
'hldhx@lnau`BCG_EaC??cFjAwDjF??uBlKMd@}@z@??aC^yk@z_@se@b[wFdE??wFfE}N',
|
||||||
|
'fIoGxB_I\\gG}@eHoCyTmPqGaBaHOoD\\??yVrGotA|N??o[N_STiwAtEmHGeHcAkiA}^',
|
||||||
|
'aMyBiHOkFNoI`CcVvM??gG^gF_@iJwC??eCcA]OoL}DwFyCaCgCcCwDcGwHsSoX??wI_E',
|
||||||
|
'kUFmq@hBiOqBgTwS??iYse@gYq\\cp@ce@{vA}s@csJqaE}{@iRaqE{lBeRoIwd@_T{]_',
|
||||||
|
'Ngn@{PmhEwaA{SeF_u@kQuyAw]wQeEgtAsZ}LiCarAkVwI}D??_}RcjEinPspDwSqCgs@',
|
||||||
|
'sPua@_OkXaMeT_Nwk@ob@gV}TiYs[uTwXoNmT{Uyb@wNg]{Nqa@oDgNeJu_@_G}YsFw]k',
|
||||||
|
'DuZyDmm@i_@uyIJe~@jCg|@nGiv@zUi_BfNqaAvIow@dEed@dCcf@r@qz@Egs@{Acu@mC',
|
||||||
|
'um@yIey@gGig@cK_m@aSku@qRil@we@{mAeTej@}Tkz@cLgr@aHko@qOmcEaJw~C{w@ka',
|
||||||
|
'i@qBchBq@kmBS{kDnBscBnFu_Dbc@_~QHeU`IuyDrC_}@bByp@fCyoA?qMbD}{AIkeAgB',
|
||||||
|
'k_A_A{UsDke@gFej@qH{o@qGgb@qH{`@mMgm@uQus@kL{_@yOmd@ymBgwE}x@ouBwtA__',
|
||||||
|
'DuhEgaKuWct@gp@cnBii@mlBa_@}|Asj@qrCg^eaC}L{dAaJ_aAiOyjByH{nAuYu`GsAw',
|
||||||
|
'Xyn@ywMyOyqD{_@cfIcDe}@y@aeBJmwA`CkiAbFkhBlTgdDdPyiB`W}xDnSa}DbJyhCrX',
|
||||||
|
'itAhT}x@bE}Z_@qW_Kwv@qKaaAiBgXvIm}A~JovAxCqW~WanB`XewBbK{_A`K}fBvAmi@',
|
||||||
|
'xBycBeCauBoF}}@qJioAww@gjHaPopA_NurAyJku@uGmi@cDs[eRaiBkQstAsQkcByNma',
|
||||||
|
'CsK_uBcJgbEw@gkB_@ypEqDoqSm@eZcDwjBoGw`BoMegBaU_`Ce_@_uBqb@ytBwkFqiT_',
|
||||||
|
'fAqfEwe@mfCka@_eC_UmlB}MmaBeWkkDeHwqAoX}~DcBsZmLcxBqOwqE_DkyAuJmrJ\\o',
|
||||||
|
'~CfIewG|YibQxBssB?es@qGciA}RorAoVajA_nAodD{[y`AgPqp@mKwr@ms@umEaW{dAm',
|
||||||
|
'b@umAw|@ojBwzDaaJsmBwbEgdCsrFqhAihDquAi`Fux@}_Dui@_eB_u@guCuyAuiHukA_',
|
||||||
|
'lKszAu|OmaA{wKm}@clHs_A_rEahCssKo\\sgBsSglAqk@yvDcS_wAyTwpBmPc|BwZknF',
|
||||||
|
'oFscB_GsaDiZmyMyLgtHgQonHqT{hKaPg}Dqq@m~Hym@c`EuiBudIabB{hF{pWifx@snA',
|
||||||
|
'w`GkFyVqf@y~BkoAi}Lel@wtc@}`@oaXi_C}pZsi@eqGsSuqJ|Lqeb@e]kgPcaAu}SkDw',
|
||||||
|
'zGhn@gjYh\\qlNZovJieBqja@ed@siO{[ol\\kCmjMe\\isHorCmec@uLebB}EqiBaCg}',
|
||||||
|
'@m@qwHrT_vFps@kkI`uAszIrpHuzYxx@e{Crw@kpDhN{wBtQarDy@knFgP_yCu\\wyCwy',
|
||||||
|
'A{kHo~@omEoYmoDaEcPiuAosDagD}rO{{AsyEihCayFilLaiUqm@_bAumFo}DgqA_uByi',
|
||||||
|
'@swC~AkzDlhA}xEvcBa}Cxk@ql@`rAo|@~bBq{@``Bye@djDww@z_C_cAtn@ye@nfC_eC',
|
||||||
|
'|gGahH~s@w}@``Fi~FpnAooC|u@wlEaEedRlYkrPvKerBfYs}Arg@m}AtrCkzElw@gjBb',
|
||||||
|
'h@woBhR{gCwGkgCc[wtCuOapAcFoh@uBy[yBgr@c@iq@o@wvEv@sp@`FajBfCaq@fIipA',
|
||||||
|
'dy@ewJlUc`ExGuaBdEmbBpBssArAuqBBg}@s@g{AkB{bBif@_bYmC}r@kDgm@sPq_BuJ_',
|
||||||
|
's@{X_{AsK_d@eM{d@wVgx@oWcu@??aDmOkNia@wFoSmDyMyCkPiBePwAob@XcQ|@oNdCo',
|
||||||
|
'SfFwXhEmOnLi\\lbAulB`X_d@|k@au@bc@oc@bqC}{BhwDgcD`l@ed@??bL{G|a@eTje@',
|
||||||
|
'oS~]cLr~Bgh@|b@}Jv}EieAlv@sPluD{z@nzA_]`|KchCtd@sPvb@wSb{@ko@f`RooQ~e',
|
||||||
|
'[upZbuIolI|gFafFzu@iq@nMmJ|OeJn^{Qjh@yQhc@uJ~j@iGdd@kAp~BkBxO{@|QsAfY',
|
||||||
|
'gEtYiGd]}Jpd@wRhVoNzNeK`j@ce@vgK}cJnSoSzQkVvUm^rSgc@`Uql@xIq\\vIgg@~k',
|
||||||
|
'Dyq[nIir@jNoq@xNwc@fYik@tk@su@neB}uBhqEesFjoGeyHtCoD|D}Ed|@ctAbIuOzqB',
|
||||||
|
'_}D~NgY`\\um@v[gm@v{Cw`G`w@o{AdjAwzBh{C}`Gpp@ypAxn@}mAfz@{bBbNia@??jI',
|
||||||
|
'ab@`CuOlC}YnAcV`@_^m@aeB}@yk@YuTuBg^uCkZiGk\\yGeY}Lu_@oOsZiTe[uWi[sl@',
|
||||||
|
'mo@soAauAsrBgzBqgAglAyd@ig@asAcyAklA}qAwHkGi{@s~@goAmsAyDeEirB_{B}IsJ',
|
||||||
|
'uEeFymAssAkdAmhAyTcVkFeEoKiH}l@kp@wg@sj@ku@ey@uh@kj@}EsFmG}Jk^_r@_f@m',
|
||||||
|
'~@ym@yjA??a@cFd@kBrCgDbAUnAcBhAyAdk@et@??kF}D??OL'
|
||||||
|
].join('');
|
||||||
|
|
||||||
|
var route = /** @type {ol.geom.LineString} */ (new ol.format.Polyline({
|
||||||
|
factor: 1e6
|
||||||
|
}).readGeometry(polyline, {
|
||||||
|
dataProjection: 'EPSG:4326',
|
||||||
|
featureProjection: 'EPSG:3857'
|
||||||
|
}));
|
||||||
|
|
||||||
|
var routeCoords = route.getCoordinates();
|
||||||
|
var routeLength = routeCoords.length;
|
||||||
|
|
||||||
|
var routeFeature = new ol.Feature({
|
||||||
|
type: 'route',
|
||||||
|
geometry: route
|
||||||
|
});
|
||||||
|
var geoMarker = new ol.Feature({
|
||||||
|
type: 'geoMarker',
|
||||||
|
geometry: new ol.geom.Point(routeCoords[0])
|
||||||
|
});
|
||||||
|
var startMarker = new ol.Feature({
|
||||||
|
type: 'icon',
|
||||||
|
geometry: new ol.geom.Point(routeCoords[0])
|
||||||
|
});
|
||||||
|
var endMarker = new ol.Feature({
|
||||||
|
type: 'icon',
|
||||||
|
geometry: new ol.geom.Point(routeCoords[routeLength - 1])
|
||||||
|
});
|
||||||
|
|
||||||
|
var styles = {
|
||||||
|
'route': new ol.style.Style({
|
||||||
|
stroke: new ol.style.Stroke({
|
||||||
|
width: 6, color: [237, 212, 0, 0.8]
|
||||||
|
})
|
||||||
|
}),
|
||||||
|
'icon': new ol.style.Style({
|
||||||
|
image: new ol.style.Icon({
|
||||||
|
anchor: [0.5, 1],
|
||||||
|
src: 'data/icon.png'
|
||||||
|
})
|
||||||
|
}),
|
||||||
|
'geoMarker': new ol.style.Style({
|
||||||
|
image: new ol.style.Circle({
|
||||||
|
radius: 7,
|
||||||
|
snapToPixel: false,
|
||||||
|
fill: new ol.style.Fill({color: 'black'}),
|
||||||
|
stroke: new ol.style.Stroke({
|
||||||
|
color: 'white', width: 2
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
};
|
||||||
|
|
||||||
|
var vectorLayer = new ol.layer.Vector({
|
||||||
|
source: new ol.source.Vector({
|
||||||
|
features: [routeFeature, geoMarker, startMarker, endMarker]
|
||||||
|
}),
|
||||||
|
style: function(feature, resolution) {
|
||||||
|
// hide geoMarker if animation is active
|
||||||
|
if (animating && feature.get('type') === 'geoMarker') {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
return [styles[feature.get('type')]];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
var center = [-5639523.95, -3501274.52];
|
||||||
|
var map = new ol.Map({
|
||||||
|
target: document.getElementById('map'),
|
||||||
|
loadTilesWhileAnimating: true,
|
||||||
|
view: new ol.View({
|
||||||
|
center: center,
|
||||||
|
zoom: 10,
|
||||||
|
minZoom: 2,
|
||||||
|
maxZoom: 19
|
||||||
|
}),
|
||||||
|
layers: [
|
||||||
|
new ol.layer.Tile({
|
||||||
|
source: new ol.source.BingMaps({
|
||||||
|
imagerySet: 'AerialWithLabels',
|
||||||
|
key: 'Ak-dzM4wZjSqTlzveKz5u0d4IQ4bRzVI309GxmkgSVr1ewS6iPSrOvOKhA-CJlm3'
|
||||||
|
})
|
||||||
|
}),
|
||||||
|
vectorLayer
|
||||||
|
]
|
||||||
|
});
|
||||||
|
|
||||||
|
var moveFeature = function(event) {
|
||||||
|
var vectorContext = event.vectorContext;
|
||||||
|
var frameState = event.frameState;
|
||||||
|
|
||||||
|
if (animating) {
|
||||||
|
var elapsedTime = frameState.time - now;
|
||||||
|
// here the trick to increase speed is to jump some indexes
|
||||||
|
// on lineString coordinates
|
||||||
|
var index = Math.round(speed * elapsedTime / 1000);
|
||||||
|
|
||||||
|
if (index >= routeLength) {
|
||||||
|
stopAnimation(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var currentPoint = new ol.geom.Point(routeCoords[index]);
|
||||||
|
var feature = new ol.Feature(currentPoint);
|
||||||
|
vectorContext.drawFeature(feature, styles.geoMarker);
|
||||||
|
}
|
||||||
|
// tell OL3 to continue the postcompose animation
|
||||||
|
map.render();
|
||||||
|
};
|
||||||
|
|
||||||
|
function startAnimation() {
|
||||||
|
if (animating) {
|
||||||
|
stopAnimation(false);
|
||||||
|
} else {
|
||||||
|
animating = true;
|
||||||
|
now = new Date().getTime();
|
||||||
|
speed = speedInput.value;
|
||||||
|
startButton.textContent = 'Cancel Animation';
|
||||||
|
// hide geoMarker
|
||||||
|
geoMarker.setStyle(null);
|
||||||
|
// just in case you pan somewhere else
|
||||||
|
map.getView().setCenter(center);
|
||||||
|
map.on('postcompose', moveFeature);
|
||||||
|
map.render();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {boolean} ended end of animation.
|
||||||
|
*/
|
||||||
|
function stopAnimation(ended) {
|
||||||
|
animating = false;
|
||||||
|
startButton.textContent = 'Start Animation';
|
||||||
|
|
||||||
|
// if animation cancelled set the marker at the beginning
|
||||||
|
var coord = ended ? routeCoords[routeLength - 1] : routeCoords[0];
|
||||||
|
/** @type {ol.geom.Point} */ (geoMarker.getGeometry())
|
||||||
|
.setCoordinates(coord);
|
||||||
|
//remove listener
|
||||||
|
map.un('postcompose', moveFeature);
|
||||||
|
}
|
||||||
|
|
||||||
|
var speed, now;
|
||||||
|
var animating = false;
|
||||||
|
var speedInput = document.getElementById('speed');
|
||||||
|
var startButton = document.getElementById('start-animation');
|
||||||
|
startButton.addEventListener('click', startAnimation, false);
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
template: example.html
|
layout: example.html
|
||||||
title: Fractal Example
|
title: Fractal Example
|
||||||
shortdesc: Example of a fractal.
|
shortdesc: Example of a fractal.
|
||||||
docs: >
|
docs: >
|
||||||
|
|||||||
@@ -1,11 +1,13 @@
|
|||||||
---
|
---
|
||||||
template: example.html
|
layout: example.html
|
||||||
title: Full screen drag rotate and zoom example
|
title: Full screen drag rotate and zoom example
|
||||||
shortdesc: Example of drag rotate and zoom control with full screen effect.
|
shortdesc: Example of drag rotate and zoom control with full screen effect.
|
||||||
docs: >
|
docs: >
|
||||||
<p>Hold down <code>Shift</code> + drag to rotate and zoom. Click the button in the top right corner to go full screen. Then do the <code>Shift</code> + drag thing again.</p>
|
<p>Hold down <code>Shift</code> + drag to rotate and zoom. Click the button in the top right corner to go full screen. Then do the <code>Shift</code> + drag thing again.</p>
|
||||||
<p>If there is no button on the map, your browser does not support the <a href="http://caniuse.com/#feat=fullscreen">Full Screen API</a>.</p>
|
<p>If there is no button on the map, your browser does not support the <a href="http://caniuse.com/#feat=fullscreen">Full Screen API</a>.</p>
|
||||||
tags: "full-screen, drag, rotate, zoom, bing, bing-maps"
|
tags: "full-screen, drag, rotate, zoom, bing, bing-maps"
|
||||||
|
cloak:
|
||||||
|
Ak-dzM4wZjSqTlzveKz5u0d4IQ4bRzVI309GxmkgSVr1ewS6iPSrOvOKhA-CJlm3: Your Bing Maps Key from http://bingmapsportal.com/ here
|
||||||
---
|
---
|
||||||
<div class="row-fluid">
|
<div class="row-fluid">
|
||||||
<div class="span12">
|
<div class="span12">
|
||||||
|
|||||||
@@ -1,11 +1,13 @@
|
|||||||
---
|
---
|
||||||
template: example.html
|
layout: example.html
|
||||||
title: Full screen control example
|
title: Full screen control example
|
||||||
shortdesc: Example of a full screen control.
|
shortdesc: Example of a full screen control.
|
||||||
docs: >
|
docs: >
|
||||||
<p>Click the control in the top right corner to go full screen. Click it again to exit full screen.</p>
|
<p>Click the control in the top right corner to go full screen. Click it again to exit full screen.</p>
|
||||||
<p>If there is no button on the map, your browser does not support the <a href="http://caniuse.com/#feat=fullscreen">Full Screen API</a>.</p>
|
<p>If there is no button on the map, your browser does not support the <a href="http://caniuse.com/#feat=fullscreen">Full Screen API</a>.</p>
|
||||||
tags: "full-screen, bing, bing-maps"
|
tags: "full-screen, bing, bing-maps"
|
||||||
|
cloak:
|
||||||
|
Ak-dzM4wZjSqTlzveKz5u0d4IQ4bRzVI309GxmkgSVr1ewS6iPSrOvOKhA-CJlm3: Your Bing Maps Key from http://bingmapsportal.com/ here
|
||||||
---
|
---
|
||||||
<div class="row-fluid">
|
<div class="row-fluid">
|
||||||
<div class="span12">
|
<div class="span12">
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
template: example.html
|
layout: example.html
|
||||||
title: GeoJSON example
|
title: GeoJSON example
|
||||||
shortdesc: Example of GeoJSON features.
|
shortdesc: Example of GeoJSON features.
|
||||||
docs: >
|
docs: >
|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
---
|
---
|
||||||
template: "example-verbatim.html"
|
layout: example-verbatim.html
|
||||||
|
title: Geolocation Tracking with Orientation
|
||||||
|
shortdesc: Example of a geolocated and oriented map.
|
||||||
|
tags: "fullscreen, geolocation, orientation, mobile"
|
||||||
---
|
---
|
||||||
<!doctype html>
|
<!doctype html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
@@ -7,7 +10,7 @@ template: "example-verbatim.html"
|
|||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta http-equiv="X-UA-Compatible" content="chrome=1">
|
<meta http-equiv="X-UA-Compatible" content="chrome=1">
|
||||||
<meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
|
<meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
|
||||||
<link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/twitter-bootstrap/2.3.1/css/bootstrap-combined.min.css" type="text/css">
|
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" type="text/css">
|
||||||
<link rel="stylesheet" href="../css/ol.css" type="text/css">
|
<link rel="stylesheet" href="../css/ol.css" type="text/css">
|
||||||
<link rel="stylesheet" href="./resources/layout.css" type="text/css">
|
<link rel="stylesheet" href="./resources/layout.css" type="text/css">
|
||||||
<title>Mobile Geolocation Tracking with Orientation</title>
|
<title>Mobile Geolocation Tracking with Orientation</title>
|
||||||
@@ -41,15 +44,8 @@ template: "example-verbatim.html"
|
|||||||
<button id="geolocate">Geolocate Me!</button>
|
<button id="geolocate">Geolocate Me!</button>
|
||||||
<button id="simulate">Simulate</button>
|
<button id="simulate">Simulate</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="http://code.jquery.com/jquery-1.9.1.min.js" type="text/javascript"></script>
|
<script src="http://code.jquery.com/jquery-1.9.1.min.js" type="text/javascript"></script>
|
||||||
<script src="./resources/common.js" type="text/javascript"></script>
|
<script src="./resources/common.js" type="text/javascript"></script>
|
||||||
<script src="loader.js?id=geolocation-orientation" type="text/javascript"></script>
|
<script src="loader.js?id=geolocation-orientation" type="text/javascript"></script>
|
||||||
|
|
||||||
<div style="display: none;">
|
|
||||||
<div id="title">Geolocation tracking with orientation example</div>
|
|
||||||
<div id="shortdesc">Example of a geolocated and oriented map.</div>
|
|
||||||
<div id="tags">fullscreen, geolocation, orientation, mobile</div>
|
|
||||||
</div>
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
template: example.html
|
layout: example.html
|
||||||
title: Geolocation example
|
title: Geolocation example
|
||||||
shortdesc: Example of a geolocation map.
|
shortdesc: Example of a geolocation map.
|
||||||
docs: >
|
docs: >
|
||||||
@@ -10,7 +10,7 @@ tags: "geolocation, openstreetmap"
|
|||||||
<div class="span12">
|
<div class="span12">
|
||||||
<div id="map" class="map"></div>
|
<div id="map" class="map"></div>
|
||||||
<div class="span4 pull-right">
|
<div class="span4 pull-right">
|
||||||
<div id="info" class="alert alert-error" style="display: none;"></div>
|
<div id="info" class="alert alert-danger" style="display: none;"></div>
|
||||||
</div>
|
</div>
|
||||||
<label class="checkbox" for="track">
|
<label class="checkbox" for="track">
|
||||||
<input id="track" type="checkbox"/>track position
|
<input id="track" type="checkbox"/>track position
|
||||||
|
|||||||
@@ -1,12 +1,13 @@
|
|||||||
goog.require('ol.Feature');
|
goog.require('ol.Feature');
|
||||||
goog.require('ol.FeatureOverlay');
|
|
||||||
goog.require('ol.Geolocation');
|
goog.require('ol.Geolocation');
|
||||||
goog.require('ol.Map');
|
goog.require('ol.Map');
|
||||||
goog.require('ol.View');
|
goog.require('ol.View');
|
||||||
goog.require('ol.control');
|
goog.require('ol.control');
|
||||||
goog.require('ol.geom.Point');
|
goog.require('ol.geom.Point');
|
||||||
goog.require('ol.layer.Tile');
|
goog.require('ol.layer.Tile');
|
||||||
|
goog.require('ol.layer.Vector');
|
||||||
goog.require('ol.source.OSM');
|
goog.require('ol.source.OSM');
|
||||||
|
goog.require('ol.source.Vector');
|
||||||
goog.require('ol.style.Circle');
|
goog.require('ol.style.Circle');
|
||||||
goog.require('ol.style.Fill');
|
goog.require('ol.style.Fill');
|
||||||
goog.require('ol.style.Stroke');
|
goog.require('ol.style.Stroke');
|
||||||
@@ -85,7 +86,9 @@ geolocation.on('change:position', function() {
|
|||||||
new ol.geom.Point(coordinates) : null);
|
new ol.geom.Point(coordinates) : null);
|
||||||
});
|
});
|
||||||
|
|
||||||
var featuresOverlay = new ol.FeatureOverlay({
|
var featuresOverlay = new ol.layer.Vector({
|
||||||
map: map,
|
map: map,
|
||||||
features: [accuracyFeature, positionFeature]
|
source: new ol.source.Vector({
|
||||||
|
features: [accuracyFeature, positionFeature]
|
||||||
|
})
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
template: example.html
|
layout: example.html
|
||||||
title: GetFeatureInfo example (image layer)
|
title: GetFeatureInfo example (image layer)
|
||||||
shortdesc: This example shows how to trigger WMS GetFeatureInfo requests on click for a WMS image layer.
|
shortdesc: This example shows how to trigger WMS GetFeatureInfo requests on click for a WMS image layer.
|
||||||
docs: >
|
docs: >
|
||||||
@@ -9,10 +9,12 @@ tags: "getfeatureinfo, forEachLayerAtPixel"
|
|||||||
<div class="row-fluid">
|
<div class="row-fluid">
|
||||||
<div class="span12">
|
<div class="span12">
|
||||||
<div id="map" class="map"></div>
|
<div id="map" class="map"></div>
|
||||||
<div class="span4 offset4 pull-right">
|
</div>
|
||||||
<div id="info" class="alert alert-success">
|
</div>
|
||||||
|
<div class="row-fluid">
|
||||||
</div>
|
<div class="span4 offset4 iframe-info">
|
||||||
|
<div id="info" class="alert alert-success">
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
template: example.html
|
layout: example.html
|
||||||
title: WMS GetFeatureInfo example (tile layer)
|
title: WMS GetFeatureInfo example (tile layer)
|
||||||
shortdesc: This example shows how to trigger WMS GetFeatureInfo requests on click for a WMS tile layer.
|
shortdesc: This example shows how to trigger WMS GetFeatureInfo requests on click for a WMS tile layer.
|
||||||
docs: >
|
docs: >
|
||||||
@@ -9,10 +9,12 @@ tags: "getfeatureinfo, forEachLayerAtPixel"
|
|||||||
<div class="row-fluid">
|
<div class="row-fluid">
|
||||||
<div class="span12">
|
<div class="span12">
|
||||||
<div id="map" class="map"></div>
|
<div id="map" class="map"></div>
|
||||||
<div class="span4 offset4 pull-right">
|
</div>
|
||||||
<div id="info" class="alert alert-success">
|
</div>
|
||||||
|
<div class="row-fluid">
|
||||||
</div>
|
<div class="span4 offset4 iframe-info">
|
||||||
|
<div id="info" class="alert alert-success">
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
---
|
---
|
||||||
template: example.html
|
layout: example.html
|
||||||
title: GPX example
|
title: GPX example
|
||||||
shortdesc: Example of using the GPX source.
|
shortdesc: Example of using the GPX source.
|
||||||
docs: >
|
docs: >
|
||||||
Example of using the GPX source.
|
Example of using the GPX source.
|
||||||
tags: "GPX"
|
tags: "GPX"
|
||||||
|
cloak:
|
||||||
|
Ak-dzM4wZjSqTlzveKz5u0d4IQ4bRzVI309GxmkgSVr1ewS6iPSrOvOKhA-CJlm3: Your Bing Maps Key from http://bingmapsportal.com/ here
|
||||||
---
|
---
|
||||||
<div class="row-fluid">
|
<div class="row-fluid">
|
||||||
<div class="span12">
|
<div class="span12">
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
template: example.html
|
layout: example.html
|
||||||
title: Graticule example
|
title: Graticule example
|
||||||
shortdesc: This example shows how to add a graticule overlay to a map.
|
shortdesc: This example shows how to add a graticule overlay to a map.
|
||||||
docs: >
|
docs: >
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
template: example.html
|
layout: example.html
|
||||||
title: Earthquakes heatmap
|
title: Earthquakes heatmap
|
||||||
shortdesc: Demonstrates the use of a heatmap layer.
|
shortdesc: Demonstrates the use of a heatmap layer.
|
||||||
docs: >
|
docs: >
|
||||||
|
|||||||
@@ -1,6 +0,0 @@
|
|||||||
#reset-hue {
|
|
||||||
min-width: 90px;
|
|
||||||
}
|
|
||||||
#reset-saturation {
|
|
||||||
min-width: 124px;
|
|
||||||
}
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
---
|
|
||||||
template: example.html
|
|
||||||
title: Hue/saturation example
|
|
||||||
shortdesc: Example of hue/saturation control on the client (WebGL only).
|
|
||||||
docs: >
|
|
||||||
Example of hue/saturation control on the client (WebGL only).
|
|
||||||
tags: "custom, control"
|
|
||||||
---
|
|
||||||
<div class="row-fluid">
|
|
||||||
<div class="span12">
|
|
||||||
<div id="map" class="map"></div>
|
|
||||||
<div id="no-webgl" class="alert alert-error" style="display: none">
|
|
||||||
This example requires a browser that supports <a href="http://get.webgl.org/">WebGL</a>.
|
|
||||||
</div>
|
|
||||||
<div class="btn-group">
|
|
||||||
<button id="increase-hue"><i class="icon-plus"></i></button>
|
|
||||||
<button id="reset-hue">Hue</button>
|
|
||||||
<button id="decrease-hue"><i class="icon-minus"></i></button>
|
|
||||||
</div>
|
|
||||||
<div class="btn-group">
|
|
||||||
<button id="increase-saturation"><i class="icon-plus"></i></button>
|
|
||||||
<button id="reset-saturation">Saturation</button>
|
|
||||||
<button id="decrease-saturation"><i class="icon-minus"></i></button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user