xo6{x~jb;Nq*O%XW7K9W@jI{wT+Zq
z{k$0^FKW#oS>5_R)t;@G&tEU2QM>7_oO+uIy>#FENz_}2N4cCI?#El0Q=?}m_wHpo
z+w9?{3I3@YX2UPie?{Y81p|T^gJ76m0Yn%gF-?>g4gwltMhXxOM!~@-Ln8=;7x_2h
z@jny{i7P?UxuW2zkiq}8VD=z;{r@VM?@|9#!MK6!JSK^D0qH*y7WjR(Y;>n$bLUNq
zBMm^c6SqYM;xnyRCylx^%DlcWKdt$)mp~y}19GW9uPbzTY>Is)AbxXl68}DO(I6xg
z$!81)g8AW?fIuMpKtn@JO94ZWya+JnA_9#1f3f8E$gNmq3fW~6dN%gsdw~)@{O!zJ
z9rhcMR>TeDV{x)9N=YX6_N#{Fm<3crMsftwZs(0!Uo62`X1T+p8m}V|`
z;RV(PHNKLj$Xh2xB84l4X!K|I{ril8^YMexhENcYAI^u_L5yLTkqa?|0r_DFLtbNk
zxG@ZY{u_oA{`VP!*YpC@A_KC3B{g!mCDejZKhwakC1AWld~OAoJ_Ok*6$_lt2c47N
zssGs0nRwN!=D8M_vFh6L(VT3tq4mClqtbYZ+D?whYt9e%A`fOxKza1Hr&T}mHHf0N
zv*NEKtQpa!wI*=ZNTnebL{kks+Ne>9Me@Lvn+@%x{8
zC%*pIf5x)XxEnNx9Qwuu4ZYS;66WJh90fZR>`i!)ENZ&w<$pRY{FF>-2;V$e_a4f@
zou>74`+T|FD?2{_Ub)Hcks
znuU^nsHL$BTkLd(me4Nt3T*L^$KcjQ{h1-YtegiXOaMT+Fb;qK6BCq;5x0ev1n>cS$AV&LS0
zzW(Lc>(UNqptE6S&pNnVWP#u1rOje<=zC6h?a{Kz(u0eG8y7DAryAD7uSXwy>TNc)e+=lJ>fr396s#3iLVo`E|SNu&4i7P&&_6f6v^wbRCM)Rb<4!Z-`(=u9&1u#+GwztwlwS}~Zb=rQgr
zUdGOQ+&m9sFz({FdsH4W_hz{>G-P6=_l>5T2LyG-U;s+;eBb(}H+vHG@jp5CQG~4^l3b>XjiSAvW*p$w}KTj@Y7=5w5xmHb(h&D~&gnvkO1F&blt6K-xi{cOm6LEnPqQ
znv5yu=sh3mx(gy`PJg1T4DPt5mLSCPGiv~n?PJG(meKvdP*CQ`kme{CU7xIPe;xvbsEICmu
zY3|!@pHSWYTRmF?T@R+uKNtf?39`^m%(1dA27h?saly0~yYuPU
z2M+^P%l5w~`mJR)cpUD~_cPa3DXP41dd=T*Z>F`q2EJ4^wGeVDNDa%k$)
zvIoVcj#Sm4T3j#J7@LKHD%!^*C(d_RM|Ox8gdY9W{-9|X*?j2efd7W8eO@a$si{fC
zscx3sSE=&_#LsAviyma@
z(WQv~gO^oF;H;l_|o!BP)vW*sdT09AQL@n;G%xSmh+pSaSic=4wfI@=0ZnA?+p$7FU
zB%`p`s|1n*(mSceLCyYSJgKo3&&_8WEH9j$x1=H!r-W}DJkxDx^ZLm}t@(2O{WBQ?
z&aZda_|?wnvMgCbIXutH;BWjnOU6CddTqRbKULl6nwrXcEv(OVh?Zqey19wH-h9{e
z5{P=ceR!m?g}b}g?6s7mJUV-+;QF!=EIGRUZqnm)JL1SEp7UJ&d`6Q(zqsqsH{pgj
z#+{N&pmUNe8_&HIe*w5BtowT`QsjFnO}sSpwr4l-*{d_w`P604AGcPE1U+Yo98D=U
z!tNUkii==*<9Mr**j~?`uriSF090Q~RKYflvscB-NROzZ@_i1b_q?4kaR(|Nx_&o7
zC2Dw>qE;Czv!|)lEzqnx_qCY}RwA8K+n1>Q)%)C8_pNV}-L{VZJgs}8{jK@PTK}{9
zpmg=4?e}p1ft$lAQVua_mSGrQImLHvHw>yOVyUqW+Tr%)K+@`M3UEniS;gDj$>ky2otk
zdE({sUB1H~t#K<33DHfpPEMzUQWGq+(~_kW@K+QzyTkwx0Mr49tthfyq1nXoRG$vL
z`7HxqwOwzH8F$Hov6&6$+Y>DPH6>#G7zwKw79$b%m$Fm-d;B4dPhEwq*dJ@ltAqs*
zQ=tLKEsAK)_ANf25zlw5Ow+H5zCDuSQ}@^JJmFe@6PZ*QJdN*#T;jR^-B@&=*jN8J
zO-|rm%FE*ZDIrlBRpMus6!pUXnq@~WZA*x2bBN~P%lqWCIRxm92?>J@EVFDy$;nn(@UAIT^v)Ltmr;#8PG?O@oIjw$-_f5
z6WOjGb~~W^W^WgrwjDgS@6y{7Jb!|#JcT`u^cL_I5K?|CzzrdAg8B(0`3V$LZ}p3-DZ1@0fzRn5j7GIkHG8+-
zB2SKO)eTN}Vp#9j`>?iUJ)jY5bT@;|!F;TqOFBW4KO1}1`?EGPKaLEUjH12+mKJN>
z_?<1{A+4;-WPlC8roLXVVbDUO#7!`DcsiI!1OaFyCt*Da5fT4F*Eu8+o
zlWb@u#BHS*3&5Vzh!tb4#9G!5|9UKGwspEI+pi{P_}u5ivfK^+3gde%ieBI7I{_#F
zD&MEjz;J#I+(4tN;i1~QAHrdNSty6DY{Q28Q>M`cV%JdDTCU5Wg3`orcU*5kV|i>L
z5bMmD2U9GWAE`Oke28oDYqOhqjwZ_mgli@@q)j%A5>@CQs!|CQ@Nn&OJ*)`Pc9&B7
zFi0*#T#02GzKkn6M*DOnvBUhHeqnZX043EsJWtYRCe*-^XN#xhJky^v(_m?^iOTBv
zet|ISrr}$;br9oooazKNhAIZK3au&uvQl3#jF`FDHK-kznT%OcCpuI+@m%@iq()BQ
zH33|v=2so^dOidtO)kxiucC}?>vRE~Se<#h2sYlzFh5|!FiKbH5#CXo4!bF3bSrNZt3$-G#*}j)10VXD;|>hR
zUlgllYjCTzj%-Ap5PIxXzl_EM`V;e9o;*aP=3E-uB}t|yrU<9ero}y>~al&J-v~+aqOgB^mf24@yh}B;2OH@1arPu3^cX*F_h{ztlL52HKZwi
zlekO#9;=p=R_I5hs`_4LVkBb4ZSK1rqi=Z9VoBK)oAM{>J)Dx}-O@djo#Y;T7#IzuAzMc$egA2IVG*SrN7>6Oc3fk}!WN?%7*+{E7a-}tqu*n-;cvA35tf^Mx_QV>;+7Z~4#|mqKi+HJM
zY9C!Qr>{**l2O(|N%M|!aQ$G${uHLWP)pfr*J?L&kl#>PG%NG+#hp6LzaO1G@Ggu{
z*SSw@lv$QCPA%{R>x-HIw`H`tF9t2cIa9Fm
zaq?9aoU*bf?cQw%P_|P%&*9QGDacE=aC=W!K$Wk`+zGhvXtl398<`U*9w&G!`ey`S
z^HS!{!_6TVq-0VNkN?Y>&>)7Owi5V_TnJ#^EdJ)HfgU5Pz}#CgJF4gJ95s^iW$mgm
z?G?rl71_4-$-_Okenk(>~Xp-Suw6K0-HGR$1#_v$e0wbq|AGITn3?NzU#gOS%OTo
zRr&@y-5NblZ&dcseEfKx>wcE?+DRmTkwR{juQ{QwIb#;oR4gDZp&E1dQxoEpcRqf1
zi#VSOML+1ve1Ko__HCc3`uag4PxjX;IDtQoziNmrreCjcO%c}x=2$ApW{;OoIOgy@
z+Y1cICSEWolwpu3ASG#aq!(0uZEU5{To{^fETAVJ9T>s0_La*q2g~-BZPJ0-X2P$q
zx`;$(O;o?T_spCZ7Gw3{hmR{Md!D5P;d@&vW`^
z&Tg>#zJxPxSZuf?p8c4N_3S|53Sf#jA}~QvHCFzJ0~GuV?(ecl=`ra;5+{J?6}2)&IvnnOc_dKU9!Ed
zvwI{4{~*&os_mpafT}&~tvPSPHg}`^(p*Mwk@@IT1itquH=e27w~-9lVljy?f!s8FRwe#|vlE&Q9Yxe!;*;OUfZz3}@
zlV^5yB0?Rl@CivAEbyk&^s(Ms%)GZ4wTl?=#JkI+clU8b8117TE}I(-a8X-P+uoRR
zYhb}_t5k?5Axfy4PUkG-4Xt`+lEJt&>-{hB^-rDdDGaQy&<)cKYh5_TzNr#(EJ{)I
zMHWsKW-Tb`4A8T0+)D~_;a(iz!k_0%13y!%9_SVzGi@4{%B|utewHDxz(qQdlGB$$
zBbRw>Xm;&p8ZM>0P8tmVT6T<)nUfQZ=QmNEt(;ks$~%>}O)~`qZ_0=HSY@KiM@NA7m%B#?@G7+;+TwBw#heF_7iS
zspJ4vtp^`vDG<*P?Jd_4AO#E%R-r`OClhw|+X0^96F_!O#}#v52mG^iAB9J@WH@D2
zVwRLaq(KV$-v?R~J>CThS8+ZGSNmpi)3u$#j?Oh~zoHCa6Tq{a_)#Cb1*?U9ttNSL
z(k@{;VEFwQU#|ZSq2^s_oBcqFlH-qI?75K=$`7WnXI1bmr!1;7ceVx@EGvS2Y^~}K
z-!a$QHaemYvs#ksZaZdT59W2%Dd21)+K$Eb(hpLiMH$ptqK!rF_&p9adBRZOXC)b+
zMh(WA)o$e@?7^xwBkq|FxM#jac^vb>jy#P3je~Wb17IM)a?5}0^`lEM^+~St_Je$}
zyBui=iel%Xy8)QudtFL(L>ZRZ8Y(7-<)UB|QeXlXeE25f3^#yR+vk5%;xu?#{f&B_9LSao%s0
z65Y-3v)A0g)>=!v9UjtBd;B6nTgnWRl7}(XUkz^YD97`0a3(yh83{QN2c~xxNAJ^V
zKwi~MgJu+C&c$gJ#2{=w#lDKlbp9jEAsVnxvQlU6>-hx$h?So(8%N-XxJX!u#MH}Z
zR_4So(V1VJWJ*~?+ziu63TwRch_aAsEfh!bu0z_PX-~z1X9iCRyR(U=K`7xDp_Y_Y
z45sa!ZflU^;PddJ+)!r58h{#(nrf&yXTugE<5=Q!DWZr?3?ip8%W4(Z56XLl<_p;X
zfN?N~Gkh9-D!O&EYV+2x?_gWr{@89w)RG155FXSMJIgGsG9%O}>7!e^v$BcKVv`HC6#^n4jS7XO|t1Wh6!tJQ(5A52e0$eUM_a+USg_
z+Yh@skLMZY_M*$Dh$a$$g72NY;KEWi{Ua5euYt27+s71@pd3Gk4OZp%7GF$uSX~Tp
zuq21UUX_!Qr3X%@$eAXXRpx`^J
zMB~{hGu4S&U7JNTEO;>IZ22$G6fV|Jrt7p{E==~g=hM1cV11|p*rjpek>{vv&4b~B
zqNLeY;q<^Ds-(al;<_&!0B`_&qRRXJX
z^3S##2iEWrh0dPS3lnGHb{!gjUXTQ>QxhuGg^V|uIVBCd-H}#C!g~o7f-R$A;v(gi
zl%`TnltZ8;x~2GHKmx3nRZKG!XKwVR2_NPX-IA8j!wRqG4~<@Z>la10xAS{`_r#h}
zZ1FZe4jofwAjRoat;gfw#Q$Dsh-(FjcT{t~i$e20lkdD{h?_c(&q?RCZN*+?k`2Z(doX-ja7X?E}rE&gC7X45`U-QVD&?GyzJZ$DD-s
zcGcAS5>@>-wjy;+a@p!`D?DR5$M+r??<-o=*68{~ax7tfSvJ5HUzILy%s73Qc#5@r
zeT#IQJ_OAP088F!nSK~@hxj1TW6-8t!^mvZDgF2WvPnT|pmWx!@
zu2J7Cgcp|URj7M&5T=L$=}YNLwNsx0ope!{OCM(**q3Htiy=bWX+fkQ1y|1X-ckWY
z)5~Fc7fYVr>?|#FakF=y_!P(TJJ1}Pt?n{7_u
za?|#KltR5S`X|bTXzbQ1fGs{iw*)J!hRz@=>~$f*$6UoTwrT}e0NMdiu^G;|(Iykt
zY)Uqs`k_tgfmn8eHq3wf&9Z2yqWs+f>8Ut8im_-w0+nMy@V8aKaPuvtr*lcEHs$1{#<4pb2_x90c^IFb5>*5};Bn#hO{Ll=r#j#aogunQ(B%tWfM9%DTa66{b
zD?vBnoypEF*1}S*PPSnJy`xvPx61?O+sr9aK1$`n@<6AcnZP_d-3)rzx4!MMI~gs2
zF|4sol{apsrC}1cb|YS?1t_qqMuEp2J!bCqF;}T(#w83mQSVc)JqO{|soX#6OfO60
zIZxS%)LzTocYABHg$r|XJ;=D%rg@{N*;ImythUJK>74b8ZA8bhMC($pjv94v#kl11
zQ>)-%ld!M3Vh*>)#RMPQgYMBR+tRPtk`xW?%giIW$)v|epNWkxRXMKu5YD;S@*zl9
zOH_I6(aN_7baNiw)){?oG2Nv;B2;=@6`!)OsaJ
zazYu+y>-58Z6
zFQlmhYp6Eft71PTz?`XqK*F&Z%OC?u{pe!mnEmNQ9L)Zbw^lQrFF4x!v
z`cqj(-DkHl(>SkjRVQ{3meQ8SHHVn#sY4kTW9!AOR%Ttqj+d&|1?8l_foy2PF*V_PtkFEFdTC(sitQA!T|kb_s7C+F-4ElA
z+{&Y+TpEWEFLr`{9L(8PU&kJB=Kl5e;JC&zn%a?0_>pzeyA`23G6a%22^*MA-O2^>
zBE4VPOyu#_0+)PHg6kdpA`z@&6|*zyYfI*2wSHK(_bbs_AVBdLSSv5ns-jmxfVELL
z74GDokU!V&i`yQ|^X3|d7Qko=`K7H=Ak45STs^mx;XW3`uPQ5I!n8HS&QxOKo{x{W
zc*%-!5%vsqXyN!Ba|;O&G4{0_7EFEd?bGeYZ(%h$$4=Ni+zv2!zmljDJ1A+sK~fR8
z8FDD#f@Z-J1Iw6Tr(mTV6Ayu&?cG!m$`F2dcXhMhhc*dwlS=ds|6Mk)=*$4c_>yn5
zeZqa5dS2s(N9
z{Q680YG32x;C0Sna7hl(x3gL^ElWRbT|Yo1W{OCe0q@qBYDhKGm{A%snOa|&&!8HM
z3sYB4;Kwx8OhHhQgjqG|W+H(XN^Q+eJ{p*W2$pF)~QJgVoJ@};fS(Yfx+
zH_Eq7VC*(zy}1+EQ7Q&tD)~-XK{EwwVS>JB->2)teU=q8%ns7mDW4H<%sKBcopg)P+9IzyHrK{m^}hbzS@Lszt7)rgJ{{)msd+TCfTkWxy*l%q
z(U>x?5>94>x?l(z-fjB8e+2N4GfA%C2CNoVynFm|=Dn$gn8MPyvyil5cUE_F92RDn
zs=b-`SXmmjqRmr@mv8e}_7T1MyCeV9;g++9=69bnTCQ+(S{jh+6IkO|Z(py;!py-O
z5!JVGD}2SVv)5Q~X!@4yHwnGyNCyqeA~o<`a9mX9MN2381r%+Y!kK=(H~3gZH3vLd)6+UO{EN-y_$6Gbm>x4VPMrQ*wYcCGZIVs85Y9?Ez
z#S{^>F(4eK_^C+}rbP(m$^9lO6W><}sUbw_-Wp$dGwW8)d4LV<}S?N79wFoZe`&
zO#ae-jHPr-U30#;b_?Hu6fJ0J8j45v1V!J@TlM7=rQn0-ofP8X-s&Z_TeOh
zmx}p6RI>+0lfOXRhHxZjic-fqYk%}nFR9;ZT+VlR+Yr|FK!N~bB4fo8SRJPrIG+4u
z*4`gT%B0b>oKK;4Y`!%d98i0-O-A3RzHVrWtlOH5Lv-`v-M`hAuldYL+iqg|V}iWA
z0Hb2<_v=o1{FPlU4;|l?n9PwU*%E6sZRP8z)1lvYIGQit;k>rQlbn!Puit=^x5y
z?)NgUeyg(lDl``6}vVg#D@GY~m$Z6JFzkJYKJr4dJhN{ggQer#<1`C)Xo?F!&NrINI
z-3i)xpKnuqKJsJMwp`wUVLJ5ez1Q*2|Aa+FLx^bRmn8*sedV6SR+}z=5-C
zbLM$U@~UAE7gnBI2kh58LTbFXxn<=_dvD?Pq)1VB`On8{_6O?dlb2yNCa7Hm!10=2
zPC;s)K#u=|D=ZI(t)%zA1CmA0S)<}U?Aq25ekBW^1%^*2ax>35#zgizX)2KpRjjt?k0fg57BGp;Gg-?zHOodzUngfyP*;
zS^Toxz@{5_1}_|9JI4>7nQWC1IfYroseQe7A^S!>!*lYB)D68)JSUr8QQ{RiO$gTTOiU<8m4im4k6Ma%~@gdx#D5E2eYf}s!?3J&^z
zDVaa)FtSTj68=gMYUSnRe%!OP_T<8z^S+@^wz;9U^}fahPPJB){H`Ez2fQG9;hE=!
z0|puOwIrFcaBdo37_L9Y9!t!8{mwJXT;x){QNmJ6pTy>Vre@?s4n<_v%jII1EckS>
zsR`<-?#11S^3}GZ+%HKmb&|t1!7TO?4^N{1j;0f0aMR05{OV!oLF@%Yz2qo6GJ
zpQ=~U{{NEurFsJk0Qjq*|5eqig#2$+X3T5)tGxVG)vKWSZ&e-~jOt&+&abLog|&aH
zis1qPe-+)ns(O`p{;m2152N}Q`RA*uSIObuss{J~z+dHvuc}^!Z-1*gU|_nxisD{X
zy-KkDR`n+Y0RAe^dR6r*2>M$!iUl-kudX1!Rh78_fWNwsTvfd~#(%3C0x==~i$ndY
x>eW&BTh);p0Qjqe@v7?8iSk?3j|b!HUz{(>a(I|R!!$?CiNO?dH0alF{|9%}_o)B?
literal 0
HcmV?d00001
diff --git a/examples/data/topojson/fr-departments.json b/examples/data/topojson/fr-departments.json
new file mode 100644
index 0000000000..1ceda832ce
--- /dev/null
+++ b/examples/data/topojson/fr-departments.json
@@ -0,0 +1 @@
+{"type":"Topology","transform":{"scale":[0.0012781599895488503,0.0008731329749103904],"translate":[-5.115416999999923,41.349029000000144]},"arcs":[[[9931,7737],[-56,53],[-26,62],[-96,43],[-64,87],[-51,9]],[[9638,7991],[-83,37],[15,78],[-13,81]],[[9557,8187],[9,41]],[[9566,8228],[73,3],[63,110],[12,169],[-39,31],[-93,24],[-120,64],[-13,47],[54,53],[15,69],[45,-9],[56,-52],[96,-28],[203,8],[62,114]],[[9980,8831],[178,-25],[46,14],[111,-44],[100,-63],[-42,-66],[-33,-99],[-100,-59],[-3,-38],[-93,-88],[-35,-75],[1,-75],[-28,-27],[-29,-108],[11,-78],[-37,-29],[-22,-95],[-57,-83],[-17,-56]],[[9588,7050],[-12,85],[-76,55],[28,94],[-133,55],[-35,49]],[[9360,7388],[82,211],[78,97],[18,100],[60,70],[40,125]],[[9931,7737],[1,-85],[31,-79],[-50,-96],[-25,-249],[53,-56],[-6,-34],[-65,-44],[9,-49],[-100,-74],[-168,16],[-23,63]],[[4973,4689],[47,-100],[-43,-63],[46,-50],[-17,-127],[59,18],[50,-144]],[[5115,4223],[1,-166],[-54,-45],[-11,-83],[-39,-47],[-74,-41],[-82,-118]],[[4856,3723],[-87,62],[-101,-47],[-8,94],[-46,14],[-72,-34],[-37,40],[-132,-25],[-42,-39],[-62,-9],[-26,60],[28,50],[-41,59]],[[4230,3948],[16,96],[-46,11],[-102,-44],[-87,35],[-6,94],[27,65],[18,103],[-76,39]],[[3974,4347],[72,99]],[[4046,4446],[72,4],[91,103],[7,120],[146,127],[56,125],[64,41]],[[4482,4966],[41,16],[69,-54],[-6,-47],[78,-21],[22,30],[106,12],[38,-59],[54,-33],[-25,-65],[21,-30],[93,-26]],[[3443,4550],[115,43],[20,-45],[108,-80],[3,-88],[43,18],[105,-87],[137,36]],[[4230,3948],[-74,-45],[-49,17],[-35,-44],[73,-46],[-22,-90],[-60,0],[-83,-134],[6,-97],[28,-48],[-73,-17],[15,-61],[-32,-66],[-45,-33]],[[3879,3284],[-49,16],[-53,-40],[-45,5],[-25,79],[-97,103],[-92,56],[-56,53],[-116,-35],[-81,35],[-89,-10],[35,98],[-71,17],[-69,-49],[-47,-8]],[[3024,3604],[-1,59],[47,130],[84,-20],[31,63],[-85,78],[-77,-61],[22,169],[48,505],[8,212],[65,40],[208,-202],[33,-78],[13,-91],[58,-35],[-35,177]],[[3879,3284],[43,-75],[74,5],[106,-24],[-35,-79],[2,-62]],[[4069,3049],[-27,-16],[1,-81],[-65,8],[-17,87],[-48,-59],[-59,0],[-38,-45],[23,-85],[-4,-111],[-25,-81],[-35,-38],[21,-61]],[[3796,2567],[-43,-42],[-74,7],[-41,30],[-84,-53],[-60,21],[-73,-8],[-21,29],[-117,-4],[-62,-57],[-58,-10],[-87,21],[-30,34],[-98,-50],[-87,-7],[-45,30]],[[2816,2508],[53,116],[8,72],[53,261],[47,256],[47,391]],[[4856,3723],[-41,-31],[-46,8],[5,-93],[35,-60],[-4,-67]],[[4805,3480],[-126,-58],[45,-37],[3,-78],[-43,-23],[0,-63],[-45,6],[-53,-84]],[[4586,3143],[-67,-16],[-43,28],[-86,-34],[-41,-45],[-101,-35],[-59,7],[-60,-31],[-60,32]],[[3882,2560],[64,-93],[60,-136],[-41,-39],[-5,-98],[-56,-97],[-76,-90],[-7,-48],[-75,-46],[18,-61],[-59,-56],[12,-115]],[[3717,1681],[-63,-24],[-44,36],[-52,-52],[-27,57],[-102,76],[-15,79],[-45,-18],[-106,3],[-49,42],[-98,20],[-90,40],[-77,55],[-6,-72],[-69,21],[-23,52],[44,42],[24,71],[0,72],[-95,46],[-127,24],[-47,-21],[-32,89],[81,29],[52,38],[65,122]],[[3796,2567],[86,-7]],[[3919,2350],[-28,-81],[53,5],[-25,76]],[[3865,2241],[13,-84],[42,27],[-55,57]],[[6831,6163],[61,-132],[27,-96],[173,-72],[34,-199],[-59,-47]],[[7067,5617],[-116,-24],[38,-262],[-78,-26],[-29,-33]],[[6882,5272],[-86,68],[-46,0],[-76,53],[-59,6],[-143,-15],[-46,10],[-22,55],[-80,10],[-49,60],[18,98],[-65,9],[-79,-55],[-77,-100],[-77,2]],[[5995,5473],[-30,88],[-66,71],[-35,64],[-46,-4],[-27,81]],[[5791,5773],[5,62],[83,97],[141,9],[14,33],[-16,96],[36,65],[61,23],[60,-25],[104,76],[100,40]],[[6379,6249],[4,-68],[107,-79],[53,38],[63,-18],[45,27],[59,-68],[121,82]],[[6413,4612],[5,-78],[94,-13],[56,-87],[31,-121],[-1,-97],[33,-58]],[[6631,4158],[-70,-41],[-36,-50],[-75,2],[-69,-111],[-16,-79],[-47,-95]],[[6318,3784],[-34,46],[-10,124],[-61,66],[-82,25],[5,63],[-46,19],[-33,-55],[-59,-155],[-76,-121],[-196,17],[-20,-52]],[[5706,3761],[-42,82],[21,133],[-67,155],[0,44]],[[5618,4175],[44,10],[-14,77],[48,85],[8,64],[46,78],[96,108],[97,38],[30,90]],[[5973,4725],[93,-22],[67,-62],[76,-7],[84,-89],[47,-22],[73,89]],[[7024,4597],[64,6],[40,-26],[149,51],[53,-47],[67,-10],[22,-93],[73,-12]],[[7492,4466],[-9,-79],[-72,-138],[-74,-116],[-68,-69],[-92,-36],[-103,-99],[-44,-21],[16,-78]],[[7046,3830],[-50,38],[-3,63],[-40,29],[-69,3],[-157,-28],[-96,223]],[[6413,4612],[163,60],[74,-33],[59,35],[132,-96],[46,40],[51,-51],[40,43],[46,-13]],[[6882,5272],[36,-60],[-27,-115],[64,-137],[115,-113],[44,-92],[-4,-47],[-56,-44],[-30,-67]],[[5973,4725],[0,97],[-36,92],[36,58],[-45,82]],[[5928,5054],[-47,107],[86,43],[11,64],[44,31],[12,51],[-39,123]],[[3103,9177],[-1,0]],[[3102,9177],[1,0]],[[3103,9178],[0,-1]],[[3103,9177],[0,1]],[[4258,9265],[-13,-133],[94,-98],[19,-92],[-1,-97],[18,-80]],[[4375,8765],[-72,-25],[-99,13],[-26,-34],[-64,1],[-137,-123],[-13,-33],[-84,33],[-81,11],[-24,-52],[-88,72],[-79,-23],[-97,6],[-103,-96],[-45,2]],[[3363,8517],[-32,-6],[-86,47],[-46,-24],[-87,60],[84,81],[-44,20],[19,59],[110,27],[41,45],[18,68],[-58,57],[38,63],[-88,4],[-68,49],[-49,104]],[[3115,9171],[49,39],[97,6],[91,-43],[185,-21],[143,-5],[90,-45],[112,-11],[139,58],[82,75],[127,39]],[[4230,9263],[28,2]],[[3103,9178],[12,-7]],[[3363,8517],[97,-97],[-13,-86],[-84,-112]],[[3363,8222],[-34,-10],[-145,35]],[[3184,8247],[-117,37],[-64,-60],[-75,-43],[-52,7],[-77,104],[24,48]],[[2823,8340],[2,61],[-55,82],[-7,108],[17,90],[-38,170],[14,68],[-90,208],[-79,61],[-34,158],[9,74],[-27,97],[-50,14],[13,64],[76,-41],[153,-36],[96,3],[55,43],[116,-8],[46,-83],[-59,-54],[2,-45],[95,-127],[24,-70]],[[4660,8401],[1,-47],[57,-101],[34,-22],[-8,-98],[-34,-81],[-77,-29],[-16,-80],[8,-80]],[[4625,7863],[-76,-7],[-47,59],[-97,16],[-74,75],[-19,127],[-152,45],[-85,-77],[-83,27]],[[3992,8128],[-9,31],[-80,-2],[-53,139],[-49,-55],[-76,-39],[-162,19],[-45,-30],[-139,-21],[-16,52]],[[4375,8765],[-19,-80],[76,-53],[47,20],[41,-62],[88,-77],[-1,-63],[53,-49]],[[7713,7626],[46,-4],[33,-46],[-14,-47],[98,-81],[-1,-65],[-34,-20],[52,-120],[167,-20],[155,-57]],[[8215,7166],[61,-4],[24,-78],[-29,-60],[-47,-11],[57,-117],[31,-2],[-3,-87]],[[8309,6807],[-77,-160],[-26,-79],[-92,-43],[-13,-66]],[[8101,6459],[-101,-41],[-51,23],[-169,-41],[-125,-55],[-65,63],[-33,61],[-152,60],[-21,49],[-99,64],[-59,-15]],[[7226,6627],[67,50],[-66,128],[-16,81]],[[7211,6886],[17,176],[45,39],[74,176],[-29,77],[39,51],[-34,55],[10,104]],[[7333,7564],[19,29],[79,-9],[126,8],[41,77],[115,-43]],[[7226,6627],[-49,-18],[-8,-91],[-32,-46],[65,-134],[-34,-133],[-60,-25],[-41,-49],[-92,-21],[-37,46],[-107,7]],[[6379,6249],[18,64],[-1,122],[-39,132],[-29,171],[-80,120],[12,173],[-22,37]],[[6238,7068],[115,75]],[[6353,7143],[77,24],[40,-76],[142,-73],[44,46],[76,-5],[119,-47],[28,-64],[95,-14],[59,-57],[46,18],[73,-78],[59,69]],[[8101,6459],[57,-117],[110,-56],[-61,-37],[34,-214],[-34,-102],[35,-36],[-77,-57]],[[8165,5840],[-55,-32],[-83,72],[-61,-2],[-78,29],[-57,-37],[-30,-126],[-63,-200]],[[7738,5544],[-48,-8],[-36,121],[-199,-12],[-36,-96]],[[7419,5549],[-7,-44],[-110,-2],[-17,46],[-111,-5],[-60,-22],[-76,53],[29,42]],[[6641,8067],[89,-42],[81,-99],[-29,-98],[139,-56],[50,-41],[59,-91],[52,-28],[-19,-64],[36,-23],[94,14],[77,31],[63,-6]],[[6353,7143],[-53,44],[0,50],[-45,69],[-10,56],[78,11],[33,40],[21,117],[73,45],[-32,111],[-16,114],[-28,46],[-51,3]],[[6323,7849],[31,55],[36,146],[50,9],[170,-9],[31,17]],[[2317,8321],[113,-101],[18,28]],[[2448,8248],[18,6]],[[2466,8254],[51,-27],[6,-52],[-46,-37],[6,-153],[-45,-27],[-83,21],[-61,-42],[-64,-130]],[[2230,7807],[-62,-17],[-44,70],[-75,-38],[-24,-82],[-40,-37],[-56,9],[-30,84],[-124,19],[-121,41],[-47,41],[-40,-81],[-35,17],[-175,-11],[-38,42],[-61,1]],[[1258,7865],[-28,66],[44,28],[-44,82],[-21,117],[6,73],[46,63],[-111,89]],[[1150,8383],[51,2],[-6,116],[17,43],[70,34],[39,-46],[105,37],[72,8],[84,37],[15,-57],[49,2],[-1,-63],[48,-2],[19,-64],[85,-68],[-1,-64],[84,-48],[86,2],[84,63],[130,74],[33,-6],[66,-97],[38,35]],[[1258,7865],[-138,-44],[-28,-45],[19,-45],[91,-94],[62,8],[52,-24],[45,16],[15,-61],[-19,-66],[-109,-118]],[[1248,7392],[-10,-42],[-112,10],[-137,28],[-45,74],[-104,-20],[-56,28],[-38,-25],[-23,-62],[-81,-4],[-40,50],[-13,61],[-48,85],[-227,80],[33,33],[232,56],[54,-24],[28,52],[-36,79],[-103,36],[-89,1],[8,66],[111,-21],[79,25],[-1,47],[-102,-14],[-29,65],[-102,-52],[-120,40],[-27,49],[24,60],[-9,59],[56,59],[72,3],[37,56],[69,2],[120,61],[38,-31],[67,39],[168,17],[21,-53],[65,20],[18,43],[82,2],[72,-47]],[[2317,8321],[77,30],[54,-103]],[[3184,8247],[12,-190],[-38,-89],[12,-84],[56,-123],[-5,-126],[-77,-27],[-58,-160]],[[3086,7448],[-33,-42]],[[3053,7406],[-83,0],[-36,40],[-64,2],[-133,-87],[-50,-59],[-152,4],[-159,-48]],[[2376,7258],[-41,77],[29,66],[56,64],[-37,118],[-74,57],[-80,3],[23,94],[-22,70]],[[2466,8254],[-50,97],[31,50],[98,20],[-4,-69],[69,-41],[110,14],[66,31],[37,-16]],[[1458,6920],[75,-33],[64,-87],[-113,8],[-36,67],[10,45]],[[2376,7258],[13,-27],[-24,-138],[-32,2],[-155,-73],[-66,17],[-38,-53]],[[2074,6986],[-44,89],[-111,-8],[-118,-39],[-5,66],[62,1],[13,58],[-45,30],[-268,-62],[-128,152],[-68,24],[-62,-28],[-37,40],[-15,83]],[[5791,5773],[-101,42]],[[5690,5815],[18,48],[-20,68],[-4,225],[-45,116],[57,67],[-54,59],[-2,81],[-66,133],[-76,-30],[-83,25],[-36,31],[59,80]],[[5438,6718],[48,-12],[13,83],[63,-15],[108,24],[7,163],[79,37],[-10,97],[-53,5],[-5,59],[74,28]],[[5762,7187],[110,-37],[45,25],[76,-54],[65,-87],[70,39],[65,-24],[45,19]],[[5515,8143],[29,-7],[33,-105],[4,-76]],[[5581,7955],[-27,-75],[1,-63],[-36,-65],[-128,-41],[-47,3],[-132,-111]],[[5212,7603],[-65,30],[-35,-40],[-80,12],[-66,-15],[-70,123],[-53,21],[-23,45],[-60,-40],[-86,2]],[[4674,7741],[33,60],[-82,62]],[[4660,8401],[111,50],[117,29],[13,32],[83,-24],[79,9],[25,52],[72,59],[-3,84]],[[5157,8692],[50,-21],[56,-102],[18,-96],[-19,-52],[67,-151],[52,-49],[27,-61],[50,-28],[57,11]],[[5690,5815],[-86,-13],[-110,36],[-33,-18],[-63,23],[-34,-46],[-184,-11],[-80,-35]],[[5100,5751],[-33,25],[-56,-29],[-94,20]],[[4917,5767],[-1,47],[45,54],[-97,92],[-127,30],[-20,61],[21,118]],[[4738,6169],[73,47],[-17,52],[51,218],[79,25],[48,-15],[49,83],[46,16],[9,79]],[[5076,6674],[82,63],[169,51],[46,1],[65,-71]],[[4487,7280],[57,-42],[132,-26],[33,-54],[118,23],[55,-209],[-1,-97],[-21,-49],[41,-41],[62,9],[33,-60],[80,-60]],[[4738,6169],[-58,23],[-15,62],[-96,101],[-44,109],[-79,50],[15,-93],[-100,0],[-60,-28],[-65,29],[-23,45],[2,82],[-169,103]],[[4046,6652],[35,151],[65,141],[38,227],[-11,24]],[[4173,7195],[86,-49],[15,49],[169,46],[44,39]],[[5904,7963],[69,-114],[-28,-65],[82,-26],[161,54],[120,11],[15,26]],[[5762,7187],[-15,33],[-103,24],[-93,-13],[-81,25],[-26,-33],[-68,26],[-43,63],[-86,18],[-42,91],[21,52],[-35,44],[21,86]],[[5581,7955],[91,11],[61,33],[44,-35],[46,19],[81,-20]],[[4487,7280],[43,82],[76,29],[0,116],[65,18],[-8,125],[-34,22],[45,69]],[[8205,9477],[-51,-87],[-78,7],[-54,36],[-55,-99],[22,-61],[0,-82],[-34,-44],[-8,-72],[-47,-36]],[[7900,9039],[-30,27],[-57,-40],[-50,30],[-145,-15],[-47,42],[-80,-10],[-48,57],[-66,16],[-41,45],[-158,37]],[[7178,9228],[11,116],[36,186],[48,20],[62,84],[-32,46],[42,145],[-41,39]],[[7304,9864],[82,5],[108,-35],[98,49],[66,8],[15,110],[100,89],[40,-60],[-36,-45],[-9,-90],[56,-102],[-24,-41],[49,-84],[54,16],[86,-52],[59,-71],[75,-2],[82,-82]],[[7636,8220],[1,-87],[101,-74],[82,-125],[7,-112],[-16,-82],[-111,8],[25,-71],[-12,-51]],[[6641,8067],[-2,97],[40,77],[87,111]],[[6766,8352],[115,-116],[133,-37],[130,147],[178,99],[40,-27],[4,-96],[130,-114],[140,12]],[[8253,8113],[-24,-41],[37,-58],[80,-19],[119,-156],[-31,-20],[-55,-101],[110,-72],[43,-87],[76,21]],[[8608,7580],[21,-68],[-52,-67],[-64,1],[-43,-41],[-27,-136],[-68,-42],[-48,24],[-66,-6],[-46,-79]],[[7636,8220],[106,-17],[44,42],[-9,59],[64,-10],[-18,68],[102,16]],[[7925,8378],[17,-43],[139,-36],[99,-100],[65,-39],[8,-47]],[[7900,9039],[-32,-98],[26,-77],[-11,-69],[56,-30],[-19,-81],[-64,-24],[-35,-83],[42,-92],[48,-11],[14,-96]],[[6766,8352],[-70,43],[-31,92],[33,37],[-18,45],[36,40]],[[6716,8609],[76,82],[37,83],[-31,51],[33,46],[-16,46],[98,42],[-58,119],[32,71],[54,24],[65,-12],[60,43],[88,-21],[24,45]],[[10712,1179],[142,-83],[44,7],[20,-63],[129,-71],[85,-171],[57,-32],[19,-99],[-7,-81],[66,-50],[88,51]],[[11355,587],[8,-109],[-17,-121],[-52,-64],[-25,-136],[-35,-45],[10,-41],[-33,-49],[-96,41],[11,28],[-88,63],[-55,13],[-106,72],[13,88],[53,13],[5,57],[-71,14],[-58,60],[45,57],[25,92],[-141,41],[26,96],[67,35],[-41,80],[-51,14],[-43,52],[4,82],[90,27],[-88,132]],[[10712,1179],[59,41],[13,118],[48,53],[58,7],[5,41],[54,27],[111,16],[80,103],[104,-16],[23,-50],[47,69],[-2,70],[-26,42],[35,95],[-9,96],[92,-14],[24,-222],[-16,-29],[-17,-127],[61,-107],[11,-124],[-7,-98],[22,-102],[-4,-180],[-116,-201],[-7,-100]],[[9351,7104],[66,-24],[32,-44],[-11,-64]],[[9438,6972],[-47,-66],[40,-21],[82,15],[10,-43],[-82,-47],[5,-57],[-82,-96],[-88,-57],[-83,-132],[-103,-27],[-39,-45],[16,-88],[-7,-81],[-155,-131],[-112,-118]],[[8793,5978],[-48,39],[-6,97],[77,52],[-2,65],[-94,45],[-63,174],[-65,17],[-70,70],[27,26],[4,94],[-42,33],[-8,72]],[[8503,6762],[173,82],[62,8],[158,100],[52,73],[93,36],[22,-30],[94,4],[87,86],[63,-40],[44,23]],[[9360,7388],[-62,-72],[42,-109],[-12,-57],[23,-46]],[[8503,6762],[-134,-4],[-60,49]],[[8608,7580],[66,-11],[78,52],[58,-14],[30,-78],[32,-12],[128,34],[49,-58],[47,-12],[98,33],[102,-102],[64,-24]],[[8793,5978],[24,-35],[-62,-81],[-3,-50]],[[8752,5812],[-131,-183],[-30,-13],[-123,22],[-4,31],[-75,45],[-87,-75],[-126,118],[-11,83]],[[9588,7050],[-120,-11],[-30,-67]],[[5358,9257],[59,-173],[-80,-49]],[[5337,9035],[-21,-78],[-43,-62]],[[5273,8895],[-97,-48],[-15,-48],[16,-84],[-20,-23]],[[4258,9265],[131,27],[94,-57],[134,-1],[81,-34],[-3,-44],[102,-83],[50,61],[159,37],[69,109],[283,-23]],[[5367,9671],[-35,-94],[17,-48],[-18,-67],[30,-79],[56,-56],[-59,-70]],[[4230,9263],[-106,23],[-69,75],[108,220],[89,31],[196,123],[153,26],[199,50],[146,66],[165,131]],[[5111,10008],[244,-229],[12,-108]],[[5831,8472],[80,-42],[31,17],[95,-37]],[[6037,8410],[-9,-57],[-50,-60],[-50,-166],[56,-65],[-69,-61],[-11,-38]],[[5515,8143],[44,91],[62,73],[-37,60],[7,47],[57,10],[96,91]],[[5744,8515],[87,-43]],[[5744,8515],[-38,39],[1,68]],[[5707,8622],[85,75]],[[5792,8697],[-3,-60]],[[5789,8637],[-9,-41],[58,-40]],[[5838,8556],[-7,-84]],[[6037,8410],[22,54],[-2,88]],[[6057,8552],[-29,89],[36,49],[-3,87],[-33,7]],[[6028,8784],[-19,87]],[[6009,8871],[64,16],[35,-45],[49,0],[29,43],[115,-31],[133,40]],[[6434,8894],[40,-14],[82,-171],[89,-45],[71,-55]],[[6057,8552],[-81,54],[-68,5]],[[5908,8611],[-22,30],[-97,-4]],[[5792,8697],[77,49],[66,-21],[64,11],[29,48]],[[5838,8556],[90,-3],[-20,58]],[[5337,9035],[36,-52],[121,-22],[146,51],[120,-48],[65,35],[84,-41],[100,-87]],[[5707,8622],[17,127],[-55,46],[-48,-13],[-99,28],[-66,-21],[-98,15],[-18,64],[-67,27]],[[6001,2387],[11,-34],[-27,-81],[82,-3],[23,-49],[60,-24],[71,127],[30,-60],[73,4],[17,-46],[107,-30],[78,-66]],[[6526,2125],[-113,-147],[-59,45],[-32,-52],[75,-70],[-23,-53],[23,-49],[-83,-88]],[[6314,1711],[-22,46],[-72,39],[-141,-110],[-161,30],[-102,2],[8,-81],[-33,-78],[-119,-72]],[[5672,1487],[-87,94],[-68,-22],[-18,93],[-49,75],[71,30],[16,65],[-4,93],[-49,125],[-173,52],[10,145]],[[5321,2237],[14,49],[57,26],[44,82],[61,-33],[96,7]],[[5593,2368],[46,-30],[72,9],[44,53],[104,-36],[142,23]],[[7619,3362],[46,-117],[1,-97],[52,-54],[29,-61],[-39,-80]],[[7708,2953],[-72,-28],[-40,-40],[12,-78],[-29,-95],[-84,-22],[-51,-47],[6,-78],[-70,-66],[-72,-31],[-24,-45]],[[7284,2423],[-64,49],[-27,56]],[[7193,2528],[51,49],[16,51],[-45,95],[-89,77],[-59,10],[0,47],[-51,38],[-58,-25],[10,94],[-46,35],[-75,-23],[-18,-63],[-44,-6],[-13,-82],[-71,65],[-96,28]],[[6605,2918],[55,132],[-103,101],[79,83]],[[6636,3234],[58,-34],[107,-19],[58,25],[5,79],[74,-9],[67,-90],[98,61],[-28,21],[-16,99],[8,66],[-29,55],[44,18],[29,97]],[[7111,3603],[41,-62],[-14,-95],[122,-69],[140,60],[17,-62],[51,59],[75,-22],[76,-50]],[[7193,2528],[-62,-7],[-89,-50],[-66,-73],[-113,-60],[-110,-133],[-65,18],[-50,-12],[-112,-86]],[[6001,2387],[57,26],[12,47],[-38,92],[18,48],[103,-5],[86,37],[8,51]],[[6247,2683],[102,-25],[27,93],[-15,61],[30,37],[76,-39],[71,48],[-9,46],[76,14]],[[7046,3830],[1,-97],[51,-57],[13,-73]],[[6636,3234],[-44,44],[-89,-5],[-11,46],[-84,64],[46,131],[-45,123],[-1,63],[-90,84]],[[6314,1711],[16,-44],[50,12],[-4,-202],[18,-117],[63,-23],[20,-59],[-53,-46],[-48,57],[-91,-21],[-61,4],[-32,-47],[-64,3],[-36,-39],[3,-51],[-81,18],[-69,-21],[-54,60],[-124,53],[-99,-28],[-10,-35],[-82,-35],[-75,107],[-87,50],[-58,3],[7,83],[40,15]],[[5403,1408],[84,30],[69,46],[103,-14],[13,17]],[[5618,4175],[-116,-15],[-32,17],[-61,-68],[-47,25],[-71,72],[-100,42],[-76,-25]],[[4973,4689],[126,60],[17,49],[51,42],[90,17],[146,90],[75,8],[-14,53]],[[5464,5008],[92,7],[54,57],[159,-98],[59,29],[12,48],[88,3]],[[5464,5008],[15,67],[-49,40],[-52,90],[-43,-44],[-93,18],[-59,95],[25,27],[6,83],[-28,44],[-22,124],[-85,34],[35,66],[-14,99]],[[4482,4966],[11,51],[66,113],[32,-19],[74,100],[-2,63],[62,-13],[24,43],[-28,44],[-64,26],[-22,45],[13,64]],[[4648,5483],[-19,111],[97,88],[47,-9],[50,70],[62,-4],[32,28]],[[8640,9332],[32,-205],[63,-74],[-38,-160],[-31,-47],[97,-138],[48,-24],[113,2],[33,-18],[-21,-91],[36,-52],[65,-12],[39,-39],[100,-30],[110,-70],[23,-50],[67,-24],[48,23],[64,-31],[78,-64]],[[9557,8187],[-124,-76],[-64,-14],[-47,-38],[-48,9],[-97,95],[-28,-47],[-79,-45],[-102,4],[-48,21],[-88,-39],[-31,-48],[-134,-12],[-103,175],[-60,-7]],[[8504,8165],[8,50],[-25,93],[28,32],[-25,102],[33,85],[-10,125],[50,54],[1,78],[-22,93],[-36,43],[-12,78],[13,100],[-41,83],[-8,68],[-82,17],[-74,-21],[4,102]],[[8306,9347],[116,46],[139,2],[14,-36],[65,-27]],[[8504,8165],[-203,-59],[-48,7]],[[8205,9477],[40,-26],[61,-104]],[[8640,9332],[38,-48],[117,13],[38,42],[53,6],[77,-51],[62,21],[91,-55],[50,-84],[-19,-24],[64,-62],[16,-65],[49,-63],[74,-6],[7,56],[85,-1],[82,-42],[14,-52],[179,-7],[95,68],[91,-105],[77,-42]],[[5403,1408],[-76,51],[-69,0],[-42,34],[-57,-20],[-24,-40],[-70,138],[-151,-13],[-44,71],[-116,39],[-27,-18],[-97,58]],[[4630,1708],[-10,94],[37,47],[72,16],[66,119],[34,85],[58,8],[85,-83],[34,47],[-55,33],[19,52],[59,-8],[52,55],[50,-14],[59,36],[75,-25],[56,67]],[[6247,2683],[-10,30],[-90,19],[-60,-16],[-113,111],[13,82],[-45,54],[14,63],[-115,127],[-112,89],[-80,32],[-85,-44],[-45,2]],[[5519,3232],[-35,76],[33,75],[-66,7],[6,54]],[[5457,3444],[-6,119],[71,56],[43,66],[136,23],[5,53]],[[4586,3143],[60,-1],[-6,-72],[-51,-99],[19,-24],[89,5],[21,-45],[-23,-112],[29,-4]],[[4724,2791],[56,-67],[24,-76],[61,-26],[32,-76],[-86,-33],[-24,-131],[-23,-49],[-58,-5],[-119,26],[-92,-96]],[[4495,2258],[-76,-1],[-208,70],[-85,7],[-26,92],[-65,72],[-53,89],[-71,8],[-29,-35]],[[4630,1708],[-74,24],[-44,-109],[19,-86],[-118,13],[-45,-9]],[[4368,1541],[-27,127],[22,90],[72,-3],[42,99],[-13,49],[-49,-11],[-4,116],[-58,38],[22,49],[55,37],[65,126]],[[4724,2791],[171,38],[60,-45],[114,44],[-1,94],[64,-29],[80,45]],[[5212,2938],[40,-66],[84,-185],[-19,-58],[93,-74],[64,-73],[87,7],[32,-121]],[[4368,1541],[-56,-1],[-28,34],[-51,-57],[-28,49],[-59,22],[-143,-58],[-84,41],[-42,69],[-115,69],[-45,-28]],[[5457,3444],[-26,-24],[-133,-1],[-43,-29],[-112,-9],[-23,-49],[-67,-50],[-47,25],[-26,63],[-41,-35],[-76,56],[-58,89]],[[5212,2938],[105,137],[-31,101],[43,16],[76,-25],[69,68],[45,-3]],[[7251,9908],[-89,-32],[-46,76],[-81,-26],[-39,48],[-69,6],[-53,-52],[-148,-14],[-50,19],[-81,-20],[-50,16],[-72,-19]],[[6473,9910],[-27,70]],[[6446,9980],[25,129],[38,87],[-156,162],[61,32],[-61,118],[-82,-20],[-62,40],[-13,92],[-106,-12],[-117,11],[-52,31],[-60,140],[-89,25],[-127,253]],[[5645,11068],[179,46],[29,-12],[151,58],[17,-103],[39,-60],[-25,-36],[23,-121],[71,-3],[53,-95],[84,-33],[41,55],[79,30],[79,5],[43,-71],[56,-139],[6,-77],[66,-43],[76,35],[110,-36],[40,-50],[1,-99],[72,-20],[71,6],[56,-29],[95,37],[37,-47],[106,-71],[-44,-48],[-3,-53],[55,-105],[-49,-28],[-8,-53]],[[6446,9980],[-98,35],[-51,-75],[-66,53],[-125,-5],[-130,70],[-94,32],[56,47],[-14,49],[-130,-33],[-67,14],[-81,-12],[-32,64],[-120,57],[-64,52],[-113,-33],[-61,38]],[[5256,10333],[-37,35],[18,142],[-15,200],[37,77],[-22,99],[112,93],[170,75],[126,14]],[[3053,7406],[-20,-109],[83,-32],[84,-75],[-3,-29],[-96,-14],[-3,-31],[59,-47],[97,-24],[22,-114],[-120,-26],[-97,-1],[-78,-31],[113,-170],[-54,-53],[27,-44],[48,-4],[7,-62]],[[3122,6540],[-34,-10],[-59,53],[-99,-34],[4,-94],[-62,-32],[-33,125],[-44,-24],[10,-84],[27,-44],[-34,-89],[-80,19],[-66,84],[-50,0],[-150,94]],[[2452,6504],[-56,75],[-150,42],[53,31],[4,125],[-94,-37],[-107,68],[-97,88],[69,90]],[[3705,7350],[4,-41],[96,-9],[39,-71],[65,-19],[88,37],[52,-45],[78,-27],[46,20]],[[4046,6652],[-64,-50],[-48,4]],[[3934,6606],[-36,-47],[-42,52],[-113,1],[-59,-34],[-34,25],[-80,-15],[-1,-47],[-72,-58],[-108,-15],[-74,18],[-74,48]],[[3241,6534],[-65,-32],[-54,38]],[[3086,7448],[1,-41],[162,-30],[118,-6],[65,-40],[142,2],[34,38],[97,-21]],[[3992,8128],[-74,-54],[-48,-158],[-63,-101],[2,-119],[-46,-11],[30,-81],[-94,-44],[20,-64],[-43,-46],[41,-64],[-12,-36]],[[3241,6534],[61,-100],[81,-51],[3,-66],[62,-56],[-9,-33],[40,-108],[51,-77],[-20,-131],[11,-80],[43,-59],[-82,-68],[-77,4]],[[3405,5709],[-55,19],[-79,-18],[-42,49],[-96,-69]],[[3133,5690],[-79,-44],[-66,13],[-49,61],[-85,-1],[-28,64],[-96,16],[-149,99],[-29,119],[-71,104],[-155,143],[11,86],[55,66],[23,67],[37,21]],[[7251,9908],[53,-44]],[[6434,8894],[36,51],[-42,57],[-47,-18],[4,94],[-51,28],[56,44],[23,51],[-2,81],[50,-16],[-27,111],[-2,200]],[[6432,9577],[-2,84],[-33,4],[-12,90],[88,155]],[[5367,9671],[75,-82],[80,30],[110,-30],[179,-22],[50,-19],[53,-59],[65,8],[29,-36],[103,22],[66,-12],[26,49],[144,58],[85,-1]],[[5111,10008],[29,26],[70,174],[7,115],[39,10]],[[4046,4446],[-143,13],[-10,65],[-149,98],[45,43],[-14,48],[34,83],[-98,99],[-21,64],[2,126],[104,36],[25,-41],[75,17],[21,65],[20,144]],[[3937,5306],[38,113],[62,0],[57,41],[49,1]],[[4143,5461],[78,-46],[298,31],[63,53],[66,-16]],[[2902,5383],[71,-63],[52,-4],[16,-83],[32,-37],[-6,-64],[-39,-23],[-18,80],[-94,84],[-14,110]],[[2819,5624],[64,-61],[107,-20],[-15,-54],[-117,70],[-58,-2],[19,67]],[[3405,5709],[-7,-61],[99,-115],[24,-57],[45,14],[34,-37],[169,2],[69,-49],[35,-75],[64,-25]],[[3443,4550],[-27,88],[-63,104],[-67,70],[-253,187],[-5,79],[70,22],[59,113],[-1,111],[23,16],[-38,94],[-102,65],[25,72],[59,58],[10,61]],[[3934,6606],[8,-106],[32,-9],[27,-92],[3,-119],[-16,-67],[-2,-167],[49,2],[-20,-109],[-45,-49],[37,-125],[36,-56],[59,0],[-42,-146],[95,-32],[-12,-70]],[[9401,3455],[-79,-37],[-43,-82],[-41,-32],[-16,-116],[45,-96],[16,-78],[104,-52],[18,-62],[-203,-19],[-27,-104]],[[9175,2777],[-159,-16],[-25,-47],[-44,2],[-60,52],[-44,-10],[-141,-120],[-30,12],[-52,93],[-128,-13]],[[8492,2730],[-115,97],[-44,1],[36,99],[-58,51],[7,79],[-27,30],[1,75]],[[8292,3162],[40,30],[7,62],[83,19]],[[8422,3273],[169,-14],[-37,55],[4,63],[78,-14],[-7,47],[57,80],[73,55],[126,-76],[2,69],[59,14],[38,57],[108,-85],[104,2],[37,100],[127,112],[84,43]],[[9444,3781],[-11,-85],[-58,-52],[31,-127],[-5,-62]],[[9414,2404],[-33,26],[17,109],[-118,55],[-7,78],[-39,46],[-59,15],[0,44]],[[9401,3455],[80,-99],[16,-64],[40,9],[95,-38],[66,-67],[118,-29],[59,36],[85,10],[78,-76],[-11,-49],[-59,-94],[-105,-116],[27,-89],[-42,-37],[-51,7],[-28,-40],[-96,-37],[-28,-49],[-61,-22],[-6,-63],[-58,-31],[-48,3],[-42,-40],[-16,-76]],[[8492,2730],[31,-81],[-58,-36],[-18,-79],[21,-46],[16,-156],[-55,-11],[-13,-82],[51,-55],[-43,-26],[-17,-54]],[[8407,2104],[-23,-29],[-54,59],[-149,0],[31,56],[-17,64],[-51,49],[-54,-37],[-152,6],[-49,107],[-35,7],[-57,-40],[12,-62],[-162,3],[-62,19],[0,82],[-64,26],[-53,-9],[-184,18]],[[7708,2953],[140,-35],[73,-57],[37,-77],[46,-33],[102,4],[135,-83],[74,-20],[134,36],[43,42]],[[9190,4306],[44,-101],[41,3],[18,-125],[49,-48],[69,-31],[28,21],[57,-46],[2,-87],[-54,-111]],[[8422,3273],[-8,62],[-46,68],[-62,-18],[-82,54],[4,78],[42,95],[61,-42],[59,-7],[26,51],[-61,39],[38,126],[105,-3],[45,81]],[[8543,3857],[18,30],[104,22],[-13,46],[89,12],[59,39],[75,-27],[42,33],[60,-2],[1,62],[-47,109],[-60,11],[34,120]],[[8905,4312],[51,1],[31,-78],[61,-14],[20,47],[59,33],[63,5]],[[9414,2404],[-52,-43],[-99,-16],[-7,-57],[-103,-80],[82,-5],[-18,-71],[-232,-84],[-3,-59],[-69,40],[-75,-14],[-24,-51],[-112,46],[-56,2],[-83,-65],[-12,65],[-93,43],[-51,49]],[[7619,3362],[6,70]],[[7625,3432],[116,-2],[40,-108],[131,52],[57,-19],[61,-64],[59,8],[119,-17],[5,-66],[79,-54]],[[7928,3447],[-34,-48],[-74,-22],[-1,125],[73,31],[46,-54],[-10,-32]],[[8752,5812],[78,-63],[-35,-56],[-1,-77],[-81,-24],[-28,-101]],[[8685,5491],[-65,-75],[-49,21],[-20,-66],[3,-103]],[[8554,5268],[-46,-240],[-41,-45],[-31,-79],[-30,-19]],[[8406,4885],[-19,2],[-127,200],[-20,62],[-59,32],[-79,-99],[-45,-5],[-96,34]],[[7961,5111],[-122,27],[-24,77],[-46,2],[-66,53],[8,113],[36,99],[-9,62]],[[7492,4466],[107,26],[19,55],[102,31]],[[7720,4578],[14,-49]],[[7734,4529],[19,-40],[-2,-188],[32,-61],[-6,-63],[35,-77],[-24,-63],[-71,-113],[-7,-125],[-71,-100],[9,-157],[-23,-110]],[[7734,4529],[72,3],[89,48],[58,-23],[29,-43],[88,-47],[-39,-183],[110,-50],[134,30],[41,29],[-34,-279],[6,-79],[59,12],[83,-79],[75,-23],[38,12]],[[9333,5070],[-65,-41],[-44,50],[-55,17],[-69,127],[-56,-113],[-56,-51],[-26,-104],[-63,-17],[-133,103],[-39,-19],[-47,77],[-62,20],[-14,94],[-50,55]],[[8685,5491],[150,18],[103,98],[-51,30],[-16,48],[88,104],[81,18],[60,42],[120,1],[120,-32],[-35,-85],[67,-69],[-53,-152],[21,-33],[63,-7],[1,-41],[108,-181],[-28,-66],[-102,-59],[-49,-55]],[[8406,4885],[14,-69],[69,-123],[138,-59],[10,82],[70,-14],[92,-48],[60,-2],[16,-46],[-32,-79],[-55,-86],[32,-78],[85,-51]],[[7720,4578],[-7,113]],[[7713,4691],[77,29],[14,31],[-57,73],[70,3],[139,93],[43,64],[-9,78],[-29,49]],[[7419,5549],[55,-54],[-14,-35],[-91,-16],[-19,-67],[-49,-71],[152,-109],[2,-141],[-20,-82],[102,-118],[60,-7],[68,-109],[48,-49]],[[9333,5070],[8,-62],[126,-114],[17,-128],[37,-12],[53,-71],[45,-28],[-52,-105],[12,-75],[-39,-39],[-80,-16],[-17,-37],[-74,-49],[-68,24],[-111,-52]]],"objects":{"FRA_adm2":{"type":"GeometryCollection","geometries":[{"arcs":[[0,1,2,3,4]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":989,"NAME_1":"Alsace","ID_2":13755,"NAME_2":"Bas-Rhin","VARNAME_2":"Unterelsaá","HASC_2":"FR.BR","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[5,6,-1,7]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":989,"NAME_1":"Alsace","ID_2":13756,"NAME_2":"Haut-Rhin","VARNAME_2":"Oberelsaá","HASC_2":"FR.HR","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[8,9,10,11,12,13,14]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":990,"NAME_1":"Aquitaine","ID_2":13757,"NAME_2":"Dordogne","VARNAME_2":"","HASC_2":"FR.DD","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[15,-12,16,17,18]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":990,"NAME_1":"Aquitaine","ID_2":13758,"NAME_2":"Gironde","VARNAME_2":"Bec-D'Ambes","HASC_2":"FR.GI","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[19,20,21,22,-18]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":990,"NAME_1":"Aquitaine","ID_2":13759,"NAME_2":"Landes","VARNAME_2":"Landas","HASC_2":"FR.LD","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[-11,23,24,25,-20,-17]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":990,"NAME_1":"Aquitaine","ID_2":13760,"NAME_2":"Lot-Et-Garonne","VARNAME_2":"","HASC_2":"FR.LG","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[26,27,-22,28],[29],[30]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":990,"NAME_1":"Aquitaine","ID_2":13761,"NAME_2":"Pyrénées-Atlantiques","VARNAME_2":"Basses-Pyrénées|Pirinio Atlantiarrak","HASC_2":"FR.PA","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[31,32,33,34,35,36]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":991,"NAME_1":"Auvergne","ID_2":13762,"NAME_2":"Allier","VARNAME_2":"Basses-Alpes","HASC_2":"FR.AL","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[37,38,39,40,41,42]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":991,"NAME_1":"Auvergne","ID_2":13763,"NAME_2":"Cantal","VARNAME_2":"","HASC_2":"FR.CL","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[43,44,45,-38,46]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":991,"NAME_1":"Auvergne","ID_2":13764,"NAME_2":"Haute-Loire","VARNAME_2":"","HASC_2":"FR.HL","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[47,-47,-43,48,49,-34]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":991,"NAME_1":"Auvergne","ID_2":13765,"NAME_2":"Puy-De-Dôme","VARNAME_2":"","HASC_2":"FR.PD","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[54,55,56,57,58]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":992,"NAME_1":"Basse-Normandie","ID_2":13766,"NAME_2":"Calvados","VARNAME_2":"","HASC_2":"FR.CV","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[-51,-53,59,-57,60,61,62,63]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":992,"NAME_1":"Basse-Normandie","ID_2":13767,"NAME_2":"Manche","VARNAME_2":"","HASC_2":"FR.MH","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[64,65,66,-61,-56,67]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":992,"NAME_1":"Basse-Normandie","ID_2":13768,"NAME_2":"Orne","VARNAME_2":"","HASC_2":"FR.OR","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[68,69,70,71,72,73,74]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":993,"NAME_1":"Bourgogne","ID_2":13769,"NAME_2":"Côte-d'Or","VARNAME_2":"","HASC_2":"FR.CO","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[-73,75,-37,76,77,78]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":993,"NAME_1":"Bourgogne","ID_2":13770,"NAME_2":"Nièvre","VARNAME_2":"","HASC_2":"FR.NI","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[79,80,81,82,-32,-76,-72]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":993,"NAME_1":"Bourgogne","ID_2":13771,"NAME_2":"Saône-et-Loire","VARNAME_2":"","HASC_2":"FR.SL","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[83,-74,-79,84,85]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":993,"NAME_1":"Bourgogne","ID_2":13772,"NAME_2":"Yonne","VARNAME_2":"","HASC_2":"FR.YO","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[86,87,88,89,90,91]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":994,"NAME_1":"Bretagne","ID_2":13773,"NAME_2":"Côtes-d'Armor","VARNAME_2":"Cotes-Du-Nord","HASC_2":"FR.CA","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[-91,92,93]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":994,"NAME_1":"Bretagne","ID_2":13774,"NAME_2":"Finistère","VARNAME_2":"","HASC_2":"FR.FI","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[[-87,94]],[[-63,95,96,97,98,-89,99]]],"type":"MultiPolygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":994,"NAME_1":"Bretagne","ID_2":13775,"NAME_2":"Ille-Et-Vilaine","VARNAME_2":"","HASC_2":"FR.IV","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[[100]],[[-99,101,102,-93,-90]]],"type":"MultiPolygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":994,"NAME_1":"Bretagne","ID_2":13776,"NAME_2":"Morbihan","VARNAME_2":"","HASC_2":"FR.MB","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[-77,-36,103,104,105,106]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":995,"NAME_1":"Centre","ID_2":13777,"NAME_2":"Cher","VARNAME_2":"","HASC_2":"FR.CH","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[107,108,109,110,-65,111,112]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":995,"NAME_1":"Centre","ID_2":13778,"NAME_2":"Eure-Et-Loir","VARNAME_2":"","HASC_2":"FR.EL","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[113,114,115,116,117,-105]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":995,"NAME_1":"Centre","ID_2":13779,"NAME_2":"Indre","VARNAME_2":"","HASC_2":"FR.IN","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[118,-117,119,120,121]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":995,"NAME_1":"Centre","ID_2":13780,"NAME_2":"Indre-Et-Loire","VARNAME_2":"","HASC_2":"FR.IL","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[122,-85,-78,-107,123,-109,124]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":995,"NAME_1":"Centre","ID_2":13781,"NAME_2":"Loiret","VARNAME_2":"","HASC_2":"FR.LT","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[-124,-106,-118,-119,125,-110]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":995,"NAME_1":"Centre","ID_2":13782,"NAME_2":"Loir-Et-Cher","VARNAME_2":"","HASC_2":"FR.LC","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[126,127,128,129]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":996,"NAME_1":"Champagne-Ardenne","ID_2":13783,"NAME_2":"Ardennes","VARNAME_2":"","HASC_2":"FR.AN","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[130,-75,-84,131,132]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":996,"NAME_1":"Champagne-Ardenne","ID_2":13784,"NAME_2":"Aube","VARNAME_2":"","HASC_2":"FR.AB","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[133,134,-69,-131,135,136]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":996,"NAME_1":"Champagne-Ardenne","ID_2":13785,"NAME_2":"Haute-Marne","VARNAME_2":"","HASC_2":"FR.HM","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[-128,137,-136,-133,138,139]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":996,"NAME_1":"Champagne-Ardenne","ID_2":13786,"NAME_2":"Marne","VARNAME_2":"","HASC_2":"FR.MR","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[140,141]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":997,"NAME_1":"Corse","ID_2":13787,"NAME_2":"Corse-Du-Sud","VARNAME_2":"Corse Du Sud","HASC_2":"FR.CS","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[-141,142]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":997,"NAME_1":"Corse","ID_2":13788,"NAME_2":"Haute-Corse","VARNAME_2":"","HASC_2":"FR.HC","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[143,144,145,146]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":998,"NAME_1":"Franche-Comté","ID_2":13789,"NAME_2":"Doubs","VARNAME_2":"","HASC_2":"FR.DB","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[147,-147,148,-70,-135,149]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":998,"NAME_1":"Franche-Comté","ID_2":13790,"NAME_2":"Haute-Saône","VARNAME_2":"","HASC_2":"FR.HN","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[-146,150,151,-80,-71,-149]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":998,"NAME_1":"Franche-Comté","ID_2":13791,"NAME_2":"Jura","VARNAME_2":"","HASC_2":"FR.JU","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[152,-144,-148,-6]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":998,"NAME_1":"Franche-Comté","ID_2":13792,"NAME_2":"Territoire de Belfort","VARNAME_2":"","HASC_2":"FR.TB","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[153,154,155,-112,-68,-55,156]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":999,"NAME_1":"Haute-Normandie","ID_2":13793,"NAME_2":"Eure","VARNAME_2":"","HASC_2":"FR.EU","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[157,-157,-59,158,159]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":999,"NAME_1":"Haute-Normandie","ID_2":13794,"NAME_2":"Seine-Maritime","VARNAME_2":"Seine-Inférieure","HASC_2":"FR.SM","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[160,161,-125,-108,162,163]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":1000,"NAME_1":"Île-de-France","ID_2":13795,"NAME_2":"Essonne","VARNAME_2":"","HASC_2":"FR.ES","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[-164,164,165,166,167,168]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":1000,"NAME_1":"Île-de-France","ID_2":13796,"NAME_2":"Hauts-De-Seine","VARNAME_2":"","HASC_2":"FR.HD","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[-139,-132,-86,-123,-162,169,170,171,172,173]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":1000,"NAME_1":"Île-de-France","ID_2":13797,"NAME_2":"Seine-Et-Marne","VARNAME_2":"","HASC_2":"FR.SE","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[174,175,-167,176,-171]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":1000,"NAME_1":"Île-de-France","ID_2":13798,"NAME_2":"Seine-Saint-Denis","VARNAME_2":"","HASC_2":"FR.SS","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[-170,-161,-169,177,-175]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":1000,"NAME_1":"Île-de-France","ID_2":13799,"NAME_2":"Val-De-Marne","VARNAME_2":"","HASC_2":"FR.VM","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[178,-172,-177,-166,179,-155]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":1000,"NAME_1":"Île-de-France","ID_2":13800,"NAME_2":"Val-D'Oise","VARNAME_2":"","HASC_2":"FR.VO","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[-178,-168,-176]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":1000,"NAME_1":"Île-de-France","ID_2":13801,"NAME_2":"Ville de Paris","VARNAME_2":"Paris|Siene","HASC_2":"FR.VP","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[-165,-163,-113,-156,-180]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":1000,"NAME_1":"Île-de-France","ID_2":13802,"NAME_2":"Yvelines","VARNAME_2":"","HASC_2":"FR.YV","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[180,181,182,183,184,185]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":1001,"NAME_1":"Languedoc-Roussillon","ID_2":13803,"NAME_2":"Aude","VARNAME_2":"","HASC_2":"FR.AD","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[186,187,188,189,190,191,192]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":1001,"NAME_1":"Languedoc-Roussillon","ID_2":13804,"NAME_2":"Gard","VARNAME_2":"","HASC_2":"FR.GA","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[193,-181,194,195,-190]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":1001,"NAME_1":"Languedoc-Roussillon","ID_2":13805,"NAME_2":"Hérault","VARNAME_2":"","HASC_2":"FR.HE","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[196,-192,197,-39,-46]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":1001,"NAME_1":"Languedoc-Roussillon","ID_2":13806,"NAME_2":"Lozère","VARNAME_2":"","HASC_2":"FR.LZ","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[198,199,-183]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":1001,"NAME_1":"Languedoc-Roussillon","ID_2":13807,"NAME_2":"Pyrénées-Orientales","VARNAME_2":"","HASC_2":"FR.PO","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[-49,-42,200,-9,201,202]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":1002,"NAME_1":"Limousin","ID_2":13808,"NAME_2":"Corrèze","VARNAME_2":"","HASC_2":"FR.CZ","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[-104,-35,-50,-203,203,-114]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":1002,"NAME_1":"Limousin","ID_2":13809,"NAME_2":"Creuse","VARNAME_2":"","HASC_2":"FR.CR","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[-204,-202,-15,204,205,-115]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":1002,"NAME_1":"Limousin","ID_2":13810,"NAME_2":"Haute-Vienne","VARNAME_2":"","HASC_2":"FR.HV","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[206,-3,207,208,209]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":1003,"NAME_1":"Lorraine","ID_2":13811,"NAME_2":"Meurthe-Et-Moselle","VARNAME_2":"","HASC_2":"FR.MM","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[-209,210,-137,-138,-127,211]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":1003,"NAME_1":"Lorraine","ID_2":13812,"NAME_2":"Meuse","VARNAME_2":"","HASC_2":"FR.MS","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[-4,-207,212]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":1003,"NAME_1":"Lorraine","ID_2":13813,"NAME_2":"Moselle","VARNAME_2":"Lothringen","HASC_2":"FR.MO","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[-7,-150,-134,-211,-208,-2]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":1003,"NAME_1":"Lorraine","ID_2":13814,"NAME_2":"Vosges","VARNAME_2":"","HASC_2":"FR.VG","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[-184,-200,213,214]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":1004,"NAME_1":"Midi-Pyrénées","ID_2":13815,"NAME_2":"Ariège","VARNAME_2":"","HASC_2":"FR.AG","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[-198,-191,-196,215,216,217,-40]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":1004,"NAME_1":"Midi-Pyrénées","ID_2":13816,"NAME_2":"Aveyron","VARNAME_2":"","HASC_2":"FR.AV","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[218,219,220,-29,-21,-26]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":1004,"NAME_1":"Midi-Pyrénées","ID_2":13817,"NAME_2":"Gers","VARNAME_2":"","HASC_2":"FR.GE","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[-185,-215,221,222,-220,223,224]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":1004,"NAME_1":"Midi-Pyrénées","ID_2":13818,"NAME_2":"Haute-Garonne","VARNAME_2":"Alto Garona","HASC_2":"FR.HG","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[[-31]],[[-30]],[[-223,225,-27,-221]]],"type":"MultiPolygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":1004,"NAME_1":"Midi-Pyrénées","ID_2":13819,"NAME_2":"Hautes-Pyrénées","VARNAME_2":"Altos Pirineos","HASC_2":"FR.HP","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[-41,-218,226,-24,-10,-201]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":1004,"NAME_1":"Midi-Pyrénées","ID_2":13820,"NAME_2":"Lot","VARNAME_2":"","HASC_2":"FR.LO","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[-195,-186,-225,227,-216]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":1004,"NAME_1":"Midi-Pyrénées","ID_2":13821,"NAME_2":"Tarn","VARNAME_2":"","HASC_2":"FR.TA","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[-217,-228,-224,-219,-25,-227]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":1004,"NAME_1":"Midi-Pyrénées","ID_2":13822,"NAME_2":"Tarn-Et-Garonne","VARNAME_2":"","HASC_2":"FR.TG","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[228,229,230,231]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":1005,"NAME_1":"Nord-Pas-de-Calais","ID_2":13823,"NAME_2":"Nord","VARNAME_2":"","HASC_2":"FR.NO","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[-231,232,233]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":1005,"NAME_1":"Nord-Pas-de-Calais","ID_2":13824,"NAME_2":"Pas-De-Calais","VARNAME_2":"","HASC_2":"FR.PC","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[234,235,236,-102,-98]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":1006,"NAME_1":"Pays de la Loire","ID_2":13825,"NAME_2":"Loire-Atlantique","VARNAME_2":"Loire-Inferieure","HASC_2":"FR.LA","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[237,-121,238,239,240,-235,-97,241]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":1006,"NAME_1":"Pays de la Loire","ID_2":13826,"NAME_2":"Maine-Et-Loire","VARNAME_2":"Mayne Et Loire","HASC_2":"FR.ML","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[242,-242,-96,-62,-67]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":1006,"NAME_1":"Pays de la Loire","ID_2":13827,"NAME_2":"Mayenne","VARNAME_2":"","HASC_2":"FR.MY","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[-111,-126,-122,-238,-243,-66]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":1006,"NAME_1":"Pays de la Loire","ID_2":13828,"NAME_2":"Sarthe","VARNAME_2":"","HASC_2":"FR.ST","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[-241,243,244,245,-236]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":1006,"NAME_1":"Pays de la Loire","ID_2":13829,"NAME_2":"Vendée","VARNAME_2":"Vendéia","HASC_2":"FR.VD","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[246,-129,-140,-174,247,248,-229]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":1007,"NAME_1":"Picardie","ID_2":13830,"NAME_2":"Aisne","VARNAME_2":"","HASC_2":"FR.AS","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[-248,-173,-179,-154,-158,249]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":1007,"NAME_1":"Picardie","ID_2":13831,"NAME_2":"Oise","VARNAME_2":"","HASC_2":"FR.OI","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[-230,-249,-250,-160,250,-233]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":1007,"NAME_1":"Picardie","ID_2":13832,"NAME_2":"Somme","VARNAME_2":"","HASC_2":"FR.SO","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[-14,251,252,253,-205]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":1008,"NAME_1":"Poitou-Charentes","ID_2":13833,"NAME_2":"Charente","VARNAME_2":"","HASC_2":"FR.CT","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[[254]],[[255]],[[256,-252,-13,-16,257,-245]]],"type":"MultiPolygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":1008,"NAME_1":"Poitou-Charentes","ID_2":13834,"NAME_2":"Charente-Maritime","VARNAME_2":"Charente-Inférieure","HASC_2":"FR.CM","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[258,-253,-257,-244,-240]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":1008,"NAME_1":"Poitou-Charentes","ID_2":13835,"NAME_2":"Deux-Sèvres","VARNAME_2":"","HASC_2":"FR.DS","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[-116,-206,-254,-259,-239,-120]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":1008,"NAME_1":"Poitou-Charentes","ID_2":13836,"NAME_2":"Vienne","VARNAME_2":"","HASC_2":"FR.VN","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[259,260,261,262,263,264]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":1009,"NAME_1":"Provence-Alpes-Côte-d'Azur","ID_2":13837,"NAME_2":"Alpes-De-Haute-Provence","VARNAME_2":"Alpes Da Alta Provença|Basses-Alpes","HASC_2":"FR.AP","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[265,-260,266]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":1009,"NAME_1":"Provence-Alpes-Côte-d'Azur","ID_2":13838,"NAME_2":"Alpes-Maritimes","VARNAME_2":"","HASC_2":"FR.AM","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[267,268,-188,269]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":1009,"NAME_1":"Provence-Alpes-Côte-d'Azur","ID_2":13839,"NAME_2":"Bouches-Du-Rhône","VARNAME_2":"","HASC_2":"FR.BD","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[270,-264,271,272,273]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":1009,"NAME_1":"Provence-Alpes-Côte-d'Azur","ID_2":13840,"NAME_2":"Hautes-Alpes","VARNAME_2":"","HASC_2":"FR.HA","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[274,-268,-261,-266]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":1009,"NAME_1":"Provence-Alpes-Côte-d'Azur","ID_2":13841,"NAME_2":"Var","VARNAME_2":"","HASC_2":"FR.VR","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[[-262,-270,-187,275,276]],[[277]]],"type":"MultiPolygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":1009,"NAME_1":"Provence-Alpes-Côte-d'Azur","ID_2":13842,"NAME_2":"Vaucluse","VARNAME_2":"","HASC_2":"FR.VC","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[-152,278,279,280,281,282,-81]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":1010,"NAME_1":"Rhône-Alpes","ID_2":13843,"NAME_2":"Ain","VARNAME_2":"","HASC_2":"FR.AI","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[-276,-193,-197,-45,283,284,285]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":1010,"NAME_1":"Rhône-Alpes","ID_2":13844,"NAME_2":"Ardèche","VARNAME_2":"","HASC_2":"FR.AH","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[-272,-263,-277,-286,286],[-278]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":1010,"NAME_1":"Rhône-Alpes","ID_2":13845,"NAME_2":"Drôme","VARNAME_2":"","HASC_2":"FR.DM","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[287,-280,288]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":1010,"NAME_1":"Rhône-Alpes","ID_2":13846,"NAME_2":"Haute-Savoie","VARNAME_2":"","HASC_2":"FR.HS","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[289,-273,-287,-285,290,291,-282]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":1010,"NAME_1":"Rhône-Alpes","ID_2":13847,"NAME_2":"Isère","VARNAME_2":"","HASC_2":"FR.IS","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[-83,292,-291,-284,-44,-48,-33]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":1010,"NAME_1":"Rhône-Alpes","ID_2":13848,"NAME_2":"Loire","VARNAME_2":"","HASC_2":"FR.LR","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[-283,-292,-293,-82]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":1010,"NAME_1":"Rhône-Alpes","ID_2":13849,"NAME_2":"Rhône","VARNAME_2":"","HASC_2":"FR.RH","TYPE_2":"Département","ENGTYPE_2":"Department"}},{"arcs":[[293,-274,-290,-281,-288]],"type":"Polygon","properties":{"ISO":"FRA","NAME_0":"France","ID_1":1010,"NAME_1":"Rhône-Alpes","ID_2":13850,"NAME_2":"Savoie","VARNAME_2":"Sabóia|Savoia","HASC_2":"FR.SV","TYPE_2":"Département","ENGTYPE_2":"Department"}}]}}}
\ No newline at end of file
diff --git a/examples/drag-and-drop-custom-kmz.css b/examples/drag-and-drop-custom-kmz.css
new file mode 100644
index 0000000000..020e8f7a78
--- /dev/null
+++ b/examples/drag-and-drop-custom-kmz.css
@@ -0,0 +1,9 @@
+#info {
+ width: 100%;
+ height: 24rem;
+ overflow: scroll;
+ display: flex;
+ align-items: baseline;
+ border: 1px solid black;
+ justify-content: flex-start;
+}
diff --git a/examples/drag-and-drop-custom-kmz.html b/examples/drag-and-drop-custom-kmz.html
new file mode 100644
index 0000000000..2e2396695d
--- /dev/null
+++ b/examples/drag-and-drop-custom-kmz.html
@@ -0,0 +1,22 @@
+---
+layout: example.html
+title: Custom Drag-and-Drop (KMZ)
+shortdesc: Example of using the drag-and-drop interaction with a custom format to handle KMZ files.
+docs: >
+ Example of using the drag-and-drop interaction with a custom format to handle KMZ files.
+ In addition to the formats used in the [Drag-and-Drop](drag-and-drop.html) example a custom format (subclassing KML) is used to handle KMZ files.
+ KML and icons must be extracted from the KMZ array buffer synchronously.
+ JSZip 2.x is used as it has better browser compatibility and is simpler to code than the more recent JSZip-sync .
+ There is no projection transform support, so this will only work with data in EPSG:4326 and EPSG:3857.
+tags: "drag-and-drop, kml, kmz"
+resources:
+ - https://cdnjs.cloudflare.com/ajax/libs/jszip/2.6.1/jszip.min.js
+---
+
+
+
+
+
diff --git a/examples/drag-and-drop-custom-kmz.js b/examples/drag-and-drop-custom-kmz.js
new file mode 100644
index 0000000000..41b7b3e8c5
--- /dev/null
+++ b/examples/drag-and-drop-custom-kmz.js
@@ -0,0 +1,155 @@
+import Map from '../src/ol/Map.js';
+import View from '../src/ol/View.js';
+import {
+ DragAndDrop,
+ defaults as defaultInteractions,
+} from '../src/ol/interaction.js';
+import {GPX, GeoJSON, IGC, KML, TopoJSON} from '../src/ol/format.js';
+import {OSM, Vector as VectorSource} from '../src/ol/source.js';
+import {Tile as TileLayer, Vector as VectorLayer} from '../src/ol/layer.js';
+
+// Create functions to extract KML and icons from KMZ array buffer,
+// which must be done synchronously.
+
+const zip = new JSZip();
+
+function getKMLData(buffer) {
+ let kmlData;
+ zip.load(buffer);
+ const kmlFile = zip.file(/.kml$/i)[0];
+ if (kmlFile) {
+ kmlData = kmlFile.asText();
+ }
+ return kmlData;
+}
+
+function getKMLImage(href) {
+ let url = href;
+ let path = window.location.href;
+ path = path.slice(0, path.lastIndexOf('/') + 1);
+ if (href.indexOf(path) === 0) {
+ const regexp = new RegExp(href.replace(path, '') + '$', 'i');
+ const kmlFile = zip.file(regexp)[0];
+ if (kmlFile) {
+ url = URL.createObjectURL(new Blob([kmlFile.asArrayBuffer()]));
+ }
+ }
+ return url;
+}
+
+// Define a KMZ format class by subclassing ol/format/KML
+
+class KMZ extends KML {
+ constructor(opt_options) {
+ const options = opt_options || {};
+ options.iconUrlFunction = getKMLImage;
+ super(options);
+ }
+
+ getType() {
+ return 'arraybuffer';
+ }
+
+ readFeature(source, options) {
+ const kmlData = getKMLData(source);
+ return super.readFeature(kmlData, options);
+ }
+
+ readFeatures(source, options) {
+ const kmlData = getKMLData(source);
+ return super.readFeatures(kmlData, options);
+ }
+}
+
+// Set up map with Drag and Drop interaction
+
+const dragAndDropInteraction = new DragAndDrop({
+ formatConstructors: [KMZ, GPX, GeoJSON, IGC, KML, TopoJSON],
+});
+
+const map = new Map({
+ interactions: defaultInteractions().extend([dragAndDropInteraction]),
+ layers: [
+ new TileLayer({
+ source: new OSM(),
+ }),
+ ],
+ target: 'map',
+ view: new View({
+ center: [0, 0],
+ zoom: 2,
+ }),
+});
+
+dragAndDropInteraction.on('addfeatures', function (event) {
+ const vectorSource = new VectorSource({
+ features: event.features,
+ });
+ map.addLayer(
+ new VectorLayer({
+ source: vectorSource,
+ })
+ );
+ map.getView().fit(vectorSource.getExtent());
+});
+
+const displayFeatureInfo = function (pixel) {
+ const features = [];
+ map.forEachFeatureAtPixel(pixel, function (feature) {
+ features.push(feature);
+ });
+ if (features.length > 0) {
+ const info = [];
+ let i, ii;
+ for (i = 0, ii = features.length; i < ii; ++i) {
+ const description =
+ features[i].get('description') ||
+ features[i].get('name') ||
+ features[i].get('_name') ||
+ features[i].get('layer');
+ if (description) {
+ info.push(description);
+ }
+ }
+ document.getElementById('info').innerHTML = info.join(' ') || ' ';
+ } else {
+ document.getElementById('info').innerHTML = ' ';
+ }
+};
+
+map.on('pointermove', function (evt) {
+ if (evt.dragging) {
+ return;
+ }
+ const pixel = map.getEventPixel(evt.originalEvent);
+ displayFeatureInfo(pixel);
+});
+
+map.on('click', function (evt) {
+ displayFeatureInfo(evt.pixel);
+});
+
+// Sample data download
+
+const link = document.getElementById('download');
+
+function download(fullpath, filename) {
+ fetch(fullpath)
+ .then(function (response) {
+ return response.blob();
+ })
+ .then(function (blob) {
+ if (navigator.msSaveBlob) {
+ // link download attribuute does not work on MS browsers
+ navigator.msSaveBlob(blob, filename);
+ } else {
+ link.href = URL.createObjectURL(blob);
+ link.download = filename;
+ link.click();
+ }
+ });
+}
+
+document.getElementById('download-kmz').addEventListener('click', function () {
+ download('data/kmz/iceland.kmz', 'iceland.kmz');
+});
diff --git a/examples/drag-and-drop-custom-mvt.css b/examples/drag-and-drop-custom-mvt.css
new file mode 100644
index 0000000000..98084d7230
--- /dev/null
+++ b/examples/drag-and-drop-custom-mvt.css
@@ -0,0 +1,3 @@
+.tileCoord input {
+ width: 60px;
+}
diff --git a/examples/drag-and-drop-custom-mvt.html b/examples/drag-and-drop-custom-mvt.html
new file mode 100644
index 0000000000..6c92b4caef
--- /dev/null
+++ b/examples/drag-and-drop-custom-mvt.html
@@ -0,0 +1,23 @@
+---
+layout: example.html
+title: Custom Drag-and-Drop (MVT preview)
+shortdesc: Example of using the drag-and-drop interaction with a custom format to preview MVT tiles.
+docs: >
+ Example of using the drag-and-drop interaction with a custom format to preview MVT tiles.
+ In addition to the formats used in the [Drag-and-Drop](drag-and-drop.html) example individual MVT tiles can be previewed.
+ There is no projection transform support, so this will only work with data in EPSG:4326 and EPSG:3857.
+tags: "drag-and-drop, mvt"
+---
+
+
+
+
+
diff --git a/examples/drag-and-drop-custom-mvt.js b/examples/drag-and-drop-custom-mvt.js
new file mode 100644
index 0000000000..5ac2740ad6
--- /dev/null
+++ b/examples/drag-and-drop-custom-mvt.js
@@ -0,0 +1,133 @@
+import Feature from '../src/ol/Feature.js';
+import Map from '../src/ol/Map.js';
+import View from '../src/ol/View.js';
+import {
+ DragAndDrop,
+ defaults as defaultInteractions,
+} from '../src/ol/interaction.js';
+import {GPX, GeoJSON, IGC, KML, MVT, TopoJSON} from '../src/ol/format.js';
+import {OSM, Vector as VectorSource} from '../src/ol/source.js';
+import {Tile as TileLayer, Vector as VectorLayer} from '../src/ol/layer.js';
+import {createXYZ} from '../src/ol/tilegrid.js';
+
+// Define a custom MVT format as ol/format/MVT requires an extent
+
+const tileCoordZ = document.getElementById('tileCoordZ');
+const tileCoordX = document.getElementById('tileCoordX');
+const tileCoordY = document.getElementById('tileCoordY');
+
+class customMVT extends MVT {
+ constructor() {
+ super({featureClass: Feature});
+ }
+ readFeatures(source, options) {
+ options.extent = createXYZ().getTileCoordExtent([
+ parseInt(tileCoordZ.value),
+ parseInt(tileCoordX.value),
+ parseInt(tileCoordY.value),
+ ]);
+ return super.readFeatures(source, options);
+ }
+}
+
+// Set up map with Drag and Drop interaction
+
+const dragAndDropInteraction = new DragAndDrop({
+ formatConstructors: [customMVT, GPX, GeoJSON, IGC, KML, TopoJSON],
+});
+
+const map = new Map({
+ interactions: defaultInteractions().extend([dragAndDropInteraction]),
+ layers: [
+ new TileLayer({
+ source: new OSM(),
+ }),
+ ],
+ target: 'map',
+ view: new View({
+ center: [0, 0],
+ zoom: 2,
+ }),
+});
+
+dragAndDropInteraction.on('addfeatures', function (event) {
+ const vectorSource = new VectorSource({
+ features: event.features,
+ });
+ map.addLayer(
+ new VectorLayer({
+ source: vectorSource,
+ })
+ );
+ map.getView().fit(vectorSource.getExtent());
+});
+
+const displayFeatureInfo = function (pixel) {
+ const features = [];
+ map.forEachFeatureAtPixel(pixel, function (feature) {
+ features.push(feature);
+ });
+ if (features.length > 0) {
+ const info = [];
+ let i, ii;
+ for (i = 0, ii = features.length; i < ii; ++i) {
+ const description =
+ features[i].get('name') ||
+ features[i].get('_name') ||
+ features[i].get('layer');
+ if (description) {
+ info.push(description);
+ }
+ }
+ document.getElementById('info').innerHTML = info.join(', ') || ' ';
+ } else {
+ document.getElementById('info').innerHTML = ' ';
+ }
+};
+
+map.on('pointermove', function (evt) {
+ if (evt.dragging) {
+ return;
+ }
+ const pixel = map.getEventPixel(evt.originalEvent);
+ displayFeatureInfo(pixel);
+});
+
+map.on('click', function (evt) {
+ displayFeatureInfo(evt.pixel);
+});
+
+// Sample data download
+
+const link = document.getElementById('download');
+
+function download(fullpath, filename) {
+ fetch(fullpath)
+ .then(function (response) {
+ return response.blob();
+ })
+ .then(function (blob) {
+ if (navigator.msSaveBlob) {
+ // link download attribuute does not work on MS browsers
+ navigator.msSaveBlob(blob, filename);
+ } else {
+ link.href = URL.createObjectURL(blob);
+ link.download = filename;
+ link.click();
+ }
+ });
+}
+
+document.getElementById('download-mvt').addEventListener('click', function () {
+ const fullpath =
+ 'https://basemaps.arcgis.com/v1/arcgis/rest/services/World_Basemap/VectorTileServer/tile/' +
+ tileCoordZ.value +
+ '/' +
+ tileCoordY.value +
+ '/' +
+ tileCoordX.value +
+ '.pbf';
+ const filename =
+ tileCoordZ.value + '-' + tileCoordX.value + '-' + tileCoordY.value + '.mvt';
+ download(fullpath, filename);
+});
diff --git a/examples/drag-and-drop.html b/examples/drag-and-drop.html
index c8f0772329..f262aee390 100644
--- a/examples/drag-and-drop.html
+++ b/examples/drag-and-drop.html
@@ -10,4 +10,20 @@ cloak:
value: Get your own API key at https://www.maptiler.com/cloud/
---
+ Extract styles from KML
+
+
+
+ Download samples:
+
GPX
+
+
GeoJSON
+
+
IGC
+
+
KML
+
+
TopoJSON
+
+
diff --git a/examples/drag-and-drop.js b/examples/drag-and-drop.js
index 04ba089aee..b37ee3cf26 100644
--- a/examples/drag-and-drop.js
+++ b/examples/drag-and-drop.js
@@ -1,24 +1,16 @@
+import DragAndDrop from '../src/ol/interaction/DragAndDrop.js';
import Map from '../src/ol/Map.js';
import View from '../src/ol/View.js';
-import {
- DragAndDrop,
- defaults as defaultInteractions,
-} from '../src/ol/interaction.js';
import {GPX, GeoJSON, IGC, KML, TopoJSON} from '../src/ol/format.js';
import {Tile as TileLayer, Vector as VectorLayer} from '../src/ol/layer.js';
import {Vector as VectorSource, XYZ} from '../src/ol/source.js';
-const dragAndDropInteraction = new DragAndDrop({
- formatConstructors: [GPX, GeoJSON, IGC, KML, TopoJSON],
-});
-
const key = 'get_your_own_D6rA4zTHduk6KOKTXzGB';
const attributions =
'© MapTiler ' +
'© OpenStreetMap contributors ';
const map = new Map({
- interactions: defaultInteractions().extend([dragAndDropInteraction]),
layers: [
new TileLayer({
source: new XYZ({
@@ -36,17 +28,39 @@ const map = new Map({
}),
});
-dragAndDropInteraction.on('addfeatures', function (event) {
- const vectorSource = new VectorSource({
- features: event.features,
+const extractStyles = document.getElementById('extractstyles');
+let dragAndDropInteraction;
+
+function setInteraction() {
+ if (dragAndDropInteraction) {
+ map.removeInteraction(dragAndDropInteraction);
+ }
+ dragAndDropInteraction = new DragAndDrop({
+ formatConstructors: [
+ GPX,
+ GeoJSON,
+ IGC,
+ // use constructed format to set options
+ new KML({extractStyles: extractStyles.checked}),
+ TopoJSON,
+ ],
});
- map.addLayer(
- new VectorLayer({
- source: vectorSource,
- })
- );
- map.getView().fit(vectorSource.getExtent());
-});
+ dragAndDropInteraction.on('addfeatures', function (event) {
+ const vectorSource = new VectorSource({
+ features: event.features,
+ });
+ map.addLayer(
+ new VectorLayer({
+ source: vectorSource,
+ })
+ );
+ map.getView().fit(vectorSource.getExtent());
+ });
+ map.addInteraction(dragAndDropInteraction);
+}
+setInteraction();
+
+extractStyles.addEventListener('change', setInteraction);
const displayFeatureInfo = function (pixel) {
const features = [];
@@ -76,3 +90,48 @@ map.on('pointermove', function (evt) {
map.on('click', function (evt) {
displayFeatureInfo(evt.pixel);
});
+
+// Sample data downloads
+
+const link = document.getElementById('download');
+
+function download(fullpath, filename) {
+ fetch(fullpath)
+ .then(function (response) {
+ return response.blob();
+ })
+ .then(function (blob) {
+ if (navigator.msSaveBlob) {
+ // link download attribuute does not work on MS browsers
+ navigator.msSaveBlob(blob, filename);
+ } else {
+ link.href = URL.createObjectURL(blob);
+ link.download = filename;
+ link.click();
+ }
+ });
+}
+
+document.getElementById('download-gpx').addEventListener('click', function () {
+ download('data/gpx/fells_loop.gpx', 'fells_loop.gpx');
+});
+
+document
+ .getElementById('download-geojson')
+ .addEventListener('click', function () {
+ download('data/geojson/roads-seoul.geojson', 'roads-seoul.geojson');
+ });
+
+document.getElementById('download-igc').addEventListener('click', function () {
+ download('data/igc/Ulrich-Prinz.igc', 'Ulrich-Prinz.igc');
+});
+
+document.getElementById('download-kml').addEventListener('click', function () {
+ download('data/kml/states.kml', 'states.kml');
+});
+
+document
+ .getElementById('download-topojson')
+ .addEventListener('click', function () {
+ download('data/topojson/fr-departments.json', 'fr-departments.json');
+ });
diff --git a/examples/resources/common.js b/examples/resources/common.js
index 7b171b5f51..d7b4db7682 100644
--- a/examples/resources/common.js
+++ b/examples/resources/common.js
@@ -9,7 +9,7 @@
function fetchResource(resource) {
return new Promise(function (resolve, reject) {
- const isImage = /\.(png|jpe?g|gif|tiff|svg)$/.test(resource);
+ const isImage = /\.(png|jpe?g|gif|tiff|svg|kmz)$/.test(resource);
if (isImage) {
resolve ({
isBinary: true,
diff --git a/examples/templates/example.html b/examples/templates/example.html
index 5d8594e594..c20984a245 100644
--- a/examples/templates/example.html
+++ b/examples/templates/example.html
@@ -68,7 +68,7 @@
-
+
{{{ extraHead.local }}}
{{{ css.tag }}}
{{ title }}
@@ -194,7 +194,7 @@
<!-- Pointer events polyfill for old browsers, see https://caniuse.com/#feat=pointer -->
<script src="https://unpkg.com/elm-pep"></script>{{#if extraHead.remote}}
<!-- The line below is only needed for old environments like Internet Explorer and Android 4.x -->
- <script src="https://cdn.polyfill.io/v2/polyfill.min.js?features=fetch,requestAnimationFrame,Element.prototype.classList,URL"></script>
+ <script src="https://cdn.polyfill.io/v3/polyfill.min.js?features=fetch,requestAnimationFrame,Element.prototype.classList,URL,TextDecoder"></script>
{{ indent extraHead.remote spaces=4 }}{{/if}}
<style>
.map {
diff --git a/src/ol/interaction/DragAndDrop.js b/src/ol/interaction/DragAndDrop.js
index a2a5690d19..7c2d433aa0 100644
--- a/src/ol/interaction/DragAndDrop.js
+++ b/src/ol/interaction/DragAndDrop.js
@@ -5,6 +5,7 @@
import Event from '../events/Event.js';
import EventType from '../events/EventType.js';
+import FormatType from '../format/FormatType.js';
import Interaction from './Interaction.js';
import {TRUE} from '../functions.js';
import {get as getProjection} from '../proj.js';
@@ -12,7 +13,8 @@ import {listen, unlistenByKey} from '../events.js';
/**
* @typedef {Object} Options
- * @property {Array} [formatConstructors] Format constructors.
+ * @property {Array} [formatConstructors] Format constructors
+ * (and/or formats pre-constructed with options).
* @property {import("../source/Vector.js").default} [source] Optional vector source where features will be added. If a source is provided
* all existing features will be removed and new features will be added when
* they are dropped on the target. If you want to add features to a vector
@@ -75,6 +77,11 @@ export class DragAndDropEvent extends Event {
/**
* @classdesc
* Handles input of vector data by drag and drop.
+ *
+ * Note that the DragAndDrop interaction uses the TextDecoder() constructor if the supplied
+ * combinnation of formats read both text string and ArrayBuffer sources. Older browsers such
+ * as IE which do not support this will need a TextDecoder polyfill to be loaded before use.
+ *
* @api
*
* @fires DragAndDropEvent
@@ -92,11 +99,27 @@ class DragAndDrop extends Interaction {
/**
* @private
- * @type {Array}
+ * @type {boolean}
*/
- this.formatConstructors_ = options.formatConstructors
+ this.readAsBuffer_ = false;
+
+ /**
+ * @private
+ * @type {Array}
+ */
+ this.formats_ = [];
+ const formatConstructors = options.formatConstructors
? options.formatConstructors
: [];
+ for (let i = 0, ii = formatConstructors.length; i < ii; ++i) {
+ let format = formatConstructors[i];
+ if (typeof format === 'function') {
+ format = new format();
+ }
+ this.formats_.push(format);
+ this.readAsBuffer_ =
+ this.readAsBuffer_ || format.getType() === FormatType.ARRAY_BUFFER;
+ }
/**
* @private
@@ -139,10 +162,18 @@ class DragAndDrop extends Interaction {
projection = view.getProjection();
}
- const formatConstructors = this.formatConstructors_;
- for (let i = 0, ii = formatConstructors.length; i < ii; ++i) {
- const format = new formatConstructors[i]();
- const features = this.tryReadFeatures_(format, result, {
+ let text;
+ const formats = this.formats_;
+ for (let i = 0, ii = formats.length; i < ii; ++i) {
+ const format = formats[i];
+ let input = result;
+ if (this.readAsBuffer_ && format.getType() !== FormatType.ARRAY_BUFFER) {
+ if (text === undefined) {
+ text = new TextDecoder().decode(result);
+ }
+ input = text;
+ }
+ const features = this.tryReadFeatures_(format, input, {
featureProjection: projection,
});
if (features && features.length > 0) {
@@ -249,7 +280,11 @@ class DragAndDrop extends Interaction {
EventType.LOAD,
this.handleResult_.bind(this, file)
);
- reader.readAsText(file);
+ if (this.readAsBuffer_) {
+ reader.readAsArrayBuffer(file);
+ } else {
+ reader.readAsText(file);
+ }
}
}
diff --git a/test/spec/ol/interaction/draganddrop.test.js b/test/spec/ol/interaction/draganddrop.test.js
index e81bfe8be8..c6d2bb8eb3 100644
--- a/test/spec/ol/interaction/draganddrop.test.js
+++ b/test/spec/ol/interaction/draganddrop.test.js
@@ -2,6 +2,7 @@ import DragAndDrop from '../../../../src/ol/interaction/DragAndDrop.js';
import Event from '../../../../src/ol/events/Event.js';
import EventTarget from '../../../../src/ol/events/Target.js';
import GeoJSON from '../../../../src/ol/format/GeoJSON.js';
+import MVT from '../../../../src/ol/format/MVT.js';
import VectorSource from '../../../../src/ol/source/Vector.js';
import View from '../../../../src/ol/View.js';
@@ -29,8 +30,8 @@ where('FileReader').describe('ol.interaction.DragAndDrop', function () {
expect(interaction).to.be.an(DragAndDrop);
});
- it('sets formatConstructors on the instance', function () {
- expect(interaction.formatConstructors_).to.have.length(1);
+ it('sets formats on the instance', function () {
+ expect(interaction.formats_).to.have.length(1);
});
it('accepts a source option', function () {
@@ -88,18 +89,28 @@ where('FileReader').describe('ol.interaction.DragAndDrop', function () {
describe('#handleDrop_', function () {
let OrigFileReader;
+ let mockReadAsText;
+ let mockReadAsArrayBuffer;
beforeEach(function () {
OrigFileReader = FileReader;
+ mockReadAsText = false;
+ mockReadAsArrayBuffer = false;
class MockFileReader extends EventTarget {
constructor() {
super(...arguments);
}
readAsText(file) {
+ mockReadAsText = true;
this.result = file;
this.dispatchEvent('load');
}
+ readAsArrayBuffer(file) {
+ mockReadAsArrayBuffer = true;
+ this.result = new TextEncoder().encode(file).buffer;
+ this.dispatchEvent('load');
+ }
}
FileReader = MockFileReader;
});
@@ -108,9 +119,11 @@ where('FileReader').describe('ol.interaction.DragAndDrop', function () {
FileReader = OrigFileReader;
});
- it('reads dropped files', function (done) {
+ it('reads dropped files as text', function (done) {
interaction.on('addfeatures', function (evt) {
expect(evt.features.length).to.be(1);
+ expect(mockReadAsText).to.be(true);
+ expect(mockReadAsArrayBuffer).to.be(false);
done();
});
interaction.setMap(map);
@@ -135,6 +148,121 @@ where('FileReader').describe('ol.interaction.DragAndDrop', function () {
expect(event.propagationStopped).to.be(true);
});
+ it('reads dropped files as arraybuffer', function (done) {
+ const drop = new DragAndDrop({
+ formatConstructors: [GeoJSON, MVT],
+ });
+ drop.setMap(map);
+
+ drop.on('addfeatures', function (evt) {
+ expect(evt.features.length).to.be(1);
+ expect(mockReadAsText).to.be(false);
+ expect(mockReadAsArrayBuffer).to.be(true);
+ done();
+ });
+
+ const event = new Event();
+ event.dataTransfer = {};
+ event.type = 'dragenter';
+ viewport.dispatchEvent(event);
+ event.type = 'dragover';
+ viewport.dispatchEvent(event);
+ event.type = 'drop';
+ event.dataTransfer.files = {
+ length: 1,
+ item: function () {
+ return JSON.stringify({
+ type: 'FeatureCollection',
+ features: [{type: 'Feature', id: '1'}],
+ });
+ },
+ };
+ viewport.dispatchEvent(event);
+ expect(event.dataTransfer.dropEffect).to.be('copy');
+ expect(event.propagationStopped).to.be(true);
+ });
+
+ it('reads using constructed formats', function (done) {
+ const drop = new DragAndDrop({
+ formatConstructors: [new GeoJSON()],
+ });
+ drop.setMap(map);
+
+ drop.on('addfeatures', function (evt) {
+ expect(evt.features.length).to.be(1);
+ expect(mockReadAsText).to.be(true);
+ expect(mockReadAsArrayBuffer).to.be(false);
+ done();
+ });
+
+ const event = new Event();
+ event.dataTransfer = {};
+ event.type = 'dragenter';
+ viewport.dispatchEvent(event);
+ event.type = 'dragover';
+ viewport.dispatchEvent(event);
+ event.type = 'drop';
+ event.dataTransfer.files = {
+ length: 1,
+ item: function () {
+ return JSON.stringify({
+ type: 'FeatureCollection',
+ features: [{type: 'Feature', id: '1'}],
+ });
+ },
+ };
+ viewport.dispatchEvent(event);
+ expect(event.dataTransfer.dropEffect).to.be('copy');
+ expect(event.propagationStopped).to.be(true);
+ });
+
+ it('reads using arraybuffer formats', function (done) {
+ class binaryGeoJSON extends GeoJSON {
+ constructor(options) {
+ super(options);
+ }
+ getType() {
+ return 'arraybuffer';
+ }
+ readFeatures(source, options) {
+ const data = new TextDecoder().decode(source);
+ return super.readFeatures(data, options);
+ }
+ }
+
+ const drop = new DragAndDrop({
+ formatConstructors: [binaryGeoJSON],
+ });
+ drop.setMap(map);
+
+ drop.on('addfeatures', function (evt) {
+ expect(evt.features.length).to.be(1);
+ expect(mockReadAsText).to.be(false);
+ expect(mockReadAsArrayBuffer).to.be(true);
+ done();
+ });
+
+ const event = new Event();
+ event.dataTransfer = {};
+ event.type = 'dragenter';
+ viewport.dispatchEvent(event);
+ event.type = 'dragover';
+ viewport.dispatchEvent(event);
+ event.type = 'drop';
+ event.dataTransfer.files = {
+ length: 1,
+ item: function () {
+ return JSON.stringify({
+ type: 'FeatureCollection',
+ features: [{type: 'Feature', id: '1'}],
+ });
+ },
+ };
+ viewport.dispatchEvent(event);
+ expect(event.dataTransfer.dropEffect).to.be('copy');
+ expect(event.propagationStopped).to.be(true);
+ });
+
it('adds dropped features to a source', function (done) {
const source = new VectorSource();
const drop = new DragAndDrop({
From c5cd29e2ac2fff43238ea72f37ee223c030ca4d1 Mon Sep 17 00:00:00 2001
From: mike-000 <49240900+mike-000@users.noreply.github.com>
Date: Mon, 9 Nov 2020 21:06:59 +0000
Subject: [PATCH 2/2] Link label to checkbox
---
examples/drag-and-drop.html | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/examples/drag-and-drop.html b/examples/drag-and-drop.html
index f262aee390..da82535fdc 100644
--- a/examples/drag-and-drop.html
+++ b/examples/drag-and-drop.html
@@ -10,7 +10,7 @@ cloak:
value: Get your own API key at https://www.maptiler.com/cloud/
---
- Extract styles from KML
+ Extract styles from KML