From 88afc80089a5eeb11521ade5dfd062713a49b732 Mon Sep 17 00:00:00 2001 From: "ronan.vignard" <ronan.vignard@developpement-durable.gouv.fr> Date: Mon, 10 Mar 2025 16:50:57 +0100 Subject: [PATCH 01/36] Nouveau fichier .shp pour le test de import_shapefile() --- R/import_shapefile.R | 2 +- inst/GARE.AVL | 169 +++++++++++++++++++++++++ inst/GARE.DBF | Bin 0 -> 33113 bytes inst/GARE.LYR | Bin 0 -> 12288 bytes inst/GARE.PRJ | 1 + inst/GARE.SHP | Bin 0 -> 18244 bytes inst/GARE.SHX | Bin 0 -> 5284 bytes tests/testthat/test-import_shapefile.R | 16 ++- 8 files changed, 183 insertions(+), 5 deletions(-) create mode 100644 inst/GARE.AVL create mode 100644 inst/GARE.DBF create mode 100644 inst/GARE.LYR create mode 100644 inst/GARE.PRJ create mode 100644 inst/GARE.SHP create mode 100644 inst/GARE.SHX diff --git a/R/import_shapefile.R b/R/import_shapefile.R index 9445ad0..512823a 100644 --- a/R/import_shapefile.R +++ b/R/import_shapefile.R @@ -17,7 +17,7 @@ #' @examples #' \dontrun{ #' # Importer le fichier shapefile dans un dataframe -#' chef_lieu <- import_shapefile(system.file("CHFLIEU_COMMUNE_ASSOCIEE_OU_DELEGUEE.shp", package = "collectr"),2154) +#' gare <- import_shapefile(system.file("GARE.shp", package = "collectr"),2154) #' } import_shapefile <- function(filepath, crs) { # Vérifier si le fichier Shapefile existe diff --git a/inst/GARE.AVL b/inst/GARE.AVL new file mode 100644 index 0000000..927d97c --- /dev/null +++ b/inst/GARE.AVL @@ -0,0 +1,169 @@ +/3.0 +(ODB.1 + FirstRootClassName: "Legend" + Roots: 2 + Version: 30 +) + +(Legend.2 + LegType: 0x01 + ClassType: 0x03 + Symbols: 3 + Class: 22 + StdDevs: 1.00000000000000 + NullSym: 23 + NullValues: 30 + StatValues: 31 + Precision: -3 +) + +(SymList.3 + Child: 4 +) + +(CMkSym.4 + Color: 5 + Symbols: 6 + BgColor: 21 + Size: 4.00000000000000 +) + +(TClr.5 + Red: 0xa5a5 + Green: 0xa5a5 + Blue: 0xa5a5 +) + +(SymList.6 + Child: 7 + Child: 14 +) + +(BMkSym.7 + Color: 8 + BgColor: 9 + Font: 10 + Size: 4.00000000000000 + Pattern: 37 + Angle: 360.00000000000000 +) + +(TClr.8 + Red: 0xa5a5 + Green: 0xa5a5 + Blue: 0xa5a5 +) + +(TClr.9 + Name: "Transparent" +) + +(NFont.10 + Family: 11 + Name: 12 + Style: 13 + Weight: 1 + Wideness: 1 +) + +(AVStr.11 + S: "ESRI Geometric Symbols" +) + +(AVStr.12 + S: "ESRI Geometric Symbols" +) + +(AVStr.13 + S: "Normal" +) + +(BMkSym.14 + Color: 15 + ColorLock: 1 + BgColor: 16 + Font: 17 + Size: 4.00000000000000 + Pattern: 85 + Angle: 360.00000000000000 +) + +(TClr.15 +) + +(TClr.16 + Name: "Transparent" +) + +(NFont.17 + Family: 18 + Name: 19 + Style: 20 + Weight: 1 + Wideness: 1 +) + +(AVStr.18 + S: "ESRI Geometric Symbols" +) + +(AVStr.19 + S: "ESRI Geometric Symbols" +) + +(AVStr.20 + S: "Normal" +) + +(TClr.21 + Name: "Transparent" +) + +(LClass.22 + IsText: 1 + Precision: -3 +) + +(BMkSym.23 + Color: 24 + BgColor: 25 + Font: 26 + Size: 8.00000000000000 + Pattern: 35 + Angle: 360.00000000000000 +) + +(TClr.24 + Name: "Transparent" +) + +(TClr.25 + Name: "Transparent" +) + +(NFont.26 + Family: 27 + Name: 28 + Style: 29 + Weight: 1 + Wideness: 1 +) + +(AVStr.27 + S: "ESRI Geometric Symbols" +) + +(AVStr.28 + S: "ESRI Geometric Symbols" +) + +(AVStr.29 + S: "Normal" +) + +(NameDict.30 +) + +(NameDict.31 +) + diff --git a/inst/GARE.DBF b/inst/GARE.DBF new file mode 100644 index 0000000000000000000000000000000000000000..f5265ff5d900cee723c36a5841ed914868a7a603 GIT binary patch literal 33113 zcmZRMXP4?=VqkD&FlN98Li_{#{UUu`85kIxLGnf*0txdfxP<z7y9Nb@x+)M2oc%*x zTp^ltoq`<woIMC?b`Ns&b8*!Tj`Ry5tQg`D_aMhGS07J5*I)>r2-4Zn$I&xbA<Waq zhoFm~#)Y^B`Fi>}`Y5=D2Kk4C`uVx~KxJ@J5L<NJf?Pv9Lj7<mLzW13^z;kS_4joR zLKel#cJdGP@pt!g)eZ6V3vu=FaSie$6cSF3AdiO<^Z=5*9*$A2PC@>m&fZ9Z_?a+= zkr2!w{-Ht6{+@pB_)SKZ4e}3la`cQq79zxU4DxmL3-NRfA{0&tgPeo>JtK6(9fJcy zT|FF$3OFA}1z$%OS07hTKVs7uB=#NsT!M(zq2L3GNnKEy3?NnyM2njb*dF5YjH92Q zV?Y4$!KI*}-~mdCzP_%(x?uYdL5Z8?80;K~TNbN~kH0^0K0xU9a13?w4-InhBrZpS zGzR(mIeU<xUO_=2+%Y7?)7{V0HCQ*q)i=P$)z>kIRF{IR#*c$toqb4imx61EV}K7R zR$LWA{6hmnT|@9&p`f7P1TMdbO<rK*{QO-*BXmLb_!3(%`*=FJ208nO1`&1;*b0!t zLVbK9b=`wp{Tw4<VgzVt7V~xVa{)Wg)iIP%+2P~q8b)FuyZDC&xs#M#6ntF$NKGF> zj(+aCE}^<^KAx^Y!Mb6tK_UKrx}Z?RSx5&v`uI485*;U?!1QqS^8}gd80zcqM_k+l zfE2p8Dv)5ClP4%DK{j~0`w<tJj$xku#OGm<R}_LAJ%fEoix(%?(6As!k|NW^Kh)6^ zY#-4?n4^!YpR=c{AMvf2U{60?A6H#Je<z~bFv0%5j-;k!S3gp<_<$;L50XOJ%a!=V z1r1Zjpdd#QGmNiesFQ1`J1GU3hhu06C{aQ!C5Cc#^mPhy^dzCxqu}fq>Jmg;qKCP_ z(aFh`l;*2~f`XfWXpk?#wjs;{Fzx8$<Vr$$4ASG`=^8+EQv{?zLBYc_D44{Y?C9%B zYIzBYN>|+gPiMy<7f)A(5ce>M?RZE?Wf2$(YAq63(zv-gJNgFTF%whD*~2l&2NIdO zzOGTkv`d{mT!TQ37!uma!LBZjMEU{d#1PjYPzxpq#wUV~408?fC$5r!ndap0<K*hB z>*w$3N32$7564g<D+!n_e*TdpCNTw2zV`&>F;MLaGY3EI<4CF{3Qmqeu6`k&ehRLj zVguAg26ayGTI1vI=N?X4apB{t;NciXe78bDLBZEC$luqOl)_RW$UoH8Pa()N%vHf9 z$lo)B2+dBej-g?ozBpbVqeuq(hlD_~3yLs4j<dgSfTycF(H$`b1%=4akSKgcVv!5+ z@bvcsB^V<74b=`QVO&GNH9x2=7vv9WZs3dDV1LixV1JStiyn@Vj(#N7dkP>+2#;_; zeF33DoxMr5#mO<!m0<fDVmgd;^>K0yb<>3eoMWgH5$zdJa}=V%RoB-s!qv~2U<3vE z`#L!W>pJ`RhZ5^2ch6w|pkNZRv4TRFqmQnOt8S2Ms3%cF3JMAe&Oxq3tAz$xkgKOJ zi7h2J{~#wvXAh_WL{X3k3Gj3c3UUP{<S<7<30c9{H7JxQvk{7%gIoh5bzS{*!yJA5 zJ&E#_v!g4C^`3&Whof(RBWO&`F~|kfCPz2`7t0CMOCq5<1`QGTdj<sH%juYQg}DZ~ z5IK?v)9mcw=obR+T)F#)hItZ`-5^ov;}0`}2-?S00X%Z6;00=3`4OQ*A=oh}$kjd6 zm4wcyk7qDZ9ze3**EJ-Hl%}|Xf&#?*j$!^jE=UI9W%_sq`?%^lx;Xmk1~>*0)yZ-U z3f2t{4bt`X4+f2t;WZvA>Es$j{6GgpPnc_vABjzp;LspY9R_Oj=(_m_2NThe^A9Gm zHKw58>>A`A2`Q9yojrm)gG2lS2n_hU29WH3P|5G_8BDOahXfXwgv36mA)^Z#De)(w z%>ed`LO_tKo2zq3C{c|pXAj2^SI1D@5D!p+NmL==;ty(&g55|g;TjeM%J0OtEEN<& z96?EjC<nn@;qD(A3<@<+sv$C@U4tCm{UUY!TtkW01XmmC=NaZ26ih_x66B~5T_4v_ zT^~nXH~%0ahB`q(3>tva1+`1T)d0+wIB7@MApZdWpb${45#-|<tl;9R;O-cTZ)VBY zHI$?@399$~{Xir3!H_KDs_WtJ=O2WBW&z|D-_Rf;MmXVq3w8{029-uoYjmB0JPEax zd>#ElK*Pz7x?cW1o<zmJ8)zyJ+EUi_aa90~M+bWb>pJ;|g8IVPN?lMg0hdTVuDVXH zKDzGyey+j6uDXsvexO<nTVR8_$Ua1m3xk8eH3$^{3LcI=#B^Q2T6{cxNwWjgu?h`x zC2gP^637a{A&w!$j(Pg{2L(CePat3qAQ8?am#+$-!ooikGzS#|8h`d9q9q#=<mu`I zuKI$Bof?B=L>E^DP^f__Bo|jdcMnf|?K;Th7HQ>}BWTQC7oG=@LIxKTG@uyd?h5Jj z>AL!O20MZ#OF*d=S59yN1(7Z&o%w>wKwKsxi~D+p1V!pP`#478G89=gm<<gd@DzuW zqbD)FMMuz}k}FA*;?Dj-zOJCi4+b^K0~~`qg9)|CAsqxa&yWyT-QW<ST;}ZI=;QAP zwgQ|GKn-)SCvg+t2nYbphvQa*CgV#=ISJ7Vu?6C5T}UK>2IO5s-5~N<NKg{<3jrko zERxuTd>uVO-F;mjM>lY=VONDB8tfVt<OrFwaRCjM5YbNpO&%$@JNh^hImH8RCkKUq zhATh`0L6OT98h~q*HPCO)M6mASqiDdU0nSLr7VQ40ieMPlCr*n3#dvWO^c7Kf|HM< zpR=y7Yp@@2eR9W8A3w)P-C+MvP-RDyhd{P~CliSuR0Va!z)2GkB7|7Z{yzS`PDHfy z5e9*aK9Dt#YS|H7HiH^zxXUOHNKFx}>+Bd51RmxlSPcY+IJ&rkT2$aRgDa%<ql-5+ zIQe@9>yqXnA4dgu&@il@E72OmJc(-OBf?8T!Nbu#)YZ?ClpzntU_Wp;Asa)04aqO= zuHas%uB)E{;cCOj(a(?AW(CxCP(|$I8s<-2gAc69*~in_BU0DLHO$e6$g!IMNASov zSUZt~pTB1?$P(RPS7&0ifLgFYL9QeW6FB+%xsX;`DEPQ4gt-QL`niTEIJ^3V5R-a* zTtO4oe$J7)pnT@)>+k2};|gv%xVeHWUQ7=Lg}QqB==wVPKxz$41(+hBuBd;gE@*{Q za4>P63J3*tUJ0$6K(Wf5*v1Y*7q~s4>*pVYtwVrNhRpH-*`gcb;U5I*#39SzWJ7F$ z<QgBxC`Te92BO6^nD`=D!Px_}Mn#vDPzZDM3<9kl@(*$*E>;vkw)lY7+_?LP5<61l z>low%&M!g!#4cF~4h?b*_Hzver$o>|ENI1{AI<;<Nd$pLh)AmUK+{ituAq)PsJL)- z)pho8C6qj!JcFG*!aYGtAVHQAgCX$_8s;ZDk@+|(fcwbMx`-IPkOTv&Vn9`y4>2>5 z5G{_O!6B|eKAuEPMM1QHdKLkWL4J<GL<}*wI|hNmRoB-s2o#|{j=IkNpe12=y1#z@ z?yi2IQ5A&%&`>`yvo`^t#kQV7y6&J{NnEoJ)Pi*lhLn4{E{<VAgge>bGBN-(;05mW zfV)cs8or<r63{ADA6M`wi7vQ%fxqMk29J;7ZsTA{bRdU;8%f~dUQkFQ4|;?IxrSkk zP=Xv585ZOjtP8KtK&?7_X%rG-kjYnf$50}cS}TM(`h|hAv7?Wpx4#?iP79Ksd|g9b zh>JnECTAZ<Uq{jwk$8p$MG|Zp!Yu$ZKtqDyRn5V=#Lhpv`TK={OJyHdT{j=sP$E{~ zfHD^;vvuHsyHFp0UtdrH06UZj!r8+SlxAE>h)nQg3TZ1sTzy?Z14Lk(bU__6$55XT zU1!k5XQ&VMsx8bj$lnb#rUnjTqEZ>89TKeT=;P)e6auBdcH#^OXqg-tgi{5EL>PF4 z1eCvs9#eAjaV2#@ZV<R%2^#8f3L>)M>*N>&TBPR^N^D~kHvI%$bOf?2lHl$JP;ucH z<l;~4Qd<QDg^(b~g6=T?NJn?qP-21tGIl}IA|hY^ARiJJ=Ld&6N9sEH`w=sg2u%n6 zQU0Dmpr(SGE2Liu6~{w4d%*e$M7Mi<96_U<;C?F}gHfa)DcRSNgsD_eMg%nyf<pb= zJ%e@OlM62XK|VN|fnXW@SqjBf3JMA?plT9b5I-Mm0l0q;O3*}wns2C|i@#5>hpVSA zezOs>zK+4ck)V-ea5xjFz9HKD9Q~XlN$9&NC_ofL`~rz0cUOPV*e}FDtR&cBL@gSG zYljp{pvna_xJ1-y1;-E%PjI`MD4&CE3h^gt9}h@Rn5VlRXn8&f<t3=%b9W8$_XG74 zgNc|ERZxfoH4lmR2gqTdg>7D;ppjS*k0|Wy0bbkS3+lNMu@neorc+R;pFfVg1d_*s zy+Xr0iR>H0bbEmIzJY=bCP0`D4heD$Can?=b_7Kxq_G4_!h|hR2=fF@CU`i47KISm zlml%Qat-oxC1LCe)Q$)SmC4|8LpLzg6O>EwIuF#`^#|=~AZlO~Y!oE-x_E*X&4L98 z6W~rrB++9qAOpd+xazvQ`niUAx`w&xy0{V=zxDC-b0@Lr3v%>zf((#iZ+wAVf`-8k z15MJp65YP=b`A0fB{JHfw)upD{Ecmj6{-M}f;i0A)7b+$)kipOx`q+a{zkRQ$I~?w zY7@9+hANAd2eL&MG<XTZphgDa0?Iwe(ap`(4?Gf$f0P4mqf-z`gF_&F&i+A8prJcg z(ArMoHi0+=xq`Nsky4WRIQlv{k`$8)zM%DQM2|p$yrSR?_5_$oEaBqmM^eL5K|#SE zyc~+yK`XFBd|VZLT}kS@D}dT#kTp8G0YRRA?nH#Pud5G<YxER?{C&aI7zs5psICkp zZ5gx=>HTW(wj|Pu3(yjd5E8c5Dky;VB>IxJyHo+xc?T_TaPk2yqjC%*!i}KH7(CDe zP76d4kkSRTU4$s*AVu);G2I}4(DW!si~tUH^>GC)?I55GSvn-hKa!;BIt2wkS6}~7 z(4s>}&=zyZJUp_ISlF%s;2rN+WN-?B@{6+vXe7p;*om&dP*2|g5;nYp235c%jBc<i zsP#i!h7KlmzYwUKK-4r1a##d`N=w3Z3bGbwe;;2*62>|d6cl_M!-(61j<5%`Wd@W1 z5F!LwPC=oh?tlQzCAm6=lCnk_8v8`=VFY>KRl(Phm?bR;FM_=8801cT%ThtX%OC$p zFv4&+%L5eqPN2=Na3MmBAV*gh*C3Mm$l%eQP|zO3U|s(pA6FuR!pA?z)0Oy@9Uw;& zX);JD42OeO^^n%z4|XJe_bSvHvR0}2x%m6Kf~ONe1F_(-WgmafAlw~#$50}s9H1_O zQbC>(qzrX{boqw*c=&_Xf`WTVAQ6H%%oXexg6fbIggKJ1tr()uF*E|yeTQ&}BcXZU zDae!PHAEqx5mnHvC2<X2kUQM*uKEM1z`#zf;IU^6aXbQ$df&%Cl=uQ8%r%(Qkr=4M z!1Jh1u0EcQK`yuxB*e8Iu0fult_#s!L<I%VQd7{<VG^`B5xG7C;wCT&DqvxL01FT% z!u&(MTpdG6@eXJ&R#336ucIfZW_ES<CtPhnwLoLkF%;h%8r01`jtWlx9whaXKz(<N zSv;t5I4B=i1@M{+PvWNrKn`;Z^>Nj84R-bqb@Fi}tkv0{xY0T!M}iLFA*~4mTHF%g zAL`=?THu6a5<Vs*LLkjh@PLZ5e^3B^Yav?v9HT%hBk-AxkPGtn1q~^Mc>3u=7VAMK zF%SwcSs@<&p^iZ$brYRjgB|^x{rwcctJFL|tH^xuOreA9bn*1^_k#>XgSf<CXa7*p z2rMy5VQPXMLw!Soh@KGzY4ZcEhQc2YAZ5rHJXHf;MG~wF@fWfzRyH^#gBI|6f(|=^ zE~S91*vB=B3*N{Eny<xbAXY(Gyy%8`f|kKzRf8rN<QnA)o(<Iv0xeP{X2=t?be8DO z4#c`JPuHL*BD$;))nL-u!{3L94J=@_P{IXNJQCls0O<mcK9kn51nra|YC-^HJ_JLu z7)gl?)aV5*I3Zy<WSC=U6nHZW#8P5NKUdH?0%BCc)i{QRkUH7}+P_UwA4vf`4CNRE zI_C#&F(C$M*}M-CeFG$OK;xFdp(L$r1-JS@E3QDR2at>!a3;8Vbqx(B;WP@cUmQb& z{E1oA1o0p^ce!}FhJw}(`T2MfF+&217k@u+7bMt`nC*q2b$yWi$e{cTv6mo;@IJVC z=?oer1GUjWr6`UP*2hsH$luw+73?%()~LbODma2q(*l_u<nQOA>mP(~bOOAU!w0mI zI~26GnV?5NCsFwOg@8Q(TH8q6c42=X(BMAUC&Zqm7~t<20_q$R<07aUP@x3w!3OKP zKx~9c;HG>*%_Kj_)?Y^-qB1n3+2icv80tdYP?v&22xxmC=y<4LT_Sh?DEN7T_Augh zI2IXDjQfOw+CAWGfJFs{kgp?2%0c?UT6BHDDU+B(dq7hIk^X*ujwG#526d4^bNs}H zFlZPGnqNTkDMSVUxOxSx=>eCtMA_vY>PpPURZvL5uoI}(a|az=023idgBRQo=?SP| zVW8#wP&Sd2vri~!_a2d|!ODXCK`{en5=(#!G0<u=Vl{w9dVPFcVU2h2Bn-il8GN=K z=(rxxW)oj0AOFw@U0+vs*D&0%>gekPS}INKxH!o9ki75i8U#8c2fVHooS#7pNZlMG zv9<?6;YHefokCD3c=`!sA+Z?ZFfULUPUNJhLWpA!F{|s5T@d8y?+dC~LtK5_Ly4=B zz&q+mYFaAzc>4OggQoOd{ajr<okNJ&E(!6zuVW}^gEZ(27bn+9KYzSC0(?D#Je^#L zJ?8}+3c-$`g4{7uH^>uIRS?rG0UeM6J|n}&Q6a#QsDs$Rej%;R@9G>1I<C>jQP;)Q z*Hag?LICVwJcP3kWOubLXpx?y9}&Ya3ZRAZx?q0<g(!d;S$K?xO2KXMaRkl3`TG&B zGK2gh9Ya8g%-0cA9TO7}V26QvBcMIAP@4%*(87h3A{J~5IC6AdBSHgQiC7=u?C<VJ z#GnweTOB<i=d{Ahl_1wJ&_E=z8Z<WKR6tU^0vaH4b_I9!{ezsb7F%d`z}l8>q?~jW z2HGV`+7U6%9*zP21adB#(;!h206J!y*fCX58Y8xtgxcol=k6cs<4Vc_Y)+v46{MY| z23gb^04`pL*!cu<8|17T7e`RPAH*jDgBprXL7;8SL@0(R0d2)_a)qo^1Mg`9wf*sL z(FQlJ{5}12y}%7?Vyanp&oI!LU8E%C(BNRw3ULJmP=BAKPBo}O0-8#M1O<^KXiYw- zCUW;AdM+J&NJ132x**aL=;279*zqT-3<vKM2Q4^&opA^4WIN+sfeguFFfE|ItdApT zs2GncL5e&;!|;B(ZlFV6gZx3s29E{>1vgL7k^V%i=s}ng=I<Fq+PEDw#9ZBjKr06! z9t#4kUBXj#gy20r2H_ec7U&Rc5>5gJ>4a-RoTvjzJNPQV0M{VU7(X!$5s(ca3`#0Q zSF9in3JOl(r0nCU>ke8+LR3Enbc&3>UkE7uI}^F%AjluIhyZlxOprTBUx2G4p(7GO zwuC~CpK}FmgMl~~F9|u=nYiO-p$36=qx%PubcU>tC#divX%yB8v_a61q~kuoQ@f!4 zJJg{>P%!V4P{KO-2f2U>dg!D8F_W;MX1EVAvtbAqyMd<vNoy*BPHA=povYys$^}HV zv*3Pl0&V;!l)S*Mb8-!GcMT%RWpG;{rHhv<;iZ%TuED`1*#Wu*z#TN+1$HEngu7!D zXv4d%GiZ4maeXpyLh*A1Ewc6}^5{CpAZJHs4-!jdB7H!SGWSp~M?cW<AfR>q#F^yd zs1V{BOknO1)hKsIl8OqDX2|SYh$rZx9q?*EAIDJ8Da42Y29PQg3~Iu;f)2YPex;f( z=p;lUI$%il__~s&9<&tD(F4?kLo$RQGl1l_l>(^o5#;LQ7(#s11o^wTlDK{jocN(V zMNpLlI!`&s9q)}x0gge$&xS)n#tGCi0`IMdE<kW4*z$LD$9L8i#8@;k*b}sMoupg| znyDwMj6_)F0@})i;1a`fB()S%Q1At9FCeYB1P!PWF&TvHU}wkR5LX}2PF}}g98)yN z%0X;rP!=PlH3ssFUx;I<lcOJaHJmG`-QYwZmV*63i7*&6Mgltb!w+=+vP-Bgk;6+M zcM^laJDCW$1kD^!q2%TmM%;J;L@!7SC~JYP;~`v4g7v^0M&#rJNDris3|pfPvM<ar z6g>J3lEsQ0eVj<TGeSW@0n$7syaou#KG50nq=hkPsjWZg+AGjKJD@>sP)8g*ScGIO z8q*ncEF)>z%-Jyv)YvD*Z9$-;DnOh0Ty>ot13+h3fR52ea|$Zg&y&R4Ur@CZ$@BI1 zb95%<^kmSAZiSE_Pe0EP&>~gm5Pu?SS<v{4GihZ%Xaqi(v<5tpUPe~tLfXt5NUNWx zGx&rTU(nFIi>rd0YY=D?bU=`Q7_QUWL0U*#KcxUVU6h#he;^k@F{DKeYaY3T>V^?q zs_zUspAa&^OYGD$)G|`20N0=p5>}^zj0W8@LR=#pq#BGt1N$V+SSTofjvfK)C7y8f z3-KiF@Hx=UQvQCRaur_^L3M!-=x{?9R|QvhA7WQ(g6~Om1Xq5jX5r?6>X#r#C)|^O zm|A@uqd*7fy6QR;y=%(d-^a~W!7CJ0i-T|U3L>~r*%>r1NLuuRww8ldr|bGUhB!JA zv$jP6bc8Rd%^uL%gQP9I00nY@D`-lLh;kAV;Go78(ZLJR;_DgY=u6riQ=o+~uAptH zplK^VN6?yBLMg$?5wuu=kSd6aprntZldHR{uBV@$e*lq7f}A`-M=la|j1<%o1<=Hh ztDi3M8B9UJKPbe5#6AziFW`cl;P4yNWuU{hT|=P5L&2WDM6?+^gGt<x2paAH9SI1v zk~j*~;&BXe4%T%Ea&!;%bSGj<YY^!ZcA%pUd`W5YDk!)Gxq5|?miHkQUyx&fhoh?x z_>i|?X97ptL$rWKpFjn(PiT~`Gk91MPud18QUR4q#Dy<d6?(EHqE!w$1Rc+4JJ?t> z0(5o<sGCeepapySdODIc1gqfT>gPhjq0S&Tx&`_Bfp&cp*>?eJ@h7=8;^V5|6Y30F zWdg1?hzYy^N6^Xl!3v-wafvL=gIxncTuEz?gYrHob%E*`kl%>F!LG!Q*+7j0omU2$ z=O88aLE~tk>xDo?AZUdb;c^pn3NG~MMPhDY1-UJN#JUx-N)5ElBtpR@Q~|VuozQvy zplemZm(Y>mdC-~mLBZgYz@f!5XcIW7I0QKw2M!2zcMSm-{CEloRK1{a3z9DJQc!So zC%gg#)e;3zQ^D28&oR`+k%%Q1V9k)C&lh}q0$6}B5#ks`Vw+dN-^U+x0uR_Sa8e_D z2wAW{sFf59-qAqVO<)zE^DRC7LmY|8^k5AN3eKP*c*wyOP!WQZpJNbs%^^XB2n8UA z1(B8kz%5umgb_rrK(lW|O*taW0);VXtp@1U3_nNc(S`W?em;&0!LE^hkhRvnu0guN zo)Nlkp#Av>W6@Y1k)&K$4%Q61iPZ()d@fiO3IR@By6&L0#>DQh4gg)oNz4Iq2#cH? fgF`$W5q#RP0$hUvh-!r)tatQsbawV6W$Xq3N>U6k literal 0 HcmV?d00001 diff --git a/inst/GARE.LYR b/inst/GARE.LYR new file mode 100644 index 0000000000000000000000000000000000000000..bbdc17691e16d7cf6aaea87d15f642ea556edfb2 GIT binary patch literal 12288 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 Js-A&?0RXqpL-+sy literal 0 HcmV?d00001 diff --git a/inst/GARE.PRJ b/inst/GARE.PRJ new file mode 100644 index 0000000..56757fc --- /dev/null +++ b/inst/GARE.PRJ @@ -0,0 +1 @@ +PROJCS["RGF93_Lambert_93",GEOGCS["GCS_RGF_1993",DATUM["D_RGF_1993",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Lambert_Conformal_Conic"],PARAMETER["False_Easting",700000.0],PARAMETER["False_Northing",6600000.0],PARAMETER["Central_Meridian",3.0],PARAMETER["Standard_Parallel_1",44.0],PARAMETER["Standard_Parallel_2",49.0],PARAMETER["Latitude_Of_Origin",46.5],UNIT["Meter",1.0]] \ No newline at end of file diff --git a/inst/GARE.SHP b/inst/GARE.SHP new file mode 100644 index 0000000000000000000000000000000000000000..33a5643274a0b285cfc06c5d1a452a9e4a33bcba GIT binary patch literal 18244 zcmZQzQ0HR63X~VUU}j)ogvvem$><1TvipUD=_`AUz;v@@G?)g-;lUtdxIhF*%^F4( zupX#hCI$uuxLgh^Sgt`;0&FfbvfPG;${>9Q^2ES$EXZ<2)nGXXZV|8?D~j9`C9u9O zL9iSfvfQiNU^#|ed|)|tWI2y>U^$1^++aBlWVvI<A@()?jsls@i7e+61J=i2@e?cu z3SYSYxK4rncVOxdupBqCzKD3RT!SS<jt5z;1Y+iaC*Q&Pc#-8+>{JE0p}`O$$A>J( zv>hV%>I+yOKeC*MBt*{TGgwXlS<Yl7L{1taCx|R}uLUai5v)%LS?*mKSk9r~16WQN zS+1lNEXVNs9av5TSq^HZLpnrG6j|=tI<US2f8K!gi6P59n+=w0_zIB|N0#&23YK$t z0g;nHmh(sj%QZZH4K`B}S*|P`EXUvtk&{A}YwCc=u|njek>!diA#&a?z-G!I%U!Yt z$E`!&Gq9X2vYc4~Sl@w{Pr!0=$Z|c|;I!1>^$08{k1Y3MGT6)m!VozHWVwbFU^$0# zcftA;k>!pgg6(r?fXFE!%Uw7Q*4H3^3#?BWS+2lU4V=!}Zi3}hkmZ)$h3IR%0hUum zmJ105+jqbMBBzEd=k^DpZ`XCOK6PX{zFe^19h@L?8pv`kJP<QQAaa_>a(Yf+IfqHt zz-DS8%PkQA%N?kK$Y~?XRcS-yvLSLh$Z|;xV7Z2#t6(#Ak>!-qA>nfBGFVOzS+1-C zEXS}KBBzfmC)N)(lVQ_Eus#E1xtJQTz5~xMfaMI4<&HqoyaOXd&Innq?K{}ahR^50 z`izm~98AGxGVDGJmNP+?Q<4G89pE?(mNP|`o3u+E6z>Oqp9IU9A<OC92ge@+%L%ZY zIkMcMa<IMz@8e)O3uL)%(GWSOqhL8pWVtJkA%3Xa1D3Nwmb>K$acBNku$(oD+$nH+ zIq+=@Sk4AnE@Cy<K8DiOU^!c4If<zdKfGQEma{{ai&0ku`Q72qLa>}YvfQ@4P%{^R z<s6XZ{BDBlhlcvOU^$Q(@H)WkAK1Qz+cUv(PRRPMFoFHoaC|yg&KX%wMOPkV&H=+o zU^y3LIX4YWkX%FbM6jGIvfQ6YF_0X?-7c`48?v0nT(G_a`#QmL?#Oa-EMT`dIJSW0 zJdow8(iA{u9w=x6%XuQp{g?-F=jM8_oENg3$!&1lGW@9n%XuTq^(BDi99*lxaz4m% zUwq}j_K88{e39jH_JZAc;CK~SpC7VZ(si&q8%!W_{>XAqs<lC8G8`@k>kB}ZGhhbW z=Wx9gEEk9@_l5_OCK8IkazV&)UsND+ocUn6U}U*p;ovmk;FJxP3qh7UrUB6>1Ca|w zmRs-xoL&x;W`XsEA<O-%)B*Xyp*9077mh5qC>bo*P?Zjri$InW(}CEh4UvmPmg|y* zgy;Dbu)Zi{xjVXGGa2?n<f4(~SRi?&p(YuuF9uoeRxDUw16LAQE*4qti?<ZW4+oeN zz;bcOay*|P@#hi`mWxN0E2)Bni%%R_E&*9C#U5hcwivKnBC?#&DsVZ$U<;8;LYC{u z28YXm_t9W|$;fh>^uYEtBt?SdQjp~=7K6(I2V;m_DzaP#ryj_E3~Ui#eQC&YQCVR7 z98$x<a_Pu&EcxK{a=;)AESG^S=OzozD-Byi!E%|%avLs7gY0X#6atpZLY7OI1aW65 zL@payuH}&~NFRe~5LjOhvRn-$EjcI$g5`3N<+xU8f%VBj<noZ^o@s!?%s~($myayx zQzik{cP{{JW&yICK_WQ+9Y}=86(Y;+$bp3C0)Mc+B4oLqRER!Kh+HwU+>QcpnsE5# z1J+l9ESIqy;&)YuTq&{~*DP>6IQV;l^_3yZMOlK)Y<TSfmMce=yT<@dy9~=9auvvO zB|pIN&d}!$)>nxv_s16;W(`>oxhiBiFK4h@4xDoa>#IhVvoi(DHDoz~<!X@Sm>R+H z&L9Mlt3{T(1}T>g@ImD2kmY3JAZFfm1e;lpEN9{mmOJp)0W8;mEVs)IT!uKDgvd1_ z%lSM4>uZRG$TcC$Nmzr!r9l}Y*NiOZvH+rQrajoc7G$|^n&2>V@PWv+BFo(h0qbM9 zX9w2ThAcPB4<dIOBG-;Ar?v(x*U$oy>p+%UF$p5K+7@hPC$d~$I>apk5V<a7xqJEG zymDZ=4Om|{vfP{qu$c$?AaXs(a(?f@W!3>7h+HqS+=kC!eGN_!xjtk$vvROL25X31 zKeF7i<q&;J5V;A+a%TKsKQxF!<R&7^&8P+IbGTy-_QND(xpmtiaz`L?lab|iOaQyZ zVFpBQ3bLF7Bwag9fyhlomb+04*2mBXk(-7rXIBKye+RN4a?_FJLbib2(qIOWn}IBM zNDM5;APJG1i7c0-0+ws|Yz6k;EM&O_kbXbIe2Cm^WVtUk5Pc31xjD#kS`6Uubg+QP z%|(`rgS1;4bRcr`kmW=md4)k0A~zpdE@A@M%mZ8yxdq5_H5b5cakyg%_QOJCIWJ#` z+)0SsB4oL?eu!KNL~b#%+?lUnxrSR7U^AB>%Pou70F~tjc0lBoBFjm+f!*1#6e70_ zSx!R)T#q?CHV2!z99eEnC0O5qDG<38$a2RvgWbX)36WcgEO)C2EY~0mkz0i<x6KD^ zrUMT|ZZ)!;UMg6QVX+z5Eo+eFVyeJq9#DeFtwokI&<CeM23CmNI%GMcXJCB|J50f5 zu1A&=FbB&ytbxdFK$e@O0(Of-DnxE0vYdq>Sgs)oBDV=yt^_*H5DJmoj4a0{0@lZ1 z36a}^EO$a5+(&SjWde5RR%E$VkbLAY9U`|4Sx)3H*bfY?5V`Hha%^2-xdvy5+zw>9 z1uwvI3|EZ7_U%NL<Jkk2bEtsG?LwCOvH~pEzyOikjVzZFCJ9c1`;5S5?m?DI;4}cs zZGp(`MV32r5Nzgw84$UB$a0Iqz;X=w5V`%xat9i@L1sGqH3Zvt09j6E9ax{kQHb0@ zWI2~pV7Z3v5V=Fha$b<}Plojnxx>hEF6!X;bEt>N9YL1c2g$b#)eyO($Z}Vp>BR;j zcMMr>TQ1lw4xbIcemIUSC*caVk6{%=?gX+NOA}aM!*Yn+No2VV6%e^%h}<b;xwfTX zIR|x!+-YRF4Ul$^11m)C46@vv*I<1OZ}h?LJc}&1XEWHH4c8!Y=aA)ALHgki9T2(m z$Z|bz!Dc#CLF6tV%Uz2Bo9Pe>k-La27tsfnV~~f)T|$-<$^*+eFhS%lBg<7m+gbnh zz<#)bEEh5l?3M%1AaYlc<wVTDW**o9k-LU0r|<wQ=a3AMyN)d9E(cEY4Oeu*_T501 zYnctU&*6(USnejW+<`oZ+$D(IEo8Y@-@tMQPDA8wBg>up2$o|ghREGPmQ%Y1mOGFR zk-Lj5R|6?04){Xk?jg$^u>$*#!3rXGA6ah2KXALi;l38w4-b&#Y9Q^i1F8_Yhsbg= z(qOkZyw?QldxR`^!3Atz!&->kV`MouReex?KhOe^dx9({5C+!gPzRBFiY)gb8!UIA z6e9NwS?<M5h+7IFa?g?FbdEvfxFK>ckmY_s%0Y%h8el)XM3(E@4c2#H5k&44vfPgU z5V>g(x!1^Y2Xer242}@FH^_3Y%ph{S5V^O=axY3Da?jPlZh40+ccU9zzcXxv$h}9F z3+smHTL+Q*fGoGE7~ID@unZ#i5n1j*BP2ZMLF7Im%Oy2}&2(^t$bCkZn<fm_=U@ww z`+_Xj<N?-qKprCZ6<JP-4Xp0~2Sn~0vRuYS$k@dkHL%~mBg_4PjL$oiLF9fQ%bl_S z_X8SqAaXyE<!)Gj-NNug6>R1&WVu(IV7D-cLgaoU%PmoY=$ozr*7pZlZi=cbIPFG5 z<o+VdN&IIA$vJRC<o+ScaXEqQJMdB&Z03Jtxp%9;at`~!a^TrL_!wsg7g+9qGeiy~ z373n2=GzV>keQ4q^M4sOB4D>HQUuGP%>S`{f%q>AB8M{ncK}jvHtbOV>qD9U)7t{> zQ!-42$f3;tNkG#?Cqxcq{%^t$NPZWC$f3;tF+uW}0|!J7W&W?O7Tg|mXp{%L1!exP zNe&z?4J8mcl=(lCZD9X7L_p+F=Kr3&0k^LkL?Ch~^M4G`^f_4;Y#++}-=xcsG0sYe z9LoHk3lGFC;t)BM`M*<;wgv+?L=I*C?~yTBpTi9quze`=f0v+TRs%#1W&Ur|Ik5j4 z{2+2D^M9`#z-BgZL*!8A{~r7V>tlE)1-1`m{x7Ks9M%UGLF7>8|B4yG_1}R*l3;x( z^M5{&_NT*gh#boN-<{uJ`y3WS<WT1SE^x7c(q}^`L=I*CPc0Jc2ZlNcuze`=e_D{R zcGxWrmP48UTelZH2G7s}kwcmPi-F9QHyA_YQ0D(CE`r^8Kn@~@GXMAHF*xlyY!d_9 zhcf^7X*amuJWvLaLz(}ZaZmu{zXOgCIh6Uo2WOc;atuYHU^7wX{~lR@$Il#sAaW@4 ze+SNj-O1nvkwcmP%Tol0SpyG54rTt&0NNi*5dqtWGXFOL+Lw`r$f3;tMZAId{j)Gw zAIkh6Y#qa4h#boNUyd%=EeFmBf%T!x{~dv}*$;?8<aCkCL7fMJpl~@*EdbVsGXHl) z6k?_dA6O1${_jZ<SdO8V7c7S||JU(e7-S}c7eo$a{_jUM*nbDYxxxBS=Kl;@z-BhA z-~!8`%>UUy+9(Xh5IL0jzcbUo`W!qt!TM0<|F{^zV}}jG9AG(=`9GmI;QIZ*M|Q9r z%KYDi#b7fVDj;$w^M3&gA@va}Ggu$W{GZNyaCzNufDtT*GXM9j44jq@ocJH<$iTpe zGXFPeAH+W8zhF6(`M)A-usa=We}d&u=Ko5(!EFtP6JNn{DD!{+GQeZF4YMI~DD!`> zvLNx`1d&6T|1;SK4l@VQ&tNk_aS5;g)+~d#Q}HcW4rTt&PYaxn8g9M-%c0EwEy)uF znZqFb94v=2|7Y+8TrM40`3x+FGXLjr1FY`=3q%fO{_hQBzL;U=Q?Ndi`M(3R#X<HR zsDj9$%>UIifz51ig2<uF|6Q^HhfBkn2VgT%=Kr=Vg7ncZ-vi5eBj=+gQ%IYL5h8~& z{}&(!w(mg4U9dis`9Gd%;Pi69<tA7TW&W>V8z;yQ4$H5C<xuATN<M+pV1w3WupG+# z9}i?51jFSEU^$fezax-2Xa<Y3U^$fezaK(8Ao~~^&w%An=Koj}!QsN-2$4gX|66bm zQYOzn0oI2y{}<o|9%o>%hsdGK|Fzr&>uZ>I46F}j{%@89*gl5|N5FC@^M5uK;5niL zJP<jQ`M*_9Ao*ePA+SD_`M)`k`BaClePB71`M(q0d?3F&a6sfx=KqxPA#T~W7pxCu z{?Eb-EO+4G9<UtB{NF0b{2zlCL=I*C&m|R7SMl!#>qD9U)7lJ~f3VpFmP48Ud$J2W z*43Z~kwcmPE6|4c{qP2`K9u>t7wzDD%aFYuEQd1xx4{6ck3k+Hhcf?Hbq?%52F<l# zeJJyPcGJM^7Y4=EU^$fezjdBqGY>GW0?VPy|J`5&%Q*zC0L!7w|JCdS_emORmw@F^ z=Kqpfz<Grs0V0Po|Cc5XHuJ!Og<yRs^M7|(!Ez1~^T2W_^M5~T!1f(rm;;tWng0_> z0?RdAo(+~mng0_Ig``2j8DKe-`M)*WA?2?6WUw5{{9i&ixW0AJnFy9cng84H5G;2f zcLG=rW&ZDm38W6lfyklE|GDsi?Q>9q$dw|OOH0;*&1Cr34>l8J{%?{zSRcbth#boN zU&Ur2P<~(tgUF%G{~48n^R2_%F0h#>^M6-t!0GcqO($3mW&ZDkHaNW;_}2lJLz(|; z;e?c*br3m}`M))<A^j?@Hn2XF`9F_78IU_2BwE38b;y3tI0!Cx8FsgT<xuAT8mz(g zG3Y?#Q0D(SOu+gat~Z1AH6okY(Fm4nIN1c2Lz(|O77F&C!#s!_%KYDqtq^@O5IL0j zKNc=<m@!B-g3Uyk|9fWuZZkCW*MQ|v=Km_rf#;wPY$*iGq0IlSk%RP|o)&=RQ0D(O zK<7d}=Yr)>=Kt!JLfZ3l)4_5m^M5T@!D*i1WExlwW&TfS3pjl?Xr+MVQ0D&()_~<0 zwkCt+Q0D(Mwn5~ylE88(^MBi7ApORYc(5GG{NFT2aJU?Ziv!D{%>PBGf!iSm#36Dh z^M4kikhJt97OW3t{x75)oZlJFg@ff#=KtOVf!75!YzzX+q0IlCaRHat3=0CmawzkE zZQPKy)S3XW9LoHk$VQ0&mivR{Q0D(;g@W@K!vcsL%KTr_Hn2X1{eED5DD!_x%OUZX z>kF1cng8R`0;kUdbG*TFDD!_Jx4~vMC_>~==KrQ}Lei&;Cs-fK{NF#w+%>~5SFjw) z{GVI^Bn>Wi0?VPy{~hTB+vl*_0W60y|M#H~97hewwqQAw`M(!V;58Bsb1lJgDD!_O zqQUwO2wQ;VQ0D)-)WLCd;IT1S4rTtYMi3k>4(_U8Ih6T7vvzP=a=5JmmRp8g7I-v3 z(u<QkSPo_W??fh~zP&6BmP48Un+M5b4)u~?Ih6Uo4PB7<vlR!+q0IlK&47ewxfoau zW&ZEoPp}^tb_jyyQ0D&_Ou=p8hMW9gIh6Uo2a~|%-~l;^9LoHk%T90_Y?#Ca)`v3x zH-Q;!pTkZzupG+#--|48m>m#j1<Rq#|4mB($AiNg7O))3{NJndV0{etnZa@>^M70J zf%DOUKffbDeJ7OpzXyN8{yXsE2Uree{;w$)9G(rQzJcXX=KrF;g6(T4gUF%G|8YEn zgv*vMV0|d_e`T_e_C(8PupG+#pT<5&xF~)E%c0EwC4__J7?R(B<xuAT&ZL0rVuvt@ z9LoG((GhT7VNiz1q0ImNSPCgWwO@nHM4A8lvJ?{5`Y*t8DD!`1PLQ_Lo@Zb=l=;6+ z++e>u*g)h^=KnbUfy2{b&Qq{Hl=;60XTfp}rVu%l`M(=Cz;X^vkHPv-=Kr=#fb^@B zAA#ji=KnaRg7q<&-v`T~%>S*J1@XHUL=I*CPv96>-+`m|!1_?;|H7t#^*Jy@<WT1S zw3@(j4DarO^`XrFRc(ZrnGBIbng8?X2g^B}y$#lfGXJOI1rE=K_qV`uDD!_;-a^U{ z6Nntj{9lkOIK4E4+yv`Gng4r}3QoHYdJs93`M<LBU_TtthRC7J|IIlBap#pAU^7wX z|0*DHbl?I+4rTtYq8Fm?{dKTDl=(lluMoM%*T8Zp^M3~xg7apB8$=Fe{%?&vxDU&a zeHE+^W&W=XVjqJQL=I*CZ%-v8JYQV^>qD9U`?MG$_vjp04rTtY<1M%haX4}YEQd1x zcg!Cg)(%@CawzkEbB=<|Jdg{KLz(~Um;mwnywhMaQRe?{>;kt@7$S~?<xuAT_CUuj zRv!h+q0IkXxePXw;ocFj9LoHkgaJfu4@3@S{%=AQxSTlf<1kns%KYD!Utl?gU;Dsv zDD!_iHiP93tlkZlLz(|Ou?#H7aAp@+4rTsNtraYHz<V254rTt&ARi+4b}Lv8W&W?A zA6$<$L__3I=KsDO1j{jOS`OBSGXHlj30xl?$b!hB%>T{13(@y?5m+C}{2vD=ByLL} zawzkEOZI@<bqqxd!TM0<|BN7O<Qq~UawzkEWmm!F=K=FMV0|d_e=n{<+;V6(SPo_W zPX<~R{GAAvLz(|u2U+KMU}-;C4rTsNN*<C18@s`BUy$1&Q=Wj!Plg8_U^$feKOYrv zoBhDNHn1GZ{9no;us(<XtzbEn`M)zV;5x2B6(WZ+|M%fFI1M(;Y60s*ng6>}4K}kO zy9q3ZGXHl2vX1P45kwAU{x3le9JdV$5IL0jKMfnOnFsh9z-FS%|1DVpmSgCu2g{+% z|7pwvw-p;~>cDa+^M5jv!TKED*Mj6g(|8Q<G0p;GupGnfYOoy2{NIm>V7Uf<h#W{G zT%XB3NPld81y~=-{GZNDus((@<zP9K`M(d7!R>1Yr97}4%KYECJV=?v3Xwyd|KkDI z?+2uE!1_?;|1vls<?i8Zup9?+dik&xY#+lWh#boN-+^n8yz)ODtPf@WFRmBtmWGdU zU^$feKa1($G{F!Q1C~RX|6B71+(&O%8v&L>ng81{8RCa`VPH9w`M)!L;5_Ca9RQX? zng2^-g|wIUc!K3n=KmZT!EQNV;Q^LIng9C`0dAKcnCJ?YLz(~UVgZ-e4PGu_Ih6Uo z6`o*y4lWQml=;6mtq}XzY{B|a=Kl)h!R1RspE+0#W&UqY4>+tD#2|7g^M4xWz-BsZ z)&uL4K#spP*5JDTz;hk29LoIP3np;6>#!Iihcf?Xu?ie!4N}@*eJJyPK9IEz4gs2A zIh6T7g98wKUMgTYl=(jqFL0PK>{kZMq0Ily^99Er1Fs@j4rTuD*JrT*7|ImDawzkE zEJ0vD959su%c0Ew-8cc(cc54jEQd1x7xe`qH(dfOhcf?H(gn_c4*SKyawzkEMvyto z26u=Y%KTqTBBb24fyklE|IM=p``tlG3~VOK{GY&baCzo1T?8zLGXM9^2r{?3n;$HP zGXFQn0-Poqp7Md^Q0D*U>O=H}K;%&7|5%{zbb`pC%>M~$fb}u(L*!8A|FpJ4!ukmh z*gll`Kc;_RIfrbB9LoHkvMkul153HV`cUToBEEvhj2jvuawzkEY8j9?;^G49Lz(}Z zQUH<L!3mZ_ng0_|0LwLmK;%&7|2~|9lxG|qV11^@dF8`Zuv-}Bu!H4L=KtQ@0LwWz zLgY~9|Fo(ge&5If)`v3x*RdX~ufdNAEQd1xS2hVE*T)E!Lz({zv4fb&!2p&+ng83< z3T`tT;Q9~Rqt1jf|HqdI@w?++u$(Qj{}!l%&1_)%1C~RX|9kToT>m*7{soppng8o+ z2D_7C)laY-%KV>KBRI`FSU}`J<E!vGE~gffr-dPMDD!_JHz4%`KST~?{_ogMu)c<U zKfv~(%>R8`1J>tI{2eTZGXH0g4t8flBt#Bn{x8K9Ea!0jD_Ea9a=6s=g6%ut2$4gX z|5KO<9w%a$`~|EJW&UrOBUoQU4MYxQ{%=kP*qsf_KZEt5%>Q+igUf=351+ttDD!`B zAZ<Q}H4r(J`9B3Qupby)AaW@4e@|9`-Fcw@BiKxo`M)b0!R};`cn6k4ng5e<1M71* z_ZBRNGXE!)3QlJYaS%C_`9BePNc+VZB8M{nXR;4spUoSvnJDvr2a>>Y4muDyl=(j{ z2S{3Kc@5TwGXJ+|FIbKt<rP>CW&V%vJGhQ(P<jcLLz(~Mx)0XZ@cso@4rTst6J%XU z!>#9FxhUi`p)n2Irgf-<$f3;t%~=bUJFw>&SRcy#-;Xum^$ZP(5IL0jziCC_@O03G z$f3;tC5S=f_B{og8ISCiZx)a+tAog)%>T`J4E7(x-zQ*wDD!{&qQPb!IPe%Ohcf?n zKmhDchZ2Y!%KYCS8%Ww!e+1TtGXFQp4s726CWsu${9nOBNIcAV2-b%(|F`NrSYN~R z2Vgmr`9BRyh&%NmawzkECaz$83}^0x^`XrF%@KvTbM-y29P0dEJXqfW4~QJf{GXf$ z#6G{9V0|d_e{(j1^)Xc40L!7w|LL%U$6p-2T?5OZ%>RA)32rkq_(SAS=Kp3r2amBZ zs6gaU=KrFc!ERwly$UuHW&W>82@;-)5IL0jza2Zk`W%EHawzkE5iQ_$GK29Iu$d_H ze@2HOZ4Ew%9LoIPxk|8^4L>e}^`XrFoiPBn%N<xQfaOr;|76aB%L0eovtT)t`9Fs@ z;5G`w|5IQ&l=(lmrx5%0L*!8A|IQr%myrw&C&Btq=KsVX`==Y+kAdY-=KntY2HWQ# z3XwyZ{}WgOmTP!$7_1Lv{;%vhM2-g{hcf?nCJ`d{`Vd$j%KYCU$htg-Du^7){GXEo zIQ|@hAaW@4e=BB!``Qi$2f=2d%>P}<2loRG%-Ii?Lz(~Udj~EH4yZxoQ0D)jXVo;= uEd%RAng7cw1jjo=*%YuG%KYC9esKD1m@@$^hcf@?^u-WVr!#=g!vO%>eyM2y literal 0 HcmV?d00001 diff --git a/inst/GARE.SHX b/inst/GARE.SHX new file mode 100644 index 0000000000000000000000000000000000000000..8306749da276180541df2cf2752165cbe35648df GIT binary patch literal 5284 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 F9{|(Ajk^E< literal 0 HcmV?d00001 diff --git a/tests/testthat/test-import_shapefile.R b/tests/testthat/test-import_shapefile.R index 3f01534..fdd8973 100644 --- a/tests/testthat/test-import_shapefile.R +++ b/tests/testthat/test-import_shapefile.R @@ -1,10 +1,18 @@ test_that("import_shapefile works", { - chef_lieu <- import_shapefile(system.file("CHFLIEU_COMMUNE_ASSOCIEE_OU_DELEGUEE.shp", package = "collectr"),2154) - expect_s3_class(chef_lieu, "sf") - expect_true("the_geom" %in% colnames(chef_lieu)) - expect_equal(nrow(chef_lieu), 2573) + # Import du fichier Shapefile + gare <- import_shapefile(system.file("GARE.shp", package = "collectr"),2154) + # Vérification de la présence d'un objet sf + expect_s3_class(gare, "sf") + + # Vérification que le champs the_geom a été créé + expect_true("the_geom" %in% colnames(gare)) + + # Vérification que le nombre d'enregistrements correspond + expect_equal(nrow(gare), 648) + + # Vérification de l'affichage d'un message d'erreur en cas d'absence du fichier expect_error( object = import_shapefile(system.file("DEPARTEMENT.shp", package = "collectr"),2154), regexp = "Le fichier Shapefile n\'existe pas." -- GitLab From 247a91cd232373f1073426cc82cf04cf8cdfd232 Mon Sep 17 00:00:00 2001 From: "ronan.vignard" <ronan.vignard@developpement-durable.gouv.fr> Date: Mon, 10 Mar 2025 16:51:55 +0100 Subject: [PATCH 02/36] Modification du format de eval --- vignettes/database-utils.Rmd | 40 +++++++++--------------------------- vignettes/utils.Rmd | 36 ++++++++++++-------------------- vignettes/write-data.Rmd | 24 +++------------------- 3 files changed, 26 insertions(+), 74 deletions(-) diff --git a/vignettes/database-utils.Rmd b/vignettes/database-utils.Rmd index 3cd9840..215c68e 100644 --- a/vignettes/database-utils.Rmd +++ b/vignettes/database-utils.Rmd @@ -25,9 +25,7 @@ ainsi que la gestion des exemples. ## Création d'un schéma dans une base de données PostgreSQL -```{r examples-create_schema} -#| eval: no - +```{r examples-create_schema, eval=FALSE} #' \dontrun{ # Créer un schéma dans la base spécifiée create_schema(host = "localhost", @@ -40,9 +38,7 @@ create_schema(host = "localhost", ## Création d'une table de test dans une base de données PostgreSQL -```{r examples-create_dummy} -#| eval: no - +```{r examples-create_dummy, eval=FALSE} #' \dontrun{ # Création d'une table dummy dans le schéma public de la base collectr collectr::create_dummy(host = "localhost", @@ -57,24 +53,18 @@ collectr::create_dummy(host = "localhost", ## Fermeture de toutes les connexions ouvertes à la base de données PostgreSQL -```{r examples-close_all_connections} -#| eval: no - +```{r examples-close_all_connections, eval=FALSE} #' \dontrun{ # Fermer toutes les connexions ouvertes close_all_connections() #' } ``` - - # Vérification de l'existence des objets en base ## Vérification de l'existence d'un schéma dans une base spécifique -```{r examples-schema_exists} -#| eval: no - +```{r examples-schema_exists, eval=FALSE} #' \dontrun{ schema_exists(host = "localhost", database = "collectr", @@ -83,12 +73,9 @@ schema_exists(host = "localhost", #' } ``` - ## Vérification de l'existence d'une table dans un schéma spécifique -```{r examples-table_exists} -#| eval: no - +```{r examples-table_exists, eval=FALSE} #' \dontrun{ table_exists(host = "localhost", database = "collectr", @@ -103,9 +90,7 @@ table_exists(host = "localhost", ## Vérification de la correspondance de structure entre un dataframe et une table cible -```{r examples-check_structure_table} -#| eval: no - +```{r examples-check_structure_table, eval=FALSE} #' \dontrun{ # Création d'un dataframe à partir d'un fichier XLSX data_ars_2022 <- import_xlsx( @@ -124,9 +109,7 @@ check_structure_table(database = "si_eau", ## Modification du type d'une colonne dans une table PostgreSQL. -```{r examples-modify_column_type} -#| eval: no - +```{r examples-modify_column_type, eval=FALSE} #' \dontrun{ # Création d'une table dummy dans le schéma public de la base collectr create_dummy(host = "localhost", @@ -145,12 +128,10 @@ modify_column_type(host = "localhost", #' } ``` - ## Renommage d'un champ dans une table PostgreSQL -```{r example-rename_field} -#| eval: no - +```{r example-rename_field, eval=FALSE} +#' \dontrun{ # Créer une table dummy dans le schéma public de la base collectr create_dummy(host = "localhost", database = "collectr", @@ -166,7 +147,6 @@ rename_field(host = "localhost", old_field = "unique_id", new_field = "unique_id", role = "runner") +#' } ``` - - diff --git a/vignettes/utils.Rmd b/vignettes/utils.Rmd index d4a8055..091ca2c 100644 --- a/vignettes/utils.Rmd +++ b/vignettes/utils.Rmd @@ -18,9 +18,6 @@ knitr::opts_chunk$set( library(collectr) ``` - - - Fonctions pour faciliter le chargement de fichiers ou la consolidations des données attributaires. @@ -28,9 +25,7 @@ données attributaires. ## Formatage du chemin d'accès au fichier pour Windows -```{r examples-format_filepath} -#| eval: no - +```{r examples-format_filepath, eval=FALSE} # Chemin de fichier avec des barres obliques inverses input_filepath <- "C:\\Users\\VotreNom\\Documents\\mon_fichier.xlsx" @@ -41,15 +36,11 @@ formatted_filepath <- format_filepath(input_filepath) print(formatted_filepath) ``` - - # Chaînes de caractères ## Remplacement des caractères spéciaux dans une chaîne de caractères -```{r examples-remove_special_chars} -#| eval: no - +```{r examples-remove_special_chars, eval=FALSE} # Chaîne de caractères avec des caractères spéciaux et accentués input_string <- "G\u00e2teau \u00e0 la cr\u00e8me renvers\u00e9e" @@ -61,15 +52,11 @@ cat("Cha\u00eene d\'entr\u00e9e :", input_string, "\n") cat("Cha\u00eene nettoy\u00e9e :", cleaned_string, "\n") ``` - - # Dataframes ## Formatage des noms des colonnes -```{r examples-format_colnames} -#| eval: no - +```{r examples-format_colnames, eval=FALSE} # Exemple de colonnes au format camel case original_colnames <- c("nomClient", "Code Postal", "DateDerniereCommande") @@ -82,9 +69,7 @@ print(formatted_colnames) ## Correction des noms de colonnes -```{r example-fix_encoding_variable} -#| eval: no - +```{r example-fix_encoding_variable, eval=FALSE} #' \dontrun{ # Utilisation de la fonction fix_encoding_variable() nitrate_analyse_esu_2023 <- fix_encoding_variable(nitrate_analyse_esu_2023, @@ -95,16 +80,21 @@ head(nitrate_analyse_esu_2023$libelle_station) #' } ``` - ## Calcul du taux de complétion d'une variable -```{r example-get_variable_completion_rate} +```{r example-get_variable_completion_rate, eval=FALSE} +#' \dontrun{ +# Création d'un dataframe pour l'exemple df <- data.frame( var1 = c(1, 2, NA, 4, 5), var2 = c(NA, NA, NA, 3, 4) ) -get_variable_completion_rate(df, "var1") # Retourne 80 -get_variable_completion_rate(df, "var2") # Retourne 40 + +# Retourne 80 +get_variable_completion_rate(df, "var1") +# Retourne 40 +get_variable_completion_rate(df, "var2") +#' } ``` diff --git a/vignettes/write-data.Rmd b/vignettes/write-data.Rmd index ee3b051..fc81166 100644 --- a/vignettes/write-data.Rmd +++ b/vignettes/write-data.Rmd @@ -18,23 +18,14 @@ knitr::opts_chunk$set( library(collectr) ``` - - - Fonctions pour manipuler les données d'un dataframe avant de les importer dans une base PostgreSQL. - - - - # Écriture en base ## Archivage d'une table dans une base PostgreSQL -```{r examples-archive_table} -#| eval: no - +```{r examples-archive_table, eval=FALSE} #' \dontrun{ # Création une table dummy dans le schéma public de la base collectr create_dummy(host = "localhost", @@ -64,12 +55,9 @@ archive_table(host = "localhost", #' } ``` - ## Ajout des données d'un dataframe à une table existante -```{r examples-insert_into_table} -#| eval: no - +```{r examples-insert_into_table, eval=FALSE} #' \dontrun{ # Création d'un dataframe à partir d'un fichier XLSX data_ars_2022 <- collectr::import_xlsx( @@ -91,12 +79,9 @@ insert_into_table(database = "si_eau", #' } ``` - ## Import et fusion des données de tables PostgreSQL -```{r examples-import_and_merge_tables} -#| eval: no - +```{r examples-import_and_merge_tables, eval=FALSE} #' \dontrun{ # Utilisation de la fonction import_and_merge_tables() import_and_merge_tables(database = "si_eau", @@ -108,7 +93,6 @@ import_and_merge_tables(database = "si_eau", #' } ``` - ## Mise à jour d'une table PostgreSQL à partir d'un dataframe **@todo** @@ -116,5 +100,3 @@ import_and_merge_tables(database = "si_eau", ## Mise à jour ou insertion dans une table PostgreSQL à partir d'un dataframe **@todo** - - -- GitLab From 8f0d6486e0726cca31f0eee8fe4dbe76ec3c152f Mon Sep 17 00:00:00 2001 From: "ronan.vignard" <ronan.vignard@developpement-durable.gouv.fr> Date: Mon, 10 Mar 2025 16:52:07 +0100 Subject: [PATCH 03/36] Modification du format de eval + nouveau fichier .shp pour le test de import_shapefile() --- vignettes/import-data.Rmd | 33 ++++++++------------------------- 1 file changed, 8 insertions(+), 25 deletions(-) diff --git a/vignettes/import-data.Rmd b/vignettes/import-data.Rmd index 436f9dc..f7d161b 100644 --- a/vignettes/import-data.Rmd +++ b/vignettes/import-data.Rmd @@ -18,18 +18,13 @@ knitr::opts_chunk$set( library(collectr) ``` - - - Fonctions pour charger des données au format fichier dans un dataframe. # Fichiers avec des géométries ## Téléchargement et extraction d'un fichier .ZIP à partir d'un flux WFS -```{r example-download_and_extract_wfs} -#| eval: no - +```{r example-download_and_extract_wfs, eval=FALSE} #' \dontrun{ # Exemple d'URL de téléchargement d'un fichier Shapefile zippé url_wfs <- paste0( @@ -49,9 +44,7 @@ shapefile_path <- download_and_extract_wfs(url_wfs, "shp") ## Import d'un fichier GPKG (Geopackage) -```{r examples-import_geopackage} -#| eval: no - +```{r examples-import_geopackage, eval=FALSE} #' \dontrun{ # Utilisation de la fonction import_geopackage() aerodrome <- import_geopackage(system.file("aerodrome.gpkg", package = "collectr")) @@ -60,12 +53,10 @@ aerodrome <- import_geopackage(system.file("aerodrome.gpkg", package = "collectr ## Import d'un fichier SHP (Shapefile) -```{r examples-import_shp} -#| eval: no - +```{r examples-import_shp, eval=FALSE} #' \dontrun{ # Importer le fichier shapefile dans un dataframe -chef_lieu <- import_shapefile(system.file("CHFLIEU_COMMUNE_ASSOCIEE_OU_DELEGUEE.shp", package = "collectr"),2154) +gare <- import_shapefile(system.file("GARE.shp", package = "collectr"),2154) #' } ``` @@ -73,9 +64,7 @@ chef_lieu <- import_shapefile(system.file("CHFLIEU_COMMUNE_ASSOCIEE_OU_DELEGUEE. ## Import de données au format XLSX -```{r examples-import_xlsx} -#| eval: no - +```{r examples-import_xlsx, eval=FALSE} # Utilisation de la fonction import_xlsx() data_ars_2022 <- import_xlsx( filepath = "C:\\TEMP\\Nitrates_2022.xlsx", @@ -84,20 +73,14 @@ data_ars_2022 <- import_xlsx( ``` - - ## Import de données au format XLS -Todo - +**@todo** ## Import de données au format CSV -Todo - +**@todo** ## Import de données au format JSON -Todo - - +**@todo** -- GitLab From ca1ca5f99a87021f82a24fe1804eedb2b06d4dc6 Mon Sep 17 00:00:00 2001 From: "ronan.vignard" <ronan.vignard@developpement-durable.gouv.fr> Date: Tue, 11 Mar 2025 13:52:16 +0100 Subject: [PATCH 04/36] Suppression du dataset --- inst/CHFLIEU_COMMUNE_ASSOCIEE_OU_DELEGUEE.cpg | 1 - inst/CHFLIEU_COMMUNE_ASSOCIEE_OU_DELEGUEE.dbf | Bin 447864 -> 0 bytes inst/CHFLIEU_COMMUNE_ASSOCIEE_OU_DELEGUEE.prj | 1 - inst/CHFLIEU_COMMUNE_ASSOCIEE_OU_DELEGUEE.shp | Bin 72144 -> 0 bytes inst/CHFLIEU_COMMUNE_ASSOCIEE_OU_DELEGUEE.shx | Bin 20684 -> 0 bytes 5 files changed, 2 deletions(-) delete mode 100644 inst/CHFLIEU_COMMUNE_ASSOCIEE_OU_DELEGUEE.cpg delete mode 100644 inst/CHFLIEU_COMMUNE_ASSOCIEE_OU_DELEGUEE.dbf delete mode 100644 inst/CHFLIEU_COMMUNE_ASSOCIEE_OU_DELEGUEE.prj delete mode 100644 inst/CHFLIEU_COMMUNE_ASSOCIEE_OU_DELEGUEE.shp delete mode 100644 inst/CHFLIEU_COMMUNE_ASSOCIEE_OU_DELEGUEE.shx diff --git a/inst/CHFLIEU_COMMUNE_ASSOCIEE_OU_DELEGUEE.cpg b/inst/CHFLIEU_COMMUNE_ASSOCIEE_OU_DELEGUEE.cpg deleted file mode 100644 index 3ad133c..0000000 --- a/inst/CHFLIEU_COMMUNE_ASSOCIEE_OU_DELEGUEE.cpg +++ /dev/null @@ -1 +0,0 @@ -UTF-8 \ No newline at end of file diff --git a/inst/CHFLIEU_COMMUNE_ASSOCIEE_OU_DELEGUEE.dbf b/inst/CHFLIEU_COMMUNE_ASSOCIEE_OU_DELEGUEE.dbf deleted file mode 100644 index 38b668cdb6d6d4e200bbc3feb7f4107f166c0174..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 447864 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 O(!|Kr(9GD#ND2VEK21~r diff --git a/inst/CHFLIEU_COMMUNE_ASSOCIEE_OU_DELEGUEE.prj b/inst/CHFLIEU_COMMUNE_ASSOCIEE_OU_DELEGUEE.prj deleted file mode 100644 index 56757fc..0000000 --- a/inst/CHFLIEU_COMMUNE_ASSOCIEE_OU_DELEGUEE.prj +++ /dev/null @@ -1 +0,0 @@ -PROJCS["RGF93_Lambert_93",GEOGCS["GCS_RGF_1993",DATUM["D_RGF_1993",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Lambert_Conformal_Conic"],PARAMETER["False_Easting",700000.0],PARAMETER["False_Northing",6600000.0],PARAMETER["Central_Meridian",3.0],PARAMETER["Standard_Parallel_1",44.0],PARAMETER["Standard_Parallel_2",49.0],PARAMETER["Latitude_Of_Origin",46.5],UNIT["Meter",1.0]] \ No newline at end of file diff --git a/inst/CHFLIEU_COMMUNE_ASSOCIEE_OU_DELEGUEE.shp b/inst/CHFLIEU_COMMUNE_ASSOCIEE_OU_DELEGUEE.shp deleted file mode 100644 index b5b0a31b558130b3830d78d3ffd06c5078771388..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 72144 zcmZQzQ0HR63VL3=U}j)oWME*JHFM_7zk3)Q&z?Ec6FMW@F)b}E?YpM|h*mo%9qou! zJE|ba7%mV2GOJiw)e%IWdl?DR%f!II0G0!pdm	B(^|aBnm_`!{k85O%+iC>AN{g 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 diff --git a/inst/CHFLIEU_COMMUNE_ASSOCIEE_OU_DELEGUEE.shx b/inst/CHFLIEU_COMMUNE_ASSOCIEE_OU_DELEGUEE.shx deleted file mode 100644 index ab1a0d14f1cdcbf9de29b1f3a8f4dfc1b1ddffa7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20684 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 -- GitLab From 7e29c4523db9f4afe689c746d9e7bded60801066 Mon Sep 17 00:00:00 2001 From: "ronan.vignard" <ronan.vignard@developpement-durable.gouv.fr> Date: Tue, 11 Mar 2025 14:01:50 +0100 Subject: [PATCH 05/36] Modification de l'extension du fichier --- tests/testthat/test-import_shapefile.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/testthat/test-import_shapefile.R b/tests/testthat/test-import_shapefile.R index fdd8973..b13b494 100644 --- a/tests/testthat/test-import_shapefile.R +++ b/tests/testthat/test-import_shapefile.R @@ -1,7 +1,7 @@ test_that("import_shapefile works", { # Import du fichier Shapefile - gare <- import_shapefile(system.file("GARE.shp", package = "collectr"),2154) + gare <- import_shapefile(system.file("GARE.SHP", package = "collectr"),2154) # Vérification de la présence d'un objet sf expect_s3_class(gare, "sf") @@ -14,7 +14,7 @@ test_that("import_shapefile works", { # Vérification de l'affichage d'un message d'erreur en cas d'absence du fichier expect_error( - object = import_shapefile(system.file("DEPARTEMENT.shp", package = "collectr"),2154), + object = import_shapefile(system.file("DEPARTEMENT.SHP", package = "collectr"),2154), regexp = "Le fichier Shapefile n\'existe pas." ) }) -- GitLab From 928ad7368a481a92d4279711793cca3182eb3ef2 Mon Sep 17 00:00:00 2001 From: "ronan.vignard" <ronan.vignard@developpement-durable.gouv.fr> Date: Tue, 11 Mar 2025 16:46:28 +0100 Subject: [PATCH 06/36] Ajout des tests pour download_and_extract_wfs() --- dev/0-dev_history.Rmd | 2 ++ .../testthat/test-download_and_extract_wfs.R | 26 +++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 tests/testthat/test-download_and_extract_wfs.R diff --git a/dev/0-dev_history.Rmd b/dev/0-dev_history.Rmd index a823622..d5bbeb1 100644 --- a/dev/0-dev_history.Rmd +++ b/dev/0-dev_history.Rmd @@ -78,6 +78,7 @@ usethis::use_r("archive_table") usethis::use_r("close_all_connections") usethis::use_r("create_dummy") usethis::use_r("create_schema") +usethis::use_r("download_and_extract_wfs") usethis::use_r("format_colnames") usethis::use_r("format_filepath") usethis::use_r("get_variable_completion_rate") @@ -96,6 +97,7 @@ usethis::use_test("archive_table") usethis::use_test("close_all_connections") usethis::use_test("create_dummy") usethis::use_test("create_schema") +usethis::use_test("download_and_extract_wfs") usethis::use_test("format_colnames") usethis::use_test("format_filepath") usethis::use_test("get_variable_completion_rate") diff --git a/tests/testthat/test-download_and_extract_wfs.R b/tests/testthat/test-download_and_extract_wfs.R new file mode 100644 index 0000000..ae9a45b --- /dev/null +++ b/tests/testthat/test-download_and_extract_wfs.R @@ -0,0 +1,26 @@ +test_that("download_and_extract_wfs works", { + + url_wfs <- paste0( + "https://services.sandre.eaufrance.fr/geo/obs?", + "SERVICE=WFS&", + "VERSION=2.0.0&", + "REQUEST=GetFeature&", + "typename=ObstEcoul_GUF&", + "SRSNAME=EPSG:4326&", + "OUTPUTFORMAT=SHAPEZIP" + ) + + # Appel de la fonction avec une extension valide + result <- download_and_extract_wfs(url_wfs, "shp") + + # Vérification que le fichier extrait existe bien + expect_true(file.exists(result)) + + # Vérification que l'extension du fichier est correcte + expect_match(result, "\\.shp$") + + # Vérification qu'une erreur est levée + expect_error(object = download_and_extract_wfs(url_wfs, "gpkg"), + regexp = "Le fichier avec l\'extension gpkg n\'a pas \u00e9t\u00e9 trouv\u00e9 dans le dossier temporaire.") + +}) -- GitLab From 1ccf2f5df95a3681a3d29e044c6901baffd78f86 Mon Sep 17 00:00:00 2001 From: "ronan.vignard" <ronan.vignard@developpement-durable.gouv.fr> Date: Tue, 11 Mar 2025 17:07:43 +0100 Subject: [PATCH 07/36] =?UTF-8?q?Cr=C3=A9ation=20des=20tests=20pour=20impo?= =?UTF-8?q?rt=5Fgeopackage=20()?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dev/0-dev_history.Rmd | 2 ++ tests/testthat/test-import_geopackage.R | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+) create mode 100644 tests/testthat/test-import_geopackage.R diff --git a/dev/0-dev_history.Rmd b/dev/0-dev_history.Rmd index d5bbeb1..ca0023d 100644 --- a/dev/0-dev_history.Rmd +++ b/dev/0-dev_history.Rmd @@ -82,6 +82,7 @@ usethis::use_r("download_and_extract_wfs") usethis::use_r("format_colnames") usethis::use_r("format_filepath") usethis::use_r("get_variable_completion_rate") +usethis::use_r("import_geopackage") usethis::use_r("import_shapefile") usethis::use_r("modify_column_type") usethis::use_r("remove_special_chars") @@ -101,6 +102,7 @@ usethis::use_test("download_and_extract_wfs") usethis::use_test("format_colnames") usethis::use_test("format_filepath") usethis::use_test("get_variable_completion_rate") +usethis::use_test("import_geopackage") usethis::use_test("import_shapefile") usethis::use_test("modify_column_type") usethis::use_test("remove_special_chars") diff --git a/tests/testthat/test-import_geopackage.R b/tests/testthat/test-import_geopackage.R new file mode 100644 index 0000000..20f6aab --- /dev/null +++ b/tests/testthat/test-import_geopackage.R @@ -0,0 +1,19 @@ +test_that("import_geopackage works", { + # Import du fichier Shapefile + aerodrome <- import_geopackage(system.file("aerodrome.gpkg", package = "collectr")) + + # Vérification de la présence d'un objet sf + expect_s3_class(aerodrome, "sf") + + # Vérification que le champs the_geom a été créé + expect_true("the_geom" %in% colnames(aerodrome)) + + # Vérification que le nombre d'enregistrements correspond + expect_equal(nrow(aerodrome), 1239) + + # Vérification de l'affichage d'un message d'erreur en cas d'absence du fichier + expect_error( + object = import_geopackage(system.file("routes.gpkg", package = "collectr")), + regexp = "Le fichier Geopackage n\'existe pas." + ) +}) -- GitLab From 2a6bbfe15cb1059aaa7304bed9c2b45e99d29a92 Mon Sep 17 00:00:00 2001 From: "ronan.vignard" <ronan.vignard@developpement-durable.gouv.fr> Date: Tue, 11 Mar 2025 17:08:18 +0100 Subject: [PATCH 08/36] =?UTF-8?q?Modification=20de=20la=20fonction=20suite?= =?UTF-8?q?=20aux=20tests=20:=20abandon=20de=20la=20transformation=20du=20?= =?UTF-8?q?r=C3=A9sultat=20en=20dataframe=20et=20modification=20du=20renom?= =?UTF-8?q?mage=20en=20the=5Fgeom?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- R/import_geopackage.R | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/R/import_geopackage.R b/R/import_geopackage.R index f037145..9de42a8 100644 --- a/R/import_geopackage.R +++ b/R/import_geopackage.R @@ -28,17 +28,17 @@ import_geopackage <- function(filepath) { donnees_sf <- sf::st_read(filepath) # Convertir les données spatiales en un dataframe - donnees_dataframe <- as.data.frame(donnees_sf) + # donnees_sf <- as.data.frame(donnees_sf) # Formater les noms des colonnes - colnames(donnees_dataframe) <- format_colnames(colnames(donnees_dataframe)) + colnames(donnees_sf) <- format_colnames(colnames(donnees_sf)) - # Renommer la colonne de géométrie en "the_geom" si elle est nommée "geometry" ou "geom" - if ("geometry" %in% colnames(donnees_dataframe)) { - colnames(donnees_dataframe)[colnames(donnees_dataframe) == "geometry"] <- "the_geom" - } else if ("geom" %in% colnames(donnees_dataframe)) { - colnames(donnees_dataframe)[colnames(donnees_dataframe) == "geom"] <- "the_geom" + # Renommer la colonne de géométrie en "the_geom" si nécessaire + nom_geom <- attr(donnees_sf, "sf_column") # Trouver la colonne de géométrie + if (!is.null(nom_geom) && nom_geom %in% colnames(donnees_sf)) { + colnames(donnees_sf)[colnames(donnees_sf) == nom_geom] <- "the_geom" + sf::st_geometry(donnees_sf) <- "the_geom" # Mise à jour du slot sf } - return(donnees_dataframe) + return(donnees_sf) } -- GitLab From 51d155ffc83e190edb25f639c5e080d1c7bf81e7 Mon Sep 17 00:00:00 2001 From: "ronan.vignard" <ronan.vignard@developpement-durable.gouv.fr> Date: Tue, 11 Mar 2025 17:20:33 +0100 Subject: [PATCH 09/36] Modification du renommage en the_geom --- R/import_shapefile.R | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/R/import_shapefile.R b/R/import_shapefile.R index 512823a..d6553aa 100644 --- a/R/import_shapefile.R +++ b/R/import_shapefile.R @@ -31,11 +31,11 @@ import_shapefile <- function(filepath, crs) { # Formater les noms des colonnes colnames(donnees_sf) <- format_colnames(colnames(donnees_sf)) - # Renommer la colonne de géométrie en "the_geom" si elle est nommée "geometry" ou "geom" - if ("geometry" %in% colnames(donnees_sf)) { - colnames(donnees_sf)[colnames(donnees_sf) == "geometry"] <- "the_geom" - } else if ("geom" %in% colnames(donnees_sf)) { - colnames(donnees_sf)[colnames(donnees_sf) == "geom"] <- "the_geom" + # Renommer la colonne de géométrie en "the_geom" si nécessaire + nom_geom <- attr(donnees_sf, "sf_column") # Trouver la colonne de géométrie + if (!is.null(nom_geom) && nom_geom %in% colnames(donnees_sf)) { + colnames(donnees_sf)[colnames(donnees_sf) == nom_geom] <- "the_geom" + sf::st_geometry(donnees_sf) <- "the_geom" # Mise à jour du slot sf } # Configurer l'attribut sf sur the_geom -- GitLab From 47f582533a8c8cd237ad101d9c1975deef1cf791 Mon Sep 17 00:00:00 2001 From: "ronan.vignard" <ronan.vignard@developpement-durable.gouv.fr> Date: Wed, 12 Mar 2025 09:21:40 +0100 Subject: [PATCH 10/36] =?UTF-8?q?Correction=20du=20bug=20de=20non=20rempla?= =?UTF-8?q?cement=20des=20caract=C3=A8res=20accentu=C3=A9s=20+=20d=C3=A9co?= =?UTF-8?q?mposition=20en=20plusieurs=20=C3=A9tapes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- R/format_colnames.R | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/R/format_colnames.R b/R/format_colnames.R index 7911623..7a22ec8 100644 --- a/R/format_colnames.R +++ b/R/format_colnames.R @@ -1,9 +1,9 @@ #' Formate les noms des colonnes #' -#' @description Cette fonction formate les noms des colonnes d'un dataframe en -#' remplaçant les caractères spéciaux par des chaînes vides, en mettant les noms -#' en minuscules et en ajoutant des underscores avant les majuscules +#' @description Cette fonction formate les noms des colonnes d'un dataframe en +#' remplaçant les caractères spéciaux par des chaînes vides, en mettant les noms +#' en minuscules et en ajoutant des underscores avant les majuscules #' (sauf au début du nom). #' #' @param colnames Vecteur contenant les noms des colonnes à formater. @@ -23,8 +23,14 @@ format_colnames <- function(colnames) { # Ajouter des underscores avant les majuscules (sauf au début du nom) colnames <- gsub("([[:lower:]]|\\s)([[:upper:]])", "\\1_\\2", colnames) - # Remplacer les caractères spéciaux et mettre en minuscules - colnames <- gsub("[^[:alnum:]_]", "", tolower(colnames)) + # Remplacer les accents par leurs équivalents sans accent + colnames <- iconv(colnames, from = "UTF-8", to = "ASCII//TRANSLIT") + + # Remplacer les caractères spéciaux (hors underscores et alphanumériques) + colnames <- gsub("[^[:alnum:]_]", "", colnames) + + # Mettre en minuscules + colnames <- tolower(colnames) return(colnames) } -- GitLab From 12b48c8aa0597a61bab674954276a51397d75fc2 Mon Sep 17 00:00:00 2001 From: "ronan.vignard" <ronan.vignard@developpement-durable.gouv.fr> Date: Wed, 12 Mar 2025 09:23:19 +0100 Subject: [PATCH 11/36] =?UTF-8?q?Ajout=20de=20import=5Fxlsx()=20et=20d?= =?UTF-8?q?=C3=A9composition=20en=20plusieurs=20chuncks=20des=20commandes?= =?UTF-8?q?=20r=C3=A9currentes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dev/0-dev_history.Rmd | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/dev/0-dev_history.Rmd b/dev/0-dev_history.Rmd index ca0023d..7937e26 100644 --- a/dev/0-dev_history.Rmd +++ b/dev/0-dev_history.Rmd @@ -84,6 +84,7 @@ usethis::use_r("format_filepath") usethis::use_r("get_variable_completion_rate") usethis::use_r("import_geopackage") usethis::use_r("import_shapefile") +usethis::use_r("import_xlsx") usethis::use_r("modify_column_type") usethis::use_r("remove_special_chars") usethis::use_r("rename_field") @@ -104,6 +105,7 @@ usethis::use_test("format_filepath") usethis::use_test("get_variable_completion_rate") usethis::use_test("import_geopackage") usethis::use_test("import_shapefile") +usethis::use_test("import_xlsx") usethis::use_test("modify_column_type") usethis::use_test("remove_special_chars") usethis::use_test("rename_field") @@ -116,18 +118,21 @@ usethis::use_test("table_exists") ```{r} # Simulate package installation pkgload::load_all() +``` +```{r} # Generate documentation and deal with dependencies attachment::att_amend_desc() +``` +```{r} # Add variables in globals.R checkhelper::print_globals() +``` +```{r} # Check the package devtools::check() - -# Manually add dependances -usethis::use_package("mockery") ``` # Share the package -- GitLab From c2914472b9654444cab002472b962021c3b21ba6 Mon Sep 17 00:00:00 2001 From: "ronan.vignard" <ronan.vignard@developpement-durable.gouv.fr> Date: Wed, 12 Mar 2025 09:24:44 +0100 Subject: [PATCH 12/36] Modification de l'exemple --- R/download_and_extract_wfs.R | 18 +++++++++--------- man/download_and_extract_wfs.Rd | 2 +- man/import_shapefile.Rd | 2 +- man/import_xlsx.Rd | 7 +++---- 4 files changed, 14 insertions(+), 15 deletions(-) diff --git a/R/download_and_extract_wfs.R b/R/download_and_extract_wfs.R index 7235a23..7b2d51f 100644 --- a/R/download_and_extract_wfs.R +++ b/R/download_and_extract_wfs.R @@ -1,18 +1,18 @@ -#' Télécharge et extrait un fichier compressé à partir de l'URL d'un flux WFS +#' Télécharge et extrait un fichier compressé à partir de l'URL d'un flux WFS #' (Web Feature Service) #' -#' @description Cette fonction télécharge un fichier zippé à partir de l'URL -#' d'un flux WFS (Web Feature Service), le décompresse dans un dossier -#' temporaire et renvoie le chemin vers le fichier extrait avec l'extension +#' @description Cette fonction télécharge un fichier zippé à partir de l'URL +#' d'un flux WFS (Web Feature Service), le décompresse dans un dossier +#' temporaire et renvoie le chemin vers le fichier extrait avec l'extension #' spécifiée. #' #' @param url L'URL du fichier compressé à télécharger. -#' @param file_extension L'extension du fichier à extraire du fichier compressé +#' @param file_extension L'extension du fichier à extraire du fichier compressé #' (par exemple, "shp", "gpkg", "csv", etc.). #' @return Le chemin vers le fichier extrait avec l'extension spécifiée. #' @importFrom utils download.file unzip -#' +#' #' @export #' @examples #' \dontrun{ @@ -22,7 +22,7 @@ #' "SERVICE=WFS&", #' "VERSION=2.0.0&", #' "REQUEST=GetFeature&", -#' "typename=BassinDCE&", +#' "typename=ObstEcoul_GUF&", #' "SRSNAME=EPSG:4326&", #' "OUTPUTFORMAT=SHAPEZIP" #' ) @@ -44,11 +44,11 @@ download_and_extract_wfs <- function(url, file_extension) { # Trouver le chemin vers le fichier extrait avec l'extension spécifiée extracted_files <- list.files(temp_dir, full.names = TRUE, recursive = TRUE) file_path <- extracted_files[grep(paste0("\\.", file_extension, "$"), extracted_files)] - + # Vérifier si le fichier a été trouvé if (length(file_path) == 0) { stop(paste("Le fichier avec l\'extension", file_extension, "n\'a pas \u00e9t\u00e9 trouv\u00e9 dans le dossier temporaire.")) } - + return(file_path) } diff --git a/man/download_and_extract_wfs.Rd b/man/download_and_extract_wfs.Rd index 23153f1..a004d06 100644 --- a/man/download_and_extract_wfs.Rd +++ b/man/download_and_extract_wfs.Rd @@ -30,7 +30,7 @@ url_wfs <- paste0( "SERVICE=WFS&", "VERSION=2.0.0&", "REQUEST=GetFeature&", - "typename=BassinDCE&", + "typename=ObstEcoul_GUF&", "SRSNAME=EPSG:4326&", "OUTPUTFORMAT=SHAPEZIP" ) diff --git a/man/import_shapefile.Rd b/man/import_shapefile.Rd index 7d70b86..37901a5 100644 --- a/man/import_shapefile.Rd +++ b/man/import_shapefile.Rd @@ -24,6 +24,6 @@ si elle existe. \examples{ \dontrun{ # Importer le fichier shapefile dans un dataframe -chef_lieu <- import_shapefile(system.file("CHFLIEU_COMMUNE_ASSOCIEE_OU_DELEGUEE.shp", package = "collectr"),2154) +gare <- import_shapefile(system.file("GARE.shp", package = "collectr"),2154) } } diff --git a/man/import_xlsx.Rd b/man/import_xlsx.Rd index 81bdde3..fb1ea3e 100644 --- a/man/import_xlsx.Rd +++ b/man/import_xlsx.Rd @@ -22,9 +22,8 @@ dataframe en supprimant les caractères spéciaux des noms de colonnes. } \examples{ # Utilisation de la fonction import_xlsx() -data_ars_2022 <- import_xlsx( - filepath = "C:\\\\TEMP\\\\Nitrates_2022.xlsx", - sheet = 1, - row = 1) +plans_eau_usage <- import_xlsx(system.file("plans_eau_usage.xlsx", + package = "collectr"), + sheet = 1, row = 0) } -- GitLab From ff07b2797b4d7f55f3eda3b5cdb88ce16d583d6b Mon Sep 17 00:00:00 2001 From: "ronan.vignard" <ronan.vignard@developpement-durable.gouv.fr> Date: Wed, 12 Mar 2025 09:25:10 +0100 Subject: [PATCH 13/36] Modification du fichier d'exemple + ajout de format_colnames() --- R/import_xlsx.R | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/R/import_xlsx.R b/R/import_xlsx.R index 35d983a..fe58a00 100644 --- a/R/import_xlsx.R +++ b/R/import_xlsx.R @@ -1,7 +1,7 @@ #' Importe un fichier XLSX dans un dataframe #' -#' @description Cette fonction importe un fichier au format XLSX dans un +#' @description Cette fonction importe un fichier au format XLSX dans un #' dataframe en supprimant les caractères spéciaux des noms de colonnes. #' #' @return Un dataframe correspondant au contenu du fichier. @@ -9,14 +9,13 @@ #' @param sheet Numéro de l'onglet à importer. #' @param row Numéro de la ligne de début de lecture. #' @importFrom readxl read_xlsx -#' +#' #' @export #' @examples #' # Utilisation de la fonction import_xlsx() -#' data_ars_2022 <- import_xlsx( -#' filepath = "C:\\TEMP\\Nitrates_2022.xlsx", -#' sheet = 1, -#' row = 1) +#' plans_eau_usage <- import_xlsx(system.file("plans_eau_usage.xlsx", +#' package = "collectr"), +#' sheet = 1, row = 0) #' import_xlsx <- function(filepath, sheet, row) { @@ -30,8 +29,8 @@ import_xlsx <- function(filepath, sheet, row) { # Déclarer la première ligne comme nom de variable col_names = TRUE ) - - colnames(data) <- collectr::remove_special_chars(colnames(data)) + + colnames(data) <- collectr::format_colnames(colnames(data)) return(data) } -- GitLab From 3109eda5ce690e0d4f2b37bbbe907d62fb6b26af Mon Sep 17 00:00:00 2001 From: "ronan.vignard" <ronan.vignard@developpement-durable.gouv.fr> Date: Wed, 12 Mar 2025 09:25:51 +0100 Subject: [PATCH 14/36] Ajout du fichier pour exemple et test --- inst/plans_eau_usage.xlsx | Bin 0 -> 5717 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 inst/plans_eau_usage.xlsx diff --git a/inst/plans_eau_usage.xlsx b/inst/plans_eau_usage.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..04a25cb32378b7263e566b28d00dfe6f9fbd784c GIT binary patch literal 5717 zcmWIWW@Zs#;Nak3D6-FqVn71i3=9nMMX5Q(`g$O8?WFTrhYfhz-`8?2u713w)zEED z+^GfIjdrnL$Wb-y{GX5={q37^@`lnW8xHnOtN-;y@yeTY^G<QEn{4Y7g0Cu^c%883 zy{OH+_t&>?$PYiu?0Z6W61((f4O=^Hi5ZXQPKo4yVi2x4N#8!!gKwuzu)gvu!Rkr3 zckP?_(wg}e_c9A9)|VM(3g_}C)*a@HO*fTosw;c)^Hhg?r_-@3!rC*`e@b2YA#x}} zRO7^Jz1#bD&0rOG?_rZ%%GY_#P}C#I`{(IZCG)*3>s6-hDf_=udDhH5iksK87}iOx zm8vY{erp}z&CZd%zl`NR0|SE-69WV8aN%cQV5rE^FV8Q^PRh^E)~m?P=?(VHpY0&9 z_j~w)y|-&D%4APl6cq+2ZOs&2e$p^1!5~_HcSd=~+pxdyWyK~h%i_0Xu$KS*?ChE3 z%F;DUzcU@<TAL)+$Na4ERH@<>y|j4wOBd%<itW_eafK_XjOp~cu=ms0bHB~JR^9(j zTY59s#>gN0&T6mNDf^mD#MLV|t1o5N+<a-~JsU(Bu3hSHN_ciXM&p{Y&YAxSFE)u- z=9JvKwqOIhp@OAQb#&*kO;<OG2+93!v$<zdzDMmA=XA@@;p?~Tm(YLwb6;-IslLdQ zOIfqFTxvgm)BMClt4Bdb>mP7*u9IFhfm8E?$&-JLODC=iuq`U<b7y4#ZGCSh-!C`m zkFnZMie^jerk=U5<@u%~60ZN&pV&702J`th4{Yo>Lti+b$p~L={=C`Ru9Hdo){`8g z{Sr0i3T2|la^&LN&N$DzTQ1yv(_}&RQUkGA!S+KdCyOtrn(NB@GvBJ{wDi7tMU!(? z!oNvY{Js;luXv7TMYI6xa+xJ_#1mcBG}FYIn4WFxkonT!Ui*BDU}M6aJ<+Z)hx+C; zewwVuk>s24{KxBE=f1J26eU^nHEn2aRj%9eVqbc$r|<LqUsPSw7KBd`7XKWjob>JS zU!7U1pCe7Wu02c<X}f;;V*AOXB~#*-Yx)}8RGI$LUuc$d?1jl+zUWH*%6_--&b*A{ z$Ky(}-A^uG^Y879pUoy=`x!t<=<=V>-E2$@3=Pcqk`ON>2^E)A=A;&b642X-SpVAw zBDMF|Z}?+3X<AT%SF=R$^1VJ8BAl7Gnmy+nIV3;vt<&N4_e<w2^Yq@nGAC-{FOlC* z<~_drSo*4G$wmPg+o0STlZ0(7xC|E=1!_+I$#VbPviIi=jHaEKQlR>hCH%^R?jNx! zIY(dmI<9nGpm3H&{Mt16rUNRhqDN#_PV(9@SyQ*8b>%tc;4H78#~w}WhYe)dn+!T1 zdz?EO645MVI$bPhi@>Mp`kD=o1>NG_c`Z$NYCJVWxUboQORCZ0)RdT)Jsa2`ov>N# ze#lX!<mn`iSI?)<s%-7yIHt|dm+k3)r%~=5@7{eo0wkX2YB;}Xw9x9@8gg3GC%|}K zsH%!~;_AIVvEOIEikX~cVDnPo75AFz^(9<uuig#gUpQrAjOU^J)12ox%tf|eQ2(kj zJwc{$R;0i+9sN63R~Z#3UDIN0Rz0r!cIs_Lo%sRh@?+-TOI;l=-}FN1_8aX;{{?^N zeouQbbrz?lcbxB3;f+;((hrhjFE#5~o?f~jyY+fh<g6RN3|Bw2P&(}tqH%Vf<E`9; zdt0_vYw3E+JgL`ro2K{1Jhd~N(cgd86k~?l0yBMHw?3SwX)>AL*fjNRZpX@;T!nR$ z*k|eais`UsEjNlt$@XkrJ%?@gvnxMh_*Ze4PmbDl@V23`&5WB#Y0uMNCp?3~G;!m_ zk86J|m*M?(>TJgPJ3QY{p8Z*GCS210{-42p+vD%6dg4=NpW9s*m-%<?+?Vmfx98{o znD%`^z2L0)SNZ8;CU37-uFQ!p?6KA;TK`=5&(+%H59Z!@_q-=s?XS)al^9LM6PxM^ zE-B08t1fu|uz#A#yNSp2Cq0V_o*AP1e9Ljkzg?H3U#~fCUE5jiTgp^@A?RGS$p4)Q zqG~>2^QSzT4@%FOTx!-+nHU(R3*k%85|H!^DiVt`Qd3Kc^}&=OC~5DF@Xo(&A+YcL zdV!J`nc22EKPTSOOG@9YJ3-BHZeHWwi$bY_6J4e*d84wwuKmhkE=}=+N*nmMnaZ54 zx!<F4?#!Rh!PBCu&sZ${dFUJ4y4;60O9W4rbN@bm`0MeNxrL3NIF_0m=l(5O{QL8# z{-2GT+~+0e=on1++&Y&dFvfz9UwDq9-2&EgiK@$VoSF1)o_ol8SR=?hb>-vT?{1tF zIQjO}A=c_{Ua8|MN5V~XjOTQp;yA1+#4uld$%Edl%U}3@Q)=UL*n04CV@2rNE#LM` zOw?CaTs-GklE9@kZE2h4SZ)rt+5AEGfYA}T(~p!T^cwC=TjFA)-Se$zUC(`EZMBsL z-bnW<=o@-jwryp4`+==nzBNjm|BD>U*-e}0Sbsfxy3$3V#ptcr;g5&*ebKvi&tsKF zZ#{?IhjaDa>R$?Y8BU9QJT_10-&v0m=OUh<gQuc?%$2)l@|S61gZt~LzxGQcU0Y$a z$(!LZZ=dUGl?!Ff!7^MjrMmZ~DzWO%exBof`I<vZa>z2LB!>Dark`vb;%@BZ$>37U zRE%9yILm9%Hc_v;>l5m2Hmw!++U(mA#Bo{WMa;cbyG<AJJm;-iwzP}ujf8kv&mEp< zFZrb&QKhMqMA#+oF`euUPTru)a>;hxhBdX@wO72``a^%J;LaOqKC|Ba%P%TkJ5SQ1 zOqR3bkiSqT%Y@421c{1+H~4Q^I7aPDkSvb)#=c=|yn=M^l0N&jOtsD5Em&(?S7<Zy zi#k6SZFnlvbn5DMp8PH@J>dvxUT?jOFy+-jQzmE}s$3ua)Y#d-L8#7iUER)#X_}KB zt~=wyK6xh3h2K?Qvis}$-S10RJpNv8xh9tHw+A14<E^QFqW50iZDENzCutku)4HrE zCUw!*QlCw1i!S~1y*9PJS#HC$cTc`O^kU9?rf^sP?#|8A8M1q)u6(%nTEuLry44RE z)=!&LpH@`I9&wMo_NnxRb}7r?<SYJp6=_Az&2!dIl$N@{+&gEb;X8G6E90FL9sN$9 z&Ps8ZpYg<}H`9LSgELQ<n(ufhi%VQcm$D2#T>SfH@A)%%IU6p|+jaHEk#+lnszUts z1goVlGdFzEYg#2Ny!&6!%Ro!V{9n>l{|XFv@6En{<-zi|tFK;RS#P`lwb#+tt62X2 zNlW*;e`bOC)fZ=ds-oJi+iFd&tD0B+?(-c}j&om_@0vdJ|Ej##{rM5$S9ABKd_0qU zS0k!wmDpd=Tg!{P9`Do^U%$NMVz&5s9p9Sp=NYf&JgIocbj(;=!e2kpX0y}B-cOgW zSf2cNr?e+s%;;C*hEHdlj(#ugTh@2*;>!|YR^^>Lw67=}^;%G<{`1|9o$vd6_vzhC zxL9UAWuo{j?kVdE^$cErajQPV!g-c;xm0A0bB_Cg!c}UF?-Gor#+t8Ax)I~Vz1A(H z(LU2&;J>b@z=wTPUCzq)u_bxAKEIWDTs4(3wyN=F+n$8dLm#r_7VN4vb<3Rf>er^X zi*mhZ?MOc5@52Anx#_cY0=H#4%ZXJNuN>0T5atnl@qfD}m%RSx7wJwe)-yLMwOJWY z5LkX8J-z7I(Wes1$1mwWcIuPQJDt<L`q=s>Kcd86uiT-<u|;Z<$K>Y4Doa=ozPi&I z5pr=?nBgWRq2m*l$7uX^pV9k6uj}6}`T4(|&T$JgeHU5h5cx54?LPZIS}T8iaWFcw zHo9iRzRNsM>%*F-X8EqH-1lqe9BX&&O9`z{>m{cMZoKlpI(4g=Y56Xlhnwam>-}d2 z6{r{PhA!b|WnkbI#aEz;Knm32jKreUl;D!0%)E4PJ7H?*?X24l0=4hMd9+yAg-#YO zn0};;Ba@5qGTWq@168JhY+<`^@8$TucK^lgdsfX4{Oh@YiSkWFJ<Y_wDUtJL7C)Oa z^W&GCQ0<Hhl}1(5WS>6f3Gfb{v@Y%D-M7yV^Gp6vDAAm9(c<*J#plmG%U^bn{Xxjv z^qbBc-<D|XsW}k!<4(ktKd1K=ZsquMHMDg*pX*C`0q3<{CoBG}TfzF0XGy2knN25; z^DJ7HFQ{*(-?#bamCH3&4Rb2ARg#NE`_~=JsS7<cS6tMu+hD#}?E~$D+);~yVrPr| zS(*LbGdRI=(xa)0{(aJcT&W9wFIiHY(IaBZR?@Gqq{qXnaOR4G$CfH_D#s+|ivFv! zVO-tP_UU~8e2qsRG_|g8HGRdPwyB))$6u@W4XatRG)mUC3mq)me?#oXh9e5!%U_<d z$`UHwEqKem)QI8zm19yIe|DW%#wc)4+B3F0bID1|RW6%~x!2t}EpM8a9M*T^%$Acv z=Vm@J+;e5YuVvHciSt}%+SAZFQS{B_%^Cgz2`AZE%r*-avZk&V@$XLgD&uth)4Pf~ zuMn^46Bl!a2K|`6`>2v{|59hU69+FD9om%LyugGf&wo;nmP=lHiNo8Kp2FXb8O$-! zS#{Y)XW#U<0wPs6^j;lYnDntKYmWfamc)5Mos1t}y?$%i)A!l)pPl@Bd*KI#IRQmE zB~RGpe-!*YxTh{}NrF*xW3|?tLn%DlFGy>Y?EC&Lqvn@ZueglfI{ieGll`BPpA~$N zpHR1cj^<(+zvFRV^`E@6dYmObcm4L@a)II-ui_4>bNa@tKJ{69jcK07CcYaNCT08< zGhJoV8KrBn_RaO?e78sMv|c?gscrq;o#HES`pVJ%J=vZUYaX_#%W2-bI_c6Tlj5Qr z-k_!1`3nx#@BX|Wl)US|oc%tRiGg7YJHF&C1xenJ-X*BjkOb{WL3)}KeX|c6@U*@E zE9&<Bs3&`JkHy{|$Mt`IFdhqhbm55Eq-$IM*Xc<|bEUqyF!{pu&-*;SzB1{3)p5j` zhi%m&mezwu%Q*Hn{(blMp=8+EMfV<LsP=D=7h1hX_(p@cr+(Dt&lZt-Nrxs_$1XYP z<+t+s$z9EF1NBdT^1M8U@vLa@+Gyr2dD;QHix2(ZkbIq&FMe_Le1j9boM(&VCK_K1 z>Q8#0t#8EsCHLo3+o$$QvNx1Zt#6(mWLD03H9k%5eHC{;=k2utb#MNteEzh3rt8}E z_wLp(fkMXr!_TTq3=9macsrMZ3=9k@`N;uA`31%L$@xX8pe9sq&}qNJ1_FCNi%xvs z`8i;ri>DUjt4^;KQ`&b(R?n7t)SmPG>vs!J>8P#S=g$3DQT`@rld$gw#^jxoRJ|5S zuqv!fin*p*7437_kZX<dq={~x8W-hsW`&ruUbPHmi|e_RAj2+Qp`2N~%6m(Z-*buR zT}+NSPed<G_D*Ffl$#}$?Nsl{Ytj2STIYbEo6Nzri7VLMOE#pGY`BtrxrD7JDZ`<m zL`*%f>Hk)~o(<vrC1*N=3btP_2(40K|9b9|<Bq#|i*v7e{{6%GZ;tK$vej)d+X4d} zLJwy6@d_;W34IX!Ae(KP)VjI-d(_WM$(g%c%bxGQ)#PExJ<qnV*)`5<X8$ygDoWu0 zowZJ7;z8^6s)lP0OmBK5;H}5E_rUwf-*3yW?0@qy)6g|kYWZS=bB9!7k36m^nV()B z|CZ%B+g%AZvps*!LodZz9Vlbn{qG;+t6zWF9%LVnWv=}l5%*{5D}GSqu)4X4#4$23 zOvf8J0?3h*SWp0po4FHx{SO&P9DiTewe+LcZQhq=m!{5;@Rzdn`Qn!Kn<s1Awn*(m z+qXNgoU>d0TzCKf&xgc!FFe1^fbDTkbCFLVTbO0;n_Z6iZyzslitM<Qb<>)g_m;B* zcj4i9_veW{Y);cS%uF(b7ta?Ky28dLS)g@0<mDZU6EhAK`o>(BWaam(<xf!7)JSD1 z6I{b)`!QX?O7QvZAMq>7UKzwkY^$DM(X`#*N1U6$oR~Y;TyJhqV{i=qCG(;Bef8oL zA8|qdXT>ek7qe)76q&x`!1=3hcW=D)x8<t)(XcmqyI(~uwcY37dgx2YMy2bmbIvYF zGfg#h;46&`3NsA7uxj$rkZE&bUdtYtzC6F9rY&<*^5OWt$)_J4)dz)V-K1MBLW~Ry zdl~T+1Hudp4AIW{c_pcNCGjDZ1*yfcpdj5l1)SVnzyIwz5iPPiwNb$95^KL|$f7k9 zJJmZg|4ev0?c00F<pH6pTNISS!fcA)&zyPV+_LPeYT5;HQgbJB%1&k}$!xh&>NoFM z`AgNAVvBS3ZG0en=Bk~#FUPko!+5g=JC+}7I_8l&=MkfQ>{%Us@jYy1c5?9>F1=u| zTB2ArL1}kmm;UVuch(hFpLVtMT(`YaaH?=#uC}+F!I`8fUth^=`PWgf^r&O$OZQZf zsj+?eOTMPx7hbcDpCRbzxkq*TA6<3Yzl3|iGsfd@mo%gti{0^@OZZ0do0f}>zh5e^ zjsBK)=h4v_thRRF<YukZifl4?8nm#b>U9J6eFm1Rm-3c&dDk|*KfH|9-ej-wU&rTj z4{Xkx$rE$r-2W>qQtupW*xIk>d~keIJ%2@V^_y?!57)~$>eM{z`TE1i;z#ZG`FmFQ z=}I+nfBLchzTm}Q=O4FKTxacA|0eL*uJ%n8?4a10vgu4=EF%L$I4dZ27@0&E5F>!d zV_@7!qk#}6q{If7(gEJ68j(jnKtp5@4Iom25o5p%T{Chw6Ervi(gwlN%wWxkp%Qeh z$PFq`KNO-3L~65vwSwvwaCa2BSBh>5a=is=e1Y^sa1A%u6pW@Ax(UeTJE(qx=mwF| zd|(qGVFz*zN^OU34suZhstrIUKyWEPmbw95J95qgl~)k0AW}#WNjtRkLf4I)GC;W# eqz{6Vgs|q-0B=?{kOEEyP6m4>1_lOj-~j;a`>UA% literal 0 HcmV?d00001 -- GitLab From 05971c3046cb1bc27b0c137b4ec79962a29f8b5f Mon Sep 17 00:00:00 2001 From: "ronan.vignard" <ronan.vignard@developpement-durable.gouv.fr> Date: Wed, 12 Mar 2025 09:26:03 +0100 Subject: [PATCH 15/36] =?UTF-8?q?Cr=C3=A9ation=20des=20tests?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/testthat/test-import_xlsx.R | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 tests/testthat/test-import_xlsx.R diff --git a/tests/testthat/test-import_xlsx.R b/tests/testthat/test-import_xlsx.R new file mode 100644 index 0000000..5cbedb0 --- /dev/null +++ b/tests/testthat/test-import_xlsx.R @@ -0,0 +1,18 @@ +test_that("import_xlsx works", { + + result <- import_xlsx(system.file("plans_eau_usage.xlsx", + package = "collectr"), + sheet = 1, row = 0) + + # Vérifier que la sortie est un dataframe + expect_s3_class(result, "data.frame") + + # Vérifier le nombre de lignes + expect_equal(nrow(result), 13) + + # Vérifier le nombre de colonnes + expect_equal(ncol(result), 3) + + # Vérifier qu'il n'y a plus de caractères spéciaux + expect_true(!any(grepl("[^A-Za-z0-9_]", colnames(result)))) +}) -- GitLab From 69089808e1cea7ce86d01e34f90f3b4e1fef30cb Mon Sep 17 00:00:00 2001 From: "ronan.vignard" <ronan.vignard@developpement-durable.gouv.fr> Date: Wed, 12 Mar 2025 09:26:27 +0100 Subject: [PATCH 16/36] Modification d'exemples + harmonisation de la doc --- vignettes/import-data.Rmd | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/vignettes/import-data.Rmd b/vignettes/import-data.Rmd index f7d161b..1353589 100644 --- a/vignettes/import-data.Rmd +++ b/vignettes/import-data.Rmd @@ -32,7 +32,7 @@ url_wfs <- paste0( "SERVICE=WFS&", "VERSION=2.0.0&", "REQUEST=GetFeature&", - "typename=BassinDCE&", + "typename=ObstEcoul_GUF&", "SRSNAME=EPSG:4326&", "OUTPUTFORMAT=SHAPEZIP" ) @@ -46,7 +46,7 @@ shapefile_path <- download_and_extract_wfs(url_wfs, "shp") ```{r examples-import_geopackage, eval=FALSE} #' \dontrun{ -# Utilisation de la fonction import_geopackage() +# Importer le fichier GeoPackage dans un dataframe aerodrome <- import_geopackage(system.file("aerodrome.gpkg", package = "collectr")) #' } ``` @@ -55,7 +55,7 @@ aerodrome <- import_geopackage(system.file("aerodrome.gpkg", package = "collectr ```{r examples-import_shp, eval=FALSE} #' \dontrun{ -# Importer le fichier shapefile dans un dataframe +# Importer le fichier Shapefile dans un dataframe gare <- import_shapefile(system.file("GARE.shp", package = "collectr"),2154) #' } ``` @@ -65,12 +65,12 @@ gare <- import_shapefile(system.file("GARE.shp", package = "collectr"),2154) ## Import de données au format XLSX ```{r examples-import_xlsx, eval=FALSE} -# Utilisation de la fonction import_xlsx() -data_ars_2022 <- import_xlsx( - filepath = "C:\\TEMP\\Nitrates_2022.xlsx", - sheet = 1, - row = 1) - +#' \dontrun{ +# Importer le fichier XLSX dans un dataframe +plans_eau_usage <- import_xlsx(system.file("plans_eau_usage.xlsx", + package = "collectr"), + sheet = 1, row = 0) +#' } ``` ## Import de données au format XLS -- GitLab From 1d80c4b6ddbeca93665418d4a175972e0267990f Mon Sep 17 00:00:00 2001 From: "ronan.vignard" <ronan.vignard@developpement-durable.gouv.fr> Date: Wed, 12 Mar 2025 10:16:42 +0100 Subject: [PATCH 17/36] Commentaires --- R/table_exists.R | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/R/table_exists.R b/R/table_exists.R index 9d6126e..add84c2 100644 --- a/R/table_exists.R +++ b/R/table_exists.R @@ -35,11 +35,15 @@ table_exists <- function(host, database, schema, table, role) { stop("La connexion fournie n\'est pas une connexion PostgreSQL valide.") } + # Lister les tables du schéma spécifié tables <- datalibaba::list_tables(connexion, schema = schema, db = database) + + # Vérifier la présence de la table spécifiée parmi celles du schéma table_exists <- table %in% tables # Fermer la connexion à la base de données DBI::dbDisconnect(connexion) + # Retourner TRUE si la table existe return(table_exists) } -- GitLab From 67eb5aadd7edcb8bc30af7f26aceabb1ee353d07 Mon Sep 17 00:00:00 2001 From: "ronan.vignard" <ronan.vignard@developpement-durable.gouv.fr> Date: Wed, 12 Mar 2025 10:17:02 +0100 Subject: [PATCH 18/36] =?UTF-8?q?Ajout=20de=20la=20fermeture=20de=20la=20c?= =?UTF-8?q?onnexion=20=C3=A0=20la=20base=20de=20donn=C3=A9es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- R/archive_table.R | 3 +++ R/check_structure_table.R | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/R/archive_table.R b/R/archive_table.R index d94b3f8..36ad48a 100644 --- a/R/archive_table.R +++ b/R/archive_table.R @@ -82,6 +82,9 @@ archive_table <- function(host, database, schema, new_schema = NULL, table, role db_dest = database, user = role) + # Fermer la connexion à la base de données + DBI::dbDisconnect(connexion) + # Retourner le nom de la nouvelle table archivée return(new_table) } diff --git a/R/check_structure_table.R b/R/check_structure_table.R index 7aeae79..1889e17 100644 --- a/R/check_structure_table.R +++ b/R/check_structure_table.R @@ -72,5 +72,9 @@ check_structure_table <- function(host, database, schema, table, dataframe, role return(FALSE) } + # Fermer la connexion à la base de données + DBI::dbDisconnect(connexion) + + # Retourner TRUE si les attributs correspondent return(TRUE) } -- GitLab From 87180bbf353e32609490bede3e015190039789ef Mon Sep 17 00:00:00 2001 From: "ronan.vignard" <ronan.vignard@developpement-durable.gouv.fr> Date: Wed, 12 Mar 2025 14:31:40 +0100 Subject: [PATCH 19/36] =?UTF-8?q?Ajout=20d'un=20param=C3=A8tre=20pk=20pour?= =?UTF-8?q?=20les=20tests?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- R/create_dummy.R | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/R/create_dummy.R b/R/create_dummy.R index b336040..faa2ec5 100644 --- a/R/create_dummy.R +++ b/R/create_dummy.R @@ -8,6 +8,7 @@ #' @param database Nom de la base de données PostgreSQL. #' @param schema Nom du schéma dans lequel créer la table. #' @param table Nom de la table à créer. +#' @param pk Clé primaire de la table à créer. NULL par défaut. #' @param role Nom du rôle (utilisateur) pour se connecter à la base de données. #' #' @return Un message indiquant si la table a été créée avec succès. @@ -27,7 +28,7 @@ #' table = "dummy", #' role = "runner") #' } -create_dummy <- function(host, database, schema, table, role) { +create_dummy <- function(host, database, schema, table, pk = NULL, role) { # Se connecter à la base de données PostgreSQL connexion <- datalibaba::connect_to_db(server = host, db = database, @@ -52,6 +53,7 @@ create_dummy <- function(host, database, schema, table, role) { table = table, schema = schema, db = database, + pk = pk, overwrite = TRUE, user = role, server = host) -- GitLab From 4d1d3399fd57de05616c64f82a8dbe7ecc37567a Mon Sep 17 00:00:00 2001 From: "ronan.vignard" <ronan.vignard@developpement-durable.gouv.fr> Date: Wed, 12 Mar 2025 14:31:53 +0100 Subject: [PATCH 20/36] Ajout de check_structure_table() --- dev/0-dev_history.Rmd | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dev/0-dev_history.Rmd b/dev/0-dev_history.Rmd index 7937e26..e545891 100644 --- a/dev/0-dev_history.Rmd +++ b/dev/0-dev_history.Rmd @@ -75,6 +75,7 @@ gitlabr::use_gitlab_ci(type = "check-coverage-pkgdown") ## Fonctions ```{r, eval=FALSE} usethis::use_r("archive_table") +usethis::use_r("check_structure_table") usethis::use_r("close_all_connections") usethis::use_r("create_dummy") usethis::use_r("create_schema") @@ -96,6 +97,7 @@ usethis::use_r("table_exists") ```{r, eval=FALSE} usethis::use_test("archive_table") +usethis::use_test("check_structure_table") usethis::use_test("close_all_connections") usethis::use_test("create_dummy") usethis::use_test("create_schema") -- GitLab From 0c0e6965fd4d5810bb03a1b58d5455f759ccd368 Mon Sep 17 00:00:00 2001 From: "ronan.vignard" <ronan.vignard@developpement-durable.gouv.fr> Date: Wed, 12 Mar 2025 14:32:04 +0100 Subject: [PATCH 21/36] =?UTF-8?q?Cr=C3=A9ation=20des=20tests?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/testthat/test-check_structure_table.R | 64 +++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 tests/testthat/test-check_structure_table.R diff --git a/tests/testthat/test-check_structure_table.R b/tests/testthat/test-check_structure_table.R new file mode 100644 index 0000000..234f1f7 --- /dev/null +++ b/tests/testthat/test-check_structure_table.R @@ -0,0 +1,64 @@ +test_that("check_structure_table works", { + + Sys.setenv(user_runner="runner") + Sys.setenv(pwd_runner=Sys.getenv("BDD_RUNNER_PWD")) + + # Création d'un dataframe de test + test <- data.frame( + id = 1:5, + name = c("Alice", "Bob", "Charlie", "David", "Eve"), + birthdate = c("1990-01-15", "1985-06-22", "1992-09-10", "1988-03-05", "1995-12-30"), + value = rnorm(5) + ) + + # Création d'une table de test en base avec id en clé primaire + create_dummy(host = "localhost", + database = "collectr", + schema = "public", + table = "dummy", + pk = "id", + role = "runner") + + expect_true(check_structure_table( + "localhost", "collectr", "public", "dummy", test, "runner")) + + # Création d'une table de test en base sans clé primaire indiquée + create_dummy(host = "localhost", + database = "collectr", + schema = "public", + table = "dummy", + role = "runner") + + expect_false(check_structure_table( + "localhost", "collectr", "public", "dummy", test, "runner")) + + # Création d'un dataframe avec une colonne en trop + test_extra_col <- data.frame( + id = integer(), + name = character(), + birthdate = as.Date(character()), + value = numeric(), + extra_col = character() + ) + + expect_false(check_structure_table( + "localhost", "collectr", "public", "dummy", test_extra_col, "runner")) + +}) + +test_that("check_structure_table fails", { + + Sys.setenv(user_runner="runner") + Sys.setenv(pwd_runner=Sys.getenv("BDD_RUNNER_PWD")) + + skip_on_ci() + # Vérification qu'une erreur est retournée en cas d'absence de la table à archiver + expect_error( + check_structure_table( + host = "localhost", database = "collectr", schema = "public", + table = "ghost", role = "runner"), + regexp = "La table sp\u00e9cifi\u00e9e n\'existe pas dans la base de donn\u00e9es." + ) + +}) + -- GitLab From 16995f15462cdfa69e6733f1af25b732fcb33d6b Mon Sep 17 00:00:00 2001 From: "ronan.vignard" <ronan.vignard@developpement-durable.gouv.fr> Date: Wed, 12 Mar 2025 14:32:26 +0100 Subject: [PATCH 22/36] =?UTF-8?q?Modification=20de=20l'exemple=20+=20ajout?= =?UTF-8?q?=20du=20param=C3=A8tre=20host?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- R/check_structure_table.R | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/R/check_structure_table.R b/R/check_structure_table.R index 1889e17..95e56f2 100644 --- a/R/check_structure_table.R +++ b/R/check_structure_table.R @@ -22,17 +22,26 @@ #' @export #' @examples #' \dontrun{ -#' # Création d'un dataframe à partir d'un fichier XLSX -#' data_ars_2022 <- import_xlsx( -#' filepath = system.file("Nitrates_2022.xlsx", package = "collectr"), -#' sheet = 1, -#' row = 2) +#' # Création d'un dataframe de test +#' test <- data.frame( +#' id = 1:5, +#' name = c("Alice", "Bob", "Charlie", "David", "Eve"), +#' birthdate = c("1990-01-15", "1985-06-22", "1992-09-10", "1988-03-05", "1995-12-30"), +#' value = rnorm(5) +#' ) +#' # Création d'une table de test en base +#' create_dummy(host = "localhost", +#' database = "collectr", +#' schema = "public", +#' table = "dummy", +#' role = "runner") #' # Utilisation de la fonction check_structure_table() -#' check_structure_table(database = "si_eau", -#' schema = "nitrates", -#' table = "nitrate_data_analyse_ars_test", -#' dataframe = data_ars_2022, -#' role = "admin") +#' check_structure_table(host = "localhost", +#' database = "collectr", +#' schema = "public", +#' table = "dummy", +#' dataframe = test, +#' role = "runner") #' } check_structure_table <- function(host, database, schema, table, dataframe, role) { # Se connecter à la base de données PostgreSQL @@ -42,7 +51,8 @@ check_structure_table <- function(host, database, schema, table, dataframe, role ecoSQL = FALSE) # Vérifier si la table existe dans la base de données - if (!table_exists(database = database, schema = schema, table = table, role = role)) { + if (!table_exists(host = host, database = database, schema = schema, + table = table, role = role)) { stop("La table sp\u00e9cifi\u00e9e n\'existe pas dans la base de donn\u00e9es.") } -- GitLab From 6dbf64561cba26a7fcd966b3e9a674ea0ec44224 Mon Sep 17 00:00:00 2001 From: "ronan.vignard" <ronan.vignard@developpement-durable.gouv.fr> Date: Wed, 12 Mar 2025 14:33:00 +0100 Subject: [PATCH 23/36] =?UTF-8?q?Modification=20de=20l'exemple=20+=20ajout?= =?UTF-8?q?=20du=20param=C3=A8tre=20host=20pour=20check=5Fstructure=5Ftabl?= =?UTF-8?q?e()?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vignettes/database-utils.Rmd | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/vignettes/database-utils.Rmd b/vignettes/database-utils.Rmd index 215c68e..7f177bf 100644 --- a/vignettes/database-utils.Rmd +++ b/vignettes/database-utils.Rmd @@ -92,17 +92,26 @@ table_exists(host = "localhost", ```{r examples-check_structure_table, eval=FALSE} #' \dontrun{ -# Création d'un dataframe à partir d'un fichier XLSX -data_ars_2022 <- import_xlsx( - filepath = "C:\\TEMP\\Nitrates_2022.xlsx", - sheet = 1, - row = 2) +# Création d'un dataframe de test +test <- data.frame( + id = 1:5, + name = c("Alice", "Bob", "Charlie", "David", "Eve"), + birthdate = c("1990-01-15", "1985-06-22", "1992-09-10", "1988-03-05", "1995-12-30"), + value = rnorm(5) +) +# Création d'une table de test en base +create_dummy(host = "localhost", + database = "collectr", + schema = "public", + table = "dummy", + role = "runner") # Utilisation de la fonction check_structure_table() -check_structure_table(database = "si_eau", - schema = "nitrates", - table = "nitrate_data_analyse_ars_test", - dataframe = data_ars_2022, - role = "admin") +check_structure_table(host = "localhost", + database = "collectr", + schema = "public", + table = "dummy", + dataframe = test, + role = "runner") #' } ``` -- GitLab From f85a97967d7df31b649ad2ff84e4438e55e9bada Mon Sep 17 00:00:00 2001 From: "ronan.vignard" <ronan.vignard@developpement-durable.gouv.fr> Date: Wed, 12 Mar 2025 14:40:18 +0100 Subject: [PATCH 24/36] =?UTF-8?q?Modification=20de=20l'exemple=20+=20ajout?= =?UTF-8?q?=20du=20param=C3=A8tre=20host?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- man/check_structure_table.Rd | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/man/check_structure_table.Rd b/man/check_structure_table.Rd index 045b68f..3083713 100644 --- a/man/check_structure_table.Rd +++ b/man/check_structure_table.Rd @@ -30,16 +30,25 @@ dataframe source et celle d'une table cible dans la base de données } \examples{ \dontrun{ -# Création d'un dataframe à partir d'un fichier XLSX -data_ars_2022 <- import_xlsx( - filepath = system.file("Nitrates_2022.xlsx", package = "collectr"), - sheet = 1, - row = 2) +# Création d'un dataframe de test +test <- data.frame( + id = 1:5, + name = c("Alice", "Bob", "Charlie", "David", "Eve"), + birthdate = c("1990-01-15", "1985-06-22", "1992-09-10", "1988-03-05", "1995-12-30"), + value = rnorm(5) +) +# Création d'une table de test en base +create_dummy(host = "localhost", + database = "collectr", + schema = "public", + table = "dummy", + role = "runner") # Utilisation de la fonction check_structure_table() -check_structure_table(database = "si_eau", - schema = "nitrates", - table = "nitrate_data_analyse_ars_test", - dataframe = data_ars_2022, - role = "admin") +check_structure_table(host = "localhost", + database = "collectr", + schema = "public", + table = "dummy", + dataframe = test, + role = "runner") } } -- GitLab From f9fa860eea31c98ccfe14e6604a7bb4474af3686 Mon Sep 17 00:00:00 2001 From: "ronan.vignard" <ronan.vignard@developpement-durable.gouv.fr> Date: Wed, 12 Mar 2025 14:40:35 +0100 Subject: [PATCH 25/36] =?UTF-8?q?Ajout=20du=20param=C3=A8tre=20pk?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- man/create_dummy.Rd | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/man/create_dummy.Rd b/man/create_dummy.Rd index cc69028..20c3bcd 100644 --- a/man/create_dummy.Rd +++ b/man/create_dummy.Rd @@ -4,7 +4,7 @@ \alias{create_dummy} \title{Crée une table de test dans une base de données PostgreSQL} \usage{ -create_dummy(host, database, schema, table, role) +create_dummy(host, database, schema, table, pk = NULL, role) } \arguments{ \item{host}{Hôte de la base de données PostgreSQL.} @@ -15,6 +15,8 @@ create_dummy(host, database, schema, table, role) \item{table}{Nom de la table à créer.} +\item{pk}{Clé primaire de la table à créer. NULL par défaut.} + \item{role}{Nom du rôle (utilisateur) pour se connecter à la base de données.} } \value{ -- GitLab From f668a4fb6be0a810fd87156c7e16b5f20a4f26ae Mon Sep 17 00:00:00 2001 From: "ronan.vignard" <ronan.vignard@developpement-durable.gouv.fr> Date: Wed, 12 Mar 2025 17:48:12 +0100 Subject: [PATCH 26/36] =?UTF-8?q?Cr=C3=A9ation=20des=20tests=20pour=20impo?= =?UTF-8?q?rt=5Fand=5Fmerge=5Ftables()?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dev/0-dev_history.Rmd | 2 + tests/testthat/test-import_and_merge_tables.R | 86 +++++++++++++++++++ 2 files changed, 88 insertions(+) create mode 100644 tests/testthat/test-import_and_merge_tables.R diff --git a/dev/0-dev_history.Rmd b/dev/0-dev_history.Rmd index e545891..9309763 100644 --- a/dev/0-dev_history.Rmd +++ b/dev/0-dev_history.Rmd @@ -83,6 +83,7 @@ usethis::use_r("download_and_extract_wfs") usethis::use_r("format_colnames") usethis::use_r("format_filepath") usethis::use_r("get_variable_completion_rate") +usethis::use_r("import_and_merge_tables") usethis::use_r("import_geopackage") usethis::use_r("import_shapefile") usethis::use_r("import_xlsx") @@ -105,6 +106,7 @@ usethis::use_test("download_and_extract_wfs") usethis::use_test("format_colnames") usethis::use_test("format_filepath") usethis::use_test("get_variable_completion_rate") +usethis::use_test("import_and_merge_tables") usethis::use_test("import_geopackage") usethis::use_test("import_shapefile") usethis::use_test("import_xlsx") diff --git a/tests/testthat/test-import_and_merge_tables.R b/tests/testthat/test-import_and_merge_tables.R new file mode 100644 index 0000000..abf663e --- /dev/null +++ b/tests/testthat/test-import_and_merge_tables.R @@ -0,0 +1,86 @@ +test_that("import_and_merge_tables works", { + + Sys.setenv(user_runner="runner") + Sys.setenv(pwd_runner=Sys.getenv("BDD_RUNNER_PWD")) + + # Créer une table source dans le schéma public de la base collectr + create_dummy(host = "localhost", + database = "collectr", + schema = "public", + table = "source", + pk = "id", + role = "runner") + # Créer une table target dans le schéma public de la base collectr + create_dummy(host = "localhost", + database = "collectr", + schema = "public", + table = "target", + pk = "id", + id_range = "6:10", + role = "runner") + + expect_true(import_and_merge_tables( + host = "localhost", + database = "collectr", + source_table = "source", + source_schema = "public", + target_table = "target", + target_schema = "public", + role = "runner" + )) +}) + +test_that("import_and_merge_tables fails", { + + Sys.setenv(user_runner="runner") + Sys.setenv(pwd_runner=Sys.getenv("BDD_RUNNER_PWD")) + + # Créer une table source dans le schéma public de la base collectr + create_dummy(host = "localhost", + database = "collectr", + schema = "public", + table = "source", + pk = "id", + role = "runner") + # Créer une table target dans le schéma public de la base collectr + create_dummy(host = "localhost", + database = "collectr", + schema = "public", + table = "target", + pk = "id", + id_range = "6:10", + role = "runner") + + expect_error(import_and_merge_tables( + host = "localhost", + database = "collectr", + source_table = "ghost", + source_schema = "public", + target_table = "target", + target_schema = "public", + role = "runner" + ), "La table source sp\u00e9cifi\u00e9e n\'existe pas dans la base de donn\u00e9es.") + + expect_error(import_and_merge_tables( + host = "localhost", + database = "collectr", + source_table = "source", + source_schema = "public", + target_table = "ghost", + target_schema = "public", + role = "runner" + ), "La table cible sp\u00e9cifi\u00e9e n\'existe pas dans la base de donn\u00e9es.") + + skip_on_ci() + mockery::stub(import_and_merge_tables, "datalibaba::connect_to_db", function(...) "InvalidConnection") + + expect_error(import_and_merge_tables( + host = "localhost", + database = "collectr", + source_table = "source", + source_schema = "public", + target_table = "target", + target_schema = "public", + role = "runner" + ), "La connexion fournie n\'est pas une connexion PostgreSQL valide.") +}) -- GitLab From 87923e2f962f909d5e88e814075ee53a61630bbd Mon Sep 17 00:00:00 2001 From: "ronan.vignard" <ronan.vignard@developpement-durable.gouv.fr> Date: Wed, 12 Mar 2025 17:49:01 +0100 Subject: [PATCH 27/36] =?UTF-8?q?Ajout=20du=20param=C3=A8tre=20host=20et?= =?UTF-8?q?=20modification=20de=20l'exemple=20pour=20import=5Fand=5Fmerge?= =?UTF-8?q?=5Ftables()?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- R/import_and_merge_tables.R | 71 ++++++++++++++++++++++------------ man/import_and_merge_tables.Rd | 31 ++++++++++++--- vignettes/write-data.Rmd | 28 +++++++++++--- 3 files changed, 93 insertions(+), 37 deletions(-) diff --git a/R/import_and_merge_tables.R b/R/import_and_merge_tables.R index 93d4d1c..ac35de3 100644 --- a/R/import_and_merge_tables.R +++ b/R/import_and_merge_tables.R @@ -1,19 +1,20 @@ #' Importe et fusionne les données de tables PostgreSQL #' -#' @description Cette fonction permet d'importer les données d'une table -#' PostgreSQL dans une autre table en supprimant les champs absents dans l'une +#' @description Cette fonction permet d'importer les données d'une table +#' PostgreSQL dans une autre table en supprimant les champs absents dans l'une #' ou l'autre des tables. #' +#' @param host Hôte de la base de données PostgreSQL. #' @param database Nom de la base de données. -#' @param source_table Le nom de la table source à partir de laquelle importer +#' @param source_table Le nom de la table source à partir de laquelle importer #' les données. #' @param source_schema Le schéma de la table source. #' @param target_table Le nom de la table cible où les données seront fusionnées. #' @param target_schema Le schéma de la table cible. #' @param role Le rôle du propriétaire de la table. #' -#' @return TRUE si l'importation et la fusion des données se sont déroulées +#' @return TRUE si l'importation et la fusion des données se sont déroulées #' avec succès. #' #' @importFrom datalibaba connect_to_db @@ -22,59 +23,79 @@ #' @export #' @examples #' \dontrun{ +#' # Créer une table dummy dans le schéma collectr de la base production +#' create_dummy(host = "localhost", +#' database = "collectr", +#' schema = "public", +#' table = "source", +#' pk = "id", +#' role = "runner") +#' # Créer une table dummy dans le schéma collectr de la base production +#' create_dummy(host = "localhost", +#' database = "collectr", +#' schema = "public", +#' table = "target", +#' pk = "id", +#' id_range = "6:10", +#' role = "runner") #' # Utilisation de la fonction import_and_merge_tables() -#' import_and_merge_tables(database = "si_eau", -#' source_table = "nitrate_data_analyse_ars_2023", -#' source_schema = "nitrates", -#' target_table = "nitrate_data_analyse_ars_test", -#' target_schema = "nitrates", -#' role = "admin") +#' import_and_merge_tables(host = "localhost", +#' database = "collectr", +#' source_table = "source", +#' source_schema = "public", +#' target_table = "target", +#' target_schema = "public", +#' role = "runner") #' } -import_and_merge_tables <- function(database, source_table, source_schema, +import_and_merge_tables <- function(host, database, source_table, source_schema, target_table, target_schema, role) { # Se connecter à la base de données PostgreSQL - connexion <- datalibaba::connect_to_db(db = database, - user = role, + connexion <- datalibaba::connect_to_db(db = database, + user = role, + server = host, ecoSQL = FALSE) - + # Vérifier si la connexion est une connexion PostgreSQL valide if (!inherits(connexion, "PostgreSQLConnection")) { stop("La connexion fournie n\'est pas une connexion PostgreSQL valide.") } # Vérifier si les tables source et cible existent dans les schémas respectifs - if (!table_exists(database = database, schema = source_schema, table = source_table, role = role)) { + if (!table_exists(host = host, database = database, schema = source_schema, + table = source_table, role = role)) { stop("La table source sp\u00e9cifi\u00e9e n\'existe pas dans la base de donn\u00e9es.") } - if (!table_exists(database = database, schema = target_schema, table = target_table, role = role)) { + if (!table_exists(host = host, database = database, schema = target_schema, + table = target_table, role = role)) { stop("La table cible sp\u00e9cifi\u00e9e n\'existe pas dans la base de donn\u00e9es.") } # Obtenir la liste des colonnes communes entre la table source et la table cible existing_source_result <- DBI::dbGetQuery( - connexion, - paste0("SELECT column_name FROM information_schema.columns - WHERE table_schema = '", source_schema,"' + connexion, + paste0("SELECT column_name FROM information_schema.columns + WHERE table_schema = '", source_schema,"' AND table_name = '", source_table, "';")) existing_target_result <- DBI::dbGetQuery( - connexion, - paste0("SELECT column_name FROM information_schema.columns - WHERE table_schema = '", target_schema,"' + connexion, + paste0("SELECT column_name FROM information_schema.columns + WHERE table_schema = '", target_schema,"' AND table_name = '", target_table, "';")) source_columns <- existing_source_result$column_name target_columns <- existing_target_result$column_name common_columns <- intersect(source_columns, target_columns) - + # Générer la requête d'insertion en sélectionnant uniquement les colonnes communes insert_query <- paste0("INSERT INTO ", target_schema, ".", target_table, " (", paste(common_columns, collapse = ", "), ")", " SELECT ", paste(common_columns, collapse = ", "), " FROM ", source_schema, ".", source_table) - + # Insérer les données dans la table cible DBI::dbExecute(connexion, insert_query) # Fermer la connexion à la base de données DBI::dbDisconnect(connexion) - + + # Retourner TRUE en cas de succès return(TRUE) } diff --git a/man/import_and_merge_tables.Rd b/man/import_and_merge_tables.Rd index 1c32409..274bad8 100644 --- a/man/import_and_merge_tables.Rd +++ b/man/import_and_merge_tables.Rd @@ -5,6 +5,7 @@ \title{Importe et fusionne les données de tables PostgreSQL} \usage{ import_and_merge_tables( + host, database, source_table, source_schema, @@ -14,6 +15,8 @@ import_and_merge_tables( ) } \arguments{ +\item{host}{Hôte de la base de données PostgreSQL.} + \item{database}{Nom de la base de données.} \item{source_table}{Le nom de la table source à partir de laquelle importer @@ -38,12 +41,28 @@ ou l'autre des tables. } \examples{ \dontrun{ +# Créer une table dummy dans le schéma collectr de la base production +create_dummy(host = "localhost", + database = "collectr", + schema = "public", + table = "source", + pk = "id", + role = "runner") +# Créer une table dummy dans le schéma collectr de la base production +create_dummy(host = "localhost", + database = "collectr", + schema = "public", + table = "target", + pk = "id", + id_range = "6:10", + role = "runner") # Utilisation de la fonction import_and_merge_tables() -import_and_merge_tables(database = "si_eau", - source_table = "nitrate_data_analyse_ars_2023", - source_schema = "nitrates", - target_table = "nitrate_data_analyse_ars_test", - target_schema = "nitrates", - role = "admin") +import_and_merge_tables(host = "localhost", + database = "collectr", + source_table = "source", + source_schema = "public", + target_table = "target", + target_schema = "public", + role = "runner") } } diff --git a/vignettes/write-data.Rmd b/vignettes/write-data.Rmd index fc81166..3dc8cae 100644 --- a/vignettes/write-data.Rmd +++ b/vignettes/write-data.Rmd @@ -83,13 +83,29 @@ insert_into_table(database = "si_eau", ```{r examples-import_and_merge_tables, eval=FALSE} #' \dontrun{ +# Créer une table source dans le schéma public de la base collectr +create_dummy(host = "localhost", + database = "collectr", + schema = "public", + table = "source", + pk = "id", + role = "runner") +# Créer une table target dans le schéma public de la base collectr +create_dummy(host = "localhost", + database = "collectr", + schema = "public", + table = "target", + pk = "id", + id_range = "6:10", + role = "runner") # Utilisation de la fonction import_and_merge_tables() -import_and_merge_tables(database = "si_eau", - source_table = "nitrate_data_analyse_ars_2023", - source_schema = "nitrates", - target_table = "nitrate_data_analyse_ars_test", - target_schema = "nitrates", - role = "admin") +import_and_merge_tables(host = "localhost", + database = "collectr", + source_table = "source", + source_schema = "public", + target_table = "target", + target_schema = "public", + role = "runner") #' } ``` -- GitLab From aa9b8c184012203e36eb17d2822ca10f74101225 Mon Sep 17 00:00:00 2001 From: "ronan.vignard" <ronan.vignard@developpement-durable.gouv.fr> Date: Wed, 12 Mar 2025 17:49:35 +0100 Subject: [PATCH 28/36] =?UTF-8?q?Ajout=20d'un=20param=C3=A8tre=20id=5Frang?= =?UTF-8?q?e=20et=20modification=20de=20l'exemple=20pour=20create=5Fdummy(?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- R/create_dummy.R | 11 +++++++++-- man/create_dummy.Rd | 6 +++++- vignettes/database-utils.Rmd | 12 +++++++----- 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/R/create_dummy.R b/R/create_dummy.R index faa2ec5..1fe3b81 100644 --- a/R/create_dummy.R +++ b/R/create_dummy.R @@ -9,6 +9,7 @@ #' @param schema Nom du schéma dans lequel créer la table. #' @param table Nom de la table à créer. #' @param pk Clé primaire de la table à créer. NULL par défaut. +#' @param id_range Plage de 5 valeurs de l'identifiant id. 1:5 par défaut. #' @param role Nom du rôle (utilisateur) pour se connecter à la base de données. #' #' @return Un message indiquant si la table a été créée avec succès. @@ -26,9 +27,12 @@ #' database = "collectr", #' schema = "public", #' table = "dummy", +#' pk = NULL, +#' id_range = "1:5" #' role = "runner") #' } -create_dummy <- function(host, database, schema, table, pk = NULL, role) { +create_dummy <- function(host, database, schema, table, pk = NULL, + id_range = "1:5", role) { # Se connecter à la base de données PostgreSQL connexion <- datalibaba::connect_to_db(server = host, db = database, @@ -40,9 +44,12 @@ create_dummy <- function(host, database, schema, table, pk = NULL, role) { stop("La connexion fournie n\'est pas une connexion PostgreSQL valide.") } + # Générer dynamiquement la plage d'ID + id_values <- eval(parse(text = id_range)) + # Créer un dataframe fictif df <- data.frame( - id = 1:5, + id = id_values, name = c("Alice", "Bob", "Charlie", "David", "Eve"), birthdate = c("1990-01-15", "1985-06-22", "1992-09-10", "1988-03-05", "1995-12-30"), value = rnorm(5) diff --git a/man/create_dummy.Rd b/man/create_dummy.Rd index 20c3bcd..0fb84ed 100644 --- a/man/create_dummy.Rd +++ b/man/create_dummy.Rd @@ -4,7 +4,7 @@ \alias{create_dummy} \title{Crée une table de test dans une base de données PostgreSQL} \usage{ -create_dummy(host, database, schema, table, pk = NULL, role) +create_dummy(host, database, schema, table, pk = NULL, id_range = "1:5", role) } \arguments{ \item{host}{Hôte de la base de données PostgreSQL.} @@ -17,6 +17,8 @@ create_dummy(host, database, schema, table, pk = NULL, role) \item{pk}{Clé primaire de la table à créer. NULL par défaut.} +\item{id_range}{Plage de 5 valeurs de l'identifiant id. 1:5 par défaut.} + \item{role}{Nom du rôle (utilisateur) pour se connecter à la base de données.} } \value{ @@ -33,6 +35,8 @@ create_dummy(host = "localhost", database = "collectr", schema = "public", table = "dummy", + pk = NULL, + id_range = "1:5" role = "runner") } } diff --git a/vignettes/database-utils.Rmd b/vignettes/database-utils.Rmd index 7f177bf..72bf055 100644 --- a/vignettes/database-utils.Rmd +++ b/vignettes/database-utils.Rmd @@ -41,11 +41,13 @@ create_schema(host = "localhost", ```{r examples-create_dummy, eval=FALSE} #' \dontrun{ # Création d'une table dummy dans le schéma public de la base collectr -collectr::create_dummy(host = "localhost", - database = "collectr", - schema = "public", - table = "dummy", - role = "runner") +create_dummy(host = "localhost", + database = "collectr", + schema = "public", + table = "dummy", + pk = "id", + id_range = "1:5", + role = "runner") #' } ``` -- GitLab From 5631b0be5849d2fcf89ebb76198473e84336d4ee Mon Sep 17 00:00:00 2001 From: "ronan.vignard" <ronan.vignard@developpement-durable.gouv.fr> Date: Thu, 13 Mar 2025 15:06:34 +0100 Subject: [PATCH 29/36] Typo --- R/create_dummy.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/create_dummy.R b/R/create_dummy.R index 1fe3b81..2284c51 100644 --- a/R/create_dummy.R +++ b/R/create_dummy.R @@ -28,7 +28,7 @@ #' schema = "public", #' table = "dummy", #' pk = NULL, -#' id_range = "1:5" +#' id_range = "1:5", #' role = "runner") #' } create_dummy <- function(host, database, schema, table, pk = NULL, -- GitLab From e7eb92e496ca44b856267b1b37b85b6db20bb387 Mon Sep 17 00:00:00 2001 From: "ronan.vignard" <ronan.vignard@developpement-durable.gouv.fr> Date: Thu, 13 Mar 2025 15:06:46 +0100 Subject: [PATCH 30/36] Doc --- R/import_and_merge_tables.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/R/import_and_merge_tables.R b/R/import_and_merge_tables.R index ac35de3..f7133b7 100644 --- a/R/import_and_merge_tables.R +++ b/R/import_and_merge_tables.R @@ -23,14 +23,14 @@ #' @export #' @examples #' \dontrun{ -#' # Créer une table dummy dans le schéma collectr de la base production +#' # Créer une table source dans le schéma public de la base collectr #' create_dummy(host = "localhost", #' database = "collectr", #' schema = "public", #' table = "source", #' pk = "id", #' role = "runner") -#' # Créer une table dummy dans le schéma collectr de la base production +#' # Créer une table target dans le schéma public de la base collectr #' create_dummy(host = "localhost", #' database = "collectr", #' schema = "public", -- GitLab From c30f15a14326321ea9cd87a54189276d8455d200 Mon Sep 17 00:00:00 2001 From: "ronan.vignard" <ronan.vignard@developpement-durable.gouv.fr> Date: Thu, 13 Mar 2025 15:07:32 +0100 Subject: [PATCH 31/36] =?UTF-8?q?Ajout=20du=20param=C3=A8tre=20host=20et?= =?UTF-8?q?=20modification=20de=20l'exemple?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- R/insert_into_table.R | 72 ++++++++++++++++++++++++------------------- 1 file changed, 40 insertions(+), 32 deletions(-) diff --git a/R/insert_into_table.R b/R/insert_into_table.R index 9083407..1e3b040 100644 --- a/R/insert_into_table.R +++ b/R/insert_into_table.R @@ -1,19 +1,20 @@ #' Insère un dataframe dans une table existante #' -#' @description Fonction pour insérer les données d'un dataframe dans une table -#' existante d'une base de données PostgreSQL, en vérifiant la correspondance -#' de la structure entre le dataframe et la table. Si la correspondance est +#' @description Fonction pour insérer les données d'un dataframe dans une table +#' existante d'une base de données PostgreSQL, en vérifiant la correspondance +#' de la structure entre le dataframe et la table. Si la correspondance est #' vérifiée, les données sont insérées dans la table. Si la correspondance #' n'est pas vérifiée les différences de strcture entre le dataframe et la table #' sont listées. #' +#' @param host Hôte de la base de données PostgreSQL. #' @param database Nom de la base de données. #' @param schema Le schéma de la table dans la base de données. #' @param table Le nom de la table existante dans la base de données. #' @param dataframe Le dataframe contenant les données à insérer. #' @param role Le rôle du propriétaire de la table. -#' +#' #' @return Le nombre de lignes insérées dans la table en base. #' #' @importFrom datalibaba connect_to_db @@ -23,54 +24,61 @@ #' @export #' @examples #' \dontrun{ -#' # Création d'un dataframe à partir d'un fichier XLSX -#' data_ars_2022 <- collectr::import_xlsx( -#' filepath = "C:\\TEMP\\Nitrates_2022.xlsx", -#' sheet = 1, -#' row = 1) -#' -#' # Ajout d'un champs de géométrie -#' data_ars_2022 <- data_ars_2022 |> -#' dplyr::select(-coord_x,-coord_y) |> -#' dplyr::mutate(eligible_ades = rep(NA, dplyr::n())) -#' +#' # Créer une dataframe source +#' source <- data.frame( +#' id = 6:10, +#' name = c("Alice", "Bob", "Charlie", "David", "Eve"), +#' birthdate = c("1990-01-15", "1985-06-22", "1992-09-10", "1988-03-05", "1995-12-30"), +#' value = rnorm(5) +#' ) +#' # Créer une table target dans le schéma public de la base collectr +#' create_dummy(host = "localhost", +#' database = "collectr", +#' schema = "public", +#' table = "target", +#' pk = "id", +#' id_range = "1:5", +#' role = "runner") #' # Utilisation de la fonction insert_into_table() -#' insert_into_table(database = "si_eau", -#' schema = "nitrates", -#' table = "nitrate_data_analyse_ars_test", -#' dataframe = data_ars_2022, -#' role = "admin") +#' insert_into_table(host = "localhost", +#' database = "collectr", +#' schema = "public", +#' table = "target", +#' dataframe = source, +#' role = "runner") #' } -insert_into_table <- function(database, schema, table, dataframe, role) { +insert_into_table <- function(host, database, schema, table, dataframe, role) { # Se connecter à la base de données PostgreSQL - connexion <- datalibaba::connect_to_db(db = database, - user = role, + connexion <- datalibaba::connect_to_db(server = host, + db = database, + user = role, ecoSQL = FALSE) - + # Vérifier si la table existe dans la base de données - if (!table_exists(database = database, schema = schema, table = table, role = role)) { + if (!table_exists(host = host, database = database, schema = schema, + table = table, role = role)) { stop("La table sp\u00e9cifi\u00e9e n\'existe pas dans la base de donn\u00e9es.") } - # Vérifier si les attributs correspondent - if (!check_structure_table(database = database, schema = schema, - table = table, dataframe = dataframe, + # Vérifier si les attributs correspondent + if (!check_structure_table(host = host, database = database, schema = schema, + table = table, dataframe = dataframe, role = role)) { return(FALSE) } # Utiliser sqlAppendTable pour préparer la requête d'insertion insert_query <- DBI::sqlAppendTable(connexion, - DBI::Id(schema = schema, table = table), - dataframe, - row.names = FALSE) + DBI::Id(schema = schema, table = table), + dataframe, + row.names = FALSE) # Exécuter la requête d'insertion result <- DBI::dbExecute(connexion, insert_query) # Se déconnecter de la base de données DBI::dbDisconnect(connexion) - + # Renvoyer le nombre de lignes insérées return(result) } -- GitLab From 9ba59a906d289cb2b81b291806a0b63c07662654 Mon Sep 17 00:00:00 2001 From: "ronan.vignard" <ronan.vignard@developpement-durable.gouv.fr> Date: Thu, 13 Mar 2025 15:07:54 +0100 Subject: [PATCH 32/36] =?UTF-8?q?Ajout=20du=20param=C3=A8tre=20host=20et?= =?UTF-8?q?=20modification=20de=20l'exemple=20pour=20insert=5Finto=5Ftable?= =?UTF-8?q?()?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vignettes/write-data.Rmd | 39 ++++++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/vignettes/write-data.Rmd b/vignettes/write-data.Rmd index 3dc8cae..bc38cf7 100644 --- a/vignettes/write-data.Rmd +++ b/vignettes/write-data.Rmd @@ -59,23 +59,28 @@ archive_table(host = "localhost", ```{r examples-insert_into_table, eval=FALSE} #' \dontrun{ -# Création d'un dataframe à partir d'un fichier XLSX -data_ars_2022 <- collectr::import_xlsx( - filepath = "C:\\TEMP\\Nitrates_2022.xlsx", - sheet = 1, - row = 1) - -# Ajout d'un champs de géométrie -data_ars_2022 <- data_ars_2022 |> - dplyr::select(-coord_x,-coord_y) |> - dplyr::mutate(eligible_ades = rep(NA, dplyr::n())) - -# Utilisation de la fonction insert_into_table() -insert_into_table(database = "si_eau", - schema = "nitrates", - table = "nitrate_data_analyse_ars_test", - dataframe = data_ars_2022, - role = "admin") +# Créer une dataframe source + source <- data.frame( + id = 6:10, + name = c("Alice", "Bob", "Charlie", "David", "Eve"), + birthdate = c("1990-01-15", "1985-06-22", "1992-09-10", "1988-03-05", "1995-12-30"), + value = rnorm(5) + ) + # Créer une table target dans le schéma public de la base collectr + create_dummy(host = "localhost", + database = "collectr", + schema = "public", + table = "target", + pk = "id", + id_range = "1:5", + role = "runner") + # Utilisation de la fonction insert_into_table() + insert_into_table(host = "localhost", + database = "collectr", + schema = "public", + table = "target", + dataframe = source, + role = "runner") #' } ``` -- GitLab From fb7cc1275d2726c9bb86da68a82afb8122fa65c7 Mon Sep 17 00:00:00 2001 From: "ronan.vignard" <ronan.vignard@developpement-durable.gouv.fr> Date: Thu, 13 Mar 2025 15:08:06 +0100 Subject: [PATCH 33/36] Doc --- man/import_and_merge_tables.Rd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/man/import_and_merge_tables.Rd b/man/import_and_merge_tables.Rd index 274bad8..36abe6c 100644 --- a/man/import_and_merge_tables.Rd +++ b/man/import_and_merge_tables.Rd @@ -41,14 +41,14 @@ ou l'autre des tables. } \examples{ \dontrun{ -# Créer une table dummy dans le schéma collectr de la base production +# Créer une table source dans le schéma public de la base collectr create_dummy(host = "localhost", database = "collectr", schema = "public", table = "source", pk = "id", role = "runner") -# Créer une table dummy dans le schéma collectr de la base production +# Créer une table target dans le schéma public de la base collectr create_dummy(host = "localhost", database = "collectr", schema = "public", -- GitLab From 9f5733f915e16aaf65cde87b55f92509a30352da Mon Sep 17 00:00:00 2001 From: "ronan.vignard" <ronan.vignard@developpement-durable.gouv.fr> Date: Thu, 13 Mar 2025 15:08:16 +0100 Subject: [PATCH 34/36] Typo --- man/create_dummy.Rd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/man/create_dummy.Rd b/man/create_dummy.Rd index 0fb84ed..c9d0d8d 100644 --- a/man/create_dummy.Rd +++ b/man/create_dummy.Rd @@ -36,7 +36,7 @@ create_dummy(host = "localhost", schema = "public", table = "dummy", pk = NULL, - id_range = "1:5" + id_range = "1:5", role = "runner") } } -- GitLab From 056ac042c54be7e45e1d80003f51843e8d63dee7 Mon Sep 17 00:00:00 2001 From: "ronan.vignard" <ronan.vignard@developpement-durable.gouv.fr> Date: Thu, 13 Mar 2025 15:08:43 +0100 Subject: [PATCH 35/36] =?UTF-8?q?Ajout=20du=20param=C3=A8tre=20host=20et?= =?UTF-8?q?=20modification=20de=20l'exemple?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- man/insert_into_table.Rd | 41 +++++++++++++++++++++++----------------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/man/insert_into_table.Rd b/man/insert_into_table.Rd index 1a1e7b1..9237157 100644 --- a/man/insert_into_table.Rd +++ b/man/insert_into_table.Rd @@ -4,9 +4,11 @@ \alias{insert_into_table} \title{Insère un dataframe dans une table existante} \usage{ -insert_into_table(database, schema, table, dataframe, role) +insert_into_table(host, database, schema, table, dataframe, role) } \arguments{ +\item{host}{Hôte de la base de données PostgreSQL.} + \item{database}{Nom de la base de données.} \item{schema}{Le schéma de la table dans la base de données.} @@ -30,22 +32,27 @@ sont listées. } \examples{ \dontrun{ -# Création d'un dataframe à partir d'un fichier XLSX -data_ars_2022 <- collectr::import_xlsx( - filepath = "C:\\\\TEMP\\\\Nitrates_2022.xlsx", - sheet = 1, - row = 1) - -# Ajout d'un champs de géométrie -data_ars_2022 <- data_ars_2022 |> - dplyr::select(-coord_x,-coord_y) |> - dplyr::mutate(eligible_ades = rep(NA, dplyr::n())) - +# Créer une dataframe source +source <- data.frame( + id = 6:10, + name = c("Alice", "Bob", "Charlie", "David", "Eve"), + birthdate = c("1990-01-15", "1985-06-22", "1992-09-10", "1988-03-05", "1995-12-30"), + value = rnorm(5) +) +# Créer une table target dans le schéma public de la base collectr +create_dummy(host = "localhost", + database = "collectr", + schema = "public", + table = "target", + pk = "id", + id_range = "1:5", + role = "runner") # Utilisation de la fonction insert_into_table() -insert_into_table(database = "si_eau", - schema = "nitrates", - table = "nitrate_data_analyse_ars_test", - dataframe = data_ars_2022, - role = "admin") +insert_into_table(host = "localhost", + database = "collectr", + schema = "public", + table = "target", + dataframe = source, + role = "runner") } } -- GitLab From 729cee9e1e97d9feae14f4f30b367e49577a18dd Mon Sep 17 00:00:00 2001 From: "ronan.vignard" <ronan.vignard@developpement-durable.gouv.fr> Date: Thu, 13 Mar 2025 15:09:02 +0100 Subject: [PATCH 36/36] =?UTF-8?q?Cr=C3=A9ation=20des=20tests=20pour=20inse?= =?UTF-8?q?rt=5Finto=5Ftable()?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dev/0-dev_history.Rmd | 2 ++ tests/testthat/test-insert_into_table.R | 47 +++++++++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 tests/testthat/test-insert_into_table.R diff --git a/dev/0-dev_history.Rmd b/dev/0-dev_history.Rmd index 9309763..fdccdc3 100644 --- a/dev/0-dev_history.Rmd +++ b/dev/0-dev_history.Rmd @@ -87,6 +87,7 @@ usethis::use_r("import_and_merge_tables") usethis::use_r("import_geopackage") usethis::use_r("import_shapefile") usethis::use_r("import_xlsx") +usethis::use_r("insert_into_table") usethis::use_r("modify_column_type") usethis::use_r("remove_special_chars") usethis::use_r("rename_field") @@ -110,6 +111,7 @@ usethis::use_test("import_and_merge_tables") usethis::use_test("import_geopackage") usethis::use_test("import_shapefile") usethis::use_test("import_xlsx") +usethis::use_test("insert_into_table") usethis::use_test("modify_column_type") usethis::use_test("remove_special_chars") usethis::use_test("rename_field") diff --git a/tests/testthat/test-insert_into_table.R b/tests/testthat/test-insert_into_table.R new file mode 100644 index 0000000..43f037c --- /dev/null +++ b/tests/testthat/test-insert_into_table.R @@ -0,0 +1,47 @@ +test_that("insert_into_table works", { + + Sys.setenv(user_runner="runner") + Sys.setenv(pwd_runner=Sys.getenv("BDD_RUNNER_PWD")) + + # Création d'un dataframe fictif + source <- data.frame( + id = 6:10, + name = c("Alice", "Bob", "Charlie", "David", "Eve"), + birthdate = c("1990-01-15", "1985-06-22", "1992-09-10", "1988-03-05", "1995-12-30"), + value = rnorm(5) + ) + # Créer une table target dans le schéma public de la base collectr + create_dummy(host = "localhost", + database = "collectr", + schema = "public", + table = "target", + pk = "id", + id_range = "1:5", + role = "runner") + + expect_equal(object = insert_into_table(host = "localhost", database = "collectr", + schema = "public", table = "target", + dataframe = source, role = "runner"), + expected = 5) + + expect_error(object = insert_into_table(host = "localhost", database = "collectr", + schema = "public", table = "ghost", + dataframe = source, role = "runner"), + regexp = "La table sp\u00e9cifi\u00e9e n\'existe pas dans la base de donn\u00e9es.") + + # Création d'un dataframe avec une structure différente de la table + df <- data.frame(id = 1:5, name = letters[1:5], value = rnorm(5)) + + # Créer une table target dans le schéma public de la base collectr + create_dummy(host = "localhost", + database = "collectr", + schema = "public", + table = "target", + pk = "id", + id_range = "1:5", + role = "runner") + + expect_false(insert_into_table(host = "localhost", database = "collectr", + schema = "public", table = "target", + dataframe = df, role = "runner")) +}) -- GitLab