From d4c115d7ca22241e0654c8ed52c84c9c575777a1 Mon Sep 17 00:00:00 2001 From: yschoi Date: Fri, 1 Aug 2025 14:13:19 +0900 Subject: [PATCH] =?UTF-8?q?=EC=A7=80=EB=8F=84=20=EC=9E=91=EC=97=85=20?= =?UTF-8?q?=EC=A4=911?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/dm/app/(popup-layout)/map/popup/page.tsx | 1 + .../components/ui/map/searchBar/searchBar.tsx | 125 ++-- .../images/map/layericon/BML_CBAS_PS.png | Bin 1547 -> 919 bytes .../images/map/layericon/BML_STMS_PS.png | Bin 1542 -> 810 bytes .../images/map/layericon/RDL_ETCT_PS.png | Bin 1016 -> 896 bytes .../images/map/layericon/RDL_OCUP_PS.png | Bin 1061 -> 837 bytes .../images/map/layericon/RDL_SEPC_PS.png | Bin 1068 -> 790 bytes .../images/map/layericon/RDL_STAT_PS.png | Bin 1075 -> 855 bytes .../images/map/layericon/RDL_TSCT_PS.png | Bin 1700 -> 923 bytes apps/fo/app/pages/map/page.tsx | 16 +- apps/fo/app/pages/map/searchBar/searchBar.tsx | 158 +++++ .../images/map/layericon/BML_CBAS_PS.png | Bin 1547 -> 919 bytes .../images/map/layericon/BML_STMS_PS.png | Bin 1542 -> 810 bytes .../images/map/layericon/RDL_ETCT_PS.png | Bin 1016 -> 896 bytes .../images/map/layericon/RDL_OCUP_PS.png | Bin 1061 -> 837 bytes .../images/map/layericon/RDL_SEPC_PS.png | Bin 1068 -> 790 bytes .../images/map/layericon/RDL_STAT_PS.png | Bin 1075 -> 855 bytes .../images/map/layericon/RDL_TSCT_PS.png | Bin 1700 -> 923 bytes .../images/map/layericon/BML_CBAS_PS copy.png | Bin 0 -> 919 bytes .../images/map/layericon/BML_STMS_PS copy.png | Bin 0 -> 810 bytes .../images/map/layericon/RDL_ETCT_PS copy.png | Bin 0 -> 896 bytes .../images/map/layericon/RDL_OCUP_PS copy.png | Bin 0 -> 837 bytes .../images/map/layericon/RDL_SEPC_PS copy.png | Bin 0 -> 790 bytes .../images/map/layericon/RDL_STAT_PS copy.png | Bin 0 -> 855 bytes .../images/map/layericon/RDL_TSCT_PS copy.png | Bin 0 -> 923 bytes .../images/map/layericon/BML_CBAS_PS.png | Bin 1547 -> 919 bytes .../images/map/layericon/BML_STMS_PS.png | Bin 1542 -> 810 bytes .../images/map/layericon/RDL_ETCT_PS.png | Bin 1016 -> 896 bytes .../images/map/layericon/RDL_OCUP_PS.png | Bin 1061 -> 837 bytes .../images/map/layericon/RDL_SEPC_PS.png | Bin 1068 -> 790 bytes .../images/map/layericon/RDL_STAT_PS.png | Bin 1075 -> 855 bytes .../images/map/layericon/RDL_TSCT_PS.png | Bin 1700 -> 923 bytes .../business_components/src/ui/map/Gis.js | 599 +++++++++--------- .../business_components/src/ui/map/GisTree.js | 2 +- 34 files changed, 533 insertions(+), 368 deletions(-) create mode 100644 apps/fo/app/pages/map/searchBar/searchBar.tsx create mode 100644 apps/sn/public/images/map/layericon/BML_CBAS_PS copy.png create mode 100644 apps/sn/public/images/map/layericon/BML_STMS_PS copy.png create mode 100644 apps/sn/public/images/map/layericon/RDL_ETCT_PS copy.png create mode 100644 apps/sn/public/images/map/layericon/RDL_OCUP_PS copy.png create mode 100644 apps/sn/public/images/map/layericon/RDL_SEPC_PS copy.png create mode 100644 apps/sn/public/images/map/layericon/RDL_STAT_PS copy.png create mode 100644 apps/sn/public/images/map/layericon/RDL_TSCT_PS copy.png diff --git a/apps/dm/app/(popup-layout)/map/popup/page.tsx b/apps/dm/app/(popup-layout)/map/popup/page.tsx index ea71862d8..c0d38a5c5 100644 --- a/apps/dm/app/(popup-layout)/map/popup/page.tsx +++ b/apps/dm/app/(popup-layout)/map/popup/page.tsx @@ -233,6 +233,7 @@ const Map = () => { <>
{ switch (type) { @@ -62,78 +61,58 @@ export function SearchBar({ [initializeSigunData] ); - // useEffect(() => { - // console.log("map.ruseFcltList ", map.ruseFcltList); - // }, [map.ruseFcltList]); - return ( - <> -
-
- - -
- - onSelectValue(val.toString(), "ctpvCd") - } - value={sidoValue || Common.selectSidoData[0]?.val || ""} - /> - - onSelectValue(val.toString(), "sggCd") - } - value={sigunValue} - /> -
- - { - let sggOrCity = ""; - if (searchNm) { - if (sigunValue === "0" || sigunValue === "") { - sggOrCity = sidoValue; - } else { - sggOrCity = sigunValue; - } - findRuseFclt(sggOrCity, searchNm); - } - }} - setRtnData={(rtnData: any) => { - setHasuPk(rtnData); - }} - searchList={map.ruseFcltList || []} - /> -
-
- -
-
-
-
-
+
+
+ onSelectValue(val.toString(), "ctpvCd")} + value={sidoValue || Common.selectSidoData[0]?.val || ""} + /> + onSelectValue(val.toString(), "sggCd")} + value={sigunValue} + /> + + { + let sggOrCity = ""; + if (searchNm) { + if (sigunValue === "0" || sigunValue === "") { + sggOrCity = sidoValue; + } else { + sggOrCity = sigunValue; + } + findRuseFclt(sggOrCity, searchNm); + } + }} + setRtnData={(rtnData: any) => { + setHasuPk(rtnData); + }} + searchList={map.ruseFcltList || []} + /> +
- +
); } diff --git a/apps/dm/public/images/map/layericon/BML_CBAS_PS.png b/apps/dm/public/images/map/layericon/BML_CBAS_PS.png index 5ff4add3ef67899ca56ef065952b919b8426d086..0e70939baeed2a0221089ebdf2ed19921495c8e9 100644 GIT binary patch delta 897 zcmV-{1AhFA43`IxBYy*4NklSqLGBhyXxHk_xF*(hA@J0Dl?45)q{yniG3EdYI&# zLzd+;Q{z9LUkL`EeefW0AU8*S-)JhjeYnEjXEGIc5s}>1*2X$IIurnqgb>u;-cCXY z?)Q1GyLvxA=l6M$PG`V4M>>_#sU)c~7?`g-QeD%yu@OI2WXj*%3nd{0V~i<*g}F~| z4Gz3NKRc7kQGaXLOLY!b|9TUJ*Vn|gD<3QJZd@s~SXD3AzcD=R-E6*aq2)dRFd|YE zMLF`*@X&iR-rq8uOI(we&y}1U+S!f6Vk@VH<`!-=6-j}>LV9-k*W*=HC8x7J5CZ_O zXR2j+DZq)C01?w^b-3f3!GwDR08rP^1hqy>fS|x_zki5^Lnllolh)~Uk^}(JNVsBa zGXlmqoqgwBR6bvW-s@NK`{d8CmOY77GKrPo9l@AH+uPf;^Jna-nwnzS@YI$KEvY(=A)vEd(h%bB;M-;Yk5y>;Wp zL@XAIQ}!UJx8HS?CGPd#{JO6s6j~K(wORmB@(&i!dT5my^ag4=d1`k{PJPgN@#43& zwY3qq+x<5Iz`(!&cRHQ?^5svDmY0=$^vBd>?fTk^l#pd`&hfap6o)ISeE!Ad?hjjA zhkERGd&J}M>;Mq7_Y_%^900~km#(~EFcefvjOmlc-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`f(~1RD^r68eAMwS&*t9 zlvv ztM~P_^2{qPNz6-5^>ndS0-B(gnVDi`$o& z6x?pH#Hm*w=oo!a#3DsBObD2IKumbD1#;jCKQ#}S+KYh6+H&5{UIqrHdQTU}kcwM# zCdYbA4wN|lzxuh^-KyftM`9}$b|eHj#ydx=Nojj7R_fibWOhtktBRwzr;AGL6JLcX zP9asojgm^Nvyv>YoZNEAS66w8U5Los;>%~ht$SX1yNy%n%YpY#=RBYD{eR7zVv*&a zHg7yw)KPTEN8<3l%tLM_g0*X7YcHPdDrJgV)VE?sNS)uzi4)u2J~Hz-$nY#Z{b5O+ zn|F2jglp2BSwbJzieC`a_ZJb3;`&^C;m;P%xwd6GyY5cNP>d5PEO@UsWuC6v_uqA2 ztlg|m)V8_oF?{%<)YbL4?(SgT9XV^8jz4d=GUMYsCQ?~=c0bqc2kI7fy9%~0;^Ao3 z`RnX=Zd=fT{>}|zGDZ)d-L3kexg^7*Ma_@fQ6Qz_jGbq|BgbUpPoIh+uUG9-IKJeJ zkN3)jv-tO9Wgb5Agg?Wzc8g~tflT*nqwc24D_r^eK(M07myPQdht9O1E(DK!JCiZNB zzeiH|raMOx65h_&*cMm)<@t$<#hNS+^COS+R2N!$F45U>`_2aQz0QG*+fLXNDYaDy zde2LpcWy(^SyL;u`NavPsi);W%v-$krbKb?sgs)yJid0_cHw8$;{vP29>hoX2aQPz!58&o`d My85}Sb4q9e0Czo2EdT%j diff --git a/apps/dm/public/images/map/layericon/BML_STMS_PS.png b/apps/dm/public/images/map/layericon/BML_STMS_PS.png index 423f2e8fcb87d6c1b9192d1547a4cf97c3bb7292..bf4357181e9891bf71753cc3cd75aff9262de4a2 100644 GIT binary patch delta 788 zcmV+v1MB>T45|i@BYy(%Nkl@$ikLaoY&Kus+}wP9d3hP0pPx%9FMe3dwY97RIAl+U|>M@58QXd%(3gbVsUXXEEbDD647%2 zB$$~z&!f@N(MJml3%||G%qU|_{QgZuh@vR=eP1juFT2HJag~Uk_kzWWh?tpaV`D=M z4-Y?f9Dk=JgxEYdIA9{;APAU<#LCJ_yHF^6OGIxgm5R#e^C19;-V_FaQmLedhK7D! zT3Y&Lc6OGGF_cUu#p>#6qfjU;6VcnPtu39;=cE6Pvk;=6%!k|C+h%8H=Wk}7?5}fQ zR4SE(<2Y8U)%pm)$5P56t@S5|hlgf;ef^P0Q?rwT| z+M~6#HOu$?bQDD+%$(I)XW}?cODQw0R*SUODw#|MVHny{%9|*PY$CdnQvNeCGGbG2 zci}jWPTUu)k0G&=J5JLDt5SYQi!EU$PHRI#s{^sUp{4d9PpR{5; S2Mx6V0000c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`f(~1RD^r68eAMwS&*t9 zlvv ztM~P_^2{qPNz6-5^>ndS0-B(gnVDkc?Br}XH{644~kf%h=vIPQxAv!Z9mxW?6};@ zEo2|D%REmdk7w!IEnAsXx3Fee%g-}U76loozD!P z&)&Lq>vfBCkG(7`X&G_Lf*+s096UWhW9E%h;$|vw%~()q&4|I^Q@J~*G4D0Fh-ibWa?D}1IL z51*v6Bq*7&YTk!CH|nJ>%zXC!xsRIdY>y*~lO3j=&^@SJFq1VhVC9tnohe>l^nO*X zPnWL4S3e!)m$$clI?+9yv+1q9 z*{4e3_h$DN<(4m4J!?M0E|$|ij}FdN)#zfs_*bZgY4=sDBp2q})uC5rm1=ByboJdl z4oOayi!VzOt?$;mghbZQ`F8Kc3kw;yU3SLpZofGuJ+6AWS}R$@h)0*f*HnPlo#mZa zVdSe1!6_edtg0)s3{(zoGqu^X_eG->i}{RD4GRY41&6okY|)*q%AvciH|O7ve@!<; z9XA-woavCdymN6H^VUyh{3qjfojsf!BVmxh!!o0{)g_C`O{3{bg_KIf2h)PO>--B| zvZ<+0iiof8uQ}MVj8kwWqkQ*7VP(TL&+-z!A2_srZf)b%KiyAuP3k&0q0y_9{rFox zrd@uHp_4S`nU?gb-qe_7I&I14c^MYBSwknL=H!MamP>c=x+`vEeq{D5w?u~hVSvEz zuU4gr?rloTWkpWE+rB>DZ+(f4+~>6Yfm-4_#s0os7x9nFfMHhRx5p)mI~zeIv!|<{ J%Q~loCIHG1Mo<6% diff --git a/apps/dm/public/images/map/layericon/RDL_ETCT_PS.png b/apps/dm/public/images/map/layericon/RDL_ETCT_PS.png index 29c0b77b4ee74276df8de9416fe284e4c8bc15ec..e5a83f998a8ea4f36918482e08ec93f13fb6c40e 100644 GIT binary patch delta 874 zcmV-w1C{*v2Y?5VBYy)&NklK7=_P&?@ex!Cb6k8%U0JFmZ}x(=At;Z zhq(C?nHyowhz<*T2|_^_+mJG7Ko~`bLx!++WwL=VsAG&FExNT6+p^(I5v^veuB~ZJ zG+mS2rb+L;x%d8iSVh#G$HV`f!~bxARWUPxK>%P!9hf=98h^jSDsSRmwmo+Dq#l|Q zWN1e9(D~x$Bd4SSM%|^2Z@LQkOTmi^8@>GJS84&X*b&HH;YSp89&Yc zhN0XQ+V06Upeg@+q(yev+;9rO@9Ii_tfdF|5QqFdF#nXxBqc?%UPD$DEv3|s+9GWl5m^KP{r&x7JRTQMA3gnQ zeXOBtxHJ-(R%azoorqFZN0V(mBHq_076-+1JDQ{2%sSvjml3l zPfzo|AR(1XiDUUO;m++lXlQFNkG*-!V1ByvU-_e+CpFW^EdT%j07*qoM6N<$f?+_V AZvX%Q literal 1016 zcmaJ=OK8+k6b&tw(vJ!*{1ogXU8vB>XPTs)II*3XOznWFWjfFSH)fL8PUs{rOLPIEJ`Y)veC zaC&*NU@XrY36mZ@2a&j#vZL>6}L-4#p@0u!VQy_yp2t;Nm zW^g&?IzmCdARTQpTd4&$%Skl`e@NJNa1D&qEN1!@t}^8S3s!J z$l_EPVdR&Q3o_FZI6Y%ICaU^p>Ud3)bB>R7$ACFip@{-xS*ARm&19rhd{__#k>|5Q zN)$#$QrT=;Oi1Y=Dc#_z$XK+YgBx6PpF7f$8?}P%lE^CbtSitQ_mB=~;C%rH6t=wcT|8WdD?9q2*`293yzvFajvAvhRF7aLP*qs7|9(uF2la}H0j>B^&> z7d_|y@^rB|g#27Se7|3KzRv@9QB_e804$Fc)kh1eyKbvK)_@<@2kHO>}>n$n=N%GUJ+Tnrw43R75e%_RZVd9;wSddd#`fk z5|mcaFvPf40@rP}Zd_`9x#^|n>QoPdEUtx!sv0p?OlJ+4O9S(h(wD~*eK@*-wrO1g#;k5PuH;OL#U9jvx=aSe+>p%dn6W zZ}H|1+V-a8=+Qgp(IBj1xdPkcu-PX1sX#Ee1PO!Q4ls>XnB8&AFDo#dC-g%%Zs(j5 zhyf_O$?Moj)m#N42u>{%`H^Zl!XH|qGO&Q&3gCXD;AuHloh^O-S*3TagZYNWVd@(s zyzsZ`Tz`Oh!b2AW(Lx9@P+uVw{LviLZk4$$b?5kfxbVWslOn1rM{W@x82|QM&A_pi zVxr{7y0_a34>@knb6QCR%7?2o_I-#^CG)IaHT+FvvO4^@>X!2xU_26#XmNIU?Eo}M0O tLnz}$L8@v`W-@N3x7SrwgUE*3{{XBoeqw|U;4}aL002ovPDHLkV1mCili~mX literal 1061 zcmaJ=O=#0#7>-tp>_^m#%!?s|Img;0{mI&}x^+$K0(R84*dBH;O}?(#mV7b!y0*iE z8*?alQ&5?^$i#!92*ZQF8;I!1o2VDBDvTW_3R9S0y0-IR4N1Nqp67Yr?|q-|a$@9U zd&`j)f*{((VIhgf1NOJiiT_78wj?}splBAQU>=nu6A)nq<^U;b(ilhrNvWKB3;GGd zL8<91%EnLeGSu9Xjd7PX1G5RDf1qqg@&rI+4veXKh+2R8k|I?lL}mPOCT>JPK^>kp zL27y=El*F#L4_JPLH3tZ~gWz>-bXKq}NpTT#lvA_`GB)9oW@MnhJ& zYGuL&qsx*(vu?&dQXLqN{~xMp4YY-lU?<;y3R~%l0q7*KV9}Iuq-9nNs15pT3Si!BT3h$3{0UyhReSU9@ zWuv};j|mLvMp*SP|eiyF{TovZ9{hnjM2D`*CeEC5rT0!qw;8d*IuuQtym z&{VI+Rhs7#Y|5o^GPK>;zZzZN!tSxB4cp>H!}vhQZa1;54?CBG_)6Rqg>bt3Dc9T6 zv-xhY>&x02P%|R zoz92LEzabJwgk=0?mnH#TvzDP7w0<;UZN8$Q$ftg+0gdDnYIg;-c_cm>i7R7gvmq2oHwN G&i((T_$Szu4@!#p|&NQSNB$c-xrB8$v2chzM^5tTPvv z0zUrM=tH&Dz8hAt!yvz@HT^*J^?&+Z-gCO!ub%eUrfKF>#gc%Epp*5nSZ{y;K)?vlbzx90 zPDC$_=g&N_b?gZX;9AayGxc_||9qo?F;#fn2xzA%et-GvZ;%84C=i14_OU@4wiS1O z4Zv9uX^t3u^5=H%{dcu=VE$U&jTut*4%_lRC~h%%2|ci9Dm^i?_bCxMR;gC)+La(FAXNc0((K49wH40% z`bW6`r+>2nAAauTsF=p9&-xQI$F{V~7mz%P-KaS&}IF1X}+Cnau%V$|O6h%=4 x0NrkPpsLwmFi1v5MtZ$oFPWU2%;x6i!hdSPmcBW5^N0Wd002ovPDHLkV1lGLdV>G} literal 1068 zcmaJ=TSyd97#_94Y=wl1?4`4#fk8X7v%9mG$<1_UHt&Bt>Dcv7J#@duSVG=3Mx`@BhyK|7X0t z?L>9efhvlks*|l^nvA=huW|?ZAN*dB$WV*pUAP1F;GASas#!r<2$GuA3)4_ihR-j; zMvAJS)l3)eN}Up9q%o3%VQkGHY>H}ZvJFY@hZtmGuc}AsuaBP4Kvkl2C!g}Bj2P@w zTSrXTG18WiNBZT6LN^@)jkZ7pG>9c&YXiC^*im{-S0Hm|o29`T1oubjbyHobb`V1* z1U%#S$X<>E!63s0_+XGb0(@T1$9l;d^l$-z4+_2z*m!6X%~X1Xw3yh4MOIO|4`V}M z*<3EiH0BHVrK_Xv(B;J#|hfLx`DB z!pO`ZG*HZ9dmqBc>O%&Ibp$~}r>ZL`XB}R{r&2;vx3HwkFeyf9qQI!CB8VZLWVyv3 z;Qb=U#RCyB;g5N}VQ)Ab3Uh&Ykt-s3P=h)ya+NJ^pd{C611NxK#b)C}opifN+B&OUY9Uu*Iw>}1 z?04CGq0m&}YB>6{E*zeF|9kB6!i9axtNW*4*S2nN*da#p@XF-m{H@h5Z*HzuQ)OtEs7R-3_4+-Tc+@i!F1bCztYXXN`Mz9yhjCtURQq64zaJe#QOk9GD-v#?0+q z5+8j0_UZYar{yg%2Rn~b-KGcDbte*gsmT|@u? diff --git a/apps/dm/public/images/map/layericon/RDL_STAT_PS.png b/apps/dm/public/images/map/layericon/RDL_STAT_PS.png index 13d8ea6899c02aa0d0917b630ca9f697783fd6ff..9a0b11673abfd8ad6b85c32dcae55f5e3f7664b4 100644 GIT binary patch delta 833 zcmV-H1HSyT2-gOXBYy)PNkl>mcY)EUft!dh{ z={BZjXEL+1GvCbdp$(<2_u*c++;h(5au0APND6=g04xCHa(@?_|86E1yLl#W+&gz) ztTvMXJk@;n>wnZA@684E9hVh%&jl-o7Q#xk?(E~Sf&~DDLP6dGE|8KO)qlC=kG!=+ zTIWe?GGOOfpQ*_v&2!`{HS+r#?r%JCv;#ui-Gro+08TG?Uu>Hv@w*djo$}PEqvClL zbJS7s)+tY6%zp`sm;PyCluprrp)1N}Y1m$5;G#+K*|IyrxK( z*LjcnSUr4mmMl-4%CCw807e(;pL9-=2mWq^G0AyF&MER*bh}Z&vQ?h>wXvz z)B(T`<5V(=@#Tz%c3r}dK*o^hvLvc*j0=uJLJE9U^`I#OK}3T|!vuVx6F@d<&ORj5 zFV5Wxv8QZfOS^$HO95ZoV2Ym?ns_Rs;i4143nOGQCeyxsuAq?HhzwV8=B;C%b`>q3$gmyZmVcAATm z*~}W<_EebC1Q5n((FLGl7!vUPP(g3eb{MtA^6+QJ)?#g#&*vfu0NaPg>+8pl?%mhn zTxrd=8HfM0X}du@GF^}AZWs+u*<2P`ea~a@ihora`t+O9*ty=m-lh;D1^^U`MGZjW zyZ!kWMkcB!-ze3>O+PtY|D(&E<12i%w8+Ebm!>}7Ke!jb)45!(6@b8MS|u467)Y!E zIu3sL{x;F`{1zjXZg03NjmBT6r;i*wRGCqj&*gHvELe literal 1075 zcmaJ=&rj1(9512<`H{#)kqa+fOw_P--MZ=;1{vKZiMjYDVVY{1~JIMQOyX^pH}bFKvP5XU_kOprU zru$RM^q3M<>7H)TRS<}P4zUah`nX{Wg%G`?E0Dc&%+O#5g2zJiZcu3{0Yqd$5b*fj zikD>p&wE%d!1HV;@OfDu<0UWeW;r3i3%=7}@1cn|OC1rCk=ULuVuk1|#-_k9`F!4! z_j`~v%CNy;(9!Vu+yvparwl9?+=lI{C`6#GSel77WB^A|&Y&C)(InE{6m+vHYuI~b zA_Zd#vdOR>uai;*C`tc^>UtGz<0SkO?>~j@)RYOCB(zb^Qb^-QT#hSK5G^QUWTg-q zuT(LSMHtyxWCC%32PXzKLq&P}GZk(GDLEY)xWZNcaQT{CXB2dkc#c3zn}ll2LOR$|c$p9Fgg9w$-sEMs@I^L8jdzV}1OY-y&DyRy-0;6<%ew%H^JV zzVupXjlM;>ZWo{HyvOCIS2I^-|6J?Z0Wkk`VB^ijLzBFB=EJsl<;(3=cId&}xjPGs zpsi_Q`Qf|pQtxK_1*XV#|N6FYsjW08nU6nin%`GDdOo)o{msL(3qL#dFVEMxR;76pH}7 QeD7T2c(gyV)H{6nH~m6mg#Z8m diff --git a/apps/dm/public/images/map/layericon/RDL_TSCT_PS.png b/apps/dm/public/images/map/layericon/RDL_TSCT_PS.png index ffc22515996bacdfbece7d30e3d5afcfd20269d2..3776f6c0493ee2fb6717ff03adecb0f228bf8673 100644 GIT binary patch delta 901 zcmV;01A6?V4Vwp$BYy*8Nkl0Hs^2dQXj!PgXLQTF8~RVIGYfiSCxE$GAsKdi`F)Y+}`F$a5KX&|m$TbI_R zY5K_H-rU^W`}2d{gnB+6&iNhA4-R1!%uGZ8KrA}}wZQcN%6|b}1DxYTRQyjze9K2` zNmbR`zWgrHaW%GhpQ>3t*-7fX0eAe#eO0IG>t;?8ZOOv5t+yoOti>*laKx4u@F~kySGFrqgHt zdTsABUzpn(e4^*w7AccSli)e1szI7&NEKzKZDM?)^zHYl{Z(6DdTzA>2>|$UWb)~& zV@b&djSsbdE&LVb82Y>c=TG!f?>i?^;hu+@*Wq;;bbsmE6pxNut<86%JQRxldth>A zdHd{K3T3iEODlxI)30FX4j(o({ffsAx8lfC1IXkUlF(@>y+D7b3R`yW+ID9&8e%~J zjH2!~^c>8R3d^#%#y<(*9P*|IzysJ+xd_uxiA@cLk%ws&?OM?#0}z4%cw9W~b%Qlc zh1;H{zJH+y5x;l}9@u{ZH?bO-Dr3ti8{?PT`YjrpH1#*EuP*cx#Cw6%U6WmYom zwC6FIkomx?yU^Np1CPGgjFD^A@Hn!_X0lwn(MNty{_@1le5R+T2ZEXD+=bquLyy&s zuJ^lbD@)6U$C;W#lPzN?8;0sdm|VOCS$SK zG5`x}p(u&~AOr9N*bJZ^Km&j}02^9bT3l;Aw3b+1rwB)*HjIslsi`Rh0)bL@cXx@I b|EK*2JXN2bW+CNHncK3J8d++=o7*be86k9Pwol1?dak#)BomwnS08u~!#wj5t!CX~C0F*K&VFQg% z=BwGDLK$w*fYF9^La8A^8XzMCv4B7w0~1hzs2I?x5+Q`4V-m)78Q9#qO(Fo}5Hx{F zc$buj9|^Ew4G7SPKHgF?g#ys&M2atsPN%E^sALM2M8_6zk3poCKWLTQs+ z4lGSlfe<>$l}&N|$kTGIR#2(2$Q)3kOa^6P8dwF4m&{O3p9^PNy$P;t+Fa<|X}KgU z8IrZJ|7!H)7Umx7bjr5aV#@d+gt=XV*_sLU$g!_w5swoh)IA6k#40}H;>T{9-nPDk z^6DR$io9uMF|)VLSzRp(NnBP0h`4K5_Pf4Ugq%pTXYFw)v!8uZqzHa|>VEJxvg_3k z(!a@kRhYK^PUP*JqRj7F^KbNCPBDAlGQ}?S_d(=0hw{zMi<=fo@XMQ5@4480GKa-) z!5{Iz5`(*I^ILMAc4vf*?d>gwjc$BLBt_x5qj1%tr2Dp8Z`%pFzi{hz4|jL6Dah6f zU#=(vo4VJoxw@jFYa``~c!^i=^PN?v3XJm_n}*@k_Xm$$ADnl>h|7s+`lPnUE~mAr zzO42M`Im5|sj6h)_P4V%wAK z(6BYJ@`tl$+)VagHk{*?_zxW4Z7y)kZQ{XpiVJv;!?JSQr!Ivp$zUHFvYqP~QZvf~ zZ;9^EuN`VVACaXZ8m^axX{*w68ok<&8Oisd&Xoa1wbAv_>?H>qf+RunJHL8WwD)Oq zuF;+KI;?$XiqEC~cxQcV+nKDqit>1M*RV_Aa3fA$dO_Xx!lhoa(423YQ*)Xn>`QV{ znIxA6tLr-tIhFa$y0cr|J44(j$w;Wt?HLl5Sw3pZMVuqPxOeSplxsB_|E#;iZMb2y zAHEdn{b(>VGu!fdW@`WS%YmY(I%9LkdtC+fmK)t#{Mi2abALpnZ|-e)t$Ul_8+edd zpOC)3E;r{%-KWy7Itt4oEVkeNsu9=ULaC>*~S)^ X+MJ>?k7n6e{~J8+I! { setIsSearchModalOpen(false); }; - // onCheckedLayersChange handler - const handleCheckedLayersChange = ( - checkedIds: string[], - checkedNodesData: unknown[] - ) => { - // Handle checked layers change if needed - console.log("Checked layers changed:", checkedIds, checkedNodesData); - }; - return (
{ setIsSearchModalOpen={setIsSearchModalOpen} isOpen={isOpen} isSearchModalOpen={isSearchModalOpen} - onCheckedLayersChange={handleCheckedLayersChange} + onCheckedLayersChange={undefined} imgVisble={false} - searchBar={undefined} + searchBar={(props:any) => } />
); diff --git a/apps/fo/app/pages/map/searchBar/searchBar.tsx b/apps/fo/app/pages/map/searchBar/searchBar.tsx new file mode 100644 index 000000000..9b0800399 --- /dev/null +++ b/apps/fo/app/pages/map/searchBar/searchBar.tsx @@ -0,0 +1,158 @@ +"use client"; +import { SelectBox, type SelectDataType } from "@common/business_components/ui"; +import { Button } from "@common/components/ui"; +import { useCallback, useEffect, useState } from "react"; + +interface SearchBarProps { + onFeatureSelect: (feature: any) => void; + gisMaps: React.RefObject; +} + +export function SearchBar({ onFeatureSelect, gisMaps }: SearchBarProps) { + const [sidoValue, setSidoValue] = useState("0"); + const [sigunValue, setSigunValue] = useState("0"); + const [sidoData, setSidoData] = useState([{ text: "선택", val: "0" }]); + const [sigunData, setSigunData] = useState([{ text: "선택", val: "0" }]); + const [filteredSigunData, setFilteredSigunData] = useState([{ text: "선택", val: "0" }]); + const [facilityData, setFacilityData] = useState([{ text: "선택", val: "0" }]); + const [facilityValue, setFacilityValue] = useState("0"); + + const fetchSido = async () => { + const url = `http://rsone.iptime.org:10010/geoserver/hasudo/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=hasudo:tb_ms_ctpv&outputFormat=application/json&propertyName=mctpv_korn_nm,mctpv_cd`; + const res = await fetch(url); + const json = await res.json(); + + const list = json.features.map((f: any) => ({ + text: f.properties.mctpv_korn_nm, + val: f.properties.mctpv_cd, + })); + setSidoData([{ text: "선택", val: "0" }, ...list]); + }; + + const fetchSigun = async () => { + const url = `http://rsone.iptime.org:10010/geoserver/hasudo/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=hasudo:tb_ms_sgg&outputFormat=application/json&propertyName=sgg_cd,sgg_korn_nm`; + const res = await fetch(url); + const json = await res.json(); + + const list = json.features.map((f: any) => ({ + text: f.properties.sgg_korn_nm, + val: f.properties.sgg_cd, + })); + setSigunData(list); + }; + + const fetchFacilitiesBySggNm = async (sggNm: string) => { + const encodedSggNm = encodeURIComponent(sggNm); + const url = `http://rsone.iptime.org:10010/geoserver/hasudo/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=hasudo:tb_il_swage_prcs_fclt&outputFormat=application/json&cql_filter=sgg_nm='${encodedSggNm}'`; + const res = await fetch(url); + const json = await res.json(); + + const list = json.features.map((f: any) => ({ + text: f.properties.swtrmt_fclt_nm ?? "(이름없음)", + val: f.id, // f.properties.swtrmt_fclt_cd 도 가능 + })); + setFacilityData([{ text: "선택", val: "0" }, ...list]); + setFacilityValue("0"); + }; + + useEffect(() => { + fetchSido(); + fetchSigun(); + }, []); + + const initializeSigunData = useCallback( + (sidoCd: string) => { + if (sidoCd === "0") { + setFilteredSigunData([{ text: "선택", val: "0" }]); + setSigunValue("0"); + return; + } + const prefix = sidoCd.substring(0, 2); + const filtered = sigunData.filter((item) => item.val.startsWith(prefix)); + setFilteredSigunData([{ text: "선택", val: "0" }, ...filtered]); + setSigunValue("0"); + }, + [sigunData] + ); + + const onSelectValue = useCallback( + (val: string, type: string) => { + if (type === "ctpvCd") { + setSidoValue(val); + initializeSigunData(val); + setFacilityData([{ text: "선택", val: "0" }]); + } else if (type === "sggCd") { + setSigunValue(val); + const sggNm = sigunData.find((item) => item.val === val)?.text || ""; + if (sggNm) fetchFacilitiesBySggNm(sggNm); + } else if (type === "fcltCd") { + setFacilityValue(val); + } + }, + [initializeSigunData, sigunData] + ); + + const handleSearch = () => { + if (!gisMaps.current || facilityValue === "0") return; + + const layers = gisMaps.current.getLayers().getArray(); + for (const layer of layers) { + const source = layer.getSource?.(); + const feature = source?.getFeatureById?.(facilityValue); + if (feature) { + onFeatureSelect(feature); + return; + } + } + + alert("해당 처리시설을 지도에서 찾을 수 없습니다."); + }; + + return ( +
+
+
+
+ onSelectValue(val.toString(), "ctpvCd")} + value={sidoValue} + /> + onSelectValue(val.toString(), "sggCd")} + value={sigunValue} + /> + onSelectValue(val.toString(), "fcltCd")} + value={facilityValue} + /> +
+
+ +
+
+
+
+ ); +} diff --git a/apps/fo/public/images/map/layericon/BML_CBAS_PS.png b/apps/fo/public/images/map/layericon/BML_CBAS_PS.png index 5ff4add3ef67899ca56ef065952b919b8426d086..0e70939baeed2a0221089ebdf2ed19921495c8e9 100644 GIT binary patch delta 897 zcmV-{1AhFA43`IxBYy*4NklSqLGBhyXxHk_xF*(hA@J0Dl?45)q{yniG3EdYI&# zLzd+;Q{z9LUkL`EeefW0AU8*S-)JhjeYnEjXEGIc5s}>1*2X$IIurnqgb>u;-cCXY z?)Q1GyLvxA=l6M$PG`V4M>>_#sU)c~7?`g-QeD%yu@OI2WXj*%3nd{0V~i<*g}F~| z4Gz3NKRc7kQGaXLOLY!b|9TUJ*Vn|gD<3QJZd@s~SXD3AzcD=R-E6*aq2)dRFd|YE zMLF`*@X&iR-rq8uOI(we&y}1U+S!f6Vk@VH<`!-=6-j}>LV9-k*W*=HC8x7J5CZ_O zXR2j+DZq)C01?w^b-3f3!GwDR08rP^1hqy>fS|x_zki5^Lnllolh)~Uk^}(JNVsBa zGXlmqoqgwBR6bvW-s@NK`{d8CmOY77GKrPo9l@AH+uPf;^Jna-nwnzS@YI$KEvY(=A)vEd(h%bB;M-;Yk5y>;Wp zL@XAIQ}!UJx8HS?CGPd#{JO6s6j~K(wORmB@(&i!dT5my^ag4=d1`k{PJPgN@#43& zwY3qq+x<5Iz`(!&cRHQ?^5svDmY0=$^vBd>?fTk^l#pd`&hfap6o)ISeE!Ad?hjjA zhkERGd&J}M>;Mq7_Y_%^900~km#(~EFcefvjOmlc-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`f(~1RD^r68eAMwS&*t9 zlvv ztM~P_^2{qPNz6-5^>ndS0-B(gnVDi`$o& z6x?pH#Hm*w=oo!a#3DsBObD2IKumbD1#;jCKQ#}S+KYh6+H&5{UIqrHdQTU}kcwM# zCdYbA4wN|lzxuh^-KyftM`9}$b|eHj#ydx=Nojj7R_fibWOhtktBRwzr;AGL6JLcX zP9asojgm^Nvyv>YoZNEAS66w8U5Los;>%~ht$SX1yNy%n%YpY#=RBYD{eR7zVv*&a zHg7yw)KPTEN8<3l%tLM_g0*X7YcHPdDrJgV)VE?sNS)uzi4)u2J~Hz-$nY#Z{b5O+ zn|F2jglp2BSwbJzieC`a_ZJb3;`&^C;m;P%xwd6GyY5cNP>d5PEO@UsWuC6v_uqA2 ztlg|m)V8_oF?{%<)YbL4?(SgT9XV^8jz4d=GUMYsCQ?~=c0bqc2kI7fy9%~0;^Ao3 z`RnX=Zd=fT{>}|zGDZ)d-L3kexg^7*Ma_@fQ6Qz_jGbq|BgbUpPoIh+uUG9-IKJeJ zkN3)jv-tO9Wgb5Agg?Wzc8g~tflT*nqwc24D_r^eK(M07myPQdht9O1E(DK!JCiZNB zzeiH|raMOx65h_&*cMm)<@t$<#hNS+^COS+R2N!$F45U>`_2aQz0QG*+fLXNDYaDy zde2LpcWy(^SyL;u`NavPsi);W%v-$krbKb?sgs)yJid0_cHw8$;{vP29>hoX2aQPz!58&o`d My85}Sb4q9e0Czo2EdT%j diff --git a/apps/fo/public/images/map/layericon/BML_STMS_PS.png b/apps/fo/public/images/map/layericon/BML_STMS_PS.png index 423f2e8fcb87d6c1b9192d1547a4cf97c3bb7292..bf4357181e9891bf71753cc3cd75aff9262de4a2 100644 GIT binary patch delta 788 zcmV+v1MB>T45|i@BYy(%Nkl@$ikLaoY&Kus+}wP9d3hP0pPx%9FMe3dwY97RIAl+U|>M@58QXd%(3gbVsUXXEEbDD647%2 zB$$~z&!f@N(MJml3%||G%qU|_{QgZuh@vR=eP1juFT2HJag~Uk_kzWWh?tpaV`D=M z4-Y?f9Dk=JgxEYdIA9{;APAU<#LCJ_yHF^6OGIxgm5R#e^C19;-V_FaQmLedhK7D! zT3Y&Lc6OGGF_cUu#p>#6qfjU;6VcnPtu39;=cE6Pvk;=6%!k|C+h%8H=Wk}7?5}fQ zR4SE(<2Y8U)%pm)$5P56t@S5|hlgf;ef^P0Q?rwT| z+M~6#HOu$?bQDD+%$(I)XW}?cODQw0R*SUODw#|MVHny{%9|*PY$CdnQvNeCGGbG2 zci}jWPTUu)k0G&=J5JLDt5SYQi!EU$PHRI#s{^sUp{4d9PpR{5; S2Mx6V0000c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`f(~1RD^r68eAMwS&*t9 zlvv ztM~P_^2{qPNz6-5^>ndS0-B(gnVDkc?Br}XH{644~kf%h=vIPQxAv!Z9mxW?6};@ zEo2|D%REmdk7w!IEnAsXx3Fee%g-}U76loozD!P z&)&Lq>vfBCkG(7`X&G_Lf*+s096UWhW9E%h;$|vw%~()q&4|I^Q@J~*G4D0Fh-ibWa?D}1IL z51*v6Bq*7&YTk!CH|nJ>%zXC!xsRIdY>y*~lO3j=&^@SJFq1VhVC9tnohe>l^nO*X zPnWL4S3e!)m$$clI?+9yv+1q9 z*{4e3_h$DN<(4m4J!?M0E|$|ij}FdN)#zfs_*bZgY4=sDBp2q})uC5rm1=ByboJdl z4oOayi!VzOt?$;mghbZQ`F8Kc3kw;yU3SLpZofGuJ+6AWS}R$@h)0*f*HnPlo#mZa zVdSe1!6_edtg0)s3{(zoGqu^X_eG->i}{RD4GRY41&6okY|)*q%AvciH|O7ve@!<; z9XA-woavCdymN6H^VUyh{3qjfojsf!BVmxh!!o0{)g_C`O{3{bg_KIf2h)PO>--B| zvZ<+0iiof8uQ}MVj8kwWqkQ*7VP(TL&+-z!A2_srZf)b%KiyAuP3k&0q0y_9{rFox zrd@uHp_4S`nU?gb-qe_7I&I14c^MYBSwknL=H!MamP>c=x+`vEeq{D5w?u~hVSvEz zuU4gr?rloTWkpWE+rB>DZ+(f4+~>6Yfm-4_#s0os7x9nFfMHhRx5p)mI~zeIv!|<{ J%Q~loCIHG1Mo<6% diff --git a/apps/fo/public/images/map/layericon/RDL_ETCT_PS.png b/apps/fo/public/images/map/layericon/RDL_ETCT_PS.png index 29c0b77b4ee74276df8de9416fe284e4c8bc15ec..e5a83f998a8ea4f36918482e08ec93f13fb6c40e 100644 GIT binary patch delta 874 zcmV-w1C{*v2Y?5VBYy)&NklK7=_P&?@ex!Cb6k8%U0JFmZ}x(=At;Z zhq(C?nHyowhz<*T2|_^_+mJG7Ko~`bLx!++WwL=VsAG&FExNT6+p^(I5v^veuB~ZJ zG+mS2rb+L;x%d8iSVh#G$HV`f!~bxARWUPxK>%P!9hf=98h^jSDsSRmwmo+Dq#l|Q zWN1e9(D~x$Bd4SSM%|^2Z@LQkOTmi^8@>GJS84&X*b&HH;YSp89&Yc zhN0XQ+V06Upeg@+q(yev+;9rO@9Ii_tfdF|5QqFdF#nXxBqc?%UPD$DEv3|s+9GWl5m^KP{r&x7JRTQMA3gnQ zeXOBtxHJ-(R%azoorqFZN0V(mBHq_076-+1JDQ{2%sSvjml3l zPfzo|AR(1XiDUUO;m++lXlQFNkG*-!V1ByvU-_e+CpFW^EdT%j07*qoM6N<$f?+_V AZvX%Q literal 1016 zcmaJ=OK8+k6b&tw(vJ!*{1ogXU8vB>XPTs)II*3XOznWFWjfFSH)fL8PUs{rOLPIEJ`Y)veC zaC&*NU@XrY36mZ@2a&j#vZL>6}L-4#p@0u!VQy_yp2t;Nm zW^g&?IzmCdARTQpTd4&$%Skl`e@NJNa1D&qEN1!@t}^8S3s!J z$l_EPVdR&Q3o_FZI6Y%ICaU^p>Ud3)bB>R7$ACFip@{-xS*ARm&19rhd{__#k>|5Q zN)$#$QrT=;Oi1Y=Dc#_z$XK+YgBx6PpF7f$8?}P%lE^CbtSitQ_mB=~;C%rH6t=wcT|8WdD?9q2*`293yzvFajvAvhRF7aLP*qs7|9(uF2la}H0j>B^&> z7d_|y@^rB|g#27Se7|3KzRv@9QB_e804$Fc)kh1eyKbvK)_@<@2kHO>}>n$n=N%GUJ+Tnrw43R75e%_RZVd9;wSddd#`fk z5|mcaFvPf40@rP}Zd_`9x#^|n>QoPdEUtx!sv0p?OlJ+4O9S(h(wD~*eK@*-wrO1g#;k5PuH;OL#U9jvx=aSe+>p%dn6W zZ}H|1+V-a8=+Qgp(IBj1xdPkcu-PX1sX#Ee1PO!Q4ls>XnB8&AFDo#dC-g%%Zs(j5 zhyf_O$?Moj)m#N42u>{%`H^Zl!XH|qGO&Q&3gCXD;AuHloh^O-S*3TagZYNWVd@(s zyzsZ`Tz`Oh!b2AW(Lx9@P+uVw{LviLZk4$$b?5kfxbVWslOn1rM{W@x82|QM&A_pi zVxr{7y0_a34>@knb6QCR%7?2o_I-#^CG)IaHT+FvvO4^@>X!2xU_26#XmNIU?Eo}M0O tLnz}$L8@v`W-@N3x7SrwgUE*3{{XBoeqw|U;4}aL002ovPDHLkV1mCili~mX literal 1061 zcmaJ=O=#0#7>-tp>_^m#%!?s|Img;0{mI&}x^+$K0(R84*dBH;O}?(#mV7b!y0*iE z8*?alQ&5?^$i#!92*ZQF8;I!1o2VDBDvTW_3R9S0y0-IR4N1Nqp67Yr?|q-|a$@9U zd&`j)f*{((VIhgf1NOJiiT_78wj?}splBAQU>=nu6A)nq<^U;b(ilhrNvWKB3;GGd zL8<91%EnLeGSu9Xjd7PX1G5RDf1qqg@&rI+4veXKh+2R8k|I?lL}mPOCT>JPK^>kp zL27y=El*F#L4_JPLH3tZ~gWz>-bXKq}NpTT#lvA_`GB)9oW@MnhJ& zYGuL&qsx*(vu?&dQXLqN{~xMp4YY-lU?<;y3R~%l0q7*KV9}Iuq-9nNs15pT3Si!BT3h$3{0UyhReSU9@ zWuv};j|mLvMp*SP|eiyF{TovZ9{hnjM2D`*CeEC5rT0!qw;8d*IuuQtym z&{VI+Rhs7#Y|5o^GPK>;zZzZN!tSxB4cp>H!}vhQZa1;54?CBG_)6Rqg>bt3Dc9T6 zv-xhY>&x02P%|R zoz92LEzabJwgk=0?mnH#TvzDP7w0<;UZN8$Q$ftg+0gdDnYIg;-c_cm>i7R7gvmq2oHwN G&i((T_$Szu4@!#p|&NQSNB$c-xrB8$v2chzM^5tTPvv z0zUrM=tH&Dz8hAt!yvz@HT^*J^?&+Z-gCO!ub%eUrfKF>#gc%Epp*5nSZ{y;K)?vlbzx90 zPDC$_=g&N_b?gZX;9AayGxc_||9qo?F;#fn2xzA%et-GvZ;%84C=i14_OU@4wiS1O z4Zv9uX^t3u^5=H%{dcu=VE$U&jTut*4%_lRC~h%%2|ci9Dm^i?_bCxMR;gC)+La(FAXNc0((K49wH40% z`bW6`r+>2nAAauTsF=p9&-xQI$F{V~7mz%P-KaS&}IF1X}+Cnau%V$|O6h%=4 x0NrkPpsLwmFi1v5MtZ$oFPWU2%;x6i!hdSPmcBW5^N0Wd002ovPDHLkV1lGLdV>G} literal 1068 zcmaJ=TSyd97#_94Y=wl1?4`4#fk8X7v%9mG$<1_UHt&Bt>Dcv7J#@duSVG=3Mx`@BhyK|7X0t z?L>9efhvlks*|l^nvA=huW|?ZAN*dB$WV*pUAP1F;GASas#!r<2$GuA3)4_ihR-j; zMvAJS)l3)eN}Up9q%o3%VQkGHY>H}ZvJFY@hZtmGuc}AsuaBP4Kvkl2C!g}Bj2P@w zTSrXTG18WiNBZT6LN^@)jkZ7pG>9c&YXiC^*im{-S0Hm|o29`T1oubjbyHobb`V1* z1U%#S$X<>E!63s0_+XGb0(@T1$9l;d^l$-z4+_2z*m!6X%~X1Xw3yh4MOIO|4`V}M z*<3EiH0BHVrK_Xv(B;J#|hfLx`DB z!pO`ZG*HZ9dmqBc>O%&Ibp$~}r>ZL`XB}R{r&2;vx3HwkFeyf9qQI!CB8VZLWVyv3 z;Qb=U#RCyB;g5N}VQ)Ab3Uh&Ykt-s3P=h)ya+NJ^pd{C611NxK#b)C}opifN+B&OUY9Uu*Iw>}1 z?04CGq0m&}YB>6{E*zeF|9kB6!i9axtNW*4*S2nN*da#p@XF-m{H@h5Z*HzuQ)OtEs7R-3_4+-Tc+@i!F1bCztYXXN`Mz9yhjCtURQq64zaJe#QOk9GD-v#?0+q z5+8j0_UZYar{yg%2Rn~b-KGcDbte*gsmT|@u? diff --git a/apps/fo/public/images/map/layericon/RDL_STAT_PS.png b/apps/fo/public/images/map/layericon/RDL_STAT_PS.png index 13d8ea6899c02aa0d0917b630ca9f697783fd6ff..9a0b11673abfd8ad6b85c32dcae55f5e3f7664b4 100644 GIT binary patch delta 833 zcmV-H1HSyT2-gOXBYy)PNkl>mcY)EUft!dh{ z={BZjXEL+1GvCbdp$(<2_u*c++;h(5au0APND6=g04xCHa(@?_|86E1yLl#W+&gz) ztTvMXJk@;n>wnZA@684E9hVh%&jl-o7Q#xk?(E~Sf&~DDLP6dGE|8KO)qlC=kG!=+ zTIWe?GGOOfpQ*_v&2!`{HS+r#?r%JCv;#ui-Gro+08TG?Uu>Hv@w*djo$}PEqvClL zbJS7s)+tY6%zp`sm;PyCluprrp)1N}Y1m$5;G#+K*|IyrxK( z*LjcnSUr4mmMl-4%CCw807e(;pL9-=2mWq^G0AyF&MER*bh}Z&vQ?h>wXvz z)B(T`<5V(=@#Tz%c3r}dK*o^hvLvc*j0=uJLJE9U^`I#OK}3T|!vuVx6F@d<&ORj5 zFV5Wxv8QZfOS^$HO95ZoV2Ym?ns_Rs;i4143nOGQCeyxsuAq?HhzwV8=B;C%b`>q3$gmyZmVcAATm z*~}W<_EebC1Q5n((FLGl7!vUPP(g3eb{MtA^6+QJ)?#g#&*vfu0NaPg>+8pl?%mhn zTxrd=8HfM0X}du@GF^}AZWs+u*<2P`ea~a@ihora`t+O9*ty=m-lh;D1^^U`MGZjW zyZ!kWMkcB!-ze3>O+PtY|D(&E<12i%w8+Ebm!>}7Ke!jb)45!(6@b8MS|u467)Y!E zIu3sL{x;F`{1zjXZg03NjmBT6r;i*wRGCqj&*gHvELe literal 1075 zcmaJ=&rj1(9512<`H{#)kqa+fOw_P--MZ=;1{vKZiMjYDVVY{1~JIMQOyX^pH}bFKvP5XU_kOprU zru$RM^q3M<>7H)TRS<}P4zUah`nX{Wg%G`?E0Dc&%+O#5g2zJiZcu3{0Yqd$5b*fj zikD>p&wE%d!1HV;@OfDu<0UWeW;r3i3%=7}@1cn|OC1rCk=ULuVuk1|#-_k9`F!4! z_j`~v%CNy;(9!Vu+yvparwl9?+=lI{C`6#GSel77WB^A|&Y&C)(InE{6m+vHYuI~b zA_Zd#vdOR>uai;*C`tc^>UtGz<0SkO?>~j@)RYOCB(zb^Qb^-QT#hSK5G^QUWTg-q zuT(LSMHtyxWCC%32PXzKLq&P}GZk(GDLEY)xWZNcaQT{CXB2dkc#c3zn}ll2LOR$|c$p9Fgg9w$-sEMs@I^L8jdzV}1OY-y&DyRy-0;6<%ew%H^JV zzVupXjlM;>ZWo{HyvOCIS2I^-|6J?Z0Wkk`VB^ijLzBFB=EJsl<;(3=cId&}xjPGs zpsi_Q`Qf|pQtxK_1*XV#|N6FYsjW08nU6nin%`GDdOo)o{msL(3qL#dFVEMxR;76pH}7 QeD7T2c(gyV)H{6nH~m6mg#Z8m diff --git a/apps/fo/public/images/map/layericon/RDL_TSCT_PS.png b/apps/fo/public/images/map/layericon/RDL_TSCT_PS.png index ffc22515996bacdfbece7d30e3d5afcfd20269d2..3776f6c0493ee2fb6717ff03adecb0f228bf8673 100644 GIT binary patch delta 901 zcmV;01A6?V4Vwp$BYy*8Nkl0Hs^2dQXj!PgXLQTF8~RVIGYfiSCxE$GAsKdi`F)Y+}`F$a5KX&|m$TbI_R zY5K_H-rU^W`}2d{gnB+6&iNhA4-R1!%uGZ8KrA}}wZQcN%6|b}1DxYTRQyjze9K2` zNmbR`zWgrHaW%GhpQ>3t*-7fX0eAe#eO0IG>t;?8ZOOv5t+yoOti>*laKx4u@F~kySGFrqgHt zdTsABUzpn(e4^*w7AccSli)e1szI7&NEKzKZDM?)^zHYl{Z(6DdTzA>2>|$UWb)~& zV@b&djSsbdE&LVb82Y>c=TG!f?>i?^;hu+@*Wq;;bbsmE6pxNut<86%JQRxldth>A zdHd{K3T3iEODlxI)30FX4j(o({ffsAx8lfC1IXkUlF(@>y+D7b3R`yW+ID9&8e%~J zjH2!~^c>8R3d^#%#y<(*9P*|IzysJ+xd_uxiA@cLk%ws&?OM?#0}z4%cw9W~b%Qlc zh1;H{zJH+y5x;l}9@u{ZH?bO-Dr3ti8{?PT`YjrpH1#*EuP*cx#Cw6%U6WmYom zwC6FIkomx?yU^Np1CPGgjFD^A@Hn!_X0lwn(MNty{_@1le5R+T2ZEXD+=bquLyy&s zuJ^lbD@)6U$C;W#lPzN?8;0sdm|VOCS$SK zG5`x}p(u&~AOr9N*bJZ^Km&j}02^9bT3l;Aw3b+1rwB)*HjIslsi`Rh0)bL@cXx@I b|EK*2JXN2bW+CNHncK3J8d++=o7*be86k9Pwol1?dak#)BomwnS08u~!#wj5t!CX~C0F*K&VFQg% z=BwGDLK$w*fYF9^La8A^8XzMCv4B7w0~1hzs2I?x5+Q`4V-m)78Q9#qO(Fo}5Hx{F zc$buj9|^Ew4G7SPKHgF?g#ys&M2atsPN%E^sALM2M8_6zk3poCKWLTQs+ z4lGSlfe<>$l}&N|$kTGIR#2(2$Q)3kOa^6P8dwF4m&{O3p9^PNy$P;t+Fa<|X}KgU z8IrZJ|7!H)7Umx7bjr5aV#@d+gt=XV*_sLU$g!_w5swoh)IA6k#40}H;>T{9-nPDk z^6DR$io9uMF|)VLSzRp(NnBP0h`4K5_Pf4Ugq%pTXYFw)v!8uZqzHa|>VEJxvg_3k z(!a@kRhYK^PUP*JqRj7F^KbNCPBDAlGQ}?S_d(=0hw{zMi<=fo@XMQ5@4480GKa-) z!5{Iz5`(*I^ILMAc4vf*?d>gwjc$BLBt_x5qj1%tr2Dp8Z`%pFzi{hz4|jL6Dah6f zU#=(vo4VJoxw@jFYa``~c!^i=^PN?v3XJm_n}*@k_Xm$$ADnl>h|7s+`lPnUE~mAr zzO42M`Im5|sj6h)_P4V%wAK z(6BYJ@`tl$+)VagHk{*?_zxW4Z7y)kZQ{XpiVJv;!?JSQr!Ivp$zUHFvYqP~QZvf~ zZ;9^EuN`VVACaXZ8m^axX{*w68ok<&8Oisd&Xoa1wbAv_>?H>qf+RunJHL8WwD)Oq zuF;+KI;?$XiqEC~cxQcV+nKDqit>1M*RV_Aa3fA$dO_Xx!lhoa(423YQ*)Xn>`QV{ znIxA6tLr-tIhFa$y0cr|J44(j$w;Wt?HLl5Sw3pZMVuqPxOeSplxsB_|E#;iZMb2y zAHEdn{b(>VGu!fdW@`WS%YmY(I%9LkdtC+fmK)t#{Mi2abALpnZ|-e)t$Ul_8+edd zpOC)3E;r{%-KWy7Itt4oEVkeNsu9=ULaC>*~S)^ X+MJ>?k7n6e{~J8+I!SqLGB zhyXxHk_xF*(hA@J02#m%5v3lQ6MH&(nB<&8mgO^3<3FBX2?n2i@E~y@H%EQnXezpW zxWe9NG8K0bk=)kS#yUDW6abKf5Y*n@PC^Lo_j#|odOtts_j!>{XTUf|I+fC?B&jkO zn6EriUDLR+5kFOA%HP}zB_RZ3j46SIxle8l4!l1RdjtSb*U$vD zMoWO8z-_;XhC?SzCX?3bbdm%B(MY&rYcm4IIGugxT~t0_gWl^`@%!Y@u$DcER5FQ` z;2pu3MBCfjwDV`|shXN&2A8XERRVxiCap=xGSu2Um`kmI5IAJ9VeqRj5xTpKC#*J9 zzgkDrV{Y+RY#W($MwRBI2Jr6&8m%svQ8KT*c&rYO7!2^w`S6XaAIBYyXlOo(rQi|{ zS<4_P0z=;o3a(OxCr8JU|8-y}E*UnLmeIuMh=|8`5RPrZWH#gUx%05t%JEu#BWxBM z0&_m0H$F;St@|Ysxf}24=^+wAP*+!9fw@>S@YI$KEqfFEEbDX_8_RY-*uEF?)BgNy00V@S`})wS^!Y; z4;IjRXq6fC25LHaYIjRceb9RG;A0)4_jM@>~?#^+9<2&%@7>2~mL`1PFm&<+l!PV8(>qevTrES}xWmzf+0x&Zr5(#m1bQA_b@VH*D zf11f;9uZN<%+z=Axoz8j)M~W{j^l({YXtzV>*C_#0zJ!cT{j#X8&kPl?oBqEEfA4M z%=|^QTCJR%oD4@%6cUjF03w1h24`nyU}gY-5CWd(1=(y?&(F`lo1C2dMgeFDA>Q5I z-hNlB)nHi`m>EI{bUGazA0NMO03bHTsJXehIF(BM2_RHNWLuW?{psoH?|XZDKUAyL zaA06S_7B{5!_2Ykx?*v0F)S8~KN8V%03?{1JkO)i(a}c>3k$!^%*-fbO#J>$M2Mm& z_I+P0FE6{rVsVv-p7(;qiint*X=7tU3=a=Kb{wZAgxEYdIA9{;APAU<#LCJ_yHF^6 zOGIxgm5R#e^C19;-V_FaQmLedhK7D!T3Y&Lc6OGGF_cUu#p>#6qfjU;6VcnPtu39; z=cE6Pvk;=6%!k|C+h%8H=Wk}7?5}fQR4SE(<2Y8U)%pm)$5P56t@S5|hlgf;ef^`LBtI3GKRW3qTt{`|j@UZhCs!qqVg)%lG|s6h$MC5wEzGB07*qoM6N<$fPx# literal 0 HcmV?d00001 diff --git a/apps/sn/public/images/map/layericon/RDL_ETCT_PS copy.png b/apps/sn/public/images/map/layericon/RDL_ETCT_PS copy.png new file mode 100644 index 0000000000000000000000000000000000000000..e5a83f998a8ea4f36918482e08ec93f13fb6c40e GIT binary patch literal 896 zcmV-`1AqL9P)K7=_P&?@ex!Cb6k8%U0JFmZ}x(=At;Zhq(C?nHyowhz<*T2|_^_+mJG7Ko~`b zLx!++WwL=VsAG&FExNT6+p^(I5v^veuB~ZJG+mS2rb+L;x%d8iSVh#G$HV`f!~bxA zRWUPxK>%P!9hf=98o$CSZ{l9IJ$Cn`9-0zlXh!wW`Qqmzr?T%U$FsZnRQBEF{)Mj8 zypsNid)Wm5$z)P^3{G-VU}ouRY2eHWCCUe8Z5;ax{Ps<7EDes&fIls4cs;Vq{thLhh>3haS{$^M6@w*3! zhyjoU0GIOv`*J)b9&Kqi+UhrpOL`eU&Hsj>+!fmH-;DiDQTUxcnyX~#hlO7`?Ht>? z2Z^)sb8$@q2=~@V;&e>uCotZP(>JRb$P=t1@+k}qRy>N?8j23R-+~1dRB|iyOs9;-A zvK8gLWAz1wYXxBqc?%UPD$DEv3Y=l}d?Y`7zrH6t=wcT|8WdD?9q2*`293yz zvFajvAvhRF7aLP*qs7|9(uF2la}H0j>B^&>7d_|y@^rB|g#27Se7|3KzRv@9QB_e8 z04$Fc)kh1eyKbvK)~af+*Rc*+8;XcxIh0Fp(%C-%^LuX5!QlvdF&#JE-h*KM|LTxx!~>80oDR1bqJ zu7!xI8ZlPn&y0U)pZVzBV0z3KCneIJvY7KFx>!<4NTiiQWIwdcDeZsbOjGJW`yUNd z0E~!4i&5Ap=Lg>oE{}x-HI}p{Y}4Y2*;j>m$`g`eX^^!2nb{ydak}la%y!*f!5Dz5 z$)7u{8 z#>6^U4UP~F|4Vo_4~`%YyI7qm6w9!X6L0b64%+sn=WqB5|6 z-U{G;qu^;dR-G+<{#m7Wt%Lc7#$oCkB)ssq>Rf<%!b2AW(Lx9@P+uVw{LviLZk4$$ zb?5kfxbVWslOn1rM{W@x82|QM&A_piVxr{7y0TMYENb|Zl<@_RaJw?hT8uCtT29Jgbv^| P00000NkvXXu0mjfj{B4n literal 0 HcmV?d00001 diff --git a/apps/sn/public/images/map/layericon/RDL_SEPC_PS copy.png b/apps/sn/public/images/map/layericon/RDL_SEPC_PS copy.png new file mode 100644 index 0000000000000000000000000000000000000000..b3db8e0a41bfd9e32d796bfa4035bde320607b2f GIT binary patch literal 790 zcmV+x1L^#UP)$F4IQ5%DC4FZl4$k47KA z*zCB)>#+$@?r7|I+nC53LMlm!2yX?fGZ&WvKK|C|L$%eu8&ng5QL#>I&A_Hh=(;QK5c!wdRr?r5Dd7{q4JegCgQc zirj2)_wT?LRbpqSow-QW3V?2w;r#NyAOHiP?Y+CJRI<-*$$dJVGtY=fUr63_y4$aw z_SmLr=2XR!fQq1#^|4rQfB-u-<*04NZG^Y*bp8nzX8e+|G{5owMXee&ma@BMeRbYT8k-HjVH05;rZ zfZ%=5r*}`e6El0C6Om&eMM+B6dAV;mfAH1qqwhR&`wrXkJ}7Q97ZD(Y;0ZmjXDU50 zv-c?xIaaAw?b?+fDIiq=G}7$IE43BQ{Q5_@|EIG7AAauT`<0v6W;qW$x;+W#Sp@Tv9{P+U6sgMTgc}J&bg*BX4!k+6p^|yrdBSO zo3ge)j^m*?jtkb>LN1rfXIVBBMNtF*-EMcFs@Y&LNJd6Rdc9sRnVg)==H}+Ye`>*& UzBzXDhyVZp07*qoM6N<$f^J@W3IG5A literal 0 HcmV?d00001 diff --git a/apps/sn/public/images/map/layericon/RDL_STAT_PS copy.png b/apps/sn/public/images/map/layericon/RDL_STAT_PS copy.png new file mode 100644 index 0000000000000000000000000000000000000000..9a0b11673abfd8ad6b85c32dcae55f5e3f7664b4 GIT binary patch literal 855 zcmV-d1E~CoP)>mcY)EUft!dh{={BZjXEL+1GvCbdp$(<2_u*c++;h(5 zau0APND6=g04xCHau=KbZYCGIc_we%J9l5KHj@B6)qMBsf7BoE%?0%xmlb!<1uKUZ z!b-L7?BlV51ptLYLEZx{kdhqLf4Sw4ytPDH=SgcaVCPw%smUhIbL1;E^7|X^Z#;3d z147*0grt-JPA_?1Y?~+XyAy1k^3+DeURR_~a&X2~nX-z9&R#vS9k6y4sYwCgQbRnuV8`gtAqc?IfL0AK zB#_mBw08Tzk0v$Y)B|yyX3uj^nCpHR5Yz#{593rait*))hjv}UkU++e=&~fLZj1|# zLP83BRrR1L13^TCNy7wup%XwhYR*0+(=X253bChbV@tb%GfM$q+hB^H7n*n~qv4_x z!3!f~GA7f$edG8ACqQ38NC4REU;TBX2@y48wn^eZw*@Vtc;|5wiHP{1JB^KLiO>uA zq?HhzwV8=B;C%b`>q3$gmyZmVcAATm*~}W<_EebC1Q5n((FLGl7!vUPP(g3eb{MtA z^6+QJ)?#g#&*vfu0NaPg>+8pl?%mhnTxrd=8HfM0X}du@GF^}AZWs+u*<2P`ea~a@ zid7o=^qbPyx!%6srVt_q02GTw4M5_%{rMM0CaNdjDAmGEKRI0gqsyM-D}1%I$iw58 zras?4xEH|Fxm>OlfWT^6B^ekPNUQ-m4u1IlHqrC^79*8zZ@4Rs#$TtWj~qNynNgU} z<#NlFO2r1i|2I`vR}w%AfOY^I06YTVVIbSq-`}6SAM>C!@4V=6rK0&aZ_10+D%yH` hqmN#GN%28V{0BwD#RtKA@K^u<002ovPDHLkV1j>(l-&RT literal 0 HcmV?d00001 diff --git a/apps/sn/public/images/map/layericon/RDL_TSCT_PS copy.png b/apps/sn/public/images/map/layericon/RDL_TSCT_PS copy.png new file mode 100644 index 0000000000000000000000000000000000000000..3776f6c0493ee2fb6717ff03adecb0f228bf8673 GIT binary patch literal 923 zcmV;M17!S(P)0Hs^2dQXj!PgXLQTF8~RVIGY zfiSCxE$GAsKdi`F)Y+}`F$a5KX&|m$TbI_RY5K_H-rU^W`}2d{gnB+6&iNhA4-R1! z%uGZ8KrA}}wZQcN$^l&ioa01P{7*-G%SUTTRn^#cfZ?p7!QLVlkt00}~rzzl0SV_1RO zYWuN{jl-OH@9@}cFdGhsSrCy`GWDj@Xa9O_?=xSR+ZueL=iL@5lSz}{IjE{Znr289 zWu|Rne4_O2_o@9=TV8r@wE_tM_;F8oQ&$p(!NwSO)A73CQEyaDG=^iuCTCsE;^ zhnm;nbs2Q&+7yqDTdmD^qdXLf{(E3@W_kPUTnc5fK}#!y!PBo`=MEn>HT{am54YmT zQv=B47?RLwDZM~{rwUtk?%H-|G#X+-0F0vUHuN0Kk_yYRxW+#T;2iR%2fzc^RJjP# zP>D?qhLMM9742HlB?AzG0eD@u{ZH?bO-Dr3ti8{ z?PT`YjrpH1#*EuP*cx#Cw6%U6WmYomwC6FIkomx?yU^Np1CPGgjFD^A@Hn!_X0lwn z(MNty{_@1le5R+T2ZEXD+=bquLyy&suJ^lbD@)6U$C;iQ&YE5=_x(*AIw@{TflDw$$kTd0VU>ig`SqLGBhyXxHk_xF*(hA@J0Dl?45)q{yniG3EdYI&# zLzd+;Q{z9LUkL`EeefW0AU8*S-)JhjeYnEjXEGIc5s}>1*2X$IIurnqgb>u;-cCXY z?)Q1GyLvxA=l6M$PG`V4M>>_#sU)c~7?`g-QeD%yu@OI2WXj*%3nd{0V~i<*g}F~| z4Gz3NKRc7kQGaXLOLY!b|9TUJ*Vn|gD<3QJZd@s~SXD3AzcD=R-E6*aq2)dRFd|YE zMLF`*@X&iR-rq8uOI(we&y}1U+S!f6Vk@VH<`!-=6-j}>LV9-k*W*=HC8x7J5CZ_O zXR2j+DZq)C01?w^b-3f3!GwDR08rP^1hqy>fS|x_zki5^Lnllolh)~Uk^}(JNVsBa zGXlmqoqgwBR6bvW-s@NK`{d8CmOY77GKrPo9l@AH+uPf;^Jna-nwnzS@YI$KEvY(=A)vEd(h%bB;M-;Yk5y>;Wp zL@XAIQ}!UJx8HS?CGPd#{JO6s6j~K(wORmB@(&i!dT5my^ag4=d1`k{PJPgN@#43& zwY3qq+x<5Iz`(!&cRHQ?^5svDmY0=$^vBd>?fTk^l#pd`&hfap6o)ISeE!Ad?hjjA zhkERGd&J}M>;Mq7_Y_%^900~km#(~EFcefvjOmlc-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`f(~1RD^r68eAMwS&*t9 zlvv ztM~P_^2{qPNz6-5^>ndS0-B(gnVDi`$o& z6x?pH#Hm*w=oo!a#3DsBObD2IKumbD1#;jCKQ#}S+KYh6+H&5{UIqrHdQTU}kcwM# zCdYbA4wN|lzxuh^-KyftM`9}$b|eHj#ydx=Nojj7R_fibWOhtktBRwzr;AGL6JLcX zP9asojgm^Nvyv>YoZNEAS66w8U5Los;>%~ht$SX1yNy%n%YpY#=RBYD{eR7zVv*&a zHg7yw)KPTEN8<3l%tLM_g0*X7YcHPdDrJgV)VE?sNS)uzi4)u2J~Hz-$nY#Z{b5O+ zn|F2jglp2BSwbJzieC`a_ZJb3;`&^C;m;P%xwd6GyY5cNP>d5PEO@UsWuC6v_uqA2 ztlg|m)V8_oF?{%<)YbL4?(SgT9XV^8jz4d=GUMYsCQ?~=c0bqc2kI7fy9%~0;^Ao3 z`RnX=Zd=fT{>}|zGDZ)d-L3kexg^7*Ma_@fQ6Qz_jGbq|BgbUpPoIh+uUG9-IKJeJ zkN3)jv-tO9Wgb5Agg?Wzc8g~tflT*nqwc24D_r^eK(M07myPQdht9O1E(DK!JCiZNB zzeiH|raMOx65h_&*cMm)<@t$<#hNS+^COS+R2N!$F45U>`_2aQz0QG*+fLXNDYaDy zde2LpcWy(^SyL;u`NavPsi);W%v-$krbKb?sgs)yJid0_cHw8$;{vP29>hoX2aQPz!58&o`d My85}Sb4q9e0Czo2EdT%j diff --git a/apps/wr/public/images/map/layericon/BML_STMS_PS.png b/apps/wr/public/images/map/layericon/BML_STMS_PS.png index 423f2e8fcb87d6c1b9192d1547a4cf97c3bb7292..bf4357181e9891bf71753cc3cd75aff9262de4a2 100644 GIT binary patch delta 788 zcmV+v1MB>T45|i@BYy(%Nkl@$ikLaoY&Kus+}wP9d3hP0pPx%9FMe3dwY97RIAl+U|>M@58QXd%(3gbVsUXXEEbDD647%2 zB$$~z&!f@N(MJml3%||G%qU|_{QgZuh@vR=eP1juFT2HJag~Uk_kzWWh?tpaV`D=M z4-Y?f9Dk=JgxEYdIA9{;APAU<#LCJ_yHF^6OGIxgm5R#e^C19;-V_FaQmLedhK7D! zT3Y&Lc6OGGF_cUu#p>#6qfjU;6VcnPtu39;=cE6Pvk;=6%!k|C+h%8H=Wk}7?5}fQ zR4SE(<2Y8U)%pm)$5P56t@S5|hlgf;ef^P0Q?rwT| z+M~6#HOu$?bQDD+%$(I)XW}?cODQw0R*SUODw#|MVHny{%9|*PY$CdnQvNeCGGbG2 zci}jWPTUu)k0G&=J5JLDt5SYQi!EU$PHRI#s{^sUp{4d9PpR{5; S2Mx6V0000c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`f(~1RD^r68eAMwS&*t9 zlvv ztM~P_^2{qPNz6-5^>ndS0-B(gnVDkc?Br}XH{644~kf%h=vIPQxAv!Z9mxW?6};@ zEo2|D%REmdk7w!IEnAsXx3Fee%g-}U76loozD!P z&)&Lq>vfBCkG(7`X&G_Lf*+s096UWhW9E%h;$|vw%~()q&4|I^Q@J~*G4D0Fh-ibWa?D}1IL z51*v6Bq*7&YTk!CH|nJ>%zXC!xsRIdY>y*~lO3j=&^@SJFq1VhVC9tnohe>l^nO*X zPnWL4S3e!)m$$clI?+9yv+1q9 z*{4e3_h$DN<(4m4J!?M0E|$|ij}FdN)#zfs_*bZgY4=sDBp2q})uC5rm1=ByboJdl z4oOayi!VzOt?$;mghbZQ`F8Kc3kw;yU3SLpZofGuJ+6AWS}R$@h)0*f*HnPlo#mZa zVdSe1!6_edtg0)s3{(zoGqu^X_eG->i}{RD4GRY41&6okY|)*q%AvciH|O7ve@!<; z9XA-woavCdymN6H^VUyh{3qjfojsf!BVmxh!!o0{)g_C`O{3{bg_KIf2h)PO>--B| zvZ<+0iiof8uQ}MVj8kwWqkQ*7VP(TL&+-z!A2_srZf)b%KiyAuP3k&0q0y_9{rFox zrd@uHp_4S`nU?gb-qe_7I&I14c^MYBSwknL=H!MamP>c=x+`vEeq{D5w?u~hVSvEz zuU4gr?rloTWkpWE+rB>DZ+(f4+~>6Yfm-4_#s0os7x9nFfMHhRx5p)mI~zeIv!|<{ J%Q~loCIHG1Mo<6% diff --git a/apps/wr/public/images/map/layericon/RDL_ETCT_PS.png b/apps/wr/public/images/map/layericon/RDL_ETCT_PS.png index 29c0b77b4ee74276df8de9416fe284e4c8bc15ec..e5a83f998a8ea4f36918482e08ec93f13fb6c40e 100644 GIT binary patch delta 874 zcmV-w1C{*v2Y?5VBYy)&NklK7=_P&?@ex!Cb6k8%U0JFmZ}x(=At;Z zhq(C?nHyowhz<*T2|_^_+mJG7Ko~`bLx!++WwL=VsAG&FExNT6+p^(I5v^veuB~ZJ zG+mS2rb+L;x%d8iSVh#G$HV`f!~bxARWUPxK>%P!9hf=98h^jSDsSRmwmo+Dq#l|Q zWN1e9(D~x$Bd4SSM%|^2Z@LQkOTmi^8@>GJS84&X*b&HH;YSp89&Yc zhN0XQ+V06Upeg@+q(yev+;9rO@9Ii_tfdF|5QqFdF#nXxBqc?%UPD$DEv3|s+9GWl5m^KP{r&x7JRTQMA3gnQ zeXOBtxHJ-(R%azoorqFZN0V(mBHq_076-+1JDQ{2%sSvjml3l zPfzo|AR(1XiDUUO;m++lXlQFNkG*-!V1ByvU-_e+CpFW^EdT%j07*qoM6N<$f?+_V AZvX%Q literal 1016 zcmaJ=OK8+k6b&tw(vJ!*{1ogXU8vB>XPTs)II*3XOznWFWjfFSH)fL8PUs{rOLPIEJ`Y)veC zaC&*NU@XrY36mZ@2a&j#vZL>6}L-4#p@0u!VQy_yp2t;Nm zW^g&?IzmCdARTQpTd4&$%Skl`e@NJNa1D&qEN1!@t}^8S3s!J z$l_EPVdR&Q3o_FZI6Y%ICaU^p>Ud3)bB>R7$ACFip@{-xS*ARm&19rhd{__#k>|5Q zN)$#$QrT=;Oi1Y=Dc#_z$XK+YgBx6PpF7f$8?}P%lE^CbtSitQ_mB=~;C%rH6t=wcT|8WdD?9q2*`293yzvFajvAvhRF7aLP*qs7|9(uF2la}H0j>B^&> z7d_|y@^rB|g#27Se7|3KzRv@9QB_e804$Fc)kh1eyKbvK)_@<@2kHO>}>n$n=N%GUJ+Tnrw43R75e%_RZVd9;wSddd#`fk z5|mcaFvPf40@rP}Zd_`9x#^|n>QoPdEUtx!sv0p?OlJ+4O9S(h(wD~*eK@*-wrO1g#;k5PuH;OL#U9jvx=aSe+>p%dn6W zZ}H|1+V-a8=+Qgp(IBj1xdPkcu-PX1sX#Ee1PO!Q4ls>XnB8&AFDo#dC-g%%Zs(j5 zhyf_O$?Moj)m#N42u>{%`H^Zl!XH|qGO&Q&3gCXD;AuHloh^O-S*3TagZYNWVd@(s zyzsZ`Tz`Oh!b2AW(Lx9@P+uVw{LviLZk4$$b?5kfxbVWslOn1rM{W@x82|QM&A_pi zVxr{7y0_a34>@knb6QCR%7?2o_I-#^CG)IaHT+FvvO4^@>X!2xU_26#XmNIU?Eo}M0O tLnz}$L8@v`W-@N3x7SrwgUE*3{{XBoeqw|U;4}aL002ovPDHLkV1mCili~mX literal 1061 zcmaJ=O=#0#7>-tp>_^m#%!?s|Img;0{mI&}x^+$K0(R84*dBH;O}?(#mV7b!y0*iE z8*?alQ&5?^$i#!92*ZQF8;I!1o2VDBDvTW_3R9S0y0-IR4N1Nqp67Yr?|q-|a$@9U zd&`j)f*{((VIhgf1NOJiiT_78wj?}splBAQU>=nu6A)nq<^U;b(ilhrNvWKB3;GGd zL8<91%EnLeGSu9Xjd7PX1G5RDf1qqg@&rI+4veXKh+2R8k|I?lL}mPOCT>JPK^>kp zL27y=El*F#L4_JPLH3tZ~gWz>-bXKq}NpTT#lvA_`GB)9oW@MnhJ& zYGuL&qsx*(vu?&dQXLqN{~xMp4YY-lU?<;y3R~%l0q7*KV9}Iuq-9nNs15pT3Si!BT3h$3{0UyhReSU9@ zWuv};j|mLvMp*SP|eiyF{TovZ9{hnjM2D`*CeEC5rT0!qw;8d*IuuQtym z&{VI+Rhs7#Y|5o^GPK>;zZzZN!tSxB4cp>H!}vhQZa1;54?CBG_)6Rqg>bt3Dc9T6 zv-xhY>&x02P%|R zoz92LEzabJwgk=0?mnH#TvzDP7w0<;UZN8$Q$ftg+0gdDnYIg;-c_cm>i7R7gvmq2oHwN G&i((T_$Szu4@!#p|&NQSNB$c-xrB8$v2chzM^5tTPvv z0zUrM=tH&Dz8hAt!yvz@HT^*J^?&+Z-gCO!ub%eUrfKF>#gc%Epp*5nSZ{y;K)?vlbzx90 zPDC$_=g&N_b?gZX;9AayGxc_||9qo?F;#fn2xzA%et-GvZ;%84C=i14_OU@4wiS1O z4Zv9uX^t3u^5=H%{dcu=VE$U&jTut*4%_lRC~h%%2|ci9Dm^i?_bCxMR;gC)+La(FAXNc0((K49wH40% z`bW6`r+>2nAAauTsF=p9&-xQI$F{V~7mz%P-KaS&}IF1X}+Cnau%V$|O6h%=4 x0NrkPpsLwmFi1v5MtZ$oFPWU2%;x6i!hdSPmcBW5^N0Wd002ovPDHLkV1lGLdV>G} literal 1068 zcmaJ=TSyd97#_94Y=wl1?4`4#fk8X7v%9mG$<1_UHt&Bt>Dcv7J#@duSVG=3Mx`@BhyK|7X0t z?L>9efhvlks*|l^nvA=huW|?ZAN*dB$WV*pUAP1F;GASas#!r<2$GuA3)4_ihR-j; zMvAJS)l3)eN}Up9q%o3%VQkGHY>H}ZvJFY@hZtmGuc}AsuaBP4Kvkl2C!g}Bj2P@w zTSrXTG18WiNBZT6LN^@)jkZ7pG>9c&YXiC^*im{-S0Hm|o29`T1oubjbyHobb`V1* z1U%#S$X<>E!63s0_+XGb0(@T1$9l;d^l$-z4+_2z*m!6X%~X1Xw3yh4MOIO|4`V}M z*<3EiH0BHVrK_Xv(B;J#|hfLx`DB z!pO`ZG*HZ9dmqBc>O%&Ibp$~}r>ZL`XB}R{r&2;vx3HwkFeyf9qQI!CB8VZLWVyv3 z;Qb=U#RCyB;g5N}VQ)Ab3Uh&Ykt-s3P=h)ya+NJ^pd{C611NxK#b)C}opifN+B&OUY9Uu*Iw>}1 z?04CGq0m&}YB>6{E*zeF|9kB6!i9axtNW*4*S2nN*da#p@XF-m{H@h5Z*HzuQ)OtEs7R-3_4+-Tc+@i!F1bCztYXXN`Mz9yhjCtURQq64zaJe#QOk9GD-v#?0+q z5+8j0_UZYar{yg%2Rn~b-KGcDbte*gsmT|@u? diff --git a/apps/wr/public/images/map/layericon/RDL_STAT_PS.png b/apps/wr/public/images/map/layericon/RDL_STAT_PS.png index 13d8ea6899c02aa0d0917b630ca9f697783fd6ff..9a0b11673abfd8ad6b85c32dcae55f5e3f7664b4 100644 GIT binary patch delta 833 zcmV-H1HSyT2-gOXBYy)PNkl>mcY)EUft!dh{ z={BZjXEL+1GvCbdp$(<2_u*c++;h(5au0APND6=g04xCHa(@?_|86E1yLl#W+&gz) ztTvMXJk@;n>wnZA@684E9hVh%&jl-o7Q#xk?(E~Sf&~DDLP6dGE|8KO)qlC=kG!=+ zTIWe?GGOOfpQ*_v&2!`{HS+r#?r%JCv;#ui-Gro+08TG?Uu>Hv@w*djo$}PEqvClL zbJS7s)+tY6%zp`sm;PyCluprrp)1N}Y1m$5;G#+K*|IyrxK( z*LjcnSUr4mmMl-4%CCw807e(;pL9-=2mWq^G0AyF&MER*bh}Z&vQ?h>wXvz z)B(T`<5V(=@#Tz%c3r}dK*o^hvLvc*j0=uJLJE9U^`I#OK}3T|!vuVx6F@d<&ORj5 zFV5Wxv8QZfOS^$HO95ZoV2Ym?ns_Rs;i4143nOGQCeyxsuAq?HhzwV8=B;C%b`>q3$gmyZmVcAATm z*~}W<_EebC1Q5n((FLGl7!vUPP(g3eb{MtA^6+QJ)?#g#&*vfu0NaPg>+8pl?%mhn zTxrd=8HfM0X}du@GF^}AZWs+u*<2P`ea~a@ihora`t+O9*ty=m-lh;D1^^U`MGZjW zyZ!kWMkcB!-ze3>O+PtY|D(&E<12i%w8+Ebm!>}7Ke!jb)45!(6@b8MS|u467)Y!E zIu3sL{x;F`{1zjXZg03NjmBT6r;i*wRGCqj&*gHvELe literal 1075 zcmaJ=&rj1(9512<`H{#)kqa+fOw_P--MZ=;1{vKZiMjYDVVY{1~JIMQOyX^pH}bFKvP5XU_kOprU zru$RM^q3M<>7H)TRS<}P4zUah`nX{Wg%G`?E0Dc&%+O#5g2zJiZcu3{0Yqd$5b*fj zikD>p&wE%d!1HV;@OfDu<0UWeW;r3i3%=7}@1cn|OC1rCk=ULuVuk1|#-_k9`F!4! z_j`~v%CNy;(9!Vu+yvparwl9?+=lI{C`6#GSel77WB^A|&Y&C)(InE{6m+vHYuI~b zA_Zd#vdOR>uai;*C`tc^>UtGz<0SkO?>~j@)RYOCB(zb^Qb^-QT#hSK5G^QUWTg-q zuT(LSMHtyxWCC%32PXzKLq&P}GZk(GDLEY)xWZNcaQT{CXB2dkc#c3zn}ll2LOR$|c$p9Fgg9w$-sEMs@I^L8jdzV}1OY-y&DyRy-0;6<%ew%H^JV zzVupXjlM;>ZWo{HyvOCIS2I^-|6J?Z0Wkk`VB^ijLzBFB=EJsl<;(3=cId&}xjPGs zpsi_Q`Qf|pQtxK_1*XV#|N6FYsjW08nU6nin%`GDdOo)o{msL(3qL#dFVEMxR;76pH}7 QeD7T2c(gyV)H{6nH~m6mg#Z8m diff --git a/apps/wr/public/images/map/layericon/RDL_TSCT_PS.png b/apps/wr/public/images/map/layericon/RDL_TSCT_PS.png index ffc22515996bacdfbece7d30e3d5afcfd20269d2..3776f6c0493ee2fb6717ff03adecb0f228bf8673 100644 GIT binary patch delta 901 zcmV;01A6?V4Vwp$BYy*8Nkl0Hs^2dQXj!PgXLQTF8~RVIGYfiSCxE$GAsKdi`F)Y+}`F$a5KX&|m$TbI_R zY5K_H-rU^W`}2d{gnB+6&iNhA4-R1!%uGZ8KrA}}wZQcN%6|b}1DxYTRQyjze9K2` zNmbR`zWgrHaW%GhpQ>3t*-7fX0eAe#eO0IG>t;?8ZOOv5t+yoOti>*laKx4u@F~kySGFrqgHt zdTsABUzpn(e4^*w7AccSli)e1szI7&NEKzKZDM?)^zHYl{Z(6DdTzA>2>|$UWb)~& zV@b&djSsbdE&LVb82Y>c=TG!f?>i?^;hu+@*Wq;;bbsmE6pxNut<86%JQRxldth>A zdHd{K3T3iEODlxI)30FX4j(o({ffsAx8lfC1IXkUlF(@>y+D7b3R`yW+ID9&8e%~J zjH2!~^c>8R3d^#%#y<(*9P*|IzysJ+xd_uxiA@cLk%ws&?OM?#0}z4%cw9W~b%Qlc zh1;H{zJH+y5x;l}9@u{ZH?bO-Dr3ti8{?PT`YjrpH1#*EuP*cx#Cw6%U6WmYom zwC6FIkomx?yU^Np1CPGgjFD^A@Hn!_X0lwn(MNty{_@1le5R+T2ZEXD+=bquLyy&s zuJ^lbD@)6U$C;W#lPzN?8;0sdm|VOCS$SK zG5`x}p(u&~AOr9N*bJZ^Km&j}02^9bT3l;Aw3b+1rwB)*HjIslsi`Rh0)bL@cXx@I b|EK*2JXN2bW+CNHncK3J8d++=o7*be86k9Pwol1?dak#)BomwnS08u~!#wj5t!CX~C0F*K&VFQg% z=BwGDLK$w*fYF9^La8A^8XzMCv4B7w0~1hzs2I?x5+Q`4V-m)78Q9#qO(Fo}5Hx{F zc$buj9|^Ew4G7SPKHgF?g#ys&M2atsPN%E^sALM2M8_6zk3poCKWLTQs+ z4lGSlfe<>$l}&N|$kTGIR#2(2$Q)3kOa^6P8dwF4m&{O3p9^PNy$P;t+Fa<|X}KgU z8IrZJ|7!H)7Umx7bjr5aV#@d+gt=XV*_sLU$g!_w5swoh)IA6k#40}H;>T{9-nPDk z^6DR$io9uMF|)VLSzRp(NnBP0h`4K5_Pf4Ugq%pTXYFw)v!8uZqzHa|>VEJxvg_3k z(!a@kRhYK^PUP*JqRj7F^KbNCPBDAlGQ}?S_d(=0hw{zMi<=fo@XMQ5@4480GKa-) z!5{Iz5`(*I^ILMAc4vf*?d>gwjc$BLBt_x5qj1%tr2Dp8Z`%pFzi{hz4|jL6Dah6f zU#=(vo4VJoxw@jFYa``~c!^i=^PN?v3XJm_n}*@k_Xm$$ADnl>h|7s+`lPnUE~mAr zzO42M`Im5|sj6h)_P4V%wAK z(6BYJ@`tl$+)VagHk{*?_zxW4Z7y)kZQ{XpiVJv;!?JSQr!Ivp$zUHFvYqP~QZvf~ zZ;9^EuN`VVACaXZ8m^axX{*w68ok<&8Oisd&Xoa1wbAv_>?H>qf+RunJHL8WwD)Oq zuF;+KI;?$XiqEC~cxQcV+nKDqit>1M*RV_Aa3fA$dO_Xx!lhoa(423YQ*)Xn>`QV{ znIxA6tLr-tIhFa$y0cr|J44(j$w;Wt?HLl5Sw3pZMVuqPxOeSplxsB_|E#;iZMb2y zAHEdn{b(>VGu!fdW@`WS%YmY(I%9LkdtC+fmK)t#{Mi2abALpnZ|-e)t$Ul_8+edd zpOC)3E;r{%-KWy7Itt4oEVkeNsu9=ULaC>*~S)^ X+MJ>?k7n6e{~J8+I! useContext(GisContext); export const searchUpperPpls = async (fcltMngNo) => { - const BASE_URL = process.env.NEXT_PUBLIC_SEWERAGE_API_URL || ''; + const BASE_URL = process.env.NEXT_PUBLIC_SEWERAGE_API_URL || ""; + const res = await fetch(`${BASE_URL}/v1/fcltmhl/upperPpls/${fcltMngNo}`, { + method: "GET", + }); - const res = await fetch(`${BASE_URL}/v1/fcltmhl/upperPpls/${fcltMngNo}`, { - method: "GET", - }); + let data = null; + if (res.ok) { + try { + // 응답이 비어있는지 확인 + const contentLength = res.headers.get("content-length"); + if (contentLength === "0") + alert(`해당 맨홀의 상류관로를 찾을 수 없습니다.`); - let data = null; - if (res.ok) { - try { - // 응답이 비어있는지 확인 - const contentLength = res.headers.get('content-length'); - if (contentLength === '0') alert(`해당 맨홀의 상류관로를 찾을 수 없습니다.`); + // 응답 텍스트를 먼저 가져와서 빈 문자열인지 확인 + const text = await res.text(); + if (!text || text.trim() === "") + alert(`해당 맨홀의 상류관로를 찾을 수 없습니다.`); - // 응답 텍스트를 먼저 가져와서 빈 문자열인지 확인 - const text = await res.text(); - if (!text || text.trim() === '') alert(`해당 맨홀의 상류관로를 찾을 수 없습니다.`); + // JSON 파싱 시도 + data = JSON.parse(text); + } catch (error) { + console.error("JSON parsing error:", error); + alert(`해당 맨홀의 상류관로를 찾을 수 없습니다.`); + } + } - // JSON 파싱 시도 - data = JSON.parse(text); - } catch (error) { - console.error('JSON parsing error:', error); - alert(`해당 맨홀의 상류관로를 찾을 수 없습니다.`); - } - } + const select = GisApp.Module.select; + const gisMap = GisApp.Module.core?.map; + let foundFeature = null; - const select = GisApp.Module.select; + data.forEach((item) => { + const pplMngNo = item.ppl_mng_no.trim(); - const gisMap = GisApp.Module.core?.map; + gisMap + .getLayers() + .getArray() + .filter((e) => e.get("lyrTyNm") == "tb_ms_swage_ppl") + .forEach((layer) => { + const source = layer.getSource?.(); + if (source?.getFeatures) { + const features = source.getFeatures(); + for (const f of features) { + if (f.values_.fclt_mng_no.trim() === pplMngNo) { + foundFeature = f; + break; + } + } + } + }); - let foundFeature = null; + if (foundFeature) select.selectMultiFeature(foundFeature, true); + }); - data.forEach(item => { - const pplMngNo = item.ppl_mng_no.trim(); + if (!foundFeature) alert(`해당 맨홀의 상류관로를 찾을 수 없습니다.`); - gisMap.getLayers().getArray().filter(e => e.get("lyrTyNm") == 'tb_ms_swage_ppl').forEach(layer => { - const source = layer.getSource?.(); - if (source?.getFeatures) { - const features = source.getFeatures(); - for (const f of features) { - if (f.values_.fclt_mng_no.trim() === pplMngNo) { - foundFeature = f; - break; - } - } - } - }); + let geometry = foundFeature?.getGeometry(); + if (geometry) { + let extent = geometry.getExtent(); - if (foundFeature) select.selectMultiFeature(foundFeature, true); - }); - - if (!foundFeature) alert(`해당 맨홀의 상류관로를 찾을 수 없습니다.`); - - let geometry = foundFeature?.getGeometry(); - if (geometry) { - let extent = geometry.getExtent(); - - gisMap.getView().fit(extent, { - duration: 300, - padding: [50, 50, 50, 50], - maxZoom: 14, - constrainResolution: true, - nearest: true, - }); - } + gisMap.getView().fit(extent, { + duration: 300, + padding: [50, 50, 50, 50], + maxZoom: 14, + constrainResolution: true, + nearest: true, + }); + } }; function Gis({ - isOpen, //우측 상세 레이어 팝업 - gisMaps, - isSearchModalOpen, - treeData = [], - isSearch = false, - isMiniMap = false, - setIsOpen, - setFeatureData, - featureData, - imgVisble = false, - searchView: SearchView, - detailView: DetailView, - onFeatureSelect, - setIsSearchModalOpen, - onCheckedLayersChange, - searchBar: SearchBar + isOpen, //우측 상세 레이어 팝업 + gisMaps, + isSearchModalOpen, + treeData = [], + isSearch = false, + isMiniMap = false, + setIsOpen, + setFeatureData, + featureData, + imgVisble = false, + searchView: SearchView, + detailView: DetailView, + onFeatureSelect, + setIsSearchModalOpen, + onCheckedLayersChange, + searchBar: SearchBar, + height:height="h-[calc(100vh-10rem)]", }) { - const mapRef = useRef(); - const [mapObject, setMapObject] = useState({}); - const [tabVisible, setTabVisible] = useState(true); - const [layerNm, setLayerNm] = useState('') - // const [isOpen, setIsOpen] = useState(false); // 팝업 열기/닫기 상태 - // const [featureData, setFeatureData] = useState(null) // 선택된 피쳐 데이터 - // const [isSearchModalOpen, setIsSearchModalOpen] = useState(false); // SearchModal 열림 상태 - const gisCore = useMemo(() => new GisApp.core({ targetId: mapRef.current }), []); - const mapInstanceRef = useRef(null); - const checkedLayerIds = useRef([]); - const layerNmRef = useRef('') + const mapRef = useRef(); + const [mapObject, setMapObject] = useState({}); + const [tabVisible, setTabVisible] = useState(true); + const [layerNm, setLayerNm] = useState(""); + // const [isOpen, setIsOpen] = useState(false); // 팝업 열기/닫기 상태 + // const [featureData, setFeatureData] = useState(null) // 선택된 피쳐 데이터 + // const [isSearchModalOpen, setIsSearchModalOpen] = useState(false); // SearchModal 열림 상태 + const gisCore = useMemo( + () => new GisApp.core({ targetId: mapRef.current }), + [], + ); + const mapInstanceRef = useRef(null); + const checkedLayerIds = useRef([]); + const layerNmRef = useRef(""); - // 팝업 데이터를 저장할 상태와 오버레이 참조를 저장할 ref 추가 - // const [facilityInfoPopupData, setFacilityInfoPopupData] = useState([]); - // const facilityOverlaysRef = useRef([]); - // 체크된 레이어 상태 관리 - const [checkedLayers, setCheckedLayers] = useState([]); - const [checkedLayersData, setCheckedLayersData] = useState([]); + // 팝업 데이터를 저장할 상태와 오버레이 참조를 저장할 ref 추가 + // const [facilityInfoPopupData, setFacilityInfoPopupData] = useState([]); + // const facilityOverlaysRef = useRef([]); + // 체크된 레이어 상태 관리 + const [checkedLayers, setCheckedLayers] = useState([]); + const [checkedLayersData, setCheckedLayersData] = useState([]); - let gisMap = null; - const closePopup = () => { - setIsOpen(false); // 팝업 닫기 - setFeatureData(null) - }; + let gisMap = null; + const closePopup = () => { + setIsOpen(false); // 팝업 닫기 + setFeatureData(null); + }; - // Feature Click Event - const handleFeatureSelect = useCallback((data) => { - onFeatureSelect?.(data); // 선택된 피쳐 데이터 콜백 호출 - }, [mapInstanceRef]); + // Feature Click Event + const handleFeatureSelect = useCallback( + (data) => { + onFeatureSelect?.(data); // 선택된 피쳐 데이터 콜백 호출 + }, + [mapInstanceRef], + ); - // 지도 생성 및 초기화 - useEffect(() => { - if (!mapRef.current) return; - if (mapInstanceRef.current) return; // 이미 생성된 맵이 있다면 중단 + // 지도 생성 및 초기화 + useEffect(() => { + if (!mapRef.current) return; + if (mapInstanceRef.current) return; // 이미 생성된 맵이 있다면 중단 - // EPSG:5179 등록 - proj4.defs([ - [ - 'EPSG:5179', - '+proj=tmerc +lat_0=38 +lon_0=127.5 +k=0.9996 +x_0=1000000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs', - ], - ]); - register(proj4); + // EPSG:5179 등록 + proj4.defs([ + [ + "EPSG:5179", + "+proj=tmerc +lat_0=38 +lon_0=127.5 +k=0.9996 +x_0=1000000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs", + ], + ]); + register(proj4); - // OpenLayers 지도 객체 생성 - const map = new OlMap({ - layers: [gisCore.baseLayers['base'], gisCore.baseLayers['satellite']], - renderer: 'webgl', - target: mapRef.current, - interactions: defaults({ doubleClickZoom: false }), - controls: defaultControls({ - zoom: false, - rotate: false, - attributionOptions: { - collapsible: false, - }, - }).extend([]), - view: new View({ - projection: GisApp.TO_PROJ, - zoom: gisCore.defaults.zoom, - center: olProj.transform( - [127.4875, 37.4916], - GisApp.FROM_PROJ, - GisApp.TO_PROJ - ), - minZoom: gisCore.defaults.minZoom, - maxZoom: gisCore.defaults.maxZoom, - }), - }); + // OpenLayers 지도 객체 생성 + const map = new OlMap({ + layers: [gisCore.baseLayers["base"], gisCore.baseLayers["satellite"]], + renderer: "webgl", + target: mapRef.current, + interactions: defaults({ doubleClickZoom: false }), + controls: defaultControls({ + zoom: false, + rotate: false, + attributionOptions: { + collapsible: false, + }, + }).extend([]), + view: new View({ + projection: GisApp.TO_PROJ, + zoom: gisCore.defaults.zoom, + center: olProj.transform( + [127.4875, 37.4916], + GisApp.FROM_PROJ, + GisApp.TO_PROJ, + ), + minZoom: gisCore.defaults.minZoom, + maxZoom: gisCore.defaults.maxZoom, + }), + }); - gisMaps.current = map + gisMaps.current = map; - // 미니맵 추가 - if (isMiniMap) { - const overviewMap = new OverviewMap({ - layers: [GisApp.Module.core.baseMiniMapLayers['base']], - view: new View({ - projection: GisApp.TO_PROJ, - minZoom: 9, - }), - collapsed: false, - collapseLabel: '\u00BB', - label: '\u00AB', - }); - map.addControl(overviewMap); - } + // 미니맵 추가 + if (isMiniMap) { + const overviewMap = new OverviewMap({ + layers: [GisApp.Module.core.baseMiniMapLayers["base"]], + view: new View({ + projection: GisApp.TO_PROJ, + minZoom: 9, + }), + collapsed: false, + collapseLabel: "\u00BB", + label: "\u00AB", + }); + map.addControl(overviewMap); + } - // 스케일 컨트롤 및 베이스 레이어 설정 - gisCore.__proto__.map = map; - gisCore.scaleControl(); - gisCore.changeBaseLayer('base'); - setMapObject({ map: map }); - mapInstanceRef.current = map; // 생성 완료 플래그 설정 + // 스케일 컨트롤 및 베이스 레이어 설정 + gisCore.__proto__.map = map; + gisCore.scaleControl(); + gisCore.changeBaseLayer("base"); + setMapObject({ map: map }); + mapInstanceRef.current = map; // 생성 완료 플래그 설정 + }, []); - }, []); + // treeData 변경 시 레이어 코드 생성 + useEffect(() => { + if (!treeData || treeData.length === 0) return; - // treeData 변경 시 레이어 코드 생성 - useEffect(() => { - if (!treeData || treeData.length === 0) return; + // 기존 오버레이 및 레이어 모두 삭제 + gisCore.deleteAllOverlay(); + gisCore.deleteAllLayer(); - // 기존 오버레이 및 레이어 모두 삭제 - gisCore.deleteAllOverlay(); - gisCore.deleteAllLayer(); + // 트리 데이터를 레이어 코드 객체로 변환 + const layerCode = gisCore.convertLayerInfosToLayerCode(treeData, "lyrSn"); + GisApp.layerCode = layerCode; // 전역 레이어 코드 설정 - // 트리 데이터를 레이어 코드 객체로 변환 - const layerCode = gisCore.convertLayerInfosToLayerCode(treeData, 'lyrSn'); - GisApp.layerCode = layerCode; // 전역 레이어 코드 설정 + //setTreeData(data); + // 편집 가능한 레이어 목록 생성 + //const layerItems = getLayerItems(layerCode); + //setEditLayerItems(prev => [...layerItems]) + }, [treeData]); - //setTreeData(data); - // 편집 가능한 레이어 목록 생성 - //const layerItems = getLayerItems(layerCode); - //setEditLayerItems(prev => [...layerItems]) - }, [treeData]); + const getLayerItems = (layerCode) => { + const layerItems = Object.entries(layerCode) + .filter(([key, obj], idx) => obj?.updtPsblYn === "Y") + .map(([key, obj]) => ({ + ...obj, + name: obj.lyrNm, + label: obj.lyrNm, + value: obj.lyrSn + "", + })) + .sort((a, b) => { + if (a.sortOrdr > b.sortOrdr) return 1; + if (a.sortOrdr < b.sortOrdr) return -1; + return 0; + }); + return layerItems; + }; - const getLayerItems = (layerCode) => { - const layerItems = Object.entries(layerCode) - .filter(([key, obj], idx) => obj?.updtPsblYn === 'Y') - .map(([key, obj]) => ({ - ...obj, - name: obj.lyrNm, - label: obj.lyrNm, - value: obj.lyrSn + '', - })) - .sort((a, b) => { - if (a.sortOrdr > b.sortOrdr) return 1; - if (a.sortOrdr < b.sortOrdr) return -1; - return 0; - }); - return layerItems; - }; + if (mapObject.map) { + try { + gisMap = mapObject.map; + } catch (e) { + console.error("오류 발생:", e); // 시큐어코딩 관련 수정 : 오류 정보를 로그로 출력 + } + } - if (mapObject.map) { - try { - gisMap = mapObject.map; - } catch (e) { - console.error('오류 발생:', e); // 시큐어코딩 관련 수정 : 오류 정보를 로그로 출력 - } - } + // 체크된 레이어 정보를 처리하는 함수 + const handleCheckedLayersChange = useCallback( + (checkedIds, checkedNodesData) => { + setTimeout(() => { + setCheckedLayers(checkedIds); + setCheckedLayersData(checkedNodesData); + onCheckedLayersChange?.(checkedIds, checkedNodesData); + }, 1000); + }, + [onCheckedLayersChange], + ); - // 체크된 레이어 정보를 처리하는 함수 - const handleCheckedLayersChange = useCallback((checkedIds, checkedNodesData) => { - setTimeout(() => { - setCheckedLayers(checkedIds); - setCheckedLayersData(checkedNodesData); - onCheckedLayersChange?.(checkedIds, checkedNodesData); - }, 1000); - }, [onCheckedLayersChange]); + return ( + <> + +
+
+ { + layerNmRef.current = layerNm; + setLayerNm(layerNm); + setIsOpen(true); + const dummyFeature = { + getProperties: () => ({}), // 최소 구조 + }; + onFeatureSelect(dummyFeature); + }} + imageVisible={imgVisble} + /> - return ( - <> - -
-
- { - layerNmRef.current = layerNm - setLayerNm(layerNm); setIsOpen(true); const dummyFeature = { - getProperties: () => ({}), // 최소 구조 - }; - onFeatureSelect(dummyFeature); - }} - imageVisible={imgVisble} - /> + {/* DetailView가 존재할 때만 렌더링 isSearchModalOpen이 true면 visible=false로 팝업 숨김 */} + {isOpen && !isSearchModalOpen && ( + ({}) }} + seletectedLayerNm={layerNm} + onClose={closePopup} // 닫기 콜백 전달 + onFeatureSelect={handleFeatureSelect} + /> + )} + {/* SearchView가 존재할 때만 렌더링 */} + {SearchView && ( + + )} + {/* 시도/시군구 조회 영역 */} + {SearchBar && ( +
+ +
+ )} + + + +
+
- {/* DetailView가 존재할 때만 렌더링 isSearchModalOpen이 true면 visible=false로 팝업 숨김 */} - {isOpen && !isSearchModalOpen && ( - ({}) }} - seletectedLayerNm={layerNm} - onClose={closePopup} // 닫기 콜백 전달 - onFeatureSelect={handleFeatureSelect} - /> - )} - {/* SearchView가 존재할 때만 렌더링 */} - {SearchView && ( - - )} - {/* 시도/시군구 조회 영역 */} - {SearchBar && ( -
- -
- )} - - - -
-
- - {isSearch && ( -
- -
- )} -
- - ); + {isSearch && ( +
+ +
+ )} + + + ); } export default React.memo(Gis); diff --git a/packages/common/business_components/src/ui/map/GisTree.js b/packages/common/business_components/src/ui/map/GisTree.js index 335b1b119..47e86d4dc 100644 --- a/packages/common/business_components/src/ui/map/GisTree.js +++ b/packages/common/business_components/src/ui/map/GisTree.js @@ -196,7 +196,7 @@ export default React.memo(function GisTree({ checkedNodes = [], setCheckedNodes return ( <>