Skip to content

Instantly share code, notes, and snippets.

@enjalot
Last active December 13, 2015 22:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save enjalot/fb7f3d696167e9b83a72 to your computer and use it in GitHub Desktop.
Save enjalot/fb7f3d696167e9b83a72 to your computer and use it in GitHub Desktop.
mapbox-gl transforms

A hacky attempt to overlay a 3D transformed SVG on top of a mapbox-gl map. This allows for perspective rendering of our 2D drawings. This enables us to use all the power of d3 for rendering in 2D and still display it in the sexy mapbox-gl context.

Built with blockbuilder.org

lat lng
51.475542 -0.038495
51.54907 -0.038173
51.476571 -0.038108
51.487963 -0.037947
51.475435 -0.037937
51.567367 -0.03775
51.527836 -0.03732
51.475188 -0.037175
51.475542 -0.037153
51.475658 -0.037089
51.475803 -0.036778
51.475843 -0.036252
51.545587 -0.036177
51.475653 -0.036123
51.480798 -0.035609
51.506618 -0.03548
51.486106 -0.035372
51.465945 -0.035212
51.47617 -0.035104
51.474587 -0.034943
51.486076 -0.034825
51.477651 -0.034589
51.490428 -0.034364
51.47748 -0.033838
51.508862 -0.033774
51.524585 -0.03376
51.505864 -0.033591
51.48465 -0.033484
51.476017 -0.033388
51.525753 -0.033087
51.505129 -0.032819
51.475663 -0.032722
51.529892 -0.032669
51.501349 -0.032508
51.54921 -0.031896
51.529204 -0.031843
51.483995 -0.03181
51.54504 -0.031156
51.48475 -0.031049
51.551525 -0.03087
51.475462 -0.030663
51.51176 -0.030502
51.525486 -0.030298
51.470965 -0.029944
51.509103 -0.029869
51.53812 -0.029343
51.521579 -0.028524
51.512895 -0.028066
51.536052 -0.02754
51.475141 -0.02732
51.475876 -0.027288
51.526901 -0.026843
51.526901 -0.026843
51.475168 -0.026757
51.538895 -0.026682
51.504244 0.026682
51.479952 -0.026323
51.478857 -0.026242
51.497248 -0.02621
51.474767 -0.026178
51.478753 -0.026103
51.478733 -0.026087
51.477915 -0.026081
51.476879 -0.026019
51.48019 -0.025936
51.477741 -0.025894
51.477567 -0.025856
51.502745 -0.025684
51.480714 -0.02547
51.526981 -0.025427
51.474734 -0.025389
51.474773 -0.025148
51.485632 -0.025116
51.474694 -0.025022
51.526875 -0.024869
51.479679 -0.024729
51.474557 -0.02459
51.492118 -0.024306
51.527629 -0.024188
51.542535 -0.024118
51.543045 -0.024043
51.474319 -0.023893
51.543078 -0.023823
51.476251 -0.023603
51.527591 -0.02355
51.543702 -0.023362
51.467402 -0.023088
51.542578 -0.022948
51.54464 -0.022877
51.538647 -0.022723
51.541261 -0.022573
51.53124 -0.022348
51.538378 -0.021972
51.534981 -0.021768
51.528296 -0.021682
51.536779 -0.021446
51.536866 -0.021232
51.540153 -0.021092
51.540703 -0.020806
51.538808 -0.020642
51.505 -0.020333
51.539468 -0.020202
51.514705 -0.019735
51.528366 -0.019665
51.528343 -0.019596
51.503666 -0.019333
51.478068 -0.01914
51.48036 -0.019097
51.477978 -0.019086
51.504956 -0.019043
51.502933 -0.018783
51.527482 -0.0187
51.469147 -0.018501
51.480794 -0.018196
51.529711 -0.018078
51.52857 -0.018051
51.48781 -0.017943
51.509837 -0.017595
51.480367 -0.017595
51.484329 0.017423
51.527329 -0.017359
51.481396 -0.017187
51.528857 -0.017107
51.526674 -0.017021
51.510682 -0.016779
51.486834 0.016071
51.473163 -0.014784
51.481556 -0.014752
51.523063 -0.014424
51.477935 -0.013271
51.479525 -0.012928
51.484563 0.012874
51.510825 -0.012767
51.478142 -0.012402
51.516534 -0.011898
51.524271 -0.01127
51.511266 -0.011222
51.480531 -0.010648
51.483895 -0.010643
51.486547 -0.010288
51.509219 -0.010182
51.48316 -0.010063
51.480761 -0.009891
51.489456 -0.009731
51.482906 -0.009655
51.481022 -0.009613
51.481382 -0.009548
51.509663 -0.009527
51.480792 -0.009436
51.482324 -0.009001
51.482324 -0.009001
51.482932 -0.00825
51.527322 -0.007966
51.480353 -0.007531
51.48048 -0.007209
51.52622 -0.007172
51.505967 -0.00693
51.477881 0.006201
51.483652 -0.005934
51.504731 0.005855
51.483564 -0.005589
51.483564 -0.005589
51.482839 -0.005493
51.482639 -0.0053
51.474807 0.005064
51.509363 -0.004645
51.523924 -0.004098
51.475502 -0.003755
51.509376 -0.003529
51.508281 0.0031
51.510191 -0.002993
51.478062 -0.001668
51.478062 -0.001668
51.478065 -0.001469
51.486848 0.001427
51.486848 0.001427
51.477798 -0.001212
51.477674 -0.001158
51.5073509 -0.1277583
51.5145956 -0.33857
51.5073509 -0.1277583
51.51312000000001 -0.127595
51.5073509 -0.1277583
51.51043199999999 -0.1299702
51.5155598 -0.1161289
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5117321 -0.1232697
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5149571 -0.1211454
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5185658 -0.1149099
51.5073509 -0.1277583
51.5073509 -0.1277583
51.515861 -0.129694
51.5073509 -0.1277583
51.51508990000001 -0.1336483
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5231081 -0.1292042
51.52150289999999 -0.1203547
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5247339 -0.1369032
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5296213 -0.2012849
51.5232581 -0.1842212
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5289223 -0.2014895
51.56222289999999 -0.1985282
51.5073509 -0.1277583
51.4971813 -0.2019931
51.5043483 -0.1975741
51.5202428 -0.1702298
51.5171041 -0.1728799
51.52064799999999 -0.1782033
51.5096281 -0.1703541
51.5073509 -0.1277583
51.5073509 -0.1277583
51.52111 -0.20104
51.5124887 -0.1824116
51.5148513 -0.1938418
51.51433309999999 -0.1761285
51.5073509 -0.1277583
51.5157727 -0.1647027
51.51651769999999 -0.1766506
51.5176717 -0.1738984
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5134339 -0.183801
51.5136609 -0.1132125
51.51359249999999 -0.1668292
51.520272 -0.135336
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5161319 -0.1473296
51.5145956 -0.33857
51.5073509 -0.1277583
51.5134907 -0.1345023
51.5073509 -0.1277583
51.538309 -0.2071641
51.5207027 -0.1344628
51.5073509 -0.1277583
51.5136143 -0.1365486
51.5098192 -0.1310514
51.5073509 -0.1277583
51.513481 -0.14655
51.5073509 -0.1277583
51.5111972 -0.1347663
51.5073509 -0.1277583
51.5136143 -0.1365486
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5226389 -0.14044
51.5109735 -0.1508328
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5124411 -0.1318767
51.51801400000001 -0.1354301
51.5060812 -0.149544
51.5222916 -0.1387333
51.5073509 -0.1277583
51.5138699 -0.1396175
51.5073509 -0.1277583
51.5136143 -0.1365486
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5156031 -0.161764
51.5244218 -0.1664283
51.5192139 -0.144492
51.5107896 -0.1317263
51.518169 -0.1430276
51.5038277 -0.1019775
51.5073509 -0.1277583
51.50259759999999 -0.1517873
51.5073509 -0.1277583
51.466427 -0.123675
51.4923886 -0.1050748
51.5073509 -0.1277583
51.4723055 -0.1220312
51.5073509 -0.1277583
51.5073509 -0.1277583
51.4697136 -0.1189939
51.4660641 -0.102184
51.5073509 -0.1277583
51.4775697 -0.112791
51.5073509 -0.1277583
51.5353974 -0.1147066
51.478284 -0.1142466
51.4815584 -0.0264139
51.47551540000001 -0.1378307
51.4819076 -0.1251319
51.5073509 -0.1277583
51.4716916 -0.1331236
51.47551540000001 -0.1378307
51.5073509 -0.1277583
51.49662499999999 -0.1634219
51.4789481 -0.2086299
51.5007732 -0.1781484
51.5073509 -0.1277583
51.5073509 -0.1277583
51.498034 -0.1799239
51.501382 -0.176053
51.5237433 -0.0668366
51.5010095 -0.1932794
51.5010095 -0.1932794
51.4980918 -0.1814716
51.4978095 -0.1745235
51.4998446 -0.1772095
51.5073509 -0.1277583
51.5010095 -0.1932794
51.500633 -0.1691499
51.5073509 -0.1277583
51.4998069 -0.1691373
51.49671499999999 -0.1763672
51.49432 -0.18263
51.46929979999999 -0.2116285
51.48220569999999 -0.1969622
51.4696946 -0.2101711
51.47906760000001 -0.1920313
51.4667798 -0.2131116
51.480068 -0.189926
51.4806908 -0.2111959
51.4773313 -0.2017231
51.480068 -0.189926
51.5073509 -0.1277583
51.4844337 -0.2049439
51.4769525 -0.2096969
51.4788475 -0.1982514
51.4773313 -0.2017231
51.4735744 -0.1993563
51.47949980000001 -0.1990462
51.3912756 -0.2470864
51.4804417 -0.2037237
51.480677 -0.2058802
51.3912756 -0.2470864
51.4811556 -0.1987405
51.480677 -0.2058802
51.480239 -0.1966625
51.5073509 -0.1277583
51.48971969999999 -0.189263
51.5073509 -0.1277583
51.49034049999999 -0.1958622
51.49375029999999 -0.1943072
51.49211829999999 -0.193179
51.49034049999999 -0.1958622
51.4933169 -0.1921479
51.490643 -0.1887315
51.493726 -0.1932648
51.4904986 -0.1991069
51.5073509 -0.1277583
51.48727 -0.19558
51.46231 -0.13857
51.4578309 -0.1481652
51.457819 -0.1427723
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.4621432 -0.1399972
51.48450330000001 -0.1751143
51.4832845 -0.1692853
51.485093 -0.174936
51.485093 -0.174936
51.4846367 -0.1606804
51.4919309 -0.1617253
51.48324119999999 -0.1672116
51.485093 -0.174936
51.485093 -0.174936
51.485093 -0.174936
51.4999574 -0.1635268
51.4946147 -0.1628318
51.4899368 -0.1668178
51.50856779999999 -0.0685133
51.485093 -0.174936
51.4860982 -0.1613697
51.485093 -0.174936
51.5073509 -0.1277583
51.5073509 -0.1277583
51.4870463 -0.1625369
51.5073509 -0.1277583
51.5073509 -0.1277583
51.524765 -0.092719
51.5073509 -0.1277583
51.4791075 -0.1564981
51.4818232 -0.1443989
51.477992 -0.14823
51.5073509 -0.1277583
51.5073509 -0.1277583
51.4852999 -0.1911445
51.4891792 -0.1841048
51.4848806 -0.1786719
51.4894353 -0.1819277
51.4879591 -0.1876951
51.4782173 -0.1816507
51.656737 -0.107869
51.479647 -0.1785303
51.5073509 -0.1277583
51.485093 -0.174936
51.5073509 -0.1277583
51.5073509 -0.1277583
51.483365 -0.1765175
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.4997002 -0.1544549
51.5083894 -0.1394816
51.5024597 -0.1348109
51.4572897 -0.205565
51.5073509 -0.1277583
51.5008748 -0.1223288
51.5073509 -0.1277583
51.5073509 -0.1277583
51.4939534 -0.1260942
51.4985447 -0.1407959
51.4959119 -0.1476978
51.4998438 -0.1258632
51.5073509 -0.1277583
51.5073509 -0.1277583
51.4915335 -0.1290035
51.4908194 -0.1528763
51.5073509 -0.1277583
51.5073509 -0.1277583
51.4952103 -0.1438979
51.5073509 -0.1277583
51.5354349 -0.1403994
51.5354349 -0.1403994
51.5073509 -0.1277583
51.5073509 -0.1277583
51.49580899999999 -0.13944
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5230283 -0.124033
51.5073509 -0.1277583
51.447222 0.04805599999999999
51.4781321 -0.0259971
51.466788 -0.066991
51.4815584 -0.0264139
51.5073509 -0.1277583
51.4776179 -0.0225955
51.4815584 -0.0264139
51.5073509 -0.1277583
51.5073509 -0.1277583
51.46939 -0.02269
51.5073509 -0.1277583
51.48847749999999 -0.0364349
51.4815584 -0.0264139
51.47530279999999 -0.037763
51.479706 -0.024497
51.4894226 -0.0346273
51.5073509 -0.1277583
51.5073509 -0.1277583
51.4652843 -0.2597627
51.4815293 -0.1007667
51.475561 -0.0908654
51.47039299999999 -0.0936
51.5966598 -0.1776482
51.474191 -0.06913699999999999
51.5073509 -0.1277583
51.4792967 0.0237645
51.5073509 -0.1277583
51.5312327 0.0605822
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.4879407 -0.09556039999999999
51.4894977 -0.0836997
51.4842695 -0.0840519
51.5073509 -0.1277583
51.492568 -0.08696279999999999
51.489876 -0.09289689999999999
51.5312327 0.0605822
51.489876 -0.09289689999999999
51.5073509 -0.1277583
51.4915826 -0.0927595
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.4922908 -0.0670827
51.49858210000001 -0.0691276
51.5073509 -0.1277583
51.5073509 -0.1277583
51.4982345 -0.04599210000000001
51.5073509 -0.1277583
51.5073509 -0.1277583
51.4982345 -0.04599210000000001
51.50072900000001 -0.0582621
51.4982345 -0.04599210000000001
51.5061137 -0.1020885
51.5073509 -0.1277583
51.4624771 -0.0500312
51.4704809 -0.0446527
51.5073509 -0.1277583
51.5073509 -0.1277583
51.4711504 -0.0405998
51.5617945 -0.1904614
51.4751354 -0.0393556
51.471022 -0.040245
51.471022 -0.040245
51.5002144 -0.1907216
51.5073509 -0.1277583
51.4957428 -0.1085865
51.5073509 -0.1277583
51.4936821 -0.1007288
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.4957797 -0.1198461
51.4907797 -0.1209723
51.5073509 -0.1277583
51.4913023 -0.1144069
51.5073509 -0.1277583
51.4879638 -0.1115584
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.4941127 -0.1087635
51.5073509 -0.1277583
51.48981209999999 -0.1188038
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.48257659999999 -0.0076589
51.48257659999999 -0.0076589
51.5073509 -0.1277583
51.4477253 -0.0060468
51.5073509 -0.1277583
51.48452460000001 0.0168706
51.5073509 -0.1277583
51.5054564 -0.07535649999999999
51.4402386 -0.3722122
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.4897032 -0.0790435
51.50379909999999 -0.0980978
51.5034702 -0.0915695
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.503733 -0.0808455
51.5073509 -0.1277583
51.5005458 -0.1053294
51.49920729999999 -0.08800609999999999
51.503901 -0.0749999
51.5028201 -0.0967494
51.5147546 -0.13608
51.5010397 -0.1914084
51.5069124 -0.0911203
51.5033938 -0.08797189999999999
51.49920729999999 -0.08800609999999999
51.53640859999999 -0.161131
51.5073509 -0.1277583
51.5320336 -0.1703011
51.535228 -0.1630104
51.5073509 -0.1277583
51.53666550000001 -0.1624174
51.5367909 -0.1830032
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.53202719999999 -0.1816467
51.525431 -0.169368
51.5230806 -0.1725068
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5341304 -0.1651823
51.531786 -0.1770044
51.5073509 -0.1277583
51.52472960000001 -0.1699432
51.5303635 -0.1811704
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5533845 -0.1993421
51.536998 -0.1902147
51.5500841 -0.1996786
51.5536993 -0.1988158
51.4842932 -0.3081026
51.5073509 -0.1277583
51.5507928 -0.1357605
51.5540005 -0.1437469
51.5543385 -0.1401906
51.5507928 -0.1357605
51.6044286 -0.1906647
51.5594249 -0.1516889
51.5490134 -0.1410166
51.550371 -0.140445
51.5073509 -0.1277583
51.5036729 -0.0909644
51.5073509 -0.1277583
51.5511419 -0.1403439
51.5540005 -0.1437469
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5557554 -0.1451923
51.5473039 -0.142005
51.5073509 -0.1277583
51.556394 -0.148184
51.56001389999999 -0.1807368
51.5659834 -0.1347797
51.5604279 -0.1815351
51.4807608 0.0784633
51.5518631 -0.1673925
51.55951959999999 -0.1793808
51.5556747 -0.1763896
51.5576658 -0.1787801
51.5500682 -0.1774451
51.5556715 -0.1762025
51.55829809999999 -0.1952419
51.5408925 -0.09707189999999999
51.5585315 -0.1808132
51.5073509 -0.1277583
51.52665289999999 -0.13713
51.5266242 -0.1379941
51.5073509 -0.1277583
51.5267685 -0.1455003
51.536583 -0.158585
51.5225746 -0.1553482
51.5073509 -0.1277583
51.521323 -0.1681059
51.5347587 -0.1387293
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.53391500000001 -0.1528457
51.5759654 -0.0728738
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.4969849 -0.4043773
51.4672227 -0.2844675
51.5434163 -0.1174761
51.5439553 -0.1169043
51.5638304 -0.128907
51.5073509 -0.1277583
51.5449776 -0.1163195
51.5449776 -0.1163195
51.5597205 -0.09863659999999999
51.5527299 -0.0904895
51.5073509 -0.1277583
51.5611463 -0.0956663
51.62251999999999 -0.35751
51.557834 -0.0986749
51.5532056 -0.1118413
51.559526 -0.1023197
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.54071 -0.09625
51.5412621 -0.08813879999999999
51.52750959999999 -0.08764799999999999
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.4930774 -0.12678
51.5073509 -0.1277583
51.5301543 -0.0937163
51.5073509 -0.1277583
51.5073509 -0.1277583
51.4970217 -0.0365803
51.54071 -0.09625
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5352087 -0.0864616
51.5073509 -0.1277583
51.5313734 -0.0916302
51.4598756 -0.2193194
51.5193403 -0.1614574
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5280575 -0.0808864
51.5073509 -0.1277583
51.5412621 -0.08813879999999999
51.5280575 -0.0808864
51.514187 -0.1081125
51.5073509 -0.1277583
51.5150102 -0.1022723
51.3964689 0.0285746
51.5073509 -0.1277583
51.5162491 -0.1063938
51.5142797 -0.0995076
51.5073509 -0.1277583
51.5162491 -0.1063938
51.5073509 -0.1277583
51.5115983 -0.1096887
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.516292 -0.1023982
51.5051523 -0.0756511
51.5224984 -0.0640123
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.57113709999999 -0.09371789999999999
51.5090503 -0.0824481
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.52353910000001 0.0506279
51.5073509 -0.1277583
51.5073509 -0.1277583
51.514187 -0.1081125
51.5257373 -0.0811648
51.59268059999999 -0.1813409
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.52041149999999 -0.0864588
51.5194379 -0.090277
51.5163974 -0.08859489999999999
51.5190925 -0.0940787
51.5073509 -0.1277583
51.5190925 -0.0940787
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.52544409999999 -0.09799519999999999
51.52544409999999 -0.09799519999999999
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5182947 -0.0864325
51.51964419999999 -0.1098656
51.5073509 -0.1277583
51.5073509 -0.1277583
51.524765 -0.092719
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5073509 -0.1277583
51.5477031 -0.0464398
51.503951 -0.2390302
51.5073509 -0.1277583
51.5466698 -0.0467445
51.5073509 -0.1277583
51.5416444 -0.0700274
51.5073509 -0.1277583
51.5435837 -0.0687361
51.5432133 -0.0656592
51.5409224 -0.0601511
51.5409224 -0.0601511
51.5462484 -0.0566069
51.5416444 -0.0700274
51.5412774 -0.0646194
51.5416444 -0.0700274
51.5404108 -0.0460392
51.55809000000001 -0.0427767
51.56165 -0.057
51.55710089999999 -0.04548199999999999
51.55969200000001 -0.0499585
51.52685169999999 -0.035912
51.53077529999999 -0.0293506
51.52685169999999 -0.035912
51.5334077 -0.0414135
51.53077529999999 -0.0293506
51.52786 -0.02091
51.52694 -0.0251
51.530627 -0.028353
51.5250757 -0.0198422
51.5293597 -0.0319477
51.5304678 -0.0217884
51.53077529999999 -0.0293506
51.5304678 -0.0217884
51.53077529999999 -0.0293506
51.5269736 -0.0667204
51.52813399999999 -0.06165119999999999
51.5320788 -0.0509621
51.5257742 -0.072035
51.5273431 -0.0557257
51.52813399999999 -0.06165119999999999
51.5284258 -0.0714727
51.5340767 -0.0579732
51.5251911 -0.0672101
51.52813399999999 -0.06165119999999999
51.5238988 -0.06715399999999999
51.5268476 -0.05821320000000001
51.5312681 -0.0449973
51.5311443 -0.0675041
51.5299773 -0.07735489999999999
51.5311443 -0.0675041
51.5269736 -0.0667204
51.5269736 -0.0667204
51.5313096 -0.06335439999999999
51.5311443 -0.0675041
51.5285787 -0.0538383
51.5257742 -0.072035
51.5245866 -0.0726124
51.52813399999999 -0.06165119999999999
51.5269736 -0.0667204
51.5240625 -0.0666948
51.5097502 -0.017595
51.5124894 -0.0343247
51.5097502 -0.017595
51.5076507 -0.0237321
51.5123792 -0.0087975
51.4966118 -0.0146551
51.5054306 -0.0235333
51.5173162 -0.0153133
51.5097502 -0.017595
51.5153723 -0.004954399999999999
51.50703 -0.02028
51.5122697 -0.0106234
51.5122697 -0.0106234
51.5097502 -0.017595
51.5122697 -0.0106234
51.50703 -0.02028
51.50703 -0.02028
51.5094924 -0.0361604
51.5093218 0.005400299999999999
51.5211453 -0.0793585
51.5120687 -0.07064379999999999
51.5224161 -0.0581794
51.5240018 -0.07507319999999999
51.5195336 -0.0739712
51.5176228 -0.0557553
51.5190516 -0.0763204
51.5202262 -0.0731107
51.5176228 -0.0557553
51.5247123 -0.0769333
51.519783 -0.0711834
51.5186833 -0.077141
51.5176228 -0.0557553
51.5176228 -0.0557553
51.5032733 -0.0614962
51.5099721 -0.0596983
51.5099721 -0.0596983
51.5131111 -0.0701036
51.5192451 -0.0730208
/**
* @fileoverview gl-matrix - High performance matrix and vector operations
* @author Brandon Jones
* @author Colin MacKenzie IV
* @version 2.3.0
*/
/* Copyright (c) 2015, Brandon Jones, Colin MacKenzie IV.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE. */
!function(t,n){if("object"==typeof exports&&"object"==typeof module)module.exports=n();else if("function"==typeof define&&define.amd)define(n);else{var r=n();for(var a in r)("object"==typeof exports?exports:t)[a]=r[a]}}(this,function(){return function(t){function n(a){if(r[a])return r[a].exports;var e=r[a]={exports:{},id:a,loaded:!1};return t[a].call(e.exports,e,e.exports,n),e.loaded=!0,e.exports}var r={};return n.m=t,n.c=r,n.p="",n(0)}([function(t,n,r){n.glMatrix=r(1),n.mat2=r(2),n.mat2d=r(3),n.mat3=r(4),n.mat4=r(5),n.quat=r(6),n.vec2=r(9),n.vec3=r(7),n.vec4=r(8)},function(t,n){var r={};r.EPSILON=1e-6,r.ARRAY_TYPE="undefined"!=typeof Float32Array?Float32Array:Array,r.RANDOM=Math.random,r.setMatrixArrayType=function(t){GLMAT_ARRAY_TYPE=t};var a=Math.PI/180;r.toRadian=function(t){return t*a},t.exports=r},function(t,n,r){var a=r(1),e={};e.create=function(){var t=new a.ARRAY_TYPE(4);return t[0]=1,t[1]=0,t[2]=0,t[3]=1,t},e.clone=function(t){var n=new a.ARRAY_TYPE(4);return n[0]=t[0],n[1]=t[1],n[2]=t[2],n[3]=t[3],n},e.copy=function(t,n){return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t},e.identity=function(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=1,t},e.transpose=function(t,n){if(t===n){var r=n[1];t[1]=n[2],t[2]=r}else t[0]=n[0],t[1]=n[2],t[2]=n[1],t[3]=n[3];return t},e.invert=function(t,n){var r=n[0],a=n[1],e=n[2],u=n[3],o=r*u-e*a;return o?(o=1/o,t[0]=u*o,t[1]=-a*o,t[2]=-e*o,t[3]=r*o,t):null},e.adjoint=function(t,n){var r=n[0];return t[0]=n[3],t[1]=-n[1],t[2]=-n[2],t[3]=r,t},e.determinant=function(t){return t[0]*t[3]-t[2]*t[1]},e.multiply=function(t,n,r){var a=n[0],e=n[1],u=n[2],o=n[3],i=r[0],c=r[1],f=r[2],s=r[3];return t[0]=a*i+u*c,t[1]=e*i+o*c,t[2]=a*f+u*s,t[3]=e*f+o*s,t},e.mul=e.multiply,e.rotate=function(t,n,r){var a=n[0],e=n[1],u=n[2],o=n[3],i=Math.sin(r),c=Math.cos(r);return t[0]=a*c+u*i,t[1]=e*c+o*i,t[2]=a*-i+u*c,t[3]=e*-i+o*c,t},e.scale=function(t,n,r){var a=n[0],e=n[1],u=n[2],o=n[3],i=r[0],c=r[1];return t[0]=a*i,t[1]=e*i,t[2]=u*c,t[3]=o*c,t},e.fromRotation=function(t,n){var r=Math.sin(n),a=Math.cos(n);return t[0]=a,t[1]=r,t[2]=-r,t[3]=a,t},e.fromScaling=function(t,n){return t[0]=n[0],t[1]=0,t[2]=0,t[3]=n[1],t},e.str=function(t){return"mat2("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+")"},e.frob=function(t){return Math.sqrt(Math.pow(t[0],2)+Math.pow(t[1],2)+Math.pow(t[2],2)+Math.pow(t[3],2))},e.LDU=function(t,n,r,a){return t[2]=a[2]/a[0],r[0]=a[0],r[1]=a[1],r[3]=a[3]-t[2]*r[1],[t,n,r]},t.exports=e},function(t,n,r){var a=r(1),e={};e.create=function(){var t=new a.ARRAY_TYPE(6);return t[0]=1,t[1]=0,t[2]=0,t[3]=1,t[4]=0,t[5]=0,t},e.clone=function(t){var n=new a.ARRAY_TYPE(6);return n[0]=t[0],n[1]=t[1],n[2]=t[2],n[3]=t[3],n[4]=t[4],n[5]=t[5],n},e.copy=function(t,n){return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t[4]=n[4],t[5]=n[5],t},e.identity=function(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=1,t[4]=0,t[5]=0,t},e.invert=function(t,n){var r=n[0],a=n[1],e=n[2],u=n[3],o=n[4],i=n[5],c=r*u-a*e;return c?(c=1/c,t[0]=u*c,t[1]=-a*c,t[2]=-e*c,t[3]=r*c,t[4]=(e*i-u*o)*c,t[5]=(a*o-r*i)*c,t):null},e.determinant=function(t){return t[0]*t[3]-t[1]*t[2]},e.multiply=function(t,n,r){var a=n[0],e=n[1],u=n[2],o=n[3],i=n[4],c=n[5],f=r[0],s=r[1],h=r[2],M=r[3],l=r[4],v=r[5];return t[0]=a*f+u*s,t[1]=e*f+o*s,t[2]=a*h+u*M,t[3]=e*h+o*M,t[4]=a*l+u*v+i,t[5]=e*l+o*v+c,t},e.mul=e.multiply,e.rotate=function(t,n,r){var a=n[0],e=n[1],u=n[2],o=n[3],i=n[4],c=n[5],f=Math.sin(r),s=Math.cos(r);return t[0]=a*s+u*f,t[1]=e*s+o*f,t[2]=a*-f+u*s,t[3]=e*-f+o*s,t[4]=i,t[5]=c,t},e.scale=function(t,n,r){var a=n[0],e=n[1],u=n[2],o=n[3],i=n[4],c=n[5],f=r[0],s=r[1];return t[0]=a*f,t[1]=e*f,t[2]=u*s,t[3]=o*s,t[4]=i,t[5]=c,t},e.translate=function(t,n,r){var a=n[0],e=n[1],u=n[2],o=n[3],i=n[4],c=n[5],f=r[0],s=r[1];return t[0]=a,t[1]=e,t[2]=u,t[3]=o,t[4]=a*f+u*s+i,t[5]=e*f+o*s+c,t},e.fromRotation=function(t,n){var r=Math.sin(n),a=Math.cos(n);return t[0]=a,t[1]=r,t[2]=-r,t[3]=a,t[4]=0,t[5]=0,t},e.fromScaling=function(t,n){return t[0]=n[0],t[1]=0,t[2]=0,t[3]=n[1],t[4]=0,t[5]=0,t},e.fromTranslation=function(t,n){return t[0]=1,t[1]=0,t[2]=0,t[3]=1,t[4]=n[0],t[5]=n[1],t},e.str=function(t){return"mat2d("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+", "+t[4]+", "+t[5]+")"},e.frob=function(t){return Math.sqrt(Math.pow(t[0],2)+Math.pow(t[1],2)+Math.pow(t[2],2)+Math.pow(t[3],2)+Math.pow(t[4],2)+Math.pow(t[5],2)+1)},t.exports=e},function(t,n,r){var a=r(1),e={};e.create=function(){var t=new a.ARRAY_TYPE(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},e.fromMat4=function(t,n){return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[4],t[4]=n[5],t[5]=n[6],t[6]=n[8],t[7]=n[9],t[8]=n[10],t},e.clone=function(t){var n=new a.ARRAY_TYPE(9);return n[0]=t[0],n[1]=t[1],n[2]=t[2],n[3]=t[3],n[4]=t[4],n[5]=t[5],n[6]=t[6],n[7]=t[7],n[8]=t[8],n},e.copy=function(t,n){return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t[4]=n[4],t[5]=n[5],t[6]=n[6],t[7]=n[7],t[8]=n[8],t},e.identity=function(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},e.transpose=function(t,n){if(t===n){var r=n[1],a=n[2],e=n[5];t[1]=n[3],t[2]=n[6],t[3]=r,t[5]=n[7],t[6]=a,t[7]=e}else t[0]=n[0],t[1]=n[3],t[2]=n[6],t[3]=n[1],t[4]=n[4],t[5]=n[7],t[6]=n[2],t[7]=n[5],t[8]=n[8];return t},e.invert=function(t,n){var r=n[0],a=n[1],e=n[2],u=n[3],o=n[4],i=n[5],c=n[6],f=n[7],s=n[8],h=s*o-i*f,M=-s*u+i*c,l=f*u-o*c,v=r*h+a*M+e*l;return v?(v=1/v,t[0]=h*v,t[1]=(-s*a+e*f)*v,t[2]=(i*a-e*o)*v,t[3]=M*v,t[4]=(s*r-e*c)*v,t[5]=(-i*r+e*u)*v,t[6]=l*v,t[7]=(-f*r+a*c)*v,t[8]=(o*r-a*u)*v,t):null},e.adjoint=function(t,n){var r=n[0],a=n[1],e=n[2],u=n[3],o=n[4],i=n[5],c=n[6],f=n[7],s=n[8];return t[0]=o*s-i*f,t[1]=e*f-a*s,t[2]=a*i-e*o,t[3]=i*c-u*s,t[4]=r*s-e*c,t[5]=e*u-r*i,t[6]=u*f-o*c,t[7]=a*c-r*f,t[8]=r*o-a*u,t},e.determinant=function(t){var n=t[0],r=t[1],a=t[2],e=t[3],u=t[4],o=t[5],i=t[6],c=t[7],f=t[8];return n*(f*u-o*c)+r*(-f*e+o*i)+a*(c*e-u*i)},e.multiply=function(t,n,r){var a=n[0],e=n[1],u=n[2],o=n[3],i=n[4],c=n[5],f=n[6],s=n[7],h=n[8],M=r[0],l=r[1],v=r[2],m=r[3],p=r[4],d=r[5],A=r[6],R=r[7],w=r[8];return t[0]=M*a+l*o+v*f,t[1]=M*e+l*i+v*s,t[2]=M*u+l*c+v*h,t[3]=m*a+p*o+d*f,t[4]=m*e+p*i+d*s,t[5]=m*u+p*c+d*h,t[6]=A*a+R*o+w*f,t[7]=A*e+R*i+w*s,t[8]=A*u+R*c+w*h,t},e.mul=e.multiply,e.translate=function(t,n,r){var a=n[0],e=n[1],u=n[2],o=n[3],i=n[4],c=n[5],f=n[6],s=n[7],h=n[8],M=r[0],l=r[1];return t[0]=a,t[1]=e,t[2]=u,t[3]=o,t[4]=i,t[5]=c,t[6]=M*a+l*o+f,t[7]=M*e+l*i+s,t[8]=M*u+l*c+h,t},e.rotate=function(t,n,r){var a=n[0],e=n[1],u=n[2],o=n[3],i=n[4],c=n[5],f=n[6],s=n[7],h=n[8],M=Math.sin(r),l=Math.cos(r);return t[0]=l*a+M*o,t[1]=l*e+M*i,t[2]=l*u+M*c,t[3]=l*o-M*a,t[4]=l*i-M*e,t[5]=l*c-M*u,t[6]=f,t[7]=s,t[8]=h,t},e.scale=function(t,n,r){var a=r[0],e=r[1];return t[0]=a*n[0],t[1]=a*n[1],t[2]=a*n[2],t[3]=e*n[3],t[4]=e*n[4],t[5]=e*n[5],t[6]=n[6],t[7]=n[7],t[8]=n[8],t},e.fromTranslation=function(t,n){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=n[0],t[7]=n[1],t[8]=1,t},e.fromRotation=function(t,n){var r=Math.sin(n),a=Math.cos(n);return t[0]=a,t[1]=r,t[2]=0,t[3]=-r,t[4]=a,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},e.fromScaling=function(t,n){return t[0]=n[0],t[1]=0,t[2]=0,t[3]=0,t[4]=n[1],t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},e.fromMat2d=function(t,n){return t[0]=n[0],t[1]=n[1],t[2]=0,t[3]=n[2],t[4]=n[3],t[5]=0,t[6]=n[4],t[7]=n[5],t[8]=1,t},e.fromQuat=function(t,n){var r=n[0],a=n[1],e=n[2],u=n[3],o=r+r,i=a+a,c=e+e,f=r*o,s=a*o,h=a*i,M=e*o,l=e*i,v=e*c,m=u*o,p=u*i,d=u*c;return t[0]=1-h-v,t[3]=s-d,t[6]=M+p,t[1]=s+d,t[4]=1-f-v,t[7]=l-m,t[2]=M-p,t[5]=l+m,t[8]=1-f-h,t},e.normalFromMat4=function(t,n){var r=n[0],a=n[1],e=n[2],u=n[3],o=n[4],i=n[5],c=n[6],f=n[7],s=n[8],h=n[9],M=n[10],l=n[11],v=n[12],m=n[13],p=n[14],d=n[15],A=r*i-a*o,R=r*c-e*o,w=r*f-u*o,q=a*c-e*i,Y=a*f-u*i,g=e*f-u*c,y=s*m-h*v,x=s*p-M*v,P=s*d-l*v,E=h*p-M*m,T=h*d-l*m,b=M*d-l*p,D=A*b-R*T+w*E+q*P-Y*x+g*y;return D?(D=1/D,t[0]=(i*b-c*T+f*E)*D,t[1]=(c*P-o*b-f*x)*D,t[2]=(o*T-i*P+f*y)*D,t[3]=(e*T-a*b-u*E)*D,t[4]=(r*b-e*P+u*x)*D,t[5]=(a*P-r*T-u*y)*D,t[6]=(m*g-p*Y+d*q)*D,t[7]=(p*w-v*g-d*R)*D,t[8]=(v*Y-m*w+d*A)*D,t):null},e.str=function(t){return"mat3("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+", "+t[4]+", "+t[5]+", "+t[6]+", "+t[7]+", "+t[8]+")"},e.frob=function(t){return Math.sqrt(Math.pow(t[0],2)+Math.pow(t[1],2)+Math.pow(t[2],2)+Math.pow(t[3],2)+Math.pow(t[4],2)+Math.pow(t[5],2)+Math.pow(t[6],2)+Math.pow(t[7],2)+Math.pow(t[8],2))},t.exports=e},function(t,n,r){var a=r(1),e={};e.create=function(){var t=new a.ARRAY_TYPE(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},e.clone=function(t){var n=new a.ARRAY_TYPE(16);return n[0]=t[0],n[1]=t[1],n[2]=t[2],n[3]=t[3],n[4]=t[4],n[5]=t[5],n[6]=t[6],n[7]=t[7],n[8]=t[8],n[9]=t[9],n[10]=t[10],n[11]=t[11],n[12]=t[12],n[13]=t[13],n[14]=t[14],n[15]=t[15],n},e.copy=function(t,n){return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t[4]=n[4],t[5]=n[5],t[6]=n[6],t[7]=n[7],t[8]=n[8],t[9]=n[9],t[10]=n[10],t[11]=n[11],t[12]=n[12],t[13]=n[13],t[14]=n[14],t[15]=n[15],t},e.identity=function(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},e.transpose=function(t,n){if(t===n){var r=n[1],a=n[2],e=n[3],u=n[6],o=n[7],i=n[11];t[1]=n[4],t[2]=n[8],t[3]=n[12],t[4]=r,t[6]=n[9],t[7]=n[13],t[8]=a,t[9]=u,t[11]=n[14],t[12]=e,t[13]=o,t[14]=i}else t[0]=n[0],t[1]=n[4],t[2]=n[8],t[3]=n[12],t[4]=n[1],t[5]=n[5],t[6]=n[9],t[7]=n[13],t[8]=n[2],t[9]=n[6],t[10]=n[10],t[11]=n[14],t[12]=n[3],t[13]=n[7],t[14]=n[11],t[15]=n[15];return t},e.invert=function(t,n){var r=n[0],a=n[1],e=n[2],u=n[3],o=n[4],i=n[5],c=n[6],f=n[7],s=n[8],h=n[9],M=n[10],l=n[11],v=n[12],m=n[13],p=n[14],d=n[15],A=r*i-a*o,R=r*c-e*o,w=r*f-u*o,q=a*c-e*i,Y=a*f-u*i,g=e*f-u*c,y=s*m-h*v,x=s*p-M*v,P=s*d-l*v,E=h*p-M*m,T=h*d-l*m,b=M*d-l*p,D=A*b-R*T+w*E+q*P-Y*x+g*y;return D?(D=1/D,t[0]=(i*b-c*T+f*E)*D,t[1]=(e*T-a*b-u*E)*D,t[2]=(m*g-p*Y+d*q)*D,t[3]=(M*Y-h*g-l*q)*D,t[4]=(c*P-o*b-f*x)*D,t[5]=(r*b-e*P+u*x)*D,t[6]=(p*w-v*g-d*R)*D,t[7]=(s*g-M*w+l*R)*D,t[8]=(o*T-i*P+f*y)*D,t[9]=(a*P-r*T-u*y)*D,t[10]=(v*Y-m*w+d*A)*D,t[11]=(h*w-s*Y-l*A)*D,t[12]=(i*x-o*E-c*y)*D,t[13]=(r*E-a*x+e*y)*D,t[14]=(m*R-v*q-p*A)*D,t[15]=(s*q-h*R+M*A)*D,t):null},e.adjoint=function(t,n){var r=n[0],a=n[1],e=n[2],u=n[3],o=n[4],i=n[5],c=n[6],f=n[7],s=n[8],h=n[9],M=n[10],l=n[11],v=n[12],m=n[13],p=n[14],d=n[15];return t[0]=i*(M*d-l*p)-h*(c*d-f*p)+m*(c*l-f*M),t[1]=-(a*(M*d-l*p)-h*(e*d-u*p)+m*(e*l-u*M)),t[2]=a*(c*d-f*p)-i*(e*d-u*p)+m*(e*f-u*c),t[3]=-(a*(c*l-f*M)-i*(e*l-u*M)+h*(e*f-u*c)),t[4]=-(o*(M*d-l*p)-s*(c*d-f*p)+v*(c*l-f*M)),t[5]=r*(M*d-l*p)-s*(e*d-u*p)+v*(e*l-u*M),t[6]=-(r*(c*d-f*p)-o*(e*d-u*p)+v*(e*f-u*c)),t[7]=r*(c*l-f*M)-o*(e*l-u*M)+s*(e*f-u*c),t[8]=o*(h*d-l*m)-s*(i*d-f*m)+v*(i*l-f*h),t[9]=-(r*(h*d-l*m)-s*(a*d-u*m)+v*(a*l-u*h)),t[10]=r*(i*d-f*m)-o*(a*d-u*m)+v*(a*f-u*i),t[11]=-(r*(i*l-f*h)-o*(a*l-u*h)+s*(a*f-u*i)),t[12]=-(o*(h*p-M*m)-s*(i*p-c*m)+v*(i*M-c*h)),t[13]=r*(h*p-M*m)-s*(a*p-e*m)+v*(a*M-e*h),t[14]=-(r*(i*p-c*m)-o*(a*p-e*m)+v*(a*c-e*i)),t[15]=r*(i*M-c*h)-o*(a*M-e*h)+s*(a*c-e*i),t},e.determinant=function(t){var n=t[0],r=t[1],a=t[2],e=t[3],u=t[4],o=t[5],i=t[6],c=t[7],f=t[8],s=t[9],h=t[10],M=t[11],l=t[12],v=t[13],m=t[14],p=t[15],d=n*o-r*u,A=n*i-a*u,R=n*c-e*u,w=r*i-a*o,q=r*c-e*o,Y=a*c-e*i,g=f*v-s*l,y=f*m-h*l,x=f*p-M*l,P=s*m-h*v,E=s*p-M*v,T=h*p-M*m;return d*T-A*E+R*P+w*x-q*y+Y*g},e.multiply=function(t,n,r){var a=n[0],e=n[1],u=n[2],o=n[3],i=n[4],c=n[5],f=n[6],s=n[7],h=n[8],M=n[9],l=n[10],v=n[11],m=n[12],p=n[13],d=n[14],A=n[15],R=r[0],w=r[1],q=r[2],Y=r[3];return t[0]=R*a+w*i+q*h+Y*m,t[1]=R*e+w*c+q*M+Y*p,t[2]=R*u+w*f+q*l+Y*d,t[3]=R*o+w*s+q*v+Y*A,R=r[4],w=r[5],q=r[6],Y=r[7],t[4]=R*a+w*i+q*h+Y*m,t[5]=R*e+w*c+q*M+Y*p,t[6]=R*u+w*f+q*l+Y*d,t[7]=R*o+w*s+q*v+Y*A,R=r[8],w=r[9],q=r[10],Y=r[11],t[8]=R*a+w*i+q*h+Y*m,t[9]=R*e+w*c+q*M+Y*p,t[10]=R*u+w*f+q*l+Y*d,t[11]=R*o+w*s+q*v+Y*A,R=r[12],w=r[13],q=r[14],Y=r[15],t[12]=R*a+w*i+q*h+Y*m,t[13]=R*e+w*c+q*M+Y*p,t[14]=R*u+w*f+q*l+Y*d,t[15]=R*o+w*s+q*v+Y*A,t},e.mul=e.multiply,e.translate=function(t,n,r){var a,e,u,o,i,c,f,s,h,M,l,v,m=r[0],p=r[1],d=r[2];return n===t?(t[12]=n[0]*m+n[4]*p+n[8]*d+n[12],t[13]=n[1]*m+n[5]*p+n[9]*d+n[13],t[14]=n[2]*m+n[6]*p+n[10]*d+n[14],t[15]=n[3]*m+n[7]*p+n[11]*d+n[15]):(a=n[0],e=n[1],u=n[2],o=n[3],i=n[4],c=n[5],f=n[6],s=n[7],h=n[8],M=n[9],l=n[10],v=n[11],t[0]=a,t[1]=e,t[2]=u,t[3]=o,t[4]=i,t[5]=c,t[6]=f,t[7]=s,t[8]=h,t[9]=M,t[10]=l,t[11]=v,t[12]=a*m+i*p+h*d+n[12],t[13]=e*m+c*p+M*d+n[13],t[14]=u*m+f*p+l*d+n[14],t[15]=o*m+s*p+v*d+n[15]),t},e.scale=function(t,n,r){var a=r[0],e=r[1],u=r[2];return t[0]=n[0]*a,t[1]=n[1]*a,t[2]=n[2]*a,t[3]=n[3]*a,t[4]=n[4]*e,t[5]=n[5]*e,t[6]=n[6]*e,t[7]=n[7]*e,t[8]=n[8]*u,t[9]=n[9]*u,t[10]=n[10]*u,t[11]=n[11]*u,t[12]=n[12],t[13]=n[13],t[14]=n[14],t[15]=n[15],t},e.rotate=function(t,n,r,e){var u,o,i,c,f,s,h,M,l,v,m,p,d,A,R,w,q,Y,g,y,x,P,E,T,b=e[0],D=e[1],L=e[2],_=Math.sqrt(b*b+D*D+L*L);return Math.abs(_)<a.EPSILON?null:(_=1/_,b*=_,D*=_,L*=_,u=Math.sin(r),o=Math.cos(r),i=1-o,c=n[0],f=n[1],s=n[2],h=n[3],M=n[4],l=n[5],v=n[6],m=n[7],p=n[8],d=n[9],A=n[10],R=n[11],w=b*b*i+o,q=D*b*i+L*u,Y=L*b*i-D*u,g=b*D*i-L*u,y=D*D*i+o,x=L*D*i+b*u,P=b*L*i+D*u,E=D*L*i-b*u,T=L*L*i+o,t[0]=c*w+M*q+p*Y,t[1]=f*w+l*q+d*Y,t[2]=s*w+v*q+A*Y,t[3]=h*w+m*q+R*Y,t[4]=c*g+M*y+p*x,t[5]=f*g+l*y+d*x,t[6]=s*g+v*y+A*x,t[7]=h*g+m*y+R*x,t[8]=c*P+M*E+p*T,t[9]=f*P+l*E+d*T,t[10]=s*P+v*E+A*T,t[11]=h*P+m*E+R*T,n!==t&&(t[12]=n[12],t[13]=n[13],t[14]=n[14],t[15]=n[15]),t)},e.rotateX=function(t,n,r){var a=Math.sin(r),e=Math.cos(r),u=n[4],o=n[5],i=n[6],c=n[7],f=n[8],s=n[9],h=n[10],M=n[11];return n!==t&&(t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t[12]=n[12],t[13]=n[13],t[14]=n[14],t[15]=n[15]),t[4]=u*e+f*a,t[5]=o*e+s*a,t[6]=i*e+h*a,t[7]=c*e+M*a,t[8]=f*e-u*a,t[9]=s*e-o*a,t[10]=h*e-i*a,t[11]=M*e-c*a,t},e.rotateY=function(t,n,r){var a=Math.sin(r),e=Math.cos(r),u=n[0],o=n[1],i=n[2],c=n[3],f=n[8],s=n[9],h=n[10],M=n[11];return n!==t&&(t[4]=n[4],t[5]=n[5],t[6]=n[6],t[7]=n[7],t[12]=n[12],t[13]=n[13],t[14]=n[14],t[15]=n[15]),t[0]=u*e-f*a,t[1]=o*e-s*a,t[2]=i*e-h*a,t[3]=c*e-M*a,t[8]=u*a+f*e,t[9]=o*a+s*e,t[10]=i*a+h*e,t[11]=c*a+M*e,t},e.rotateZ=function(t,n,r){var a=Math.sin(r),e=Math.cos(r),u=n[0],o=n[1],i=n[2],c=n[3],f=n[4],s=n[5],h=n[6],M=n[7];return n!==t&&(t[8]=n[8],t[9]=n[9],t[10]=n[10],t[11]=n[11],t[12]=n[12],t[13]=n[13],t[14]=n[14],t[15]=n[15]),t[0]=u*e+f*a,t[1]=o*e+s*a,t[2]=i*e+h*a,t[3]=c*e+M*a,t[4]=f*e-u*a,t[5]=s*e-o*a,t[6]=h*e-i*a,t[7]=M*e-c*a,t},e.fromTranslation=function(t,n){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=n[0],t[13]=n[1],t[14]=n[2],t[15]=1,t},e.fromScaling=function(t,n){return t[0]=n[0],t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=n[1],t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=n[2],t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},e.fromRotation=function(t,n,r){var e,u,o,i=r[0],c=r[1],f=r[2],s=Math.sqrt(i*i+c*c+f*f);return Math.abs(s)<a.EPSILON?null:(s=1/s,i*=s,c*=s,f*=s,e=Math.sin(n),u=Math.cos(n),o=1-u,t[0]=i*i*o+u,t[1]=c*i*o+f*e,t[2]=f*i*o-c*e,t[3]=0,t[4]=i*c*o-f*e,t[5]=c*c*o+u,t[6]=f*c*o+i*e,t[7]=0,t[8]=i*f*o+c*e,t[9]=c*f*o-i*e,t[10]=f*f*o+u,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t)},e.fromXRotation=function(t,n){var r=Math.sin(n),a=Math.cos(n);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=a,t[6]=r,t[7]=0,t[8]=0,t[9]=-r,t[10]=a,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},e.fromYRotation=function(t,n){var r=Math.sin(n),a=Math.cos(n);return t[0]=a,t[1]=0,t[2]=-r,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=r,t[9]=0,t[10]=a,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},e.fromZRotation=function(t,n){var r=Math.sin(n),a=Math.cos(n);return t[0]=a,t[1]=r,t[2]=0,t[3]=0,t[4]=-r,t[5]=a,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},e.fromRotationTranslation=function(t,n,r){var a=n[0],e=n[1],u=n[2],o=n[3],i=a+a,c=e+e,f=u+u,s=a*i,h=a*c,M=a*f,l=e*c,v=e*f,m=u*f,p=o*i,d=o*c,A=o*f;return t[0]=1-(l+m),t[1]=h+A,t[2]=M-d,t[3]=0,t[4]=h-A,t[5]=1-(s+m),t[6]=v+p,t[7]=0,t[8]=M+d,t[9]=v-p,t[10]=1-(s+l),t[11]=0,t[12]=r[0],t[13]=r[1],t[14]=r[2],t[15]=1,t},e.fromRotationTranslationScale=function(t,n,r,a){var e=n[0],u=n[1],o=n[2],i=n[3],c=e+e,f=u+u,s=o+o,h=e*c,M=e*f,l=e*s,v=u*f,m=u*s,p=o*s,d=i*c,A=i*f,R=i*s,w=a[0],q=a[1],Y=a[2];return t[0]=(1-(v+p))*w,t[1]=(M+R)*w,t[2]=(l-A)*w,t[3]=0,t[4]=(M-R)*q,t[5]=(1-(h+p))*q,t[6]=(m+d)*q,t[7]=0,t[8]=(l+A)*Y,t[9]=(m-d)*Y,t[10]=(1-(h+v))*Y,t[11]=0,t[12]=r[0],t[13]=r[1],t[14]=r[2],t[15]=1,t},e.fromRotationTranslationScaleOrigin=function(t,n,r,a,e){var u=n[0],o=n[1],i=n[2],c=n[3],f=u+u,s=o+o,h=i+i,M=u*f,l=u*s,v=u*h,m=o*s,p=o*h,d=i*h,A=c*f,R=c*s,w=c*h,q=a[0],Y=a[1],g=a[2],y=e[0],x=e[1],P=e[2];return t[0]=(1-(m+d))*q,t[1]=(l+w)*q,t[2]=(v-R)*q,t[3]=0,t[4]=(l-w)*Y,t[5]=(1-(M+d))*Y,t[6]=(p+A)*Y,t[7]=0,t[8]=(v+R)*g,t[9]=(p-A)*g,t[10]=(1-(M+m))*g,t[11]=0,t[12]=r[0]+y-(t[0]*y+t[4]*x+t[8]*P),t[13]=r[1]+x-(t[1]*y+t[5]*x+t[9]*P),t[14]=r[2]+P-(t[2]*y+t[6]*x+t[10]*P),t[15]=1,t},e.fromQuat=function(t,n){var r=n[0],a=n[1],e=n[2],u=n[3],o=r+r,i=a+a,c=e+e,f=r*o,s=a*o,h=a*i,M=e*o,l=e*i,v=e*c,m=u*o,p=u*i,d=u*c;return t[0]=1-h-v,t[1]=s+d,t[2]=M-p,t[3]=0,t[4]=s-d,t[5]=1-f-v,t[6]=l+m,t[7]=0,t[8]=M+p,t[9]=l-m,t[10]=1-f-h,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},e.frustum=function(t,n,r,a,e,u,o){var i=1/(r-n),c=1/(e-a),f=1/(u-o);return t[0]=2*u*i,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=2*u*c,t[6]=0,t[7]=0,t[8]=(r+n)*i,t[9]=(e+a)*c,t[10]=(o+u)*f,t[11]=-1,t[12]=0,t[13]=0,t[14]=o*u*2*f,t[15]=0,t},e.perspective=function(t,n,r,a,e){var u=1/Math.tan(n/2),o=1/(a-e);return t[0]=u/r,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=u,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=(e+a)*o,t[11]=-1,t[12]=0,t[13]=0,t[14]=2*e*a*o,t[15]=0,t},e.perspectiveFromFieldOfView=function(t,n,r,a){var e=Math.tan(n.upDegrees*Math.PI/180),u=Math.tan(n.downDegrees*Math.PI/180),o=Math.tan(n.leftDegrees*Math.PI/180),i=Math.tan(n.rightDegrees*Math.PI/180),c=2/(o+i),f=2/(e+u);return t[0]=c,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=f,t[6]=0,t[7]=0,t[8]=-((o-i)*c*.5),t[9]=(e-u)*f*.5,t[10]=a/(r-a),t[11]=-1,t[12]=0,t[13]=0,t[14]=a*r/(r-a),t[15]=0,t},e.ortho=function(t,n,r,a,e,u,o){var i=1/(n-r),c=1/(a-e),f=1/(u-o);return t[0]=-2*i,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*c,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*f,t[11]=0,t[12]=(n+r)*i,t[13]=(e+a)*c,t[14]=(o+u)*f,t[15]=1,t},e.lookAt=function(t,n,r,u){var o,i,c,f,s,h,M,l,v,m,p=n[0],d=n[1],A=n[2],R=u[0],w=u[1],q=u[2],Y=r[0],g=r[1],y=r[2];return Math.abs(p-Y)<a.EPSILON&&Math.abs(d-g)<a.EPSILON&&Math.abs(A-y)<a.EPSILON?e.identity(t):(M=p-Y,l=d-g,v=A-y,m=1/Math.sqrt(M*M+l*l+v*v),M*=m,l*=m,v*=m,o=w*v-q*l,i=q*M-R*v,c=R*l-w*M,m=Math.sqrt(o*o+i*i+c*c),m?(m=1/m,o*=m,i*=m,c*=m):(o=0,i=0,c=0),f=l*c-v*i,s=v*o-M*c,h=M*i-l*o,m=Math.sqrt(f*f+s*s+h*h),m?(m=1/m,f*=m,s*=m,h*=m):(f=0,s=0,h=0),t[0]=o,t[1]=f,t[2]=M,t[3]=0,t[4]=i,t[5]=s,t[6]=l,t[7]=0,t[8]=c,t[9]=h,t[10]=v,t[11]=0,t[12]=-(o*p+i*d+c*A),t[13]=-(f*p+s*d+h*A),t[14]=-(M*p+l*d+v*A),t[15]=1,t)},e.str=function(t){return"mat4("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+", "+t[4]+", "+t[5]+", "+t[6]+", "+t[7]+", "+t[8]+", "+t[9]+", "+t[10]+", "+t[11]+", "+t[12]+", "+t[13]+", "+t[14]+", "+t[15]+")"},e.frob=function(t){return Math.sqrt(Math.pow(t[0],2)+Math.pow(t[1],2)+Math.pow(t[2],2)+Math.pow(t[3],2)+Math.pow(t[4],2)+Math.pow(t[5],2)+Math.pow(t[6],2)+Math.pow(t[7],2)+Math.pow(t[8],2)+Math.pow(t[9],2)+Math.pow(t[10],2)+Math.pow(t[11],2)+Math.pow(t[12],2)+Math.pow(t[13],2)+Math.pow(t[14],2)+Math.pow(t[15],2))},t.exports=e},function(t,n,r){var a=r(1),e=r(4),u=r(7),o=r(8),i={};i.create=function(){var t=new a.ARRAY_TYPE(4);return t[0]=0,t[1]=0,t[2]=0,t[3]=1,t},i.rotationTo=function(){var t=u.create(),n=u.fromValues(1,0,0),r=u.fromValues(0,1,0);return function(a,e,o){var c=u.dot(e,o);return-.999999>c?(u.cross(t,n,e),u.length(t)<1e-6&&u.cross(t,r,e),u.normalize(t,t),i.setAxisAngle(a,t,Math.PI),a):c>.999999?(a[0]=0,a[1]=0,a[2]=0,a[3]=1,a):(u.cross(t,e,o),a[0]=t[0],a[1]=t[1],a[2]=t[2],a[3]=1+c,i.normalize(a,a))}}(),i.setAxes=function(){var t=e.create();return function(n,r,a,e){return t[0]=a[0],t[3]=a[1],t[6]=a[2],t[1]=e[0],t[4]=e[1],t[7]=e[2],t[2]=-r[0],t[5]=-r[1],t[8]=-r[2],i.normalize(n,i.fromMat3(n,t))}}(),i.clone=o.clone,i.fromValues=o.fromValues,i.copy=o.copy,i.set=o.set,i.identity=function(t){return t[0]=0,t[1]=0,t[2]=0,t[3]=1,t},i.setAxisAngle=function(t,n,r){r=.5*r;var a=Math.sin(r);return t[0]=a*n[0],t[1]=a*n[1],t[2]=a*n[2],t[3]=Math.cos(r),t},i.add=o.add,i.multiply=function(t,n,r){var a=n[0],e=n[1],u=n[2],o=n[3],i=r[0],c=r[1],f=r[2],s=r[3];return t[0]=a*s+o*i+e*f-u*c,t[1]=e*s+o*c+u*i-a*f,t[2]=u*s+o*f+a*c-e*i,t[3]=o*s-a*i-e*c-u*f,t},i.mul=i.multiply,i.scale=o.scale,i.rotateX=function(t,n,r){r*=.5;var a=n[0],e=n[1],u=n[2],o=n[3],i=Math.sin(r),c=Math.cos(r);return t[0]=a*c+o*i,t[1]=e*c+u*i,t[2]=u*c-e*i,t[3]=o*c-a*i,t},i.rotateY=function(t,n,r){r*=.5;var a=n[0],e=n[1],u=n[2],o=n[3],i=Math.sin(r),c=Math.cos(r);return t[0]=a*c-u*i,t[1]=e*c+o*i,t[2]=u*c+a*i,t[3]=o*c-e*i,t},i.rotateZ=function(t,n,r){r*=.5;var a=n[0],e=n[1],u=n[2],o=n[3],i=Math.sin(r),c=Math.cos(r);return t[0]=a*c+e*i,t[1]=e*c-a*i,t[2]=u*c+o*i,t[3]=o*c-u*i,t},i.calculateW=function(t,n){var r=n[0],a=n[1],e=n[2];return t[0]=r,t[1]=a,t[2]=e,t[3]=Math.sqrt(Math.abs(1-r*r-a*a-e*e)),t},i.dot=o.dot,i.lerp=o.lerp,i.slerp=function(t,n,r,a){var e,u,o,i,c,f=n[0],s=n[1],h=n[2],M=n[3],l=r[0],v=r[1],m=r[2],p=r[3];return u=f*l+s*v+h*m+M*p,0>u&&(u=-u,l=-l,v=-v,m=-m,p=-p),1-u>1e-6?(e=Math.acos(u),o=Math.sin(e),i=Math.sin((1-a)*e)/o,c=Math.sin(a*e)/o):(i=1-a,c=a),t[0]=i*f+c*l,t[1]=i*s+c*v,t[2]=i*h+c*m,t[3]=i*M+c*p,t},i.sqlerp=function(){var t=i.create(),n=i.create();return function(r,a,e,u,o,c){return i.slerp(t,a,o,c),i.slerp(n,e,u,c),i.slerp(r,t,n,2*c*(1-c)),r}}(),i.invert=function(t,n){var r=n[0],a=n[1],e=n[2],u=n[3],o=r*r+a*a+e*e+u*u,i=o?1/o:0;return t[0]=-r*i,t[1]=-a*i,t[2]=-e*i,t[3]=u*i,t},i.conjugate=function(t,n){return t[0]=-n[0],t[1]=-n[1],t[2]=-n[2],t[3]=n[3],t},i.length=o.length,i.len=i.length,i.squaredLength=o.squaredLength,i.sqrLen=i.squaredLength,i.normalize=o.normalize,i.fromMat3=function(t,n){var r,a=n[0]+n[4]+n[8];if(a>0)r=Math.sqrt(a+1),t[3]=.5*r,r=.5/r,t[0]=(n[5]-n[7])*r,t[1]=(n[6]-n[2])*r,t[2]=(n[1]-n[3])*r;else{var e=0;n[4]>n[0]&&(e=1),n[8]>n[3*e+e]&&(e=2);var u=(e+1)%3,o=(e+2)%3;r=Math.sqrt(n[3*e+e]-n[3*u+u]-n[3*o+o]+1),t[e]=.5*r,r=.5/r,t[3]=(n[3*u+o]-n[3*o+u])*r,t[u]=(n[3*u+e]+n[3*e+u])*r,t[o]=(n[3*o+e]+n[3*e+o])*r}return t},i.str=function(t){return"quat("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+")"},t.exports=i},function(t,n,r){var a=r(1),e={};e.create=function(){var t=new a.ARRAY_TYPE(3);return t[0]=0,t[1]=0,t[2]=0,t},e.clone=function(t){var n=new a.ARRAY_TYPE(3);return n[0]=t[0],n[1]=t[1],n[2]=t[2],n},e.fromValues=function(t,n,r){var e=new a.ARRAY_TYPE(3);return e[0]=t,e[1]=n,e[2]=r,e},e.copy=function(t,n){return t[0]=n[0],t[1]=n[1],t[2]=n[2],t},e.set=function(t,n,r,a){return t[0]=n,t[1]=r,t[2]=a,t},e.add=function(t,n,r){return t[0]=n[0]+r[0],t[1]=n[1]+r[1],t[2]=n[2]+r[2],t},e.subtract=function(t,n,r){return t[0]=n[0]-r[0],t[1]=n[1]-r[1],t[2]=n[2]-r[2],t},e.sub=e.subtract,e.multiply=function(t,n,r){return t[0]=n[0]*r[0],t[1]=n[1]*r[1],t[2]=n[2]*r[2],t},e.mul=e.multiply,e.divide=function(t,n,r){return t[0]=n[0]/r[0],t[1]=n[1]/r[1],t[2]=n[2]/r[2],t},e.div=e.divide,e.min=function(t,n,r){return t[0]=Math.min(n[0],r[0]),t[1]=Math.min(n[1],r[1]),t[2]=Math.min(n[2],r[2]),t},e.max=function(t,n,r){return t[0]=Math.max(n[0],r[0]),t[1]=Math.max(n[1],r[1]),t[2]=Math.max(n[2],r[2]),t},e.scale=function(t,n,r){return t[0]=n[0]*r,t[1]=n[1]*r,t[2]=n[2]*r,t},e.scaleAndAdd=function(t,n,r,a){return t[0]=n[0]+r[0]*a,t[1]=n[1]+r[1]*a,t[2]=n[2]+r[2]*a,t},e.distance=function(t,n){var r=n[0]-t[0],a=n[1]-t[1],e=n[2]-t[2];return Math.sqrt(r*r+a*a+e*e)},e.dist=e.distance,e.squaredDistance=function(t,n){var r=n[0]-t[0],a=n[1]-t[1],e=n[2]-t[2];return r*r+a*a+e*e},e.sqrDist=e.squaredDistance,e.length=function(t){var n=t[0],r=t[1],a=t[2];return Math.sqrt(n*n+r*r+a*a)},e.len=e.length,e.squaredLength=function(t){var n=t[0],r=t[1],a=t[2];return n*n+r*r+a*a},e.sqrLen=e.squaredLength,e.negate=function(t,n){return t[0]=-n[0],t[1]=-n[1],t[2]=-n[2],t},e.inverse=function(t,n){return t[0]=1/n[0],t[1]=1/n[1],t[2]=1/n[2],t},e.normalize=function(t,n){var r=n[0],a=n[1],e=n[2],u=r*r+a*a+e*e;return u>0&&(u=1/Math.sqrt(u),t[0]=n[0]*u,t[1]=n[1]*u,t[2]=n[2]*u),t},e.dot=function(t,n){return t[0]*n[0]+t[1]*n[1]+t[2]*n[2]},e.cross=function(t,n,r){var a=n[0],e=n[1],u=n[2],o=r[0],i=r[1],c=r[2];return t[0]=e*c-u*i,t[1]=u*o-a*c,t[2]=a*i-e*o,t},e.lerp=function(t,n,r,a){var e=n[0],u=n[1],o=n[2];return t[0]=e+a*(r[0]-e),t[1]=u+a*(r[1]-u),t[2]=o+a*(r[2]-o),t},e.hermite=function(t,n,r,a,e,u){var o=u*u,i=o*(2*u-3)+1,c=o*(u-2)+u,f=o*(u-1),s=o*(3-2*u);return t[0]=n[0]*i+r[0]*c+a[0]*f+e[0]*s,t[1]=n[1]*i+r[1]*c+a[1]*f+e[1]*s,t[2]=n[2]*i+r[2]*c+a[2]*f+e[2]*s,t},e.bezier=function(t,n,r,a,e,u){var o=1-u,i=o*o,c=u*u,f=i*o,s=3*u*i,h=3*c*o,M=c*u;return t[0]=n[0]*f+r[0]*s+a[0]*h+e[0]*M,t[1]=n[1]*f+r[1]*s+a[1]*h+e[1]*M,t[2]=n[2]*f+r[2]*s+a[2]*h+e[2]*M,t},e.random=function(t,n){n=n||1;var r=2*a.RANDOM()*Math.PI,e=2*a.RANDOM()-1,u=Math.sqrt(1-e*e)*n;return t[0]=Math.cos(r)*u,t[1]=Math.sin(r)*u,t[2]=e*n,t},e.transformMat4=function(t,n,r){var a=n[0],e=n[1],u=n[2],o=r[3]*a+r[7]*e+r[11]*u+r[15];return o=o||1,t[0]=(r[0]*a+r[4]*e+r[8]*u+r[12])/o,t[1]=(r[1]*a+r[5]*e+r[9]*u+r[13])/o,t[2]=(r[2]*a+r[6]*e+r[10]*u+r[14])/o,t},e.transformMat3=function(t,n,r){var a=n[0],e=n[1],u=n[2];return t[0]=a*r[0]+e*r[3]+u*r[6],t[1]=a*r[1]+e*r[4]+u*r[7],t[2]=a*r[2]+e*r[5]+u*r[8],t},e.transformQuat=function(t,n,r){var a=n[0],e=n[1],u=n[2],o=r[0],i=r[1],c=r[2],f=r[3],s=f*a+i*u-c*e,h=f*e+c*a-o*u,M=f*u+o*e-i*a,l=-o*a-i*e-c*u;return t[0]=s*f+l*-o+h*-c-M*-i,t[1]=h*f+l*-i+M*-o-s*-c,t[2]=M*f+l*-c+s*-i-h*-o,t},e.rotateX=function(t,n,r,a){var e=[],u=[];return e[0]=n[0]-r[0],e[1]=n[1]-r[1],e[2]=n[2]-r[2],u[0]=e[0],u[1]=e[1]*Math.cos(a)-e[2]*Math.sin(a),u[2]=e[1]*Math.sin(a)+e[2]*Math.cos(a),t[0]=u[0]+r[0],t[1]=u[1]+r[1],t[2]=u[2]+r[2],t},e.rotateY=function(t,n,r,a){var e=[],u=[];return e[0]=n[0]-r[0],e[1]=n[1]-r[1],e[2]=n[2]-r[2],u[0]=e[2]*Math.sin(a)+e[0]*Math.cos(a),u[1]=e[1],u[2]=e[2]*Math.cos(a)-e[0]*Math.sin(a),t[0]=u[0]+r[0],t[1]=u[1]+r[1],t[2]=u[2]+r[2],t},e.rotateZ=function(t,n,r,a){var e=[],u=[];return e[0]=n[0]-r[0],e[1]=n[1]-r[1],e[2]=n[2]-r[2],u[0]=e[0]*Math.cos(a)-e[1]*Math.sin(a),u[1]=e[0]*Math.sin(a)+e[1]*Math.cos(a),u[2]=e[2],t[0]=u[0]+r[0],t[1]=u[1]+r[1],t[2]=u[2]+r[2],t},e.forEach=function(){var t=e.create();return function(n,r,a,e,u,o){var i,c;for(r||(r=3),a||(a=0),c=e?Math.min(e*r+a,n.length):n.length,i=a;c>i;i+=r)t[0]=n[i],t[1]=n[i+1],t[2]=n[i+2],u(t,t,o),n[i]=t[0],n[i+1]=t[1],n[i+2]=t[2];return n}}(),e.angle=function(t,n){var r=e.fromValues(t[0],t[1],t[2]),a=e.fromValues(n[0],n[1],n[2]);e.normalize(r,r),e.normalize(a,a);var u=e.dot(r,a);return u>1?0:Math.acos(u)},e.str=function(t){return"vec3("+t[0]+", "+t[1]+", "+t[2]+")"},t.exports=e},function(t,n,r){var a=r(1),e={};e.create=function(){var t=new a.ARRAY_TYPE(4);return t[0]=0,t[1]=0,t[2]=0,t[3]=0,t},e.clone=function(t){var n=new a.ARRAY_TYPE(4);return n[0]=t[0],n[1]=t[1],n[2]=t[2],n[3]=t[3],n},e.fromValues=function(t,n,r,e){var u=new a.ARRAY_TYPE(4);return u[0]=t,u[1]=n,u[2]=r,u[3]=e,u},e.copy=function(t,n){return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t},e.set=function(t,n,r,a,e){return t[0]=n,t[1]=r,t[2]=a,t[3]=e,t},e.add=function(t,n,r){return t[0]=n[0]+r[0],t[1]=n[1]+r[1],t[2]=n[2]+r[2],t[3]=n[3]+r[3],t},e.subtract=function(t,n,r){return t[0]=n[0]-r[0],t[1]=n[1]-r[1],t[2]=n[2]-r[2],t[3]=n[3]-r[3],t},e.sub=e.subtract,e.multiply=function(t,n,r){return t[0]=n[0]*r[0],t[1]=n[1]*r[1],t[2]=n[2]*r[2],t[3]=n[3]*r[3],t},e.mul=e.multiply,e.divide=function(t,n,r){return t[0]=n[0]/r[0],t[1]=n[1]/r[1],t[2]=n[2]/r[2],t[3]=n[3]/r[3],t},e.div=e.divide,e.min=function(t,n,r){return t[0]=Math.min(n[0],r[0]),t[1]=Math.min(n[1],r[1]),t[2]=Math.min(n[2],r[2]),t[3]=Math.min(n[3],r[3]),t},e.max=function(t,n,r){return t[0]=Math.max(n[0],r[0]),t[1]=Math.max(n[1],r[1]),t[2]=Math.max(n[2],r[2]),t[3]=Math.max(n[3],r[3]),t},e.scale=function(t,n,r){return t[0]=n[0]*r,t[1]=n[1]*r,t[2]=n[2]*r,t[3]=n[3]*r,t},e.scaleAndAdd=function(t,n,r,a){return t[0]=n[0]+r[0]*a,t[1]=n[1]+r[1]*a,t[2]=n[2]+r[2]*a,t[3]=n[3]+r[3]*a,t},e.distance=function(t,n){var r=n[0]-t[0],a=n[1]-t[1],e=n[2]-t[2],u=n[3]-t[3];return Math.sqrt(r*r+a*a+e*e+u*u)},e.dist=e.distance,e.squaredDistance=function(t,n){var r=n[0]-t[0],a=n[1]-t[1],e=n[2]-t[2],u=n[3]-t[3];return r*r+a*a+e*e+u*u},e.sqrDist=e.squaredDistance,e.length=function(t){var n=t[0],r=t[1],a=t[2],e=t[3];return Math.sqrt(n*n+r*r+a*a+e*e)},e.len=e.length,e.squaredLength=function(t){var n=t[0],r=t[1],a=t[2],e=t[3];return n*n+r*r+a*a+e*e},e.sqrLen=e.squaredLength,e.negate=function(t,n){return t[0]=-n[0],t[1]=-n[1],t[2]=-n[2],t[3]=-n[3],t},e.inverse=function(t,n){return t[0]=1/n[0],t[1]=1/n[1],t[2]=1/n[2],t[3]=1/n[3],t},e.normalize=function(t,n){var r=n[0],a=n[1],e=n[2],u=n[3],o=r*r+a*a+e*e+u*u;return o>0&&(o=1/Math.sqrt(o),t[0]=r*o,t[1]=a*o,t[2]=e*o,t[3]=u*o),t},e.dot=function(t,n){return t[0]*n[0]+t[1]*n[1]+t[2]*n[2]+t[3]*n[3]},e.lerp=function(t,n,r,a){var e=n[0],u=n[1],o=n[2],i=n[3];return t[0]=e+a*(r[0]-e),t[1]=u+a*(r[1]-u),t[2]=o+a*(r[2]-o),t[3]=i+a*(r[3]-i),t},e.random=function(t,n){return n=n||1,t[0]=a.RANDOM(),t[1]=a.RANDOM(),t[2]=a.RANDOM(),t[3]=a.RANDOM(),e.normalize(t,t),e.scale(t,t,n),t},e.transformMat4=function(t,n,r){var a=n[0],e=n[1],u=n[2],o=n[3];return t[0]=r[0]*a+r[4]*e+r[8]*u+r[12]*o,t[1]=r[1]*a+r[5]*e+r[9]*u+r[13]*o,t[2]=r[2]*a+r[6]*e+r[10]*u+r[14]*o,t[3]=r[3]*a+r[7]*e+r[11]*u+r[15]*o,t},e.transformQuat=function(t,n,r){var a=n[0],e=n[1],u=n[2],o=r[0],i=r[1],c=r[2],f=r[3],s=f*a+i*u-c*e,h=f*e+c*a-o*u,M=f*u+o*e-i*a,l=-o*a-i*e-c*u;return t[0]=s*f+l*-o+h*-c-M*-i,t[1]=h*f+l*-i+M*-o-s*-c,t[2]=M*f+l*-c+s*-i-h*-o,t[3]=n[3],t},e.forEach=function(){var t=e.create();return function(n,r,a,e,u,o){var i,c;for(r||(r=4),a||(a=0),c=e?Math.min(e*r+a,n.length):n.length,i=a;c>i;i+=r)t[0]=n[i],t[1]=n[i+1],t[2]=n[i+2],t[3]=n[i+3],u(t,t,o),n[i]=t[0],n[i+1]=t[1],n[i+2]=t[2],n[i+3]=t[3];return n}}(),e.str=function(t){return"vec4("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+")"},t.exports=e},function(t,n,r){var a=r(1),e={};e.create=function(){var t=new a.ARRAY_TYPE(2);return t[0]=0,t[1]=0,t},e.clone=function(t){var n=new a.ARRAY_TYPE(2);return n[0]=t[0],n[1]=t[1],n},e.fromValues=function(t,n){var r=new a.ARRAY_TYPE(2);return r[0]=t,r[1]=n,r},e.copy=function(t,n){return t[0]=n[0],t[1]=n[1],t},e.set=function(t,n,r){return t[0]=n,t[1]=r,t},e.add=function(t,n,r){return t[0]=n[0]+r[0],t[1]=n[1]+r[1],t},e.subtract=function(t,n,r){return t[0]=n[0]-r[0],t[1]=n[1]-r[1],t},e.sub=e.subtract,e.multiply=function(t,n,r){return t[0]=n[0]*r[0],t[1]=n[1]*r[1],t},e.mul=e.multiply,e.divide=function(t,n,r){return t[0]=n[0]/r[0],t[1]=n[1]/r[1],t},e.div=e.divide,e.min=function(t,n,r){return t[0]=Math.min(n[0],r[0]),t[1]=Math.min(n[1],r[1]),t},e.max=function(t,n,r){return t[0]=Math.max(n[0],r[0]),t[1]=Math.max(n[1],r[1]),t},e.scale=function(t,n,r){return t[0]=n[0]*r,t[1]=n[1]*r,t},e.scaleAndAdd=function(t,n,r,a){return t[0]=n[0]+r[0]*a,t[1]=n[1]+r[1]*a,t},e.distance=function(t,n){var r=n[0]-t[0],a=n[1]-t[1];return Math.sqrt(r*r+a*a)},e.dist=e.distance,e.squaredDistance=function(t,n){var r=n[0]-t[0],a=n[1]-t[1];return r*r+a*a},e.sqrDist=e.squaredDistance,e.length=function(t){var n=t[0],r=t[1];return Math.sqrt(n*n+r*r)},e.len=e.length,e.squaredLength=function(t){var n=t[0],r=t[1];return n*n+r*r},e.sqrLen=e.squaredLength,e.negate=function(t,n){return t[0]=-n[0],t[1]=-n[1],t},e.inverse=function(t,n){return t[0]=1/n[0],t[1]=1/n[1],t},e.normalize=function(t,n){var r=n[0],a=n[1],e=r*r+a*a;return e>0&&(e=1/Math.sqrt(e),t[0]=n[0]*e,t[1]=n[1]*e),t},e.dot=function(t,n){return t[0]*n[0]+t[1]*n[1]},e.cross=function(t,n,r){var a=n[0]*r[1]-n[1]*r[0];return t[0]=t[1]=0,t[2]=a,t},e.lerp=function(t,n,r,a){var e=n[0],u=n[1];return t[0]=e+a*(r[0]-e),t[1]=u+a*(r[1]-u),t},e.random=function(t,n){n=n||1;var r=2*a.RANDOM()*Math.PI;return t[0]=Math.cos(r)*n,t[1]=Math.sin(r)*n,t},e.transformMat2=function(t,n,r){var a=n[0],e=n[1];return t[0]=r[0]*a+r[2]*e,t[1]=r[1]*a+r[3]*e,t},e.transformMat2d=function(t,n,r){var a=n[0],e=n[1];return t[0]=r[0]*a+r[2]*e+r[4],t[1]=r[1]*a+r[3]*e+r[5],t},e.transformMat3=function(t,n,r){
var a=n[0],e=n[1];return t[0]=r[0]*a+r[3]*e+r[6],t[1]=r[1]*a+r[4]*e+r[7],t},e.transformMat4=function(t,n,r){var a=n[0],e=n[1];return t[0]=r[0]*a+r[4]*e+r[12],t[1]=r[1]*a+r[5]*e+r[13],t},e.forEach=function(){var t=e.create();return function(n,r,a,e,u,o){var i,c;for(r||(r=2),a||(a=0),c=e?Math.min(e*r+a,n.length):n.length,i=a;c>i;i+=r)t[0]=n[i],t[1]=n[i+1],u(t,t,o),n[i]=t[0],n[i+1]=t[1];return n}}(),e.str=function(t){return"vec2("+t[0]+", "+t[1]+")"},t.exports=e}])});
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.5/d3.min.js"></script>
<script src='https://api.tiles.mapbox.com/mapbox-gl-js/v0.12.0/mapbox-gl.js'></script>
<link href='https://api.tiles.mapbox.com/mapbox-gl-js/v0.12.0/mapbox-gl.css' rel='stylesheet' />
<script src="glmatrix.js"></script>
<script src="viewport.js"></script>
<style>
body { margin:0;position:fixed;top:0;right:0;bottom:0;left:0; }
#map {
position:absolute;
width: 100%;
height: 100%;
}
svg.overlay {
position: absolute;
width: 100%;
height: 100%;
}
#test {
position: absolute;
width: 100%;
height: 100%;
pointer-events: none;
}
#pitch {
position: absolute;
top: 20px;
right: 50px;
}
</style>
</head>
<body>
<div id="map"></div>
<div id="test">
<svg></svg>
</div>
<input id="pitch" type="range" min=0 max=60 step=1 value=30>
<script>
/* mapbox-gl setup */
mapboxgl.accessToken = 'pk.eyJ1IjoiZW5qYWxvdCIsImEiOiJjaWhtdmxhNTIwb25zdHBsejk0NGdhODJhIn0.2-F2hS_oTZenAWc0BMf_uw'
//Setup mapbox-gl map
var map = new mapboxgl.Map({
container: 'map', // container id
style: 'mapbox://styles/enjalot/cihmvv7kg004v91kn22zjptsc',
center: [-0.1,51.5119112],
zoom: 13.5,
})
map.scrollZoom.disable()
map.addControl(new mapboxgl.Navigation());
d3.select("#pitch").on("input", function() {
var v = +this.value
console.log(v)
map.setPitch(v)
})
var transform = map.transform;
var w = transform.width;
var h = transform.height;
console.log(w,h)
//setup our absolute overlay
var tsvg = d3.select("#test svg")
.attr({
width: w,
height: h
})
tsvg.append("rect")
.attr({
x: 10,
y: 10,
width: w - 10,
height: w - 10,
"fill-opacity": 0.1
})
// Setup our svg layer that we can manipulate with d3
var container = map.getCanvasContainer()
var svg = d3.select(container).append("svg").classed("overlay", true)
function project(d) {
return map.project(getLL(d));
}
function getLL(d) {
return new mapboxgl.LngLat(+d.lng, +d.lat)
}
d3.csv("dots.csv", function(err, data) {
//console.log(data[0], getLL(data[0]), project(data[0]))
var dots = svg.selectAll("circle.dot")
.data(data)
dots.enter().append("circle").classed("dot", true)
.attr("r", 1)
.style({
fill: "#0082a3",
"fill-opacity": 0.6,
stroke: "#004d60",
"stroke-width": 1
})
var dotso = tsvg.selectAll("circle.doto")
.data(data)
dotso.enter().append("circle").classed("doto", true)
.attr("r", 1)
.style({
fill: "#7fffa1",
"fill-opacity": 0.6,
stroke: "#004d60",
"stroke-width": 4
})
.transition().duration(1000)
.attr("r", 6)
function render() {
// We want to project our points into our absolute overlay
// without accounting for pitch and bearing
// currently using the viewport mercator module
var center = map.getCenter()
//console.log("CENTER", center, map.getZoom(), w, h)
var viewport = ViewportMercator({
longitude: center.lng,
latitude: center.lat,
zoom: map.getZoom(),
width: w,
height: h
});
var d = data[0];
console.log("d0", d, viewport.project([+d.lng,+d.lat]))
dotso
.attr({
cx: function(d) {
var x = viewport.project([+d.lng,+d.lat])[0];
return x
},
cy: function(d) {
var y = viewport.project([+d.lng,+d.lat])[1];
return y
},
})
dots
.attr({
cx: function(d) {
var x = project(d).x;
return x
},
cy: function(d) {
var y = project(d).y;
return y
},
})
reproject();
}
// re-render our visualization whenever the view changes
map.on("viewreset", function() {
render()
})
map.on("move", function() {
render()
})
// render our initial visualization
render()
})
/*
gl-matrix's functions are in global namespace
*/
map.setPitch(30)
// minor changes to map.transform._calcProjMatrix to get the
// projection in screen coordinates
function calc(altitude, _pitch, width, height, angle) {
var m = new Float64Array(16);
// Find the distance from the center point to the center top in altitude units using law of sines.
var halfFov = Math.atan(0.5 / altitude);
var topHalfSurfaceDistance = Math.sin(halfFov) * altitude / Math.sin(Math.PI / 2 - _pitch - halfFov);
// Calculate z value of the farthest fragment that should be rendered.
var farZ = Math.cos(Math.PI / 2 - _pitch) * topHalfSurfaceDistance + altitude;
mat4.perspective(m, 2 * Math.atan((height / 2) / altitude), width / height, 0.1, farZ);
mat4.translate(m, m, [0, 0, -altitude]);
// After the rotateX, z values are in pixel units. Convert them to
// altitude unites. 1 altitude unit = the screen height.
// CHANGED THIS from [1, -1, 1/height] so now we are in screen coordinates
mat4.scale(m, m, [width/2, height/2, 1 / height]);
mat4.rotateX(m, m, _pitch);
mat4.rotateZ(m, m, angle);
//mat4.translate(m, m, [-this.x, -this.y, 0]);
//console.log("m", m)
return m;
}
function reproject() {
var transform = map.transform;
var w = transform.width;
var h = transform.height;
var tm = calc(transform.altitude, transform._pitch, w, h, transform.angle)
console.log("tm", tm)
d3.select("#test svg")
//d3.select("#test")
.style("transform", "matrix3d(" + tm + ")")
}
</script>
</body>
//https://github.com/uber-common/viewport-mercator-project
// Copyright (c) 2015 Uber Technologies, Inc.
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
var PI = Math.PI;
var pow = Math.pow;
var tan = Math.tan;
var log = Math.log;
var atan = Math.atan;
var exp = Math.exp;
var DEGREES_TO_RADIANS = PI / 180;
var RADIANS_TO_DEGREES = 180 / PI;
function radians(value) {
return value * DEGREES_TO_RADIANS;
}
function degrees(value) {
return value * RADIANS_TO_DEGREES;
}
// see: https://en.wikipedia.org/wiki/Web_Mercator
function ViewportMercator(opts) {
var scale = (opts.tileSize || 512) * 0.5 / PI * pow(2, opts.zoom);
var lamda = radians(opts.longitude);
var phi = radians(opts.latitude);
var x = scale * (lamda + PI);
var y = scale * (PI - log(tan(PI * 0.25 + phi * 0.5)));
var offsetX = opts.width * 0.5 - x;
var offsetY = opts.height * 0.5 - y;
function project(lnglat2) {
var lamda2 = lnglat2[0] * DEGREES_TO_RADIANS;
var phi2 = lnglat2[1] * DEGREES_TO_RADIANS;
var x2 = scale * (lamda2 + PI);
var y2 = scale * (PI - log(tan(PI * 0.25 + phi2 * 0.5)));
return [x2 + offsetX, y2 + offsetY];
}
function unproject(xy) {
var x2 = xy[0] - offsetX;
var y2 = xy[1] - offsetY;
var lamda2 = x2 / scale - PI;
var phi2 = 2 * (atan(exp(PI - y2 / scale)) - PI * 0.25);
return [degrees(lamda2), degrees(phi2)];
}
return {project: project, unproject: unproject};
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment