Compare commits
1126 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
1d96dfb7f1 | ||
fb0b88e916 | |||
|
1ee201a41f | ||
|
72a93a0cc0 | ||
|
290b8ec1dd | ||
|
ff9246168b | ||
|
eef8ee3934 | ||
|
6342756105 | ||
|
25d28ad9e2 | ||
|
5613a96cc2 | ||
|
42d251e8cb | ||
|
151bed799f | ||
|
3436302abf | ||
|
b0baf72462 | ||
|
79916df991 | ||
|
015d173d9b | ||
|
5d37b53c02 | ||
|
fd092aa4dd | ||
|
c36d62e0d1 | ||
|
88d8a7ed8a | ||
|
6b98cb7d89 | ||
|
eef08827e5 | ||
|
1207262c72 | ||
|
5c5c08f5c4 | ||
|
c24a9c1631 | ||
|
4c2be99dc9 | ||
|
b2efa815f6 | ||
|
92727cc75d | ||
|
707e1c4069 | ||
|
b4520369be | ||
|
6bd2239e95 | ||
|
b4014eec64 | ||
|
3b01288c46 | ||
|
7032428f09 | ||
|
c7219da70e | ||
|
69ad616a5f | ||
|
b18f42a5a8 | ||
|
272ead2518 | ||
|
f7bdc420bf | ||
|
43b52de5d8 | ||
|
14d67da9fa | ||
|
a20fc2ef11 | ||
|
d29fd500e5 | ||
|
e1191f68ae | ||
|
36e4116d39 | ||
|
43cfcd4a81 | ||
|
332a694d65 | ||
|
76fa6bdfc6 | ||
|
efd85ea3d9 | ||
|
e09af9502a | ||
|
fce9791cd6 | ||
|
575c2c2b34 | ||
|
7b0a5249b7 | ||
|
002877ff5f | ||
|
4f69560cf3 | ||
|
e86bf54d8a | ||
|
d89a402375 | ||
|
f570105920 | ||
|
3011e6acda | ||
|
59e8dea217 | ||
|
ae7c7b1910 | ||
|
cf234cd7ca | ||
|
4fb99aaf28 | ||
|
7e09e4f2e8 | ||
|
d428b689ba | ||
|
3c0ca26b67 | ||
|
84ccf9d1bc | ||
|
5442e67518 | ||
|
6fb02ec055 | ||
|
825cd05150 | ||
|
9357cf380b | ||
|
670883701d | ||
|
86794c8838 | ||
|
c4003bab33 | ||
|
f5f77157c9 | ||
|
8e0d467ceb | ||
|
044c8ce74f | ||
|
87dc04251d | ||
|
0a2f47ee57 | ||
|
172664c55b | ||
|
cd90e95a4a | ||
|
b3f18a92d2 | ||
|
774ceced8b | ||
|
2ea8e006a3 | ||
|
f04b8d36f8 | ||
|
37363b31da | ||
|
44a1756229 | ||
|
a184e25348 | ||
|
6f64e97faf | ||
|
30ad6f1cef | ||
|
bd965750a9 | ||
|
f076544993 | ||
|
bb03b40075 | ||
|
634a2e5c0d | ||
|
c3203b3cb4 | ||
|
a82275315c | ||
|
12a58e5827 | ||
|
9895921a5c | ||
|
ba8b800ee0 | ||
|
8be9211ed6 | ||
|
b8983007d2 | ||
|
bd24ba12d5 | ||
|
5de7070f15 | ||
|
e2c901d1e5 | ||
|
156fda15cd | ||
|
425e5dac61 | ||
|
8f15859f9b | ||
|
6d29d11499 | ||
|
6da37d481d | ||
|
62015eee0b | ||
|
e62e27cf22 | ||
|
76bf76a090 | ||
|
e906305910 | ||
|
08b94a0c42 | ||
|
c508bde844 | ||
|
d4b7e34d17 | ||
|
d5543bd7ef | ||
|
354bc16ead | ||
|
8889235690 | ||
|
9b43d7f498 | ||
|
ef2d2dd197 | ||
|
1245158ba3 | ||
|
ef5f7acbdf | ||
|
e1c24ee8cf | ||
|
9f5ddd2381 | ||
|
1fbc501bef | ||
|
d7c69e12d6 | ||
|
1fa86b5e07 | ||
|
efed81bdeb | ||
|
a308eb48ac | ||
|
5926dd3e65 | ||
|
a11e620792 | ||
|
6850eff26c | ||
|
ddf94ae2ca | ||
|
22ed9653ec | ||
|
3bb8ce00c5 | ||
|
b9cbd97c40 | ||
|
6801b895e4 | ||
|
c0d5f4a0ca | ||
|
2859a18d72 | ||
|
869446ad13 | ||
|
b2fd22885e | ||
|
7d6c623a80 | ||
|
6bea801bf6 | ||
|
d446a3448b | ||
|
d006ba5361 | ||
|
0eb4f3752f | ||
|
789c280fc2 | ||
|
a881eec9b1 | ||
|
1bc1d88464 | ||
|
1c18221f05 | ||
|
f4162acf04 | ||
|
1138978c22 | ||
|
bd43baba20 | ||
|
2e6da74af8 | ||
|
f6561d2a2e | ||
|
45a42bb242 | ||
|
3043173814 | ||
|
cde5d898c7 | ||
|
58f6215c0f | ||
|
d7d6fa57ac | ||
|
57bf615ab7 | ||
|
9bf3161010 | ||
|
98a977ea72 | ||
|
661bc08bbf | ||
|
804c8c4603 | ||
|
e103c38e3e | ||
|
e3b4ff502e | ||
|
6116ebb348 | ||
|
5c3a728d05 | ||
|
2070145880 | ||
|
e9a670f274 | ||
|
e5c87ba06e | ||
|
fa992b93f5 | ||
|
bf67074cf3 | ||
|
074320d6d2 | ||
|
6616c22a32 | ||
|
1ddba0fe8f | ||
|
0a374bc635 | ||
|
8602b5780a | ||
|
ab32f25a7c | ||
|
ebfb7bd85d | ||
|
ed739c59f5 | ||
|
238a5f8f14 | ||
|
126c47dfd7 | ||
|
e8389e6887 | ||
|
81f526dc56 | ||
|
23ae072ed6 | ||
|
20f4fad7f3 | ||
|
1805e86173 | ||
|
8acda4fbf5 | ||
|
65d8bd9675 | ||
|
34ea0af92d | ||
|
2d64186a1a | ||
|
4604f07042 | ||
|
52f47bd797 | ||
|
50f885b5f8 | ||
|
742405a193 | ||
|
18ee0a393f | ||
|
29634d29b5 | ||
|
635d5bacdd | ||
|
1156976ea5 | ||
|
964736d60f | ||
|
2de19ef080 | ||
|
0faf3eca66 | ||
|
c239d8c1b7 | ||
|
c28aec5f59 | ||
|
e0efff50a8 | ||
|
8364ff83d1 | ||
|
5d7a4e0954 | ||
|
2785d22a3a | ||
|
2768f84a5f | ||
|
1ede5c5456 | ||
|
5778d0e74a | ||
|
6672c57f05 | ||
|
c1fbdb42be | ||
|
841b3af042 | ||
|
bdd08e3486 | ||
|
68679c6dc0 | ||
|
9f280a41c0 | ||
|
65c8d5199f | ||
|
2b8326f465 | ||
|
488b350671 | ||
|
5285b0c272 | ||
|
ebe98c8990 | ||
|
c30095c59d | ||
|
f449a0a6fb | ||
|
74dfa07c81 | ||
|
bf6b325ce8 | ||
|
b43dfc53e4 | ||
|
883ed23272 | ||
|
0a0c2b3ce0 | ||
|
c783255b97 | ||
|
c689ad9e67 | ||
|
0fabe4c738 | ||
|
d4a95dad19 | ||
|
4405b6235a | ||
|
766b0d9914 | ||
|
412cacd1c2 | ||
|
299592d352 | ||
|
d512731d06 | ||
|
b2a8d3040a | ||
|
892ea92580 | ||
|
f7acfd9017 | ||
|
701ac43746 | ||
|
b926310296 | ||
|
49d1e7bafc | ||
|
6f697ed6f8 | ||
|
cdcae29ae1 | ||
|
a13c4a3793 | ||
|
031a3bfa00 | ||
|
7122e1fbc5 | ||
|
6ed00d9a94 | ||
|
327d6f1466 | ||
|
17a135813b | ||
|
0dd82cb68f | ||
|
ae04fa83f6 | ||
|
4bfcdadb76 | ||
|
fa5a72f20d | ||
|
d81eb3d706 | ||
|
97332e3e73 | ||
|
e4a4857eb8 | ||
|
80018de754 | ||
|
01bb7ca074 | ||
|
a8f5eee505 | ||
|
644cf9dcb6 | ||
|
cb0109ba42 | ||
|
2fa5afec11 | ||
|
69ea1e414a | ||
|
4866abe38e | ||
|
4c10d5848b | ||
|
faed3d05a5 | ||
|
88a9a9ee7f | ||
|
3915e3343d | ||
|
b22c023f1a | ||
|
5de7c9ec38 | ||
|
14c485914c | ||
|
c20922b5f5 | ||
|
1294ff9fea | ||
|
992d9c8e66 | ||
|
948449b3ec | ||
|
0c1c06c1bb | ||
|
7ad3f4a0b1 | ||
|
c5836adc17 | ||
|
107a429517 | ||
|
2cb0a80c47 | ||
|
db9f83120a | ||
|
5facdb9888 | ||
|
3f3caa1912 | ||
|
03b9f224b2 | ||
|
c013465d49 | ||
|
c91833519e | ||
|
055cd54beb | ||
|
3eaad42903 | ||
|
6ab98419df | ||
|
a9e18a2add | ||
|
83aed13683 | ||
|
5779d10632 | ||
|
85e818d788 | ||
|
cc1d4cf6d9 | ||
|
0404effca3 | ||
|
eef1a8c779 | ||
|
527fc3d42d | ||
|
53b262f190 | ||
|
dcb7b0d10c | ||
|
e6137163b9 | ||
|
2cf9a4a472 | ||
|
55d8797f37 | ||
|
653c6489b9 | ||
|
c19e06b718 | ||
|
5de4c6b7ab | ||
|
900448f8d3 | ||
|
4be42dbc0f | ||
|
72ba3d6429 | ||
|
f5815203c4 | ||
|
0c050c7405 | ||
|
71bf1390f6 | ||
|
368cf1ff4a | ||
|
c526599e20 | ||
|
fcf7272f2e | ||
|
cf2bdb251b | ||
|
551c0231a0 | ||
|
70741d8f5b | ||
|
9209afba01 | ||
|
9e81473d36 | ||
|
ffeaf1b81c | ||
|
efab21f4f2 | ||
|
a6ce05034a | ||
|
634d67a206 | ||
|
30ae0fb48f | ||
|
5740290a9b | ||
|
149d5d9057 | ||
|
fe2d806d73 | ||
|
63ccf0dcfa | ||
|
5f1c3c3186 | ||
|
b98505c815 | ||
|
5979161611 | ||
|
d6e55edd8e | ||
|
431eadaa87 | ||
|
df82ebfaa6 | ||
|
b5ee7c1b46 | ||
|
54b7884fa3 | ||
|
e5bc7c7564 | ||
|
cf49591d4f | ||
|
71f94f3f79 | ||
|
db6be82ce2 | ||
|
ba65786b5a | ||
|
036d63c9dd | ||
|
07e86d24f6 | ||
|
2cbd92a01b | ||
|
ba0e737c7b | ||
|
45b59eb6df | ||
|
a7d50fa8fa | ||
|
2f27803fc5 | ||
|
71a4ba1c19 | ||
|
271cab1212 | ||
|
1051aacc7c | ||
|
fb8e6dab20 | ||
|
4e37ae26c9 | ||
|
905f27b2c2 | ||
|
9d6935cf48 | ||
|
6b0e521c75 | ||
|
c906c468f8 | ||
|
f7272dcdcd | ||
|
14283ff5cc | ||
|
e4608b17c3 | ||
|
d81c32b97c | ||
|
e69c5724bf | ||
|
da0a5673d2 | ||
|
4cdd2a2bfb | ||
|
80afa86ae4 | ||
|
311cc19134 | ||
|
9809398517 | ||
|
7498d58878 | ||
|
73e17ef4a1 | ||
|
bda48858ba | ||
|
4d35b72b25 | ||
|
8faa374303 | ||
|
573ec687ac | ||
|
4b685819d1 | ||
|
889ce83bdf | ||
|
30304a8ddc | ||
|
4b12e28f3c | ||
|
f92fc4b405 | ||
|
b5076c9cd2 | ||
|
5eda5b78a6 | ||
|
207993a6e2 | ||
|
4162d9b488 | ||
|
8bfca4917a | ||
|
2aedfaba34 | ||
|
4811abb3d3 | ||
|
f6e51898b7 | ||
|
12070cee74 | ||
|
6af46cf8cc | ||
|
5b58e5282b | ||
|
0e54dc715c | ||
|
627a316e4d | ||
|
2efa8808c0 | ||
|
b9c7d4cbb1 | ||
|
f348296a8c | ||
|
7cfbe1c115 | ||
|
31077cb637 | ||
|
8e685b7ebb | ||
|
ca3871eb61 | ||
|
ebe4095438 | ||
|
ec50f11e3e | ||
|
446d0133cf | ||
|
b4a98ef1a9 | ||
|
ba123910a4 | ||
|
23d65486e6 | ||
|
c0c8abe3a7 | ||
|
f599a14506 | ||
|
46349724a8 | ||
|
915cdae09c | ||
|
bac510370a | ||
|
45cf4057d1 | ||
|
f6f00c2521 | ||
|
f6af3d7410 | ||
|
7c2976819f | ||
|
eb3efa7a69 | ||
|
16132f7ae3 | ||
|
c06b2712a0 | ||
|
28b16a3232 | ||
|
0a8e56ea05 | ||
|
1f0b5509ed | ||
|
777d33a4de | ||
|
5887d5c6a2 | ||
|
a443e732f5 | ||
|
fc452a76e7 | ||
|
48a5c36c31 | ||
|
bab34aab2b | ||
|
98ab1f7100 | ||
|
1734f3f87a | ||
|
3a8e50d703 | ||
|
235decb041 | ||
|
6bbedd0f2b | ||
|
ce87e89b4f | ||
|
1af38a7306 | ||
|
d219632825 | ||
|
84d6b311ea | ||
|
c32652c066 | ||
|
11a5d841f9 | ||
|
25c75a009d | ||
|
b611b979e4 | ||
|
540d6c23f9 | ||
|
5eb27b7553 | ||
|
ef87bae51f | ||
|
8c2f788069 | ||
|
cae68ffec9 | ||
|
929d1fc78b | ||
|
608edc2d46 | ||
|
a0c7a70e00 | ||
|
a3cdace8d2 | ||
|
de2fe89ecd | ||
|
73b530a807 | ||
|
4b418b9bb9 | ||
|
e514e29010 | ||
|
8d34090eb8 | ||
|
93d6c1bf14 | ||
|
a1c45d1dc3 | ||
|
69421c0381 | ||
|
1efed2bef8 | ||
|
98474b187d | ||
|
abd08ab884 | ||
|
e18f3577f0 | ||
|
8ac26e9567 | ||
|
c984eae2d5 | ||
|
d806d6bcca | ||
|
a62d77583b | ||
|
6f4ab468a7 | ||
|
20352f2053 | ||
|
357ec99b44 | ||
|
0271e9df23 | ||
|
04a18f82e1 | ||
|
576d5f741d | ||
|
01958b7d34 | ||
|
41d5d21bc6 | ||
|
b0f155a377 | ||
|
a517b76e9e | ||
|
70dd6554c3 | ||
|
62132937da | ||
|
2784d78737 | ||
|
b5036f4cfd | ||
|
2388c352d5 | ||
|
09a6cf2497 | ||
|
e20b941eb9 | ||
|
1dba14ec9a | ||
|
e773d868f1 | ||
|
07afebba4e | ||
|
7146875c05 | ||
|
42627d5881 | ||
|
bb87c8a51b | ||
|
b69570aa68 | ||
|
699e9e37f3 | ||
|
63b62e3c82 | ||
|
6a2b2afdba | ||
|
292c092be3 | ||
|
85c604c1ee | ||
|
a530070ecf | ||
|
f853e54d77 | ||
|
928ece7853 | ||
|
9524c9d74d | ||
|
61318bff8a | ||
|
7c2d2d3759 | ||
|
34f4432818 | ||
|
596679d1f9 | ||
|
14c6b6fe8f | ||
|
e6006a0228 | ||
|
f44f083378 | ||
|
f258bae8fd | ||
|
47f9251c87 | ||
|
650a82a681 | ||
|
219b943d59 | ||
|
98717e7b46 | ||
|
bb924181b4 | ||
|
7c92d1045a | ||
|
e0f6afaf43 | ||
|
d36320967c | ||
|
33528a3e61 | ||
|
131e1a183c | ||
|
6fa1c5aa94 | ||
|
62055a1aa1 | ||
|
da09a62605 | ||
|
7a7ceb6d60 | ||
|
3bba870c90 | ||
|
272ce1d9b6 | ||
|
de259c27d7 | ||
|
74a7150cff | ||
|
3beb830baf | ||
|
a9b7e310be | ||
|
d04e2a06fb | ||
|
f3f629779f | ||
|
278ef523b8 | ||
|
b98e20273c | ||
|
2a0ec3d82e | ||
|
334a5e3fdb | ||
|
12b56905f6 | ||
|
63cd462109 | ||
|
f07de4c910 | ||
|
66c5e2b773 | ||
|
02b42539f3 | ||
|
5605fff111 | ||
|
052e3970e5 | ||
|
0bb0312913 | ||
|
ed735aea64 | ||
|
c9e266408e | ||
|
dc262dbd1d | ||
|
9a6ea88c23 | ||
|
d58d79facf | ||
|
bbd27f1332 | ||
|
37b80e904d | ||
|
f2bf6cd6ee | ||
|
40f2910991 | ||
|
a74e7f04e2 | ||
|
cfb12dd3f1 | ||
|
df67f81156 | ||
|
bb69e6acbd | ||
|
9ac533846d | ||
|
a7147d1c6e | ||
|
a1c5f4aa5a | ||
|
981af11011 | ||
|
c0efc78d37 | ||
|
857b2318f9 | ||
|
9e52e9e848 | ||
|
c8068d5835 | ||
|
2752878e9e | ||
|
2e9b6bf42c | ||
|
4ebca73023 | ||
|
e6a90a8da5 | ||
|
0fefd20cc6 | ||
|
94a2461741 | ||
|
4d7de87e7d | ||
|
f9193eaa3f | ||
|
0f5af24361 | ||
|
befa40e094 | ||
|
92937667d8 | ||
|
12cb34146c | ||
|
34023cdc95 | ||
|
c79dbb26ea | ||
|
77ea71c519 | ||
|
472a34c280 | ||
|
7a9fc99079 | ||
|
b4c8305f0d | ||
|
5d1da5fecd | ||
|
6dad9af7da | ||
|
7ca09f3acb | ||
|
b9f989a454 | ||
|
516b18bdef | ||
|
3a67bbce84 | ||
|
77cfad50e0 | ||
|
ccfbb359a4 | ||
|
b240be8ba7 | ||
|
241281c5e7 | ||
|
a92b3a18c1 | ||
|
625f11cc55 | ||
|
4e368e77dc | ||
|
d8163b9f12 | ||
|
cb36cfc983 | ||
|
512383892c | ||
|
11de89536d | ||
|
d1f9a4e8f6 | ||
|
7aac624ec7 | ||
|
d7aad27ed8 | ||
|
d036bb0bac | ||
|
12e04ca7ef | ||
|
e204056972 | ||
|
0604d579de | ||
|
57d56fbedf | ||
|
cdd07c0da3 | ||
|
c7eaaa9100 | ||
|
345b57c57a | ||
|
27a3c5a926 | ||
|
c3b62fbdf5 | ||
|
846074ddc1 | ||
|
0137d9ff1f | ||
|
fed0996f6f | ||
|
dcad929316 | ||
|
69ed1fe034 | ||
|
6fef1854c8 | ||
|
6af2d305b3 | ||
|
da628f99d6 | ||
|
5f57f97844 | ||
|
88d94ede01 | ||
|
27bf0316de | ||
|
77d0c36539 | ||
|
cd77b8fcd4 | ||
|
28e938b536 | ||
|
e85e056a0c | ||
|
e108e6e3d7 | ||
|
884f524fb1 | ||
|
f1570a9531 | ||
|
7e0d4f64dd | ||
|
ba18ccf967 | ||
|
956feec116 | ||
|
f3bc792ebe | ||
|
2bacad9bb5 | ||
|
3a81957f9a | ||
|
7d6d41b3c1 | ||
|
bbc6e2cc65 | ||
|
5b15eb9d7c | ||
|
4e263fb95b | ||
|
a5c6bc027f | ||
|
67dde0af7d | ||
|
bd9e7d7456 | ||
|
71a82d087b | ||
|
3ed6c43161 | ||
|
0e855cb47f | ||
|
5aba3ac373 | ||
|
03eb28f09e | ||
|
241f112b58 | ||
|
3a59a31ab3 | ||
|
25aa1329fc | ||
|
d76ac00403 | ||
|
beed7335fc | ||
|
f7f1940054 | ||
|
c46548d15e | ||
|
1be12b2700 | ||
|
20bdf84d91 | ||
|
e304c04f1c | ||
|
ea21d64822 | ||
|
3905ddb5e4 | ||
|
57ce026efd | ||
|
1ba83801e9 | ||
|
c93bb64a8a | ||
|
05d0b2b116 | ||
|
33241250ff | ||
|
dcd2ebad29 | ||
|
49476e17bb | ||
|
4d7078e861 | ||
|
08c20daef2 | ||
|
fd647f7458 | ||
|
5ff9abca1a | ||
|
a1cfd80853 | ||
|
45cb01c59d | ||
|
f98fe65827 | ||
|
131f36dbd4 | ||
|
8e35a178d2 | ||
|
aa623f81db | ||
|
43c9c4c8bd | ||
|
e36d5b53ea | ||
|
23f48082a1 | ||
|
b42973662e | ||
|
431790a638 | ||
|
aa5a1436ca | ||
|
f5386f3503 | ||
|
92d218572f | ||
|
067f08834d | ||
|
af98b0668a | ||
|
ab7164499d | ||
|
be483fff89 | ||
|
25627462c4 | ||
|
758f62a589 | ||
|
84c734accd | ||
|
d049d378dd | ||
|
5093f292ba | ||
|
80634a4adf | ||
|
969c44717a | ||
|
51d4521e6a | ||
|
3a596aaf1a | ||
|
699d63db10 | ||
|
ca9786dca3 | ||
|
85342ddd84 | ||
|
e16d7d2059 | ||
|
75fc29e9d5 | ||
|
0be2560594 | ||
|
fef055777a | ||
|
edfbae323f | ||
|
6c92f9db33 | ||
|
ec3e8ba5c9 | ||
|
54de362e44 | ||
|
1e0fd54ee1 | ||
|
5fc42268a4 | ||
|
1d8cdd7feb | ||
|
baa924c697 | ||
|
9de76897bc | ||
|
a67b2f2c91 | ||
|
791f054f70 | ||
|
7e13586463 | ||
|
c3639dcb24 | ||
|
49ded685b4 | ||
|
9b14865bf3 | ||
|
abac84e82a | ||
|
0367507dae | ||
|
9977061680 | ||
|
3cae38040c | ||
|
97cdfa119d | ||
|
641db3ade0 | ||
|
bddf2443b6 | ||
|
1404d21838 | ||
|
95bbc5ea3e | ||
|
f8776ffe5f | ||
|
bc1dee49a4 | ||
|
d81a6309bf | ||
|
9a6da018a9 | ||
|
8d639499ba | ||
|
a5d7a8f6b0 | ||
|
577f1520d2 | ||
|
c938533943 | ||
|
e3b137e3c4 | ||
|
72b72b8029 | ||
|
ba68b79e86 | ||
|
49ef4c8e1b | ||
|
535482025e | ||
|
e73ac4acfc | ||
|
bc20664bc5 | ||
|
06936fc4ee | ||
|
0829098ebb | ||
|
8ad2036ec1 | ||
|
4f7675d2a8 | ||
|
8f4e9967f0 | ||
|
f884c17195 | ||
|
490b932eab | ||
|
149353119b | ||
|
9c3f3b8a4c | ||
|
f9e06c80ad | ||
|
fe2c067272 | ||
|
9c3488e107 | ||
|
df784f6f68 | ||
|
a178357ca8 | ||
|
6627eab8e2 | ||
|
0a7638e10d | ||
|
f94c665b27 | ||
|
d23bca9c7f | ||
|
53dbb737fb | ||
|
1aa5f24e11 | ||
|
1d44057198 | ||
|
bcf4cff42b | ||
|
cbdeb58c2f | ||
|
df5bcd583f | ||
|
e2a4ad8a97 | ||
|
795359fb44 | ||
|
a9a042ea41 | ||
|
cd5a62a2ff | ||
|
dfd3a7dcf6 | ||
|
5615604170 | ||
|
b3f6899b1f | ||
|
e3f2f19119 | ||
|
126b98ae8c | ||
|
9104b746ac | ||
|
fc6bce20bb | ||
|
76582da497 | ||
|
a06ea5492e | ||
|
1d7ece5a65 | ||
|
67b911a7df | ||
|
7947e5c027 | ||
|
69f7ed7ae0 | ||
|
fa658bd1f0 | ||
|
233f0c4f7e | ||
|
02b29c7584 | ||
|
cedf3edc61 | ||
|
60aa9600d8 | ||
|
3d92807d26 | ||
|
67195bbc0c | ||
|
7ba5984e5f | ||
|
27aee33cb9 | ||
|
4a848cc08c | ||
|
75c2841a13 | ||
|
ed8f03122b | ||
|
d80e4fdabc | ||
|
c8817f80c8 | ||
|
3ee1034f1a | ||
|
3b224d21fc | ||
|
0d7d75ccb5 | ||
|
324a1c309c | ||
|
0046f5c159 | ||
|
7865867973 | ||
|
7c12c2ae9b | ||
|
564435a22a | ||
|
607cdeb5db | ||
|
4903a4b5f4 | ||
|
e5043447e3 | ||
|
4f78fed094 | ||
|
0fbce21140 | ||
|
3a19c2f2f5 | ||
|
c694fbc63b | ||
|
c4b6d019ff | ||
|
3603dfef03 | ||
|
35f1e7092c | ||
|
9283b80594 | ||
|
f81dff2365 | ||
|
5c2b404b3f | ||
|
095ed65eb3 | ||
|
3d7a09c457 | ||
|
abc1867d7c | ||
|
3449bd86e8 | ||
|
1861ca4a1b | ||
|
a77d89b8b3 | ||
|
f63c303293 | ||
|
f1634e4976 | ||
|
b59f20ef49 | ||
|
07138f3240 | ||
|
eddfa5a896 | ||
|
4532e397c0 | ||
|
81a270428c | ||
|
76e73368ab | ||
|
f4f8eb8d1c | ||
|
b695d43fee | ||
|
f6d2db4c6f | ||
|
e1db67f099 | ||
|
7142f3410d | ||
|
b110314077 | ||
|
1cf4d3a60b | ||
|
9c5fd29ff1 | ||
|
27a39fbfd7 | ||
|
d3aa2af73b | ||
|
2555fea5da | ||
|
8bb63c875f | ||
|
76dcc8b909 | ||
|
c38975fcba | ||
|
b90d99f82b | ||
|
76d55bb1a0 | ||
|
d9f7638a25 | ||
|
e7a391e640 | ||
|
12fe08884e | ||
|
4d9ad3e942 | ||
|
ae6ce553b9 | ||
|
13c42d509c | ||
|
a6aa2b2388 | ||
|
9f7fe2577b | ||
|
ad2348631a | ||
|
2dbad2b16a | ||
|
8db30d8537 | ||
|
25f0310334 | ||
|
3041ab5515 | ||
|
27e2c5dde5 | ||
|
a386cfea4f | ||
|
fe104300ba | ||
|
f1ae5c3d68 | ||
|
767019ee06 | ||
|
3a3a58d273 | ||
|
0eb53403d1 | ||
|
4938852b40 | ||
|
0d14473132 | ||
|
34ddf3a005 | ||
|
9ca4785701 | ||
|
8d2aba9c65 | ||
|
2872ce94a3 | ||
|
d5ebf43e3d | ||
|
223eb120fa | ||
|
b94d943247 | ||
|
d409aa5b96 | ||
|
644c83ed69 | ||
|
db871d4a22 | ||
|
3f959a3b46 | ||
|
903dbad9c6 | ||
|
3afca64080 | ||
|
16f0d524c5 | ||
|
f669022ca3 | ||
|
dce7886447 | ||
|
f77c46f56d | ||
|
45383397bc | ||
|
c14e93e25d | ||
|
7b7b5a923a | ||
|
6b4bb7d8bf | ||
|
5d4d630ce0 | ||
|
8d121c0798 | ||
|
6b362e5125 | ||
|
c2eb679adf | ||
|
183cb8aafd | ||
|
4bf27bc910 | ||
|
f0639972b4 | ||
|
e1d17321c6 | ||
|
b75ac0d647 | ||
|
7f81ddf47f | ||
|
c580e1d7a5 | ||
|
7a28788972 | ||
|
36e547d828 | ||
|
bd762dae9e | ||
|
347c1d31bb | ||
|
c6be08a903 | ||
|
8ab2195500 | ||
|
9fff945978 | ||
|
18d8e18bdf | ||
|
b32692942f | ||
|
9c58d8219c | ||
|
32c57a42a4 | ||
|
6c004b8be7 | ||
|
9a31cc07b5 | ||
|
0de27b7354 | ||
|
dc340a382e | ||
|
4c9354c326 | ||
|
d1fdca170e | ||
|
d614809df0 | ||
|
0c3acfd69c | ||
|
da95660c73 | ||
|
c8396062ae | ||
|
579f49bfd6 | ||
|
20f1121d3a | ||
|
26253a6104 | ||
|
b190211e5a | ||
|
edf29d2b0e | ||
|
a001f4615c | ||
|
5818edc228 | ||
|
e562ebdff6 | ||
|
d08ef59278 | ||
|
bb1d602267 | ||
|
c1eca04ab1 | ||
|
f6c28dc158 | ||
|
b760eadd4d | ||
|
7500ca1711 | ||
|
808671c1fb | ||
|
2d3ab0b6fd | ||
|
6461d39357 | ||
|
e0c02a83d0 | ||
|
ca56e0fe33 | ||
|
320ce5b44d | ||
|
f061e06d94 | ||
|
d1ce52ef52 | ||
|
28961caa79 | ||
|
4b30ca3242 | ||
|
84c45e153a | ||
|
d8001e23f6 | ||
|
559f4899dd | ||
|
04f02d9ae5 | ||
|
acb7727234 | ||
|
ac0455b1b4 | ||
|
5480cd6df8 | ||
|
325f848969 | ||
|
ea402f77f1 | ||
|
759915861e | ||
|
bc46217449 | ||
|
d8030c1364 | ||
|
23d34fa00a | ||
|
29322acf87 | ||
|
5dcffcc537 | ||
|
67afa0b7ab | ||
|
a6ecab334c | ||
|
edf89ce36b | ||
|
4f687e6fec | ||
|
cfc036c7ec | ||
|
3dbc44e9c2 | ||
|
c9e1c81cca | ||
|
f7e5544238 | ||
|
981536595f | ||
|
5aaa2ca96b | ||
|
b7a3844aac | ||
|
b3e2385ba5 | ||
|
03821e1f51 | ||
|
77dc06d650 | ||
|
0cd6c48b16 | ||
|
8a595fd37f | ||
|
967875d6b8 | ||
|
d60e2ef575 | ||
|
58ecf60d9d | ||
|
17356e5a2b | ||
|
296fdd3c13 | ||
|
735acc520a | ||
|
ac115b1f0f | ||
|
d2ba6647ea | ||
|
0180c40855 | ||
|
817bd13d7b | ||
|
d22dc79655 | ||
|
fc9ef062c0 | ||
|
f2dda7c8eb | ||
|
fdc793d9ec | ||
|
3d24aade21 | ||
|
6d93aaf57f | ||
|
8fc354c96a | ||
|
e30f3f7cc3 | ||
|
aff2c77267 | ||
|
33365b3f7d | ||
|
33fdc938fa | ||
|
8397d5a3be | ||
|
980e9d5e54 | ||
|
bc7c55b1f8 | ||
|
120182ec15 | ||
|
945b84f04f | ||
|
f67c457006 | ||
|
a2852b0761 | ||
|
ebf5d408bc | ||
|
75719eae29 | ||
|
5c825ea9eb | ||
|
15bc23cadf | ||
|
88f3283878 | ||
|
80848f9d2d | ||
|
f1f5726457 | ||
|
2ccf3e4c64 | ||
|
c8cbf8e0ce | ||
|
6544cc1081 | ||
|
4c72831336 | ||
|
06ac5142f7 | ||
|
feae45f78b | ||
|
61b8233b97 | ||
|
7acbea88cc | ||
|
19109516ae | ||
|
c1a5ad7e74 | ||
|
1a93e4ae13 | ||
|
1de6ca8fb7 | ||
|
02db7ca08d | ||
|
e9bb7aaae4 | ||
|
989e9c2ae8 | ||
|
e8f41cd339 | ||
|
eabd90d14c | ||
|
3e4aad4d51 | ||
|
b6dc72bbb6 | ||
|
4cd11462da | ||
|
6344542b10 | ||
|
e0031ae8aa | ||
|
229ea0b350 | ||
|
0a5d08a908 | ||
|
aed54c9a49 | ||
|
1a3bf4e4fe | ||
|
591ae03667 | ||
|
3a191fb513 | ||
|
2821d8ddb8 | ||
|
71d7b71035 | ||
|
85858911fa | ||
|
0a92c84668 | ||
|
c21d7b4390 | ||
|
38a9c71bc2 | ||
|
2573e458d5 | ||
|
25a9891133 | ||
|
8ee4e5fb8c | ||
|
a38b054228 | ||
|
d9bf94da99 | ||
|
77653096f9 | ||
|
5f534656ea | ||
|
ba93445259 | ||
|
71f7c45b21 | ||
|
ca5e34e1fb | ||
|
d937f3516c | ||
|
a8909fca08 | ||
|
b39feae045 | ||
|
9f4ef47b95 | ||
|
25e79bac55 | ||
|
311f4c7929 | ||
|
557e1858a7 | ||
|
16fa42d462 | ||
|
1133edb83d | ||
|
f6dbeba3d8 | ||
|
bf8f0745a6 | ||
|
829e45224f | ||
|
acde5d565d | ||
|
f0a652faf3 | ||
|
41867344e2 | ||
|
0c39ff8be0 | ||
|
6f78f08a04 | ||
|
3388e1401f | ||
|
308497ffa6 | ||
|
bfa5a095f0 | ||
|
96be36edb8 | ||
|
7c9c3732fb | ||
|
add62c9fe8 | ||
|
4aaa1ce620 | ||
|
aa63b49e5a | ||
|
1f1d91202c | ||
|
51eae28926 | ||
|
58b5f2741b | ||
|
d82faad435 | ||
|
fc8223bfc8 | ||
|
3584c4be1e | ||
|
001dbe8447 | ||
|
54feb7a25e | ||
|
ea2a94f76b | ||
|
b6bfbc612a | ||
|
1d545fd804 | ||
|
3acf77c102 | ||
|
6dfe2df2fb | ||
|
6cb40e1c15 | ||
|
afd03809e8 | ||
|
efa3cb0231 | ||
|
a709bd2623 | ||
|
439f2b20ff | ||
|
877d217f31 | ||
|
885264ad8c | ||
|
e224a7cf5b | ||
|
e10a223ea6 | ||
|
f85453e60c | ||
|
a6b3d7b0c2 | ||
|
dc15ba5f34 | ||
|
1d7afaf8de | ||
|
422d81d665 | ||
|
4b55043dcc | ||
|
7885529fff | ||
|
2c610f5e0b | ||
|
64a586dde8 | ||
|
c1f65144df | ||
|
ad2ee3f40e | ||
|
01365686fa | ||
|
dece13ddc9 | ||
|
05e9e0cdc8 | ||
|
a9283dd408 | ||
|
53ca77d18a | ||
|
97654f0670 | ||
|
cbd0ac01df | ||
|
ca841f5181 |
32
.github/workflows/android.yml
vendored
Normal file
@ -0,0 +1,32 @@
|
||||
name: Android CI
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "master" ]
|
||||
pull_request:
|
||||
branches: [ "master" ]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: set up JDK 11
|
||||
uses: actions/setup-java@v3
|
||||
with:
|
||||
java-version: '11'
|
||||
distribution: 'temurin'
|
||||
cache: gradle
|
||||
|
||||
- name: Grant execute permission for gradlew
|
||||
run: chmod +x gradlew
|
||||
- name: Build with Gradle
|
||||
run: ./gradlew build
|
||||
- name: Publish
|
||||
if: github.event_name != 'pull_request'
|
||||
env:
|
||||
SONATYPE_USERNAME: ${{ secrets.SONATYPE_USERNAME }}
|
||||
SONATYPE_PASSWORD: ${{ secrets.SONATYPE_PASSWORD }}
|
||||
run: ./gradlew -PSONATYPE_USERNAME="$SONATYPE_USERNAME" -PSONATYPE_PASSWORD="$SONATYPE_PASSWORD" publish
|
2
.gitignore
vendored
@ -11,8 +11,10 @@ robovm-build
|
||||
/vtm-web/war/
|
||||
/vtm-web/assets/
|
||||
/vtm-web/gwt-unitCache
|
||||
/vtm-web-app/war/WEB-INF/
|
||||
/vtm-web-app/assets/
|
||||
/vtm-web-app/src/main/webapp/
|
||||
/vtm-web-js/war/WEB-INF/
|
||||
/vtm-web-js/assets/
|
||||
/vtm-web-js/src/main/webapp/
|
||||
/vtm-spatialite/
|
||||
|
21
.travis.yml
@ -1,21 +0,0 @@
|
||||
sudo: false
|
||||
language: android
|
||||
jdk:
|
||||
- oraclejdk8
|
||||
android:
|
||||
components:
|
||||
- platform-tools
|
||||
- tools
|
||||
- build-tools-25.0.0
|
||||
- android-25
|
||||
env:
|
||||
global:
|
||||
- GRADLE_OPTS="-Xmx2048m"
|
||||
- secure: sW674wuFZOuoX7jHQHDbX3j8NxL8JxR07cyq+CrrqJ537dU9lxWQmMBRUpOb+p/q7sQ74PUtiKJkmFgKCSJSAKY+nr6GJ8P/q6u5TUKbmUWODSn8znehX2zualfvFwpF4PILok/wUzXBQE62jn4lUua7cMdsHRMNHbLmKqBoVL0meObDDjsaJ/RCbOPuruy3FmgvXPp0+Y4zl1GsklDSyjFzg4LBzjAk9Ryvh1O4zvJBkkyfCgurLKCnOKIPy3v5fPMS9oDfO1aarAVGoZZe416pvTW4hb8cdB6kn9XWYDob4NDFX/sP5k7XIhd/NAIn9LrKFg0sLtATaKLX+BcasF1CgDR/u6+SEeQd5QaRF7Go2Nq5Ltuu4OIFONI2qhEeVDDK6Otf2WSWj9KPno2GHuumBfbg4ypWoJgmZrMXk8JeVV/OP/0jIQz3p/7yfF21X1XBEqYaVHPAMKdEYYkCSa46KfACyOt6LfnkuCHtoTOpFo7sq0omIA2HOtpIx1u3vMBUyAbQqT6cokkKB1b6gNTFwhHc+8ybfLFPljJB8cWshI+V/b06S6fekRmvTNxvDykWNsdlkENBYqc9hMfjcT4hO4K+76SWN62mimQYODvFyfTVMC7WkQ3k/XEnmqUPV5XkbaILbS1d/tA57N148FiJ5/QXtI6Y94imubYyVqU=
|
||||
- secure: AdKSZKA4gMuKXI4X4dQNJqcMv5OmPIHdN8fpy55Y9yoOQPQHZE3Zwc4QDWBh20q298jyEC854tVTPTysdZ7h+2s2FhsprYv1Bt/QNzKIrLpeIMj2quuVGMbdPuk08y55gost94KwVLJv0sIDpRlB/PEQkA7Mg/UDsT9zR8E1Ms5x+ul2C8e1ag0zzNl1wVnT5jY8WCp74uA/XXCcJl/80qT1stUERazCKwbKNo007hi7rdm4HA7YGevORq8e2r67je+WIBZUAwrHT0Zjuo4ibwUii4LdwvjuN3w0Z6e9Wf4x5bBqGgnih0T31uom2yPjNx+U/c2AWI+Nxfy/SEF2U+9bjBEZ3ZhI7F1B9ofXo2mhvvsVDiUrymMBbG2V64C9kAzeUh7xIBTqIrbdtpAEBV9FlLAtF2swVTwtCgZgcVTOt3RKXCi3X3nk3cuH7PAorFa/QGfT4xxVu2011FVAt2Rm7SD0ZWztZTSTz/4Nt/egtGBOJfrCc7oLEygLzDmLqsqCwCROITVQjWLjrtqDyLteaNiSXeNIQMKun3izApbXnHmXB+FV3R3EZocboqk3v5bmPTahnG6Ghc2zknWyyxSx+O9qIfOpHUL8JMJiT82lUQUeibtCn7DCE8wVQ/gYC5i+a+KO/d3NemSzIFlZ8aoUiEPYq18dYlsDXeLXwF0=
|
||||
script:
|
||||
- ./gradlew clean build
|
||||
after_success:
|
||||
- if [ "$TRAVIS_BRANCH" == "master" ] && [ "$TRAVIS_PULL_REQUEST" == "false" ]; then
|
||||
./gradlew uploadArchives -PSONATYPE_USERNAME="${SONATYPE_USERNAME}" -PSONATYPE_PASSWORD="${SONATYPE_PASSWORD}";
|
||||
fi
|
94
README.md
@ -1,60 +1,86 @@
|
||||
[](https://travis-ci.org/mapsforge/vtm)
|
||||
[](COPYING.LESSER)
|
||||
[](https://maven-badges.herokuapp.com/maven-central/org.mapsforge/vtm)
|
||||
[](https://search.maven.org/search?q=g:org.mapsforge)
|
||||
[](http://www.gnu.org/licenses/lgpl-3.0)
|
||||
|
||||
# V™
|
||||
|
||||
VTM was developed within the [OpenScienceMap](https://github.com/opensciencemap) project.
|
||||
<img src="docs/logo/VTM.svg" style="bottom:0;" width="200" align="right">
|
||||
|
||||
**This fork continues VTM development. And provides compatibility with latest [Mapsforge](https://github.com/mapsforge/mapsforge).**
|
||||
VTM (Vector Tile Map) was developed within the [OpenScienceMap](https://github.com/opensciencemap) project.
|
||||
|
||||
If you have any questions or problems, don't hesitate to ask our public [mailing list](https://groups.google.com/group/mapsforge-dev) for help.
|
||||
**This fork continues VTM development and provides compatibility with [Mapsforge](https://github.com/mapsforge/mapsforge).**
|
||||
|
||||
See the [integration guide](docs/Integration.md) and [changelog](docs/Changelog.md). And read through [how to contribute](.github/CONTRIBUTING.md) guidelines.
|
||||
See the **[integration guide](docs/Integration.md)** and [changelog](docs/Changelog.md). And read through [how to contribute](docs/CONTRIBUTING.md) guidelines.
|
||||
|
||||
If you have any questions or problems, don't hesitate to ask the Discussions for help.
|
||||
|
||||
## Features
|
||||
- Java map library
|
||||
- OpenGL vector-tile rendering
|
||||
- Themeable vector layers
|
||||
- Themeable vector layers ([render themes](docs/Rendertheme.md))
|
||||
- Support for multiple tile sources:
|
||||
- primary opensciencemap (.vtm)
|
||||
- mapsforge files
|
||||
- GeoJSON tiles
|
||||
- bitmap: any quadtree-scheme tiles as texture
|
||||
- OpenScienceMap vector tiles
|
||||
- Mapsforge vector maps
|
||||
- MBTiles vector & raster maps
|
||||
- Mapbox vector tiles (e.g. Mapilion, Mapzen, Nextzen, OpenMapTiles)
|
||||
- GeoJSON vector tiles (e.g. Mapzen, Nextzen)
|
||||
- Raster tiles: any quadtree-scheme tiles as texture
|
||||
- Backends:
|
||||
- Android (optional libGDX)
|
||||
- iOS (using libGDX/RoboVM, [instructions](docs/ios.md))
|
||||
- Desktop (using libGDX/LWJGL)
|
||||
- HTML5/WebGL (using libGDX/GWT)
|
||||
- Android ([example](vtm-android-example/src/org/oscim/android/test/GettingStarted.java))
|
||||
- iOS (libGDX/RoboVM, [instructions](docs/ios.md))
|
||||
- Desktop (libGDX/LWJGL, [instructions](docs/desktop.md))
|
||||
- HTML5/WebGL (libGDX/GWT, [instructions](docs/web.md))
|
||||
- Building VTM: set `ANDROID_HOME` environment variable with the Android SDK installation directory
|
||||
|
||||
### Projects
|
||||
- **vtm** contains the core library
|
||||
- **vtm-android** Android backend (no libGDX required)
|
||||
- **vtm-android-example** provides examples using **vtm-android**
|
||||
- **vtm** core library
|
||||
- **vtm-android** Android backend
|
||||
- **vtm-android-example** Android examples
|
||||
- **vtm-gdx** common libGDX backend
|
||||
- **vtm-android-gdx** Android backend (with libGDX)
|
||||
- **vtm-desktop** Desktop backend
|
||||
- **vtm-ios** iOS backend
|
||||
- **vtm-web** HTML5/GWT backend
|
||||
- **vtm-android-gdx** Android libGDX backend
|
||||
- **vtm-desktop** Desktop libGDX backend
|
||||
- **vtm-desktop-lwjgl** Desktop LWJGL backend
|
||||
- **vtm-desktop-lwjgl3** Desktop LWJGL 3 backend
|
||||
- **vtm-playground** Desktop examples
|
||||
- **vtm-ios** iOS libGDX backend
|
||||
- **vtm-ios-example** iOS examples
|
||||
- **vtm-web** HTML5/GWT libGDX backend
|
||||
- **vtm-web-app** HTML5/GWT application
|
||||
|
||||
The libGDX backend for GWT is experimental.
|
||||
## WebGL Demo
|
||||
[OpenScienceMap](https://oscim.ogiqvo.com/vtm/#scale=17,rot=61,tilt=51,lat=53.075,lon=8.807) view of Bremen. Running [nextzen2oscimv4](https://github.com/schedul-xor/nextzen2oscimv4) server which contains OSM data in Germany. Notice: nextzen2oscimv4 server is still unstable.
|
||||
|
||||
## Applications
|
||||
- VTM is used by many [applications](docs/Applications.md).
|
||||
|
||||
## WebGL Demo
|
||||
[OpenScienceMap](http://opensciencemap.org/s3db/#scale=17,rot=61,tilt=51,lat=53.075,lon=8.807) view of Bremen.
|
||||
- Hold right mouse button to change view direction.
|
||||
## Maps
|
||||
- Mapsforge [map providers](docs/Mapsforge-Maps.md).
|
||||
|
||||
## Credits
|
||||
This library contains code from several projects:
|
||||
- **Android**: some Matrix code, TimSort (http://source.android.com)
|
||||
- **libGDX**: AsyncTask, MathUtils and Interpolation classes (https://github.com/libgdx)
|
||||
- **mapsforge**: based on 0.2.4 (https://github.com/mapsforge/mapsforge)
|
||||
- **osmdroid**: some overlay classes (https://github.com/osmdroid/osmdroid)
|
||||
- **tessellate**: (https://github.com/cscheid/tessellate)
|
||||
- **Android** (Apache 2.0): some Matrix code, TimSort (http://source.android.com)
|
||||
- **libGDX** (Apache 2.0): AsyncTask, MathUtils, Interpolation, PixmapPacker (https://github.com/libgdx)
|
||||
- **mapsforge** (LGPL3): based on 0.2.4 (https://github.com/mapsforge/mapsforge)
|
||||
- **osmdroid** (Apache 2.0): some overlay classes (https://github.com/osmdroid/osmdroid)
|
||||
- **tessellate** (SGI Free Software License B 2.0): (https://github.com/cscheid/tessellate)
|
||||
|
||||
## License
|
||||
|
||||
VTM library is under [LGPL v3 license](http://www.gnu.org/licenses/lgpl-3.0), with an important simplification: the constraints mentioned in sections LGPL v3 §4(d) and §4(e) are waived.
|
||||
|
||||
This means that you are allowed to convey a Combined Work without providing the user any way to recombine or relink the application and without providing any shared library mechanism.
|
||||
|
||||
In other words, you are allowed to include VTM library in your Android application, without making your application open source.
|
||||
|
||||
## Screenshots
|
||||

|
||||

|
||||
|
||||
| Android | iOS |
|
||||
| ------------- | ------------- |
|
||||
|<img src="docs/images/android.png" width="1000">|<img src="docs/images/ios.png" width="1000">|
|
||||
|
||||
| Desktop |
|
||||
| ------------- |
|
||||
||
|
||||
|
||||
| Browser |
|
||||
| ------------- |
|
||||
||
|
||||
|
39
build.gradle
@ -1,20 +1,14 @@
|
||||
buildscript {
|
||||
repositories {
|
||||
jcenter()
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:2.2.2'
|
||||
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1'
|
||||
}
|
||||
plugins {
|
||||
id 'com.android.application' version '7.4.2' apply false
|
||||
}
|
||||
|
||||
allprojects {
|
||||
group = 'org.mapsforge'
|
||||
version = 'master-SNAPSHOT'
|
||||
ext.isReleaseVersion = !version.endsWith("SNAPSHOT")
|
||||
|
||||
ext.androidBuildVersionTools = "25.0.0"
|
||||
ext.gdxVersion = "1.9.4"
|
||||
ext.gdxVersion = "1.11.0"
|
||||
ext.gwtVersion = "2.8.2"
|
||||
ext.slf4jVersion = "1.7.28"
|
||||
|
||||
if (JavaVersion.current().isJava8Compatible()) {
|
||||
tasks.withType(Javadoc) {
|
||||
@ -25,24 +19,29 @@ allprojects {
|
||||
}
|
||||
}
|
||||
|
||||
def androidCompileSdk() { return 25 }
|
||||
static def androidCompileSdk() { return 33 }
|
||||
|
||||
def androidMinSdk() { return 10 }
|
||||
// 14 for Support Library
|
||||
static def androidMinSdk() { return 21 }
|
||||
|
||||
def androidTargetSdk() { return 22 }
|
||||
static def androidTargetSdk() { return 33 }
|
||||
|
||||
def versionCode() { return 50 }
|
||||
static def versionCode() { return 1 }
|
||||
|
||||
def versionName() { return version }
|
||||
|
||||
subprojects {
|
||||
repositories {
|
||||
maven { url 'https://repo.boundlessgeo.com/main' }
|
||||
jcenter()
|
||||
}
|
||||
|
||||
tasks.withType(JavaCompile) {
|
||||
sourceCompatibility = JavaVersion.VERSION_1_7
|
||||
targetCompatibility = JavaVersion.VERSION_1_7
|
||||
options.encoding = 'UTF-8'
|
||||
if (JavaVersion.current().isJava9Compatible()) {
|
||||
if (!project.properties.containsKey('android')) {
|
||||
if (project.name == 'vtm-desktop-lwjgl3' || project.name == 'vtm-playground' || project.name == 'vtm-theme-comparator')
|
||||
options.compilerArgs.addAll(['--release', '8'])
|
||||
else
|
||||
options.compilerArgs.addAll(['--release', '7'])
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
112
deploy.gradle
@ -1,85 +1,63 @@
|
||||
apply plugin: 'signing'
|
||||
|
||||
if (project.hasProperty("android")) {
|
||||
task sourcesJar(type: Jar) {
|
||||
classifier = 'sources'
|
||||
from android.sourceSets.main.java.srcDirs
|
||||
exclude 'android-logger.properties'
|
||||
}
|
||||
|
||||
task javadoc(type: Javadoc) {
|
||||
source = android.sourceSets.main.java.srcDirs
|
||||
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
|
||||
exclude 'android-logger.properties'
|
||||
}
|
||||
} else {
|
||||
task sourcesJar(type: Jar) {
|
||||
classifier = 'sources'
|
||||
from sourceSets.main.allSource
|
||||
}
|
||||
java {
|
||||
withJavadocJar()
|
||||
withSourcesJar()
|
||||
}
|
||||
|
||||
task javadocJar(type: Jar, dependsOn: javadoc) {
|
||||
classifier = 'javadoc'
|
||||
from javadoc.destinationDir
|
||||
}
|
||||
|
||||
artifacts {
|
||||
archives javadocJar
|
||||
archives sourcesJar
|
||||
}
|
||||
|
||||
signing {
|
||||
required { isReleaseVersion && gradle.taskGraph.hasTask("uploadArchives") }
|
||||
sign configurations.archives
|
||||
}
|
||||
|
||||
uploadArchives {
|
||||
repositories {
|
||||
mavenDeployer {
|
||||
beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) }
|
||||
|
||||
repository(url: "https://oss.sonatype.org/service/local/staging/deploy/maven2/") {
|
||||
authentication(userName: SONATYPE_USERNAME, password: SONATYPE_PASSWORD)
|
||||
}
|
||||
snapshotRepository(url: "https://oss.sonatype.org/content/repositories/snapshots/") {
|
||||
authentication(userName: SONATYPE_USERNAME, password: SONATYPE_PASSWORD)
|
||||
}
|
||||
|
||||
pom.project {
|
||||
packaging 'jar'
|
||||
|
||||
name 'vtm'
|
||||
description 'OpenGL vector map library written in Java - running on Android, iOS, Desktop and within the browser.'
|
||||
url 'https://github.com/mapsforge/vtm'
|
||||
|
||||
publishing {
|
||||
publications {
|
||||
maven(MavenPublication) {
|
||||
pom {
|
||||
name = 'VTM'
|
||||
description = 'OpenGL vector map library - running on Android, iOS, Desktop and browser.'
|
||||
url = 'https://github.com/mapsforge/vtm'
|
||||
licenses {
|
||||
license {
|
||||
name 'GNU Lesser GPL'
|
||||
url 'http://www.gnu.org/licenses/lgpl.html'
|
||||
distribution 'repo'
|
||||
name = 'GNU Lesser GPL'
|
||||
url = 'https://www.gnu.org/licenses/lgpl.html'
|
||||
}
|
||||
}
|
||||
|
||||
scm {
|
||||
connection 'scm:git:https://github.com/mapsforge/vtm'
|
||||
developerConnection 'scm:git:https://github.com/mapsforge/vtm'
|
||||
url 'https://github.com/mapsforge/vtm'
|
||||
}
|
||||
|
||||
developers {
|
||||
developer {
|
||||
id 'hannes.janetzek'
|
||||
name 'Hannes Janetzek'
|
||||
email 'hannes.janetzek@gmail.com'
|
||||
id = 'hannes.janetzek'
|
||||
name = 'Hannes Janetzek'
|
||||
email = 'hannes.janetzek@gmail.com'
|
||||
}
|
||||
developer {
|
||||
id 'devemux86'
|
||||
name 'Emux'
|
||||
email 'devemux86@gmail.com'
|
||||
id = 'devemux86'
|
||||
name = 'Emux'
|
||||
email = 'devemux86@gmail.com'
|
||||
}
|
||||
}
|
||||
scm {
|
||||
connection = 'scm:git:https://github.com/mapsforge/vtm'
|
||||
developerConnection = 'scm:git:https://github.com/mapsforge/vtm'
|
||||
url = 'https://github.com/mapsforge/vtm'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
repositories {
|
||||
maven {
|
||||
def releasesRepoUrl = 'https://oss.sonatype.org/service/local/staging/deploy/maven2/'
|
||||
def snapshotsRepoUrl = 'https://oss.sonatype.org/content/repositories/snapshots/'
|
||||
url = version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl
|
||||
credentials {
|
||||
username = SONATYPE_USERNAME
|
||||
password = SONATYPE_PASSWORD
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
signing {
|
||||
required { !version.endsWith('SNAPSHOT') }
|
||||
sign publishing.publications.maven
|
||||
}
|
||||
|
||||
javadoc {
|
||||
if (JavaVersion.current().isJava9Compatible()) {
|
||||
options.addBooleanOption('html5', true)
|
||||
}
|
||||
}
|
||||
|
@ -1,8 +1,24 @@
|
||||
# Applications using VTM software (in lexical order)
|
||||
|
||||
|**Name**|**Type**|**License/Cost**|**Sources**|
|
||||
|--------|--------|----------------|-----------|
|
||||
| [Cachebox 3.0](https://github.com/Longri/cachebox3.0) | Android / Desktop / iOS geocaching application | GPL/Free | Open |
|
||||
| [Cruiser](http://wiki.openstreetmap.org/wiki/Cruiser) | Android / Desktop map and navigation application | Proprietary/Free | Closed |
|
||||
|
||||
You know an application that is missing here? Please inform us by sending a message via our public [mailing list](https://groups.google.com/group/mapsforge-dev).
|
||||
|**Name**|**Type**|**License/Cost**|**Platforms**|**Sources**|
|
||||
|--------|--------|----------------|-------------|-----------|
|
||||
| [AdvRider WD](https://play.google.com/store/apps/details?id=com.abware.watchdog_client) | Tool-set for the adventure rider | Proprietary/Free | Android | Closed |
|
||||
| [Cachebox 3.0](https://github.com/Longri/cachebox3.0) | Geocaching application | Apache 2.0/Free | Android, iOS, Desktop | Open |
|
||||
| [Cartograph Maps 3](https://www.cartograph.eu) | Map viewing and track recording | Proprietary/Free (in-app purchases) | Android, iOS, Desktop | Closed |
|
||||
| [Cruiser](https://wiki.openstreetmap.org/wiki/Cruiser) | Map and navigation platform | Proprietary/Free | Android, Desktop | Closed |
|
||||
| [GCDroid](https://play.google.com/store/apps/details?id=com.gcdroid) | Geocaching App | Proprietary/Free and Commercial | Android | Closed |
|
||||
| [GPSLogger II](https://play.google.com/store/apps/details?id=com.emacberry.gpslogger) | Map and navigation, Fitness & Cycling application | Proprietary/Free | Android | Closed |
|
||||
| [HabanaTrans](https://play.google.com/store/apps/details?id=cu.pabloapk.habanatrans&hl=es_419) | Public transport, map offline, gps, routing | Proprietary/Free | Android | Closed |
|
||||
| [Hunt Cyprus](https://play.google.com/store/apps/developer?id=Talent+S.A.) | Map and navigation application for hunters | Proprietary/Free and Commercial | Android | Closed |
|
||||
| [Kurviger](https://play.google.com/store/apps/details?id=gr.talent.kurviger) | Route planner specialized on motorcyclists | Proprietary/Free (in-app purchases) | Android | Closed |
|
||||
| [MyRunningApp](https://play.google.com/store/apps/details?id=it.nimarsolutions.rungpstracker) | Fitness app | Proprietary/Free | Android | Closed |
|
||||
| [MyTourbook](http://mytourbook.sourceforge.net/mytourbook/) | Visualize and analyze tours | GPL2/Free | Desktop | Open |
|
||||
| [Navi Cyprus](https://play.google.com/store/apps/developer?id=Talent+S.A.) | Map and navigation application | Proprietary/Free and Commercial | Android | Closed |
|
||||
| [Pocket Maps](https://github.com/junjunguo/PocketMaps) | Offline maps, routing & tracking functions | MIT/Free | Android | Open |
|
||||
| Tokyo Ogiqvo | Visualize App | Commercial | [Android](https://play.google.com/store/apps/details?id=com.ogiqvo.view.tokyo&hl=ja), [iOS](https://itunes.apple.com/us/app/tokyo-ogiqvo/id1097100677?mt=8) | Closed |
|
||||
| [topoGuide](http://www.topoguide.gr/index-en.php) | Digital guides for the outdoor | Proprietary/Free and Commercial | Android | Closed |
|
||||
| [Trekarta](https://github.com/andreynovikov/trekarta) | Application for outdoor activities | GPL3/Free and Commercial | Android | Open |
|
||||
| [Ubitrek](https://play.google.com/store/apps/details?id=ubicarta.ubitrek) | Hiking with IGN maps | Proprietary/Free | Android | Closed |
|
||||
| [VTM with Eclipse RCP](https://github.com/wolfgang-ch/vtm-with-rcp) | VTM with an Eclipse RCP application | GPL3/Free | Desktop | Open |
|
||||
| [Walkaholic](https://play.google.com/store/apps/details?id=com.walkaholic.hikeapp) | Hiking app with official routes and online/offline maps | Proprietary/Free (in-app purchases) | Android | Closed |
|
||||
| [XCTrack](http://xctrack.org/) | Flight computer for paraglider pilots | Proprietary/Free | Android | Closed |
|
||||
|
@ -2,14 +2,12 @@
|
||||
|
||||
As an open source project, we welcome new contributors and appreciate your help.
|
||||
|
||||
Before you start working on an unresolved issue or try to implement a new feature, please contact us via our public [mailing list](https://groups.google.com/group/mapsforge-dev).
|
||||
Before you start working on an unresolved issue or try to implement a new feature, please contact us via the Discussions. We will then discuss the best way to realize your proposal and figure out how we can help you to get started quickly.
|
||||
|
||||
You may also create a new issue on [Github](https://github.com/mapsforge/vtm/issues) or comment on an existing one to describe your ideas. We will then discuss the best way to realize your proposal and figure out how we can help you to get started quickly.
|
||||
|
||||
If you are only requesting a small change in the code, you may attach a patch file to the corresponding issue, but it is best to create a pull request on Github. Make sure that your patch is derived from the latest version in our **master** repository, otherwise we might be unable to apply it. Please follow our code and style conventions.
|
||||
If you are only requesting a small change in the code, you may attach a patch file to the corresponding issue, but it is best to create a pull request on Github. Make sure that your patch is derived from the latest version in our **master** repository, otherwise we might be unable to apply it. Important is to keep pull requests simple with one feature in each. Please follow our code and style conventions.
|
||||
|
||||
Also please keep the pull request commits squashed, in order to avoid the clutter in repository and have only the finally changed files together. One way is described [here](http://gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html).
|
||||
|
||||
Regarding syntax make sure your IDE uses for indentation 4 spaces (no tabs) and follow the conventions you already see in the code.
|
||||
Regarding code make sure your IDE uses UTF-8 encoding, for indentation 4 spaces (no tabs) and follow the conventions you already see in the code.
|
||||
|
||||
Please note that the VTM project is licenced under the [GNU LGPL3 licence](http://www.gnu.org/licenses/lgpl.html). Thus, all your contributions are going to be published under this license.
|
@ -1,40 +1,297 @@
|
||||
# Changelog
|
||||
|
||||
## Version 0.6.X
|
||||
|
||||
### Version 0.6.0 (2016-10-28) -- VTM revive
|
||||
|
||||
- Same as 0.6.0-rc3
|
||||
|
||||
#### Version 0.6.0-rc3 (2016-10-22)
|
||||
## New since 0.19.0
|
||||
|
||||
- Motorider map theme [#1045](https://github.com/mapsforge/vtm/pull/1045)
|
||||
- Minor improvements and bug fixes
|
||||
- [Solved issues](https://github.com/mapsforge/vtm/issues?q=is%3Aclosed+milestone%3A0.20.0)
|
||||
|
||||
#### Version 0.6.0-rc2 (2016-10-16)
|
||||
## Version 0.19.0 (2023-04-26)
|
||||
|
||||
- Location layer [#171](https://github.com/mapsforge/vtm/issues/171)
|
||||
- Render themes: line texture improvements [#1008](https://github.com/mapsforge/vtm/pull/1008)
|
||||
- Biker map theme [#995](https://github.com/mapsforge/vtm/pull/995)
|
||||
- MVT simplification [#956](https://github.com/mapsforge/vtm/pull/956)
|
||||
- `Parameters.SIMPLIFICATION_TOLERANCE`, `Parameters.SIMPLIFICATION_EXCEPTIONS`
|
||||
- libGDX 1.11.0 [#972](https://github.com/mapsforge/vtm/pull/972) [#977](https://github.com/mapsforge/vtm/pull/977)
|
||||
- Disable `vtm-jeo` [#997](https://github.com/mapsforge/vtm/pull/997)
|
||||
- Minor improvements and bug fixes
|
||||
- [Solved issues](https://github.com/mapsforge/vtm/issues?q=is%3Aclosed+milestone%3A0.19.0)
|
||||
|
||||
#### Version 0.6.0-rc1 (2016-10-08)
|
||||
## Version 0.18.0 (2022-06-18)
|
||||
|
||||
- Mapsforge: deduplicate maps [#903](https://github.com/mapsforge/vtm/pull/903)
|
||||
- Fix overlapping map regions [#903](https://github.com/mapsforge/vtm/pull/903) [#905](https://github.com/mapsforge/vtm/pull/905)
|
||||
- Fix `vtm-jni64.dll` [#911](https://github.com/mapsforge/vtm/pull/911)
|
||||
- Mapsforge: simplification exceptions [#906](https://github.com/mapsforge/vtm/pull/906)
|
||||
- `Parameters.SIMPLIFICATION_EXCEPTIONS`
|
||||
- Minor improvements and bug fixes
|
||||
- [Solved issues](https://github.com/mapsforge/vtm/issues?q=is%3Aclosed+milestone%3A0.18.0)
|
||||
|
||||
## Version 0.17.0 (2022-01-03)
|
||||
|
||||
- Drawable style point reduction option [#862](https://github.com/mapsforge/vtm/pull/862)
|
||||
- Drawable style texture repeat option [#862](https://github.com/mapsforge/vtm/pull/862)
|
||||
- Draggable marker Android sample [#869](https://github.com/mapsforge/vtm/pull/869)
|
||||
- Move cluster experiment in samples [#858](https://github.com/mapsforge/vtm/pull/858)
|
||||
- Minor improvements and bug fixes
|
||||
- [Solved issues](https://github.com/mapsforge/vtm/issues?q=is%3Aclosed+milestone%3A0.17.0)
|
||||
|
||||
## Version 0.16.0 (2021-05-27)
|
||||
|
||||
- Android: scoped storage map / theme example [#804](https://github.com/mapsforge/vtm/pull/804)
|
||||
- Render theme from zip archive [#804](https://github.com/mapsforge/vtm/pull/804)
|
||||
- Render themes: custom resource providers [#804](https://github.com/mapsforge/vtm/pull/804)
|
||||
- Nautical unit adapter with feet [#803](https://github.com/mapsforge/vtm/pull/803)
|
||||
- Distant labels rendering option [#844](https://github.com/mapsforge/vtm/pull/844)
|
||||
- `Parameters.DISTANT_LABELS`
|
||||
- Minor improvements and bug fixes
|
||||
- [Solved issues](https://github.com/mapsforge/vtm/issues?q=is%3Aclosed+milestone%3A0.16.0)
|
||||
|
||||
## Version 0.15.0 (2021-01-01)
|
||||
|
||||
- Android: scoped storage map example [#785](https://github.com/mapsforge/vtm/pull/785)
|
||||
- Mapsforge: map stream support [#784](https://github.com/mapsforge/vtm/pull/784)
|
||||
- Render theme from Android content providers [#783](https://github.com/mapsforge/vtm/pull/783)
|
||||
- Render theme xml pull parser [#786](https://github.com/mapsforge/vtm/pull/786)
|
||||
- Symbol scale option [#790](https://github.com/mapsforge/vtm/pull/790)
|
||||
- `Parameters.SYMBOL_SCALING`
|
||||
- Minor improvements and bug fixes
|
||||
- [Solved issues](https://github.com/mapsforge/vtm/issues?q=is%3Aclosed+milestone%3A0.15.0)
|
||||
|
||||
## Version 0.14.0 (2020-08-25)
|
||||
|
||||
- Render themes: symbol styles [#769](https://github.com/mapsforge/vtm/pull/769)
|
||||
- More mutable itemized layer [#771](https://github.com/mapsforge/vtm/pull/771)
|
||||
- Marker renderer sort option
|
||||
- `Parameters.MARKER_SORT`
|
||||
- Update vtm-jeo module [#770](https://github.com/mapsforge/vtm/pull/770)
|
||||
- Minor improvements and bug fixes
|
||||
- [Solved issues](https://github.com/mapsforge/vtm/issues?q=is%3Aclosed+milestone%3A0.14.0)
|
||||
|
||||
## Version 0.13.0 (2020-01-12)
|
||||
|
||||
- Render themes: symbols on lines with billboard / rotation [#743](https://github.com/mapsforge/vtm/pull/743)
|
||||
- Location texture renderer: rewrite and optimize [#750](https://github.com/mapsforge/vtm/pull/750)
|
||||
- Fix stroke cap line ending [#758](https://github.com/mapsforge/vtm/pull/758)
|
||||
- Mapsforge: fix ways precision loss [#752](https://github.com/mapsforge/vtm/pull/752)
|
||||
- Mapsforge: additional simplification [#757](https://github.com/mapsforge/vtm/pull/757)
|
||||
- `Parameters.SIMPLIFICATION_TOLERANCE`
|
||||
- Android: OpenGL ES 2.0 default for performance / stability [#749](https://github.com/mapsforge/vtm/pull/749)
|
||||
- `MapView.OPENGL_VERSION`
|
||||
- Android: threaded system initialization
|
||||
- `Parameters.THREADED_INIT`
|
||||
- Minor improvements and bug fixes
|
||||
- [Solved issues](https://github.com/mapsforge/vtm/issues?q=is%3Aclosed+milestone%3A0.13.0)
|
||||
|
||||
## Version 0.12.0 (2019-09-17)
|
||||
|
||||
- MBTiles vector tile source (Android) [#740](https://github.com/mapsforge/vtm/pull/740)
|
||||
- vtm-android-mvt module
|
||||
- Render themes: text background color [#737](https://github.com/mapsforge/vtm/pull/737)
|
||||
- vtm-desktop-lwjgl module [#714](https://github.com/mapsforge/vtm/pull/714)
|
||||
- vtm-desktop-lwjgl3 module [#717](https://github.com/mapsforge/vtm/pull/717)
|
||||
- Fix marker touch events [#723](https://github.com/mapsforge/vtm/issues/723)
|
||||
- Calculation of centroids for all polygons [#734](https://github.com/mapsforge/vtm/pull/734)
|
||||
- `Parameters.POLY_CENTROID`
|
||||
- Disable optimal placement of labels or symbols on polygons
|
||||
- `Parameters.POLY_LABEL`
|
||||
- Android 10 compatibility [#728](https://github.com/mapsforge/vtm/issues/728)
|
||||
- libGDX 1.9.10 [#731](https://github.com/mapsforge/vtm/issues/731)
|
||||
- Minor improvements and bug fixes
|
||||
- [Solved issues](https://github.com/mapsforge/vtm/issues?q=is%3Aclosed+milestone%3A0.12.0)
|
||||
|
||||
## Version 0.11.1 (2019-04-12)
|
||||
|
||||
- MBTiles raster tile source (Android) [#708](https://github.com/mapsforge/vtm/pull/708)
|
||||
- Fix Android 4.2 crash [#713](https://github.com/mapsforge/vtm/issues/713)
|
||||
- Minor improvements and bug fixes
|
||||
- [Solved issues](https://github.com/mapsforge/vtm/issues?q=is%3Aclosed+milestone%3A0.11.1)
|
||||
|
||||
## Version 0.11.0 (2019-03-25)
|
||||
|
||||
- Render themes: tag transform [#420](https://github.com/mapsforge/vtm/issues/420)
|
||||
- Render themes: PNG scaling [#595](https://github.com/mapsforge/vtm/issues/595)
|
||||
- Building shadows [#575](https://github.com/mapsforge/vtm/issues/575)
|
||||
- Map scaling improvements [#401](https://github.com/mapsforge/vtm/issues/401)
|
||||
- PathLayer(s) scaled width [#594](https://github.com/mapsforge/vtm/issues/594)
|
||||
- Mapilion MVT vector tiles & Hillshading [#614](https://github.com/mapsforge/vtm/issues/614)
|
||||
- Overpass tile source [#663](https://github.com/mapsforge/vtm/issues/663)
|
||||
- vtm-gdx-poi3d module [#600](https://github.com/mapsforge/vtm/pull/600)
|
||||
- vtm-models module [#580](https://github.com/mapsforge/vtm/issues/580)
|
||||
- `ViewController` refactor [#625](https://github.com/mapsforge/vtm/pull/625)
|
||||
- `getMapViewCenter`, `setMapViewCenter` with pivotX, pivotY
|
||||
- `ThemeCallback.getColor` refactor [#274](https://github.com/mapsforge/vtm/issues/274)
|
||||
- Enable physical fling and fling on rotation / scale
|
||||
- `Parameters.ANIMATOR2`
|
||||
- Enable optimal placement of labels or symbols on polygons
|
||||
- `Parameters.POLY_LABEL`
|
||||
- Enable placement of symbols on polygons
|
||||
- `Parameters.POLY_SYMBOL`
|
||||
- OpenGL ES 3.0 support [#646](https://github.com/mapsforge/vtm/issues/646)
|
||||
- OpenGL ES 2.0 complete [#642](https://github.com/mapsforge/vtm/pull/642)
|
||||
- libGDX 1.9.9 [#635](https://github.com/mapsforge/vtm/issues/635)
|
||||
- Minor improvements and bug fixes
|
||||
- [Solved issues](https://github.com/mapsforge/vtm/issues?q=is%3Aclosed+milestone%3A0.11.0)
|
||||
|
||||
## Version 0.10.0 (2018-08-28)
|
||||
|
||||
- Map overzoom [#393](https://github.com/mapsforge/vtm/issues/393)
|
||||
- Buildings overzoom [#503](https://github.com/mapsforge/vtm/issues/503)
|
||||
- Labels / symbols overzoom [#544](https://github.com/mapsforge/vtm/pull/544)
|
||||
- S3DB layer [#475](https://github.com/mapsforge/vtm/pull/475)
|
||||
- vtm-mvt module with MVT tile decoder [#481](https://github.com/mapsforge/vtm/pull/481)
|
||||
- Nextzen MVT / GeoJSON vector tiles [#498](https://github.com/mapsforge/vtm/issues/498)
|
||||
- OpenMapTiles MVT vector tiles [#482](https://github.com/mapsforge/vtm/issues/482)
|
||||
- Location texture renderer [#547](https://github.com/mapsforge/vtm/issues/547)
|
||||
- Render themes: symbols on lines [#495](https://github.com/mapsforge/vtm/issues/495)
|
||||
- Render themes: styles improvements [#479](https://github.com/mapsforge/vtm/pull/479)
|
||||
- Internal render themes improvements [#488](https://github.com/mapsforge/vtm/pull/488)
|
||||
- Map view roll [#474](https://github.com/mapsforge/vtm/pull/474)
|
||||
- Physical fling and fling on rotation / scale [#497](https://github.com/mapsforge/vtm/pull/497) [#499](https://github.com/mapsforge/vtm/pull/499)
|
||||
- `Parameters.ANIMATOR2`
|
||||
- Scale factor for short vertices calculation [#537](https://github.com/mapsforge/vtm/issues/537)
|
||||
- `Parameters.CUSTOM_COORD_SCALE`
|
||||
- Polygon symbols default disabled [#405](https://github.com/mapsforge/vtm/issues/405)
|
||||
- `Parameters.POLY_SYMBOL`
|
||||
- Map fractional zoom [#487](https://github.com/mapsforge/vtm/issues/487)
|
||||
- Render theme fallback internal resources [#477](https://github.com/mapsforge/vtm/issues/477)
|
||||
- Fix layers synchronization [#507](https://github.com/mapsforge/vtm/issues/507)
|
||||
- Fix Mapsforge clipping on small zooms [#264](https://github.com/mapsforge/vtm/issues/264)
|
||||
- Fix PathLayer (vtm) reverse segments [#220](https://github.com/mapsforge/vtm/issues/220)
|
||||
- Fix FadeStep alpha interpolation [#486](https://github.com/mapsforge/vtm/issues/486)
|
||||
- Fix libGDX flickering [#148](https://github.com/mapsforge/vtm/issues/148) [#149](https://github.com/mapsforge/vtm/issues/149)
|
||||
- ViewController refactor [#523](https://github.com/mapsforge/vtm/pull/523)
|
||||
- `ViewController.setScreenSize` renamed to `setViewSize`
|
||||
- `ViewController.setMapScreenCenter` renamed to `setMapViewCenter`
|
||||
- Android 9 compatibility [#550](https://github.com/mapsforge/vtm/issues/550)
|
||||
- JTS (LocationTech) [#484](https://github.com/mapsforge/vtm/issues/484)
|
||||
- SVG Salamander (JitPack) [#560](https://github.com/mapsforge/vtm/issues/560)
|
||||
- Minor improvements and bug fixes
|
||||
- [Solved issues](https://github.com/mapsforge/vtm/issues?q=is%3Aclosed+milestone%3A0.10.0)
|
||||
|
||||
## Version 0.9.2 (2018-01-04)
|
||||
|
||||
- Gradle fix transitive dependencies [#433](https://github.com/mapsforge/vtm/issues/433)
|
||||
- libGDX 1.9.8 [#464](https://github.com/mapsforge/vtm/issues/464)
|
||||
- [Solved issues](https://github.com/mapsforge/vtm/issues?q=is%3Aclosed+milestone%3A0.9.2)
|
||||
|
||||
## Version 0.9.1 (2017-12-29)
|
||||
|
||||
- LwHttp engine fix http headers [#460](https://github.com/mapsforge/vtm/issues/460)
|
||||
- S3DBLayer renamed to S3DBTileLayer [#452](https://github.com/mapsforge/vtm/issues/452)
|
||||
- Minor improvements and bug fixes
|
||||
- [Solved issues](https://github.com/mapsforge/vtm/issues?q=is%3Aclosed+milestone%3A0.9.1)
|
||||
|
||||
## Version 0.9.0 (2017-12-03)
|
||||
|
||||
- Mapsforge maps **v5** support [#429](https://github.com/mapsforge/vtm/issues/429)
|
||||
- Mapsforge themes compatibility [#100](https://github.com/mapsforge/vtm/issues/100)
|
||||
- Render themes: line symbol [#124](https://github.com/mapsforge/vtm/issues/124)
|
||||
- Render themes: stroke dash array [#131](https://github.com/mapsforge/vtm/issues/131)
|
||||
- PathLayer overlay touch events [#316](https://github.com/mapsforge/vtm/issues/316)
|
||||
- VectorLayer (polygon) overlay touch events [#424](https://github.com/mapsforge/vtm/issues/424)
|
||||
- Two finger tap zoom out gesture [#423](https://github.com/mapsforge/vtm/issues/423)
|
||||
- POI Search example [#394](https://github.com/mapsforge/vtm/issues/394)
|
||||
- Mapsforge Reverse Geocoding [#383](https://github.com/mapsforge/vtm/issues/383)
|
||||
- Core utilities [#396](https://github.com/mapsforge/vtm/issues/396)
|
||||
- `MercatorProjection.groundResolution` renamed to `groundResolutionWithScale`
|
||||
- Map scaling improvements [#401](https://github.com/mapsforge/vtm/issues/401)
|
||||
- Mapsforge fix artifacts zoom >17 [#231](https://github.com/mapsforge/vtm/issues/231)
|
||||
- Mapzen building extrusions [#419](https://github.com/mapsforge/vtm/issues/419)
|
||||
- BuildingLayer expects height tags in meters
|
||||
- Polygon symbol positioning [#405](https://github.com/mapsforge/vtm/issues/405)
|
||||
- PolyLabel default disabled [#402](https://github.com/mapsforge/vtm/issues/402)
|
||||
- `Parameters.POLY_LABEL`
|
||||
- vtm-theme-comparator module [#387](https://github.com/mapsforge/vtm/issues/387)
|
||||
- Feature parameters [#403](https://github.com/mapsforge/vtm/issues/403)
|
||||
- vtm-android-gdx module enhancements [#435](https://github.com/mapsforge/vtm/issues/435)
|
||||
- Gradle 4 / Android plugin 3 support [#433](https://github.com/mapsforge/vtm/issues/433)
|
||||
- libGDX 1.9.7 [#434](https://github.com/mapsforge/vtm/issues/434)
|
||||
- Internal render themes various improvements [#41](https://github.com/mapsforge/vtm/issues/41)
|
||||
- Minor improvements and bug fixes
|
||||
- [Solved issues](https://github.com/mapsforge/vtm/issues?q=is%3Aclosed+milestone%3A0.9.0)
|
||||
|
||||
## Version 0.8.0 (2017-07-19)
|
||||
|
||||
- Real time (SVG) texture atlas [#63](https://github.com/mapsforge/vtm/issues/63)
|
||||
- `Parameters.TEXTURE_ATLAS`
|
||||
- Marker clustering [#312](https://github.com/mapsforge/vtm/issues/312)
|
||||
- Osmagray theme [#300](https://github.com/mapsforge/vtm/issues/300)
|
||||
- Symbol rotation [#294](https://github.com/mapsforge/vtm/issues/294)
|
||||
- Location renderer improvements [#317](https://github.com/mapsforge/vtm/issues/317)
|
||||
- POT textures [#334](https://github.com/mapsforge/vtm/issues/334)
|
||||
- `Parameters.POT_TEXTURES`
|
||||
- OkHttp external cache [#135](https://github.com/mapsforge/vtm/issues/135)
|
||||
- Texture atlas improvements [#301](https://github.com/mapsforge/vtm/pull/301) [#304](https://github.com/mapsforge/vtm/pull/304)
|
||||
- vtm-json module [#367](https://github.com/mapsforge/vtm/issues/367)
|
||||
- Mapzen GeoJSON vector tiles [#55](https://github.com/mapsforge/vtm/issues/55)
|
||||
- vtm-ios-example module [#326](https://github.com/mapsforge/vtm/issues/326)
|
||||
- Handle layers enabled state [#342](https://github.com/mapsforge/vtm/issues/342)
|
||||
- Fix coord scale short overflow [#343](https://github.com/mapsforge/vtm/issues/343)
|
||||
- Mapsforge map read improvements [#357](https://github.com/mapsforge/vtm/issues/357) [#370](https://github.com/mapsforge/vtm/issues/370)
|
||||
- Improve canvas DPI setting [#349](https://github.com/mapsforge/vtm/issues/349)
|
||||
- OSM indoor layer enhancements [#366](https://github.com/mapsforge/vtm/issues/366)
|
||||
- Gretty plugin at web modules [#338](https://github.com/mapsforge/vtm/issues/338)
|
||||
- libGDX 1.9.6 [#333](https://github.com/mapsforge/vtm/issues/333)
|
||||
- Internal render themes various improvements [#41](https://github.com/mapsforge/vtm/issues/41)
|
||||
- Minor improvements and bug fixes
|
||||
- [Solved issues](https://github.com/mapsforge/vtm/issues?q=is%3Aclosed+milestone%3A0.8.0)
|
||||
|
||||
## Version 0.7.0 (2017-02-26)
|
||||
|
||||
- Mapsforge multiple map files [#208](https://github.com/mapsforge/vtm/issues/208)
|
||||
- New gestures implementation [#253](https://github.com/mapsforge/vtm/issues/253)
|
||||
- `Parameters.MAP_EVENT_LAYER2`
|
||||
- Polygon label position enhancements [#80](https://github.com/mapsforge/vtm/issues/80)
|
||||
- vtm-web modules update [#51](https://github.com/mapsforge/vtm/issues/51)
|
||||
- Mapzen MVT vector tiles [#57](https://github.com/mapsforge/vtm/issues/57)
|
||||
- SVG resources scaling in themes [#214](https://github.com/mapsforge/vtm/issues/214)
|
||||
- Circle map style [#122](https://github.com/mapsforge/vtm/issues/122)
|
||||
- Oneway arrows in themes [#275](https://github.com/mapsforge/vtm/issues/275)
|
||||
- Texture atlas from bitmaps [#283](https://github.com/mapsforge/vtm/pull/283)
|
||||
- PathLayer (vtm) fix disappearing segments [#108](https://github.com/mapsforge/vtm/issues/108)
|
||||
- House numbers (nodes) fix visibility [#168](https://github.com/mapsforge/vtm/issues/168)
|
||||
- Android fix quick scale vs long press [#250](https://github.com/mapsforge/vtm/issues/250)
|
||||
- Use baseline 160dpi in scaling [#236](https://github.com/mapsforge/vtm/issues/236)
|
||||
- OkHttp3 update [#138](https://github.com/mapsforge/vtm/issues/138)
|
||||
- libGDX double tap zoom [#263](https://github.com/mapsforge/vtm/issues/263)
|
||||
- MapFileTileSource zoom level API enhancements [#219](https://github.com/mapsforge/vtm/issues/219)
|
||||
- Animator enhancements with easing functions [#246](https://github.com/mapsforge/vtm/issues/246)
|
||||
- Tile grid layer scaling [#238](https://github.com/mapsforge/vtm/issues/238)
|
||||
- Internal render themes new SVG resources [#251](https://github.com/mapsforge/vtm/issues/251)
|
||||
- Fix theme parsing in non-Latin locales [#297](https://github.com/mapsforge/vtm/issues/297)
|
||||
- libGDX 1.9.5 [#270](https://github.com/mapsforge/vtm/issues/270)
|
||||
- Internal render themes various improvements [#41](https://github.com/mapsforge/vtm/issues/41)
|
||||
- Minor improvements and bug fixes
|
||||
- [Solved issues](https://github.com/mapsforge/vtm/issues?q=is%3Aclosed+milestone%3A0.7.0)
|
||||
|
||||
## Version 0.6.0 (2016-10-28) - VTM revival
|
||||
|
||||
- Mapsforge maps **v4** support [#34](https://github.com/mapsforge/vtm/issues/34)
|
||||
- Render theme SVG resources [#60](https://github.com/mapsforge/vtm/issues/60)
|
||||
- Mapsforge multilingual maps [#34](https://github.com/mapsforge/vtm/issues/34)
|
||||
- Render theme styles [#93](https://github.com/mapsforge/vtm/issues/93)
|
||||
- vtm-ios module update [#29](https://github.com/mapsforge/vtm/issues/29)
|
||||
- Native libraries for all platforms [#14](https://github.com/mapsforge/vtm/issues/14)
|
||||
- Line stipple and texture rendering [#105](https://github.com/mapsforge/vtm/issues/105)
|
||||
- Layer groups [#99](https://github.com/mapsforge/vtm/issues/99) [#103](https://github.com/mapsforge/vtm/issues/103)
|
||||
- Location renderer [#171](https://github.com/mapsforge/vtm/issues/171)
|
||||
- Group layer implementation [#99](https://github.com/mapsforge/vtm/issues/99)
|
||||
- Layer groups implementation [#103](https://github.com/mapsforge/vtm/issues/103)
|
||||
- Location renderer and layer [#171](https://github.com/mapsforge/vtm/issues/171)
|
||||
- Map scale bar [#84](https://github.com/mapsforge/vtm/issues/84)
|
||||
- Tile size based on scale factor [#183](https://github.com/mapsforge/vtm/issues/183)
|
||||
- `Parameters.CUSTOM_TILE_SIZE`
|
||||
- libGDX layer gestures [#151](https://github.com/mapsforge/vtm/issues/151)
|
||||
- Render theme area tessellation option [#37](https://github.com/mapsforge/vtm/issues/37)
|
||||
- Render theme resources optional location prefixes [#66](https://github.com/mapsforge/vtm/issues/66)
|
||||
- Render theme from input stream [#161](https://github.com/mapsforge/vtm/issues/161)
|
||||
- Render theme from Android assets [#162](https://github.com/mapsforge/vtm/issues/162)
|
||||
- Graphics API platform enhancements [#92](https://github.com/mapsforge/vtm/issues/92)
|
||||
- GeoPoint & BoundingBox improvements [#201](https://github.com/mapsforge/vtm/issues/201) [#200](https://github.com/mapsforge/vtm/issues/200)
|
||||
- vtm-jts module [#53](https://github.com/mapsforge/vtm/issues/53)
|
||||
- vtm-http module [#140](https://github.com/mapsforge/vtm/issues/140)
|
||||
- Internal render themes various improvements [#41](https://github.com/mapsforge/vtm/issues/41)
|
||||
- LWJGL desktop libGDX backend [#129](https://github.com/mapsforge/vtm/issues/129)
|
||||
- Available on [Maven Central](https://search.maven.org/search?q=g:org.mapsforge)
|
||||
- SNAPSHOT builds publish to Sonatype OSSRH [#165](https://github.com/mapsforge/vtm/issues/165)
|
||||
- Many other minor improvements and bug fixes
|
||||
- [Solved issues](https://github.com/mapsforge/vtm/issues?q=is%3Aissue+is%3Aclosed+milestone%3A0.6.0)
|
||||
- libGDX 1.9.4 [#164](https://github.com/mapsforge/vtm/issues/164)
|
||||
- Internal render themes various improvements [#41](https://github.com/mapsforge/vtm/issues/41)
|
||||
- Minor improvements and bug fixes
|
||||
- [Solved issues](https://github.com/mapsforge/vtm/issues?q=is%3Aclosed+milestone%3A0.6.0)
|
||||
|
1
docs/ISSUE_TEMPLATE.md
Normal file
@ -0,0 +1 @@
|
||||
For questions, reports and feature requests please use the Discussions.
|
@ -1,25 +1,44 @@
|
||||
# Integration guide
|
||||
|
||||
This article describes how to integrate the library in your project.
|
||||
This article describes how to integrate the library in your project, with Gradle / Maven / Jars or SNAPSHOT builds.
|
||||
|
||||
Current version is [](https://maven-badges.herokuapp.com/maven-central/org.mapsforge/vtm)
|
||||
Current version is [](https://search.maven.org/search?q=g:org.mapsforge)
|
||||
|
||||
## Gradle
|
||||
|
||||
### Core
|
||||
```groovy
|
||||
compile 'org.mapsforge:vtm:[CURRENT-VERSION]'
|
||||
compile 'org.mapsforge:vtm-themes:[CURRENT-VERSION]'
|
||||
compile 'org.slf4j:slf4j-api:1.7.21'
|
||||
implementation 'org.mapsforge:vtm:[CURRENT-VERSION]'
|
||||
implementation 'org.mapsforge:vtm-themes:[CURRENT-VERSION]'
|
||||
implementation 'org.slf4j:slf4j-api:1.7.28'
|
||||
```
|
||||
|
||||
### Android
|
||||
```groovy
|
||||
compile 'org.mapsforge:vtm-android:[CURRENT-VERSION]'
|
||||
compile 'org.mapsforge:vtm-android:[CURRENT-VERSION]:natives-armeabi'
|
||||
compile 'org.mapsforge:vtm-android:[CURRENT-VERSION]:natives-armeabi-v7a'
|
||||
compile 'org.mapsforge:vtm-android:[CURRENT-VERSION]:natives-x86'
|
||||
compile 'com.caverock:androidsvg:1.2.2-beta-1'
|
||||
runtimeOnly 'org.mapsforge:vtm-android:[CURRENT-VERSION]:natives-armeabi-v7a'
|
||||
runtimeOnly 'org.mapsforge:vtm-android:[CURRENT-VERSION]:natives-arm64-v8a'
|
||||
runtimeOnly 'org.mapsforge:vtm-android:[CURRENT-VERSION]:natives-x86'
|
||||
runtimeOnly 'org.mapsforge:vtm-android:[CURRENT-VERSION]:natives-x86_64'
|
||||
implementation 'org.mapsforge:vtm-android:[CURRENT-VERSION]'
|
||||
implementation 'com.caverock:androidsvg:1.4'
|
||||
```
|
||||
|
||||
### Android (libGDX)
|
||||
```groovy
|
||||
runtimeOnly 'org.mapsforge:vtm-android:[CURRENT-VERSION]:natives-armeabi-v7a'
|
||||
runtimeOnly 'org.mapsforge:vtm-android:[CURRENT-VERSION]:natives-arm64-v8a'
|
||||
runtimeOnly 'org.mapsforge:vtm-android:[CURRENT-VERSION]:natives-x86'
|
||||
runtimeOnly 'org.mapsforge:vtm-android:[CURRENT-VERSION]:natives-x86_64'
|
||||
implementation 'org.mapsforge:vtm-android:[CURRENT-VERSION]'
|
||||
implementation 'org.mapsforge:vtm-gdx:[CURRENT-VERSION]'
|
||||
runtimeOnly 'org.mapsforge:vtm-android-gdx:[CURRENT-VERSION]:natives-armeabi-v7a'
|
||||
runtimeOnly 'org.mapsforge:vtm-android-gdx:[CURRENT-VERSION]:natives-arm64-v8a'
|
||||
runtimeOnly 'org.mapsforge:vtm-android-gdx:[CURRENT-VERSION]:natives-x86'
|
||||
runtimeOnly 'org.mapsforge:vtm-android-gdx:[CURRENT-VERSION]:natives-x86_64'
|
||||
implementation 'org.mapsforge:vtm-android-gdx:[CURRENT-VERSION]'
|
||||
implementation 'com.badlogicgames.gdx:gdx:1.11.0'
|
||||
implementation 'com.badlogicgames.gdx:gdx-backend-android:1.11.0'
|
||||
implementation 'com.caverock:androidsvg:1.4'
|
||||
```
|
||||
|
||||
### iOS
|
||||
@ -28,24 +47,100 @@ Detailed iOS instructions can be found [here](ios.md).
|
||||
|
||||
### Desktop
|
||||
```groovy
|
||||
compile 'org.mapsforge:vtm-gdx:[CURRENT-VERSION]'
|
||||
compile 'org.mapsforge:vtm-desktop:[CURRENT-VERSION]'
|
||||
compile 'org.mapsforge:vtm-desktop:[CURRENT-VERSION]:natives-linux'
|
||||
compile 'org.mapsforge:vtm-desktop:[CURRENT-VERSION]:natives-osx'
|
||||
compile 'org.mapsforge:vtm-desktop:[CURRENT-VERSION]:natives-windows'
|
||||
compile 'com.badlogicgames.gdx:gdx:1.9.4'
|
||||
compile 'com.badlogicgames.gdx:gdx-platform:1.9.4:natives-desktop'
|
||||
compile 'com.badlogicgames.gdx:gdx-backend-lwjgl:1.9.4'
|
||||
compile 'org.lwjgl.lwjgl:lwjgl:2.9.3'
|
||||
compile 'org.lwjgl.lwjgl:lwjgl-platform:2.9.3:natives-linux'
|
||||
compile 'org.lwjgl.lwjgl:lwjgl-platform:2.9.3:natives-osx'
|
||||
compile 'org.lwjgl.lwjgl:lwjgl-platform:2.9.3:natives-windows'
|
||||
compile 'com.kitfox.svg:svg-salamander:1.0'
|
||||
implementation 'org.mapsforge:vtm-gdx:[CURRENT-VERSION]'
|
||||
implementation 'org.mapsforge:vtm-desktop:[CURRENT-VERSION]'
|
||||
runtimeOnly 'org.mapsforge:vtm-desktop:[CURRENT-VERSION]:natives-linux'
|
||||
runtimeOnly 'org.mapsforge:vtm-desktop:[CURRENT-VERSION]:natives-osx'
|
||||
runtimeOnly 'org.mapsforge:vtm-desktop:[CURRENT-VERSION]:natives-windows'
|
||||
implementation 'com.badlogicgames.gdx:gdx:1.11.0'
|
||||
runtimeOnly 'com.badlogicgames.gdx:gdx-platform:1.11.0:natives-desktop'
|
||||
implementation 'guru.nidi.com.kitfox:svgSalamander:1.1.3'
|
||||
implementation 'net.sf.kxml:kxml2:2.3.0'
|
||||
```
|
||||
|
||||
### Desktop (LWJGL)
|
||||
```groovy
|
||||
implementation 'org.mapsforge:vtm-desktop-lwjgl:[CURRENT-VERSION]'
|
||||
implementation 'com.badlogicgames.gdx:gdx-backend-lwjgl:1.11.0'
|
||||
implementation 'org.lwjgl.lwjgl:lwjgl:2.9.3'
|
||||
runtimeOnly 'org.lwjgl.lwjgl:lwjgl-platform:2.9.3:natives-linux'
|
||||
runtimeOnly 'org.lwjgl.lwjgl:lwjgl-platform:2.9.3:natives-osx'
|
||||
runtimeOnly 'org.lwjgl.lwjgl:lwjgl-platform:2.9.3:natives-windows'
|
||||
```
|
||||
|
||||
### Desktop (LWJGL 3)
|
||||
```groovy
|
||||
implementation 'org.mapsforge:vtm-desktop-lwjgl3:[CURRENT-VERSION]'
|
||||
implementation 'com.badlogicgames.gdx:gdx-backend-lwjgl3:1.11.0'
|
||||
implementation 'org.lwjgl:lwjgl:3.3.1'
|
||||
runtimeOnly 'org.lwjgl:lwjgl:3.3.1:natives-linux'
|
||||
runtimeOnly 'org.lwjgl:lwjgl:3.3.1:natives-macos'
|
||||
runtimeOnly 'org.lwjgl:lwjgl:3.3.1:natives-windows'
|
||||
```
|
||||
|
||||
### JTS geometries
|
||||
|
||||
```groovy
|
||||
implementation 'org.mapsforge:vtm-jts:[CURRENT-VERSION]'
|
||||
// https://github.com/locationtech/jts/issues/145
|
||||
implementation 'org.locationtech.jts:jts-core:1.15.1'
|
||||
```
|
||||
|
||||
### Online tiles
|
||||
|
||||
```groovy
|
||||
implementation 'org.mapsforge:vtm-http:[CURRENT-VERSION]'
|
||||
// https://github.com/square/okhttp/issues/4481
|
||||
implementation 'com.squareup.okhttp3:okhttp:3.12.13'
|
||||
implementation 'com.squareup.okio:okio:1.15.0'
|
||||
```
|
||||
|
||||
### MBTiles (Android)
|
||||
|
||||
```groovy
|
||||
implementation 'org.mapsforge:vtm-android-mvt:[CURRENT-VERSION]'
|
||||
implementation 'org.mapsforge:vtm-mvt:[CURRENT-VERSION]'
|
||||
implementation 'com.google.protobuf:protobuf-java:3.6.1'
|
||||
implementation 'com.wdtinc:mapbox-vector-tile:3.1.0'
|
||||
// https://github.com/locationtech/jts/issues/145
|
||||
implementation 'org.locationtech.jts:jts-core:1.15.1'
|
||||
```
|
||||
|
||||
### Mapbox vector tiles
|
||||
|
||||
```groovy
|
||||
implementation 'org.mapsforge:vtm-mvt:[CURRENT-VERSION]'
|
||||
implementation 'com.google.protobuf:protobuf-java:3.6.1'
|
||||
implementation 'com.wdtinc:mapbox-vector-tile:3.1.0'
|
||||
// https://github.com/locationtech/jts/issues/145
|
||||
implementation 'org.locationtech.jts:jts-core:1.15.1'
|
||||
```
|
||||
|
||||
### GeoJSON vector tiles
|
||||
|
||||
```groovy
|
||||
implementation 'org.mapsforge:vtm-json:[CURRENT-VERSION]'
|
||||
implementation 'com.fasterxml.jackson.core:jackson-annotations:2.9.9'
|
||||
implementation 'com.fasterxml.jackson.core:jackson-core:2.9.9'
|
||||
implementation 'com.fasterxml.jackson.core:jackson-databind:2.9.9'
|
||||
```
|
||||
|
||||
### jeo (indoor maps)
|
||||
|
||||
```groovy
|
||||
repositories {
|
||||
maven { url 'https://jitpack.io' }
|
||||
}
|
||||
|
||||
implementation 'org.mapsforge:vtm-jeo:[CURRENT-VERSION]'
|
||||
implementation('com.github.jeo.jeo:jeo-carto:master-SNAPSHOT') {
|
||||
exclude group: 'org.slf4j', module: 'slf4j-jdk14'
|
||||
}
|
||||
```
|
||||
|
||||
## Snapshots
|
||||
|
||||
We publish regularly SNAPSHOT builds to Sonatype OSS Repository Hosting.
|
||||
We publish SNAPSHOT builds to Sonatype OSS Repository Hosting.
|
||||
|
||||
You need to add the repository:
|
||||
```groovy
|
||||
@ -56,10 +151,17 @@ repositories {
|
||||
|
||||
And declare the dependencies like:
|
||||
```groovy
|
||||
compile 'org.mapsforge:vtm:master-SNAPSHOT'
|
||||
implementation 'org.mapsforge:vtm:master-SNAPSHOT'
|
||||
...
|
||||
```
|
||||
|
||||
For checking latest snapshot on every build:
|
||||
```groovy
|
||||
configurations.all {
|
||||
resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
|
||||
}
|
||||
```
|
||||
|
||||
## Maven
|
||||
|
||||
The dependencies for Maven are declared in a similar way. For example:
|
||||
@ -74,6 +176,6 @@ The dependencies for Maven are declared in a similar way. For example:
|
||||
|
||||
## Jars
|
||||
|
||||
You can find jars (regular and with dependencies) in Maven Central or Snapshots repositories.
|
||||
You can find release and snapshot jars (regular and with dependencies) in [Maven Central](https://search.maven.org/search?q=g:org.mapsforge) and [Sonatype OSS Repository Hosting](https://oss.sonatype.org/content/repositories/snapshots/org/mapsforge/).
|
||||
|
||||
Third party jars can be found at their respective sites or in Maven Central repository.
|
||||
|
11
docs/Mapsforge-Maps.md
Normal file
@ -0,0 +1,11 @@
|
||||
# Mapsforge map providers (in lexical order)
|
||||
|
||||
- [AndroidMaps](https://www.androidmaps.co.uk/)
|
||||
- [BBBike](https://extract.bbbike.org/?format=mapsforge-osm.zip)
|
||||
- [Freizeitkarte](https://www.freizeitkarte-osm.de/android/en/index.html)
|
||||
- [Kurviger](https://download.kurviger.de/)
|
||||
- [Mapsforge](https://download.mapsforge.org/) | [Mirror (fast)](http://ftp-stud.hs-esslingen.de/pub/Mirrors/download.mapsforge.org/)
|
||||
- [OpenAndroMaps](https://www.openandromaps.org/en/)
|
||||
- [OpenMaps](https://openmaps.eu/)
|
||||
- [paws.cz](https://osm.paws.cz/)
|
||||
- [vector.city](https://vector.city/)
|
278
docs/Rendertheme.md
Normal file
@ -0,0 +1,278 @@
|
||||
# RenderTheme
|
||||
|
||||
This article describes how to use XML-based render-themes to style maps.
|
||||
|
||||
## Introduction
|
||||
|
||||
A render-theme is an XML file which contains rules and rendering instructions. Such files can be used to customize the visual style of the rendered map. The vtm map library comes with built-in render-themes similar to the [Osmarender](http://wiki.openstreetmap.org/wiki/Osmarender) style. External render-theme files are also supported and can be activated via the `map.setTheme(ThemeLoader.load(File))` method at runtime.
|
||||
|
||||
Syntax and semantics of render-theme files are similar but not identical to [Osmarender rules](http://wiki.openstreetmap.org/wiki/Osmarender/Rules). A formal render-theme description exists as an *XML schema document*, it can be found in the [repository](https://github.com/mapsforge/vtm/blob/master/resources/rendertheme.xsd).
|
||||
|
||||
It is always recommended to study the [default](https://github.com/mapsforge/vtm/blob/master/vtm-themes/resources/assets/vtm/default.xml) built-in render theme.
|
||||
|
||||
## Rules
|
||||
|
||||
A rule element `<m/>` (_match_) has several attributes to specify which map elements the rule matches. Non of them is required.
|
||||
|
||||
|**Attribute**|**Valid values**|**Description**|**Default**|
|
||||
|-------------|----------------|---------------|------------|
|
||||
|e|<ul><li>node</li><li>way</li><li>any</li></ul>|Defines which map element type will be matched.|*any*|
|
||||
|k|[string](http://www.w3.org/TR/xmlschema-2/#string)|The key of the tile source tag. <ul><li>A vertical bar "`\|`" can be used to specify multiple keys.</li>|any key|
|
||||
|v|[string](http://www.w3.org/TR/xmlschema-2/#string)|The value of the tile source tag. <ul><li>A vertical bar "`\|`" can be used to specify multiple values.</li><li>A minus sign "`-`" excludes the other values after "`\|`". It never works alone.</li><li>A tilde "`~`" matches if the map element does not have a tag with the specified key.</li>|any value|
|
||||
|closed|<ul><li>yes</li><li>no</li><li>any</li></ul>|Defines which ways will be matched. A way is considered as closed if its first node and its last node are equal.|*any*|
|
||||
|select|<ul><li>first</li><li>when-matched</li><li>any</li></ul>|<ul><li>Only add the first matching sub-rule in this rule section (the others are ignored)</li><li>Select all matches of the enclosing rule section</li><li>Select all (whether it was matched or not)</li></ul>|*any*|
|
||||
|zoom-min|[unsigned byte](http://www.w3.org/TR/xmlschema-2/#unsignedByte)|The minimum zoom level on which the rule will be matched.|*0*|
|
||||
|zoom-max|[unsigned byte](http://www.w3.org/TR/xmlschema-2/#unsignedByte)|The maximum zoom level on which the rule will be matched.|*127*|
|
||||
|
||||
Rules can be nested to any level of depth. This can be used to define rendering instructions which depend on multiple rules. It may also be used to structure complex declarations and to avoid redundancy:
|
||||
|
||||
```xml
|
||||
<m e="way" closed="no">
|
||||
<m k="highway" v="motorway">
|
||||
<m k="tunnel" v="true|yes">
|
||||
…
|
||||
</m>
|
||||
<m k="tunnel" v="~|no|false">
|
||||
…
|
||||
</m>
|
||||
</m>
|
||||
</m>
|
||||
```
|
||||
|
||||
|
||||
Here is an example how to use the `select` attribute. The symbol is shown. The **bold** caption isn't visible cause only the first matched sub-rule is considered. The _italic_ caption is displayed as it was selected by the first sub-rule.
|
||||
|
||||
```xml
|
||||
<m k="railway" v="halt|tram_stop" zoom-min="15" select="first">
|
||||
<m v="tram_stop">
|
||||
<symbol src="assets:symbols/transport/tram_stop.svg" />
|
||||
</m>
|
||||
<m v="tram_stop">
|
||||
<caption style="bold" dy="20" fill="#af3a3a" k="name" size="12"/>
|
||||
</m>
|
||||
<m select="when-matched">
|
||||
<caption style="italic" dy="-20" fill="#222222" k="name" size="12"/>
|
||||
</m>
|
||||
</m>
|
||||
```
|
||||
|
||||
## Rendering Instructions
|
||||
|
||||
A rendering instruction specifies how a map element is drawn. Each rule element might include any number of rendering instructions. Except for labels and symbols, all rendering instructions are drawn on the map in the order of their definition.
|
||||
|
||||
At the moment, the following rendering instructions are available:
|
||||
|
||||
- `area`
|
||||
- `caption`
|
||||
- `circle`
|
||||
- `line`
|
||||
- `outline`
|
||||
- `lineSymbol`
|
||||
- `text`
|
||||
- `extrusion`
|
||||
- `symbol`
|
||||
|
||||
## Header Elements
|
||||
|
||||
The following header elements can be used:
|
||||
- `map-background`: a color value to set the color of a blank tile. This should not be used to set the color of the sea or land. Default is `#FFFFFF`.
|
||||
- `base-stroke-width`: set the basic width of strokes. Default is `1`.
|
||||
- `base-text-scale`: set the overall text scale. Default is `1`.
|
||||
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<rendertheme xmlns="http://opensciencemap.org/rendertheme" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://opensciencemap.org/rendertheme https://raw.githubusercontent.com/mapsforge/vtm/master/resources/rendertheme.xsd" version="1" map-background="#FFFCFA">
|
||||
…
|
||||
</rendertheme>
|
||||
```
|
||||
|
||||
## Texts and Captions
|
||||
|
||||
The most common attributes for textual styling:
|
||||
|
||||
|**Attribute**|**Valid values**|**Description**|**Default**|
|
||||
|-------------|----------------|---------------|-----------|
|
||||
|font-family|*default*, *default_bold*, *monospace*, *sans_serif*, *serif*, *thin*, *light*, *medium*, *black*, *condensed*|Set font family|*default*|
|
||||
|style|*bold*, *bold_italic*, *italic*, *normal*|Set font style|*normal*|
|
||||
|size|non negative [float](https://www.w3.org/TR/xmlschema-2/#float)|Set font size|*0*|
|
||||
|fill|[color](https://www.w3.org/TR/css-color-4)|Set fill color|*#000000*|
|
||||
|stroke|[color](https://www.w3.org/TR/css-color-4)|Set stroke color|*#000000*|
|
||||
|stroke-width|non negative [float](https://www.w3.org/TR/xmlschema-2/#float)|Set stroke width|*0*|
|
||||
|dy|[float](https://www.w3.org/TR/xmlschema-2/#float)|Offset in vertical direction|*0*|
|
||||
|
||||
## Styles
|
||||
|
||||
There are different possibilities to simplify and accelerate map styling or changing styles.
|
||||
|
||||
### Style patterns
|
||||
|
||||
If you want to use a specific style multiple times you not have to rewrite it for each text, line, area or symbol rule.
|
||||
If you define a style set an `id` and use it with `use` in your rendering instructions:
|
||||
- `style-text`
|
||||
- `style-line`
|
||||
- `style-area`
|
||||
- `style-symbol`
|
||||
|
||||
This example styles all areas with the_residential_ style, which haven't the `highway` or `building` key.
|
||||
|
||||
```xml
|
||||
<style-area fade="11" fill="#e8e7e3" id="residential" />
|
||||
|
||||
<m closed="yes" e="way" k="highway|building" v="~">
|
||||
<m v="residential|commercial|retail|farmyard">
|
||||
<area use="residential" />
|
||||
</m>
|
||||
</m>
|
||||
```
|
||||
|
||||
### Stylemenus
|
||||
|
||||
The **stylemenu** allows you to selectively turn rules on and off, in effect defining multiple layers in a map that can be controlled individually.
|
||||
|
||||
To make use of style menus, you will first need to group the elements of your map into categories by attaching a **cat** element to them.
|
||||
|
||||
```xml
|
||||
<m cat="areas" e="way" k="landuse" v="landfill|quarry" zoom-min="14">
|
||||
```
|
||||
|
||||
The same cat tag can be given to as many elements as you like, but each element can only have one cat tag.
|
||||
However, this does not limit your ability to group elements, as in the style definitions, multiple categories can be combined into one layer.
|
||||
|
||||
You can think about the cat tag as a switch that switches all elements in the rendertheme below it either on or off. If a category is turned off, all elements below it become invisible. If a category is turned on, all elements below become visible (unless they are themselves controlled via a category which is turned off).
|
||||
|
||||
Layers are combinations of categories that can be toggled on and off together and other layers (via **overlay**) that can be toggled on and off individually. In general, categories are not visible to a map user, but layers are. To make layers more user friendly, they can be named with the name tag in various languages.
|
||||
|
||||
```xml
|
||||
<layer id="public_transport" visible="true">
|
||||
<name lang="de" value="Öffentlicher Verkehr"/>
|
||||
<name lang="en" value="Public Transport"/>
|
||||
<name lang="es" value="Transporte público"/>
|
||||
<name lang="fr" value="Transport public"/>
|
||||
<cat id="public_transport"/>
|
||||
<cat id="rail"/>
|
||||
</layer>
|
||||
```
|
||||
|
||||
A set of layer definitions makes up a style:
|
||||
|
||||
```xml
|
||||
<stylemenu id="r4menu" defaultvalue="terrain" defaultlang="en">
|
||||
<layer id="shopping" visible="true">
|
||||
<name lang="de" value="Shopping"/>
|
||||
<name lang="en" value="Shopping"/>
|
||||
<name lang="es" value="Tiendas"/>
|
||||
<name lang="fr" value="Shopping"/>
|
||||
<cat id="shopping"/>
|
||||
</layer>
|
||||
|
||||
<layer id="terrain" visible="true">
|
||||
<name lang="de" value="Topographischer Hintergrund"/>
|
||||
<name lang="en" value="Topographic Colours"/>
|
||||
<name lang="es" value="Colores topográficos"/>
|
||||
<name lang="fr" value="Couleurs topographiques"/>
|
||||
<cat id="topo"/>
|
||||
</layer>
|
||||
</stylemenu>
|
||||
```
|
||||
|
||||
The **visible** attribute is meant to indicate which of the layers are visible in the user interface. Layers where visible is set to false should not be seen by a user, and are thus useful to build base-layers of common categories from which then user-visible layers can be inherited, like this:
|
||||
|
||||
```xml
|
||||
<layer id="base">
|
||||
<cat id="roads"/>
|
||||
<cat id="waterbodies"/>
|
||||
<cat id="landuse"/>
|
||||
<cat id="places"/>
|
||||
<overlay id="emergency"/>
|
||||
<overlay id="food"/>
|
||||
</layer>
|
||||
|
||||
<layer id="simple" parent="base" visible="true">
|
||||
<name lang="de" value="Auto"/>
|
||||
<name lang="en" value="Driving"/>
|
||||
<name lang="es" value="Conducción"/>
|
||||
<name lang="fr" value="Conduite"/>
|
||||
<cat id="transport"/>
|
||||
<cat id="barrier"/>
|
||||
<cat id="driving"/>
|
||||
<overlay id="parking"/>
|
||||
<overlay id="shopping"/>
|
||||
</layer>
|
||||
|
||||
<layer id="standard" parent="base" visible="true">
|
||||
<name lang="de" value="Stadt"/>
|
||||
<name lang="en" value="City"/>
|
||||
<name lang="es" value="City"/>
|
||||
<name lang="fr" value="Ville"/>
|
||||
<cat id="areas"/>
|
||||
<overlay id="tourism"/>
|
||||
<overlay id="sports"/>
|
||||
<overlay id="amenities"/>
|
||||
<overlay id="buildings"/>
|
||||
<overlay id="public_transport"/>
|
||||
<overlay id="accommodation"/>
|
||||
<overlay id="shopping"/>
|
||||
</layer>
|
||||
```
|
||||
|
||||
To turn layers on by default, add the **enabled=true** attribute. In this case, buildings should be by default visible, while parking related elements not:
|
||||
|
||||
```xml
|
||||
<layer id="parking">
|
||||
<name lang="de" value="Parkplätze"/>
|
||||
<name lang="en" value="Parking"/>
|
||||
<name lang="es" value="Aparcamiento"/>
|
||||
<name lang="fr" value="Parking"/>
|
||||
<cat id="parking"/>
|
||||
</layer>
|
||||
|
||||
<layer enabled="true" id="buildings">
|
||||
<name lang="de" value="Gebäude"/>
|
||||
<name lang="en" value="Buildings"/>
|
||||
<name lang="es" value="Edificios"/>
|
||||
<name lang="fr" value="Bâtiments"/>
|
||||
<cat id="buildings"/>
|
||||
</layer>
|
||||
```
|
||||
|
||||
#### Map Integration
|
||||
|
||||
The [Playground](https://github.com/mapsforge/vtm/blob/master/vtm-playground/src/org/oscim/test/MapsforgeStyleTest.java) and [Android](https://github.com/mapsforge/vtm/blob/master/vtm-android-example/src/org/oscim/android/test/MapsforgeStyleActivity.java) Samples app have a completely worked style menu.
|
||||
When a rendertheme is parsed, the style menu definitons are parsed and a callback is made into the application giving it access to the stylemenu definitions.
|
||||
|
||||
On Android, the stylemenus can thus be converted into standard Android settings, providing a seamless integration of the rendertheme definitions that do not require changes every time the rendertheme changes. There is an example on how to do this in the Samples app of Mapsforge, see the [Settings.java](https://github.com/mapsforge/mapsforge/blob/master/mapsforge-samples-android/src/main/java/org/mapsforge/samples/android/Settings.java) file in Mapsforge repository.
|
||||
|
||||
## Priorities
|
||||
|
||||
Labels and icons are drawn in order of priority. The default (and highest) priority is 0, so anything with a priority higher than 0 will only be drawn if the space is not yet taken up or has a lower priority value than its colliding elements.
|
||||
|
||||
_VTM priorities have the opposite meaning to the Mapsforge render-theme priorities._
|
||||
|
||||
```xml
|
||||
<m e="node" k="place" v="town" zoom-min="8">
|
||||
<caption priority="2" k="name" style="bold" size="14" fill="#333380" stroke="#FFFFFF" stroke-width="2.0"/>
|
||||
</m>
|
||||
<m e="node" k="place" v="city" zoom-min="6" zoom-max="6">
|
||||
<caption priority="0" k="name" style="bold" size="11" fill="#333380" stroke="#FFFFFF" stroke-width="2.0"/>
|
||||
</m>
|
||||
```
|
||||
|
||||
## Symbols
|
||||
|
||||
Symbols can be either defined in the raster PNG format or as vector graphics in SVG format. VTM uses libraries for [Android](https://github.com/BigBadaboom/androidsvg) and [Java](https://github.com/blackears/svgSalamander) that support a large subset of the [Tiny SVG](http://www.w3.org/TR/SVGTiny12/index.html) specification.
|
||||
|
||||
### SVG Scaling
|
||||
|
||||
SVG resources can be automatically scaled to accommodate different device resolutions.
|
||||
|
||||
The options available are:
|
||||
|
||||
- If no size is given, a svg is rendered to a 20x20px multiplied by the device scale factor and any user adjustments.
|
||||
- symbol-percent: the svg is rendered as a percentage size of its default size. This is the best way to make certain svg smaller or bigger than others.
|
||||
- symbol-width and/or symbol-height: additional parameters give the absolute pixel size for the symbol, again adjusted by the scale factors. If only one dimension is set, the other is calculated from aspect ratio.
|
||||
|
||||
### SVG Icon Design
|
||||
|
||||
If you want to know how to design your own icons, you can have a look at Google's [Material Design](https://material.io/design/iconography/system-icons.html) conventions.
|
||||
To keep SVG sizes down, it is advisable to make use of the reuse facilities within SVG files and to remove any unneccessary comments and metadata.
|
19
docs/desktop.md
Normal file
@ -0,0 +1,19 @@
|
||||
### Desktop
|
||||
|
||||
To run the desktop samples can use the Gradle `run` task.
|
||||
|
||||
e.g. for `vtm-playground` can change the [mainClassName](../vtm-playground/build.gradle) to run each sample and pass args:
|
||||
```groovy
|
||||
./gradlew :vtm-playground:run -Pargs=/path/to/map
|
||||
```
|
||||
|
||||
To create a standalone executable jar, adapt the main class in [build gradle](../vtm-playground/build.gradle), then run:
|
||||
```groovy
|
||||
./gradlew :vtm-playground:fatJar
|
||||
```
|
||||
The jar file can be found in `build/libs` folder. Depending on the main class, pass args on execution via command line:
|
||||
```
|
||||
java -jar vtm-playground-master-SNAPSHOT-jar-with-dependencies.jar /path/to/map
|
||||
```
|
||||
|
||||
To change the libGDX backend can replace the dependency: `vtm-desktop-lwjgl` or `vtm-desktop-lwjgl3`.
|
BIN
docs/images/android.png
Normal file
After Width: | Height: | Size: 2.5 MiB |
BIN
docs/images/browser.png
Normal file
After Width: | Height: | Size: 1.3 MiB |
BIN
docs/images/desktop.png
Normal file
After Width: | Height: | Size: 1.6 MiB |
BIN
docs/images/ios.png
Normal file
After Width: | Height: | Size: 450 KiB |
Before Width: | Height: | Size: 827 KiB |
Before Width: | Height: | Size: 1.1 MiB |
35
docs/logo/OSciMap.svg
Normal file
@ -0,0 +1,35 @@
|
||||
<?xml version="1.0" encoding="utf-8"?><!-- Generator: Adobe Illustrator 16.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) --><!DOCTYPE svg PUBLIC
|
||||
"-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="800px"
|
||||
height="800px" viewBox="0 0 800 800" enable-background="new 0 0 800 800" xml:space="preserve">
|
||||
<g id="Ebene_4">
|
||||
<rect opacity="0.85" width="800" height="800"/>
|
||||
</g>
|
||||
<g id="Ebene_5">
|
||||
<g>
|
||||
<path fill="#FFFFFF" stroke="#706F6F" stroke-width="0.25" stroke-miterlimit="10" d="M340.333,239.725
|
||||
c24.1-18.739,49.74-35.585,76.703-50.308c-3.103-4.982-5.507-10.438-7.083-16.234c-28.377,15.341-55.359,32.98-80.819,52.813
|
||||
C333.395,230.096,337.16,234.703,340.333,239.725z"/>
|
||||
<path fill="#FFFFFF" stroke="#706F6F" stroke-width="0.25" stroke-miterlimit="10" d="M124.824,616.625
|
||||
c3.986-31.477,10.562-62.157,19.499-91.824c-5.839-1.242-11.376-3.311-16.475-6.089c-9.576,31.622-16.422,63.948-20.489,96.824
|
||||
c1.405-0.081,2.817-0.134,4.242-0.134C116.118,615.402,120.532,615.836,124.824,616.625z"/>
|
||||
<path fill="#FFFFFF" stroke="#706F6F" stroke-width="0.25" stroke-miterlimit="10" d="M225.997,329.133
|
||||
c-18.96,24.339-35.909,50.074-50.768,77.084c5.718,1.771,11.077,4.362,15.948,7.629c14.3-25.795,30.55-50.366,48.548-73.514
|
||||
C234.703,337.16,230.096,333.395,225.997,329.133z"/>
|
||||
<path fill="#FFFFFF" stroke="#706F6F" stroke-width="0.25" stroke-miterlimit="10" d="M616.625,124.824
|
||||
c-0.789-4.292-1.223-8.707-1.223-13.223c0-1.425,0.053-2.837,0.134-4.242c-31.602,3.909-62.698,10.376-93.146,19.377
|
||||
c2.895,5.059,5.088,10.563,6.452,16.388C557.252,134.797,586.575,128.629,616.625,124.824z"/>
|
||||
<path fill="#FFFFFF" stroke="#706F6F" stroke-width="0.25" stroke-miterlimit="10" d="M429.969,417.653l-94.016-94.016
|
||||
c-3.604,4.578-7.738,8.712-12.316,12.316l94.627,94.627C421.537,425.734,425.484,421.383,429.969,417.653z"/>
|
||||
<path fill="#FFFFFF" stroke="#706F6F" stroke-width="0.25" stroke-miterlimit="10" d="M643.346,631.029l-127.051-127.05
|
||||
c-3.729,4.483-8.082,8.431-12.928,11.703l127.662,127.663C634.633,638.767,638.767,634.633,643.346,631.029z"/>
|
||||
<circle fill="#FCEA21" stroke="#706F6F" stroke-width="0.25" stroke-miterlimit="10" cx="278.583" cy="278.583" r="59.934"/>
|
||||
<circle fill="#2FAADD" stroke="#706F6F" stroke-width="0.25" stroke-miterlimit="10" cx="157.1" cy="464.815" r="48.272"/>
|
||||
<circle fill="#2FAADD" stroke="#706F6F" stroke-width="0.25" stroke-miterlimit="10" cx="469.132" cy="464.815" r="48.272"/>
|
||||
<circle fill="#2FAADD" stroke="#706F6F" stroke-width="0.25" stroke-miterlimit="10" cx="469.132" cy="157.1" r="48.272"/>
|
||||
<circle fill="#FCEA21" stroke="#706F6F" stroke-width="0.25" stroke-miterlimit="10" cx="111.601" cy="688.399" r="59.934"/>
|
||||
<circle fill="#FCEA21" stroke="#706F6F" stroke-width="0.25" stroke-miterlimit="10" cx="688.398" cy="111.601" r="59.934"/>
|
||||
<circle fill="#FCEA21" stroke="#706F6F" stroke-width="0.25" stroke-miterlimit="10" cx="688.398" cy="688.399" r="59.934"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 3.0 KiB |
477
docs/logo/VTM.svg
Normal file
@ -0,0 +1,477 @@
|
||||
<?xml version="1.0" encoding="utf-8"?><!-- Generator: Adobe Illustrator 16.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) --><!DOCTYPE svg PUBLIC
|
||||
"-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="515.667px" height="515.668px" viewBox="0 0 515.667 515.668" enable-background="new 0 0 515.667 515.668"
|
||||
xml:space="preserve">
|
||||
<g id="Ebene_9">
|
||||
<g>
|
||||
<path fill="#33B6EA" d="M211.969,454.364c-0.39,1.071-0.487,1.268-1.852,1.268h-7.989c-1.364,0-1.461-0.195-1.851-1.268
|
||||
l-15.491-44.914c-0.097-0.195-0.39-0.975-0.487-1.656c0-0.778,0.682-0.877,2.143-1.07l8.086-0.877
|
||||
c0.292,0,1.364-0.099,1.559-0.099c0.779,0,1.072,0.976,1.364,1.948l5.943,21.921c1.072,3.897,2.533,10.522,3.118,14.127h0.195
|
||||
c0.584-3.507,2.144-10.326,3.313-14.127l6.625-21.921c0.292-1.071,0.584-1.948,1.364-1.948c0.195,0,1.267,0.099,1.559,0.099
|
||||
l6.625,0.877c1.461,0.193,2.144,0.292,2.144,1.07c-0.098,0.683-0.39,1.461-0.487,1.656L211.969,454.364z"/>
|
||||
<path fill="#33B6EA" d="M264.58,451.929c0.098,0.486,0.194,0.486,0.194,0.778c0,1.852-7.112,3.702-13.737,3.702
|
||||
c-12.568,0-12.568-9.84-12.568-18.804v-21.921h-6.917c-1.169,0-1.364-0.292-1.364-1.364v-6.333c0-1.071,0.195-1.363,1.364-1.363
|
||||
h6.917v-12.275c0-1.268,0.195-1.56,1.559-1.753l8.573-1.171c0.292,0,0.682-0.097,1.267-0.097c0.877,0,0.975,0.486,0.975,1.656
|
||||
v13.64h11.107c0.877,0,1.655,0,1.655,1.071c0,0.195,0,0.39-0.099,0.779l-1.266,5.749c-0.293,1.362-0.586,1.461-1.754,1.461h-9.646
|
||||
v23.577c0,3.118,0,5.942,3.313,5.942c3.897,0,6.333-1.852,7.697-1.852c0.39,0,0.683,0.195,0.778,0.585L264.58,451.929z"/>
|
||||
<path fill="#33B6EA" d="M334.433,453.39c0,1.072-0.193,1.364-1.361,1.364h-9.646c-1.17,0-1.365-0.292-1.365-1.364v-30.008
|
||||
c0-3.702-0.389-8.185-4.092-8.185c-4.092,0-7.307,2.825-8.574,3.995v34.196c0,1.072-0.193,1.364-1.361,1.364h-9.646
|
||||
c-1.17,0-1.364-0.292-1.364-1.364v-30.008c0-3.702-0.39-8.185-4.093-8.185c-4.092,0-7.307,2.825-8.572,3.995v34.196
|
||||
c0,1.072-0.193,1.364-1.363,1.364h-9.646c-1.171,0-1.365-0.292-1.365-1.364v-29.423c0-13.737-1.851-12.959-1.851-15.198
|
||||
c0-0.487,0.39-0.877,1.07-1.072l7.404-2.436c0.586-0.194,1.072-0.292,1.462-0.292c1.267,0,2.046,2.144,3.118,6.723
|
||||
c2.922-2.533,7.209-6.723,14.906-6.723c4.189,0,8.768,2.63,9.938,6.723c2.924-2.533,7.111-6.723,15.102-6.723
|
||||
c9.158,0,11.301,6.917,11.301,15.394V453.39L334.433,453.39z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Ebene_10">
|
||||
<g>
|
||||
<path fill="#707072" d="M121.25,51.267c0,0,5.583,58,4.625,85.229c-0.397,11.281-4.188,42.375-21.813,42.375
|
||||
c-18.979,0-21.146-22.813-44.438-22.813c-13.875,0-37.625,9.042-37.625,48.75c0,30.375,19.25,45.375,34.625,45.375
|
||||
c22.875,0,19.625-18,43.875-18c23.917,0,24.875,22.375,24.875,34.75s-3.042,47-8.875,82c4.417,0.667,11.51,1.468,23.25,5.125
|
||||
c15.917,4.959,28.125,8.875,53.625,8.875S233,353.309,233,342.309c0-17.041-15.625-14.25-15.625-34.75s20.625-30,41.25-30
|
||||
c20.625,0,41.459,9.959,41.459,34.875c0,22.5-13.084,17.125-13.084,35.75s22.375,18.125,28,18.125s61.5-1.832,87-7.041
|
||||
c-1-13.25-4.582-66.542-4.582-82.917c0-21.667,10.082-23.792,15.457-23.792c16.125,0,16.875,12.292,39.625,12.292
|
||||
c20.584,0,40.625-19.75,40.625-49.792c0-27.125-19-38.75-34.625-38.75s-20.875,13.5-47.75,13.5
|
||||
c-9.498,0-15.832-3.792-15.832-22.292c0-37.275,4.166-74.417,4.332-109.583c-18.666-2.75-66.625-10-93.125-10
|
||||
c-24.207,0-25.957,10.125-25.957,16.75c0,17.083,23.5,22.167,23.5,38.5c0,29.917-23.793,37.75-43.293,37.75
|
||||
c-17.042,0-42.458-15.583-42.458-40.083c0-12.042,3.374-15.688,6.844-19.159c5.189-5.189,11.177-8.299,11.177-16.508
|
||||
c0-14.25-14.396-16.667-31.271-16.667S121.25,51.267,121.25,51.267z"/>
|
||||
<g opacity="0.2">
|
||||
<path fill="#FFFFFF" d="M306.125,47.934c26.5,0,74.459,7.25,93.125,10c-0.166,35.167-4.332,72.309-4.332,109.583
|
||||
c0,18.5,6.334,22.292,15.832,22.292c26.875,0,32.125-13.5,47.75-13.5s34.625,11.625,34.625,38.75
|
||||
c0,30.042-20.041,49.792-40.625,49.792c-22.75,0-23.5-12.292-39.625-12.292c-5.375,0-15.457,2.125-15.457,23.792
|
||||
c0,16.375,3.582,69.667,4.582,82.917c-25.5,5.209-81.375,7.041-87,7.041c-0.287,0-0.615,0.001-0.984,0.001
|
||||
c-6.861,0-27.016-0.45-27.016-18.126c0-18.625,13.084-13.25,13.084-35.75c0-24.916-20.834-34.875-41.459-34.875
|
||||
c-20.625,0-41.25,9.5-41.25,30S233,325.268,233,342.309c0,11-14.125,20.625-39.625,20.625s-37.708-3.916-53.625-8.875
|
||||
c-11.74-3.657-18.833-4.458-23.25-5.125c5.833-35,8.875-69.625,8.875-82s-0.958-34.75-24.875-34.75c-24.25,0-21,18-43.875,18
|
||||
c-15.375,0-34.625-15-34.625-45.375c0-39.708,23.75-48.75,37.625-48.75c23.292,0,25.458,22.813,44.438,22.813
|
||||
c17.625,0,21.416-31.094,21.813-42.375c0.958-27.229-4.625-85.229-4.625-85.229s66.542-2.75,83.417-2.75
|
||||
s31.271,2.417,31.271,16.667c0,8.208-5.988,11.318-11.177,16.508c-3.47,3.47-6.844,7.117-6.844,19.159
|
||||
c0,24.5,25.417,40.083,42.458,40.083c19.5,0,43.291-7.833,43.291-37.75c0-16.333-23.5-21.417-23.5-38.5
|
||||
C280.167,58.059,281.917,47.934,306.125,47.934 M306.125,47.434c-23.451,0-26.457,9.219-26.457,17.25
|
||||
c0,8.855,6.154,14.563,12.106,20.082c5.858,5.431,11.394,10.562,11.394,18.418c0,33.62-29.926,37.25-42.793,37.25
|
||||
c-8.763,0-19.225-4.116-27.303-10.741c-9.451-7.751-14.655-17.994-14.655-28.843c0-12.108,3.405-15.514,6.697-18.806
|
||||
c1.085-1.085,2.216-2.088,3.309-3.057c4.122-3.654,8.014-7.105,8.014-13.805c0-15.127-16.06-17.167-31.771-17.167
|
||||
c-16.692,0-82.772,2.723-83.438,2.75l-0.528,0.021l0.051,0.525c0.056,0.58,5.569,58.278,4.623,85.164
|
||||
c-0.548,15.56-5.653,41.893-21.313,41.893c-8.799,0-13.929-5.046-19.36-10.388c-6.209-6.108-12.631-12.424-25.077-12.424
|
||||
c-4.252,0-15.137,0.938-24.358,9.621c-9.135,8.602-13.767,21.935-13.767,39.629c0,17.628,6.348,28.442,11.674,34.411
|
||||
c6.406,7.178,15.172,11.464,23.451,11.464c11.46,0,16.58-4.539,21.531-8.93c5.03-4.46,10.231-9.07,22.344-9.07
|
||||
c24.375,0,24.375,24.001,24.375,34.25c0,11.578-2.818,45.62-8.868,81.918l-0.083,0.501l0.502,0.075
|
||||
c0.462,0.069,0.953,0.141,1.475,0.217c4.47,0.647,11.224,1.628,21.701,4.892l0.657,0.205c15.583,4.856,27.893,8.692,53.116,8.692
|
||||
c12.11,0,22.353-2.162,29.62-6.252c6.774-3.813,10.505-9.096,10.505-14.873c0-8.332-3.602-11.997-7.415-15.877
|
||||
c-4.036-4.107-8.21-8.354-8.21-18.873c0-20.378,20.467-29.5,40.75-29.5c18.895,0,40.959,9.003,40.959,34.375
|
||||
c0,11.595-3.5,15.632-6.883,19.536c-3.189,3.679-6.201,7.153-6.201,16.214c0,7.779,3.785,13.217,11.25,16.155
|
||||
c5.621,2.215,11.975,2.471,16.264,2.471h0.557l0.43-0.001c4.451,0,60.859-1.69,87.1-7.052l0.434-0.089l-0.033-0.438
|
||||
c-0.932-12.355-4.582-66.493-4.582-82.879c0-15.455,5.033-23.292,14.959-23.292c7.229,0,11.383,2.564,15.781,5.281
|
||||
c5.32,3.285,11.35,7.011,23.844,7.011c10.402,0,20.756-5.03,28.408-13.803c8.199-9.399,12.717-22.358,12.717-36.489
|
||||
c0-12.434-4.016-22.776-11.611-29.911c-6.316-5.936-14.889-9.339-23.514-9.339c-6.883,0-11.699,2.525-17.277,5.451
|
||||
c-7.193,3.771-15.348,8.049-30.473,8.049c-9.203,0-15.334-3.706-15.334-21.792c0-19.29,1.127-38.726,2.219-57.521
|
||||
c1.047-18.047,2.035-35.093,2.115-52.061l0.002-0.435l-0.43-0.063L396.9,57.08C377.355,54.194,331.582,47.434,306.125,47.434
|
||||
L306.125,47.434z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Ebene_5">
|
||||
<g>
|
||||
<path fill="#33B6EA" d="M395.246,253.01c0.27-2.734-1.365-4.583-2.832-6.502c-0.643-0.837-0.605-1.451,0.162-2.072
|
||||
c0.881-0.711,0.844-1.509,0.482-2.506c-0.715-1.979-2.061-3.534-3.193-5.245c-1.344-2.021-4.088-3.735-1.973-6.808
|
||||
c0.355-0.521-0.047-1.574,0.896-1.65c0.904-0.076,1.119,0.885,1.506,1.48c0.822,1.282,1.775,2.069,3.412,1.449
|
||||
c0.447-0.17,0.986-0.104,1.486-0.123c2.223-0.085,3.834-1.387,4.582-3.714c0.779-2.433,0.242-4.502-1.639-5.825
|
||||
c-0.83-0.585-1.578-1.233-2.207-2.006c-0.525-0.649-0.568-1.421,0.027-2.053c0.764-0.81,1.572-1.801,2.77-1.667
|
||||
c1.068,0.119,0.598,1.197,0.633,1.873c0.053,0.985,0.102,2.088,1.326,2.066c1.078-0.018,1.178-1.114,1.26-1.996
|
||||
c0.064-0.667-0.189-1.583,0.592-1.832c1.602-0.506,3.016-1.451,4.721-1.727c3.568-0.578,6.23-2.42,7.514-5.924
|
||||
c0.514-1.4,0.971-2.759,2-3.952c0.898-1.036,1.096-2.398,0.619-3.877c-0.684-2.116-1.891-3.933-2.977-5.818
|
||||
c-0.672-1.167-0.41-1.793,0.699-2.395c0.891-0.484,2.154-0.442,2.563-1.674c0.035-0.189,0.072-0.378,0.111-0.566l-0.072-0.469
|
||||
c-2.152,0.212-4.465,0.33-6.965,0.33c-9.498,0-15.832-3.792-15.832-22.292c0-30.716,2.824-61.339,3.912-90.844
|
||||
c-0.459,0.064-0.873,0.121-0.963,0.129c-0.471-0.294-0.939-0.589-1.41-0.885c0,0,0-0.001,0-0.002
|
||||
c0.057-0.488-0.029-1.056,0.193-1.453c0.945-1.694,1.037-3.354,0.055-5.048c-2.23-0.616-3.424,0.834-4.689,2.271
|
||||
c-1.482,1.685-2.777,3.506-3.936,5.409c-1.496,2.457-3.807,2.362-6.137,2.094c-1.678-0.194-3.182-0.269-4.436,1.181
|
||||
c-0.457,0.527-1.168,0.904-1.932,1.087c-1.789,0.426-2.865,1.688-3.596,3.281c-1.695,3.702-4.016,6.812-7.916,8.439
|
||||
c-1.141,0.476-1.566,1.31-1.479,2.522c0.07,0.935,0.018,1.876,0.014,2.813c-0.004,0.704-0.375,1.202-0.982,1.469
|
||||
c-0.639,0.277-1.092-0.16-1.443-0.598c-0.818-1.015-1.543-2.104-2.393-3.088c-0.947-1.094-2.078-1.406-3.236-0.29
|
||||
c-0.609,0.587-1.176,0.62-2.014,0.495c-1.469-0.221-2.986-0.133-4.484-0.139c-0.971-0.003-1.369,0.729-1.764,1.465
|
||||
c-1.084,2.025-1.889,4.181-3.273,6.076c-0.813,1.118-0.225,2.679-0.279,4.038c-0.086,1.994-0.342,2.18-2.229,1.416
|
||||
c-0.346-0.141-0.713-0.234-1.057-0.376c-0.875-0.363-1.67-0.719-0.756-1.875c0.438-0.555,0.275-1.274-0.313-1.663
|
||||
c-2.787-1.85-1.818-4.563-1.438-6.96c0.432-2.694,1.951-4.966,3.893-6.912c0.307-0.309,0.625-0.617,0.885-0.966
|
||||
c0.674-0.903,0.771-1.873,0.014-2.751c-0.783-0.909-1.727-0.555-2.543-0.042c-3.301,2.081-5.449,5.021-6.605,8.762
|
||||
c-0.904,2.933-0.754,5.919-0.738,8.908c0.006,1.373,1.094,1.848,2.088,2.383c0.857,0.463,1.998,0.708,1.982,1.975
|
||||
c-0.016,1.253-1.145,1.502-2.002,1.971c-0.383,0.208-0.814,0.384-1.111,0.683c-1.578,1.589-3.273,1.396-4.912,0.242
|
||||
c-1.076-0.755-1.879-0.753-2.766,0.224c-0.363,0.402-0.887,0.697-1.387,0.932c-1.932,0.896-3.805,1.858-5.131,3.61
|
||||
c-0.184,0.243-0.398,0.577-0.748,0.408c-0.455-0.22-0.234-0.611-0.135-0.966c0.719-2.45-1.293-4.758-3.861-4.45
|
||||
c-1.271,0.153-2.115,1.469-1.836,2.972c0.229,1.22,0.498,2.437,0.826,3.631c0.189,0.681,0.266,1.296-0.508,1.546
|
||||
c-0.791,0.256-1.139-0.371-1.34-0.979c-0.227-0.706-0.332-1.449-0.531-2.166c-0.166-0.594-6.02-5.959-6.646-6.133
|
||||
c-0.061-0.017-0.123-0.011-0.188-0.016c-0.025,0.076-0.271,0.04-0.627-0.057c-2.24,13.228-10.033,20.992-19.579,25.231
|
||||
c-0.134,0.21-0.271,0.386-0.425,0.473c-0.58,1.232-0.373,2.271,0.765,3.075c0.604,0.428,1.185,0.897,1.824,1.266
|
||||
c0.628,0.362,0.971,0.853,0.712,1.52c-0.448,1.147-0.262,2.321-0.283,3.488c-0.018,1.127-0.122,2.087-1.679,1.481
|
||||
c-0.624-0.242-1.073,0.063-1.354,0.64c-0.479,0.395-0.691,0.924-0.764,1.522c-0.404,0.276-0.357,0.698-0.354,1.105
|
||||
c-0.293,1.102-0.545,2.227-1.521,2.979c-0.63,0.21-1.316,0.288-1.833,0.767c-0.633,0.016-1.267,0.028-1.899,0.043
|
||||
c-0.752,0.048-1.561-0.289-2.229,0.33c-0.258,0.018-0.518,0.034-0.773,0.053c-1.367-0.092-2.762,0.105-4.096-0.376
|
||||
c-0.374-0.265-0.75-0.529-1.124-0.793c0.005-1.051,0.047-2.102,0.007-3.148c-0.033-0.879,0.342-1.905-0.738-2.483l-0.008-0.012
|
||||
c-0.523-0.892-1.047-0.833-1.568,0c-0.125,0.125-0.248,0.249-0.369,0.373c-0.547,0.857-2.334,1.323-1.568,2.526
|
||||
c1.357,2.128,1.68,3.915-0.344,5.709c-0.738,0.05-1.475,0.101-2.209,0.149c-0.102,0.088-0.204,0.177-0.305,0.264
|
||||
c-1.127,0.703-1.631,1.874-2.06,3.021c-0.329,0.881-0.942,1.505-1.604,1.995c-0.582,0.433-1.634,0.576-1.54-0.658
|
||||
c0.218-2.815-1.361-4.965-2.783-7.007c-1.056-1.521-1.577-3.261-2.023-4.825c-0.465-1.629-1.241-3.077-1.824-4.611
|
||||
c-0.494-1.306-2.2-1.399-2.564-0.149c-0.563,1.94-2.404,3.871-0.557,6.078c0.326,0.388,0.471,0.952,0.118,1.393
|
||||
c-0.373,0.464-0.901,0.259-1.384,0.104c-1.403-0.449-2.569-0.059-3.553,1.001c-0.644,0.694-1.375,1.243-2.32,1.503
|
||||
c-0.761,0.21-1.121,0.898-0.533,1.396c1.293,1.096,1.226,2.466,1.235,3.912c0.007,1.374,0.875,1.867,2.136,1.65
|
||||
c1.186-0.204,2.209-0.808,3.191-1.489c0.438-0.304,0.883-0.917,1.469-0.501c0.593,0.422,0.376,1.156,0.228,1.733
|
||||
c-0.119,0.466-0.396,0.926-0.71,1.297c-0.512,0.601-1.05,1.214-0.458,1.967c0.551,0.703,1.344,0.427,2.074,0.21
|
||||
c1.668-0.497,3.267-1.223,5.022-1.431c0.464-0.054,0.917-0.174,1.112,0.337c0.25,0.645-0.291,0.917-0.747,1.073
|
||||
c-1.177,0.402-2.385,0.704-3.56,1.104c-0.834,0.283-1.658,0.655-1.857,1.657c-0.22,1.114,0.495,1.762,1.295,2.279
|
||||
c1.159,0.75,2.042,1.64,2.085,3.114c0.1,0.625,0.201,1.251,0.303,1.876c0.085,0.671-0.076,1.23-0.715,1.571
|
||||
c-1.698,0.635-3.419,0.42-5.122,0.081c-3.549-0.709-5.808,1.404-4.804,4.8c0.252,0.851,0.453,1.883,0.045,2.57
|
||||
c-1.296,2.195-0.223,3.93,0.754,5.763c0.588,1.104,1.37,1.447,2.611,1.203c1.58-0.311,3.191-0.524,4.799-0.613
|
||||
c1.791-0.1,3.387-0.699,3.786-2.469c0.897-3.999,5-5.124,6.939-8.146c0.125-0.193,0.572-0.28,0.855-0.258
|
||||
c1.416,0.117,2.717-0.173,3.941-0.9c0.344-0.204,1.15-0.364,1,0.173c-0.396,1.402,1.271,3.163-0.742,4.266
|
||||
c-0.226,0.123-0.328,0.525-0.422,0.819c-0.227,0.69-0.197,1.344,0.355,1.908c0.617,0.629,1.387,0.586,2.102,0.378
|
||||
c0.699-0.207,1.073-0.779,1.114-1.563c0.047-0.905-0.095-1.739-0.661-2.471c-0.273-0.352-0.58-0.718-0.156-1.143
|
||||
c0.453-0.456,1.103-0.598,1.523-0.173c1.755,1.765,4.297,2.563,5.719,4.718c0.127,1.577-0.937,1.574-2.033,1.545
|
||||
c-0.586-0.016-1.111,0.119-1.267,0.782c-0.128,0.543-0.007,0.973,0.646,1.054c0.375,0.375,0.748,0.748,1.123,1.123
|
||||
c0.268,1.004,0.767,0.64,1.367,0.29c1.479-0.863,2.327-2.339,3.498-3.499c0.93-0.92,1.822-1.354,2.399,0.368
|
||||
c0.153,0.449,0.376,0.943,1.004,0.943c0.011,0.337,0.104,0.618,0.459,0.743c0.122,1.08,0.772,1.651,1.789,1.877
|
||||
c0.542,0.061,1.112,0.235,1.485-0.372c0.865-0.124,1.379-0.587,1.435-1.494c0.05-0.108,0.075-0.225,0.081-0.345
|
||||
c1.124-0.259,0.543-1.227,0.775-1.854c0.233-0.621,0.332-1.552,1.211-1.403c0.826,0.138,0.467,0.92,0.479,1.541
|
||||
c0.065,3.409,3.003,6.105,5.423,5.701c0.493,0,0.984-0.001,1.479-0.001c1.183,0.033,2.365,0.071,3.547,0.097
|
||||
c0.941,0.021,1.547,0.471,1.73,1.39c0.365,1.865-2.271,5.095-4.19,5.051c-2.802-0.063-5.673,1.639-8.41-0.336
|
||||
c-0.206-0.15-0.612-0.05-0.922-0.026c-1.289,0.093-2.509-0.204-3.581-0.871c-1.732-1.077-2.953-0.226-4.08,0.969
|
||||
c-0.418,0.445-0.684,1.037-1.018,1.562c-0.693,1.086-1.428,1.224-2.409,0.268c-0.741-0.723-1.271-1.732-2.404-1.996
|
||||
c0.031-0.577-0.5-0.748-0.79-1.094c-0.059-0.487-0.17-0.865-0.712-0.342c-0.25-0.015-0.5-0.029-0.751-0.044
|
||||
c-0.068-0.443-0.252-0.738-0.773-0.586c-0.375-0.052-0.748-0.104-1.125-0.156c-0.068-0.709-0.58-0.744-1.121-0.735
|
||||
c-0.166-0.254-0.336-0.508-0.504-0.763c0.125-0.897,0.084-1.806,0.379-2.697c0.176-0.526,0.311-1.27-0.639-1.39
|
||||
c-0.211-0.562-0.595-0.945-1.154-1.153c-0.08-0.842-0.752-0.816-1.265-0.708c-2.718,0.573-5.501,0.056-8.189,0.479
|
||||
c-1.339,0.21-3.078-0.258-4.02,1.329c-0.479,0.125-1.028,0.142-1.43,0.394c-2.17,1.363-4.457,1.729-6.95,1.11
|
||||
c-0.734-0.183-1.686-0.05-1.97,0.729c-0.892,2.455-3.495,3.992-3.62,6.854c-0.012,0.304-0.388,0.63-0.654,0.881
|
||||
c-1.637,1.539-3.124,3.223-4.88,4.653c-1.271,1.033-2.804,2.057-2.89,3.958c-0.044,0.98-0.428,1.692-1.157,2.229
|
||||
c-1.583,1.164-1.662,2.628-1.401,4.471c0.224,1.584,1.093,3.239,0.144,4.899c-1.486,2.598-1.531,4.197,0.425,6.269
|
||||
c3.04,3.221,5.598,6.84,8.698,10.016c1.951,1.999,3.984,2.362,6.437,1.544c1.589-0.529,3.325-0.772,4.784-0.202
|
||||
c1.522,0.592,2.596,0.267,3.839-0.416c1.879-1.035,3.739-1.329,5.552,0.243c1.037,0.897,2.364,1.055,3.688,1.119
|
||||
c0.681,0.032,1.356,0.002,2.034,0.222c1.316,0.428,1.846,0.965,0.748,2.238c-1.275,1.479-1.736,3.221-0.834,5.042
|
||||
c1.07,2.166,2.283,4.256,3.438,6.381c-0.146,1.139,0.406,1.99,1.02,2.895c1.348,1.982,2.084,3.986,0.695,6.42
|
||||
c-2.216,3.873-2.867,7.908-0.422,12.027c0.396,0.666,0.609,1.508,0.518,2.35c0.062,0.102,0.094,0.516,0.127,0.91
|
||||
c9.334,1.685,17.914,5.714,23.633,12.592c1.953-2.099,4.527-4.729,5.152-7.411c0.078-0.334,0.328-0.769,0.615-0.896
|
||||
c2.014-0.887,2.01-2.559,1.955-4.396c-0.043-1.336-0.602-2.931,0.416-3.988c1.57-1.639,2.863-3.666,5.221-4.43
|
||||
c0.906-0.293,1.441-1.136,1.438-2.033c-0.002-2.723,0.029-5.447-1.076-8.06c-0.736-1.741-1.891-3.473-1.33-5.512
|
||||
c1.012-3.684,3.529-6.376,6.348-8.699c4.24-3.491,7.348-7.759,9.535-12.733c0.469-1.064,1.016-2.424,0.094-3.361
|
||||
c-0.881-0.892-2.229-0.408-3.389-0.198c-2.078,0.375-4.074,1.239-6.256,0.964c-0.619-0.078-1.297,0.008-1.547-0.758
|
||||
c-0.16-0.488,0.15-0.833,0.475-1.14c0.521-0.5,1.115-0.563,1.703-0.15c1.256,0.883,2.455,0.532,3.703-0.043
|
||||
c2.689-1.234,4.832-3.479,7.512-4.545c3.006-1.195,5.582-2.71,7.717-5.119c0.824-0.927,1.818-1.698,2.48-2.783
|
||||
c0.576-0.942,0.51-1.767-0.324-2.507c-0.861-0.765-1.91-1.566-2.998-1.291c-2.359,0.597-4.564,0.394-6.77-0.495
|
||||
c-1.23-0.753-1.777-2.006-2.4-3.221c-0.799-1.56-1.645-3.083-3.705-3.276c-0.535-0.052-1.127-0.374-1.004-1.108
|
||||
c0.113-0.667,0.701-0.815,1.256-0.922c1.754-0.34,2.951,0.58,4.035,1.787c1.752,1.952,3.695,3.527,6.574,3.107
|
||||
c1.387,1.82,3.553,2.434,5.41,3.527c0.934,0.549,1.758,0.518,2.59-0.14c1.455-1.15,2.979-1.109,4.545-0.249
|
||||
c1.094,0.6,2.168,1.239,3.279,1.803c0.834,0.424,1.234,0.898,0.9,1.922c-0.42,1.295,0.414,2.246,1.512,2.317
|
||||
c2.311,0.153,2.66,1.596,2.826,3.405c0.439,4.79,2.623,8.884,5.258,12.771c0.959,1.414,2.221,1.563,3.504,0.451
|
||||
c2.076-1.797,3.029-4.201,2.697-6.848c-0.184-1.468,0.279-2.161,1.299-2.949c2.512-1.947,5.348-3.653,7.109-6.302
|
||||
c1.5-2.249,3.686-2.021,5.715-2.513c0.514-0.122,1.061,0.34,1.373,0.847c1.201,1.942,2.754,3.684,2.801,6.206
|
||||
c0.025,1.369,0.83,2.336,2.449,2.183c2.279-0.218,3.467,0.926,2.928,3.167c-1.109,4.619-0.865,8.794,3.088,12.077
|
||||
c0.141,0.112,0.225,0.302,0.303,0.47c0.219,0.459,1.143,0.813,0.574,1.355c-0.646,0.621-1.242-0.067-1.73-0.548
|
||||
c-0.844-0.833-1.637-1.722-2.521-2.513c-0.768-0.688-1.775-0.898-2.551-0.19c-0.74,0.676,0.066,1.423,0.428,1.98
|
||||
c0.777,1.194,1.855,2.162,2.623,3.394c1.781,2.854,3.686,5.636,5.514,8.46c0.285,0.439,0.637,0.742,1.084,0.994
|
||||
c3.023,1.701,5.59,4.386,9.428,4.33c0.154-0.003,0.787,0.146,1.271,0.271c0.904-1.166,1.887-2.069,2.9-2.763
|
||||
c-2.412-0.8-5.723-0.824-8.076-0.843C396.181,253.939,395.132,254.152,395.246,253.01z M248.805,156.258
|
||||
c-0.096,0.881-0.293,1.807-1.396,1.905c-0.906,0.083-1.133-0.578-1.123-1.282c-0.016-1.051,0.322-1.826,1.385-1.939
|
||||
C248.563,154.847,248.89,155.466,248.805,156.258z M278.5,183.979c-1.053-1.027-2.092-2.066-3.129-3.11
|
||||
c-0.483-0.488-0.974-0.948-1.74-0.85c-0.246-0.25-0.494-0.501-0.742-0.753c0.351-0.585-1.271-1.963,0.752-1.878
|
||||
c0.746,0.499,1.49,0.997,2.234,1.497c0.055,0.468,0.283,0.733,0.789,0.681c0.894,0.896,1.787,1.79,2.682,2.686
|
||||
c-0.055,0.5,0.205,0.727,0.677,0.766c-0.011,0.125,0.013,0.247,0.067,0.359C279.978,184.677,279.443,184.899,278.5,183.979z
|
||||
M306.382,124.542c0.771,0.064,0.986,0.608,0.967,1.295c-0.012,0.606-0.189,1.177-0.889,1.13c-0.756-0.049-1.197-0.584-1.227-1.35
|
||||
C305.205,124.858,305.642,124.48,306.382,124.542z M298.623,181.036c-1.105,0.415-2.201,0.91-3.347,1.158
|
||||
c-1.928,0.416-3.073-0.921-2.329-2.758c0.518-1.279,1.016-2.484,1.021-3.918c0.006-1.313,1.186-1.392,2.207-1.52
|
||||
c1.656,0.315,3.527,0.159,4.189,2.368c0.242,0.808,1.113,1.118,1.908,1.371c1.758,0.561,3.273,1.5,4.473,2.926
|
||||
c0.311,0.373,0.803,0.709,0.496,1.279c-0.254,0.475-0.814,0.404-1.18,0.28c-1.432-0.484-3.057-0.002-4.398-1.194
|
||||
C300.896,180.35,299.654,180.648,298.623,181.036z M308.689,226.039c-0.217-1.417-1.541-2.061-2.229-3.166
|
||||
c-1.67-2.678-2.623-5.649-3.766-8.534c-0.762-1.919-1.615-3.775-2.51-5.629c-0.268-0.559-1.051-1.239-0.217-1.79
|
||||
c0.787-0.521,1.162,0.446,1.633,0.858c1.146,1.004,1.914,2.285,2.576,3.639c2.1,4.293,4.193,8.584,6.291,12.877
|
||||
C310.398,225.41,310.818,227.026,308.689,226.039z M320.189,187.722c-0.127-0.856-0.043-1.741-0.074-2.613
|
||||
c-0.02-0.535,0.141-1.179-0.662-1.329c-0.021-0.642-0.041-1.284-0.063-1.925c0.646-0.578,0.004-1.032-0.219-1.432
|
||||
c-0.922-1.646-1.42-3.379-1.35-5.269c0.35-0.48,0.572-1.084,1.24-1.248c1.357-0.21,2.656-1.011,4.094-0.4
|
||||
c0.17,0.173,0.34,0.346,0.51,0.519c-0.184,0.862-0.98,0.86-1.588,1.082c-0.998,0.366-2.098,0.635-2.213,1.938
|
||||
c-0.117,1.331,0.059,2.596,1.393,3.35c0.057,0.972,0.977,1.448,1.299,2.267c0.107,0.08,0.27,0.164,0.385,0.247
|
||||
c-0.115-0.083-0.279-0.167-0.387-0.248c-0.029,0.987-0.213,2-0.057,2.958c0.227,1.399,0.197,2.991,1.74,3.818
|
||||
c0.004,0.226,0.008,0.454,0.01,0.681C321.88,190.938,320.552,190.18,320.189,187.722z M352.781,101.823
|
||||
c-0.613,0.174-0.676-0.389-0.668-0.843c0.014-0.862,0.467-1.413,1.299-1.583c0.498-0.102,0.85,0.131,0.855,0.836
|
||||
C354.134,100.99,353.593,101.591,352.781,101.823z M360.394,121.037c-0.836-0.154-1.857-0.271-1.896-1.619
|
||||
c-0.02-0.702,0.248-1.289,1.025-1.225c1.094,0.091,2.082,0.504,2.215,1.779C361.82,120.747,361.263,121.034,360.394,121.037z"/>
|
||||
<path fill="#33B6EA" d="M93.814,179.34c-1.706,2.358-1.584,4.791-0.422,7.328c0.216,0.473,0.128,1.096,0.14,1.648
|
||||
c0.012,0.53,0.087,0.992,0.696,1.146c0.023,0.224,0.048,0.447,0.073,0.67c-0.035,0.501,0.233,0.733,0.7,0.789
|
||||
c-0.002,0.117,0.018,0.229,0.06,0.34c-0.044,0.5,0.223,0.73,0.686,0.794c-0.004,0.115,0.017,0.228,0.064,0.333
|
||||
c-0.04,0.495,0.225,0.727,0.685,0.79c0.569,2.029,1.965,3.702,3.591,4.625c2.341,1.327,3.17,3.387,4.038,5.569
|
||||
c1.73,4.353,4.99,7.727,7.404,11.641c0.451,0.729,1.259,0.854,2,0.49c0.891-0.437,0.428-1.17,0.221-1.796
|
||||
c-0.615-1.875-1.808-3.398-2.975-4.945c-0.789-1.042-1.545-2.111-2.262-3.205c-0.258-0.392-0.66-1.015-0.107-1.325
|
||||
c0.593-0.332,0.803,0.369,1.015,0.795c0.272,0.549,0.338,1.176,0.827,1.648c1.913,1.852,3.758,3.763,5.54,5.753
|
||||
c1.688,1.886,2.903,3.788,3.343,6.305c0.237,1.353,0.563,3.116,2.124,3.514c3.487,0.885,6.537,3.077,10.114,3.488
|
||||
c2.978,0.343,5.79,0.759,7.92,3.106c0-0.002,0.119,0.026,0.119,0.026l0.124-0.005c0.434,0.831,1.238,0.878,2.029,0.952
|
||||
c1.653,0.549,2.838,1.668,3.763,3.104c0,1.154,0.038,2.284,1.476,2.626c0.127,0.295,0.373,0.398,0.672,0.418
|
||||
c0.92,1.306,2.401,1.334,3.756,1.597c1.092,0.211,2.289,0.851,3.188-0.445c0.333-0.055,0.662-0.109,0.994-0.163
|
||||
c0.863,0.201,1.09,0.786,1.195,1.62c0.182,1.473-0.4,2.768-0.726,4.125c-0.034,0.227-0.071,0.454-0.106,0.681
|
||||
c-1.02,0.439-1.209,1.381-1.407,2.319c-0.445,1.549-1.806,2.344-2.823,3.421c-1.604,1.693-1.741,5.729-0.293,7.542
|
||||
c1.949,2.449,3.878,4.975,4.717,8.018c1.028,3.724,2.847,6.558,6.74,7.699c0.459,0.136,0.854,0.515,1.254,0.81
|
||||
c1.115,0.836,1.771,1.881,1.688,3.352c-0.066,1.185,0.026,2.375-0.001,3.563c-0.102,4.77,0.383,9.612-1.738,14.137
|
||||
c-0.151,0.324-0.15,0.731-0.174,1.104c-0.282,4.343-0.523,8.687-2.435,12.726c-0.496,1.051-0.275,2.07,0.717,2.842
|
||||
c0.463,0.359,0.862,0.861,0.45,1.445c-0.869,1.229-0.656,2.893-1.749,4.055c-0.528,0.562-0.446,1.365-0.066,2.113
|
||||
c1.585,3.117,1.051,6.018-0.965,8.746c-0.563,0.758-1.133,1.563-1.134,2.521c-0.001,2.562-0.542,5.078-0.454,7.652
|
||||
c0.146,4.271,1.943,6.373,6.126,6.85c1.311,0.148,1.753,0.951,1.127,2.051c-1.432,2.515-0.319,4.349,2.641,4.353
|
||||
c1.625,0.006,3.253,0.063,4.874-0.021c0.921-0.049,2.165,0.552,2.67-0.694c0.541-1.332-0.38-2.242-1.318-3.023
|
||||
c-0.427-0.354-0.907-0.66-1.399-0.92c-4.346-2.287-5.139-7.1-1.722-10.518c0.221-0.224,0.442-0.443,0.662-0.664
|
||||
c2.563-2.588,2.61-3.379,0.144-5.979c-0.701-0.735-0.833-1.258-0.063-2.02c1.855-1.828,2.749-4.287,4.099-6.451
|
||||
c0.457-0.732,0.617-1.471-0.071-2.226c-0.997-1.094-0.375-1.522,0.767-1.616c1.008-0.078,1.805-0.648,1.868-1.541
|
||||
c0.142-2.052,1.452-2.138,2.995-2.222c3.324-0.176,5.661-3.231,4.886-6.424c-0.296-1.219,0.276-1.526,1.219-1.477
|
||||
c1.463,0.084,2.464-0.604,3.424-1.592c1.101-1.138,2.03-2.373,2.694-3.802c1.525-3.276,2.92-6.629,4.58-9.838
|
||||
c1.802-3.485,4.638-5.836,8.373-7.248c2.516-0.951,4.089-3.074,5.102-5.561c1.271-0.906,1.198-2.379,1.39-3.652
|
||||
c0.419-2.809,0.519-5.668,2.485-7.994c0.746-0.883,1.661-1.703,1.73-2.989c0.002,0.002,0.004,0.018,0.004,0.018
|
||||
c3.726-2.994,3.392-7.268-0.728-9.383c-0.555-0.285-1.118-0.572-1.609-0.947c-1.106-0.842-2.373-1.109-3.681-1.51
|
||||
c-2.895-0.89-5.997-1.268-8.524-3.365c-1.421-1.179-3.381-1.958-5.383-0.799c-0.28,0.163-0.592,0.3-0.868,0.082
|
||||
c-0.367-0.29-0.272-0.689-0.045-1.004c0.651-0.902,0.796-1.831,0.168-2.78c-1.784-2.698-4.088-4.774-7.349-5.379
|
||||
c-1.571-0.292-2.796-0.957-3.861-2.076c-1.94-2.04-4.012-3.892-6.441-5.387c-1.589-0.977-3.023-1.066-4.557-0.236
|
||||
c-1.591,0.86-2.893,0.529-4.002-0.777c-1.394-1.641-3.036-2.747-5.231-1.918c-1.903,0.722-4.381,1.258-5.368,2.713
|
||||
c-1.152,1.698-2.973,2.544-4.003,4.263c-0.972,1.624-2.731,1.363-4.224,0.847c-1.457-0.503-2.283-1.657-2.287-3.31
|
||||
c-0.003-1.256,0.165-2.481,0.328-3.72c0.251-1.925-0.579-2.966-2.484-2.829c-3.292,0.234-3.28-1.115-3.009-3.83
|
||||
c0.056-0.551,0.246-1.096,0.414-1.63c0.246-0.783,0.586-1.604-0.186-2.25c-0.771-0.646-1.723-0.758-2.662-0.456
|
||||
c-1.287,0.406-2.381,1.17-3.1,2.311c-1.215,1.929-3.086,1.316-4.753,1.252c-1.539-0.062-2.118-1.258-2.529-2.613
|
||||
c-0.681-2.243-0.843-4.521-0.796-6.842c0.065-3.192,2.056-5.158,5.304-5.163c1.924-0.003,3.772,0.02,5.656-0.858
|
||||
c1.979-0.922,4.207-0.07,6.221,0.388c1.286,0.292,1.138,2.078,1.626,3.195c0.645,1.479,1.116,3.007,2.659,3.944
|
||||
c1.359,0.824,2.084,0.355,2.665-0.856c0.432-0.904,0.417-1.831-0.082-2.697c-0.588-1.024-1.249-2.012-1.865-3.021
|
||||
c-1.183-1.939-1.023-3.307,0.598-4.986c0.3-0.312,0.687-0.535,1.015-0.82c1.845-1.596,3.589-3.285,5.042-5.262
|
||||
c0.319-0.435,0.599-0.91,0.35-1.373c-0.656-1.223,0.164-1.848,0.898-2.531c1.067-0.994,2.344-2.125,2.094-3.585
|
||||
c-0.365-2.126,0.964-1.979,2.192-2.172c0.675-0.104,1.39-0.043,2.03-0.243c0.982-0.304,1.593-0.898,0.652-1.901
|
||||
c-1.267-1.35-0.342-1.936,0.814-2.461c1.816-1.931,2.465-1.966,5.748-0.321c1.133-0.012,2.329,0.277,3.267-0.68
|
||||
c0.802-1.007,1.305-2.014,0.12-3.111c-0.639-0.594-1.261-1.214-1.854-1.858c-0.715-0.777-1.047-1.675-0.728-2.753
|
||||
c0.723-2.417,0.104-3.102-2.417-2.744c-0.654,0.095-1.353,0.735-2.053-0.054c0.759-0.761,1.408-1.534,2.515-1.591
|
||||
c2.115,0.008,4.232,0.017,6.348,0.027c0.262-0.002,0.523,0,0.784,0c0.621,0.068,1.305,0.286,1.514-0.634
|
||||
c1.638-1.122,2.602-3.08,4.743-3.623c0.841-0.214,0.969-1.193,0.906-2.045c0.345-0.271,0.334-0.517-0.053-0.734
|
||||
c-0.628-2.905-2.213-4.493-4.511-4.517c-0.851-0.798-1.064-2.121-2.203-2.683c-0.022-0.235-0.047-0.47-0.071-0.704
|
||||
c-0.782-3.359-2.929-6.136-4.01-9.376c-0.262-0.783-1.085-1.031-1.827-0.301c-0.713,0.699-1.398,1.427-2.123,2.116
|
||||
c-0.575,0.548-1.166,1.346-2.051,0.955c-0.88-0.39-1.432-1.243-1.533-2.224c-0.102-0.989-0.058-1.996-0.057-2.995
|
||||
c0.001-0.706-0.055-1.423-0.609-1.902c-2.555-2.202-5.307-3.844-8.903-3.568c-2.9,0.222-4.174,2.229-2.822,4.72
|
||||
c0.417,0.771,0.913,1.515,0.312,2.43c-1.784,2.716-1.021,5.326,0.358,7.903c0.022,0.251,0.047,0.501,0.07,0.751
|
||||
c-0.005,1.195,0.003,2.36-1.133,3.19c-2.563,1.871-2.831,4.269-1.689,7.097c0.701,1.733,0.167,2.368-1.699,2.465
|
||||
c-0.172-0.995-0.931-1.583-1.563-2.261c0.005-0.063,0.017-0.124,0.013-0.188c-0.327-5.265-0.947-7.05-6.288-6.572
|
||||
c-1.982,0.178-3.609-1.082-4.253-2.993c-0.946-2.8-3.123-4.482-5.381-6.083c-1.199-0.852-1.708-1.763-0.859-3.146
|
||||
c0.682-1.11,1.093-2.472,1.989-3.351c1.843-1.808,3.003-4.54,6.124-4.785c0.762-0.059,1.512-0.781,1.463-1.514
|
||||
c-0.154-2.252,0.83-4.151,1.396-6.21c0.481-1.749,1.281-2.369,2.799-2.667c0.608-0.12,1.217-0.296,1.787-0.538
|
||||
c2.755-1.163,3.647-3.313,2.573-6.21c-0.227-0.616-0.43-1.346-0.125-1.818c1.141-1.772-0.008-2.925-0.978-4.118
|
||||
c-0.372-0.458-0.743-1.183-1.444-1.036c-0.811,0.17-1.112,0.969-1.326,1.688c-0.336,1.133-0.543,2.307-0.9,3.432
|
||||
c-0.221,0.699-0.503,1.539-1.481,1.407c-1.048-0.141-0.637-1.048-0.693-1.661c-0.076-0.833,0.005-1.694-1.268-1.575
|
||||
c-2.749,0.261-4.019-0.885-3.993-3.64c0.017-1.795-0.311-3.505-1.309-4.991c-1.952-2.909-2.811-2.883-4.622,0.027
|
||||
c-0.294,0.473-0.591,0.962-0.782,1.482c-0.506,1.382-0.848,2.877,0.085,4.134c0.978,1.313,1.589,2.828,2.558,4.127
|
||||
c0.648,0.87,1.173,1.776,0.014,2.563c-0.993,0.674-1.935,0.442-2.872-0.373c-1.309-1.138-1.373-2.563-1.319-4.099
|
||||
c0.035-1.013,0.007-2.184-1.106-2.549c-0.996-0.326-1.688,0.589-2.352,1.243c-0.222,0.218-0.455,0.447-0.595,0.718
|
||||
c-0.531,1.019-0.939,1.937,0.7,2.451c1.341,0.422,1.329,1.385,0.646,2.516c-0.387,0.64-2.091,1.16-3.653,1.585
|
||||
c0.201,6.693,0.251,12.89,0.072,18.001c-0.397,11.281-4.188,42.375-21.813,42.375c-4.042,0-7.318-1.041-10.201-2.669
|
||||
c-0.001,1.048-0.005,1.793-0.013,1.929C94.132,178.542,94.079,178.972,93.814,179.34z M156.285,178.357
|
||||
c0.168-1.072,0.971-1.334,1.93-1.298c0.81-0.002,1.401,0.328,1.253,1.202c-0.209,1.245-1.278,0.906-2.095,0.957
|
||||
C156.781,179.251,156.159,179.164,156.285,178.357z M146.371,177.911c-0.633,0.987-0.721,2.082-0.744,3.211
|
||||
c-0.016,0.749-0.465,1.16-1.214,1.071c-0.791-0.092-0.966-0.668-0.848-1.363c0.199-1.28,0.354-2.567,0.61-3.835
|
||||
c0.204-1.016,1.047-1.594,1.92-1.267C147.172,176.131,146.886,177.11,146.371,177.911z M155.749,180.521
|
||||
c-0.25,1.05-1.095,1.639-2.121,1.965c-0.645,0.204-1.166-0.188-1.137-0.84c0.058-1.225,0.855-1.853,2.027-1.972
|
||||
C155.061,179.619,155.684,179.582,155.749,180.521z M142.313,170.602c0.336-0.354,0.638-0.583,0.929-0.688
|
||||
C142.951,170.019,142.649,170.248,142.313,170.602c0.861,0.001,1.722,0.003,2.583,0.004c1.124,0.073,1.833,0.911,2.241,1.711
|
||||
c0.922,1.804,2.427,2.109,4.169,2.105c0.161,0.288,0.421,0.34,0.718,0.3c0.799,0.305,2.016,0.674,1.75,1.545
|
||||
c-0.41,1.333-1.806,1.987-3.063,2.577c-0.152,0.071-0.365,0.012-0.55,0.013c-0.235-0.236-0.468-0.476-0.702-0.713
|
||||
c-0.409-2.105-3.118-4.506-5.168-4.529c-1.297-0.015-2.596,0.051-3.894,0.08c-0.017,0.188-0.042,0.396-0.188,0.478
|
||||
c0.146-0.081,0.172-0.29,0.188-0.479c-0.235-0.019-0.472-0.036-0.708-0.054l-0.032-0.032c-0.013-0.36-0.026-0.721-0.039-1.081
|
||||
C140.217,171.465,141.12,170.831,142.313,170.602z"/>
|
||||
<path fill="#33B6EA" d="M261.123,144.733c0.373,1.167,1.229,2.144,2.688,2.289c1.512,0.152,2.291-0.697,2.886-1.896
|
||||
c0.278-0.557,0.534-1.142,0.909-1.626c0.363-0.467,0.764-1.146,1.492-0.882c0.693,0.25,0.421,0.968,0.4,1.488
|
||||
c-0.09,2.453,0.017,4.823,1.479,6.976c1.228,1.811,2.933,2.129,4.505,0.592c1.049-1.024,1.564-2.347,1.936-3.764
|
||||
c0.381-1.474,0.457-3.054,1.633-4.271c1.972-2.035,1.617-3.884-0.616-5.247c-5.669,1.75-11.687,2.479-17.375,2.532
|
||||
C260.507,141.762,260.603,143.113,261.123,144.733z"/>
|
||||
<path fill="#33B6EA" d="M288.996,78.165c1.332-0.097,2.771,1.13,3.922,0.059c1.434-1.339,2.813-2.797,3.685-4.624
|
||||
c0.63-1.326,0.272-2.284-1.062-2.873c-2.209-0.976-4.162-2.148-6.929-2.062c-2.282,0.071-3.606,0.396-4.562,2.35
|
||||
c-0.131,0.27-1.159,1.218-1.854,1.882c0.958,1.86,2.197,3.577,3.603,5.202C287.152,78.135,288.642,78.19,288.996,78.165z"/>
|
||||
<path fill="#33B6EA" d="M226.581,124.819c-0.941-0.525-2.057-0.161-3.043-0.691c-1.795-0.962-2.925-0.21-2.789,1.82
|
||||
c0.186,2.794,0.175,5.723,3.674,6.771c0.792,0.236,1.234,1.312,2.26,1.1c1.938-0.399,3.894-0.721,5.758-1.435
|
||||
c0.208-0.08,0.818-0.639,1.528-1.352c-2.45-1.883-4.744-4.013-6.791-6.373C226.892,124.826,226.671,124.906,226.581,124.819z"/>
|
||||
<path fill="#33B6EA" d="M131.975,94.741c0.444-0.877,1.002-2.652-0.867-3.268c-0.695-0.229-1.457-0.282-2.194-0.357
|
||||
c-1.839-0.187-2.837,0.975-2.519,2.802c0.162,0.938,0.574,2.051-0.906,2.403c0.016,0.523,0.032,1.046,0.046,1.567
|
||||
c0.604,0.093,0.618,0.566,0.568,0.996c-0.188,1.614,0.621,2.901,1.407,4.156c1.179,1.878,3.376,2.004,4.869,0.364
|
||||
c1.631-1.793,1.691-3.727,0.192-5.732C131.921,96.802,131.278,96.12,131.975,94.741z"/>
|
||||
<path fill="#33B6EA" d="M418.878,250.344c-0.58-0.945-1.154-1.913-1.172-3.109c-0.01-0.604-0.496-1.006-1.076-1.159
|
||||
c-0.678-0.181-1.225-0.494-1.055-1.269c0.186-0.843,0.965-0.967,1.643-0.892c1.045,0.115,2.066,0.415,3.105,0.594
|
||||
c0.652,0.112,1.104-0.193,1.203-0.863c0.105-0.725-0.307-0.997-0.98-1.04c-1.48-0.092-3.066-0.065-4.389,0.274
|
||||
c-1.26,0.325-2.68,1.541-2.898,3.136c-0.324,2.396,0.959,4.755,2.652,5.401c0.432,0.166,0.83,0.826,1.006,1.429
|
||||
c0.711,0.104,1.385,0.242,2.035,0.399C419.162,252.391,419.357,251.125,418.878,250.344z"/>
|
||||
<path fill="#33B6EA" d="M424.419,194.958c1.324,0.021,2.738-1.396,3.01-2.866c0.201-1.085-0.424-2.828-0.986-4.153
|
||||
c-1.719,0.448-3.561,0.833-5.545,1.136c0.57,0.979,1.146,2.499,1.326,3.357C422.486,193.688,422.794,194.931,424.419,194.958z"/>
|
||||
<path fill="#33B6EA" d="M443.439,181.242c2.627,1.035,5.447-0.266,6.488-2.99c-0.137,0.012-0.25-0.129-0.359-0.345
|
||||
c-2.119,0.762-4.143,1.739-6.213,2.807C443.509,180.945,443.576,181.138,443.439,181.242z"/>
|
||||
<path fill="#33B6EA" d="M470.48,257.766c0.164-0.756,0.027-1.41-0.898-1.478c-0.906-0.063-1.16,0.547-1.145,1.326
|
||||
c0.01,0.633,0.078,2.023,0.129,3.143c0.615-0.322,1.227-0.664,1.83-1.023C470.38,258.961,470.416,258.062,470.48,257.766z"/>
|
||||
<path fill="#33B6EA" d="M124.979,66.436c-0.258-1.046-0.754-1.981-2.065-2.01c-0.169,0.05-0.329,0.107-0.479,0.172
|
||||
c0.095,1.128,0.193,2.309,0.294,3.542c0.091,0.01,0.176,0.023,0.273,0.028C124.496,68.493,125.318,67.813,124.979,66.436z"/>
|
||||
<path fill="#33B6EA" d="M168.799,219.878c-0.905-0.421-1.85-0.767-2.714-1.256c-1.137-0.646-2.152-1.509-3.52-0.372
|
||||
c-0.437,0.361-1.041-0.047-1.516-0.416c-2.75-2.133-6.473-1.997-9.315-3.948c-0.254-0.176-0.732-0.025-1.107-0.025
|
||||
c0-0.012,0-0.023,0-0.037c-0.25,0-0.5-0.012-0.75,0.002c-1.147,0.068-3.129,1.632-2.944,2.438
|
||||
c0.352,1.528,1.672,1.132,2.752,1.247c1.194,0.13,2.501-0.478,3.569,0.566c2.037,1.991,4.587,2.827,7.341,3.133
|
||||
c0.62,0.07,1.018,0.385,1.438,0.77c2.632,2.403,4.277,2.487,7.04,0.39C170.322,221.422,170.227,220.545,168.799,219.878z"/>
|
||||
<path fill="#33B6EA" d="M172.526,221.396c-0.69,0.008-1.145,0.479-1.202,1.146c-0.062,0.699,0.445,0.953,1.072,0.923
|
||||
c0.664-0.03,0.961-0.442,0.981-1.046C173.353,221.827,173.105,221.386,172.526,221.396z"/>
|
||||
<path fill="#33B6EA" d="M319.966,261.688c-0.795-0.379-1.451,0.174-1.988,0.688c-1.174,1.125-2.113,2.623-3.479,3.39
|
||||
c-4.676,2.625-2.58,7.69-4.314,11.346c-0.16,0.332,0.188,0.967,0.406,1.408c0.779,1.561,1.836,3.01,3.695,3.076
|
||||
c1.83,0.069,2.473-1.632,2.879-3c0.99-3.316,1.771-6.697,2.547-10.068c0.375-1.635,0.551-3.314,0.791-4.824
|
||||
C320.425,262.889,320.748,262.057,319.966,261.688z"/>
|
||||
<path fill="#33B6EA" d="M217.104,83.273c0.8-1.035,1.484-2.144,1.934-3.391c0.387-1.07,0.337-2.037-0.775-2.559
|
||||
c-1.148-0.539-1.893,0.062-2.341,1.141c-0.142,0.347-0.292,0.701-0.51,1c-0.545,0.742-1.211,1.933-2.149,1.274
|
||||
c-0.96-0.673,0.181-1.482,0.629-2.149c0.947-1.413,0.593-2.33-1.092-2.522c-0.876-0.101-1.518-0.354-1.42-1.318
|
||||
c0.186-1.802-0.82-2.578-2.342-3.081c-0.637-0.209-1.347-0.532-1.755-1.026c-1.315-1.586-2.982-1.936-4.862-1.659
|
||||
c-2.325-0.292-4.409,0.191-5.995,1.964c-2.832,3.163-6.6,4.367-10.573,5.123c-2.216,0.422-3.315,1.563-3.448,3.885
|
||||
c-0.037,0.646-0.472,1.021-0.913,1.348c-0.599,0.442-1.239,0.848-1.909,1.172c-2.484,1.207-2.587,1.982-0.995,4.132
|
||||
c0.771,1.042,0.616,1.911-0.267,2.816c-1.222,1.26-2.806,1.81-4.368,2.427c-1.457,0.574-1.53,1.694-1.024,2.915
|
||||
c0.234,0.566,0.849,0.874,1.372,1.233c1.417,0.975,1.37,1.426-0.127,2.276c-0.752,0.427-1.403,0.894-0.775,1.909
|
||||
c1.297,2.095,3.563,3.065,6.045,2.575c0.854-0.167,1.714-0.297,2.572-0.449c1.823-0.325,3.028,0.374,3.574,2.156
|
||||
c0.873,2.861,1.535,5.741,1.095,8.775c-0.191,1.32-0.365,2.7,1.569,2.991c0.705,0.105,0.71,0.679,0.337,1.133
|
||||
c-0.939,1.145-0.242,1.661,0.737,2.089c1.018,0.445,1.09,0.944,0.354,1.827c-1.15,1.374-1.618,2.985-1.634,4.842
|
||||
c-0.036,3.965,1.706,7.363,3.151,10.864c0.233,0.569,0.728,1.032,1.324,1.275c4.189,1.711,4.195,1.707,5.881-2.587
|
||||
c0.206-0.521,0.481-1.063,0.494-1.603c0.063-2.558,1.508-4.042,3.553-5.366c3.229-2.089,5.229-5.659,9.298-6.935
|
||||
c2.404-0.753,2.173-1.906-0.042-3.576c-0.387-0.292-0.897-0.662-0.427-1.215c0.488-0.573,0.889-0.104,1.231,0.262
|
||||
c0.362,0.385,0.553,1.093,1.297,0.728c0.771-0.377,0.973-1.058,0.945-1.88c-0.023-0.726-0.334-1.334-0.674-1.924
|
||||
c-0.749-1.298-0.615-2.494,0.31-3.637c0.51-0.629,1.036-1.246,1.515-1.896c1.802-2.438,1.575-4.376-0.714-6.415
|
||||
c-0.363-0.324-0.86-0.627-0.772-1.204c0.109-0.717,0.742-0.551,1.203-0.559c0.875-0.014,1.007-0.551,0.996-1.249
|
||||
c-0.012-0.626,0.019-1.251-0.001-1.876c-0.02-0.536,0.141-1.198-0.651-1.347c-0.667-0.124-1.049,0.263-1.305,0.824
|
||||
c-0.302,0.667-0.707,1.32-1.541,0.893c-0.934-0.479-0.716-1.352-0.429-2.14c0.335-0.919,1.127-1.483,1.78-2.146
|
||||
c0.702-0.71,0.813-1.273-0.297-1.613c-0.647-0.198-1.094-0.581-1.276-1.241c-0.321-1.173,0.466-2.55,1.663-2.71
|
||||
c1.413-0.189,1.623,0.789,1.649,1.898c0.009,0.4-0.185,0.936,0.375,1.119c0.154,0.05,0.581-0.191,0.579-0.298
|
||||
c-0.01-1.228,1.162-2.52-0.058-3.674C215.78,85.646,216.16,84.495,217.104,83.273z"/>
|
||||
<path fill="#33B6EA" d="M179.837,120.635c-2.297-1.378-5.719-2.322-4.344-5.646c0.507-2.175-0.573-3.014-1.521-3.574
|
||||
c-1.982-1.172-3.397-2.92-5.096-4.375c-1.2-1.027-2.345-2.187-4.217-2.121c-2.664,0.094-2.813-0.167-3.258-2.88
|
||||
c-0.208-1.269-0.78-2.033-2.157-1.095c-0.455,0.309-0.956,0.383-1.411,0.096c-1.38-0.866-2.649-0.941-3.866,0.313
|
||||
c-1.501,1.548-2.821,3.436-2.096,5.489c0.81,2.292,2.023,4.604,4.287,5.984c1.049,0.639,1.688,1.441,1.522,2.744
|
||||
c-0.171,1.348,0.573,2.011,1.813,2.083c1.171,0.068,1.609-0.607,1.616-1.772c0.009-1.158,0.795-1.595,1.901-1.561
|
||||
c2.297,0.069,4.733,2.068,5.121,4.221c0.504,2.79-0.979,6.598-2.988,7.338c-0.823,0.303-1.671,0.416-1.388,1.528
|
||||
c0.256,1.017,1.101,1.327,2.054,1.202c1.602-0.209,2.759,0.558,3.799,1.61c0.922,0.933,1.743,1.98,2.748,2.811
|
||||
c1.001,0.825,2.11,2.061,3.449,0.348c0.128-0.165,0.433-0.266,0.658-0.27c0.875-0.018,1.813,0.129,2.124-1.023
|
||||
c0.345-1.268-0.021-2.328-0.951-3.232c-0.898-0.872-1.782-1.758-2.646-2.66c-0.415-0.436-0.698-1.063-0.194-1.493
|
||||
c0.614-0.525,0.964,0.109,1.29,0.576c0.463,0.666,0.901,1.386,1.844,1.423c1.105,0.045,3.584-1.531,3.744-2.433
|
||||
C181.963,122.616,181.403,121.571,179.837,120.635z"/>
|
||||
<path fill="#33B6EA" d="M157.557,86.107c-0.893,1.163-0.663,1.946,0.333,2.676c1.527,1.117,3.277,1.849,5.104,2.232
|
||||
c1.326,0.277,2.81-0.292,2.812-1.736c0.003-1.724,0.936-2.612,1.962-3.602c1.189-1.15,2.051-2.518,2.602-4.063
|
||||
c0.25-0.703,0.601-1.231,1.331-1.431c1.511-0.41,2.599-1.409,3.672-2.484c1.137-1.14,2.104-2.49,3.663-3.158
|
||||
c0.614-0.263,0.876-0.697,0.373-1.32c-0.413-0.511-0.495-1.358,0.099-1.407c2.866-0.23,2.185-1.752,1.429-3.417
|
||||
c-0.118-0.26-0.042-0.619-0.018-0.931c0.091-1.14-0.464-1.965-1.11-2.866c-1.891-2.635-4.783-1.923-7.165-2.443
|
||||
c-0.961,0.141-1.869-0.222-2.556,0.265c-2.417,1.705-5.235,2.623-7.774,4.073c-0.632,0.361-1.286,0.88-1.2,1.766
|
||||
c0.088,0.909,0.738,1.436,1.515,1.737c1.547,0.6,3.055,1.415,4.836,0.847c0.535-0.171,1.145-0.012,1.385,0.648
|
||||
c0.119,0.328,0.017,0.645-0.301,0.796c-1.338,0.643-2.648,1.646-4.045,1.792c-1.783,0.189-2.062,0.982-1.942,2.425
|
||||
c0.05,0.62-0.044,1.255,0.019,1.873c0.153,1.534-0.129,2.725-1.923,3.044c-0.495,0.09-0.951,0.523-0.999,1.027
|
||||
C159.513,84.003,158.398,85.012,157.557,86.107z"/>
|
||||
<path fill="#33B6EA" d="M152.884,77.528c-0.429,1.846,1.912,3.921,3.456,3.26c1.558-0.667,3.551-3.911,3.501-5.78
|
||||
c-0.104-0.343-0.147-0.813-0.369-1.168c-0.75-1.197-0.961-2.493-1.141-3.88c-0.238-1.819-1.496-3.13-3.053-4.043
|
||||
c-1.273-0.748-2.296-0.46-2.746,1.055c-0.708,2.383-0.803,4.812-0.008,7.166C152.91,75.282,153.177,76.269,152.884,77.528z"/>
|
||||
<path fill="#33B6EA" d="M154.511,87.379c-0.448-0.894-4.153-2.092-4.979-1.511c-1.591,1.12-2.899,0.739-4.143-0.542
|
||||
c-0.869-0.894-1.742-1.784-2.648-2.639c-0.882-0.833-1.917-1.371-3.568-1.415c-0.545-0.048-1.463,0.136-1.679,1.163
|
||||
c-0.231,1.102,0.811,1.245,1.542,1.503c1.932,0.68,3.007,1.995,2.839,4.063c-0.128,1.554,0.396,2.189,1.969,1.993
|
||||
c0.858-0.108,1.543,0.375,2.201,0.872c0.796,0.597,1.755,0.897,2.642,0.507c1.182-0.523,2.365-0.643,3.621-0.693
|
||||
C153.635,90.624,155.032,88.417,154.511,87.379z"/>
|
||||
<path fill="#33B6EA" d="M135.405,62.536c-0.487-0.039-0.896-0.254-1.072-0.639c-0.813-1.791-2.86-1.762-4.157-2.856
|
||||
c-0.55-0.463-1.419-0.317-2.049,0.291c-0.659,0.641-0.264,1.234,0.002,1.867c0.529,1.257,1.607,2.044,2.522,2.96
|
||||
c0.712,0.71,1.04,1.299,0.219,2.204c-0.656,0.721,0.689,3.457,1.694,3.608c0.516,0.077,0.921-0.179,0.989-0.642
|
||||
c0.251-1.678,0.935-1.223,1.814-0.463c0.778,0.675,1.502,0.46,1.58-0.553c0.09-1.178,0.623-2.294,0.438-3.375
|
||||
C137.395,62.709,137.396,62.697,135.405,62.536z"/>
|
||||
<path fill="#33B6EA" d="M145.415,93.232c-0.57-0.247-1.138-0.504-1.727-0.699c-2.589-0.854-4.123,0.147-4.369,2.852
|
||||
c-0.039,0.433-0.005,0.871-0.005,1.219c-0.163,2.235,0.82,4.215,0.924,6.333c0.027,0.562,0.41,1.271,1.211,1.177
|
||||
c0.692-0.082,1.225-0.628,1.133-1.274c-0.245-1.704,0.827-2.629,1.86-3.635c0.857-0.832,1.458-1.852,1.982-2.919
|
||||
C147.088,94.934,146.887,93.87,145.415,93.232z"/>
|
||||
<path fill="#33B6EA" d="M135.176,83.364c-1.252-1.275-1.979,0.143-2.852,0.625c-0.475,0.263-0.822,0.848-1.461,0.532
|
||||
c-0.613-0.305-0.459-0.938-0.557-1.481c-0.291-1.616,0.609-3.013,0.789-4.536c0.045-0.864-0.208-1.648-0.796-2.237
|
||||
c-0.736-0.735-1.932-1.169-2.682-0.755c-0.937,0.52,0.273,1.219,0.485,1.85c0.246,0.734,0.572,1.503-0.053,2.094
|
||||
c-0.812,0.767-1.315-0.101-1.855-0.562c-0.378-0.323-0.761-0.793-1.288-0.429c-0.47,0.324-0.335,0.927-0.254,1.394
|
||||
c0.222,1.281,1.568,1.737,2.137,2.736c1.48,2.606,3.672,3.894,6.633,4.132c1.091,0.086,2.387,0.797,3.052-0.371
|
||||
C137.194,85.094,135.996,84.2,135.176,83.364z"/>
|
||||
<path fill="#33B6EA" d="M149.353,126.215c-1.273-0.751-1.826,0.549-2.627,1.147c-1.37,1.023-1.145,2.256-0.409,3.445
|
||||
c0.687,1.111,1.582,1.833,3.092,1.142c0.937-0.427,2.023-0.547,3.052-0.749c0.637-0.125,1.021-0.411,1.059-1.093
|
||||
C153.079,127.81,151.014,127.196,149.353,126.215z"/>
|
||||
<path fill="#33B6EA" d="M153.201,94.265c-0.024,1.688,1.389,2.757,3.699,2.796c2.291,0.039,3.372-0.68,3.388-2.247
|
||||
c0.022-2.104-1.114-3.339-3.086-3.358C155.042,91.435,153.223,92.712,153.201,94.265z"/>
|
||||
<path fill="#33B6EA" d="M141.812,71.47c1.313,0.771,2.33,0.174,2.345-1.456c-0.008-0.115,0.025-0.32-0.042-0.485
|
||||
c-0.52-1.267-1.048-2.53-1.599-3.784c-0.355-0.808-0.735-1.72-1.813-1.609c-1.206,0.121-1.566,1.138-1.743,2.146
|
||||
C138.607,68.295,139.699,70.228,141.812,71.47z"/>
|
||||
<path fill="#33B6EA" d="M130.177,74.204c0.368,0.293,0.66,0.837,1.25,0.428c0.428-0.296,0.702-0.699,0.633-1.591
|
||||
c-0.327-0.875-0.917-1.95-1.903-2.751c-0.355-0.287-0.823-0.265-1.229-0.017c-0.428,0.261-0.518,0.686-0.44,1.138
|
||||
C128.682,72.56,129.272,73.479,130.177,74.204z"/>
|
||||
<path fill="#33B6EA" d="M158.885,130.881c-0.849,0.049-1.496,0.471-1.478,1.352c0.017,0.819,0.745,0.871,1.399,0.866
|
||||
c0.753-0.001,1.409-0.175,1.436-1.086C160.27,131.102,159.672,130.837,158.885,130.881z"/>
|
||||
<path fill="#33B6EA" d="M460.431,248.217c-0.59-0.375-1.238-0.112-1.533,0.28c-1.113,1.483-2.855,2.118-4.186,3.284
|
||||
c-1.611,1.414-2.814,1.516-4.387,0.047c-1.566-1.461-3.104-2.824-5.443-2.912c-0.816-0.028-1.643-0.567-2.404-0.98
|
||||
c-2.719-1.469-3.031-1.512-5.166,0.646c-1.092,1.106-1.838,0.827-2.502-0.267c-0.498-0.814-1.115-1.494-1.793-2.144
|
||||
c-0.561-0.539-1.23-0.627-1.902-0.332c-0.783,0.346-1.156,1.08-0.928,1.853c0.479,1.614,1.094,3.316,2.881,3.841
|
||||
c3.412,1.005,6.57,2.078,8.695,5.386c1.307,2.029,2.697,1.953,4.662,0.604c1.531-1.049,2.828-0.75,4.041,0.395
|
||||
c0.961,0.908,2.025,1.652,3.127,2.359c1.16,0.744,2.07,0.17,2.789-0.66c0.799-0.922-0.143-1.457-0.686-1.992
|
||||
c-0.486-0.475-1.072-0.848-1.598-1.289c-0.328-0.276-0.727-0.576-0.582-1.08c0.143-0.487,0.59-0.582,1.047-0.631
|
||||
c1.453-0.158,2.77-0.758,3.994-1.487c1.316-0.783,2.361-1.859,2.34-3.573C460.886,249.06,460.929,248.535,460.431,248.217z"/>
|
||||
<path fill="#33B6EA" d="M412.113,236.797c-1.705-1.199-2.561-1.15-3.811,0.388c-0.393,0.479-0.668,1.053-1.057,1.536
|
||||
c-1.645,2.027-3.311,4.085-5.605,5.364c-1.135,0.636-1.842,1.204-1.602,2.467c-0.063,0.972-0.084,1.903,0.832,2.388
|
||||
c1.373,0.728,2.742,1.556,4.215,1.968c1.029,0.289,2.441,0.711,3.252-0.565c1.064-1.678,1.961-3.462,3.223-5.016
|
||||
c0.301-0.366,0.355-0.84,0.18-1.243c-0.676-1.523-0.146-2.856,0.746-4.013C413.492,238.77,413.503,237.775,412.113,236.797z"/>
|
||||
<path fill="#33B6EA" d="M431.595,198.366c0.166-1.884,2.295-3.179,3.91-2.288c0.969,0.533,1.623,0.4,2.303-0.343
|
||||
c0.338-0.372,0.748-0.621,1.232-0.805c3.996-1.514,5.275-4.807,5.678-8.823c-0.063-0.361-0.125-0.855-0.238-1.336
|
||||
c-0.168-0.695-0.09-1.668-1.143-1.645c-0.922,0.021-1.92,0.183-2.354,1.198c-0.289,0.682-0.475,1.414-0.666,2.134
|
||||
c-0.93,3.454-3.432,5.878-6.875,5.855c-2.393-0.018-3.676,1.22-4.924,2.781c-1.426,1.778-1.188,3.73,0.459,5.318
|
||||
c0.789,0.762,1.385,0.578,2.051-0.135C431.554,199.716,431.533,199.054,431.595,198.366z"/>
|
||||
<path fill="#33B6EA" d="M422.068,232.705c-2.004,0.14-2.932-0.748-3.451-2.467c-0.088-0.287-0.32-0.532-0.504-0.782
|
||||
c-0.998-1.354-0.848-1.776,0.867-2.164c0.566-0.126,1.182-0.146,1.24-0.871c0.063-0.73-0.541-0.885-1.096-1.044
|
||||
c-1.396-0.398-1.754-1.257-1.143-2.565c0.184-0.393,0.314-0.816,0.42-1.238c0.291-1.192-0.15-2.116-1.199-2.671
|
||||
c-1.002-0.533-1.762-0.007-2.455,0.738c-2.283,2.454-1.92,7.347,0.803,9.614c0.611,0.51,0.73,0.986,0.936,1.743
|
||||
c0.412,1.534,1.66,2.858,0.662,4.604c-0.041,0.077,0.152,0.333,0.285,0.457c0.975,0.922,2.119,1.508,3.332,1.716
|
||||
c1.359,0.026,3.596-1.841,3.557-3.008C424.279,233.394,423.115,232.635,422.068,232.705z"/>
|
||||
<path fill="#33B6EA" d="M412.986,230.351c-0.922,0.021-2.322,1.49-2.246,2.375c0.063,0.72,0.57,0.872,1.391,0.877
|
||||
c1.004-0.194,1.836-0.9,2.094-2.061C414.412,230.702,413.8,230.334,412.986,230.351z"/>
|
||||
<path fill="#33B6EA" d="M425.611,245.563c1.049-0.026,1.586-0.787,1.842-1.833c-0.225-0.822-0.672-1.415-1.645-1.368
|
||||
c-1.01,0.049-1.604,0.609-1.625,1.632C424.164,244.933,424.671,245.587,425.611,245.563z"/>
|
||||
<path fill="#33B6EA" d="M462.447,256.295c-1.039-0.045-1.156,0.711-1.137,1.502c0.021,0.724-0.078,1.658,1.014,1.572
|
||||
c0.859-0.063,1.15-0.801,1.137-1.619C463.466,257.023,463.353,256.334,462.447,256.295z"/>
|
||||
<path fill="#33B6EA" d="M462.496,252.148c-0.873-0.088-1.395,0.477-1.479,1.309c-0.092,0.877,0.502,1.166,1.465,1.193
|
||||
c0.531,0,1.242-0.068,1.295-0.988C463.826,252.803,463.326,252.229,462.496,252.148z"/>
|
||||
<path fill="#33B6EA" d="M444.171,233.102c0.029,0.882,0.676,1.254,1.414,1.277c0.832-0.024,1.33-0.312,1.309-1.103
|
||||
c-0.025-0.961-0.773-1.254-1.521-1.317C444.675,231.901,444.152,232.416,444.171,233.102z"/>
|
||||
<path fill="#33B6EA" d="M427.648,249.127c-1.051-0.313-1.939,0.034-2.707,0.75c-0.318,0.298-0.65,0.677-0.391,1.125
|
||||
c0.375,0.642,0.975,0.372,1.475,0.175c0.799-0.313,1.918-0.069,2.268-1.163C428.248,249.538,428.027,249.242,427.648,249.127z"/>
|
||||
<path fill="#33B6EA" d="M421.107,230.936c0.881-0.002,1.307-0.541,1.424-1.314c-0.045-0.834-0.502-1.12-1.221-1.12
|
||||
c-0.822-0.003-1.26,0.387-1.262,1.222C420.044,230.434,420.333,230.938,421.107,230.936z"/>
|
||||
<path fill="#33B6EA" d="M422.009,247.63c-0.934,0.01-1.383,0.615-1.387,1.408c-0.006,0.754,0.711,0.696,1.266,0.724
|
||||
c0.75-0.02,1.385-0.207,1.375-1.121C423.257,247.83,422.71,247.622,422.009,247.63z"/>
|
||||
<path fill="#33B6EA" d="M469.253,252.525c-0.646,0.027-1.086,0.299-1.098,1c-0.018,0.799,0.477,1.088,1.203,1.094
|
||||
c0.738,0.004,1.184-0.317,1.199-1.09C470.49,252.701,469.96,252.498,469.253,252.525z"/>
|
||||
<path fill="#33B6EA" d="M315.509,76.046c0.484,0.088,0.998,0.071,1.494,0.041c0.822-0.05,1.402,0.261,1.916,0.916
|
||||
c1.646,2.095,3.092,1.881,4.469-0.422c0.668-1.117,1.658-2.063,3.182-1.97c0.58,0.036,0.764,0.437,0.686,0.906
|
||||
c-0.232,1.435-1.215,2.387-2.498,2.692c-1.053,0.251-1.49,0.629-1.158,1.594c0.322,0.933,1.145,1.559,2.051,0.995
|
||||
c1.959-1.215,4.146-1.18,6.217-1.688c2.654-0.653,6.43-0.664,7.465-4.601c0.264-0.996,2.168-1.847,1.109-2.928
|
||||
c-1.311-1.332-2.064,0.56-2.971,1.229c-0.463,0.341-0.871,0.809-1.467,0.361c-0.539-0.402-0.475-0.979-0.246-1.529
|
||||
c0.262-0.63,0.672-1.211,0.58-1.929c0.076-1.14-0.5-1.81-1.559-1.506c-1.854,0.531-3.922,0.556-5.281,2.372
|
||||
c-1.121,1.493-2.615,1.831-4.248,0.59c-1.076-0.82-2.02-1.247-2.664,0.582c-0.311,0.878-1.365,1.517-1.893,0.203
|
||||
c-0.525-1.316-1.412-1.169-2.4-1.18c-1.613-0.015-2.535,1.23-3.674,2.045c-0.5,0.356-1.371,0.796-1.025,1.586
|
||||
C313.933,75.183,314.574,75.875,315.509,76.046z"/>
|
||||
<path fill="#33B6EA" d="M341.888,70.054c1.117-0.098,1.77-0.781,1.938-1.866c0.092-0.576-0.004-1.212-0.801-1.123
|
||||
c-1.17,0.129-1.658,1.104-2.23,1.888C340.89,69.702,341.236,70.11,341.888,70.054z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Ebene_6">
|
||||
<g>
|
||||
<g>
|
||||
<defs>
|
||||
<path id="SVGID_1_" d="M121.25,51.267c0,0,5.583,58,4.625,85.229c-0.397,11.281-4.188,42.375-21.813,42.375
|
||||
c-18.979,0-21.146-22.813-44.438-22.813c-13.875,0-37.625,9.042-37.625,48.75c0,30.375,19.25,45.375,34.625,45.375
|
||||
c22.875,0,19.625-18,43.875-18c23.917,0,24.875,22.375,24.875,34.75s-3.042,47-8.875,82c4.417,0.667,11.51,1.468,23.25,5.125
|
||||
c15.917,4.959,28.125,8.875,53.625,8.875S233,353.309,233,342.309c0-17.041-15.625-14.25-15.625-34.75s20.625-30,41.25-30
|
||||
c20.625,0,41.459,9.959,41.459,34.875c0,22.5-13.084,17.125-13.084,35.75s22.375,18.125,28,18.125s61.5-1.832,87-7.041
|
||||
c-1-13.25-4.582-66.542-4.582-82.917c0-21.667,10.082-23.792,15.457-23.792c16.125,0,16.875,12.292,39.625,12.292
|
||||
c20.584,0,40.625-19.75,40.625-49.792c0-27.125-19-38.75-34.625-38.75s-20.875,13.5-47.75,13.5
|
||||
c-9.498,0-15.832-3.792-15.832-22.292c0-37.275,4.166-74.417,4.332-109.583c-18.666-2.75-66.625-10-93.125-10
|
||||
c-24.207,0-25.957,10.125-25.957,16.75c0,17.083,23.5,22.167,23.5,38.5c0,29.917-23.793,37.75-43.293,37.75
|
||||
c-17.042,0-42.458-15.583-42.458-40.083c0-12.042,3.374-15.688,6.844-19.159c5.189-5.189,11.177-8.299,11.177-16.508
|
||||
c0-14.25-14.396-16.667-31.271-16.667S121.25,51.267,121.25,51.267z"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_2_">
|
||||
<use xlink:href="#SVGID_1_" overflow="visible"/>
|
||||
</clipPath>
|
||||
<g clip-path="url(#SVGID_2_)">
|
||||
|
||||
<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="149.084" y1="733.7126" x2="149.084" y2="231.4646" gradientTransform="matrix(1 0 0 -1 0.04 514.7319)">
|
||||
<stop offset="0" style="stop-color:#FFFFFF;stop-opacity:0.9"/>
|
||||
<stop offset="1" style="stop-color:#FFFFFF;stop-opacity:0.05"/>
|
||||
</linearGradient>
|
||||
<circle fill="url(#SVGID_3_)" cx="149.124" cy="32.143" r="251.124"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 48 KiB |
460
docs/logo/puzzle.svg
Normal file
@ -0,0 +1,460 @@
|
||||
<?xml version="1.0" encoding="utf-8"?><!-- Generator: Adobe Illustrator 16.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) --><!DOCTYPE svg PUBLIC
|
||||
"-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="515.667px" height="515.668px" viewBox="0 0 515.667 515.668" enable-background="new 0 0 515.667 515.668"
|
||||
xml:space="preserve">
|
||||
<g id="Ebene_10">
|
||||
<g>
|
||||
<path fill="#707072" d="M108.925,89.292c0,0,6.092,63.286,5.047,92.998c-0.434,12.308-4.57,46.237-23.802,46.237
|
||||
c-20.709,0-23.073-24.892-48.489-24.892c-15.139,0-41.055,9.865-41.055,53.192c0,33.143,21.005,49.511,37.781,49.511
|
||||
c24.96,0,21.414-19.64,47.875-19.64c26.097,0,27.142,24.412,27.142,37.917c0,13.504-3.319,51.283-9.684,89.475
|
||||
c4.819,0.727,12.558,1.601,25.368,5.593c17.369,5.409,30.689,9.682,58.513,9.682s43.238-10.5,43.238-22.503
|
||||
c0-18.594-17.049-15.549-17.049-37.918s22.505-32.735,45.009-32.735c22.506,0,45.238,10.866,45.238,38.056
|
||||
c0,24.55-14.277,18.685-14.277,39.008c0,20.322,24.413,19.777,30.552,19.777c6.138,0,67.106-1.999,94.93-7.683
|
||||
c-1.09-14.458-4.998-72.608-4.998-90.475c0-23.643,11.001-25.961,16.865-25.961c17.595,0,18.414,13.413,43.237,13.413
|
||||
c22.46,0,44.325-21.551,44.325-54.33c0-29.599-20.73-42.283-37.779-42.283s-22.776,14.73-52.103,14.73
|
||||
c-10.363,0-17.275-4.137-17.275-24.324c0-40.672,4.546-81.199,4.727-119.571c-20.365-3.001-72.697-10.913-101.611-10.913
|
||||
c-26.414,0-28.323,11.049-28.323,18.278c0,18.64,25.643,24.187,25.643,42.009c0,32.644-25.962,41.191-47.239,41.191
|
||||
c-18.596,0-46.328-17.004-46.328-43.737c0-13.139,3.681-17.117,7.467-20.905c5.662-5.663,12.196-9.056,12.196-18.013
|
||||
c0-15.549-15.709-18.187-34.122-18.187S108.925,89.292,108.925,89.292z"/>
|
||||
<g opacity="0.2">
|
||||
<path fill="#FFFFFF" d="M310.651,85.654c28.914,0,81.246,7.911,101.611,10.913c-0.181,38.373-4.727,78.9-4.727,119.571
|
||||
c0,20.187,6.912,24.324,17.275,24.324c29.326,0,35.054-14.73,52.103-14.73s37.779,12.684,37.779,42.283
|
||||
c0,32.779-21.865,54.33-44.325,54.33c-24.823,0-25.643-13.413-43.237-13.413c-5.864,0-16.865,2.318-16.865,25.961
|
||||
c0,17.866,3.908,76.017,4.998,90.475c-27.823,5.684-88.792,7.683-94.93,7.683c-0.312,0-0.67,0-1.073,0
|
||||
c-7.485,0-29.479-0.49-29.479-19.777c0-20.323,14.277-14.458,14.277-39.008c0-27.189-22.732-38.056-45.238-38.056
|
||||
c-22.504,0-45.009,10.366-45.009,32.735s17.049,19.324,17.049,37.918c0,12.003-15.413,22.505-43.237,22.505
|
||||
c-27.824,0-41.145-4.272-58.513-9.684c-12.811-3.99-20.549-4.864-25.369-5.593c6.365-38.189,9.684-75.971,9.684-89.473
|
||||
c0-13.505-1.045-37.919-27.142-37.919c-26.461,0-22.915,19.642-47.875,19.642c-16.776,0-37.781-16.368-37.781-49.512
|
||||
c0-43.327,25.916-53.192,41.054-53.192c25.416,0,27.779,24.892,48.489,24.892c19.231,0,23.368-33.929,23.802-46.237
|
||||
c1.044-29.712-5.047-92.998-5.047-92.998s72.607-3.001,91.021-3.001s34.122,2.638,34.122,18.187
|
||||
c0,8.956-6.534,12.349-12.196,18.013c-3.787,3.787-7.468,7.766-7.468,20.905c0,26.733,27.733,43.737,46.329,43.737
|
||||
c21.277,0,47.237-8.547,47.237-41.191c0-17.822-25.643-23.369-25.643-42.009C282.328,96.702,284.237,85.654,310.651,85.654
|
||||
M310.651,85.109c-25.589,0-28.87,10.059-28.87,18.823c0,9.662,6.717,15.89,13.21,21.913
|
||||
c6.394,5.925,12.433,11.524,12.433,20.096c0,36.685-32.652,40.646-46.692,40.646c-9.562,0-20.978-4.493-29.792-11.722
|
||||
c-10.312-8.457-15.991-19.633-15.991-31.471c0-13.211,3.715-16.928,7.307-20.521c1.183-1.184,2.419-2.277,3.611-3.335
|
||||
c4.498-3.987,8.745-7.752,8.745-15.063c0-16.506-17.524-18.732-34.667-18.732c-18.213,0-90.316,2.971-91.043,3.001l-0.576,0.023
|
||||
l0.056,0.572c0.06,0.632,6.076,63.589,5.044,92.926c-0.598,16.979-6.169,45.712-23.256,45.712
|
||||
c-9.601,0-15.199-5.507-21.125-11.336c-6.774-6.663-13.783-13.555-27.363-13.555c-4.639,0-16.517,1.023-26.578,10.498
|
||||
c-9.967,9.385-15.021,23.934-15.021,43.241c0,19.236,6.926,31.037,12.738,37.549c6.99,7.83,16.556,12.506,25.588,12.506
|
||||
c12.505,0,18.092-4.951,23.494-9.741c5.488-4.869,11.163-9.897,24.381-9.897c26.597,0,26.597,26.188,26.597,37.372
|
||||
c0,12.634-3.075,49.777-9.676,89.385l-0.091,0.546l0.547,0.082c0.505,0.075,1.041,0.154,1.61,0.236
|
||||
c4.878,0.707,12.248,1.776,23.68,5.34l0.716,0.222c17.003,5.299,30.436,9.486,57.958,9.486c13.214,0,24.391-2.361,32.32-6.824
|
||||
c7.392-4.159,11.462-9.925,11.462-16.229c0-9.092-3.93-13.09-8.091-17.323c-4.404-4.48-8.958-9.118-8.958-20.593
|
||||
c0-22.236,22.333-32.189,44.465-32.189c20.616,0,44.692,9.822,44.692,37.508c0,12.65-3.82,17.057-7.511,21.316
|
||||
c-3.479,4.016-6.766,7.807-6.766,17.691c0,8.489,4.131,14.422,12.275,17.629c6.134,2.417,13.065,2.695,17.746,2.695h0.608
|
||||
l0.467-0.002c4.858,0,66.407-1.844,95.039-7.694l0.476-0.095l-0.036-0.481c-1.018-13.479-5.001-72.552-5.001-90.432
|
||||
c0-16.863,5.493-25.415,16.323-25.415c7.888,0,12.421,2.798,17.221,5.764c5.805,3.582,12.383,7.649,26.017,7.649
|
||||
c11.35,0,22.647-5.488,30.997-15.061c8.946-10.256,13.876-24.397,13.876-39.816c0-13.566-4.38-24.852-12.671-32.638
|
||||
c-6.891-6.476-16.243-10.189-25.655-10.189c-7.512,0-12.767,2.755-18.853,5.948c-7.85,4.114-16.745,8.783-33.25,8.783
|
||||
c-10.042,0-16.731-4.043-16.731-23.778c0-21.048,1.23-42.255,2.421-62.763c1.143-19.693,2.22-38.293,2.309-56.807l0.002-0.475
|
||||
l-0.47-0.069l-2.648-0.386C388.373,92.485,338.428,85.109,310.651,85.109L310.651,85.109z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Ebene_5">
|
||||
<g>
|
||||
<path fill="#33B6EA" d="M407.896,309.423c0.292-2.983-1.491-5.002-3.092-7.095c-0.7-0.912-0.66-1.583,0.177-2.261
|
||||
c0.961-0.774,0.921-1.646,0.526-2.733c-0.78-2.159-2.248-3.857-3.484-5.725c-1.466-2.203-4.461-4.076-2.152-7.429
|
||||
c0.388-0.568-0.051-1.715,0.979-1.8c0.986-0.082,1.221,0.965,1.643,1.614c0.897,1.399,1.938,2.258,3.723,1.58
|
||||
c0.49-0.183,1.077-0.112,1.624-0.132c2.425-0.094,4.182-1.515,4.998-4.054c0.849-2.653,0.264-4.913-1.79-6.354
|
||||
c-0.905-0.639-1.721-1.346-2.408-2.191c-0.569-0.707-0.616-1.549,0.03-2.238c0.832-0.884,1.717-1.967,3.022-1.818
|
||||
c1.164,0.13,0.653,1.306,0.691,2.042c0.058,1.075,0.11,2.279,1.445,2.256c1.176-0.021,1.287-1.218,1.376-2.18
|
||||
c0.068-0.726-0.206-1.726,0.646-1.996c1.747-0.555,3.291-1.586,5.151-1.888c3.894-0.63,6.798-2.64,8.199-6.463
|
||||
c0.56-1.528,1.059-3.01,2.181-4.312c0.981-1.131,1.195-2.616,0.676-4.23c-0.746-2.309-2.063-4.291-3.246-6.348
|
||||
c-0.734-1.273-0.449-1.956,0.761-2.614c0.973-0.526,2.35-0.481,2.798-1.826c0.038-0.207,0.079-0.412,0.12-0.619l-0.078-0.511
|
||||
c-2.35,0.232-4.872,0.36-7.601,0.36c-10.363,0-17.275-4.137-17.275-24.324c0-33.515,3.084-66.929,4.271-99.125
|
||||
c-0.501,0.07-0.954,0.132-1.053,0.141c-0.515-0.32-1.025-0.642-1.538-0.965c0,0,0-0.001,0-0.002
|
||||
c0.063-0.533-0.031-1.153,0.212-1.585c1.029-1.849,1.129-3.661,0.058-5.508c-2.433-0.673-3.734,0.91-5.115,2.477
|
||||
c-1.617,1.839-3.029,3.825-4.294,5.902c-1.633,2.681-4.156,2.578-6.695,2.285c-1.834-0.21-3.474-0.293-4.844,1.29
|
||||
c-0.498,0.574-1.275,0.986-2.105,1.187c-1.955,0.464-3.128,1.841-3.925,3.579c-1.851,4.039-4.382,7.434-8.638,9.208
|
||||
c-1.244,0.519-1.709,1.429-1.613,2.752c0.076,1.02,0.019,2.046,0.015,3.069c-0.004,0.768-0.408,1.311-1.072,1.602
|
||||
c-0.695,0.303-1.191-0.175-1.574-0.652c-0.895-1.108-1.683-2.295-2.611-3.369c-1.032-1.195-2.267-1.536-3.53-0.317
|
||||
c-0.666,0.64-1.283,0.676-2.197,0.54c-1.603-0.242-3.259-0.146-4.895-0.152c-1.06-0.003-1.494,0.796-1.923,1.598
|
||||
c-1.182,2.21-2.061,4.563-3.571,6.63c-0.888,1.22-0.246,2.924-0.307,4.406c-0.092,2.175-0.371,2.38-2.431,1.545
|
||||
c-0.377-0.153-0.778-0.254-1.154-0.411c-0.954-0.396-1.82-0.784-0.823-2.046c0.478-0.604,0.3-1.389-0.343-1.814
|
||||
c-3.039-2.018-1.981-4.979-1.569-7.594c0.474-2.938,2.129-5.418,4.249-7.542c0.335-0.337,0.684-0.673,0.966-1.055
|
||||
c0.736-0.985,0.844-2.044,0.015-3.001c-0.854-0.992-1.883-0.604-2.774-0.045c-3.603,2.27-5.945,5.479-7.208,9.56
|
||||
c-0.986,3.201-0.821,6.458-0.805,9.72c0.006,1.499,1.193,2.018,2.279,2.6c0.934,0.505,2.179,0.772,2.161,2.155
|
||||
c-0.018,1.367-1.249,1.639-2.184,2.15c-0.417,0.227-0.889,0.419-1.213,0.745c-1.721,1.735-3.57,1.524-5.358,0.264
|
||||
c-1.174-0.823-2.053-0.821-3.019,0.246c-0.397,0.438-0.969,0.76-1.514,1.016c-2.108,0.979-4.151,2.029-5.599,3.939
|
||||
c-0.2,0.266-0.435,0.629-0.816,0.445c-0.497-0.24-0.256-0.667-0.146-1.055c0.783-2.672-1.411-5.19-4.214-4.855
|
||||
c-1.387,0.167-2.309,1.604-2.002,3.244c0.249,1.33,0.542,2.659,0.899,3.962c0.208,0.742,0.29,1.414-0.553,1.687
|
||||
c-0.863,0.279-1.241-0.405-1.461-1.068c-0.248-0.77-0.364-1.581-0.582-2.363c-0.18-0.649-6.567-6.502-7.252-6.693
|
||||
c-0.065-0.018-0.132-0.012-0.204-0.017c-0.027,0.083-0.296,0.043-0.685-0.061c-2.444,14.433-10.949,22.904-21.363,27.53
|
||||
c-0.147,0.229-0.294,0.421-0.463,0.517c-0.633,1.343-0.407,2.478,0.835,3.354c0.658,0.468,1.292,0.979,1.989,1.382
|
||||
c0.685,0.395,1.06,0.93,0.776,1.658c-0.489,1.252-0.285,2.533-0.309,3.806c-0.019,1.23-0.133,2.277-1.83,1.615
|
||||
c-0.682-0.262-1.173,0.07-1.479,0.699c-0.521,0.431-0.755,1.008-0.833,1.66c-0.441,0.301-0.391,0.762-0.387,1.206
|
||||
c-0.317,1.203-0.594,2.43-1.658,3.25c-0.688,0.229-1.437,0.315-2.003,0.837c-0.689,0.018-1.381,0.031-2.07,0.047
|
||||
c-0.82,0.052-1.704-0.316-2.433,0.359c-0.281,0.02-0.564,0.038-0.843,0.058c-1.492-0.1-3.014,0.116-4.47-0.41
|
||||
c-0.407-0.29-0.818-0.577-1.227-0.866c0.006-1.147,0.051-2.293,0.008-3.435c-0.036-0.959,0.373-2.078-0.807-2.709l-0.008-0.013
|
||||
c-0.57-0.973-1.142-0.909-1.711,0c-0.135,0.136-0.27,0.271-0.401,0.406c-0.599,0.936-2.547,1.445-1.712,2.757
|
||||
c1.48,2.322,1.834,4.272-0.375,6.229c-0.807,0.054-1.61,0.111-2.41,0.162c-0.112,0.096-0.224,0.193-0.334,0.289
|
||||
c-1.23,0.766-1.778,2.045-2.246,3.297c-0.36,0.96-1.028,1.641-1.751,2.175c-0.635,0.472-1.782,0.628-1.681-0.718
|
||||
c0.239-3.071-1.484-5.418-3.036-7.646c-1.152-1.659-1.721-3.558-2.208-5.264c-0.508-1.777-1.355-3.357-1.99-5.031
|
||||
c-0.54-1.425-2.4-1.527-2.797-0.163c-0.615,2.117-2.624,4.223-0.609,6.632c0.356,0.424,0.515,1.039,0.128,1.521
|
||||
c-0.406,0.506-0.982,0.282-1.509,0.113c-1.531-0.491-2.803-0.064-3.877,1.093c-0.703,0.757-1.5,1.356-2.531,1.639
|
||||
c-0.831,0.229-1.223,0.98-0.582,1.523c1.411,1.197,1.338,2.691,1.347,4.269c0.008,1.5,0.956,2.038,2.331,1.8
|
||||
c1.294-0.223,2.411-0.882,3.482-1.624c0.479-0.332,0.964-1.001,1.604-0.547c0.646,0.46,0.409,1.26,0.248,1.89
|
||||
c-0.129,0.508-0.433,1.01-0.775,1.416c-0.558,0.656-1.146,1.323-0.5,2.146c0.602,0.767,1.467,0.466,2.263,0.229
|
||||
c1.82-0.542,3.566-1.334,5.48-1.561c0.506-0.059,1-0.189,1.214,0.367c0.272,0.705-0.319,1.001-0.815,1.171
|
||||
c-1.285,0.439-2.603,0.767-3.884,1.204c-0.91,0.309-1.809,0.716-2.026,1.809c-0.241,1.215,0.54,1.923,1.413,2.487
|
||||
c1.265,0.818,2.229,1.79,2.275,3.398c0.109,0.682,0.219,1.365,0.33,2.047c0.093,0.731-0.082,1.341-0.78,1.712
|
||||
c-1.853,0.694-3.73,0.459-5.588,0.088c-3.874-0.773-6.338,1.533-5.242,5.239c0.275,0.927,0.494,2.054,0.049,2.803
|
||||
c-1.415,2.396-0.244,4.29,0.822,6.289c0.642,1.204,1.496,1.578,2.849,1.312c1.725-0.339,3.482-0.571,5.237-0.668
|
||||
c1.955-0.11,3.695-0.763,4.131-2.696c0.978-4.362,5.456-5.59,7.571-8.888c0.137-0.21,0.623-0.306,0.934-0.281
|
||||
c1.546,0.127,2.965-0.188,4.301-0.982c0.376-0.224,1.254-0.398,1.091,0.189c-0.432,1.53,1.386,3.451-0.809,4.656
|
||||
c-0.248,0.134-0.359,0.571-0.461,0.892c-0.25,0.753-0.216,1.467,0.388,2.082c0.672,0.686,1.511,0.639,2.292,0.413
|
||||
c0.763-0.226,1.172-0.85,1.216-1.705c0.051-0.989-0.104-1.898-0.723-2.697c-0.297-0.384-0.632-0.784-0.168-1.247
|
||||
c0.493-0.498,1.203-0.652,1.66-0.189c1.915,1.926,4.688,2.796,6.242,5.148c0.138,1.721-1.023,1.717-2.22,1.686
|
||||
c-0.639-0.018-1.213,0.13-1.383,0.854c-0.14,0.592-0.007,1.061,0.705,1.149c0.41,0.41,0.817,0.816,1.225,1.226
|
||||
c0.293,1.096,0.838,0.699,1.493,0.316c1.613-0.942,2.538-2.551,3.816-3.817c1.014-1.003,1.986-1.477,2.618,0.402
|
||||
c0.166,0.489,0.408,1.029,1.094,1.029c0.012,0.368,0.113,0.675,0.502,0.81c0.133,1.179,0.842,1.803,1.952,2.049
|
||||
c0.591,0.066,1.212,0.256,1.62-0.406c0.943-0.135,1.503-0.642,1.566-1.63c0.054-0.118,0.081-0.246,0.088-0.377
|
||||
c1.227-0.282,0.592-1.338,0.844-2.022c0.254-0.678,0.363-1.694,1.321-1.531c0.903,0.151,0.512,1.003,0.524,1.681
|
||||
c0.071,3.721,3.276,6.662,5.917,6.221c0.538,0,1.074-0.001,1.613-0.001c1.292,0.036,2.581,0.078,3.87,0.106
|
||||
c1.026,0.023,1.688,0.515,1.889,1.517c0.398,2.036-2.479,5.559-4.571,5.512c-3.058-0.07-6.191,1.788-9.177-0.367
|
||||
c-0.225-0.165-0.667-0.055-1.006-0.029c-1.408,0.103-2.738-0.223-3.908-0.951c-1.889-1.174-3.222-0.246-4.452,1.059
|
||||
c-0.455,0.485-0.745,1.132-1.111,1.704c-0.755,1.185-1.559,1.336-2.628,0.293c-0.808-0.79-1.388-1.891-2.623-2.178
|
||||
c0.034-0.63-0.545-0.816-0.861-1.194c-0.065-0.531-0.186-0.943-0.777-0.373c-0.273-0.017-0.546-0.032-0.82-0.048
|
||||
c-0.072-0.484-0.273-0.806-0.843-0.639c-0.408-0.057-0.815-0.113-1.228-0.171c-0.075-0.774-0.632-0.812-1.223-0.802
|
||||
c-0.182-0.277-0.366-0.555-0.549-0.833c0.136-0.979,0.092-1.97,0.412-2.942c0.191-0.575,0.34-1.386-0.697-1.517
|
||||
c-0.23-0.613-0.649-1.031-1.259-1.258c-0.088-0.92-0.82-0.89-1.38-0.772c-2.967,0.625-6.003,0.06-8.936,0.522
|
||||
c-1.461,0.229-3.359-0.281-4.387,1.45c-0.522,0.136-1.121,0.154-1.56,0.429c-2.368,1.488-4.863,1.888-7.584,1.212
|
||||
c-0.8-0.2-1.84-0.054-2.149,0.796c-0.974,2.679-3.813,4.354-3.95,7.478c-0.014,0.331-0.424,0.687-0.714,0.961
|
||||
c-1.786,1.68-3.409,3.518-5.324,5.078c-1.387,1.126-3.06,2.243-3.153,4.318c-0.048,1.069-0.468,1.847-1.263,2.432
|
||||
c-1.728,1.271-1.813,2.868-1.529,4.88c0.244,1.729,1.193,3.532,0.157,5.343c-1.621,2.835-1.67,4.582,0.464,6.843
|
||||
c3.317,3.515,6.108,7.464,9.49,10.928c2.129,2.182,4.348,2.58,7.024,1.688c1.734-0.58,3.628-0.845,5.22-0.221
|
||||
c1.661,0.646,2.832,0.292,4.189-0.458c2.05-1.127,4.08-1.447,6.059,0.269c1.13,0.978,2.578,1.149,4.023,1.22
|
||||
c0.742,0.036,1.479,0.002,2.218,0.242c1.437,0.468,2.016,1.054,0.817,2.443c-1.391,1.612-1.895,3.514-0.912,5.5
|
||||
c1.17,2.364,2.492,4.646,3.752,6.964c-0.158,1.241,0.445,2.172,1.115,3.16c1.471,2.161,2.274,4.347,0.758,7.005
|
||||
c-2.419,4.226-3.129,8.629-0.462,13.121c0.432,0.729,0.664,1.647,0.567,2.564c0.066,0.113,0.101,0.564,0.139,0.994
|
||||
c10.184,1.838,19.545,6.234,25.784,13.74c2.132-2.29,4.942-5.162,5.623-8.088c0.087-0.363,0.358-0.84,0.672-0.978
|
||||
c2.197-0.968,2.192-2.791,2.133-4.797c-0.047-1.456-0.658-3.198,0.454-4.353c1.713-1.788,3.122-3.999,5.697-4.833
|
||||
c0.987-0.319,1.569-1.237,1.567-2.218c-0.002-2.97,0.033-5.94-1.174-8.793c-0.802-1.901-2.063-3.791-1.451-6.017
|
||||
c1.104-4.02,3.852-6.955,6.926-9.491c4.628-3.81,8.019-8.466,10.404-13.896c0.512-1.159,1.11-2.644,0.104-3.667
|
||||
c-0.962-0.974-2.432-0.444-3.697-0.214c-2.269,0.409-4.447,1.353-6.827,1.051c-0.674-0.084-1.415,0.01-1.688-0.827
|
||||
c-0.176-0.531,0.165-0.909,0.518-1.243c0.57-0.547,1.217-0.615,1.859-0.163c1.37,0.962,2.679,0.58,4.039-0.047
|
||||
c2.935-1.348,5.273-3.797,8.197-4.959c3.28-1.305,6.091-2.958,8.421-5.588c0.898-1.01,1.983-1.851,2.705-3.035
|
||||
c0.63-1.027,0.558-1.929-0.353-2.735c-0.939-0.835-2.086-1.709-3.271-1.41c-2.573,0.653-4.979,0.43-7.387-0.538
|
||||
c-1.343-0.823-1.94-2.19-2.62-3.516c-0.871-1.704-1.793-3.364-4.042-3.575c-0.583-0.056-1.23-0.408-1.095-1.209
|
||||
c0.124-0.729,0.765-0.889,1.37-1.006c1.914-0.371,3.22,0.633,4.402,1.95c1.912,2.129,4.033,3.849,7.174,3.392
|
||||
c1.513,1.982,3.877,2.654,5.904,3.847c1.018,0.599,1.918,0.565,2.824-0.152c1.589-1.255,3.249-1.21,4.96-0.271
|
||||
c1.192,0.654,2.365,1.351,3.577,1.966c0.91,0.464,1.348,0.982,0.982,2.099c-0.458,1.413,0.452,2.45,1.651,2.529
|
||||
c2.521,0.166,2.9,1.74,3.082,3.714c0.48,5.227,2.862,9.695,5.739,13.937c1.045,1.542,2.422,1.703,3.821,0.491
|
||||
c2.266-1.962,3.307-4.584,2.944-7.472c-0.201-1.602,0.305-2.357,1.417-3.219c2.739-2.124,5.835-3.985,7.758-6.877
|
||||
c1.635-2.454,4.021-2.204,6.234-2.74c0.562-0.135,1.157,0.369,1.498,0.924c1.313,2.117,3.005,4.019,3.057,6.772
|
||||
c0.027,1.493,0.906,2.549,2.672,2.379c2.488-0.236,3.783,1.01,3.194,3.457c-1.211,5.04-0.943,9.595,3.37,13.178
|
||||
c0.153,0.122,0.247,0.328,0.33,0.513c0.237,0.502,1.247,0.887,0.627,1.479c-0.704,0.678-1.355-0.075-1.89-0.599
|
||||
c-0.919-0.908-1.784-1.878-2.75-2.741c-0.838-0.753-1.936-0.981-2.783-0.207c-0.808,0.736,0.073,1.551,0.469,2.16
|
||||
c0.848,1.302,2.022,2.358,2.859,3.702c1.945,3.114,4.025,6.15,6.02,9.231c0.309,0.48,0.693,0.811,1.182,1.085
|
||||
c3.299,1.855,6.101,4.785,10.288,4.725c0.169-0.004,0.857,0.158,1.387,0.295c0.984-1.271,2.059-2.257,3.162-3.014
|
||||
c-2.632-0.873-6.244-0.9-8.813-0.922C408.916,310.436,407.771,310.668,407.896,309.423z M248.106,203.852
|
||||
c-0.105,0.961-0.319,1.971-1.522,2.079c-0.99,0.09-1.237-0.631-1.227-1.399c-0.018-1.147,0.351-1.993,1.511-2.116
|
||||
C247.843,202.313,248.199,202.988,248.106,203.852z M280.506,234.099c-1.147-1.119-2.281-2.253-3.413-3.392
|
||||
c-0.526-0.533-1.063-1.035-1.898-0.929c-0.269-0.272-0.539-0.546-0.81-0.82c0.384-0.639-1.387-2.143,0.821-2.05
|
||||
c0.813,0.545,1.624,1.088,2.437,1.634c0.06,0.511,0.309,0.799,0.862,0.742c0.974,0.979,1.948,1.953,2.927,2.932
|
||||
c-0.061,0.545,0.222,0.792,0.737,0.836c-0.011,0.136,0.016,0.269,0.073,0.391C282.121,234.861,281.538,235.104,280.506,234.099z
|
||||
M310.93,169.246c0.843,0.068,1.077,0.663,1.056,1.413c-0.012,0.66-0.207,1.284-0.969,1.232c-0.824-0.053-1.307-0.637-1.338-1.472
|
||||
C309.646,169.59,310.124,169.178,310.93,169.246z M302.464,230.89c-1.204,0.452-2.401,0.991-3.651,1.262
|
||||
c-2.104,0.454-3.354-1.005-2.543-3.01c0.567-1.396,1.108-2.709,1.117-4.274c0.006-1.433,1.293-1.519,2.406-1.659
|
||||
c1.809,0.343,3.851,0.172,4.572,2.583c0.264,0.882,1.213,1.22,2.083,1.496c1.915,0.612,3.569,1.636,4.879,3.194
|
||||
c0.34,0.408,0.876,0.773,0.541,1.395c-0.276,0.519-0.889,0.441-1.288,0.306c-1.563-0.529-3.336-0.002-4.8-1.303
|
||||
C304.946,230.14,303.59,230.466,302.464,230.89z M313.45,279.994c-0.237-1.545-1.684-2.25-2.433-3.455
|
||||
c-1.822-2.924-2.863-6.164-4.108-9.313c-0.834-2.094-1.764-4.119-2.74-6.142c-0.292-0.61-1.148-1.352-0.236-1.954
|
||||
c0.857-0.568,1.267,0.488,1.779,0.938c1.252,1.094,2.091,2.492,2.812,3.972c2.295,4.684,4.576,9.365,6.864,14.049
|
||||
C315.312,279.308,315.772,281.071,313.45,279.994z M325.997,238.184c-0.138-0.935-0.046-1.899-0.08-2.851
|
||||
c-0.021-0.585,0.153-1.287-0.723-1.45c-0.023-0.7-0.046-1.4-0.068-2.101c0.704-0.631,0.004-1.127-0.238-1.563
|
||||
c-1.007-1.795-1.55-3.687-1.474-5.75c0.382-0.524,0.622-1.183,1.351-1.362c1.481-0.229,2.898-1.103,4.47-0.436
|
||||
c0.187,0.188,0.371,0.378,0.557,0.566c-0.2,0.94-1.07,0.938-1.732,1.181c-1.089,0.399-2.29,0.693-2.415,2.115
|
||||
c-0.127,1.453,0.064,2.832,1.519,3.655c0.063,1.062,1.066,1.581,1.418,2.474c0.118,0.087,0.294,0.18,0.42,0.27
|
||||
c-0.126-0.09-0.304-0.183-0.422-0.271c-0.031,1.077-0.232,2.182-0.062,3.228c0.247,1.526,0.215,3.263,1.897,4.166
|
||||
c0.007,0.247,0.011,0.495,0.013,0.744C327.842,241.693,326.393,240.866,325.997,238.184z M361.558,144.455
|
||||
c-0.667,0.19-0.735-0.424-0.727-0.92c0.015-0.938,0.508-1.541,1.416-1.727c0.545-0.111,0.928,0.144,0.935,0.912
|
||||
C363.037,143.546,362.444,144.202,361.558,144.455z M369.867,165.421c-0.914-0.167-2.027-0.295-2.07-1.766
|
||||
c-0.021-0.766,0.271-1.407,1.119-1.338c1.194,0.101,2.272,0.55,2.415,1.942C371.422,165.105,370.814,165.417,369.867,165.421z"/>
|
||||
<path fill="#33B6EA" d="M78.988,229.038c-1.861,2.572-1.729,5.228-0.459,7.997c0.235,0.515,0.139,1.195,0.152,1.797
|
||||
c0.013,0.579,0.095,1.083,0.759,1.251c0.025,0.244,0.053,0.487,0.08,0.731c-0.038,0.546,0.254,0.799,0.764,0.862
|
||||
c-0.002,0.127,0.019,0.249,0.066,0.37c-0.049,0.545,0.244,0.795,0.749,0.867c-0.004,0.125,0.018,0.248,0.069,0.363
|
||||
c-0.043,0.541,0.246,0.793,0.747,0.863c0.621,2.214,2.144,4.039,3.919,5.046c2.554,1.448,3.458,3.696,4.406,6.077
|
||||
c1.888,4.75,5.445,8.431,8.078,12.703c0.493,0.794,1.374,0.933,2.183,0.534c0.973-0.476,0.467-1.276,0.241-1.958
|
||||
c-0.671-2.048-1.972-3.71-3.246-5.397c-0.861-1.137-1.687-2.305-2.468-3.497c-0.283-0.427-0.721-1.108-0.117-1.447
|
||||
c0.647-0.362,0.875,0.403,1.107,0.868c0.297,0.6,0.369,1.285,0.903,1.797c2.086,2.021,4.099,4.107,6.045,6.278
|
||||
c1.842,2.057,3.167,4.134,3.647,6.88c0.259,1.476,0.614,3.399,2.317,3.834c3.805,0.966,7.133,3.355,11.036,3.806
|
||||
c3.25,0.375,6.318,0.828,8.643,3.39c0-0.002,0.13,0.028,0.13,0.028l0.135-0.007c0.473,0.907,1.35,0.959,2.213,1.038
|
||||
c1.804,0.601,3.096,1.823,4.106,3.389c0,1.259,0.042,2.493,1.611,2.866c0.138,0.321,0.406,0.434,0.732,0.455
|
||||
c1.005,1.424,2.621,1.456,4.099,1.742c1.191,0.231,2.498,0.93,3.479-0.485c0.363-0.059,0.722-0.118,1.084-0.177
|
||||
c0.941,0.218,1.189,0.857,1.305,1.767c0.198,1.607-0.437,3.021-0.793,4.501c-0.037,0.249-0.077,0.495-0.116,0.743
|
||||
c-1.112,0.479-1.318,1.508-1.535,2.532c-0.485,1.688-1.971,2.557-3.081,3.732c-1.751,1.847-1.899,6.25-0.32,8.229
|
||||
c2.128,2.673,4.232,5.427,5.147,8.75c1.123,4.061,3.106,7.155,7.354,8.399c0.501,0.147,0.932,0.562,1.368,0.883
|
||||
c1.217,0.911,1.933,2.051,1.842,3.659c-0.071,1.292,0.028,2.59-0.001,3.888c-0.111,5.203,0.418,10.486-1.895,15.424
|
||||
c-0.166,0.354-0.165,0.798-0.191,1.205c-0.308,4.739-0.57,9.479-2.658,13.885c-0.541,1.149-0.3,2.261,0.783,3.103
|
||||
c0.505,0.394,0.939,0.938,0.49,1.576c-0.948,1.341-0.715,3.158-1.908,4.425c-0.576,0.613-0.486,1.488-0.071,2.307
|
||||
c1.729,3.398,1.146,6.566-1.054,9.542c-0.614,0.827-1.236,1.705-1.237,2.752c-0.001,2.795-0.592,5.539-0.496,8.349
|
||||
c0.159,4.661,2.12,6.953,6.685,7.476c1.43,0.159,1.913,1.038,1.229,2.237c-1.562,2.744-0.347,4.744,2.882,4.748
|
||||
c1.773,0.006,3.549,0.068,5.318-0.022c1.005-0.054,2.363,0.604,2.914-0.755c0.59-1.455-0.415-2.448-1.438-3.3
|
||||
c-0.465-0.386-0.989-0.721-1.526-1.003c-4.742-2.498-5.607-7.749-1.879-11.479c0.241-0.244,0.482-0.483,0.722-0.727
|
||||
c2.797-2.821,2.848-3.684,0.158-6.521c-0.766-0.803-0.909-1.374-0.069-2.205c2.024-1.996,2.999-4.679,4.472-7.04
|
||||
c0.499-0.797,0.674-1.604-0.077-2.428c-1.087-1.194-0.409-1.661,0.837-1.764c1.1-0.087,1.969-0.708,2.037-1.681
|
||||
c0.155-2.241,1.584-2.333,3.269-2.425c3.627-0.192,6.176-3.527,5.331-7.009c-0.323-1.33,0.301-1.667,1.33-1.614
|
||||
c1.596,0.093,2.688-0.657,3.736-1.734c1.202-1.243,2.216-2.592,2.94-4.151c1.664-3.575,3.186-7.231,4.997-10.734
|
||||
c1.966-3.803,5.061-6.368,9.135-7.905c2.746-1.039,4.463-3.355,5.567-6.07c1.387-0.987,1.308-2.595,1.518-3.984
|
||||
c0.457-3.065,0.566-6.185,2.711-8.722c0.813-0.965,1.812-1.859,1.887-3.262c0.002,0.002,0.005,0.02,0.005,0.02
|
||||
c4.065-3.266,3.701-7.931-0.794-10.24c-0.606-0.311-1.221-0.623-1.756-1.033c-1.207-0.918-2.588-1.209-4.016-1.646
|
||||
c-3.159-0.972-6.544-1.384-9.301-3.673c-1.551-1.286-3.69-2.136-5.874-0.871c-0.306,0.179-0.646,0.328-0.947,0.088
|
||||
c-0.401-0.315-0.297-0.748-0.05-1.093c0.711-0.984,0.869-1.999,0.184-3.034c-1.946-2.944-4.461-5.209-8.019-5.87
|
||||
c-1.715-0.317-3.051-1.043-4.214-2.265c-2.116-2.226-4.377-4.247-7.028-5.878c-1.734-1.066-3.299-1.163-4.973-0.257
|
||||
c-1.735,0.938-3.155,0.576-4.366-0.849c-1.521-1.79-3.313-2.996-5.708-2.094c-2.076,0.788-4.78,1.374-5.857,2.961
|
||||
c-1.257,1.854-3.244,2.776-4.368,4.653c-1.061,1.77-2.98,1.484-4.608,0.923c-1.591-0.55-2.492-1.809-2.496-3.612
|
||||
c-0.003-1.37,0.18-2.706,0.358-4.059c0.274-2.101-0.632-3.235-2.71-3.087c-3.593,0.256-3.579-1.217-3.284-4.179
|
||||
c0.062-0.602,0.269-1.195,0.453-1.779c0.268-0.854,0.638-1.75-0.204-2.455c-0.841-0.702-1.88-0.827-2.904-0.497
|
||||
c-1.405,0.443-2.598,1.276-3.384,2.521c-1.325,2.106-3.367,1.438-5.186,1.367c-1.679-0.067-2.311-1.373-2.759-2.852
|
||||
c-0.743-2.447-0.92-4.932-0.868-7.465c0.07-3.483,2.242-5.628,5.786-5.634c2.101-0.003,4.116,0.022,6.172-0.936
|
||||
c2.16-1.006,4.59-0.076,6.789,0.425c1.403,0.318,1.241,2.266,1.773,3.484c0.704,1.613,1.218,3.281,2.902,4.304
|
||||
c1.483,0.899,2.274,0.388,2.908-0.934c0.471-0.987,0.454-1.999-0.089-2.943c-0.642-1.117-1.363-2.195-2.036-3.296
|
||||
c-1.291-2.115-1.116-3.608,0.653-5.44c0.327-0.341,0.749-0.584,1.107-0.895c2.013-1.742,3.916-3.585,5.502-5.742
|
||||
c0.347-0.475,0.654-0.993,0.381-1.499c-0.715-1.335,0.18-2.016,0.98-2.761c1.164-1.084,2.557-2.319,2.285-3.912
|
||||
c-0.398-2.319,1.052-2.16,2.393-2.37c0.735-0.115,1.516-0.047,2.213-0.266c1.072-0.331,1.738-0.979,0.712-2.074
|
||||
c-1.383-1.473-0.374-2.112,0.887-2.685c1.981-2.108,2.691-2.145,6.272-0.35c1.237-0.014,2.542,0.301,3.564-0.742
|
||||
c0.876-1.099,1.425-2.199,0.132-3.396c-0.698-0.647-1.376-1.323-2.023-2.026c-0.781-0.848-1.144-1.828-0.795-3.004
|
||||
c0.789-2.637,0.113-3.385-2.637-2.994c-0.714,0.104-1.477,0.802-2.24-0.059c0.828-0.832,1.536-1.673,2.744-1.736
|
||||
c2.308,0.009,4.618,0.019,6.927,0.03c0.285-0.002,0.57,0,0.854,0c0.678,0.075,1.424,0.312,1.651-0.691
|
||||
c1.789-1.224,2.84-3.361,5.177-3.954c0.916-0.233,1.056-1.303,0.987-2.23c0.377-0.297,0.366-0.566-0.057-0.803
|
||||
c-0.686-3.168-2.416-4.902-4.922-4.928c-0.928-0.87-1.162-2.314-2.404-2.928c-0.024-0.255-0.051-0.512-0.077-0.767
|
||||
c-0.854-3.666-3.196-6.696-4.376-10.231c-0.286-0.854-1.184-1.125-1.993-0.329c-0.778,0.763-1.525,1.559-2.317,2.31
|
||||
c-0.627,0.598-1.272,1.468-2.237,1.042c-0.961-0.426-1.563-1.356-1.673-2.425c-0.112-1.081-0.063-2.179-0.062-3.269
|
||||
c0.001-0.771-0.061-1.553-0.665-2.076c-2.789-2.402-5.791-4.194-9.714-3.892c-3.164,0.241-4.555,2.432-3.079,5.15
|
||||
c0.454,0.841,0.996,1.652,0.34,2.651c-1.947,2.964-1.114,5.811,0.39,8.624c0.024,0.273,0.051,0.547,0.076,0.819
|
||||
c-0.005,1.304,0.004,2.575-1.235,3.48c-2.797,2.041-3.089,4.659-1.843,7.745c0.765,1.891,0.182,2.583-1.854,2.689
|
||||
c-0.188-1.086-1.016-1.728-1.705-2.467c0.004-0.068,0.018-0.134,0.013-0.205c-0.355-5.745-1.033-7.693-6.86-7.171
|
||||
c-2.163,0.195-3.938-1.181-4.641-3.266c-1.033-3.056-3.408-4.891-5.872-6.637c-1.309-0.931-1.864-1.924-0.937-3.433
|
||||
c0.744-1.212,1.192-2.698,2.169-3.656c2.011-1.974,3.277-4.955,6.682-5.222c0.833-0.065,1.65-0.852,1.597-1.653
|
||||
c-0.168-2.456,0.906-4.528,1.523-6.775c0.525-1.909,1.398-2.585,3.054-2.911c0.664-0.131,1.328-0.322,1.949-0.586
|
||||
c3.007-1.269,3.98-3.615,2.808-6.777c-0.249-0.671-0.469-1.467-0.137-1.982c1.246-1.934-0.008-3.192-1.067-4.494
|
||||
c-0.405-0.5-0.81-1.291-1.574-1.13c-0.885,0.186-1.214,1.057-1.448,1.843c-0.366,1.235-0.592,2.516-0.981,3.744
|
||||
c-0.242,0.763-0.549,1.68-1.617,1.536c-1.144-0.155-0.695-1.144-0.756-1.813c-0.083-0.91,0.005-1.849-1.384-1.719
|
||||
c-2.999,0.285-4.384-0.965-4.356-3.972c0.018-1.958-0.339-3.823-1.429-5.445c-2.13-3.174-3.067-3.146-5.043,0.03
|
||||
c-0.322,0.515-0.645,1.049-0.854,1.616c-0.551,1.507-0.926,3.14,0.093,4.511c1.067,1.433,1.733,3.085,2.792,4.503
|
||||
c0.706,0.949,1.279,1.938,0.014,2.796c-1.083,0.736-2.111,0.483-3.133-0.406c-1.429-1.243-1.499-2.797-1.44-4.474
|
||||
c0.039-1.105,0.008-2.383-1.208-2.782c-1.087-0.354-1.842,0.644-2.566,1.356c-0.242,0.238-0.496,0.488-0.649,0.783
|
||||
c-0.579,1.112-1.024,2.115,0.765,2.675c1.463,0.459,1.451,1.513,0.705,2.745c-0.422,0.699-2.281,1.267-3.987,1.73
|
||||
c0.221,7.302,0.275,14.064,0.08,19.642c-0.433,12.308-4.57,46.237-23.802,46.237c-4.41,0-7.984-1.136-11.13-2.912
|
||||
c-0.001,1.142-0.006,1.956-0.015,2.104C79.335,228.167,79.277,228.636,78.988,229.038z M147.153,227.965
|
||||
c0.184-1.168,1.059-1.455,2.105-1.416c0.884-0.002,1.529,0.358,1.368,1.312c-0.229,1.358-1.395,0.989-2.286,1.044
|
||||
C147.695,228.942,147.016,228.847,147.153,227.965z M136.335,227.479c-0.691,1.075-0.787,2.271-0.812,3.503
|
||||
c-0.018,0.817-0.507,1.265-1.325,1.168c-0.863-0.101-1.053-0.729-0.925-1.486c0.218-1.397,0.386-2.801,0.665-4.185
|
||||
c0.223-1.11,1.143-1.74,2.096-1.384C137.209,225.536,136.897,226.604,136.335,227.479z M146.568,230.325
|
||||
c-0.272,1.146-1.194,1.791-2.314,2.145c-0.704,0.223-1.271-0.205-1.24-0.917c0.063-1.336,0.934-2.021,2.212-2.151
|
||||
C145.818,229.342,146.498,229.302,146.568,230.325z M131.908,219.503c0.366-0.386,0.696-0.636,1.014-0.75
|
||||
C132.604,218.867,132.274,219.117,131.908,219.503c0.939,0.001,1.879,0.003,2.818,0.004c1.227,0.081,2.001,0.995,2.446,1.867
|
||||
c1.006,1.97,2.648,2.302,4.548,2.298c0.176,0.314,0.459,0.37,0.784,0.327c0.873,0.333,2.2,0.735,1.909,1.686
|
||||
c-0.447,1.455-1.971,2.169-3.342,2.812c-0.166,0.078-0.398,0.014-0.6,0.015c-0.256-0.258-0.51-0.52-0.765-0.778
|
||||
c-0.446-2.296-3.403-4.916-5.64-4.942c-1.415-0.016-2.832,0.057-4.248,0.087c-0.02,0.206-0.047,0.433-0.206,0.522
|
||||
c0.159-0.088,0.188-0.316,0.206-0.523c-0.257-0.02-0.516-0.039-0.773-0.058l-0.035-0.036c-0.014-0.392-0.028-0.787-0.042-1.179
|
||||
C129.621,220.446,130.606,219.754,131.908,219.503z"/>
|
||||
<path fill="#33B6EA" d="M261.546,191.276c0.407,1.273,1.343,2.34,2.935,2.498c1.648,0.167,2.499-0.76,3.146-2.068
|
||||
c0.306-0.608,0.585-1.246,0.993-1.774c0.396-0.51,0.835-1.251,1.629-0.962c0.755,0.273,0.459,1.055,0.435,1.623
|
||||
c-0.097,2.678,0.021,5.264,1.615,7.612c1.339,1.976,3.2,2.324,4.916,0.646c1.144-1.118,1.708-2.56,2.111-4.107
|
||||
c0.416-1.608,0.499-3.333,1.782-4.66c2.151-2.221,1.764-4.237-0.673-5.725c-6.185,1.909-12.752,2.706-18.957,2.763
|
||||
C260.875,188.034,260.979,189.509,261.546,191.276z"/>
|
||||
<path fill="#33B6EA" d="M291.96,118.641c1.454-0.106,3.023,1.233,4.278,0.063c1.565-1.46,3.069-3.052,4.022-5.045
|
||||
c0.687-1.446,0.296-2.492-1.161-3.134c-2.41-1.065-4.54-2.344-7.56-2.25c-2.488,0.077-3.934,0.432-4.978,2.563
|
||||
c-0.143,0.296-1.265,1.329-2.021,2.054c1.045,2.03,2.396,3.902,3.93,5.676C289.949,118.609,291.575,118.668,291.96,118.641z"/>
|
||||
<path fill="#33B6EA" d="M223.856,169.547c-1.026-0.573-2.245-0.175-3.32-0.754c-1.958-1.048-3.192-0.229-3.043,1.986
|
||||
c0.203,3.049,0.191,6.246,4.008,7.388c0.865,0.258,1.348,1.432,2.467,1.2c2.115-0.434,4.249-0.787,6.283-1.566
|
||||
c0.227-0.087,0.892-0.696,1.667-1.476c-2.673-2.055-5.176-4.378-7.41-6.953C224.196,169.555,223.955,169.641,223.856,169.547z"/>
|
||||
<path fill="#33B6EA" d="M120.627,136.728c0.484-0.958,1.093-2.894-0.946-3.566c-0.758-0.249-1.59-0.308-2.395-0.391
|
||||
c-2.006-0.203-3.094,1.065-2.748,3.06c0.177,1.022,0.626,2.238-0.989,2.621c0.018,0.571,0.035,1.143,0.05,1.71
|
||||
c0.659,0.101,0.674,0.618,0.62,1.087c-0.206,1.76,0.677,3.165,1.535,4.535c1.286,2.048,3.684,2.186,5.313,0.396
|
||||
c1.779-1.957,1.845-4.067,0.209-6.254C120.569,138.977,119.867,138.233,120.627,136.728z"/>
|
||||
<path fill="#33B6EA" d="M433.681,306.516c-0.632-1.034-1.259-2.091-1.277-3.396c-0.011-0.658-0.542-1.098-1.176-1.263
|
||||
c-0.738-0.198-1.336-0.539-1.151-1.384c0.203-0.922,1.054-1.057,1.793-0.976c1.141,0.124,2.256,0.453,3.389,0.649
|
||||
c0.711,0.123,1.204-0.212,1.313-0.943c0.112-0.789-0.338-1.087-1.07-1.134c-1.615-0.101-3.346-0.07-4.789,0.3
|
||||
c-1.374,0.354-2.927,1.682-3.162,3.421c-0.353,2.614,1.047,5.188,2.895,5.895c0.47,0.182,0.904,0.9,1.098,1.558
|
||||
c0.774,0.114,1.512,0.263,2.219,0.437C433.99,308.746,434.203,307.366,433.681,306.516z"/>
|
||||
<path fill="#33B6EA" d="M439.728,246.08c1.443,0.022,2.988-1.524,3.284-3.127c0.22-1.184-0.463-3.086-1.076-4.532
|
||||
c-1.877,0.488-3.885,0.908-6.05,1.24c0.621,1.067,1.251,2.725,1.446,3.662C437.617,244.694,437.954,246.049,439.728,246.08z"/>
|
||||
<path fill="#33B6EA" d="M460.48,231.114c2.867,1.128,5.945-0.291,7.081-3.263c-0.149,0.013-0.273-0.141-0.393-0.377
|
||||
c-2.313,0.833-4.521,1.898-6.779,3.063C460.557,230.789,460.63,231,460.48,231.114z"/>
|
||||
<path fill="#33B6EA" d="M489.987,314.613c0.179-0.824,0.03-1.537-0.98-1.611c-0.989-0.07-1.267,0.596-1.25,1.444
|
||||
c0.013,0.693,0.087,2.208,0.142,3.43c0.671-0.35,1.338-0.723,1.995-1.115C489.876,315.917,489.917,314.936,489.987,314.613z"/>
|
||||
<path fill="#33B6EA" d="M112.994,105.843c-0.281-1.141-0.823-2.162-2.253-2.193c-0.185,0.054-0.36,0.117-0.522,0.188
|
||||
c0.103,1.23,0.209,2.519,0.32,3.865c0.1,0.011,0.193,0.025,0.299,0.03C112.467,108.088,113.363,107.344,112.994,105.843z"/>
|
||||
<path fill="#33B6EA" d="M160.808,273.271c-0.988-0.458-2.019-0.838-2.961-1.37c-1.241-0.706-2.348-1.647-3.842-0.405
|
||||
c-0.476,0.393-1.136-0.053-1.654-0.455c-3-2.326-7.063-2.178-10.164-4.307c-0.278-0.191-0.799-0.028-1.208-0.028
|
||||
c0-0.013,0-0.024,0-0.039c-0.272,0-0.545-0.013-0.818,0.003c-1.252,0.073-3.414,1.778-3.213,2.658
|
||||
c0.385,1.666,1.825,1.234,3.003,1.36c1.303,0.142,2.729-0.52,3.895,0.619c2.222,2.171,5.004,3.084,8.01,3.419
|
||||
c0.676,0.073,1.11,0.42,1.569,0.84c2.871,2.62,4.667,2.714,7.681,0.426C162.469,274.955,162.366,273.998,160.808,273.271z"/>
|
||||
<path fill="#33B6EA" d="M164.875,274.928c-0.753,0.008-1.25,0.523-1.312,1.25c-0.068,0.762,0.485,1.041,1.17,1.007
|
||||
c0.724-0.033,1.049-0.484,1.07-1.14C165.777,275.399,165.506,274.915,164.875,274.928z"/>
|
||||
<path fill="#33B6EA" d="M325.753,318.891c-0.866-0.411-1.582,0.191-2.169,0.753c-1.28,1.229-2.307,2.861-3.796,3.699
|
||||
c-5.102,2.862-2.815,8.391-4.708,12.38c-0.173,0.361,0.204,1.056,0.442,1.536c0.852,1.703,2.006,3.284,4.033,3.355
|
||||
c1.997,0.074,2.7-1.78,3.142-3.273c1.081-3.62,1.931-7.309,2.78-10.984c0.407-1.786,0.601-3.617,0.862-5.264
|
||||
C326.253,320.202,326.606,319.294,325.753,318.891z"/>
|
||||
<path fill="#33B6EA" d="M213.516,124.214c0.873-1.129,1.619-2.339,2.111-3.699c0.422-1.168,0.367-2.224-0.846-2.793
|
||||
c-1.253-0.588-2.065,0.067-2.555,1.245c-0.154,0.379-0.318,0.766-0.556,1.092c-0.595,0.81-1.321,2.109-2.346,1.389
|
||||
c-1.047-0.733,0.197-1.616,0.688-2.343c1.032-1.542,0.646-2.543-1.193-2.752c-0.955-0.11-1.656-0.385-1.549-1.438
|
||||
c0.203-1.966-0.895-2.813-2.555-3.362c-0.695-0.228-1.47-0.581-1.915-1.12c-1.435-1.731-3.254-2.112-5.306-1.811
|
||||
c-2.537-0.319-4.81,0.208-6.541,2.142c-3.09,3.452-7.202,4.766-11.537,5.591c-2.417,0.461-3.617,1.706-3.762,4.241
|
||||
c-0.041,0.704-0.515,1.112-0.996,1.469c-0.654,0.483-1.353,0.925-2.084,1.279c-2.71,1.316-2.823,2.163-1.086,4.508
|
||||
c0.842,1.137,0.673,2.085-0.291,3.073c-1.333,1.375-3.062,1.975-4.767,2.649c-1.589,0.625-1.669,1.848-1.117,3.18
|
||||
c0.255,0.618,0.926,0.954,1.498,1.346c1.545,1.063,1.494,1.556-0.14,2.483c-0.82,0.466-1.53,0.976-0.845,2.083
|
||||
c1.415,2.285,3.887,3.345,6.596,2.81c0.932-0.183,1.87-0.324,2.807-0.49c1.989-0.355,3.304,0.407,3.898,2.353
|
||||
c0.953,3.123,1.676,6.264,1.195,9.574c-0.208,1.442-0.397,2.947,1.712,3.265c0.769,0.114,0.774,0.74,0.367,1.236
|
||||
c-1.024,1.25-0.263,1.813,0.805,2.28c1.11,0.484,1.189,1.029,0.386,1.993c-1.254,1.499-1.765,3.257-1.783,5.285
|
||||
c-0.039,4.326,1.861,8.033,3.438,11.853c0.253,0.621,0.794,1.126,1.445,1.392c4.57,1.867,4.578,1.862,6.417-2.824
|
||||
c0.225-0.568,0.525-1.159,0.539-1.749c0.068-2.791,1.646-4.41,3.877-5.853c3.523-2.28,5.706-6.175,10.145-7.568
|
||||
c2.624-0.822,2.372-2.082-0.045-3.903c-0.421-0.318-0.978-0.722-0.466-1.325c0.532-0.625,0.97-0.113,1.344,0.288
|
||||
c0.394,0.419,0.603,1.192,1.416,0.792c0.84-0.411,1.062-1.154,1.03-2.05c-0.025-0.793-0.365-1.456-0.736-2.1
|
||||
c-0.817-1.416-0.671-2.721,0.339-3.969c0.556-0.688,1.13-1.36,1.653-2.069c1.965-2.66,1.718-4.775-0.779-7
|
||||
c-0.396-0.354-0.938-0.684-0.843-1.314c0.119-0.782,0.811-0.601,1.313-0.609c0.955-0.016,1.099-0.603,1.086-1.363
|
||||
c-0.013-0.683,0.021-1.364-0.001-2.047c-0.021-0.584,0.155-1.307-0.71-1.47c-0.728-0.135-1.145,0.288-1.424,0.899
|
||||
c-0.329,0.729-0.771,1.44-1.681,0.974c-1.02-0.522-0.782-1.475-0.468-2.335c0.365-1.002,1.229-1.617,1.942-2.34
|
||||
c0.765-0.775,0.887-1.39-0.325-1.761c-0.706-0.216-1.193-0.634-1.393-1.354c-0.349-1.279,0.508-2.781,1.815-2.957
|
||||
c1.542-0.207,1.771,0.861,1.799,2.072c0.011,0.436-0.202,1.021,0.41,1.222c0.168,0.053,0.634-0.21,0.632-0.327
|
||||
c-0.012-1.34,1.268-2.75-0.064-4.009C212.071,126.803,212.486,125.548,213.516,124.214z"/>
|
||||
<path fill="#33B6EA" d="M172.852,164.982c-2.506-1.504-6.24-2.534-4.739-6.161c0.553-2.373-0.626-3.289-1.66-3.899
|
||||
c-2.163-1.278-3.706-3.186-5.561-4.774c-1.309-1.121-2.559-2.386-4.602-2.314c-2.907,0.103-3.069-0.182-3.555-3.142
|
||||
c-0.227-1.385-0.851-2.219-2.353-1.196c-0.497,0.338-1.043,0.419-1.54,0.105c-1.505-0.945-2.891-1.027-4.218,0.341
|
||||
c-1.639,1.689-3.079,3.75-2.287,5.989c0.883,2.502,2.207,5.023,4.678,6.53c1.145,0.697,1.841,1.571,1.661,2.993
|
||||
c-0.187,1.472,0.625,2.195,1.978,2.273c1.278,0.075,1.755-0.662,1.762-1.933c0.011-1.264,0.868-1.74,2.075-1.704
|
||||
c2.506,0.075,5.165,2.257,5.588,4.606c0.549,3.044-1.069,7.2-3.261,8.006c-0.898,0.331-1.823,0.455-1.515,1.667
|
||||
c0.28,1.11,1.202,1.448,2.241,1.312c1.748-0.228,3.011,0.61,4.145,1.757c1.008,1.019,1.902,2.16,2.999,3.068
|
||||
c1.093,0.9,2.302,2.249,3.763,0.38c0.14-0.18,0.473-0.291,0.719-0.295c0.954-0.019,1.978,0.141,2.316-1.116
|
||||
c0.377-1.385-0.022-2.541-1.036-3.527c-0.98-0.952-1.945-1.918-2.888-2.902c-0.453-0.476-0.761-1.16-0.211-1.63
|
||||
c0.67-0.573,1.052,0.118,1.407,0.628c0.505,0.728,0.982,1.514,2.013,1.554c1.206,0.049,3.91-1.67,4.084-2.656
|
||||
C175.172,167.143,174.561,166.002,172.852,164.982z"/>
|
||||
<path fill="#33B6EA" d="M148.542,127.307c-0.975,1.268-0.724,2.123,0.363,2.92c1.666,1.218,3.576,2.017,5.569,2.434
|
||||
c1.447,0.304,3.066-0.317,3.068-1.894c0.003-1.881,1.021-2.85,2.142-3.93c1.297-1.255,2.237-2.748,2.839-4.434
|
||||
c0.274-0.766,0.655-1.342,1.452-1.561c1.648-0.448,2.835-1.538,4.007-2.711c1.24-1.243,2.295-2.716,3.997-3.444
|
||||
c0.669-0.288,0.956-0.761,0.407-1.441c-0.451-0.557-0.541-1.482,0.107-1.535c3.128-0.251,2.385-1.912,1.56-3.729
|
||||
c-0.128-0.283-0.045-0.676-0.019-1.016c0.099-1.244-0.506-2.145-1.211-3.127c-2.063-2.875-5.219-2.098-7.818-2.667
|
||||
c-1.048,0.155-2.04-0.242-2.79,0.29c-2.636,1.861-5.711,2.861-8.481,4.444c-0.689,0.394-1.404,0.96-1.309,1.927
|
||||
c0.096,0.991,0.805,1.566,1.653,1.896c1.687,0.654,3.333,1.544,5.276,0.924c0.584-0.187,1.249-0.013,1.512,0.708
|
||||
c0.13,0.357,0.019,0.702-0.329,0.868c-1.46,0.701-2.89,1.795-4.413,1.956c-1.946,0.207-2.251,1.071-2.12,2.646
|
||||
c0.055,0.677-0.048,1.369,0.021,2.043c0.167,1.674-0.141,2.973-2.098,3.322c-0.541,0.097-1.038,0.569-1.09,1.121
|
||||
C150.676,125.011,149.459,126.112,148.542,127.307z"/>
|
||||
<path fill="#33B6EA" d="M143.442,117.947c-0.468,2.014,2.086,4.277,3.771,3.557c1.701-0.728,3.875-4.268,3.82-6.308
|
||||
c-0.114-0.374-0.161-0.887-0.402-1.274c-0.819-1.307-1.049-2.721-1.245-4.234c-0.26-1.985-1.633-3.415-3.332-4.412
|
||||
c-1.389-0.816-2.506-0.502-2.996,1.152c-0.773,2.599-0.877,5.25-0.009,7.818C143.47,115.494,143.762,116.573,143.442,117.947z"/>
|
||||
<path fill="#33B6EA" d="M145.218,128.696c-0.489-0.977-4.531-2.283-5.433-1.649c-1.736,1.222-3.163,0.806-4.521-0.591
|
||||
c-0.948-0.976-1.9-1.946-2.89-2.88c-0.962-0.908-2.092-1.496-3.894-1.544c-0.594-0.052-1.596,0.149-1.832,1.269
|
||||
c-0.252,1.204,0.885,1.359,1.684,1.641c2.107,0.743,3.28,2.177,3.097,4.434c-0.14,1.695,0.433,2.388,2.148,2.174
|
||||
c0.937-0.119,1.684,0.41,2.402,0.953c0.867,0.65,1.915,0.977,2.882,0.552c1.291-0.571,2.582-0.702,3.952-0.756
|
||||
C144.262,132.236,145.787,129.828,145.218,128.696z"/>
|
||||
<path fill="#33B6EA" d="M124.37,101.588c-0.531-0.042-0.977-0.277-1.169-0.698c-0.887-1.955-3.121-1.922-4.535-3.115
|
||||
c-0.6-0.505-1.549-0.346-2.236,0.316c-0.719,0.699-0.288,1.346,0.002,2.038c0.578,1.371,1.754,2.23,2.752,3.231
|
||||
c0.776,0.773,1.135,1.416,0.239,2.404c-0.715,0.788,0.752,3.772,1.848,3.937c0.564,0.084,1.006-0.195,1.08-0.7
|
||||
c0.274-1.832,1.021-1.335,1.979-0.506c0.85,0.737,1.64,0.502,1.724-0.604c0.099-1.285,0.68-2.503,0.478-3.684
|
||||
C126.542,101.777,126.543,101.763,124.37,101.588z"/>
|
||||
<path fill="#33B6EA" d="M135.293,135.081c-0.622-0.27-1.242-0.55-1.885-0.763c-2.825-0.932-4.5,0.16-4.767,3.112
|
||||
c-0.043,0.473-0.005,0.95-0.005,1.329c-0.179,2.44,0.894,4.6,1.008,6.911c0.03,0.614,0.448,1.387,1.321,1.283
|
||||
c0.755-0.089,1.337-0.685,1.236-1.389c-0.267-1.86,0.903-2.869,2.03-3.967c0.935-0.908,1.59-2.021,2.163-3.184
|
||||
C137.117,136.938,136.898,135.778,135.293,135.081z"/>
|
||||
<path fill="#33B6EA" d="M124.121,124.314c-1.367-1.391-2.159,0.156-3.112,0.681c-0.519,0.289-0.897,0.927-1.595,0.582
|
||||
c-0.668-0.332-0.501-1.023-0.607-1.615c-0.318-1.764,0.665-3.289,0.86-4.949c0.049-0.944-0.227-1.8-0.868-2.441
|
||||
c-0.803-0.803-2.108-1.276-2.927-0.825c-1.022,0.567,0.298,1.331,0.529,2.019c0.269,0.801,0.624,1.64-0.058,2.285
|
||||
c-0.886,0.837-1.436-0.111-2.024-0.613c-0.412-0.353-0.83-0.866-1.405-0.468c-0.512,0.354-0.365,1.012-0.277,1.521
|
||||
c0.243,1.398,1.711,1.896,2.332,2.985c1.614,2.844,4.006,4.249,7.237,4.509c1.191,0.094,2.604,0.869,3.33-0.406
|
||||
C126.322,126.201,125.015,125.226,124.121,124.314z"/>
|
||||
<path fill="#33B6EA" d="M139.589,171.072c-1.388-0.821-1.992,0.598-2.865,1.25c-1.496,1.117-1.25,2.461-0.447,3.759
|
||||
c0.75,1.212,1.728,2,3.375,1.246c1.022-0.466,2.207-0.598,3.33-0.816c0.695-0.136,1.114-0.449,1.155-1.194
|
||||
C143.655,172.811,141.402,172.14,139.589,171.072z"/>
|
||||
<path fill="#33B6EA" d="M143.789,136.208c-0.026,1.843,1.515,3.008,4.036,3.052c2.5,0.042,3.68-0.742,3.696-2.453
|
||||
c0.024-2.295-1.215-3.643-3.366-3.663C145.797,133.121,143.813,134.515,143.789,136.208z"/>
|
||||
<path fill="#33B6EA" d="M131.362,111.335c1.432,0.842,2.542,0.19,2.559-1.588c-0.009-0.126,0.027-0.35-0.046-0.53
|
||||
c-0.567-1.382-1.144-2.759-1.745-4.128c-0.387-0.883-0.801-1.877-1.977-1.756c-1.316,0.132-1.709,1.241-1.903,2.341
|
||||
C127.864,107.871,129.056,109.981,131.362,111.335z"/>
|
||||
<path fill="#33B6EA" d="M118.666,114.32c0.401,0.319,0.72,0.914,1.363,0.467c0.467-0.323,0.767-0.764,0.691-1.735
|
||||
c-0.357-0.956-1.001-2.129-2.076-3.002c-0.389-0.313-0.898-0.29-1.341-0.019c-0.468,0.285-0.566,0.748-0.481,1.243
|
||||
C117.034,112.526,117.678,113.528,118.666,114.32z"/>
|
||||
<path fill="#33B6EA" d="M149.991,176.162c-0.928,0.053-1.633,0.513-1.614,1.475c0.018,0.893,0.813,0.95,1.526,0.944
|
||||
c0.822-0.001,1.537-0.191,1.567-1.185C151.502,176.403,150.849,176.114,149.991,176.162z"/>
|
||||
<path fill="#33B6EA" d="M479.022,304.194c-0.644-0.41-1.352-0.121-1.674,0.305c-1.215,1.619-3.115,2.311-4.566,3.583
|
||||
c-1.758,1.542-3.07,1.655-4.787,0.052c-1.708-1.592-3.389-3.081-5.94-3.178c-0.889-0.03-1.791-0.62-2.622-1.067
|
||||
c-2.968-1.604-3.308-1.652-5.636,0.704c-1.193,1.206-2.006,0.902-2.731-0.293c-0.543-0.887-1.217-1.63-1.956-2.339
|
||||
c-0.612-0.587-1.342-0.684-2.076-0.361c-0.854,0.377-1.262,1.178-1.012,2.022c0.521,1.762,1.191,3.617,3.145,4.19
|
||||
c3.723,1.098,7.168,2.269,9.486,5.876c1.426,2.216,2.942,2.132,5.089,0.659c1.668-1.144,3.084-0.817,4.407,0.431
|
||||
c1.048,0.989,2.211,1.804,3.412,2.576c1.267,0.811,2.26,0.184,3.045-0.723c0.87-1.006-0.156-1.589-0.749-2.172
|
||||
c-0.529-0.518-1.169-0.926-1.746-1.406c-0.355-0.303-0.793-0.63-0.635-1.179c0.158-0.532,0.646-0.635,1.144-0.689
|
||||
c1.586-0.173,3.023-0.827,4.357-1.623c1.436-0.854,2.578-2.027,2.555-3.897C479.519,305.115,479.566,304.539,479.022,304.194z"/>
|
||||
<path fill="#33B6EA" d="M426.299,291.733c-1.86-1.309-2.794-1.255-4.159,0.423c-0.428,0.521-0.727,1.147-1.151,1.676
|
||||
c-1.796,2.213-3.614,4.458-6.118,5.854c-1.236,0.694-2.009,1.313-1.746,2.691c-0.069,1.061-0.091,2.076,0.908,2.604
|
||||
c1.498,0.796,2.991,1.701,4.6,2.148c1.123,0.314,2.663,0.777,3.546-0.615c1.164-1.831,2.14-3.778,3.519-5.474
|
||||
c0.328-0.398,0.387-0.918,0.196-1.357c-0.738-1.66-0.16-3.116,0.813-4.378C427.803,293.884,427.816,292.798,426.299,291.733z"/>
|
||||
<path fill="#33B6EA" d="M447.558,249.798c0.181-2.055,2.504-3.468,4.266-2.496c1.058,0.581,1.771,0.437,2.513-0.375
|
||||
c0.368-0.405,0.816-0.677,1.345-0.878c4.359-1.651,5.755-5.244,6.195-9.626c-0.068-0.394-0.137-0.933-0.261-1.458
|
||||
c-0.184-0.758-0.098-1.82-1.246-1.794c-1.006,0.022-2.094,0.198-2.567,1.306c-0.315,0.745-0.52,1.542-0.728,2.329
|
||||
c-1.018,3.769-3.746,6.414-7.503,6.389c-2.613-0.019-4.011,1.332-5.374,3.035c-1.555,1.94-1.296,4.069,0.502,5.803
|
||||
c0.861,0.831,1.514,0.63,2.239-0.149C447.513,251.271,447.49,250.548,447.558,249.798z"/>
|
||||
<path fill="#33B6EA" d="M437.163,287.267c-2.188,0.152-3.2-0.814-3.767-2.692c-0.095-0.313-0.349-0.579-0.55-0.852
|
||||
c-1.088-1.478-0.925-1.938,0.945-2.363c0.619-0.136,1.29-0.157,1.354-0.949c0.068-0.798-0.591-0.965-1.196-1.139
|
||||
c-1.523-0.434-1.914-1.373-1.247-2.799c0.201-0.428,0.342-0.89,0.459-1.352c0.317-1.3-0.164-2.307-1.309-2.915
|
||||
c-1.094-0.58-1.922-0.008-2.679,0.806c-2.491,2.678-2.095,8.016,0.876,10.49c0.666,0.557,0.796,1.076,1.021,1.902
|
||||
c0.449,1.672,1.813,3.118,0.723,5.023c-0.045,0.083,0.168,0.365,0.311,0.499c1.064,1.007,2.313,1.644,3.637,1.871
|
||||
c1.482,0.03,3.923-2.007,3.88-3.28C439.575,288.02,438.305,287.192,437.163,287.267z"/>
|
||||
<path fill="#33B6EA" d="M427.252,284.699c-1.006,0.024-2.534,1.624-2.451,2.59c0.068,0.787,0.62,0.952,1.518,0.958
|
||||
c1.095-0.212,2.003-0.982,2.284-2.248C428.809,285.081,428.14,284.681,427.252,284.699z"/>
|
||||
<path fill="#33B6EA" d="M441.027,301.296c1.146-0.027,1.731-0.857,2.01-1.999c-0.244-0.896-0.732-1.543-1.793-1.493
|
||||
c-1.104,0.054-1.749,0.665-1.774,1.78C439.448,300.61,440.002,301.325,441.027,301.296z"/>
|
||||
<path fill="#33B6EA" d="M481.22,313.009c-1.133-0.051-1.261,0.775-1.241,1.637c0.024,0.789-0.083,1.81,1.108,1.718
|
||||
c0.938-0.069,1.254-0.877,1.239-1.768C482.333,313.802,482.21,313.051,481.22,313.009z"/>
|
||||
<path fill="#33B6EA" d="M481.273,308.482c-0.951-0.097-1.521,0.521-1.612,1.43c-0.099,0.957,0.547,1.271,1.598,1.3
|
||||
c0.58,0,1.357-0.072,1.414-1.075C482.725,309.198,482.18,308.571,481.273,308.482z"/>
|
||||
<path fill="#33B6EA" d="M461.282,287.7c0.031,0.961,0.735,1.369,1.54,1.393c0.909-0.025,1.453-0.341,1.428-1.201
|
||||
c-0.028-1.052-0.841-1.37-1.658-1.438C461.829,286.39,461.26,286.952,461.282,287.7z"/>
|
||||
<path fill="#33B6EA" d="M443.25,305.186c-1.146-0.341-2.116,0.039-2.955,0.819c-0.346,0.324-0.709,0.737-0.426,1.227
|
||||
c0.409,0.702,1.063,0.407,1.609,0.19c0.872-0.341,2.093-0.074,2.475-1.27C443.905,305.634,443.664,305.313,443.25,305.186z"/>
|
||||
<path fill="#33B6EA" d="M436.112,285.336c0.963-0.002,1.426-0.589,1.554-1.434c-0.049-0.91-0.546-1.222-1.332-1.222
|
||||
c-0.896-0.002-1.373,0.423-1.375,1.334C434.954,284.789,435.269,285.34,436.112,285.336z"/>
|
||||
<path fill="#33B6EA" d="M437.098,303.553c-1.019,0.01-1.509,0.672-1.513,1.537c-0.008,0.82,0.774,0.756,1.381,0.788
|
||||
c0.817-0.021,1.512-0.227,1.501-1.224C438.46,303.772,437.863,303.545,437.098,303.553z"/>
|
||||
<path fill="#33B6EA" d="M488.649,308.893c-0.706,0.03-1.187,0.326-1.198,1.093c-0.022,0.87,0.519,1.186,1.313,1.193
|
||||
c0.804,0.004,1.291-0.347,1.307-1.189C489.997,309.087,489.418,308.865,488.649,308.893z"/>
|
||||
<path fill="#33B6EA" d="M320.89,116.329c0.529,0.096,1.09,0.078,1.632,0.044c0.896-0.054,1.529,0.286,2.09,1
|
||||
c1.796,2.286,3.372,2.052,4.876-0.461c0.729-1.219,1.81-2.251,3.472-2.149c0.631,0.039,0.832,0.477,0.747,0.989
|
||||
c-0.25,1.567-1.324,2.604-2.726,2.938c-1.148,0.274-1.624,0.686-1.263,1.74c0.351,1.017,1.249,1.7,2.24,1.085
|
||||
c2.137-1.326,4.521-1.287,6.782-1.842c2.897-0.712,7.016-0.725,8.144-5.02c0.289-1.087,2.367-2.016,1.214-3.195
|
||||
c-1.434-1.454-2.255,0.61-3.245,1.34c-0.506,0.373-0.949,0.883-1.602,0.395c-0.586-0.439-0.516-1.07-0.268-1.669
|
||||
c0.284-0.688,0.732-1.321,0.634-2.104c0.082-1.246-0.548-1.977-1.702-1.644c-2.021,0.579-4.278,0.606-5.763,2.588
|
||||
c-1.223,1.629-2.853,1.999-4.634,0.643c-1.176-0.894-2.203-1.359-2.908,0.636c-0.337,0.958-1.489,1.655-2.063,0.222
|
||||
c-0.574-1.437-1.542-1.275-2.621-1.288c-1.76-0.016-2.765,1.343-4.007,2.231c-0.547,0.389-1.497,0.868-1.117,1.73
|
||||
C319.17,115.386,319.871,116.143,320.89,116.329z"/>
|
||||
<path fill="#33B6EA" d="M349.673,109.791c1.219-0.107,1.932-0.853,2.115-2.037c0.1-0.628-0.004-1.322-0.874-1.225
|
||||
c-1.277,0.14-1.81,1.204-2.434,2.061C348.585,109.407,348.962,109.852,349.673,109.791z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Ebene_6">
|
||||
<g>
|
||||
<g>
|
||||
<g>
|
||||
<defs>
|
||||
<path id="SVGID_1_" d="M108.925,89.292c0,0,6.092,63.286,5.047,92.998c-0.434,12.308-4.57,46.237-23.802,46.237
|
||||
c-20.709,0-23.073-24.892-48.489-24.892c-15.139,0-41.055,9.865-41.055,53.192c0,33.143,21.005,49.511,37.781,49.511
|
||||
c24.96,0,21.414-19.64,47.875-19.64c26.097,0,27.142,24.412,27.142,37.917c0,13.504-3.319,51.283-9.684,89.475
|
||||
c4.819,0.727,12.558,1.601,25.368,5.593c17.369,5.409,30.689,9.682,58.513,9.682s43.238-10.5,43.238-22.503
|
||||
c0-18.594-17.049-15.549-17.049-37.918s22.505-32.735,45.009-32.735c22.506,0,45.238,10.866,45.238,38.056
|
||||
c0,24.55-14.277,18.685-14.277,39.008c0,20.322,24.413,19.777,30.552,19.777c6.138,0,67.106-1.999,94.93-7.683
|
||||
c-1.09-14.458-4.998-72.608-4.998-90.475c0-23.643,11.001-25.961,16.865-25.961c17.595,0,18.414,13.413,43.237,13.413
|
||||
c22.46,0,44.325-21.551,44.325-54.33c0-29.599-20.73-42.283-37.779-42.283s-22.776,14.73-52.103,14.73
|
||||
c-10.363,0-17.275-4.137-17.275-24.324c0-40.672,4.546-81.199,4.727-119.571c-20.365-3.001-72.697-10.913-101.611-10.913
|
||||
c-26.414,0-28.323,11.049-28.323,18.278c0,18.64,25.643,24.187,25.643,42.009c0,32.644-25.962,41.191-47.239,41.191
|
||||
c-18.596,0-46.328-17.004-46.328-43.737c0-13.139,3.681-17.117,7.467-20.905c5.662-5.663,12.196-9.056,12.196-18.013
|
||||
c0-15.549-15.709-18.187-34.122-18.187S108.925,89.292,108.925,89.292z"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_2_">
|
||||
<use xlink:href="#SVGID_1_" overflow="visible"/>
|
||||
</clipPath>
|
||||
<g clip-path="url(#SVGID_2_)">
|
||||
|
||||
<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="139.2588" y1="121.6145" x2="139.2588" y2="669.6423" gradientTransform="matrix(1 0 0 1 0.0801 -327.2031)">
|
||||
<stop offset="0" style="stop-color:#FFFFFF;stop-opacity:0.9"/>
|
||||
<stop offset="1" style="stop-color:#FFFFFF;stop-opacity:0.05"/>
|
||||
</linearGradient>
|
||||
<circle fill="url(#SVGID_3_)" cx="139.339" cy="68.425" r="274.014"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 46 KiB |
29
docs/web.md
Normal file
@ -0,0 +1,29 @@
|
||||
### Web implementation
|
||||
|
||||
`./gradlew :vtm-web-app:farmRun` will run standalone web server at port 8080.
|
||||
|
||||
Then go to [http://localhost:8080/vtm-web-app](http://localhost:8080/vtm-web-app) in the web browser to see the map.
|
||||
|
||||
Hold right mouse button to change view direction.
|
||||
|
||||
#### Debugging GWT app
|
||||
|
||||
Using GWT SuperDevMode is the recommended way for development. Debugging in IDE is often not possible.
|
||||
|
||||
For an introduction see [GWT](http://www.gwtproject.org/articles/superdevmode.html) and [libGDX](http://www.badlogicgames.com/wordpress/?p=3073) documentations.
|
||||
|
||||
- Serve the website as usual with `./gradlew :vtm-web-app:farmRun` command.
|
||||
|
||||
- The codeserver must be executed on another shell.
|
||||
```bash
|
||||
export _JAVA_OPTIONS="-Xmx1024m"
|
||||
./gradlew :vtm-web-app:gwtSuperDev
|
||||
```
|
||||
|
||||
- Open the link of codeserver: `The code server is ready at http://127.0.0.1:xxxx/`
|
||||
|
||||
- Drag the two bookmarklets to your browser's bookmark bar.
|
||||
|
||||
- Visit your [web page](http://localhost:8080/vtm-web-app) and click **Dev Mode On** to start development mode.
|
||||
|
||||
- Press **F12** to open the developer tools of your browser. Now you can debug your code under **Sources**.
|
@ -1,17 +1,21 @@
|
||||
# Project-wide Gradle settings.
|
||||
|
||||
# IDE (e.g. Android Studio) users:
|
||||
# Gradle settings configured through the IDE *will override*
|
||||
# any settings specified in this file.
|
||||
|
||||
# For more details on how to configure your build environment visit
|
||||
# http://www.gradle.org/docs/current/userguide/build_environment.html
|
||||
|
||||
# Specifies the JVM arguments used for the daemon process.
|
||||
# The setting is particularly useful for tweaking memory settings.
|
||||
# org.gradle.jvmargs=-Xmx1536m
|
||||
|
||||
org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
|
||||
# When configured, Gradle will run in incubating parallel mode.
|
||||
# This option should only be used with decoupled projects. More details, visit
|
||||
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
|
||||
# org.gradle.parallel=true
|
||||
# AndroidX package structure to make it clearer which packages are bundled with the
|
||||
# Android operating system, and which are packaged with your app's APK
|
||||
# https://developer.android.com/topic/libraries/support-library/androidx-rn
|
||||
android.useAndroidX=true
|
||||
# Enables namespacing of each library's R class so that its R class includes only the
|
||||
# resources declared in the library itself and none from the library's dependencies,
|
||||
# thereby reducing the size of the R class for that library
|
||||
android.nonTransitiveRClass=true
|
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
3
gradle/wrapper/gradle-wrapper.properties
vendored
@ -1,6 +1,5 @@
|
||||
#Tue Aug 16 13:14:49 EEST 2016
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
|
||||
|
139
gradlew
vendored
@ -1,4 +1,20 @@
|
||||
#!/usr/bin/env bash
|
||||
#!/usr/bin/env sh
|
||||
|
||||
#
|
||||
# Copyright 2015 the original author or authors.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# https://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
##############################################################################
|
||||
##
|
||||
@ -6,42 +22,6 @@
|
||||
##
|
||||
##############################################################################
|
||||
|
||||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
DEFAULT_JVM_OPTS=""
|
||||
|
||||
APP_NAME="Gradle"
|
||||
APP_BASE_NAME=`basename "$0"`
|
||||
|
||||
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
||||
MAX_FD="maximum"
|
||||
|
||||
warn ( ) {
|
||||
echo "$*"
|
||||
}
|
||||
|
||||
die ( ) {
|
||||
echo
|
||||
echo "$*"
|
||||
echo
|
||||
exit 1
|
||||
}
|
||||
|
||||
# OS specific support (must be 'true' or 'false').
|
||||
cygwin=false
|
||||
msys=false
|
||||
darwin=false
|
||||
case "`uname`" in
|
||||
CYGWIN* )
|
||||
cygwin=true
|
||||
;;
|
||||
Darwin* )
|
||||
darwin=true
|
||||
;;
|
||||
MINGW* )
|
||||
msys=true
|
||||
;;
|
||||
esac
|
||||
|
||||
# Attempt to set APP_HOME
|
||||
# Resolve links: $0 may be a link
|
||||
PRG="$0"
|
||||
@ -60,8 +40,49 @@ cd "`dirname \"$PRG\"`/" >/dev/null
|
||||
APP_HOME="`pwd -P`"
|
||||
cd "$SAVED" >/dev/null
|
||||
|
||||
APP_NAME="Gradle"
|
||||
APP_BASE_NAME=`basename "$0"`
|
||||
|
||||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
|
||||
|
||||
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
||||
MAX_FD="maximum"
|
||||
|
||||
warn () {
|
||||
echo "$*"
|
||||
}
|
||||
|
||||
die () {
|
||||
echo
|
||||
echo "$*"
|
||||
echo
|
||||
exit 1
|
||||
}
|
||||
|
||||
# OS specific support (must be 'true' or 'false').
|
||||
cygwin=false
|
||||
msys=false
|
||||
darwin=false
|
||||
nonstop=false
|
||||
case "`uname`" in
|
||||
CYGWIN* )
|
||||
cygwin=true
|
||||
;;
|
||||
Darwin* )
|
||||
darwin=true
|
||||
;;
|
||||
MINGW* )
|
||||
msys=true
|
||||
;;
|
||||
NONSTOP* )
|
||||
nonstop=true
|
||||
;;
|
||||
esac
|
||||
|
||||
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
|
||||
|
||||
|
||||
# Determine the Java command to use to start the JVM.
|
||||
if [ -n "$JAVA_HOME" ] ; then
|
||||
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
|
||||
@ -85,7 +106,7 @@ location of your Java installation."
|
||||
fi
|
||||
|
||||
# Increase the maximum file descriptors if we can.
|
||||
if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
|
||||
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
|
||||
MAX_FD_LIMIT=`ulimit -H -n`
|
||||
if [ $? -eq 0 ] ; then
|
||||
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
|
||||
@ -105,10 +126,11 @@ if $darwin; then
|
||||
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
|
||||
fi
|
||||
|
||||
# For Cygwin, switch paths to Windows format before running java
|
||||
if $cygwin ; then
|
||||
# For Cygwin or MSYS, switch paths to Windows format before running java
|
||||
if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
|
||||
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
|
||||
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
|
||||
|
||||
JAVACMD=`cygpath --unix "$JAVACMD"`
|
||||
|
||||
# We build the pattern for arguments to be converted via cygpath
|
||||
@ -134,27 +156,30 @@ if $cygwin ; then
|
||||
else
|
||||
eval `echo args$i`="\"$arg\""
|
||||
fi
|
||||
i=$((i+1))
|
||||
i=`expr $i + 1`
|
||||
done
|
||||
case $i in
|
||||
(0) set -- ;;
|
||||
(1) set -- "$args0" ;;
|
||||
(2) set -- "$args0" "$args1" ;;
|
||||
(3) set -- "$args0" "$args1" "$args2" ;;
|
||||
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
|
||||
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
|
||||
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
|
||||
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
|
||||
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
|
||||
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
|
||||
0) set -- ;;
|
||||
1) set -- "$args0" ;;
|
||||
2) set -- "$args0" "$args1" ;;
|
||||
3) set -- "$args0" "$args1" "$args2" ;;
|
||||
4) set -- "$args0" "$args1" "$args2" "$args3" ;;
|
||||
5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
|
||||
6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
|
||||
7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
|
||||
8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
|
||||
9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
|
||||
esac
|
||||
fi
|
||||
|
||||
# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
|
||||
function splitJvmOpts() {
|
||||
JVM_OPTS=("$@")
|
||||
# Escape application args
|
||||
save () {
|
||||
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
|
||||
echo " "
|
||||
}
|
||||
eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
|
||||
JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
|
||||
APP_ARGS=`save "$@"`
|
||||
|
||||
exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
|
||||
# Collect all arguments for the java command, following the shell quoting and substitution rules
|
||||
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
|
||||
|
||||
exec "$JAVACMD" "$@"
|
||||
|
53
gradlew.bat
vendored
@ -1,3 +1,19 @@
|
||||
@rem
|
||||
@rem Copyright 2015 the original author or authors.
|
||||
@rem
|
||||
@rem Licensed under the Apache License, Version 2.0 (the "License");
|
||||
@rem you may not use this file except in compliance with the License.
|
||||
@rem You may obtain a copy of the License at
|
||||
@rem
|
||||
@rem https://www.apache.org/licenses/LICENSE-2.0
|
||||
@rem
|
||||
@rem Unless required by applicable law or agreed to in writing, software
|
||||
@rem distributed under the License is distributed on an "AS IS" BASIS,
|
||||
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
@rem See the License for the specific language governing permissions and
|
||||
@rem limitations under the License.
|
||||
@rem
|
||||
|
||||
@if "%DEBUG%" == "" @echo off
|
||||
@rem ##########################################################################
|
||||
@rem
|
||||
@ -8,20 +24,23 @@
|
||||
@rem Set local scope for the variables with windows NT shell
|
||||
if "%OS%"=="Windows_NT" setlocal
|
||||
|
||||
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
set DEFAULT_JVM_OPTS=
|
||||
|
||||
set DIRNAME=%~dp0
|
||||
if "%DIRNAME%" == "" set DIRNAME=.
|
||||
set APP_BASE_NAME=%~n0
|
||||
set APP_HOME=%DIRNAME%
|
||||
|
||||
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
|
||||
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
|
||||
|
||||
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
|
||||
|
||||
@rem Find java.exe
|
||||
if defined JAVA_HOME goto findJavaFromJavaHome
|
||||
|
||||
set JAVA_EXE=java.exe
|
||||
%JAVA_EXE% -version >NUL 2>&1
|
||||
if "%ERRORLEVEL%" == "0" goto init
|
||||
if "%ERRORLEVEL%" == "0" goto execute
|
||||
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||
@ -35,7 +54,7 @@ goto fail
|
||||
set JAVA_HOME=%JAVA_HOME:"=%
|
||||
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
||||
|
||||
if exist "%JAVA_EXE%" goto init
|
||||
if exist "%JAVA_EXE%" goto execute
|
||||
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
|
||||
@ -45,34 +64,14 @@ echo location of your Java installation.
|
||||
|
||||
goto fail
|
||||
|
||||
:init
|
||||
@rem Get command-line arguments, handling Windowz variants
|
||||
|
||||
if not "%OS%" == "Windows_NT" goto win9xME_args
|
||||
if "%@eval[2+2]" == "4" goto 4NT_args
|
||||
|
||||
:win9xME_args
|
||||
@rem Slurp the command line arguments.
|
||||
set CMD_LINE_ARGS=
|
||||
set _SKIP=2
|
||||
|
||||
:win9xME_args_slurp
|
||||
if "x%~1" == "x" goto execute
|
||||
|
||||
set CMD_LINE_ARGS=%*
|
||||
goto execute
|
||||
|
||||
:4NT_args
|
||||
@rem Get arguments from the 4NT Shell from JP Software
|
||||
set CMD_LINE_ARGS=%$
|
||||
|
||||
:execute
|
||||
@rem Setup the command line
|
||||
|
||||
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
|
||||
|
||||
|
||||
@rem Execute Gradle
|
||||
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
|
||||
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
|
||||
|
||||
:end
|
||||
@rem End local scope for the variables with windows NT shell
|
||||
|
@ -1,10 +1,9 @@
|
||||
apply plugin: 'java'
|
||||
|
||||
dependencies {
|
||||
compile "com.badlogicgames.gdx:gdx-jnigen:$gdxVersion"
|
||||
implementation "com.badlogicgames.gdx:gdx-jnigen:$gdxVersion"
|
||||
}
|
||||
|
||||
sourceSets {
|
||||
main.java.srcDirs = ['src']
|
||||
main.resources.srcDirs = ['src']
|
||||
}
|
||||
|
203
jni/jni/build-windows64.xml
Normal file
@ -0,0 +1,203 @@
|
||||
<project name="vtm-jni-Windows-64" basedir="." default="postcompile">
|
||||
|
||||
<!-- include the environment -->
|
||||
<property environment="env"/>
|
||||
|
||||
<!-- output directory for temporary object files -->
|
||||
<property name="buildDir" value="target/windows64" />
|
||||
|
||||
<!-- output directory for the shared library -->
|
||||
<property name="libsDir" value="../libs/windows64" />
|
||||
|
||||
<!-- the name of the shared library -->
|
||||
<property name="libName" value="vtm-jni64.dll"/>
|
||||
|
||||
<!-- the jni header jniPlatform to use -->
|
||||
<property name="jniPlatform" value="win32"/>
|
||||
|
||||
<!-- the compiler to use when compiling c files -->
|
||||
<property name="cCompiler" value="gcc"/>
|
||||
|
||||
<!-- the compiler to use when compiling c++ files -->
|
||||
<property name="cppCompiler" value="g++"/>
|
||||
|
||||
<!-- the command to use when archiving files -->
|
||||
<property name="archiver" value="ar"/>
|
||||
|
||||
<!-- the compilerPrefix for the C & C++ compilers -->
|
||||
<property name="compilerPrefix" value="x86_64-w64-mingw32-"/>
|
||||
|
||||
<!-- the compilerSuffix for the C & C++ compilers -->
|
||||
<property name="compilerSuffix" value=".exe" />
|
||||
|
||||
<!-- define gcc compiler, options and files to compile -->
|
||||
<property name="gcc" value="${compilerPrefix}${cCompiler}${compilerSuffix}"/>
|
||||
<property name="gcc-opts" value="-c -Wall -O2 -mfpmath=sse -msse2 -fmessage-length=0 -m64 -Wall -std=c99 -O2 -ffast-math -DNDEBUG"/>
|
||||
<fileset id="gcc-files" dir="./">
|
||||
<exclude name="target/"/>
|
||||
<include name="memcpy_wrap.c"/>
|
||||
<include name="gl/utils.c"/>
|
||||
<include name="libtess2/Source/bucketalloc.c"/>
|
||||
<include name="libtess2/Source/dict.c"/>
|
||||
<include name="libtess2/Source/geom.c"/>
|
||||
<include name="libtess2/Source/mesh.c"/>
|
||||
<include name="libtess2/Source/priorityq.c"/>
|
||||
<include name="libtess2/Source/sweep.c"/>
|
||||
<include name="libtess2/Source/tess.c"/>
|
||||
</fileset>
|
||||
|
||||
<!-- define g++ compiler, options and files to compile -->
|
||||
<property name="g++" value="${compilerPrefix}${cppCompiler}${compilerSuffix}"/>
|
||||
<property name="g++-opts" value="-c -Wall -O2 -mfpmath=sse -msse2 -fmessage-length=0 -m64 -Wall -std=c99 -O2 -ffast-math -DNDEBUG -fpermissive"/>
|
||||
<fileset id="g++-files" dir="./">
|
||||
<exclude name="target/"/>
|
||||
<include name="**/*.cpp"/>
|
||||
</fileset>
|
||||
|
||||
<!-- define linker and options -->
|
||||
<property name="linker" value="${compilerPrefix}${cppCompiler}${compilerSuffix}"/>
|
||||
<property name="linker-opts" value="-Wl,--kill-at -shared -static -static-libgcc -static-libstdc++ -m64"/>
|
||||
<property name="libraries" value=""/>
|
||||
|
||||
<!-- define stripper -->
|
||||
<property name="stripper" value="${compilerPrefix}strip${compilerSuffix}"/>
|
||||
|
||||
<!-- cleans the build directory, removes all object files and shared libs -->
|
||||
<target name="clean">
|
||||
<delete includeemptydirs="true" quiet="true">
|
||||
<fileset dir="${buildDir}"/>
|
||||
<fileset dir="${libsDir}" includes="**/*"/>
|
||||
</delete>
|
||||
</target>
|
||||
|
||||
<target name="precompile" depends="clean">
|
||||
<condition property="compiler-found">
|
||||
<and>
|
||||
<or>
|
||||
<!-- Include both b/c Windows might be either -->
|
||||
<available file="${g++}" filepath="${env.PATH}"/>
|
||||
<available file="${g++}" filepath="${env.Path}"/>
|
||||
</or>
|
||||
<or>
|
||||
<!-- Include both b/c Windows might be either -->
|
||||
<available file="${gcc}" filepath="${env.PATH}"/>
|
||||
<available file="${gcc}" filepath="${env.Path}"/>
|
||||
</or>
|
||||
</and>
|
||||
</condition>
|
||||
<condition property="has-compiler">
|
||||
<equals arg1="${compiler-found}" arg2="true"/>
|
||||
</condition>
|
||||
<condition property="stripper-found">
|
||||
<or>
|
||||
<!-- Include both b/c Windows might be either -->
|
||||
<available file="${stripper}" filepath="${env.PATH}"/>
|
||||
<available file="${stripper}" filepath="${env.Path}"/>
|
||||
</or>
|
||||
</condition>
|
||||
<condition property="should-strip">
|
||||
<and>
|
||||
<equals arg1="${stripper-found}" arg2="true"/>
|
||||
<equals arg1="${release}" arg2="true"/>
|
||||
<!-- Don't strip mac osx libs -->
|
||||
<not>
|
||||
<contains string="${libName}" substring="dylib"/>
|
||||
</not>
|
||||
</and>
|
||||
</condition>
|
||||
|
||||
</target>
|
||||
|
||||
<target name="create-build-dir" depends="precompile" if="has-compiler">
|
||||
<!-- FIXME this is pretty nasty :/ -->
|
||||
<copy todir="${buildDir}">
|
||||
<fileset refid="g++-files"/>
|
||||
<fileset refid="gcc-files"/>
|
||||
</copy>
|
||||
<delete>
|
||||
<fileset dir="${buildDir}">
|
||||
<include name="*"/>
|
||||
<exclude name="*.o"/>
|
||||
</fileset>
|
||||
</delete>
|
||||
</target>
|
||||
|
||||
<!-- compiles all C and C++ files to object files in the build directory -->
|
||||
<target name="compile" depends="create-build-dir" if="has-compiler">
|
||||
<mkdir dir="${buildDir}"/>
|
||||
<apply failonerror="true" executable="${g++}" dest="${buildDir}" verbose="true">
|
||||
<arg line="${g++-opts}"/>
|
||||
<arg value="-Ijni-headers"/>
|
||||
<arg value="-Ijni-headers/${jniPlatform}"/>
|
||||
<arg value="-I."/>
|
||||
<arg value="-I."/>
|
||||
<arg value="-Ilibtess2/Include"/>
|
||||
|
||||
<srcfile/>
|
||||
<arg value="-o"/>
|
||||
<targetfile/>
|
||||
<fileset refid="g++-files"/>
|
||||
<compositemapper>
|
||||
<mapper type="glob" from="*.cpp" to="*.o"/>
|
||||
<mapper type="glob" from="*.mm" to="*.o"/>
|
||||
</compositemapper>
|
||||
</apply>
|
||||
<apply failonerror="true" executable="${gcc}" dest="${buildDir}" verbose="true">
|
||||
<arg line="${gcc-opts}"/>
|
||||
<arg value="-Ijni-headers"/>
|
||||
<arg value="-Ijni-headers/${jniPlatform}"/>
|
||||
<arg value="-I."/>
|
||||
<arg value="-I."/>
|
||||
<arg value="-Ilibtess2/Include"/>
|
||||
<arg value="-Ilibtess2/Source"/>
|
||||
|
||||
<srcfile/>
|
||||
<arg value="-o"/>
|
||||
<targetfile/>
|
||||
<fileset refid="gcc-files"/>
|
||||
<compositemapper>
|
||||
<mapper type="glob" from="*.c" to="*.o"/>
|
||||
<mapper type="glob" from="*.m" to="*.o"/>
|
||||
</compositemapper>
|
||||
</apply>
|
||||
</target>
|
||||
|
||||
<!-- links the shared library based on the previously compiled object files -->
|
||||
<target name="link" depends="compile" if="has-compiler">
|
||||
<fileset dir="${buildDir}" id="objFileSet">
|
||||
<patternset>
|
||||
<include name="**/*.o" />
|
||||
</patternset>
|
||||
</fileset>
|
||||
<pathconvert pathsep=" " property="objFiles" refid="objFileSet" />
|
||||
<mkdir dir="${libsDir}" />
|
||||
<exec executable="${linker}" failonerror="true" dir="${buildDir}">
|
||||
<arg line="${linker-opts}" />
|
||||
<arg value="-o" />
|
||||
<arg path="${libsDir}/${libName}" />
|
||||
<arg line="${objFiles}"/>
|
||||
<arg line="${libraries}" />
|
||||
</exec>
|
||||
</target>
|
||||
|
||||
<!-- strips the shared library of debug symbols -->
|
||||
<target name="strip" depends="link" if="should-strip">
|
||||
<exec executable="${stripper}" failonerror="true" dir="${buildDir}">
|
||||
<arg value="--strip-unneeded"/>
|
||||
<arg path="${libsDir}/${libName}" />
|
||||
</exec>
|
||||
</target>
|
||||
|
||||
<!-- copy dll into dev environment
|
||||
<target name="copyDLL" depends="link">
|
||||
<copy
|
||||
file ="${libsDir}/${libName}"
|
||||
todir ="C:/DAT/MT/mytourbook/bundles/net.tourbook.ext.vtm.windows/natives"
|
||||
/>
|
||||
</target>
|
||||
-->
|
||||
|
||||
<target name="postcompile" depends="strip">
|
||||
|
||||
</target>
|
||||
</project>
|
@ -102,7 +102,7 @@ matrix4_proj2D(float* mat, float* vec, float *out);
|
||||
|
||||
jlong JNI(alloc)(JNIEnv *env, jclass* clazz)
|
||||
{
|
||||
return (long) calloc(16, sizeof(float));
|
||||
return (jlong) calloc(16, sizeof(float));
|
||||
}
|
||||
|
||||
jobject JNI(getBuffer)(JNIEnv *env, jclass* clazz,jlong ptr){
|
||||
|
@ -23,7 +23,7 @@
|
||||
//@line:131
|
||||
{
|
||||
if (size <= 0)
|
||||
return (long)tessNewTess(0);
|
||||
return (jlong)tessNewTess(0);
|
||||
if (size > 10)
|
||||
size = 10;
|
||||
TESSalloc ma;
|
||||
@ -39,7 +39,7 @@
|
||||
ma.regionBucketSize = 1 << size; // 256
|
||||
ma.extraVertices = 8;
|
||||
//ma.extraVertices = 256;
|
||||
return (long)tessNewTess(&ma);
|
||||
return (jlong)tessNewTess(&ma);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -49,6 +49,11 @@
|
||||
<xs:enumeration value="monospace" />
|
||||
<xs:enumeration value="sans_serif" />
|
||||
<xs:enumeration value="serif" />
|
||||
<xs:enumeration value="thin" />
|
||||
<xs:enumeration value="light" />
|
||||
<xs:enumeration value="medium" />
|
||||
<xs:enumeration value="black" />
|
||||
<xs:enumeration value="condensed" />
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
@ -69,7 +74,7 @@
|
||||
|
||||
<xs:simpleType name="src">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:pattern value="(file|assets):.+" />
|
||||
<xs:pattern value="((file|assets):)?.+" />
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
@ -84,6 +89,8 @@
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="ele" />
|
||||
<xs:enumeration value="addr:housenumber" />
|
||||
<xs:enumeration value="addr_housenumber" /> <!-- Mapzen -->
|
||||
<xs:enumeration value="housenumber" /> <!-- OpenMapTiles -->
|
||||
<xs:enumeration value="name" />
|
||||
<xs:enumeration value="ref" />
|
||||
</xs:restriction>
|
||||
@ -124,6 +131,9 @@
|
||||
<xs:attribute name="id" default="0" type="xs:string" use="optional" />
|
||||
<xs:attribute name="use" default="0" type="xs:string" use="optional" />
|
||||
<xs:attribute name="src" type="tns:src" use="optional" />
|
||||
<xs:attribute name="symbol-width" type="xs:positiveInteger" use="optional" />
|
||||
<xs:attribute name="symbol-height" type="xs:positiveInteger" use="optional" />
|
||||
<xs:attribute name="symbol-percent" type="xs:positiveInteger" use="optional" />
|
||||
<xs:attribute name="fill" default="#000000" type="tns:color" use="optional" />
|
||||
<xs:attribute name="stroke" default="#00000000" type="tns:color" use="optional" />
|
||||
<xs:attribute name="stroke-width" default="0" type="tns:nonNegativeFloat" use="optional" />
|
||||
@ -140,14 +150,19 @@
|
||||
<xs:attribute name="font-family" default="default" type="tns:fontFamily" use="optional" />
|
||||
<xs:attribute name="style" default="normal" type="tns:fontStyle" use="optional" />
|
||||
<xs:attribute name="size" default="0" type="tns:nonNegativeFloat" use="optional" />
|
||||
<xs:attribute name="bg-fill" default="#00000000" type="tns:color" use="optional" />
|
||||
<xs:attribute name="fill" default="#000000" type="tns:color" use="optional" />
|
||||
<xs:attribute name="stroke" default="#000000" type="tns:color" use="optional" />
|
||||
<xs:attribute name="stroke-width" default="0" type="tns:nonNegativeFloat" use="optional" />
|
||||
<!-- polygon area expressed as a ratio to tile area, e.g. 0.1 for 10% of tile area -->
|
||||
<xs:attribute name="area-size" default="0" type="tns:nonNegativeFloat" use="optional" />
|
||||
<!-- priority for label placement, 0 = highest priority -->
|
||||
<xs:attribute name="priority" default="0" type="xs:integer" use="optional" />
|
||||
|
||||
<!-- symbol src name in atlas -->
|
||||
<!-- symbol src name -->
|
||||
<xs:attribute name="symbol" type="tns:src" use="optional" />
|
||||
<xs:attribute name="symbol-width" type="xs:positiveInteger" use="optional" />
|
||||
<xs:attribute name="symbol-height" type="xs:positiveInteger" use="optional" />
|
||||
<xs:attribute name="symbol-percent" type="xs:positiveInteger" use="optional" />
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="circle">
|
||||
@ -169,6 +184,9 @@
|
||||
<xs:attribute name="use" default="0" type="xs:string" use="optional" />
|
||||
|
||||
<xs:attribute name="src" type="tns:src" use="optional" />
|
||||
<xs:attribute name="symbol-width" type="xs:positiveInteger" use="optional" />
|
||||
<xs:attribute name="symbol-height" type="xs:positiveInteger" use="optional" />
|
||||
<xs:attribute name="symbol-percent" type="xs:positiveInteger" use="optional" />
|
||||
<xs:attribute name="stroke" default="#000000" type="tns:color" use="optional" />
|
||||
<xs:attribute name="width" default="0" type="xs:float" use="optional" />
|
||||
<!-- minimum scaled width to draw outline -->
|
||||
@ -179,6 +197,8 @@
|
||||
<xs:attribute name="fade" default="-1" type="xs:integer" use="optional" />
|
||||
<xs:attribute name="blur" default="-1" type="xs:float" use="optional" />
|
||||
<xs:attribute name="fix" default="false" type="xs:boolean" use="optional" />
|
||||
<xs:attribute name="repeat-gap" default="200" type="xs:float" use="optional" />
|
||||
<xs:attribute name="repeat-start" default="30" type="xs:float" use="optional" />
|
||||
|
||||
<!-- stipple repeat in 'pixel' -->
|
||||
<xs:attribute name="stipple" default="0" type="xs:integer" use="optional" />
|
||||
@ -189,21 +209,6 @@
|
||||
|
||||
</xs:complexType>
|
||||
|
||||
<!--<xs:complexType name="outline">
|
||||
<xs:attribute name="cat" type="xs:string" use="optional" />
|
||||
<xs:attribute name="name" default="0" type="xs:string" use="optional" />
|
||||
<xs:attribute name="src" type="tns:src" use="optional" />
|
||||
<xs:attribute name="stroke" default="#000000" type="tns:color" use="optional" />
|
||||
<xs:attribute name="stroke-width" default="0" type="tns:nonNegativeFloat" use="optional" />
|
||||
</xs:complexType>-->
|
||||
|
||||
<xs:complexType name="lineSymbol">
|
||||
<xs:attribute name="cat" type="xs:string" use="optional" />
|
||||
<xs:attribute name="src" type="tns:src" use="required" />
|
||||
<xs:attribute name="align-center" default="false" type="xs:boolean" use="optional" />
|
||||
<xs:attribute name="repeat" default="false" type="xs:boolean" use="optional" />
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="text">
|
||||
<xs:attribute name="cat" type="xs:string" use="optional" />
|
||||
|
||||
@ -215,17 +220,34 @@
|
||||
<xs:attribute name="font-family" default="default" type="tns:fontFamily" use="optional" />
|
||||
<xs:attribute name="style" default="normal" type="tns:fontStyle" use="optional" />
|
||||
<xs:attribute name="size" default="0" type="tns:nonNegativeFloat" use="optional" />
|
||||
<xs:attribute name="bg-fill" default="#00000000" type="tns:color" use="optional" />
|
||||
<xs:attribute name="fill" default="#000000" type="tns:color" use="optional" />
|
||||
<xs:attribute name="stroke" default="#000000" type="tns:color" use="optional" />
|
||||
<xs:attribute name="stroke-width" default="0" type="tns:nonNegativeFloat" use="optional" />
|
||||
<xs:attribute name="caption" default="false" type="xs:boolean" use="optional" />
|
||||
<!-- polygon area expressed as a ratio to tile area, e.g. 0.1 for 10% of tile area -->
|
||||
<xs:attribute name="area-size" default="0" type="tns:nonNegativeFloat" use="optional" />
|
||||
<!-- priority for label placement, 0 = highest priority -->
|
||||
<xs:attribute name="priority" default="0" type="xs:integer" use="optional" />
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="symbol">
|
||||
<xs:attribute name="cat" type="xs:string" use="optional" />
|
||||
<xs:attribute name="src" type="tns:src" use="required" />
|
||||
|
||||
<xs:attribute name="id" default="0" type="xs:string" use="optional" />
|
||||
<xs:attribute name="use" default="0" type="xs:string" use="optional" />
|
||||
|
||||
<xs:attribute name="src" type="tns:src" use="optional" />
|
||||
<xs:attribute name="symbol-width" type="xs:positiveInteger" use="optional" />
|
||||
<xs:attribute name="symbol-height" type="xs:positiveInteger" use="optional" />
|
||||
<xs:attribute name="symbol-percent" type="xs:positiveInteger" use="optional" />
|
||||
|
||||
<!-- symbols on lines -->
|
||||
<xs:attribute name="billboard" default="false" type="xs:boolean" use="optional" />
|
||||
<xs:attribute name="repeat" default="false" type="xs:boolean" use="optional" />
|
||||
<xs:attribute name="repeat-gap" default="200" type="xs:float" use="optional" />
|
||||
<xs:attribute name="repeat-start" default="30" type="xs:float" use="optional" />
|
||||
<xs:attribute name="rotate" default="true" type="xs:boolean" use="optional" />
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="extrusion">
|
||||
@ -233,6 +255,11 @@
|
||||
<xs:attribute name="line-color" type="tns:color" use="optional" />
|
||||
<xs:attribute name="side-color" type="tns:color" use="required" />
|
||||
<xs:attribute name="top-color" type="tns:color" use="required" />
|
||||
<xs:attribute name="hsv-h" default="0" type="xs:double" use="optional" />
|
||||
<xs:attribute name="hsv-s" default="1" type="xs:double" use="optional" />
|
||||
<xs:attribute name="hsv-v" default="1" type="xs:double" use="optional" />
|
||||
<!-- 12m default -->
|
||||
<xs:attribute name="default-height" default="12" type="xs:positiveInteger" use="optional" />
|
||||
</xs:complexType>
|
||||
|
||||
<!-- match elements -->
|
||||
@ -246,7 +273,7 @@
|
||||
<xs:element name="circle" type="tns:circle" />
|
||||
<xs:element name="line" type="tns:line" />
|
||||
<xs:element name="outline" type="tns:line" />
|
||||
<xs:element name="lineSymbol" type="tns:lineSymbol" />
|
||||
<xs:element name="lineSymbol" type="tns:line" />
|
||||
<xs:element name="text" type="tns:text" />
|
||||
<xs:element name="extrusion" type="tns:extrusion" />
|
||||
<xs:element name="symbol" type="tns:symbol" />
|
||||
@ -287,15 +314,29 @@
|
||||
<xs:attribute name="id" type="xs:string" use="required" />
|
||||
</xs:complexType>
|
||||
|
||||
<!-- tag-transform element -->
|
||||
<xs:complexType name="tag-transform">
|
||||
<xs:attribute name="k" type="xs:string" use="required" />
|
||||
<xs:attribute name="v" type="xs:string" use="optional" />
|
||||
<xs:attribute name="k-lib" type="xs:string" use="required" />
|
||||
<xs:attribute name="v-lib" type="xs:string" use="optional" />
|
||||
</xs:complexType>
|
||||
|
||||
<!-- rendertheme element -->
|
||||
<xs:complexType name="rendertheme">
|
||||
<xs:sequence maxOccurs="1" minOccurs="0">
|
||||
<xs:element name="stylemenu" maxOccurs="1" minOccurs="0" type="tns:stylemenu" />
|
||||
|
||||
<!-- tag definitions -->
|
||||
<xs:choice maxOccurs="unbounded" minOccurs="0">
|
||||
<xs:element name="tag-transform" type="tns:tag-transform" />
|
||||
</xs:choice>
|
||||
|
||||
<!-- style definitions -->
|
||||
<xs:sequence maxOccurs="256" minOccurs="0">
|
||||
<xs:choice maxOccurs="unbounded" minOccurs="0">
|
||||
<xs:element name="style-text" type="tns:text" />
|
||||
<xs:element name="style-symbol" type="tns:symbol" />
|
||||
<xs:element name="style-area" type="tns:area" />
|
||||
<xs:element name="style-line" type="tns:line" />
|
||||
<!-- <xs:element name="style-outline" type="tns:line" /> -->
|
||||
|
@ -1,19 +1,44 @@
|
||||
pluginManagement {
|
||||
repositories {
|
||||
gradlePluginPortal()
|
||||
google()
|
||||
mavenCentral()
|
||||
}
|
||||
}
|
||||
dependencyResolutionManagement {
|
||||
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
|
||||
repositories {
|
||||
google()
|
||||
mavenCentral()
|
||||
maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
|
||||
maven { url 'https://jitpack.io' }
|
||||
}
|
||||
}
|
||||
rootProject.name = 'vtm-parent'
|
||||
include ':vtm'
|
||||
include ':vtm-http'
|
||||
include ':vtm-jts'
|
||||
include ':vtm-tests'
|
||||
include ':vtm-extras'
|
||||
include ':vtm-android'
|
||||
include ':vtm-android-example'
|
||||
include ':vtm-themes'
|
||||
include ':vtm-gdx'
|
||||
include ':vtm-desktop'
|
||||
include ':vtm-android-gdx'
|
||||
//include ':vtm-web'
|
||||
//include ':vtm-web-app'
|
||||
//include ':vtm-web-js'
|
||||
include ':vtm-jeo'
|
||||
include ':vtm-playground'
|
||||
include ':vtm-ios'
|
||||
include ':vtm-android-mvt'
|
||||
include ':vtm-app'
|
||||
include ':vtm-desktop'
|
||||
include ':vtm-desktop-lwjgl'
|
||||
include ':vtm-desktop-lwjgl3'
|
||||
include ':vtm-extras'
|
||||
include ':vtm-gdx'
|
||||
include ':vtm-gdx-poi3d'
|
||||
include ':vtm-http'
|
||||
include ':vtm-ios'
|
||||
include ':vtm-ios-example'
|
||||
//include ':vtm-jeo'
|
||||
include ':vtm-json'
|
||||
include ':vtm-jts'
|
||||
include ':vtm-models'
|
||||
include ':vtm-mvt'
|
||||
include ':vtm-playground'
|
||||
include ':vtm-tests'
|
||||
include ':vtm-theme-comparator'
|
||||
include ':vtm-themes'
|
||||
include ':vtm-web'
|
||||
include ':vtm-web-app'
|
||||
//include ':vtm-web-js'
|
||||
|
@ -1,40 +1,58 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="org.oscim.android.test"
|
||||
android:installLocation="auto"
|
||||
android:versionCode="1"
|
||||
android:versionName="1.0">
|
||||
|
||||
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
|
||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
|
||||
<uses-sdk
|
||||
android:minSdkVersion="10"
|
||||
android:targetSdkVersion="22" />
|
||||
<uses-permission
|
||||
android:name="android.permission.READ_EXTERNAL_STORAGE"
|
||||
android:maxSdkVersion="18" />
|
||||
|
||||
<application
|
||||
android:allowBackup="true"
|
||||
android:icon="@drawable/ic_launcher"
|
||||
android:label="@string/app_name">
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:label="@string/app_name"
|
||||
android:requestLegacyExternalStorage="true"
|
||||
android:usesCleartextTraffic="true">
|
||||
<activity
|
||||
android:name=".Samples"
|
||||
android:configChanges="keyboardHidden|orientation|screenSize">
|
||||
android:configChanges="keyboardHidden|orientation|screenSize"
|
||||
android:exported="true">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".BitmapTileMapActivity"
|
||||
android:name=".AtlasMultiTextureActivity"
|
||||
android:configChanges="keyboardHidden|orientation|screenSize" />
|
||||
<activity
|
||||
android:name=".JeoIndoorMapActivity"
|
||||
android:name=".BitmapTileActivity"
|
||||
android:configChanges="keyboardHidden|orientation|screenSize" />
|
||||
<activity
|
||||
android:name=".LayerGroupActivity"
|
||||
android:name=".ClusterMarkerOverlayActivity"
|
||||
android:configChanges="keyboardHidden|orientation|screenSize" />
|
||||
<activity
|
||||
android:name=".DraggableMarkerOverlayActivity"
|
||||
android:configChanges="keyboardHidden|orientation|screenSize" />
|
||||
<activity
|
||||
android:name=".FragmentActivity"
|
||||
android:configChanges="keyboardHidden|orientation|screenSize" />
|
||||
<activity
|
||||
android:name=".GettingStarted"
|
||||
android:configChanges="keyboardHidden|orientation|screenSize" />
|
||||
<activity
|
||||
android:name=".GdxActivity"
|
||||
android:configChanges="keyboardHidden|orientation|screenSize" />
|
||||
<activity
|
||||
android:name=".GdxPoi3DActivity"
|
||||
android:configChanges="keyboardHidden|orientation|screenSize" />
|
||||
<!--<activity
|
||||
android:name=".JeoIndoorActivity"
|
||||
android:configChanges="keyboardHidden|orientation|screenSize" />-->
|
||||
<activity
|
||||
android:name=".LineTexActivity"
|
||||
android:configChanges="keyboardHidden|orientation|screenSize" />
|
||||
@ -42,25 +60,61 @@
|
||||
android:name=".LocationActivity"
|
||||
android:configChanges="keyboardHidden|orientation|screenSize" />
|
||||
<activity
|
||||
android:name=".MapsforgeMapActivity"
|
||||
android:name=".LocationTextureActivity"
|
||||
android:configChanges="keyboardHidden|orientation|screenSize" />
|
||||
<activity
|
||||
android:name=".MapsforgeMapActivity$MapFilePicker"
|
||||
android:name=".MapilionMvtActivity"
|
||||
android:configChanges="keyboardHidden|orientation|screenSize" />
|
||||
<activity
|
||||
android:name=".MapsforgeActivity"
|
||||
android:configChanges="keyboardHidden|orientation|screenSize" />
|
||||
<activity
|
||||
android:name=".MapsforgeS3DBActivity"
|
||||
android:configChanges="keyboardHidden|orientation|screenSize" />
|
||||
<activity
|
||||
android:name=".MapsforgeStyleActivity"
|
||||
android:configChanges="keyboardHidden|orientation|screenSize" />
|
||||
<activity
|
||||
android:name=".MapzenGeojsonActivity"
|
||||
android:configChanges="keyboardHidden|orientation|screenSize" />
|
||||
<activity
|
||||
android:name=".MapzenMvtActivity"
|
||||
android:configChanges="keyboardHidden|orientation|screenSize" />
|
||||
<activity
|
||||
android:name=".MarkerOverlayActivity"
|
||||
android:configChanges="keyboardHidden|orientation|screenSize" />
|
||||
<activity
|
||||
android:name=".MultiMapActivity"
|
||||
android:name=".MBTilesBitmapActivity"
|
||||
android:configChanges="keyboardHidden|orientation|screenSize" />
|
||||
<activity
|
||||
android:name=".OsmJsonMapActivity"
|
||||
android:name=".MBTilesMvtActivity"
|
||||
android:configChanges="keyboardHidden|orientation|screenSize" />
|
||||
<activity
|
||||
android:name=".NextzenGeojsonActivity"
|
||||
android:configChanges="keyboardHidden|orientation|screenSize" />
|
||||
<activity
|
||||
android:name=".NextzenMvtActivity"
|
||||
android:configChanges="keyboardHidden|orientation|screenSize" />
|
||||
<activity
|
||||
android:name=".OpenMapTilesMvtActivity"
|
||||
android:configChanges="keyboardHidden|orientation|screenSize" />
|
||||
<activity
|
||||
android:name=".OverpassActivity"
|
||||
android:configChanges="keyboardHidden|orientation|screenSize" />
|
||||
<activity
|
||||
android:name=".PathOverlayActivity"
|
||||
android:configChanges="keyboardHidden|orientation|screenSize" />
|
||||
<activity
|
||||
android:name=".S3DBMapActivity"
|
||||
android:name=".PoiSearchActivity"
|
||||
android:configChanges="keyboardHidden|orientation|screenSize" />
|
||||
<activity
|
||||
android:name=".PoiSearchActivity$PoiFilePicker"
|
||||
android:configChanges="keyboardHidden|orientation|screenSize" />
|
||||
<activity
|
||||
android:name=".ReverseGeocodeActivity"
|
||||
android:configChanges="keyboardHidden|orientation|screenSize" />
|
||||
<activity
|
||||
android:name=".ShadowActivity"
|
||||
android:configChanges="keyboardHidden|orientation|screenSize" />
|
||||
<activity
|
||||
android:name=".SimpleMapActivity"
|
||||
@ -69,7 +123,7 @@
|
||||
android:name=".ThemeStylerActivity"
|
||||
android:configChanges="keyboardHidden|orientation|screenSize" />
|
||||
<activity
|
||||
android:name=".VectorLayerMapActivity"
|
||||
android:name=".VectorLayerActivity"
|
||||
android:configChanges="keyboardHidden|orientation|screenSize" />
|
||||
</application>
|
||||
|
||||
|
50
vtm-android-example/assets/vtm/stylemenu.xml
Normal file
@ -0,0 +1,50 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<rendertheme xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" map-background="#fffcfa"
|
||||
version="1" xmlns="http://opensciencemap.org/rendertheme"
|
||||
xsi:schemaLocation="http://opensciencemap.org/rendertheme https://raw.githubusercontent.com/mapsforge/vtm/master/resources/rendertheme.xsd">
|
||||
|
||||
<stylemenu defaultlang="en" defaultvalue="1" id="menu">
|
||||
<layer enabled="true" id="nature">
|
||||
<name lang="de" value="Natur" />
|
||||
<name lang="en" value="Nature" />
|
||||
<name lang="es" value="Naturaleza" />
|
||||
<name lang="fr" value="Nature" />
|
||||
<cat id="nature" />
|
||||
</layer>
|
||||
|
||||
<layer id="base">
|
||||
<cat id="sea" />
|
||||
<cat id="land" />
|
||||
</layer>
|
||||
|
||||
<!-- Show nature layers (enabled by default) -->
|
||||
<layer id="1" parent="base" visible="true">
|
||||
<name lang="de" value="1" />
|
||||
<name lang="en" value="1" />
|
||||
<name lang="es" value="1" />
|
||||
<name lang="fr" value="1" />
|
||||
<overlay id="nature" />
|
||||
</layer>
|
||||
|
||||
<!-- Don't show nature layers -->
|
||||
<layer id="2" parent="base" visible="true">
|
||||
<name lang="de" value="2" />
|
||||
<name lang="en" value="2" />
|
||||
<name lang="es" value="2" />
|
||||
<name lang="fr" value="2" />
|
||||
</layer>
|
||||
</stylemenu>
|
||||
|
||||
<m cat="sea" e="way" k="natural" v="issea|sea">
|
||||
<area fill="#b5d6f1" mesh="true" />
|
||||
</m>
|
||||
|
||||
<m cat="land" e="way" k="natural" v="nosea">
|
||||
<area fill="#f8f8f8" mesh="true" />
|
||||
</m>
|
||||
|
||||
<m cat="nature" e="way" k="natural|landuse" v="forest|wood">
|
||||
<area fill="#83aa5b" />
|
||||
</m>
|
||||
|
||||
</rendertheme>
|
@ -1,51 +1,74 @@
|
||||
apply plugin: 'com.android.application'
|
||||
|
||||
dependencies {
|
||||
compile project(':vtm-android')
|
||||
compile project(':vtm-extras')
|
||||
compile project(':vtm-jeo')
|
||||
compile project(':vtm-jts')
|
||||
compile project(':vtm-themes')
|
||||
compile 'com.noveogroup.android:android-logger:1.3.6'
|
||||
implementation project(':vtm-android')
|
||||
implementation project(':vtm-android-mvt')
|
||||
implementation project(':vtm-extras')
|
||||
implementation project(':vtm-http')
|
||||
//implementation project(':vtm-jeo')
|
||||
implementation project(':vtm-json')
|
||||
implementation project(':vtm-jts')
|
||||
implementation project(':vtm-mvt')
|
||||
implementation project(':vtm-themes')
|
||||
implementation "org.slf4j:slf4j-android:$slf4jVersion"
|
||||
|
||||
implementation project(':vtm-android-gdx')
|
||||
implementation project(':vtm-gdx')
|
||||
implementation project(':vtm-gdx-poi3d')
|
||||
|
||||
implementation 'org.mapsforge:mapsforge-poi-android:master-SNAPSHOT'
|
||||
}
|
||||
|
||||
android {
|
||||
compileSdkVersion androidCompileSdk()
|
||||
buildToolsVersion "$androidBuildVersionTools"
|
||||
namespace 'org.oscim.android.test'
|
||||
compileSdk androidCompileSdk()
|
||||
|
||||
compileOptions {
|
||||
sourceCompatibility JavaVersion.VERSION_1_7
|
||||
targetCompatibility JavaVersion.VERSION_1_7
|
||||
sourceCompatibility JavaVersion.VERSION_1_8
|
||||
targetCompatibility JavaVersion.VERSION_1_8
|
||||
}
|
||||
|
||||
defaultConfig {
|
||||
versionCode versionCode()
|
||||
versionName versionName()
|
||||
minSdkVersion androidMinSdk()
|
||||
versionCode project.versionCode()
|
||||
versionName project.versionName()
|
||||
minSdk androidMinSdk()
|
||||
targetSdk androidTargetSdk()
|
||||
}
|
||||
|
||||
sourceSets {
|
||||
main {
|
||||
manifest.srcFile 'AndroidManifest.xml'
|
||||
java.srcDirs = ['src']
|
||||
resources.srcDirs = ['src']
|
||||
res.srcDirs = ['res']
|
||||
assets.srcDirs = ['assets']
|
||||
file("${rootDir}/vtm-android/natives").eachDir() { dir ->
|
||||
jniLibs.srcDirs += "${dir.path}/lib"
|
||||
}
|
||||
file("${rootDir}/vtm-android-gdx/natives").eachDir() { dir ->
|
||||
jniLibs.srcDirs += "${dir.path}/lib"
|
||||
}
|
||||
}
|
||||
debug.setRoot('build-types/debug')
|
||||
release.setRoot('build-types/release')
|
||||
}
|
||||
|
||||
lintOptions { abortOnError false }
|
||||
lint {
|
||||
abortOnError false
|
||||
}
|
||||
|
||||
packagingOptions {
|
||||
exclude 'META-INF/services/org.jeo.data.Driver'
|
||||
exclude 'META-INF/LICENSE'
|
||||
exclude 'META-INF/NOTICE'
|
||||
resources {
|
||||
excludes += ['META-INF/services/io.jeo.data.Driver', 'META-INF/LICENSE', 'META-INF/NOTICE']
|
||||
}
|
||||
}
|
||||
|
||||
/*buildTypes {
|
||||
all {
|
||||
minifyEnabled true
|
||||
useProguard false
|
||||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
task run(dependsOn: 'installDebug') {
|
||||
@ -59,3 +82,7 @@ task run(dependsOn: 'installDebug') {
|
||||
proc.waitFor()
|
||||
}
|
||||
}
|
||||
|
||||
if (System.getenv('ANDROID_HOME') == null) {
|
||||
throw new GradleException("Environment variable ANDROID_HOME needs to be set to SDK folder")
|
||||
}
|
||||
|
10
vtm-android-example/proguard-rules.pro
vendored
Normal file
@ -0,0 +1,10 @@
|
||||
-keep class com.** { *; }
|
||||
-dontwarn com.**
|
||||
-keep class jsqlite.** { *; }
|
||||
-dontwarn jsqlite.**
|
||||
-keep class okhttp3.** { *; }
|
||||
-dontwarn okhttp3.**
|
||||
-keep class okio.** { *; }
|
||||
-dontwarn okio.**
|
||||
-keep class org.** { *; }
|
||||
-dontwarn org.**
|
BIN
vtm-android-example/res/drawable-hdpi/marker_green.png
Normal file
After Width: | Height: | Size: 3.2 KiB |
BIN
vtm-android-example/res/drawable-hdpi/marker_red.png
Normal file
After Width: | Height: | Size: 3.5 KiB |
BIN
vtm-android-example/res/drawable-mdpi/marker_green.png
Normal file
After Width: | Height: | Size: 1.9 KiB |
BIN
vtm-android-example/res/drawable-mdpi/marker_red.png
Normal file
After Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 41 KiB |
10
vtm-android-example/res/layout/activity_map_draggable.xml
Normal file
@ -0,0 +1,10 @@
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<org.oscim.android.drag.DragMapView
|
||||
android:id="@+id/mapView"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent" />
|
||||
|
||||
</RelativeLayout>
|
11
vtm-android-example/res/layout/activity_map_fragment.xml
Normal file
@ -0,0 +1,11 @@
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/fragment_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent" />
|
||||
|
||||
</LinearLayout>
|
58
vtm-android-example/res/layout/activity_map_poi.xml
Normal file
@ -0,0 +1,58 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<org.oscim.android.MapView
|
||||
android:id="@+id/mapView"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
|
||||
<ToggleButton
|
||||
android:id="@+id/toggleControls"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="top|start"
|
||||
android:onClick="onToggleControls" />
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/controls"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="#bb000000"
|
||||
android:orientation="vertical"
|
||||
android:padding="10dp"
|
||||
android:visibility="gone">
|
||||
|
||||
<ListView
|
||||
android:id="@+id/search_list"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<Button
|
||||
android:id="@+id/add_item"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/add" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/start_search"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/search" />
|
||||
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
|
||||
</RelativeLayout>
|
36
vtm-android-example/res/layout/activity_shadow.xml
Normal file
@ -0,0 +1,36 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<org.oscim.android.MapView
|
||||
android:id="@+id/mapView"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="#cc000000"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<SeekBar
|
||||
android:id="@+id/seekBarShadow"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:max="2000"
|
||||
android:padding="10dp"
|
||||
android:progress="400" />
|
||||
|
||||
<ToggleButton
|
||||
android:id="@+id/toggleCurrentSun"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_vertical|center_horizontal"
|
||||
android:onClick="onToggleCurrentSun"
|
||||
android:textOn="@string/now" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</RelativeLayout>
|
12
vtm-android-example/res/layout/fragment_blank.xml
Normal file
@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@android:color/white">
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:text="@string/empty_fragment_text" />
|
||||
|
||||
</RelativeLayout>
|
12
vtm-android-example/res/layout/fragment_map.xml
Normal file
@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@android:color/white">
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/mapView"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent" />
|
||||
|
||||
</RelativeLayout>
|
33
vtm-android-example/res/layout/item_poi_search.xml
Normal file
@ -0,0 +1,33 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<EditText
|
||||
android:id="@+id/key"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:hint="@string/search_key"
|
||||
android:inputType="text"
|
||||
android:maxLines="1"
|
||||
android:textColor="@android:color/white" />
|
||||
|
||||
<EditText
|
||||
android:id="@+id/value"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:hint="@string/search_value"
|
||||
android:inputType="text"
|
||||
android:maxLines="1"
|
||||
android:textColor="@android:color/white" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/remove"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/remove" />
|
||||
|
||||
</LinearLayout>
|
@ -1,7 +0,0 @@
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item
|
||||
android:id="@+id/menu_settings"
|
||||
android:title="@string/menu_settings"
|
||||
android:orderInCategory="100"
|
||||
android:showAsAction="never" />
|
||||
</menu>
|
9
vtm-android-example/res/menu/fragment_menu.xml
Normal file
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<item
|
||||
android:id="@+id/replace_fragment"
|
||||
android:showAsAction="never"
|
||||
android:title="@string/replace_fragment" />
|
||||
|
||||
</menu>
|
16
vtm-android-example/res/menu/style_menu.xml
Normal file
@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<group
|
||||
android:id="@+id/styles"
|
||||
android:checkableBehavior="single">
|
||||
<item
|
||||
android:id="@+id/style_1"
|
||||
android:checked="true"
|
||||
android:title="@string/style_1" />
|
||||
<item
|
||||
android:id="@+id/style_2"
|
||||
android:title="@string/style_2" />
|
||||
</group>
|
||||
|
||||
</menu>
|
@ -7,26 +7,30 @@
|
||||
<item
|
||||
android:id="@+id/theme_default"
|
||||
android:checked="true"
|
||||
android:showAsAction="never"
|
||||
android:title="@string/theme_default"></item>
|
||||
<item
|
||||
android:id="@+id/theme_tubes"
|
||||
android:showAsAction="never"
|
||||
android:title="@string/theme_tubes"></item>
|
||||
android:title="@string/theme_default" />
|
||||
<item
|
||||
android:id="@+id/theme_osmarender"
|
||||
android:showAsAction="never"
|
||||
android:title="@string/theme_osmarender"></item>
|
||||
android:title="@string/theme_osmarender" />
|
||||
<item
|
||||
android:id="@+id/theme_osmagray"
|
||||
android:title="@string/theme_osmagray" />
|
||||
<item
|
||||
android:id="@+id/theme_tubes"
|
||||
android:title="@string/theme_tubes" />
|
||||
<item
|
||||
android:id="@+id/theme_newtron"
|
||||
android:showAsAction="never"
|
||||
android:title="@string/theme_newtron"></item>
|
||||
android:title="@string/theme_newtron" />
|
||||
<item
|
||||
android:id="@+id/theme_external_archive"
|
||||
android:title="@string/theme_external_archive" />
|
||||
<item
|
||||
android:id="@+id/theme_external"
|
||||
android:title="@string/theme_external" />
|
||||
</group>
|
||||
|
||||
<item
|
||||
android:id="@+id/gridlayer"
|
||||
android:showAsAction="never"
|
||||
android:checkable="true"
|
||||
android:title="@string/menu_gridlayer"></item>
|
||||
android:title="@string/menu_gridlayer" />
|
||||
|
||||
</menu>
|
||||
</menu>
|
||||
|
BIN
vtm-android-example/res/mipmap-hdpi/ic_launcher.png
Normal file
After Width: | Height: | Size: 8.1 KiB |
BIN
vtm-android-example/res/mipmap-mdpi/ic_launcher.png
Normal file
After Width: | Height: | Size: 6.0 KiB |
BIN
vtm-android-example/res/mipmap-xhdpi/ic_launcher.png
Normal file
After Width: | Height: | Size: 10 KiB |
BIN
vtm-android-example/res/mipmap-xxhdpi/ic_launcher.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
vtm-android-example/res/mipmap-xxxhdpi/ic_launcher.png
Normal file
After Width: | Height: | Size: 20 KiB |
19
vtm-android-example/res/raw/arrow.svg
Normal file
@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="utf-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" baseProfile="full" width="249.667" height="254.667" viewBox="0 0 249.67 254.67" enable-background="new 0 0 249.67 254.67" xml:space="preserve">
|
||||
<linearGradient id="SVGID_Fill1_" gradientUnits="objectBoundingBox" x1="-0.0161654" y1="0.500001" x2="1.01616" y2="0.500001">
|
||||
<stop offset="0.0344828" stop-color="#FF0000" stop-opacity="1"/>
|
||||
<stop offset="0.5" stop-color="#FF0000" stop-opacity="1"/>
|
||||
<stop offset="1" stop-color="#F8E6E6" stop-opacity="1"/>
|
||||
</linearGradient>
|
||||
<path fill="url(#SVGID_Fill1_)" stroke-width="5" stroke-linejoin="round" stroke="#000000" stroke-opacity="1" d="M 47.5002,250.834L 124.833,2.50006L 202.167,252.167L 124.167,199.167L 47.5002,250.834 Z "/>
|
||||
<linearGradient id="SVGID_Fill2_" gradientUnits="objectBoundingBox" x1="0.0255055" y1="0.518124" x2="0.986547" y2="0.518124" gradientTransform="rotate(42.130627 0.025506 0.518124)">
|
||||
<stop offset="0.301724" stop-color="#ECECEC" stop-opacity="0.345098"/>
|
||||
<stop offset="0.62931" stop-color="#1C1C1C" stop-opacity="0.776471"/>
|
||||
<stop offset="0.689655" stop-color="#000000" stop-opacity="0.423529"/>
|
||||
<stop offset="1" stop-color="#000000" stop-opacity="0.286275"/>
|
||||
</linearGradient>
|
||||
<filter id="Filter_GaussianBlur1_" filterUnits="userSpaceOnUse">
|
||||
<feGaussianBlur stdDeviation="1.88976"/>
|
||||
</filter>
|
||||
<path fill="url(#SVGID_Fill2_)" stroke-width="0.2" stroke-linejoin="round" filter="url(#Filter_GaussianBlur1_)" d="M 56.8333,241.5L 124.833,31.0001L 123.5,195.167L 56.8333,241.5 Z "/>
|
||||
</svg>
|
15
vtm-android-example/res/raw/marker.svg
Executable file
@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="580" width="580" version="1.0" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||
<title>other</title>
|
||||
<metadata>
|
||||
<rdf:RDF>
|
||||
<cc:Work rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
|
||||
<dc:title>other</dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<circle opacity=".8" cx="290" cy="290" r="145" fill="#fff"/>
|
||||
<circle cy="290" cx="290" r="116" fill="#0092DA"/>
|
||||
</svg>
|
After Width: | Height: | Size: 651 B |
@ -1,19 +1,36 @@
|
||||
<resources>
|
||||
|
||||
<string name="app_name">VTM Samples</string>
|
||||
<string name="menu_settings">Settings</string>
|
||||
<string name="theme_default">Default</string>
|
||||
<string name="theme_tubes">Tubes</string>
|
||||
<string name="theme_osmarender">Osmarender</string>
|
||||
<string name="theme_osmagray">Osmagray</string>
|
||||
<string name="theme_tubes">Tubes</string>
|
||||
<string name="theme_newtron">NewTron</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="cancel">Cancel</string>
|
||||
<string name="error">Error</string>
|
||||
<string name="file_invalid">The selected file is invalid.</string>
|
||||
<string name="theme_external">External theme (Android 5)</string>
|
||||
<string name="theme_external_archive">External theme archive</string>
|
||||
<string name="styler_mode_line">Line</string>
|
||||
<string name="styler_mode_area">Area</string>
|
||||
<string name="styler_mode_outline">Outline</string>
|
||||
<string name="styler_controls_toggle">Controls</string>
|
||||
<string name="menu_gridlayer">Gridlayer</string>
|
||||
<string name="style_1">Show nature</string>
|
||||
<string name="style_2">Hide nature</string>
|
||||
<string name="menu_gridlayer">Grid</string>
|
||||
<string name="dialog_reverse_geocoding_title">Reverse Geocoding</string>
|
||||
<string name="dialog_theme_title">Select a theme</string>
|
||||
<string name="add">Add</string>
|
||||
<string name="cancel">Cancel</string>
|
||||
<string name="error">Error</string>
|
||||
<string name="file_invalid">The selected file is invalid.</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="remove">Remove</string>
|
||||
<string name="search">Search</string>
|
||||
<string name="search_key">\'*\' or OSM key</string>
|
||||
<string name="search_value">void or value</string>
|
||||
<string name="now">Now</string>
|
||||
<string name="warning">Warning</string>
|
||||
<string name="startup_message_mbtiles">To run this sample activity, you need an MBTiles database installed on storage.</string>
|
||||
<string name="exit">Exit</string>
|
||||
<string name="replace_fragment">Replace fragment</string>
|
||||
<string name="empty_fragment_text">This is a fragment to test the back stack behaviour of the map fragment.</string>
|
||||
|
||||
</resources>
|
||||
|
@ -1 +0,0 @@
|
||||
root=DEBUG:%logger
|
@ -0,0 +1,436 @@
|
||||
/*
|
||||
* Copyright 2013 Hannes Janetzek
|
||||
* Copyright 2016 Izumi Kawashima
|
||||
* Copyright 2017 Longri
|
||||
* Copyright 2017-2018 devemux86
|
||||
* Copyright 2017 nebular
|
||||
* Copyright 2017 Wolfgang Schramm
|
||||
*
|
||||
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under the
|
||||
* terms of the GNU Lesser General Public License as published by the Free Software
|
||||
* Foundation, either version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.oscim.android.cluster;
|
||||
|
||||
import org.oscim.backend.canvas.Bitmap;
|
||||
import org.oscim.core.MercatorProjection;
|
||||
import org.oscim.core.PointF;
|
||||
import org.oscim.core.Tile;
|
||||
import org.oscim.layers.marker.*;
|
||||
import org.oscim.layers.marker.utils.SparseIntArray;
|
||||
import org.oscim.renderer.GLViewport;
|
||||
import org.oscim.renderer.bucket.SymbolItem;
|
||||
import org.oscim.utils.FastMath;
|
||||
import org.oscim.utils.geom.GeometryUtils;
|
||||
|
||||
/**
|
||||
* An extension to the MarkerRenderer with item clustering support.
|
||||
*/
|
||||
public class ClusterMarkerRenderer extends MarkerRenderer {
|
||||
|
||||
/**
|
||||
* Max number to display inside a cluster icon
|
||||
*/
|
||||
protected static final int CLUSTER_MAXSIZE = 10;
|
||||
|
||||
/**
|
||||
* default color of number inside the icon. Would be super-cool to cook this into the map theme
|
||||
*/
|
||||
private static final int CLUSTER_COLORTEXT = 0xff8000c0;
|
||||
|
||||
/**
|
||||
* default color of circle background
|
||||
*/
|
||||
private static final int CLUSTER_COLORBACK = 0xffffffff;
|
||||
|
||||
/**
|
||||
* Map Cluster Icon Size. This is the biggest size for clusters of CLUSTER_MAXSIZE elements. Smaller clusters will be slightly smaller
|
||||
*/
|
||||
protected static final int MAP_MARKER_CLUSTER_SIZE_DP = 64;
|
||||
|
||||
/**
|
||||
* Clustering grid square size, decrease to cluster more aggresively. Ideally this value is the typical marker size
|
||||
*/
|
||||
private static final int MAP_GRID_SIZE_DP = 64;
|
||||
|
||||
/**
|
||||
* cached bitmaps database, we will cache cluster bitmaps from 1 to MAX_SIZE
|
||||
* and always use same bitmap for efficiency
|
||||
*/
|
||||
protected static Bitmap[] mClusterBitmaps = new Bitmap[CLUSTER_MAXSIZE + 1];
|
||||
|
||||
protected int mStyleBackground = CLUSTER_COLORBACK, mStyleForeground = CLUSTER_COLORTEXT;
|
||||
|
||||
/**
|
||||
* Discrete scale step, used to trigger reclustering on significant scale change
|
||||
*/
|
||||
private int mScalePow = 0;
|
||||
|
||||
/**
|
||||
* Map scale to cluster the marker
|
||||
*/
|
||||
private double mClusterScale = 0;
|
||||
|
||||
/**
|
||||
* We use a flat Sparse array to calculate the clusters. The sparse array models a 2D map where every (x,y) denotes
|
||||
* a grid slot, ie. 64x64dp. For efficiency I use a linear sparsearray with ARRindex = SLOTypos * max_x + SLOTxpos"
|
||||
*/
|
||||
private final SparseIntArray mGridMap = new SparseIntArray(200); // initial space for 200 markers, that's not a lot of memory, and in most cases will avoid resizing the array
|
||||
|
||||
/**
|
||||
* Whether to enable clustering or disable the functionality
|
||||
*/
|
||||
private final boolean mClusteringEnabled;
|
||||
|
||||
/**
|
||||
* Constructs a clustered marker renderer
|
||||
*
|
||||
* @param markerLayer The owner layer
|
||||
* @param defaultSymbol The default symbol
|
||||
* @param style The desired style, or NULL to disable clustering
|
||||
*/
|
||||
public ClusterMarkerRenderer(MarkerLayer markerLayer, MarkerSymbol defaultSymbol, ClusterMarkerRenderer.ClusterStyle style) {
|
||||
super(markerLayer, defaultSymbol);
|
||||
|
||||
mClusteringEnabled = style != null;
|
||||
|
||||
if (mClusteringEnabled) {
|
||||
setClusterStyle(style.foreground, style.background);
|
||||
for (int k = 0; k <= CLUSTER_MAXSIZE; k++) {
|
||||
// cache bitmaps so render thread never creates them
|
||||
// we create CLUSTER_MAXSIZE bitmaps. Bigger clusters will show like "+"
|
||||
getClusterBitmap(k);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Configures the cluster icon style. This is called by the constructor and cannot be made public because
|
||||
* we pre-cache the icons at construction time so the renderer does not have to create them while rendering
|
||||
*
|
||||
* @param backgroundColor Background color
|
||||
* @param foregroundColor text & border color
|
||||
*/
|
||||
private void setClusterStyle(int foregroundColor, int backgroundColor) {
|
||||
mStyleBackground = backgroundColor;
|
||||
mStyleForeground = foregroundColor;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void populate(int size) {
|
||||
repopulateCluster(size, mClusterScale);
|
||||
}
|
||||
|
||||
/**
|
||||
* Repopulates item list clustering close markers. This is triggered from update() when
|
||||
* a significant change in scale has happened.
|
||||
*
|
||||
* @param size Item list size
|
||||
* @param scale current map scale
|
||||
*/
|
||||
private void repopulateCluster(int size, double scale) {
|
||||
/* the grid slot size in px. increase to group more aggressively. currently set to marker size */
|
||||
final int GRIDSIZE = ClusterUtils.getPixels(MAP_GRID_SIZE_DP);
|
||||
|
||||
/* the factor to map into Grid Coordinates (discrete squares of GRIDSIZE x GRIDSIZE) */
|
||||
final double factor = (scale / GRIDSIZE);
|
||||
|
||||
Clustered[] tmp = new Clustered[size];
|
||||
|
||||
// clear grid map to count items that share the same "grid slot"
|
||||
mGridMap.clear();
|
||||
|
||||
for (int i = 0; i < size; i++) {
|
||||
Clustered it = tmp[i] = new Clustered();
|
||||
|
||||
it.item = mMarkerLayer.createItem(i);
|
||||
|
||||
/* pre-project points */
|
||||
MercatorProjection.project(it.item.getPoint(), mMapPoint);
|
||||
it.px = mMapPoint.x;
|
||||
it.py = mMapPoint.y;
|
||||
|
||||
// items can be declared non-clusterable
|
||||
if (!(it.item instanceof NonClusterable)) {
|
||||
|
||||
final int
|
||||
absposx = (int) (it.px * factor), // absolute item X position in the grid
|
||||
absposy = (int) (it.py * factor), // absolute item Y position
|
||||
maxcols = (int) factor, // Grid number of columns
|
||||
itemGridIndex = absposx + absposy * maxcols; // Index in the sparsearray map
|
||||
|
||||
// we store in the linear sparsearray the index of the marker,
|
||||
// ie, index = y * maxcols + x; array[index} = markerIndex
|
||||
|
||||
// Lets check if there's already an item in the grid slot
|
||||
final int storedIndexInGridSlot = mGridMap.get(itemGridIndex, -1);
|
||||
|
||||
if (storedIndexInGridSlot == -1) {
|
||||
// no item at that grid position. The grid slot is free so let's
|
||||
// store this item "i" (we identify every item by its InternalItem index)
|
||||
|
||||
mGridMap.put(itemGridIndex, i);
|
||||
//Log.v(TAG, "UNclustered item at " + itemGridIndex);
|
||||
} else {
|
||||
// at that grid position there's already a marker index
|
||||
// mark this item as clustered out, so it will be skipped in the update() call
|
||||
|
||||
it.clusteredOut = true;
|
||||
|
||||
// and increment the count on its "parent" that will from now on act as a cluster
|
||||
tmp[storedIndexInGridSlot].clusterSize++;
|
||||
|
||||
//Log.v(TAG, "Clustered item at " + itemGridIndex + ", \'parent\' size " + (tmp[storedIndexInGridSlot].clusterSize));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* All ready for update. */
|
||||
synchronized (this) {
|
||||
mUpdate = true;
|
||||
mItems = tmp;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized void update(GLViewport v) {
|
||||
final double scale = Tile.SIZE * v.pos.scale;
|
||||
|
||||
if (mClusteringEnabled) {
|
||||
/*
|
||||
Clustering check: If clustering is enabled and there's been a significant scale change
|
||||
trigger repopulation and return. After repopulation, this will be called again
|
||||
*/
|
||||
|
||||
// (int) log of scale gives us adequate steps to trigger clustering
|
||||
int scalePow = FastMath.log2((int) scale);
|
||||
|
||||
if (scalePow != mScalePow) {
|
||||
mScalePow = scalePow;
|
||||
mClusterScale = scale;
|
||||
|
||||
// post repopulation to the main thread
|
||||
mMarkerLayer.map().post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
repopulateCluster(mItems.length, scale);
|
||||
}
|
||||
});
|
||||
|
||||
// and get out of here
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (!v.changed() && !mUpdate)
|
||||
return;
|
||||
|
||||
mUpdate = false;
|
||||
|
||||
double mx = v.pos.x;
|
||||
double my = v.pos.y;
|
||||
|
||||
//int changesInvisible = 0;
|
||||
//int changedVisible = 0;
|
||||
int numVisible = 0;
|
||||
|
||||
// Increase view to show items that are partially visible
|
||||
mMarkerLayer.map().viewport().getMapExtents(mBox, Tile.SIZE >> 1);
|
||||
|
||||
long flip = (long) (Tile.SIZE * v.pos.scale) >> 1;
|
||||
|
||||
if (mItems == null) {
|
||||
if (buckets.get() != null) {
|
||||
buckets.clear();
|
||||
compile();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
double angle = Math.toRadians(v.pos.bearing);
|
||||
float cos = (float) Math.cos(angle);
|
||||
float sin = (float) Math.sin(angle);
|
||||
|
||||
/* check visibility */
|
||||
for (InternalItem itm : mItems) {
|
||||
Clustered it = (Clustered) itm;
|
||||
|
||||
it.changes = false;
|
||||
it.x = (float) ((it.px - mx) * scale);
|
||||
it.y = (float) ((it.py - my) * scale);
|
||||
|
||||
if (it.x > flip)
|
||||
it.x -= (flip << 1);
|
||||
else if (it.x < -flip)
|
||||
it.x += (flip << 1);
|
||||
|
||||
if ((it.clusteredOut) || (!GeometryUtils.pointInPoly(it.x, it.y, mBox, 8, 0))) {
|
||||
// either properly invisible, or clustered out. Items marked as clustered out mean there's another item
|
||||
// on the same-ish position that will be promoted to cluster marker, so this particular item is considered
|
||||
// invisible
|
||||
|
||||
if (it.visible && (!it.clusteredOut)) {
|
||||
// it was previously visible, but now it won't
|
||||
it.changes = true;
|
||||
// changes to invible
|
||||
//changesInvisible++;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
// item IS definitely visible
|
||||
it.dy = sin * it.x + cos * it.y;
|
||||
|
||||
if (!it.visible) {
|
||||
it.visible = true;
|
||||
//changedVisible++;
|
||||
}
|
||||
numVisible++;
|
||||
}
|
||||
|
||||
//log.debug(numVisible + " " + changedVisible + " " + changesInvisible);
|
||||
|
||||
/* only update when zoomlevel changed, new items are visible
|
||||
* or more than 10 of the current items became invisible */
|
||||
//if ((numVisible == 0) && (changedVisible == 0 && changesInvisible < 10))
|
||||
// return;
|
||||
buckets.clear();
|
||||
|
||||
if (numVisible == 0) {
|
||||
compile();
|
||||
return;
|
||||
}
|
||||
/* keep position for current state */
|
||||
mMapPosition.copy(v.pos);
|
||||
mMapPosition.bearing = -mMapPosition.bearing;
|
||||
|
||||
// why do we sort ? z-index?
|
||||
sort(mItems, 0, mItems.length);
|
||||
//log.debug(Arrays.toString(mItems));
|
||||
|
||||
for (InternalItem itm : mItems) {
|
||||
Clustered it = (Clustered) itm;
|
||||
|
||||
// skip invisible AND clustered-out
|
||||
if ((!it.visible) || (it.clusteredOut))
|
||||
continue;
|
||||
|
||||
if (it.changes) {
|
||||
it.visible = false;
|
||||
continue;
|
||||
}
|
||||
|
||||
SymbolItem s = SymbolItem.pool.get();
|
||||
|
||||
if (it.clusterSize > 0) {
|
||||
// this item will act as a cluster, just use a proper bitmap
|
||||
// depending on cluster size, instead of its marker
|
||||
|
||||
Bitmap bitmap = getClusterBitmap(it.clusterSize + 1);
|
||||
s.set(it.x, it.y, bitmap, true);
|
||||
s.offset = new PointF(0.5f, 0.5f);
|
||||
s.billboard = true; // could be a parameter
|
||||
|
||||
} else {
|
||||
// normal item, use its marker
|
||||
|
||||
MarkerSymbol symbol = it.item.getMarker();
|
||||
|
||||
if (symbol == null)
|
||||
symbol = mDefaultMarker;
|
||||
|
||||
s.set(it.x, it.y, symbol.getBitmap(), true);
|
||||
s.offset = symbol.getHotspot();
|
||||
s.billboard = symbol.isBillboard();
|
||||
}
|
||||
|
||||
mSymbolLayer.pushSymbol(s);
|
||||
}
|
||||
|
||||
buckets.set(mSymbolLayer);
|
||||
buckets.prepare();
|
||||
|
||||
compile();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Gets a bitmap for a given cluster size
|
||||
*
|
||||
* @param size The cluster size. Can be greater than CLUSTER_MAXSIZE.
|
||||
* @return A somewhat cool bitmap to be used as the cluster marker
|
||||
*/
|
||||
protected Bitmap getClusterBitmap(int size) {
|
||||
final String strValue;
|
||||
|
||||
if (size >= CLUSTER_MAXSIZE) {
|
||||
// restrict cluster indicator size. Bigger clusters will show as "+" instead of ie. "45"
|
||||
size = CLUSTER_MAXSIZE;
|
||||
strValue = "+";
|
||||
} else {
|
||||
strValue = String.valueOf(size);
|
||||
}
|
||||
|
||||
// return cached bitmap if exists. cache hit !
|
||||
if (mClusterBitmaps[size] != null)
|
||||
return mClusterBitmaps[size];
|
||||
|
||||
// create and cache bitmap. This is unacceptable inside the GL thread,
|
||||
// so we'll call this routine at the beginning to pre-cache all bitmaps
|
||||
|
||||
ClusterUtils.ClusterDrawable drawable = new ClusterUtils.ClusterDrawable(
|
||||
MAP_MARKER_CLUSTER_SIZE_DP - CLUSTER_MAXSIZE + size, // make size dependent on cluster size
|
||||
mStyleForeground,
|
||||
mStyleBackground,
|
||||
strValue
|
||||
);
|
||||
|
||||
mClusterBitmaps[size] = drawable.getBitmap();
|
||||
return mClusterBitmaps[size];
|
||||
}
|
||||
|
||||
/**
|
||||
* Class to wrap the cluster icon style properties
|
||||
*/
|
||||
public static class ClusterStyle {
|
||||
final int background;
|
||||
final int foreground;
|
||||
|
||||
/**
|
||||
* Creates the Cluster style
|
||||
*
|
||||
* @param fore Foreground (border and text) color
|
||||
* @param back Background (circle) color
|
||||
*/
|
||||
|
||||
public ClusterStyle(int fore, int back) {
|
||||
foreground = fore;
|
||||
background = back;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Convenience method for instantiating this renderer via a factory, so the layer construction semantic is more pleasing to the eye
|
||||
*
|
||||
* @param defaultSymbol Default symbol to use if the Marker is not assigned a symbol
|
||||
* @param style Cluster icon style, or NULL to disable clustering functionality
|
||||
* @return A factory to be passed to the ItemizedLayer constructor in order to enable the cluster functionality
|
||||
*/
|
||||
public static MarkerRendererFactory factory(final MarkerSymbol defaultSymbol, final ClusterStyle style) {
|
||||
return new MarkerRendererFactory() {
|
||||
@Override
|
||||
public MarkerRenderer create(MarkerLayer markerLayer) {
|
||||
return new ClusterMarkerRenderer(markerLayer, defaultSymbol, style);
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
@ -0,0 +1,105 @@
|
||||
/*
|
||||
* Copyright 2017 nebular
|
||||
* Copyright 2017 devemux86
|
||||
* Copyright 2017 Wolfgang Schramm
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under the
|
||||
* terms of the GNU Lesser General Public License as published by the Free Software
|
||||
* Foundation, either version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.oscim.android.cluster;
|
||||
|
||||
import org.oscim.backend.CanvasAdapter;
|
||||
import org.oscim.backend.canvas.Bitmap;
|
||||
import org.oscim.backend.canvas.Canvas;
|
||||
import org.oscim.backend.canvas.Paint;
|
||||
|
||||
/**
|
||||
* A simple utility class to make clustered markers functionality self-contained.
|
||||
* Includes a method to translate between DPs and PXs and a circular icon generator.
|
||||
*/
|
||||
public class ClusterUtils {
|
||||
|
||||
/**
|
||||
* Get pixels from DPs
|
||||
*
|
||||
* @param dp Value in DPs
|
||||
* @return Value in PX according to screen density
|
||||
*/
|
||||
public static int getPixels(float dp) {
|
||||
return (int) (CanvasAdapter.getScale() * dp);
|
||||
}
|
||||
|
||||
public static class ClusterDrawable {
|
||||
private final Paint mPaintText = CanvasAdapter.newPaint();
|
||||
private final Paint mPaintCircle = CanvasAdapter.newPaint();
|
||||
private final Paint mPaintBorder = CanvasAdapter.newPaint();
|
||||
private int mSize;
|
||||
private String mText;
|
||||
|
||||
/**
|
||||
* Generates a circle with a number inside
|
||||
*
|
||||
* @param sizedp Size in DPs
|
||||
* @param foregroundColor Foreground
|
||||
* @param backgroundColor Background
|
||||
* @param text Text inside. Will only work for a single character!
|
||||
*/
|
||||
public ClusterDrawable(int sizedp, int foregroundColor, int backgroundColor, String text) {
|
||||
setup(sizedp, foregroundColor, backgroundColor);
|
||||
setText(text);
|
||||
}
|
||||
|
||||
private void setup(int sizedp, int foregroundColor, int backgroundColor) {
|
||||
mSize = ClusterUtils.getPixels(sizedp);
|
||||
mPaintText.setTextSize(ClusterUtils.getPixels((int) (sizedp * 0.6666666)));
|
||||
mPaintText.setColor(foregroundColor);
|
||||
|
||||
mPaintCircle.setColor(backgroundColor);
|
||||
mPaintCircle.setStyle(Paint.Style.FILL);
|
||||
|
||||
mPaintBorder.setColor(foregroundColor);
|
||||
mPaintBorder.setStyle(Paint.Style.STROKE);
|
||||
mPaintBorder.setStrokeWidth(2.0f * CanvasAdapter.getScale());
|
||||
}
|
||||
|
||||
private void setText(String text) {
|
||||
mText = text;
|
||||
}
|
||||
|
||||
private void draw(Canvas canvas) {
|
||||
int halfsize = mSize >> 1;
|
||||
final int noneClippingRadius = halfsize - getPixels(2);
|
||||
|
||||
// fill
|
||||
canvas.drawCircle(halfsize, halfsize, noneClippingRadius, mPaintCircle);
|
||||
// outline
|
||||
canvas.drawCircle(halfsize, halfsize, noneClippingRadius, mPaintBorder);
|
||||
// draw the number at the center
|
||||
canvas.drawText(mText,
|
||||
(canvas.getWidth() - mPaintText.getTextWidth(mText)) * 0.5f,
|
||||
(canvas.getHeight() + mPaintText.getTextHeight(mText)) * 0.5f,
|
||||
mPaintText);
|
||||
}
|
||||
|
||||
public Bitmap getBitmap() {
|
||||
int width = mSize, height = mSize;
|
||||
width = width > 0 ? width : 1;
|
||||
height = height > 0 ? height : 1;
|
||||
|
||||
Bitmap bitmap = CanvasAdapter.newBitmap(width, height, 0);
|
||||
Canvas canvas = CanvasAdapter.newCanvas();
|
||||
canvas.setBitmap(bitmap);
|
||||
draw(canvas);
|
||||
|
||||
return bitmap;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,33 @@
|
||||
/*
|
||||
* Copyright 2017 nebular
|
||||
* Copyright 2017 devemux86
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under the
|
||||
* terms of the GNU Lesser General Public License as published by the Free Software
|
||||
* Foundation, either version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.oscim.android.cluster;
|
||||
|
||||
import org.oscim.layers.marker.InternalItem;
|
||||
|
||||
/**
|
||||
* Extension for clustered items.
|
||||
*/
|
||||
public class Clustered extends InternalItem {
|
||||
/**
|
||||
* If this is >0, this item will be displayed as a cluster circle, with size clusterSize+1.
|
||||
*/
|
||||
public int clusterSize;
|
||||
|
||||
/**
|
||||
* If this is true, this item is hidden (because it's represented by another InternalItem acting as cluster.
|
||||
*/
|
||||
public boolean clusteredOut;
|
||||
}
|
@ -0,0 +1,33 @@
|
||||
/*
|
||||
* Copyright 2017 nebular
|
||||
* Copyright 2017 devemux86
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under the
|
||||
* terms of the GNU Lesser General Public License as published by the Free Software
|
||||
* Foundation, either version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.oscim.android.cluster;
|
||||
|
||||
import org.oscim.core.GeoPoint;
|
||||
import org.oscim.layers.marker.MarkerItem;
|
||||
|
||||
/**
|
||||
* If a MarkerItem is created using this convenience class instead of MarkerItem,
|
||||
* this specific item will not be clusterable.
|
||||
*/
|
||||
public class NonClusterable extends MarkerItem {
|
||||
public NonClusterable(String title, String description, GeoPoint geoPoint) {
|
||||
super(null, title, description, geoPoint);
|
||||
}
|
||||
|
||||
public NonClusterable(Object uid, String title, String description, GeoPoint geoPoint) {
|
||||
super(uid, title, description, geoPoint);
|
||||
}
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
/*
|
||||
* Copyright 2021 Frank Knoll
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under the
|
||||
* terms of the GNU Lesser General Public License as published by the Free Software
|
||||
* Foundation, either version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.oscim.android.drag;
|
||||
|
||||
import org.oscim.core.GeoPoint;
|
||||
|
||||
public interface DragAndDropListener {
|
||||
|
||||
void startDragItemAtGeoPoint(DraggableMarkerItem item, GeoPoint geoPoint);
|
||||
|
||||
void ongoingDragItemToGeoPoint(DraggableMarkerItem item, GeoPoint geoPoint);
|
||||
|
||||
void dropItemAtGeoPoint(DraggableMarkerItem item, GeoPoint geoPoint);
|
||||
}
|
@ -0,0 +1,65 @@
|
||||
/*
|
||||
* Copyright 2013 Hannes Janetzek
|
||||
* Copyright 2016 devemux86
|
||||
* Copyright 2021 Frank Knoll
|
||||
*
|
||||
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under the
|
||||
* terms of the GNU Lesser General Public License as published by the Free Software
|
||||
* Foundation, either version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.oscim.android.drag;
|
||||
|
||||
import android.view.MotionEvent;
|
||||
import org.oscim.android.input.AndroidMotionEvent;
|
||||
import org.oscim.android.input.GestureHandler;
|
||||
import org.oscim.event.Gesture;
|
||||
import org.oscim.map.Map;
|
||||
|
||||
class DragGestureHandler extends GestureHandler {
|
||||
|
||||
public static final Gesture START_DRAG = new Gesture() {
|
||||
};
|
||||
public static final Gesture ONGOING_DRAG = new Gesture() {
|
||||
};
|
||||
public static final Gesture END_DRAG = new Gesture() {
|
||||
};
|
||||
|
||||
private final AndroidMotionEvent mMotionEvent;
|
||||
private final Map mMap;
|
||||
private boolean scrolling = false;
|
||||
|
||||
public DragGestureHandler(Map map) {
|
||||
super(map);
|
||||
mMotionEvent = new AndroidMotionEvent();
|
||||
mMap = map;
|
||||
}
|
||||
|
||||
public boolean isScrolling() {
|
||||
return scrolling;
|
||||
}
|
||||
|
||||
public void setScrolling(boolean scrolling) {
|
||||
this.scrolling = scrolling;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onShowPress(MotionEvent e) {
|
||||
scrolling = true;
|
||||
mMap.handleGesture(START_DRAG, mMotionEvent.wrap(e));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
|
||||
scrolling = true;
|
||||
return mMap.handleGesture(ONGOING_DRAG, mMotionEvent.wrap(e2));
|
||||
}
|
||||
}
|
@ -0,0 +1,62 @@
|
||||
/*
|
||||
* Copyright 2012 Hannes Janetzek
|
||||
* Copyright 2016-2020 devemux86
|
||||
* Copyright 2018-2019 Gustl22
|
||||
* Copyright 2021 Frank Knoll
|
||||
*
|
||||
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under the
|
||||
* terms of the GNU Lesser General Public License as published by the Free Software
|
||||
* Foundation, either version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.oscim.android.drag;
|
||||
|
||||
import android.content.Context;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.GestureDetector;
|
||||
import org.oscim.android.MapView;
|
||||
import org.oscim.map.Map;
|
||||
import org.oscim.utils.Parameters;
|
||||
|
||||
public class DragMapView extends MapView {
|
||||
|
||||
private DragGestureHandler gestureHandler;
|
||||
|
||||
public DragMapView(Context context) {
|
||||
super(context);
|
||||
}
|
||||
|
||||
public DragMapView(Context context, AttributeSet attributeSet) {
|
||||
super(context, attributeSet);
|
||||
|
||||
if (!Parameters.MAP_EVENT_LAYER2) {
|
||||
gestureHandler = new DragGestureHandler(mMap);
|
||||
mGestureDetector = new GestureDetector(context, gestureHandler);
|
||||
mGestureDetector.setOnDoubleTapListener(gestureHandler);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onTouchEvent(android.view.MotionEvent motionEvent) {
|
||||
if (!isClickable()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (motionEvent.getAction() == android.view.MotionEvent.ACTION_UP) {
|
||||
if (gestureHandler.isScrolling()) {
|
||||
gestureHandler.setScrolling(false);
|
||||
return ((Map) mMap).handleGesture(DragGestureHandler.END_DRAG, mMotionEvent.wrap(motionEvent));
|
||||
}
|
||||
}
|
||||
|
||||
return super.onTouchEvent(motionEvent);
|
||||
}
|
||||
}
|
@ -0,0 +1,82 @@
|
||||
/*
|
||||
* Copyright 2012 osmdroid authors: Nicolas Gramlich, Theodore Hong, Fred Eisele
|
||||
*
|
||||
* Copyright 2013 Hannes Janetzek
|
||||
* Copyright 2016-2021 devemux86
|
||||
* Copyright 2016 Stephan Leuschner
|
||||
* Copyright 2016 Pedinel
|
||||
* Copyright 2019 Carlos Alberto Martínez Gadea
|
||||
* Copyright 2021 Frank Knoll
|
||||
*
|
||||
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under the
|
||||
* terms of the GNU Lesser General Public License as published by the Free Software
|
||||
* Foundation, either version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.oscim.android.drag;
|
||||
|
||||
import org.oscim.core.GeoPoint;
|
||||
import org.oscim.event.Gesture;
|
||||
import org.oscim.event.GestureListener;
|
||||
import org.oscim.event.MotionEvent;
|
||||
import org.oscim.layers.marker.ItemizedLayer;
|
||||
import org.oscim.layers.marker.MarkerInterface;
|
||||
import org.oscim.layers.marker.MarkerSymbol;
|
||||
import org.oscim.map.Map;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static org.oscim.android.drag.DragGestureHandler.*;
|
||||
|
||||
public class DraggableItemizedLayer extends ItemizedLayer implements GestureListener {
|
||||
|
||||
private final ItemDragger itemDragger;
|
||||
|
||||
public DraggableItemizedLayer(Map map,
|
||||
List<MarkerInterface> markerItems,
|
||||
MarkerSymbol defaultMarker,
|
||||
OnItemGestureListener<MarkerInterface> listener) {
|
||||
super(map, markerItems, defaultMarker, listener);
|
||||
itemDragger = new ItemDragger(this, map);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean activateSelectedItems(MotionEvent event, ActiveItem task) {
|
||||
return super.activateSelectedItems(event, task);
|
||||
}
|
||||
|
||||
protected List<MarkerInterface> getMarkerItems() {
|
||||
return mItemList;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onGesture(Gesture gesture, MotionEvent event) {
|
||||
if (!isEnabled()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (gesture == START_DRAG) {
|
||||
return itemDragger.startDragItem(event, getGeoPoint(event));
|
||||
} else if (gesture == ONGOING_DRAG) {
|
||||
return itemDragger.ongoingDragItemTo(getGeoPoint(event));
|
||||
} else if (gesture == END_DRAG) {
|
||||
return itemDragger.dropItemAt(getGeoPoint(event));
|
||||
} else {
|
||||
itemDragger.noDrag();
|
||||
}
|
||||
|
||||
return super.onGesture(gesture, event);
|
||||
}
|
||||
|
||||
private GeoPoint getGeoPoint(MotionEvent event) {
|
||||
return map().viewport().fromScreenPoint(event.getX(), event.getY());
|
||||
}
|
||||
}
|
@ -0,0 +1,43 @@
|
||||
/*
|
||||
* Copyright 2012 osmdroid authors:
|
||||
* Copyright 2012 Nicolas Gramlich
|
||||
* Copyright 2012 Theodore Hong
|
||||
* Copyright 2012 Fred Eisele
|
||||
*
|
||||
* Copyright 2014 Hannes Janetzek
|
||||
* Copyright 2016 devemux86
|
||||
* Copyright 2016 Erik Duisters
|
||||
* Copyright 2017 Longri
|
||||
* Copyright 2021 Frank Knoll
|
||||
*
|
||||
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under the
|
||||
* terms of the GNU Lesser General Public License as published by the Free Software
|
||||
* Foundation, either version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.oscim.android.drag;
|
||||
|
||||
import org.oscim.core.GeoPoint;
|
||||
import org.oscim.layers.marker.MarkerItem;
|
||||
|
||||
public class DraggableMarkerItem extends MarkerItem {
|
||||
|
||||
private final DragAndDropListener dragAndDropListener;
|
||||
|
||||
public DraggableMarkerItem(String title, String description, GeoPoint geoPoint, DragAndDropListener dragAndDropListener) {
|
||||
super(title, description, geoPoint);
|
||||
this.dragAndDropListener = dragAndDropListener;
|
||||
}
|
||||
|
||||
public DragAndDropListener getDragAndDropListener() {
|
||||
return dragAndDropListener;
|
||||
}
|
||||
}
|
@ -0,0 +1,96 @@
|
||||
/*
|
||||
* Copyright 2021 Frank Knoll
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under the
|
||||
* terms of the GNU Lesser General Public License as published by the Free Software
|
||||
* Foundation, either version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.oscim.android.drag;
|
||||
|
||||
import org.oscim.core.GeoPoint;
|
||||
import org.oscim.event.MotionEvent;
|
||||
import org.oscim.layers.marker.ItemizedLayer;
|
||||
import org.oscim.layers.marker.MarkerItem;
|
||||
import org.oscim.layers.marker.MarkerLayer;
|
||||
import org.oscim.map.Map;
|
||||
|
||||
class ItemDragger {
|
||||
|
||||
private final DraggableItemizedLayer draggableItemizedLayer;
|
||||
private final DragAndDropListener dragItemAndRedrawListener;
|
||||
private DraggableMarkerItem dragItem;
|
||||
|
||||
public ItemDragger(DraggableItemizedLayer draggableItemizedLayer, Map map) {
|
||||
this.draggableItemizedLayer = draggableItemizedLayer;
|
||||
this.dragItemAndRedrawListener = createDragItemAndRedrawListener(draggableItemizedLayer, map);
|
||||
}
|
||||
|
||||
public boolean startDragItem(MotionEvent event, final GeoPoint geoPoint) {
|
||||
dragItem = null;
|
||||
return draggableItemizedLayer.activateSelectedItems(
|
||||
event,
|
||||
new ItemizedLayer.ActiveItem() {
|
||||
@Override
|
||||
public boolean run(int index) {
|
||||
dragItem = (DraggableMarkerItem) draggableItemizedLayer.getMarkerItems().get(index);
|
||||
dragItemAndRedrawListener.startDragItemAtGeoPoint(dragItem, geoPoint);
|
||||
return true;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public boolean ongoingDragItemTo(GeoPoint geoPoint) {
|
||||
if (dragItem == null) {
|
||||
return false;
|
||||
}
|
||||
dragItemAndRedrawListener.ongoingDragItemToGeoPoint(dragItem, geoPoint);
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean dropItemAt(GeoPoint geoPoint) {
|
||||
if (dragItem == null) {
|
||||
return false;
|
||||
}
|
||||
dragItemAndRedrawListener.dropItemAtGeoPoint(dragItem, geoPoint);
|
||||
return true;
|
||||
}
|
||||
|
||||
public void noDrag() {
|
||||
dragItem = null;
|
||||
}
|
||||
|
||||
private DragAndDropListener createDragItemAndRedrawListener(final MarkerLayer markerLayer, final Map map) {
|
||||
return new DragAndDropListener() {
|
||||
@Override
|
||||
public void startDragItemAtGeoPoint(DraggableMarkerItem item, GeoPoint geoPoint) {
|
||||
item.getDragAndDropListener().startDragItemAtGeoPoint(item, geoPoint);
|
||||
updateLocationOfMarkerItemAndRedraw(item, geoPoint);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void ongoingDragItemToGeoPoint(DraggableMarkerItem item, GeoPoint geoPoint) {
|
||||
item.getDragAndDropListener().ongoingDragItemToGeoPoint(item, geoPoint);
|
||||
updateLocationOfMarkerItemAndRedraw(item, geoPoint);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dropItemAtGeoPoint(DraggableMarkerItem item, GeoPoint geoPoint) {
|
||||
item.getDragAndDropListener().dropItemAtGeoPoint(item, geoPoint);
|
||||
updateLocationOfMarkerItemAndRedraw(item, geoPoint);
|
||||
}
|
||||
|
||||
private void updateLocationOfMarkerItemAndRedraw(MarkerItem markerItem, GeoPoint location) {
|
||||
markerItem.geoPoint = location;
|
||||
markerLayer.populate();
|
||||
map.render();
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright 2010, 2011, 2012 mapsforge.org
|
||||
* Copyright 2016 devemux86
|
||||
* Copyright 2016-2019 devemux86
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under the
|
||||
* terms of the GNU Lesser General Public License as published by the Free Software
|
||||
@ -22,11 +22,9 @@ import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.SharedPreferences.Editor;
|
||||
import android.os.Bundle;
|
||||
import android.os.Environment;
|
||||
import android.view.View;
|
||||
import android.widget.AdapterView;
|
||||
import android.widget.GridView;
|
||||
|
||||
import org.oscim.android.test.R;
|
||||
|
||||
import java.io.File;
|
||||
@ -60,7 +58,6 @@ public class FilePicker extends Activity implements AdapterView.OnItemClickListe
|
||||
|
||||
private static final String PREFERENCES_FILE = "FilePicker";
|
||||
private static final String CURRENT_DIRECTORY = "currentDirectory";
|
||||
private static final String DEFAULT_DIRECTORY = Environment.getExternalStorageDirectory().getAbsolutePath();
|
||||
private static final int DIALOG_FILE_INVALID = 0;
|
||||
|
||||
// private static final int DIALOG_FILE_SELECT = 1;
|
||||
@ -122,6 +119,7 @@ public class FilePicker extends Activity implements AdapterView.OnItemClickListe
|
||||
};
|
||||
}
|
||||
|
||||
private String mDefaultDirectory;
|
||||
private File mDirectory;
|
||||
private FilePickerIconAdapter mFilePickerIconAdapter;
|
||||
private File[] mFiles;
|
||||
@ -164,7 +162,7 @@ public class FilePicker extends Activity implements AdapterView.OnItemClickListe
|
||||
}
|
||||
|
||||
// if a parent directory exists, add it at the first position
|
||||
if (mDirectory.getParentFile() != null) {
|
||||
if (mDirectory.getParentFile() != null && mDirectory.getParentFile().canRead()) {
|
||||
mFilesWithParentFolder = new File[mFiles.length + 1];
|
||||
mFilesWithParentFolder[0] = mDirectory.getParentFile();
|
||||
System.arraycopy(mFiles, 0, mFilesWithParentFolder, 1,
|
||||
@ -182,6 +180,7 @@ public class FilePicker extends Activity implements AdapterView.OnItemClickListe
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_file_picker);
|
||||
|
||||
mDefaultDirectory = getExternalFilesDir(null) != null ? getExternalFilesDir(null).getAbsolutePath() : "/sdcard/";
|
||||
mFilePickerIconAdapter = new FilePickerIconAdapter(this);
|
||||
GridView gridView = (GridView) findViewById(R.id.filePickerView);
|
||||
gridView.setOnItemClickListener(this);
|
||||
@ -193,6 +192,7 @@ public class FilePicker extends Activity implements AdapterView.OnItemClickListe
|
||||
// }
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@Override
|
||||
protected Dialog onCreateDialog(int id) {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(this);
|
||||
@ -239,10 +239,9 @@ public class FilePicker extends Activity implements AdapterView.OnItemClickListe
|
||||
// restore the current directory
|
||||
SharedPreferences preferences = getSharedPreferences(PREFERENCES_FILE,
|
||||
MODE_PRIVATE);
|
||||
mDirectory = new File(preferences.getString(CURRENT_DIRECTORY,
|
||||
DEFAULT_DIRECTORY));
|
||||
mDirectory = new File(preferences.getString(CURRENT_DIRECTORY, mDefaultDirectory));
|
||||
if (!mDirectory.exists() || !mDirectory.canRead()) {
|
||||
mDirectory = new File(DEFAULT_DIRECTORY);
|
||||
mDirectory = new File(mDefaultDirectory);
|
||||
}
|
||||
browseToCurrentDirectory();
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
/*
|
||||
* Copyright 2010, 2011, 2012 mapsforge.org
|
||||
* Copyright 2016 devemux86
|
||||
* Copyright 2016-2020 devemux86
|
||||
* Copyright 2017 Longri
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under the
|
||||
* terms of the GNU Lesser General Public License as published by the Free Software
|
||||
@ -15,17 +16,11 @@
|
||||
*/
|
||||
package org.oscim.android.filepicker;
|
||||
|
||||
import org.oscim.theme.ExternalRenderTheme;
|
||||
import org.oscim.theme.ThemeFile;
|
||||
import org.oscim.theme.XmlThemeBuilder;
|
||||
import org.oscim.theme.ThemeLoader;
|
||||
import org.oscim.tiling.TileSource.OpenResult;
|
||||
import org.xml.sax.InputSource;
|
||||
import org.xml.sax.XMLReader;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import javax.xml.parsers.SAXParserFactory;
|
||||
|
||||
/**
|
||||
* Accepts all valid render theme XML files.
|
||||
*/
|
||||
@ -35,11 +30,7 @@ public final class ValidRenderTheme implements ValidFileFilter {
|
||||
@Override
|
||||
public boolean accept(File file) {
|
||||
try {
|
||||
ThemeFile theme = new ExternalRenderTheme(file.getAbsolutePath());
|
||||
XmlThemeBuilder renderThemeHandler = new XmlThemeBuilder(theme);
|
||||
XMLReader xmlReader = SAXParserFactory.newInstance().newSAXParser().getXMLReader();
|
||||
xmlReader.setContentHandler(renderThemeHandler);
|
||||
xmlReader.parse(new InputSource(theme.getRenderThemeAsStream()));
|
||||
ThemeLoader.load(file.getAbsolutePath());
|
||||
mOpenResult = OpenResult.SUCCESS;
|
||||
} catch (Exception e) {
|
||||
mOpenResult = new OpenResult(e.getMessage());
|
||||
|
@ -0,0 +1,118 @@
|
||||
/*
|
||||
* Copyright 2014 Hannes Janetzek
|
||||
* Copyright 2016-2020 devemux86
|
||||
* Copyright 2017 Longri
|
||||
*
|
||||
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under the
|
||||
* terms of the GNU Lesser General Public License as published by the Free Software
|
||||
* Foundation, either version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.oscim.android.test;
|
||||
|
||||
import android.widget.Toast;
|
||||
import org.oscim.backend.CanvasAdapter;
|
||||
import org.oscim.backend.canvas.Bitmap;
|
||||
import org.oscim.backend.canvas.Canvas;
|
||||
import org.oscim.backend.canvas.Color;
|
||||
import org.oscim.backend.canvas.Paint;
|
||||
import org.oscim.core.GeoPoint;
|
||||
import org.oscim.layers.marker.ItemizedLayer;
|
||||
import org.oscim.layers.marker.MarkerInterface;
|
||||
import org.oscim.layers.marker.MarkerItem;
|
||||
import org.oscim.layers.marker.MarkerSymbol;
|
||||
import org.oscim.layers.marker.MarkerSymbol.HotspotPlace;
|
||||
import org.oscim.layers.tile.bitmap.BitmapTileLayer;
|
||||
import org.oscim.renderer.atlas.TextureAtlas;
|
||||
import org.oscim.renderer.atlas.TextureRegion;
|
||||
import org.oscim.tiling.source.OkHttpEngine;
|
||||
import org.oscim.tiling.source.UrlTileSource;
|
||||
import org.oscim.tiling.source.bitmap.DefaultSources;
|
||||
import org.oscim.utils.TextureAtlasUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
|
||||
public class AtlasMultiTextureActivity extends MarkerOverlayActivity {
|
||||
|
||||
@Override
|
||||
void createLayers() {
|
||||
// Map events receiver
|
||||
mMap.layers().add(new MapEventsReceiver(mMap));
|
||||
|
||||
UrlTileSource tileSource = DefaultSources.OPENSTREETMAP
|
||||
.httpFactory(new OkHttpEngine.OkHttpFactory())
|
||||
.build();
|
||||
tileSource.setHttpRequestHeaders(Collections.singletonMap("User-Agent", "vtm-android-example"));
|
||||
mMap.layers().add(new BitmapTileLayer(mMap, tileSource));
|
||||
|
||||
// Create Atlas from Bitmaps
|
||||
java.util.Map<Object, Bitmap> inputMap = new LinkedHashMap<>();
|
||||
java.util.Map<Object, TextureRegion> regionsMap = new LinkedHashMap<>();
|
||||
List<TextureAtlas> atlasList = new ArrayList<>();
|
||||
|
||||
Canvas canvas = CanvasAdapter.newCanvas();
|
||||
Paint paint = CanvasAdapter.newPaint();
|
||||
paint.setTypeface(Paint.FontFamily.DEFAULT, Paint.FontStyle.NORMAL);
|
||||
paint.setTextSize(12 * CanvasAdapter.getScale());
|
||||
paint.setStrokeWidth(2 * CanvasAdapter.getScale());
|
||||
paint.setColor(Color.BLACK);
|
||||
List<MarkerInterface> pts = new ArrayList<>();
|
||||
for (double lat = -90; lat <= 90; lat += 10) {
|
||||
for (double lon = -180; lon <= 180; lon += 10) {
|
||||
String title = lat + "/" + lon;
|
||||
pts.add(new MarkerItem(title, "", new GeoPoint(lat, lon)));
|
||||
|
||||
Bitmap bmp = CanvasAdapter.newBitmap((int) (40 * CanvasAdapter.getScale()), (int) (40 * CanvasAdapter.getScale()), 0);
|
||||
canvas.setBitmap(bmp);
|
||||
canvas.fillColor(Color.GREEN);
|
||||
|
||||
canvas.drawText(Double.toString(lat), 3 * CanvasAdapter.getScale(), 17 * CanvasAdapter.getScale(), paint);
|
||||
canvas.drawText(Double.toString(lon), 3 * CanvasAdapter.getScale(), 35 * CanvasAdapter.getScale(), paint);
|
||||
inputMap.put(title, bmp);
|
||||
}
|
||||
}
|
||||
|
||||
// Bitmaps will never used any more
|
||||
// With iOS we must flip the Y-Axis
|
||||
TextureAtlasUtils.createTextureRegions(inputMap, regionsMap, atlasList, true, false);
|
||||
|
||||
mMarkerLayer = new ItemizedLayer(mMap, new ArrayList<MarkerInterface>(), (MarkerSymbol) null, this);
|
||||
mMap.layers().add(mMarkerLayer);
|
||||
|
||||
mMarkerLayer.addItems(pts);
|
||||
|
||||
// set all markers
|
||||
for (MarkerInterface item : pts) {
|
||||
MarkerItem markerItem = (MarkerItem) item;
|
||||
MarkerSymbol markerSymbol = new MarkerSymbol(regionsMap.get(markerItem.getTitle()), HotspotPlace.BOTTOM_CENTER);
|
||||
markerItem.setMarker(markerSymbol);
|
||||
}
|
||||
|
||||
Toast.makeText(this, "Atlas count: " + atlasList.size(), Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onItemSingleTapUp(int index, MarkerInterface item) {
|
||||
MarkerItem markerItem = (MarkerItem) item;
|
||||
Toast.makeText(this, "Marker tap\n" + markerItem.getTitle(), Toast.LENGTH_SHORT).show();
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onItemLongPress(int index, MarkerInterface item) {
|
||||
MarkerItem markerItem = (MarkerItem) item;
|
||||
Toast.makeText(this, "Marker long press\n" + markerItem.getTitle(), Toast.LENGTH_SHORT).show();
|
||||
return true;
|
||||
}
|
||||
}
|
@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Copyright 2013 Hannes Janetzek
|
||||
* Copyright 2016-2020 devemux86
|
||||
*
|
||||
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
|
||||
*
|
||||
@ -19,28 +20,26 @@ package org.oscim.android.test;
|
||||
import android.os.Bundle;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
|
||||
import org.oscim.android.cache.TileCache;
|
||||
import okhttp3.Cache;
|
||||
import okhttp3.OkHttpClient;
|
||||
import org.oscim.core.MapPosition;
|
||||
import org.oscim.layers.TileGridLayer;
|
||||
import org.oscim.layers.tile.vector.VectorTileLayer;
|
||||
import org.oscim.theme.VtmThemes;
|
||||
import org.oscim.tiling.TileSource;
|
||||
import org.oscim.tiling.source.OkHttpEngine;
|
||||
import org.oscim.tiling.source.oscimap4.OSciMap4TileSource;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
public class BaseMapActivity extends MapActivity {
|
||||
static final Logger log = LoggerFactory.getLogger(BaseMapActivity.class);
|
||||
|
||||
final static boolean USE_CACHE = true;
|
||||
static final boolean USE_CACHE = false;
|
||||
|
||||
VectorTileLayer mBaseLayer;
|
||||
TileSource mTileSource;
|
||||
TileGridLayer mGridLayer;
|
||||
|
||||
private TileCache mCache;
|
||||
|
||||
public BaseMapActivity(int contentView) {
|
||||
super(contentView);
|
||||
}
|
||||
@ -52,13 +51,19 @@ public class BaseMapActivity extends MapActivity {
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
mTileSource = new OSciMap4TileSource();
|
||||
|
||||
OkHttpClient.Builder builder = new OkHttpClient.Builder();
|
||||
if (USE_CACHE) {
|
||||
mCache = new TileCache(this, null, "tile.db");
|
||||
mCache.setCacheSize(512 * (1 << 10));
|
||||
mTileSource.setCache(mCache);
|
||||
// Cache the tiles into file system
|
||||
File cacheDirectory = new File(getExternalCacheDir(), "tiles");
|
||||
int cacheSize = 10 * 1024 * 1024; // 10 MB
|
||||
Cache cache = new Cache(cacheDirectory, cacheSize);
|
||||
builder.cache(cache);
|
||||
}
|
||||
|
||||
mTileSource = OSciMap4TileSource.builder()
|
||||
.httpFactory(new OkHttpEngine.OkHttpFactory(builder))
|
||||
.build();
|
||||
|
||||
mBaseLayer = mMap.setBaseMap(mTileSource);
|
||||
|
||||
/* set initial position on first run */
|
||||
@ -68,51 +73,42 @@ public class BaseMapActivity extends MapActivity {
|
||||
mMap.setMapPosition(53.08, 8.83, Math.pow(2, 16));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
super.onDestroy();
|
||||
|
||||
if (mCache != null)
|
||||
mCache.dispose();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
|
||||
switch (item.getItemId()) {
|
||||
case R.id.theme_default:
|
||||
mMap.setTheme(VtmThemes.DEFAULT);
|
||||
int itemId = item.getItemId();
|
||||
if (itemId == R.id.theme_default) {
|
||||
mMap.setTheme(VtmThemes.DEFAULT);
|
||||
item.setChecked(true);
|
||||
return true;
|
||||
} else if (itemId == R.id.theme_osmarender) {
|
||||
mMap.setTheme(VtmThemes.OSMARENDER);
|
||||
item.setChecked(true);
|
||||
return true;
|
||||
} else if (itemId == R.id.theme_osmagray) {
|
||||
mMap.setTheme(VtmThemes.OSMAGRAY);
|
||||
item.setChecked(true);
|
||||
return true;
|
||||
} else if (itemId == R.id.theme_tubes) {
|
||||
mMap.setTheme(VtmThemes.TRONRENDER);
|
||||
item.setChecked(true);
|
||||
return true;
|
||||
} else if (itemId == R.id.theme_newtron) {
|
||||
mMap.setTheme(VtmThemes.NEWTRON);
|
||||
item.setChecked(true);
|
||||
return true;
|
||||
} else if (itemId == R.id.gridlayer) {
|
||||
if (item.isChecked()) {
|
||||
item.setChecked(false);
|
||||
mMap.layers().remove(mGridLayer);
|
||||
} else {
|
||||
item.setChecked(true);
|
||||
return true;
|
||||
if (mGridLayer == null)
|
||||
mGridLayer = new TileGridLayer(mMap);
|
||||
|
||||
case R.id.theme_tubes:
|
||||
mMap.setTheme(VtmThemes.TRONRENDER);
|
||||
item.setChecked(true);
|
||||
return true;
|
||||
|
||||
case R.id.theme_osmarender:
|
||||
mMap.setTheme(VtmThemes.OSMARENDER);
|
||||
item.setChecked(true);
|
||||
return true;
|
||||
|
||||
case R.id.theme_newtron:
|
||||
mMap.setTheme(VtmThemes.NEWTRON);
|
||||
item.setChecked(true);
|
||||
return true;
|
||||
|
||||
case R.id.gridlayer:
|
||||
if (item.isChecked()) {
|
||||
item.setChecked(false);
|
||||
mMap.layers().remove(mGridLayer);
|
||||
} else {
|
||||
item.setChecked(true);
|
||||
if (mGridLayer == null)
|
||||
mGridLayer = new TileGridLayer(mMap);
|
||||
|
||||
mMap.layers().add(mGridLayer);
|
||||
}
|
||||
mMap.updateMap(true);
|
||||
return true;
|
||||
mMap.layers().add(mGridLayer);
|
||||
}
|
||||
mMap.updateMap(true);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
|
@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Copyright 2014 Hannes Janetzek
|
||||
* Copyright 2017-2020 devemux86
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under the
|
||||
* terms of the GNU Lesser General Public License as published by the Free Software
|
||||
@ -15,74 +16,62 @@
|
||||
package org.oscim.android.test;
|
||||
|
||||
import android.os.Bundle;
|
||||
|
||||
import org.oscim.android.cache.TileCache;
|
||||
import org.oscim.backend.canvas.Color;
|
||||
import okhttp3.Cache;
|
||||
import okhttp3.OkHttpClient;
|
||||
import org.oscim.core.MapPosition;
|
||||
import org.oscim.core.MercatorProjection;
|
||||
import org.oscim.layers.TileGridLayer;
|
||||
import org.oscim.layers.tile.bitmap.BitmapTileLayer;
|
||||
import org.oscim.renderer.MapRenderer;
|
||||
import org.oscim.tiling.source.OkHttpEngine;
|
||||
import org.oscim.tiling.source.bitmap.BitmapTileSource;
|
||||
import org.oscim.tiling.source.bitmap.DefaultSources;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
public class BitmapTileMapActivity extends MapActivity {
|
||||
import java.io.File;
|
||||
import java.util.Collections;
|
||||
|
||||
static final Logger log = LoggerFactory.getLogger(BitmapTileMapActivity.class);
|
||||
public class BitmapTileActivity extends MapActivity {
|
||||
|
||||
private final static boolean USE_CACHE = true;
|
||||
private static final boolean USE_CACHE = false;
|
||||
|
||||
private final BitmapTileSource mTileSource;
|
||||
protected BitmapTileLayer mBitmapLayer;
|
||||
|
||||
public BitmapTileMapActivity() {
|
||||
public BitmapTileActivity() {
|
||||
this(DefaultSources.OPENSTREETMAP.build());
|
||||
}
|
||||
|
||||
public BitmapTileMapActivity(BitmapTileSource tileSource) {
|
||||
public BitmapTileActivity(BitmapTileSource tileSource) {
|
||||
super(R.layout.activity_map);
|
||||
mTileSource = tileSource;
|
||||
}
|
||||
|
||||
private TileCache mCache;
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
MapRenderer.setBackgroundColor(0xff777777);
|
||||
mMap.layers().add(new TileGridLayer(mMap, Color.GRAY, 1.8f, 8));
|
||||
|
||||
if (mTileSource == null)
|
||||
return;
|
||||
|
||||
OkHttpClient.Builder builder = new OkHttpClient.Builder();
|
||||
if (USE_CACHE) {
|
||||
String cacheFile = mTileSource.getUrl()
|
||||
.toString()
|
||||
.replaceFirst("https?://", "")
|
||||
.replaceAll("/", "-");
|
||||
|
||||
log.debug("use bitmap cache {}", cacheFile);
|
||||
mCache = new TileCache(this, null, cacheFile);
|
||||
mCache.setCacheSize(512 * (1 << 10));
|
||||
mTileSource.setCache(mCache);
|
||||
// Cache the tiles into file system
|
||||
File cacheDirectory = new File(getExternalCacheDir(), "tiles");
|
||||
int cacheSize = 10 * 1024 * 1024; // 10 MB
|
||||
Cache cache = new Cache(cacheDirectory, cacheSize);
|
||||
builder.cache(cache);
|
||||
}
|
||||
|
||||
mTileSource.setHttpEngine(new OkHttpEngine.OkHttpFactory(builder));
|
||||
mTileSource.setHttpRequestHeaders(Collections.singletonMap("User-Agent", "vtm-android-example"));
|
||||
|
||||
mBitmapLayer = new BitmapTileLayer(mMap, mTileSource);
|
||||
mMap.layers().add(mBitmapLayer);
|
||||
|
||||
//loooop(1);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
super.onDestroy();
|
||||
if (mCache != null)
|
||||
mCache.dispose();
|
||||
}
|
||||
|
||||
// Stress testing
|
||||
void loooop(final int i) {
|
||||
final long time = (long) (500 + Math.random() * 1000);
|
||||
@ -105,6 +94,7 @@ public class BitmapTileMapActivity extends MapActivity {
|
||||
|
||||
p.setTilt((float) (Math.random() * 60));
|
||||
p.setBearing((float) (Math.random() * 360));
|
||||
p.setRoll((float) (Math.random() * 360));
|
||||
//mMapView.map().setMapPosition(p);
|
||||
|
||||
mMapView.map().animator().animateTo(time, p);
|
@ -0,0 +1,37 @@
|
||||
/*
|
||||
* Copyright 2020 Meibes
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under the
|
||||
* terms of the GNU Lesser General Public License as published by the Free Software
|
||||
* Foundation, either version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.oscim.android.test;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public class BlankFragment extends android.app.Fragment {
|
||||
|
||||
static BlankFragment newInstance() {
|
||||
BlankFragment instance = new BlankFragment();
|
||||
|
||||
Bundle args = new Bundle();
|
||||
instance.setArguments(args);
|
||||
return instance;
|
||||
}
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
return inflater.inflate(R.layout.fragment_blank, container, false);
|
||||
}
|
||||
}
|
@ -0,0 +1,99 @@
|
||||
/*
|
||||
* Copyright 2016-2020 devemux86
|
||||
* Copyright 2017 nebular
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under the
|
||||
* terms of the GNU Lesser General Public License as published by the Free Software
|
||||
* Foundation, either version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.oscim.android.test;
|
||||
|
||||
import android.graphics.BitmapFactory;
|
||||
import org.oscim.android.canvas.AndroidBitmap;
|
||||
import org.oscim.android.cluster.ClusterMarkerRenderer;
|
||||
import org.oscim.backend.canvas.Bitmap;
|
||||
import org.oscim.backend.canvas.Color;
|
||||
import org.oscim.core.GeoPoint;
|
||||
import org.oscim.layers.marker.*;
|
||||
import org.oscim.layers.tile.bitmap.BitmapTileLayer;
|
||||
import org.oscim.tiling.source.OkHttpEngine;
|
||||
import org.oscim.tiling.source.UrlTileSource;
|
||||
import org.oscim.tiling.source.bitmap.DefaultSources;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
public class ClusterMarkerOverlayActivity extends MarkerOverlayActivity {
|
||||
|
||||
private static final int COUNT = 5;
|
||||
private static final float STEP = 100f / 110000f; // roughly 100 meters
|
||||
|
||||
@Override
|
||||
void createLayers() {
|
||||
// Map events receiver
|
||||
mMap.layers().add(new MapEventsReceiver(mMap));
|
||||
|
||||
UrlTileSource tileSource = DefaultSources.OPENSTREETMAP
|
||||
.httpFactory(new OkHttpEngine.OkHttpFactory())
|
||||
.build();
|
||||
tileSource.setHttpRequestHeaders(Collections.singletonMap("User-Agent", "vtm-android-example"));
|
||||
mMap.layers().add(new BitmapTileLayer(mMap, tileSource));
|
||||
|
||||
Bitmap bitmapPoi = new AndroidBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.marker_poi));
|
||||
final MarkerSymbol symbol;
|
||||
if (BILLBOARDS)
|
||||
symbol = new MarkerSymbol(bitmapPoi, MarkerSymbol.HotspotPlace.BOTTOM_CENTER);
|
||||
else
|
||||
symbol = new MarkerSymbol(bitmapPoi, MarkerSymbol.HotspotPlace.CENTER, false);
|
||||
|
||||
MarkerRendererFactory markerRendererFactory = new MarkerRendererFactory() {
|
||||
@Override
|
||||
public MarkerRenderer create(MarkerLayer markerLayer) {
|
||||
return new ClusterMarkerRenderer(markerLayer, symbol, new ClusterMarkerRenderer.ClusterStyle(Color.WHITE, Color.BLUE)) {
|
||||
@Override
|
||||
protected Bitmap getClusterBitmap(int size) {
|
||||
// Can customize cluster bitmap here
|
||||
return super.getClusterBitmap(size);
|
||||
}
|
||||
};
|
||||
}
|
||||
};
|
||||
mMarkerLayer = new ItemizedLayer(
|
||||
mMap,
|
||||
new ArrayList<MarkerInterface>(),
|
||||
markerRendererFactory,
|
||||
this);
|
||||
mMap.layers().add(mMarkerLayer);
|
||||
|
||||
// Create some markers spaced STEP degrees
|
||||
List<MarkerInterface> pts = new ArrayList<>();
|
||||
mMap.setMapPosition(53.08, 8.83, 1 << 15);
|
||||
GeoPoint center = mMap.getMapPosition().getGeoPoint();
|
||||
for (int x = -COUNT; x < COUNT; x++) {
|
||||
for (int y = -COUNT; y < COUNT; y++) {
|
||||
double random = STEP * Math.random() * 2;
|
||||
MarkerItem item = new MarkerItem(y + ", " + x, "",
|
||||
new GeoPoint(center.getLatitude() + y * STEP + random, center.getLongitude() + x * STEP + random)
|
||||
);
|
||||
pts.add(item);
|
||||
}
|
||||
}
|
||||
mMarkerLayer.addItems(pts);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onResume() {
|
||||
super.onResume();
|
||||
|
||||
/* ignore saved position */
|
||||
mMap.setMapPosition(53.08, 8.83, 1 << 15);
|
||||
}
|
||||
}
|
@ -0,0 +1,105 @@
|
||||
/*
|
||||
* Copyright 2014 Hannes Janetzek
|
||||
* Copyright 2016-2020 devemux86
|
||||
* Copyright 2021 Frank Knoll
|
||||
*
|
||||
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under the
|
||||
* terms of the GNU Lesser General Public License as published by the Free Software
|
||||
* Foundation, either version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.oscim.android.test;
|
||||
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.os.Bundle;
|
||||
import android.util.Log;
|
||||
import org.oscim.android.canvas.AndroidBitmap;
|
||||
import org.oscim.android.drag.DragAndDropListener;
|
||||
import org.oscim.android.drag.DraggableItemizedLayer;
|
||||
import org.oscim.android.drag.DraggableMarkerItem;
|
||||
import org.oscim.core.GeoPoint;
|
||||
import org.oscim.layers.marker.ItemizedLayer;
|
||||
import org.oscim.layers.marker.MarkerInterface;
|
||||
import org.oscim.layers.marker.MarkerSymbol;
|
||||
import org.oscim.layers.marker.MarkerSymbol.HotspotPlace;
|
||||
import org.oscim.layers.tile.bitmap.BitmapTileLayer;
|
||||
import org.oscim.tiling.source.OkHttpEngine;
|
||||
import org.oscim.tiling.source.UrlTileSource;
|
||||
import org.oscim.tiling.source.bitmap.DefaultSources;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
public class DraggableMarkerOverlayActivity extends MapActivity {
|
||||
|
||||
public DraggableMarkerOverlayActivity() {
|
||||
super(R.layout.activity_map_draggable);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
createLayers();
|
||||
}
|
||||
|
||||
void createLayers() {
|
||||
UrlTileSource tileSource = DefaultSources.OPENSTREETMAP
|
||||
.httpFactory(new OkHttpEngine.OkHttpFactory())
|
||||
.build();
|
||||
tileSource.setHttpRequestHeaders(Collections.singletonMap("User-Agent", "vtm-android-example"));
|
||||
mMap.layers().add(new BitmapTileLayer(mMap, tileSource));
|
||||
|
||||
ItemizedLayer mMarkerLayer = new DraggableItemizedLayer(
|
||||
mMap,
|
||||
new ArrayList<MarkerInterface>(),
|
||||
new MarkerSymbol(
|
||||
new AndroidBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.marker_poi)),
|
||||
HotspotPlace.BOTTOM_CENTER),
|
||||
null);
|
||||
mMap.layers().add(mMarkerLayer);
|
||||
|
||||
DragAndDropListener dragAndDropListener = new DragAndDropListener() {
|
||||
@Override
|
||||
public void startDragItemAtGeoPoint(DraggableMarkerItem item, GeoPoint geoPoint) {
|
||||
Log.i(DraggableMarkerOverlayActivity.this.getClass().getSimpleName(), "startDragItemAtGeoPoint: " + geoPoint);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void ongoingDragItemToGeoPoint(DraggableMarkerItem item, GeoPoint geoPoint) {
|
||||
Log.i(DraggableMarkerOverlayActivity.this.getClass().getSimpleName(), "ongoingDragItemToGeoPoint: " + geoPoint);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dropItemAtGeoPoint(DraggableMarkerItem item, GeoPoint geoPoint) {
|
||||
Log.i(DraggableMarkerOverlayActivity.this.getClass().getSimpleName(), "dropItemAtGeoPoint: " + geoPoint);
|
||||
}
|
||||
};
|
||||
|
||||
List<MarkerInterface> pts = new ArrayList<>();
|
||||
for (double lat = -90; lat <= 90; lat += 45) {
|
||||
for (double lon = -180; lon <= 180; lon += 45) {
|
||||
pts.add(new DraggableMarkerItem(lat + "/" + lon, "", new GeoPoint(lat, lon), dragAndDropListener));
|
||||
}
|
||||
}
|
||||
|
||||
mMarkerLayer.addItems(pts);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onResume() {
|
||||
super.onResume();
|
||||
|
||||
/* ignore saved position */
|
||||
mMap.setMapPosition(0, 0, 1 << 2);
|
||||
}
|
||||
}
|
@ -0,0 +1,57 @@
|
||||
/*
|
||||
* Copyright 2020 Meibes
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under the
|
||||
* terms of the GNU Lesser General Public License as published by the Free Software
|
||||
* Foundation, either version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.oscim.android.test;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.os.Bundle;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public class FragmentActivity extends Activity {
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_map_fragment);
|
||||
|
||||
setTitle(getClass().getSimpleName());
|
||||
|
||||
if (savedInstanceState == null) {
|
||||
android.app.Fragment mapFragment = MapFragment.newInstance();
|
||||
android.app.FragmentTransaction ft = getFragmentManager().beginTransaction();
|
||||
ft.add(R.id.fragment_container, mapFragment).commit();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
getMenuInflater().inflate(R.menu.fragment_menu, menu);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
if (item.getItemId() == R.id.replace_fragment) {
|
||||
android.app.Fragment blankFragment = BlankFragment.newInstance();
|
||||
android.app.FragmentTransaction ft = getFragmentManager().beginTransaction();
|
||||
ft.replace(R.id.fragment_container, blankFragment);
|
||||
ft.addToBackStack(null);
|
||||
ft.commit();
|
||||
return true;
|
||||
}
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
}
|
123
vtm-android-example/src/org/oscim/android/test/GdxActivity.java
Normal file
@ -0,0 +1,123 @@
|
||||
/*
|
||||
* Copyright 2013 Hannes Janetzek
|
||||
* Copyright 2016-2020 devemux86
|
||||
* Copyright 2018-2019 Gustl22
|
||||
*
|
||||
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under the
|
||||
* terms of the GNU Lesser General Public License as published by the Free Software
|
||||
* Foundation, either version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.oscim.android.test;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.util.DisplayMetrics;
|
||||
|
||||
import com.badlogic.gdx.backends.android.AndroidApplication;
|
||||
import com.badlogic.gdx.backends.android.AndroidApplicationConfiguration;
|
||||
import com.badlogic.gdx.graphics.glutils.GLVersion;
|
||||
import com.badlogic.gdx.utils.SharedLibraryLoader;
|
||||
|
||||
import org.oscim.android.MapPreferences;
|
||||
import org.oscim.android.canvas.AndroidGraphics;
|
||||
import org.oscim.backend.CanvasAdapter;
|
||||
import org.oscim.backend.DateTime;
|
||||
import org.oscim.backend.DateTimeAdapter;
|
||||
import org.oscim.backend.GLAdapter;
|
||||
import org.oscim.core.Tile;
|
||||
import org.oscim.gdx.AndroidGL;
|
||||
import org.oscim.gdx.AndroidGL30;
|
||||
import org.oscim.gdx.GdxAssets;
|
||||
import org.oscim.gdx.GdxMap;
|
||||
import org.oscim.gdx.poi3d.Poi3DLayer;
|
||||
import org.oscim.layers.tile.buildings.BuildingLayer;
|
||||
import org.oscim.layers.tile.buildings.S3DBLayer;
|
||||
import org.oscim.layers.tile.vector.VectorTileLayer;
|
||||
import org.oscim.layers.tile.vector.labeling.LabelLayer;
|
||||
import org.oscim.theme.VtmThemes;
|
||||
import org.oscim.tiling.TileSource;
|
||||
import org.oscim.tiling.source.OkHttpEngine;
|
||||
import org.oscim.tiling.source.oscimap4.OSciMap4TileSource;
|
||||
|
||||
public class GdxActivity extends AndroidApplication {
|
||||
MapPreferences mPrefs;
|
||||
|
||||
private boolean mPoi3d;
|
||||
private boolean mS3db;
|
||||
|
||||
public GdxActivity() {
|
||||
this(false, false);
|
||||
}
|
||||
|
||||
public GdxActivity(boolean s3db, boolean poi3d) {
|
||||
mS3db = s3db;
|
||||
mPoi3d = poi3d;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
AndroidGraphics.init();
|
||||
GdxAssets.init("");
|
||||
DateTimeAdapter.init(new DateTime());
|
||||
|
||||
DisplayMetrics metrics = getResources().getDisplayMetrics();
|
||||
CanvasAdapter.dpi = (int) (metrics.density * CanvasAdapter.DEFAULT_DPI);
|
||||
Tile.SIZE = Tile.calculateTileSize();
|
||||
|
||||
AndroidApplicationConfiguration cfg = new AndroidApplicationConfiguration();
|
||||
cfg.stencil = 8;
|
||||
//cfg.numSamples = 2;
|
||||
|
||||
new SharedLibraryLoader().load("vtm-jni");
|
||||
|
||||
initialize(new GdxMapAndroid(), cfg);
|
||||
mPrefs = new MapPreferences(GdxActivity.class.getName(), this);
|
||||
}
|
||||
|
||||
class GdxMapAndroid extends GdxMap {
|
||||
@Override
|
||||
protected void initGLAdapter(GLVersion version) {
|
||||
if (version.getMajorVersion() >= 3)
|
||||
GLAdapter.init(new AndroidGL30());
|
||||
else
|
||||
GLAdapter.init(new AndroidGL());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void createLayers() {
|
||||
TileSource tileSource = OSciMap4TileSource.builder()
|
||||
.httpFactory(new OkHttpEngine.OkHttpFactory())
|
||||
.build();
|
||||
VectorTileLayer l = mMap.setBaseMap(tileSource);
|
||||
mMap.setTheme(VtmThemes.DEFAULT);
|
||||
|
||||
if (mS3db)
|
||||
mMap.layers().add(new S3DBLayer(mMap, l));
|
||||
else
|
||||
mMap.layers().add(new BuildingLayer(mMap, l));
|
||||
|
||||
if (mPoi3d)
|
||||
mMap.layers().add(new Poi3DLayer(mMap, l));
|
||||
|
||||
mMap.layers().add(new LabelLayer(mMap, l));
|
||||
mPrefs.load(getMap());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void pause() {
|
||||
mPrefs.save(getMap());
|
||||
|
||||
super.pause();
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
/*
|
||||
* Copyright 2018 Gustl22
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under the
|
||||
* terms of the GNU Lesser General Public License as published by the Free Software
|
||||
* Foundation, either version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.oscim.android.test;
|
||||
|
||||
public class GdxPoi3DActivity extends GdxActivity {
|
||||
|
||||
public GdxPoi3DActivity() {
|
||||
super(false, true);
|
||||
}
|
||||
}
|
@ -0,0 +1,129 @@
|
||||
/*
|
||||
* Copyright 2018-2020 devemux86
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under the
|
||||
* terms of the GNU Lesser General Public License as published by the Free Software
|
||||
* Foundation, either version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.oscim.android.test;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import org.oscim.android.MapView;
|
||||
import org.oscim.backend.CanvasAdapter;
|
||||
import org.oscim.layers.tile.buildings.BuildingLayer;
|
||||
import org.oscim.layers.tile.vector.VectorTileLayer;
|
||||
import org.oscim.layers.tile.vector.labeling.LabelLayer;
|
||||
import org.oscim.renderer.GLViewport;
|
||||
import org.oscim.scalebar.DefaultMapScaleBar;
|
||||
import org.oscim.scalebar.MapScaleBar;
|
||||
import org.oscim.scalebar.MapScaleBarLayer;
|
||||
import org.oscim.theme.IRenderTheme;
|
||||
import org.oscim.theme.VtmThemes;
|
||||
import org.oscim.tiling.source.mapfile.MapFileTileSource;
|
||||
|
||||
import java.io.FileInputStream;
|
||||
|
||||
/**
|
||||
* A very basic Android app example.
|
||||
* <p>
|
||||
* You'll need a map with filename berlin.map from download.mapsforge.org in device storage.
|
||||
*/
|
||||
public class GettingStarted extends Activity {
|
||||
|
||||
// Request code for selecting a map file
|
||||
private static final int SELECT_MAP_FILE = 0;
|
||||
|
||||
private MapView mapView;
|
||||
private IRenderTheme theme;
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
// Map view
|
||||
mapView = new MapView(this);
|
||||
setContentView(mapView);
|
||||
|
||||
// Open map
|
||||
Intent intent = new Intent(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT ? Intent.ACTION_OPEN_DOCUMENT : Intent.ACTION_GET_CONTENT);
|
||||
intent.addCategory(Intent.CATEGORY_OPENABLE);
|
||||
intent.setType("*/*");
|
||||
startActivityForResult(intent, SELECT_MAP_FILE);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
if (requestCode == SELECT_MAP_FILE && resultCode == Activity.RESULT_OK) {
|
||||
if (data != null) {
|
||||
Uri uri = data.getData();
|
||||
openMap(uri);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void openMap(Uri uri) {
|
||||
try {
|
||||
// Tile source
|
||||
MapFileTileSource tileSource = new MapFileTileSource();
|
||||
FileInputStream fis = (FileInputStream) getContentResolver().openInputStream(uri);
|
||||
tileSource.setMapFileInputStream(fis);
|
||||
|
||||
// Vector layer
|
||||
VectorTileLayer tileLayer = mapView.map().setBaseMap(tileSource);
|
||||
|
||||
// Building layer
|
||||
mapView.map().layers().add(new BuildingLayer(mapView.map(), tileLayer));
|
||||
|
||||
// Label layer
|
||||
mapView.map().layers().add(new LabelLayer(mapView.map(), tileLayer));
|
||||
|
||||
// Render theme
|
||||
theme = mapView.map().setTheme(VtmThemes.DEFAULT);
|
||||
|
||||
// Scale bar
|
||||
MapScaleBar mapScaleBar = new DefaultMapScaleBar(mapView.map());
|
||||
MapScaleBarLayer mapScaleBarLayer = new MapScaleBarLayer(mapView.map(), mapScaleBar);
|
||||
mapScaleBarLayer.getRenderer().setPosition(GLViewport.Position.BOTTOM_LEFT);
|
||||
mapScaleBarLayer.getRenderer().setOffset(5 * CanvasAdapter.getScale(), 0);
|
||||
mapView.map().layers().add(mapScaleBarLayer);
|
||||
|
||||
// Note: this map position is specific to Berlin area
|
||||
mapView.map().setMapPosition(52.517037, 13.38886, 1 << 12);
|
||||
} catch (Exception e) {
|
||||
/*
|
||||
* In case of map file errors avoid crash, but developers should handle these cases!
|
||||
*/
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onResume() {
|
||||
super.onResume();
|
||||
mapView.onResume();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPause() {
|
||||
mapView.onPause();
|
||||
super.onPause();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
mapView.onDestroy();
|
||||
theme.dispose();
|
||||
super.onDestroy();
|
||||
}
|
||||
}
|
@ -0,0 +1,185 @@
|
||||
/*
|
||||
* Copyright 2014 Hannes Janetzek
|
||||
* Copyright 2016-2018 devemux86
|
||||
*
|
||||
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under the
|
||||
* terms of the GNU Lesser General Public License as published by the Free Software
|
||||
* Foundation, either version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
//package org.oscim.android.test;
|
||||
//
|
||||
//import android.content.Context;
|
||||
//import android.os.Bundle;
|
||||
//import android.view.View;
|
||||
//import android.widget.Toast;
|
||||
//import android.widget.ToggleButton;
|
||||
//import io.jeo.map.Style;
|
||||
//import io.jeo.vector.VectorDataset;
|
||||
//import org.oscim.backend.CanvasAdapter;
|
||||
//import org.oscim.backend.canvas.Color;
|
||||
//import org.oscim.layers.OSMIndoorLayer;
|
||||
//import org.oscim.layers.tile.buildings.BuildingLayer;
|
||||
//import org.oscim.layers.tile.vector.labeling.LabelLayer;
|
||||
//import org.oscim.test.JeoTest;
|
||||
//import org.oscim.theme.VtmThemes;
|
||||
//import org.oscim.theme.styles.TextStyle;
|
||||
//import org.oscim.utils.IOUtils;
|
||||
//import org.slf4j.Logger;
|
||||
//import org.slf4j.LoggerFactory;
|
||||
//
|
||||
//import java.io.IOException;
|
||||
//import java.io.InputStream;
|
||||
//import java.net.URL;
|
||||
//import java.net.URLConnection;
|
||||
//import java.util.Arrays;
|
||||
//
|
||||
//public class JeoIndoorActivity extends BaseMapActivity {
|
||||
// public static final Logger log = LoggerFactory.getLogger(JeoIndoorActivity.class);
|
||||
//
|
||||
// // from http://overpass-turbo.eu/s/2vp
|
||||
// String PATH = "https://gist.githubusercontent.com/anonymous/09062103a66844a96048f25626078c8d/raw/1d3af6a5a55e9ea4adc9551fa633a051a44a5a9c/overpass.geojson";
|
||||
//
|
||||
// private OSMIndoorLayer mIndoorLayer;
|
||||
//
|
||||
// public JeoIndoorActivity() {
|
||||
// super(R.layout.jeo_indoor_map);
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public void onCreate(Bundle savedInstanceState) {
|
||||
// super.onCreate(savedInstanceState);
|
||||
//
|
||||
// mMap.addTask(new Runnable() {
|
||||
// @Override
|
||||
// public void run() {
|
||||
// showToast("load data");
|
||||
// InputStream is = null;
|
||||
// try {
|
||||
// // File file = new File(Environment.getExternalStorageDirectory()
|
||||
// // .getAbsolutePath(), "osmindoor.json");
|
||||
// // is = new FileInputStream(file);
|
||||
//
|
||||
// URL url = new URL(PATH);
|
||||
// URLConnection conn = url.openConnection();
|
||||
// is = conn.getInputStream();
|
||||
// loadJson(is);
|
||||
// } catch (IOException e) {
|
||||
// e.printStackTrace();
|
||||
// } finally {
|
||||
// IOUtils.closeQuietly(is);
|
||||
// }
|
||||
// }
|
||||
// });
|
||||
//
|
||||
// mMap.setTheme(VtmThemes.DEFAULT);
|
||||
//
|
||||
// mMap.layers().add(new BuildingLayer(mMap, mBaseLayer));
|
||||
// mMap.layers().add(new LabelLayer(mMap, mBaseLayer));
|
||||
//
|
||||
// // String file = Environment.getExternalStorageDirectory().getAbsolutePath();
|
||||
// // VectorDataset data = (VectorDataset) JeoTest.getJsonData(file + "/states.json", true);
|
||||
// // Style style = JeoTest.getStyle();
|
||||
// // mMap.layers().add(new JeoVectorLayer(mMap, data, style));
|
||||
// }
|
||||
//
|
||||
// void loadJson(InputStream is) {
|
||||
// showToast("got data");
|
||||
//
|
||||
// VectorDataset data = JeoTest.readGeoJson(is);
|
||||
// Style style = JeoTest.getStyle();
|
||||
// TextStyle textStyle = TextStyle.builder()
|
||||
// .isCaption(true)
|
||||
// .fontSize(16 * CanvasAdapter.getScale()).color(Color.BLACK)
|
||||
// .strokeWidth(2.2f * CanvasAdapter.getScale()).strokeColor(Color.WHITE)
|
||||
// .build();
|
||||
// mIndoorLayer = new OSMIndoorLayer(mMap, data, style, textStyle);
|
||||
// mMap.layers().add(mIndoorLayer);
|
||||
//
|
||||
// showToast("data ready");
|
||||
// mMap.updateMap(true);
|
||||
//
|
||||
// mIndoorLayer.activeLevels[0] = true;
|
||||
// shift();
|
||||
// }
|
||||
//
|
||||
// public void showToast(final String text) {
|
||||
// final Context ctx = this;
|
||||
// runOnUiThread(new Runnable() {
|
||||
// @Override
|
||||
// public void run() {
|
||||
// Toast toast = Toast.makeText(ctx, text, Toast.LENGTH_SHORT);
|
||||
// toast.show();
|
||||
// }
|
||||
// });
|
||||
// }
|
||||
//
|
||||
// boolean mShift = true;
|
||||
//
|
||||
// public void shift() {
|
||||
// if (!mShift)
|
||||
// return;
|
||||
//
|
||||
// mMap.postDelayed(new Runnable() {
|
||||
//
|
||||
// @Override
|
||||
// public void run() {
|
||||
// for (int i = 0; i < 10; i++) {
|
||||
// if (mIndoorLayer.activeLevels[i]) {
|
||||
// mIndoorLayer.activeLevels[i] = false;
|
||||
// mIndoorLayer.activeLevels[(i + 1) % 9] = true;
|
||||
// mIndoorLayer.update();
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
// shift();
|
||||
// }
|
||||
// }, 200);
|
||||
//
|
||||
// }
|
||||
//
|
||||
// public void onClick(View v) {
|
||||
// mShift = false;
|
||||
//
|
||||
// if (mIndoorLayer == null)
|
||||
// return;
|
||||
//
|
||||
// int i = 0;
|
||||
//
|
||||
// if (v instanceof ToggleButton) {
|
||||
// ToggleButton b = (ToggleButton) v;
|
||||
// i = (b.getTextOn().charAt(0) - '0') + 1;
|
||||
// }
|
||||
//
|
||||
// if (i < 0 || i > 9)
|
||||
// i = 0;
|
||||
//
|
||||
// mIndoorLayer.activeLevels[i] ^= true;
|
||||
// if (v instanceof ToggleButton)
|
||||
// ((ToggleButton) v).setChecked(mIndoorLayer.activeLevels[i]);
|
||||
// log.debug(Arrays.toString(mIndoorLayer.activeLevels));
|
||||
// mIndoorLayer.update();
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// protected void onStop() {
|
||||
// super.onStop();
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// protected void onResume() {
|
||||
// super.onResume();
|
||||
//
|
||||
// /* ignore saved position */
|
||||
// //mMap.setMapPosition(49.417, 8.673, 1 << 17);
|
||||
// mMap.setMapPosition(53.5620092, 9.9866457, 1 << 16);
|
||||
// }
|
||||
//}
|
@ -1,178 +0,0 @@
|
||||
/*
|
||||
* Copyright 2016 devemux86
|
||||
*
|
||||
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under the
|
||||
* terms of the GNU Lesser General Public License as published by the Free Software
|
||||
* Foundation, either version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.oscim.android.test;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
import android.widget.Toast;
|
||||
import android.widget.ToggleButton;
|
||||
|
||||
import org.jeo.map.Style;
|
||||
import org.jeo.vector.VectorDataset;
|
||||
import org.oscim.layers.OSMIndoorLayer;
|
||||
import org.oscim.layers.tile.buildings.BuildingLayer;
|
||||
import org.oscim.layers.tile.vector.labeling.LabelLayer;
|
||||
import org.oscim.test.JeoTest;
|
||||
import org.oscim.theme.VtmThemes;
|
||||
import org.oscim.utils.IOUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.net.URL;
|
||||
import java.net.URLConnection;
|
||||
import java.util.Arrays;
|
||||
|
||||
public class JeoIndoorMapActivity extends BaseMapActivity {
|
||||
public static final Logger log = LoggerFactory.getLogger(JeoIndoorMapActivity.class);
|
||||
|
||||
// from http://overpass-turbo.eu/s/2vp
|
||||
String PATH = "https://gist.github.com/anonymous/8960337/raw/overpass.geojson";
|
||||
//String PATH = "https://gist.github.com/hjanetzek/9280925/raw/overpass.geojson";
|
||||
|
||||
private OSMIndoorLayer mIndoorLayer;
|
||||
|
||||
public JeoIndoorMapActivity() {
|
||||
super(R.layout.jeo_indoor_map);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
mMap.addTask(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
showToast("load data");
|
||||
InputStream is = null;
|
||||
try {
|
||||
// File file = new File(Environment.getExternalStorageDirectory()
|
||||
// .getAbsolutePath(), "osmindoor.json");
|
||||
// is = new FileInputStream(file);
|
||||
|
||||
URL url = new URL(PATH);
|
||||
URLConnection conn = url.openConnection();
|
||||
is = conn.getInputStream();
|
||||
loadJson(is);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
IOUtils.closeQuietly(is);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
mMap.setTheme(VtmThemes.DEFAULT);
|
||||
|
||||
mMap.layers().add(new BuildingLayer(mMap, mBaseLayer));
|
||||
mMap.layers().add(new LabelLayer(mMap, mBaseLayer));
|
||||
|
||||
// mMap.layers().add(new TileGridLayer(mMap));
|
||||
// String file = Environment.getExternalStorageDirectory().getAbsolutePath();
|
||||
// VectorDataset data = (VectorDataset) JeoTest.getJsonData(file + "/states.json", true);
|
||||
// Style style = JeoTest.getStyle();
|
||||
// mMap.layers().add(new JeoVectorLayer(mMap, data, style));
|
||||
}
|
||||
|
||||
void loadJson(InputStream is) {
|
||||
showToast("got data");
|
||||
|
||||
VectorDataset data = JeoTest.readGeoJson(is);
|
||||
Style style = JeoTest.getStyle();
|
||||
mIndoorLayer = new OSMIndoorLayer(mMap, data, style);
|
||||
mMap.layers().add(mIndoorLayer);
|
||||
|
||||
showToast("data ready");
|
||||
mMap.updateMap(true);
|
||||
|
||||
mIndoorLayer.activeLevels[0] = true;
|
||||
shift();
|
||||
}
|
||||
|
||||
public void showToast(final String text) {
|
||||
final Context ctx = this;
|
||||
runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
Toast toast = Toast.makeText(ctx, text, Toast.LENGTH_SHORT);
|
||||
toast.show();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
boolean mShift = true;
|
||||
|
||||
public void shift() {
|
||||
if (!mShift)
|
||||
return;
|
||||
|
||||
mMap.postDelayed(new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
for (int i = 0; i < 10; i++) {
|
||||
if (mIndoorLayer.activeLevels[i]) {
|
||||
mIndoorLayer.activeLevels[i] = false;
|
||||
mIndoorLayer.activeLevels[(i + 1) % 9] = true;
|
||||
mIndoorLayer.update();
|
||||
break;
|
||||
}
|
||||
}
|
||||
shift();
|
||||
}
|
||||
}, 200);
|
||||
|
||||
}
|
||||
|
||||
public void onClick(View v) {
|
||||
mShift = false;
|
||||
|
||||
if (mIndoorLayer == null)
|
||||
return;
|
||||
|
||||
int i = 0;
|
||||
|
||||
if (v instanceof ToggleButton) {
|
||||
ToggleButton b = (ToggleButton) v;
|
||||
i = (b.getTextOn().charAt(0) - '0') + 1;
|
||||
}
|
||||
|
||||
if (i < 0 || i > 9)
|
||||
i = 0;
|
||||
|
||||
mIndoorLayer.activeLevels[i] ^= true;
|
||||
((ToggleButton) v).setChecked(mIndoorLayer.activeLevels[i]);
|
||||
log.debug(Arrays.toString(mIndoorLayer.activeLevels));
|
||||
mIndoorLayer.update();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onStop() {
|
||||
super.onStop();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onResume() {
|
||||
super.onResume();
|
||||
|
||||
/* ignore saved position */
|
||||
//mMap.setMapPosition(49.417, 8.673, 1 << 17);
|
||||
mMap.setMapPosition(53.5620092, 9.9866457, 1 << 16);
|
||||
}
|
||||
}
|
@ -1,79 +0,0 @@
|
||||
/*
|
||||
* Copyright 2013 Hannes Janetzek
|
||||
* Copyright 2016 devemux86
|
||||
* Copyright 2016 Andrey Novikov
|
||||
*
|
||||
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under the
|
||||
* terms of the GNU Lesser General Public License as published by the Free Software
|
||||
* Foundation, either version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.oscim.android.test;
|
||||
|
||||
import android.os.Bundle;
|
||||
|
||||
import org.oscim.backend.CanvasAdapter;
|
||||
import org.oscim.layers.tile.buildings.BuildingLayer;
|
||||
import org.oscim.layers.tile.vector.labeling.LabelLayer;
|
||||
import org.oscim.map.Layers;
|
||||
import org.oscim.renderer.BitmapRenderer;
|
||||
import org.oscim.renderer.GLViewport;
|
||||
import org.oscim.scalebar.DefaultMapScaleBar;
|
||||
import org.oscim.scalebar.ImperialUnitAdapter;
|
||||
import org.oscim.scalebar.MapScaleBar;
|
||||
import org.oscim.scalebar.MapScaleBarLayer;
|
||||
import org.oscim.scalebar.MetricUnitAdapter;
|
||||
import org.oscim.theme.VtmThemes;
|
||||
|
||||
public class LayerGroupActivity extends BaseMapActivity {
|
||||
|
||||
private static final int GROUP_3D_OBJECTS = 1;
|
||||
private static final int GROUP_LABELS = 2;
|
||||
private static final int GROUP_OVERLAYS = 3;
|
||||
|
||||
private DefaultMapScaleBar mapScaleBar;
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
Layers layers = mMap.layers();
|
||||
|
||||
layers.addGroup(GROUP_3D_OBJECTS);
|
||||
layers.add(new BuildingLayer(mMap, mBaseLayer), GROUP_3D_OBJECTS);
|
||||
|
||||
layers.addGroup(GROUP_LABELS);
|
||||
layers.add(new LabelLayer(mMap, mBaseLayer), GROUP_LABELS);
|
||||
|
||||
mapScaleBar = new DefaultMapScaleBar(mMap, CanvasAdapter.dpi / 160);
|
||||
mapScaleBar.setScaleBarMode(DefaultMapScaleBar.ScaleBarMode.BOTH);
|
||||
mapScaleBar.setDistanceUnitAdapter(MetricUnitAdapter.INSTANCE);
|
||||
mapScaleBar.setSecondaryDistanceUnitAdapter(ImperialUnitAdapter.INSTANCE);
|
||||
mapScaleBar.setScaleBarPosition(MapScaleBar.ScaleBarPosition.BOTTOM_LEFT);
|
||||
|
||||
MapScaleBarLayer mapScaleBarLayer = new MapScaleBarLayer(mMap, mapScaleBar);
|
||||
BitmapRenderer renderer = mapScaleBarLayer.getRenderer();
|
||||
renderer.setPosition(GLViewport.Position.BOTTOM_LEFT);
|
||||
renderer.setOffset(5 * CanvasAdapter.dpi / 160, 0);
|
||||
|
||||
layers.addGroup(GROUP_OVERLAYS);
|
||||
layers.add(mapScaleBarLayer, GROUP_OVERLAYS);
|
||||
|
||||
mMap.setTheme(VtmThemes.DEFAULT);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
mapScaleBar.destroy();
|
||||
|
||||
super.onDestroy();
|
||||
}
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright 2014 Hannes Janetzek
|
||||
* Copyright 2016 devemux86
|
||||
* Copyright 2016-2019 devemux86
|
||||
*
|
||||
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
|
||||
*
|
||||
@ -18,7 +18,6 @@
|
||||
package org.oscim.android.test;
|
||||
|
||||
import android.os.Bundle;
|
||||
|
||||
import org.oscim.backend.CanvasAdapter;
|
||||
import org.oscim.backend.canvas.Color;
|
||||
import org.oscim.core.MapPosition;
|
||||
@ -28,32 +27,31 @@ import org.oscim.layers.vector.geometries.Style;
|
||||
import org.oscim.map.Map;
|
||||
import org.oscim.renderer.bucket.TextureItem;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import static org.oscim.tiling.source.bitmap.DefaultSources.STAMEN_TONER;
|
||||
|
||||
/**
|
||||
* This is a very INEFFICIENT and somewhat less useful example for how to use
|
||||
* PathLayers!
|
||||
*/
|
||||
public class LineTexActivity extends BitmapTileMapActivity {
|
||||
public class LineTexActivity extends BitmapTileActivity {
|
||||
|
||||
private static final boolean ANIMATION = false;
|
||||
private static final boolean ANIMATION = true;
|
||||
|
||||
private List<PathLayer> mPathLayers = new ArrayList<>();
|
||||
|
||||
public LineTexActivity() {
|
||||
super(STAMEN_TONER.build());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
mBitmapLayer.tileRenderer().setBitmapAlpha(0.5f);
|
||||
|
||||
TextureItem tex = new TextureItem(CanvasAdapter.getBitmapAsset("", "patterns/pike.png"));
|
||||
tex.mipmap = true;
|
||||
TextureItem tex = null;
|
||||
try {
|
||||
tex = new TextureItem(CanvasAdapter.getBitmapAsset("", "patterns/pike.png"));
|
||||
//tex.mipmap = true;
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
for (double lat = -90; lat <= 90; lat += 5) {
|
||||
int c = Color.fade(Color.rainbow((float) (lat + 90) / 180), 0.5f);
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2016 devemux86
|
||||
* Copyright 2016-2021 devemux86
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under the
|
||||
* terms of the GNU Lesser General Public License as published by the Free Software
|
||||
@ -14,16 +14,20 @@
|
||||
*/
|
||||
package org.oscim.android.test;
|
||||
|
||||
import android.Manifest;
|
||||
import android.content.Context;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.location.Location;
|
||||
import android.location.LocationListener;
|
||||
import android.location.LocationManager;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
|
||||
import org.oscim.core.MapPosition;
|
||||
import org.oscim.layers.LocationLayer;
|
||||
import org.oscim.renderer.LocationCallback;
|
||||
|
||||
public class LocationActivity extends SimpleMapActivity implements LocationListener {
|
||||
public class LocationActivity extends BitmapTileActivity implements LocationListener {
|
||||
private Location location;
|
||||
private LocationLayer locationLayer;
|
||||
private LocationManager locationManager;
|
||||
private final MapPosition mapPosition = new MapPosition();
|
||||
@ -35,27 +39,47 @@ public class LocationActivity extends SimpleMapActivity implements LocationListe
|
||||
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
|
||||
|
||||
locationLayer = new LocationLayer(mMap);
|
||||
locationLayer.locationRenderer.setCallback(new LocationCallback() {
|
||||
@Override
|
||||
public boolean hasRotation() {
|
||||
return location != null && location.hasBearing();
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getRotation() {
|
||||
return location != null && location.hasBearing() ? location.getBearing() : 0;
|
||||
}
|
||||
});
|
||||
locationLayer.setEnabled(false);
|
||||
mMap.layers().add(locationLayer);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onResume() {
|
||||
super.onResume();
|
||||
|
||||
enableAvailableProviders();
|
||||
locationLayer.setEnabled(true);
|
||||
public void onRequestPermissionsResult(final int requestCode, final String[] permissions, final int[] grantResults) {
|
||||
if (requestCode == 0) {
|
||||
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
|
||||
enableAvailableProviders();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPause() {
|
||||
super.onPause();
|
||||
public void onStart() {
|
||||
super.onStart();
|
||||
|
||||
enableAvailableProviders();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStop() {
|
||||
locationManager.removeUpdates(this);
|
||||
locationLayer.setEnabled(false);
|
||||
|
||||
super.onStop();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLocationChanged(Location location) {
|
||||
this.location = location;
|
||||
locationLayer.setEnabled(true);
|
||||
locationLayer.setPosition(location.getLatitude(), location.getLongitude(), location.getAccuracy());
|
||||
|
||||
// Follow location
|
||||
@ -72,11 +96,19 @@ public class LocationActivity extends SimpleMapActivity implements LocationListe
|
||||
public void onProviderEnabled(String provider) {
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@Override
|
||||
public void onStatusChanged(String provider, int status, Bundle extras) {
|
||||
}
|
||||
|
||||
private void enableAvailableProviders() {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||
if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
|
||||
requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION}, 0);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
locationManager.removeUpdates(this);
|
||||
|
||||
for (String provider : locationManager.getProviders(true)) {
|
||||
|
@ -0,0 +1,151 @@
|
||||
/*
|
||||
* Copyright 2016-2021 devemux86
|
||||
* Copyright 2018 Longri
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under the
|
||||
* terms of the GNU Lesser General Public License as published by the Free Software
|
||||
* Foundation, either version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.oscim.android.test;
|
||||
|
||||
import android.Manifest;
|
||||
import android.content.Context;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.location.Location;
|
||||
import android.location.LocationListener;
|
||||
import android.location.LocationManager;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import org.oscim.backend.CanvasAdapter;
|
||||
import org.oscim.backend.canvas.Bitmap;
|
||||
import org.oscim.core.MapPosition;
|
||||
import org.oscim.layers.LocationTextureLayer;
|
||||
import org.oscim.renderer.LocationCallback;
|
||||
import org.oscim.utils.IOUtils;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
|
||||
public class LocationTextureActivity extends BitmapTileActivity implements LocationListener {
|
||||
private Location location;
|
||||
private LocationTextureLayer locationLayer;
|
||||
private LocationManager locationManager;
|
||||
private final MapPosition mapPosition = new MapPosition();
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
|
||||
|
||||
InputStream is = null;
|
||||
Bitmap bitmapArrow = null;
|
||||
try {
|
||||
is = getResources().openRawResource(R.raw.arrow);
|
||||
bitmapArrow = CanvasAdapter.decodeSvgBitmap(is, (int) (48 * CanvasAdapter.getScale()), (int) (48 * CanvasAdapter.getScale()), 100);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
IOUtils.closeQuietly(is);
|
||||
}
|
||||
|
||||
Bitmap bitmapMarker = null;
|
||||
try {
|
||||
is = getResources().openRawResource(R.raw.marker);
|
||||
bitmapMarker = CanvasAdapter.decodeSvgBitmap(is, (int) (48 * CanvasAdapter.getScale()), (int) (48 * CanvasAdapter.getScale()), 100);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
IOUtils.closeQuietly(is);
|
||||
}
|
||||
|
||||
locationLayer = new LocationTextureLayer(mMap);
|
||||
locationLayer.locationRenderer.setBitmapArrow(bitmapArrow);
|
||||
locationLayer.locationRenderer.setBitmapMarker(bitmapMarker);
|
||||
locationLayer.locationRenderer.setCallback(new LocationCallback() {
|
||||
@Override
|
||||
public boolean hasRotation() {
|
||||
return location != null && location.hasBearing();
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getRotation() {
|
||||
return location != null && location.hasBearing() ? location.getBearing() : 0;
|
||||
}
|
||||
});
|
||||
locationLayer.setEnabled(false);
|
||||
mMap.layers().add(locationLayer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequestPermissionsResult(final int requestCode, final String[] permissions, final int[] grantResults) {
|
||||
if (requestCode == 0) {
|
||||
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
|
||||
enableAvailableProviders();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStart() {
|
||||
super.onStart();
|
||||
|
||||
enableAvailableProviders();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStop() {
|
||||
locationManager.removeUpdates(this);
|
||||
|
||||
super.onStop();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLocationChanged(Location location) {
|
||||
this.location = location;
|
||||
locationLayer.setEnabled(true);
|
||||
locationLayer.setPosition(location.getLatitude(), location.getLongitude(), location.getAccuracy());
|
||||
|
||||
// Follow location
|
||||
mMap.getMapPosition(mapPosition);
|
||||
mapPosition.setPosition(location.getLatitude(), location.getLongitude());
|
||||
mMap.setMapPosition(mapPosition);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onProviderDisabled(String provider) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onProviderEnabled(String provider) {
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@Override
|
||||
public void onStatusChanged(String provider, int status, Bundle extras) {
|
||||
}
|
||||
|
||||
private void enableAvailableProviders() {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||
if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
|
||||
requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION}, 0);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
locationManager.removeUpdates(this);
|
||||
|
||||
for (String provider : locationManager.getProviders(true)) {
|
||||
if (LocationManager.GPS_PROVIDER.equals(provider)
|
||||
|| LocationManager.NETWORK_PROVIDER.equals(provider)) {
|
||||
locationManager.requestLocationUpdates(provider, 0, 0, this);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,71 @@
|
||||
/*
|
||||
* Copyright 2019 Andrea Antonello
|
||||
* Copyright 2019 devemux86
|
||||
* Copyright 2019 Kostas Tzounopoulos
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under the
|
||||
* terms of the GNU Lesser General Public License as published by the Free Software
|
||||
* Foundation, either version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.oscim.android.test;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.content.DialogInterface;
|
||||
import android.os.Bundle;
|
||||
import org.oscim.android.tiling.source.mbtiles.MBTilesBitmapTileSource;
|
||||
import org.oscim.android.tiling.source.mbtiles.MBTilesTileSource;
|
||||
import org.oscim.core.BoundingBox;
|
||||
import org.oscim.core.MapPosition;
|
||||
import org.oscim.core.Tile;
|
||||
import org.oscim.layers.tile.bitmap.BitmapTileLayer;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
/**
|
||||
* An example activity making use of raster MBTiles.
|
||||
*/
|
||||
public class MBTilesBitmapActivity extends BitmapTileActivity {
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
File file = new File(getExternalFilesDir(null), "raster.mbtiles");
|
||||
if (!file.exists()) {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(this)
|
||||
.setTitle(R.string.warning)
|
||||
.setMessage(getResources().getString(R.string.startup_message_mbtiles))
|
||||
.setPositiveButton(R.string.exit, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
finish();
|
||||
}
|
||||
});
|
||||
builder.show();
|
||||
return;
|
||||
}
|
||||
|
||||
MBTilesTileSource tileSource = new MBTilesBitmapTileSource(file.getAbsolutePath(), 128, null);
|
||||
|
||||
BitmapTileLayer bitmapLayer = new BitmapTileLayer(mMap, tileSource);
|
||||
mMap.layers().add(bitmapLayer);
|
||||
|
||||
/* set initial position on first run */
|
||||
MapPosition pos = new MapPosition();
|
||||
mMap.getMapPosition(pos);
|
||||
if (pos.x == 0.5 && pos.y == 0.5) {
|
||||
BoundingBox bbox = tileSource.getDataSource().getBounds();
|
||||
if (bbox != null) {
|
||||
pos.setByBoundingBox(bbox, Tile.SIZE * 4, Tile.SIZE * 4);
|
||||
mMap.setMapPosition(pos);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,93 @@
|
||||
/*
|
||||
* Copyright 2019 Andrea Antonello
|
||||
* Copyright 2019 devemux86
|
||||
* Copyright 2019 Kostas Tzounopoulos
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under the
|
||||
* terms of the GNU Lesser General Public License as published by the Free Software
|
||||
* Foundation, either version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.oscim.android.test;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.content.DialogInterface;
|
||||
import android.os.Bundle;
|
||||
import org.oscim.android.mvt.tiling.source.mbtiles.MBTilesMvtTileSource;
|
||||
import org.oscim.android.tiling.source.mbtiles.MBTilesTileSource;
|
||||
import org.oscim.android.tiling.source.mbtiles.MBTilesUnsupportedException;
|
||||
import org.oscim.core.BoundingBox;
|
||||
import org.oscim.core.MapPosition;
|
||||
import org.oscim.core.Tile;
|
||||
import org.oscim.layers.tile.buildings.BuildingLayer;
|
||||
import org.oscim.layers.tile.vector.VectorTileLayer;
|
||||
import org.oscim.layers.tile.vector.labeling.LabelLayer;
|
||||
import org.oscim.theme.VtmThemes;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
/**
|
||||
* An example activity making use of vector MBTiles.
|
||||
*/
|
||||
public class MBTilesMvtActivity extends MapActivity {
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
File file = new File(getExternalFilesDir(null), "vector.mbtiles");
|
||||
if (!file.exists()) {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(this)
|
||||
.setTitle(R.string.warning)
|
||||
.setMessage(getResources().getString(R.string.startup_message_mbtiles))
|
||||
.setPositiveButton(R.string.exit, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
finish();
|
||||
}
|
||||
});
|
||||
builder.show();
|
||||
return;
|
||||
}
|
||||
|
||||
MBTilesTileSource tileSource;
|
||||
try {
|
||||
tileSource = new MBTilesMvtTileSource(file.getAbsolutePath(), "en");
|
||||
} catch (MBTilesUnsupportedException e) {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(this)
|
||||
.setTitle(R.string.warning)
|
||||
.setMessage(e.getMessage())
|
||||
.setPositiveButton(R.string.exit, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
finish();
|
||||
}
|
||||
});
|
||||
builder.show();
|
||||
return;
|
||||
}
|
||||
|
||||
VectorTileLayer l = mMap.setBaseMap(tileSource);
|
||||
mMap.setTheme(VtmThemes.OPENMAPTILES);
|
||||
|
||||
mMap.layers().add(new BuildingLayer(mMap, l));
|
||||
mMap.layers().add(new LabelLayer(mMap, l));
|
||||
|
||||
/* set initial position on first run */
|
||||
MapPosition pos = new MapPosition();
|
||||
mMap.getMapPosition(pos);
|
||||
if (pos.x == 0.5 && pos.y == 0.5) {
|
||||
BoundingBox bbox = tileSource.getDataSource().getBounds();
|
||||
if (bbox != null) {
|
||||
pos.setByBoundingBox(bbox, Tile.SIZE * 4, Tile.SIZE * 4);
|
||||
mMap.setMapPosition(pos);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2016 devemux86
|
||||
* Copyright 2016-2017 devemux86
|
||||
*
|
||||
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
|
||||
*
|
||||
@ -21,7 +21,6 @@ import android.os.Bundle;
|
||||
|
||||
import org.oscim.android.MapPreferences;
|
||||
import org.oscim.android.MapView;
|
||||
import org.oscim.core.Tile;
|
||||
import org.oscim.map.Map;
|
||||
|
||||
public class MapActivity extends Activity {
|
||||
@ -39,9 +38,9 @@ public class MapActivity extends Activity {
|
||||
this(R.layout.activity_map);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
Tile.SIZE = Tile.calculateTileSize(getResources().getDisplayMetrics().scaledDensity);
|
||||
setContentView(mContentView);
|
||||
|
||||
setTitle(getClass().getSimpleName());
|
||||
@ -61,9 +60,16 @@ public class MapActivity extends Activity {
|
||||
|
||||
@Override
|
||||
protected void onPause() {
|
||||
super.onPause();
|
||||
|
||||
mMapView.onPause();
|
||||
mPrefs.save(mMapView.map());
|
||||
mMapView.onPause();
|
||||
|
||||
super.onPause();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
mMapView.onDestroy();
|
||||
|
||||
super.onDestroy();
|
||||
}
|
||||
}
|
||||
|
124
vtm-android-example/src/org/oscim/android/test/MapFragment.java
Normal file
@ -0,0 +1,124 @@
|
||||
/*
|
||||
* Copyright 2018-2020 devemux86
|
||||
* Copyright 2020 Meibes
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under the
|
||||
* terms of the GNU Lesser General Public License as published by the Free Software
|
||||
* Foundation, either version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.oscim.android.test;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.RelativeLayout;
|
||||
import org.oscim.android.MapView;
|
||||
import org.oscim.backend.CanvasAdapter;
|
||||
import org.oscim.layers.tile.buildings.BuildingLayer;
|
||||
import org.oscim.layers.tile.vector.VectorTileLayer;
|
||||
import org.oscim.layers.tile.vector.labeling.LabelLayer;
|
||||
import org.oscim.renderer.GLViewport;
|
||||
import org.oscim.scalebar.DefaultMapScaleBar;
|
||||
import org.oscim.scalebar.MapScaleBar;
|
||||
import org.oscim.scalebar.MapScaleBarLayer;
|
||||
import org.oscim.theme.IRenderTheme;
|
||||
import org.oscim.theme.VtmThemes;
|
||||
import org.oscim.tiling.source.mapfile.MapFileTileSource;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
/**
|
||||
* You'll need a map with filename berlin.map from download.mapsforge.org in device storage.
|
||||
*/
|
||||
@SuppressWarnings("deprecation")
|
||||
public class MapFragment extends android.app.Fragment {
|
||||
|
||||
private MapView mapView;
|
||||
private IRenderTheme theme;
|
||||
|
||||
public static MapFragment newInstance() {
|
||||
MapFragment instance = new MapFragment();
|
||||
|
||||
Bundle args = new Bundle();
|
||||
instance.setArguments(args);
|
||||
return instance;
|
||||
}
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
return inflater.inflate(R.layout.fragment_map, container, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onViewCreated(View view, Bundle savedInstanceState) {
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
|
||||
mapView = new MapView(getActivity());
|
||||
RelativeLayout relativeLayout = view.findViewById(R.id.mapView);
|
||||
relativeLayout.addView(mapView);
|
||||
|
||||
// Tile source
|
||||
MapFileTileSource tileSource = new MapFileTileSource();
|
||||
File file = new File(getActivity().getExternalFilesDir(null), "berlin.map");
|
||||
tileSource.setMapFile(file.getAbsolutePath());
|
||||
|
||||
// Vector layer
|
||||
VectorTileLayer tileLayer = mapView.map().setBaseMap(tileSource);
|
||||
|
||||
// Building layer
|
||||
mapView.map().layers().add(new BuildingLayer(mapView.map(), tileLayer));
|
||||
|
||||
// Label layer
|
||||
mapView.map().layers().add(new LabelLayer(mapView.map(), tileLayer));
|
||||
|
||||
// Render theme
|
||||
theme = mapView.map().setTheme(VtmThemes.DEFAULT);
|
||||
|
||||
// Scale bar
|
||||
MapScaleBar mapScaleBar = new DefaultMapScaleBar(mapView.map());
|
||||
MapScaleBarLayer mapScaleBarLayer = new MapScaleBarLayer(mapView.map(), mapScaleBar);
|
||||
mapScaleBarLayer.getRenderer().setPosition(GLViewport.Position.BOTTOM_LEFT);
|
||||
mapScaleBarLayer.getRenderer().setOffset(5 * CanvasAdapter.getScale(), 0);
|
||||
mapView.map().layers().add(mapScaleBarLayer);
|
||||
|
||||
// Note: this map position is specific to Berlin area
|
||||
mapView.map().setMapPosition(52.517037, 13.38886, 1 << 12);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
if (mapView != null) {
|
||||
mapView.onResume();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPause() {
|
||||
if (mapView != null) {
|
||||
mapView.onPause();
|
||||
}
|
||||
super.onPause();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroyView() {
|
||||
if (mapView != null) {
|
||||
mapView.onDestroy();
|
||||
mapView = null;
|
||||
}
|
||||
if (theme != null) {
|
||||
theme.dispose();
|
||||
theme = null;
|
||||
}
|
||||
super.onDestroyView();
|
||||
}
|
||||
}
|
@ -0,0 +1,93 @@
|
||||
/*
|
||||
* Copyright 2018-2020 devemux86
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under the
|
||||
* terms of the GNU Lesser General Public License as published by the Free Software
|
||||
* Foundation, either version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.oscim.android.test;
|
||||
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import okhttp3.Cache;
|
||||
import okhttp3.CipherSuite;
|
||||
import okhttp3.ConnectionSpec;
|
||||
import okhttp3.OkHttpClient;
|
||||
import org.oscim.layers.tile.bitmap.BitmapTileLayer;
|
||||
import org.oscim.layers.tile.buildings.BuildingLayer;
|
||||
import org.oscim.layers.tile.vector.VectorTileLayer;
|
||||
import org.oscim.layers.tile.vector.labeling.LabelLayer;
|
||||
import org.oscim.theme.VtmThemes;
|
||||
import org.oscim.tiling.source.OkHttpEngine;
|
||||
import org.oscim.tiling.source.UrlTileSource;
|
||||
import org.oscim.tiling.source.bitmap.DefaultSources;
|
||||
import org.oscim.tiling.source.mvt.MapilionMvtTileSource;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public class MapilionMvtActivity extends MapActivity {
|
||||
|
||||
// Metered API key for demonstration purposes
|
||||
private static final String API_KEY = "3b3d8353-0fb8-4513-bfe0-d620b2d77c45";
|
||||
|
||||
private static final boolean USE_CACHE = false;
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
OkHttpClient.Builder builder = new OkHttpClient.Builder();
|
||||
if (USE_CACHE) {
|
||||
// Cache the tiles into file system
|
||||
File cacheDirectory = new File(getExternalCacheDir(), "tiles");
|
||||
int cacheSize = 10 * 1024 * 1024; // 10 MB
|
||||
Cache cache = new Cache(cacheDirectory, cacheSize);
|
||||
builder.cache(cache);
|
||||
}
|
||||
|
||||
// https://github.com/square/okhttp/issues/4053
|
||||
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT) {
|
||||
List<CipherSuite> cipherSuites = new ArrayList<>();
|
||||
List<CipherSuite> modernTlsCipherSuites = ConnectionSpec.MODERN_TLS.cipherSuites();
|
||||
if (modernTlsCipherSuites != null)
|
||||
cipherSuites.addAll(modernTlsCipherSuites);
|
||||
cipherSuites.add(CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA);
|
||||
cipherSuites.add(CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA);
|
||||
ConnectionSpec legacyTls = new ConnectionSpec.Builder(ConnectionSpec.MODERN_TLS)
|
||||
.cipherSuites(cipherSuites.toArray(new CipherSuite[0]))
|
||||
.build();
|
||||
builder.connectionSpecs(Arrays.asList(legacyTls, ConnectionSpec.CLEARTEXT));
|
||||
}
|
||||
|
||||
OkHttpEngine.OkHttpFactory factory = new OkHttpEngine.OkHttpFactory(builder);
|
||||
|
||||
UrlTileSource tileSource = MapilionMvtTileSource.builder()
|
||||
.apiKey(API_KEY)
|
||||
.httpFactory(factory)
|
||||
//.locale("en")
|
||||
.build();
|
||||
|
||||
VectorTileLayer l = mMap.setBaseMap(tileSource);
|
||||
mMap.setTheme(VtmThemes.OPENMAPTILES);
|
||||
|
||||
// Hillshading
|
||||
UrlTileSource shadedTileSource = DefaultSources.MAPILION_HILLSHADE_2
|
||||
.apiKey(API_KEY)
|
||||
.httpFactory(factory)
|
||||
.build();
|
||||
mMap.layers().add(new BitmapTileLayer(mMap, shadedTileSource));
|
||||
|
||||
mMap.layers().add(new BuildingLayer(mMap, l));
|
||||
mMap.layers().add(new LabelLayer(mMap, l));
|
||||
}
|
||||
}
|
@ -0,0 +1,316 @@
|
||||
/*
|
||||
* Copyright 2014 Hannes Janetzek
|
||||
* Copyright 2016-2021 devemux86
|
||||
* Copyright 2017 Longri
|
||||
* Copyright 2018 Gustl22
|
||||
* Copyright 2021 eddiemuc
|
||||
*
|
||||
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under the
|
||||
* terms of the GNU Lesser General Public License as published by the Free Software
|
||||
* Foundation, either version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.oscim.android.test;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.AlertDialog;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.provider.DocumentsContract;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import org.oscim.android.theme.ContentRenderTheme;
|
||||
import org.oscim.android.theme.ContentResolverResourceProvider;
|
||||
import org.oscim.backend.CanvasAdapter;
|
||||
import org.oscim.core.MapElement;
|
||||
import org.oscim.core.MapPosition;
|
||||
import org.oscim.core.Tag;
|
||||
import org.oscim.core.Tile;
|
||||
import org.oscim.layers.TileGridLayer;
|
||||
import org.oscim.layers.tile.MapTile;
|
||||
import org.oscim.layers.tile.buildings.BuildingLayer;
|
||||
import org.oscim.layers.tile.buildings.S3DBLayer;
|
||||
import org.oscim.layers.tile.vector.VectorTileLayer;
|
||||
import org.oscim.layers.tile.vector.labeling.LabelLayer;
|
||||
import org.oscim.renderer.BitmapRenderer;
|
||||
import org.oscim.renderer.GLViewport;
|
||||
import org.oscim.renderer.bucket.RenderBuckets;
|
||||
import org.oscim.scalebar.*;
|
||||
import org.oscim.theme.*;
|
||||
import org.oscim.theme.styles.AreaStyle;
|
||||
import org.oscim.theme.styles.RenderStyle;
|
||||
import org.oscim.tiling.source.mapfile.MapFileTileSource;
|
||||
import org.oscim.tiling.source.mapfile.MapInfo;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.io.BufferedInputStream;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
import java.util.zip.ZipInputStream;
|
||||
|
||||
public class MapsforgeActivity extends MapActivity {
|
||||
|
||||
private static final Logger log = LoggerFactory.getLogger(MapsforgeActivity.class);
|
||||
|
||||
static final int SELECT_MAP_FILE = 0;
|
||||
private static final int SELECT_THEME_ARCHIVE = 1;
|
||||
private static final int SELECT_THEME_DIR = 2;
|
||||
static final int SELECT_THEME_FILE = 3;
|
||||
|
||||
private static final Tag ISSEA_TAG = new Tag("natural", "issea");
|
||||
private static final Tag NOSEA_TAG = new Tag("natural", "nosea");
|
||||
private static final Tag SEA_TAG = new Tag("natural", "sea");
|
||||
|
||||
private TileGridLayer mGridLayer;
|
||||
private Menu mMenu;
|
||||
private final boolean mS3db;
|
||||
IRenderTheme mTheme;
|
||||
VectorTileLayer mTileLayer;
|
||||
private Uri mThemeDirUri;
|
||||
|
||||
public MapsforgeActivity() {
|
||||
this(false);
|
||||
}
|
||||
|
||||
public MapsforgeActivity(boolean s3db) {
|
||||
super();
|
||||
mS3db = s3db;
|
||||
}
|
||||
|
||||
public MapsforgeActivity(boolean s3db, int contentView) {
|
||||
super(contentView);
|
||||
mS3db = s3db;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
Intent intent = new Intent(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT ? Intent.ACTION_OPEN_DOCUMENT : Intent.ACTION_GET_CONTENT);
|
||||
intent.addCategory(Intent.CATEGORY_OPENABLE);
|
||||
intent.setType("*/*");
|
||||
startActivityForResult(intent, SELECT_MAP_FILE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
getMenuInflater().inflate(R.menu.theme_menu, menu);
|
||||
mMenu = menu;
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
int itemId = item.getItemId();
|
||||
if (itemId == R.id.theme_default) {
|
||||
if (mTheme != null)
|
||||
mTheme.dispose();
|
||||
mTheme = mMap.setTheme(VtmThemes.DEFAULT);
|
||||
item.setChecked(true);
|
||||
return true;
|
||||
} else if (itemId == R.id.theme_osmarender) {
|
||||
if (mTheme != null)
|
||||
mTheme.dispose();
|
||||
mTheme = mMap.setTheme(VtmThemes.OSMARENDER);
|
||||
item.setChecked(true);
|
||||
return true;
|
||||
} else if (itemId == R.id.theme_osmagray) {
|
||||
if (mTheme != null)
|
||||
mTheme.dispose();
|
||||
mTheme = mMap.setTheme(VtmThemes.OSMAGRAY);
|
||||
item.setChecked(true);
|
||||
return true;
|
||||
} else if (itemId == R.id.theme_tubes) {
|
||||
if (mTheme != null)
|
||||
mTheme.dispose();
|
||||
mTheme = mMap.setTheme(VtmThemes.TRONRENDER);
|
||||
item.setChecked(true);
|
||||
return true;
|
||||
} else if (itemId == R.id.theme_newtron) {
|
||||
if (mTheme != null)
|
||||
mTheme.dispose();
|
||||
mTheme = mMap.setTheme(VtmThemes.NEWTRON);
|
||||
item.setChecked(true);
|
||||
return true;
|
||||
} else if (itemId == R.id.theme_external_archive) {
|
||||
Intent intent = new Intent(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT ? Intent.ACTION_OPEN_DOCUMENT : Intent.ACTION_GET_CONTENT);
|
||||
intent.addCategory(Intent.CATEGORY_OPENABLE);
|
||||
intent.setType("*/*");
|
||||
startActivityForResult(intent, SELECT_THEME_ARCHIVE);
|
||||
return true;
|
||||
} else if (itemId == R.id.theme_external) {
|
||||
Intent intent;
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP)
|
||||
return false;
|
||||
intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
|
||||
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
|
||||
startActivityForResult(intent, SELECT_THEME_DIR);
|
||||
return true;
|
||||
} else if (itemId == R.id.gridlayer) {
|
||||
if (item.isChecked()) {
|
||||
item.setChecked(false);
|
||||
mMap.layers().remove(mGridLayer);
|
||||
} else {
|
||||
item.setChecked(true);
|
||||
if (mGridLayer == null)
|
||||
mGridLayer = new TileGridLayer(mMap);
|
||||
|
||||
mMap.layers().add(mGridLayer);
|
||||
}
|
||||
mMap.updateMap(true);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
|
||||
if (requestCode == SELECT_MAP_FILE) {
|
||||
if (resultCode != Activity.RESULT_OK || data == null) {
|
||||
finish();
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
Uri uri = data.getData();
|
||||
|
||||
MapFileTileSource tileSource = new MapFileTileSource();
|
||||
//tileSource.setPreferredLanguage("en");
|
||||
FileInputStream fis = (FileInputStream) getContentResolver().openInputStream(uri);
|
||||
tileSource.setMapFileInputStream(fis);
|
||||
|
||||
mTileLayer = mMap.setBaseMap(tileSource);
|
||||
loadTheme(null);
|
||||
|
||||
if (mS3db)
|
||||
mMap.layers().add(new S3DBLayer(mMap, mTileLayer));
|
||||
else
|
||||
mMap.layers().add(new BuildingLayer(mMap, mTileLayer));
|
||||
mMap.layers().add(new LabelLayer(mMap, mTileLayer));
|
||||
|
||||
DefaultMapScaleBar mapScaleBar = new DefaultMapScaleBar(mMap);
|
||||
mapScaleBar.setScaleBarMode(DefaultMapScaleBar.ScaleBarMode.BOTH);
|
||||
mapScaleBar.setDistanceUnitAdapter(MetricUnitAdapter.INSTANCE);
|
||||
mapScaleBar.setSecondaryDistanceUnitAdapter(ImperialUnitAdapter.INSTANCE);
|
||||
mapScaleBar.setScaleBarPosition(MapScaleBar.ScaleBarPosition.BOTTOM_LEFT);
|
||||
|
||||
MapScaleBarLayer mapScaleBarLayer = new MapScaleBarLayer(mMap, mapScaleBar);
|
||||
BitmapRenderer renderer = mapScaleBarLayer.getRenderer();
|
||||
renderer.setPosition(GLViewport.Position.BOTTOM_LEFT);
|
||||
renderer.setOffset(5 * CanvasAdapter.getScale(), 0);
|
||||
mMap.layers().add(mapScaleBarLayer);
|
||||
|
||||
MapInfo info = tileSource.getMapInfo();
|
||||
if (!info.boundingBox.contains(mMap.getMapPosition().getGeoPoint())) {
|
||||
MapPosition pos = new MapPosition();
|
||||
pos.setByBoundingBox(info.boundingBox, Tile.SIZE * 4, Tile.SIZE * 4);
|
||||
mMap.setMapPosition(pos);
|
||||
mPrefs.clear();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage());
|
||||
finish();
|
||||
}
|
||||
} else if (requestCode == SELECT_THEME_ARCHIVE) {
|
||||
if (resultCode != Activity.RESULT_OK || data == null)
|
||||
return;
|
||||
|
||||
try {
|
||||
final Uri uri = data.getData();
|
||||
|
||||
final List<String> xmlThemes = ZipXmlThemeResourceProvider.scanXmlThemes(new ZipInputStream(new BufferedInputStream(getContentResolver().openInputStream(uri))));
|
||||
if (xmlThemes.isEmpty())
|
||||
return;
|
||||
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(this);
|
||||
builder.setTitle(R.string.dialog_theme_title);
|
||||
builder.setSingleChoiceItems(xmlThemes.toArray(new String[0]), -1, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
try {
|
||||
dialog.dismiss();
|
||||
ThemeFile theme = new ZipRenderTheme(xmlThemes.get(which), new ZipXmlThemeResourceProvider(new ZipInputStream(new BufferedInputStream(getContentResolver().openInputStream(uri)))));
|
||||
if (mTheme != null)
|
||||
mTheme.dispose();
|
||||
mTheme = mMap.setTheme(theme);
|
||||
mapsforgeTheme(mTheme);
|
||||
mMenu.findItem(R.id.theme_external_archive).setChecked(true);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
});
|
||||
builder.show();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
} else if (requestCode == SELECT_THEME_DIR) {
|
||||
if (resultCode != Activity.RESULT_OK || data == null)
|
||||
return;
|
||||
|
||||
mThemeDirUri = data.getData();
|
||||
|
||||
// Now we have the directory for resources, but we need to let the user also select a theme file
|
||||
Intent intent = new Intent(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT ? Intent.ACTION_OPEN_DOCUMENT : Intent.ACTION_GET_CONTENT);
|
||||
intent.addCategory(Intent.CATEGORY_OPENABLE);
|
||||
intent.setType("*/*");
|
||||
intent.putExtra(DocumentsContract.EXTRA_INITIAL_URI, mThemeDirUri);
|
||||
startActivityForResult(intent, SELECT_THEME_FILE);
|
||||
} else if (requestCode == SELECT_THEME_FILE) {
|
||||
if (resultCode != Activity.RESULT_OK || data == null)
|
||||
return;
|
||||
|
||||
Uri uri = data.getData();
|
||||
ThemeFile theme = new ContentRenderTheme(getContentResolver(), uri);
|
||||
theme.setResourceProvider(new ContentResolverResourceProvider(getContentResolver(), mThemeDirUri));
|
||||
|
||||
if (mTheme != null)
|
||||
mTheme.dispose();
|
||||
mTheme = mMap.setTheme(theme);
|
||||
mapsforgeTheme(mTheme);
|
||||
mMenu.findItem(R.id.theme_external).setChecked(true);
|
||||
}
|
||||
}
|
||||
|
||||
protected void loadTheme(final String styleId) {
|
||||
if (mTheme != null)
|
||||
mTheme.dispose();
|
||||
mTheme = mMap.setTheme(VtmThemes.DEFAULT);
|
||||
}
|
||||
|
||||
private void mapsforgeTheme(IRenderTheme theme) {
|
||||
if (!theme.isMapsforgeTheme())
|
||||
return;
|
||||
|
||||
// Use tessellation with sea and land for Mapsforge themes
|
||||
mTileLayer.addHook(new VectorTileLayer.TileLoaderThemeHook() {
|
||||
@Override
|
||||
public boolean process(MapTile tile, RenderBuckets buckets, MapElement element, RenderStyle style, int level) {
|
||||
if (element.tags.contains(ISSEA_TAG) || element.tags.contains(SEA_TAG) || element.tags.contains(NOSEA_TAG)) {
|
||||
if (style instanceof AreaStyle)
|
||||
((AreaStyle) style).mesh = true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void complete(MapTile tile, boolean success) {
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
@ -1,135 +0,0 @@
|
||||
/*
|
||||
* Copyright 2014 Hannes Janetzek
|
||||
* Copyright 2016 devemux86
|
||||
*
|
||||
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under the
|
||||
* terms of the GNU Lesser General Public License as published by the Free Software
|
||||
* Foundation, either version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.oscim.android.test;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
|
||||
import org.oscim.android.filepicker.FilePicker;
|
||||
import org.oscim.android.filepicker.FilterByFileExtension;
|
||||
import org.oscim.android.filepicker.ValidMapFile;
|
||||
import org.oscim.core.MapPosition;
|
||||
import org.oscim.core.Tile;
|
||||
import org.oscim.layers.TileGridLayer;
|
||||
import org.oscim.layers.tile.buildings.BuildingLayer;
|
||||
import org.oscim.layers.tile.vector.VectorTileLayer;
|
||||
import org.oscim.layers.tile.vector.labeling.LabelLayer;
|
||||
import org.oscim.theme.VtmThemes;
|
||||
import org.oscim.tiling.source.mapfile.MapFileTileSource;
|
||||
import org.oscim.tiling.source.mapfile.MapInfo;
|
||||
|
||||
public class MapsforgeMapActivity extends MapActivity {
|
||||
private static final int SELECT_MAP_FILE = 0;
|
||||
|
||||
private TileGridLayer mGridLayer;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
startActivityForResult(new Intent(this, MapFilePicker.class),
|
||||
SELECT_MAP_FILE);
|
||||
}
|
||||
|
||||
public static class MapFilePicker extends FilePicker {
|
||||
public MapFilePicker() {
|
||||
setFileDisplayFilter(new FilterByFileExtension(".map"));
|
||||
setFileSelectFilter(new ValidMapFile());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
getMenuInflater().inflate(R.menu.theme_menu, menu);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
|
||||
switch (item.getItemId()) {
|
||||
case R.id.theme_default:
|
||||
mMap.setTheme(VtmThemes.DEFAULT);
|
||||
item.setChecked(true);
|
||||
return true;
|
||||
|
||||
case R.id.theme_tubes:
|
||||
mMap.setTheme(VtmThemes.TRONRENDER);
|
||||
item.setChecked(true);
|
||||
return true;
|
||||
|
||||
case R.id.theme_osmarender:
|
||||
mMap.setTheme(VtmThemes.OSMARENDER);
|
||||
item.setChecked(true);
|
||||
return true;
|
||||
|
||||
case R.id.theme_newtron:
|
||||
mMap.setTheme(VtmThemes.NEWTRON);
|
||||
item.setChecked(true);
|
||||
return true;
|
||||
|
||||
case R.id.gridlayer:
|
||||
if (item.isChecked()) {
|
||||
item.setChecked(false);
|
||||
mMap.layers().remove(mGridLayer);
|
||||
} else {
|
||||
item.setChecked(true);
|
||||
if (mGridLayer == null)
|
||||
mGridLayer = new TileGridLayer(mMap);
|
||||
|
||||
mMap.layers().add(mGridLayer);
|
||||
}
|
||||
mMap.updateMap(true);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
|
||||
|
||||
if (requestCode == SELECT_MAP_FILE) {
|
||||
if (resultCode != RESULT_OK || intent == null || intent.getStringExtra(FilePicker.SELECTED_FILE) == null) {
|
||||
finish();
|
||||
return;
|
||||
}
|
||||
|
||||
MapFileTileSource tileSource = new MapFileTileSource();
|
||||
tileSource.setPreferredLanguage("en");
|
||||
String file = intent.getStringExtra(FilePicker.SELECTED_FILE);
|
||||
if (tileSource.setMapFile(file)) {
|
||||
|
||||
VectorTileLayer l = mMap.setBaseMap(tileSource);
|
||||
mMap.setTheme(VtmThemes.DEFAULT);
|
||||
|
||||
mMap.layers().add(new BuildingLayer(mMap, l));
|
||||
mMap.layers().add(new LabelLayer(mMap, l));
|
||||
|
||||
MapInfo info = tileSource.getMapInfo();
|
||||
MapPosition pos = new MapPosition();
|
||||
pos.setByBoundingBox(info.boundingBox, Tile.SIZE * 4, Tile.SIZE * 4);
|
||||
mMap.setMapPosition(pos);
|
||||
|
||||
mPrefs.clear();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
/*
|
||||
* Copyright 2018 devemux86
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under the
|
||||
* terms of the GNU Lesser General Public License as published by the Free Software
|
||||
* Foundation, either version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.oscim.android.test;
|
||||
|
||||
public class MapsforgeS3DBActivity extends MapsforgeActivity {
|
||||
|
||||
public MapsforgeS3DBActivity() {
|
||||
super(true);
|
||||
}
|
||||
}
|