From 3e19263c27199434367b73b41430168a9e519957 Mon Sep 17 00:00:00 2001 From: Housman <12001001617986@FEDIDCARD.GOV> Date: Mon, 25 Nov 2024 15:00:48 -0700 Subject: [PATCH] 'v2024.11.3' --- __init__.py | 2 +- docs/build/doctrees/environment.pickle | Bin 3508742 -> 3588736 bytes docs/build/doctrees/modules.doctree | Bin 1197220 -> 1239274 bytes .../notebooks/CCDCVizNotebook.doctree | Bin 48325 -> 48958 bytes .../notebooks/areaChart_examples.doctree | Bin 121092 -> 131233 bytes .../dynamicWorldExampleNotebook.doctree | Bin 35824 -> 36627 bytes .../notebooks/gee2PandasExample.doctree | Bin 35265 -> 38378 bytes .../notebooks/geeViewExampleNotebook.doctree | Bin 43707 -> 45857 bytes ...eViewVSFoliumViewerExampleNotebook.doctree | Bin 79373 -> 79800 bytes .../geeViz_geeMap_comparison_tutorial.doctree | Bin 66339 -> 70541 bytes .../getLandsatWrapperNotebook.doctree | Bin 38843 -> 44416 bytes ...global_land_cover_example_notebook.doctree | Bin 124063 -> 125230 bytes .../lcmsViewerExampleNotebook.doctree | Bin 46799 -> 46899 bytes .../mapBiomasViewerExampleNotebook.doctree | Bin 32830 -> 34284 bytes docs/build/html/.buildinfo | 2 +- .../html/_modules/geeViz/assetManagerLib.html | 8 +- .../_modules/geeViz/changeDetectionLib.html | 8 +- .../geeViz/cloudStorageManagerLib.html | 8 +- docs/build/html/_modules/geeViz/geeView.html | 76 +++- .../html/_modules/geeViz/getImagesLib.html | 8 +- docs/build/html/_modules/index.html | 8 +- .../notebooks/CCDCVizNotebook.ipynb.txt | 3 +- .../notebooks/areaChart_examples.ipynb.txt | 336 +++++++++++++----- .../dynamicWorldExampleNotebook.ipynb.txt | 4 +- .../notebooks/gee2PandasExample.ipynb.txt | 64 ++-- .../geeViewExampleNotebook.ipynb.txt | 90 ++--- ...iewVSFoliumViewerExampleNotebook.ipynb.txt | 271 +++++++------- ...eeViz_geeMap_comparison_tutorial.ipynb.txt | 167 ++++----- .../getLandsatWrapperNotebook.ipynb.txt | 45 +-- ...obal_land_cover_example_notebook.ipynb.txt | 18 +- .../lcmsViewerExampleNotebook.ipynb.txt | 40 ++- .../mapBiomasViewerExampleNotebook.ipynb.txt | 29 +- .../html/_static/documentation_options.js | 2 +- docs/build/html/examples.html | 8 +- docs/build/html/genindex.html | 8 +- docs/build/html/index.html | 8 +- .../html/info/geeViz.assetManagerLib.html | 8 +- .../html/info/geeViz.changeDetectionLib.html | 8 +- .../info/geeViz.cloudStorageManagerLib.html | 8 +- docs/build/html/info/geeViz.gee2Pandas.html | 8 +- docs/build/html/info/geeViz.geeView.html | 8 +- docs/build/html/info/geeViz.getImagesLib.html | 8 +- docs/build/html/info/geeViz.phEEnoViz.html | 8 +- .../html/info/geeViz.taskManagerLib.html | 8 +- docs/build/html/installation.html | 8 +- docs/build/html/modules.html | 55 ++- .../Annual_NLCD_Viewer_Notebook.html | 8 +- .../build/html/notebooks/CCDCVizNotebook.html | 11 +- .../notebooks/LANDTRENDRWrapperNotebook.html | 8 +- .../LCMAP_and_LCMS_Viewer_Notebook.html | 8 +- .../html/notebooks/areaChart_examples.html | 248 +++++++++---- .../dynamicWorldExampleNotebook.html | 12 +- .../html/notebooks/gee2PandasExample.html | 50 +-- .../notebooks/geeViewExampleNotebook.html | 64 ++-- .../geeViewVSFoliumViewerExampleNotebook.html | 258 +++++++------- .../geeViz_geeMap_comparison_tutorial.html | 89 +++-- .../notebooks/getLandsatWrapperNotebook.html | 90 +++-- .../global_land_cover_example_notebook.html | 21 +- .../notebooks/lcmsViewerExampleNotebook.html | 41 +-- .../mapBiomasViewerExampleNotebook.html | 27 +- docs/build/html/overview.html | 8 +- docs/build/html/py-modindex.html | 8 +- docs/build/html/search.html | 8 +- docs/build/html/searchindex.js | 2 +- .../html/templates/examples_template.html | 8 +- .../html/templates/info/geeViz.examples.html | 8 +- .../notebooks/CCDCVizNotebook.ipynb | 3 +- .../notebooks/areaChart_examples.ipynb | 336 +++++++++++++----- .../dynamicWorldExampleNotebook.ipynb | 4 +- .../notebooks/gee2PandasExample.ipynb | 64 ++-- .../notebooks/geeViewExampleNotebook.ipynb | 90 ++--- ...geeViewVSFoliumViewerExampleNotebook.ipynb | 271 +++++++------- .../geeViz_geeMap_comparison_tutorial.ipynb | 167 ++++----- .../notebooks/getLandsatWrapperNotebook.ipynb | 45 +-- .../global_land_cover_example_notebook.ipynb | 18 +- .../notebooks/lcmsViewerExampleNotebook.ipynb | 40 ++- .../mapBiomasViewerExampleNotebook.ipynb | 29 +- docs/source/notebooks/CCDCVizNotebook.ipynb | 3 +- .../source/notebooks/areaChart_examples.ipynb | 336 +++++++++++++----- .../dynamicWorldExampleNotebook.ipynb | 4 +- docs/source/notebooks/gee2PandasExample.ipynb | 64 ++-- .../notebooks/geeViewExampleNotebook.ipynb | 90 ++--- ...geeViewVSFoliumViewerExampleNotebook.ipynb | 271 +++++++------- .../geeViz_geeMap_comparison_tutorial.ipynb | 167 ++++----- .../notebooks/getLandsatWrapperNotebook.ipynb | 45 +-- .../global_land_cover_example_notebook.ipynb | 18 +- .../notebooks/lcmsViewerExampleNotebook.ipynb | 40 ++- .../mapBiomasViewerExampleNotebook.ipynb | 29 +- examples/CCDCVizNotebook.ipynb | 3 +- examples/__init__.py | 2 +- examples/areaChart_examples.ipynb | 336 +++++++++++++----- examples/dynamicWorldExampleNotebook.ipynb | 4 +- examples/gee2PandasExample.ipynb | 64 ++-- examples/geeViewExampleNotebook.ipynb | 90 ++--- ...geeViewVSFoliumViewerExampleNotebook.ipynb | 271 +++++++------- .../geeViz_geeMap_comparison_tutorial.ipynb | 167 ++++----- examples/getLandsatWrapperNotebook.ipynb | 45 +-- .../global_land_cover_example_notebook.ipynb | 18 +- examples/lcmsViewerExampleNotebook.ipynb | 40 ++- examples/mapBiomasViewerExampleNotebook.ipynb | 29 +- examples/taskTrackerExample.py | 14 +- examples/timeLapseExample.py | 166 ++++----- geeView.py | 68 +++- geeView/index.html | 3 +- geeView/src/js/lcms-viewer.min.js | 146 ++++---- geeView/src/styles/style.min.css | 75 +++- release-notes.md | 14 + taskManagerLib.py | 53 +-- 108 files changed, 3464 insertions(+), 2595 deletions(-) diff --git a/__init__.py b/__init__.py index 50a5bab..c8ecce9 100644 --- a/__init__.py +++ b/__init__.py @@ -2,4 +2,4 @@ __email__ = "ian.housman@gmail.com" # Version format yyyy.m.n -__version__ = "2024.11.2" +__version__ = "2024.11.3" diff --git a/docs/build/doctrees/environment.pickle b/docs/build/doctrees/environment.pickle index 6826b10b43a4964f9b1bfad6e6eb222754a02900..e0bffb0d0e740de6d08e454bd7bce15cb9fbcbaf 100644 GIT binary patch delta 389533 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

  • !Klu~zSp6o+@gnvDK7qv^FURMR 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 diff --git a/docs/build/doctrees/modules.doctree b/docs/build/doctrees/modules.doctree index c1d2d2ff505cbfe80f11dbbf1736d3b6d556aa42..4332e221d6d71b554daeb189fd569e2d019e3388 100644 GIT binary patch delta 176406 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 delta 150541 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

    eU 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 diff --git a/docs/build/doctrees/notebooks/CCDCVizNotebook.doctree b/docs/build/doctrees/notebooks/CCDCVizNotebook.doctree index fac80a7d8f9f771a78817a93d79ae607804e982f..c69579a0038a1a52a7e9cedf6f24b8067649e2cd 100644 GIT binary patch delta 3895 zcmb_feQ;A%7Vmv|X$<{LQ`(ZGF|F7ptx0KZX)Rz8P_YA!e9NHLw0-vFP1}?-0qTqt zc1CxjS!6v=u(oT_6%|2CdE>~(0LuzGvop?u;2*B8z~cBdJG(GDJLArdy64{aUiz9e z>_7X@?S1E-^EL<>;!~Ei%rzg$l3So)e0oScO1ng^vTYNj^r(~~a ze)utxm9?p2Q%@)=#yTJMiqYu6U~64nsIMn5D29aI?!iDPT-O=w?h)$zgMx5-!@R+8 zEYc+m`nQUqsL<9M?g=ka!>f9OokH)@aBn!WsHv&RHwCAj2fD(2bv=UM&&N$)tUnYT zqK{jkq{yG|^UN~vfX{7}u&1cRgdn&VAMnYdE2TEahTkgC>HrB?dt=6ffbS}MdVVQz@Xmtim z7kze#rdX#~k|49>r)72EPDwuz%O4co55_vB3Ur;ZjZ(GYM7ozE(*D`(b1YIlJ|$Z8 zDK*H_ooHY_QX}r3lBN07@DMI~(bM=X)oZp$i_j+_(jk}3Tndl{rSOnF7u9ka$!}QDM0J}jEr<~+@dndQI^e>BVi@y&%YUSC%P+um zOUATxXO-XkHW2<(^)TRDmOL=vscQ?jSC1`9{f1u^OW`Kqcp~upMoy<*${x+ zG%jg2eBDfu;8uJaVW)IN8EvXEadQ~H3Gv}-%kA)eQGvCT!(Kb3VtTT)jL~#THfnUQ zRN0~!)hX1h@xh6^?&q4OP%2w}DnGsfL*O2(3$Corh25<-YZ40HZoN;RNwWT*aav{M z0PWG7cai&yJz_pbs1JD`;tQJ7P|o6HzvUw|HC5a<3-d@=`PafA$L~;Wft>E|wT_25 zIODU!8*Lx(yR<_XU2OG)@j(|`S`)q6kgqI0W#L}qv?13^cKC9+g&XJKMxa!kbk+1p zw?}LwOUpcF$iQa(_yaHU~pvLJ&T2FQ05 zJ)0G=7|yJ5p%}Cp_^&Zc6GWb4MMg-NZ1tB*YmMhqxlou#k@P^Rsub6Br6eh#+nDO6 zi=}8?vt51Vj80*AWZf6!HmKO*hbPt-a2^wr#Ix&9l6o}O!_bBt-8i!0AZeqNzZD3WjwpNj+A{H9XVXkl+=)ed(4zsKQDA7vu-j?AuAoiE}lFIe-EW= z$I-ae;F+co)N-0l(~WXov=R7QUl-L4g7VhpQOjTbDW%X5`HoIy!!kn zi$AaZticynyZ{Iq@Ck&Are>8;5#3{{&SCLY9@Xsc0wgFZZ&+HjKSw&`8 zJTX7@;wdmQ)#%ixspj*EV)-$%SPWiQ zr-@~BGAR~=&mr`&D?dygAY@#5O&KRdR+hZy=gB1)I5wYr0&gC3lZ)`-u}bn4TFQVN z_n@`%coTntR&e;(Y;p}YAFmmf@KNfa%Ngvpbc!y$_@R|TbScM+M{>~R3%YzpmjgI7 z=?%Jc(y$I(VhL-1uuq5%4X}Tjyb?u?GsHMUi!-D+Ly0qlIE#+o7ZWS+zgfmW%vICl gM@>tAmhM=3`U6Z&@1Y!6dU`9e^wJ^a@e>01FI@DY9RL6T delta 3167 zcmb`JdrVVT9LN2g77;0dudVs*&jXWJ@@zf z{(kp-zW1Da^eH*^4+;AyY||mn7h%WLMlNEVqRzI&jqcP{?iKD7E^OV6+?xDcn~|%l zoS$dHf+3v6WNfh2EvRhBGgZ{s>MHFGru^K6)eDTaDmpc#rqXU)Xg3xuuCmQF8SCrj ziCHE*K2&R@fun5nSCc>3&4tf)bK3t?UMrXX#LXUn)AMRfvKY}}jf;8-1`ObmxD3uv zk~$JQ)yr{8xgMjn6~qE~zAyvl6ezJ(8v&WPN1F;0Fs4H<+|_;)1Fut!G`x^vgx63V z8;6mp`H2Ng%}_GNAxi4`LUx_VDI9ZomYImFQj=jG?nvcej+itotso{O32W1wA+wou zR)bOLH_2vyV}mC)ONCGvlTij_C%ZKo51S)YC@*cv)<~`Qnv)dpHElf|rejpLjvNHs zu`3Q{VpW-8cm+*zaOu3%(zNd-`3|{Q@A@R+vgN*#oCo|dD`}ve-sBhKy{trNV3Mjc z@@QH*b^@L7d50UwAoJ0%ajJlSjO)fzG|JTfFAc-Q*>gVdj1*TQlZ1?8z z0&mfY@nFTsi5Dq{bA^`J`M0Enw-T9w0u;-Oz6~dKf(A<(#aQdsMAXH=0BY<-BtY|( ziay;Iiy_SFdY+TZGM<;-+@yq0aq&CGzBsA0Mv`7F&v_=*j;WUw(9DFwMPJ+p?Aj7P zv>%LHaa3ux>505YJ-?Y1G5A~cvpiKg84deRXf*%nT z#J$sV^hWt)K%TC|YJ@T!h;;RR>H3>s>m^3{@UAV()`iq$-@GDV~jeBej84b)-V(CWig51+_|;gsQqw>`YfxBu{uIbM_`rS=cSC zw7*MW7E^l>`*Ip&pl`75Wj@FNrL3Z%*w?gVfQk5B?Hd%gUs`SeaRq7>^tDcl56178 z!vbM+Vvr4dMJV7R1$H&Yd3}%=c>WsFu+Q)Gcd=>+Cvik1R2WjAW0z zJ2q z(HFU61m4*avNM=iT|=?2W&h65xpfd;D9yyqtwW$Npe{2=0^M;fjT!2ooxz0FjUhXO zPo7#rjh&6s&JgSfS=58Rjwo*OJ3E#FmcakP`u^uIhw5<2gR~Q0Q&{KtX;JrR3ye`#BS? zvZ$nfH-;;$o}t*+v&4Tbc_b5-LD#S*;UNPb69oQ>5_5#?;4{G|Ov#@JkPki+WKr#6 zly55-dcY4}7ULA&Ki~nd3;Hj&1I!T)e`QvZ)-Z}lyU~*jEok%@U^^CgOk}?}i%UJj z=ya239Bjk$9v$q%Tb{I)Sz+`OYb+Z!(DRc2j14*TfZ)fm;U*idvtc)Vi}}yl;GoOJ z*Rdg!rKQusu`a@HtFCNVT2ooizTJk-QqMA!oa)~M~QNbl=CHw~qpc^k(%Cx8_x+ibl~sjD7kYYzyE_e|i&*q-Hb25;-*tlTnRzY*UYJBp#ZdTQTeyo?W z%1lL5m7Qv_s8)2)Lb;IXnO*IOsOgyYhfX-H&z4nCW}W0-ZCp$^P02moc-C&gM&p@+ zUeZoBs!6pGQZ1{ZC#x1}qn19cr%h_rbE$%Ans|us7fNc8e|tV%Ez2KCHFZ$YGL)v; zc+OI@^y(z{O77D7YyG)TH}u=LqvPYlvEgV8pJTU|c4y`iGv%^*dud_ec2?68<$9uM zq^kwZOq5ZWn$_s>b^Z7@2sdwYf^U}$OG_HYfjNSfsdG8CVkNXAwOB^JVZB^0B~Nm1 z_c}aT%=(g6HCs{3IoI1pW!X|v zYDr0IN?Olk^i;KADVCvVs;L+1ipl%zSX0n8MK7W$a|Wnjl3*%oDa{|6igBn_@LQp_ zC_4U@@M&ok6-f^@MJpZZ6{E!Dk9Gg+-Io~SwdoticV}?8hJyS&$&j6s?XGiP7oC$1+Br@RyK}U*BdqZ( z*J~$@C%>Bwx3GKg2=yli%O~fIa=oHwbCwc|#7326XqqcV)hwzd!RJm%BoBU|J05&e z@SvHbpIOsWTFKPXO0|@R8YF3%f#$~_`^}JYU8|TFkxFbhq6|=iKKoVQ;P-~=MpY@Q zb&^mBoQ47*t{J@my?K<<$`&cql!2K+S4$~PVKPT$*hLJ7ZrBAFNlPW=i`3;hiLWb_ zqGI-B^Y!bExwBCGty0Nv9bSIlgSNIq*{v#u+P<{< z1g6l}8~s7~)TU|erC7`ppK329-<`9p^7P0^tyUXWnRE;rmF!4?%Z@p+wmi46v9l0{ zga|?ICW|EbZ@GJ;^F&2co6?r#{U}zG*GgEAm`X*vSJf*J@nl_5%aFvBnuL57)S7~M z2@4Ai@33%y^wlbud`j6N#WXTj4O3bujfDwcj=6`3Eldhz-JJk~1Vg%SW=C1x=~HHB zc9wUBLVL@*S2nNhDtj~A+cO)x%L_Zo=C(4oxiP=IyS%x9UyI7j#tmh4d1HP^(J&ce z9BN193egS%bs9WcdN{PB(eQGH4x3f!w^`OwI@UjEQ7K!+OsQmPNmC;2U)Cx`-K62m z^n0kF7j;Xe3D$Itc)K~na*&+^>s+$_-?_WhKgj$q7u+0`TB#$;F}@koF}iKGcUik@ zq+L0$4m&#ubLY_2XRrOzDMBKLtEcNu*D!tUhie+c_12rWvXK62^3DM18xsmgFJ_0$ zoURqp*jE@MNj06-M#841eOD~P_abJvmczc`a|I)7T;|z7TTqi)0gD);a(QfQY)}@* z-w$Ix8o_!pjK9TdNw@0s>rg))NfwOcNKrMh_#Y8#tF~L5K_%3J;*^2fhcR|FwUWvW zXAL7;&{&PMd$Y_DmLSYpGHf1ZUDUPD%IR*V87ty0X|_i=_Egv>(sB_SXtAlzU1&VZ zYvM{Adtf-j3@c0ke^kPe;VKJpX4vlgU{fjiOu=f@bolJ z=U+sk#=+?Xotuca<^AdU$q^v2PR1}v86{emY8Ce=;NVey1Z@+2g(0GU^xYP`f! z0)bO8SE>M!TM*)av%{iG1R~xZ>$|#(oe2Yzu;VY)U5FF#y`pL{(21(F^-wb?$dF|Q z+UB5AfV$gw>Q0v>w}Jti%9hgfgLdDFiT3o3Wvt3E)BG3Oh=p6;z}_6ercS26>}1Nd z=ca)+V;V34Vq+N!U5>q^1BueM4qG=sGZx#U+Q@Vc=ruN_Y+I0*|9hB-=x%+)<;Dz3W^w__0*8kf!O>nBCpU*jTbnL+|p$$4bL-4 z;cq;A3I$l;rSTh#wn{}kRCR3E@r@5uHrD)# z(>D6P-gu~WNd7+g6kmx5{&pN<%)&P=#@C;B!Cxnnf^1Rx#UA$!4x3oermTTm{a8+?Qv{Os-x&<0wG37) zR)VC&Owa;mu|oFs0rp@hiL@K^8})8r)jG(xVC*Fxy?ZdNGkt$Bq!Wb9o)42L+Z-5F z^o(*aoY70^f&K*75B-DhgroOEe3O<@T&45kdFiwzbiGo@K0W~aXyDetun9aE8!D%~ zTai1Q09pNkR!8l31_xO+SdS8+_t_7!#U{zZEz6fx^1WKJ#Pbmm=?t=#)5G(EEd%fN zUuP3y|1@jrtxW&B$WD=-`2kUcka8I zpo3#-eIT8Y&%lyf$-?KhS|tE(3$ZmNBn0{{gj9 z$4>~&aw%hAk4s|dWT79YX9@9oprF`7AmQn4s?-ry_*ay&TK`c08YD3>$HdnDam~~q z!A@mP86M&|b&kk;YVr()P^jfFko*{8UzQpyYUYC_yrJ@*J)BS^D zT$PG6T4ZBxv9CTl?%Z(+LBc6C!Ky{kGJA(~txFcU-8DKDgap1~^APRua}iBBt$+Lk zx9=}|UDH$GOm9HFJ7Z3{+*9Btm-n6m?HW~p@=ll|O z7Ht94*{`CsOZK+KzqiY;BWruyG{244E`SncaWMG}r@R)Mi2=`UqVXJGA~|@n^IPt! zrm46~>%4eBjRSd=+Ly#fJ0v-ur4;QTWX6Gs&J?$_7Cj9=W)~Q<|7%Y_@x>h zlST#3XP5h;eSGzIxzA~7A2t1LEIC!132&p(EcfNU=JHu;+HoMqJ8zHR!)6El=Gzwk z(+%3%`5*EfhJ1=|6-Ee(v?+O;bpbCQG`TB^$c#iu`kg2q*yQsEJFMOQr}6aY*qAG= zsFm_~Dxfs3rlsGB`HR{ix7#(tq?UPV&cvr;YyS$b;M;R-iSpwO0=va zJvJJTOv&VJ>!2b%b&SePypAQ|sruXU=x4U{)77WJZ*pjjWT0954& zE7e&{y^&w`mepb*yXA#72dQ=TB%WuIlYi}WPCoK|Nq!4N3ES)b zUwpo|C3y_iFuOPg(X?BLM8>oTZD+*htKDwl^c~4A`9SRCD%GT^d=^JVzgJ;3D(m`@ zGO)8Sv#M-jA3G@P;v0ZSWHJ(ng46datt)S?FqH~aVSvp`1&iO2MWd1&xuR8){$~4Y zPR28ts4Ac0TkEaa>HC^lwF2Mn(<+>r%4DX3?9*u9H=Q1r~5k9s6~=NYNQH0HAY=yx@Bvd8<)uh;wvlJTbB#bXwf`Bn_F;JRVOBbRoPqD%D$06I8NCc2ZduuVHjzGLmtT)V_u$r4oJQXi0CS@mQcGy_E(Zn~_LwrQt`m zdn*lRo!DvK@2xa)@AOt0{>i?#(h$oV{B3QQk-*E>0{}0#k;ZEf76@)$#jBS1?N4cfAiqU$M@3?=&JzrZTcs6 zS}vLuzAX+p$;Z99+--Gjb>XkeHn$-s`GhxL(=WTN3g5GaoaB>E%I4KhD7qHK=GYi{ENSG)JJ>3kVqeu^5RtE&qLsj!nbcBkv=NWeOX_t zJsALgwhIf1^wC!GVwd64e8d;}7ZT~CE_snvy1%iVlcMmwQb?qaIs(Ab1~nM;hN2C2 zxrbD5C@Rhv=?z8q*zGt4``UmH{7KJut!~F_9z?{aI8_TCz4seg<{`tK5|}L)YqTs*`gi;ThvUp!oqo0 zD@~B8hN*o#5HyQDfCn*cLW1WJMX^BMmHvHHCKJnKT=oF5t036M#)0W;j=9}=>Tn^g z9OHrUM>8#d1<~YGI+Bu4+g8v7`!=Dzv@GG3D0`X(!+KL|rY2}P6ri#u1h@$R-h}sK z6U3}W>3;#rKONiIrh`t@2Exm?;9l5508+7Jd^Cua>~s@SyCt1$3-83UdjIvb)nkEY z_p}ujaik7=+Nx=~`XFd4xd8nA01LpgU}C@9sobEL*uVA`aw;a4I45UD*YH*pzWi{o zuVyI2SyT`XLCXjS?`jEO*i$#04rxW;U|bGl(LB8?3ZKv&T+0hni2W3ss)4<*$=SiO zY;3C4JgX>NRvr8bcvQOy((wr7p*Z$?tgbwCR?AWPEWqB=wrLNzr+pe#oOMs@8>bIz zPaC3jB8%bRY--()B)i@Uz^+Gq^2@uc{p+FLuJ%K?t99*(_&#E@44=Fjx#>)^ko+uQ z8aANz!y!Z=L7+(%5(;tBhlhv#8--H!szC5_iIZ`)Al^p1U5LtC^_6>;HHFrBa&HKKq@5PEr?Nr64SJK zk2lGT4X87?U;t$VR$EY$&ZILbS0md~ zLy0_4O zrN#oHa@i)fFzG>mwxA|CnV!-D;nq!hc*-@e*#o?Y0Zy?&rP#Eg4Ia*|^zb+oU$O;n zASA8*X6%h#Z>9R7L^PXJL2sqX2U>5XYD2qCDzdjywK>yUskYl{^;W9wIMZ9HD!r8| zN9rj&P;aFQSm(S}suK8}3;_I|#hNwNsobE}teCfuQ>|G)4bLZ%m|z~>T(-n#YkzO@ z$L)HZ2QOKMK{^&N^3LrVN`!AO0}mbBSPZl{;8IWw5T!8G&#{`tK#QxCVBj4}VQ`&e zPm94&=PD%_>ITaogSH$?8?N`1r38h`U_|1j2p{q|_|i4bMV{z{Y&jm~ql~*<0#u5^ zAt}edd=%X68d-v+kYP!VxA`cz+chMF7BLXW@jV{{EnP!7uy8W)#_>d-0AIR>U?49H zbaDLBCs9h*&r%} zo)x||YrEoEvzACo1K`b+z!< z_RxJPnksw*{t``fJ{q?Of3=Uo0m5JBqw;g`*ZVMC8vJ!VOpgVBT@TA4!C%kA@-^_+ z^U%Er{1rYdM}ek#9;OR`zp{sjoBFGIWafK+#b>qD_f{~Eo2A|_IlUDO+3;JON(%1r z>1QcNise&$YwczFVCHgJ0rx`atzgKK;X8YK2B%CvUwbPUk4IofZ%IGzdMlXd8JrmX zT02H0Yg8TVS9|DHh!J##+kk{U^=0E$y;0 zakGUMwuojEtewGS{gkIMS{g4XgDbVi;))E-hE;cJzh$+h4b@YF&yL!)xwNIB!EQAB z<9Fk4X#{m=@Eb&1+B@AD=)2qg36h#koBj-LTW3q7fXL9wnu&gBHdu-b&R>@W6B(Lq zlTJc>@!Kg|njzg8{6@*H0eru4u{W0JG_h;s^~Mqo-Soy14Z72;_s&?7^Xyl>Q`y6? zd;J8eIIG>uH`AV<-OF22{s0jJI^0xQ#%m{bmn-U)ys6Sxp4GX$I$k$IDXmaQ;DUJV z=w$WjMo2r-Qi+sNEm`#QCHA(cSt?zKcyhnhEi}0obDzpRT}|d*5LdS3o+Z=VK<*>r zLF1#ds;Q^={dTx36Bk34vbLi}>vvK%euHEK734m>k-N0fsSClI+$%VkzWrx!va)V<2xzLZ*`8x2{9_f79ss@mNl#zw{-&f27=fPFYpWf?98BLA>5bExVC zc0VVMS;0Ni(s6omfcl~Yzav~jKj;*}4rQSP)U8y@_T}vq$0=nL47(!+a<4aDaM5=n zdHElFyv+Y1hK3^$A8pYP(X}n#$%3DR*JNPf&3_ZMg5}pmKMArRzppnAzfG)@jS=LC zk?7Sne&HdBb6WBzj_{l=aZaW{68FQ`*v**;45r*&SIfgVqFvf7%~UPJ5j_agz~EiQ z9rKl!*VpfYqwSv>>5bvxFE0TzE|CY`2{4Xa$Xqe@Z=P3mfSkmpmf$Wo2H==p`-f z7fYPpR7f02WkMp;dL~1W5iF-loPmY@JJg*y2I2=z$D|Jt5{8u`?6(J3jtfpPpwVHBmS;5_MT1C0LYZwJn3BSW;v4N}<{DRT@arZwg5lBr{3BpiqYeZqQq@L2Y|hG$~M8*(mM& z8udfuz4mRFt-wtEXbT|}OlbHwM0U1bop<7AR*r+rPiFXX;Ri?6VI z@g-NXEnvQZ7SBBQsy6;VlGjv0Q!Dr~Fc=Dj=mFMUYqU-sD5Q$!u*p=}z^(o@428rT zmRFVjJA*^-_G6ATuItDBYymga?_SjLXZMHt*XGuD6v~L3St;Y7w}Mh3m6jDyzyTIG zDR}uCYjgA7^6fUXo9X4A+k_%)L9(cp?Nu8B3aJSDpj5OBf~e#$&mQm~CSuBTLVbOEDwi7X8^kBp z2jH7u2k{GVAK=!XxkdW8cun1(UjUBagpw$(& zJ9eOgcCTg6f6ML`u~hbUj(-;hJY=Qv>XUrTzLEbOr%$^P{(wZe)@(0b@FE!A zmHjKe%0(|XJ(oT9abJNQS#R%8R}N*T34++VeWXin1#Z}zr?OQvH9$()`2O>3{F8$n znj>|bP-bqeMFYXb(~wP;e|3!lmKj7k1!IJExiXDiz}rwp z6f&Rw3@JMDvhYa|VWp^+ptg8DLmoPbC; zc^?XT#ZO6a>QNB9{SahGHbL-4O!KFYXU0^%ieBhqJiD?58PEFz2!l=Q0rz0WAQ@8X zHVh>uJlDtsc&{6269F69$V?e&4S*CI?-;0ec~QI0(1*7OCBLiCVgh-Z=SVU4waM8x zed|_qYI1A{9}{B6U;8?wSQur5_xygH^+~SQ( zbNkv{=&^gtD);>@V6{{6Ucc()ixv|8z=hscI%@`uqYs$p&&4_HSS>;l=4$C-H&q zL-2jw*Y+*??9Ax?nvsI7A0`2;?JKZj0hyRqa+Xz|9vLanJ3w#NG;WcOj@T>Y5m?;; z;2}0M<-m?+IFzbkbv=E1X<^|u5+%y@L=i!v5z#wQR#OMSPU$fWYPW3{Gc)9@wzt<# ztL}5yS>&w5=<-RKSTYHV|IWp`^c zk(x>$lvYNqH6xac>U-Db_v1Ip+gGOM6H7;_+2c%k;b3$1C}|znZq6t6vgXa${#d{R3j5?RSu{yI` z+nL#3*jc=KWobXQuCFC_R+IJZQ6svZyphROwkB8BcWRO7#H72mb6`H9MZ4G`U5-w~ zW08qiWO96LYE+nNdO}8ij6ETHNJ1tTlTSTMCOJnH`WJT(YLpWi`#*QquOlw~%6(lu zP~ZL&P`M#-HsWnPLwj}SH$AWEX)AZRFB*w_SD)uaPQx7=*5$sj*jV|<`^v1OF86iT zlRd>1RB?G(%Q`4&RN$s{xi8{0oJaPysV58X z`$^2(-w#C=qyqayAO&`o^Nt_uT(aBD)NtQcu0vTlULtSgU-cK$Vuk5-d2jAJ29-$~Yq>#Pv zgT6|9||T?T{`*%5+BWC}$IGg)wD3nUBwfSt7<|8-_q zC&!p94GlWvgZu9+GSoBkJoEG8UPXtxsV56?eV>8L`;bzEcRcwHz~WU@%R@?8<;F#F ze^#+EPZc1C*JmS zqFuj`h!06?q}=>;H`1FU9r6_^x?k@?Zd}=<+<4W$d#t#DZkPIzdb`Ei;B=t-w;wgo z-A?1(|2BZ$r_%CB0q|hdoDmG~^|S5G@1A8Hnfnm*Ggn|(oc;r-pmPDtzy8AvF#pvy zDy>VvoR!7_^IvgFY^kz(fcYZ@%;${p*@?t>G^x&NW;J8&kLksOxpXp{zZy%;=kl4o zTJ313P>K}x5}Aqp%<^tFy`%46uZ*uuBnmUfiSgvb!qxD;Hnuxgp50#^-M*IBQ&*R2 zxzWn{=K8j_aAW@Fe9mGICgV$Y$39=f1vI~ z!-wizet&MPy1AXadUbnzKT#=OoZJXI3fO#}B z8H>kzfcYb{$~?|OCYP4~oD|=s6`>0K8_fp>%x#VR&pPYZ4+~)a_{!8H07>oZXFn*$ zlb$Sa3)e#i%>O8m0y_&}{s)~)c5j3`0p`E&FQ&x`^9+D_CX*bSilw^*%w;Y)1-$rN zkSXBofVn*dTtqeg>7^|XeSmor58GoB9RYJO&0$X>XC!Y~T>|E=66GGkS7O(I`9&{a zexV~^?xH{fFOq`B>$Hgv191!UeI`F*X}S(rvJ?!H<0QJ1y2H~q@)%X=(Kgy;6}ai^ zVXsx-MYq$SkRk6wDJ)4}Q61rPad_b8q`U}H81^5MT@jetmhq|VBLpqqN!qRRq=6t@4~`nq8N(8cAT<>cfh-)srWir^ONI_IX<$rYi0Q?$VKS2lm4pFTRSO6W z1mDC0OH3JAn5!gou}Q~{`ens91yr$ym1QcI%Caey2fC^zKVl^G!VHutTr?{dR}l8F zmm~K#-@ncN*5`lX3=MaUwjc8i3a@VXxUCz!91=>R&08tRU-K2-Q6h!5_<5-<1abCJ zBd(5zJ5VpD>UM{OU8R4?5&4dEv614+7HFjW`Z7NZ7fjT+XfmsBN#mgdJsHbJxmtiF z*xL;}^pqKk)_?w^T6%uqv6rH zbHrE)l2i_y-#X70C+rrJDt##OA?X&J4nA|ay6G3Y7>}-OfyU!6h}ppQQOBZDghCZ@ z=fvc~Cl>qcJgw)Lqdu+c6dE`Pp_;9zJS2kI zogHUINM%~C*Dwd7FA9c%!?|o0l+o|f3I(R6YT58}d}uzn4Up3DAG(ohW_tgI9K?Up zg><;G1(J@xE)Ox&QbYzUp@0l!=lCymWzj%%1*}uxfo@05WS)1l3_@4RRZy9Fp08}0 zBbwYL9}t!nkr7E0JlfvbsWdG_?mSdFU25+mxUSQ^C-kcGSDRvq2rbv*jqLvK@D&R!au!xvqI$OOvi*SDApTZN1FiOnZNG>C2G&mZRU=*(4yunGBK85}) z;P?>_w8X*;(JEiTiGH31OZyBd*Z@S(h~*ItC_)ip3vp1!j@_&bz*i9|Xw0WnYzo+b z#RGeiz^Q0cqv20MQaq8Md=7eSWu>WDPZ6bZ!Sp|VSQzITRI9#`;8hJTc{nW8g72x6 z`W;_kfmFgbrAiRQFqN?X(E3vnEGi5>OkLDo>0+3=vdLlEetYBg9&_#LB|O&xC_mkM z?EBB+J(k#3Yl*FjkyMjn)~Gajx^N-hB`Y_ldZk(!omPp26ZCdw0H~o8!@tlr{3n9a=#d__&V|eJ;*ezxt1vGuCk%4bi1D7AuWAW7V7zTWSE0GuBr+onB^RP#jYB!v=P= z(w1X`#@ku)@iEmq`s^Hip3Bb|t802;Y3=6XSZ#STsaK-q@%@?Qy_NOx{CdSmFHIh& zRfF*lsFzZS*LeiYM=l-kdsEt<<9F{pGNJeKT@BRu0e4UMX!R$MkE* zS+hJ9Kc1V7FB|)7GZV`PyUW~@YiHea^m%T5^^}xuWBf z(Xm)G8g)FmdJ_7+KAitJOQ>8UeuY%-r4^xs{hP7}b_28LiZ6H8>>nC8u*X*G_1wVx z!9N~f{qhK8K`OBSCXfO_7w2O8(0$$+k*=o-N3{&hux5zk-TMf=?3O1QSM%R zC3fuw_JY?9?AeZPU@i(If+8tsyafx688$Lu?r!9bwjZ{=v1HJFmYhrp!aK<^y1JaV z{6Y9#URFUI#6HO!7^u7rqZD>Pk9oS~(8jhqC6S{0=Onsaxr6<~KXcr{{>;t{JTAC9 z*#4V?BwnOu}tJ0~aA#e5SQPVSlZuyfU zS};pXsCEg)Lw7S!c?#hPfU*zViVTfKh7h;r&fwia2`Z1BiB&EH_qB`O9`+)*ueuw` zcq-(l#TzL$pY#>#Rd{Zte9Crmy)33Z(P@iPZU`LDl5x9qh{XC8wu4R>=JJT-gG3aCx)LFUTy^ zrN5{h{2uEBcKa?oLJGJNm^p61zRedJ3&Q&AEI@F_hn~g#nB?Cfa@rmtEczKYOp9)K z^cBl~{AM@($oz7COLpSl>!LSY*@E=O{!Q+CpyQGhn{$r)7TN5@Vvf!YF!vjn?)kw0 zmrpUC$ty@R6{E<^{m1MQRB_|2U6Aw{cB*j|L^YDnb6TyyNlQC~k0s)CvMXEg1~MWH zp5#)%$w1HN5M!`FaR!-RH2fN{z(p)+ICOW$o}cr86X=nhf_%5%9UP0cGe?UzBB|BUYrD0jtFU;F6=t@KnatJ9Vsthfxsfks3kPdgi?z*}dq!q)#Y)d+ z@@w1sW3%JYdc~;i?kpwdBh|@xDs4uMo!s2b?d|B~o?0&HnTf;YE5|b{HxDLn7Gu|T z>f^X@$>6r_wAZ$sk6bfGcVn}K$*FAQo{^p0zcL;mtT$}iv5AT3)VO2Y?#W9RVc;KU zd65f>P>5NYg@W?$cpuo(Z0phIs2V`RfN`3w$}JZHThM*Zr3fFCAQO+TOg#eY;s-3? zNKY0XNx+fM1X5sUu{3|GbIERlM5llw-{~)=g$6v6rFnEzjYPW%IKnK=BA1*3CjA6@ zF|h}>G}}|a7^?A4FKv0~votsHu>DT7qor9)b6DBS8Od8#mzHK%iE?G{E3s=!^GjY! zbH~fvS6mdx?Y5+#@ks{zz^ofC!K@3ki21UI$tdayI^v{)IZ>u!rqkxYBhp+O#IF1b zcDogJYH^vaNq5d8Ha(XjSs{_^%7Xmwm$6^tJ1oP_+?55n@tp!ehgZMBPYH1ou0wB! z6q52E?uv4X4gCK|%74J2+&cu_!$jB}T-iSFWb0se*j{!*jpW$fuKX-jQ7@NjLctZB8LPt~g-cw2Hvur=E<$UF0Ce(n{1$cJ|q>9Vj!EtEr}r)61@ttOo2ujF$OU9?k3o1PTVC66|DajhB356>HuSk^#a{1anUK% z)gAx4uRFYb_;MdYuZ@BFJ`rOM3tG zJn8*tEAGp>MB9Q(n~O33vcuF+cThFao59$@_6030H-NDBAV zSMUYafYWa-ougSJ;Qh1W_@^iAJJl#6E3gxz!zQi*N?8N9`YD}r#qKaJw}g8h-da2v zn~w0nGUoLZa}KD~2L=am;M5)g;(`~10&$L!dJif}LX>rs?mEfJB2EpI3aPXt$C)I9 zHR-S-K}M*9;~%KI-J(NrChUPZefW)%M7?hxK|li4v{pJlxmr;PR~kz zg0!5OaB4}g#ahtLYDKJ)hbD z)V%q^Ihk~yy2nhqmrx!zMR?Z_U7B=RX&i8P!zr=lWagQc`pt#K32Q!FT^+w!3a`!W#}?MtGvV#n z^`+I7>eOC(rnGlYTih^@?!~T5)OWB&Fj|8wfV#N_Vw}f)v=q) zMmif`OeB-3t z>Z#XZM8~H_V^i@dc^yViia+qTpg+!1EVoV5q`EJy2xacKPdu>s+n#eKI?oWzCh-sE z1=WwQO!ds){)5&%S$HJo@6A98>@4Q*waz8GZBm`g-^>1DTC9<~HGjt<QNbVq%LZgvfX0qg0UQGjKTPTdjyLvG(Tj4r_AGvt&4{B;uGu8ifc z{kUT+|0z3jv$4FrEqPxD>vs(F2i*zGqtKEyk=d0gP%)YL*<+xkWTzx6LJ`6FnXwKh zPWYw5NBkh7I0|JSpE%TydAwY*3*w9l8A*|!2jHWyxj6ZxmtgF49+FJ3fS$P2o+5BE zCj(AQi9kV|qT(3dkfK>BH;fK|cF1FPwP1_|y%nvLwhz)U>9O;`63gu-)E*uav`tfZ zXkKx`uQ_^en`3>MiiX>iOR4%5-LwqEh%OEcB1qhGcTRA|=3bBKT`~PzpZ^-2QDS3q zivlp4cryL&w?6+>`|Jn(be(H$&3rk`zR}e%BhQYH$zk?$&M@=NF76pXcy_q5{p|qR z+!hvBRynX+Ot`08SpFq&Dh5!yO)P0GgW+PW8>Y3bQH%jF7w1?8Qn(i!Mv1{`cFKlQ z)ezqtI&MHOX6>i68md>6%L-UNk8rs3Y8ZtL^qFK)oVU(u-llOOKAjGDJVbzhMk*sNjKHeXQ&|zPHsfl!>;k zng@(L?cM-umoF7rMx_p?ltap`7R_*#4&<6huv?HChBh3qd4yL*hoOtAX|3Vjk{f6_ zc-4y8g;dd$mLA>%WafzvqEsB*_Zh-kmp!Ds%j2a+rzXejkg2gqEI!ol9AUcEm%%@6 ztZzu6ZxhKB`=)8}sVM)J8Xe8>Z&OpTDf*_RCL+;M`j$$KrXsPvJAsc*wK|a1a!B4s z=_G*)7eR$srV!5*VjAjpMNsX+y3!MPjK`k9KL!HNr!=gW{|RQ7b2%*6_bbe@@{iig zR$W?FSZUm{@|#YHEhjOLWo5X@veI5l^sE_o*!J%1=FOSOgV^ZA)!j*L zrj&{=%#Yuk%Z$!VZj^6U%%#Xg#8}uKUBH>R6>~jSM8w$mj9TBFHILSlnZ2tEwY~81 z@zn0@adBb|&W@Gq`OV#hbouD`YQb2%wzQeOnwsR+jGN0IYsTz7E1O=*)W>g5#Pn

    l5gX2TKivx6zv*gHa!M`IFb!kN?EkDHbz!n5s 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 EKcXduB>(^b literal 121092 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 diff --git a/docs/build/doctrees/notebooks/dynamicWorldExampleNotebook.doctree b/docs/build/doctrees/notebooks/dynamicWorldExampleNotebook.doctree index aa33e919d79d70aad3c942d751ce650f36846c02..a2ddfd465b4091899686f4ef76824f4bc52dd4b3 100644 GIT binary patch delta 3684 zcmb_fdu&@*8Sgo^lQ?#oCU%@ScAd0MJLlDtj|W-!Uaqgg)}R&BKZASw{k8jQq4MHFq?gj9h*lbAphIx!xb&{9>Sm8K!SbMC#i zn>byO_~+X9JHPMsJKygdd*xdc&QrrvhOhu?XV65 z;OADjP;>CX_MBWfnRCm=tT8UlNpWd@M#@31J)Jv=RztQzNg+@OGK3=jU@1Vp$^GG% zhng34sdy-t{mlQf)m&ER4<~c-&206Ie||PJ>rYAvtSn1>IYyA;L`v?IKagD$?)$3b z&2pFQkZ-{BCtG{771)j_=!;rG>yo8$HJ#(p-WSo-VDHIJS(ggPwk)a6eJ!W3;*f<| z-n?IS?Z?HH@@)NEGczkzDrmYfZm(n;@GU#ccfyln6ko(T)8V(1IcDI77JQVnrWC{K zVWqASqB?UWGb13I)OOKQrf~Sk&Yhvqu*}?iT`R96B4>t>wV4L;wcfk?!;8(3> zxq|o0cILlSzlRzh)tq1~&;V~*hg#UD(8TuQqg<}fVy-6G)i7!)lMj}{HaOofZ4hf` zY>cJ}{3X%_FW73xDfq7Khx9BrcuW%mDV4c1Dsxu&MWd0PCNMp>4gS^mA^m}h9Mq8C zD--vA5Y45 zj1Oed4OhIIs*6eC_uf5)AuR04+k_7xWk>nWHOG)QKE-QyPC+F(iX4YaBSULLog(mj z+5*O1SBV7I$GbPyVwVSBRX0BXb@$&!*X!ebuxr#v7bx7QvmrTFh~aC3ia|a<`ZQVM z7}Mu9$L9*bqD@8rDfo4A5ypLc$TIqL)w5R=Y9G~nFT(4-mimj_iu10Wa_kb^@(q$# zxsPS74~1`pI`rHLT55Vsg<#()6apWO8G((NAT-wuoe%t+{8f~ENK1RYh&(V}=I^slx zBF+Y#LXwsl#Tk99Urz?WG3z=+tV}o=BX7z_VQ$v zLcNU?di_lf=0spwbv=k!rz$S<0Bb{BVRRjAH?P4pp|r<)!pUBJqNB*3B!Obeew@J* zj=L*NG&qI9QDNiF*VI_R z1aMR=aBJo_^d%j?F6vNd`{H#(x#S$|oDMG92EZ#V(@PxC3(h$ceOZhF_~u&3_hD-8 z9r}h?t4S3dU(+B~csXbiur@%EHC$77w5TBL5vF`@@;5jT?zSqr+qX~*bxj9v_+0gC z9fkC6b1zF7FL*B0spn28y>9qt$V~rOtSKF`3B^6a{!nk%uhI1A(NEJYdU!b8Ri#Eg z26gjR_}x)UIry!khiHEpcyoFq#O!AL!BGi64V$S=FAgf-oYj1+*dM2`O=$mN_;cib zI#EPDQHnYp-iCLsscB!bXg#O0sY$K;{d;BpR0WBFFV(r@ZW`bBm0{d?2aAXTRF&_z z^9oiliq4rzoR%DQek=8Wo@Bs#qP67W?7iDXqa}T2Rj~Dxp1*qHEgd<}Q{1DvUqq}+ zQ}@tnb-%##x(aQrr|%<+Pm&)OlPdal-%DdZ!USC5&8rk%k{GUeyPfP#u@@@B4S5FY z(oICD-EpVdOHoXqG`a6h4_Q^Ymx9jam(tG?;?FytzCh?^L;mttyYzI@fER%6Os0h# zhSrRW906ZuD~$*%9M5b)^NX25@&)*9rip~%-Au>gO>B#;@W&Jim>uDdZ{jpE;E(tC z!awkl${OeW5h-~*CjO$h8TZQwpNzm~1U8eBx8PqZ5l}WO(fDsmB^tlVL^M2)c*vT$ KXda%OB>x2oV=`#~ delta 3030 zcmb_eZA?>F80MVY3WZjnfGu7qrRboPVo^XusC=wuVX0r4Q|J6BP&~bswkxeb6h*5u z%ox_=45qS;x@NrF8i@;ZrQR;e@rwI_n`@9`>`)&=iJ*bun>RjM{j!1 z`@HY-zVCUTb1t02Q!iursQk?2iE;ThRhc5p`5l81h!_t?Mj};29{#<>XKiuliQn1R zYJhL@3~*}UraFT@;PCHp23iffd=9_U6EIj?T>X3W4mVv|?{j+eE|0#`>vnV-^aK7L z(X*+Hf|fbx&u5L0%pDQ3=>LpfloI_|gr!e-at|CerSQ|?tOa2i3G}<6u8_|mzmZZ> zLv(gyC1}*uC?ndTzJ#y>fn~_JB%I~)4F`zVvm!zskcUBH5;9RnM$E;qj_`sE@)v6$ zSlDVN(=-fSWAS(aFtSp02<~NOOLl$S{En1}^6*;V-^OX-}yO%C{F3rme2Mq$Cf&%9>bRs%0LJ zcCX_s?b0i(EG(43jpuabbSET4Cqtm8Kxl286~ayd1@Kwxm#7YI zw3+D~s!%O_W&IP`=zCrEGoQxxv;%HFX##Vb0Havo%&0C}1kHuy^8;1;F_+hV3J;0W!+(_vHd`t&TYz-Rz1`zspsY_KB}IE?JHy`1FrYz zG9P35MV<$>bUnRBnE_7cb|RDmy~v`i)Dj2Ch_abu;_ z=T<=-e9_xQ$10Kkw5Z;>#31Hx;;0x*svKHITm!lAuCq~7kXX^#6Fqx?VIrhKq7pQz zN=P7XN{F};!hJC%BmlMWUEeKCICdQ8=Mr6)KOafA1}``{@jy0`aeRP-uYDF!x^nO^ z2d6uYs;)p1xDVF5CNYQ@RWP}JT7<$`L5cTq^z1&bev`Fs=I{%9P52#-DMrQ=0}K0$ zVPbDlIw;f0m08f^?s6H6O4VV8Yi=ceLn6)VkC9eDd;fLy*OfpL%Y?Mjc6KA9%oEmDE zq0NAf=w@C*)#=alIN7FIk{v>CY#`b4R*R zD3wBzV%hvPjKYRc%?vH}LO9fx-`;{EIAl<9Lk>8|CzbT?7^3GJU0-R!w&+*d5Lv^!j^yyg^UE-0$)P z1I~enPzBv#170QJ&xXrUC0q_SEPjG|rNuXa>SXnyk7+A~581;+B`8#}M>m~5VHbP6 z&kPsoBN$eA9R1F~u#ZyF4{d?@jfp;EB7RK7js;0Mv$B9hDMe!+V^TDBv53*=`NBe~ M`n=KiPVPYe0S@n_sQ>@~ diff --git a/docs/build/doctrees/notebooks/gee2PandasExample.doctree b/docs/build/doctrees/notebooks/gee2PandasExample.doctree index f7721c57bd17c939bf1ce744ff018aa5e925d73a..709e15c3cc51c167c5148c9f3017b7f67408e874 100644 GIT binary patch delta 7679 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 b3(aD-`pYA&Ogtfy$1hgsSFWx-o<{x+L{F@I delta 4814 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 literal 43707 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 diff --git a/docs/build/doctrees/notebooks/getLandsatWrapperNotebook.doctree b/docs/build/doctrees/notebooks/getLandsatWrapperNotebook.doctree index fa0d2d770626b1bc7863ba050afe9d265f20c50a..0815c7801dea83a9e9eba7b15345598bf3b8ae72 100644 GIT binary patch delta 9657 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 Hgt`9!n*v3T delta 4541 zcmd^Dd2AbH7VkGsS~r)Ql8dCZ2aA$kZhR$nXd0R(ZF4wvj@C6Pxt!i z>VTK&)YAjOF6pLSM~q4s^5H9^c+svX&igIB=PJA(h>GFkBK%j_%PfcUeHv)YDNM(2 z;pKQO);6vvhGESr3V$rTq~TI1e1n)3-xE>y^1DMg;I~Bahxl3;ufd8x zlLLoyHWcHJh!e6WdMm=8;AL19?!+I*i-s3U=}lhDt)dp;A0=BD8PA1|{Ia|`UH>4t z{zrbLW`=8M(&T`ppkq;NADZ2(;k|;BlpcYOUsH`W#Jf2xN5bjQf(3I2vvPKH@o0sB zKB5+S_0OxRG6WqHd9cy97)~;21^C;U!EQQ%i#QA1+Llk@f58{7!u9xju})$=$eC0R z&NxpLlW|mcSOpil{{oSzH$%Qo@uY4w+7i`}C%`AInGHzITdt_Gaw1Za7~UB~4-AGecdEI-8~ z@G!3~}nd1841@tz>hG~F76f>ZWs zq=|<>NW-d<$dZ3lE$gM(6{$az;ni&(91{AE;o2Ukf8=HRwI^ zl#B0rSI+}VsC0W&x;ZM{8kKI0hVeb3jR=4< bWbfizkL;aH_oXrSqB2YFIlEBw5{v!|5DWM* diff --git a/docs/build/doctrees/notebooks/global_land_cover_example_notebook.doctree b/docs/build/doctrees/notebooks/global_land_cover_example_notebook.doctree index 68a0037059fc562d9f64e1c6fd86d1ca43512346..1c8a00375250fcd60112d8bf8b0bdb3f449db391 100644 GIT binary patch delta 5363 zcmd^Ddr(x@8TY%pD7zpcA_xo1ijweJ-Yknk6qSdNMHEnoLvex2-n|05?A~=D#)3`T z8QN_|y-Q9zCfYP=Y<0y?Xw+DpR%4UNhZ=O$5p3OG`_$Ce=ywylz{6zJ+D=__yCRU=@b*mH2a;_>;LSW3qJWAUj0c z+;p)rCP9If;P>q{Szc~Vhc}Z`c~lOzmvyiM-Kxjd&C;ht=zO_RBo0*P}4^3103akGk7D&|~c}3#=2H=7AMn?o+3W%i%uZ zw5F$@=2B;KxtxZ(h2Fgcx&qH^d>U#FE1NT;uVhzsc!|23esxsa`&xZavwkNpbB|;fDY-v+jB*H;c)34g(qDFXx%+%1PM0aCq1*qH z9!AOi-LstpYe5JD#n+N`=)omWs>=d~i$9Oair^Pvm8X6m^D;2}Vo_g_ZS+K1?ZX0R z8z}aAR73rJ%ba#I4z?%K?qHp)V;f7<^J!R&OU2u3P3euChED->`v@e66S0-Wd?F!I z0^!i`N#vWlh;A1+@oaKpUPmmboWF{J72@cEW*uLM7x*Il2(?j#w9%gUXBLFm2kktM zjWEY=QBM-lu3tj7__z4w3=hbB8FG;QFhq!*3ssB-(CA?(Ikj(L8Zck?Q{O#;seesS zG27`@*-<4fdQuHP1ZejKSR!snyb9xD>Y~leekzkY|5b8At*KPz92b3yN|ww2-nuhc#hmeT8)Su;n;z|7%4qc235XVdldLjZ$gVT_HFG9k z%kFR66FX~`$!yQ-?qkgk{F0faCZBejL(o;~3X6(MPNivHh)sVYK3A+-%6uH}+c=SO zmKKmO&J@d4uVB89rC2h&0o|AYZS``0%>DU;d8GWg75uwF@YqMbj3Wg`P?Yu62TcD4>~EPsBmXkf_IjIr8Q?S8JO!ESPG zDCrU!It!YdrSAG6eVeho%+TCxFj=a~&FoOo(6G&2#k)=Vb!LN}GnTg+)~#(R?;PCJ zGPp+AINVUTslQejbQ#*)T1)iJ#%d?GLFiuHXl!!X`+GO_6_@urzt-M7D7ZUuPcZXU zYl>X$#ca*+>Kd-qP|_;YuPLvs>8dkTnO9rd8>-rk%~cz!n`_qB)wUIxtor7H!n&

    IHXL3Lmr2=tB5Y12%E7TR8t+i`7>k>c_8LV9Z=bWk?v zLdrKl2TC;m7A%Z=jN5|Nz5x#zD-)O{VxSj|9EQ`(4*wdNAk-}v{N3w$RCo*z9s7O^ zD#p!_3F3I1mv{h|sXQI>`_TG}ki)z}HRQ(m=ZRKXhnGQTFM>9d-2IDC${d&E{ehqstV!R+5Xf!QBQ&N)xs-DnhtLG+I}3k|(~Cxy(p8OIx6{+qBv z$)qa8yo&7bLrB-BIQ5eibaIu4kmb{c5X>VDA&H8x$V!F~-^exS1oYWy_`tWz2bByM z(6zTftDXwuZDI4A8dV&AGcvTx6Avd%(etpg2!fv^+rN*_oq=v2#<~Xp4b%n|wLwF; zMh`%OhS%ZOkXTSh_)~DdnfvktL>n?OU!ZCR{%tr3Kb5Gs>Xqo(3z&L>rc~D4dSO0DwqC4sqId4p|}hAEZkwacIhC3)>KY+|(GBm;LD zawkRK`xVS%@GrhWVy6Y|;kS^2(sHUV2N5^N)Vn7QF-n3c^(uD#Q5yaP3L>VfkZ9QZ zg)50x^6sm!T)}Ks5)gSR+)bwb8%7*s4c|tsNRVNqaw?2SToRD9`duBecrt1A5Fl|V zqXfdKrLweBJ~j|O7Y<2e%Lc>mHv^XVFqYg@M2$@|A<93K27n}EW+3_YR9U@o8kD>^ zNq>UT0&Tqs(WvGi?*8~KA?iny(o>uhfS8OYan62p`zGX0$CwvU(gYY&reaKR3SyXXN6%q{eM{|Pvpj^%oyb#qr77-ZZW==P=#Eyq>cRZLDEM0G}XqF QVsm-s_S$@_?m-9q8^%6Y#sB~S delta 4338 zcmds5eN0=|73Vw~C}6&+32|@;>B4to6UV?Bpad|*!9bjnz@`))*!b}<#xu_ZvSw*F z?T=`#y5>2(la`9L)3&4wWrRvjr)JC2hJ}17W$BuvNwugNB$2u$(>it8)a>5-{2T{d zYkzdwG$bBy@9+H1IrpC5InTT?A3re{ANySFfy)!qu}!Mg2|k5~-Q^ekMbG>9_zSsM z-#<3FYc{cYoX6f@oiCnE%@>_%UHbeyf%Q1-LUn$(oAuaTLVnGrfgwj8>%>cKZo4aQ zz?D}&>|}fM^F};<)Uq-UgVwY7+g+3B=i+zzIrW!GuMVgGuAd~pX}I5`^m)iliR&Ns z46%aWr{sho=l)Dh5_gHqj|<$eYlEL# z;1<1H33n%Gk>84mKM{YEk|j1|Ru^zLF$-QJbQpb)#%#6Q9%=ls3F7CaWG#46U=6%n%|_VoH>#EY+7dI4R0EH;TR+^ zQ-EGw0JV50?GaQq52}?wyf3-w%?CLRe}r5G!^fh}kAb!}5yMC^kW0tg^wRmmQ6j$^ ziqt!ekM3e^*37SJe>sJ^e+Tn>$6AGsfvWb+gKcB&oo&X(uL*UIK5Ju}ec&6T2D78S z(mK@NFm7^rI$QacQN76`7zQ1idGFKBPW@O_uc2Z0aOL>+%JydOwn4$Dui7wV?c1QQ zbGpnG-Ik{Q#?H2;j`lKdXKRB|XlSb{Z>%!5n4Ffaj$tcjYVPmttQWd%I~v{fTbsJK z3C;HQ4MN}cT~_-@%Ru?4PS{alF7N1TX6qeYTk5QaZFSbhZKkbHHFcI-2HLyWx~kDp zePjJd+jv9Wh{@T}uzQzIUr{NmyYqi9;lcke72bTuF z68-5otTL_sq7pk5rGAz+lK0V#4`BMgT{&C7^n*lGKY=T#`fW%?Z@mq=|IY*+NOuwv z;X17i$U*B4!Be z=wfXZwkjJ+Jq%^2=N(XH(!X^zerYC>()>(z?>P)bnlG%%PXYbIx+?vPzzZLGlJk-m)5h>Cv>_n3_goq|ag>pQ`oT#kBVt(Bve1FQbQ%CJ>j~%4u7@z5Ea|zX2r-M@dRD<(b$a6ZJ6Y zZ>K>U$#C5qY-DyvF??kXij~A89j776o#@0A804^Y=ixZ>!>}B-%dUSQ8gn|U3+iiT3jIB)$({P4hFQ38XWIQeh1Tk7+E z6u!vqHt_coPyqq+3Ah80Oa% zOH@1tx-cgS2L1UsXd)_=CRC;%N-a*|Q*maJM6e^Ieiw|{*`Xz^C3K?q=^e{r%?=l9 z2=j3eBdHbi=o3sQX+DH0M;lMUJ>ZdU7B(>s1%2^Eug$_Ve2c7=rD5Hfg>;AsUgbB@ zOTPspGp3-gos#MfkQ2f0eM?jauMmdPtf1)3-UloP(5I(ibw&h3qB@w0Vt8;4N|eM9 ztF8=vHU}!$Phu)Tx-*az3asZ0T+O(+Jg}Ctumvtt{zv7&Mjr%rQGu?U1x+N&xO1=r zZbz|{RVTW0;?e1III#0Hu$Rw=#YOu;yplA#Qlz;6sf<#I1yqz`-t{1gF@?-U-msI< z_b-5|%n?jxdC5hR@%#mNLctU$AC_@$1R0yZU5Rg3!#_si2npE`CS(aANqLP@y6Z?$ zP$_o<8oLUY0Ke3wE6i6=)45U78B|74bsL(v4wX4!st$R_mr$)FH!tft zCrsDjs5L=UNZHSR1jcmoktQ7F2+V#2`vGzSU4MWHU@j>G_ijL`60*>b7GMRcT>vd) zpl8UBOtfbK^6?nOJC%6x$^w>QI!axH6|fc+E<*9%*YQ#DKO>LzxFhkU+$(R{|k77eX)(P+S+>wGZ3u zANr;4Dy_P8r(3nwM`)e?*VcB|*>$>Gsxv#SRlBsEPCKP*-I+dT>^b+95JIFgcDDcA zIXU^x_xzpjoO?g~GZmPlWRtS572LQcn?-W((2&)$cgXJcKpC|R3aAS7Hhe@4A~`6e zH8MJGx4!^xQ{$)x_Qhu>*U;ItgkIT7Yg)Y)NR!s%`N_mJa9*N-IGF|>ON*0yu@+XV z--p(KPNqV}z#-Wng?1AS_$iI=6~~9;w~FHj@eSg*E@7WIzL{VV$6Mr9ar~}4D6=(j zJ)S3?+)GS`*OHW|0Pg3h;BL}1x(0hyg{gEkt!dG%rdQHyX*K;_K(bXS<)KrTAYH8k zMathP`WB?8zCqD5cws*LB6VXb{SlVT5fqi- zdtFJ1-C-+s({}4nzq{D(EU}pTZPpTl+iJ}#FLgV;u0E^VFh<)w)=fiBn{xxVJb%b+ zu?}r<4mn*Ls;a6AgX*~di~F385}Va(NWlY#ci8SZNPdpOk20!L3U%@jKVULb56zib z608J|UF!?|EGYEP14ztbb2frY|q~p-YBFJ&8CL~^$-S0C!%lQ00 ziFwH5XYKgpedghQd%xLZb>qzX&?Y~l#rEA^x`@d{F)1;)y!m`Fm{d5Po?A#i^z9P- z2}{tz{Mh|i6AOu`C6UC3H;dOoXZeua{{=r+R5c^~BW$BZvc@Q|1~FY_Lb@I$u83na z_?OQpl%d?u=7~t8`iIcb;^w;&Ey|;mfd(v z3;E5ag)!lw5FZ^&SYW!~9c591TUZ0=!ZP?&S*@|+8D;=KNWsF5jj+acE#H)}&=?!V z&E;m)40$W=qcb2??WDeqV1H9l2JPPvzB3d|Wetuji_;91g1PN856u^%Tz>4M&L^J zNrZmSXIj3B>BsIci{)bT*Ky)!NiHac0o^)HwG)ezgz;&?0$dFqicv+X0qalpLVxfs zmblDgcn=5GYClFO4z}wx=oMI%lef|*r9F-z|9szM6i%L+p|D&wOy(36v3{tTC&av_ zg>%PiiR42Uv{_5Qs850v{R=3Uw=}FTTy^xRDbP{y*2OjOJAHbBXb_(0x21=t;on@Y zzD#nZdVSGcVT6?EI1xf8;ePIx1$w3e<*RH6nE|a{3r|!s_#iJqzJ~-qpPcyo3(LIx zw6OP?cd%W^QLRIV@p3~3k7U zl;wprX1W5I1&o|JPr-hL7H@BPUUcXzf5a6&M?A>lsZ)hfhb1`bzQIcgsqCt#&gM%Z z%7ps6__p|2#UEtU`=X1hqq^AS!Y2)O^1VB;J6?kFeuM()otcti-2*MKx_FYuxFHI4PAj@g?d`{;(K9AJo z#_CKiy`e&TU}s~UK_MYKu<2DJ&I}iIF!6Np{GQC+qh=d@C=W)O4C%P(HN6&GsFx5T z(=m~uvswvUZCuXw%edz2=y|ddG^SLlCMbS1s0531r%h6B2*#lbgZ@S9ms6&;WNMd0 zVD~9toY>2P(L-Dk=nV&hmElsfgCvbVxd@vWjLR?CWXKD*t-8>nMyG?f>I&1gEW&1t zr2<#>{ZfLyLM+6x*kr)few9jz(Tdn>zl0?%0N*5`-5=BHiL~I8qCUg#yty;sQ z9U`EM0mWGW4OGd^fM#^>yA;!hADF-ysh_peIOF)MYGg}%7 zofw##Sb&b;2S#Tu3OXTTGxO2;U{XXUL}+Q~)E_x5r@Ev|>@L?Yv*@%-qjVQmhC`>7 zBzk^#Iq!R2h8$3K;=kxFyj3PlTNHBIj^6>}Nsb(D>_D#)qf2Ty6Ie1bIWKeM2q8uz z=gb?8XewxO3FPo$z8R66m*J~#8r5MXgTyL@iYyQ z*%P>assv@+<+B~U)WPG^wbZXMDosTS{xzfN$9Kfj_Ab_~#4lHwaCRywX(p^#k>3UG zPkmoP{cWlA&HRg{@3T<)62wanJi4T&xPvsM3*SbB6TiCz`py+z-&2Vu#s*CRN^?`)qV=ReR0osH3{yJ>D>A?(8W);BDF2Ra05JW#{N#;nb|pL z-eT)%u6?n+v$mtIb6a~ueRp|_y{>t1q}pC??(c55w%56AhVeR6?O179wNcJ}j>!7| ziPQ2wiZl4NAr0CuXc7vTkXvW;3kr`;vTS}sTD*mP-mJ7e>l_BkEXvP)2R!qrpv*$U zM86#0<1rEOJP}X1Q0lR4bye71QcKX#G_j!I(<@4Ak1g-BSO&@989xibS<-F9v|WZfw@f{ zF7k&HKfJz#VY9>PIXJ?8!7O0Nx?}8`W32o!R`!^e&cR=fS%q{Gr;U7S;H*Jm3ttzPB6w2ZR0u@&Et; delta 6334 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 diff --git a/docs/build/doctrees/notebooks/mapBiomasViewerExampleNotebook.doctree b/docs/build/doctrees/notebooks/mapBiomasViewerExampleNotebook.doctree index 5300867fc6a20850afa03d78b7018ea26907120b..f58230ff278e0b3c10db48a8fd61387254fa1b34 100644 GIT binary patch delta 5542 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 diff --git a/docs/build/html/.buildinfo b/docs/build/html/.buildinfo index 10df2ea..2608de6 100644 --- a/docs/build/html/.buildinfo +++ b/docs/build/html/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: 97d5eb4ae82acf7f42be617c4a19e4bb +config: d3d6301f118789944fe2c8d99cde9f55 tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/build/html/_modules/geeViz/assetManagerLib.html b/docs/build/html/_modules/geeViz/assetManagerLib.html index 11ed7ee..f639579 100644 --- a/docs/build/html/_modules/geeViz/assetManagerLib.html +++ b/docs/build/html/_modules/geeViz/assetManagerLib.html @@ -5,7 +5,7 @@ - geeViz.assetManagerLib - geeViz "2024.11.2" docs + geeViz.assetManagerLib - geeViz "2024.11.3" docs @@ -141,7 +141,7 @@

    @@ -167,7 +167,7 @@
    - geeViz "2024.11.2" docs + geeViz "2024.11.3" docs
    + diff --git a/docs/build/html/_modules/geeViz/changeDetectionLib.html b/docs/build/html/_modules/geeViz/changeDetectionLib.html index 0f1566f..1d09258 100644 --- a/docs/build/html/_modules/geeViz/changeDetectionLib.html +++ b/docs/build/html/_modules/geeViz/changeDetectionLib.html @@ -5,7 +5,7 @@ - geeViz.changeDetectionLib - geeViz "2024.11.2" docs + geeViz.changeDetectionLib - geeViz "2024.11.3" docs @@ -141,7 +141,7 @@
    @@ -167,7 +167,7 @@
    - geeViz "2024.11.2" docs + geeViz "2024.11.3" docs @@ -2925,7 +2925,7 @@

    Source code for geeViz.changeDetectionLib

           
         
       
    -
    + diff --git a/docs/build/html/_modules/geeViz/cloudStorageManagerLib.html b/docs/build/html/_modules/geeViz/cloudStorageManagerLib.html index 5a9e875..ce84317 100644 --- a/docs/build/html/_modules/geeViz/cloudStorageManagerLib.html +++ b/docs/build/html/_modules/geeViz/cloudStorageManagerLib.html @@ -5,7 +5,7 @@ - geeViz.cloudStorageManagerLib - geeViz "2024.11.2" docs + geeViz.cloudStorageManagerLib - geeViz "2024.11.3" docs @@ -141,7 +141,7 @@
    @@ -167,7 +167,7 @@
    - geeViz "2024.11.2" docs + geeViz "2024.11.3" docs @@ -390,7 +390,7 @@

    Source code for geeViz.cloudStorageManagerLib

    -
    + diff --git a/docs/build/html/_modules/geeViz/geeView.html b/docs/build/html/_modules/geeViz/geeView.html index 20d700c..8c1fe0e 100644 --- a/docs/build/html/_modules/geeViz/geeView.html +++ b/docs/build/html/_modules/geeViz/geeView.html @@ -5,7 +5,7 @@ - geeViz.geeView - geeViz "2024.11.2" docs + geeViz.geeView - geeViz "2024.11.3" docs @@ -141,7 +141,7 @@
    @@ -167,7 +167,7 @@
    - geeViz "2024.11.2" docs + geeViz "2024.11.3" docs @@ -820,6 +820,8 @@

    Source code for geeViz.geeView

     
                         "autoViz" (bool): Whether to take image bandName_class_values, bandName_class_names, bandName_class_palette properties to visualize, create a legend (populates `classLegendDict`), and apply class names to any query functions (populates `queryDict`),
     
    +                    "includeClassValues" (bool, default True): Whether to include the numeric value of each class in the legend when `"autoViz":True`.
    +
                         "canQuery" (bool, default True): Whether a layer can be queried when visible.,
     
                         "addToLegend" (bool, default True): Whether geeViz should try to create a legend for this layer. Sometimes setting it to `False` is useful for continuous multi-band inputs.,
    @@ -861,9 +863,13 @@ 

    Source code for geeViz.geeView

     
                                 "sankey" (bool, default False): Whether to create Sankey charts - only available for thematic (discrete) inputs that have a `system:time_start` property set for each image,
     
    -                            "sankeyTransitionPeriods" (list of lists, default None): The years to use as transition periods for sankey charts (e.g. [[1985,1987],[2000,2002],[2020,2022]]). If not provided, users can enter years in the map user interface under `Area Tools -> Transition Charting Periods`. These will automatically be used for any layers where no sankeyTransitionPeriods were provided. If years are provided, the years in the user interface will not be used for that layer.
    +                            "chartLabelMaxWidth" (int, default 40): The maximum number of characters, including spaces, allowed in a single line of a chart class label. The class name will be broken at this number of characters, including spaces, to go to the next line,
    +
    +                            "chartLabelMaxLength" (int, default 100): The maximum number of characters, including spaces, allowed in a chart class label. Any class name with more characters, including spaces, than this number will be cut off at this number of characters,
    +
    +                            "sankeyTransitionPeriods" (list of lists, default None): The years to use as transition periods for sankey charts (e.g. [[1985,1987],[2000,2002],[2020,2022]]). If not provided, users can enter years in the map user interface under `Area Tools -> Transition Charting Periods`. These will automatically be used for any layers where no sankeyTransitionPeriods were provided. If years are provided, the years in the user interface will not be used for that layer,
     
    -                            "sankeyMinPercentage" (float, default 0.5): The minimum percentage a given class has to be to be shown in the sankey chart.
    +                            "sankeyMinPercentage" (float, default 0.5): The minimum percentage a given class has to be to be shown in the sankey chart,
     
                                 "thematic" (bool): Whether input has discrete values or not. If True, it forces the reducer to `ee.Reducer.frequencyHistogram()` even if not specified and even if bandName_class_values, bandName_class_names, bandName_class_palette properties are not available,
     
    @@ -871,11 +877,17 @@ 

    Source code for geeViz.geeView

     
                                 "showGrid" (bool, default True): Whether to show the grid lines on the line or bar graph,
     
    -                            "rangeSlider" (bool,default False): Whether to include the x-axis range selector on the bottom of each graph (`https://plotly.com/javascript/range-slider/>`)
    +                            "rangeSlider" (bool,default False): Whether to include the x-axis range selector on the bottom of each graph (`https://plotly.com/javascript/range-slider/>`),
    +
    +                            "barChartMaxClasses" (int, default 20): The maximum number of classes to show for image bar charts. Will automatically only show the top `bartChartMaxClasses` in any image bar chart. Any downloaded csv table will still have all of the class counts,
    +
    +                            "minZoomSpecifiedScale" (int, default 11): The map zoom level where any lower zoom level, not including this zoom level, will multiply the spatial resolution used for the zonal stats by 2 for each lower zoom level. E.g. if the `minZoomSpecifiedScale` is 9 and the `scale` is 30, any zoom level >= 9 will compute zonal stats at 30m spatial resolution. Then, at zoom level 8, it will be 60m. Zoom level 7 will be 120m, etc,
    +
    +                            "chartPrecision" (int, default 3): Used to override the default global precision settings for a specific area charting layer. See `setQueryPrecision` for setting the global charting precision. When specified, for this specific area charting layer, will show the larger of `chartPrecision` decimal places or ceiling(`chartDecimalProportion` * total decimal places). E.g. if the number is 1.12345678, 0.25 of 8 decimal places is 2, so 3 will be used and yield 1.123,
     
    -                            "barChartMaxClasses" (int, default 20): The maximum number of classes to show for image bar charts. Will automatically only show the top `bartChartMaxClasses` in any image bar chart. Any downloaded csv table will still have all of the class counts.
    +                            "chartDecimalProportion" (float, default 0.25): Used to override the default global precision settings for a specific area charting layer. See `setQueryPrecision` for setting the global charting precision. When specified, for this specific area charting layer, will show the larger of `chartPrecision` decimal places or `chartDecimalProportion` * total decimal places. E.g. if the number is 1.1234567891234, ceiling(0.25 of 13) decimal places is 4, so 4 will be used and yield 1.1235,
     
    -                            "minZoomSpecifiedScale" (int, default 11): The map zoom level where any lower zoom level, not including this zoom level, will multiply the spatial resolution used for the zonal stats by 2 for each lower zoom level. E.g. if the `minZoomSpecifiedScale` is 9 and the `scale` is 30, any zoom level >= 9 will compute zonal stats at 30m spatial resolution. Then, at zoom level 8, it will be 60m. Zoom level 7 will be 120m, etc.
    +                            "hovermode" (str, default "closest"): The mode to show hover text in area summary charts. Options include "closest", "x", "y", "x unified", and "y unified",
                             }
     
                     }
    @@ -987,6 +999,8 @@ 

    Source code for geeViz.geeView

     
                         "autoViz" (bool): Whether to take image bandName_class_values, bandName_class_names, bandName_class_palette properties to visualize, create a legend (populates `classLegendDict`), and apply class names to any query functions (populates `queryDict`),
     
    +                    "includeClassValues" (bool, default True): Whether to include the numeric value of each class in the legend when `"autoViz":True`.
    +
                         "canQuery" (bool, default True): Whether a layer can be queried when visible.,
     
                         "addToLegend" (bool, default True): Whether geeViz should try to create a legend for this layer. Sometimes setting it to `False` is useful for continuous multi-band inputs.,
    @@ -1028,9 +1042,13 @@ 

    Source code for geeViz.geeView

     
                                 "sankey" (bool, default False): Whether to create Sankey charts - only available for thematic (discrete) inputs that have a `system:time_start` property set for each image,
     
    -                            "sankeyTransitionPeriods" (list of lists, default None): The years to use as transition periods for sankey charts (e.g. [[1985,1987],[2000,2002],[2020,2022]]). If not provided, users can enter years in the map user interface under `Area Tools -> Transition Charting Periods`. These will automatically be used for any layers where no sankeyTransitionPeriods were provided. If years are provided, the years in the user interface will not be used for that layer.
    +                            "chartLabelMaxWidth" (int, default 40): The maximum number of characters, including spaces, allowed in a single line of a chart class label. The class name will be broken at this number of characters, including spaces, to go to the next line,
    +
    +                            "chartLabelMaxLength" (int, default 100): The maximum number of characters, including spaces, allowed in a chart class label. Any class name with more characters, including spaces, than this number will be cut off at this number of characters,
    +
    +                            "sankeyTransitionPeriods" (list of lists, default None): The years to use as transition periods for sankey charts (e.g. [[1985,1987],[2000,2002],[2020,2022]]). If not provided, users can enter years in the map user interface under `Area Tools -> Transition Charting Periods`. These will automatically be used for any layers where no sankeyTransitionPeriods were provided. If years are provided, the years in the user interface will not be used for that layer,
     
    -                            "sankeyMinPercentage" (float, default 0.5): The minimum percentage a given class has to be to be shown in the sankey chart.
    +                            "sankeyMinPercentage" (float, default 0.5): The minimum percentage a given class has to be to be shown in the sankey chart,
     
                                 "thematic" (bool): Whether input has discrete values or not. If True, it forces the reducer to `ee.Reducer.frequencyHistogram()` even if not specified and even if bandName_class_values, bandName_class_names, bandName_class_palette properties are not available,
     
    @@ -1038,11 +1056,17 @@ 

    Source code for geeViz.geeView

     
                                 "showGrid" (bool, default True): Whether to show the grid lines on the line or bar graph,
     
    -                            "rangeSlider" (bool,default False): Whether to include the x-axis range selector on the bottom of each graph (`https://plotly.com/javascript/range-slider/>`)
    +                            "rangeSlider" (bool,default False): Whether to include the x-axis range selector on the bottom of each graph (`https://plotly.com/javascript/range-slider/>`),
    +
    +                            "barChartMaxClasses" (int, default 20): The maximum number of classes to show for image bar charts. Will automatically only show the top `bartChartMaxClasses` in any image bar chart. Any downloaded csv table will still have all of the class counts,
    +
    +                            "minZoomSpecifiedScale" (int, default 11): The map zoom level where any lower zoom level, not including this zoom level, will multiply the spatial resolution used for the zonal stats by 2 for each lower zoom level. E.g. if the `minZoomSpecifiedScale` is 9 and the `scale` is 30, any zoom level >= 9 will compute zonal stats at 30m spatial resolution. Then, at zoom level 8, it will be 60m. Zoom level 7 will be 120m, etc,
     
    -                            "barChartMaxClasses" (int, default 20): The maximum number of classes to show for image bar charts. Will automatically only show the top `bartChartMaxClasses` in any image bar chart. Any downloaded csv table will still have all of the class counts.
    +                            "chartPrecision" (int, default 3): Used to override the default global precision settings for a specific area charting layer. See `setQueryPrecision` for setting the global charting precision. When specified, for this specific area charting layer, will show the larger of `chartPrecision` decimal places or ceiling(`chartDecimalProportion` * total decimal places). E.g. if the number is 1.12345678, 0.25 of 8 decimal places is 2, so 3 will be used and yield 1.123,
     
    -                            "minZoomSpecifiedScale" (int, default 11): The map zoom level where any lower zoom level, not including this zoom level, will multiply the spatial resolution used for the zonal stats by 2 for each lower zoom level. E.g. if the `minZoomSpecifiedScale` is 9 and the `scale` is 30, any zoom level >= 9 will compute zonal stats at 30m spatial resolution. Then, at zoom level 8, it will be 60m. Zoom level 7 will be 120m, etc.
    +                            "chartDecimalProportion" (float, default 0.25): Used to override the default global precision settings for a specific area charting layer. See `setQueryPrecision` for setting the global charting precision. When specified, for this specific area charting layer, will show the larger of `chartPrecision` decimal places or `chartDecimalProportion` * total decimal places. E.g. if the number is 1.1234567891234, ceiling(0.25 of 13) decimal places is 4, so 4 will be used and yield 1.1235,
    +
    +                            "hovermode" (str, default "closest"): The mode to show hover text in area summary charts. Options include "closest", "x", "y", "x unified", and "y unified",
                             }
     
                     }
    @@ -1735,13 +1759,31 @@ 

    Source code for geeViz.geeView

     
                         "sankey" (bool, default False): Whether to create Sankey charts - only available for thematic (discrete) inputs that have a `system:time_start` property set for each image,
     
    -                    "sankeyTransitionPeriods" (list of lists, default None): The years to use as transition periods for sankey charts (e.g. [[1985,1987],[2000,2002],[2020,2022]]). If not provided, users can enter years in the map user interface under `Area Tools -> Transition Charting Periods`. These will automatically be used for any layers where no sankeyTransitionPeriods were provided. If years are provided, the years in the user interface will not be used for that layer.
    +                    "chartLabelMaxWidth" (int, default 40): The maximum number of characters, including spaces, allowed in a single line of a chart class label. The class name will be broken at this number of characters, including spaces, to go to the next line,
    +
    +                    "chartLabelMaxLength" (int, default 100): The maximum number of characters, including spaces, allowed in a chart class label. Any class name with more characters, including spaces, than this number will be cut off at this number of characters,
    +
    +                    "sankeyTransitionPeriods" (list of lists, default None): The years to use as transition periods for sankey charts (e.g. [[1985,1987],[2000,2002],[2020,2022]]). If not provided, users can enter years in the map user interface under `Area Tools -> Transition Charting Periods`. These will automatically be used for any layers where no sankeyTransitionPeriods were provided. If years are provided, the years in the user interface will not be used for that layer,
     
    -                    "sankeyMinPercentage" (float, default 0.5): The minimum percentage a given class has to be to be shown in the sankey chart.
    +                    "sankeyMinPercentage" (float, default 0.5): The minimum percentage a given class has to be to be shown in the sankey chart,
     
                         "thematic" (bool): Whether input has discrete values or not. If True, it forces the reducer to `ee.Reducer.frequencyHistogram()` even if not specified and even if bandName_class_values, bandName_class_names, bandName_class_palette properties are not available,
     
    -                    "palette" (list, or comma-separated strings): List of hex codes for colors for charts. This is especially useful when bandName_class_values, bandName_class_names, bandName_class_palette properties are not available, but there is a desired set of colors for each band to have on the chart.
    +                    "palette" (list, or comma-separated strings): List of hex codes for colors for charts. This is especially useful when bandName_class_values, bandName_class_names, bandName_class_palette properties are not available, but there is a desired set of colors for each band to have on the chart,
    +
    +                    "showGrid" (bool, default True): Whether to show the grid lines on the line or bar graph,
    +
    +                    "rangeSlider" (bool,default False): Whether to include the x-axis range selector on the bottom of each graph (`https://plotly.com/javascript/range-slider/>`),
    +
    +                    "barChartMaxClasses" (int, default 20): The maximum number of classes to show for image bar charts. Will automatically only show the top `bartChartMaxClasses` in any image bar chart. Any downloaded csv table will still have all of the class counts,
    +
    +                    "minZoomSpecifiedScale" (int, default 11): The map zoom level where any lower zoom level, not including this zoom level, will multiply the spatial resolution used for the zonal stats by 2 for each lower zoom level. E.g. if the `minZoomSpecifiedScale` is 9 and the `scale` is 30, any zoom level >= 9 will compute zonal stats at 30m spatial resolution. Then, at zoom level 8, it will be 60m. Zoom level 7 will be 120m, etc,
    +
    +                    "chartPrecision" (int, default 3): Used to override the default global precision settings for a specific area charting layer. See `setQueryPrecision` for setting the global charting precision. When specified, for this specific area charting layer, will show the larger of `chartPrecision` decimal places or ceiling(`chartDecimalProportion` * total decimal places). E.g. if the number is 1.12345678, 0.25 of 8 decimal places is 2, so 3 will be used and yield 1.123,
    +
    +                    "chartDecimalProportion" (float, default 0.25): Used to override the default global precision settings for a specific area charting layer. See `setQueryPrecision` for setting the global charting precision. When specified, for this specific area charting layer, will show the larger of `chartPrecision` decimal places or `chartDecimalProportion` * total decimal places. E.g. if the number is 1.1234567891234, ceiling(0.25 of 13) decimal places is 4, so 4 will be used and yield 1.1235,
    +
    +                    "hovermode" (str, default "closest"): The mode to show hover text in area summary charts. Options include "closest", "x", "y", "x unified", and "y unified",
     
                     }
                 name (str): Descriptive name for map layer that will be shown on the map UI
    @@ -2016,7 +2058,7 @@ 

    Source code for geeViz.geeView

           
         
       
    -
    +
    diff --git a/docs/build/html/_modules/geeViz/getImagesLib.html b/docs/build/html/_modules/geeViz/getImagesLib.html index 83edda7..6a88e9b 100644 --- a/docs/build/html/_modules/geeViz/getImagesLib.html +++ b/docs/build/html/_modules/geeViz/getImagesLib.html @@ -5,7 +5,7 @@ - geeViz.getImagesLib - geeViz "2024.11.2" docs + geeViz.getImagesLib - geeViz "2024.11.3" docs @@ -141,7 +141,7 @@
    @@ -167,7 +167,7 @@
    - geeViz "2024.11.2" docs + geeViz "2024.11.3" docs @@ -9033,7 +9033,7 @@

    Source code for geeViz.getImagesLib

           
         
       
    -
    +
    diff --git a/docs/build/html/_modules/index.html b/docs/build/html/_modules/index.html index 280962b..9d9fd7a 100644 --- a/docs/build/html/_modules/index.html +++ b/docs/build/html/_modules/index.html @@ -5,7 +5,7 @@ - Overview: module code - geeViz "2024.11.2" docs + Overview: module code - geeViz "2024.11.3" docs @@ -141,7 +141,7 @@
    @@ -167,7 +167,7 @@
    - geeViz "2024.11.2" docs + geeViz "2024.11.3" docs @@ -280,7 +280,7 @@

    All modules for which code is available

    -
    +
    diff --git a/docs/build/html/_sources/notebooks/CCDCVizNotebook.ipynb.txt b/docs/build/html/_sources/notebooks/CCDCVizNotebook.ipynb.txt index 46815e8..b066aac 100644 --- a/docs/build/html/_sources/notebooks/CCDCVizNotebook.ipynb.txt +++ b/docs/build/html/_sources/notebooks/CCDCVizNotebook.ipynb.txt @@ -29,7 +29,8 @@ " See the License for the specific language governing permissions and\n", " limitations under the License.\n", "\n", - "

    \"Open

    \n" + "[![github](https://img.shields.io/badge/-see%20sources-white?logo=github&labelColor=555)](https://github.com/gee-community/geeviz/blob/master/examples/CCDCVizNotebook.ipynb) \n", + "[![github](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/gee-community/geeViz/blob/master/examples/CCDCVizNotebook.ipynb)" ] }, { diff --git a/docs/build/html/_sources/notebooks/areaChart_examples.ipynb.txt b/docs/build/html/_sources/notebooks/areaChart_examples.ipynb.txt index 4406b86..3e788ed 100644 --- a/docs/build/html/_sources/notebooks/areaChart_examples.ipynb.txt +++ b/docs/build/html/_sources/notebooks/areaChart_examples.ipynb.txt @@ -26,24 +26,19 @@ "See the License for the specific language governing permissions and\n", "limitations under the License.\n", "\n", - "\n", - "

    \"Open

    \n" + "[![github](https://img.shields.io/badge/-see%20sources-white?logo=github&labelColor=555)](https://github.com/gee-community/geeviz/blob/master/examples/areaChart_examples.ipynb) \n", + "[![github](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/gee-community/geeViz/blob/master/examples/areaChart_examples.ipynb)" ] }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Initializing GEE\n", - "Cached project id file path: C:\\Users\\ihousman\\.config\\earthengine\\credentials.proj_id\n", - "Cached project id: lcms-292214\n", - "Successfully initialized\n", - "geeViz package folder: c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\geeViz\n", "done\n" ] } @@ -77,7 +72,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, "metadata": {}, "outputs": [ { @@ -560,6 +555,164 @@ }, "metadata": {}, "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Shortened NLCD class names:\n", + "landcover\n" + ] + }, + { + "data": { + "text/html": [ + "
    \n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    ValuesNamesColors
    011Open water466b9f
    112Perennial ice/snowd1def8
    221Developed, open spacedec5c5
    322Developed, low intensityd99282
    423Developed, medium intensityeb0000
    524Developed high intensityab0000
    631Barren land (rock/sand/clay)b3ac9f
    741Deciduous forest68ab5f
    842Evergreen forest1c5f2c
    943Mixed forestb5c58f
    1052Shrub/scrubccb879
    1171Grassland/herbaceousdfdfc2
    1281Pasture/haydcd939
    1382Cultivated cropsab6c28
    1490Woody wetlandsb8d9eb
    1595Emergent herbaceous wetlands6c9fb8
    \n", + "
    " + ], + "text/plain": [ + " Values Names Colors\n", + "0 11 Open water 466b9f\n", + "1 12 Perennial ice/snow d1def8\n", + "2 21 Developed, open space dec5c5\n", + "3 22 Developed, low intensity d99282\n", + "4 23 Developed, medium intensity eb0000\n", + "5 24 Developed high intensity ab0000\n", + "6 31 Barren land (rock/sand/clay) b3ac9f\n", + "7 41 Deciduous forest 68ab5f\n", + "8 42 Evergreen forest 1c5f2c\n", + "9 43 Mixed forest b5c58f\n", + "10 52 Shrub/scrub ccb879\n", + "11 71 Grassland/herbaceous dfdfc2\n", + "12 81 Pasture/hay dcd939\n", + "13 82 Cultivated crops ab6c28\n", + "14 90 Woody wetlands b8d9eb\n", + "15 95 Emergent herbaceous wetlands 6c9fb8" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ @@ -582,11 +735,23 @@ "lcms_props = lcms.first().toDictionary().getInfo()\n", "nlcd_props = nlcd.first().toDictionary().getInfo()\n", "\n", + "\n", "lcms_thematic_bandNames = lcms.select(['Change','Land_Cover','Land_Use']).first().bandNames().getInfo()\n", "\n", "nlcd_landcover_bandNames = ['landcover']\n", + "\n", "get_props_dataFrames(lcms_props,lcms_thematic_bandNames)\n", - "get_props_dataFrames(nlcd_props,nlcd_landcover_bandNames)" + "get_props_dataFrames(nlcd_props,nlcd_landcover_bandNames)\n", + "\n", + "\n", + "# Shorten NLCD class names for later use\n", + "nlcd_class_names_key = f'{nlcd_landcover_bandNames[0]}_class_names'\n", + "nlcd_class_names_shortened = [nm.split(':')[0] for nm in nlcd_props[nlcd_class_names_key]]\n", + "nlcd_props_shortened_names = nlcd_props\n", + "nlcd_props_shortened_names[nlcd_class_names_key] = nlcd_class_names_shortened\n", + "\n", + "print('Shortened NLCD class names:')\n", + "get_props_dataFrames(nlcd_props_shortened_names,nlcd_landcover_bandNames)" ] }, { @@ -606,7 +771,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -616,32 +781,8 @@ "Adding layer: LCMS Land Cover\n", "Adding layer: NLCD Land Cover\n", "Starting webmap\n", - "Using default refresh token for geeView\n", - "Local web server at: http://localhost:8001/geeView/ already serving.\n", - "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZCy74lFqH2vRSdWO9AxdxhsWLoXMyaXKztQ6KCGiMsZtDbVRqjjy3sVc_QHU5SYzbIoRtbDGoSYdacixwNzYHFisGaIYahCPHGrVTl_DyFOMtEgR6jIPu9eyBSuapjLr2z8eQ24tJrFO9W4_1yUNBIoOIPyfp-M1MTIQcsaCgYKAXgSARESFQHGX2MiiJf-wwurrDTgOcGV0IBG3g0178\n" + "Using default refresh token for geeView\n" ] - }, - { - "data": { - "text/html": [ - "\n", - " \n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" } ], "source": [ @@ -674,7 +815,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -688,7 +829,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZAPJGhuHoXMi1_W2i7it9dBch7wHfEjM6luJgaT0hfxJUKzbbdZ2_w4uoF_FPptBoPWxaP2L6gf16U9kMJnNusrnWOLiIi8ywHi7k1FP1v5vwI2Eju0GUCV1xlO5eYFGYuUGNEhEG3NwtVRCTUcHd1ROQkJ5rfx6XdNzUoaCgYKAbsSARESFQHGX2MiUTznMNdubA5F5YD9d4aV_Q0178\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZBRE9mjI7Tbvn12JUdNHWBcQvnRwFG-hP61lUO5NJ1i3hUF5MWklT1YsQ2O8JTPO_c9dknJ4tLo2b1iWUDX3YpRH9D_GxcBzfpEkOKxbtzwZD_WgsZ2X5yrxgRqXDSdCClmIPTT7vOM7PivC2CznkBAOmJWgtu42xYKMiAaCgYKATwSARESFQHGX2MiL_SKbyR4o1MbYfhrP8JMSw0178&accessTokenCreationTime=1732072086594\n" ] }, { @@ -698,7 +839,7 @@ " " + "" ] }, "metadata": {}, @@ -740,7 +881,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -754,7 +895,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZDaLFoiiGYiKvmGmH1tBTNzNtGwr5C2QA0aCSuaV7mt_yuBytef5AZ2wU8H3IxgBZOA0Q2hkK33PTAxOp5vZ8Dvr912cdV3igxxnPLW76O1mfM0Viw_6BAB9q1ImB6BZEoOY5Cvwj2zNxC_Emn6PUmsWmcFITd5YQynpyEaCgYKAcUSARESFQHGX2MikAxeure5i3ICBvmn8fhBew0178\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZCo6B7_61baBesuftX5imkCdbgjQ2cDhjfWwwxSln0lW_f7XfITgdSiXVr6J7_lAz_6b7EQ-Xe5TCpBXK4RUjicQGwh4rMOMReEYDZDmspR_UGbQyOcAv_d-F5vjiBfmKeFx-2ZO5E0GXkaW1-vaCjXC5uORbQQR6X_rmQaCgYKAVwSARESFQHGX2MitF33sKGsJctQg4HvPM9Rsg0178&accessTokenCreationTime=1732072108233\n" ] }, { @@ -764,7 +905,7 @@ " " + "" ] }, "metadata": {}, @@ -805,12 +946,12 @@ "\n", "* Note that the dictionary of parameters is more or less the same as what you would put in the `\"areaChartParams\"` if you were to use the `Map.addLayer` method. \n", "\n", - "* Note that while multi thematic band image collections can be charted in a single line chart, sankey charts can only support one band per chart. If a multi thematic band image collection is given with `\"sankey\":True`, separate sankey charts will be created for each band." + "* Note that while multi thematic band image collections can be charted in a single line chart, sankey charts can only support one band per chart. If a multi thematic band image collection is given with `\"sankey\":True` (as is the case in this example), separate sankey charts will be created for each band." ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -824,7 +965,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZA8sI8DEEcCRJIs9FfoFoDJPukpaeamD89f0q2qh9SM_i0-7OSQruSG8jXHkvH4_UzUyD1pOZ-cwZZlwFHy8twKhstWc0Oo5orG_TRwL1wC6xEHv737Xro4b7CykJuiBR168Ej_uWJ5JPGwCN1NlV6Qtt-wfYXBOusJEpUaCgYKAdUSARESFQHGX2MiyzjFyNwf2q3kecg_F-rFvg0178\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZCjAoKLilGLZF5wIObir1p6XAIWJM6jMrodG8zcJg1jJ3GzF-yy8r7fbwHqpEcYQ5BC1P_unmAqFIY7hIVAU3CpkOzxnGMZkXx-ff3VoP2Tc2U4xdc3bq4Z9kKrw1dXI-iVO0V2p-DBHnOb5iUzgsp93zCB3IoXLA7IkTIaCgYKASMSARESFQHGX2MiCMKkLZs77Opz9_0uA6Jqig0178&accessTokenCreationTime=1732168152111\n" ] }, { @@ -834,7 +975,7 @@ " " + "" ] }, "metadata": {}, @@ -870,13 +1011,13 @@ "source": [ "## Charting Non-Thematic Data\n", "\n", - "* You can chart continuous data as well. By default, a `ee.Reducer.mean()` will be used. You can use any reducer that returns a single value per image-band (e.g. `ee.Reducer.min()`, `ee.Reducer.max()`, `ee.Reducer.stdDev()` and not `ee.Reducer.percentile([0,50,100])`). \n", + "* You can chart continuous data as well. By default, a `ee.Reducer.mean()` will be used. You can use any reducer that returns a single value per image-band (e.g. `ee.Reducer.min()`, `ee.Reducer.max()`, `ee.Reducer.stdDev()`, `ee.Reducer.mode()`, and not `ee.Reducer.percentile([0,50,100])`). \n", "\n", "* You can specify this using `\"areaChartParams\":{\"reducer\":ee.Reducer.mean()}`\n", "\n", "* Optionally, you can provide a color palette to be used. Each band will be assigned to a color in the order given\n", "\n", - "* Notice in the example, the reducer for what is shown on the map is different from the zonal summary reducer. In this example, on the map the standard deviation of the probability is shown, while the average over the area is shown in the chart. " + "* Notice in the example, the reducer for what is shown on the map is different from the zonal summary reducer. In this example, on the map the standard deviation of the probability is shown to highlight likely change, while the average over the area is shown in the chart since that is a more appropriate representation of probability over an area. " ] }, { @@ -893,7 +1034,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612zyBFmQok8DtUEIp6qTRiXotoUPt8cGbFU4lo03AGaFZCas1Rkx2xDfBF6PPbwyOINwzoURdXUiBcbgO9ytGZBJcvHJjScj3njRFMjUo2HWVeMjhno9wv6KVi0iRh8ZK1nwUM6CBqM9zZSImy4e7NmgDqKYZrEgs5oaCgYKAfQSARESFQHGX2MiejYkUh8WfWmkrq89M0l9Nw0174\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZDC-kEJjZ7ANFvwoBVoe0PN6iyoJgDoKDC45AZod0eypEh2wmKRloLs4mY0cK4UTwGQGzF5lAPoAfQfF1B-0YjmglkLQmwOAqofFJtdBfjLRX5B61yrowTSG_D0u83cds1oShCZRR18Wapnif7vIHzAJZk8Zm2USy6000oaCgYKAdMSARESFQHGX2Mij0Uo4T2Bl89g0qog8XH6Sw0178&accessTokenCreationTime=1732168277196\n" ] }, { @@ -903,7 +1044,7 @@ " " + "" ] }, "metadata": {}, @@ -937,13 +1078,13 @@ "\n", "* You can also chart images\n", "* It will behave in a similar fashion to imageCollections, but will show a bar chart\n", - "\n", + "* Placing names for bar charts can be challenging if the names are very long. geeViz will automatically change the bar chart to be a horizontal bar chart if long names are detected. This still does not ensure the bar charts are readable (as is the case in this example). Shortening class names is the easiest method to address this issue (shown by splitting the full NLCD landcover name with `:` and take the first part earlier in this notebook).\n", "* If using `\"autoViz\":True`, be sure to copy the `_class_` properties back in\n" ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -954,11 +1095,12 @@ "Adding layer: LCMS Land Cover Mode\n", "Adding layer: NLCD Land Cover\n", "Adding layer: NLCD Land Cover Mode\n", + "Adding layer: NLCD Land Cover Mode Shortened Names\n", "Starting webmap\n", "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612zola-FBl5vKB_hlCop1HfVJDqwFITDhbElU4cFuh0EAS0vneY95qkqt4EnuQsh5Ai7RIzWPvztjtaaESDRhZwMRM-096h5-EbbMtN_Fh1tXfwbqbJpAvVcHnoBmjHwIUr3maRrmOZgIKdBj07FytPEc548YQtVRT1BwNAaCgYKARwSARESFQHGX2MiVR4GgV1QjHvlavabzx0A1w0178\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZAYSRUVZEF7tD-uK6Zn-LCX2EMMf-R2VGKJu9WdAnWqeFNsxq2H9j8atAF7Cgu_1ISo0BaCA3RhHvOuKBVw6YK_DTXlSllbYjTie86dZHcp8w7QwXmPcwuaDieNGZVtAUDv3RV6dQ5ZIodg3F_bbcbIMN8HqXAryuqDPwgaCgYKAesSARESFQHGX2MiT8b83hyJMzIqna_6JYRXdQ0178&accessTokenCreationTime=1732169429393\n" ] }, { @@ -968,7 +1110,7 @@ " " + "" ] }, "metadata": {}, @@ -993,6 +1135,10 @@ "Map.addLayer(nlcd.select(['landcover']),{'autoViz':True,'canAreaChart':True},'NLCD Land Cover')\n", "Map.addLayer(nlcd.select(['landcover']).mode().set(nlcd.first().toDictionary()),{'autoViz':True,'canAreaChart':True},'NLCD Land Cover Mode')\n", "\n", + "# Use the shortened class names to clean up chart\n", + "Map.addLayer(nlcd.select(['landcover']).mode().set(nlcd_props_shortened_names),{'autoViz':True,'canAreaChart':True},'NLCD Land Cover Mode Shortened Names')\n", + "\n", + "\n", "\n", "\n", "\n", @@ -1011,7 +1157,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 10, "metadata": {}, "outputs": [ { @@ -1023,7 +1169,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612xsvPX5BWXka2IKux0xyyC3pEN5X_bCjc9Abyt_QnoMxh0Tt3UKrIH4ZmqL7dsll6n3Zh4j55OApJLdFSFgC6zgz59th25UPnIDG-dUbvscsngSoX5Dd7kyf6cm1RAzRxnkG0KCwmtpKTWqMohMFz8sADGkdmojFV0aCgYKAVUSARESFQHGX2Mi7EieXAoH_HzjzIAyP0KgYQ0174\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZB7X2qwuIOOEJXfmqKh4BlhENGTSj4_Xp7uL99qXMtkt7l1RdiAFuQ-jTN5Ou_2RTBOZA8k247QT8eAnc3ED6ZCf4C8NpZrsG070oER4EapnJsM2mAU33AayTBsxMbfWQEwW-zz9TBzm7LllyrVjOTEdpxzQloFUGOgQc8aCgYKAZISARESFQHGX2MiBqtgdGfy6Z72iUD04QOyfw0178&accessTokenCreationTime=1732169453056\n" ] }, { @@ -1033,7 +1179,7 @@ " " + "" ] }, "metadata": {}, @@ -1086,7 +1232,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 11, "metadata": {}, "outputs": [ { @@ -1098,7 +1244,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612wnYtt-QFEIFqJvxv4tUzZcYEWRZkAv1oqt1OnIrtgzB7lI8Fiv-gDBo5Jm7kwppzNzx5KL8XRoYpN2aMTVzbQYWHUn6OD9yc6u6-3FCw_Ykc26-SFspZma_sjs-0V3OKWqFZsx0KCiuwz5cskNB83el1D24oGm2ZMaCgYKARQSARESFQHGX2Miyj7dkMOvk05oVvAXnq9xBw0174\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZDgfsjQNYd5rrgKWcv3pcdtv1txAnIJB2FSclFLx0D3XVfXW_4f9nzPNOkWNGajJehlLbpshY5r0DKJkOAISTKp7KzzqPEEcD_7ickDf6gCwaZeLWYZzrnhv2ipteslzEO2FhDzVG_S-1Clyr-ZUdKk_ePFBjX-90WzNyMaCgYKATQSARESFQHGX2Mix24C9Alq9W4HMEp1x9x6UQ0178&accessTokenCreationTime=1732169481988\n" ] }, { @@ -1108,7 +1254,7 @@ " " + "" ] }, "metadata": {}, @@ -1152,13 +1298,13 @@ "\n", "* You can chart thematic datasets that lack values, names, and palette properties by specifying the `ee.Reducer.frequencyHistogram()` as the reducer\n", "\n", - "* This is not the best method however\n", + "* This is not the best method however. Charts will lack descriptive class names and colors\n", "\n" ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 12, "metadata": {}, "outputs": [ { @@ -1170,7 +1316,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612wJKTBG90sE7YjOsGwKAT2Io1SgHDHujjFffA7UVFDdzD6ieoa1LRPSj3JE0Rr_EbjdhU-m_tOgjjzBG9_JdmjzTH0wV35j206vk4iET5lr4Ij7hzaXnNi6UsXr2Nx24JjWdXdVCVekeJ4uxVWX_Frrk2xx7k1ALut5UBUaCgYKAQkSARESFQHGX2MihFCE1dDZKNyehV8R3vhoxQ0178\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZDmawXDukWmO9oLKizTo6w7P9NlqXfKoaSIpzcAnlYGfgLMuBe34OfhIdC4T-bGS2FiEQpv42PPAgg3F1S8L5tTEZbWNnwCIheDSLkFekhdRunGkABnR_qx-2Z8J9NSmTr3pLc625m_vRcRl5c022VRG-mlVolIdq9qPqgaCgYKAV0SARESFQHGX2MiSeg0dJ97aOa4_Ib-smh2Ng0178&accessTokenCreationTime=1732169560625\n" ] }, { @@ -1180,7 +1326,7 @@ " " + "" ] }, "metadata": {}, @@ -1222,7 +1368,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 13, "metadata": {}, "outputs": [ { @@ -1234,7 +1380,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612wadT88_g9U59GK--fr1PF-tM6S-z-5cRPTW7qhCoO8BaezIKVSxtIfsaz2_tQt2DaSH5xKD2u-AKbY5vRznLUC92QBoKLerlwwL7OapgmO2fIcc8IjWpW3gDMMfU3szuY6ShHWj7HiFGAw_ARd_T4970y6zGHieyeL9N4aCgYKAYwSARESFQHGX2MiXVVic5V0ZDr0FPFtD2QLeA0178\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZBE3rUf41t3ynct3TmFS9goflI3KxzwcFtJSPVFhjP-3bciOy90PgBO4ljJoWWQbcjYKjicRJGLxNds9V5CJvKnYv2uM2iU1aOgKxZ36FvToD5ZzOW7ddz9-pIWwDg8u-fIcr3PD3sLW7fe3E6GQFk01PWS4tmTmhTaAl8aCgYKAdASARESFQHGX2MitHZij8OK-HBPFllpNUWadg0178&accessTokenCreationTime=1732169652439\n" ] }, { @@ -1244,7 +1390,7 @@ " " + "" ] }, "metadata": {}, @@ -1295,39 +1441,28 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 14, "metadata": {}, "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Adding layer: LCMS Change Comparison 2010\n", - "Adding layer: LCMS Land Cover Comparison 2010\n", - "Adding layer: LCMS Land Use Comparison 2010\n", - "Starting webmap\n", - "Using default refresh token for geeView\n" - ] - }, { "name": "stderr", "output_type": "stream", "text": [ - "c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\ee\\deprecation.py:202: DeprecationWarning: \n", + "c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\ee\\deprecation.py:207: DeprecationWarning: \n", "\n", "Attention required for USFS/GTAC/LCMS/v2020-5! You are using a deprecated asset.\n", "To ensure continued functionality, please update it.\n", "Learn more: https://developers.google.com/earth-engine/datasets/catalog/USFS_GTAC_LCMS_v2020-5\n", "\n", " warnings.warn(warning, category=DeprecationWarning)\n", - "c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\ee\\deprecation.py:202: DeprecationWarning: \n", + "c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\ee\\deprecation.py:207: DeprecationWarning: \n", "\n", "Attention required for USFS/GTAC/LCMS/v2021-7! You are using a deprecated asset.\n", "To ensure continued functionality, please update it.\n", "Learn more: https://developers.google.com/earth-engine/datasets/catalog/USFS_GTAC_LCMS_v2021-7\n", "\n", " warnings.warn(warning, category=DeprecationWarning)\n", - "c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\ee\\deprecation.py:202: DeprecationWarning: \n", + "c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\ee\\deprecation.py:207: DeprecationWarning: \n", "\n", "Attention required for USFS/GTAC/LCMS/v2022-8! You are using a deprecated asset.\n", "To ensure continued functionality, please update it.\n", @@ -1340,9 +1475,14 @@ "name": "stdout", "output_type": "stream", "text": [ + "Adding layer: LCMS Change Comparison 2010\n", + "Adding layer: LCMS Land Cover Comparison 2010\n", + "Adding layer: LCMS Land Use Comparison 2010\n", + "Starting webmap\n", + "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612wPtKk_ePf9TnMwvoRhqeBo8KprojyyW3GVeKIwAu2XdlfaUTUzws7eZQUrIGyZ4wCS6wIjpw7sUV-eBsoj2z1SSl38d4RhPIEbaN6ZOP8hWAxv07-RMGdJX0o8U4mKiKp92DhI6wg9Lmfz20gZ6wRwHURCbZy2lEsaCgYKAaYSARESFQHGX2Mir_MkV5PgClO-NZQmHUOFbA0174\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZD6JxbWi078FtM79_BeIKn2hGPtQvOfSbTkG0tNDgKyzDTdA43Ddjf-zHPe9n3L4jdSwTrA3YO5vD_gwS680uHwVbMJ48YU4zGg4TDd0Uvwew3z_qq8I9GRK9cvh1YmiBv642eY5BhQqpve_ns98U93p5l8ztQS0sAvbggaCgYKARsSARESFQHGX2MiWzcQ5PhrEcBC3wtjWUcqkg0178&accessTokenCreationTime=1732169696345\n" ] }, { @@ -1352,7 +1492,7 @@ " " + "" ] }, "metadata": {}, @@ -1418,7 +1558,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 15, "metadata": {}, "outputs": [ { @@ -1433,7 +1573,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612wgw-djuuUntepLYybAxnaIqxMmFwimfSO5_f-ogEbOUoilTLwc6OseVxRi5qICNp7ekGXx89YwL_ssdQMnarafW5IePMFIBfBALE0QwlQyp58F6ciJeqf04GGg49Id-7qFKwx-m8qAzQRmsEUBQS9y_ZwgbhDtyh0aCgYKAdcSARESFQHGX2MiGY-MWDrEyrXenwTUktiPuw0174\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZBvafOCftFThE78i2zwWG34pYXzIRloRQ-qwsZ6O_Li22nUDmhYuvjQ252SF3npQhNR-Rjg4lInCL3TDlD3xvKgaHASqIX3MUSNFrXTlJZYkQ7tnPHY_NIFuoOAwgElS0AAvLVSnXifuaHQUgKKh77A04sLI_imBP_1yeUaCgYKAe8SARESFQHGX2Mi9nlpC9xjpq7pAmV7xBP8zg0178&accessTokenCreationTime=1732169830804\n" ] }, { @@ -1443,7 +1583,7 @@ " " + "" ] }, "metadata": {}, diff --git a/docs/build/html/_sources/notebooks/dynamicWorldExampleNotebook.ipynb.txt b/docs/build/html/_sources/notebooks/dynamicWorldExampleNotebook.ipynb.txt index a529d67..b944968 100644 --- a/docs/build/html/_sources/notebooks/dynamicWorldExampleNotebook.ipynb.txt +++ b/docs/build/html/_sources/notebooks/dynamicWorldExampleNotebook.ipynb.txt @@ -26,8 +26,8 @@ "See the License for the specific language governing permissions and\n", "limitations under the License.\n", "\n", - "\n", - "

    \"Open

    " + "[![github](https://img.shields.io/badge/-see%20sources-white?logo=github&labelColor=555)](https://github.com/gee-community/geeviz/blob/master/examples/dynamicWorldExampleNotebook.ipynb) \n", + "[![github](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/gee-community/geeViz/blob/master/examples/dynamicWorldExampleNotebook.ipynb)" ] }, { diff --git a/docs/build/html/_sources/notebooks/gee2PandasExample.ipynb.txt b/docs/build/html/_sources/notebooks/gee2PandasExample.ipynb.txt index 5c83996..0de341d 100644 --- a/docs/build/html/_sources/notebooks/gee2PandasExample.ipynb.txt +++ b/docs/build/html/_sources/notebooks/gee2PandasExample.ipynb.txt @@ -26,8 +26,8 @@ "* Use this module to go between local data and GEE for more general data science/statistical analysis\n", "\n", "\n", - "\n", - "

    \"Open

    " + "[![github](https://img.shields.io/badge/-see%20sources-white?logo=github&labelColor=555)](https://github.com/gee-community/geeviz/blob/master/examples/gee2PandasExample.ipynb) \n", + "[![github](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/gee-community/geeViz/blob/master/examples/gee2PandasExample.ipynb)" ] }, { @@ -44,11 +44,23 @@ "text": [ "Initializing GEE\n", "Cached project id file path: C:\\Users\\ihousman\\.config\\earthengine\\credentials.proj_id\n", - "Cached project id: rcr-gee-2\n", + "Cached project id: lcms-292214\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "*** Earth Engine *** Share your feedback by taking our Annual Developer Satisfaction Survey: https://google.qualtrics.com/jfe/form/SV_0JLhFqfSY1uiEaW?source=Init\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Successfully initialized\n", "geeViz package folder: c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\geeViz\n", "PyTables is not installed. No support for HDF output.\n", - "SQLalchemy is not installed. No support for SQL output.\n", "done\n" ] } @@ -89,13 +101,10 @@ "Get Processed Sentinel2: \n", "Start date: Jun 09 2021 , End date: Jul 08 2024\n", "Using S2 Collection: COPERNICUS/S2_HARMONIZED\n", - "Joining pre-computed cloud probabilities from: COPERNICUS/S2_CLOUD_PROBABILITY\n", + "Joining pre-computed cloudScore+ from: GOOGLE/CLOUD_SCORE_PLUS/V1/S2_HARMONIZED\n", "Setting to aggregate instead of resample \n", "Converting S2 data to daily mosaics\n", - "Applying Cloud Probability\n", - "Applying TDOM\n", - "Computing irMean for TDOM\n", - "Computing irStdDev for TDOM\n", + "Applying cloudScore+\n", "Adding layer: S2 Median 2023\n", "Adding layer: S2 Water 2023\n", "Adding layer: Water_Transition_2022-2023\n", @@ -103,11 +112,12 @@ "Adding layer: S2 Water 2022\n", "Adding layer: Study Area\n", "Starting webmap\n", - "Using default refresh token for geeView: C:\\Users\\ihousman/.config/earthengine/credentials\n", + "Using default refresh token for geeView\n", "Starting local web server at: http://localhost:1233/geeView/\n", "HTTP server command: \"c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\python.exe\" -m http.server 1233\n", "Done\n", - "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n" + "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", + "geeView URL: http://localhost:1233/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZC7rbMaygDhJcMEQ0u5_tqi4RCJz5duLi9eQYcy-Zzhz3T9dcmPOnEuD0NwEy27M9Wnr2GSc0ECMwXaMemmVP2iroa_MGOFvl4Jp5RU4pA_zrwQ4C3d28ntB0uOzARn-lg_onfuT40HjsqVZRaofbnYbto04qT8lqbp4P0aCgYKAQ0SARESFQHGX2MiU_0uj5D6U3SDTAv6wwgP7A0178&accessTokenCreationTime=1732565631149\n" ] }, { @@ -117,7 +127,7 @@ " " + "" ] }, "metadata": {}, @@ -170,7 +180,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 3, "id": "8daf03c9", "metadata": {}, "outputs": [ @@ -181,9 +191,10 @@ "Adding layer: Sample\n", "/tmp\\gee2Pandas_test_csv.csv already exists\n", "Starting webmap\n", - "Using default refresh token for geeView: C:\\Users\\ihousman/.config/earthengine/credentials\n", + "Using default refresh token for geeView\n", "Local web server at: http://localhost:1233/geeView/ already serving.\n", - "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n" + "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", + "geeView URL: http://localhost:1233/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZA_pdYBT8Da3RV0VuNIO82RcHCoJBkvgRzVPbMvNB7-Nymd8Z0PytK-lQbvzobDzcQ0mw8Gic89IlORedmyBcpl7W-V6L0lPtE-sX94emQUnKtxAr5IkIFinQiHPrJscFcVfvQ9jlO9DOwcmFTGAnWYk7QK6wcDXohDsIMaCgYKAYcSARESFQHGX2MiRPp-2OrqyFbvRcc9_zvJlg0178&accessTokenCreationTime=1732565635250\n" ] }, { @@ -193,7 +204,7 @@ " " + "" ] }, "metadata": {}, @@ -228,7 +239,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 4, "id": "e5ee4c87", "metadata": {}, "outputs": [ @@ -273,7 +284,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 9, "id": "a59a6afa", "metadata": {}, "outputs": [ @@ -283,9 +294,10 @@ "text": [ "Adding layer: Test Sample\n", "Starting webmap\n", - "Using default refresh token for geeView: C:\\Users\\ihousman/.config/earthengine/credentials\n", + "Using default refresh token for geeView\n", "Local web server at: http://localhost:1233/geeView/ already serving.\n", - "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n" + "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", + "geeView URL: http://localhost:1233/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZDuAuuThPvzPHAPlCNFGvzYQShuqqqN0i2vdB4dxVkn1LYXnb42sCaCBoboFD4-SYtRTg1kkmK-aWFKssUhmA-E9PQyXyR4Za3sVJnaEalIHtgYvLXkQ1DOYmFybz6cEMDntPVHLX30KagvUS0Kw0-aPPMUneuEG2gwJz0aCgYKATMSARESFQHGX2MiuDZhAcXWgIBJLVWdu6OINQ0178&accessTokenCreationTime=1732565803239\n" ] }, { @@ -295,7 +307,7 @@ " " + "" ] }, "metadata": {}, @@ -311,12 +323,10 @@ } ], "source": [ - "from importlib import reload\n", - "reload(g2p)\n", "# Now go from a local csv to a GEE featureCollection\n", "fc = g2p.tableToFeatureCollection(out_csv)\n", "Map.clearMap()\n", - "Map.addLayer(fc.map(lambda f:ee.Feature(f).buffer(10).bounds()),{},'Test Sample')\n", + "Map.addLayer(fc,{'styleParams':{'pointSize':2,'color':'0DF'}},'Test Sample')\n", "Map.turnOnInspector()\n", "Map.centerObject(fc)\n", "Map.view()" diff --git a/docs/build/html/_sources/notebooks/geeViewExampleNotebook.ipynb.txt b/docs/build/html/_sources/notebooks/geeViewExampleNotebook.ipynb.txt index 68b17f3..787e319 100644 --- a/docs/build/html/_sources/notebooks/geeViewExampleNotebook.ipynb.txt +++ b/docs/build/html/_sources/notebooks/geeViewExampleNotebook.ipynb.txt @@ -29,9 +29,8 @@ "See the License for the specific language governing permissions and\n", "limitations under the License.\n", "\n", - "\n", - "\n", - "

    \"Open

    \n", + "[![github](https://img.shields.io/badge/-see%20sources-white?logo=github&labelColor=555)](https://github.com/gee-community/geeviz/blob/master/examples/geeViewExampleNotebook.ipynb) \n", + "[![github](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/gee-community/geeViz/blob/master/examples/geeViewExampleNotebook.ipynb)\n", " " ] }, @@ -55,7 +54,20 @@ "text": [ "Initializing GEE\n", "Cached project id file path: C:\\Users\\ihousman\\.config\\earthengine\\credentials.proj_id\n", - "Cached project id: lcms-292214\n", + "Cached project id: lcms-292214\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "*** Earth Engine *** Share your feedback by taking our Annual Developer Satisfaction Survey: https://google.qualtrics.com/jfe/form/SV_0JLhFqfSY1uiEaW?source=Init\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Successfully initialized\n", "geeViz package folder: c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\geeViz\n", "done\n" @@ -97,11 +109,9 @@ "Adding layer: NLCD 2011 Landcover/Landuse\n", "Starting webmap\n", "Using default refresh token for geeView\n", - "Starting local web server at: http://localhost:8001/geeView/\n", - "HTTP server command: \"c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\python.exe\" -m http.server 8001\n", - "Done\n", + "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612xc9-pB9qAOEeavEwVZ1nkSwRtdLU5dMd8wyk1oOxGnL_QIQgk6EDhi2YDRdNmU3RI80bbYYBKFpXzZeoydg_BdMUmCHSVqlEF_U5Eyf_SnA3qr_O0qD96qBkRa9c0x_Jmw6TVI3ywf2H-x8cUSwCTpniqMNZFU5A7f8LMaCgYKAf8SARESFQHGX2MidqD7XysS4IRxaINI6W30BQ0178\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZC9ZMk9nE3alPEasRZHHuiqY9ioimY7gcSWjbR7C4CJ9eiKSJyGhiiF7OkJTdtJ6D6PcRWSTX1ZPnE1SgQsKdehpNOEMaFHJjpe-AG8DAKaqK2rFhx_8H_r47M2Sl5Sux95uFcCytus3cGehAIgJ0305osLh_eBpjAVq9waCgYKAXQSARESFQHGX2MiN1vvcKYW4oN6bshp7Owqdw0178&accessTokenCreationTime=1732564901727\n" ] }, { @@ -111,7 +121,7 @@ " " + "" ] }, "metadata": {}, @@ -159,7 +169,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 7, "id": "2670e5e4", "metadata": { "scrolled": false @@ -175,7 +185,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612wEB91PRlJ0ADBpVkUrAZMQd3WCbxcuhHMod3GOCG_5j94LaGpnzrrBY5RXg_n1FWPl52nQsscK_3wTnIAL-9euEDaGd72R1TDH-G0sDgrK-vutq1scvD0Xfm0icX_qRuVhU2l3T-OCwOjcZ5f6dOZXwBFUxSdG1PR1Ww4aCgYKAW8SARESFQHGX2Miy70Q2fyYSBm1U3jh1-kpNw0178\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZCdWbAp2YEv9OinAUuSbK8mjozVuITQXsLXww9NR_eSxgtWs-oCgfSQ0if6cygVUJ5K-9RKSMKUEhLcfmHUcsBrk4Sp73jOtg5ufkMA3rDwOeq-kfBO7ZzJ9iYtg8YO9CMPsGrJGsqfioRzr8vMjJlpl8hy3YvvMkrF-AwaCgYKAUMSARESFQHGX2MiaTjARdF2H_Ms2mb2DFeMHA0178&accessTokenCreationTime=1732565064272\n" ] }, { @@ -185,7 +195,7 @@ " " + "" ] }, "metadata": {}, @@ -207,11 +217,13 @@ "nlcd = nlcd.filter(ee.Filter.calendarRange(2000,2020,'year'))\n", "nlcd = nlcd.map(lambda img: img.set('bns',img.bandNames()))\n", "nlcd = nlcd.filter(ee.Filter.listContains('bns','landcover')).select(['landcover'])\n", - "Map.addLayer(nlcd.sort('system:time_start'),{'autoViz':True},'NLCD Landcover/Landuse Time Series',True)\n", + "\n", + "# Can optionally turn off class numbers in legend by setting 'includeClassValues':False,\n", + "Map.addLayer(nlcd.sort('system:time_start'),{'autoViz':True,'includeClassValues':False},'NLCD Landcover/Landuse Time Series',True)\n", "\n", "# Continuous data automatically have a legend added\n", "nlcd = ee.Image('USGS/NLCD_RELEASES/2016_REL/2016')\n", - "Map.addLayer(nlcd.select(['percent_tree_cover']),{'min':20,'max':80,'palette':'555,0A0','opacity':0.5},'NLCD 2016 TCC',True)\n", + "Map.addLayer(nlcd.select(['percent_tree_cover']),{'min':20,'max':80,'palette':'555,0A0','opacity':0.5,'legendLabelLeftAfter':'% TCC','legendLabelRightAfter':'% TCC'},'NLCD 2016 TCC',True)\n", "\n", "Map.turnOnInspector()\n", "Map.view()" @@ -227,7 +239,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 8, "id": "29550202", "metadata": { "scrolled": false @@ -242,7 +254,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612ymuGgajtw9S6mOC5GCfhqzRWaiDFM4Wo8EZddZ-IPoTvQekpl-PHtcL0Oc535OAFKzF50NXEDh6z51BKbk_zsmiLDpSsD1lSfhV7rwCp6incyDEh73_JeAKScEwLupBUGamXxLrsDoo1tDwM-5dfFE7YFluJxoRvJsEWUaCgYKAcYSARESFQHGX2MirzQTM9D85PpbatDl2KI9vQ0178\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZDEzWma5X5W-oHKCexM8jy1fvuNiDAgP07VHbMN6HHAjJktIgzS97_mpORIntBzrleDIqRW4mzlY45PV5hL00AmDEMPk0yYKTvqhDUQkGuAKtjC1IWCv8x9KXU9aAkyI_6tdjC_ZjbMbACiNbZPgzWW6Pfa4VRfX5uHIysaCgYKAdoSARESFQHGX2Mis6lGLlm0ts5y8AVhKmIzgg0178&accessTokenCreationTime=1732565082937\n" ] }, { @@ -252,7 +264,7 @@ " " + "" ] }, "metadata": {}, @@ -297,7 +309,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 9, "id": "bda0482c", "metadata": { "scrolled": true @@ -312,7 +324,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612xlIx2Z7GFTqGXH8dsTw0MkNgvq1rBKoPyvOsMMcDknha5xOGZuHnVp_GAzPOV3V6y5-XyTWNFtPKxGOzXOEQwJn24apigYHHO7F0Pi68AZdnJE036ggaWviIID4VdTcv9CoB3rxbrRtqqOXWa0a0ebgPmYsPDPBHen2mAaCgYKAd4SARESFQHGX2MiJOenyiWCugz0F-f9mbuCHA0178\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZBtu0k2gNpi4vy_3WTk89zD7TnCY2jV_58KR3dZBzuK9IC30vpVunkWSZoLtvydJWpP6appk3GvnXLjghoFmxOlrXf4RBBkj6dkogsVR1TqAHrzRUmnJDyEjpwncoI-AUYvO5x8V_icMITvLjZT5it08wDuVNS5y07tIscaCgYKAXkSARESFQHGX2MiPJSgbTMg-G5QabpMKuznNg0178&accessTokenCreationTime=1732565101648\n" ] }, { @@ -322,7 +334,7 @@ " " + "" ] }, "metadata": {}, @@ -358,7 +370,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 10, "id": "e3065817", "metadata": {}, "outputs": [ @@ -371,7 +383,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612xyu7yibHE0YwsGKTTjWjC8Uk7L7aof24L3ei935S0iOL9NAWU3uTAdMdwDkXhSRd0HMf83Axc1D3YZE1P3MYJKmA-upfpBPNjWAt1yzksKGra1-x-9to7S3NUSmTpzpFCRVoVDf_BdvJJqdtMCryh57Urg1uEZk-ZZj-8aCgYKAWoSARESFQHGX2MinnWH-GXb3lEYw3rJxhIskQ0178\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZAezqp01cIEOBoAqg2IyAX7siCvpDiVQ4TJDvPJooEZjhmH9MBnk8awa4ut9LS2gQrVDTwmqwkbWmIdU0VGrsW0ZUlgojuBHakihs4LRgVNnnzWTLaqdQGkEdmlo2FHWqRNOW_JHyDw6AvyI6OdglQopqn53aer93wfaS4aCgYKAQASARESFQHGX2Mi4CooIU_ziSIVWHXLJOUy0A0178&accessTokenCreationTime=1732565130682\n" ] }, { @@ -381,7 +393,7 @@ " " + "" ] }, "metadata": {}, @@ -417,24 +429,15 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 11, "id": "ed19b1f3", "metadata": {}, "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Adding layer: JRC Surface Water Time Series\n", - "Adding layer: JRC Surface Water Mode\n", - "Adding layer: JRC Surface Water Time Lapse\n" - ] - }, { "name": "stderr", "output_type": "stream", "text": [ - "c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\ee\\deprecation.py:202: DeprecationWarning: \n", + "c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\ee\\deprecation.py:207: DeprecationWarning: \n", "\n", "Attention required for JRC/GSW1_0/YearlyHistory! You are using a deprecated asset.\n", "To ensure continued functionality, please update it.\n", @@ -447,11 +450,14 @@ "name": "stdout", "output_type": "stream", "text": [ + "Adding layer: JRC Surface Water Time Series\n", + "Adding layer: JRC Surface Water Mode\n", + "Adding layer: JRC Surface Water Time Lapse\n", "Starting webmap\n", "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612yRwpwRBWQTUs2XVKhs1DlyDqoqJZIgeDDCCYmuXK-kQ-6wtKQ8bWed5F5Tw6tPvt50q0scd1AFM4Rgmu8ClNDjIc84N1zhl16h081AkdlPxxMqkChodrKxigDgSjxRR5ZNpFqiQ0bVhQb-juMerVorXEndD1IoR5OvK4kaCgYKAbYSARESFQHGX2Mib2iFAte1BTdjjB1u62k-6g0178\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZAlsuVMY4s0axMzoAGBFZnZSizbu-h175yGINMHpEhuMWniA9OD33KUXUISs376RMYK75_pp2b_JBw7M7G4VoeLjxS_je1EFmM7JS9H3saEhlD05NpN_W8RuRhAf9CZ4Jgm9ROrSqLI-QwUQSGo43THsCRWPfkIggX0veYaCgYKATYSARESFQHGX2Mi99zBRgnkVA3UetKqa0L6pQ0178&accessTokenCreationTime=1732565241221\n" ] }, { @@ -461,7 +467,7 @@ " " + "" ] }, "metadata": {}, diff --git a/docs/build/html/_sources/notebooks/geeViewVSFoliumViewerExampleNotebook.ipynb.txt b/docs/build/html/_sources/notebooks/geeViewVSFoliumViewerExampleNotebook.ipynb.txt index 1612fb1..ebd32bb 100644 --- a/docs/build/html/_sources/notebooks/geeViewVSFoliumViewerExampleNotebook.ipynb.txt +++ b/docs/build/html/_sources/notebooks/geeViewVSFoliumViewerExampleNotebook.ipynb.txt @@ -28,13 +28,13 @@ "\n", "\n", "\n", - "\n", - "

    \"Open

    " + "[![github](https://img.shields.io/badge/-see%20sources-white?logo=github&labelColor=555)](https://github.com/gee-community/geeviz/blob/master/examples/geeViewVSFoliumViewerExampleNotebook.ipynb) \n", + "[![github](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/gee-community/geeViz/blob/master/examples/geeViewVSFoliumViewerExampleNotebook.ipynb)" ] }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 4, "id": "b8e5dff6", "metadata": {}, "outputs": [ @@ -42,11 +42,6 @@ "name": "stdout", "output_type": "stream", "text": [ - "Initializing GEE\n", - "Cached project id file path: C:\\Users\\ihousman\\.config\\earthengine\\credentials.proj_id\n", - "Cached project id: rcr-gee-2\n", - "Successfully initialized\n", - "geeViz package folder: c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\geeViz\n", "done\n" ] } @@ -82,7 +77,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 7, "id": "145cfa94", "metadata": { "scrolled": false @@ -92,16 +87,6 @@ "name": "stdout", "output_type": "stream", "text": [ - "Get Processed Sentinel2: \n", - "Start date: Apr 30 2022 , End date: May 30 2023\n", - "Using S2 Collection: COPERNICUS/S2_HARMONIZED\n", - "Joining pre-computed cloud probabilities from: COPERNICUS/S2_CLOUD_PROBABILITY\n", - "Setting to aggregate instead of resample \n", - "Converting S2 data to daily mosaics\n", - "Applying Cloud Probability\n", - "Applying TDOM\n", - "Computing irMean for TDOM\n", - "Computing irStdDev for TDOM\n", "Adding layer: S2 Median 2023\n", "Adding layer: S2 Median 2023\n", "Adding layer: S2 Median 2022\n", @@ -140,7 +125,7 @@ " <meta name="viewport" content="width=device-width,\n", " initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />\n", " <style>\n", - " #map_e768368a64f4117a24c2ed1add335c09 {\n", + " #map_bf8cb17dfddc88eee0345b09539b65b3 {\n", " position: relative;\n", " width: 100.0%;\n", " height: 100.0%;\n", @@ -156,14 +141,14 @@ "<body>\n", " \n", " \n", - " <div class="folium-map" id="map_e768368a64f4117a24c2ed1add335c09" ></div>\n", + " <div class="folium-map" id="map_bf8cb17dfddc88eee0345b09539b65b3" ></div>\n", " \n", "</body>\n", "<script>\n", " \n", " \n", - " var map_e768368a64f4117a24c2ed1add335c09 = L.map(\n", - " "map_e768368a64f4117a24c2ed1add335c09",\n", + " var map_bf8cb17dfddc88eee0345b09539b65b3 = L.map(\n", + " "map_bf8cb17dfddc88eee0345b09539b65b3",\n", " {\n", " center: [0, 0],\n", " crs: L.CRS.EPSG3857,\n", @@ -177,77 +162,77 @@ "\n", " \n", " \n", - " var tile_layer_2eb064abc510a2009667247ec503744f = L.tileLayer(\n", + " var tile_layer_e9b894311852908103d312ac72a0f8d7 = L.tileLayer(\n", " "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",\n", " {"attribution": "Data by \\u0026copy; \\u003ca target=\\"_blank\\" href=\\"http://openstreetmap.org\\"\\u003eOpenStreetMap\\u003c/a\\u003e, under \\u003ca target=\\"_blank\\" href=\\"http://www.openstreetmap.org/copyright\\"\\u003eODbL\\u003c/a\\u003e.", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_e768368a64f4117a24c2ed1add335c09);\n", + " ).addTo(map_bf8cb17dfddc88eee0345b09539b65b3);\n", " \n", " \n", - " map_e768368a64f4117a24c2ed1add335c09.fitBounds(\n", + " map_bf8cb17dfddc88eee0345b09539b65b3.fitBounds(\n", " [[40.595571243156144, -113.21807278537877], [41.786028237932015, -111.82280911350377]],\n", " {}\n", " );\n", " \n", " \n", - " var tile_layer_318d20fe437657d8826935e48946a9fb = L.tileLayer(\n", + " var tile_layer_bf19b02e732ce46afa87ec069e125745 = L.tileLayer(\n", " "https://mt1.google.com/vt/lyrs=m\\u0026x={x}\\u0026y={y}\\u0026z={z}",\n", " {"attribution": "Google", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_e768368a64f4117a24c2ed1add335c09);\n", + " ).addTo(map_bf8cb17dfddc88eee0345b09539b65b3);\n", " \n", " \n", - " var tile_layer_d8931757b861f4e50b34bdf3c43f7e59 = L.tileLayer(\n", + " var tile_layer_a83e0b09797e18a74a9341b86aa5fa8a = L.tileLayer(\n", " "https://mt1.google.com/vt/lyrs=y\\u0026x={x}\\u0026y={y}\\u0026z={z}",\n", " {"attribution": "Google", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_e768368a64f4117a24c2ed1add335c09);\n", + " ).addTo(map_bf8cb17dfddc88eee0345b09539b65b3);\n", " \n", " \n", - " var tile_layer_5cc0597fd47030f70860adeb11a04e50 = L.tileLayer(\n", - " "https://earthengine.googleapis.com/v1/projects/rcr-gee-2/maps/878cd4cda12ea625edde2235b25ccfba-4e585685e228e19bfb2c776dfd5fae64/tiles/{z}/{x}/{y}",\n", + " var tile_layer_052abd9b5ca3dc5e0689f5a5defe60ca = L.tileLayer(\n", + " "https://earthengine.googleapis.com/v1/projects/lcms-292214/maps/8b65d3ca40b419c815211709b11bdf70-fd2bf96cfc74f2b85446bb1e06d78566/tiles/{z}/{x}/{y}",\n", " {"attribution": "Google Earth Engine | GeeViz", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_e768368a64f4117a24c2ed1add335c09);\n", + " ).addTo(map_bf8cb17dfddc88eee0345b09539b65b3);\n", " \n", " \n", - " var tile_layer_edf797cf5a88a31ffc210b741abf975f = L.tileLayer(\n", - " "https://earthengine.googleapis.com/v1/projects/rcr-gee-2/maps/e40754b26863dbda6eb4e72f817357eb-aeafa083ba9af0c84a9c23767962bd08/tiles/{z}/{x}/{y}",\n", + " var tile_layer_6657345b6a0e65189cd9f172d7597628 = L.tileLayer(\n", + " "https://earthengine.googleapis.com/v1/projects/lcms-292214/maps/cfe71c74fde98ae75ee307d9c2718d13-34e14d8c58292c547f605a95d208544a/tiles/{z}/{x}/{y}",\n", " {"attribution": "Google Earth Engine | GeeViz", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_e768368a64f4117a24c2ed1add335c09);\n", + " ).addTo(map_bf8cb17dfddc88eee0345b09539b65b3);\n", " \n", " \n", - " var tile_layer_7202c93b8a32531c6cf6e276253ba863 = L.tileLayer(\n", - " "https://earthengine.googleapis.com/v1/projects/rcr-gee-2/maps/1dd1ca8432e9c77788f5ff204934cb9a-c08173cfa4c18f3d94abda55b7f03d23/tiles/{z}/{x}/{y}",\n", + " var tile_layer_1b2bc15851267f89108ff72becc09d75 = L.tileLayer(\n", + " "https://earthengine.googleapis.com/v1/projects/lcms-292214/maps/1dd1ca8432e9c77788f5ff204934cb9a-b50be3c4da69498a104aad062c94b81e/tiles/{z}/{x}/{y}",\n", " {"attribution": "Google Earth Engine", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_e768368a64f4117a24c2ed1add335c09);\n", + " ).addTo(map_bf8cb17dfddc88eee0345b09539b65b3);\n", " \n", " \n", - " var layer_control_3e565ea03295a2c2eec652874e417314 = {\n", + " var layer_control_806d6bc00b08c811e7e6fdb6bd3f3a33 = {\n", " base_layers : {\n", - " "openstreetmap" : tile_layer_2eb064abc510a2009667247ec503744f,\n", + " "openstreetmap" : tile_layer_e9b894311852908103d312ac72a0f8d7,\n", " },\n", " overlays : {\n", - " "Google Maps" : tile_layer_318d20fe437657d8826935e48946a9fb,\n", - " "Google Satellite" : tile_layer_d8931757b861f4e50b34bdf3c43f7e59,\n", - " "S2 Median 2023" : tile_layer_5cc0597fd47030f70860adeb11a04e50,\n", - " "S2 Median 2022" : tile_layer_edf797cf5a88a31ffc210b741abf975f,\n", - " "Study Area" : tile_layer_7202c93b8a32531c6cf6e276253ba863,\n", + " "Google Maps" : tile_layer_bf19b02e732ce46afa87ec069e125745,\n", + " "Google Satellite" : tile_layer_a83e0b09797e18a74a9341b86aa5fa8a,\n", + " "S2 Median 2023" : tile_layer_052abd9b5ca3dc5e0689f5a5defe60ca,\n", + " "S2 Median 2022" : tile_layer_6657345b6a0e65189cd9f172d7597628,\n", + " "Study Area" : tile_layer_1b2bc15851267f89108ff72becc09d75,\n", " },\n", " };\n", " L.control.layers(\n", - " layer_control_3e565ea03295a2c2eec652874e417314.base_layers,\n", - " layer_control_3e565ea03295a2c2eec652874e417314.overlays,\n", + " layer_control_806d6bc00b08c811e7e6fdb6bd3f3a33.base_layers,\n", + " layer_control_806d6bc00b08c811e7e6fdb6bd3f3a33.overlays,\n", " {"autoZIndex": false, "collapsed": false, "position": "topright"}\n", - " ).addTo(map_e768368a64f4117a24c2ed1add335c09);\n", - " tile_layer_edf797cf5a88a31ffc210b741abf975f.remove();\n", + " ).addTo(map_bf8cb17dfddc88eee0345b09539b65b3);\n", + " tile_layer_6657345b6a0e65189cd9f172d7597628.remove();\n", " \n", " \n", " L.control.fullscreen(\n", " {"forceSeparateButton": false, "position": "topleft", "title": "Full Screen", "titleCancel": "Exit Full Screen"}\n", - " ).addTo(map_e768368a64f4117a24c2ed1add335c09);\n", + " ).addTo(map_bf8cb17dfddc88eee0345b09539b65b3);\n", " \n", "</script>\n", "</html>\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen>
    " ], "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -261,7 +246,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:1234/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:1234/geeView/?projectID=rcr-gee-2&accessToken=ya29.a0AfB_byCP8HcC-KgEexObCBH6V-INd3TohADawsSbQUkAJ6F2610Ejx0YrUgSRrX3Htj0SOzAQndyQJthWGIP64KMLPphHHVovwJkqBIS17C7dV9GCPnhXCLkek5cY-mtkGhxFVjOxcOIYhW9kvnuSE8zRaJkPf9gZn-QykRfPtqRaCgYKAc8SARASFQHGX2MiabXK25SWKqOKCKEVD2Xnlg0179\n" + "geeView URL: http://localhost:1234/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZDbcJ3L1DVXwA-_pCB34jAAAAZNhd7u9i06UHk43hWigYXc3K2oeDYmfRGm-sqiZPXijhaIPwbxQ8ihv0oedNanKny9oGmwSXPjmmpizVz5b6FBSbLqOuLK1kIPLu4v-gbrIry9cu6uJDmYcdS8IY_qOZHpByBppNRjWAkaCgYKATcSARESFQHGX2MiaLWkXlEAlSRFL1yHTKi7Ww0178&accessTokenCreationTime=1731636167610\n" ] }, { @@ -271,7 +256,7 @@ " " + "" ] }, "metadata": {}, "output_type": "display_data" - }, - { - "ename": "", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[1;31mThe Kernel crashed while executing code in the the current cell or a previous cell. Please review the code in the cell(s) to identify a possible cause of the failure. Click here for more info. View Jupyter log for further details." - ] } ], "source": [ + "foliumViewMap.clearMap()\n", + "geeViewMap.clearMap()\n", "# Bring in some S2 data\n", "studyArea = ee.Geometry.Polygon(\n", " [[[-113.21807278537877, 41.786028237932015],\n", @@ -303,13 +282,13 @@ " [-111.82280911350377, 41.786028237932015]]], None, False)\n", "\n", "# Get some example images to view\n", - "s2s = gil.getProcessedSentinel2Scenes(studyArea,2022,2023,120,150)\n", + "s2s = gil.superSimpleGetS2(studyArea,'2022-01-01','2023-12-31',120,150)\n", "postComposite = s2s.filter(ee.Filter.calendarRange(2023,2023,'year')).median()\n", - "foliumViewMap.addLayer(postComposite,gil.vizParamsFalse,'S2 Median 2023')\n", - "geeViewMap.addLayer(postComposite,gil.vizParamsFalse,'S2 Median 2023')\n", + "foliumViewMap.addLayer(postComposite,gil.vizParamsFalse10k,'S2 Median 2023')\n", + "geeViewMap.addLayer(postComposite,gil.vizParamsFalse10k,'S2 Median 2023')\n", "preComposite = s2s.filter(ee.Filter.calendarRange(2022,2022,'year')).median()\n", - "foliumViewMap.addLayer(preComposite,gil.vizParamsFalse,'S2 Median 2022',False)\n", - "geeViewMap.addLayer(preComposite,gil.vizParamsFalse,'S2 Median 2022',False)\n", + "foliumViewMap.addLayer(preComposite,gil.vizParamsFalse10k,'S2 Median 2022',False)\n", + "geeViewMap.addLayer(preComposite,gil.vizParamsFalse10k,'S2 Median 2022',False)\n", "\n", "# Center on the study area and view it\n", "foliumViewMap.centerObject(studyArea)\n", @@ -328,7 +307,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 8, "id": "dc168bd6", "metadata": {}, "outputs": [ @@ -362,7 +341,7 @@ " <meta name="viewport" content="width=device-width,\n", " initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />\n", " <style>\n", - " #map_75334d5df7d7b6bee93eaa7a6a0444c7 {\n", + " #map_0d3c2d857dc84813a9ad09af38a85c74 {\n", " position: relative;\n", " width: 100.0%;\n", " height: 100.0%;\n", @@ -378,14 +357,14 @@ "<body>\n", " \n", " \n", - " <div class="folium-map" id="map_75334d5df7d7b6bee93eaa7a6a0444c7" ></div>\n", + " <div class="folium-map" id="map_0d3c2d857dc84813a9ad09af38a85c74" ></div>\n", " \n", "</body>\n", "<script>\n", " \n", " \n", - " var map_75334d5df7d7b6bee93eaa7a6a0444c7 = L.map(\n", - " "map_75334d5df7d7b6bee93eaa7a6a0444c7",\n", + " var map_0d3c2d857dc84813a9ad09af38a85c74 = L.map(\n", + " "map_0d3c2d857dc84813a9ad09af38a85c74",\n", " {\n", " center: [0, 0],\n", " crs: L.CRS.EPSG3857,\n", @@ -399,79 +378,79 @@ "\n", " \n", " \n", - " var tile_layer_25d8161bb6085167b21e6c0d242464d7 = L.tileLayer(\n", + " var tile_layer_d26b642dc3c339eca31d64423e6a443b = L.tileLayer(\n", " "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",\n", " {"attribution": "Data by \\u0026copy; \\u003ca target=\\"_blank\\" href=\\"http://openstreetmap.org\\"\\u003eOpenStreetMap\\u003c/a\\u003e, under \\u003ca target=\\"_blank\\" href=\\"http://www.openstreetmap.org/copyright\\"\\u003eODbL\\u003c/a\\u003e.", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_75334d5df7d7b6bee93eaa7a6a0444c7);\n", + " ).addTo(map_0d3c2d857dc84813a9ad09af38a85c74);\n", " \n", " \n", - " map_75334d5df7d7b6bee93eaa7a6a0444c7.fitBounds(\n", + " map_0d3c2d857dc84813a9ad09af38a85c74.fitBounds(\n", " [[40.595571243156144, -113.21807278537877], [41.786028237932015, -111.82280911350377]],\n", " {}\n", " );\n", " \n", " \n", - " var tile_layer_2ce97936129ccddd74bbb6ad16a4d8d9 = L.tileLayer(\n", + " var tile_layer_bf19b02e732ce46afa87ec069e125745 = L.tileLayer(\n", " "https://mt1.google.com/vt/lyrs=m\\u0026x={x}\\u0026y={y}\\u0026z={z}",\n", " {"attribution": "Google", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_75334d5df7d7b6bee93eaa7a6a0444c7);\n", + " ).addTo(map_0d3c2d857dc84813a9ad09af38a85c74);\n", " \n", " \n", - " var tile_layer_0804d036b81e7bcd721c727b2c50a1b4 = L.tileLayer(\n", + " var tile_layer_a83e0b09797e18a74a9341b86aa5fa8a = L.tileLayer(\n", " "https://mt1.google.com/vt/lyrs=y\\u0026x={x}\\u0026y={y}\\u0026z={z}",\n", " {"attribution": "Google", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_75334d5df7d7b6bee93eaa7a6a0444c7);\n", + " ).addTo(map_0d3c2d857dc84813a9ad09af38a85c74);\n", " \n", " \n", - " var tile_layer_042de6edf5ac45fd9eb68d13a019582f = L.tileLayer(\n", - " "https://earthengine.googleapis.com/v1/projects/earthengine-legacy/maps/c2977a270141db4a60d3223bdb36d376-d79c520062fcf4ae3c40e0d1cf9b1b87/tiles/{z}/{x}/{y}",\n", + " var tile_layer_e1e8c048257f05fe0bc4b9858eacb7ae = L.tileLayer(\n", + " "https://earthengine.googleapis.com/v1/projects/lcms-292214/maps/8b65d3ca40b419c815211709b11bdf70-2586002fa31dd60941a7fe44d7fce1d3/tiles/{z}/{x}/{y}",\n", " {"attribution": "Google Earth Engine | GeeViz", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_75334d5df7d7b6bee93eaa7a6a0444c7);\n", + " ).addTo(map_0d3c2d857dc84813a9ad09af38a85c74);\n", " \n", " \n", - " var tile_layer_97f21978a26e782e4c0c8d1902b2fc5c = L.tileLayer(\n", - " "https://earthengine.googleapis.com/v1/projects/earthengine-legacy/maps/7bb79b310bb924c7447da63b232bd54c-b004f8bada8b318b555422618a4aa837/tiles/{z}/{x}/{y}",\n", + " var tile_layer_ce36a093dbaabafea6ea519a9a00904c = L.tileLayer(\n", + " "https://earthengine.googleapis.com/v1/projects/lcms-292214/maps/cfe71c74fde98ae75ee307d9c2718d13-9bc1bcce3da47ea46e7dd794e8c2bcff/tiles/{z}/{x}/{y}",\n", " {"attribution": "Google Earth Engine | GeeViz", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_75334d5df7d7b6bee93eaa7a6a0444c7);\n", + " ).addTo(map_0d3c2d857dc84813a9ad09af38a85c74);\n", " \n", " \n", - " var tile_layer_6dc9113cf2448d77165c70967ae4ebab = L.tileLayer(\n", - " "https://earthengine.googleapis.com/v1/projects/earthengine-legacy/maps/1dd1ca8432e9c77788f5ff204934cb9a-5511903ebecf8b50150d48196845f9ca/tiles/{z}/{x}/{y}",\n", + " var tile_layer_815b492266aed0118863f9068faf2111 = L.tileLayer(\n", + " "https://earthengine.googleapis.com/v1/projects/lcms-292214/maps/1dd1ca8432e9c77788f5ff204934cb9a-c106266d159702d559220f726c25347b/tiles/{z}/{x}/{y}",\n", " {"attribution": "Google Earth Engine", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_75334d5df7d7b6bee93eaa7a6a0444c7);\n", + " ).addTo(map_0d3c2d857dc84813a9ad09af38a85c74);\n", " \n", " \n", - " var layer_control_ccd33ae4d9c07922044e2ae5208e3034 = {\n", + " var layer_control_c277404e3cf3fa680d7f4bc844b773f5 = {\n", " base_layers : {\n", - " "openstreetmap" : tile_layer_25d8161bb6085167b21e6c0d242464d7,\n", + " "openstreetmap" : tile_layer_d26b642dc3c339eca31d64423e6a443b,\n", " },\n", " overlays : {\n", - " "Google Maps" : tile_layer_2ce97936129ccddd74bbb6ad16a4d8d9,\n", - " "Google Satellite" : tile_layer_0804d036b81e7bcd721c727b2c50a1b4,\n", - " "S2 Median 2023" : tile_layer_042de6edf5ac45fd9eb68d13a019582f,\n", - " "S2 Median 2022" : tile_layer_97f21978a26e782e4c0c8d1902b2fc5c,\n", - " "Study Area" : tile_layer_6dc9113cf2448d77165c70967ae4ebab,\n", + " "Google Maps" : tile_layer_bf19b02e732ce46afa87ec069e125745,\n", + " "Google Satellite" : tile_layer_a83e0b09797e18a74a9341b86aa5fa8a,\n", + " "S2 Median 2023" : tile_layer_e1e8c048257f05fe0bc4b9858eacb7ae,\n", + " "S2 Median 2022" : tile_layer_ce36a093dbaabafea6ea519a9a00904c,\n", + " "Study Area" : tile_layer_815b492266aed0118863f9068faf2111,\n", " },\n", " };\n", " L.control.layers(\n", - " layer_control_ccd33ae4d9c07922044e2ae5208e3034.base_layers,\n", - " layer_control_ccd33ae4d9c07922044e2ae5208e3034.overlays,\n", + " layer_control_c277404e3cf3fa680d7f4bc844b773f5.base_layers,\n", + " layer_control_c277404e3cf3fa680d7f4bc844b773f5.overlays,\n", " {"autoZIndex": false, "collapsed": false, "position": "topright"}\n", - " ).addTo(map_75334d5df7d7b6bee93eaa7a6a0444c7);\n", - " tile_layer_042de6edf5ac45fd9eb68d13a019582f.remove();\n", - " tile_layer_97f21978a26e782e4c0c8d1902b2fc5c.remove();\n", - " tile_layer_6dc9113cf2448d77165c70967ae4ebab.remove();\n", + " ).addTo(map_0d3c2d857dc84813a9ad09af38a85c74);\n", + " tile_layer_e1e8c048257f05fe0bc4b9858eacb7ae.remove();\n", + " tile_layer_ce36a093dbaabafea6ea519a9a00904c.remove();\n", + " tile_layer_815b492266aed0118863f9068faf2111.remove();\n", " \n", " \n", " L.control.fullscreen(\n", " {"forceSeparateButton": false, "position": "topleft", "title": "Full Screen", "titleCancel": "Exit Full Screen"}\n", - " ).addTo(map_75334d5df7d7b6bee93eaa7a6a0444c7);\n", + " ).addTo(map_0d3c2d857dc84813a9ad09af38a85c74);\n", " \n", "</script>\n", "</html>\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen>" ], "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -482,9 +461,10 @@ "output_type": "stream", "text": [ "Starting webmap\n", - "Using default refresh token for geeView: C:\\Users\\ihousman/.config/earthengine/credentials\n", + "Using default refresh token for geeView\n", "Local web server at: http://localhost:1234/geeView/ already serving.\n", - "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n" + "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", + "geeView URL: http://localhost:1234/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZBgEjF_qT4biuDwvxdtZ3fRkCFXi2hjGPshz4JTMX9Qd_B08sziz8mCa32AnWU1vNHGf20_-D4K_rx5d7KG6Orzca4g73b0wxTGYLjJjlO6q8fMjpkU8ZwD_YM60VL_uDLz4MvtH3FDlI7JjpfyvIRnLYvCnhlIn9ZwZ7QaCgYKARkSARESFQHGX2MiPdRuXvSNF3GQ2UaYanRICw0178&accessTokenCreationTime=1731636205672\n" ] }, { @@ -494,7 +474,7 @@ " " + "" ] }, "metadata": {}, @@ -520,7 +500,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 9, "id": "8714a906", "metadata": {}, "outputs": [ @@ -554,7 +534,7 @@ " <meta name="viewport" content="width=device-width,\n", " initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />\n", " <style>\n", - " #map_6ae079e70a9a766f5a4c686c2cd27ded {\n", + " #map_5a7550f959b1ae1f8f9b8fac7d371a57 {\n", " position: relative;\n", " width: 100.0%;\n", " height: 100.0%;\n", @@ -570,14 +550,14 @@ "<body>\n", " \n", " \n", - " <div class="folium-map" id="map_6ae079e70a9a766f5a4c686c2cd27ded" ></div>\n", + " <div class="folium-map" id="map_5a7550f959b1ae1f8f9b8fac7d371a57" ></div>\n", " \n", "</body>\n", "<script>\n", " \n", " \n", - " var map_6ae079e70a9a766f5a4c686c2cd27ded = L.map(\n", - " "map_6ae079e70a9a766f5a4c686c2cd27ded",\n", + " var map_5a7550f959b1ae1f8f9b8fac7d371a57 = L.map(\n", + " "map_5a7550f959b1ae1f8f9b8fac7d371a57",\n", " {\n", " center: [0, 0],\n", " crs: L.CRS.EPSG3857,\n", @@ -591,76 +571,76 @@ "\n", " \n", " \n", - " var tile_layer_6ca2cd56fe25139eeb4055e18439f00c = L.tileLayer(\n", + " var tile_layer_d074fc4686c0b3198ed2ec2c2b15b714 = L.tileLayer(\n", " "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",\n", " {"attribution": "Data by \\u0026copy; \\u003ca target=\\"_blank\\" href=\\"http://openstreetmap.org\\"\\u003eOpenStreetMap\\u003c/a\\u003e, under \\u003ca target=\\"_blank\\" href=\\"http://www.openstreetmap.org/copyright\\"\\u003eODbL\\u003c/a\\u003e.", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_6ae079e70a9a766f5a4c686c2cd27ded);\n", + " ).addTo(map_5a7550f959b1ae1f8f9b8fac7d371a57);\n", " \n", " \n", - " map_6ae079e70a9a766f5a4c686c2cd27ded.fitBounds(\n", + " map_5a7550f959b1ae1f8f9b8fac7d371a57.fitBounds(\n", " [[40.595571243156144, -113.21807278537877], [41.786028237932015, -111.82280911350377]],\n", " {}\n", " );\n", " \n", " \n", - " var tile_layer_2ce97936129ccddd74bbb6ad16a4d8d9 = L.tileLayer(\n", + " var tile_layer_bf19b02e732ce46afa87ec069e125745 = L.tileLayer(\n", " "https://mt1.google.com/vt/lyrs=m\\u0026x={x}\\u0026y={y}\\u0026z={z}",\n", " {"attribution": "Google", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_6ae079e70a9a766f5a4c686c2cd27ded);\n", + " ).addTo(map_5a7550f959b1ae1f8f9b8fac7d371a57);\n", " \n", " \n", - " var tile_layer_0804d036b81e7bcd721c727b2c50a1b4 = L.tileLayer(\n", + " var tile_layer_a83e0b09797e18a74a9341b86aa5fa8a = L.tileLayer(\n", " "https://mt1.google.com/vt/lyrs=y\\u0026x={x}\\u0026y={y}\\u0026z={z}",\n", " {"attribution": "Google", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_6ae079e70a9a766f5a4c686c2cd27ded);\n", + " ).addTo(map_5a7550f959b1ae1f8f9b8fac7d371a57);\n", " \n", " \n", - " var tile_layer_de4f52f45dcbdd73eaf18ec8d6bb4c8e = L.tileLayer(\n", - " "https://earthengine.googleapis.com/v1/projects/earthengine-legacy/maps/5206f96be658993e51f71b721788e631-7af46ab593128ac9acae40db4ecc2e94/tiles/{z}/{x}/{y}",\n", + " var tile_layer_13f2b579776361222d2a8b420c4883b5 = L.tileLayer(\n", + " "https://earthengine.googleapis.com/v1/projects/lcms-292214/maps/8b65d3ca40b419c815211709b11bdf70-e5aba86dc97de35a8c0601d2a7929da6/tiles/{z}/{x}/{y}",\n", " {"attribution": "Google Earth Engine | GeeViz", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_6ae079e70a9a766f5a4c686c2cd27ded);\n", + " ).addTo(map_5a7550f959b1ae1f8f9b8fac7d371a57);\n", " \n", " \n", - " var tile_layer_d4302cdedbd1a069632aa5eafaa58d8e = L.tileLayer(\n", - " "https://earthengine.googleapis.com/v1/projects/earthengine-legacy/maps/265338b79f8eee2fa31c73bd685096f2-0cc1ec54c4f36d5263f8ff080ca0da6e/tiles/{z}/{x}/{y}",\n", + " var tile_layer_e9ee12c9f68d952031d5030fad773405 = L.tileLayer(\n", + " "https://earthengine.googleapis.com/v1/projects/lcms-292214/maps/cfe71c74fde98ae75ee307d9c2718d13-cc171251a4aad5cda94665cf4c5962e4/tiles/{z}/{x}/{y}",\n", " {"attribution": "Google Earth Engine | GeeViz", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_6ae079e70a9a766f5a4c686c2cd27ded);\n", + " ).addTo(map_5a7550f959b1ae1f8f9b8fac7d371a57);\n", " \n", " \n", - " var tile_layer_d197dd002a1454886c87186c28976d42 = L.tileLayer(\n", - " "https://earthengine.googleapis.com/v1/projects/earthengine-legacy/maps/1dd1ca8432e9c77788f5ff204934cb9a-e60dd8c676d90dd89c0b0788eb9ef802/tiles/{z}/{x}/{y}",\n", + " var tile_layer_bbcb2a5ce2b8db6ac99d3526e3c9524b = L.tileLayer(\n", + " "https://earthengine.googleapis.com/v1/projects/lcms-292214/maps/1dd1ca8432e9c77788f5ff204934cb9a-b37d5ad4e80a2a549134cee564627bc0/tiles/{z}/{x}/{y}",\n", " {"attribution": "Google Earth Engine", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_6ae079e70a9a766f5a4c686c2cd27ded);\n", + " ).addTo(map_5a7550f959b1ae1f8f9b8fac7d371a57);\n", " \n", " \n", - " var layer_control_eb1d11e4c51f1cab920d5c85d9b965f0 = {\n", + " var layer_control_db9697066279ce8e0e7853d9189b5a2d = {\n", " base_layers : {\n", - " "openstreetmap" : tile_layer_6ca2cd56fe25139eeb4055e18439f00c,\n", + " "openstreetmap" : tile_layer_d074fc4686c0b3198ed2ec2c2b15b714,\n", " },\n", " overlays : {\n", - " "Google Maps" : tile_layer_2ce97936129ccddd74bbb6ad16a4d8d9,\n", - " "Google Satellite" : tile_layer_0804d036b81e7bcd721c727b2c50a1b4,\n", - " "S2 Median 2023" : tile_layer_de4f52f45dcbdd73eaf18ec8d6bb4c8e,\n", - " "S2 Median 2022" : tile_layer_d4302cdedbd1a069632aa5eafaa58d8e,\n", - " "Study Area" : tile_layer_d197dd002a1454886c87186c28976d42,\n", + " "Google Maps" : tile_layer_bf19b02e732ce46afa87ec069e125745,\n", + " "Google Satellite" : tile_layer_a83e0b09797e18a74a9341b86aa5fa8a,\n", + " "S2 Median 2023" : tile_layer_13f2b579776361222d2a8b420c4883b5,\n", + " "S2 Median 2022" : tile_layer_e9ee12c9f68d952031d5030fad773405,\n", + " "Study Area" : tile_layer_bbcb2a5ce2b8db6ac99d3526e3c9524b,\n", " },\n", " };\n", " L.control.layers(\n", - " layer_control_eb1d11e4c51f1cab920d5c85d9b965f0.base_layers,\n", - " layer_control_eb1d11e4c51f1cab920d5c85d9b965f0.overlays,\n", + " layer_control_db9697066279ce8e0e7853d9189b5a2d.base_layers,\n", + " layer_control_db9697066279ce8e0e7853d9189b5a2d.overlays,\n", " {"autoZIndex": false, "collapsed": false, "position": "topright"}\n", - " ).addTo(map_6ae079e70a9a766f5a4c686c2cd27ded);\n", + " ).addTo(map_5a7550f959b1ae1f8f9b8fac7d371a57);\n", " \n", " \n", " L.control.fullscreen(\n", " {"forceSeparateButton": false, "position": "topleft", "title": "Full Screen", "titleCancel": "Exit Full Screen"}\n", - " ).addTo(map_6ae079e70a9a766f5a4c686c2cd27ded);\n", + " ).addTo(map_5a7550f959b1ae1f8f9b8fac7d371a57);\n", " \n", "</script>\n", "</html>\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen>" ], "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -671,9 +651,10 @@ "output_type": "stream", "text": [ "Starting webmap\n", - "Using default refresh token for geeView: C:\\Users\\ihousman/.config/earthengine/credentials\n", + "Using default refresh token for geeView\n", "Local web server at: http://localhost:1234/geeView/ already serving.\n", - "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n" + "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", + "geeView URL: http://localhost:1234/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZBUVPa6LDS25-4BKa-QvyMaz0HTq8mm7-tn5ABvN9VQk-ga6KngwRbFK9lVePwfAnN3KVTzcYhKcl5_a35GszdiHTiYkun9LJ4a_2pwKJu5QwxHQsx9l5rOTV4n5glhvDXYy1-AmDTKKenKabXEY0f1XBVtsZlX4M-j4Z4aCgYKAc4SARESFQHGX2MiTjFdTXxQ6GZsKMtMJgEoVw0178&accessTokenCreationTime=1731636218348\n" ] }, { @@ -683,7 +664,7 @@ " " + "" ] }, "metadata": {}, diff --git a/docs/build/html/_sources/notebooks/geeViz_geeMap_comparison_tutorial.ipynb.txt b/docs/build/html/_sources/notebooks/geeViz_geeMap_comparison_tutorial.ipynb.txt index 0494d42..d8f0e69 100644 --- a/docs/build/html/_sources/notebooks/geeViz_geeMap_comparison_tutorial.ipynb.txt +++ b/docs/build/html/_sources/notebooks/geeViz_geeMap_comparison_tutorial.ipynb.txt @@ -13,47 +13,22 @@ "\n", "* This is intended to illustrate the basic map functionality of each package. Refer to each packages examples for more in-depth demos\n", "\n", - "

    \"Open

    " + "\n", + "[![github](https://img.shields.io/badge/-see%20sources-white?logo=github&labelColor=555)](https://github.com/gee-community/geeviz/blob/master/examples/geeViz_geeMap_comparison_tutorial.ipynb) \n", + "[![github](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/gee-community/geeViz/blob/master/examples/geeViz_geeMap_comparison_tutorial.ipynb)" ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, "metadata": {}, "outputs": [ { - "data": { - "text/html": [ - "\n", - " \n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" + "name": "stdout", + "output_type": "stream", + "text": [ + "geeViz package folder: c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\geeViz\n" + ] } ], "source": [ @@ -82,7 +57,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "metadata": {}, "outputs": [ { @@ -122,7 +97,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f2330ca0a7ca442dbe3731326371427d", + "model_id": "6ed7ad90f7b14fdabc8e09495452b37c", "version_major": 2, "version_minor": 0 }, @@ -130,7 +105,7 @@ "Map(center=[0, 0], controls=(WidgetControl(options=['position', 'transparent_bg'], widget=SearchDataGUI(childr…" ] }, - "execution_count": 3, + "execution_count": 2, "metadata": {}, "output_type": "execute_result" } @@ -142,7 +117,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 3, "metadata": {}, "outputs": [ { @@ -187,7 +162,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AXooCgvgEDNhCDK0uDRpz89SY_IP1QTrcZy4sXuRjC2AakLLpvpHnY4JbpgQuN_aObMEAvqSekQexKUPFqKMjO5dKpTtZz7JLna2PHWIejqpRF1ZAmPRsoe7rV9BRT3m9PnDdmozagQiXui2XI_aIBVL4dq2v8LzdP7mOWEaCgYKAfESARESFQHGX2MiZsnH07ngGCe4E3fpeJEWmw0174\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZC1NpuzSJnOL46m9K4RQ3OxUQL_5d8_g_ocHO3jhv7KYFenfHacOKTrQXoBfiWS0Ri1rT0tNpnsmOGaHP7hwSPWwuIcptltnUzIPtDaulxJmYWOrEQJ3R0Iqa-NovKOogpQDP_t394JVVun6_SjOmmKGdsY8k-W-mdz5NoaCgYKAeoSARESFQHGX2MitIO-ZCr0Ku8KFquA0SiGAA0178&accessTokenCreationTime=1731461548264\n" ] }, { @@ -197,7 +172,7 @@ " " + "" ] }, "metadata": {}, @@ -230,7 +205,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -275,7 +250,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AXooCgvtomcjUlHqrrMtMyYQ3xkeyvWoRPwJ_tM5q65sOLXUvOO-DJACMhLbU5evcuZ2Swuaf3DXi_cfPDJzW6J22NdhFg4bo8iMIUjx2qwfPc4eGA0pIEHN0Mr5RkKOxzumlDPBKHAa2INX7OrtgJgzS_j2jrWjiCEo_G8aCgYKAUISARESFQHGX2MiorOf-P_GbrM7fO2kghuJTQ0174\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZDCqAxJILCd0nHUTJMchkcJTzMCfn_oOr09p0ecz2ZwSKyD4y-EV2Fu9GmeSHC-sKIHBezhBiWvD9RSEODWO7V0H1Sf6oD9wEJ7ams9Je0HDaeKBpx9VaYCtubO12v42BIEsTmq3w5sL43edm7avLzkSx40cagxNA48IJcaCgYKAbgSARESFQHGX2MiDqqNEsiekCnocxei6tyNLQ0178&accessTokenCreationTime=1731461558966\n" ] }, { @@ -285,7 +260,7 @@ " " + "" ] }, "metadata": {}, @@ -302,7 +277,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "a59ecbc4aae74e50a5f3903142916ddb", + "model_id": "ccfae8bc563e4a4fa0f490b8e4d20298", "version_major": 2, "version_minor": 0 }, @@ -310,7 +285,7 @@ "Map(center=[40.64356771453405, -111.92926447956667], controls=(WidgetControl(options=['position', 'transparent…" ] }, - "execution_count": 5, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -329,7 +304,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -374,7 +349,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AXooCgtJHkiDNTHnX1_pSscrZxMjNt9pvKyEtfkWLAUETNAq-mH7v_Cn2tzqKIa4Y271z-7jrnQIuFTCLO_2HkORiSS8HHeyy_fNRCzB86G70832yYkW1m84OkDsMgFl9Kbje3Ipo4C2aK8JWKVMOqJBFiXaY6BRE-nwTd8aCgYKAdISARESFQHGX2Mix0GbebnUwrD7aJVzoBXgrQ0174\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZCAzLBBAsbkibPAyQQBqz2A45adbb64UjuzZf4BzqFZspb3rXWLjQ-CXDOCq39f89yuIC1VEKd-KR-BrR3ReZ1qBOl1CBqCbmpuNmn8EavXnusniLjz8eAu5YjmTgB4n8VFUz0w5XIAMFQ1uuQWkGfbV3W6F1qo8nM3BcMaCgYKAUwSARESFQHGX2Mi1VbmxyoOc4nqPnQboIV-oA0178&accessTokenCreationTime=1731461571134\n" ] }, { @@ -384,7 +359,7 @@ " " + "" ] }, "metadata": {}, @@ -401,7 +376,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "6569b3cbe1e1419781ed7504e82afb10", + "model_id": "a046d1db994143879ec8221e21957a91", "version_major": 2, "version_minor": 0 }, @@ -409,7 +384,7 @@ "Map(center=[40.64356771453405, -111.92926447956665], controls=(WidgetControl(options=['position', 'transparent…" ] }, - "execution_count": 6, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -435,7 +410,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -484,7 +459,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AXooCgt2jXuR_ORQ4rVSJMw4gBgwNkPrdy3LbsdGZXmtBfF5m4ez0cqKlAEhvULItePzt4VZS_kRqMc_uQFyogJjBIJr0aJqU2hVR1Wzlw02hiEB2Z2ObtVqT8TjS3An_DPYQcz18EGyVE_DQ_VAgMET3xlANZSADM1YO58aCgYKAaYSARESFQHGX2MiILfbqpEh0dgLNorL1lvmug0174\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZD3s3w_jGcfIljb-YyzXOpr0bJ0zHO8jMIckApbI0hSBFXPcjywqzsghWSVwW2vNYOFU5KW1Y0SevWJv6qdqSkAj--bilduzpTEAisNsy45Ai9qVUQERpC8mxOWxFsXswfzKylxVlqIWgCMbUXIbWrtWkdmi-LPVNe56p4aCgYKAckSARESFQHGX2MihtuQ8ShbRfFcBUdvKlc8TA0178&accessTokenCreationTime=1731461581110\n" ] }, { @@ -494,7 +469,7 @@ " " + "" ] }, "metadata": {}, @@ -511,7 +486,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "61cdbd4b0ba74fd3a23510d1b5e3c24e", + "model_id": "79ede6bd57864f039bcab1a231cd4774", "version_major": 2, "version_minor": 0 }, @@ -519,7 +494,7 @@ "Map(center=[40.64356771453405, -111.92926447956665], controls=(WidgetControl(options=['position', 'transparent…" ] }, - "execution_count": 8, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -587,7 +562,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -633,7 +608,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AXooCguej_AkK295bC8_WXVH1oBx6imTvMTr0fi635pjMVgupD35Bq_1bdnn2zadU2bK-NnYU0CsiI6qOXRhbY7NvN1JZQpkfZI2pMnwF5q-yHN76fAL_Tn9TgaeJK916yBXDkQdB-1dKdNWJCfuGMIrp8j_0hGv-oTHVU4aCgYKAagSARESFQHGX2Mi4kPnsreTbkT_JrnUIGPU5g0174\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZCmcfUFilw2qyHmXLcFQFN9G5LYngkTOU6MzELQudJw4MqiiYnf3ZrrJR2JHwc2XvMhrn8xjfsMjmvtaZwNhvfYP7eEEtCRz8Cy87AYaeqdjILC3n9LbOF3peYIv9bWm9LOP3WT_BwTS0cqeSIlTrKubynjMVwoeXFS5S0aCgYKAUwSARESFQHGX2MiBEMf82fGFDIITfZ1DJd_1A0178&accessTokenCreationTime=1731461647526\n" ] }, { @@ -643,7 +618,7 @@ " " + "" ] }, "metadata": {}, @@ -660,7 +635,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1e89a15319a1410bac0f1291725bca66", + "model_id": "84139d794e134da89b04bc2d8d2b1a4a", "version_major": 2, "version_minor": 0 }, @@ -668,7 +643,7 @@ "Map(center=[0, 0], controls=(WidgetControl(options=['position', 'transparent_bg'], widget=SearchDataGUI(childr…" ] }, - "execution_count": 11, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -714,7 +689,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -760,7 +735,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AXooCgvnIz-x3wPxqxNi2bR0QTnSijQwQYf9gP3Jn0fNBA5AnKN96ClZuhPQtqJeU3MlbSTnjU1MjuZcItAPtYg-K3jFtJzMVrrK-r32ztC_4GfNW-Qh6PYnlKazCHTpnv1lpqHEoFq50DD79x7oMRRbQV65PDT6op4i_jIaCgYKAbgSARESFQHGX2MiUVMBX4xesivi5u_FIcn9sQ0174\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZAGMiGUPgw2NrmnwxzzFx8VTX-BPJQ-_J4Z-QdTQyhGaWpeuS7bIMy1rWghjTRgyFm3Xl2uzVw2zsWNqhM8VG3SK3VhigV9c_8VqTsGGYzUxsGfgfK83BU7xy5ND2pugqZ2_LrFL8PlYhLkWAwfCw2BP12UktKKrezbeCMaCgYKAd8SARESFQHGX2Mi_2WMF2oIqf5cPedmM9ZTkQ0178&accessTokenCreationTime=1731461667454\n" ] }, { @@ -770,7 +745,7 @@ " " + "" ] }, "metadata": {}, @@ -787,7 +762,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "4f0171640169413983cc7f22b54b1510", + "model_id": "93db9cb912934eb58f5d50b98066c851", "version_major": 2, "version_minor": 0 }, @@ -795,7 +770,7 @@ "Map(center=[46.529, 6.746], controls=(WidgetControl(options=['position', 'transparent_bg'], widget=SearchDataG…" ] }, - "execution_count": 12, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -858,7 +833,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -901,8 +876,47 @@ "text": [ "Adding layer: Switzerland\n", "Starting webmap\n", - "Using default refresh token for geeView\n" + "Using default refresh token for geeView\n", + "Local web server at: http://localhost:8001/geeView/ already serving.\n", + "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZBB-cdTrE44xvI5cOkjSnSGbICt_KDKOJiAjB2D86DDD4-zGJaAg7oEIRdOQI_fzMX7VhSa0R2DsJm7OaEO7vlhcTvVot1KiGfXqCgIyp4KWzUrB_fSzuN_MbGZfRzBoYDO7kNj8eWPkiy2Ndbl2TWYxfpg54jj0XROCnoaCgYKASASARESFQHGX2MiIQ2guJPQlUheLfUHwt2wBA0178&accessTokenCreationTime=1731461699271\n" ] + }, + { + "data": { + "text/html": [ + "\n", + " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "98babdd061464936bf00d2180d408f3d", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Map(center=[0, 0], controls=(WidgetControl(options=['position', 'transparent_bg'], widget=SearchDataGUI(childr…" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ @@ -921,13 +935,6 @@ "gvMap.view()\n", "gmMap" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { diff --git a/docs/build/html/_sources/notebooks/getLandsatWrapperNotebook.ipynb.txt b/docs/build/html/_sources/notebooks/getLandsatWrapperNotebook.ipynb.txt index 26d7a1e..02c5690 100644 --- a/docs/build/html/_sources/notebooks/getLandsatWrapperNotebook.ipynb.txt +++ b/docs/build/html/_sources/notebooks/getLandsatWrapperNotebook.ipynb.txt @@ -24,8 +24,8 @@ "See the License for the specific language governing permissions and\n", "limitations under the License.\n", "\n", - "\n", - "

    \"Open

    " + "[![github](https://img.shields.io/badge/-see%20sources-white?logo=github&labelColor=555)](https://github.com/gee-community/geeviz/blob/master/examples/getLandsatWrapperNotebook.ipynb) \n", + "[![github](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/gee-community/geeViz/blob/master/examples/getLandsatWrapperNotebook.ipynb)" ] }, { @@ -97,36 +97,23 @@ "Applying scale factors for C2 L7 data\n", "Applying scale factors for C2 L9 data\n", "Applying Fmask Cloud Mask\n", - "Applying Fmask Shadow Mask\n", - "Adding layer: Default Params 2009 153-152\n", - "Type: Image geeImage\n", - "Starting webmap\n", - "Using default refresh token for geeView\n", - "Local web server at: http://localhost:8001/geeView/ already serving.\n", - "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AXooCgu8EUNhnVn0a7J3kojB9X0Xzzg_L0wQ_9vf3gO85uG1xXah7x1f4h1ZOkwLHZfFf6osd7BJKZmL3FKOjlQ-lkED4Pa8u3pfpMI4pPBR7KdrZI16NOS0KXA8znCkFv3pqSr5qDHoCbnKgSVjrjXuiInj5u744-aV2DsaCgYKARcSARESFQHGX2MiqeVeKwjjA8CVaHytQWVyGA0174\n" + "Applying Fmask Shadow Mask\n" ] }, { - "data": { - "text/html": [ - "\n", - " \n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" + "ename": "TypeError", + "evalue": "Collection.count() missing 1 required positional argument: 'property'", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[1;32mIn[2], line 28\u001b[0m\n\u001b[0;32m 25\u001b[0m endYear \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m2009\u001b[39m\n\u001b[0;32m 27\u001b[0m \u001b[38;5;66;03m#Call on master wrapper function to get Landat scenes and composites\u001b[39;00m\n\u001b[1;32m---> 28\u001b[0m lsAndTs \u001b[38;5;241m=\u001b[39m \u001b[43mgetImagesLib\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgetLandsatWrapper\u001b[49m\u001b[43m(\u001b[49m\u001b[43mstudyArea\u001b[49m\u001b[43m,\u001b[49m\u001b[43mstartYear\u001b[49m\u001b[43m,\u001b[49m\u001b[43mendYear\u001b[49m\u001b[43m,\u001b[49m\u001b[43mstartJulian\u001b[49m\u001b[43m,\u001b[49m\u001b[43mendJulian\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 31\u001b[0m \u001b[38;5;66;03m#Separate into scenes and composites for subsequent analysis\u001b[39;00m\n\u001b[0;32m 32\u001b[0m processedScenes \u001b[38;5;241m=\u001b[39m lsAndTs[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mprocessedScenes\u001b[39m\u001b[38;5;124m'\u001b[39m]\n", + "File \u001b[1;32mc:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\geeViz\\getImagesLib.py:5432\u001b[0m, in \u001b[0;36mgetLandsatWrapper\u001b[1;34m(studyArea, startYear, endYear, startJulian, endJulian, timebuffer, weights, compositingMethod, toaOrSR, includeSLCOffL7, defringeL5, applyCloudScore, applyFmaskCloudMask, applyTDOM, applyFmaskCloudShadowMask, applyFmaskSnowMask, cloudScoreThresh, performCloudScoreOffset, cloudScorePctl, zScoreThresh, shadowSumThresh, contractPixels, dilatePixels, correctIllumination, correctScale, exportComposites, outputName, exportPathRoot, crs, transform, scale, resampleMethod, preComputedCloudScoreOffset, preComputedTDOMIRMean, preComputedTDOMIRStdDev, compositingReducer, harmonizeOLI, landsatCollectionVersion, overwrite, verbose)\u001b[0m\n\u001b[0;32m 5429\u001b[0m ls \u001b[38;5;241m=\u001b[39m ls\u001b[38;5;241m.\u001b[39mmap(\u001b[38;5;28;01mlambda\u001b[39;00m img: addZenithAzimuth(img, toaOrSR))\n\u001b[0;32m 5431\u001b[0m \u001b[38;5;66;03m# Create composite time series\u001b[39;00m\n\u001b[1;32m-> 5432\u001b[0m ts \u001b[38;5;241m=\u001b[39m \u001b[43mcompositeTimeSeries\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 5433\u001b[0m \u001b[43m \u001b[49m\u001b[43mls\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mls\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 5434\u001b[0m \u001b[43m \u001b[49m\u001b[43mstartYear\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstartYear\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 5435\u001b[0m \u001b[43m \u001b[49m\u001b[43mendYear\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mendYear\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 5436\u001b[0m \u001b[43m \u001b[49m\u001b[43mstartJulian\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstartJulian\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 5437\u001b[0m \u001b[43m \u001b[49m\u001b[43mendJulian\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mendJulian\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 5438\u001b[0m \u001b[43m \u001b[49m\u001b[43mtimebuffer\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtimebuffer\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 5439\u001b[0m \u001b[43m \u001b[49m\u001b[43mweights\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mweights\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 5440\u001b[0m \u001b[43m \u001b[49m\u001b[43mcompositingMethod\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcompositingMethod\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 5441\u001b[0m \u001b[43m \u001b[49m\u001b[43mcompositingReducer\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcompositingReducer\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 5442\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 5444\u001b[0m \u001b[38;5;66;03m# Correct illumination\u001b[39;00m\n\u001b[0;32m 5445\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m correctIllumination:\n", + "File \u001b[1;32mc:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\geeViz\\getImagesLib.py:4315\u001b[0m, in \u001b[0;36mcompositeTimeSeries\u001b[1;34m(ls, startYear, endYear, startJulian, endJulian, timebuffer, weights, compositingMethod, compositingReducer)\u001b[0m\n\u001b[0;32m 4300\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m composite\u001b[38;5;241m.\u001b[39mset(\n\u001b[0;32m 4301\u001b[0m {\n\u001b[0;32m 4302\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124msystem:time_start\u001b[39m\u001b[38;5;124m\"\u001b[39m: ee\u001b[38;5;241m.\u001b[39mDate\u001b[38;5;241m.\u001b[39mfromYMD(year \u001b[38;5;241m+\u001b[39m yearWithMajority, \u001b[38;5;241m6\u001b[39m, \u001b[38;5;241m1\u001b[39m)\u001b[38;5;241m.\u001b[39mmillis(),\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 4311\u001b[0m }\n\u001b[0;32m 4312\u001b[0m )\n\u001b[0;32m 4314\u001b[0m \u001b[38;5;66;03m# Iterate across each year\u001b[39;00m\n\u001b[1;32m-> 4315\u001b[0m ts \u001b[38;5;241m=\u001b[39m \u001b[43m[\u001b[49m\u001b[43myearCompositeGetter\u001b[49m\u001b[43m(\u001b[49m\u001b[43myr\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43myr\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mee\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mList\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msequence\u001b[49m\u001b[43m(\u001b[49m\u001b[43mstartYear\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m+\u001b[39;49m\u001b[43m \u001b[49m\u001b[43mtimebuffer\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mendYear\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m-\u001b[39;49m\u001b[43m \u001b[49m\u001b[43mtimebuffer\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgetInfo\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m]\u001b[49m\n\u001b[0;32m 4316\u001b[0m ts \u001b[38;5;241m=\u001b[39m ee\u001b[38;5;241m.\u001b[39mImageCollection(ts)\u001b[38;5;241m.\u001b[39mset(args)\n\u001b[0;32m 4318\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m ts\n", + "File \u001b[1;32mc:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\geeViz\\getImagesLib.py:4315\u001b[0m, in \u001b[0;36m\u001b[1;34m(.0)\u001b[0m\n\u001b[0;32m 4300\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m composite\u001b[38;5;241m.\u001b[39mset(\n\u001b[0;32m 4301\u001b[0m {\n\u001b[0;32m 4302\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124msystem:time_start\u001b[39m\u001b[38;5;124m\"\u001b[39m: ee\u001b[38;5;241m.\u001b[39mDate\u001b[38;5;241m.\u001b[39mfromYMD(year \u001b[38;5;241m+\u001b[39m yearWithMajority, \u001b[38;5;241m6\u001b[39m, \u001b[38;5;241m1\u001b[39m)\u001b[38;5;241m.\u001b[39mmillis(),\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 4311\u001b[0m }\n\u001b[0;32m 4312\u001b[0m )\n\u001b[0;32m 4314\u001b[0m \u001b[38;5;66;03m# Iterate across each year\u001b[39;00m\n\u001b[1;32m-> 4315\u001b[0m ts \u001b[38;5;241m=\u001b[39m [\u001b[43myearCompositeGetter\u001b[49m\u001b[43m(\u001b[49m\u001b[43myr\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;28;01mfor\u001b[39;00m yr \u001b[38;5;129;01min\u001b[39;00m ee\u001b[38;5;241m.\u001b[39mList\u001b[38;5;241m.\u001b[39msequence(startYear \u001b[38;5;241m+\u001b[39m timebuffer, endYear \u001b[38;5;241m-\u001b[39m timebuffer)\u001b[38;5;241m.\u001b[39mgetInfo()]\n\u001b[0;32m 4316\u001b[0m ts \u001b[38;5;241m=\u001b[39m ee\u001b[38;5;241m.\u001b[39mImageCollection(ts)\u001b[38;5;241m.\u001b[39mset(args)\n\u001b[0;32m 4318\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m ts\n", + "File \u001b[1;32mc:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\geeViz\\getImagesLib.py:4290\u001b[0m, in \u001b[0;36mcompositeTimeSeries..yearCompositeGetter\u001b[1;34m(year)\u001b[0m\n\u001b[0;32m 4287\u001b[0m images \u001b[38;5;241m=\u001b[39m yearsTT\u001b[38;5;241m.\u001b[39mmap(yrGetter)\n\u001b[0;32m 4288\u001b[0m lsT \u001b[38;5;241m=\u001b[39m ee\u001b[38;5;241m.\u001b[39mImageCollection(ee\u001b[38;5;241m.\u001b[39mFeatureCollection(images)\u001b[38;5;241m.\u001b[39mflatten())\n\u001b[1;32m-> 4290\u001b[0m count \u001b[38;5;241m=\u001b[39m \u001b[43mlsT\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mselect\u001b[49m\u001b[43m(\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcount\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241m.\u001b[39mrename([\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcompositeObsCount\u001b[39m\u001b[38;5;124m\"\u001b[39m])\n\u001b[0;32m 4291\u001b[0m \u001b[38;5;66;03m# Compute median or medoid or apply reducer\u001b[39;00m\n\u001b[0;32m 4292\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m compositingReducer \u001b[38;5;241m!=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m:\n", + "\u001b[1;31mTypeError\u001b[0m: Collection.count() missing 1 required positional argument: 'property'" + ] } ], "source": [ diff --git a/docs/build/html/_sources/notebooks/global_land_cover_example_notebook.ipynb.txt b/docs/build/html/_sources/notebooks/global_land_cover_example_notebook.ipynb.txt index 9610f59..32b5539 100644 --- a/docs/build/html/_sources/notebooks/global_land_cover_example_notebook.ipynb.txt +++ b/docs/build/html/_sources/notebooks/global_land_cover_example_notebook.ipynb.txt @@ -25,8 +25,8 @@ "See the License for the specific language governing permissions and\n", "limitations under the License.\n", "\n", - "\n", - "

    \"Open

    \n" + "[![github](https://img.shields.io/badge/-see%20sources-white?logo=github&labelColor=555)](https://github.com/gee-community/geeviz/blob/master/examples/global_land_cover_example_notebook.ipynb) \n", + "[![github](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/gee-community/geeViz/blob/master/examples/global_land_cover_example_notebook.ipynb)\n" ] }, { @@ -73,7 +73,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -86,9 +86,11 @@ "Adding layer: Global Land Cover\n", "Starting webmap\n", "Using default refresh token for geeView\n", - "Local web server at: http://localhost:8001/geeView/ already serving.\n", + "Starting local web server at: http://localhost:1234/geeView/\n", + "HTTP server command: \"c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\python.exe\" -m http.server 1234\n", + "Done\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612xNtUi9PBkOxPXO6EZtAgcREOeiqv4JgC8RmfDyFnrXNjLv1FMt4kgBjuTIl1x9b4Dzo8yV8PIuSkt6193mRc31AlnJ7_MGfEXOGUP-uXND6tDO92E96LFlMQgoRhFIfXCt_dWEpCQG_StIeP3tcVwResLi2v0tW7J2UcIaCgYKAR4SARESFQHGX2MiPYaA9vv1ECsOyDAsFlUDzw0178\n" + "geeView URL: http://localhost:1234/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612wnIGOy__UqV9zq2nxuSseeoEwZdKpMuR4btK_0Ps5wJx-X8976Sf6MgA9aex2xyowAjwM-Oa6-h89U6OIT9_qWTqDtVyKHWmGtqu6YXU4-S8EshRtcCN8PupmfWl39msYSqtw_s-wajAD2uY3eFyCFhU64UtJD9GFbHMAaCgYKAY8SARESFQHGX2Mi-S01HkxUVh5Sgp6EN7h1NA0178\n" ] }, { @@ -98,7 +100,7 @@ " " + "" ] }, "metadata": {}, @@ -115,7 +117,7 @@ ], "source": [ "Map.clearMap()\n", - "\n", + "Map.port = 1234\n", "# Specify projection to use for zonal summaries and map querying\n", "# Be sure to leave one of scale or transform as None\n", "crs= 'EPSG:4326'\n", diff --git a/docs/build/html/_sources/notebooks/lcmsViewerExampleNotebook.ipynb.txt b/docs/build/html/_sources/notebooks/lcmsViewerExampleNotebook.ipynb.txt index 2ebcddf..63430e9 100644 --- a/docs/build/html/_sources/notebooks/lcmsViewerExampleNotebook.ipynb.txt +++ b/docs/build/html/_sources/notebooks/lcmsViewerExampleNotebook.ipynb.txt @@ -7,26 +7,27 @@ "metadata": {}, "source": [ "# LCMS Viewer Intro Notebook\n", - "> * Based on https://github.com/google/earthengine-community/blob/master/datasets/scripts/LCMS_Visualization.js\n", - "> * Copyright 2024 The Google Earth Engine Community Authors\n", + "* Based on https://github.com/google/earthengine-community/blob/master/datasets/scripts/LCMS_Visualization.js\n", + "Copyright 2024 The Google Earth Engine Community Authors\n", " \t\n", - ">> * Licensed under the Apache License, Version 2.0 (the \"License\");\n", - ">> you may not use this file except in compliance with the License.\n", - ">> You may obtain a copy of the License at\n", - ">> https://www.apache.org/licenses/LICENSE-2.0\n", - ">> Unless required by applicable law or agreed to in writing, software\n", - ">> distributed under the License is distributed on an \"AS IS\" BASIS,\n", - ">> WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n", - ">> See the License for the specific language governing permissions and\n", - ">> limitations under the License.\n", + "Licensed under the Apache License, Version 2.0 (the \"License\");\n", + "you may not use this file except in compliance with the License.\n", + "You may obtain a copy of the License at\n", + "https://www.apache.org/licenses/LICENSE-2.0\n", + "Unless required by applicable law or agreed to in writing, software\n", + "distributed under the License is distributed on an \"AS IS\" BASIS,\n", + "WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n", + "See the License for the specific language governing permissions and\n", + "limitations under the License.\n", " \t\n", - ">> * Example script for visualizing LCMS change summaries, land cover, and land use.\n", - ">> * A more in-depth visualization of LCMS products is available at: [https://apps.fs.usda.gov/lcms-viewer/index.html](https://apps.fs.usda.gov/lcms-viewer/index.html) \n", - ">> * Contact sm.fs.lcms@usda.gov with any questions or specific data requests.\n", + "* Example script for visualizing LCMS change summaries, land cover, and land use.\n", + "* A more in-depth visualization of LCMS products is available at: [https://apps.fs.usda.gov/lcms-viewer/index.html](https://apps.fs.usda.gov/lcms-viewer/index.html) \n", + "* Contact sm.fs.lcms@usda.gov with any questions or specific data requests.\n", "\n", "\n", "\n", - "

    \"Open

    " + "[![github](https://img.shields.io/badge/-see%20sources-white?logo=github&labelColor=555)](https://github.com/gee-community/geeviz/blob/master/examples/lcmsViewerExampleNotebook.ipynb) \n", + "[![github](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/gee-community/geeViz/blob/master/examples/lcmsViewerExampleNotebook.ipynb)" ] }, { @@ -457,7 +458,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 11, "id": "f7b4824e", "metadata": {}, "outputs": [ @@ -466,11 +467,12 @@ "output_type": "stream", "text": [ "Adding layer: LCMS Change Time Lapse\n", + "Setting default query date format to: YYYY\n", "Starting webmap\n", "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=rcr-gee-2&accessToken=ya29.a0AfB_byBQwMDTqBKFllZQoa1bn5jPRXI0esx1cUuwXOzvbx-m_E327RkL0jDeU8DAGBhn1DZJM0awgBoTJW5L2X4oVycGZxD9fzORXakpgzOl9S2TJ0hgeWFF1-mytXLSUiGcZoG3XVyS4H5stTvugxvOLLPfcTNPA4Z6KJsEhu-GaCgYKAUASARASFQHGX2Mi7D0qnuquWaFbHJnW_oe2qw0179\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612wkLZ5nkrRefktkInWr4bG1xoFijDRm4zKqEkOSY5SlJkshjY8c8xPH0opFivgsSvpi-zs-EMn4cghA5Q9vvm7dszHkaSY2xuMWT94ACWv_8wy0D-nhVOi29Oo5fQ5wmHrYHpnRzBiH6SF3RyS-9rr7i3VwptGM3yc1aokaCgYKAUQSARESFQHGX2MiEKkp7i2adXQeQErg-zELAw0178\n" ] }, { @@ -480,7 +482,7 @@ " " + "" ] }, "metadata": {}, diff --git a/docs/build/html/_sources/notebooks/mapBiomasViewerExampleNotebook.ipynb.txt b/docs/build/html/_sources/notebooks/mapBiomasViewerExampleNotebook.ipynb.txt index a55b8b3..4813496 100644 --- a/docs/build/html/_sources/notebooks/mapBiomasViewerExampleNotebook.ipynb.txt +++ b/docs/build/html/_sources/notebooks/mapBiomasViewerExampleNotebook.ipynb.txt @@ -25,8 +25,8 @@ "See the License for the specific language governing permissions and\n", "limitations under the License.\n", "\n", - "\n", - "

    \"Open

    " + "[![github](https://img.shields.io/badge/-see%20sources-white?logo=github&labelColor=555)](https://github.com/gee-community/geeviz/blob/master/examples/mapBiomasViewerExampleNotebook.ipynb) \n", + "[![github](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/gee-community/geeViz/blob/master/examples/mapBiomasViewerExampleNotebook.ipynb)" ] }, { @@ -40,7 +40,20 @@ "text": [ "Initializing GEE\n", "Cached project id file path: C:\\Users\\ihousman\\.config\\earthengine\\credentials.proj_id\n", - "Cached project id: lcms-292214\n", + "Cached project id: lcms-292214\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "*** Earth Engine *** Share your feedback by taking our Annual Developer Satisfaction Survey: https://google.qualtrics.com/jfe/form/SV_0JLhFqfSY1uiEaW?source=Init\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Successfully initialized\n", "geeViz package folder: c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\geeViz\n", "done\n" @@ -90,11 +103,9 @@ "Adding layer: MapBiomas LULC\n", "Starting webmap\n", "Using default refresh token for geeView\n", - "Starting local web server at: http://localhost:8001/geeView/\n", - "HTTP server command: \"c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\python.exe\" -m http.server 8001\n", - "Done\n", + "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612y8ZlxJh5tseR6SiuPocMyKlrXzdf5Qzq6KskwfbOwHa9ww08rwL0Q9wsBAwJHaujzpYpbWXBllmZn3SqjX3NAcrHHXy__zLsaAhNNgwiJecXOI9aURNb1ecAngWo_H1O6r5JnMs0dNrcVvPVHtPO9iLCNSpNwoxLwFnk8aCgYKAX8SARESFQHGX2Midtno9Bis8gZowS0Gh0zjmw0178\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZBoV6RTt-kTHktaitp6cLCRopannvKr9B7F9QimHl9HpH7bQSlKU53sXETcKcw5F5qayQER5a-NS3bhiUocGlPCAoK0T4OH6kON4zdkFLv-ZFMB3-S0Hl34cOsGuljb25SUEJoSZ09ieUHPNmSPqKCvGV0V8dVSB4myMtwaCgYKATsSARESFQHGX2MiBg28W2WOQErk15VfYCK2tQ0178&accessTokenCreationTime=1732571109268\n" ] }, { @@ -104,7 +115,7 @@ " " + "" ] }, "metadata": {}, diff --git a/docs/build/html/_static/documentation_options.js b/docs/build/html/_static/documentation_options.js index a11f2a5..d6e6052 100644 --- a/docs/build/html/_static/documentation_options.js +++ b/docs/build/html/_static/documentation_options.js @@ -1,5 +1,5 @@ const DOCUMENTATION_OPTIONS = { - VERSION: '"2024.11.2"', + VERSION: '"2024.11.3"', LANGUAGE: 'en', COLLAPSE_INDEX: false, BUILDER: 'html', diff --git a/docs/build/html/examples.html b/docs/build/html/examples.html index f88a597..11b0a0f 100644 --- a/docs/build/html/examples.html +++ b/docs/build/html/examples.html @@ -6,7 +6,7 @@ - Examples - geeViz "2024.11.2" docs + Examples - geeViz "2024.11.3" docs @@ -142,7 +142,7 @@
    @@ -168,7 +168,7 @@
    - geeViz "2024.11.2" docs + geeViz "2024.11.3" docs @@ -543,7 +543,7 @@

    Other examples +

    diff --git a/docs/build/html/genindex.html b/docs/build/html/genindex.html index d10da71..c1f9a56 100644 --- a/docs/build/html/genindex.html +++ b/docs/build/html/genindex.html @@ -4,7 +4,7 @@ - Index - geeViz "2024.11.2" docs + Index - geeViz "2024.11.3" docs @@ -140,7 +140,7 @@
    @@ -166,7 +166,7 @@
    - geeViz "2024.11.2" docs + geeViz "2024.11.3" docs @@ -809,7 +809,7 @@

    W

    - + diff --git a/docs/build/html/index.html b/docs/build/html/index.html index f1d329a..7bb1548 100644 --- a/docs/build/html/index.html +++ b/docs/build/html/index.html @@ -6,7 +6,7 @@ - geeViz "2024.11.2" docs + geeViz "2024.11.3" docs @@ -142,7 +142,7 @@
    @@ -168,7 +168,7 @@
    - geeViz "2024.11.2" docs + geeViz "2024.11.3" docs @@ -647,7 +647,7 @@

    geeViz Overview +

    diff --git a/docs/build/html/info/geeViz.assetManagerLib.html b/docs/build/html/info/geeViz.assetManagerLib.html index aba1d0a..dcfc7d8 100644 --- a/docs/build/html/info/geeViz.assetManagerLib.html +++ b/docs/build/html/info/geeViz.assetManagerLib.html @@ -6,7 +6,7 @@ - geeViz.assetManagerLib - geeViz "2024.11.2" docs + geeViz.assetManagerLib - geeViz "2024.11.3" docs @@ -142,7 +142,7 @@
    @@ -168,7 +168,7 @@
    - geeViz "2024.11.2" docs + geeViz "2024.11.3" docs @@ -399,7 +399,7 @@
    - + diff --git a/docs/build/html/info/geeViz.changeDetectionLib.html b/docs/build/html/info/geeViz.changeDetectionLib.html index 5d002b1..d17a333 100644 --- a/docs/build/html/info/geeViz.changeDetectionLib.html +++ b/docs/build/html/info/geeViz.changeDetectionLib.html @@ -6,7 +6,7 @@ - geeViz.changeDetectionLib - geeViz "2024.11.2" docs + geeViz.changeDetectionLib - geeViz "2024.11.3" docs @@ -142,7 +142,7 @@
    @@ -168,7 +168,7 @@
    - geeViz "2024.11.2" docs + geeViz "2024.11.3" docs @@ -492,7 +492,7 @@
    - + diff --git a/docs/build/html/info/geeViz.cloudStorageManagerLib.html b/docs/build/html/info/geeViz.cloudStorageManagerLib.html index c571ef5..5802d96 100644 --- a/docs/build/html/info/geeViz.cloudStorageManagerLib.html +++ b/docs/build/html/info/geeViz.cloudStorageManagerLib.html @@ -6,7 +6,7 @@ - geeViz.cloudStorageManagerLib - geeViz "2024.11.2" docs + geeViz.cloudStorageManagerLib - geeViz "2024.11.3" docs @@ -142,7 +142,7 @@
    @@ -168,7 +168,7 @@
    - geeViz "2024.11.2" docs + geeViz "2024.11.3" docs @@ -327,7 +327,7 @@
    - + diff --git a/docs/build/html/info/geeViz.gee2Pandas.html b/docs/build/html/info/geeViz.gee2Pandas.html index 5adddb2..8353d19 100644 --- a/docs/build/html/info/geeViz.gee2Pandas.html +++ b/docs/build/html/info/geeViz.gee2Pandas.html @@ -6,7 +6,7 @@ - geeViz.gee2Pandas - geeViz "2024.11.2" docs + geeViz.gee2Pandas - geeViz "2024.11.3" docs @@ -142,7 +142,7 @@
    @@ -168,7 +168,7 @@
    - geeViz "2024.11.2" docs + geeViz "2024.11.3" docs @@ -339,7 +339,7 @@
    - + diff --git a/docs/build/html/info/geeViz.geeView.html b/docs/build/html/info/geeViz.geeView.html index 4436c67..840b15c 100644 --- a/docs/build/html/info/geeViz.geeView.html +++ b/docs/build/html/info/geeViz.geeView.html @@ -6,7 +6,7 @@ - geeViz.geeView - geeViz "2024.11.2" docs + geeViz.geeView - geeViz "2024.11.3" docs @@ -142,7 +142,7 @@
    @@ -168,7 +168,7 @@
    - geeViz "2024.11.2" docs + geeViz "2024.11.3" docs @@ -367,7 +367,7 @@
    - + diff --git a/docs/build/html/info/geeViz.getImagesLib.html b/docs/build/html/info/geeViz.getImagesLib.html index c6da076..2c4452d 100644 --- a/docs/build/html/info/geeViz.getImagesLib.html +++ b/docs/build/html/info/geeViz.getImagesLib.html @@ -6,7 +6,7 @@ - geeViz.getImagesLib - geeViz "2024.11.2" docs + geeViz.getImagesLib - geeViz "2024.11.3" docs @@ -142,7 +142,7 @@
    @@ -168,7 +168,7 @@
    - geeViz "2024.11.2" docs + geeViz "2024.11.3" docs @@ -615,7 +615,7 @@
    - + diff --git a/docs/build/html/info/geeViz.phEEnoViz.html b/docs/build/html/info/geeViz.phEEnoViz.html index 8db7f6c..4d5aec8 100644 --- a/docs/build/html/info/geeViz.phEEnoViz.html +++ b/docs/build/html/info/geeViz.phEEnoViz.html @@ -6,7 +6,7 @@ - geeViz.phEEnoViz - geeViz "2024.11.2" docs + geeViz.phEEnoViz - geeViz "2024.11.3" docs @@ -142,7 +142,7 @@
    @@ -168,7 +168,7 @@
    - geeViz "2024.11.2" docs + geeViz "2024.11.3" docs @@ -324,7 +324,7 @@
    - + diff --git a/docs/build/html/info/geeViz.taskManagerLib.html b/docs/build/html/info/geeViz.taskManagerLib.html index 013afc9..e68c329 100644 --- a/docs/build/html/info/geeViz.taskManagerLib.html +++ b/docs/build/html/info/geeViz.taskManagerLib.html @@ -6,7 +6,7 @@ - geeViz.taskManagerLib - geeViz "2024.11.2" docs + geeViz.taskManagerLib - geeViz "2024.11.3" docs @@ -142,7 +142,7 @@
    @@ -168,7 +168,7 @@
    - geeViz "2024.11.2" docs + geeViz "2024.11.3" docs @@ -339,7 +339,7 @@
    - + diff --git a/docs/build/html/installation.html b/docs/build/html/installation.html index 7851f0c..e23b53f 100644 --- a/docs/build/html/installation.html +++ b/docs/build/html/installation.html @@ -6,7 +6,7 @@ - Installation - geeViz "2024.11.2" docs + Installation - geeViz "2024.11.3" docs @@ -142,7 +142,7 @@
    @@ -168,7 +168,7 @@
    - geeViz "2024.11.2" docs + geeViz "2024.11.3" docs @@ -351,7 +351,7 @@

    Getting Started +

    diff --git a/docs/build/html/modules.html b/docs/build/html/modules.html index fe39516..38f363e 100644 --- a/docs/build/html/modules.html +++ b/docs/build/html/modules.html @@ -6,7 +6,7 @@ - Details - geeViz "2024.11.2" docs + Details - geeViz "2024.11.3" docs @@ -142,7 +142,7 @@
    @@ -168,7 +168,7 @@
    - geeViz "2024.11.2" docs + geeViz "2024.11.3" docs @@ -478,10 +478,19 @@

    Details#<

    ”scale” (int, default None): The spatial resolution to use for zonal stats. Only specify if transform : None.

    ”line” (bool, default True): Whether to create a line chart,

    ”sankey” (bool, default False): Whether to create Sankey charts - only available for thematic (discrete) inputs that have a system:time_start property set for each image,

    -

    ”sankeyTransitionPeriods” (list of lists, default None): The years to use as transition periods for sankey charts (e.g. [[1985,1987],[2000,2002],[2020,2022]]). If not provided, users can enter years in the map user interface under Area Tools -> Transition Charting Periods. These will automatically be used for any layers where no sankeyTransitionPeriods were provided. If years are provided, the years in the user interface will not be used for that layer.

    -

    ”sankeyMinPercentage” (float, default 0.5): The minimum percentage a given class has to be to be shown in the sankey chart.

    +

    ”chartLabelMaxWidth” (int, default 40): The maximum number of characters, including spaces, allowed in a single line of a chart class label. The class name will be broken at this number of characters, including spaces, to go to the next line,

    +

    ”chartLabelMaxLength” (int, default 100): The maximum number of characters, including spaces, allowed in a chart class label. Any class name with more characters, including spaces, than this number will be cut off at this number of characters,

    +

    ”sankeyTransitionPeriods” (list of lists, default None): The years to use as transition periods for sankey charts (e.g. [[1985,1987],[2000,2002],[2020,2022]]). If not provided, users can enter years in the map user interface under Area Tools -> Transition Charting Periods. These will automatically be used for any layers where no sankeyTransitionPeriods were provided. If years are provided, the years in the user interface will not be used for that layer,

    +

    ”sankeyMinPercentage” (float, default 0.5): The minimum percentage a given class has to be to be shown in the sankey chart,

    ”thematic” (bool): Whether input has discrete values or not. If True, it forces the reducer to ee.Reducer.frequencyHistogram() even if not specified and even if bandName_class_values, bandName_class_names, bandName_class_palette properties are not available,

    -

    ”palette” (list, or comma-separated strings): List of hex codes for colors for charts. This is especially useful when bandName_class_values, bandName_class_names, bandName_class_palette properties are not available, but there is a desired set of colors for each band to have on the chart.

    +

    ”palette” (list, or comma-separated strings): List of hex codes for colors for charts. This is especially useful when bandName_class_values, bandName_class_names, bandName_class_palette properties are not available, but there is a desired set of colors for each band to have on the chart,

    +

    ”showGrid” (bool, default True): Whether to show the grid lines on the line or bar graph,

    +

    ”rangeSlider” (bool,default False): Whether to include the x-axis range selector on the bottom of each graph (https://plotly.com/javascript/range-slider/>),

    +

    ”barChartMaxClasses” (int, default 20): The maximum number of classes to show for image bar charts. Will automatically only show the top bartChartMaxClasses in any image bar chart. Any downloaded csv table will still have all of the class counts,

    +

    ”minZoomSpecifiedScale” (int, default 11): The map zoom level where any lower zoom level, not including this zoom level, will multiply the spatial resolution used for the zonal stats by 2 for each lower zoom level. E.g. if the minZoomSpecifiedScale is 9 and the scale is 30, any zoom level >= 9 will compute zonal stats at 30m spatial resolution. Then, at zoom level 8, it will be 60m. Zoom level 7 will be 120m, etc,

    +

    ”chartPrecision” (int, default 3): Used to override the default global precision settings for a specific area charting layer. See setQueryPrecision for setting the global charting precision. When specified, for this specific area charting layer, will show the larger of chartPrecision decimal places or ceiling(chartDecimalProportion * total decimal places). E.g. if the number is 1.12345678, 0.25 of 8 decimal places is 2, so 3 will be used and yield 1.123,

    +

    ”chartDecimalProportion” (float, default 0.25): Used to override the default global precision settings for a specific area charting layer. See setQueryPrecision for setting the global charting precision. When specified, for this specific area charting layer, will show the larger of chartPrecision decimal places or chartDecimalProportion * total decimal places. E.g. if the number is 1.1234567891234, ceiling(0.25 of 13) decimal places is 4, so 4 will be used and yield 1.1235,

    +

    ”hovermode” (str, default “closest”): The mode to show hover text in area summary charts. Options include “closest”, “x”, “y”, “x unified”, and “y unified”,

    }

  • @@ -524,6 +533,7 @@

    Details#<

    ”layerType” (str, one of geeImage, geeImageCollection, geeVector, geeVectorImage, geoJSONVector): Optional parameter. For vector data (“featureCollection”, “feature”, or “geometry”), you can spcify “geeVector” if you would like to force the vector to be an actual vector object on the client. This can be slow if the ee object is large and/or complex. Otherwise, any “featureCollection”, “feature”, or “geometry” will default to “geeVectorImage” where the vector is rasterized on-the-fly for map rendering. Any querying of the vector will query the underlying vector data though. To add a geojson vector as json, just add the json as the image parameter.,

    ”reducer” (Reducer, default ‘ee.Reducer.lastNonNull()’): If an ImageCollection is provided, how to reduce it to create the layer that is shown on the map. Defaults to ee.Reducer.lastNonNull(),

    ”autoViz” (bool): Whether to take image bandName_class_values, bandName_class_names, bandName_class_palette properties to visualize, create a legend (populates classLegendDict), and apply class names to any query functions (populates queryDict),

    +

    ”includeClassValues” (bool, default True): Whether to include the numeric value of each class in the legend when “autoViz”:True.

    ”canQuery” (bool, default True): Whether a layer can be queried when visible.,

    ”addToLegend” (bool, default True): Whether geeViz should try to create a legend for this layer. Sometimes setting it to False is useful for continuous multi-band inputs.,

    ”classLegendDict” (dict): A dictionary with a key:value of the name:color(hex) to include in legend. This is auto-populated when autoViz : True,

    @@ -551,14 +561,19 @@

    Details#<

    ”scale” (int, default None): The spatial resolution to use for zonal stats. Only specify if transform : None.

    ”line” (bool, default True): Whether to create a line chart,

    ”sankey” (bool, default False): Whether to create Sankey charts - only available for thematic (discrete) inputs that have a system:time_start property set for each image,

    -

    ”sankeyTransitionPeriods” (list of lists, default None): The years to use as transition periods for sankey charts (e.g. [[1985,1987],[2000,2002],[2020,2022]]). If not provided, users can enter years in the map user interface under Area Tools -> Transition Charting Periods. These will automatically be used for any layers where no sankeyTransitionPeriods were provided. If years are provided, the years in the user interface will not be used for that layer.

    -

    ”sankeyMinPercentage” (float, default 0.5): The minimum percentage a given class has to be to be shown in the sankey chart.

    +

    ”chartLabelMaxWidth” (int, default 40): The maximum number of characters, including spaces, allowed in a single line of a chart class label. The class name will be broken at this number of characters, including spaces, to go to the next line,

    +

    ”chartLabelMaxLength” (int, default 100): The maximum number of characters, including spaces, allowed in a chart class label. Any class name with more characters, including spaces, than this number will be cut off at this number of characters,

    +

    ”sankeyTransitionPeriods” (list of lists, default None): The years to use as transition periods for sankey charts (e.g. [[1985,1987],[2000,2002],[2020,2022]]). If not provided, users can enter years in the map user interface under Area Tools -> Transition Charting Periods. These will automatically be used for any layers where no sankeyTransitionPeriods were provided. If years are provided, the years in the user interface will not be used for that layer,

    +

    ”sankeyMinPercentage” (float, default 0.5): The minimum percentage a given class has to be to be shown in the sankey chart,

    ”thematic” (bool): Whether input has discrete values or not. If True, it forces the reducer to ee.Reducer.frequencyHistogram() even if not specified and even if bandName_class_values, bandName_class_names, bandName_class_palette properties are not available,

    ”palette” (list, or comma-separated strings): List of hex codes for colors for charts. This is especially useful when bandName_class_values, bandName_class_names, bandName_class_palette properties are not available, but there is a desired set of colors for each band to have on the chart,

    ”showGrid” (bool, default True): Whether to show the grid lines on the line or bar graph,

    -

    ”rangeSlider” (bool,default False): Whether to include the x-axis range selector on the bottom of each graph (https://plotly.com/javascript/range-slider/>)

    -

    ”barChartMaxClasses” (int, default 20): The maximum number of classes to show for image bar charts. Will automatically only show the top bartChartMaxClasses in any image bar chart. Any downloaded csv table will still have all of the class counts.

    -

    ”minZoomSpecifiedScale” (int, default 11): The map zoom level where any lower zoom level, not including this zoom level, will multiply the spatial resolution used for the zonal stats by 2 for each lower zoom level. E.g. if the minZoomSpecifiedScale is 9 and the scale is 30, any zoom level >= 9 will compute zonal stats at 30m spatial resolution. Then, at zoom level 8, it will be 60m. Zoom level 7 will be 120m, etc.

    +

    ”rangeSlider” (bool,default False): Whether to include the x-axis range selector on the bottom of each graph (https://plotly.com/javascript/range-slider/>),

    +

    ”barChartMaxClasses” (int, default 20): The maximum number of classes to show for image bar charts. Will automatically only show the top bartChartMaxClasses in any image bar chart. Any downloaded csv table will still have all of the class counts,

    +

    ”minZoomSpecifiedScale” (int, default 11): The map zoom level where any lower zoom level, not including this zoom level, will multiply the spatial resolution used for the zonal stats by 2 for each lower zoom level. E.g. if the minZoomSpecifiedScale is 9 and the scale is 30, any zoom level >= 9 will compute zonal stats at 30m spatial resolution. Then, at zoom level 8, it will be 60m. Zoom level 7 will be 120m, etc,

    +

    ”chartPrecision” (int, default 3): Used to override the default global precision settings for a specific area charting layer. See setQueryPrecision for setting the global charting precision. When specified, for this specific area charting layer, will show the larger of chartPrecision decimal places or ceiling(chartDecimalProportion * total decimal places). E.g. if the number is 1.12345678, 0.25 of 8 decimal places is 2, so 3 will be used and yield 1.123,

    +

    ”chartDecimalProportion” (float, default 0.25): Used to override the default global precision settings for a specific area charting layer. See setQueryPrecision for setting the global charting precision. When specified, for this specific area charting layer, will show the larger of chartPrecision decimal places or chartDecimalProportion * total decimal places. E.g. if the number is 1.1234567891234, ceiling(0.25 of 13) decimal places is 4, so 4 will be used and yield 1.1235,

    +

    ”hovermode” (str, default “closest”): The mode to show hover text in area summary charts. Options include “closest”, “x”, “y”, “x unified”, and “y unified”,

    }

    @@ -639,6 +654,7 @@

    Details#<

    ”palette” (str, list, or comma-separated strings): List of CSS-style color strings (single-band previews only).,

    ”opacity” (float): a number between 0 and 1 for initially set opacity.,

    ”autoViz” (bool): Whether to take image bandName_class_values, bandName_class_names, bandName_class_palette properties to visualize, create a legend (populates classLegendDict), and apply class names to any query functions (populates queryDict),

    +

    ”includeClassValues” (bool, default True): Whether to include the numeric value of each class in the legend when “autoViz”:True.

    ”canQuery” (bool, default True): Whether a layer can be queried when visible.,

    ”addToLegend” (bool, default True): Whether geeViz should try to create a legend for this layer. Sometimes setting it to False is useful for continuous multi-band inputs.,

    ”classLegendDict” (dict): A dictionary with a key:value of the name:color(hex) to include in legend. This is auto-populated when autoViz : True,

    @@ -666,14 +682,19 @@

    Details#<

    ”scale” (int, default None): The spatial resolution to use for zonal stats. Only specify if transform : None.

    ”line” (bool, default True): Whether to create a line chart,

    ”sankey” (bool, default False): Whether to create Sankey charts - only available for thematic (discrete) inputs that have a system:time_start property set for each image,

    -

    ”sankeyTransitionPeriods” (list of lists, default None): The years to use as transition periods for sankey charts (e.g. [[1985,1987],[2000,2002],[2020,2022]]). If not provided, users can enter years in the map user interface under Area Tools -> Transition Charting Periods. These will automatically be used for any layers where no sankeyTransitionPeriods were provided. If years are provided, the years in the user interface will not be used for that layer.

    -

    ”sankeyMinPercentage” (float, default 0.5): The minimum percentage a given class has to be to be shown in the sankey chart.

    +

    ”chartLabelMaxWidth” (int, default 40): The maximum number of characters, including spaces, allowed in a single line of a chart class label. The class name will be broken at this number of characters, including spaces, to go to the next line,

    +

    ”chartLabelMaxLength” (int, default 100): The maximum number of characters, including spaces, allowed in a chart class label. Any class name with more characters, including spaces, than this number will be cut off at this number of characters,

    +

    ”sankeyTransitionPeriods” (list of lists, default None): The years to use as transition periods for sankey charts (e.g. [[1985,1987],[2000,2002],[2020,2022]]). If not provided, users can enter years in the map user interface under Area Tools -> Transition Charting Periods. These will automatically be used for any layers where no sankeyTransitionPeriods were provided. If years are provided, the years in the user interface will not be used for that layer,

    +

    ”sankeyMinPercentage” (float, default 0.5): The minimum percentage a given class has to be to be shown in the sankey chart,

    ”thematic” (bool): Whether input has discrete values or not. If True, it forces the reducer to ee.Reducer.frequencyHistogram() even if not specified and even if bandName_class_values, bandName_class_names, bandName_class_palette properties are not available,

    ”palette” (list, or comma-separated strings): List of hex codes for colors for charts. This is especially useful when bandName_class_values, bandName_class_names, bandName_class_palette properties are not available, but there is a desired set of colors for each band to have on the chart,

    ”showGrid” (bool, default True): Whether to show the grid lines on the line or bar graph,

    -

    ”rangeSlider” (bool,default False): Whether to include the x-axis range selector on the bottom of each graph (https://plotly.com/javascript/range-slider/>)

    -

    ”barChartMaxClasses” (int, default 20): The maximum number of classes to show for image bar charts. Will automatically only show the top bartChartMaxClasses in any image bar chart. Any downloaded csv table will still have all of the class counts.

    -

    ”minZoomSpecifiedScale” (int, default 11): The map zoom level where any lower zoom level, not including this zoom level, will multiply the spatial resolution used for the zonal stats by 2 for each lower zoom level. E.g. if the minZoomSpecifiedScale is 9 and the scale is 30, any zoom level >= 9 will compute zonal stats at 30m spatial resolution. Then, at zoom level 8, it will be 60m. Zoom level 7 will be 120m, etc.

    +

    ”rangeSlider” (bool,default False): Whether to include the x-axis range selector on the bottom of each graph (https://plotly.com/javascript/range-slider/>),

    +

    ”barChartMaxClasses” (int, default 20): The maximum number of classes to show for image bar charts. Will automatically only show the top bartChartMaxClasses in any image bar chart. Any downloaded csv table will still have all of the class counts,

    +

    ”minZoomSpecifiedScale” (int, default 11): The map zoom level where any lower zoom level, not including this zoom level, will multiply the spatial resolution used for the zonal stats by 2 for each lower zoom level. E.g. if the minZoomSpecifiedScale is 9 and the scale is 30, any zoom level >= 9 will compute zonal stats at 30m spatial resolution. Then, at zoom level 8, it will be 60m. Zoom level 7 will be 120m, etc,

    +

    ”chartPrecision” (int, default 3): Used to override the default global precision settings for a specific area charting layer. See setQueryPrecision for setting the global charting precision. When specified, for this specific area charting layer, will show the larger of chartPrecision decimal places or ceiling(chartDecimalProportion * total decimal places). E.g. if the number is 1.12345678, 0.25 of 8 decimal places is 2, so 3 will be used and yield 1.123,

    +

    ”chartDecimalProportion” (float, default 0.25): Used to override the default global precision settings for a specific area charting layer. See setQueryPrecision for setting the global charting precision. When specified, for this specific area charting layer, will show the larger of chartPrecision decimal places or chartDecimalProportion * total decimal places. E.g. if the number is 1.1234567891234, ceiling(0.25 of 13) decimal places is 4, so 4 will be used and yield 1.1235,

    +

    ”hovermode” (str, default “closest”): The mode to show hover text in area summary charts. Options include “closest”, “x”, “y”, “x unified”, and “y unified”,

    }

    @@ -3094,7 +3115,7 @@

    Details#< - + diff --git a/docs/build/html/notebooks/Annual_NLCD_Viewer_Notebook.html b/docs/build/html/notebooks/Annual_NLCD_Viewer_Notebook.html index c59a4a7..2ddf729 100644 --- a/docs/build/html/notebooks/Annual_NLCD_Viewer_Notebook.html +++ b/docs/build/html/notebooks/Annual_NLCD_Viewer_Notebook.html @@ -6,7 +6,7 @@ - Annual NLCD geeViz Viewer - geeViz "2024.11.2" docs + Annual NLCD geeViz Viewer - geeViz "2024.11.3" docs @@ -142,7 +142,7 @@
    @@ -168,7 +168,7 @@
    - geeViz "2024.11.2" docs + geeViz "2024.11.3" docs @@ -519,7 +519,7 @@

    View and explore Annual NLCD Spectral Change +

    diff --git a/docs/build/html/notebooks/CCDCVizNotebook.html b/docs/build/html/notebooks/CCDCVizNotebook.html index 0ca0232..9a98ade 100644 --- a/docs/build/html/notebooks/CCDCVizNotebook.html +++ b/docs/build/html/notebooks/CCDCVizNotebook.html @@ -6,7 +6,7 @@ - CCDC Visualization Notebook - geeViz "2024.11.2" docs + CCDC Visualization Notebook - geeViz "2024.11.3" docs @@ -142,7 +142,7 @@
    @@ -168,7 +168,7 @@
    - geeViz "2024.11.2" docs + geeViz "2024.11.3" docs @@ -677,7 +677,7 @@

    Run LandTrendr and Visualize Outputs +

    diff --git a/docs/build/html/notebooks/LCMAP_and_LCMS_Viewer_Notebook.html b/docs/build/html/notebooks/LCMAP_and_LCMS_Viewer_Notebook.html index 035e5e3..dfe6c04 100644 --- a/docs/build/html/notebooks/LCMAP_and_LCMS_Viewer_Notebook.html +++ b/docs/build/html/notebooks/LCMAP_and_LCMS_Viewer_Notebook.html @@ -6,7 +6,7 @@ - LCMAP and LCMS Outputs Viewer - geeViz "2024.11.2" docs + LCMAP and LCMS Outputs Viewer - geeViz "2024.11.3" docs @@ -142,7 +142,7 @@
    @@ -168,7 +168,7 @@
    - geeViz "2024.11.2" docs + geeViz "2024.11.3" docs @@ -648,7 +648,7 @@

    Bring in LCMS GEE collections +

    diff --git a/docs/build/html/notebooks/areaChart_examples.html b/docs/build/html/notebooks/areaChart_examples.html index f7d00f8..54a3e8b 100644 --- a/docs/build/html/notebooks/areaChart_examples.html +++ b/docs/build/html/notebooks/areaChart_examples.html @@ -6,7 +6,7 @@ - Visualizing Area Summaries - geeViz "2024.11.2" docs + Visualizing Area Summaries - geeViz "2024.11.3" docs @@ -142,7 +142,7 @@
    @@ -168,7 +168,7 @@
    - geeViz "2024.11.2" docs + geeViz "2024.11.3" docs @@ -258,7 +258,8 @@

    Visualizing Area SummariesOpen in Colab

    +

    github +github

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ValuesNamesColors
    011Open water466b9f
    112Perennial ice/snowd1def8
    221Developed, open spacedec5c5
    322Developed, low intensityd99282
    423Developed, medium intensityeb0000
    524Developed high intensityab0000
    631Barren land (rock/sand/clay)b3ac9f
    741Deciduous forest68ab5f
    842Evergreen forest1c5f2c
    943Mixed forestb5c58f
    1052Shrub/scrubccb879
    1171Grassland/herbaceousdfdfc2
    1281Pasture/haydcd939
    1382Cultivated cropsab6c28
    1490Woody wetlandsb8d9eb
    1595Emergent herbaceous wetlands6c9fb8

    @@ -728,21 +862,9 @@

    Basic Area Charting - - +

    @@ -777,14 +899,14 @@

    Line and Sankey Charts
    Starting webmap
     Using default refresh token for geeView
     Local web server at: http://localhost:1234/geeView/ already serving.
     cwd a:\GEE\gee_py_modules_package\geeViz\examples
    -geeView URL: http://localhost:1234/geeView/?projectID=rcr-gee-2&accessToken=ya29.a0AfB_byCP8HcC-KgEexObCBH6V-INd3TohADawsSbQUkAJ6F2610Ejx0YrUgSRrX3Htj0SOzAQndyQJthWGIP64KMLPphHHVovwJkqBIS17C7dV9GCPnhXCLkek5cY-mtkGhxFVjOxcOIYhW9kvnuSE8zRaJkPf9gZn-QykRfPtqRaCgYKAc8SARASFQHGX2MiabXK25SWKqOKCKEVD2Xnlg0179
    +geeView URL: http://localhost:1234/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZDbcJ3L1DVXwA-_pCB34jAAAAZNhd7u9i06UHk43hWigYXc3K2oeDYmfRGm-sqiZPXijhaIPwbxQ8ihv0oedNanKny9oGmwSXPjmmpizVz5b6FBSbLqOuLK1kIPLu4v-gbrIry9cu6uJDmYcdS8IY_qOZHpByBppNRjWAkaCgYKATcSARESFQHGX2MiaLWkXlEAlSRFL1yHTKi7Ww0178&accessTokenCreationTime=1731636167610
     
    -
    The Kernel crashed while executing code in the the current cell or a previous cell. Please review the code in the cell(s) to identify a possible cause of the failure. Click <a href='https://aka.ms/vscodeJupyterKernelCrash'>here</a> for more info. View Jupyter <a href='command:jupyter.viewOutput'>log</a> for further details.
    -
    -
    - +
    Starting webmap
    -Using default refresh token for geeView: C:\Users\ihousman/.config/earthengine/credentials
    +Using default refresh token for geeView
     Local web server at: http://localhost:1234/geeView/ already serving.
     cwd a:\GEE\gee_py_modules_package\geeViz\examples
    +geeView URL: http://localhost:1234/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZBUVPa6LDS25-4BKa-QvyMaz0HTq8mm7-tn5ABvN9VQk-ga6KngwRbFK9lVePwfAnN3KVTzcYhKcl5_a35GszdiHTiYkun9LJ4a_2pwKJu5QwxHQsx9l5rOTV4n5glhvDXYy1-AmDTKKenKabXEY0f1XBVtsZlX4M-j4Z4aCgYKAc4SARESFQHGX2MiTjFdTXxQ6GZsKMtMJgEoVw0178&accessTokenCreationTime=1731636218348
     
    -
    +
    -
    +

    @@ -826,9 +809,21 @@

    Using geeMap and geeViz together
    Adding layer: Switzerland
     Starting webmap
     Using default refresh token for geeView
    +Local web server at: http://localhost:8001/geeView/ already serving.
    +cwd a:\GEE\gee_py_modules_package\geeViz\examples
    +geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZBB-cdTrE44xvI5cOkjSnSGbICt_KDKOJiAjB2D86DDD4-zGJaAg7oEIRdOQI_fzMX7VhSa0R2DsJm7OaEO7vlhcTvVot1KiGfXqCgIyp4KWzUrB_fSzuN_MbGZfRzBoYDO7kNj8eWPkiy2Ndbl2TWYxfpg54jj0XROCnoaCgYKASASARESFQHGX2MiIQ2guJPQlUheLfUHwt2wBA0178&accessTokenCreationTime=1731461699271
     
    - +
    + +

    @@ -906,7 +901,7 @@

    Using geeMap and geeViz together + diff --git a/docs/build/html/notebooks/getLandsatWrapperNotebook.html b/docs/build/html/notebooks/getLandsatWrapperNotebook.html index 85c2b11..b461761 100644 --- a/docs/build/html/notebooks/getLandsatWrapperNotebook.html +++ b/docs/build/html/notebooks/getLandsatWrapperNotebook.html @@ -6,7 +6,7 @@ - Create High Quality Landsat Composites - geeViz "2024.11.2" docs + Create High Quality Landsat Composites - geeViz "2024.11.3" docs @@ -142,7 +142,7 @@
    @@ -168,7 +168,7 @@
    - geeViz "2024.11.2" docs + geeViz "2024.11.3" docs @@ -256,7 +256,9 @@

    Create High Quality Landsat CompositesOpen in Colab

    +

    github +github

    +
    #Example of how to get Landsat data using the getImagesLib and view outputs using the Python visualization tools
     #Acquires Landsat data and then adds them to the viewer
    @@ -357,25 +359,69 @@ 

    Setting up numerous parameters available for processing Landsat data

    -
    - -
    +
    ---------------------------------------------------------------------------
    +TypeError                                 Traceback (most recent call last)
    +Cell In[2], line 28
    +     25 endYear = 2009
    +     27 #Call on master wrapper function to get Landat scenes and composites
    +---> 28 lsAndTs = getImagesLib.getLandsatWrapper(studyArea,startYear,endYear,startJulian,endJulian)
    +     31 #Separate into scenes and composites for subsequent analysis
    +     32 processedScenes = lsAndTs['processedScenes']
    +
    +File c:\Users\ihousman\AppData\Local\Programs\Python\Python311\Lib\site-packages\geeViz\getImagesLib.py:5432, in getLandsatWrapper(studyArea, startYear, endYear, startJulian, endJulian, timebuffer, weights, compositingMethod, toaOrSR, includeSLCOffL7, defringeL5, applyCloudScore, applyFmaskCloudMask, applyTDOM, applyFmaskCloudShadowMask, applyFmaskSnowMask, cloudScoreThresh, performCloudScoreOffset, cloudScorePctl, zScoreThresh, shadowSumThresh, contractPixels, dilatePixels, correctIllumination, correctScale, exportComposites, outputName, exportPathRoot, crs, transform, scale, resampleMethod, preComputedCloudScoreOffset, preComputedTDOMIRMean, preComputedTDOMIRStdDev, compositingReducer, harmonizeOLI, landsatCollectionVersion, overwrite, verbose)
    +   5429     ls = ls.map(lambda img: addZenithAzimuth(img, toaOrSR))
    +   5431 # Create composite time series
    +-> 5432 ts = compositeTimeSeries(
    +   5433     ls=ls,
    +   5434     startYear=startYear,
    +   5435     endYear=endYear,
    +   5436     startJulian=startJulian,
    +   5437     endJulian=endJulian,
    +   5438     timebuffer=timebuffer,
    +   5439     weights=weights,
    +   5440     compositingMethod=compositingMethod,
    +   5441     compositingReducer=compositingReducer,
    +   5442 )
    +   5444 # Correct illumination
    +   5445 if correctIllumination:
    +
    +File c:\Users\ihousman\AppData\Local\Programs\Python\Python311\Lib\site-packages\geeViz\getImagesLib.py:4315, in compositeTimeSeries(ls, startYear, endYear, startJulian, endJulian, timebuffer, weights, compositingMethod, compositingReducer)
    +   4300     return composite.set(
    +   4301         {
    +   4302             "system:time_start": ee.Date.fromYMD(year + yearWithMajority, 6, 1).millis(),
    +   (...)
    +   4311         }
    +   4312     )
    +   4314 # Iterate across each year
    +-> 4315 ts = [yearCompositeGetter(yr) for yr in ee.List.sequence(startYear + timebuffer, endYear - timebuffer).getInfo()]
    +   4316 ts = ee.ImageCollection(ts).set(args)
    +   4318 return ts
    +
    +File c:\Users\ihousman\AppData\Local\Programs\Python\Python311\Lib\site-packages\geeViz\getImagesLib.py:4315, in <listcomp>(.0)
    +   4300     return composite.set(
    +   4301         {
    +   4302             "system:time_start": ee.Date.fromYMD(year + yearWithMajority, 6, 1).millis(),
    +   (...)
    +   4311         }
    +   4312     )
    +   4314 # Iterate across each year
    +-> 4315 ts = [yearCompositeGetter(yr) for yr in ee.List.sequence(startYear + timebuffer, endYear - timebuffer).getInfo()]
    +   4316 ts = ee.ImageCollection(ts).set(args)
    +   4318 return ts
    +
    +File c:\Users\ihousman\AppData\Local\Programs\Python\Python311\Lib\site-packages\geeViz\getImagesLib.py:4290, in compositeTimeSeries.<locals>.yearCompositeGetter(year)
    +   4287 images = yearsTT.map(yrGetter)
    +   4288 lsT = ee.ImageCollection(ee.FeatureCollection(images).flatten())
    +-> 4290 count = lsT.select([0]).count().rename(["compositeObsCount"])
    +   4291 # Compute median or medoid or apply reducer
    +   4292 if compositingReducer != None:
    +
    +TypeError: Collection.count() missing 1 required positional argument: 'property'
    +
    +
    +
    @@ -168,7 +168,7 @@
    - geeViz "2024.11.2" docs + geeViz "2024.11.3" docs @@ -257,7 +257,8 @@

    Visualizing Global Land CoverOpen in Colab

    +

    github +github

    try:
    @@ -294,7 +295,7 @@ 

    Make a basic viewer
    Map.clearMap()
    -
    +Map.port = 1234
     # Specify projection to use for zonal summaries and map querying
     # Be sure to leave one of scale or transform as None
     crs= 'EPSG:4326'
    @@ -385,16 +386,18 @@ 

    Make a basic viewer \n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" } ], "source": [ @@ -674,7 +815,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -688,7 +829,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZAPJGhuHoXMi1_W2i7it9dBch7wHfEjM6luJgaT0hfxJUKzbbdZ2_w4uoF_FPptBoPWxaP2L6gf16U9kMJnNusrnWOLiIi8ywHi7k1FP1v5vwI2Eju0GUCV1xlO5eYFGYuUGNEhEG3NwtVRCTUcHd1ROQkJ5rfx6XdNzUoaCgYKAbsSARESFQHGX2MiUTznMNdubA5F5YD9d4aV_Q0178\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZBRE9mjI7Tbvn12JUdNHWBcQvnRwFG-hP61lUO5NJ1i3hUF5MWklT1YsQ2O8JTPO_c9dknJ4tLo2b1iWUDX3YpRH9D_GxcBzfpEkOKxbtzwZD_WgsZ2X5yrxgRqXDSdCClmIPTT7vOM7PivC2CznkBAOmJWgtu42xYKMiAaCgYKATwSARESFQHGX2MiL_SKbyR4o1MbYfhrP8JMSw0178&accessTokenCreationTime=1732072086594\n" ] }, { @@ -698,7 +839,7 @@ " " + "" ] }, "metadata": {}, @@ -740,7 +881,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -754,7 +895,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZDaLFoiiGYiKvmGmH1tBTNzNtGwr5C2QA0aCSuaV7mt_yuBytef5AZ2wU8H3IxgBZOA0Q2hkK33PTAxOp5vZ8Dvr912cdV3igxxnPLW76O1mfM0Viw_6BAB9q1ImB6BZEoOY5Cvwj2zNxC_Emn6PUmsWmcFITd5YQynpyEaCgYKAcUSARESFQHGX2MikAxeure5i3ICBvmn8fhBew0178\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZCo6B7_61baBesuftX5imkCdbgjQ2cDhjfWwwxSln0lW_f7XfITgdSiXVr6J7_lAz_6b7EQ-Xe5TCpBXK4RUjicQGwh4rMOMReEYDZDmspR_UGbQyOcAv_d-F5vjiBfmKeFx-2ZO5E0GXkaW1-vaCjXC5uORbQQR6X_rmQaCgYKAVwSARESFQHGX2MitF33sKGsJctQg4HvPM9Rsg0178&accessTokenCreationTime=1732072108233\n" ] }, { @@ -764,7 +905,7 @@ " " + "" ] }, "metadata": {}, @@ -805,12 +946,12 @@ "\n", "* Note that the dictionary of parameters is more or less the same as what you would put in the `\"areaChartParams\"` if you were to use the `Map.addLayer` method. \n", "\n", - "* Note that while multi thematic band image collections can be charted in a single line chart, sankey charts can only support one band per chart. If a multi thematic band image collection is given with `\"sankey\":True`, separate sankey charts will be created for each band." + "* Note that while multi thematic band image collections can be charted in a single line chart, sankey charts can only support one band per chart. If a multi thematic band image collection is given with `\"sankey\":True` (as is the case in this example), separate sankey charts will be created for each band." ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -824,7 +965,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZA8sI8DEEcCRJIs9FfoFoDJPukpaeamD89f0q2qh9SM_i0-7OSQruSG8jXHkvH4_UzUyD1pOZ-cwZZlwFHy8twKhstWc0Oo5orG_TRwL1wC6xEHv737Xro4b7CykJuiBR168Ej_uWJ5JPGwCN1NlV6Qtt-wfYXBOusJEpUaCgYKAdUSARESFQHGX2MiyzjFyNwf2q3kecg_F-rFvg0178\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZCjAoKLilGLZF5wIObir1p6XAIWJM6jMrodG8zcJg1jJ3GzF-yy8r7fbwHqpEcYQ5BC1P_unmAqFIY7hIVAU3CpkOzxnGMZkXx-ff3VoP2Tc2U4xdc3bq4Z9kKrw1dXI-iVO0V2p-DBHnOb5iUzgsp93zCB3IoXLA7IkTIaCgYKASMSARESFQHGX2MiCMKkLZs77Opz9_0uA6Jqig0178&accessTokenCreationTime=1732168152111\n" ] }, { @@ -834,7 +975,7 @@ " " + "" ] }, "metadata": {}, @@ -870,13 +1011,13 @@ "source": [ "## Charting Non-Thematic Data\n", "\n", - "* You can chart continuous data as well. By default, a `ee.Reducer.mean()` will be used. You can use any reducer that returns a single value per image-band (e.g. `ee.Reducer.min()`, `ee.Reducer.max()`, `ee.Reducer.stdDev()` and not `ee.Reducer.percentile([0,50,100])`). \n", + "* You can chart continuous data as well. By default, a `ee.Reducer.mean()` will be used. You can use any reducer that returns a single value per image-band (e.g. `ee.Reducer.min()`, `ee.Reducer.max()`, `ee.Reducer.stdDev()`, `ee.Reducer.mode()`, and not `ee.Reducer.percentile([0,50,100])`). \n", "\n", "* You can specify this using `\"areaChartParams\":{\"reducer\":ee.Reducer.mean()}`\n", "\n", "* Optionally, you can provide a color palette to be used. Each band will be assigned to a color in the order given\n", "\n", - "* Notice in the example, the reducer for what is shown on the map is different from the zonal summary reducer. In this example, on the map the standard deviation of the probability is shown, while the average over the area is shown in the chart. " + "* Notice in the example, the reducer for what is shown on the map is different from the zonal summary reducer. In this example, on the map the standard deviation of the probability is shown to highlight likely change, while the average over the area is shown in the chart since that is a more appropriate representation of probability over an area. " ] }, { @@ -893,7 +1034,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612zyBFmQok8DtUEIp6qTRiXotoUPt8cGbFU4lo03AGaFZCas1Rkx2xDfBF6PPbwyOINwzoURdXUiBcbgO9ytGZBJcvHJjScj3njRFMjUo2HWVeMjhno9wv6KVi0iRh8ZK1nwUM6CBqM9zZSImy4e7NmgDqKYZrEgs5oaCgYKAfQSARESFQHGX2MiejYkUh8WfWmkrq89M0l9Nw0174\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZDC-kEJjZ7ANFvwoBVoe0PN6iyoJgDoKDC45AZod0eypEh2wmKRloLs4mY0cK4UTwGQGzF5lAPoAfQfF1B-0YjmglkLQmwOAqofFJtdBfjLRX5B61yrowTSG_D0u83cds1oShCZRR18Wapnif7vIHzAJZk8Zm2USy6000oaCgYKAdMSARESFQHGX2Mij0Uo4T2Bl89g0qog8XH6Sw0178&accessTokenCreationTime=1732168277196\n" ] }, { @@ -903,7 +1044,7 @@ " " + "" ] }, "metadata": {}, @@ -937,13 +1078,13 @@ "\n", "* You can also chart images\n", "* It will behave in a similar fashion to imageCollections, but will show a bar chart\n", - "\n", + "* Placing names for bar charts can be challenging if the names are very long. geeViz will automatically change the bar chart to be a horizontal bar chart if long names are detected. This still does not ensure the bar charts are readable (as is the case in this example). Shortening class names is the easiest method to address this issue (shown by splitting the full NLCD landcover name with `:` and take the first part earlier in this notebook).\n", "* If using `\"autoViz\":True`, be sure to copy the `_class_` properties back in\n" ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -954,11 +1095,12 @@ "Adding layer: LCMS Land Cover Mode\n", "Adding layer: NLCD Land Cover\n", "Adding layer: NLCD Land Cover Mode\n", + "Adding layer: NLCD Land Cover Mode Shortened Names\n", "Starting webmap\n", "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612zola-FBl5vKB_hlCop1HfVJDqwFITDhbElU4cFuh0EAS0vneY95qkqt4EnuQsh5Ai7RIzWPvztjtaaESDRhZwMRM-096h5-EbbMtN_Fh1tXfwbqbJpAvVcHnoBmjHwIUr3maRrmOZgIKdBj07FytPEc548YQtVRT1BwNAaCgYKARwSARESFQHGX2MiVR4GgV1QjHvlavabzx0A1w0178\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZAYSRUVZEF7tD-uK6Zn-LCX2EMMf-R2VGKJu9WdAnWqeFNsxq2H9j8atAF7Cgu_1ISo0BaCA3RhHvOuKBVw6YK_DTXlSllbYjTie86dZHcp8w7QwXmPcwuaDieNGZVtAUDv3RV6dQ5ZIodg3F_bbcbIMN8HqXAryuqDPwgaCgYKAesSARESFQHGX2MiT8b83hyJMzIqna_6JYRXdQ0178&accessTokenCreationTime=1732169429393\n" ] }, { @@ -968,7 +1110,7 @@ " " + "" ] }, "metadata": {}, @@ -993,6 +1135,10 @@ "Map.addLayer(nlcd.select(['landcover']),{'autoViz':True,'canAreaChart':True},'NLCD Land Cover')\n", "Map.addLayer(nlcd.select(['landcover']).mode().set(nlcd.first().toDictionary()),{'autoViz':True,'canAreaChart':True},'NLCD Land Cover Mode')\n", "\n", + "# Use the shortened class names to clean up chart\n", + "Map.addLayer(nlcd.select(['landcover']).mode().set(nlcd_props_shortened_names),{'autoViz':True,'canAreaChart':True},'NLCD Land Cover Mode Shortened Names')\n", + "\n", + "\n", "\n", "\n", "\n", @@ -1011,7 +1157,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 10, "metadata": {}, "outputs": [ { @@ -1023,7 +1169,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612xsvPX5BWXka2IKux0xyyC3pEN5X_bCjc9Abyt_QnoMxh0Tt3UKrIH4ZmqL7dsll6n3Zh4j55OApJLdFSFgC6zgz59th25UPnIDG-dUbvscsngSoX5Dd7kyf6cm1RAzRxnkG0KCwmtpKTWqMohMFz8sADGkdmojFV0aCgYKAVUSARESFQHGX2Mi7EieXAoH_HzjzIAyP0KgYQ0174\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZB7X2qwuIOOEJXfmqKh4BlhENGTSj4_Xp7uL99qXMtkt7l1RdiAFuQ-jTN5Ou_2RTBOZA8k247QT8eAnc3ED6ZCf4C8NpZrsG070oER4EapnJsM2mAU33AayTBsxMbfWQEwW-zz9TBzm7LllyrVjOTEdpxzQloFUGOgQc8aCgYKAZISARESFQHGX2MiBqtgdGfy6Z72iUD04QOyfw0178&accessTokenCreationTime=1732169453056\n" ] }, { @@ -1033,7 +1179,7 @@ " " + "" ] }, "metadata": {}, @@ -1086,7 +1232,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 11, "metadata": {}, "outputs": [ { @@ -1098,7 +1244,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612wnYtt-QFEIFqJvxv4tUzZcYEWRZkAv1oqt1OnIrtgzB7lI8Fiv-gDBo5Jm7kwppzNzx5KL8XRoYpN2aMTVzbQYWHUn6OD9yc6u6-3FCw_Ykc26-SFspZma_sjs-0V3OKWqFZsx0KCiuwz5cskNB83el1D24oGm2ZMaCgYKARQSARESFQHGX2Miyj7dkMOvk05oVvAXnq9xBw0174\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZDgfsjQNYd5rrgKWcv3pcdtv1txAnIJB2FSclFLx0D3XVfXW_4f9nzPNOkWNGajJehlLbpshY5r0DKJkOAISTKp7KzzqPEEcD_7ickDf6gCwaZeLWYZzrnhv2ipteslzEO2FhDzVG_S-1Clyr-ZUdKk_ePFBjX-90WzNyMaCgYKATQSARESFQHGX2Mix24C9Alq9W4HMEp1x9x6UQ0178&accessTokenCreationTime=1732169481988\n" ] }, { @@ -1108,7 +1254,7 @@ " " + "" ] }, "metadata": {}, @@ -1152,13 +1298,13 @@ "\n", "* You can chart thematic datasets that lack values, names, and palette properties by specifying the `ee.Reducer.frequencyHistogram()` as the reducer\n", "\n", - "* This is not the best method however\n", + "* This is not the best method however. Charts will lack descriptive class names and colors\n", "\n" ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 12, "metadata": {}, "outputs": [ { @@ -1170,7 +1316,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612wJKTBG90sE7YjOsGwKAT2Io1SgHDHujjFffA7UVFDdzD6ieoa1LRPSj3JE0Rr_EbjdhU-m_tOgjjzBG9_JdmjzTH0wV35j206vk4iET5lr4Ij7hzaXnNi6UsXr2Nx24JjWdXdVCVekeJ4uxVWX_Frrk2xx7k1ALut5UBUaCgYKAQkSARESFQHGX2MihFCE1dDZKNyehV8R3vhoxQ0178\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZDmawXDukWmO9oLKizTo6w7P9NlqXfKoaSIpzcAnlYGfgLMuBe34OfhIdC4T-bGS2FiEQpv42PPAgg3F1S8L5tTEZbWNnwCIheDSLkFekhdRunGkABnR_qx-2Z8J9NSmTr3pLc625m_vRcRl5c022VRG-mlVolIdq9qPqgaCgYKAV0SARESFQHGX2MiSeg0dJ97aOa4_Ib-smh2Ng0178&accessTokenCreationTime=1732169560625\n" ] }, { @@ -1180,7 +1326,7 @@ " " + "" ] }, "metadata": {}, @@ -1222,7 +1368,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 13, "metadata": {}, "outputs": [ { @@ -1234,7 +1380,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612wadT88_g9U59GK--fr1PF-tM6S-z-5cRPTW7qhCoO8BaezIKVSxtIfsaz2_tQt2DaSH5xKD2u-AKbY5vRznLUC92QBoKLerlwwL7OapgmO2fIcc8IjWpW3gDMMfU3szuY6ShHWj7HiFGAw_ARd_T4970y6zGHieyeL9N4aCgYKAYwSARESFQHGX2MiXVVic5V0ZDr0FPFtD2QLeA0178\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZBE3rUf41t3ynct3TmFS9goflI3KxzwcFtJSPVFhjP-3bciOy90PgBO4ljJoWWQbcjYKjicRJGLxNds9V5CJvKnYv2uM2iU1aOgKxZ36FvToD5ZzOW7ddz9-pIWwDg8u-fIcr3PD3sLW7fe3E6GQFk01PWS4tmTmhTaAl8aCgYKAdASARESFQHGX2MitHZij8OK-HBPFllpNUWadg0178&accessTokenCreationTime=1732169652439\n" ] }, { @@ -1244,7 +1390,7 @@ " " + "" ] }, "metadata": {}, @@ -1295,39 +1441,28 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 14, "metadata": {}, "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Adding layer: LCMS Change Comparison 2010\n", - "Adding layer: LCMS Land Cover Comparison 2010\n", - "Adding layer: LCMS Land Use Comparison 2010\n", - "Starting webmap\n", - "Using default refresh token for geeView\n" - ] - }, { "name": "stderr", "output_type": "stream", "text": [ - "c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\ee\\deprecation.py:202: DeprecationWarning: \n", + "c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\ee\\deprecation.py:207: DeprecationWarning: \n", "\n", "Attention required for USFS/GTAC/LCMS/v2020-5! You are using a deprecated asset.\n", "To ensure continued functionality, please update it.\n", "Learn more: https://developers.google.com/earth-engine/datasets/catalog/USFS_GTAC_LCMS_v2020-5\n", "\n", " warnings.warn(warning, category=DeprecationWarning)\n", - "c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\ee\\deprecation.py:202: DeprecationWarning: \n", + "c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\ee\\deprecation.py:207: DeprecationWarning: \n", "\n", "Attention required for USFS/GTAC/LCMS/v2021-7! You are using a deprecated asset.\n", "To ensure continued functionality, please update it.\n", "Learn more: https://developers.google.com/earth-engine/datasets/catalog/USFS_GTAC_LCMS_v2021-7\n", "\n", " warnings.warn(warning, category=DeprecationWarning)\n", - "c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\ee\\deprecation.py:202: DeprecationWarning: \n", + "c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\ee\\deprecation.py:207: DeprecationWarning: \n", "\n", "Attention required for USFS/GTAC/LCMS/v2022-8! You are using a deprecated asset.\n", "To ensure continued functionality, please update it.\n", @@ -1340,9 +1475,14 @@ "name": "stdout", "output_type": "stream", "text": [ + "Adding layer: LCMS Change Comparison 2010\n", + "Adding layer: LCMS Land Cover Comparison 2010\n", + "Adding layer: LCMS Land Use Comparison 2010\n", + "Starting webmap\n", + "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612wPtKk_ePf9TnMwvoRhqeBo8KprojyyW3GVeKIwAu2XdlfaUTUzws7eZQUrIGyZ4wCS6wIjpw7sUV-eBsoj2z1SSl38d4RhPIEbaN6ZOP8hWAxv07-RMGdJX0o8U4mKiKp92DhI6wg9Lmfz20gZ6wRwHURCbZy2lEsaCgYKAaYSARESFQHGX2Mir_MkV5PgClO-NZQmHUOFbA0174\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZD6JxbWi078FtM79_BeIKn2hGPtQvOfSbTkG0tNDgKyzDTdA43Ddjf-zHPe9n3L4jdSwTrA3YO5vD_gwS680uHwVbMJ48YU4zGg4TDd0Uvwew3z_qq8I9GRK9cvh1YmiBv642eY5BhQqpve_ns98U93p5l8ztQS0sAvbggaCgYKARsSARESFQHGX2MiWzcQ5PhrEcBC3wtjWUcqkg0178&accessTokenCreationTime=1732169696345\n" ] }, { @@ -1352,7 +1492,7 @@ " " + "" ] }, "metadata": {}, @@ -1418,7 +1558,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 15, "metadata": {}, "outputs": [ { @@ -1433,7 +1573,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612wgw-djuuUntepLYybAxnaIqxMmFwimfSO5_f-ogEbOUoilTLwc6OseVxRi5qICNp7ekGXx89YwL_ssdQMnarafW5IePMFIBfBALE0QwlQyp58F6ciJeqf04GGg49Id-7qFKwx-m8qAzQRmsEUBQS9y_ZwgbhDtyh0aCgYKAdcSARESFQHGX2MiGY-MWDrEyrXenwTUktiPuw0174\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZBvafOCftFThE78i2zwWG34pYXzIRloRQ-qwsZ6O_Li22nUDmhYuvjQ252SF3npQhNR-Rjg4lInCL3TDlD3xvKgaHASqIX3MUSNFrXTlJZYkQ7tnPHY_NIFuoOAwgElS0AAvLVSnXifuaHQUgKKh77A04sLI_imBP_1yeUaCgYKAe8SARESFQHGX2Mi9nlpC9xjpq7pAmV7xBP8zg0178&accessTokenCreationTime=1732169830804\n" ] }, { @@ -1443,7 +1583,7 @@ " " + "" ] }, "metadata": {}, diff --git a/docs/build/jupyter_execute/notebooks/dynamicWorldExampleNotebook.ipynb b/docs/build/jupyter_execute/notebooks/dynamicWorldExampleNotebook.ipynb index 56d0861..1b7d2e6 100644 --- a/docs/build/jupyter_execute/notebooks/dynamicWorldExampleNotebook.ipynb +++ b/docs/build/jupyter_execute/notebooks/dynamicWorldExampleNotebook.ipynb @@ -26,8 +26,8 @@ "See the License for the specific language governing permissions and\n", "limitations under the License.\n", "\n", - "\n", - "

    \"Open

    " + "[![github](https://img.shields.io/badge/-see%20sources-white?logo=github&labelColor=555)](https://github.com/gee-community/geeviz/blob/master/examples/dynamicWorldExampleNotebook.ipynb) \n", + "[![github](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/gee-community/geeViz/blob/master/examples/dynamicWorldExampleNotebook.ipynb)" ] }, { diff --git a/docs/build/jupyter_execute/notebooks/gee2PandasExample.ipynb b/docs/build/jupyter_execute/notebooks/gee2PandasExample.ipynb index 836941a..6f55a6c 100644 --- a/docs/build/jupyter_execute/notebooks/gee2PandasExample.ipynb +++ b/docs/build/jupyter_execute/notebooks/gee2PandasExample.ipynb @@ -26,8 +26,8 @@ "* Use this module to go between local data and GEE for more general data science/statistical analysis\n", "\n", "\n", - "\n", - "

    \"Open

    " + "[![github](https://img.shields.io/badge/-see%20sources-white?logo=github&labelColor=555)](https://github.com/gee-community/geeviz/blob/master/examples/gee2PandasExample.ipynb) \n", + "[![github](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/gee-community/geeViz/blob/master/examples/gee2PandasExample.ipynb)" ] }, { @@ -44,11 +44,23 @@ "text": [ "Initializing GEE\n", "Cached project id file path: C:\\Users\\ihousman\\.config\\earthengine\\credentials.proj_id\n", - "Cached project id: rcr-gee-2\n", + "Cached project id: lcms-292214\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "*** Earth Engine *** Share your feedback by taking our Annual Developer Satisfaction Survey: https://google.qualtrics.com/jfe/form/SV_0JLhFqfSY1uiEaW?source=Init\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Successfully initialized\n", "geeViz package folder: c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\geeViz\n", "PyTables is not installed. No support for HDF output.\n", - "SQLalchemy is not installed. No support for SQL output.\n", "done\n" ] } @@ -89,13 +101,10 @@ "Get Processed Sentinel2: \n", "Start date: Jun 09 2021 , End date: Jul 08 2024\n", "Using S2 Collection: COPERNICUS/S2_HARMONIZED\n", - "Joining pre-computed cloud probabilities from: COPERNICUS/S2_CLOUD_PROBABILITY\n", + "Joining pre-computed cloudScore+ from: GOOGLE/CLOUD_SCORE_PLUS/V1/S2_HARMONIZED\n", "Setting to aggregate instead of resample \n", "Converting S2 data to daily mosaics\n", - "Applying Cloud Probability\n", - "Applying TDOM\n", - "Computing irMean for TDOM\n", - "Computing irStdDev for TDOM\n", + "Applying cloudScore+\n", "Adding layer: S2 Median 2023\n", "Adding layer: S2 Water 2023\n", "Adding layer: Water_Transition_2022-2023\n", @@ -103,11 +112,12 @@ "Adding layer: S2 Water 2022\n", "Adding layer: Study Area\n", "Starting webmap\n", - "Using default refresh token for geeView: C:\\Users\\ihousman/.config/earthengine/credentials\n", + "Using default refresh token for geeView\n", "Starting local web server at: http://localhost:1233/geeView/\n", "HTTP server command: \"c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\python.exe\" -m http.server 1233\n", "Done\n", - "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n" + "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", + "geeView URL: http://localhost:1233/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZC7rbMaygDhJcMEQ0u5_tqi4RCJz5duLi9eQYcy-Zzhz3T9dcmPOnEuD0NwEy27M9Wnr2GSc0ECMwXaMemmVP2iroa_MGOFvl4Jp5RU4pA_zrwQ4C3d28ntB0uOzARn-lg_onfuT40HjsqVZRaofbnYbto04qT8lqbp4P0aCgYKAQ0SARESFQHGX2MiU_0uj5D6U3SDTAv6wwgP7A0178&accessTokenCreationTime=1732565631149\n" ] }, { @@ -117,7 +127,7 @@ " " + "" ] }, "metadata": {}, @@ -170,7 +180,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 3, "id": "8daf03c9", "metadata": {}, "outputs": [ @@ -181,9 +191,10 @@ "Adding layer: Sample\n", "/tmp\\gee2Pandas_test_csv.csv already exists\n", "Starting webmap\n", - "Using default refresh token for geeView: C:\\Users\\ihousman/.config/earthengine/credentials\n", + "Using default refresh token for geeView\n", "Local web server at: http://localhost:1233/geeView/ already serving.\n", - "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n" + "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", + "geeView URL: http://localhost:1233/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZA_pdYBT8Da3RV0VuNIO82RcHCoJBkvgRzVPbMvNB7-Nymd8Z0PytK-lQbvzobDzcQ0mw8Gic89IlORedmyBcpl7W-V6L0lPtE-sX94emQUnKtxAr5IkIFinQiHPrJscFcVfvQ9jlO9DOwcmFTGAnWYk7QK6wcDXohDsIMaCgYKAYcSARESFQHGX2MiRPp-2OrqyFbvRcc9_zvJlg0178&accessTokenCreationTime=1732565635250\n" ] }, { @@ -193,7 +204,7 @@ " " + "" ] }, "metadata": {}, @@ -228,7 +239,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 4, "id": "e5ee4c87", "metadata": {}, "outputs": [ @@ -273,7 +284,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 9, "id": "a59a6afa", "metadata": {}, "outputs": [ @@ -283,9 +294,10 @@ "text": [ "Adding layer: Test Sample\n", "Starting webmap\n", - "Using default refresh token for geeView: C:\\Users\\ihousman/.config/earthengine/credentials\n", + "Using default refresh token for geeView\n", "Local web server at: http://localhost:1233/geeView/ already serving.\n", - "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n" + "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", + "geeView URL: http://localhost:1233/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZDuAuuThPvzPHAPlCNFGvzYQShuqqqN0i2vdB4dxVkn1LYXnb42sCaCBoboFD4-SYtRTg1kkmK-aWFKssUhmA-E9PQyXyR4Za3sVJnaEalIHtgYvLXkQ1DOYmFybz6cEMDntPVHLX30KagvUS0Kw0-aPPMUneuEG2gwJz0aCgYKATMSARESFQHGX2MiuDZhAcXWgIBJLVWdu6OINQ0178&accessTokenCreationTime=1732565803239\n" ] }, { @@ -295,7 +307,7 @@ " " + "" ] }, "metadata": {}, @@ -311,12 +323,10 @@ } ], "source": [ - "from importlib import reload\n", - "reload(g2p)\n", "# Now go from a local csv to a GEE featureCollection\n", "fc = g2p.tableToFeatureCollection(out_csv)\n", "Map.clearMap()\n", - "Map.addLayer(fc.map(lambda f:ee.Feature(f).buffer(10).bounds()),{},'Test Sample')\n", + "Map.addLayer(fc,{'styleParams':{'pointSize':2,'color':'0DF'}},'Test Sample')\n", "Map.turnOnInspector()\n", "Map.centerObject(fc)\n", "Map.view()" diff --git a/docs/build/jupyter_execute/notebooks/geeViewExampleNotebook.ipynb b/docs/build/jupyter_execute/notebooks/geeViewExampleNotebook.ipynb index 731f473..89a869a 100644 --- a/docs/build/jupyter_execute/notebooks/geeViewExampleNotebook.ipynb +++ b/docs/build/jupyter_execute/notebooks/geeViewExampleNotebook.ipynb @@ -29,9 +29,8 @@ "See the License for the specific language governing permissions and\n", "limitations under the License.\n", "\n", - "\n", - "\n", - "

    \"Open

    \n", + "[![github](https://img.shields.io/badge/-see%20sources-white?logo=github&labelColor=555)](https://github.com/gee-community/geeviz/blob/master/examples/geeViewExampleNotebook.ipynb) \n", + "[![github](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/gee-community/geeViz/blob/master/examples/geeViewExampleNotebook.ipynb)\n", " " ] }, @@ -55,7 +54,20 @@ "text": [ "Initializing GEE\n", "Cached project id file path: C:\\Users\\ihousman\\.config\\earthengine\\credentials.proj_id\n", - "Cached project id: lcms-292214\n", + "Cached project id: lcms-292214\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "*** Earth Engine *** Share your feedback by taking our Annual Developer Satisfaction Survey: https://google.qualtrics.com/jfe/form/SV_0JLhFqfSY1uiEaW?source=Init\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Successfully initialized\n", "geeViz package folder: c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\geeViz\n", "done\n" @@ -97,11 +109,9 @@ "Adding layer: NLCD 2011 Landcover/Landuse\n", "Starting webmap\n", "Using default refresh token for geeView\n", - "Starting local web server at: http://localhost:8001/geeView/\n", - "HTTP server command: \"c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\python.exe\" -m http.server 8001\n", - "Done\n", + "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612xc9-pB9qAOEeavEwVZ1nkSwRtdLU5dMd8wyk1oOxGnL_QIQgk6EDhi2YDRdNmU3RI80bbYYBKFpXzZeoydg_BdMUmCHSVqlEF_U5Eyf_SnA3qr_O0qD96qBkRa9c0x_Jmw6TVI3ywf2H-x8cUSwCTpniqMNZFU5A7f8LMaCgYKAf8SARESFQHGX2MidqD7XysS4IRxaINI6W30BQ0178\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZC9ZMk9nE3alPEasRZHHuiqY9ioimY7gcSWjbR7C4CJ9eiKSJyGhiiF7OkJTdtJ6D6PcRWSTX1ZPnE1SgQsKdehpNOEMaFHJjpe-AG8DAKaqK2rFhx_8H_r47M2Sl5Sux95uFcCytus3cGehAIgJ0305osLh_eBpjAVq9waCgYKAXQSARESFQHGX2MiN1vvcKYW4oN6bshp7Owqdw0178&accessTokenCreationTime=1732564901727\n" ] }, { @@ -111,7 +121,7 @@ " " + "" ] }, "metadata": {}, @@ -159,7 +169,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 7, "id": "2670e5e4", "metadata": { "scrolled": false @@ -175,7 +185,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612wEB91PRlJ0ADBpVkUrAZMQd3WCbxcuhHMod3GOCG_5j94LaGpnzrrBY5RXg_n1FWPl52nQsscK_3wTnIAL-9euEDaGd72R1TDH-G0sDgrK-vutq1scvD0Xfm0icX_qRuVhU2l3T-OCwOjcZ5f6dOZXwBFUxSdG1PR1Ww4aCgYKAW8SARESFQHGX2Miy70Q2fyYSBm1U3jh1-kpNw0178\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZCdWbAp2YEv9OinAUuSbK8mjozVuITQXsLXww9NR_eSxgtWs-oCgfSQ0if6cygVUJ5K-9RKSMKUEhLcfmHUcsBrk4Sp73jOtg5ufkMA3rDwOeq-kfBO7ZzJ9iYtg8YO9CMPsGrJGsqfioRzr8vMjJlpl8hy3YvvMkrF-AwaCgYKAUMSARESFQHGX2MiaTjARdF2H_Ms2mb2DFeMHA0178&accessTokenCreationTime=1732565064272\n" ] }, { @@ -185,7 +195,7 @@ " " + "" ] }, "metadata": {}, @@ -207,11 +217,13 @@ "nlcd = nlcd.filter(ee.Filter.calendarRange(2000,2020,'year'))\n", "nlcd = nlcd.map(lambda img: img.set('bns',img.bandNames()))\n", "nlcd = nlcd.filter(ee.Filter.listContains('bns','landcover')).select(['landcover'])\n", - "Map.addLayer(nlcd.sort('system:time_start'),{'autoViz':True},'NLCD Landcover/Landuse Time Series',True)\n", + "\n", + "# Can optionally turn off class numbers in legend by setting 'includeClassValues':False,\n", + "Map.addLayer(nlcd.sort('system:time_start'),{'autoViz':True,'includeClassValues':False},'NLCD Landcover/Landuse Time Series',True)\n", "\n", "# Continuous data automatically have a legend added\n", "nlcd = ee.Image('USGS/NLCD_RELEASES/2016_REL/2016')\n", - "Map.addLayer(nlcd.select(['percent_tree_cover']),{'min':20,'max':80,'palette':'555,0A0','opacity':0.5},'NLCD 2016 TCC',True)\n", + "Map.addLayer(nlcd.select(['percent_tree_cover']),{'min':20,'max':80,'palette':'555,0A0','opacity':0.5,'legendLabelLeftAfter':'% TCC','legendLabelRightAfter':'% TCC'},'NLCD 2016 TCC',True)\n", "\n", "Map.turnOnInspector()\n", "Map.view()" @@ -227,7 +239,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 8, "id": "29550202", "metadata": { "scrolled": false @@ -242,7 +254,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612ymuGgajtw9S6mOC5GCfhqzRWaiDFM4Wo8EZddZ-IPoTvQekpl-PHtcL0Oc535OAFKzF50NXEDh6z51BKbk_zsmiLDpSsD1lSfhV7rwCp6incyDEh73_JeAKScEwLupBUGamXxLrsDoo1tDwM-5dfFE7YFluJxoRvJsEWUaCgYKAcYSARESFQHGX2MirzQTM9D85PpbatDl2KI9vQ0178\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZDEzWma5X5W-oHKCexM8jy1fvuNiDAgP07VHbMN6HHAjJktIgzS97_mpORIntBzrleDIqRW4mzlY45PV5hL00AmDEMPk0yYKTvqhDUQkGuAKtjC1IWCv8x9KXU9aAkyI_6tdjC_ZjbMbACiNbZPgzWW6Pfa4VRfX5uHIysaCgYKAdoSARESFQHGX2Mis6lGLlm0ts5y8AVhKmIzgg0178&accessTokenCreationTime=1732565082937\n" ] }, { @@ -252,7 +264,7 @@ " " + "" ] }, "metadata": {}, @@ -297,7 +309,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 9, "id": "bda0482c", "metadata": { "scrolled": true @@ -312,7 +324,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612xlIx2Z7GFTqGXH8dsTw0MkNgvq1rBKoPyvOsMMcDknha5xOGZuHnVp_GAzPOV3V6y5-XyTWNFtPKxGOzXOEQwJn24apigYHHO7F0Pi68AZdnJE036ggaWviIID4VdTcv9CoB3rxbrRtqqOXWa0a0ebgPmYsPDPBHen2mAaCgYKAd4SARESFQHGX2MiJOenyiWCugz0F-f9mbuCHA0178\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZBtu0k2gNpi4vy_3WTk89zD7TnCY2jV_58KR3dZBzuK9IC30vpVunkWSZoLtvydJWpP6appk3GvnXLjghoFmxOlrXf4RBBkj6dkogsVR1TqAHrzRUmnJDyEjpwncoI-AUYvO5x8V_icMITvLjZT5it08wDuVNS5y07tIscaCgYKAXkSARESFQHGX2MiPJSgbTMg-G5QabpMKuznNg0178&accessTokenCreationTime=1732565101648\n" ] }, { @@ -322,7 +334,7 @@ " " + "" ] }, "metadata": {}, @@ -358,7 +370,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 10, "id": "e3065817", "metadata": {}, "outputs": [ @@ -371,7 +383,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612xyu7yibHE0YwsGKTTjWjC8Uk7L7aof24L3ei935S0iOL9NAWU3uTAdMdwDkXhSRd0HMf83Axc1D3YZE1P3MYJKmA-upfpBPNjWAt1yzksKGra1-x-9to7S3NUSmTpzpFCRVoVDf_BdvJJqdtMCryh57Urg1uEZk-ZZj-8aCgYKAWoSARESFQHGX2MinnWH-GXb3lEYw3rJxhIskQ0178\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZAezqp01cIEOBoAqg2IyAX7siCvpDiVQ4TJDvPJooEZjhmH9MBnk8awa4ut9LS2gQrVDTwmqwkbWmIdU0VGrsW0ZUlgojuBHakihs4LRgVNnnzWTLaqdQGkEdmlo2FHWqRNOW_JHyDw6AvyI6OdglQopqn53aer93wfaS4aCgYKAQASARESFQHGX2Mi4CooIU_ziSIVWHXLJOUy0A0178&accessTokenCreationTime=1732565130682\n" ] }, { @@ -381,7 +393,7 @@ " " + "" ] }, "metadata": {}, @@ -417,24 +429,15 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 11, "id": "ed19b1f3", "metadata": {}, "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Adding layer: JRC Surface Water Time Series\n", - "Adding layer: JRC Surface Water Mode\n", - "Adding layer: JRC Surface Water Time Lapse\n" - ] - }, { "name": "stderr", "output_type": "stream", "text": [ - "c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\ee\\deprecation.py:202: DeprecationWarning: \n", + "c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\ee\\deprecation.py:207: DeprecationWarning: \n", "\n", "Attention required for JRC/GSW1_0/YearlyHistory! You are using a deprecated asset.\n", "To ensure continued functionality, please update it.\n", @@ -447,11 +450,14 @@ "name": "stdout", "output_type": "stream", "text": [ + "Adding layer: JRC Surface Water Time Series\n", + "Adding layer: JRC Surface Water Mode\n", + "Adding layer: JRC Surface Water Time Lapse\n", "Starting webmap\n", "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612yRwpwRBWQTUs2XVKhs1DlyDqoqJZIgeDDCCYmuXK-kQ-6wtKQ8bWed5F5Tw6tPvt50q0scd1AFM4Rgmu8ClNDjIc84N1zhl16h081AkdlPxxMqkChodrKxigDgSjxRR5ZNpFqiQ0bVhQb-juMerVorXEndD1IoR5OvK4kaCgYKAbYSARESFQHGX2Mib2iFAte1BTdjjB1u62k-6g0178\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZAlsuVMY4s0axMzoAGBFZnZSizbu-h175yGINMHpEhuMWniA9OD33KUXUISs376RMYK75_pp2b_JBw7M7G4VoeLjxS_je1EFmM7JS9H3saEhlD05NpN_W8RuRhAf9CZ4Jgm9ROrSqLI-QwUQSGo43THsCRWPfkIggX0veYaCgYKATYSARESFQHGX2Mi99zBRgnkVA3UetKqa0L6pQ0178&accessTokenCreationTime=1732565241221\n" ] }, { @@ -461,7 +467,7 @@ " " + "" ] }, "metadata": {}, diff --git a/docs/build/jupyter_execute/notebooks/geeViewVSFoliumViewerExampleNotebook.ipynb b/docs/build/jupyter_execute/notebooks/geeViewVSFoliumViewerExampleNotebook.ipynb index 63d353d..bf82254 100644 --- a/docs/build/jupyter_execute/notebooks/geeViewVSFoliumViewerExampleNotebook.ipynb +++ b/docs/build/jupyter_execute/notebooks/geeViewVSFoliumViewerExampleNotebook.ipynb @@ -28,13 +28,13 @@ "\n", "\n", "\n", - "\n", - "

    \"Open

    " + "[![github](https://img.shields.io/badge/-see%20sources-white?logo=github&labelColor=555)](https://github.com/gee-community/geeviz/blob/master/examples/geeViewVSFoliumViewerExampleNotebook.ipynb) \n", + "[![github](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/gee-community/geeViz/blob/master/examples/geeViewVSFoliumViewerExampleNotebook.ipynb)" ] }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 4, "id": "b8e5dff6", "metadata": {}, "outputs": [ @@ -42,11 +42,6 @@ "name": "stdout", "output_type": "stream", "text": [ - "Initializing GEE\n", - "Cached project id file path: C:\\Users\\ihousman\\.config\\earthengine\\credentials.proj_id\n", - "Cached project id: rcr-gee-2\n", - "Successfully initialized\n", - "geeViz package folder: c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\geeViz\n", "done\n" ] } @@ -82,7 +77,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 7, "id": "145cfa94", "metadata": { "scrolled": false @@ -92,16 +87,6 @@ "name": "stdout", "output_type": "stream", "text": [ - "Get Processed Sentinel2: \n", - "Start date: Apr 30 2022 , End date: May 30 2023\n", - "Using S2 Collection: COPERNICUS/S2_HARMONIZED\n", - "Joining pre-computed cloud probabilities from: COPERNICUS/S2_CLOUD_PROBABILITY\n", - "Setting to aggregate instead of resample \n", - "Converting S2 data to daily mosaics\n", - "Applying Cloud Probability\n", - "Applying TDOM\n", - "Computing irMean for TDOM\n", - "Computing irStdDev for TDOM\n", "Adding layer: S2 Median 2023\n", "Adding layer: S2 Median 2023\n", "Adding layer: S2 Median 2022\n", @@ -140,7 +125,7 @@ " <meta name="viewport" content="width=device-width,\n", " initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />\n", " <style>\n", - " #map_e768368a64f4117a24c2ed1add335c09 {\n", + " #map_bf8cb17dfddc88eee0345b09539b65b3 {\n", " position: relative;\n", " width: 100.0%;\n", " height: 100.0%;\n", @@ -156,14 +141,14 @@ "<body>\n", " \n", " \n", - " <div class="folium-map" id="map_e768368a64f4117a24c2ed1add335c09" ></div>\n", + " <div class="folium-map" id="map_bf8cb17dfddc88eee0345b09539b65b3" ></div>\n", " \n", "</body>\n", "<script>\n", " \n", " \n", - " var map_e768368a64f4117a24c2ed1add335c09 = L.map(\n", - " "map_e768368a64f4117a24c2ed1add335c09",\n", + " var map_bf8cb17dfddc88eee0345b09539b65b3 = L.map(\n", + " "map_bf8cb17dfddc88eee0345b09539b65b3",\n", " {\n", " center: [0, 0],\n", " crs: L.CRS.EPSG3857,\n", @@ -177,77 +162,77 @@ "\n", " \n", " \n", - " var tile_layer_2eb064abc510a2009667247ec503744f = L.tileLayer(\n", + " var tile_layer_e9b894311852908103d312ac72a0f8d7 = L.tileLayer(\n", " "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",\n", " {"attribution": "Data by \\u0026copy; \\u003ca target=\\"_blank\\" href=\\"http://openstreetmap.org\\"\\u003eOpenStreetMap\\u003c/a\\u003e, under \\u003ca target=\\"_blank\\" href=\\"http://www.openstreetmap.org/copyright\\"\\u003eODbL\\u003c/a\\u003e.", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_e768368a64f4117a24c2ed1add335c09);\n", + " ).addTo(map_bf8cb17dfddc88eee0345b09539b65b3);\n", " \n", " \n", - " map_e768368a64f4117a24c2ed1add335c09.fitBounds(\n", + " map_bf8cb17dfddc88eee0345b09539b65b3.fitBounds(\n", " [[40.595571243156144, -113.21807278537877], [41.786028237932015, -111.82280911350377]],\n", " {}\n", " );\n", " \n", " \n", - " var tile_layer_318d20fe437657d8826935e48946a9fb = L.tileLayer(\n", + " var tile_layer_bf19b02e732ce46afa87ec069e125745 = L.tileLayer(\n", " "https://mt1.google.com/vt/lyrs=m\\u0026x={x}\\u0026y={y}\\u0026z={z}",\n", " {"attribution": "Google", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_e768368a64f4117a24c2ed1add335c09);\n", + " ).addTo(map_bf8cb17dfddc88eee0345b09539b65b3);\n", " \n", " \n", - " var tile_layer_d8931757b861f4e50b34bdf3c43f7e59 = L.tileLayer(\n", + " var tile_layer_a83e0b09797e18a74a9341b86aa5fa8a = L.tileLayer(\n", " "https://mt1.google.com/vt/lyrs=y\\u0026x={x}\\u0026y={y}\\u0026z={z}",\n", " {"attribution": "Google", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_e768368a64f4117a24c2ed1add335c09);\n", + " ).addTo(map_bf8cb17dfddc88eee0345b09539b65b3);\n", " \n", " \n", - " var tile_layer_5cc0597fd47030f70860adeb11a04e50 = L.tileLayer(\n", - " "https://earthengine.googleapis.com/v1/projects/rcr-gee-2/maps/878cd4cda12ea625edde2235b25ccfba-4e585685e228e19bfb2c776dfd5fae64/tiles/{z}/{x}/{y}",\n", + " var tile_layer_052abd9b5ca3dc5e0689f5a5defe60ca = L.tileLayer(\n", + " "https://earthengine.googleapis.com/v1/projects/lcms-292214/maps/8b65d3ca40b419c815211709b11bdf70-fd2bf96cfc74f2b85446bb1e06d78566/tiles/{z}/{x}/{y}",\n", " {"attribution": "Google Earth Engine | GeeViz", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_e768368a64f4117a24c2ed1add335c09);\n", + " ).addTo(map_bf8cb17dfddc88eee0345b09539b65b3);\n", " \n", " \n", - " var tile_layer_edf797cf5a88a31ffc210b741abf975f = L.tileLayer(\n", - " "https://earthengine.googleapis.com/v1/projects/rcr-gee-2/maps/e40754b26863dbda6eb4e72f817357eb-aeafa083ba9af0c84a9c23767962bd08/tiles/{z}/{x}/{y}",\n", + " var tile_layer_6657345b6a0e65189cd9f172d7597628 = L.tileLayer(\n", + " "https://earthengine.googleapis.com/v1/projects/lcms-292214/maps/cfe71c74fde98ae75ee307d9c2718d13-34e14d8c58292c547f605a95d208544a/tiles/{z}/{x}/{y}",\n", " {"attribution": "Google Earth Engine | GeeViz", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_e768368a64f4117a24c2ed1add335c09);\n", + " ).addTo(map_bf8cb17dfddc88eee0345b09539b65b3);\n", " \n", " \n", - " var tile_layer_7202c93b8a32531c6cf6e276253ba863 = L.tileLayer(\n", - " "https://earthengine.googleapis.com/v1/projects/rcr-gee-2/maps/1dd1ca8432e9c77788f5ff204934cb9a-c08173cfa4c18f3d94abda55b7f03d23/tiles/{z}/{x}/{y}",\n", + " var tile_layer_1b2bc15851267f89108ff72becc09d75 = L.tileLayer(\n", + " "https://earthengine.googleapis.com/v1/projects/lcms-292214/maps/1dd1ca8432e9c77788f5ff204934cb9a-b50be3c4da69498a104aad062c94b81e/tiles/{z}/{x}/{y}",\n", " {"attribution": "Google Earth Engine", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_e768368a64f4117a24c2ed1add335c09);\n", + " ).addTo(map_bf8cb17dfddc88eee0345b09539b65b3);\n", " \n", " \n", - " var layer_control_3e565ea03295a2c2eec652874e417314 = {\n", + " var layer_control_806d6bc00b08c811e7e6fdb6bd3f3a33 = {\n", " base_layers : {\n", - " "openstreetmap" : tile_layer_2eb064abc510a2009667247ec503744f,\n", + " "openstreetmap" : tile_layer_e9b894311852908103d312ac72a0f8d7,\n", " },\n", " overlays : {\n", - " "Google Maps" : tile_layer_318d20fe437657d8826935e48946a9fb,\n", - " "Google Satellite" : tile_layer_d8931757b861f4e50b34bdf3c43f7e59,\n", - " "S2 Median 2023" : tile_layer_5cc0597fd47030f70860adeb11a04e50,\n", - " "S2 Median 2022" : tile_layer_edf797cf5a88a31ffc210b741abf975f,\n", - " "Study Area" : tile_layer_7202c93b8a32531c6cf6e276253ba863,\n", + " "Google Maps" : tile_layer_bf19b02e732ce46afa87ec069e125745,\n", + " "Google Satellite" : tile_layer_a83e0b09797e18a74a9341b86aa5fa8a,\n", + " "S2 Median 2023" : tile_layer_052abd9b5ca3dc5e0689f5a5defe60ca,\n", + " "S2 Median 2022" : tile_layer_6657345b6a0e65189cd9f172d7597628,\n", + " "Study Area" : tile_layer_1b2bc15851267f89108ff72becc09d75,\n", " },\n", " };\n", " L.control.layers(\n", - " layer_control_3e565ea03295a2c2eec652874e417314.base_layers,\n", - " layer_control_3e565ea03295a2c2eec652874e417314.overlays,\n", + " layer_control_806d6bc00b08c811e7e6fdb6bd3f3a33.base_layers,\n", + " layer_control_806d6bc00b08c811e7e6fdb6bd3f3a33.overlays,\n", " {"autoZIndex": false, "collapsed": false, "position": "topright"}\n", - " ).addTo(map_e768368a64f4117a24c2ed1add335c09);\n", - " tile_layer_edf797cf5a88a31ffc210b741abf975f.remove();\n", + " ).addTo(map_bf8cb17dfddc88eee0345b09539b65b3);\n", + " tile_layer_6657345b6a0e65189cd9f172d7597628.remove();\n", " \n", " \n", " L.control.fullscreen(\n", " {"forceSeparateButton": false, "position": "topleft", "title": "Full Screen", "titleCancel": "Exit Full Screen"}\n", - " ).addTo(map_e768368a64f4117a24c2ed1add335c09);\n", + " ).addTo(map_bf8cb17dfddc88eee0345b09539b65b3);\n", " \n", "</script>\n", "</html>\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen>

    " ], "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -261,7 +246,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:1234/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:1234/geeView/?projectID=rcr-gee-2&accessToken=ya29.a0AfB_byCP8HcC-KgEexObCBH6V-INd3TohADawsSbQUkAJ6F2610Ejx0YrUgSRrX3Htj0SOzAQndyQJthWGIP64KMLPphHHVovwJkqBIS17C7dV9GCPnhXCLkek5cY-mtkGhxFVjOxcOIYhW9kvnuSE8zRaJkPf9gZn-QykRfPtqRaCgYKAc8SARASFQHGX2MiabXK25SWKqOKCKEVD2Xnlg0179\n" + "geeView URL: http://localhost:1234/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZDbcJ3L1DVXwA-_pCB34jAAAAZNhd7u9i06UHk43hWigYXc3K2oeDYmfRGm-sqiZPXijhaIPwbxQ8ihv0oedNanKny9oGmwSXPjmmpizVz5b6FBSbLqOuLK1kIPLu4v-gbrIry9cu6uJDmYcdS8IY_qOZHpByBppNRjWAkaCgYKATcSARESFQHGX2MiaLWkXlEAlSRFL1yHTKi7Ww0178&accessTokenCreationTime=1731636167610\n" ] }, { @@ -271,7 +256,7 @@ " " + "" ] }, "metadata": {}, "output_type": "display_data" - }, - { - "ename": "", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[1;31mThe Kernel crashed while executing code in the the current cell or a previous cell. Please review the code in the cell(s) to identify a possible cause of the failure. Click here for more info. View Jupyter log for further details." - ] } ], "source": [ + "foliumViewMap.clearMap()\n", + "geeViewMap.clearMap()\n", "# Bring in some S2 data\n", "studyArea = ee.Geometry.Polygon(\n", " [[[-113.21807278537877, 41.786028237932015],\n", @@ -303,13 +282,13 @@ " [-111.82280911350377, 41.786028237932015]]], None, False)\n", "\n", "# Get some example images to view\n", - "s2s = gil.getProcessedSentinel2Scenes(studyArea,2022,2023,120,150)\n", + "s2s = gil.superSimpleGetS2(studyArea,'2022-01-01','2023-12-31',120,150)\n", "postComposite = s2s.filter(ee.Filter.calendarRange(2023,2023,'year')).median()\n", - "foliumViewMap.addLayer(postComposite,gil.vizParamsFalse,'S2 Median 2023')\n", - "geeViewMap.addLayer(postComposite,gil.vizParamsFalse,'S2 Median 2023')\n", + "foliumViewMap.addLayer(postComposite,gil.vizParamsFalse10k,'S2 Median 2023')\n", + "geeViewMap.addLayer(postComposite,gil.vizParamsFalse10k,'S2 Median 2023')\n", "preComposite = s2s.filter(ee.Filter.calendarRange(2022,2022,'year')).median()\n", - "foliumViewMap.addLayer(preComposite,gil.vizParamsFalse,'S2 Median 2022',False)\n", - "geeViewMap.addLayer(preComposite,gil.vizParamsFalse,'S2 Median 2022',False)\n", + "foliumViewMap.addLayer(preComposite,gil.vizParamsFalse10k,'S2 Median 2022',False)\n", + "geeViewMap.addLayer(preComposite,gil.vizParamsFalse10k,'S2 Median 2022',False)\n", "\n", "# Center on the study area and view it\n", "foliumViewMap.centerObject(studyArea)\n", @@ -328,7 +307,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 8, "id": "dc168bd6", "metadata": {}, "outputs": [ @@ -362,7 +341,7 @@ " <meta name="viewport" content="width=device-width,\n", " initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />\n", " <style>\n", - " #map_75334d5df7d7b6bee93eaa7a6a0444c7 {\n", + " #map_0d3c2d857dc84813a9ad09af38a85c74 {\n", " position: relative;\n", " width: 100.0%;\n", " height: 100.0%;\n", @@ -378,14 +357,14 @@ "<body>\n", " \n", " \n", - " <div class="folium-map" id="map_75334d5df7d7b6bee93eaa7a6a0444c7" ></div>\n", + " <div class="folium-map" id="map_0d3c2d857dc84813a9ad09af38a85c74" ></div>\n", " \n", "</body>\n", "<script>\n", " \n", " \n", - " var map_75334d5df7d7b6bee93eaa7a6a0444c7 = L.map(\n", - " "map_75334d5df7d7b6bee93eaa7a6a0444c7",\n", + " var map_0d3c2d857dc84813a9ad09af38a85c74 = L.map(\n", + " "map_0d3c2d857dc84813a9ad09af38a85c74",\n", " {\n", " center: [0, 0],\n", " crs: L.CRS.EPSG3857,\n", @@ -399,79 +378,79 @@ "\n", " \n", " \n", - " var tile_layer_25d8161bb6085167b21e6c0d242464d7 = L.tileLayer(\n", + " var tile_layer_d26b642dc3c339eca31d64423e6a443b = L.tileLayer(\n", " "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",\n", " {"attribution": "Data by \\u0026copy; \\u003ca target=\\"_blank\\" href=\\"http://openstreetmap.org\\"\\u003eOpenStreetMap\\u003c/a\\u003e, under \\u003ca target=\\"_blank\\" href=\\"http://www.openstreetmap.org/copyright\\"\\u003eODbL\\u003c/a\\u003e.", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_75334d5df7d7b6bee93eaa7a6a0444c7);\n", + " ).addTo(map_0d3c2d857dc84813a9ad09af38a85c74);\n", " \n", " \n", - " map_75334d5df7d7b6bee93eaa7a6a0444c7.fitBounds(\n", + " map_0d3c2d857dc84813a9ad09af38a85c74.fitBounds(\n", " [[40.595571243156144, -113.21807278537877], [41.786028237932015, -111.82280911350377]],\n", " {}\n", " );\n", " \n", " \n", - " var tile_layer_2ce97936129ccddd74bbb6ad16a4d8d9 = L.tileLayer(\n", + " var tile_layer_bf19b02e732ce46afa87ec069e125745 = L.tileLayer(\n", " "https://mt1.google.com/vt/lyrs=m\\u0026x={x}\\u0026y={y}\\u0026z={z}",\n", " {"attribution": "Google", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_75334d5df7d7b6bee93eaa7a6a0444c7);\n", + " ).addTo(map_0d3c2d857dc84813a9ad09af38a85c74);\n", " \n", " \n", - " var tile_layer_0804d036b81e7bcd721c727b2c50a1b4 = L.tileLayer(\n", + " var tile_layer_a83e0b09797e18a74a9341b86aa5fa8a = L.tileLayer(\n", " "https://mt1.google.com/vt/lyrs=y\\u0026x={x}\\u0026y={y}\\u0026z={z}",\n", " {"attribution": "Google", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_75334d5df7d7b6bee93eaa7a6a0444c7);\n", + " ).addTo(map_0d3c2d857dc84813a9ad09af38a85c74);\n", " \n", " \n", - " var tile_layer_042de6edf5ac45fd9eb68d13a019582f = L.tileLayer(\n", - " "https://earthengine.googleapis.com/v1/projects/earthengine-legacy/maps/c2977a270141db4a60d3223bdb36d376-d79c520062fcf4ae3c40e0d1cf9b1b87/tiles/{z}/{x}/{y}",\n", + " var tile_layer_e1e8c048257f05fe0bc4b9858eacb7ae = L.tileLayer(\n", + " "https://earthengine.googleapis.com/v1/projects/lcms-292214/maps/8b65d3ca40b419c815211709b11bdf70-2586002fa31dd60941a7fe44d7fce1d3/tiles/{z}/{x}/{y}",\n", " {"attribution": "Google Earth Engine | GeeViz", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_75334d5df7d7b6bee93eaa7a6a0444c7);\n", + " ).addTo(map_0d3c2d857dc84813a9ad09af38a85c74);\n", " \n", " \n", - " var tile_layer_97f21978a26e782e4c0c8d1902b2fc5c = L.tileLayer(\n", - " "https://earthengine.googleapis.com/v1/projects/earthengine-legacy/maps/7bb79b310bb924c7447da63b232bd54c-b004f8bada8b318b555422618a4aa837/tiles/{z}/{x}/{y}",\n", + " var tile_layer_ce36a093dbaabafea6ea519a9a00904c = L.tileLayer(\n", + " "https://earthengine.googleapis.com/v1/projects/lcms-292214/maps/cfe71c74fde98ae75ee307d9c2718d13-9bc1bcce3da47ea46e7dd794e8c2bcff/tiles/{z}/{x}/{y}",\n", " {"attribution": "Google Earth Engine | GeeViz", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_75334d5df7d7b6bee93eaa7a6a0444c7);\n", + " ).addTo(map_0d3c2d857dc84813a9ad09af38a85c74);\n", " \n", " \n", - " var tile_layer_6dc9113cf2448d77165c70967ae4ebab = L.tileLayer(\n", - " "https://earthengine.googleapis.com/v1/projects/earthengine-legacy/maps/1dd1ca8432e9c77788f5ff204934cb9a-5511903ebecf8b50150d48196845f9ca/tiles/{z}/{x}/{y}",\n", + " var tile_layer_815b492266aed0118863f9068faf2111 = L.tileLayer(\n", + " "https://earthengine.googleapis.com/v1/projects/lcms-292214/maps/1dd1ca8432e9c77788f5ff204934cb9a-c106266d159702d559220f726c25347b/tiles/{z}/{x}/{y}",\n", " {"attribution": "Google Earth Engine", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_75334d5df7d7b6bee93eaa7a6a0444c7);\n", + " ).addTo(map_0d3c2d857dc84813a9ad09af38a85c74);\n", " \n", " \n", - " var layer_control_ccd33ae4d9c07922044e2ae5208e3034 = {\n", + " var layer_control_c277404e3cf3fa680d7f4bc844b773f5 = {\n", " base_layers : {\n", - " "openstreetmap" : tile_layer_25d8161bb6085167b21e6c0d242464d7,\n", + " "openstreetmap" : tile_layer_d26b642dc3c339eca31d64423e6a443b,\n", " },\n", " overlays : {\n", - " "Google Maps" : tile_layer_2ce97936129ccddd74bbb6ad16a4d8d9,\n", - " "Google Satellite" : tile_layer_0804d036b81e7bcd721c727b2c50a1b4,\n", - " "S2 Median 2023" : tile_layer_042de6edf5ac45fd9eb68d13a019582f,\n", - " "S2 Median 2022" : tile_layer_97f21978a26e782e4c0c8d1902b2fc5c,\n", - " "Study Area" : tile_layer_6dc9113cf2448d77165c70967ae4ebab,\n", + " "Google Maps" : tile_layer_bf19b02e732ce46afa87ec069e125745,\n", + " "Google Satellite" : tile_layer_a83e0b09797e18a74a9341b86aa5fa8a,\n", + " "S2 Median 2023" : tile_layer_e1e8c048257f05fe0bc4b9858eacb7ae,\n", + " "S2 Median 2022" : tile_layer_ce36a093dbaabafea6ea519a9a00904c,\n", + " "Study Area" : tile_layer_815b492266aed0118863f9068faf2111,\n", " },\n", " };\n", " L.control.layers(\n", - " layer_control_ccd33ae4d9c07922044e2ae5208e3034.base_layers,\n", - " layer_control_ccd33ae4d9c07922044e2ae5208e3034.overlays,\n", + " layer_control_c277404e3cf3fa680d7f4bc844b773f5.base_layers,\n", + " layer_control_c277404e3cf3fa680d7f4bc844b773f5.overlays,\n", " {"autoZIndex": false, "collapsed": false, "position": "topright"}\n", - " ).addTo(map_75334d5df7d7b6bee93eaa7a6a0444c7);\n", - " tile_layer_042de6edf5ac45fd9eb68d13a019582f.remove();\n", - " tile_layer_97f21978a26e782e4c0c8d1902b2fc5c.remove();\n", - " tile_layer_6dc9113cf2448d77165c70967ae4ebab.remove();\n", + " ).addTo(map_0d3c2d857dc84813a9ad09af38a85c74);\n", + " tile_layer_e1e8c048257f05fe0bc4b9858eacb7ae.remove();\n", + " tile_layer_ce36a093dbaabafea6ea519a9a00904c.remove();\n", + " tile_layer_815b492266aed0118863f9068faf2111.remove();\n", " \n", " \n", " L.control.fullscreen(\n", " {"forceSeparateButton": false, "position": "topleft", "title": "Full Screen", "titleCancel": "Exit Full Screen"}\n", - " ).addTo(map_75334d5df7d7b6bee93eaa7a6a0444c7);\n", + " ).addTo(map_0d3c2d857dc84813a9ad09af38a85c74);\n", " \n", "</script>\n", "</html>\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen>

    " ], "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -482,9 +461,10 @@ "output_type": "stream", "text": [ "Starting webmap\n", - "Using default refresh token for geeView: C:\\Users\\ihousman/.config/earthengine/credentials\n", + "Using default refresh token for geeView\n", "Local web server at: http://localhost:1234/geeView/ already serving.\n", - "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n" + "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", + "geeView URL: http://localhost:1234/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZBgEjF_qT4biuDwvxdtZ3fRkCFXi2hjGPshz4JTMX9Qd_B08sziz8mCa32AnWU1vNHGf20_-D4K_rx5d7KG6Orzca4g73b0wxTGYLjJjlO6q8fMjpkU8ZwD_YM60VL_uDLz4MvtH3FDlI7JjpfyvIRnLYvCnhlIn9ZwZ7QaCgYKARkSARESFQHGX2MiPdRuXvSNF3GQ2UaYanRICw0178&accessTokenCreationTime=1731636205672\n" ] }, { @@ -494,7 +474,7 @@ " " + "" ] }, "metadata": {}, @@ -520,7 +500,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 9, "id": "8714a906", "metadata": {}, "outputs": [ @@ -554,7 +534,7 @@ " <meta name="viewport" content="width=device-width,\n", " initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />\n", " <style>\n", - " #map_6ae079e70a9a766f5a4c686c2cd27ded {\n", + " #map_5a7550f959b1ae1f8f9b8fac7d371a57 {\n", " position: relative;\n", " width: 100.0%;\n", " height: 100.0%;\n", @@ -570,14 +550,14 @@ "<body>\n", " \n", " \n", - " <div class="folium-map" id="map_6ae079e70a9a766f5a4c686c2cd27ded" ></div>\n", + " <div class="folium-map" id="map_5a7550f959b1ae1f8f9b8fac7d371a57" ></div>\n", " \n", "</body>\n", "<script>\n", " \n", " \n", - " var map_6ae079e70a9a766f5a4c686c2cd27ded = L.map(\n", - " "map_6ae079e70a9a766f5a4c686c2cd27ded",\n", + " var map_5a7550f959b1ae1f8f9b8fac7d371a57 = L.map(\n", + " "map_5a7550f959b1ae1f8f9b8fac7d371a57",\n", " {\n", " center: [0, 0],\n", " crs: L.CRS.EPSG3857,\n", @@ -591,76 +571,76 @@ "\n", " \n", " \n", - " var tile_layer_6ca2cd56fe25139eeb4055e18439f00c = L.tileLayer(\n", + " var tile_layer_d074fc4686c0b3198ed2ec2c2b15b714 = L.tileLayer(\n", " "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",\n", " {"attribution": "Data by \\u0026copy; \\u003ca target=\\"_blank\\" href=\\"http://openstreetmap.org\\"\\u003eOpenStreetMap\\u003c/a\\u003e, under \\u003ca target=\\"_blank\\" href=\\"http://www.openstreetmap.org/copyright\\"\\u003eODbL\\u003c/a\\u003e.", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_6ae079e70a9a766f5a4c686c2cd27ded);\n", + " ).addTo(map_5a7550f959b1ae1f8f9b8fac7d371a57);\n", " \n", " \n", - " map_6ae079e70a9a766f5a4c686c2cd27ded.fitBounds(\n", + " map_5a7550f959b1ae1f8f9b8fac7d371a57.fitBounds(\n", " [[40.595571243156144, -113.21807278537877], [41.786028237932015, -111.82280911350377]],\n", " {}\n", " );\n", " \n", " \n", - " var tile_layer_2ce97936129ccddd74bbb6ad16a4d8d9 = L.tileLayer(\n", + " var tile_layer_bf19b02e732ce46afa87ec069e125745 = L.tileLayer(\n", " "https://mt1.google.com/vt/lyrs=m\\u0026x={x}\\u0026y={y}\\u0026z={z}",\n", " {"attribution": "Google", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_6ae079e70a9a766f5a4c686c2cd27ded);\n", + " ).addTo(map_5a7550f959b1ae1f8f9b8fac7d371a57);\n", " \n", " \n", - " var tile_layer_0804d036b81e7bcd721c727b2c50a1b4 = L.tileLayer(\n", + " var tile_layer_a83e0b09797e18a74a9341b86aa5fa8a = L.tileLayer(\n", " "https://mt1.google.com/vt/lyrs=y\\u0026x={x}\\u0026y={y}\\u0026z={z}",\n", " {"attribution": "Google", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_6ae079e70a9a766f5a4c686c2cd27ded);\n", + " ).addTo(map_5a7550f959b1ae1f8f9b8fac7d371a57);\n", " \n", " \n", - " var tile_layer_de4f52f45dcbdd73eaf18ec8d6bb4c8e = L.tileLayer(\n", - " "https://earthengine.googleapis.com/v1/projects/earthengine-legacy/maps/5206f96be658993e51f71b721788e631-7af46ab593128ac9acae40db4ecc2e94/tiles/{z}/{x}/{y}",\n", + " var tile_layer_13f2b579776361222d2a8b420c4883b5 = L.tileLayer(\n", + " "https://earthengine.googleapis.com/v1/projects/lcms-292214/maps/8b65d3ca40b419c815211709b11bdf70-e5aba86dc97de35a8c0601d2a7929da6/tiles/{z}/{x}/{y}",\n", " {"attribution": "Google Earth Engine | GeeViz", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_6ae079e70a9a766f5a4c686c2cd27ded);\n", + " ).addTo(map_5a7550f959b1ae1f8f9b8fac7d371a57);\n", " \n", " \n", - " var tile_layer_d4302cdedbd1a069632aa5eafaa58d8e = L.tileLayer(\n", - " "https://earthengine.googleapis.com/v1/projects/earthengine-legacy/maps/265338b79f8eee2fa31c73bd685096f2-0cc1ec54c4f36d5263f8ff080ca0da6e/tiles/{z}/{x}/{y}",\n", + " var tile_layer_e9ee12c9f68d952031d5030fad773405 = L.tileLayer(\n", + " "https://earthengine.googleapis.com/v1/projects/lcms-292214/maps/cfe71c74fde98ae75ee307d9c2718d13-cc171251a4aad5cda94665cf4c5962e4/tiles/{z}/{x}/{y}",\n", " {"attribution": "Google Earth Engine | GeeViz", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_6ae079e70a9a766f5a4c686c2cd27ded);\n", + " ).addTo(map_5a7550f959b1ae1f8f9b8fac7d371a57);\n", " \n", " \n", - " var tile_layer_d197dd002a1454886c87186c28976d42 = L.tileLayer(\n", - " "https://earthengine.googleapis.com/v1/projects/earthengine-legacy/maps/1dd1ca8432e9c77788f5ff204934cb9a-e60dd8c676d90dd89c0b0788eb9ef802/tiles/{z}/{x}/{y}",\n", + " var tile_layer_bbcb2a5ce2b8db6ac99d3526e3c9524b = L.tileLayer(\n", + " "https://earthengine.googleapis.com/v1/projects/lcms-292214/maps/1dd1ca8432e9c77788f5ff204934cb9a-b37d5ad4e80a2a549134cee564627bc0/tiles/{z}/{x}/{y}",\n", " {"attribution": "Google Earth Engine", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_6ae079e70a9a766f5a4c686c2cd27ded);\n", + " ).addTo(map_5a7550f959b1ae1f8f9b8fac7d371a57);\n", " \n", " \n", - " var layer_control_eb1d11e4c51f1cab920d5c85d9b965f0 = {\n", + " var layer_control_db9697066279ce8e0e7853d9189b5a2d = {\n", " base_layers : {\n", - " "openstreetmap" : tile_layer_6ca2cd56fe25139eeb4055e18439f00c,\n", + " "openstreetmap" : tile_layer_d074fc4686c0b3198ed2ec2c2b15b714,\n", " },\n", " overlays : {\n", - " "Google Maps" : tile_layer_2ce97936129ccddd74bbb6ad16a4d8d9,\n", - " "Google Satellite" : tile_layer_0804d036b81e7bcd721c727b2c50a1b4,\n", - " "S2 Median 2023" : tile_layer_de4f52f45dcbdd73eaf18ec8d6bb4c8e,\n", - " "S2 Median 2022" : tile_layer_d4302cdedbd1a069632aa5eafaa58d8e,\n", - " "Study Area" : tile_layer_d197dd002a1454886c87186c28976d42,\n", + " "Google Maps" : tile_layer_bf19b02e732ce46afa87ec069e125745,\n", + " "Google Satellite" : tile_layer_a83e0b09797e18a74a9341b86aa5fa8a,\n", + " "S2 Median 2023" : tile_layer_13f2b579776361222d2a8b420c4883b5,\n", + " "S2 Median 2022" : tile_layer_e9ee12c9f68d952031d5030fad773405,\n", + " "Study Area" : tile_layer_bbcb2a5ce2b8db6ac99d3526e3c9524b,\n", " },\n", " };\n", " L.control.layers(\n", - " layer_control_eb1d11e4c51f1cab920d5c85d9b965f0.base_layers,\n", - " layer_control_eb1d11e4c51f1cab920d5c85d9b965f0.overlays,\n", + " layer_control_db9697066279ce8e0e7853d9189b5a2d.base_layers,\n", + " layer_control_db9697066279ce8e0e7853d9189b5a2d.overlays,\n", " {"autoZIndex": false, "collapsed": false, "position": "topright"}\n", - " ).addTo(map_6ae079e70a9a766f5a4c686c2cd27ded);\n", + " ).addTo(map_5a7550f959b1ae1f8f9b8fac7d371a57);\n", " \n", " \n", " L.control.fullscreen(\n", " {"forceSeparateButton": false, "position": "topleft", "title": "Full Screen", "titleCancel": "Exit Full Screen"}\n", - " ).addTo(map_6ae079e70a9a766f5a4c686c2cd27ded);\n", + " ).addTo(map_5a7550f959b1ae1f8f9b8fac7d371a57);\n", " \n", "</script>\n", "</html>\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen>
    " ], "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -671,9 +651,10 @@ "output_type": "stream", "text": [ "Starting webmap\n", - "Using default refresh token for geeView: C:\\Users\\ihousman/.config/earthengine/credentials\n", + "Using default refresh token for geeView\n", "Local web server at: http://localhost:1234/geeView/ already serving.\n", - "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n" + "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", + "geeView URL: http://localhost:1234/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZBUVPa6LDS25-4BKa-QvyMaz0HTq8mm7-tn5ABvN9VQk-ga6KngwRbFK9lVePwfAnN3KVTzcYhKcl5_a35GszdiHTiYkun9LJ4a_2pwKJu5QwxHQsx9l5rOTV4n5glhvDXYy1-AmDTKKenKabXEY0f1XBVtsZlX4M-j4Z4aCgYKAc4SARESFQHGX2MiTjFdTXxQ6GZsKMtMJgEoVw0178&accessTokenCreationTime=1731636218348\n" ] }, { @@ -683,7 +664,7 @@ " " + "" ] }, "metadata": {}, diff --git a/docs/build/jupyter_execute/notebooks/geeViz_geeMap_comparison_tutorial.ipynb b/docs/build/jupyter_execute/notebooks/geeViz_geeMap_comparison_tutorial.ipynb index 8df7549..ceb040e 100644 --- a/docs/build/jupyter_execute/notebooks/geeViz_geeMap_comparison_tutorial.ipynb +++ b/docs/build/jupyter_execute/notebooks/geeViz_geeMap_comparison_tutorial.ipynb @@ -13,47 +13,22 @@ "\n", "* This is intended to illustrate the basic map functionality of each package. Refer to each packages examples for more in-depth demos\n", "\n", - "

    \"Open

    " + "\n", + "[![github](https://img.shields.io/badge/-see%20sources-white?logo=github&labelColor=555)](https://github.com/gee-community/geeviz/blob/master/examples/geeViz_geeMap_comparison_tutorial.ipynb) \n", + "[![github](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/gee-community/geeViz/blob/master/examples/geeViz_geeMap_comparison_tutorial.ipynb)" ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, "metadata": {}, "outputs": [ { - "data": { - "text/html": [ - "\n", - " \n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" + "name": "stdout", + "output_type": "stream", + "text": [ + "geeViz package folder: c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\geeViz\n" + ] } ], "source": [ @@ -82,7 +57,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "metadata": {}, "outputs": [ { @@ -122,7 +97,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f2330ca0a7ca442dbe3731326371427d", + "model_id": "6ed7ad90f7b14fdabc8e09495452b37c", "version_major": 2, "version_minor": 0 }, @@ -130,7 +105,7 @@ "Map(center=[0, 0], controls=(WidgetControl(options=['position', 'transparent_bg'], widget=SearchDataGUI(childr…" ] }, - "execution_count": 3, + "execution_count": 2, "metadata": {}, "output_type": "execute_result" } @@ -142,7 +117,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 3, "metadata": {}, "outputs": [ { @@ -187,7 +162,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AXooCgvgEDNhCDK0uDRpz89SY_IP1QTrcZy4sXuRjC2AakLLpvpHnY4JbpgQuN_aObMEAvqSekQexKUPFqKMjO5dKpTtZz7JLna2PHWIejqpRF1ZAmPRsoe7rV9BRT3m9PnDdmozagQiXui2XI_aIBVL4dq2v8LzdP7mOWEaCgYKAfESARESFQHGX2MiZsnH07ngGCe4E3fpeJEWmw0174\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZC1NpuzSJnOL46m9K4RQ3OxUQL_5d8_g_ocHO3jhv7KYFenfHacOKTrQXoBfiWS0Ri1rT0tNpnsmOGaHP7hwSPWwuIcptltnUzIPtDaulxJmYWOrEQJ3R0Iqa-NovKOogpQDP_t394JVVun6_SjOmmKGdsY8k-W-mdz5NoaCgYKAeoSARESFQHGX2MitIO-ZCr0Ku8KFquA0SiGAA0178&accessTokenCreationTime=1731461548264\n" ] }, { @@ -197,7 +172,7 @@ " " + "" ] }, "metadata": {}, @@ -230,7 +205,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -275,7 +250,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AXooCgvtomcjUlHqrrMtMyYQ3xkeyvWoRPwJ_tM5q65sOLXUvOO-DJACMhLbU5evcuZ2Swuaf3DXi_cfPDJzW6J22NdhFg4bo8iMIUjx2qwfPc4eGA0pIEHN0Mr5RkKOxzumlDPBKHAa2INX7OrtgJgzS_j2jrWjiCEo_G8aCgYKAUISARESFQHGX2MiorOf-P_GbrM7fO2kghuJTQ0174\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZDCqAxJILCd0nHUTJMchkcJTzMCfn_oOr09p0ecz2ZwSKyD4y-EV2Fu9GmeSHC-sKIHBezhBiWvD9RSEODWO7V0H1Sf6oD9wEJ7ams9Je0HDaeKBpx9VaYCtubO12v42BIEsTmq3w5sL43edm7avLzkSx40cagxNA48IJcaCgYKAbgSARESFQHGX2MiDqqNEsiekCnocxei6tyNLQ0178&accessTokenCreationTime=1731461558966\n" ] }, { @@ -285,7 +260,7 @@ " " + "" ] }, "metadata": {}, @@ -302,7 +277,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "a59ecbc4aae74e50a5f3903142916ddb", + "model_id": "ccfae8bc563e4a4fa0f490b8e4d20298", "version_major": 2, "version_minor": 0 }, @@ -310,7 +285,7 @@ "Map(center=[40.64356771453405, -111.92926447956667], controls=(WidgetControl(options=['position', 'transparent…" ] }, - "execution_count": 5, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -329,7 +304,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -374,7 +349,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AXooCgtJHkiDNTHnX1_pSscrZxMjNt9pvKyEtfkWLAUETNAq-mH7v_Cn2tzqKIa4Y271z-7jrnQIuFTCLO_2HkORiSS8HHeyy_fNRCzB86G70832yYkW1m84OkDsMgFl9Kbje3Ipo4C2aK8JWKVMOqJBFiXaY6BRE-nwTd8aCgYKAdISARESFQHGX2Mix0GbebnUwrD7aJVzoBXgrQ0174\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZCAzLBBAsbkibPAyQQBqz2A45adbb64UjuzZf4BzqFZspb3rXWLjQ-CXDOCq39f89yuIC1VEKd-KR-BrR3ReZ1qBOl1CBqCbmpuNmn8EavXnusniLjz8eAu5YjmTgB4n8VFUz0w5XIAMFQ1uuQWkGfbV3W6F1qo8nM3BcMaCgYKAUwSARESFQHGX2Mi1VbmxyoOc4nqPnQboIV-oA0178&accessTokenCreationTime=1731461571134\n" ] }, { @@ -384,7 +359,7 @@ " " + "" ] }, "metadata": {}, @@ -401,7 +376,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "6569b3cbe1e1419781ed7504e82afb10", + "model_id": "a046d1db994143879ec8221e21957a91", "version_major": 2, "version_minor": 0 }, @@ -409,7 +384,7 @@ "Map(center=[40.64356771453405, -111.92926447956665], controls=(WidgetControl(options=['position', 'transparent…" ] }, - "execution_count": 6, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -435,7 +410,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -484,7 +459,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AXooCgt2jXuR_ORQ4rVSJMw4gBgwNkPrdy3LbsdGZXmtBfF5m4ez0cqKlAEhvULItePzt4VZS_kRqMc_uQFyogJjBIJr0aJqU2hVR1Wzlw02hiEB2Z2ObtVqT8TjS3An_DPYQcz18EGyVE_DQ_VAgMET3xlANZSADM1YO58aCgYKAaYSARESFQHGX2MiILfbqpEh0dgLNorL1lvmug0174\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZD3s3w_jGcfIljb-YyzXOpr0bJ0zHO8jMIckApbI0hSBFXPcjywqzsghWSVwW2vNYOFU5KW1Y0SevWJv6qdqSkAj--bilduzpTEAisNsy45Ai9qVUQERpC8mxOWxFsXswfzKylxVlqIWgCMbUXIbWrtWkdmi-LPVNe56p4aCgYKAckSARESFQHGX2MihtuQ8ShbRfFcBUdvKlc8TA0178&accessTokenCreationTime=1731461581110\n" ] }, { @@ -494,7 +469,7 @@ " " + "" ] }, "metadata": {}, @@ -511,7 +486,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "61cdbd4b0ba74fd3a23510d1b5e3c24e", + "model_id": "79ede6bd57864f039bcab1a231cd4774", "version_major": 2, "version_minor": 0 }, @@ -519,7 +494,7 @@ "Map(center=[40.64356771453405, -111.92926447956665], controls=(WidgetControl(options=['position', 'transparent…" ] }, - "execution_count": 8, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -587,7 +562,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -633,7 +608,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AXooCguej_AkK295bC8_WXVH1oBx6imTvMTr0fi635pjMVgupD35Bq_1bdnn2zadU2bK-NnYU0CsiI6qOXRhbY7NvN1JZQpkfZI2pMnwF5q-yHN76fAL_Tn9TgaeJK916yBXDkQdB-1dKdNWJCfuGMIrp8j_0hGv-oTHVU4aCgYKAagSARESFQHGX2Mi4kPnsreTbkT_JrnUIGPU5g0174\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZCmcfUFilw2qyHmXLcFQFN9G5LYngkTOU6MzELQudJw4MqiiYnf3ZrrJR2JHwc2XvMhrn8xjfsMjmvtaZwNhvfYP7eEEtCRz8Cy87AYaeqdjILC3n9LbOF3peYIv9bWm9LOP3WT_BwTS0cqeSIlTrKubynjMVwoeXFS5S0aCgYKAUwSARESFQHGX2MiBEMf82fGFDIITfZ1DJd_1A0178&accessTokenCreationTime=1731461647526\n" ] }, { @@ -643,7 +618,7 @@ " " + "" ] }, "metadata": {}, @@ -660,7 +635,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1e89a15319a1410bac0f1291725bca66", + "model_id": "84139d794e134da89b04bc2d8d2b1a4a", "version_major": 2, "version_minor": 0 }, @@ -668,7 +643,7 @@ "Map(center=[0, 0], controls=(WidgetControl(options=['position', 'transparent_bg'], widget=SearchDataGUI(childr…" ] }, - "execution_count": 11, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -714,7 +689,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -760,7 +735,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AXooCgvnIz-x3wPxqxNi2bR0QTnSijQwQYf9gP3Jn0fNBA5AnKN96ClZuhPQtqJeU3MlbSTnjU1MjuZcItAPtYg-K3jFtJzMVrrK-r32ztC_4GfNW-Qh6PYnlKazCHTpnv1lpqHEoFq50DD79x7oMRRbQV65PDT6op4i_jIaCgYKAbgSARESFQHGX2MiUVMBX4xesivi5u_FIcn9sQ0174\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZAGMiGUPgw2NrmnwxzzFx8VTX-BPJQ-_J4Z-QdTQyhGaWpeuS7bIMy1rWghjTRgyFm3Xl2uzVw2zsWNqhM8VG3SK3VhigV9c_8VqTsGGYzUxsGfgfK83BU7xy5ND2pugqZ2_LrFL8PlYhLkWAwfCw2BP12UktKKrezbeCMaCgYKAd8SARESFQHGX2Mi_2WMF2oIqf5cPedmM9ZTkQ0178&accessTokenCreationTime=1731461667454\n" ] }, { @@ -770,7 +745,7 @@ " " + "" ] }, "metadata": {}, @@ -787,7 +762,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "4f0171640169413983cc7f22b54b1510", + "model_id": "93db9cb912934eb58f5d50b98066c851", "version_major": 2, "version_minor": 0 }, @@ -795,7 +770,7 @@ "Map(center=[46.529, 6.746], controls=(WidgetControl(options=['position', 'transparent_bg'], widget=SearchDataG…" ] }, - "execution_count": 12, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -858,7 +833,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -901,8 +876,47 @@ "text": [ "Adding layer: Switzerland\n", "Starting webmap\n", - "Using default refresh token for geeView\n" + "Using default refresh token for geeView\n", + "Local web server at: http://localhost:8001/geeView/ already serving.\n", + "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZBB-cdTrE44xvI5cOkjSnSGbICt_KDKOJiAjB2D86DDD4-zGJaAg7oEIRdOQI_fzMX7VhSa0R2DsJm7OaEO7vlhcTvVot1KiGfXqCgIyp4KWzUrB_fSzuN_MbGZfRzBoYDO7kNj8eWPkiy2Ndbl2TWYxfpg54jj0XROCnoaCgYKASASARESFQHGX2MiIQ2guJPQlUheLfUHwt2wBA0178&accessTokenCreationTime=1731461699271\n" ] + }, + { + "data": { + "text/html": [ + "\n", + " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "98babdd061464936bf00d2180d408f3d", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Map(center=[0, 0], controls=(WidgetControl(options=['position', 'transparent_bg'], widget=SearchDataGUI(childr…" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ @@ -921,13 +935,6 @@ "gvMap.view()\n", "gmMap" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { diff --git a/docs/build/jupyter_execute/notebooks/getLandsatWrapperNotebook.ipynb b/docs/build/jupyter_execute/notebooks/getLandsatWrapperNotebook.ipynb index dca26bc..31e9b1c 100644 --- a/docs/build/jupyter_execute/notebooks/getLandsatWrapperNotebook.ipynb +++ b/docs/build/jupyter_execute/notebooks/getLandsatWrapperNotebook.ipynb @@ -24,8 +24,8 @@ "See the License for the specific language governing permissions and\n", "limitations under the License.\n", "\n", - "\n", - "

    \"Open

    " + "[![github](https://img.shields.io/badge/-see%20sources-white?logo=github&labelColor=555)](https://github.com/gee-community/geeviz/blob/master/examples/getLandsatWrapperNotebook.ipynb) \n", + "[![github](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/gee-community/geeViz/blob/master/examples/getLandsatWrapperNotebook.ipynb)" ] }, { @@ -97,36 +97,23 @@ "Applying scale factors for C2 L7 data\n", "Applying scale factors for C2 L9 data\n", "Applying Fmask Cloud Mask\n", - "Applying Fmask Shadow Mask\n", - "Adding layer: Default Params 2009 153-152\n", - "Type: Image geeImage\n", - "Starting webmap\n", - "Using default refresh token for geeView\n", - "Local web server at: http://localhost:8001/geeView/ already serving.\n", - "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AXooCgu8EUNhnVn0a7J3kojB9X0Xzzg_L0wQ_9vf3gO85uG1xXah7x1f4h1ZOkwLHZfFf6osd7BJKZmL3FKOjlQ-lkED4Pa8u3pfpMI4pPBR7KdrZI16NOS0KXA8znCkFv3pqSr5qDHoCbnKgSVjrjXuiInj5u744-aV2DsaCgYKARcSARESFQHGX2MiqeVeKwjjA8CVaHytQWVyGA0174\n" + "Applying Fmask Shadow Mask\n" ] }, { - "data": { - "text/html": [ - "\n", - " \n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" + "ename": "TypeError", + "evalue": "Collection.count() missing 1 required positional argument: 'property'", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[1;32mIn[2], line 28\u001b[0m\n\u001b[0;32m 25\u001b[0m endYear \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m2009\u001b[39m\n\u001b[0;32m 27\u001b[0m \u001b[38;5;66;03m#Call on master wrapper function to get Landat scenes and composites\u001b[39;00m\n\u001b[1;32m---> 28\u001b[0m lsAndTs \u001b[38;5;241m=\u001b[39m \u001b[43mgetImagesLib\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgetLandsatWrapper\u001b[49m\u001b[43m(\u001b[49m\u001b[43mstudyArea\u001b[49m\u001b[43m,\u001b[49m\u001b[43mstartYear\u001b[49m\u001b[43m,\u001b[49m\u001b[43mendYear\u001b[49m\u001b[43m,\u001b[49m\u001b[43mstartJulian\u001b[49m\u001b[43m,\u001b[49m\u001b[43mendJulian\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 31\u001b[0m \u001b[38;5;66;03m#Separate into scenes and composites for subsequent analysis\u001b[39;00m\n\u001b[0;32m 32\u001b[0m processedScenes \u001b[38;5;241m=\u001b[39m lsAndTs[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mprocessedScenes\u001b[39m\u001b[38;5;124m'\u001b[39m]\n", + "File \u001b[1;32mc:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\geeViz\\getImagesLib.py:5432\u001b[0m, in \u001b[0;36mgetLandsatWrapper\u001b[1;34m(studyArea, startYear, endYear, startJulian, endJulian, timebuffer, weights, compositingMethod, toaOrSR, includeSLCOffL7, defringeL5, applyCloudScore, applyFmaskCloudMask, applyTDOM, applyFmaskCloudShadowMask, applyFmaskSnowMask, cloudScoreThresh, performCloudScoreOffset, cloudScorePctl, zScoreThresh, shadowSumThresh, contractPixels, dilatePixels, correctIllumination, correctScale, exportComposites, outputName, exportPathRoot, crs, transform, scale, resampleMethod, preComputedCloudScoreOffset, preComputedTDOMIRMean, preComputedTDOMIRStdDev, compositingReducer, harmonizeOLI, landsatCollectionVersion, overwrite, verbose)\u001b[0m\n\u001b[0;32m 5429\u001b[0m ls \u001b[38;5;241m=\u001b[39m ls\u001b[38;5;241m.\u001b[39mmap(\u001b[38;5;28;01mlambda\u001b[39;00m img: addZenithAzimuth(img, toaOrSR))\n\u001b[0;32m 5431\u001b[0m \u001b[38;5;66;03m# Create composite time series\u001b[39;00m\n\u001b[1;32m-> 5432\u001b[0m ts \u001b[38;5;241m=\u001b[39m \u001b[43mcompositeTimeSeries\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 5433\u001b[0m \u001b[43m \u001b[49m\u001b[43mls\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mls\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 5434\u001b[0m \u001b[43m \u001b[49m\u001b[43mstartYear\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstartYear\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 5435\u001b[0m \u001b[43m \u001b[49m\u001b[43mendYear\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mendYear\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 5436\u001b[0m \u001b[43m \u001b[49m\u001b[43mstartJulian\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstartJulian\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 5437\u001b[0m \u001b[43m \u001b[49m\u001b[43mendJulian\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mendJulian\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 5438\u001b[0m \u001b[43m \u001b[49m\u001b[43mtimebuffer\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtimebuffer\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 5439\u001b[0m \u001b[43m \u001b[49m\u001b[43mweights\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mweights\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 5440\u001b[0m \u001b[43m \u001b[49m\u001b[43mcompositingMethod\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcompositingMethod\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 5441\u001b[0m \u001b[43m \u001b[49m\u001b[43mcompositingReducer\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcompositingReducer\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 5442\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 5444\u001b[0m \u001b[38;5;66;03m# Correct illumination\u001b[39;00m\n\u001b[0;32m 5445\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m correctIllumination:\n", + "File \u001b[1;32mc:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\geeViz\\getImagesLib.py:4315\u001b[0m, in \u001b[0;36mcompositeTimeSeries\u001b[1;34m(ls, startYear, endYear, startJulian, endJulian, timebuffer, weights, compositingMethod, compositingReducer)\u001b[0m\n\u001b[0;32m 4300\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m composite\u001b[38;5;241m.\u001b[39mset(\n\u001b[0;32m 4301\u001b[0m {\n\u001b[0;32m 4302\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124msystem:time_start\u001b[39m\u001b[38;5;124m\"\u001b[39m: ee\u001b[38;5;241m.\u001b[39mDate\u001b[38;5;241m.\u001b[39mfromYMD(year \u001b[38;5;241m+\u001b[39m yearWithMajority, \u001b[38;5;241m6\u001b[39m, \u001b[38;5;241m1\u001b[39m)\u001b[38;5;241m.\u001b[39mmillis(),\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 4311\u001b[0m }\n\u001b[0;32m 4312\u001b[0m )\n\u001b[0;32m 4314\u001b[0m \u001b[38;5;66;03m# Iterate across each year\u001b[39;00m\n\u001b[1;32m-> 4315\u001b[0m ts \u001b[38;5;241m=\u001b[39m \u001b[43m[\u001b[49m\u001b[43myearCompositeGetter\u001b[49m\u001b[43m(\u001b[49m\u001b[43myr\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43myr\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mee\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mList\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msequence\u001b[49m\u001b[43m(\u001b[49m\u001b[43mstartYear\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m+\u001b[39;49m\u001b[43m \u001b[49m\u001b[43mtimebuffer\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mendYear\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m-\u001b[39;49m\u001b[43m \u001b[49m\u001b[43mtimebuffer\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgetInfo\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m]\u001b[49m\n\u001b[0;32m 4316\u001b[0m ts \u001b[38;5;241m=\u001b[39m ee\u001b[38;5;241m.\u001b[39mImageCollection(ts)\u001b[38;5;241m.\u001b[39mset(args)\n\u001b[0;32m 4318\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m ts\n", + "File \u001b[1;32mc:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\geeViz\\getImagesLib.py:4315\u001b[0m, in \u001b[0;36m\u001b[1;34m(.0)\u001b[0m\n\u001b[0;32m 4300\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m composite\u001b[38;5;241m.\u001b[39mset(\n\u001b[0;32m 4301\u001b[0m {\n\u001b[0;32m 4302\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124msystem:time_start\u001b[39m\u001b[38;5;124m\"\u001b[39m: ee\u001b[38;5;241m.\u001b[39mDate\u001b[38;5;241m.\u001b[39mfromYMD(year \u001b[38;5;241m+\u001b[39m yearWithMajority, \u001b[38;5;241m6\u001b[39m, \u001b[38;5;241m1\u001b[39m)\u001b[38;5;241m.\u001b[39mmillis(),\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 4311\u001b[0m }\n\u001b[0;32m 4312\u001b[0m )\n\u001b[0;32m 4314\u001b[0m \u001b[38;5;66;03m# Iterate across each year\u001b[39;00m\n\u001b[1;32m-> 4315\u001b[0m ts \u001b[38;5;241m=\u001b[39m [\u001b[43myearCompositeGetter\u001b[49m\u001b[43m(\u001b[49m\u001b[43myr\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;28;01mfor\u001b[39;00m yr \u001b[38;5;129;01min\u001b[39;00m ee\u001b[38;5;241m.\u001b[39mList\u001b[38;5;241m.\u001b[39msequence(startYear \u001b[38;5;241m+\u001b[39m timebuffer, endYear \u001b[38;5;241m-\u001b[39m timebuffer)\u001b[38;5;241m.\u001b[39mgetInfo()]\n\u001b[0;32m 4316\u001b[0m ts \u001b[38;5;241m=\u001b[39m ee\u001b[38;5;241m.\u001b[39mImageCollection(ts)\u001b[38;5;241m.\u001b[39mset(args)\n\u001b[0;32m 4318\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m ts\n", + "File \u001b[1;32mc:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\geeViz\\getImagesLib.py:4290\u001b[0m, in \u001b[0;36mcompositeTimeSeries..yearCompositeGetter\u001b[1;34m(year)\u001b[0m\n\u001b[0;32m 4287\u001b[0m images \u001b[38;5;241m=\u001b[39m yearsTT\u001b[38;5;241m.\u001b[39mmap(yrGetter)\n\u001b[0;32m 4288\u001b[0m lsT \u001b[38;5;241m=\u001b[39m ee\u001b[38;5;241m.\u001b[39mImageCollection(ee\u001b[38;5;241m.\u001b[39mFeatureCollection(images)\u001b[38;5;241m.\u001b[39mflatten())\n\u001b[1;32m-> 4290\u001b[0m count \u001b[38;5;241m=\u001b[39m \u001b[43mlsT\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mselect\u001b[49m\u001b[43m(\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcount\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241m.\u001b[39mrename([\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcompositeObsCount\u001b[39m\u001b[38;5;124m\"\u001b[39m])\n\u001b[0;32m 4291\u001b[0m \u001b[38;5;66;03m# Compute median or medoid or apply reducer\u001b[39;00m\n\u001b[0;32m 4292\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m compositingReducer \u001b[38;5;241m!=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m:\n", + "\u001b[1;31mTypeError\u001b[0m: Collection.count() missing 1 required positional argument: 'property'" + ] } ], "source": [ diff --git a/docs/build/jupyter_execute/notebooks/global_land_cover_example_notebook.ipynb b/docs/build/jupyter_execute/notebooks/global_land_cover_example_notebook.ipynb index a026db2..a241cbc 100644 --- a/docs/build/jupyter_execute/notebooks/global_land_cover_example_notebook.ipynb +++ b/docs/build/jupyter_execute/notebooks/global_land_cover_example_notebook.ipynb @@ -25,8 +25,8 @@ "See the License for the specific language governing permissions and\n", "limitations under the License.\n", "\n", - "\n", - "

    \"Open

    \n" + "[![github](https://img.shields.io/badge/-see%20sources-white?logo=github&labelColor=555)](https://github.com/gee-community/geeviz/blob/master/examples/global_land_cover_example_notebook.ipynb) \n", + "[![github](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/gee-community/geeViz/blob/master/examples/global_land_cover_example_notebook.ipynb)\n" ] }, { @@ -73,7 +73,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -86,9 +86,11 @@ "Adding layer: Global Land Cover\n", "Starting webmap\n", "Using default refresh token for geeView\n", - "Local web server at: http://localhost:8001/geeView/ already serving.\n", + "Starting local web server at: http://localhost:1234/geeView/\n", + "HTTP server command: \"c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\python.exe\" -m http.server 1234\n", + "Done\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612xNtUi9PBkOxPXO6EZtAgcREOeiqv4JgC8RmfDyFnrXNjLv1FMt4kgBjuTIl1x9b4Dzo8yV8PIuSkt6193mRc31AlnJ7_MGfEXOGUP-uXND6tDO92E96LFlMQgoRhFIfXCt_dWEpCQG_StIeP3tcVwResLi2v0tW7J2UcIaCgYKAR4SARESFQHGX2MiPYaA9vv1ECsOyDAsFlUDzw0178\n" + "geeView URL: http://localhost:1234/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612wnIGOy__UqV9zq2nxuSseeoEwZdKpMuR4btK_0Ps5wJx-X8976Sf6MgA9aex2xyowAjwM-Oa6-h89U6OIT9_qWTqDtVyKHWmGtqu6YXU4-S8EshRtcCN8PupmfWl39msYSqtw_s-wajAD2uY3eFyCFhU64UtJD9GFbHMAaCgYKAY8SARESFQHGX2Mi-S01HkxUVh5Sgp6EN7h1NA0178\n" ] }, { @@ -98,7 +100,7 @@ " " + "" ] }, "metadata": {}, @@ -115,7 +117,7 @@ ], "source": [ "Map.clearMap()\n", - "\n", + "Map.port = 1234\n", "# Specify projection to use for zonal summaries and map querying\n", "# Be sure to leave one of scale or transform as None\n", "crs= 'EPSG:4326'\n", diff --git a/docs/build/jupyter_execute/notebooks/lcmsViewerExampleNotebook.ipynb b/docs/build/jupyter_execute/notebooks/lcmsViewerExampleNotebook.ipynb index 580143b..9f9388b 100644 --- a/docs/build/jupyter_execute/notebooks/lcmsViewerExampleNotebook.ipynb +++ b/docs/build/jupyter_execute/notebooks/lcmsViewerExampleNotebook.ipynb @@ -7,26 +7,27 @@ "metadata": {}, "source": [ "# LCMS Viewer Intro Notebook\n", - "> * Based on https://github.com/google/earthengine-community/blob/master/datasets/scripts/LCMS_Visualization.js\n", - "> * Copyright 2024 The Google Earth Engine Community Authors\n", + "* Based on https://github.com/google/earthengine-community/blob/master/datasets/scripts/LCMS_Visualization.js\n", + "Copyright 2024 The Google Earth Engine Community Authors\n", " \t\n", - ">> * Licensed under the Apache License, Version 2.0 (the \"License\");\n", - ">> you may not use this file except in compliance with the License.\n", - ">> You may obtain a copy of the License at\n", - ">> https://www.apache.org/licenses/LICENSE-2.0\n", - ">> Unless required by applicable law or agreed to in writing, software\n", - ">> distributed under the License is distributed on an \"AS IS\" BASIS,\n", - ">> WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n", - ">> See the License for the specific language governing permissions and\n", - ">> limitations under the License.\n", + "Licensed under the Apache License, Version 2.0 (the \"License\");\n", + "you may not use this file except in compliance with the License.\n", + "You may obtain a copy of the License at\n", + "https://www.apache.org/licenses/LICENSE-2.0\n", + "Unless required by applicable law or agreed to in writing, software\n", + "distributed under the License is distributed on an \"AS IS\" BASIS,\n", + "WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n", + "See the License for the specific language governing permissions and\n", + "limitations under the License.\n", " \t\n", - ">> * Example script for visualizing LCMS change summaries, land cover, and land use.\n", - ">> * A more in-depth visualization of LCMS products is available at: [https://apps.fs.usda.gov/lcms-viewer/index.html](https://apps.fs.usda.gov/lcms-viewer/index.html) \n", - ">> * Contact sm.fs.lcms@usda.gov with any questions or specific data requests.\n", + "* Example script for visualizing LCMS change summaries, land cover, and land use.\n", + "* A more in-depth visualization of LCMS products is available at: [https://apps.fs.usda.gov/lcms-viewer/index.html](https://apps.fs.usda.gov/lcms-viewer/index.html) \n", + "* Contact sm.fs.lcms@usda.gov with any questions or specific data requests.\n", "\n", "\n", "\n", - "

    \"Open

    " + "[![github](https://img.shields.io/badge/-see%20sources-white?logo=github&labelColor=555)](https://github.com/gee-community/geeviz/blob/master/examples/lcmsViewerExampleNotebook.ipynb) \n", + "[![github](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/gee-community/geeViz/blob/master/examples/lcmsViewerExampleNotebook.ipynb)" ] }, { @@ -457,7 +458,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 11, "id": "f7b4824e", "metadata": {}, "outputs": [ @@ -466,11 +467,12 @@ "output_type": "stream", "text": [ "Adding layer: LCMS Change Time Lapse\n", + "Setting default query date format to: YYYY\n", "Starting webmap\n", "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=rcr-gee-2&accessToken=ya29.a0AfB_byBQwMDTqBKFllZQoa1bn5jPRXI0esx1cUuwXOzvbx-m_E327RkL0jDeU8DAGBhn1DZJM0awgBoTJW5L2X4oVycGZxD9fzORXakpgzOl9S2TJ0hgeWFF1-mytXLSUiGcZoG3XVyS4H5stTvugxvOLLPfcTNPA4Z6KJsEhu-GaCgYKAUASARASFQHGX2Mi7D0qnuquWaFbHJnW_oe2qw0179\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612wkLZ5nkrRefktkInWr4bG1xoFijDRm4zKqEkOSY5SlJkshjY8c8xPH0opFivgsSvpi-zs-EMn4cghA5Q9vvm7dszHkaSY2xuMWT94ACWv_8wy0D-nhVOi29Oo5fQ5wmHrYHpnRzBiH6SF3RyS-9rr7i3VwptGM3yc1aokaCgYKAUQSARESFQHGX2MiEKkp7i2adXQeQErg-zELAw0178\n" ] }, { @@ -480,7 +482,7 @@ " " + "" ] }, "metadata": {}, diff --git a/docs/build/jupyter_execute/notebooks/mapBiomasViewerExampleNotebook.ipynb b/docs/build/jupyter_execute/notebooks/mapBiomasViewerExampleNotebook.ipynb index e84d972..7abaa57 100644 --- a/docs/build/jupyter_execute/notebooks/mapBiomasViewerExampleNotebook.ipynb +++ b/docs/build/jupyter_execute/notebooks/mapBiomasViewerExampleNotebook.ipynb @@ -25,8 +25,8 @@ "See the License for the specific language governing permissions and\n", "limitations under the License.\n", "\n", - "\n", - "

    \"Open

    " + "[![github](https://img.shields.io/badge/-see%20sources-white?logo=github&labelColor=555)](https://github.com/gee-community/geeviz/blob/master/examples/mapBiomasViewerExampleNotebook.ipynb) \n", + "[![github](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/gee-community/geeViz/blob/master/examples/mapBiomasViewerExampleNotebook.ipynb)" ] }, { @@ -40,7 +40,20 @@ "text": [ "Initializing GEE\n", "Cached project id file path: C:\\Users\\ihousman\\.config\\earthengine\\credentials.proj_id\n", - "Cached project id: lcms-292214\n", + "Cached project id: lcms-292214\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "*** Earth Engine *** Share your feedback by taking our Annual Developer Satisfaction Survey: https://google.qualtrics.com/jfe/form/SV_0JLhFqfSY1uiEaW?source=Init\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Successfully initialized\n", "geeViz package folder: c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\geeViz\n", "done\n" @@ -90,11 +103,9 @@ "Adding layer: MapBiomas LULC\n", "Starting webmap\n", "Using default refresh token for geeView\n", - "Starting local web server at: http://localhost:8001/geeView/\n", - "HTTP server command: \"c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\python.exe\" -m http.server 8001\n", - "Done\n", + "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612y8ZlxJh5tseR6SiuPocMyKlrXzdf5Qzq6KskwfbOwHa9ww08rwL0Q9wsBAwJHaujzpYpbWXBllmZn3SqjX3NAcrHHXy__zLsaAhNNgwiJecXOI9aURNb1ecAngWo_H1O6r5JnMs0dNrcVvPVHtPO9iLCNSpNwoxLwFnk8aCgYKAX8SARESFQHGX2Midtno9Bis8gZowS0Gh0zjmw0178\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZBoV6RTt-kTHktaitp6cLCRopannvKr9B7F9QimHl9HpH7bQSlKU53sXETcKcw5F5qayQER5a-NS3bhiUocGlPCAoK0T4OH6kON4zdkFLv-ZFMB3-S0Hl34cOsGuljb25SUEJoSZ09ieUHPNmSPqKCvGV0V8dVSB4myMtwaCgYKATsSARESFQHGX2MiBg28W2WOQErk15VfYCK2tQ0178&accessTokenCreationTime=1732571109268\n" ] }, { @@ -104,7 +115,7 @@ " " + "" ] }, "metadata": {}, diff --git a/docs/source/notebooks/CCDCVizNotebook.ipynb b/docs/source/notebooks/CCDCVizNotebook.ipynb index 46815e8..b066aac 100644 --- a/docs/source/notebooks/CCDCVizNotebook.ipynb +++ b/docs/source/notebooks/CCDCVizNotebook.ipynb @@ -29,7 +29,8 @@ " See the License for the specific language governing permissions and\n", " limitations under the License.\n", "\n", - "

    \"Open

    \n" + "[![github](https://img.shields.io/badge/-see%20sources-white?logo=github&labelColor=555)](https://github.com/gee-community/geeviz/blob/master/examples/CCDCVizNotebook.ipynb) \n", + "[![github](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/gee-community/geeViz/blob/master/examples/CCDCVizNotebook.ipynb)" ] }, { diff --git a/docs/source/notebooks/areaChart_examples.ipynb b/docs/source/notebooks/areaChart_examples.ipynb index 4406b86..3e788ed 100644 --- a/docs/source/notebooks/areaChart_examples.ipynb +++ b/docs/source/notebooks/areaChart_examples.ipynb @@ -26,24 +26,19 @@ "See the License for the specific language governing permissions and\n", "limitations under the License.\n", "\n", - "\n", - "

    \"Open

    \n" + "[![github](https://img.shields.io/badge/-see%20sources-white?logo=github&labelColor=555)](https://github.com/gee-community/geeviz/blob/master/examples/areaChart_examples.ipynb) \n", + "[![github](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/gee-community/geeViz/blob/master/examples/areaChart_examples.ipynb)" ] }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Initializing GEE\n", - "Cached project id file path: C:\\Users\\ihousman\\.config\\earthengine\\credentials.proj_id\n", - "Cached project id: lcms-292214\n", - "Successfully initialized\n", - "geeViz package folder: c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\geeViz\n", "done\n" ] } @@ -77,7 +72,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, "metadata": {}, "outputs": [ { @@ -560,6 +555,164 @@ }, "metadata": {}, "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Shortened NLCD class names:\n", + "landcover\n" + ] + }, + { + "data": { + "text/html": [ + "
    \n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    ValuesNamesColors
    011Open water466b9f
    112Perennial ice/snowd1def8
    221Developed, open spacedec5c5
    322Developed, low intensityd99282
    423Developed, medium intensityeb0000
    524Developed high intensityab0000
    631Barren land (rock/sand/clay)b3ac9f
    741Deciduous forest68ab5f
    842Evergreen forest1c5f2c
    943Mixed forestb5c58f
    1052Shrub/scrubccb879
    1171Grassland/herbaceousdfdfc2
    1281Pasture/haydcd939
    1382Cultivated cropsab6c28
    1490Woody wetlandsb8d9eb
    1595Emergent herbaceous wetlands6c9fb8
    \n", + "
    " + ], + "text/plain": [ + " Values Names Colors\n", + "0 11 Open water 466b9f\n", + "1 12 Perennial ice/snow d1def8\n", + "2 21 Developed, open space dec5c5\n", + "3 22 Developed, low intensity d99282\n", + "4 23 Developed, medium intensity eb0000\n", + "5 24 Developed high intensity ab0000\n", + "6 31 Barren land (rock/sand/clay) b3ac9f\n", + "7 41 Deciduous forest 68ab5f\n", + "8 42 Evergreen forest 1c5f2c\n", + "9 43 Mixed forest b5c58f\n", + "10 52 Shrub/scrub ccb879\n", + "11 71 Grassland/herbaceous dfdfc2\n", + "12 81 Pasture/hay dcd939\n", + "13 82 Cultivated crops ab6c28\n", + "14 90 Woody wetlands b8d9eb\n", + "15 95 Emergent herbaceous wetlands 6c9fb8" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ @@ -582,11 +735,23 @@ "lcms_props = lcms.first().toDictionary().getInfo()\n", "nlcd_props = nlcd.first().toDictionary().getInfo()\n", "\n", + "\n", "lcms_thematic_bandNames = lcms.select(['Change','Land_Cover','Land_Use']).first().bandNames().getInfo()\n", "\n", "nlcd_landcover_bandNames = ['landcover']\n", + "\n", "get_props_dataFrames(lcms_props,lcms_thematic_bandNames)\n", - "get_props_dataFrames(nlcd_props,nlcd_landcover_bandNames)" + "get_props_dataFrames(nlcd_props,nlcd_landcover_bandNames)\n", + "\n", + "\n", + "# Shorten NLCD class names for later use\n", + "nlcd_class_names_key = f'{nlcd_landcover_bandNames[0]}_class_names'\n", + "nlcd_class_names_shortened = [nm.split(':')[0] for nm in nlcd_props[nlcd_class_names_key]]\n", + "nlcd_props_shortened_names = nlcd_props\n", + "nlcd_props_shortened_names[nlcd_class_names_key] = nlcd_class_names_shortened\n", + "\n", + "print('Shortened NLCD class names:')\n", + "get_props_dataFrames(nlcd_props_shortened_names,nlcd_landcover_bandNames)" ] }, { @@ -606,7 +771,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -616,32 +781,8 @@ "Adding layer: LCMS Land Cover\n", "Adding layer: NLCD Land Cover\n", "Starting webmap\n", - "Using default refresh token for geeView\n", - "Local web server at: http://localhost:8001/geeView/ already serving.\n", - "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZCy74lFqH2vRSdWO9AxdxhsWLoXMyaXKztQ6KCGiMsZtDbVRqjjy3sVc_QHU5SYzbIoRtbDGoSYdacixwNzYHFisGaIYahCPHGrVTl_DyFOMtEgR6jIPu9eyBSuapjLr2z8eQ24tJrFO9W4_1yUNBIoOIPyfp-M1MTIQcsaCgYKAXgSARESFQHGX2MiiJf-wwurrDTgOcGV0IBG3g0178\n" + "Using default refresh token for geeView\n" ] - }, - { - "data": { - "text/html": [ - "\n", - " \n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" } ], "source": [ @@ -674,7 +815,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -688,7 +829,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZAPJGhuHoXMi1_W2i7it9dBch7wHfEjM6luJgaT0hfxJUKzbbdZ2_w4uoF_FPptBoPWxaP2L6gf16U9kMJnNusrnWOLiIi8ywHi7k1FP1v5vwI2Eju0GUCV1xlO5eYFGYuUGNEhEG3NwtVRCTUcHd1ROQkJ5rfx6XdNzUoaCgYKAbsSARESFQHGX2MiUTznMNdubA5F5YD9d4aV_Q0178\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZBRE9mjI7Tbvn12JUdNHWBcQvnRwFG-hP61lUO5NJ1i3hUF5MWklT1YsQ2O8JTPO_c9dknJ4tLo2b1iWUDX3YpRH9D_GxcBzfpEkOKxbtzwZD_WgsZ2X5yrxgRqXDSdCClmIPTT7vOM7PivC2CznkBAOmJWgtu42xYKMiAaCgYKATwSARESFQHGX2MiL_SKbyR4o1MbYfhrP8JMSw0178&accessTokenCreationTime=1732072086594\n" ] }, { @@ -698,7 +839,7 @@ " " + "" ] }, "metadata": {}, @@ -740,7 +881,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -754,7 +895,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZDaLFoiiGYiKvmGmH1tBTNzNtGwr5C2QA0aCSuaV7mt_yuBytef5AZ2wU8H3IxgBZOA0Q2hkK33PTAxOp5vZ8Dvr912cdV3igxxnPLW76O1mfM0Viw_6BAB9q1ImB6BZEoOY5Cvwj2zNxC_Emn6PUmsWmcFITd5YQynpyEaCgYKAcUSARESFQHGX2MikAxeure5i3ICBvmn8fhBew0178\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZCo6B7_61baBesuftX5imkCdbgjQ2cDhjfWwwxSln0lW_f7XfITgdSiXVr6J7_lAz_6b7EQ-Xe5TCpBXK4RUjicQGwh4rMOMReEYDZDmspR_UGbQyOcAv_d-F5vjiBfmKeFx-2ZO5E0GXkaW1-vaCjXC5uORbQQR6X_rmQaCgYKAVwSARESFQHGX2MitF33sKGsJctQg4HvPM9Rsg0178&accessTokenCreationTime=1732072108233\n" ] }, { @@ -764,7 +905,7 @@ " " + "" ] }, "metadata": {}, @@ -805,12 +946,12 @@ "\n", "* Note that the dictionary of parameters is more or less the same as what you would put in the `\"areaChartParams\"` if you were to use the `Map.addLayer` method. \n", "\n", - "* Note that while multi thematic band image collections can be charted in a single line chart, sankey charts can only support one band per chart. If a multi thematic band image collection is given with `\"sankey\":True`, separate sankey charts will be created for each band." + "* Note that while multi thematic band image collections can be charted in a single line chart, sankey charts can only support one band per chart. If a multi thematic band image collection is given with `\"sankey\":True` (as is the case in this example), separate sankey charts will be created for each band." ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -824,7 +965,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZA8sI8DEEcCRJIs9FfoFoDJPukpaeamD89f0q2qh9SM_i0-7OSQruSG8jXHkvH4_UzUyD1pOZ-cwZZlwFHy8twKhstWc0Oo5orG_TRwL1wC6xEHv737Xro4b7CykJuiBR168Ej_uWJ5JPGwCN1NlV6Qtt-wfYXBOusJEpUaCgYKAdUSARESFQHGX2MiyzjFyNwf2q3kecg_F-rFvg0178\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZCjAoKLilGLZF5wIObir1p6XAIWJM6jMrodG8zcJg1jJ3GzF-yy8r7fbwHqpEcYQ5BC1P_unmAqFIY7hIVAU3CpkOzxnGMZkXx-ff3VoP2Tc2U4xdc3bq4Z9kKrw1dXI-iVO0V2p-DBHnOb5iUzgsp93zCB3IoXLA7IkTIaCgYKASMSARESFQHGX2MiCMKkLZs77Opz9_0uA6Jqig0178&accessTokenCreationTime=1732168152111\n" ] }, { @@ -834,7 +975,7 @@ " " + "" ] }, "metadata": {}, @@ -870,13 +1011,13 @@ "source": [ "## Charting Non-Thematic Data\n", "\n", - "* You can chart continuous data as well. By default, a `ee.Reducer.mean()` will be used. You can use any reducer that returns a single value per image-band (e.g. `ee.Reducer.min()`, `ee.Reducer.max()`, `ee.Reducer.stdDev()` and not `ee.Reducer.percentile([0,50,100])`). \n", + "* You can chart continuous data as well. By default, a `ee.Reducer.mean()` will be used. You can use any reducer that returns a single value per image-band (e.g. `ee.Reducer.min()`, `ee.Reducer.max()`, `ee.Reducer.stdDev()`, `ee.Reducer.mode()`, and not `ee.Reducer.percentile([0,50,100])`). \n", "\n", "* You can specify this using `\"areaChartParams\":{\"reducer\":ee.Reducer.mean()}`\n", "\n", "* Optionally, you can provide a color palette to be used. Each band will be assigned to a color in the order given\n", "\n", - "* Notice in the example, the reducer for what is shown on the map is different from the zonal summary reducer. In this example, on the map the standard deviation of the probability is shown, while the average over the area is shown in the chart. " + "* Notice in the example, the reducer for what is shown on the map is different from the zonal summary reducer. In this example, on the map the standard deviation of the probability is shown to highlight likely change, while the average over the area is shown in the chart since that is a more appropriate representation of probability over an area. " ] }, { @@ -893,7 +1034,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612zyBFmQok8DtUEIp6qTRiXotoUPt8cGbFU4lo03AGaFZCas1Rkx2xDfBF6PPbwyOINwzoURdXUiBcbgO9ytGZBJcvHJjScj3njRFMjUo2HWVeMjhno9wv6KVi0iRh8ZK1nwUM6CBqM9zZSImy4e7NmgDqKYZrEgs5oaCgYKAfQSARESFQHGX2MiejYkUh8WfWmkrq89M0l9Nw0174\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZDC-kEJjZ7ANFvwoBVoe0PN6iyoJgDoKDC45AZod0eypEh2wmKRloLs4mY0cK4UTwGQGzF5lAPoAfQfF1B-0YjmglkLQmwOAqofFJtdBfjLRX5B61yrowTSG_D0u83cds1oShCZRR18Wapnif7vIHzAJZk8Zm2USy6000oaCgYKAdMSARESFQHGX2Mij0Uo4T2Bl89g0qog8XH6Sw0178&accessTokenCreationTime=1732168277196\n" ] }, { @@ -903,7 +1044,7 @@ " " + "" ] }, "metadata": {}, @@ -937,13 +1078,13 @@ "\n", "* You can also chart images\n", "* It will behave in a similar fashion to imageCollections, but will show a bar chart\n", - "\n", + "* Placing names for bar charts can be challenging if the names are very long. geeViz will automatically change the bar chart to be a horizontal bar chart if long names are detected. This still does not ensure the bar charts are readable (as is the case in this example). Shortening class names is the easiest method to address this issue (shown by splitting the full NLCD landcover name with `:` and take the first part earlier in this notebook).\n", "* If using `\"autoViz\":True`, be sure to copy the `_class_` properties back in\n" ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -954,11 +1095,12 @@ "Adding layer: LCMS Land Cover Mode\n", "Adding layer: NLCD Land Cover\n", "Adding layer: NLCD Land Cover Mode\n", + "Adding layer: NLCD Land Cover Mode Shortened Names\n", "Starting webmap\n", "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612zola-FBl5vKB_hlCop1HfVJDqwFITDhbElU4cFuh0EAS0vneY95qkqt4EnuQsh5Ai7RIzWPvztjtaaESDRhZwMRM-096h5-EbbMtN_Fh1tXfwbqbJpAvVcHnoBmjHwIUr3maRrmOZgIKdBj07FytPEc548YQtVRT1BwNAaCgYKARwSARESFQHGX2MiVR4GgV1QjHvlavabzx0A1w0178\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZAYSRUVZEF7tD-uK6Zn-LCX2EMMf-R2VGKJu9WdAnWqeFNsxq2H9j8atAF7Cgu_1ISo0BaCA3RhHvOuKBVw6YK_DTXlSllbYjTie86dZHcp8w7QwXmPcwuaDieNGZVtAUDv3RV6dQ5ZIodg3F_bbcbIMN8HqXAryuqDPwgaCgYKAesSARESFQHGX2MiT8b83hyJMzIqna_6JYRXdQ0178&accessTokenCreationTime=1732169429393\n" ] }, { @@ -968,7 +1110,7 @@ " " + "" ] }, "metadata": {}, @@ -993,6 +1135,10 @@ "Map.addLayer(nlcd.select(['landcover']),{'autoViz':True,'canAreaChart':True},'NLCD Land Cover')\n", "Map.addLayer(nlcd.select(['landcover']).mode().set(nlcd.first().toDictionary()),{'autoViz':True,'canAreaChart':True},'NLCD Land Cover Mode')\n", "\n", + "# Use the shortened class names to clean up chart\n", + "Map.addLayer(nlcd.select(['landcover']).mode().set(nlcd_props_shortened_names),{'autoViz':True,'canAreaChart':True},'NLCD Land Cover Mode Shortened Names')\n", + "\n", + "\n", "\n", "\n", "\n", @@ -1011,7 +1157,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 10, "metadata": {}, "outputs": [ { @@ -1023,7 +1169,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612xsvPX5BWXka2IKux0xyyC3pEN5X_bCjc9Abyt_QnoMxh0Tt3UKrIH4ZmqL7dsll6n3Zh4j55OApJLdFSFgC6zgz59th25UPnIDG-dUbvscsngSoX5Dd7kyf6cm1RAzRxnkG0KCwmtpKTWqMohMFz8sADGkdmojFV0aCgYKAVUSARESFQHGX2Mi7EieXAoH_HzjzIAyP0KgYQ0174\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZB7X2qwuIOOEJXfmqKh4BlhENGTSj4_Xp7uL99qXMtkt7l1RdiAFuQ-jTN5Ou_2RTBOZA8k247QT8eAnc3ED6ZCf4C8NpZrsG070oER4EapnJsM2mAU33AayTBsxMbfWQEwW-zz9TBzm7LllyrVjOTEdpxzQloFUGOgQc8aCgYKAZISARESFQHGX2MiBqtgdGfy6Z72iUD04QOyfw0178&accessTokenCreationTime=1732169453056\n" ] }, { @@ -1033,7 +1179,7 @@ " " + "" ] }, "metadata": {}, @@ -1086,7 +1232,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 11, "metadata": {}, "outputs": [ { @@ -1098,7 +1244,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612wnYtt-QFEIFqJvxv4tUzZcYEWRZkAv1oqt1OnIrtgzB7lI8Fiv-gDBo5Jm7kwppzNzx5KL8XRoYpN2aMTVzbQYWHUn6OD9yc6u6-3FCw_Ykc26-SFspZma_sjs-0V3OKWqFZsx0KCiuwz5cskNB83el1D24oGm2ZMaCgYKARQSARESFQHGX2Miyj7dkMOvk05oVvAXnq9xBw0174\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZDgfsjQNYd5rrgKWcv3pcdtv1txAnIJB2FSclFLx0D3XVfXW_4f9nzPNOkWNGajJehlLbpshY5r0DKJkOAISTKp7KzzqPEEcD_7ickDf6gCwaZeLWYZzrnhv2ipteslzEO2FhDzVG_S-1Clyr-ZUdKk_ePFBjX-90WzNyMaCgYKATQSARESFQHGX2Mix24C9Alq9W4HMEp1x9x6UQ0178&accessTokenCreationTime=1732169481988\n" ] }, { @@ -1108,7 +1254,7 @@ " " + "" ] }, "metadata": {}, @@ -1152,13 +1298,13 @@ "\n", "* You can chart thematic datasets that lack values, names, and palette properties by specifying the `ee.Reducer.frequencyHistogram()` as the reducer\n", "\n", - "* This is not the best method however\n", + "* This is not the best method however. Charts will lack descriptive class names and colors\n", "\n" ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 12, "metadata": {}, "outputs": [ { @@ -1170,7 +1316,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612wJKTBG90sE7YjOsGwKAT2Io1SgHDHujjFffA7UVFDdzD6ieoa1LRPSj3JE0Rr_EbjdhU-m_tOgjjzBG9_JdmjzTH0wV35j206vk4iET5lr4Ij7hzaXnNi6UsXr2Nx24JjWdXdVCVekeJ4uxVWX_Frrk2xx7k1ALut5UBUaCgYKAQkSARESFQHGX2MihFCE1dDZKNyehV8R3vhoxQ0178\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZDmawXDukWmO9oLKizTo6w7P9NlqXfKoaSIpzcAnlYGfgLMuBe34OfhIdC4T-bGS2FiEQpv42PPAgg3F1S8L5tTEZbWNnwCIheDSLkFekhdRunGkABnR_qx-2Z8J9NSmTr3pLc625m_vRcRl5c022VRG-mlVolIdq9qPqgaCgYKAV0SARESFQHGX2MiSeg0dJ97aOa4_Ib-smh2Ng0178&accessTokenCreationTime=1732169560625\n" ] }, { @@ -1180,7 +1326,7 @@ " " + "" ] }, "metadata": {}, @@ -1222,7 +1368,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 13, "metadata": {}, "outputs": [ { @@ -1234,7 +1380,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612wadT88_g9U59GK--fr1PF-tM6S-z-5cRPTW7qhCoO8BaezIKVSxtIfsaz2_tQt2DaSH5xKD2u-AKbY5vRznLUC92QBoKLerlwwL7OapgmO2fIcc8IjWpW3gDMMfU3szuY6ShHWj7HiFGAw_ARd_T4970y6zGHieyeL9N4aCgYKAYwSARESFQHGX2MiXVVic5V0ZDr0FPFtD2QLeA0178\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZBE3rUf41t3ynct3TmFS9goflI3KxzwcFtJSPVFhjP-3bciOy90PgBO4ljJoWWQbcjYKjicRJGLxNds9V5CJvKnYv2uM2iU1aOgKxZ36FvToD5ZzOW7ddz9-pIWwDg8u-fIcr3PD3sLW7fe3E6GQFk01PWS4tmTmhTaAl8aCgYKAdASARESFQHGX2MitHZij8OK-HBPFllpNUWadg0178&accessTokenCreationTime=1732169652439\n" ] }, { @@ -1244,7 +1390,7 @@ " " + "" ] }, "metadata": {}, @@ -1295,39 +1441,28 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 14, "metadata": {}, "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Adding layer: LCMS Change Comparison 2010\n", - "Adding layer: LCMS Land Cover Comparison 2010\n", - "Adding layer: LCMS Land Use Comparison 2010\n", - "Starting webmap\n", - "Using default refresh token for geeView\n" - ] - }, { "name": "stderr", "output_type": "stream", "text": [ - "c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\ee\\deprecation.py:202: DeprecationWarning: \n", + "c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\ee\\deprecation.py:207: DeprecationWarning: \n", "\n", "Attention required for USFS/GTAC/LCMS/v2020-5! You are using a deprecated asset.\n", "To ensure continued functionality, please update it.\n", "Learn more: https://developers.google.com/earth-engine/datasets/catalog/USFS_GTAC_LCMS_v2020-5\n", "\n", " warnings.warn(warning, category=DeprecationWarning)\n", - "c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\ee\\deprecation.py:202: DeprecationWarning: \n", + "c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\ee\\deprecation.py:207: DeprecationWarning: \n", "\n", "Attention required for USFS/GTAC/LCMS/v2021-7! You are using a deprecated asset.\n", "To ensure continued functionality, please update it.\n", "Learn more: https://developers.google.com/earth-engine/datasets/catalog/USFS_GTAC_LCMS_v2021-7\n", "\n", " warnings.warn(warning, category=DeprecationWarning)\n", - "c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\ee\\deprecation.py:202: DeprecationWarning: \n", + "c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\ee\\deprecation.py:207: DeprecationWarning: \n", "\n", "Attention required for USFS/GTAC/LCMS/v2022-8! You are using a deprecated asset.\n", "To ensure continued functionality, please update it.\n", @@ -1340,9 +1475,14 @@ "name": "stdout", "output_type": "stream", "text": [ + "Adding layer: LCMS Change Comparison 2010\n", + "Adding layer: LCMS Land Cover Comparison 2010\n", + "Adding layer: LCMS Land Use Comparison 2010\n", + "Starting webmap\n", + "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612wPtKk_ePf9TnMwvoRhqeBo8KprojyyW3GVeKIwAu2XdlfaUTUzws7eZQUrIGyZ4wCS6wIjpw7sUV-eBsoj2z1SSl38d4RhPIEbaN6ZOP8hWAxv07-RMGdJX0o8U4mKiKp92DhI6wg9Lmfz20gZ6wRwHURCbZy2lEsaCgYKAaYSARESFQHGX2Mir_MkV5PgClO-NZQmHUOFbA0174\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZD6JxbWi078FtM79_BeIKn2hGPtQvOfSbTkG0tNDgKyzDTdA43Ddjf-zHPe9n3L4jdSwTrA3YO5vD_gwS680uHwVbMJ48YU4zGg4TDd0Uvwew3z_qq8I9GRK9cvh1YmiBv642eY5BhQqpve_ns98U93p5l8ztQS0sAvbggaCgYKARsSARESFQHGX2MiWzcQ5PhrEcBC3wtjWUcqkg0178&accessTokenCreationTime=1732169696345\n" ] }, { @@ -1352,7 +1492,7 @@ " " + "" ] }, "metadata": {}, @@ -1418,7 +1558,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 15, "metadata": {}, "outputs": [ { @@ -1433,7 +1573,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612wgw-djuuUntepLYybAxnaIqxMmFwimfSO5_f-ogEbOUoilTLwc6OseVxRi5qICNp7ekGXx89YwL_ssdQMnarafW5IePMFIBfBALE0QwlQyp58F6ciJeqf04GGg49Id-7qFKwx-m8qAzQRmsEUBQS9y_ZwgbhDtyh0aCgYKAdcSARESFQHGX2MiGY-MWDrEyrXenwTUktiPuw0174\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZBvafOCftFThE78i2zwWG34pYXzIRloRQ-qwsZ6O_Li22nUDmhYuvjQ252SF3npQhNR-Rjg4lInCL3TDlD3xvKgaHASqIX3MUSNFrXTlJZYkQ7tnPHY_NIFuoOAwgElS0AAvLVSnXifuaHQUgKKh77A04sLI_imBP_1yeUaCgYKAe8SARESFQHGX2Mi9nlpC9xjpq7pAmV7xBP8zg0178&accessTokenCreationTime=1732169830804\n" ] }, { @@ -1443,7 +1583,7 @@ " " + "" ] }, "metadata": {}, diff --git a/docs/source/notebooks/dynamicWorldExampleNotebook.ipynb b/docs/source/notebooks/dynamicWorldExampleNotebook.ipynb index a529d67..b944968 100644 --- a/docs/source/notebooks/dynamicWorldExampleNotebook.ipynb +++ b/docs/source/notebooks/dynamicWorldExampleNotebook.ipynb @@ -26,8 +26,8 @@ "See the License for the specific language governing permissions and\n", "limitations under the License.\n", "\n", - "\n", - "

    \"Open

    " + "[![github](https://img.shields.io/badge/-see%20sources-white?logo=github&labelColor=555)](https://github.com/gee-community/geeviz/blob/master/examples/dynamicWorldExampleNotebook.ipynb) \n", + "[![github](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/gee-community/geeViz/blob/master/examples/dynamicWorldExampleNotebook.ipynb)" ] }, { diff --git a/docs/source/notebooks/gee2PandasExample.ipynb b/docs/source/notebooks/gee2PandasExample.ipynb index 5c83996..0de341d 100644 --- a/docs/source/notebooks/gee2PandasExample.ipynb +++ b/docs/source/notebooks/gee2PandasExample.ipynb @@ -26,8 +26,8 @@ "* Use this module to go between local data and GEE for more general data science/statistical analysis\n", "\n", "\n", - "\n", - "

    \"Open

    " + "[![github](https://img.shields.io/badge/-see%20sources-white?logo=github&labelColor=555)](https://github.com/gee-community/geeviz/blob/master/examples/gee2PandasExample.ipynb) \n", + "[![github](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/gee-community/geeViz/blob/master/examples/gee2PandasExample.ipynb)" ] }, { @@ -44,11 +44,23 @@ "text": [ "Initializing GEE\n", "Cached project id file path: C:\\Users\\ihousman\\.config\\earthengine\\credentials.proj_id\n", - "Cached project id: rcr-gee-2\n", + "Cached project id: lcms-292214\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "*** Earth Engine *** Share your feedback by taking our Annual Developer Satisfaction Survey: https://google.qualtrics.com/jfe/form/SV_0JLhFqfSY1uiEaW?source=Init\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Successfully initialized\n", "geeViz package folder: c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\geeViz\n", "PyTables is not installed. No support for HDF output.\n", - "SQLalchemy is not installed. No support for SQL output.\n", "done\n" ] } @@ -89,13 +101,10 @@ "Get Processed Sentinel2: \n", "Start date: Jun 09 2021 , End date: Jul 08 2024\n", "Using S2 Collection: COPERNICUS/S2_HARMONIZED\n", - "Joining pre-computed cloud probabilities from: COPERNICUS/S2_CLOUD_PROBABILITY\n", + "Joining pre-computed cloudScore+ from: GOOGLE/CLOUD_SCORE_PLUS/V1/S2_HARMONIZED\n", "Setting to aggregate instead of resample \n", "Converting S2 data to daily mosaics\n", - "Applying Cloud Probability\n", - "Applying TDOM\n", - "Computing irMean for TDOM\n", - "Computing irStdDev for TDOM\n", + "Applying cloudScore+\n", "Adding layer: S2 Median 2023\n", "Adding layer: S2 Water 2023\n", "Adding layer: Water_Transition_2022-2023\n", @@ -103,11 +112,12 @@ "Adding layer: S2 Water 2022\n", "Adding layer: Study Area\n", "Starting webmap\n", - "Using default refresh token for geeView: C:\\Users\\ihousman/.config/earthengine/credentials\n", + "Using default refresh token for geeView\n", "Starting local web server at: http://localhost:1233/geeView/\n", "HTTP server command: \"c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\python.exe\" -m http.server 1233\n", "Done\n", - "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n" + "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", + "geeView URL: http://localhost:1233/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZC7rbMaygDhJcMEQ0u5_tqi4RCJz5duLi9eQYcy-Zzhz3T9dcmPOnEuD0NwEy27M9Wnr2GSc0ECMwXaMemmVP2iroa_MGOFvl4Jp5RU4pA_zrwQ4C3d28ntB0uOzARn-lg_onfuT40HjsqVZRaofbnYbto04qT8lqbp4P0aCgYKAQ0SARESFQHGX2MiU_0uj5D6U3SDTAv6wwgP7A0178&accessTokenCreationTime=1732565631149\n" ] }, { @@ -117,7 +127,7 @@ " " + "" ] }, "metadata": {}, @@ -170,7 +180,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 3, "id": "8daf03c9", "metadata": {}, "outputs": [ @@ -181,9 +191,10 @@ "Adding layer: Sample\n", "/tmp\\gee2Pandas_test_csv.csv already exists\n", "Starting webmap\n", - "Using default refresh token for geeView: C:\\Users\\ihousman/.config/earthengine/credentials\n", + "Using default refresh token for geeView\n", "Local web server at: http://localhost:1233/geeView/ already serving.\n", - "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n" + "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", + "geeView URL: http://localhost:1233/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZA_pdYBT8Da3RV0VuNIO82RcHCoJBkvgRzVPbMvNB7-Nymd8Z0PytK-lQbvzobDzcQ0mw8Gic89IlORedmyBcpl7W-V6L0lPtE-sX94emQUnKtxAr5IkIFinQiHPrJscFcVfvQ9jlO9DOwcmFTGAnWYk7QK6wcDXohDsIMaCgYKAYcSARESFQHGX2MiRPp-2OrqyFbvRcc9_zvJlg0178&accessTokenCreationTime=1732565635250\n" ] }, { @@ -193,7 +204,7 @@ " " + "" ] }, "metadata": {}, @@ -228,7 +239,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 4, "id": "e5ee4c87", "metadata": {}, "outputs": [ @@ -273,7 +284,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 9, "id": "a59a6afa", "metadata": {}, "outputs": [ @@ -283,9 +294,10 @@ "text": [ "Adding layer: Test Sample\n", "Starting webmap\n", - "Using default refresh token for geeView: C:\\Users\\ihousman/.config/earthengine/credentials\n", + "Using default refresh token for geeView\n", "Local web server at: http://localhost:1233/geeView/ already serving.\n", - "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n" + "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", + "geeView URL: http://localhost:1233/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZDuAuuThPvzPHAPlCNFGvzYQShuqqqN0i2vdB4dxVkn1LYXnb42sCaCBoboFD4-SYtRTg1kkmK-aWFKssUhmA-E9PQyXyR4Za3sVJnaEalIHtgYvLXkQ1DOYmFybz6cEMDntPVHLX30KagvUS0Kw0-aPPMUneuEG2gwJz0aCgYKATMSARESFQHGX2MiuDZhAcXWgIBJLVWdu6OINQ0178&accessTokenCreationTime=1732565803239\n" ] }, { @@ -295,7 +307,7 @@ " " + "" ] }, "metadata": {}, @@ -311,12 +323,10 @@ } ], "source": [ - "from importlib import reload\n", - "reload(g2p)\n", "# Now go from a local csv to a GEE featureCollection\n", "fc = g2p.tableToFeatureCollection(out_csv)\n", "Map.clearMap()\n", - "Map.addLayer(fc.map(lambda f:ee.Feature(f).buffer(10).bounds()),{},'Test Sample')\n", + "Map.addLayer(fc,{'styleParams':{'pointSize':2,'color':'0DF'}},'Test Sample')\n", "Map.turnOnInspector()\n", "Map.centerObject(fc)\n", "Map.view()" diff --git a/docs/source/notebooks/geeViewExampleNotebook.ipynb b/docs/source/notebooks/geeViewExampleNotebook.ipynb index 68b17f3..787e319 100644 --- a/docs/source/notebooks/geeViewExampleNotebook.ipynb +++ b/docs/source/notebooks/geeViewExampleNotebook.ipynb @@ -29,9 +29,8 @@ "See the License for the specific language governing permissions and\n", "limitations under the License.\n", "\n", - "\n", - "\n", - "

    \"Open

    \n", + "[![github](https://img.shields.io/badge/-see%20sources-white?logo=github&labelColor=555)](https://github.com/gee-community/geeviz/blob/master/examples/geeViewExampleNotebook.ipynb) \n", + "[![github](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/gee-community/geeViz/blob/master/examples/geeViewExampleNotebook.ipynb)\n", " " ] }, @@ -55,7 +54,20 @@ "text": [ "Initializing GEE\n", "Cached project id file path: C:\\Users\\ihousman\\.config\\earthengine\\credentials.proj_id\n", - "Cached project id: lcms-292214\n", + "Cached project id: lcms-292214\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "*** Earth Engine *** Share your feedback by taking our Annual Developer Satisfaction Survey: https://google.qualtrics.com/jfe/form/SV_0JLhFqfSY1uiEaW?source=Init\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Successfully initialized\n", "geeViz package folder: c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\geeViz\n", "done\n" @@ -97,11 +109,9 @@ "Adding layer: NLCD 2011 Landcover/Landuse\n", "Starting webmap\n", "Using default refresh token for geeView\n", - "Starting local web server at: http://localhost:8001/geeView/\n", - "HTTP server command: \"c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\python.exe\" -m http.server 8001\n", - "Done\n", + "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612xc9-pB9qAOEeavEwVZ1nkSwRtdLU5dMd8wyk1oOxGnL_QIQgk6EDhi2YDRdNmU3RI80bbYYBKFpXzZeoydg_BdMUmCHSVqlEF_U5Eyf_SnA3qr_O0qD96qBkRa9c0x_Jmw6TVI3ywf2H-x8cUSwCTpniqMNZFU5A7f8LMaCgYKAf8SARESFQHGX2MidqD7XysS4IRxaINI6W30BQ0178\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZC9ZMk9nE3alPEasRZHHuiqY9ioimY7gcSWjbR7C4CJ9eiKSJyGhiiF7OkJTdtJ6D6PcRWSTX1ZPnE1SgQsKdehpNOEMaFHJjpe-AG8DAKaqK2rFhx_8H_r47M2Sl5Sux95uFcCytus3cGehAIgJ0305osLh_eBpjAVq9waCgYKAXQSARESFQHGX2MiN1vvcKYW4oN6bshp7Owqdw0178&accessTokenCreationTime=1732564901727\n" ] }, { @@ -111,7 +121,7 @@ " " + "" ] }, "metadata": {}, @@ -159,7 +169,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 7, "id": "2670e5e4", "metadata": { "scrolled": false @@ -175,7 +185,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612wEB91PRlJ0ADBpVkUrAZMQd3WCbxcuhHMod3GOCG_5j94LaGpnzrrBY5RXg_n1FWPl52nQsscK_3wTnIAL-9euEDaGd72R1TDH-G0sDgrK-vutq1scvD0Xfm0icX_qRuVhU2l3T-OCwOjcZ5f6dOZXwBFUxSdG1PR1Ww4aCgYKAW8SARESFQHGX2Miy70Q2fyYSBm1U3jh1-kpNw0178\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZCdWbAp2YEv9OinAUuSbK8mjozVuITQXsLXww9NR_eSxgtWs-oCgfSQ0if6cygVUJ5K-9RKSMKUEhLcfmHUcsBrk4Sp73jOtg5ufkMA3rDwOeq-kfBO7ZzJ9iYtg8YO9CMPsGrJGsqfioRzr8vMjJlpl8hy3YvvMkrF-AwaCgYKAUMSARESFQHGX2MiaTjARdF2H_Ms2mb2DFeMHA0178&accessTokenCreationTime=1732565064272\n" ] }, { @@ -185,7 +195,7 @@ " " + "" ] }, "metadata": {}, @@ -207,11 +217,13 @@ "nlcd = nlcd.filter(ee.Filter.calendarRange(2000,2020,'year'))\n", "nlcd = nlcd.map(lambda img: img.set('bns',img.bandNames()))\n", "nlcd = nlcd.filter(ee.Filter.listContains('bns','landcover')).select(['landcover'])\n", - "Map.addLayer(nlcd.sort('system:time_start'),{'autoViz':True},'NLCD Landcover/Landuse Time Series',True)\n", + "\n", + "# Can optionally turn off class numbers in legend by setting 'includeClassValues':False,\n", + "Map.addLayer(nlcd.sort('system:time_start'),{'autoViz':True,'includeClassValues':False},'NLCD Landcover/Landuse Time Series',True)\n", "\n", "# Continuous data automatically have a legend added\n", "nlcd = ee.Image('USGS/NLCD_RELEASES/2016_REL/2016')\n", - "Map.addLayer(nlcd.select(['percent_tree_cover']),{'min':20,'max':80,'palette':'555,0A0','opacity':0.5},'NLCD 2016 TCC',True)\n", + "Map.addLayer(nlcd.select(['percent_tree_cover']),{'min':20,'max':80,'palette':'555,0A0','opacity':0.5,'legendLabelLeftAfter':'% TCC','legendLabelRightAfter':'% TCC'},'NLCD 2016 TCC',True)\n", "\n", "Map.turnOnInspector()\n", "Map.view()" @@ -227,7 +239,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 8, "id": "29550202", "metadata": { "scrolled": false @@ -242,7 +254,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612ymuGgajtw9S6mOC5GCfhqzRWaiDFM4Wo8EZddZ-IPoTvQekpl-PHtcL0Oc535OAFKzF50NXEDh6z51BKbk_zsmiLDpSsD1lSfhV7rwCp6incyDEh73_JeAKScEwLupBUGamXxLrsDoo1tDwM-5dfFE7YFluJxoRvJsEWUaCgYKAcYSARESFQHGX2MirzQTM9D85PpbatDl2KI9vQ0178\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZDEzWma5X5W-oHKCexM8jy1fvuNiDAgP07VHbMN6HHAjJktIgzS97_mpORIntBzrleDIqRW4mzlY45PV5hL00AmDEMPk0yYKTvqhDUQkGuAKtjC1IWCv8x9KXU9aAkyI_6tdjC_ZjbMbACiNbZPgzWW6Pfa4VRfX5uHIysaCgYKAdoSARESFQHGX2Mis6lGLlm0ts5y8AVhKmIzgg0178&accessTokenCreationTime=1732565082937\n" ] }, { @@ -252,7 +264,7 @@ " " + "" ] }, "metadata": {}, @@ -297,7 +309,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 9, "id": "bda0482c", "metadata": { "scrolled": true @@ -312,7 +324,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612xlIx2Z7GFTqGXH8dsTw0MkNgvq1rBKoPyvOsMMcDknha5xOGZuHnVp_GAzPOV3V6y5-XyTWNFtPKxGOzXOEQwJn24apigYHHO7F0Pi68AZdnJE036ggaWviIID4VdTcv9CoB3rxbrRtqqOXWa0a0ebgPmYsPDPBHen2mAaCgYKAd4SARESFQHGX2MiJOenyiWCugz0F-f9mbuCHA0178\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZBtu0k2gNpi4vy_3WTk89zD7TnCY2jV_58KR3dZBzuK9IC30vpVunkWSZoLtvydJWpP6appk3GvnXLjghoFmxOlrXf4RBBkj6dkogsVR1TqAHrzRUmnJDyEjpwncoI-AUYvO5x8V_icMITvLjZT5it08wDuVNS5y07tIscaCgYKAXkSARESFQHGX2MiPJSgbTMg-G5QabpMKuznNg0178&accessTokenCreationTime=1732565101648\n" ] }, { @@ -322,7 +334,7 @@ " " + "" ] }, "metadata": {}, @@ -358,7 +370,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 10, "id": "e3065817", "metadata": {}, "outputs": [ @@ -371,7 +383,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612xyu7yibHE0YwsGKTTjWjC8Uk7L7aof24L3ei935S0iOL9NAWU3uTAdMdwDkXhSRd0HMf83Axc1D3YZE1P3MYJKmA-upfpBPNjWAt1yzksKGra1-x-9to7S3NUSmTpzpFCRVoVDf_BdvJJqdtMCryh57Urg1uEZk-ZZj-8aCgYKAWoSARESFQHGX2MinnWH-GXb3lEYw3rJxhIskQ0178\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZAezqp01cIEOBoAqg2IyAX7siCvpDiVQ4TJDvPJooEZjhmH9MBnk8awa4ut9LS2gQrVDTwmqwkbWmIdU0VGrsW0ZUlgojuBHakihs4LRgVNnnzWTLaqdQGkEdmlo2FHWqRNOW_JHyDw6AvyI6OdglQopqn53aer93wfaS4aCgYKAQASARESFQHGX2Mi4CooIU_ziSIVWHXLJOUy0A0178&accessTokenCreationTime=1732565130682\n" ] }, { @@ -381,7 +393,7 @@ " " + "" ] }, "metadata": {}, @@ -417,24 +429,15 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 11, "id": "ed19b1f3", "metadata": {}, "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Adding layer: JRC Surface Water Time Series\n", - "Adding layer: JRC Surface Water Mode\n", - "Adding layer: JRC Surface Water Time Lapse\n" - ] - }, { "name": "stderr", "output_type": "stream", "text": [ - "c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\ee\\deprecation.py:202: DeprecationWarning: \n", + "c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\ee\\deprecation.py:207: DeprecationWarning: \n", "\n", "Attention required for JRC/GSW1_0/YearlyHistory! You are using a deprecated asset.\n", "To ensure continued functionality, please update it.\n", @@ -447,11 +450,14 @@ "name": "stdout", "output_type": "stream", "text": [ + "Adding layer: JRC Surface Water Time Series\n", + "Adding layer: JRC Surface Water Mode\n", + "Adding layer: JRC Surface Water Time Lapse\n", "Starting webmap\n", "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612yRwpwRBWQTUs2XVKhs1DlyDqoqJZIgeDDCCYmuXK-kQ-6wtKQ8bWed5F5Tw6tPvt50q0scd1AFM4Rgmu8ClNDjIc84N1zhl16h081AkdlPxxMqkChodrKxigDgSjxRR5ZNpFqiQ0bVhQb-juMerVorXEndD1IoR5OvK4kaCgYKAbYSARESFQHGX2Mib2iFAte1BTdjjB1u62k-6g0178\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZAlsuVMY4s0axMzoAGBFZnZSizbu-h175yGINMHpEhuMWniA9OD33KUXUISs376RMYK75_pp2b_JBw7M7G4VoeLjxS_je1EFmM7JS9H3saEhlD05NpN_W8RuRhAf9CZ4Jgm9ROrSqLI-QwUQSGo43THsCRWPfkIggX0veYaCgYKATYSARESFQHGX2Mi99zBRgnkVA3UetKqa0L6pQ0178&accessTokenCreationTime=1732565241221\n" ] }, { @@ -461,7 +467,7 @@ " " + "" ] }, "metadata": {}, diff --git a/docs/source/notebooks/geeViewVSFoliumViewerExampleNotebook.ipynb b/docs/source/notebooks/geeViewVSFoliumViewerExampleNotebook.ipynb index 1612fb1..ebd32bb 100644 --- a/docs/source/notebooks/geeViewVSFoliumViewerExampleNotebook.ipynb +++ b/docs/source/notebooks/geeViewVSFoliumViewerExampleNotebook.ipynb @@ -28,13 +28,13 @@ "\n", "\n", "\n", - "\n", - "

    \"Open

    " + "[![github](https://img.shields.io/badge/-see%20sources-white?logo=github&labelColor=555)](https://github.com/gee-community/geeviz/blob/master/examples/geeViewVSFoliumViewerExampleNotebook.ipynb) \n", + "[![github](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/gee-community/geeViz/blob/master/examples/geeViewVSFoliumViewerExampleNotebook.ipynb)" ] }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 4, "id": "b8e5dff6", "metadata": {}, "outputs": [ @@ -42,11 +42,6 @@ "name": "stdout", "output_type": "stream", "text": [ - "Initializing GEE\n", - "Cached project id file path: C:\\Users\\ihousman\\.config\\earthengine\\credentials.proj_id\n", - "Cached project id: rcr-gee-2\n", - "Successfully initialized\n", - "geeViz package folder: c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\geeViz\n", "done\n" ] } @@ -82,7 +77,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 7, "id": "145cfa94", "metadata": { "scrolled": false @@ -92,16 +87,6 @@ "name": "stdout", "output_type": "stream", "text": [ - "Get Processed Sentinel2: \n", - "Start date: Apr 30 2022 , End date: May 30 2023\n", - "Using S2 Collection: COPERNICUS/S2_HARMONIZED\n", - "Joining pre-computed cloud probabilities from: COPERNICUS/S2_CLOUD_PROBABILITY\n", - "Setting to aggregate instead of resample \n", - "Converting S2 data to daily mosaics\n", - "Applying Cloud Probability\n", - "Applying TDOM\n", - "Computing irMean for TDOM\n", - "Computing irStdDev for TDOM\n", "Adding layer: S2 Median 2023\n", "Adding layer: S2 Median 2023\n", "Adding layer: S2 Median 2022\n", @@ -140,7 +125,7 @@ " <meta name="viewport" content="width=device-width,\n", " initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />\n", " <style>\n", - " #map_e768368a64f4117a24c2ed1add335c09 {\n", + " #map_bf8cb17dfddc88eee0345b09539b65b3 {\n", " position: relative;\n", " width: 100.0%;\n", " height: 100.0%;\n", @@ -156,14 +141,14 @@ "<body>\n", " \n", " \n", - " <div class="folium-map" id="map_e768368a64f4117a24c2ed1add335c09" ></div>\n", + " <div class="folium-map" id="map_bf8cb17dfddc88eee0345b09539b65b3" ></div>\n", " \n", "</body>\n", "<script>\n", " \n", " \n", - " var map_e768368a64f4117a24c2ed1add335c09 = L.map(\n", - " "map_e768368a64f4117a24c2ed1add335c09",\n", + " var map_bf8cb17dfddc88eee0345b09539b65b3 = L.map(\n", + " "map_bf8cb17dfddc88eee0345b09539b65b3",\n", " {\n", " center: [0, 0],\n", " crs: L.CRS.EPSG3857,\n", @@ -177,77 +162,77 @@ "\n", " \n", " \n", - " var tile_layer_2eb064abc510a2009667247ec503744f = L.tileLayer(\n", + " var tile_layer_e9b894311852908103d312ac72a0f8d7 = L.tileLayer(\n", " "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",\n", " {"attribution": "Data by \\u0026copy; \\u003ca target=\\"_blank\\" href=\\"http://openstreetmap.org\\"\\u003eOpenStreetMap\\u003c/a\\u003e, under \\u003ca target=\\"_blank\\" href=\\"http://www.openstreetmap.org/copyright\\"\\u003eODbL\\u003c/a\\u003e.", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_e768368a64f4117a24c2ed1add335c09);\n", + " ).addTo(map_bf8cb17dfddc88eee0345b09539b65b3);\n", " \n", " \n", - " map_e768368a64f4117a24c2ed1add335c09.fitBounds(\n", + " map_bf8cb17dfddc88eee0345b09539b65b3.fitBounds(\n", " [[40.595571243156144, -113.21807278537877], [41.786028237932015, -111.82280911350377]],\n", " {}\n", " );\n", " \n", " \n", - " var tile_layer_318d20fe437657d8826935e48946a9fb = L.tileLayer(\n", + " var tile_layer_bf19b02e732ce46afa87ec069e125745 = L.tileLayer(\n", " "https://mt1.google.com/vt/lyrs=m\\u0026x={x}\\u0026y={y}\\u0026z={z}",\n", " {"attribution": "Google", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_e768368a64f4117a24c2ed1add335c09);\n", + " ).addTo(map_bf8cb17dfddc88eee0345b09539b65b3);\n", " \n", " \n", - " var tile_layer_d8931757b861f4e50b34bdf3c43f7e59 = L.tileLayer(\n", + " var tile_layer_a83e0b09797e18a74a9341b86aa5fa8a = L.tileLayer(\n", " "https://mt1.google.com/vt/lyrs=y\\u0026x={x}\\u0026y={y}\\u0026z={z}",\n", " {"attribution": "Google", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_e768368a64f4117a24c2ed1add335c09);\n", + " ).addTo(map_bf8cb17dfddc88eee0345b09539b65b3);\n", " \n", " \n", - " var tile_layer_5cc0597fd47030f70860adeb11a04e50 = L.tileLayer(\n", - " "https://earthengine.googleapis.com/v1/projects/rcr-gee-2/maps/878cd4cda12ea625edde2235b25ccfba-4e585685e228e19bfb2c776dfd5fae64/tiles/{z}/{x}/{y}",\n", + " var tile_layer_052abd9b5ca3dc5e0689f5a5defe60ca = L.tileLayer(\n", + " "https://earthengine.googleapis.com/v1/projects/lcms-292214/maps/8b65d3ca40b419c815211709b11bdf70-fd2bf96cfc74f2b85446bb1e06d78566/tiles/{z}/{x}/{y}",\n", " {"attribution": "Google Earth Engine | GeeViz", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_e768368a64f4117a24c2ed1add335c09);\n", + " ).addTo(map_bf8cb17dfddc88eee0345b09539b65b3);\n", " \n", " \n", - " var tile_layer_edf797cf5a88a31ffc210b741abf975f = L.tileLayer(\n", - " "https://earthengine.googleapis.com/v1/projects/rcr-gee-2/maps/e40754b26863dbda6eb4e72f817357eb-aeafa083ba9af0c84a9c23767962bd08/tiles/{z}/{x}/{y}",\n", + " var tile_layer_6657345b6a0e65189cd9f172d7597628 = L.tileLayer(\n", + " "https://earthengine.googleapis.com/v1/projects/lcms-292214/maps/cfe71c74fde98ae75ee307d9c2718d13-34e14d8c58292c547f605a95d208544a/tiles/{z}/{x}/{y}",\n", " {"attribution": "Google Earth Engine | GeeViz", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_e768368a64f4117a24c2ed1add335c09);\n", + " ).addTo(map_bf8cb17dfddc88eee0345b09539b65b3);\n", " \n", " \n", - " var tile_layer_7202c93b8a32531c6cf6e276253ba863 = L.tileLayer(\n", - " "https://earthengine.googleapis.com/v1/projects/rcr-gee-2/maps/1dd1ca8432e9c77788f5ff204934cb9a-c08173cfa4c18f3d94abda55b7f03d23/tiles/{z}/{x}/{y}",\n", + " var tile_layer_1b2bc15851267f89108ff72becc09d75 = L.tileLayer(\n", + " "https://earthengine.googleapis.com/v1/projects/lcms-292214/maps/1dd1ca8432e9c77788f5ff204934cb9a-b50be3c4da69498a104aad062c94b81e/tiles/{z}/{x}/{y}",\n", " {"attribution": "Google Earth Engine", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_e768368a64f4117a24c2ed1add335c09);\n", + " ).addTo(map_bf8cb17dfddc88eee0345b09539b65b3);\n", " \n", " \n", - " var layer_control_3e565ea03295a2c2eec652874e417314 = {\n", + " var layer_control_806d6bc00b08c811e7e6fdb6bd3f3a33 = {\n", " base_layers : {\n", - " "openstreetmap" : tile_layer_2eb064abc510a2009667247ec503744f,\n", + " "openstreetmap" : tile_layer_e9b894311852908103d312ac72a0f8d7,\n", " },\n", " overlays : {\n", - " "Google Maps" : tile_layer_318d20fe437657d8826935e48946a9fb,\n", - " "Google Satellite" : tile_layer_d8931757b861f4e50b34bdf3c43f7e59,\n", - " "S2 Median 2023" : tile_layer_5cc0597fd47030f70860adeb11a04e50,\n", - " "S2 Median 2022" : tile_layer_edf797cf5a88a31ffc210b741abf975f,\n", - " "Study Area" : tile_layer_7202c93b8a32531c6cf6e276253ba863,\n", + " "Google Maps" : tile_layer_bf19b02e732ce46afa87ec069e125745,\n", + " "Google Satellite" : tile_layer_a83e0b09797e18a74a9341b86aa5fa8a,\n", + " "S2 Median 2023" : tile_layer_052abd9b5ca3dc5e0689f5a5defe60ca,\n", + " "S2 Median 2022" : tile_layer_6657345b6a0e65189cd9f172d7597628,\n", + " "Study Area" : tile_layer_1b2bc15851267f89108ff72becc09d75,\n", " },\n", " };\n", " L.control.layers(\n", - " layer_control_3e565ea03295a2c2eec652874e417314.base_layers,\n", - " layer_control_3e565ea03295a2c2eec652874e417314.overlays,\n", + " layer_control_806d6bc00b08c811e7e6fdb6bd3f3a33.base_layers,\n", + " layer_control_806d6bc00b08c811e7e6fdb6bd3f3a33.overlays,\n", " {"autoZIndex": false, "collapsed": false, "position": "topright"}\n", - " ).addTo(map_e768368a64f4117a24c2ed1add335c09);\n", - " tile_layer_edf797cf5a88a31ffc210b741abf975f.remove();\n", + " ).addTo(map_bf8cb17dfddc88eee0345b09539b65b3);\n", + " tile_layer_6657345b6a0e65189cd9f172d7597628.remove();\n", " \n", " \n", " L.control.fullscreen(\n", " {"forceSeparateButton": false, "position": "topleft", "title": "Full Screen", "titleCancel": "Exit Full Screen"}\n", - " ).addTo(map_e768368a64f4117a24c2ed1add335c09);\n", + " ).addTo(map_bf8cb17dfddc88eee0345b09539b65b3);\n", " \n", "</script>\n", "</html>\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen>

    " ], "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -261,7 +246,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:1234/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:1234/geeView/?projectID=rcr-gee-2&accessToken=ya29.a0AfB_byCP8HcC-KgEexObCBH6V-INd3TohADawsSbQUkAJ6F2610Ejx0YrUgSRrX3Htj0SOzAQndyQJthWGIP64KMLPphHHVovwJkqBIS17C7dV9GCPnhXCLkek5cY-mtkGhxFVjOxcOIYhW9kvnuSE8zRaJkPf9gZn-QykRfPtqRaCgYKAc8SARASFQHGX2MiabXK25SWKqOKCKEVD2Xnlg0179\n" + "geeView URL: http://localhost:1234/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZDbcJ3L1DVXwA-_pCB34jAAAAZNhd7u9i06UHk43hWigYXc3K2oeDYmfRGm-sqiZPXijhaIPwbxQ8ihv0oedNanKny9oGmwSXPjmmpizVz5b6FBSbLqOuLK1kIPLu4v-gbrIry9cu6uJDmYcdS8IY_qOZHpByBppNRjWAkaCgYKATcSARESFQHGX2MiaLWkXlEAlSRFL1yHTKi7Ww0178&accessTokenCreationTime=1731636167610\n" ] }, { @@ -271,7 +256,7 @@ " " + "" ] }, "metadata": {}, "output_type": "display_data" - }, - { - "ename": "", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[1;31mThe Kernel crashed while executing code in the the current cell or a previous cell. Please review the code in the cell(s) to identify a possible cause of the failure. Click here for more info. View Jupyter log for further details." - ] } ], "source": [ + "foliumViewMap.clearMap()\n", + "geeViewMap.clearMap()\n", "# Bring in some S2 data\n", "studyArea = ee.Geometry.Polygon(\n", " [[[-113.21807278537877, 41.786028237932015],\n", @@ -303,13 +282,13 @@ " [-111.82280911350377, 41.786028237932015]]], None, False)\n", "\n", "# Get some example images to view\n", - "s2s = gil.getProcessedSentinel2Scenes(studyArea,2022,2023,120,150)\n", + "s2s = gil.superSimpleGetS2(studyArea,'2022-01-01','2023-12-31',120,150)\n", "postComposite = s2s.filter(ee.Filter.calendarRange(2023,2023,'year')).median()\n", - "foliumViewMap.addLayer(postComposite,gil.vizParamsFalse,'S2 Median 2023')\n", - "geeViewMap.addLayer(postComposite,gil.vizParamsFalse,'S2 Median 2023')\n", + "foliumViewMap.addLayer(postComposite,gil.vizParamsFalse10k,'S2 Median 2023')\n", + "geeViewMap.addLayer(postComposite,gil.vizParamsFalse10k,'S2 Median 2023')\n", "preComposite = s2s.filter(ee.Filter.calendarRange(2022,2022,'year')).median()\n", - "foliumViewMap.addLayer(preComposite,gil.vizParamsFalse,'S2 Median 2022',False)\n", - "geeViewMap.addLayer(preComposite,gil.vizParamsFalse,'S2 Median 2022',False)\n", + "foliumViewMap.addLayer(preComposite,gil.vizParamsFalse10k,'S2 Median 2022',False)\n", + "geeViewMap.addLayer(preComposite,gil.vizParamsFalse10k,'S2 Median 2022',False)\n", "\n", "# Center on the study area and view it\n", "foliumViewMap.centerObject(studyArea)\n", @@ -328,7 +307,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 8, "id": "dc168bd6", "metadata": {}, "outputs": [ @@ -362,7 +341,7 @@ " <meta name="viewport" content="width=device-width,\n", " initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />\n", " <style>\n", - " #map_75334d5df7d7b6bee93eaa7a6a0444c7 {\n", + " #map_0d3c2d857dc84813a9ad09af38a85c74 {\n", " position: relative;\n", " width: 100.0%;\n", " height: 100.0%;\n", @@ -378,14 +357,14 @@ "<body>\n", " \n", " \n", - " <div class="folium-map" id="map_75334d5df7d7b6bee93eaa7a6a0444c7" ></div>\n", + " <div class="folium-map" id="map_0d3c2d857dc84813a9ad09af38a85c74" ></div>\n", " \n", "</body>\n", "<script>\n", " \n", " \n", - " var map_75334d5df7d7b6bee93eaa7a6a0444c7 = L.map(\n", - " "map_75334d5df7d7b6bee93eaa7a6a0444c7",\n", + " var map_0d3c2d857dc84813a9ad09af38a85c74 = L.map(\n", + " "map_0d3c2d857dc84813a9ad09af38a85c74",\n", " {\n", " center: [0, 0],\n", " crs: L.CRS.EPSG3857,\n", @@ -399,79 +378,79 @@ "\n", " \n", " \n", - " var tile_layer_25d8161bb6085167b21e6c0d242464d7 = L.tileLayer(\n", + " var tile_layer_d26b642dc3c339eca31d64423e6a443b = L.tileLayer(\n", " "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",\n", " {"attribution": "Data by \\u0026copy; \\u003ca target=\\"_blank\\" href=\\"http://openstreetmap.org\\"\\u003eOpenStreetMap\\u003c/a\\u003e, under \\u003ca target=\\"_blank\\" href=\\"http://www.openstreetmap.org/copyright\\"\\u003eODbL\\u003c/a\\u003e.", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_75334d5df7d7b6bee93eaa7a6a0444c7);\n", + " ).addTo(map_0d3c2d857dc84813a9ad09af38a85c74);\n", " \n", " \n", - " map_75334d5df7d7b6bee93eaa7a6a0444c7.fitBounds(\n", + " map_0d3c2d857dc84813a9ad09af38a85c74.fitBounds(\n", " [[40.595571243156144, -113.21807278537877], [41.786028237932015, -111.82280911350377]],\n", " {}\n", " );\n", " \n", " \n", - " var tile_layer_2ce97936129ccddd74bbb6ad16a4d8d9 = L.tileLayer(\n", + " var tile_layer_bf19b02e732ce46afa87ec069e125745 = L.tileLayer(\n", " "https://mt1.google.com/vt/lyrs=m\\u0026x={x}\\u0026y={y}\\u0026z={z}",\n", " {"attribution": "Google", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_75334d5df7d7b6bee93eaa7a6a0444c7);\n", + " ).addTo(map_0d3c2d857dc84813a9ad09af38a85c74);\n", " \n", " \n", - " var tile_layer_0804d036b81e7bcd721c727b2c50a1b4 = L.tileLayer(\n", + " var tile_layer_a83e0b09797e18a74a9341b86aa5fa8a = L.tileLayer(\n", " "https://mt1.google.com/vt/lyrs=y\\u0026x={x}\\u0026y={y}\\u0026z={z}",\n", " {"attribution": "Google", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_75334d5df7d7b6bee93eaa7a6a0444c7);\n", + " ).addTo(map_0d3c2d857dc84813a9ad09af38a85c74);\n", " \n", " \n", - " var tile_layer_042de6edf5ac45fd9eb68d13a019582f = L.tileLayer(\n", - " "https://earthengine.googleapis.com/v1/projects/earthengine-legacy/maps/c2977a270141db4a60d3223bdb36d376-d79c520062fcf4ae3c40e0d1cf9b1b87/tiles/{z}/{x}/{y}",\n", + " var tile_layer_e1e8c048257f05fe0bc4b9858eacb7ae = L.tileLayer(\n", + " "https://earthengine.googleapis.com/v1/projects/lcms-292214/maps/8b65d3ca40b419c815211709b11bdf70-2586002fa31dd60941a7fe44d7fce1d3/tiles/{z}/{x}/{y}",\n", " {"attribution": "Google Earth Engine | GeeViz", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_75334d5df7d7b6bee93eaa7a6a0444c7);\n", + " ).addTo(map_0d3c2d857dc84813a9ad09af38a85c74);\n", " \n", " \n", - " var tile_layer_97f21978a26e782e4c0c8d1902b2fc5c = L.tileLayer(\n", - " "https://earthengine.googleapis.com/v1/projects/earthengine-legacy/maps/7bb79b310bb924c7447da63b232bd54c-b004f8bada8b318b555422618a4aa837/tiles/{z}/{x}/{y}",\n", + " var tile_layer_ce36a093dbaabafea6ea519a9a00904c = L.tileLayer(\n", + " "https://earthengine.googleapis.com/v1/projects/lcms-292214/maps/cfe71c74fde98ae75ee307d9c2718d13-9bc1bcce3da47ea46e7dd794e8c2bcff/tiles/{z}/{x}/{y}",\n", " {"attribution": "Google Earth Engine | GeeViz", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_75334d5df7d7b6bee93eaa7a6a0444c7);\n", + " ).addTo(map_0d3c2d857dc84813a9ad09af38a85c74);\n", " \n", " \n", - " var tile_layer_6dc9113cf2448d77165c70967ae4ebab = L.tileLayer(\n", - " "https://earthengine.googleapis.com/v1/projects/earthengine-legacy/maps/1dd1ca8432e9c77788f5ff204934cb9a-5511903ebecf8b50150d48196845f9ca/tiles/{z}/{x}/{y}",\n", + " var tile_layer_815b492266aed0118863f9068faf2111 = L.tileLayer(\n", + " "https://earthengine.googleapis.com/v1/projects/lcms-292214/maps/1dd1ca8432e9c77788f5ff204934cb9a-c106266d159702d559220f726c25347b/tiles/{z}/{x}/{y}",\n", " {"attribution": "Google Earth Engine", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_75334d5df7d7b6bee93eaa7a6a0444c7);\n", + " ).addTo(map_0d3c2d857dc84813a9ad09af38a85c74);\n", " \n", " \n", - " var layer_control_ccd33ae4d9c07922044e2ae5208e3034 = {\n", + " var layer_control_c277404e3cf3fa680d7f4bc844b773f5 = {\n", " base_layers : {\n", - " "openstreetmap" : tile_layer_25d8161bb6085167b21e6c0d242464d7,\n", + " "openstreetmap" : tile_layer_d26b642dc3c339eca31d64423e6a443b,\n", " },\n", " overlays : {\n", - " "Google Maps" : tile_layer_2ce97936129ccddd74bbb6ad16a4d8d9,\n", - " "Google Satellite" : tile_layer_0804d036b81e7bcd721c727b2c50a1b4,\n", - " "S2 Median 2023" : tile_layer_042de6edf5ac45fd9eb68d13a019582f,\n", - " "S2 Median 2022" : tile_layer_97f21978a26e782e4c0c8d1902b2fc5c,\n", - " "Study Area" : tile_layer_6dc9113cf2448d77165c70967ae4ebab,\n", + " "Google Maps" : tile_layer_bf19b02e732ce46afa87ec069e125745,\n", + " "Google Satellite" : tile_layer_a83e0b09797e18a74a9341b86aa5fa8a,\n", + " "S2 Median 2023" : tile_layer_e1e8c048257f05fe0bc4b9858eacb7ae,\n", + " "S2 Median 2022" : tile_layer_ce36a093dbaabafea6ea519a9a00904c,\n", + " "Study Area" : tile_layer_815b492266aed0118863f9068faf2111,\n", " },\n", " };\n", " L.control.layers(\n", - " layer_control_ccd33ae4d9c07922044e2ae5208e3034.base_layers,\n", - " layer_control_ccd33ae4d9c07922044e2ae5208e3034.overlays,\n", + " layer_control_c277404e3cf3fa680d7f4bc844b773f5.base_layers,\n", + " layer_control_c277404e3cf3fa680d7f4bc844b773f5.overlays,\n", " {"autoZIndex": false, "collapsed": false, "position": "topright"}\n", - " ).addTo(map_75334d5df7d7b6bee93eaa7a6a0444c7);\n", - " tile_layer_042de6edf5ac45fd9eb68d13a019582f.remove();\n", - " tile_layer_97f21978a26e782e4c0c8d1902b2fc5c.remove();\n", - " tile_layer_6dc9113cf2448d77165c70967ae4ebab.remove();\n", + " ).addTo(map_0d3c2d857dc84813a9ad09af38a85c74);\n", + " tile_layer_e1e8c048257f05fe0bc4b9858eacb7ae.remove();\n", + " tile_layer_ce36a093dbaabafea6ea519a9a00904c.remove();\n", + " tile_layer_815b492266aed0118863f9068faf2111.remove();\n", " \n", " \n", " L.control.fullscreen(\n", " {"forceSeparateButton": false, "position": "topleft", "title": "Full Screen", "titleCancel": "Exit Full Screen"}\n", - " ).addTo(map_75334d5df7d7b6bee93eaa7a6a0444c7);\n", + " ).addTo(map_0d3c2d857dc84813a9ad09af38a85c74);\n", " \n", "</script>\n", "</html>\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen>

    " ], "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -482,9 +461,10 @@ "output_type": "stream", "text": [ "Starting webmap\n", - "Using default refresh token for geeView: C:\\Users\\ihousman/.config/earthengine/credentials\n", + "Using default refresh token for geeView\n", "Local web server at: http://localhost:1234/geeView/ already serving.\n", - "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n" + "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", + "geeView URL: http://localhost:1234/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZBgEjF_qT4biuDwvxdtZ3fRkCFXi2hjGPshz4JTMX9Qd_B08sziz8mCa32AnWU1vNHGf20_-D4K_rx5d7KG6Orzca4g73b0wxTGYLjJjlO6q8fMjpkU8ZwD_YM60VL_uDLz4MvtH3FDlI7JjpfyvIRnLYvCnhlIn9ZwZ7QaCgYKARkSARESFQHGX2MiPdRuXvSNF3GQ2UaYanRICw0178&accessTokenCreationTime=1731636205672\n" ] }, { @@ -494,7 +474,7 @@ " " + "" ] }, "metadata": {}, @@ -520,7 +500,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 9, "id": "8714a906", "metadata": {}, "outputs": [ @@ -554,7 +534,7 @@ " <meta name="viewport" content="width=device-width,\n", " initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />\n", " <style>\n", - " #map_6ae079e70a9a766f5a4c686c2cd27ded {\n", + " #map_5a7550f959b1ae1f8f9b8fac7d371a57 {\n", " position: relative;\n", " width: 100.0%;\n", " height: 100.0%;\n", @@ -570,14 +550,14 @@ "<body>\n", " \n", " \n", - " <div class="folium-map" id="map_6ae079e70a9a766f5a4c686c2cd27ded" ></div>\n", + " <div class="folium-map" id="map_5a7550f959b1ae1f8f9b8fac7d371a57" ></div>\n", " \n", "</body>\n", "<script>\n", " \n", " \n", - " var map_6ae079e70a9a766f5a4c686c2cd27ded = L.map(\n", - " "map_6ae079e70a9a766f5a4c686c2cd27ded",\n", + " var map_5a7550f959b1ae1f8f9b8fac7d371a57 = L.map(\n", + " "map_5a7550f959b1ae1f8f9b8fac7d371a57",\n", " {\n", " center: [0, 0],\n", " crs: L.CRS.EPSG3857,\n", @@ -591,76 +571,76 @@ "\n", " \n", " \n", - " var tile_layer_6ca2cd56fe25139eeb4055e18439f00c = L.tileLayer(\n", + " var tile_layer_d074fc4686c0b3198ed2ec2c2b15b714 = L.tileLayer(\n", " "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",\n", " {"attribution": "Data by \\u0026copy; \\u003ca target=\\"_blank\\" href=\\"http://openstreetmap.org\\"\\u003eOpenStreetMap\\u003c/a\\u003e, under \\u003ca target=\\"_blank\\" href=\\"http://www.openstreetmap.org/copyright\\"\\u003eODbL\\u003c/a\\u003e.", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_6ae079e70a9a766f5a4c686c2cd27ded);\n", + " ).addTo(map_5a7550f959b1ae1f8f9b8fac7d371a57);\n", " \n", " \n", - " map_6ae079e70a9a766f5a4c686c2cd27ded.fitBounds(\n", + " map_5a7550f959b1ae1f8f9b8fac7d371a57.fitBounds(\n", " [[40.595571243156144, -113.21807278537877], [41.786028237932015, -111.82280911350377]],\n", " {}\n", " );\n", " \n", " \n", - " var tile_layer_2ce97936129ccddd74bbb6ad16a4d8d9 = L.tileLayer(\n", + " var tile_layer_bf19b02e732ce46afa87ec069e125745 = L.tileLayer(\n", " "https://mt1.google.com/vt/lyrs=m\\u0026x={x}\\u0026y={y}\\u0026z={z}",\n", " {"attribution": "Google", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_6ae079e70a9a766f5a4c686c2cd27ded);\n", + " ).addTo(map_5a7550f959b1ae1f8f9b8fac7d371a57);\n", " \n", " \n", - " var tile_layer_0804d036b81e7bcd721c727b2c50a1b4 = L.tileLayer(\n", + " var tile_layer_a83e0b09797e18a74a9341b86aa5fa8a = L.tileLayer(\n", " "https://mt1.google.com/vt/lyrs=y\\u0026x={x}\\u0026y={y}\\u0026z={z}",\n", " {"attribution": "Google", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_6ae079e70a9a766f5a4c686c2cd27ded);\n", + " ).addTo(map_5a7550f959b1ae1f8f9b8fac7d371a57);\n", " \n", " \n", - " var tile_layer_de4f52f45dcbdd73eaf18ec8d6bb4c8e = L.tileLayer(\n", - " "https://earthengine.googleapis.com/v1/projects/earthengine-legacy/maps/5206f96be658993e51f71b721788e631-7af46ab593128ac9acae40db4ecc2e94/tiles/{z}/{x}/{y}",\n", + " var tile_layer_13f2b579776361222d2a8b420c4883b5 = L.tileLayer(\n", + " "https://earthengine.googleapis.com/v1/projects/lcms-292214/maps/8b65d3ca40b419c815211709b11bdf70-e5aba86dc97de35a8c0601d2a7929da6/tiles/{z}/{x}/{y}",\n", " {"attribution": "Google Earth Engine | GeeViz", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_6ae079e70a9a766f5a4c686c2cd27ded);\n", + " ).addTo(map_5a7550f959b1ae1f8f9b8fac7d371a57);\n", " \n", " \n", - " var tile_layer_d4302cdedbd1a069632aa5eafaa58d8e = L.tileLayer(\n", - " "https://earthengine.googleapis.com/v1/projects/earthengine-legacy/maps/265338b79f8eee2fa31c73bd685096f2-0cc1ec54c4f36d5263f8ff080ca0da6e/tiles/{z}/{x}/{y}",\n", + " var tile_layer_e9ee12c9f68d952031d5030fad773405 = L.tileLayer(\n", + " "https://earthengine.googleapis.com/v1/projects/lcms-292214/maps/cfe71c74fde98ae75ee307d9c2718d13-cc171251a4aad5cda94665cf4c5962e4/tiles/{z}/{x}/{y}",\n", " {"attribution": "Google Earth Engine | GeeViz", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_6ae079e70a9a766f5a4c686c2cd27ded);\n", + " ).addTo(map_5a7550f959b1ae1f8f9b8fac7d371a57);\n", " \n", " \n", - " var tile_layer_d197dd002a1454886c87186c28976d42 = L.tileLayer(\n", - " "https://earthengine.googleapis.com/v1/projects/earthengine-legacy/maps/1dd1ca8432e9c77788f5ff204934cb9a-e60dd8c676d90dd89c0b0788eb9ef802/tiles/{z}/{x}/{y}",\n", + " var tile_layer_bbcb2a5ce2b8db6ac99d3526e3c9524b = L.tileLayer(\n", + " "https://earthengine.googleapis.com/v1/projects/lcms-292214/maps/1dd1ca8432e9c77788f5ff204934cb9a-b37d5ad4e80a2a549134cee564627bc0/tiles/{z}/{x}/{y}",\n", " {"attribution": "Google Earth Engine", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_6ae079e70a9a766f5a4c686c2cd27ded);\n", + " ).addTo(map_5a7550f959b1ae1f8f9b8fac7d371a57);\n", " \n", " \n", - " var layer_control_eb1d11e4c51f1cab920d5c85d9b965f0 = {\n", + " var layer_control_db9697066279ce8e0e7853d9189b5a2d = {\n", " base_layers : {\n", - " "openstreetmap" : tile_layer_6ca2cd56fe25139eeb4055e18439f00c,\n", + " "openstreetmap" : tile_layer_d074fc4686c0b3198ed2ec2c2b15b714,\n", " },\n", " overlays : {\n", - " "Google Maps" : tile_layer_2ce97936129ccddd74bbb6ad16a4d8d9,\n", - " "Google Satellite" : tile_layer_0804d036b81e7bcd721c727b2c50a1b4,\n", - " "S2 Median 2023" : tile_layer_de4f52f45dcbdd73eaf18ec8d6bb4c8e,\n", - " "S2 Median 2022" : tile_layer_d4302cdedbd1a069632aa5eafaa58d8e,\n", - " "Study Area" : tile_layer_d197dd002a1454886c87186c28976d42,\n", + " "Google Maps" : tile_layer_bf19b02e732ce46afa87ec069e125745,\n", + " "Google Satellite" : tile_layer_a83e0b09797e18a74a9341b86aa5fa8a,\n", + " "S2 Median 2023" : tile_layer_13f2b579776361222d2a8b420c4883b5,\n", + " "S2 Median 2022" : tile_layer_e9ee12c9f68d952031d5030fad773405,\n", + " "Study Area" : tile_layer_bbcb2a5ce2b8db6ac99d3526e3c9524b,\n", " },\n", " };\n", " L.control.layers(\n", - " layer_control_eb1d11e4c51f1cab920d5c85d9b965f0.base_layers,\n", - " layer_control_eb1d11e4c51f1cab920d5c85d9b965f0.overlays,\n", + " layer_control_db9697066279ce8e0e7853d9189b5a2d.base_layers,\n", + " layer_control_db9697066279ce8e0e7853d9189b5a2d.overlays,\n", " {"autoZIndex": false, "collapsed": false, "position": "topright"}\n", - " ).addTo(map_6ae079e70a9a766f5a4c686c2cd27ded);\n", + " ).addTo(map_5a7550f959b1ae1f8f9b8fac7d371a57);\n", " \n", " \n", " L.control.fullscreen(\n", " {"forceSeparateButton": false, "position": "topleft", "title": "Full Screen", "titleCancel": "Exit Full Screen"}\n", - " ).addTo(map_6ae079e70a9a766f5a4c686c2cd27ded);\n", + " ).addTo(map_5a7550f959b1ae1f8f9b8fac7d371a57);\n", " \n", "</script>\n", "</html>\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen>" ], "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -671,9 +651,10 @@ "output_type": "stream", "text": [ "Starting webmap\n", - "Using default refresh token for geeView: C:\\Users\\ihousman/.config/earthengine/credentials\n", + "Using default refresh token for geeView\n", "Local web server at: http://localhost:1234/geeView/ already serving.\n", - "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n" + "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", + "geeView URL: http://localhost:1234/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZBUVPa6LDS25-4BKa-QvyMaz0HTq8mm7-tn5ABvN9VQk-ga6KngwRbFK9lVePwfAnN3KVTzcYhKcl5_a35GszdiHTiYkun9LJ4a_2pwKJu5QwxHQsx9l5rOTV4n5glhvDXYy1-AmDTKKenKabXEY0f1XBVtsZlX4M-j4Z4aCgYKAc4SARESFQHGX2MiTjFdTXxQ6GZsKMtMJgEoVw0178&accessTokenCreationTime=1731636218348\n" ] }, { @@ -683,7 +664,7 @@ " " + "" ] }, "metadata": {}, diff --git a/docs/source/notebooks/geeViz_geeMap_comparison_tutorial.ipynb b/docs/source/notebooks/geeViz_geeMap_comparison_tutorial.ipynb index 0494d42..d8f0e69 100644 --- a/docs/source/notebooks/geeViz_geeMap_comparison_tutorial.ipynb +++ b/docs/source/notebooks/geeViz_geeMap_comparison_tutorial.ipynb @@ -13,47 +13,22 @@ "\n", "* This is intended to illustrate the basic map functionality of each package. Refer to each packages examples for more in-depth demos\n", "\n", - "

    \"Open

    " + "\n", + "[![github](https://img.shields.io/badge/-see%20sources-white?logo=github&labelColor=555)](https://github.com/gee-community/geeviz/blob/master/examples/geeViz_geeMap_comparison_tutorial.ipynb) \n", + "[![github](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/gee-community/geeViz/blob/master/examples/geeViz_geeMap_comparison_tutorial.ipynb)" ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, "metadata": {}, "outputs": [ { - "data": { - "text/html": [ - "\n", - " \n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" + "name": "stdout", + "output_type": "stream", + "text": [ + "geeViz package folder: c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\geeViz\n" + ] } ], "source": [ @@ -82,7 +57,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "metadata": {}, "outputs": [ { @@ -122,7 +97,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f2330ca0a7ca442dbe3731326371427d", + "model_id": "6ed7ad90f7b14fdabc8e09495452b37c", "version_major": 2, "version_minor": 0 }, @@ -130,7 +105,7 @@ "Map(center=[0, 0], controls=(WidgetControl(options=['position', 'transparent_bg'], widget=SearchDataGUI(childr…" ] }, - "execution_count": 3, + "execution_count": 2, "metadata": {}, "output_type": "execute_result" } @@ -142,7 +117,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 3, "metadata": {}, "outputs": [ { @@ -187,7 +162,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AXooCgvgEDNhCDK0uDRpz89SY_IP1QTrcZy4sXuRjC2AakLLpvpHnY4JbpgQuN_aObMEAvqSekQexKUPFqKMjO5dKpTtZz7JLna2PHWIejqpRF1ZAmPRsoe7rV9BRT3m9PnDdmozagQiXui2XI_aIBVL4dq2v8LzdP7mOWEaCgYKAfESARESFQHGX2MiZsnH07ngGCe4E3fpeJEWmw0174\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZC1NpuzSJnOL46m9K4RQ3OxUQL_5d8_g_ocHO3jhv7KYFenfHacOKTrQXoBfiWS0Ri1rT0tNpnsmOGaHP7hwSPWwuIcptltnUzIPtDaulxJmYWOrEQJ3R0Iqa-NovKOogpQDP_t394JVVun6_SjOmmKGdsY8k-W-mdz5NoaCgYKAeoSARESFQHGX2MitIO-ZCr0Ku8KFquA0SiGAA0178&accessTokenCreationTime=1731461548264\n" ] }, { @@ -197,7 +172,7 @@ " " + "" ] }, "metadata": {}, @@ -230,7 +205,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -275,7 +250,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AXooCgvtomcjUlHqrrMtMyYQ3xkeyvWoRPwJ_tM5q65sOLXUvOO-DJACMhLbU5evcuZ2Swuaf3DXi_cfPDJzW6J22NdhFg4bo8iMIUjx2qwfPc4eGA0pIEHN0Mr5RkKOxzumlDPBKHAa2INX7OrtgJgzS_j2jrWjiCEo_G8aCgYKAUISARESFQHGX2MiorOf-P_GbrM7fO2kghuJTQ0174\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZDCqAxJILCd0nHUTJMchkcJTzMCfn_oOr09p0ecz2ZwSKyD4y-EV2Fu9GmeSHC-sKIHBezhBiWvD9RSEODWO7V0H1Sf6oD9wEJ7ams9Je0HDaeKBpx9VaYCtubO12v42BIEsTmq3w5sL43edm7avLzkSx40cagxNA48IJcaCgYKAbgSARESFQHGX2MiDqqNEsiekCnocxei6tyNLQ0178&accessTokenCreationTime=1731461558966\n" ] }, { @@ -285,7 +260,7 @@ " " + "" ] }, "metadata": {}, @@ -302,7 +277,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "a59ecbc4aae74e50a5f3903142916ddb", + "model_id": "ccfae8bc563e4a4fa0f490b8e4d20298", "version_major": 2, "version_minor": 0 }, @@ -310,7 +285,7 @@ "Map(center=[40.64356771453405, -111.92926447956667], controls=(WidgetControl(options=['position', 'transparent…" ] }, - "execution_count": 5, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -329,7 +304,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -374,7 +349,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AXooCgtJHkiDNTHnX1_pSscrZxMjNt9pvKyEtfkWLAUETNAq-mH7v_Cn2tzqKIa4Y271z-7jrnQIuFTCLO_2HkORiSS8HHeyy_fNRCzB86G70832yYkW1m84OkDsMgFl9Kbje3Ipo4C2aK8JWKVMOqJBFiXaY6BRE-nwTd8aCgYKAdISARESFQHGX2Mix0GbebnUwrD7aJVzoBXgrQ0174\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZCAzLBBAsbkibPAyQQBqz2A45adbb64UjuzZf4BzqFZspb3rXWLjQ-CXDOCq39f89yuIC1VEKd-KR-BrR3ReZ1qBOl1CBqCbmpuNmn8EavXnusniLjz8eAu5YjmTgB4n8VFUz0w5XIAMFQ1uuQWkGfbV3W6F1qo8nM3BcMaCgYKAUwSARESFQHGX2Mi1VbmxyoOc4nqPnQboIV-oA0178&accessTokenCreationTime=1731461571134\n" ] }, { @@ -384,7 +359,7 @@ " " + "" ] }, "metadata": {}, @@ -401,7 +376,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "6569b3cbe1e1419781ed7504e82afb10", + "model_id": "a046d1db994143879ec8221e21957a91", "version_major": 2, "version_minor": 0 }, @@ -409,7 +384,7 @@ "Map(center=[40.64356771453405, -111.92926447956665], controls=(WidgetControl(options=['position', 'transparent…" ] }, - "execution_count": 6, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -435,7 +410,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -484,7 +459,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AXooCgt2jXuR_ORQ4rVSJMw4gBgwNkPrdy3LbsdGZXmtBfF5m4ez0cqKlAEhvULItePzt4VZS_kRqMc_uQFyogJjBIJr0aJqU2hVR1Wzlw02hiEB2Z2ObtVqT8TjS3An_DPYQcz18EGyVE_DQ_VAgMET3xlANZSADM1YO58aCgYKAaYSARESFQHGX2MiILfbqpEh0dgLNorL1lvmug0174\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZD3s3w_jGcfIljb-YyzXOpr0bJ0zHO8jMIckApbI0hSBFXPcjywqzsghWSVwW2vNYOFU5KW1Y0SevWJv6qdqSkAj--bilduzpTEAisNsy45Ai9qVUQERpC8mxOWxFsXswfzKylxVlqIWgCMbUXIbWrtWkdmi-LPVNe56p4aCgYKAckSARESFQHGX2MihtuQ8ShbRfFcBUdvKlc8TA0178&accessTokenCreationTime=1731461581110\n" ] }, { @@ -494,7 +469,7 @@ " " + "" ] }, "metadata": {}, @@ -511,7 +486,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "61cdbd4b0ba74fd3a23510d1b5e3c24e", + "model_id": "79ede6bd57864f039bcab1a231cd4774", "version_major": 2, "version_minor": 0 }, @@ -519,7 +494,7 @@ "Map(center=[40.64356771453405, -111.92926447956665], controls=(WidgetControl(options=['position', 'transparent…" ] }, - "execution_count": 8, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -587,7 +562,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -633,7 +608,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AXooCguej_AkK295bC8_WXVH1oBx6imTvMTr0fi635pjMVgupD35Bq_1bdnn2zadU2bK-NnYU0CsiI6qOXRhbY7NvN1JZQpkfZI2pMnwF5q-yHN76fAL_Tn9TgaeJK916yBXDkQdB-1dKdNWJCfuGMIrp8j_0hGv-oTHVU4aCgYKAagSARESFQHGX2Mi4kPnsreTbkT_JrnUIGPU5g0174\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZCmcfUFilw2qyHmXLcFQFN9G5LYngkTOU6MzELQudJw4MqiiYnf3ZrrJR2JHwc2XvMhrn8xjfsMjmvtaZwNhvfYP7eEEtCRz8Cy87AYaeqdjILC3n9LbOF3peYIv9bWm9LOP3WT_BwTS0cqeSIlTrKubynjMVwoeXFS5S0aCgYKAUwSARESFQHGX2MiBEMf82fGFDIITfZ1DJd_1A0178&accessTokenCreationTime=1731461647526\n" ] }, { @@ -643,7 +618,7 @@ " " + "" ] }, "metadata": {}, @@ -660,7 +635,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1e89a15319a1410bac0f1291725bca66", + "model_id": "84139d794e134da89b04bc2d8d2b1a4a", "version_major": 2, "version_minor": 0 }, @@ -668,7 +643,7 @@ "Map(center=[0, 0], controls=(WidgetControl(options=['position', 'transparent_bg'], widget=SearchDataGUI(childr…" ] }, - "execution_count": 11, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -714,7 +689,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -760,7 +735,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AXooCgvnIz-x3wPxqxNi2bR0QTnSijQwQYf9gP3Jn0fNBA5AnKN96ClZuhPQtqJeU3MlbSTnjU1MjuZcItAPtYg-K3jFtJzMVrrK-r32ztC_4GfNW-Qh6PYnlKazCHTpnv1lpqHEoFq50DD79x7oMRRbQV65PDT6op4i_jIaCgYKAbgSARESFQHGX2MiUVMBX4xesivi5u_FIcn9sQ0174\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZAGMiGUPgw2NrmnwxzzFx8VTX-BPJQ-_J4Z-QdTQyhGaWpeuS7bIMy1rWghjTRgyFm3Xl2uzVw2zsWNqhM8VG3SK3VhigV9c_8VqTsGGYzUxsGfgfK83BU7xy5ND2pugqZ2_LrFL8PlYhLkWAwfCw2BP12UktKKrezbeCMaCgYKAd8SARESFQHGX2Mi_2WMF2oIqf5cPedmM9ZTkQ0178&accessTokenCreationTime=1731461667454\n" ] }, { @@ -770,7 +745,7 @@ " " + "" ] }, "metadata": {}, @@ -787,7 +762,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "4f0171640169413983cc7f22b54b1510", + "model_id": "93db9cb912934eb58f5d50b98066c851", "version_major": 2, "version_minor": 0 }, @@ -795,7 +770,7 @@ "Map(center=[46.529, 6.746], controls=(WidgetControl(options=['position', 'transparent_bg'], widget=SearchDataG…" ] }, - "execution_count": 12, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -858,7 +833,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -901,8 +876,47 @@ "text": [ "Adding layer: Switzerland\n", "Starting webmap\n", - "Using default refresh token for geeView\n" + "Using default refresh token for geeView\n", + "Local web server at: http://localhost:8001/geeView/ already serving.\n", + "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZBB-cdTrE44xvI5cOkjSnSGbICt_KDKOJiAjB2D86DDD4-zGJaAg7oEIRdOQI_fzMX7VhSa0R2DsJm7OaEO7vlhcTvVot1KiGfXqCgIyp4KWzUrB_fSzuN_MbGZfRzBoYDO7kNj8eWPkiy2Ndbl2TWYxfpg54jj0XROCnoaCgYKASASARESFQHGX2MiIQ2guJPQlUheLfUHwt2wBA0178&accessTokenCreationTime=1731461699271\n" ] + }, + { + "data": { + "text/html": [ + "\n", + " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "98babdd061464936bf00d2180d408f3d", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Map(center=[0, 0], controls=(WidgetControl(options=['position', 'transparent_bg'], widget=SearchDataGUI(childr…" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ @@ -921,13 +935,6 @@ "gvMap.view()\n", "gmMap" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { diff --git a/docs/source/notebooks/getLandsatWrapperNotebook.ipynb b/docs/source/notebooks/getLandsatWrapperNotebook.ipynb index 26d7a1e..02c5690 100644 --- a/docs/source/notebooks/getLandsatWrapperNotebook.ipynb +++ b/docs/source/notebooks/getLandsatWrapperNotebook.ipynb @@ -24,8 +24,8 @@ "See the License for the specific language governing permissions and\n", "limitations under the License.\n", "\n", - "\n", - "

    \"Open

    " + "[![github](https://img.shields.io/badge/-see%20sources-white?logo=github&labelColor=555)](https://github.com/gee-community/geeviz/blob/master/examples/getLandsatWrapperNotebook.ipynb) \n", + "[![github](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/gee-community/geeViz/blob/master/examples/getLandsatWrapperNotebook.ipynb)" ] }, { @@ -97,36 +97,23 @@ "Applying scale factors for C2 L7 data\n", "Applying scale factors for C2 L9 data\n", "Applying Fmask Cloud Mask\n", - "Applying Fmask Shadow Mask\n", - "Adding layer: Default Params 2009 153-152\n", - "Type: Image geeImage\n", - "Starting webmap\n", - "Using default refresh token for geeView\n", - "Local web server at: http://localhost:8001/geeView/ already serving.\n", - "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AXooCgu8EUNhnVn0a7J3kojB9X0Xzzg_L0wQ_9vf3gO85uG1xXah7x1f4h1ZOkwLHZfFf6osd7BJKZmL3FKOjlQ-lkED4Pa8u3pfpMI4pPBR7KdrZI16NOS0KXA8znCkFv3pqSr5qDHoCbnKgSVjrjXuiInj5u744-aV2DsaCgYKARcSARESFQHGX2MiqeVeKwjjA8CVaHytQWVyGA0174\n" + "Applying Fmask Shadow Mask\n" ] }, { - "data": { - "text/html": [ - "\n", - " \n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" + "ename": "TypeError", + "evalue": "Collection.count() missing 1 required positional argument: 'property'", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[1;32mIn[2], line 28\u001b[0m\n\u001b[0;32m 25\u001b[0m endYear \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m2009\u001b[39m\n\u001b[0;32m 27\u001b[0m \u001b[38;5;66;03m#Call on master wrapper function to get Landat scenes and composites\u001b[39;00m\n\u001b[1;32m---> 28\u001b[0m lsAndTs \u001b[38;5;241m=\u001b[39m \u001b[43mgetImagesLib\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgetLandsatWrapper\u001b[49m\u001b[43m(\u001b[49m\u001b[43mstudyArea\u001b[49m\u001b[43m,\u001b[49m\u001b[43mstartYear\u001b[49m\u001b[43m,\u001b[49m\u001b[43mendYear\u001b[49m\u001b[43m,\u001b[49m\u001b[43mstartJulian\u001b[49m\u001b[43m,\u001b[49m\u001b[43mendJulian\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 31\u001b[0m \u001b[38;5;66;03m#Separate into scenes and composites for subsequent analysis\u001b[39;00m\n\u001b[0;32m 32\u001b[0m processedScenes \u001b[38;5;241m=\u001b[39m lsAndTs[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mprocessedScenes\u001b[39m\u001b[38;5;124m'\u001b[39m]\n", + "File \u001b[1;32mc:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\geeViz\\getImagesLib.py:5432\u001b[0m, in \u001b[0;36mgetLandsatWrapper\u001b[1;34m(studyArea, startYear, endYear, startJulian, endJulian, timebuffer, weights, compositingMethod, toaOrSR, includeSLCOffL7, defringeL5, applyCloudScore, applyFmaskCloudMask, applyTDOM, applyFmaskCloudShadowMask, applyFmaskSnowMask, cloudScoreThresh, performCloudScoreOffset, cloudScorePctl, zScoreThresh, shadowSumThresh, contractPixels, dilatePixels, correctIllumination, correctScale, exportComposites, outputName, exportPathRoot, crs, transform, scale, resampleMethod, preComputedCloudScoreOffset, preComputedTDOMIRMean, preComputedTDOMIRStdDev, compositingReducer, harmonizeOLI, landsatCollectionVersion, overwrite, verbose)\u001b[0m\n\u001b[0;32m 5429\u001b[0m ls \u001b[38;5;241m=\u001b[39m ls\u001b[38;5;241m.\u001b[39mmap(\u001b[38;5;28;01mlambda\u001b[39;00m img: addZenithAzimuth(img, toaOrSR))\n\u001b[0;32m 5431\u001b[0m \u001b[38;5;66;03m# Create composite time series\u001b[39;00m\n\u001b[1;32m-> 5432\u001b[0m ts \u001b[38;5;241m=\u001b[39m \u001b[43mcompositeTimeSeries\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 5433\u001b[0m \u001b[43m \u001b[49m\u001b[43mls\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mls\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 5434\u001b[0m \u001b[43m \u001b[49m\u001b[43mstartYear\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstartYear\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 5435\u001b[0m \u001b[43m \u001b[49m\u001b[43mendYear\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mendYear\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 5436\u001b[0m \u001b[43m \u001b[49m\u001b[43mstartJulian\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstartJulian\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 5437\u001b[0m \u001b[43m \u001b[49m\u001b[43mendJulian\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mendJulian\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 5438\u001b[0m \u001b[43m \u001b[49m\u001b[43mtimebuffer\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtimebuffer\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 5439\u001b[0m \u001b[43m \u001b[49m\u001b[43mweights\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mweights\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 5440\u001b[0m \u001b[43m \u001b[49m\u001b[43mcompositingMethod\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcompositingMethod\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 5441\u001b[0m \u001b[43m \u001b[49m\u001b[43mcompositingReducer\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcompositingReducer\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 5442\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 5444\u001b[0m \u001b[38;5;66;03m# Correct illumination\u001b[39;00m\n\u001b[0;32m 5445\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m correctIllumination:\n", + "File \u001b[1;32mc:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\geeViz\\getImagesLib.py:4315\u001b[0m, in \u001b[0;36mcompositeTimeSeries\u001b[1;34m(ls, startYear, endYear, startJulian, endJulian, timebuffer, weights, compositingMethod, compositingReducer)\u001b[0m\n\u001b[0;32m 4300\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m composite\u001b[38;5;241m.\u001b[39mset(\n\u001b[0;32m 4301\u001b[0m {\n\u001b[0;32m 4302\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124msystem:time_start\u001b[39m\u001b[38;5;124m\"\u001b[39m: ee\u001b[38;5;241m.\u001b[39mDate\u001b[38;5;241m.\u001b[39mfromYMD(year \u001b[38;5;241m+\u001b[39m yearWithMajority, \u001b[38;5;241m6\u001b[39m, \u001b[38;5;241m1\u001b[39m)\u001b[38;5;241m.\u001b[39mmillis(),\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 4311\u001b[0m }\n\u001b[0;32m 4312\u001b[0m )\n\u001b[0;32m 4314\u001b[0m \u001b[38;5;66;03m# Iterate across each year\u001b[39;00m\n\u001b[1;32m-> 4315\u001b[0m ts \u001b[38;5;241m=\u001b[39m \u001b[43m[\u001b[49m\u001b[43myearCompositeGetter\u001b[49m\u001b[43m(\u001b[49m\u001b[43myr\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43myr\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mee\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mList\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msequence\u001b[49m\u001b[43m(\u001b[49m\u001b[43mstartYear\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m+\u001b[39;49m\u001b[43m \u001b[49m\u001b[43mtimebuffer\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mendYear\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m-\u001b[39;49m\u001b[43m \u001b[49m\u001b[43mtimebuffer\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgetInfo\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m]\u001b[49m\n\u001b[0;32m 4316\u001b[0m ts \u001b[38;5;241m=\u001b[39m ee\u001b[38;5;241m.\u001b[39mImageCollection(ts)\u001b[38;5;241m.\u001b[39mset(args)\n\u001b[0;32m 4318\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m ts\n", + "File \u001b[1;32mc:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\geeViz\\getImagesLib.py:4315\u001b[0m, in \u001b[0;36m\u001b[1;34m(.0)\u001b[0m\n\u001b[0;32m 4300\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m composite\u001b[38;5;241m.\u001b[39mset(\n\u001b[0;32m 4301\u001b[0m {\n\u001b[0;32m 4302\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124msystem:time_start\u001b[39m\u001b[38;5;124m\"\u001b[39m: ee\u001b[38;5;241m.\u001b[39mDate\u001b[38;5;241m.\u001b[39mfromYMD(year \u001b[38;5;241m+\u001b[39m yearWithMajority, \u001b[38;5;241m6\u001b[39m, \u001b[38;5;241m1\u001b[39m)\u001b[38;5;241m.\u001b[39mmillis(),\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 4311\u001b[0m }\n\u001b[0;32m 4312\u001b[0m )\n\u001b[0;32m 4314\u001b[0m \u001b[38;5;66;03m# Iterate across each year\u001b[39;00m\n\u001b[1;32m-> 4315\u001b[0m ts \u001b[38;5;241m=\u001b[39m [\u001b[43myearCompositeGetter\u001b[49m\u001b[43m(\u001b[49m\u001b[43myr\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;28;01mfor\u001b[39;00m yr \u001b[38;5;129;01min\u001b[39;00m ee\u001b[38;5;241m.\u001b[39mList\u001b[38;5;241m.\u001b[39msequence(startYear \u001b[38;5;241m+\u001b[39m timebuffer, endYear \u001b[38;5;241m-\u001b[39m timebuffer)\u001b[38;5;241m.\u001b[39mgetInfo()]\n\u001b[0;32m 4316\u001b[0m ts \u001b[38;5;241m=\u001b[39m ee\u001b[38;5;241m.\u001b[39mImageCollection(ts)\u001b[38;5;241m.\u001b[39mset(args)\n\u001b[0;32m 4318\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m ts\n", + "File \u001b[1;32mc:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\geeViz\\getImagesLib.py:4290\u001b[0m, in \u001b[0;36mcompositeTimeSeries..yearCompositeGetter\u001b[1;34m(year)\u001b[0m\n\u001b[0;32m 4287\u001b[0m images \u001b[38;5;241m=\u001b[39m yearsTT\u001b[38;5;241m.\u001b[39mmap(yrGetter)\n\u001b[0;32m 4288\u001b[0m lsT \u001b[38;5;241m=\u001b[39m ee\u001b[38;5;241m.\u001b[39mImageCollection(ee\u001b[38;5;241m.\u001b[39mFeatureCollection(images)\u001b[38;5;241m.\u001b[39mflatten())\n\u001b[1;32m-> 4290\u001b[0m count \u001b[38;5;241m=\u001b[39m \u001b[43mlsT\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mselect\u001b[49m\u001b[43m(\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcount\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241m.\u001b[39mrename([\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcompositeObsCount\u001b[39m\u001b[38;5;124m\"\u001b[39m])\n\u001b[0;32m 4291\u001b[0m \u001b[38;5;66;03m# Compute median or medoid or apply reducer\u001b[39;00m\n\u001b[0;32m 4292\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m compositingReducer \u001b[38;5;241m!=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m:\n", + "\u001b[1;31mTypeError\u001b[0m: Collection.count() missing 1 required positional argument: 'property'" + ] } ], "source": [ diff --git a/docs/source/notebooks/global_land_cover_example_notebook.ipynb b/docs/source/notebooks/global_land_cover_example_notebook.ipynb index 9610f59..32b5539 100644 --- a/docs/source/notebooks/global_land_cover_example_notebook.ipynb +++ b/docs/source/notebooks/global_land_cover_example_notebook.ipynb @@ -25,8 +25,8 @@ "See the License for the specific language governing permissions and\n", "limitations under the License.\n", "\n", - "\n", - "

    \"Open

    \n" + "[![github](https://img.shields.io/badge/-see%20sources-white?logo=github&labelColor=555)](https://github.com/gee-community/geeviz/blob/master/examples/global_land_cover_example_notebook.ipynb) \n", + "[![github](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/gee-community/geeViz/blob/master/examples/global_land_cover_example_notebook.ipynb)\n" ] }, { @@ -73,7 +73,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -86,9 +86,11 @@ "Adding layer: Global Land Cover\n", "Starting webmap\n", "Using default refresh token for geeView\n", - "Local web server at: http://localhost:8001/geeView/ already serving.\n", + "Starting local web server at: http://localhost:1234/geeView/\n", + "HTTP server command: \"c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\python.exe\" -m http.server 1234\n", + "Done\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612xNtUi9PBkOxPXO6EZtAgcREOeiqv4JgC8RmfDyFnrXNjLv1FMt4kgBjuTIl1x9b4Dzo8yV8PIuSkt6193mRc31AlnJ7_MGfEXOGUP-uXND6tDO92E96LFlMQgoRhFIfXCt_dWEpCQG_StIeP3tcVwResLi2v0tW7J2UcIaCgYKAR4SARESFQHGX2MiPYaA9vv1ECsOyDAsFlUDzw0178\n" + "geeView URL: http://localhost:1234/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612wnIGOy__UqV9zq2nxuSseeoEwZdKpMuR4btK_0Ps5wJx-X8976Sf6MgA9aex2xyowAjwM-Oa6-h89U6OIT9_qWTqDtVyKHWmGtqu6YXU4-S8EshRtcCN8PupmfWl39msYSqtw_s-wajAD2uY3eFyCFhU64UtJD9GFbHMAaCgYKAY8SARESFQHGX2Mi-S01HkxUVh5Sgp6EN7h1NA0178\n" ] }, { @@ -98,7 +100,7 @@ " " + "" ] }, "metadata": {}, @@ -115,7 +117,7 @@ ], "source": [ "Map.clearMap()\n", - "\n", + "Map.port = 1234\n", "# Specify projection to use for zonal summaries and map querying\n", "# Be sure to leave one of scale or transform as None\n", "crs= 'EPSG:4326'\n", diff --git a/docs/source/notebooks/lcmsViewerExampleNotebook.ipynb b/docs/source/notebooks/lcmsViewerExampleNotebook.ipynb index 2ebcddf..63430e9 100644 --- a/docs/source/notebooks/lcmsViewerExampleNotebook.ipynb +++ b/docs/source/notebooks/lcmsViewerExampleNotebook.ipynb @@ -7,26 +7,27 @@ "metadata": {}, "source": [ "# LCMS Viewer Intro Notebook\n", - "> * Based on https://github.com/google/earthengine-community/blob/master/datasets/scripts/LCMS_Visualization.js\n", - "> * Copyright 2024 The Google Earth Engine Community Authors\n", + "* Based on https://github.com/google/earthengine-community/blob/master/datasets/scripts/LCMS_Visualization.js\n", + "Copyright 2024 The Google Earth Engine Community Authors\n", " \t\n", - ">> * Licensed under the Apache License, Version 2.0 (the \"License\");\n", - ">> you may not use this file except in compliance with the License.\n", - ">> You may obtain a copy of the License at\n", - ">> https://www.apache.org/licenses/LICENSE-2.0\n", - ">> Unless required by applicable law or agreed to in writing, software\n", - ">> distributed under the License is distributed on an \"AS IS\" BASIS,\n", - ">> WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n", - ">> See the License for the specific language governing permissions and\n", - ">> limitations under the License.\n", + "Licensed under the Apache License, Version 2.0 (the \"License\");\n", + "you may not use this file except in compliance with the License.\n", + "You may obtain a copy of the License at\n", + "https://www.apache.org/licenses/LICENSE-2.0\n", + "Unless required by applicable law or agreed to in writing, software\n", + "distributed under the License is distributed on an \"AS IS\" BASIS,\n", + "WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n", + "See the License for the specific language governing permissions and\n", + "limitations under the License.\n", " \t\n", - ">> * Example script for visualizing LCMS change summaries, land cover, and land use.\n", - ">> * A more in-depth visualization of LCMS products is available at: [https://apps.fs.usda.gov/lcms-viewer/index.html](https://apps.fs.usda.gov/lcms-viewer/index.html) \n", - ">> * Contact sm.fs.lcms@usda.gov with any questions or specific data requests.\n", + "* Example script for visualizing LCMS change summaries, land cover, and land use.\n", + "* A more in-depth visualization of LCMS products is available at: [https://apps.fs.usda.gov/lcms-viewer/index.html](https://apps.fs.usda.gov/lcms-viewer/index.html) \n", + "* Contact sm.fs.lcms@usda.gov with any questions or specific data requests.\n", "\n", "\n", "\n", - "

    \"Open

    " + "[![github](https://img.shields.io/badge/-see%20sources-white?logo=github&labelColor=555)](https://github.com/gee-community/geeviz/blob/master/examples/lcmsViewerExampleNotebook.ipynb) \n", + "[![github](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/gee-community/geeViz/blob/master/examples/lcmsViewerExampleNotebook.ipynb)" ] }, { @@ -457,7 +458,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 11, "id": "f7b4824e", "metadata": {}, "outputs": [ @@ -466,11 +467,12 @@ "output_type": "stream", "text": [ "Adding layer: LCMS Change Time Lapse\n", + "Setting default query date format to: YYYY\n", "Starting webmap\n", "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=rcr-gee-2&accessToken=ya29.a0AfB_byBQwMDTqBKFllZQoa1bn5jPRXI0esx1cUuwXOzvbx-m_E327RkL0jDeU8DAGBhn1DZJM0awgBoTJW5L2X4oVycGZxD9fzORXakpgzOl9S2TJ0hgeWFF1-mytXLSUiGcZoG3XVyS4H5stTvugxvOLLPfcTNPA4Z6KJsEhu-GaCgYKAUASARASFQHGX2Mi7D0qnuquWaFbHJnW_oe2qw0179\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612wkLZ5nkrRefktkInWr4bG1xoFijDRm4zKqEkOSY5SlJkshjY8c8xPH0opFivgsSvpi-zs-EMn4cghA5Q9vvm7dszHkaSY2xuMWT94ACWv_8wy0D-nhVOi29Oo5fQ5wmHrYHpnRzBiH6SF3RyS-9rr7i3VwptGM3yc1aokaCgYKAUQSARESFQHGX2MiEKkp7i2adXQeQErg-zELAw0178\n" ] }, { @@ -480,7 +482,7 @@ " " + "" ] }, "metadata": {}, diff --git a/docs/source/notebooks/mapBiomasViewerExampleNotebook.ipynb b/docs/source/notebooks/mapBiomasViewerExampleNotebook.ipynb index a55b8b3..4813496 100644 --- a/docs/source/notebooks/mapBiomasViewerExampleNotebook.ipynb +++ b/docs/source/notebooks/mapBiomasViewerExampleNotebook.ipynb @@ -25,8 +25,8 @@ "See the License for the specific language governing permissions and\n", "limitations under the License.\n", "\n", - "\n", - "

    \"Open

    " + "[![github](https://img.shields.io/badge/-see%20sources-white?logo=github&labelColor=555)](https://github.com/gee-community/geeviz/blob/master/examples/mapBiomasViewerExampleNotebook.ipynb) \n", + "[![github](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/gee-community/geeViz/blob/master/examples/mapBiomasViewerExampleNotebook.ipynb)" ] }, { @@ -40,7 +40,20 @@ "text": [ "Initializing GEE\n", "Cached project id file path: C:\\Users\\ihousman\\.config\\earthengine\\credentials.proj_id\n", - "Cached project id: lcms-292214\n", + "Cached project id: lcms-292214\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "*** Earth Engine *** Share your feedback by taking our Annual Developer Satisfaction Survey: https://google.qualtrics.com/jfe/form/SV_0JLhFqfSY1uiEaW?source=Init\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Successfully initialized\n", "geeViz package folder: c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\geeViz\n", "done\n" @@ -90,11 +103,9 @@ "Adding layer: MapBiomas LULC\n", "Starting webmap\n", "Using default refresh token for geeView\n", - "Starting local web server at: http://localhost:8001/geeView/\n", - "HTTP server command: \"c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\python.exe\" -m http.server 8001\n", - "Done\n", + "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612y8ZlxJh5tseR6SiuPocMyKlrXzdf5Qzq6KskwfbOwHa9ww08rwL0Q9wsBAwJHaujzpYpbWXBllmZn3SqjX3NAcrHHXy__zLsaAhNNgwiJecXOI9aURNb1ecAngWo_H1O6r5JnMs0dNrcVvPVHtPO9iLCNSpNwoxLwFnk8aCgYKAX8SARESFQHGX2Midtno9Bis8gZowS0Gh0zjmw0178\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZBoV6RTt-kTHktaitp6cLCRopannvKr9B7F9QimHl9HpH7bQSlKU53sXETcKcw5F5qayQER5a-NS3bhiUocGlPCAoK0T4OH6kON4zdkFLv-ZFMB3-S0Hl34cOsGuljb25SUEJoSZ09ieUHPNmSPqKCvGV0V8dVSB4myMtwaCgYKATsSARESFQHGX2MiBg28W2WOQErk15VfYCK2tQ0178&accessTokenCreationTime=1732571109268\n" ] }, { @@ -104,7 +115,7 @@ " " + "" ] }, "metadata": {}, diff --git a/examples/CCDCVizNotebook.ipynb b/examples/CCDCVizNotebook.ipynb index 46815e8..b066aac 100644 --- a/examples/CCDCVizNotebook.ipynb +++ b/examples/CCDCVizNotebook.ipynb @@ -29,7 +29,8 @@ " See the License for the specific language governing permissions and\n", " limitations under the License.\n", "\n", - "

    \"Open

    \n" + "[![github](https://img.shields.io/badge/-see%20sources-white?logo=github&labelColor=555)](https://github.com/gee-community/geeviz/blob/master/examples/CCDCVizNotebook.ipynb) \n", + "[![github](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/gee-community/geeViz/blob/master/examples/CCDCVizNotebook.ipynb)" ] }, { diff --git a/examples/__init__.py b/examples/__init__.py index aa1ff15..0ab2c3e 100644 --- a/examples/__init__.py +++ b/examples/__init__.py @@ -21,4 +21,4 @@ __email__ = "ian.housman@gmail.com" # Version format yyyy.m.n -__version__ = "2024.11.2" +__version__ = "2024.11.3" diff --git a/examples/areaChart_examples.ipynb b/examples/areaChart_examples.ipynb index 4406b86..3e788ed 100644 --- a/examples/areaChart_examples.ipynb +++ b/examples/areaChart_examples.ipynb @@ -26,24 +26,19 @@ "See the License for the specific language governing permissions and\n", "limitations under the License.\n", "\n", - "\n", - "

    \"Open

    \n" + "[![github](https://img.shields.io/badge/-see%20sources-white?logo=github&labelColor=555)](https://github.com/gee-community/geeviz/blob/master/examples/areaChart_examples.ipynb) \n", + "[![github](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/gee-community/geeViz/blob/master/examples/areaChart_examples.ipynb)" ] }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Initializing GEE\n", - "Cached project id file path: C:\\Users\\ihousman\\.config\\earthengine\\credentials.proj_id\n", - "Cached project id: lcms-292214\n", - "Successfully initialized\n", - "geeViz package folder: c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\geeViz\n", "done\n" ] } @@ -77,7 +72,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, "metadata": {}, "outputs": [ { @@ -560,6 +555,164 @@ }, "metadata": {}, "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Shortened NLCD class names:\n", + "landcover\n" + ] + }, + { + "data": { + "text/html": [ + "
    \n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    ValuesNamesColors
    011Open water466b9f
    112Perennial ice/snowd1def8
    221Developed, open spacedec5c5
    322Developed, low intensityd99282
    423Developed, medium intensityeb0000
    524Developed high intensityab0000
    631Barren land (rock/sand/clay)b3ac9f
    741Deciduous forest68ab5f
    842Evergreen forest1c5f2c
    943Mixed forestb5c58f
    1052Shrub/scrubccb879
    1171Grassland/herbaceousdfdfc2
    1281Pasture/haydcd939
    1382Cultivated cropsab6c28
    1490Woody wetlandsb8d9eb
    1595Emergent herbaceous wetlands6c9fb8
    \n", + "
    " + ], + "text/plain": [ + " Values Names Colors\n", + "0 11 Open water 466b9f\n", + "1 12 Perennial ice/snow d1def8\n", + "2 21 Developed, open space dec5c5\n", + "3 22 Developed, low intensity d99282\n", + "4 23 Developed, medium intensity eb0000\n", + "5 24 Developed high intensity ab0000\n", + "6 31 Barren land (rock/sand/clay) b3ac9f\n", + "7 41 Deciduous forest 68ab5f\n", + "8 42 Evergreen forest 1c5f2c\n", + "9 43 Mixed forest b5c58f\n", + "10 52 Shrub/scrub ccb879\n", + "11 71 Grassland/herbaceous dfdfc2\n", + "12 81 Pasture/hay dcd939\n", + "13 82 Cultivated crops ab6c28\n", + "14 90 Woody wetlands b8d9eb\n", + "15 95 Emergent herbaceous wetlands 6c9fb8" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ @@ -582,11 +735,23 @@ "lcms_props = lcms.first().toDictionary().getInfo()\n", "nlcd_props = nlcd.first().toDictionary().getInfo()\n", "\n", + "\n", "lcms_thematic_bandNames = lcms.select(['Change','Land_Cover','Land_Use']).first().bandNames().getInfo()\n", "\n", "nlcd_landcover_bandNames = ['landcover']\n", + "\n", "get_props_dataFrames(lcms_props,lcms_thematic_bandNames)\n", - "get_props_dataFrames(nlcd_props,nlcd_landcover_bandNames)" + "get_props_dataFrames(nlcd_props,nlcd_landcover_bandNames)\n", + "\n", + "\n", + "# Shorten NLCD class names for later use\n", + "nlcd_class_names_key = f'{nlcd_landcover_bandNames[0]}_class_names'\n", + "nlcd_class_names_shortened = [nm.split(':')[0] for nm in nlcd_props[nlcd_class_names_key]]\n", + "nlcd_props_shortened_names = nlcd_props\n", + "nlcd_props_shortened_names[nlcd_class_names_key] = nlcd_class_names_shortened\n", + "\n", + "print('Shortened NLCD class names:')\n", + "get_props_dataFrames(nlcd_props_shortened_names,nlcd_landcover_bandNames)" ] }, { @@ -606,7 +771,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -616,32 +781,8 @@ "Adding layer: LCMS Land Cover\n", "Adding layer: NLCD Land Cover\n", "Starting webmap\n", - "Using default refresh token for geeView\n", - "Local web server at: http://localhost:8001/geeView/ already serving.\n", - "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZCy74lFqH2vRSdWO9AxdxhsWLoXMyaXKztQ6KCGiMsZtDbVRqjjy3sVc_QHU5SYzbIoRtbDGoSYdacixwNzYHFisGaIYahCPHGrVTl_DyFOMtEgR6jIPu9eyBSuapjLr2z8eQ24tJrFO9W4_1yUNBIoOIPyfp-M1MTIQcsaCgYKAXgSARESFQHGX2MiiJf-wwurrDTgOcGV0IBG3g0178\n" + "Using default refresh token for geeView\n" ] - }, - { - "data": { - "text/html": [ - "\n", - " \n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" } ], "source": [ @@ -674,7 +815,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -688,7 +829,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZAPJGhuHoXMi1_W2i7it9dBch7wHfEjM6luJgaT0hfxJUKzbbdZ2_w4uoF_FPptBoPWxaP2L6gf16U9kMJnNusrnWOLiIi8ywHi7k1FP1v5vwI2Eju0GUCV1xlO5eYFGYuUGNEhEG3NwtVRCTUcHd1ROQkJ5rfx6XdNzUoaCgYKAbsSARESFQHGX2MiUTznMNdubA5F5YD9d4aV_Q0178\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZBRE9mjI7Tbvn12JUdNHWBcQvnRwFG-hP61lUO5NJ1i3hUF5MWklT1YsQ2O8JTPO_c9dknJ4tLo2b1iWUDX3YpRH9D_GxcBzfpEkOKxbtzwZD_WgsZ2X5yrxgRqXDSdCClmIPTT7vOM7PivC2CznkBAOmJWgtu42xYKMiAaCgYKATwSARESFQHGX2MiL_SKbyR4o1MbYfhrP8JMSw0178&accessTokenCreationTime=1732072086594\n" ] }, { @@ -698,7 +839,7 @@ " " + "" ] }, "metadata": {}, @@ -740,7 +881,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -754,7 +895,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZDaLFoiiGYiKvmGmH1tBTNzNtGwr5C2QA0aCSuaV7mt_yuBytef5AZ2wU8H3IxgBZOA0Q2hkK33PTAxOp5vZ8Dvr912cdV3igxxnPLW76O1mfM0Viw_6BAB9q1ImB6BZEoOY5Cvwj2zNxC_Emn6PUmsWmcFITd5YQynpyEaCgYKAcUSARESFQHGX2MikAxeure5i3ICBvmn8fhBew0178\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZCo6B7_61baBesuftX5imkCdbgjQ2cDhjfWwwxSln0lW_f7XfITgdSiXVr6J7_lAz_6b7EQ-Xe5TCpBXK4RUjicQGwh4rMOMReEYDZDmspR_UGbQyOcAv_d-F5vjiBfmKeFx-2ZO5E0GXkaW1-vaCjXC5uORbQQR6X_rmQaCgYKAVwSARESFQHGX2MitF33sKGsJctQg4HvPM9Rsg0178&accessTokenCreationTime=1732072108233\n" ] }, { @@ -764,7 +905,7 @@ " " + "" ] }, "metadata": {}, @@ -805,12 +946,12 @@ "\n", "* Note that the dictionary of parameters is more or less the same as what you would put in the `\"areaChartParams\"` if you were to use the `Map.addLayer` method. \n", "\n", - "* Note that while multi thematic band image collections can be charted in a single line chart, sankey charts can only support one band per chart. If a multi thematic band image collection is given with `\"sankey\":True`, separate sankey charts will be created for each band." + "* Note that while multi thematic band image collections can be charted in a single line chart, sankey charts can only support one band per chart. If a multi thematic band image collection is given with `\"sankey\":True` (as is the case in this example), separate sankey charts will be created for each band." ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -824,7 +965,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZA8sI8DEEcCRJIs9FfoFoDJPukpaeamD89f0q2qh9SM_i0-7OSQruSG8jXHkvH4_UzUyD1pOZ-cwZZlwFHy8twKhstWc0Oo5orG_TRwL1wC6xEHv737Xro4b7CykJuiBR168Ej_uWJ5JPGwCN1NlV6Qtt-wfYXBOusJEpUaCgYKAdUSARESFQHGX2MiyzjFyNwf2q3kecg_F-rFvg0178\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZCjAoKLilGLZF5wIObir1p6XAIWJM6jMrodG8zcJg1jJ3GzF-yy8r7fbwHqpEcYQ5BC1P_unmAqFIY7hIVAU3CpkOzxnGMZkXx-ff3VoP2Tc2U4xdc3bq4Z9kKrw1dXI-iVO0V2p-DBHnOb5iUzgsp93zCB3IoXLA7IkTIaCgYKASMSARESFQHGX2MiCMKkLZs77Opz9_0uA6Jqig0178&accessTokenCreationTime=1732168152111\n" ] }, { @@ -834,7 +975,7 @@ " " + "" ] }, "metadata": {}, @@ -870,13 +1011,13 @@ "source": [ "## Charting Non-Thematic Data\n", "\n", - "* You can chart continuous data as well. By default, a `ee.Reducer.mean()` will be used. You can use any reducer that returns a single value per image-band (e.g. `ee.Reducer.min()`, `ee.Reducer.max()`, `ee.Reducer.stdDev()` and not `ee.Reducer.percentile([0,50,100])`). \n", + "* You can chart continuous data as well. By default, a `ee.Reducer.mean()` will be used. You can use any reducer that returns a single value per image-band (e.g. `ee.Reducer.min()`, `ee.Reducer.max()`, `ee.Reducer.stdDev()`, `ee.Reducer.mode()`, and not `ee.Reducer.percentile([0,50,100])`). \n", "\n", "* You can specify this using `\"areaChartParams\":{\"reducer\":ee.Reducer.mean()}`\n", "\n", "* Optionally, you can provide a color palette to be used. Each band will be assigned to a color in the order given\n", "\n", - "* Notice in the example, the reducer for what is shown on the map is different from the zonal summary reducer. In this example, on the map the standard deviation of the probability is shown, while the average over the area is shown in the chart. " + "* Notice in the example, the reducer for what is shown on the map is different from the zonal summary reducer. In this example, on the map the standard deviation of the probability is shown to highlight likely change, while the average over the area is shown in the chart since that is a more appropriate representation of probability over an area. " ] }, { @@ -893,7 +1034,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612zyBFmQok8DtUEIp6qTRiXotoUPt8cGbFU4lo03AGaFZCas1Rkx2xDfBF6PPbwyOINwzoURdXUiBcbgO9ytGZBJcvHJjScj3njRFMjUo2HWVeMjhno9wv6KVi0iRh8ZK1nwUM6CBqM9zZSImy4e7NmgDqKYZrEgs5oaCgYKAfQSARESFQHGX2MiejYkUh8WfWmkrq89M0l9Nw0174\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZDC-kEJjZ7ANFvwoBVoe0PN6iyoJgDoKDC45AZod0eypEh2wmKRloLs4mY0cK4UTwGQGzF5lAPoAfQfF1B-0YjmglkLQmwOAqofFJtdBfjLRX5B61yrowTSG_D0u83cds1oShCZRR18Wapnif7vIHzAJZk8Zm2USy6000oaCgYKAdMSARESFQHGX2Mij0Uo4T2Bl89g0qog8XH6Sw0178&accessTokenCreationTime=1732168277196\n" ] }, { @@ -903,7 +1044,7 @@ " " + "" ] }, "metadata": {}, @@ -937,13 +1078,13 @@ "\n", "* You can also chart images\n", "* It will behave in a similar fashion to imageCollections, but will show a bar chart\n", - "\n", + "* Placing names for bar charts can be challenging if the names are very long. geeViz will automatically change the bar chart to be a horizontal bar chart if long names are detected. This still does not ensure the bar charts are readable (as is the case in this example). Shortening class names is the easiest method to address this issue (shown by splitting the full NLCD landcover name with `:` and take the first part earlier in this notebook).\n", "* If using `\"autoViz\":True`, be sure to copy the `_class_` properties back in\n" ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -954,11 +1095,12 @@ "Adding layer: LCMS Land Cover Mode\n", "Adding layer: NLCD Land Cover\n", "Adding layer: NLCD Land Cover Mode\n", + "Adding layer: NLCD Land Cover Mode Shortened Names\n", "Starting webmap\n", "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612zola-FBl5vKB_hlCop1HfVJDqwFITDhbElU4cFuh0EAS0vneY95qkqt4EnuQsh5Ai7RIzWPvztjtaaESDRhZwMRM-096h5-EbbMtN_Fh1tXfwbqbJpAvVcHnoBmjHwIUr3maRrmOZgIKdBj07FytPEc548YQtVRT1BwNAaCgYKARwSARESFQHGX2MiVR4GgV1QjHvlavabzx0A1w0178\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZAYSRUVZEF7tD-uK6Zn-LCX2EMMf-R2VGKJu9WdAnWqeFNsxq2H9j8atAF7Cgu_1ISo0BaCA3RhHvOuKBVw6YK_DTXlSllbYjTie86dZHcp8w7QwXmPcwuaDieNGZVtAUDv3RV6dQ5ZIodg3F_bbcbIMN8HqXAryuqDPwgaCgYKAesSARESFQHGX2MiT8b83hyJMzIqna_6JYRXdQ0178&accessTokenCreationTime=1732169429393\n" ] }, { @@ -968,7 +1110,7 @@ " " + "" ] }, "metadata": {}, @@ -993,6 +1135,10 @@ "Map.addLayer(nlcd.select(['landcover']),{'autoViz':True,'canAreaChart':True},'NLCD Land Cover')\n", "Map.addLayer(nlcd.select(['landcover']).mode().set(nlcd.first().toDictionary()),{'autoViz':True,'canAreaChart':True},'NLCD Land Cover Mode')\n", "\n", + "# Use the shortened class names to clean up chart\n", + "Map.addLayer(nlcd.select(['landcover']).mode().set(nlcd_props_shortened_names),{'autoViz':True,'canAreaChart':True},'NLCD Land Cover Mode Shortened Names')\n", + "\n", + "\n", "\n", "\n", "\n", @@ -1011,7 +1157,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 10, "metadata": {}, "outputs": [ { @@ -1023,7 +1169,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612xsvPX5BWXka2IKux0xyyC3pEN5X_bCjc9Abyt_QnoMxh0Tt3UKrIH4ZmqL7dsll6n3Zh4j55OApJLdFSFgC6zgz59th25UPnIDG-dUbvscsngSoX5Dd7kyf6cm1RAzRxnkG0KCwmtpKTWqMohMFz8sADGkdmojFV0aCgYKAVUSARESFQHGX2Mi7EieXAoH_HzjzIAyP0KgYQ0174\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZB7X2qwuIOOEJXfmqKh4BlhENGTSj4_Xp7uL99qXMtkt7l1RdiAFuQ-jTN5Ou_2RTBOZA8k247QT8eAnc3ED6ZCf4C8NpZrsG070oER4EapnJsM2mAU33AayTBsxMbfWQEwW-zz9TBzm7LllyrVjOTEdpxzQloFUGOgQc8aCgYKAZISARESFQHGX2MiBqtgdGfy6Z72iUD04QOyfw0178&accessTokenCreationTime=1732169453056\n" ] }, { @@ -1033,7 +1179,7 @@ " " + "" ] }, "metadata": {}, @@ -1086,7 +1232,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 11, "metadata": {}, "outputs": [ { @@ -1098,7 +1244,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612wnYtt-QFEIFqJvxv4tUzZcYEWRZkAv1oqt1OnIrtgzB7lI8Fiv-gDBo5Jm7kwppzNzx5KL8XRoYpN2aMTVzbQYWHUn6OD9yc6u6-3FCw_Ykc26-SFspZma_sjs-0V3OKWqFZsx0KCiuwz5cskNB83el1D24oGm2ZMaCgYKARQSARESFQHGX2Miyj7dkMOvk05oVvAXnq9xBw0174\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZDgfsjQNYd5rrgKWcv3pcdtv1txAnIJB2FSclFLx0D3XVfXW_4f9nzPNOkWNGajJehlLbpshY5r0DKJkOAISTKp7KzzqPEEcD_7ickDf6gCwaZeLWYZzrnhv2ipteslzEO2FhDzVG_S-1Clyr-ZUdKk_ePFBjX-90WzNyMaCgYKATQSARESFQHGX2Mix24C9Alq9W4HMEp1x9x6UQ0178&accessTokenCreationTime=1732169481988\n" ] }, { @@ -1108,7 +1254,7 @@ " " + "" ] }, "metadata": {}, @@ -1152,13 +1298,13 @@ "\n", "* You can chart thematic datasets that lack values, names, and palette properties by specifying the `ee.Reducer.frequencyHistogram()` as the reducer\n", "\n", - "* This is not the best method however\n", + "* This is not the best method however. Charts will lack descriptive class names and colors\n", "\n" ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 12, "metadata": {}, "outputs": [ { @@ -1170,7 +1316,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612wJKTBG90sE7YjOsGwKAT2Io1SgHDHujjFffA7UVFDdzD6ieoa1LRPSj3JE0Rr_EbjdhU-m_tOgjjzBG9_JdmjzTH0wV35j206vk4iET5lr4Ij7hzaXnNi6UsXr2Nx24JjWdXdVCVekeJ4uxVWX_Frrk2xx7k1ALut5UBUaCgYKAQkSARESFQHGX2MihFCE1dDZKNyehV8R3vhoxQ0178\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZDmawXDukWmO9oLKizTo6w7P9NlqXfKoaSIpzcAnlYGfgLMuBe34OfhIdC4T-bGS2FiEQpv42PPAgg3F1S8L5tTEZbWNnwCIheDSLkFekhdRunGkABnR_qx-2Z8J9NSmTr3pLc625m_vRcRl5c022VRG-mlVolIdq9qPqgaCgYKAV0SARESFQHGX2MiSeg0dJ97aOa4_Ib-smh2Ng0178&accessTokenCreationTime=1732169560625\n" ] }, { @@ -1180,7 +1326,7 @@ " " + "" ] }, "metadata": {}, @@ -1222,7 +1368,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 13, "metadata": {}, "outputs": [ { @@ -1234,7 +1380,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612wadT88_g9U59GK--fr1PF-tM6S-z-5cRPTW7qhCoO8BaezIKVSxtIfsaz2_tQt2DaSH5xKD2u-AKbY5vRznLUC92QBoKLerlwwL7OapgmO2fIcc8IjWpW3gDMMfU3szuY6ShHWj7HiFGAw_ARd_T4970y6zGHieyeL9N4aCgYKAYwSARESFQHGX2MiXVVic5V0ZDr0FPFtD2QLeA0178\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZBE3rUf41t3ynct3TmFS9goflI3KxzwcFtJSPVFhjP-3bciOy90PgBO4ljJoWWQbcjYKjicRJGLxNds9V5CJvKnYv2uM2iU1aOgKxZ36FvToD5ZzOW7ddz9-pIWwDg8u-fIcr3PD3sLW7fe3E6GQFk01PWS4tmTmhTaAl8aCgYKAdASARESFQHGX2MitHZij8OK-HBPFllpNUWadg0178&accessTokenCreationTime=1732169652439\n" ] }, { @@ -1244,7 +1390,7 @@ " " + "" ] }, "metadata": {}, @@ -1295,39 +1441,28 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 14, "metadata": {}, "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Adding layer: LCMS Change Comparison 2010\n", - "Adding layer: LCMS Land Cover Comparison 2010\n", - "Adding layer: LCMS Land Use Comparison 2010\n", - "Starting webmap\n", - "Using default refresh token for geeView\n" - ] - }, { "name": "stderr", "output_type": "stream", "text": [ - "c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\ee\\deprecation.py:202: DeprecationWarning: \n", + "c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\ee\\deprecation.py:207: DeprecationWarning: \n", "\n", "Attention required for USFS/GTAC/LCMS/v2020-5! You are using a deprecated asset.\n", "To ensure continued functionality, please update it.\n", "Learn more: https://developers.google.com/earth-engine/datasets/catalog/USFS_GTAC_LCMS_v2020-5\n", "\n", " warnings.warn(warning, category=DeprecationWarning)\n", - "c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\ee\\deprecation.py:202: DeprecationWarning: \n", + "c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\ee\\deprecation.py:207: DeprecationWarning: \n", "\n", "Attention required for USFS/GTAC/LCMS/v2021-7! You are using a deprecated asset.\n", "To ensure continued functionality, please update it.\n", "Learn more: https://developers.google.com/earth-engine/datasets/catalog/USFS_GTAC_LCMS_v2021-7\n", "\n", " warnings.warn(warning, category=DeprecationWarning)\n", - "c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\ee\\deprecation.py:202: DeprecationWarning: \n", + "c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\ee\\deprecation.py:207: DeprecationWarning: \n", "\n", "Attention required for USFS/GTAC/LCMS/v2022-8! You are using a deprecated asset.\n", "To ensure continued functionality, please update it.\n", @@ -1340,9 +1475,14 @@ "name": "stdout", "output_type": "stream", "text": [ + "Adding layer: LCMS Change Comparison 2010\n", + "Adding layer: LCMS Land Cover Comparison 2010\n", + "Adding layer: LCMS Land Use Comparison 2010\n", + "Starting webmap\n", + "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612wPtKk_ePf9TnMwvoRhqeBo8KprojyyW3GVeKIwAu2XdlfaUTUzws7eZQUrIGyZ4wCS6wIjpw7sUV-eBsoj2z1SSl38d4RhPIEbaN6ZOP8hWAxv07-RMGdJX0o8U4mKiKp92DhI6wg9Lmfz20gZ6wRwHURCbZy2lEsaCgYKAaYSARESFQHGX2Mir_MkV5PgClO-NZQmHUOFbA0174\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZD6JxbWi078FtM79_BeIKn2hGPtQvOfSbTkG0tNDgKyzDTdA43Ddjf-zHPe9n3L4jdSwTrA3YO5vD_gwS680uHwVbMJ48YU4zGg4TDd0Uvwew3z_qq8I9GRK9cvh1YmiBv642eY5BhQqpve_ns98U93p5l8ztQS0sAvbggaCgYKARsSARESFQHGX2MiWzcQ5PhrEcBC3wtjWUcqkg0178&accessTokenCreationTime=1732169696345\n" ] }, { @@ -1352,7 +1492,7 @@ " " + "" ] }, "metadata": {}, @@ -1418,7 +1558,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 15, "metadata": {}, "outputs": [ { @@ -1433,7 +1573,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612wgw-djuuUntepLYybAxnaIqxMmFwimfSO5_f-ogEbOUoilTLwc6OseVxRi5qICNp7ekGXx89YwL_ssdQMnarafW5IePMFIBfBALE0QwlQyp58F6ciJeqf04GGg49Id-7qFKwx-m8qAzQRmsEUBQS9y_ZwgbhDtyh0aCgYKAdcSARESFQHGX2MiGY-MWDrEyrXenwTUktiPuw0174\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZBvafOCftFThE78i2zwWG34pYXzIRloRQ-qwsZ6O_Li22nUDmhYuvjQ252SF3npQhNR-Rjg4lInCL3TDlD3xvKgaHASqIX3MUSNFrXTlJZYkQ7tnPHY_NIFuoOAwgElS0AAvLVSnXifuaHQUgKKh77A04sLI_imBP_1yeUaCgYKAe8SARESFQHGX2Mi9nlpC9xjpq7pAmV7xBP8zg0178&accessTokenCreationTime=1732169830804\n" ] }, { @@ -1443,7 +1583,7 @@ " " + "" ] }, "metadata": {}, diff --git a/examples/dynamicWorldExampleNotebook.ipynb b/examples/dynamicWorldExampleNotebook.ipynb index a529d67..b944968 100644 --- a/examples/dynamicWorldExampleNotebook.ipynb +++ b/examples/dynamicWorldExampleNotebook.ipynb @@ -26,8 +26,8 @@ "See the License for the specific language governing permissions and\n", "limitations under the License.\n", "\n", - "\n", - "

    \"Open

    " + "[![github](https://img.shields.io/badge/-see%20sources-white?logo=github&labelColor=555)](https://github.com/gee-community/geeviz/blob/master/examples/dynamicWorldExampleNotebook.ipynb) \n", + "[![github](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/gee-community/geeViz/blob/master/examples/dynamicWorldExampleNotebook.ipynb)" ] }, { diff --git a/examples/gee2PandasExample.ipynb b/examples/gee2PandasExample.ipynb index 5c83996..0de341d 100644 --- a/examples/gee2PandasExample.ipynb +++ b/examples/gee2PandasExample.ipynb @@ -26,8 +26,8 @@ "* Use this module to go between local data and GEE for more general data science/statistical analysis\n", "\n", "\n", - "\n", - "

    \"Open

    " + "[![github](https://img.shields.io/badge/-see%20sources-white?logo=github&labelColor=555)](https://github.com/gee-community/geeviz/blob/master/examples/gee2PandasExample.ipynb) \n", + "[![github](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/gee-community/geeViz/blob/master/examples/gee2PandasExample.ipynb)" ] }, { @@ -44,11 +44,23 @@ "text": [ "Initializing GEE\n", "Cached project id file path: C:\\Users\\ihousman\\.config\\earthengine\\credentials.proj_id\n", - "Cached project id: rcr-gee-2\n", + "Cached project id: lcms-292214\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "*** Earth Engine *** Share your feedback by taking our Annual Developer Satisfaction Survey: https://google.qualtrics.com/jfe/form/SV_0JLhFqfSY1uiEaW?source=Init\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Successfully initialized\n", "geeViz package folder: c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\geeViz\n", "PyTables is not installed. No support for HDF output.\n", - "SQLalchemy is not installed. No support for SQL output.\n", "done\n" ] } @@ -89,13 +101,10 @@ "Get Processed Sentinel2: \n", "Start date: Jun 09 2021 , End date: Jul 08 2024\n", "Using S2 Collection: COPERNICUS/S2_HARMONIZED\n", - "Joining pre-computed cloud probabilities from: COPERNICUS/S2_CLOUD_PROBABILITY\n", + "Joining pre-computed cloudScore+ from: GOOGLE/CLOUD_SCORE_PLUS/V1/S2_HARMONIZED\n", "Setting to aggregate instead of resample \n", "Converting S2 data to daily mosaics\n", - "Applying Cloud Probability\n", - "Applying TDOM\n", - "Computing irMean for TDOM\n", - "Computing irStdDev for TDOM\n", + "Applying cloudScore+\n", "Adding layer: S2 Median 2023\n", "Adding layer: S2 Water 2023\n", "Adding layer: Water_Transition_2022-2023\n", @@ -103,11 +112,12 @@ "Adding layer: S2 Water 2022\n", "Adding layer: Study Area\n", "Starting webmap\n", - "Using default refresh token for geeView: C:\\Users\\ihousman/.config/earthengine/credentials\n", + "Using default refresh token for geeView\n", "Starting local web server at: http://localhost:1233/geeView/\n", "HTTP server command: \"c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\python.exe\" -m http.server 1233\n", "Done\n", - "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n" + "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", + "geeView URL: http://localhost:1233/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZC7rbMaygDhJcMEQ0u5_tqi4RCJz5duLi9eQYcy-Zzhz3T9dcmPOnEuD0NwEy27M9Wnr2GSc0ECMwXaMemmVP2iroa_MGOFvl4Jp5RU4pA_zrwQ4C3d28ntB0uOzARn-lg_onfuT40HjsqVZRaofbnYbto04qT8lqbp4P0aCgYKAQ0SARESFQHGX2MiU_0uj5D6U3SDTAv6wwgP7A0178&accessTokenCreationTime=1732565631149\n" ] }, { @@ -117,7 +127,7 @@ " " + "" ] }, "metadata": {}, @@ -170,7 +180,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 3, "id": "8daf03c9", "metadata": {}, "outputs": [ @@ -181,9 +191,10 @@ "Adding layer: Sample\n", "/tmp\\gee2Pandas_test_csv.csv already exists\n", "Starting webmap\n", - "Using default refresh token for geeView: C:\\Users\\ihousman/.config/earthengine/credentials\n", + "Using default refresh token for geeView\n", "Local web server at: http://localhost:1233/geeView/ already serving.\n", - "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n" + "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", + "geeView URL: http://localhost:1233/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZA_pdYBT8Da3RV0VuNIO82RcHCoJBkvgRzVPbMvNB7-Nymd8Z0PytK-lQbvzobDzcQ0mw8Gic89IlORedmyBcpl7W-V6L0lPtE-sX94emQUnKtxAr5IkIFinQiHPrJscFcVfvQ9jlO9DOwcmFTGAnWYk7QK6wcDXohDsIMaCgYKAYcSARESFQHGX2MiRPp-2OrqyFbvRcc9_zvJlg0178&accessTokenCreationTime=1732565635250\n" ] }, { @@ -193,7 +204,7 @@ " " + "" ] }, "metadata": {}, @@ -228,7 +239,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 4, "id": "e5ee4c87", "metadata": {}, "outputs": [ @@ -273,7 +284,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 9, "id": "a59a6afa", "metadata": {}, "outputs": [ @@ -283,9 +294,10 @@ "text": [ "Adding layer: Test Sample\n", "Starting webmap\n", - "Using default refresh token for geeView: C:\\Users\\ihousman/.config/earthengine/credentials\n", + "Using default refresh token for geeView\n", "Local web server at: http://localhost:1233/geeView/ already serving.\n", - "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n" + "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", + "geeView URL: http://localhost:1233/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZDuAuuThPvzPHAPlCNFGvzYQShuqqqN0i2vdB4dxVkn1LYXnb42sCaCBoboFD4-SYtRTg1kkmK-aWFKssUhmA-E9PQyXyR4Za3sVJnaEalIHtgYvLXkQ1DOYmFybz6cEMDntPVHLX30KagvUS0Kw0-aPPMUneuEG2gwJz0aCgYKATMSARESFQHGX2MiuDZhAcXWgIBJLVWdu6OINQ0178&accessTokenCreationTime=1732565803239\n" ] }, { @@ -295,7 +307,7 @@ " " + "" ] }, "metadata": {}, @@ -311,12 +323,10 @@ } ], "source": [ - "from importlib import reload\n", - "reload(g2p)\n", "# Now go from a local csv to a GEE featureCollection\n", "fc = g2p.tableToFeatureCollection(out_csv)\n", "Map.clearMap()\n", - "Map.addLayer(fc.map(lambda f:ee.Feature(f).buffer(10).bounds()),{},'Test Sample')\n", + "Map.addLayer(fc,{'styleParams':{'pointSize':2,'color':'0DF'}},'Test Sample')\n", "Map.turnOnInspector()\n", "Map.centerObject(fc)\n", "Map.view()" diff --git a/examples/geeViewExampleNotebook.ipynb b/examples/geeViewExampleNotebook.ipynb index 68b17f3..787e319 100644 --- a/examples/geeViewExampleNotebook.ipynb +++ b/examples/geeViewExampleNotebook.ipynb @@ -29,9 +29,8 @@ "See the License for the specific language governing permissions and\n", "limitations under the License.\n", "\n", - "\n", - "\n", - "

    \"Open

    \n", + "[![github](https://img.shields.io/badge/-see%20sources-white?logo=github&labelColor=555)](https://github.com/gee-community/geeviz/blob/master/examples/geeViewExampleNotebook.ipynb) \n", + "[![github](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/gee-community/geeViz/blob/master/examples/geeViewExampleNotebook.ipynb)\n", " " ] }, @@ -55,7 +54,20 @@ "text": [ "Initializing GEE\n", "Cached project id file path: C:\\Users\\ihousman\\.config\\earthengine\\credentials.proj_id\n", - "Cached project id: lcms-292214\n", + "Cached project id: lcms-292214\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "*** Earth Engine *** Share your feedback by taking our Annual Developer Satisfaction Survey: https://google.qualtrics.com/jfe/form/SV_0JLhFqfSY1uiEaW?source=Init\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Successfully initialized\n", "geeViz package folder: c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\geeViz\n", "done\n" @@ -97,11 +109,9 @@ "Adding layer: NLCD 2011 Landcover/Landuse\n", "Starting webmap\n", "Using default refresh token for geeView\n", - "Starting local web server at: http://localhost:8001/geeView/\n", - "HTTP server command: \"c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\python.exe\" -m http.server 8001\n", - "Done\n", + "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612xc9-pB9qAOEeavEwVZ1nkSwRtdLU5dMd8wyk1oOxGnL_QIQgk6EDhi2YDRdNmU3RI80bbYYBKFpXzZeoydg_BdMUmCHSVqlEF_U5Eyf_SnA3qr_O0qD96qBkRa9c0x_Jmw6TVI3ywf2H-x8cUSwCTpniqMNZFU5A7f8LMaCgYKAf8SARESFQHGX2MidqD7XysS4IRxaINI6W30BQ0178\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZC9ZMk9nE3alPEasRZHHuiqY9ioimY7gcSWjbR7C4CJ9eiKSJyGhiiF7OkJTdtJ6D6PcRWSTX1ZPnE1SgQsKdehpNOEMaFHJjpe-AG8DAKaqK2rFhx_8H_r47M2Sl5Sux95uFcCytus3cGehAIgJ0305osLh_eBpjAVq9waCgYKAXQSARESFQHGX2MiN1vvcKYW4oN6bshp7Owqdw0178&accessTokenCreationTime=1732564901727\n" ] }, { @@ -111,7 +121,7 @@ " " + "" ] }, "metadata": {}, @@ -159,7 +169,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 7, "id": "2670e5e4", "metadata": { "scrolled": false @@ -175,7 +185,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612wEB91PRlJ0ADBpVkUrAZMQd3WCbxcuhHMod3GOCG_5j94LaGpnzrrBY5RXg_n1FWPl52nQsscK_3wTnIAL-9euEDaGd72R1TDH-G0sDgrK-vutq1scvD0Xfm0icX_qRuVhU2l3T-OCwOjcZ5f6dOZXwBFUxSdG1PR1Ww4aCgYKAW8SARESFQHGX2Miy70Q2fyYSBm1U3jh1-kpNw0178\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZCdWbAp2YEv9OinAUuSbK8mjozVuITQXsLXww9NR_eSxgtWs-oCgfSQ0if6cygVUJ5K-9RKSMKUEhLcfmHUcsBrk4Sp73jOtg5ufkMA3rDwOeq-kfBO7ZzJ9iYtg8YO9CMPsGrJGsqfioRzr8vMjJlpl8hy3YvvMkrF-AwaCgYKAUMSARESFQHGX2MiaTjARdF2H_Ms2mb2DFeMHA0178&accessTokenCreationTime=1732565064272\n" ] }, { @@ -185,7 +195,7 @@ " " + "" ] }, "metadata": {}, @@ -207,11 +217,13 @@ "nlcd = nlcd.filter(ee.Filter.calendarRange(2000,2020,'year'))\n", "nlcd = nlcd.map(lambda img: img.set('bns',img.bandNames()))\n", "nlcd = nlcd.filter(ee.Filter.listContains('bns','landcover')).select(['landcover'])\n", - "Map.addLayer(nlcd.sort('system:time_start'),{'autoViz':True},'NLCD Landcover/Landuse Time Series',True)\n", + "\n", + "# Can optionally turn off class numbers in legend by setting 'includeClassValues':False,\n", + "Map.addLayer(nlcd.sort('system:time_start'),{'autoViz':True,'includeClassValues':False},'NLCD Landcover/Landuse Time Series',True)\n", "\n", "# Continuous data automatically have a legend added\n", "nlcd = ee.Image('USGS/NLCD_RELEASES/2016_REL/2016')\n", - "Map.addLayer(nlcd.select(['percent_tree_cover']),{'min':20,'max':80,'palette':'555,0A0','opacity':0.5},'NLCD 2016 TCC',True)\n", + "Map.addLayer(nlcd.select(['percent_tree_cover']),{'min':20,'max':80,'palette':'555,0A0','opacity':0.5,'legendLabelLeftAfter':'% TCC','legendLabelRightAfter':'% TCC'},'NLCD 2016 TCC',True)\n", "\n", "Map.turnOnInspector()\n", "Map.view()" @@ -227,7 +239,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 8, "id": "29550202", "metadata": { "scrolled": false @@ -242,7 +254,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612ymuGgajtw9S6mOC5GCfhqzRWaiDFM4Wo8EZddZ-IPoTvQekpl-PHtcL0Oc535OAFKzF50NXEDh6z51BKbk_zsmiLDpSsD1lSfhV7rwCp6incyDEh73_JeAKScEwLupBUGamXxLrsDoo1tDwM-5dfFE7YFluJxoRvJsEWUaCgYKAcYSARESFQHGX2MirzQTM9D85PpbatDl2KI9vQ0178\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZDEzWma5X5W-oHKCexM8jy1fvuNiDAgP07VHbMN6HHAjJktIgzS97_mpORIntBzrleDIqRW4mzlY45PV5hL00AmDEMPk0yYKTvqhDUQkGuAKtjC1IWCv8x9KXU9aAkyI_6tdjC_ZjbMbACiNbZPgzWW6Pfa4VRfX5uHIysaCgYKAdoSARESFQHGX2Mis6lGLlm0ts5y8AVhKmIzgg0178&accessTokenCreationTime=1732565082937\n" ] }, { @@ -252,7 +264,7 @@ " " + "" ] }, "metadata": {}, @@ -297,7 +309,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 9, "id": "bda0482c", "metadata": { "scrolled": true @@ -312,7 +324,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612xlIx2Z7GFTqGXH8dsTw0MkNgvq1rBKoPyvOsMMcDknha5xOGZuHnVp_GAzPOV3V6y5-XyTWNFtPKxGOzXOEQwJn24apigYHHO7F0Pi68AZdnJE036ggaWviIID4VdTcv9CoB3rxbrRtqqOXWa0a0ebgPmYsPDPBHen2mAaCgYKAd4SARESFQHGX2MiJOenyiWCugz0F-f9mbuCHA0178\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZBtu0k2gNpi4vy_3WTk89zD7TnCY2jV_58KR3dZBzuK9IC30vpVunkWSZoLtvydJWpP6appk3GvnXLjghoFmxOlrXf4RBBkj6dkogsVR1TqAHrzRUmnJDyEjpwncoI-AUYvO5x8V_icMITvLjZT5it08wDuVNS5y07tIscaCgYKAXkSARESFQHGX2MiPJSgbTMg-G5QabpMKuznNg0178&accessTokenCreationTime=1732565101648\n" ] }, { @@ -322,7 +334,7 @@ " " + "" ] }, "metadata": {}, @@ -358,7 +370,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 10, "id": "e3065817", "metadata": {}, "outputs": [ @@ -371,7 +383,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612xyu7yibHE0YwsGKTTjWjC8Uk7L7aof24L3ei935S0iOL9NAWU3uTAdMdwDkXhSRd0HMf83Axc1D3YZE1P3MYJKmA-upfpBPNjWAt1yzksKGra1-x-9to7S3NUSmTpzpFCRVoVDf_BdvJJqdtMCryh57Urg1uEZk-ZZj-8aCgYKAWoSARESFQHGX2MinnWH-GXb3lEYw3rJxhIskQ0178\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZAezqp01cIEOBoAqg2IyAX7siCvpDiVQ4TJDvPJooEZjhmH9MBnk8awa4ut9LS2gQrVDTwmqwkbWmIdU0VGrsW0ZUlgojuBHakihs4LRgVNnnzWTLaqdQGkEdmlo2FHWqRNOW_JHyDw6AvyI6OdglQopqn53aer93wfaS4aCgYKAQASARESFQHGX2Mi4CooIU_ziSIVWHXLJOUy0A0178&accessTokenCreationTime=1732565130682\n" ] }, { @@ -381,7 +393,7 @@ " " + "" ] }, "metadata": {}, @@ -417,24 +429,15 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 11, "id": "ed19b1f3", "metadata": {}, "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Adding layer: JRC Surface Water Time Series\n", - "Adding layer: JRC Surface Water Mode\n", - "Adding layer: JRC Surface Water Time Lapse\n" - ] - }, { "name": "stderr", "output_type": "stream", "text": [ - "c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\ee\\deprecation.py:202: DeprecationWarning: \n", + "c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\ee\\deprecation.py:207: DeprecationWarning: \n", "\n", "Attention required for JRC/GSW1_0/YearlyHistory! You are using a deprecated asset.\n", "To ensure continued functionality, please update it.\n", @@ -447,11 +450,14 @@ "name": "stdout", "output_type": "stream", "text": [ + "Adding layer: JRC Surface Water Time Series\n", + "Adding layer: JRC Surface Water Mode\n", + "Adding layer: JRC Surface Water Time Lapse\n", "Starting webmap\n", "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612yRwpwRBWQTUs2XVKhs1DlyDqoqJZIgeDDCCYmuXK-kQ-6wtKQ8bWed5F5Tw6tPvt50q0scd1AFM4Rgmu8ClNDjIc84N1zhl16h081AkdlPxxMqkChodrKxigDgSjxRR5ZNpFqiQ0bVhQb-juMerVorXEndD1IoR5OvK4kaCgYKAbYSARESFQHGX2Mib2iFAte1BTdjjB1u62k-6g0178\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZAlsuVMY4s0axMzoAGBFZnZSizbu-h175yGINMHpEhuMWniA9OD33KUXUISs376RMYK75_pp2b_JBw7M7G4VoeLjxS_je1EFmM7JS9H3saEhlD05NpN_W8RuRhAf9CZ4Jgm9ROrSqLI-QwUQSGo43THsCRWPfkIggX0veYaCgYKATYSARESFQHGX2Mi99zBRgnkVA3UetKqa0L6pQ0178&accessTokenCreationTime=1732565241221\n" ] }, { @@ -461,7 +467,7 @@ " " + "" ] }, "metadata": {}, diff --git a/examples/geeViewVSFoliumViewerExampleNotebook.ipynb b/examples/geeViewVSFoliumViewerExampleNotebook.ipynb index 1612fb1..ebd32bb 100644 --- a/examples/geeViewVSFoliumViewerExampleNotebook.ipynb +++ b/examples/geeViewVSFoliumViewerExampleNotebook.ipynb @@ -28,13 +28,13 @@ "\n", "\n", "\n", - "\n", - "

    \"Open

    " + "[![github](https://img.shields.io/badge/-see%20sources-white?logo=github&labelColor=555)](https://github.com/gee-community/geeviz/blob/master/examples/geeViewVSFoliumViewerExampleNotebook.ipynb) \n", + "[![github](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/gee-community/geeViz/blob/master/examples/geeViewVSFoliumViewerExampleNotebook.ipynb)" ] }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 4, "id": "b8e5dff6", "metadata": {}, "outputs": [ @@ -42,11 +42,6 @@ "name": "stdout", "output_type": "stream", "text": [ - "Initializing GEE\n", - "Cached project id file path: C:\\Users\\ihousman\\.config\\earthengine\\credentials.proj_id\n", - "Cached project id: rcr-gee-2\n", - "Successfully initialized\n", - "geeViz package folder: c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\geeViz\n", "done\n" ] } @@ -82,7 +77,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 7, "id": "145cfa94", "metadata": { "scrolled": false @@ -92,16 +87,6 @@ "name": "stdout", "output_type": "stream", "text": [ - "Get Processed Sentinel2: \n", - "Start date: Apr 30 2022 , End date: May 30 2023\n", - "Using S2 Collection: COPERNICUS/S2_HARMONIZED\n", - "Joining pre-computed cloud probabilities from: COPERNICUS/S2_CLOUD_PROBABILITY\n", - "Setting to aggregate instead of resample \n", - "Converting S2 data to daily mosaics\n", - "Applying Cloud Probability\n", - "Applying TDOM\n", - "Computing irMean for TDOM\n", - "Computing irStdDev for TDOM\n", "Adding layer: S2 Median 2023\n", "Adding layer: S2 Median 2023\n", "Adding layer: S2 Median 2022\n", @@ -140,7 +125,7 @@ " <meta name="viewport" content="width=device-width,\n", " initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />\n", " <style>\n", - " #map_e768368a64f4117a24c2ed1add335c09 {\n", + " #map_bf8cb17dfddc88eee0345b09539b65b3 {\n", " position: relative;\n", " width: 100.0%;\n", " height: 100.0%;\n", @@ -156,14 +141,14 @@ "<body>\n", " \n", " \n", - " <div class="folium-map" id="map_e768368a64f4117a24c2ed1add335c09" ></div>\n", + " <div class="folium-map" id="map_bf8cb17dfddc88eee0345b09539b65b3" ></div>\n", " \n", "</body>\n", "<script>\n", " \n", " \n", - " var map_e768368a64f4117a24c2ed1add335c09 = L.map(\n", - " "map_e768368a64f4117a24c2ed1add335c09",\n", + " var map_bf8cb17dfddc88eee0345b09539b65b3 = L.map(\n", + " "map_bf8cb17dfddc88eee0345b09539b65b3",\n", " {\n", " center: [0, 0],\n", " crs: L.CRS.EPSG3857,\n", @@ -177,77 +162,77 @@ "\n", " \n", " \n", - " var tile_layer_2eb064abc510a2009667247ec503744f = L.tileLayer(\n", + " var tile_layer_e9b894311852908103d312ac72a0f8d7 = L.tileLayer(\n", " "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",\n", " {"attribution": "Data by \\u0026copy; \\u003ca target=\\"_blank\\" href=\\"http://openstreetmap.org\\"\\u003eOpenStreetMap\\u003c/a\\u003e, under \\u003ca target=\\"_blank\\" href=\\"http://www.openstreetmap.org/copyright\\"\\u003eODbL\\u003c/a\\u003e.", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_e768368a64f4117a24c2ed1add335c09);\n", + " ).addTo(map_bf8cb17dfddc88eee0345b09539b65b3);\n", " \n", " \n", - " map_e768368a64f4117a24c2ed1add335c09.fitBounds(\n", + " map_bf8cb17dfddc88eee0345b09539b65b3.fitBounds(\n", " [[40.595571243156144, -113.21807278537877], [41.786028237932015, -111.82280911350377]],\n", " {}\n", " );\n", " \n", " \n", - " var tile_layer_318d20fe437657d8826935e48946a9fb = L.tileLayer(\n", + " var tile_layer_bf19b02e732ce46afa87ec069e125745 = L.tileLayer(\n", " "https://mt1.google.com/vt/lyrs=m\\u0026x={x}\\u0026y={y}\\u0026z={z}",\n", " {"attribution": "Google", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_e768368a64f4117a24c2ed1add335c09);\n", + " ).addTo(map_bf8cb17dfddc88eee0345b09539b65b3);\n", " \n", " \n", - " var tile_layer_d8931757b861f4e50b34bdf3c43f7e59 = L.tileLayer(\n", + " var tile_layer_a83e0b09797e18a74a9341b86aa5fa8a = L.tileLayer(\n", " "https://mt1.google.com/vt/lyrs=y\\u0026x={x}\\u0026y={y}\\u0026z={z}",\n", " {"attribution": "Google", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_e768368a64f4117a24c2ed1add335c09);\n", + " ).addTo(map_bf8cb17dfddc88eee0345b09539b65b3);\n", " \n", " \n", - " var tile_layer_5cc0597fd47030f70860adeb11a04e50 = L.tileLayer(\n", - " "https://earthengine.googleapis.com/v1/projects/rcr-gee-2/maps/878cd4cda12ea625edde2235b25ccfba-4e585685e228e19bfb2c776dfd5fae64/tiles/{z}/{x}/{y}",\n", + " var tile_layer_052abd9b5ca3dc5e0689f5a5defe60ca = L.tileLayer(\n", + " "https://earthengine.googleapis.com/v1/projects/lcms-292214/maps/8b65d3ca40b419c815211709b11bdf70-fd2bf96cfc74f2b85446bb1e06d78566/tiles/{z}/{x}/{y}",\n", " {"attribution": "Google Earth Engine | GeeViz", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_e768368a64f4117a24c2ed1add335c09);\n", + " ).addTo(map_bf8cb17dfddc88eee0345b09539b65b3);\n", " \n", " \n", - " var tile_layer_edf797cf5a88a31ffc210b741abf975f = L.tileLayer(\n", - " "https://earthengine.googleapis.com/v1/projects/rcr-gee-2/maps/e40754b26863dbda6eb4e72f817357eb-aeafa083ba9af0c84a9c23767962bd08/tiles/{z}/{x}/{y}",\n", + " var tile_layer_6657345b6a0e65189cd9f172d7597628 = L.tileLayer(\n", + " "https://earthengine.googleapis.com/v1/projects/lcms-292214/maps/cfe71c74fde98ae75ee307d9c2718d13-34e14d8c58292c547f605a95d208544a/tiles/{z}/{x}/{y}",\n", " {"attribution": "Google Earth Engine | GeeViz", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_e768368a64f4117a24c2ed1add335c09);\n", + " ).addTo(map_bf8cb17dfddc88eee0345b09539b65b3);\n", " \n", " \n", - " var tile_layer_7202c93b8a32531c6cf6e276253ba863 = L.tileLayer(\n", - " "https://earthengine.googleapis.com/v1/projects/rcr-gee-2/maps/1dd1ca8432e9c77788f5ff204934cb9a-c08173cfa4c18f3d94abda55b7f03d23/tiles/{z}/{x}/{y}",\n", + " var tile_layer_1b2bc15851267f89108ff72becc09d75 = L.tileLayer(\n", + " "https://earthengine.googleapis.com/v1/projects/lcms-292214/maps/1dd1ca8432e9c77788f5ff204934cb9a-b50be3c4da69498a104aad062c94b81e/tiles/{z}/{x}/{y}",\n", " {"attribution": "Google Earth Engine", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_e768368a64f4117a24c2ed1add335c09);\n", + " ).addTo(map_bf8cb17dfddc88eee0345b09539b65b3);\n", " \n", " \n", - " var layer_control_3e565ea03295a2c2eec652874e417314 = {\n", + " var layer_control_806d6bc00b08c811e7e6fdb6bd3f3a33 = {\n", " base_layers : {\n", - " "openstreetmap" : tile_layer_2eb064abc510a2009667247ec503744f,\n", + " "openstreetmap" : tile_layer_e9b894311852908103d312ac72a0f8d7,\n", " },\n", " overlays : {\n", - " "Google Maps" : tile_layer_318d20fe437657d8826935e48946a9fb,\n", - " "Google Satellite" : tile_layer_d8931757b861f4e50b34bdf3c43f7e59,\n", - " "S2 Median 2023" : tile_layer_5cc0597fd47030f70860adeb11a04e50,\n", - " "S2 Median 2022" : tile_layer_edf797cf5a88a31ffc210b741abf975f,\n", - " "Study Area" : tile_layer_7202c93b8a32531c6cf6e276253ba863,\n", + " "Google Maps" : tile_layer_bf19b02e732ce46afa87ec069e125745,\n", + " "Google Satellite" : tile_layer_a83e0b09797e18a74a9341b86aa5fa8a,\n", + " "S2 Median 2023" : tile_layer_052abd9b5ca3dc5e0689f5a5defe60ca,\n", + " "S2 Median 2022" : tile_layer_6657345b6a0e65189cd9f172d7597628,\n", + " "Study Area" : tile_layer_1b2bc15851267f89108ff72becc09d75,\n", " },\n", " };\n", " L.control.layers(\n", - " layer_control_3e565ea03295a2c2eec652874e417314.base_layers,\n", - " layer_control_3e565ea03295a2c2eec652874e417314.overlays,\n", + " layer_control_806d6bc00b08c811e7e6fdb6bd3f3a33.base_layers,\n", + " layer_control_806d6bc00b08c811e7e6fdb6bd3f3a33.overlays,\n", " {"autoZIndex": false, "collapsed": false, "position": "topright"}\n", - " ).addTo(map_e768368a64f4117a24c2ed1add335c09);\n", - " tile_layer_edf797cf5a88a31ffc210b741abf975f.remove();\n", + " ).addTo(map_bf8cb17dfddc88eee0345b09539b65b3);\n", + " tile_layer_6657345b6a0e65189cd9f172d7597628.remove();\n", " \n", " \n", " L.control.fullscreen(\n", " {"forceSeparateButton": false, "position": "topleft", "title": "Full Screen", "titleCancel": "Exit Full Screen"}\n", - " ).addTo(map_e768368a64f4117a24c2ed1add335c09);\n", + " ).addTo(map_bf8cb17dfddc88eee0345b09539b65b3);\n", " \n", "</script>\n", "</html>\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen>" ], "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -261,7 +246,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:1234/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:1234/geeView/?projectID=rcr-gee-2&accessToken=ya29.a0AfB_byCP8HcC-KgEexObCBH6V-INd3TohADawsSbQUkAJ6F2610Ejx0YrUgSRrX3Htj0SOzAQndyQJthWGIP64KMLPphHHVovwJkqBIS17C7dV9GCPnhXCLkek5cY-mtkGhxFVjOxcOIYhW9kvnuSE8zRaJkPf9gZn-QykRfPtqRaCgYKAc8SARASFQHGX2MiabXK25SWKqOKCKEVD2Xnlg0179\n" + "geeView URL: http://localhost:1234/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZDbcJ3L1DVXwA-_pCB34jAAAAZNhd7u9i06UHk43hWigYXc3K2oeDYmfRGm-sqiZPXijhaIPwbxQ8ihv0oedNanKny9oGmwSXPjmmpizVz5b6FBSbLqOuLK1kIPLu4v-gbrIry9cu6uJDmYcdS8IY_qOZHpByBppNRjWAkaCgYKATcSARESFQHGX2MiaLWkXlEAlSRFL1yHTKi7Ww0178&accessTokenCreationTime=1731636167610\n" ] }, { @@ -271,7 +256,7 @@ " " + "" ] }, "metadata": {}, "output_type": "display_data" - }, - { - "ename": "", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[1;31mThe Kernel crashed while executing code in the the current cell or a previous cell. Please review the code in the cell(s) to identify a possible cause of the failure. Click here for more info. View Jupyter log for further details." - ] } ], "source": [ + "foliumViewMap.clearMap()\n", + "geeViewMap.clearMap()\n", "# Bring in some S2 data\n", "studyArea = ee.Geometry.Polygon(\n", " [[[-113.21807278537877, 41.786028237932015],\n", @@ -303,13 +282,13 @@ " [-111.82280911350377, 41.786028237932015]]], None, False)\n", "\n", "# Get some example images to view\n", - "s2s = gil.getProcessedSentinel2Scenes(studyArea,2022,2023,120,150)\n", + "s2s = gil.superSimpleGetS2(studyArea,'2022-01-01','2023-12-31',120,150)\n", "postComposite = s2s.filter(ee.Filter.calendarRange(2023,2023,'year')).median()\n", - "foliumViewMap.addLayer(postComposite,gil.vizParamsFalse,'S2 Median 2023')\n", - "geeViewMap.addLayer(postComposite,gil.vizParamsFalse,'S2 Median 2023')\n", + "foliumViewMap.addLayer(postComposite,gil.vizParamsFalse10k,'S2 Median 2023')\n", + "geeViewMap.addLayer(postComposite,gil.vizParamsFalse10k,'S2 Median 2023')\n", "preComposite = s2s.filter(ee.Filter.calendarRange(2022,2022,'year')).median()\n", - "foliumViewMap.addLayer(preComposite,gil.vizParamsFalse,'S2 Median 2022',False)\n", - "geeViewMap.addLayer(preComposite,gil.vizParamsFalse,'S2 Median 2022',False)\n", + "foliumViewMap.addLayer(preComposite,gil.vizParamsFalse10k,'S2 Median 2022',False)\n", + "geeViewMap.addLayer(preComposite,gil.vizParamsFalse10k,'S2 Median 2022',False)\n", "\n", "# Center on the study area and view it\n", "foliumViewMap.centerObject(studyArea)\n", @@ -328,7 +307,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 8, "id": "dc168bd6", "metadata": {}, "outputs": [ @@ -362,7 +341,7 @@ " <meta name="viewport" content="width=device-width,\n", " initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />\n", " <style>\n", - " #map_75334d5df7d7b6bee93eaa7a6a0444c7 {\n", + " #map_0d3c2d857dc84813a9ad09af38a85c74 {\n", " position: relative;\n", " width: 100.0%;\n", " height: 100.0%;\n", @@ -378,14 +357,14 @@ "<body>\n", " \n", " \n", - " <div class="folium-map" id="map_75334d5df7d7b6bee93eaa7a6a0444c7" ></div>\n", + " <div class="folium-map" id="map_0d3c2d857dc84813a9ad09af38a85c74" ></div>\n", " \n", "</body>\n", "<script>\n", " \n", " \n", - " var map_75334d5df7d7b6bee93eaa7a6a0444c7 = L.map(\n", - " "map_75334d5df7d7b6bee93eaa7a6a0444c7",\n", + " var map_0d3c2d857dc84813a9ad09af38a85c74 = L.map(\n", + " "map_0d3c2d857dc84813a9ad09af38a85c74",\n", " {\n", " center: [0, 0],\n", " crs: L.CRS.EPSG3857,\n", @@ -399,79 +378,79 @@ "\n", " \n", " \n", - " var tile_layer_25d8161bb6085167b21e6c0d242464d7 = L.tileLayer(\n", + " var tile_layer_d26b642dc3c339eca31d64423e6a443b = L.tileLayer(\n", " "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",\n", " {"attribution": "Data by \\u0026copy; \\u003ca target=\\"_blank\\" href=\\"http://openstreetmap.org\\"\\u003eOpenStreetMap\\u003c/a\\u003e, under \\u003ca target=\\"_blank\\" href=\\"http://www.openstreetmap.org/copyright\\"\\u003eODbL\\u003c/a\\u003e.", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_75334d5df7d7b6bee93eaa7a6a0444c7);\n", + " ).addTo(map_0d3c2d857dc84813a9ad09af38a85c74);\n", " \n", " \n", - " map_75334d5df7d7b6bee93eaa7a6a0444c7.fitBounds(\n", + " map_0d3c2d857dc84813a9ad09af38a85c74.fitBounds(\n", " [[40.595571243156144, -113.21807278537877], [41.786028237932015, -111.82280911350377]],\n", " {}\n", " );\n", " \n", " \n", - " var tile_layer_2ce97936129ccddd74bbb6ad16a4d8d9 = L.tileLayer(\n", + " var tile_layer_bf19b02e732ce46afa87ec069e125745 = L.tileLayer(\n", " "https://mt1.google.com/vt/lyrs=m\\u0026x={x}\\u0026y={y}\\u0026z={z}",\n", " {"attribution": "Google", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_75334d5df7d7b6bee93eaa7a6a0444c7);\n", + " ).addTo(map_0d3c2d857dc84813a9ad09af38a85c74);\n", " \n", " \n", - " var tile_layer_0804d036b81e7bcd721c727b2c50a1b4 = L.tileLayer(\n", + " var tile_layer_a83e0b09797e18a74a9341b86aa5fa8a = L.tileLayer(\n", " "https://mt1.google.com/vt/lyrs=y\\u0026x={x}\\u0026y={y}\\u0026z={z}",\n", " {"attribution": "Google", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_75334d5df7d7b6bee93eaa7a6a0444c7);\n", + " ).addTo(map_0d3c2d857dc84813a9ad09af38a85c74);\n", " \n", " \n", - " var tile_layer_042de6edf5ac45fd9eb68d13a019582f = L.tileLayer(\n", - " "https://earthengine.googleapis.com/v1/projects/earthengine-legacy/maps/c2977a270141db4a60d3223bdb36d376-d79c520062fcf4ae3c40e0d1cf9b1b87/tiles/{z}/{x}/{y}",\n", + " var tile_layer_e1e8c048257f05fe0bc4b9858eacb7ae = L.tileLayer(\n", + " "https://earthengine.googleapis.com/v1/projects/lcms-292214/maps/8b65d3ca40b419c815211709b11bdf70-2586002fa31dd60941a7fe44d7fce1d3/tiles/{z}/{x}/{y}",\n", " {"attribution": "Google Earth Engine | GeeViz", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_75334d5df7d7b6bee93eaa7a6a0444c7);\n", + " ).addTo(map_0d3c2d857dc84813a9ad09af38a85c74);\n", " \n", " \n", - " var tile_layer_97f21978a26e782e4c0c8d1902b2fc5c = L.tileLayer(\n", - " "https://earthengine.googleapis.com/v1/projects/earthengine-legacy/maps/7bb79b310bb924c7447da63b232bd54c-b004f8bada8b318b555422618a4aa837/tiles/{z}/{x}/{y}",\n", + " var tile_layer_ce36a093dbaabafea6ea519a9a00904c = L.tileLayer(\n", + " "https://earthengine.googleapis.com/v1/projects/lcms-292214/maps/cfe71c74fde98ae75ee307d9c2718d13-9bc1bcce3da47ea46e7dd794e8c2bcff/tiles/{z}/{x}/{y}",\n", " {"attribution": "Google Earth Engine | GeeViz", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_75334d5df7d7b6bee93eaa7a6a0444c7);\n", + " ).addTo(map_0d3c2d857dc84813a9ad09af38a85c74);\n", " \n", " \n", - " var tile_layer_6dc9113cf2448d77165c70967ae4ebab = L.tileLayer(\n", - " "https://earthengine.googleapis.com/v1/projects/earthengine-legacy/maps/1dd1ca8432e9c77788f5ff204934cb9a-5511903ebecf8b50150d48196845f9ca/tiles/{z}/{x}/{y}",\n", + " var tile_layer_815b492266aed0118863f9068faf2111 = L.tileLayer(\n", + " "https://earthengine.googleapis.com/v1/projects/lcms-292214/maps/1dd1ca8432e9c77788f5ff204934cb9a-c106266d159702d559220f726c25347b/tiles/{z}/{x}/{y}",\n", " {"attribution": "Google Earth Engine", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_75334d5df7d7b6bee93eaa7a6a0444c7);\n", + " ).addTo(map_0d3c2d857dc84813a9ad09af38a85c74);\n", " \n", " \n", - " var layer_control_ccd33ae4d9c07922044e2ae5208e3034 = {\n", + " var layer_control_c277404e3cf3fa680d7f4bc844b773f5 = {\n", " base_layers : {\n", - " "openstreetmap" : tile_layer_25d8161bb6085167b21e6c0d242464d7,\n", + " "openstreetmap" : tile_layer_d26b642dc3c339eca31d64423e6a443b,\n", " },\n", " overlays : {\n", - " "Google Maps" : tile_layer_2ce97936129ccddd74bbb6ad16a4d8d9,\n", - " "Google Satellite" : tile_layer_0804d036b81e7bcd721c727b2c50a1b4,\n", - " "S2 Median 2023" : tile_layer_042de6edf5ac45fd9eb68d13a019582f,\n", - " "S2 Median 2022" : tile_layer_97f21978a26e782e4c0c8d1902b2fc5c,\n", - " "Study Area" : tile_layer_6dc9113cf2448d77165c70967ae4ebab,\n", + " "Google Maps" : tile_layer_bf19b02e732ce46afa87ec069e125745,\n", + " "Google Satellite" : tile_layer_a83e0b09797e18a74a9341b86aa5fa8a,\n", + " "S2 Median 2023" : tile_layer_e1e8c048257f05fe0bc4b9858eacb7ae,\n", + " "S2 Median 2022" : tile_layer_ce36a093dbaabafea6ea519a9a00904c,\n", + " "Study Area" : tile_layer_815b492266aed0118863f9068faf2111,\n", " },\n", " };\n", " L.control.layers(\n", - " layer_control_ccd33ae4d9c07922044e2ae5208e3034.base_layers,\n", - " layer_control_ccd33ae4d9c07922044e2ae5208e3034.overlays,\n", + " layer_control_c277404e3cf3fa680d7f4bc844b773f5.base_layers,\n", + " layer_control_c277404e3cf3fa680d7f4bc844b773f5.overlays,\n", " {"autoZIndex": false, "collapsed": false, "position": "topright"}\n", - " ).addTo(map_75334d5df7d7b6bee93eaa7a6a0444c7);\n", - " tile_layer_042de6edf5ac45fd9eb68d13a019582f.remove();\n", - " tile_layer_97f21978a26e782e4c0c8d1902b2fc5c.remove();\n", - " tile_layer_6dc9113cf2448d77165c70967ae4ebab.remove();\n", + " ).addTo(map_0d3c2d857dc84813a9ad09af38a85c74);\n", + " tile_layer_e1e8c048257f05fe0bc4b9858eacb7ae.remove();\n", + " tile_layer_ce36a093dbaabafea6ea519a9a00904c.remove();\n", + " tile_layer_815b492266aed0118863f9068faf2111.remove();\n", " \n", " \n", " L.control.fullscreen(\n", " {"forceSeparateButton": false, "position": "topleft", "title": "Full Screen", "titleCancel": "Exit Full Screen"}\n", - " ).addTo(map_75334d5df7d7b6bee93eaa7a6a0444c7);\n", + " ).addTo(map_0d3c2d857dc84813a9ad09af38a85c74);\n", " \n", "</script>\n", "</html>\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen>" ], "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -482,9 +461,10 @@ "output_type": "stream", "text": [ "Starting webmap\n", - "Using default refresh token for geeView: C:\\Users\\ihousman/.config/earthengine/credentials\n", + "Using default refresh token for geeView\n", "Local web server at: http://localhost:1234/geeView/ already serving.\n", - "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n" + "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", + "geeView URL: http://localhost:1234/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZBgEjF_qT4biuDwvxdtZ3fRkCFXi2hjGPshz4JTMX9Qd_B08sziz8mCa32AnWU1vNHGf20_-D4K_rx5d7KG6Orzca4g73b0wxTGYLjJjlO6q8fMjpkU8ZwD_YM60VL_uDLz4MvtH3FDlI7JjpfyvIRnLYvCnhlIn9ZwZ7QaCgYKARkSARESFQHGX2MiPdRuXvSNF3GQ2UaYanRICw0178&accessTokenCreationTime=1731636205672\n" ] }, { @@ -494,7 +474,7 @@ " " + "" ] }, "metadata": {}, @@ -520,7 +500,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 9, "id": "8714a906", "metadata": {}, "outputs": [ @@ -554,7 +534,7 @@ " <meta name="viewport" content="width=device-width,\n", " initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />\n", " <style>\n", - " #map_6ae079e70a9a766f5a4c686c2cd27ded {\n", + " #map_5a7550f959b1ae1f8f9b8fac7d371a57 {\n", " position: relative;\n", " width: 100.0%;\n", " height: 100.0%;\n", @@ -570,14 +550,14 @@ "<body>\n", " \n", " \n", - " <div class="folium-map" id="map_6ae079e70a9a766f5a4c686c2cd27ded" ></div>\n", + " <div class="folium-map" id="map_5a7550f959b1ae1f8f9b8fac7d371a57" ></div>\n", " \n", "</body>\n", "<script>\n", " \n", " \n", - " var map_6ae079e70a9a766f5a4c686c2cd27ded = L.map(\n", - " "map_6ae079e70a9a766f5a4c686c2cd27ded",\n", + " var map_5a7550f959b1ae1f8f9b8fac7d371a57 = L.map(\n", + " "map_5a7550f959b1ae1f8f9b8fac7d371a57",\n", " {\n", " center: [0, 0],\n", " crs: L.CRS.EPSG3857,\n", @@ -591,76 +571,76 @@ "\n", " \n", " \n", - " var tile_layer_6ca2cd56fe25139eeb4055e18439f00c = L.tileLayer(\n", + " var tile_layer_d074fc4686c0b3198ed2ec2c2b15b714 = L.tileLayer(\n", " "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",\n", " {"attribution": "Data by \\u0026copy; \\u003ca target=\\"_blank\\" href=\\"http://openstreetmap.org\\"\\u003eOpenStreetMap\\u003c/a\\u003e, under \\u003ca target=\\"_blank\\" href=\\"http://www.openstreetmap.org/copyright\\"\\u003eODbL\\u003c/a\\u003e.", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_6ae079e70a9a766f5a4c686c2cd27ded);\n", + " ).addTo(map_5a7550f959b1ae1f8f9b8fac7d371a57);\n", " \n", " \n", - " map_6ae079e70a9a766f5a4c686c2cd27ded.fitBounds(\n", + " map_5a7550f959b1ae1f8f9b8fac7d371a57.fitBounds(\n", " [[40.595571243156144, -113.21807278537877], [41.786028237932015, -111.82280911350377]],\n", " {}\n", " );\n", " \n", " \n", - " var tile_layer_2ce97936129ccddd74bbb6ad16a4d8d9 = L.tileLayer(\n", + " var tile_layer_bf19b02e732ce46afa87ec069e125745 = L.tileLayer(\n", " "https://mt1.google.com/vt/lyrs=m\\u0026x={x}\\u0026y={y}\\u0026z={z}",\n", " {"attribution": "Google", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_6ae079e70a9a766f5a4c686c2cd27ded);\n", + " ).addTo(map_5a7550f959b1ae1f8f9b8fac7d371a57);\n", " \n", " \n", - " var tile_layer_0804d036b81e7bcd721c727b2c50a1b4 = L.tileLayer(\n", + " var tile_layer_a83e0b09797e18a74a9341b86aa5fa8a = L.tileLayer(\n", " "https://mt1.google.com/vt/lyrs=y\\u0026x={x}\\u0026y={y}\\u0026z={z}",\n", " {"attribution": "Google", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_6ae079e70a9a766f5a4c686c2cd27ded);\n", + " ).addTo(map_5a7550f959b1ae1f8f9b8fac7d371a57);\n", " \n", " \n", - " var tile_layer_de4f52f45dcbdd73eaf18ec8d6bb4c8e = L.tileLayer(\n", - " "https://earthengine.googleapis.com/v1/projects/earthengine-legacy/maps/5206f96be658993e51f71b721788e631-7af46ab593128ac9acae40db4ecc2e94/tiles/{z}/{x}/{y}",\n", + " var tile_layer_13f2b579776361222d2a8b420c4883b5 = L.tileLayer(\n", + " "https://earthengine.googleapis.com/v1/projects/lcms-292214/maps/8b65d3ca40b419c815211709b11bdf70-e5aba86dc97de35a8c0601d2a7929da6/tiles/{z}/{x}/{y}",\n", " {"attribution": "Google Earth Engine | GeeViz", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_6ae079e70a9a766f5a4c686c2cd27ded);\n", + " ).addTo(map_5a7550f959b1ae1f8f9b8fac7d371a57);\n", " \n", " \n", - " var tile_layer_d4302cdedbd1a069632aa5eafaa58d8e = L.tileLayer(\n", - " "https://earthengine.googleapis.com/v1/projects/earthengine-legacy/maps/265338b79f8eee2fa31c73bd685096f2-0cc1ec54c4f36d5263f8ff080ca0da6e/tiles/{z}/{x}/{y}",\n", + " var tile_layer_e9ee12c9f68d952031d5030fad773405 = L.tileLayer(\n", + " "https://earthengine.googleapis.com/v1/projects/lcms-292214/maps/cfe71c74fde98ae75ee307d9c2718d13-cc171251a4aad5cda94665cf4c5962e4/tiles/{z}/{x}/{y}",\n", " {"attribution": "Google Earth Engine | GeeViz", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_6ae079e70a9a766f5a4c686c2cd27ded);\n", + " ).addTo(map_5a7550f959b1ae1f8f9b8fac7d371a57);\n", " \n", " \n", - " var tile_layer_d197dd002a1454886c87186c28976d42 = L.tileLayer(\n", - " "https://earthengine.googleapis.com/v1/projects/earthengine-legacy/maps/1dd1ca8432e9c77788f5ff204934cb9a-e60dd8c676d90dd89c0b0788eb9ef802/tiles/{z}/{x}/{y}",\n", + " var tile_layer_bbcb2a5ce2b8db6ac99d3526e3c9524b = L.tileLayer(\n", + " "https://earthengine.googleapis.com/v1/projects/lcms-292214/maps/1dd1ca8432e9c77788f5ff204934cb9a-b37d5ad4e80a2a549134cee564627bc0/tiles/{z}/{x}/{y}",\n", " {"attribution": "Google Earth Engine", "detectRetina": false, "maxNativeZoom": 18, "maxZoom": 18, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", - " ).addTo(map_6ae079e70a9a766f5a4c686c2cd27ded);\n", + " ).addTo(map_5a7550f959b1ae1f8f9b8fac7d371a57);\n", " \n", " \n", - " var layer_control_eb1d11e4c51f1cab920d5c85d9b965f0 = {\n", + " var layer_control_db9697066279ce8e0e7853d9189b5a2d = {\n", " base_layers : {\n", - " "openstreetmap" : tile_layer_6ca2cd56fe25139eeb4055e18439f00c,\n", + " "openstreetmap" : tile_layer_d074fc4686c0b3198ed2ec2c2b15b714,\n", " },\n", " overlays : {\n", - " "Google Maps" : tile_layer_2ce97936129ccddd74bbb6ad16a4d8d9,\n", - " "Google Satellite" : tile_layer_0804d036b81e7bcd721c727b2c50a1b4,\n", - " "S2 Median 2023" : tile_layer_de4f52f45dcbdd73eaf18ec8d6bb4c8e,\n", - " "S2 Median 2022" : tile_layer_d4302cdedbd1a069632aa5eafaa58d8e,\n", - " "Study Area" : tile_layer_d197dd002a1454886c87186c28976d42,\n", + " "Google Maps" : tile_layer_bf19b02e732ce46afa87ec069e125745,\n", + " "Google Satellite" : tile_layer_a83e0b09797e18a74a9341b86aa5fa8a,\n", + " "S2 Median 2023" : tile_layer_13f2b579776361222d2a8b420c4883b5,\n", + " "S2 Median 2022" : tile_layer_e9ee12c9f68d952031d5030fad773405,\n", + " "Study Area" : tile_layer_bbcb2a5ce2b8db6ac99d3526e3c9524b,\n", " },\n", " };\n", " L.control.layers(\n", - " layer_control_eb1d11e4c51f1cab920d5c85d9b965f0.base_layers,\n", - " layer_control_eb1d11e4c51f1cab920d5c85d9b965f0.overlays,\n", + " layer_control_db9697066279ce8e0e7853d9189b5a2d.base_layers,\n", + " layer_control_db9697066279ce8e0e7853d9189b5a2d.overlays,\n", " {"autoZIndex": false, "collapsed": false, "position": "topright"}\n", - " ).addTo(map_6ae079e70a9a766f5a4c686c2cd27ded);\n", + " ).addTo(map_5a7550f959b1ae1f8f9b8fac7d371a57);\n", " \n", " \n", " L.control.fullscreen(\n", " {"forceSeparateButton": false, "position": "topleft", "title": "Full Screen", "titleCancel": "Exit Full Screen"}\n", - " ).addTo(map_6ae079e70a9a766f5a4c686c2cd27ded);\n", + " ).addTo(map_5a7550f959b1ae1f8f9b8fac7d371a57);\n", " \n", "</script>\n", "</html>\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen>" ], "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -671,9 +651,10 @@ "output_type": "stream", "text": [ "Starting webmap\n", - "Using default refresh token for geeView: C:\\Users\\ihousman/.config/earthengine/credentials\n", + "Using default refresh token for geeView\n", "Local web server at: http://localhost:1234/geeView/ already serving.\n", - "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n" + "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", + "geeView URL: http://localhost:1234/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZBUVPa6LDS25-4BKa-QvyMaz0HTq8mm7-tn5ABvN9VQk-ga6KngwRbFK9lVePwfAnN3KVTzcYhKcl5_a35GszdiHTiYkun9LJ4a_2pwKJu5QwxHQsx9l5rOTV4n5glhvDXYy1-AmDTKKenKabXEY0f1XBVtsZlX4M-j4Z4aCgYKAc4SARESFQHGX2MiTjFdTXxQ6GZsKMtMJgEoVw0178&accessTokenCreationTime=1731636218348\n" ] }, { @@ -683,7 +664,7 @@ " " + "" ] }, "metadata": {}, diff --git a/examples/geeViz_geeMap_comparison_tutorial.ipynb b/examples/geeViz_geeMap_comparison_tutorial.ipynb index 0494d42..d8f0e69 100644 --- a/examples/geeViz_geeMap_comparison_tutorial.ipynb +++ b/examples/geeViz_geeMap_comparison_tutorial.ipynb @@ -13,47 +13,22 @@ "\n", "* This is intended to illustrate the basic map functionality of each package. Refer to each packages examples for more in-depth demos\n", "\n", - "

    \"Open

    " + "\n", + "[![github](https://img.shields.io/badge/-see%20sources-white?logo=github&labelColor=555)](https://github.com/gee-community/geeviz/blob/master/examples/geeViz_geeMap_comparison_tutorial.ipynb) \n", + "[![github](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/gee-community/geeViz/blob/master/examples/geeViz_geeMap_comparison_tutorial.ipynb)" ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, "metadata": {}, "outputs": [ { - "data": { - "text/html": [ - "\n", - " \n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" + "name": "stdout", + "output_type": "stream", + "text": [ + "geeViz package folder: c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\geeViz\n" + ] } ], "source": [ @@ -82,7 +57,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "metadata": {}, "outputs": [ { @@ -122,7 +97,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f2330ca0a7ca442dbe3731326371427d", + "model_id": "6ed7ad90f7b14fdabc8e09495452b37c", "version_major": 2, "version_minor": 0 }, @@ -130,7 +105,7 @@ "Map(center=[0, 0], controls=(WidgetControl(options=['position', 'transparent_bg'], widget=SearchDataGUI(childr…" ] }, - "execution_count": 3, + "execution_count": 2, "metadata": {}, "output_type": "execute_result" } @@ -142,7 +117,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 3, "metadata": {}, "outputs": [ { @@ -187,7 +162,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AXooCgvgEDNhCDK0uDRpz89SY_IP1QTrcZy4sXuRjC2AakLLpvpHnY4JbpgQuN_aObMEAvqSekQexKUPFqKMjO5dKpTtZz7JLna2PHWIejqpRF1ZAmPRsoe7rV9BRT3m9PnDdmozagQiXui2XI_aIBVL4dq2v8LzdP7mOWEaCgYKAfESARESFQHGX2MiZsnH07ngGCe4E3fpeJEWmw0174\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZC1NpuzSJnOL46m9K4RQ3OxUQL_5d8_g_ocHO3jhv7KYFenfHacOKTrQXoBfiWS0Ri1rT0tNpnsmOGaHP7hwSPWwuIcptltnUzIPtDaulxJmYWOrEQJ3R0Iqa-NovKOogpQDP_t394JVVun6_SjOmmKGdsY8k-W-mdz5NoaCgYKAeoSARESFQHGX2MitIO-ZCr0Ku8KFquA0SiGAA0178&accessTokenCreationTime=1731461548264\n" ] }, { @@ -197,7 +172,7 @@ " " + "" ] }, "metadata": {}, @@ -230,7 +205,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -275,7 +250,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AXooCgvtomcjUlHqrrMtMyYQ3xkeyvWoRPwJ_tM5q65sOLXUvOO-DJACMhLbU5evcuZ2Swuaf3DXi_cfPDJzW6J22NdhFg4bo8iMIUjx2qwfPc4eGA0pIEHN0Mr5RkKOxzumlDPBKHAa2INX7OrtgJgzS_j2jrWjiCEo_G8aCgYKAUISARESFQHGX2MiorOf-P_GbrM7fO2kghuJTQ0174\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZDCqAxJILCd0nHUTJMchkcJTzMCfn_oOr09p0ecz2ZwSKyD4y-EV2Fu9GmeSHC-sKIHBezhBiWvD9RSEODWO7V0H1Sf6oD9wEJ7ams9Je0HDaeKBpx9VaYCtubO12v42BIEsTmq3w5sL43edm7avLzkSx40cagxNA48IJcaCgYKAbgSARESFQHGX2MiDqqNEsiekCnocxei6tyNLQ0178&accessTokenCreationTime=1731461558966\n" ] }, { @@ -285,7 +260,7 @@ " " + "" ] }, "metadata": {}, @@ -302,7 +277,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "a59ecbc4aae74e50a5f3903142916ddb", + "model_id": "ccfae8bc563e4a4fa0f490b8e4d20298", "version_major": 2, "version_minor": 0 }, @@ -310,7 +285,7 @@ "Map(center=[40.64356771453405, -111.92926447956667], controls=(WidgetControl(options=['position', 'transparent…" ] }, - "execution_count": 5, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -329,7 +304,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -374,7 +349,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AXooCgtJHkiDNTHnX1_pSscrZxMjNt9pvKyEtfkWLAUETNAq-mH7v_Cn2tzqKIa4Y271z-7jrnQIuFTCLO_2HkORiSS8HHeyy_fNRCzB86G70832yYkW1m84OkDsMgFl9Kbje3Ipo4C2aK8JWKVMOqJBFiXaY6BRE-nwTd8aCgYKAdISARESFQHGX2Mix0GbebnUwrD7aJVzoBXgrQ0174\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZCAzLBBAsbkibPAyQQBqz2A45adbb64UjuzZf4BzqFZspb3rXWLjQ-CXDOCq39f89yuIC1VEKd-KR-BrR3ReZ1qBOl1CBqCbmpuNmn8EavXnusniLjz8eAu5YjmTgB4n8VFUz0w5XIAMFQ1uuQWkGfbV3W6F1qo8nM3BcMaCgYKAUwSARESFQHGX2Mi1VbmxyoOc4nqPnQboIV-oA0178&accessTokenCreationTime=1731461571134\n" ] }, { @@ -384,7 +359,7 @@ " " + "" ] }, "metadata": {}, @@ -401,7 +376,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "6569b3cbe1e1419781ed7504e82afb10", + "model_id": "a046d1db994143879ec8221e21957a91", "version_major": 2, "version_minor": 0 }, @@ -409,7 +384,7 @@ "Map(center=[40.64356771453405, -111.92926447956665], controls=(WidgetControl(options=['position', 'transparent…" ] }, - "execution_count": 6, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -435,7 +410,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -484,7 +459,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AXooCgt2jXuR_ORQ4rVSJMw4gBgwNkPrdy3LbsdGZXmtBfF5m4ez0cqKlAEhvULItePzt4VZS_kRqMc_uQFyogJjBIJr0aJqU2hVR1Wzlw02hiEB2Z2ObtVqT8TjS3An_DPYQcz18EGyVE_DQ_VAgMET3xlANZSADM1YO58aCgYKAaYSARESFQHGX2MiILfbqpEh0dgLNorL1lvmug0174\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZD3s3w_jGcfIljb-YyzXOpr0bJ0zHO8jMIckApbI0hSBFXPcjywqzsghWSVwW2vNYOFU5KW1Y0SevWJv6qdqSkAj--bilduzpTEAisNsy45Ai9qVUQERpC8mxOWxFsXswfzKylxVlqIWgCMbUXIbWrtWkdmi-LPVNe56p4aCgYKAckSARESFQHGX2MihtuQ8ShbRfFcBUdvKlc8TA0178&accessTokenCreationTime=1731461581110\n" ] }, { @@ -494,7 +469,7 @@ " " + "" ] }, "metadata": {}, @@ -511,7 +486,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "61cdbd4b0ba74fd3a23510d1b5e3c24e", + "model_id": "79ede6bd57864f039bcab1a231cd4774", "version_major": 2, "version_minor": 0 }, @@ -519,7 +494,7 @@ "Map(center=[40.64356771453405, -111.92926447956665], controls=(WidgetControl(options=['position', 'transparent…" ] }, - "execution_count": 8, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -587,7 +562,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -633,7 +608,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AXooCguej_AkK295bC8_WXVH1oBx6imTvMTr0fi635pjMVgupD35Bq_1bdnn2zadU2bK-NnYU0CsiI6qOXRhbY7NvN1JZQpkfZI2pMnwF5q-yHN76fAL_Tn9TgaeJK916yBXDkQdB-1dKdNWJCfuGMIrp8j_0hGv-oTHVU4aCgYKAagSARESFQHGX2Mi4kPnsreTbkT_JrnUIGPU5g0174\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZCmcfUFilw2qyHmXLcFQFN9G5LYngkTOU6MzELQudJw4MqiiYnf3ZrrJR2JHwc2XvMhrn8xjfsMjmvtaZwNhvfYP7eEEtCRz8Cy87AYaeqdjILC3n9LbOF3peYIv9bWm9LOP3WT_BwTS0cqeSIlTrKubynjMVwoeXFS5S0aCgYKAUwSARESFQHGX2MiBEMf82fGFDIITfZ1DJd_1A0178&accessTokenCreationTime=1731461647526\n" ] }, { @@ -643,7 +618,7 @@ " " + "" ] }, "metadata": {}, @@ -660,7 +635,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1e89a15319a1410bac0f1291725bca66", + "model_id": "84139d794e134da89b04bc2d8d2b1a4a", "version_major": 2, "version_minor": 0 }, @@ -668,7 +643,7 @@ "Map(center=[0, 0], controls=(WidgetControl(options=['position', 'transparent_bg'], widget=SearchDataGUI(childr…" ] }, - "execution_count": 11, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -714,7 +689,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -760,7 +735,7 @@ "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AXooCgvnIz-x3wPxqxNi2bR0QTnSijQwQYf9gP3Jn0fNBA5AnKN96ClZuhPQtqJeU3MlbSTnjU1MjuZcItAPtYg-K3jFtJzMVrrK-r32ztC_4GfNW-Qh6PYnlKazCHTpnv1lpqHEoFq50DD79x7oMRRbQV65PDT6op4i_jIaCgYKAbgSARESFQHGX2MiUVMBX4xesivi5u_FIcn9sQ0174\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZAGMiGUPgw2NrmnwxzzFx8VTX-BPJQ-_J4Z-QdTQyhGaWpeuS7bIMy1rWghjTRgyFm3Xl2uzVw2zsWNqhM8VG3SK3VhigV9c_8VqTsGGYzUxsGfgfK83BU7xy5ND2pugqZ2_LrFL8PlYhLkWAwfCw2BP12UktKKrezbeCMaCgYKAd8SARESFQHGX2Mi_2WMF2oIqf5cPedmM9ZTkQ0178&accessTokenCreationTime=1731461667454\n" ] }, { @@ -770,7 +745,7 @@ " " + "" ] }, "metadata": {}, @@ -787,7 +762,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "4f0171640169413983cc7f22b54b1510", + "model_id": "93db9cb912934eb58f5d50b98066c851", "version_major": 2, "version_minor": 0 }, @@ -795,7 +770,7 @@ "Map(center=[46.529, 6.746], controls=(WidgetControl(options=['position', 'transparent_bg'], widget=SearchDataG…" ] }, - "execution_count": 12, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -858,7 +833,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -901,8 +876,47 @@ "text": [ "Adding layer: Switzerland\n", "Starting webmap\n", - "Using default refresh token for geeView\n" + "Using default refresh token for geeView\n", + "Local web server at: http://localhost:8001/geeView/ already serving.\n", + "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZBB-cdTrE44xvI5cOkjSnSGbICt_KDKOJiAjB2D86DDD4-zGJaAg7oEIRdOQI_fzMX7VhSa0R2DsJm7OaEO7vlhcTvVot1KiGfXqCgIyp4KWzUrB_fSzuN_MbGZfRzBoYDO7kNj8eWPkiy2Ndbl2TWYxfpg54jj0XROCnoaCgYKASASARESFQHGX2MiIQ2guJPQlUheLfUHwt2wBA0178&accessTokenCreationTime=1731461699271\n" ] + }, + { + "data": { + "text/html": [ + "\n", + " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "98babdd061464936bf00d2180d408f3d", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Map(center=[0, 0], controls=(WidgetControl(options=['position', 'transparent_bg'], widget=SearchDataGUI(childr…" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ @@ -921,13 +935,6 @@ "gvMap.view()\n", "gmMap" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { diff --git a/examples/getLandsatWrapperNotebook.ipynb b/examples/getLandsatWrapperNotebook.ipynb index 26d7a1e..02c5690 100644 --- a/examples/getLandsatWrapperNotebook.ipynb +++ b/examples/getLandsatWrapperNotebook.ipynb @@ -24,8 +24,8 @@ "See the License for the specific language governing permissions and\n", "limitations under the License.\n", "\n", - "\n", - "

    \"Open

    " + "[![github](https://img.shields.io/badge/-see%20sources-white?logo=github&labelColor=555)](https://github.com/gee-community/geeviz/blob/master/examples/getLandsatWrapperNotebook.ipynb) \n", + "[![github](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/gee-community/geeViz/blob/master/examples/getLandsatWrapperNotebook.ipynb)" ] }, { @@ -97,36 +97,23 @@ "Applying scale factors for C2 L7 data\n", "Applying scale factors for C2 L9 data\n", "Applying Fmask Cloud Mask\n", - "Applying Fmask Shadow Mask\n", - "Adding layer: Default Params 2009 153-152\n", - "Type: Image geeImage\n", - "Starting webmap\n", - "Using default refresh token for geeView\n", - "Local web server at: http://localhost:8001/geeView/ already serving.\n", - "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AXooCgu8EUNhnVn0a7J3kojB9X0Xzzg_L0wQ_9vf3gO85uG1xXah7x1f4h1ZOkwLHZfFf6osd7BJKZmL3FKOjlQ-lkED4Pa8u3pfpMI4pPBR7KdrZI16NOS0KXA8znCkFv3pqSr5qDHoCbnKgSVjrjXuiInj5u744-aV2DsaCgYKARcSARESFQHGX2MiqeVeKwjjA8CVaHytQWVyGA0174\n" + "Applying Fmask Shadow Mask\n" ] }, { - "data": { - "text/html": [ - "\n", - " \n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" + "ename": "TypeError", + "evalue": "Collection.count() missing 1 required positional argument: 'property'", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[1;32mIn[2], line 28\u001b[0m\n\u001b[0;32m 25\u001b[0m endYear \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m2009\u001b[39m\n\u001b[0;32m 27\u001b[0m \u001b[38;5;66;03m#Call on master wrapper function to get Landat scenes and composites\u001b[39;00m\n\u001b[1;32m---> 28\u001b[0m lsAndTs \u001b[38;5;241m=\u001b[39m \u001b[43mgetImagesLib\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgetLandsatWrapper\u001b[49m\u001b[43m(\u001b[49m\u001b[43mstudyArea\u001b[49m\u001b[43m,\u001b[49m\u001b[43mstartYear\u001b[49m\u001b[43m,\u001b[49m\u001b[43mendYear\u001b[49m\u001b[43m,\u001b[49m\u001b[43mstartJulian\u001b[49m\u001b[43m,\u001b[49m\u001b[43mendJulian\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 31\u001b[0m \u001b[38;5;66;03m#Separate into scenes and composites for subsequent analysis\u001b[39;00m\n\u001b[0;32m 32\u001b[0m processedScenes \u001b[38;5;241m=\u001b[39m lsAndTs[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mprocessedScenes\u001b[39m\u001b[38;5;124m'\u001b[39m]\n", + "File \u001b[1;32mc:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\geeViz\\getImagesLib.py:5432\u001b[0m, in \u001b[0;36mgetLandsatWrapper\u001b[1;34m(studyArea, startYear, endYear, startJulian, endJulian, timebuffer, weights, compositingMethod, toaOrSR, includeSLCOffL7, defringeL5, applyCloudScore, applyFmaskCloudMask, applyTDOM, applyFmaskCloudShadowMask, applyFmaskSnowMask, cloudScoreThresh, performCloudScoreOffset, cloudScorePctl, zScoreThresh, shadowSumThresh, contractPixels, dilatePixels, correctIllumination, correctScale, exportComposites, outputName, exportPathRoot, crs, transform, scale, resampleMethod, preComputedCloudScoreOffset, preComputedTDOMIRMean, preComputedTDOMIRStdDev, compositingReducer, harmonizeOLI, landsatCollectionVersion, overwrite, verbose)\u001b[0m\n\u001b[0;32m 5429\u001b[0m ls \u001b[38;5;241m=\u001b[39m ls\u001b[38;5;241m.\u001b[39mmap(\u001b[38;5;28;01mlambda\u001b[39;00m img: addZenithAzimuth(img, toaOrSR))\n\u001b[0;32m 5431\u001b[0m \u001b[38;5;66;03m# Create composite time series\u001b[39;00m\n\u001b[1;32m-> 5432\u001b[0m ts \u001b[38;5;241m=\u001b[39m \u001b[43mcompositeTimeSeries\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 5433\u001b[0m \u001b[43m \u001b[49m\u001b[43mls\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mls\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 5434\u001b[0m \u001b[43m \u001b[49m\u001b[43mstartYear\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstartYear\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 5435\u001b[0m \u001b[43m \u001b[49m\u001b[43mendYear\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mendYear\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 5436\u001b[0m \u001b[43m \u001b[49m\u001b[43mstartJulian\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstartJulian\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 5437\u001b[0m \u001b[43m \u001b[49m\u001b[43mendJulian\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mendJulian\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 5438\u001b[0m \u001b[43m \u001b[49m\u001b[43mtimebuffer\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtimebuffer\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 5439\u001b[0m \u001b[43m \u001b[49m\u001b[43mweights\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mweights\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 5440\u001b[0m \u001b[43m \u001b[49m\u001b[43mcompositingMethod\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcompositingMethod\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 5441\u001b[0m \u001b[43m \u001b[49m\u001b[43mcompositingReducer\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcompositingReducer\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 5442\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 5444\u001b[0m \u001b[38;5;66;03m# Correct illumination\u001b[39;00m\n\u001b[0;32m 5445\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m correctIllumination:\n", + "File \u001b[1;32mc:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\geeViz\\getImagesLib.py:4315\u001b[0m, in \u001b[0;36mcompositeTimeSeries\u001b[1;34m(ls, startYear, endYear, startJulian, endJulian, timebuffer, weights, compositingMethod, compositingReducer)\u001b[0m\n\u001b[0;32m 4300\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m composite\u001b[38;5;241m.\u001b[39mset(\n\u001b[0;32m 4301\u001b[0m {\n\u001b[0;32m 4302\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124msystem:time_start\u001b[39m\u001b[38;5;124m\"\u001b[39m: ee\u001b[38;5;241m.\u001b[39mDate\u001b[38;5;241m.\u001b[39mfromYMD(year \u001b[38;5;241m+\u001b[39m yearWithMajority, \u001b[38;5;241m6\u001b[39m, \u001b[38;5;241m1\u001b[39m)\u001b[38;5;241m.\u001b[39mmillis(),\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 4311\u001b[0m }\n\u001b[0;32m 4312\u001b[0m )\n\u001b[0;32m 4314\u001b[0m \u001b[38;5;66;03m# Iterate across each year\u001b[39;00m\n\u001b[1;32m-> 4315\u001b[0m ts \u001b[38;5;241m=\u001b[39m \u001b[43m[\u001b[49m\u001b[43myearCompositeGetter\u001b[49m\u001b[43m(\u001b[49m\u001b[43myr\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43myr\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mee\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mList\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msequence\u001b[49m\u001b[43m(\u001b[49m\u001b[43mstartYear\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m+\u001b[39;49m\u001b[43m \u001b[49m\u001b[43mtimebuffer\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mendYear\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m-\u001b[39;49m\u001b[43m \u001b[49m\u001b[43mtimebuffer\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgetInfo\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m]\u001b[49m\n\u001b[0;32m 4316\u001b[0m ts \u001b[38;5;241m=\u001b[39m ee\u001b[38;5;241m.\u001b[39mImageCollection(ts)\u001b[38;5;241m.\u001b[39mset(args)\n\u001b[0;32m 4318\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m ts\n", + "File \u001b[1;32mc:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\geeViz\\getImagesLib.py:4315\u001b[0m, in \u001b[0;36m\u001b[1;34m(.0)\u001b[0m\n\u001b[0;32m 4300\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m composite\u001b[38;5;241m.\u001b[39mset(\n\u001b[0;32m 4301\u001b[0m {\n\u001b[0;32m 4302\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124msystem:time_start\u001b[39m\u001b[38;5;124m\"\u001b[39m: ee\u001b[38;5;241m.\u001b[39mDate\u001b[38;5;241m.\u001b[39mfromYMD(year \u001b[38;5;241m+\u001b[39m yearWithMajority, \u001b[38;5;241m6\u001b[39m, \u001b[38;5;241m1\u001b[39m)\u001b[38;5;241m.\u001b[39mmillis(),\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 4311\u001b[0m }\n\u001b[0;32m 4312\u001b[0m )\n\u001b[0;32m 4314\u001b[0m \u001b[38;5;66;03m# Iterate across each year\u001b[39;00m\n\u001b[1;32m-> 4315\u001b[0m ts \u001b[38;5;241m=\u001b[39m [\u001b[43myearCompositeGetter\u001b[49m\u001b[43m(\u001b[49m\u001b[43myr\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;28;01mfor\u001b[39;00m yr \u001b[38;5;129;01min\u001b[39;00m ee\u001b[38;5;241m.\u001b[39mList\u001b[38;5;241m.\u001b[39msequence(startYear \u001b[38;5;241m+\u001b[39m timebuffer, endYear \u001b[38;5;241m-\u001b[39m timebuffer)\u001b[38;5;241m.\u001b[39mgetInfo()]\n\u001b[0;32m 4316\u001b[0m ts \u001b[38;5;241m=\u001b[39m ee\u001b[38;5;241m.\u001b[39mImageCollection(ts)\u001b[38;5;241m.\u001b[39mset(args)\n\u001b[0;32m 4318\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m ts\n", + "File \u001b[1;32mc:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\geeViz\\getImagesLib.py:4290\u001b[0m, in \u001b[0;36mcompositeTimeSeries..yearCompositeGetter\u001b[1;34m(year)\u001b[0m\n\u001b[0;32m 4287\u001b[0m images \u001b[38;5;241m=\u001b[39m yearsTT\u001b[38;5;241m.\u001b[39mmap(yrGetter)\n\u001b[0;32m 4288\u001b[0m lsT \u001b[38;5;241m=\u001b[39m ee\u001b[38;5;241m.\u001b[39mImageCollection(ee\u001b[38;5;241m.\u001b[39mFeatureCollection(images)\u001b[38;5;241m.\u001b[39mflatten())\n\u001b[1;32m-> 4290\u001b[0m count \u001b[38;5;241m=\u001b[39m \u001b[43mlsT\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mselect\u001b[49m\u001b[43m(\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcount\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241m.\u001b[39mrename([\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcompositeObsCount\u001b[39m\u001b[38;5;124m\"\u001b[39m])\n\u001b[0;32m 4291\u001b[0m \u001b[38;5;66;03m# Compute median or medoid or apply reducer\u001b[39;00m\n\u001b[0;32m 4292\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m compositingReducer \u001b[38;5;241m!=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m:\n", + "\u001b[1;31mTypeError\u001b[0m: Collection.count() missing 1 required positional argument: 'property'" + ] } ], "source": [ diff --git a/examples/global_land_cover_example_notebook.ipynb b/examples/global_land_cover_example_notebook.ipynb index 9610f59..32b5539 100644 --- a/examples/global_land_cover_example_notebook.ipynb +++ b/examples/global_land_cover_example_notebook.ipynb @@ -25,8 +25,8 @@ "See the License for the specific language governing permissions and\n", "limitations under the License.\n", "\n", - "\n", - "

    \"Open

    \n" + "[![github](https://img.shields.io/badge/-see%20sources-white?logo=github&labelColor=555)](https://github.com/gee-community/geeviz/blob/master/examples/global_land_cover_example_notebook.ipynb) \n", + "[![github](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/gee-community/geeViz/blob/master/examples/global_land_cover_example_notebook.ipynb)\n" ] }, { @@ -73,7 +73,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -86,9 +86,11 @@ "Adding layer: Global Land Cover\n", "Starting webmap\n", "Using default refresh token for geeView\n", - "Local web server at: http://localhost:8001/geeView/ already serving.\n", + "Starting local web server at: http://localhost:1234/geeView/\n", + "HTTP server command: \"c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\python.exe\" -m http.server 1234\n", + "Done\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612xNtUi9PBkOxPXO6EZtAgcREOeiqv4JgC8RmfDyFnrXNjLv1FMt4kgBjuTIl1x9b4Dzo8yV8PIuSkt6193mRc31AlnJ7_MGfEXOGUP-uXND6tDO92E96LFlMQgoRhFIfXCt_dWEpCQG_StIeP3tcVwResLi2v0tW7J2UcIaCgYKAR4SARESFQHGX2MiPYaA9vv1ECsOyDAsFlUDzw0178\n" + "geeView URL: http://localhost:1234/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612wnIGOy__UqV9zq2nxuSseeoEwZdKpMuR4btK_0Ps5wJx-X8976Sf6MgA9aex2xyowAjwM-Oa6-h89U6OIT9_qWTqDtVyKHWmGtqu6YXU4-S8EshRtcCN8PupmfWl39msYSqtw_s-wajAD2uY3eFyCFhU64UtJD9GFbHMAaCgYKAY8SARESFQHGX2Mi-S01HkxUVh5Sgp6EN7h1NA0178\n" ] }, { @@ -98,7 +100,7 @@ " " + "" ] }, "metadata": {}, @@ -115,7 +117,7 @@ ], "source": [ "Map.clearMap()\n", - "\n", + "Map.port = 1234\n", "# Specify projection to use for zonal summaries and map querying\n", "# Be sure to leave one of scale or transform as None\n", "crs= 'EPSG:4326'\n", diff --git a/examples/lcmsViewerExampleNotebook.ipynb b/examples/lcmsViewerExampleNotebook.ipynb index 2ebcddf..63430e9 100644 --- a/examples/lcmsViewerExampleNotebook.ipynb +++ b/examples/lcmsViewerExampleNotebook.ipynb @@ -7,26 +7,27 @@ "metadata": {}, "source": [ "# LCMS Viewer Intro Notebook\n", - "> * Based on https://github.com/google/earthengine-community/blob/master/datasets/scripts/LCMS_Visualization.js\n", - "> * Copyright 2024 The Google Earth Engine Community Authors\n", + "* Based on https://github.com/google/earthengine-community/blob/master/datasets/scripts/LCMS_Visualization.js\n", + "Copyright 2024 The Google Earth Engine Community Authors\n", " \t\n", - ">> * Licensed under the Apache License, Version 2.0 (the \"License\");\n", - ">> you may not use this file except in compliance with the License.\n", - ">> You may obtain a copy of the License at\n", - ">> https://www.apache.org/licenses/LICENSE-2.0\n", - ">> Unless required by applicable law or agreed to in writing, software\n", - ">> distributed under the License is distributed on an \"AS IS\" BASIS,\n", - ">> WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n", - ">> See the License for the specific language governing permissions and\n", - ">> limitations under the License.\n", + "Licensed under the Apache License, Version 2.0 (the \"License\");\n", + "you may not use this file except in compliance with the License.\n", + "You may obtain a copy of the License at\n", + "https://www.apache.org/licenses/LICENSE-2.0\n", + "Unless required by applicable law or agreed to in writing, software\n", + "distributed under the License is distributed on an \"AS IS\" BASIS,\n", + "WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n", + "See the License for the specific language governing permissions and\n", + "limitations under the License.\n", " \t\n", - ">> * Example script for visualizing LCMS change summaries, land cover, and land use.\n", - ">> * A more in-depth visualization of LCMS products is available at: [https://apps.fs.usda.gov/lcms-viewer/index.html](https://apps.fs.usda.gov/lcms-viewer/index.html) \n", - ">> * Contact sm.fs.lcms@usda.gov with any questions or specific data requests.\n", + "* Example script for visualizing LCMS change summaries, land cover, and land use.\n", + "* A more in-depth visualization of LCMS products is available at: [https://apps.fs.usda.gov/lcms-viewer/index.html](https://apps.fs.usda.gov/lcms-viewer/index.html) \n", + "* Contact sm.fs.lcms@usda.gov with any questions or specific data requests.\n", "\n", "\n", "\n", - "

    \"Open

    " + "[![github](https://img.shields.io/badge/-see%20sources-white?logo=github&labelColor=555)](https://github.com/gee-community/geeviz/blob/master/examples/lcmsViewerExampleNotebook.ipynb) \n", + "[![github](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/gee-community/geeViz/blob/master/examples/lcmsViewerExampleNotebook.ipynb)" ] }, { @@ -457,7 +458,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 11, "id": "f7b4824e", "metadata": {}, "outputs": [ @@ -466,11 +467,12 @@ "output_type": "stream", "text": [ "Adding layer: LCMS Change Time Lapse\n", + "Setting default query date format to: YYYY\n", "Starting webmap\n", "Using default refresh token for geeView\n", "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=rcr-gee-2&accessToken=ya29.a0AfB_byBQwMDTqBKFllZQoa1bn5jPRXI0esx1cUuwXOzvbx-m_E327RkL0jDeU8DAGBhn1DZJM0awgBoTJW5L2X4oVycGZxD9fzORXakpgzOl9S2TJ0hgeWFF1-mytXLSUiGcZoG3XVyS4H5stTvugxvOLLPfcTNPA4Z6KJsEhu-GaCgYKAUASARASFQHGX2Mi7D0qnuquWaFbHJnW_oe2qw0179\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612wkLZ5nkrRefktkInWr4bG1xoFijDRm4zKqEkOSY5SlJkshjY8c8xPH0opFivgsSvpi-zs-EMn4cghA5Q9vvm7dszHkaSY2xuMWT94ACWv_8wy0D-nhVOi29Oo5fQ5wmHrYHpnRzBiH6SF3RyS-9rr7i3VwptGM3yc1aokaCgYKAUQSARESFQHGX2MiEKkp7i2adXQeQErg-zELAw0178\n" ] }, { @@ -480,7 +482,7 @@ " " + "" ] }, "metadata": {}, diff --git a/examples/mapBiomasViewerExampleNotebook.ipynb b/examples/mapBiomasViewerExampleNotebook.ipynb index a55b8b3..4813496 100644 --- a/examples/mapBiomasViewerExampleNotebook.ipynb +++ b/examples/mapBiomasViewerExampleNotebook.ipynb @@ -25,8 +25,8 @@ "See the License for the specific language governing permissions and\n", "limitations under the License.\n", "\n", - "\n", - "

    \"Open

    " + "[![github](https://img.shields.io/badge/-see%20sources-white?logo=github&labelColor=555)](https://github.com/gee-community/geeviz/blob/master/examples/mapBiomasViewerExampleNotebook.ipynb) \n", + "[![github](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/gee-community/geeViz/blob/master/examples/mapBiomasViewerExampleNotebook.ipynb)" ] }, { @@ -40,7 +40,20 @@ "text": [ "Initializing GEE\n", "Cached project id file path: C:\\Users\\ihousman\\.config\\earthengine\\credentials.proj_id\n", - "Cached project id: lcms-292214\n", + "Cached project id: lcms-292214\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "*** Earth Engine *** Share your feedback by taking our Annual Developer Satisfaction Survey: https://google.qualtrics.com/jfe/form/SV_0JLhFqfSY1uiEaW?source=Init\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Successfully initialized\n", "geeViz package folder: c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\geeViz\n", "done\n" @@ -90,11 +103,9 @@ "Adding layer: MapBiomas LULC\n", "Starting webmap\n", "Using default refresh token for geeView\n", - "Starting local web server at: http://localhost:8001/geeView/\n", - "HTTP server command: \"c:\\Users\\ihousman\\AppData\\Local\\Programs\\Python\\Python311\\python.exe\" -m http.server 8001\n", - "Done\n", + "Local web server at: http://localhost:8001/geeView/ already serving.\n", "cwd a:\\GEE\\gee_py_modules_package\\geeViz\\examples\n", - "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AcM612y8ZlxJh5tseR6SiuPocMyKlrXzdf5Qzq6KskwfbOwHa9ww08rwL0Q9wsBAwJHaujzpYpbWXBllmZn3SqjX3NAcrHHXy__zLsaAhNNgwiJecXOI9aURNb1ecAngWo_H1O6r5JnMs0dNrcVvPVHtPO9iLCNSpNwoxLwFnk8aCgYKAX8SARESFQHGX2Midtno9Bis8gZowS0Gh0zjmw0178\n" + "geeView URL: http://localhost:8001/geeView/?projectID=lcms-292214&accessToken=ya29.a0AeDClZBoV6RTt-kTHktaitp6cLCRopannvKr9B7F9QimHl9HpH7bQSlKU53sXETcKcw5F5qayQER5a-NS3bhiUocGlPCAoK0T4OH6kON4zdkFLv-ZFMB3-S0Hl34cOsGuljb25SUEJoSZ09ieUHPNmSPqKCvGV0V8dVSB4myMtwaCgYKATsSARESFQHGX2MiBg28W2WOQErk15VfYCK2tQ0178&accessTokenCreationTime=1732571109268\n" ] }, { @@ -104,7 +115,7 @@ " " + "" ] }, "metadata": {}, diff --git a/examples/taskTrackerExample.py b/examples/taskTrackerExample.py index 0c6ae0f..fa79bb4 100644 --- a/examples/taskTrackerExample.py +++ b/examples/taskTrackerExample.py @@ -1,5 +1,5 @@ """ - Copyright 2023 Ian Housman + Copyright 2024 Ian Housman Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,13 +14,15 @@ limitations under the License. """ -#Example of how to utilize the Python GEE task tracking -#This will run a function that will show tasks that are running as well as ready +# Example of how to utilize the Python GEE task tracking +# This will run a function that will show tasks that are running as well as ready #################################################################################################### -#Import modules -import os,sys +# Import modules +import os, sys + sys.path.append(os.getcwd()) from geeViz.taskManagerLib import * + #################################################################################################### -trackTasks() \ No newline at end of file +trackTasks() diff --git a/examples/timeLapseExample.py b/examples/timeLapseExample.py index 073bd59..463cfd9 100644 --- a/examples/timeLapseExample.py +++ b/examples/timeLapseExample.py @@ -1,5 +1,5 @@ """ - Copyright 2023 Ian Housman + Copyright 2024 Ian Housman Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,135 +14,109 @@ limitations under the License. """ -#Example of how to utilize the Python visualization tools -#Uses the several stock GEE assets to show time series as a time lapse -#Then uses those to color the raster and create a legend using the addToClassLegend option setting it to True -#Then provide a color dictionary with the format: {value:hex_color} ex({'1':'FF0','2':'F00'}) -#Since Python does not respect the order of keys in dictionaries, the dictionaries will be sorted by alpha/numeric order according to the keys -#Conversion of numbers to labels is supported with the queryDict key in the viz params -#Ex. {'1':'Water','2':'Trees'} +# Example of how to utilize the Python visualization tools +# Uses the several stock GEE assets to show time series as a time lapse +# Then uses those to color the raster and create a legend using the addToClassLegend option setting it to True +# Then provide a color dictionary with the format: {value:hex_color} ex({'1':'FF0','2':'F00'}) +# Since Python does not respect the order of keys in dictionaries, the dictionaries will be sorted by alpha/numeric order according to the keys +# Conversion of numbers to labels is supported with the queryDict key in the viz params +# Ex. {'1':'Water','2':'Trees'} #################################################################################################### -#Import modules -import os,sys +# Import modules +import os, sys + sys.path.append(os.getcwd()) import geeViz.getImagesLib as getImagesLib + ee = getImagesLib.ee Map = getImagesLib.Map Map.clearMap() #################################################################################################### -#Bring in pre-defined area -cambodia = ee.Feature(ee.Geometry.Polygon(\ - [[[104.48008284838329, 13.365070792606891],\ - [104.48008284838329, 12.218730827637675],\ - [106.08683333666454, 12.218730827637675],\ - [106.08683333666454, 13.365070792606891]]], None, False)) -gsl = ee.Feature(ee.Geometry.Polygon(\ - [[[-113.2053895191826, 41.82208938845069],\ - [-113.2053895191826, 40.5655604972739],\ - [-111.7002625660576, 40.5655604972739],\ - [-111.7002625660576, 41.82208938845069]]], None, False)) -rio = ee.Feature(ee.Geometry.Polygon(\ - [[[-107.5198171213165, 38.080864394376015],\ - [-107.5198171213165, 37.40759534811328],\ - [-106.6189382150665, 37.40759534811328],\ - [-106.6189382150665, 38.080864394376015]]], None, False)) -conus = ee.Feature(ee.Geometry.Polygon(\ - [ - [ - [ - -124.85720095425737, - 24.959288058753405 - ], - [ - -66.97879243191109, - 24.959288058753405 - ], - [ - -66.97879243191109, - 49.632344931561455 - ], - [ - -124.85720095425737, - 49.632344931561455 - ], - [ - -124.85720095425737, - 24.959288058753405 - ] - ] - ], None, False)) -Map.addLayer(conus,{'layerType':'geeVector'},'Conterminous United States for PDSI Time Lapse (double click to zoom to)',False); -Map.addLayer(gsl,{'layerType':'geeVector'},'Great Salt Lake Example Area for JRC Water Time Lapse (double click to zoom to)',False); -Map.addLayer(cambodia,{'layerType':'geeVector'},'Cambodia Example Area for Hansen Loss Time Lapse (double click to zoom to)',False); -Map.addLayer(rio,{'layerType':'geeVector'},'Rio Grande National Forest Example Area for LCMS Loss Time Lapse (double click to zoom to)',True); - -#The Map can be centered on featureCollections, features, or geometry +# Bring in pre-defined area +cambodia = ee.Feature(ee.Geometry.Polygon([[[104.48008284838329, 13.365070792606891], [104.48008284838329, 12.218730827637675], [106.08683333666454, 12.218730827637675], [106.08683333666454, 13.365070792606891]]], None, False)) +gsl = ee.Feature(ee.Geometry.Polygon([[[-113.2053895191826, 41.82208938845069], [-113.2053895191826, 40.5655604972739], [-111.7002625660576, 40.5655604972739], [-111.7002625660576, 41.82208938845069]]], None, False)) +rio = ee.Feature(ee.Geometry.Polygon([[[-107.5198171213165, 38.080864394376015], [-107.5198171213165, 37.40759534811328], [-106.6189382150665, 37.40759534811328], [-106.6189382150665, 38.080864394376015]]], None, False)) +conus = ee.Feature( + ee.Geometry.Polygon( + [[[-124.85720095425737, 24.959288058753405], [-66.97879243191109, 24.959288058753405], [-66.97879243191109, 49.632344931561455], [-124.85720095425737, 49.632344931561455], [-124.85720095425737, 24.959288058753405]]], None, False + ) +) +Map.addLayer(conus, {"layerType": "geeVector"}, "Conterminous United States for PDSI Time Lapse (double click to zoom to)", False) +Map.addLayer(gsl, {"layerType": "geeVector"}, "Great Salt Lake Example Area for JRC Water Time Lapse (double click to zoom to)", False) +Map.addLayer(cambodia, {"layerType": "geeVector"}, "Cambodia Example Area for Hansen Loss Time Lapse (double click to zoom to)", False) +Map.addLayer(rio, {"layerType": "geeVector"}, "Rio Grande National Forest Example Area for LCMS Loss Time Lapse (double click to zoom to)", True) + +# The Map can be centered on featureCollections, features, or geometry Map.centerObject(rio) -#Bring in the JRC Surface water data -water = ee.ImageCollection('JRC/GSW1_0/YearlyHistory') +# Bring in the JRC Surface water data +water = ee.ImageCollection("JRC/GSW1_0/YearlyHistory") -#Here is an example of creating a lookup dictionary -waterColors = ['ffffff','99d9ea','0000ff'] -waterLabels = ['1 Not Water','2 Seasonal Water','3 Permanent Water'] -waterDict = {waterLabels[i]: waterColors[i] for i in range(len(waterColors))} -waterQueryDict = {str(i+1): waterLabels[i] for i in range(len(waterLabels))} +# Here is an example of creating a lookup dictionary +waterColors = ["ffffff", "99d9ea", "0000ff"] +waterLabels = ["1 Not Water", "2 Seasonal Water", "3 Permanent Water"] +waterDict = {waterLabels[i]: waterColors[i] for i in range(len(waterColors))} +waterQueryDict = {str(i + 1): waterLabels[i] for i in range(len(waterLabels))} -Map.addTimeLapse(water,{'min':1,'max':3,'palette':waterColors,'addToClassLegend': True,'classLegendDict':waterDict,'queryDict':waterQueryDict},'JRC Surface Water Time Lapse',False) +Map.addTimeLapse(water, {"min": 1, "max": 3, "palette": waterColors, "addToClassLegend": True, "classLegendDict": waterDict, "queryDict": waterQueryDict}, "JRC Surface Water Time Lapse", False) -#Bring in Hansen loss -declineYearPalette = 'ffffe5,fff7bc,fee391,fec44f,fe9929,ec7014,cc4c02' +# Bring in Hansen loss +declineYearPalette = "ffffe5,fff7bc,fee391,fec44f,fe9929,ec7014,cc4c02" hansen = ee.Image("UMD/hansen/global_forest_change_2022_v1_10") -hansenLoss = hansen.select(['lossyear']).add(2000).int16() +hansenLoss = hansen.select(["lossyear"]).add(2000).int16() hansenStartYear = 2001 hansenEndYear = 2022 -hansenYears = ee.List.sequence(hansenStartYear,hansenEndYear) +hansenYears = ee.List.sequence(hansenStartYear, hansenEndYear) -#Convert to an image collection of the year of loss + +# Convert to an image collection of the year of loss def hansenFun(yr): - yr = ee.Number(yr) - t = ee.Image(yr).updateMask(hansenLoss.eq(yr)).set('system:time_start',ee.Date.fromYMD(yr,6,1).millis()) - return t.int16() -hansenC =ee.ImageCollection.fromImages(hansenYears.map(hansenFun)) + yr = ee.Number(yr) + t = ee.Image(yr).updateMask(hansenLoss.eq(yr)).set("system:time_start", ee.Date.fromYMD(yr, 6, 1).millis()) + return t.int16() + -#Add time lapse to map +hansenC = ee.ImageCollection.fromImages(hansenYears.map(hansenFun)) + +# Add time lapse to map hansenYearsCli = hansenYears.getInfo() -Map.addTimeLapse(hansenC,{'min':hansenStartYear,'max':hansenEndYear,'palette':declineYearPalette,'years':hansenYearsCli},'Hansen Loss Time Lapse') - -#Bring in LCMS -lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2022-8").select(['Change']) +Map.addTimeLapse(hansenC, {"min": hansenStartYear, "max": hansenEndYear, "palette": declineYearPalette, "years": hansenYearsCli}, "Hansen Loss Time Lapse") + +# Bring in LCMS +lcms = ee.ImageCollection("USFS/GTAC/LCMS/v2022-8").select(["Change"]) lcmsStartYear = 1985 lcmsEndYear = 2022 -lcmsYears = ee.List.sequence(lcmsStartYear,lcmsEndYear) +lcmsYears = ee.List.sequence(lcmsStartYear, lcmsEndYear) + def lcmsFun(yr): - yr = ee.Number(yr).int16() - lcmsT = lcms.filter(ee.Filter.calendarRange(yr,yr,'year')).mosaic() - change = lcmsT.eq(2).Or(lcmsT.eq(3)) - yrImg = ee.Image.constant(yr).updateMask(change).int16() - return yrImg.set('system:time_start',ee.Date.fromYMD(yr,6,1).millis()) + yr = ee.Number(yr).int16() + lcmsT = lcms.filter(ee.Filter.calendarRange(yr, yr, "year")).mosaic() + change = lcmsT.eq(2).Or(lcmsT.eq(3)) + yrImg = ee.Image.constant(yr).updateMask(change).int16() + return yrImg.set("system:time_start", ee.Date.fromYMD(yr, 6, 1).millis()) + lcms = ee.ImageCollection.fromImages(lcmsYears.map(lcmsFun)) # Map.addLayer(lcms) -Map.addTimeLapse(lcms,{'min':lcmsStartYear,'max':lcmsEndYear,'palette':declineYearPalette,'years':lcmsYears.getInfo()},'LCMS Loss Time Lapse') +Map.addTimeLapse(lcms, {"min": lcmsStartYear, "max": lcmsEndYear, "palette": declineYearPalette, "years": lcmsYears.getInfo()}, "LCMS Loss Time Lapse") -#Add PDSI time lapse +# Add PDSI time lapse pdsiStartYear = 2016 pdsiEndYear = 2020 -pdsi = ee.ImageCollection("GRIDMET/DROUGHT")\ - .filter(ee.Filter.calendarRange(pdsiStartYear,pdsiEndYear,'year')).select(['pdsi']) +pdsi = ee.ImageCollection("GRIDMET/DROUGHT").filter(ee.Filter.calendarRange(pdsiStartYear, pdsiEndYear, "year")).select(["pdsi"]) -#Convert 5 day PDSI values into 8 week composites (median) -pdsi = getImagesLib.nDayComposites(pdsi,pdsiStartYear,pdsiEndYear,1,365,56) +# Convert 5 day PDSI values into 8 week composites (median) +pdsi = getImagesLib.nDayComposites(pdsi, pdsiStartYear, pdsiEndYear, 1, 365, 56) -#Add PDSI time lapse -#This example isn't annual, so the dateFormat and advanceInterval are changed -Map.addTimeLapse(pdsi,{'min':-5,'max':5,'palette':'F00,888,00F','dateFormat':'YYYYMMdd','advanceInterval':'day'},'PDSI Time Lapse') +# Add PDSI time lapse +# This example isn't annual, so the dateFormat and advanceInterval are changed +Map.addTimeLapse(pdsi, {"min": -5, "max": 5, "palette": "F00,888,00F", "dateFormat": "YYYYMMdd", "advanceInterval": "day"}, "PDSI Time Lapse") Map.turnOnInspector() -#Final step is to launch the viewer -Map.view() \ No newline at end of file +# Final step is to launch the viewer +Map.view() diff --git a/geeView.py b/geeView.py index bb652f3..427006e 100644 --- a/geeView.py +++ b/geeView.py @@ -523,6 +523,8 @@ def addLayer(self, image: ee.Image | ee.ImageCollection | ee.Geometry | ee.Featu "autoViz" (bool): Whether to take image bandName_class_values, bandName_class_names, bandName_class_palette properties to visualize, create a legend (populates `classLegendDict`), and apply class names to any query functions (populates `queryDict`), + "includeClassValues" (bool, default True): Whether to include the numeric value of each class in the legend when `"autoViz":True`. + "canQuery" (bool, default True): Whether a layer can be queried when visible., "addToLegend" (bool, default True): Whether geeViz should try to create a legend for this layer. Sometimes setting it to `False` is useful for continuous multi-band inputs., @@ -564,9 +566,13 @@ def addLayer(self, image: ee.Image | ee.ImageCollection | ee.Geometry | ee.Featu "sankey" (bool, default False): Whether to create Sankey charts - only available for thematic (discrete) inputs that have a `system:time_start` property set for each image, - "sankeyTransitionPeriods" (list of lists, default None): The years to use as transition periods for sankey charts (e.g. [[1985,1987],[2000,2002],[2020,2022]]). If not provided, users can enter years in the map user interface under `Area Tools -> Transition Charting Periods`. These will automatically be used for any layers where no sankeyTransitionPeriods were provided. If years are provided, the years in the user interface will not be used for that layer. + "chartLabelMaxWidth" (int, default 40): The maximum number of characters, including spaces, allowed in a single line of a chart class label. The class name will be broken at this number of characters, including spaces, to go to the next line, + + "chartLabelMaxLength" (int, default 100): The maximum number of characters, including spaces, allowed in a chart class label. Any class name with more characters, including spaces, than this number will be cut off at this number of characters, + + "sankeyTransitionPeriods" (list of lists, default None): The years to use as transition periods for sankey charts (e.g. [[1985,1987],[2000,2002],[2020,2022]]). If not provided, users can enter years in the map user interface under `Area Tools -> Transition Charting Periods`. These will automatically be used for any layers where no sankeyTransitionPeriods were provided. If years are provided, the years in the user interface will not be used for that layer, - "sankeyMinPercentage" (float, default 0.5): The minimum percentage a given class has to be to be shown in the sankey chart. + "sankeyMinPercentage" (float, default 0.5): The minimum percentage a given class has to be to be shown in the sankey chart, "thematic" (bool): Whether input has discrete values or not. If True, it forces the reducer to `ee.Reducer.frequencyHistogram()` even if not specified and even if bandName_class_values, bandName_class_names, bandName_class_palette properties are not available, @@ -574,11 +580,17 @@ def addLayer(self, image: ee.Image | ee.ImageCollection | ee.Geometry | ee.Featu "showGrid" (bool, default True): Whether to show the grid lines on the line or bar graph, - "rangeSlider" (bool,default False): Whether to include the x-axis range selector on the bottom of each graph (`https://plotly.com/javascript/range-slider/>`) + "rangeSlider" (bool,default False): Whether to include the x-axis range selector on the bottom of each graph (`https://plotly.com/javascript/range-slider/>`), + + "barChartMaxClasses" (int, default 20): The maximum number of classes to show for image bar charts. Will automatically only show the top `bartChartMaxClasses` in any image bar chart. Any downloaded csv table will still have all of the class counts, + + "minZoomSpecifiedScale" (int, default 11): The map zoom level where any lower zoom level, not including this zoom level, will multiply the spatial resolution used for the zonal stats by 2 for each lower zoom level. E.g. if the `minZoomSpecifiedScale` is 9 and the `scale` is 30, any zoom level >= 9 will compute zonal stats at 30m spatial resolution. Then, at zoom level 8, it will be 60m. Zoom level 7 will be 120m, etc, + + "chartPrecision" (int, default 3): Used to override the default global precision settings for a specific area charting layer. See `setQueryPrecision` for setting the global charting precision. When specified, for this specific area charting layer, will show the larger of `chartPrecision` decimal places or ceiling(`chartDecimalProportion` * total decimal places). E.g. if the number is 1.12345678, 0.25 of 8 decimal places is 2, so 3 will be used and yield 1.123, - "barChartMaxClasses" (int, default 20): The maximum number of classes to show for image bar charts. Will automatically only show the top `bartChartMaxClasses` in any image bar chart. Any downloaded csv table will still have all of the class counts. + "chartDecimalProportion" (float, default 0.25): Used to override the default global precision settings for a specific area charting layer. See `setQueryPrecision` for setting the global charting precision. When specified, for this specific area charting layer, will show the larger of `chartPrecision` decimal places or `chartDecimalProportion` * total decimal places. E.g. if the number is 1.1234567891234, ceiling(0.25 of 13) decimal places is 4, so 4 will be used and yield 1.1235, - "minZoomSpecifiedScale" (int, default 11): The map zoom level where any lower zoom level, not including this zoom level, will multiply the spatial resolution used for the zonal stats by 2 for each lower zoom level. E.g. if the `minZoomSpecifiedScale` is 9 and the `scale` is 30, any zoom level >= 9 will compute zonal stats at 30m spatial resolution. Then, at zoom level 8, it will be 60m. Zoom level 7 will be 120m, etc. + "hovermode" (str, default "closest"): The mode to show hover text in area summary charts. Options include "closest", "x", "y", "x unified", and "y unified", } } @@ -687,6 +699,8 @@ def addTimeLapse(self, image: ee.ImageCollection, viz: dict = {}, name: str | No "autoViz" (bool): Whether to take image bandName_class_values, bandName_class_names, bandName_class_palette properties to visualize, create a legend (populates `classLegendDict`), and apply class names to any query functions (populates `queryDict`), + "includeClassValues" (bool, default True): Whether to include the numeric value of each class in the legend when `"autoViz":True`. + "canQuery" (bool, default True): Whether a layer can be queried when visible., "addToLegend" (bool, default True): Whether geeViz should try to create a legend for this layer. Sometimes setting it to `False` is useful for continuous multi-band inputs., @@ -728,9 +742,13 @@ def addTimeLapse(self, image: ee.ImageCollection, viz: dict = {}, name: str | No "sankey" (bool, default False): Whether to create Sankey charts - only available for thematic (discrete) inputs that have a `system:time_start` property set for each image, - "sankeyTransitionPeriods" (list of lists, default None): The years to use as transition periods for sankey charts (e.g. [[1985,1987],[2000,2002],[2020,2022]]). If not provided, users can enter years in the map user interface under `Area Tools -> Transition Charting Periods`. These will automatically be used for any layers where no sankeyTransitionPeriods were provided. If years are provided, the years in the user interface will not be used for that layer. + "chartLabelMaxWidth" (int, default 40): The maximum number of characters, including spaces, allowed in a single line of a chart class label. The class name will be broken at this number of characters, including spaces, to go to the next line, + + "chartLabelMaxLength" (int, default 100): The maximum number of characters, including spaces, allowed in a chart class label. Any class name with more characters, including spaces, than this number will be cut off at this number of characters, + + "sankeyTransitionPeriods" (list of lists, default None): The years to use as transition periods for sankey charts (e.g. [[1985,1987],[2000,2002],[2020,2022]]). If not provided, users can enter years in the map user interface under `Area Tools -> Transition Charting Periods`. These will automatically be used for any layers where no sankeyTransitionPeriods were provided. If years are provided, the years in the user interface will not be used for that layer, - "sankeyMinPercentage" (float, default 0.5): The minimum percentage a given class has to be to be shown in the sankey chart. + "sankeyMinPercentage" (float, default 0.5): The minimum percentage a given class has to be to be shown in the sankey chart, "thematic" (bool): Whether input has discrete values or not. If True, it forces the reducer to `ee.Reducer.frequencyHistogram()` even if not specified and even if bandName_class_values, bandName_class_names, bandName_class_palette properties are not available, @@ -738,11 +756,17 @@ def addTimeLapse(self, image: ee.ImageCollection, viz: dict = {}, name: str | No "showGrid" (bool, default True): Whether to show the grid lines on the line or bar graph, - "rangeSlider" (bool,default False): Whether to include the x-axis range selector on the bottom of each graph (`https://plotly.com/javascript/range-slider/>`) + "rangeSlider" (bool,default False): Whether to include the x-axis range selector on the bottom of each graph (`https://plotly.com/javascript/range-slider/>`), + + "barChartMaxClasses" (int, default 20): The maximum number of classes to show for image bar charts. Will automatically only show the top `bartChartMaxClasses` in any image bar chart. Any downloaded csv table will still have all of the class counts, + + "minZoomSpecifiedScale" (int, default 11): The map zoom level where any lower zoom level, not including this zoom level, will multiply the spatial resolution used for the zonal stats by 2 for each lower zoom level. E.g. if the `minZoomSpecifiedScale` is 9 and the `scale` is 30, any zoom level >= 9 will compute zonal stats at 30m spatial resolution. Then, at zoom level 8, it will be 60m. Zoom level 7 will be 120m, etc, - "barChartMaxClasses" (int, default 20): The maximum number of classes to show for image bar charts. Will automatically only show the top `bartChartMaxClasses` in any image bar chart. Any downloaded csv table will still have all of the class counts. + "chartPrecision" (int, default 3): Used to override the default global precision settings for a specific area charting layer. See `setQueryPrecision` for setting the global charting precision. When specified, for this specific area charting layer, will show the larger of `chartPrecision` decimal places or ceiling(`chartDecimalProportion` * total decimal places). E.g. if the number is 1.12345678, 0.25 of 8 decimal places is 2, so 3 will be used and yield 1.123, - "minZoomSpecifiedScale" (int, default 11): The map zoom level where any lower zoom level, not including this zoom level, will multiply the spatial resolution used for the zonal stats by 2 for each lower zoom level. E.g. if the `minZoomSpecifiedScale` is 9 and the `scale` is 30, any zoom level >= 9 will compute zonal stats at 30m spatial resolution. Then, at zoom level 8, it will be 60m. Zoom level 7 will be 120m, etc. + "chartDecimalProportion" (float, default 0.25): Used to override the default global precision settings for a specific area charting layer. See `setQueryPrecision` for setting the global charting precision. When specified, for this specific area charting layer, will show the larger of `chartPrecision` decimal places or `chartDecimalProportion` * total decimal places. E.g. if the number is 1.1234567891234, ceiling(0.25 of 13) decimal places is 4, so 4 will be used and yield 1.1235, + + "hovermode" (str, default "closest"): The mode to show hover text in area summary charts. Options include "closest", "x", "y", "x unified", and "y unified", } } @@ -1366,13 +1390,31 @@ def addAreaChartLayer(self, image: ee.Image | ee.ImageCollection, params: dict = "sankey" (bool, default False): Whether to create Sankey charts - only available for thematic (discrete) inputs that have a `system:time_start` property set for each image, - "sankeyTransitionPeriods" (list of lists, default None): The years to use as transition periods for sankey charts (e.g. [[1985,1987],[2000,2002],[2020,2022]]). If not provided, users can enter years in the map user interface under `Area Tools -> Transition Charting Periods`. These will automatically be used for any layers where no sankeyTransitionPeriods were provided. If years are provided, the years in the user interface will not be used for that layer. + "chartLabelMaxWidth" (int, default 40): The maximum number of characters, including spaces, allowed in a single line of a chart class label. The class name will be broken at this number of characters, including spaces, to go to the next line, + + "chartLabelMaxLength" (int, default 100): The maximum number of characters, including spaces, allowed in a chart class label. Any class name with more characters, including spaces, than this number will be cut off at this number of characters, + + "sankeyTransitionPeriods" (list of lists, default None): The years to use as transition periods for sankey charts (e.g. [[1985,1987],[2000,2002],[2020,2022]]). If not provided, users can enter years in the map user interface under `Area Tools -> Transition Charting Periods`. These will automatically be used for any layers where no sankeyTransitionPeriods were provided. If years are provided, the years in the user interface will not be used for that layer, - "sankeyMinPercentage" (float, default 0.5): The minimum percentage a given class has to be to be shown in the sankey chart. + "sankeyMinPercentage" (float, default 0.5): The minimum percentage a given class has to be to be shown in the sankey chart, "thematic" (bool): Whether input has discrete values or not. If True, it forces the reducer to `ee.Reducer.frequencyHistogram()` even if not specified and even if bandName_class_values, bandName_class_names, bandName_class_palette properties are not available, - "palette" (list, or comma-separated strings): List of hex codes for colors for charts. This is especially useful when bandName_class_values, bandName_class_names, bandName_class_palette properties are not available, but there is a desired set of colors for each band to have on the chart. + "palette" (list, or comma-separated strings): List of hex codes for colors for charts. This is especially useful when bandName_class_values, bandName_class_names, bandName_class_palette properties are not available, but there is a desired set of colors for each band to have on the chart, + + "showGrid" (bool, default True): Whether to show the grid lines on the line or bar graph, + + "rangeSlider" (bool,default False): Whether to include the x-axis range selector on the bottom of each graph (`https://plotly.com/javascript/range-slider/>`), + + "barChartMaxClasses" (int, default 20): The maximum number of classes to show for image bar charts. Will automatically only show the top `bartChartMaxClasses` in any image bar chart. Any downloaded csv table will still have all of the class counts, + + "minZoomSpecifiedScale" (int, default 11): The map zoom level where any lower zoom level, not including this zoom level, will multiply the spatial resolution used for the zonal stats by 2 for each lower zoom level. E.g. if the `minZoomSpecifiedScale` is 9 and the `scale` is 30, any zoom level >= 9 will compute zonal stats at 30m spatial resolution. Then, at zoom level 8, it will be 60m. Zoom level 7 will be 120m, etc, + + "chartPrecision" (int, default 3): Used to override the default global precision settings for a specific area charting layer. See `setQueryPrecision` for setting the global charting precision. When specified, for this specific area charting layer, will show the larger of `chartPrecision` decimal places or ceiling(`chartDecimalProportion` * total decimal places). E.g. if the number is 1.12345678, 0.25 of 8 decimal places is 2, so 3 will be used and yield 1.123, + + "chartDecimalProportion" (float, default 0.25): Used to override the default global precision settings for a specific area charting layer. See `setQueryPrecision` for setting the global charting precision. When specified, for this specific area charting layer, will show the larger of `chartPrecision` decimal places or `chartDecimalProportion` * total decimal places. E.g. if the number is 1.1234567891234, ceiling(0.25 of 13) decimal places is 4, so 4 will be used and yield 1.1235, + + "hovermode" (str, default "closest"): The mode to show hover text in area summary charts. Options include "closest", "x", "y", "x unified", and "y unified", } name (str): Descriptive name for map layer that will be shown on the map UI diff --git a/geeView/index.html b/geeView/index.html index 87761fe..e6e2be5 100644 --- a/geeView/index.html +++ b/geeView/index.html @@ -42,7 +42,8 @@ - + + diff --git a/geeView/src/js/lcms-viewer.min.js b/geeView/src/js/lcms-viewer.min.js index c2d89a7..0fa9ea3 100644 --- a/geeView/src/js/lcms-viewer.min.js +++ b/geeView/src/js/lcms-viewer.min.js @@ -10,9 +10,9 @@ window.location.host+ window.location.pathname+ constructUrlSearch();} let fullShareURL;const tiny_json_url="https://tiny-json-4539853f6a69.herokuapp.com";function storeParams(showSpinner=true,showPopup=true){const store_api=`${tiny_json_url}/store`;if(showSpinner===true){setTimeout(()=>Map.showSpinner(),100);} -urlParams.expectedCode=getCode();let res=$.ajax({type:"POST",url:store_api,async:false,data:JSON.stringify(urlParams),contentType:"application/json; charset=utf-8",});if(res.statusText==="OK"){let id=res.responseText;console.log(id);fullShareURL=`${baseUrl()}?id=${id}`;setUrl(fullShareURL);copyToClipBoard(fullShareURL,showPopup);} +urlParams.transitionChartingYears=getTransitionRowData(false);urlParams.expectedCode=getCode();let res=$.ajax({type:"POST",url:store_api,async:false,data:JSON.stringify(urlParams),contentType:"application/json; charset=utf-8",});if(res.statusText==="OK"){let id=res.responseText;console.log(id);fullShareURL=`${baseUrl()}?id=${id}`;setUrl(fullShareURL);copyToClipBoard(fullShareURL,showPopup);} if(showSpinner){setTimeout(()=>Map.hideSpinner(),100);}} -function retrieveParams(id,retrieve_api=`${tiny_json_url}/retrieve`){let res=$.ajax({type:"POST",async:false,url:retrieve_api,data:JSON.stringify({id:id}),contentType:"application/json; charset=utf-8",});console.log(res);if(res.statusText==="OK"){let params=res.responseJSON;console.log("Retrieved params:");console.log(params);Object.keys(params).map((k)=>{urlParams[k]=params[k];});}else{setTimeout(()=>showMessage("ID Failure",`Cannot find parameters for ID: ${id}. Using default parameters.`),500);}} +function retrieveParams(id,retrieve_api=`${tiny_json_url}/retrieve`){let res=$.ajax({type:"POST",async:false,url:retrieve_api,data:JSON.stringify({id:id}),contentType:"application/json; charset=utf-8",});if(res.statusText==="OK"){let params=res.responseJSON;console.log("Retrieved params:");console.log(params);Object.keys(params).map((k)=>{urlParams[k]=params[k];});}else{setTimeout(()=>showMessage("ID Failure",`Cannot find parameters for ID: ${id}. Using default parameters.`),500);}} function TweetThis(preURL="",postURL="",openInNewTab=false,showMessageBox=true,onlyURL=false){updatePageUrl();$.get("https://tinyurl.com/api-create.php",{url:pageUrl},function(tinyURL){console.log(tinyURL);const key=tinyURL.split("//tinyurl.com/")[1];const shareURL=pageUrl.split("?")[0]+"?id="+key;const fullURL=preURL+shareURL+postURL;ga("send","event",mode+"-share",pageUrl,shareURL);console.log("shared");if(openInNewTab){const win=window.open(fullURL,"_blank");win.focus();}else if(showMessageBox){const message=`
    @@ -35,15 +35,16 @@ if(urlParams.id!==undefined){if(urlParams.id.indexOf("-")>-1){retrieveParams(url function constructUrlSearch(maxLen=5000){let outURL="?";Object.keys(urlParams).map(function(p){if(typeof urlParams[p]==="object"){Object.keys(urlParams[p]).map((k)=>{let tp=encodeURIComponent(JSON.stringify(urlParams[p][k]));if(tp.length>maxLen){delete urlParams[p][k];}});}else{let tp=encodeURIComponent(JSON.stringify(urlParams[p]));if(tp.length>maxLen){delete urlParams[p];}}});Object.keys(urlParams).map(function(p){outURL+=p+"="+encodeURIComponent(JSON.stringify(urlParams[p]))+"&";});outURL=outURL.slice(0,outURL.length-1);return outURL;} let cachedSettingskey="settings";let startYear=1985;let endYear=2023;let activeStartYear=1985,activeEndYear=2023;let startJulian=153;let endJulian=274;let layerObj=null;let crs="EPSG:5070";let transform=[30,0,-2361915.0,0,-30,3177735.0];let scale=null;let chartPrecision=3;let chartDecimalProportion=0.25;let queryObj={},timeLapseObj={};dashboardObj={};let addLCMSTimeLapsesOn;parseUrlSearch();let initialCenter=[37.5334105816903,-105.6787109375];let initialZoomLevel=5;let studyAreaSpecificPage=false;const studyAreaDict={"USFS LCMS 1984-2020":{isPilot:false,name:"USFS LCMS 1984-2020",center:[37.5334105816903,-105.6787109375,5],crs:"EPSG:5070",startYear:1985,endYear:2023,conusSA:"projects/lcms-292214/assets/CONUS-Ancillary-Data/conus",conusLossThresh:0.23,conusFastLossThresh:0.29,conusSlowLossThresh:0.18,conusGainThresh:0.29,akSA:"projects/lcms-292214/assets/R10/CoastalAK/TCC_Boundary",akLossThresh:0.26,akFastLossThresh:0.34,akSlowLossThresh:0.17,akGainThresh:0.24,lcClassDict:{1:{modelName:"TREES",legendName:"Trees",color:"005e00"},2:{modelName:"TS-TREES",legendName:"Tall Shrubs & Trees Mix",color:"008000",},3:{modelName:"SHRUBS-TRE",legendName:"Shrubs & Trees Mix",color:"00cc00",},4:{modelName:"GRASS-TREE",legendName:"Grass/Forb/Herb & Trees Mix",color:"b3ff1a",},5:{modelName:"BARREN-TRE",legendName:"Barren & Trees Mix",color:"99ff99",},6:{modelName:"TS",legendName:"Tall Shrubs",color:"b30088"},7:{modelName:"SHRUBS",legendName:"Shrubs",color:"e68a00"},8:{modelName:"GRASS-SHRU",legendName:"Grass/Forb/Herb & Shrubs Mix",color:"ffad33",},9:{modelName:"BARREN-SHR",legendName:"Barren & Shrubs Mix",color:"ffe0b3",},10:{modelName:"GRASS",legendName:"Grass/Forb/Herb",color:"ffff00",},11:{modelName:"BARREN-GRA",legendName:"Barren & Grass/Forb/Herb Mix",color:"AA7700",},12:{modelName:"BARREN-IMP",legendName:"Barren or Impervious",color:"d3bf9b",},13:{modelName:"SNOW",legendName:"Snow or Ice",color:"ffffff"},14:{modelName:"WATER",legendName:"Water",color:"4780f3"},},luClassDict:{1:{modelName:"Agriculture",legendName:"Agriculture",color:"efff6b",},2:{modelName:"Developed",legendName:"Developed",color:"ff2ff8"},3:{modelName:"Forest",legendName:"Forest",color:"1b9d0c"},4:{modelName:"Non_Forest_Wetland",legendName:"Non-Forest Wetland",color:"97ffff",},5:{modelName:"Other",legendName:"Other",color:"a1a1a1"},6:{modelName:"Rangeland",legendName:"Rangeland or Pasture",color:"c2b34a",},},final_collections:["USFS/GTAC/LCMS/v2023-9"],composite_collections:["projects/lcms-tcc-shared/assets/CONUS/Composites/Composite-Collection-yesL7","projects/lcms-tcc-shared/assets/OCONUS/R10/AK/Composites/Composite-Collection","projects/lcms-tcc-shared/assets/OCONUS/R8/PR_USVI/Composites/Composite-Collection","projects/lcms-tcc-shared/assets/OCONUS/Hawaii/Composites/Composite-Collection1988-2023",],lt_collections:["projects/lcms-tcc-shared/assets/CONUS/Base-Learners/LandTrendr-Collection","projects/lcms-tcc-shared/assets/OCONUS/Hawaii/Base-Learners/LandTrendr-Collection_1984-2023","projects/lcms-tcc-shared/assets/OCONUS/R8/PR_USVI/Base-Learners/LandTrendr-Collection","projects/lcms-tcc-shared/assets/OCONUS/R10/AK/Base-Learners/LandTrendr-Collection",],ccdc_single_collections:["projects/lcms-292214/assets/R8/PR_USVI/Base-Learners/CCDC-Landsat","projects/lcms-292214/assets/R5/Hawaii/Base-Learners/CCDC-Collection",],ccdc_paired_collections:[["projects/lcms-292214/assets/CONUS-LCMS/Base-Learners/CCDC-Collection-1984-2022","projects/lcms-292214/assets/CONUS-LCMS/Base-Learners/CCDC-Feathered-Collection",],["projects/lcms-292214/assets/R10/AK/Base-Learners/CCDC-Collection_TOA","projects/lcms-292214/assets/R10/AK/Base-Learners/CCDC-Feathered-Collection",],],},};let defaultStudyArea="USFS LCMS 1984-2020";let studyAreaName=studyAreaDict[defaultStudyArea].name;let longStudyAreaName=defaultStudyArea;let cachedStudyAreaName=null;let viewBeta="yes";let lowerThresholdDecline=studyAreaDict[defaultStudyArea].lossThresh;let upperThresholdDecline=1.0;let lowerThresholdRecovery=studyAreaDict[defaultStudyArea].gainThresh;let upperThresholdRecovery=1.0;let lowerThresholdSlowLoss=studyAreaDict[defaultStudyArea].lossSlowThresh;let upperThresholdSlowLoss=1.0;let lowerThresholdFastLoss=studyAreaDict[defaultStudyArea].lossFastThresh;let upperThresholdFastLoss=1.0;if(lowerThresholdSlowLoss===undefined){lowerThresholdSlowLoss=lowerThresholdDecline;} if(lowerThresholdFastLoss===undefined){lowerThresholdFastLoss=lowerThresholdDecline;} -const clientBoundsDict={All:{geodesic:false,type:"Polygon",coordinates:[[[-169.215141654273,71.75307977193499],[-169.215141654273,15.643479915898974],[-63.043266654273,15.643479915898974],[-63.043266654273,71.75307977193499],],],},CONUS:{geodesic:false,type:"Polygon",coordinates:[[[-148.04139715349993,30.214881196707502],[-63.66639715349993,30.214881196707502],[-63.66639715349993,47.18482008797388],[-148.04139715349993,47.18482008797388],[-148.04139715349993,30.214881196707502],],],},Alaska:{geodesic:false,type:"Polygon",coordinates:[[[-168.91542059099993,71.62680009186087],[-168.91542059099993,52.67867842404269],[-129.54042059099993,52.67867842404269],[-129.54042059099993,71.62680009186087],],],},CONUS_SEAK:{type:"Polygon",coordinates:[[[171.00872335506813,59.78242951494817],[171.00872335506813,26.87020622017523],[-53.99127664493189,26.87020622017523],[-53.99127664493189,59.78242951494817],[171.00872335506813,59.78242951494817],],],},Hawaii:{geodesic:false,type:"Polygon",coordinates:[[[-162.7925163471209,18.935659110261664],[-152.2511345111834,18.935659110261664],[-152.2511345111834,22.134763696750557],[-162.7925163471209,22.134763696750557],[-162.7925163471209,18.935659110261664],],],},"Puerto-Rico":{geodesic:false,type:"Polygon",coordinates:[[[-67.98169635150003,17.751237971831113],[-65.34635089251566,17.751237971831113],[-65.34635089251566,18.532938160084615],[-67.98169635150003,18.532938160084615],[-67.98169635150003,17.751237971831113],],],},R4:{geodesic:false,type:"Polygon",coordinates:[[[-120.14785145677105,35.00187373433839],[-108.8802160007048,35.00187373433839],[-108.8802160007048,45.70613418897154],[-120.14785145677105,45.70613418897154],[-120.14785145677105,35.00187373433839],],],},};let toExport;let exportArea;let taskCount=0;let canAddToMap=true;let canExport=false;let colorRampIndex=1;let NEXT_LAYER_ID=1,layerChildID=0;let layerCount=0,refreshNumber=0;let uri,uriName,csvName,dataTable,chartOptions,infowindow,queryGeoJSON,marker,mtbsSummaryMethod;const selectedFeaturesJSON={};const selectionTracker={};let selectionUNID=1;let updateViewList=true;let viewList=[];let viewIndex=0;let outputURL;let tableConverter=null;let groundOverlayOn=false;let chartIncludeDate=true,chartCollection,pixelChartCollections={},areaChartCollections={},queryClassDict={},exportImage,exportVizParams,eeBoundsPoly,shapesMap;let mouseLat,mouseLng,area=0,distance=0,areaPolygon,markerList=[],distancePolylineT,clickCoords,distanceUpdater;let updateArea,updateDistance,areaPolygonObj={},udpPolygonObj={},udpPolygonNumber=1,mapHammer,chartMTBS,chartMTBSByNLCD,chartMTBSByAspect;let walkThroughAdded=false;let distancePolyline;const distancePolylineOptions={strokeColor:"#FF0",icons:[{icon:{path:"M 0,-1 0,1",strokeOpacity:1,scale:4,},offset:"0",repeat:"20px",},],strokeOpacity:0,strokeWeight:3,draggable:true,editable:true,geodesic:true,};let polyNumber=1,polyOn=false;const areaPolygonOptions={strokeColor:"#FF0",fillOpacity:0.2,strokeOpacity:1,strokeWeight:3,draggable:true,editable:true,geodesic:true,polyNumber:polyNumber,};let userDefinedI=1;const udpOptions={strokeColor:"#FF0",fillOpacity:0.2,strokeOpacity:1,strokeWeight:3,draggable:true,editable:true,geodesic:true,polyNumber:1,};const exportAreaPolylineOptions={strokeColor:"#FF0",fillOpacity:0.2,strokeOpacity:1,strokeWeight:3,draggable:true,editable:true,geodesic:true,polyNumber:1,};const exportAreaPolygonOptions={strokeColor:"#FF0",fillOpacity:0.2,strokeOpacity:1,strokeWeight:3,draggable:false,editable:false,geodesic:true,polyNumber:1,};let exportImageDict={};let featureObj={},geeRunID,outstandingGEERequests=0,geeTileLayersDownloading=0;let plotDictID=1,exportID=1;const unitMultiplierDict={imperial:{area:[10.7639,0.000247105],distance:[3.28084,0.000621371]},metric:{area:[1,0.0001],distance:[1,0.001]},};const unitNameDict={imperial:{area:["ft2","acres"],distance:["ft","miles"]},metric:{area:["m2","hectares"],distance:["m","km"]},};let plotRadius=15;let plotScale=30;let yLabelMaxLength=30;let yLabelBreakLength=10;let yLabelMaxLines=5;let yLabelFontSize=10;let yLabelMaxTotalLines=18;let defaultQueryDateFormat="YYYY-MM-dd";let clickBoundsColor="#FF0";let areaChartFormatDict={Percentage:{mult:100,label:"% Area"},Acres:{mult:0.000247105,label:"Acres"},Hectares:{mult:0.0001,label:"Hectares"},};let areaGeoJson;let areaChartingCount=0;let center;let globalChartValues;let chartColorI=0;let chartColorsDict={standard:["#050","#0A0","#e6194B","#14d4f4"],advanced:["#050","#0A0","#9A6324","#6f6f6f","#e6194B","#14d4f4"],advancedBeta:["#050","#0A0","#9A6324","#6f6f6f","#e6194B","#14d4f4","#808","#f58231",],coreLossGain:["#050","#0A0","#e6194B","#14d4f4"],allLossGain:["#050","#0A0","#e6194B","#808","#f58231","#14d4f4"],allLossGain2:["#050","#0A0","#0E0","f39268","d54309","00a398"],allLossGain2Area:["f39268","d54309","00a398","ffbe2e"],test:["#9A6324","#6f6f6f","#e6194B","#14d4f4","#880088","#f58231"],testArea:["#e6194B","#14d4f4","#880088","#f58231"],ancillary:["#cc0066","#660033","#9933ff","#330080","#ff3300","#47d147","#00cc99","#ff9966","#b37700",],};let chartColors=chartColorsDict.standard;const zoomDict={20:"1,128",19:"2,257",18:"4,514",17:"9,028",16:"18,056",15:"36,112",14:"72,224",13:"144,448",12:"288,892",11:"577,791",10:"1,155,581",9:"2,311,162",8:"4,622,325",7:"9,244,649",6:"18,489,298",5:"36,978,597",4:"73,957,194",3:"147,914,388",2:"295,828,775",1:"591,657,551",};if(urlParams.geeAuthProxyURL==null||urlParams.geeAuthProxyURL==undefined){urlParams.geeAuthProxyURL="https://rcr-ee-proxy-2.herokuapp.com";} +const clientBoundsDict={All:{geodesic:false,type:"Polygon",coordinates:[[[-169.215141654273,71.75307977193499],[-169.215141654273,15.643479915898974],[-63.043266654273,15.643479915898974],[-63.043266654273,71.75307977193499],],],},CONUS:{geodesic:false,type:"Polygon",coordinates:[[[-148.04139715349993,30.214881196707502],[-63.66639715349993,30.214881196707502],[-63.66639715349993,47.18482008797388],[-148.04139715349993,47.18482008797388],[-148.04139715349993,30.214881196707502],],],},Alaska:{geodesic:false,type:"Polygon",coordinates:[[[-168.91542059099993,71.62680009186087],[-168.91542059099993,52.67867842404269],[-129.54042059099993,52.67867842404269],[-129.54042059099993,71.62680009186087],],],},CONUS_SEAK:{type:"Polygon",coordinates:[[[171.00872335506813,59.78242951494817],[171.00872335506813,26.87020622017523],[-53.99127664493189,26.87020622017523],[-53.99127664493189,59.78242951494817],[171.00872335506813,59.78242951494817],],],},Hawaii:{geodesic:false,type:"Polygon",coordinates:[[[-162.7925163471209,18.935659110261664],[-152.2511345111834,18.935659110261664],[-152.2511345111834,22.134763696750557],[-162.7925163471209,22.134763696750557],[-162.7925163471209,18.935659110261664],],],},"Puerto-Rico":{geodesic:false,type:"Polygon",coordinates:[[[-67.98169635150003,17.751237971831113],[-65.34635089251566,17.751237971831113],[-65.34635089251566,18.532938160084615],[-67.98169635150003,18.532938160084615],[-67.98169635150003,17.751237971831113],],],},R4:{geodesic:false,type:"Polygon",coordinates:[[[-120.14785145677105,35.00187373433839],[-108.8802160007048,35.00187373433839],[-108.8802160007048,45.70613418897154],[-120.14785145677105,45.70613418897154],[-120.14785145677105,35.00187373433839],],],},};let toExport;let exportArea;let exportAreaDrawingActive=false;let taskCount=0;let canAddToMap=true;let canExport=false;let colorRampIndex=1;let NEXT_LAYER_ID=1,layerChildID=0;let layerCount=0,refreshNumber=0;let uri,uriName,csvName,dataTable,chartOptions,infowindow,queryGeoJSON,marker,mtbsSummaryMethod;const selectedFeaturesJSON={};const selectionTracker={};let selectionUNID=1;let updateViewList=true;let viewList=[];let viewIndex=0;let outputURL;let tableConverter=null;let groundOverlayOn=false;let chartIncludeDate=true,chartCollection,pixelChartCollections={},areaChartCollections={},queryClassDict={},exportImage,exportVizParams,eeBoundsPoly,shapesMap;let mouseLat,mouseLng,area=0,distance=0,areaPolygon,markerList=[],distancePolylineT,clickCoords,distanceUpdater;let updateArea,updateDistance,areaPolygonObj={},udpPolygonObj={},udpPolygonNumber=1,mapHammer,chartMTBS,chartMTBSByNLCD,chartMTBSByAspect;let walkThroughAdded=false;let distancePolyline;const distancePolylineOptions={strokeColor:"#FF0",icons:[{icon:{path:"M 0,-1 0,1",strokeOpacity:1,scale:4,},offset:"0",repeat:"20px",},],strokeOpacity:0,strokeWeight:3,draggable:true,editable:true,geodesic:true,};let polyNumber=1,polyOn=false;const areaPolygonOptions={strokeColor:"#FF0",fillOpacity:0.2,strokeOpacity:1,strokeWeight:3,draggable:true,editable:true,geodesic:true,polyNumber:polyNumber,};let userDefinedI=1;const udpOptions={strokeColor:"#FF0",fillOpacity:0.2,strokeOpacity:1,strokeWeight:3,draggable:true,editable:true,geodesic:true,polyNumber:1,};const exportAreaPolylineOptions={strokeColor:"#FF0",fillOpacity:0.2,strokeOpacity:1,strokeWeight:3,draggable:true,editable:true,geodesic:true,polyNumber:1,};const exportAreaPolygonOptions={strokeColor:"#FF0",fillOpacity:0.2,strokeOpacity:1,strokeWeight:3,draggable:false,editable:false,geodesic:true,polyNumber:1,};let exportImageDict={};let featureObj={},geeRunID,outstandingGEERequests=0,geeTileLayersDownloading=0;let plotDictID=1,exportID=1;const unitMultiplierDict={imperial:{area:[10.7639,0.000247105],distance:[3.28084,0.000621371]},metric:{area:[1,0.0001],distance:[1,0.001]},};const unitNameDict={imperial:{area:["ft2","acres"],distance:["ft","miles"]},metric:{area:["m2","hectares"],distance:["m","km"]},};let plotRadius=15;let plotScale=30;let yLabelMaxLength=30;let yLabelBreakLength=10;let yLabelMaxLines=5;let yLabelFontSize=10;let yLabelMaxTotalLines=18;let defaultQueryDateFormat="YYYY-MM-dd";let clickBoundsColor="#FF0";let areaChartFormatDict={Percentage:{mult:100,label:"% Area"},Acres:{mult:0.000247105,label:"Acres"},Hectares:{mult:0.0001,label:"Hectares"},};let areaGeoJson;let areaChartingCount=0;let center;let globalChartValues;let chartColorI=0;let chartColorsDict={standard:["#050","#0A0","#e6194B","#14d4f4"],advanced:["#050","#0A0","#9A6324","#6f6f6f","#e6194B","#14d4f4"],advancedBeta:["#050","#0A0","#9A6324","#6f6f6f","#e6194B","#14d4f4","#808","#f58231",],coreLossGain:["#050","#0A0","#e6194B","#14d4f4"],allLossGain:["#050","#0A0","#e6194B","#808","#f58231","#14d4f4"],allLossGain2:["#050","#0A0","#0E0","f39268","d54309","00a398"],allLossGain2Area:["f39268","d54309","00a398","ffbe2e"],test:["#9A6324","#6f6f6f","#e6194B","#14d4f4","#880088","#f58231"],testArea:["#e6194B","#14d4f4","#880088","#f58231"],ancillary:["#cc0066","#660033","#9933ff","#330080","#ff3300","#47d147","#00cc99","#ff9966","#b37700",],};let chartColors=chartColorsDict.standard;const zoomDict={20:"1,128",19:"2,257",18:"4,514",17:"9,028",16:"18,056",15:"36,112",14:"72,224",13:"144,448",12:"288,892",11:"577,791",10:"1,155,581",9:"2,311,162",8:"4,622,325",7:"9,244,649",6:"18,489,298",5:"36,978,597",4:"73,957,194",3:"147,914,388",2:"295,828,775",1:"591,657,551",};if(urlParams.geeAuthProxyURL==null||urlParams.geeAuthProxyURL==undefined){urlParams.geeAuthProxyURL="https://rcr-ee-proxy-2.herokuapp.com";} let authProxyAPIURL=urlParams.geeAuthProxyURL;let geeAPIURL="https://earthengine.googleapis.com";if(urlParams.accessToken!==null&&urlParams.accessToken!==undefined&&urlParams.accessToken!=="null"&&urlParams.accessToken!=="None"){authProxyAPIURL=null;geeAPIURL=null;ee.data.setAuthToken("","Bearer",urlParams.accessToken,3600,[],undefined,false);} let projectID=null;if(urlParams.projectID!==null&&urlParams.projectID!==undefined&&urlParams.projectID!=="None"){projectID=urlParams.projectID;} if(urlParams.layerProps===undefined||urlParams.layerProps===null){urlParams.layerProps={};} if(urlParams.cumulativeMode===undefined||urlParams.cumulativeMode===null){urlParams.cumulativeMode=false;} -let plotsOn=false;Array.prototype.max=function(){return Math.max.apply(null,this);};Array.prototype.min=function(){return Math.min.apply(null,this);};String.prototype.toProperCase=function(){return this.replace(/\w\S*/g,function(txt){return txt.charAt(0).toUpperCase()+txt.substr(1).toLowerCase();});};String.prototype.replaceAll=function(str1,str2,ignore){return this.replace(new RegExp(str1.replace(/([\/\,\!\\\^\$\{\}\[\]\(\)\.\*\+\?\|\<\>\-\&])/g,"\\$&"),ignore?"gi":"g"),typeof str2=="string"?str2.replace(/\$/g,"$$$$"):str2);};Array.prototype.insert=function(index){this.splice.apply(this,[index,0].concat(Array.prototype.slice.call(arguments,1)));return this;};Number.prototype.formatNumber=function(n=2){return this.toFixed(n).replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1,");};Number.prototype.repeat=function(n=2){return Array(n).fill(this*1);};function smartToFixed(v){if(Number.isInteger(v)||!isNumber(v)){return v;}else{if(typeof v==="string"){v=v.indexOf(".")>-1?parseFloat(v):parseInt(v);if(Number.isInteger(v)){return v;}} -let currentDecimalL=v.toString().split(".")[1].length;let maxToFixedL=Math.ceil(currentDecimalL*chartDecimalProportion);let toFixedL=Math.max(chartPrecision,maxToFixedL);let out=parseFloat(v.toFixed(toFixedL));return out;}} +let plotsOn=false;Array.prototype.max=function(){return Math.max.apply(null,this);};Array.prototype.min=function(){return Math.min.apply(null,this);};String.prototype.toProperCase=function(){return this.replace(/\w\S*/g,function(txt){return txt.charAt(0).toUpperCase()+txt.substr(1).toLowerCase();});};String.prototype.replaceAll=function(str1,str2,ignore){return this.replace(new RegExp(str1.replace(/([\/\,\!\\\^\$\{\}\[\]\(\)\.\*\+\?\|\<\>\-\&])/g,"\\$&"),ignore?"gi":"g"),typeof str2=="string"?str2.replace(/\$/g,"$$$$"):str2);};Array.prototype.insert=function(index){this.splice.apply(this,[index,0].concat(Array.prototype.slice.call(arguments,1)));return this;};Number.prototype.formatNumber=function(n=2){return this.toFixed(n).replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1,");};Number.prototype.repeat=function(n=2){return Array(n).fill(this*1);};function smartToFixed(v,chartDecimalProportionT=chartDecimalProportion,chartPrecisionT=chartPrecision){if(Number.isInteger(v)||!isNumber(v)){return v;}else{if(typeof v==="string"){v=v.indexOf(".")>-1?parseFloat(v):parseInt(v);if(Number.isInteger(v)){return v;}} +let currentDecimalL=v.toString().split(".")[1].length;let maxToFixedL=Math.ceil(currentDecimalL*chartDecimalProportionT);let toFixedL=Math.max(chartPrecisionT,maxToFixedL);let out=parseFloat(v.toFixed(toFixedL));return out;}} function isNumber(n){return!isNaN(parseFloat(n))&&isFinite(n);} -function arraySmartToFixed(array,precision=chartPrecision){const roundedArray=[];array.forEach(function round(elem){if(isNumber(elem)){roundedArray.push(smartToFixed(elem));}else if(elem.constructor===Array){roundedArray.push(arraySmartToFixed(elem,precision));}else{roundedArray.push(elem);}});return roundedArray;} +function arraySmartToFixed(array,chartDecimalProportionT=chartDecimalProportion,chartPrecisionT=chartPrecision){const roundedArray=[];array.forEach(function round(elem){if(isNumber(elem)){roundedArray.push(smartToFixed(elem,chartDecimalProportionT,chartPrecisionT));}else if(elem===null){roundedArray.push(elem);}else if(elem.constructor===Array){roundedArray.push(arraySmartToFixed(elem,chartDecimalProportionT,chartPrecisionT));}else{roundedArray.push(elem);}});return roundedArray;} +function transpose(matrix){return matrix[0].map((col,i)=>matrix.map((row)=>row[i]));} Number.prototype.round=function(n=2){return Math.round(this*10**n)/10**n;};Number.prototype.numberWithCommas=function(){return this.toString().replace(/\B(?=(\d{3})+(?!\d))/g,",");};String.prototype.numberWithCommas=function(){return this.replace(/\B(?=(\d{3})+(?!\d))/g,",");};String.prototype.toTitle=function(){return this.replace(/(^|\s)\S/g,function(t){return t.toUpperCase();});};String.prototype.chunk=function(size){return this.match(new RegExp(".{1,"+size+"}","g"));};String.prototype.smartBreak=function(size=10,joinStr="
    "){return this.chunk(size).join(joinStr);};Date.prototype.toStringFormat=function(){const months=["January","February","March","April","May","June","July","August","September","October","November","December",];const yr=this.getFullYear();const month=months[this.getMonth()];const day=this.getDate();return`${day} ${month} ${yr}`;};Date.prototype.dayOfYear=function(){const j1=new Date(this);j1.setMonth(0,0);return Math.round((this-j1)/8.64e7);};const zip=(a,b)=>a.map((k,i)=>[k,b[i]]);const cbind=(a,b)=>a.map((k,i)=>k.concat([b[i]]));const dictFromKeyValues=(a,b)=>{let out={};a.map((k,i)=>{out[k]=b[i];});return out;};function unique(arr){let u={},a=[];for(let i=0,l=arr.length;i`;} function updateDistanceColor(jscolor){distancePolylineOptions.strokeColor="#"+jscolor;if(distancePolyline!==undefined){distancePolyline.setOptions(distancePolylineOptions);}} function updateUDPColor(jscolor){udpOptions.strokeColor="#"+jscolor;Object.keys(udpPolygonObj).map(function(k){udpPolygonObj[k].setOptions(udpOptions);});} -function updateAreaColor(jscolor){areaPolygonOptions.strokeColor="#"+jscolor;Object.keys(areaPolygonObj).map(function(k){areaPolygonObj[k].setOptions(areaPolygonOptions);console.log(areaPolygonObj[k]);});} +function updateAreaColor(jscolor){areaPolygonOptions.strokeColor="#"+jscolor;Object.keys(areaPolygonObj).map(function(k){areaPolygonObj[k].setOptions(areaPolygonOptions);});} function addColorPicker(containerID,pickerID,updateFunction,value){if(value===undefined||value===null){value="FFFF00";} $("#"+containerID).append(`
    `;$("#"+containerID).append(collapseTitleDiv);$("#"+containerID).append(collapseDiv);} + `;$("#"+containerID).append(collapseTitleDiv);$("#"+containerID).append(collapseDiv);} function addAccordianContainer(parentContainerID,accordianContainerID){$("#"+parentContainerID).append(`
    `);} let panelCollapseI=1;function addAccordianCard(accordianContainerID,accordianCardHeaderID,accordianCardBodyID,accordianCardHeaderContent,accordianCardBodyContent,show,onclick,toolTip){let collapsed;if(toolTip===undefined||toolTip===null){toolTip="";} if(show===true||show==="true"||show==="show"){show="show";collapsed="";}else{show="";collapsed="collapsed";} @@ -1825,12 +1826,13 @@ getCoords(r.geometry);layer.dashboardSelectedFeatures[featureName].polyList.map( let selectedNames=Object.keys(layer.dashboardSelectedFeatures).join(",");updateDashboardCharts();});}}}} function addLayerSortListener(containerSelector,layerSelector=".layer-container.draggable-layer",layerSplitString="-container-"){$(containerSelector).sortable({items:`>${layerSelector}`});$(containerSelector).on("sortstop",(e,ui)=>{let layerContainerIDs=$.map($(`${containerSelector}>${layerSelector}`),(n)=>n.id.split(layerSplitString)[0]);layerContainerIDs=layerContainerIDs.reverse();let currentLayerIDs=layerContainerIDs.map((layerContainerID)=>layerObj[layerContainerID].layerId).sort((a,b)=>a-b);layerContainerIDs.forEach((layerContainerID,i)=>{let layer=layerObj[layerContainerID];layerObj[layerContainerID].layerId=currentLayerIDs[i];});layerContainerIDs.forEach((layerContainerID,i)=>{let layer=layerObj[layerContainerID];if(layer.visible){if(layer.layerType!=="geeVector"&&layer.layerType!=="geoJSONVector"){layer.map.overlayMapTypes.setAt(layer.layerId,layer.layer);}else{layer.map.overlayMapTypes.setAt(layer.layerId,null);layer.layer.setMap(layer.map);} }else{if(layer.layerType!=="geeVector"&&layer.layerType!=="geoJSONVector"){layer.map.overlayMapTypes.setAt(layer.layerId,null);}else{layer.layer.setMap(null);}}});});} -function getTransitionRowData(){const periods=[];const errorList=[];let periodsValid=true;let rowI;if($("#added-transition-rows tr").length<=1){periodsValid=false;errorList.push("noValues");}else{rowI=1;$("#added-transition-rows tr").each(function(){const row=[];let colI=0;$(this).find("td").each(function(){$(this).find("input").each(function(){let v=parseInt($(this).val());row.push(v);});colI++;});periods.push(row);rowI++;});} +function getTransitionRowData(verbose){const periods=[];const errorList=[];let periodsValid=true;let rowI;if($("#added-transition-rows tr").length<=1){periodsValid=false;errorList.push("noValues");}else{rowI=1;$("#added-transition-rows tr").each(function(){const row=[];let colI=0;$(this).find("td").each(function(){$(this).find("input").each(function(){let v=parseInt($(this).val());row.push(v);});colI++;});periods.push(row);rowI++;});} const errorDict={noValues:"No year pairs provided. Please add at least two rows of years.",blank:"One or more blank value found",outsideYearRange:`Found years outside available year range. Please ensure all years are >= ${activeStartYear} and <= ${activeEndYear}.`,backwards:"One or more row has a first year that is greater than the last year",overlap:"Please ensure all transition periods have values and are in succession of one another and do not overlap",};rowI=0;periods.map((row)=>{row.map((n)=>{if(isNaN(n)){errorList.push("blank");} if(nactiveEndYear){errorList.push("outsideYearRange");}});if(row[1]0){let previousRow=periods[rowI-1];if(previousRow[1]>=row[0]){errorList.push("overlap");}} -rowI++;});if(errorList.length>0){let errorMessage="The following errors were found:
    "+ -unique(errorList).map((e)=>errorDict[e]).join("
    ");showMessage("Invalid Transition Periods Provided",errorMessage);periodsValid=false;} +rowI++;});if(errorList.length>0){if(verbose!==false){let errorMessage="The following errors were found:
    "+ +unique(errorList).map((e)=>errorDict[e]).join("
    ");showMessage("Invalid Transition Periods Provided",errorMessage);} +periodsValid=false;} if(periodsValid){return periods;}else{return null;}} function setupTransitionPeriodUI(containerID="transition-periods-container"){$(`#${containerID}`).empty();$(`#${containerID}`).append(`
    @@ -1865,8 +1867,8 @@ function setupTransitionPeriodUI(containerID="transition-periods-container"){$(` -`);addTransitionRow();addTransitionRow();} -let transitionRowI=0;function addRow(containerID,rowID,yr1,yr2,isBookend=false){let rows=$(`#${containerID} tr`);const row=` +`);if(urlParams.transitionChartingYears!==undefined&&urlParams.transitionChartingYears!==null){urlParams.transitionChartingYears.map((yrs)=>addTransitionRow(yrs[0],yrs[1],true));}else{addTransitionRow();addTransitionRow();}} +let transitionRowI=0;function addRow(containerID,rowID,yr1,yr2,simpleAppend=false){let rows=$(`#${containerID} tr`);const row=` @@ -1874,13 +1876,13 @@ let transitionRowI=0;function addRow(containerID,rowID,yr1,yr2,isBookend=false){ - `;if(rows.length<2){$(`#${containerID}`).append(row);}else{rows.eq(-1).before(row);} + `;if(rows.length<2||simpleAppend){$(`#${containerID}`).append(row);}else{rows.eq(-1).before(row);} $(`#${rowID}`).append(` `);} function removeRow(rowID){console.log(rowID);$(`#${rowID}`).remove();} -function addTransitionRow(){let startYear="",endYear="";const nRows=$(`#added-transition-rows tr`).length;if(nRows===0){startYear=activeStartYear;endYear=activeStartYear+2;}else if(nRows===1){startYear=activeEndYear-2;endYear=activeEndYear;} -addRow("added-transition-rows",`transition-row-${transitionRowI}`,startYear,endYear);$("#added-transition-rows").sortable();transitionRowI++;} +function addTransitionRow(startYear,endYear,simpleAppend=false){const nRows=$(`#added-transition-rows tr`).length;if(nRows===0){startYear=startYear||activeStartYear;endYear=endYear||activeStartYear+2;}else if(nRows===1){startYear=startYear||activeEndYear-2;endYear=endYear||activeEndYear;} +addRow("added-transition-rows",`transition-row-${transitionRowI}`,startYear,endYear,simpleAppend);$("#added-transition-rows").sortable();transitionRowI++;} function removeLastTransitionRow(){let rows=$(`#added-transition-rows tr`);if(rows.length<3){$("#added-transition-rows tr:last").remove();}else{rows.eq(-2).remove();}} function updateProgress(id,val){const el=document.querySelector(`${id} span`);el.style.width=val+"%";el.innerText=val+"%";}$("body").append(staticTemplates.map);$("body").append(staticTemplates.mainContainer);$("body").append(staticTemplates.sidebarLeftContainer);$("body").append(staticTemplates.geeSpinner);$("body").append(staticTemplates.bottomBar);$("#main-container").append(staticTemplates.sidebarLeftToggler);if(mode==="lcms-dashboard"){$("body").append(staticTemplates.lcmsSpinner);$("body").append(staticTemplates.dashboardResultsContainer);} $("#sidebar-left-header").append(staticTemplates.topBanner);if(localStorage["showIntroModal-"+mode]==undefined){localStorage["showIntroModal-"+mode]="true";} @@ -1892,20 +1894,20 @@ function toggleAdvancedOff(){$("#threshold-container").slideUp();$("#advanced-ra if(mode==="LCMS-pilot"||mode==="LCMS"){const minYear=startYear;const maxYear=endYear;if(urlParams.startYear==null||urlParams.startYear==undefined){urlParams.startYear=startYear;} if(urlParams.endYear==null||urlParams.endYear==undefined){urlParams.endYear=endYear;} if(urlParams.addLCMSTimeLapsesOn==null||urlParams.addLCMSTimeLapsesOn==undefined){urlParams.addLCMSTimeLapsesOn="no";} -addCollapse("sidebar-left","parameters-collapse-label","parameters-collapse-div","PARAMETERS",``,false,null,"Adjust parameters used to filter and sort LCMS products");addCollapse("sidebar-left","layer-list-collapse-label","layer-list-collapse-div","LCMS DATA SUITE",`LCMS icon`,true,null,"LCMS DATA layers to view on map");addCollapse("sidebar-left","reference-layer-list-collapse-label","reference-layer-list-collapse-div","REFERENCE DATA",`Layers icon`,false,null,"Additional relevant layers to view on map intended to provide context for LCMS DATA");addCollapse("sidebar-left","tools-collapse-label","tools-collapse-div","TOOLS",`Tools icon`,false,"","Tools to measure and chart data provided on the map");addCollapse("sidebar-left","download-collapse-label","download-collapse-div-lcms","DOWNLOAD DATA",`Downloads icon`,false,``,"Download LCMS products for further analysis");addCollapse("sidebar-left","support-collapse-label","support-collapse-div","SUPPORT",`Support icon`,false,``,"If you need any help");if(["standard","advanced"].indexOf(urlParams.analysisMode)===-1){urlParams.analysisMode="standard";} +addCollapse("sidebar-left","parameters-collapse-label","parameters-collapse-div","PARAMETERS",``,false,null,"Adjust parameters used to filter and sort LCMS products");addCollapse("sidebar-left","layer-list-collapse-label","layer-list-collapse-div","LCMS DATA SUITE",`LCMS icon`,true,null,"LCMS DATA layers to view on map");addCollapse("sidebar-left","reference-layer-list-collapse-label","reference-layer-list-collapse-div","REFERENCE DATA",`Layers icon`,false,null,"Additional relevant layers to view on map intended to provide context for LCMS DATA");addCollapse("sidebar-left","tools-collapse-label","tools-collapse-div","TOOLS",`Tools icon`,false,"","Tools to measure and chart data provided on the map");addCollapse("sidebar-left","download-collapse-label","download-collapse-div-lcms","DOWNLOAD DATA",`Downloads icon`,false,``,"Download LCMS products for further analysis");addCollapse("sidebar-left","support-collapse-label","support-collapse-div","SUPPORT",`Support icon`,false,``,"If you need any help");if(["standard","advanced"].indexOf(urlParams.analysisMode)===-1){urlParams.analysisMode="standard";} if(["year","prob"].indexOf(urlParams.summaryMethod)===-1){urlParams.summaryMethod="year";} if(["show","hide"].indexOf(urlParams.causeOfChangeMode)===-1){urlParams.causeOfChangeMode="show";} const tAnalysisMode=urlParams.analysisMode;const tAddLCMSTimeLapsesOn=urlParams.addLCMSTimeLapsesOn;const tCauseOfChangeMode=urlParams.causeOfChangeMode;if(mode==="LCMS"){addRadio("parameters-collapse-div","addTimeLapses-radio","Add LCMS Time Lapses:","No","Yes","urlParams.addLCMSTimeLapsesOn","no","yes",null,null,"Add interactive time lapse of LCMS Change, Land Cover, and Land Use products. This will slow down the map loading");$("#parameters-collapse-div").append(`
    `);if(tAddLCMSTimeLapsesOn==="yes"){$("#addTimeLapses-radio-second_toggle_label").click();}} addRadio("parameters-collapse-div","analysis-mode-radio","Choose which mode:","Standard","Advanced","urlParams.analysisMode","standard","advanced","toggleAdvancedOff","toggleAdvancedOn","Standard mode provides the core LCMS products based on carefully selected parameters. Advanced mode provides additional LCMS products and parameter options");$("#parameters-collapse-div").append(`
    `);addRadio("parameters-collapse-div","cause-of-change-mask-mode-radio","Cause of Change: Stable color","Gray","Transparent","urlParams.causeOfChangeMode","show","hide",null,null,"Choose whether to show Cause of Change Stable and Non-processing area classes as gray or transparent on the map.");urlParams.analysisMode=tAnalysisMode;urlParams.causeOfChangeMode=tCauseOfChangeMode;$("#parameters-collapse-div").append(`
    `);addDualRangeSlider("parameters-collapse-div","Choose analysis year range:","urlParams.startYear","urlParams.endYear",minYear,maxYear,urlParams.startYear,urlParams.endYear,1,"analysis-year-slider","null","Years of LCMS data to include for land cover, land use, loss, and gain");$("#parameters-collapse-div").append(` `);if(mode==="LCMS-pilot"){addRangeSlider("threshold-container","Choose loss threshold:","lowerThresholdDecline",0,1,lowerThresholdDecline,0.05,"decline-threshold-slider","null","Threshold window for detecting loss. Any loss probability greater than or equal to this value will be flagged as loss ");$("#threshold-container").append(`
    `);addRangeSlider("threshold-container","Choose gain threshold:","lowerThresholdRecovery",0,1,lowerThresholdRecovery,0.05,"recovery-threshold-slider","null","Threshold window for detecting gain. Any gain probability greater than or equal to this value will be flagged as gain ");$("#advanced-radio-container").append(`
    `);$("#advanced-radio-container").append(`
    `);addRangeSlider("fast-slow-threshold-container","Choose slow loss threshold:","lowerThresholdSlowLoss",0,1,lowerThresholdSlowLoss,0.05,"slow-loss-threshold-slider","null","Threshold window for detecting loss. Any loss probability greater than or equal to this value will be flagged as loss ");$("#fast-slow-threshold-container").append(`
    `);addRangeSlider("fast-slow-threshold-container","Choose fast loss threshold:","lowerThresholdFastLoss",0,1,lowerThresholdFastLoss,0.05,"fast-loss-threshold-slider","null","Threshold window for detecting loss. Any loss probability greater than or equal to this value will be flagged as loss ");$("#advanced-radio-container").append(`
    `);addRadio("advanced-radio-container","treemask-radio","Constrain analysis to areas with trees:","Yes","No","applyTreeMask","yes","no",null,null,"Whether to constrain LCMS products to only treed areas. Any area LCMS classified as tree cover 2 or more years will be considered tree. Will reduce commission errors typical in agricultural and water areas, but may also reduce changes of interest in these areas.");$("#advanced-radio-container").append(`
    `);} -const tSummaryMethod=urlParams.summaryMethod;addRadio("advanced-radio-container","summaryMethod-radio","Summary method:","Most recent year","Highest prob","urlParams.summaryMethod","year","prob",null,null,"How to choose which value for disturbance and growth to display. Choose the value with the highest model confidence or from the most recent year above the threshold.");urlParams.summaryMethod=tSummaryMethod;urlParams.landCoverLevels=urlParams.landCoverLevels||{1:false,2:false,3:false,4:true,};urlParams.changeLevels=urlParams.changeLevels||{1:false,2:false,3:true,};urlParams.landUseLevels=urlParams.landUseLevels||{1:false,2:false,3:true,};addMultiRadio("parameters-collapse-div","change-levels-radio","Change Classification Level","changeLevel",urlParams.changeLevels,"Choose what level to show for Change. Lower levels will bin classes together. Level 2 is a great starting point.");addMultiRadio("parameters-collapse-div","land-cover-levels-radio","Land Cover Classification Level","landCoverLevel",urlParams.landCoverLevels,"Choose what level to show for Land Cover. Lower levels will bin classes together. Level 3 is a great starting point.");addMultiRadio("parameters-collapse-div","land-use-levels-radio","Land Use Classification Level","landUseLevel",urlParams.landUseLevels,"Choose what level to show for Land Use. Lower levels will bin classes together. Level 2 is a great starting point.");$("#land-use-levels-radio").css("padding-bottom","0.75rem");$("#advanced-radio-container").append(`
    `);$("#parameters-collapse-div").append(staticTemplates.reRunButton);$("#layer-list-collapse-div").append(`
      `);$("#reference-layer-list-collapse-div").append(`
        `);if(mode==="LCMS"){function populateLCMSDownloads(){const toggler=document.getElementsByClassName("caret");for(let i=0;i
        LCMS Classification Level Selection
        ");addMultiRadio("parameters-collapse-div","change-levels-radio","Change Classification Level","changeLevel",urlParams.changeLevels,"Choose what level to show for Change. Lower levels will bin classes together. Level 2 is a great starting point.");addMultiRadio("parameters-collapse-div","land-cover-levels-radio","Land Cover Classification Level","landCoverLevel",urlParams.landCoverLevels,"Choose what level to show for Land Cover. Lower levels will bin classes together. Level 3 is a great starting point.");addMultiRadio("parameters-collapse-div","land-use-levels-radio","Land Use Classification Level","landUseLevel",urlParams.landUseLevels,"Choose what level to show for Land Use. Lower levels will bin classes together. Level 2 is a great starting point.");$("#land-use-levels-radio").css("padding-bottom","0.75rem");$("#advanced-radio-container").append(`
        `);$("#parameters-collapse-div").append(staticTemplates.reRunButton);$("#layer-list-collapse-div").append(`
          `);$("#reference-layer-list-collapse-div").append(`
            `);if(mode==="LCMS"){function populateLCMSDownloads(){const toggler=document.getElementsByClassName("caret");for(let i=0;i
            `,true,null,"Line chart LCMS summary results");addCollapse("dashboard-results-list","tables-collapse-label","tables-collapse-div","TABLES",``,true,null,"Tabular LCMS summary results");$("#tables-collapse-div").append(staticTemplates.dashboardHighlightsContainer);$("#charts-collapse-div").removeClass("px-5");$("#charts-collapse-div").addClass("px-3");$("#tables-collapse-div").removeClass("px-5");$(".plotly-chart").css("margin-left","");$("#charts-collapse-label").on("click",()=>{console.log("clicked");updateDashboardCharts();});addCollapse("sidebar-left","parameters-collapse-label","parameters-collapse-div","PARAMETERS",``,false,null,"Adjust parameters used to filter and sort LCMS products as well as change how summary areas are selected");addCollapse("sidebar-left","layer-list-collapse-label","layer-list-collapse-div","LCMS SUMMARY AREAS",`LCMS icon`,true,null,"LCMS summary areas to view on map");$("#sidebar-left").append('
            ');addCollapse("sidebar-left","reference-layer-list-collapse-label","reference-layer-list-collapse-div","LCMS DATA",`LCMS icon`,false,null,"LCMS DATA layers to view on map");addCollapse("sidebar-left","support-collapse-label","support-collapse-div","SUPPORT",`Support icon`,false,``,"If you need any help");if(!urlParams.dashboardAreaSelectionMode){urlParams.dashboardAreaSelectionMode={"View-Extent":false,Click:true,"Drag-Box":false,};} +$("#sidebar-left-header").append(staticTemplates.dashboardProgressDiv);addCollapse("dashboard-results-list","charts-collapse-label","charts-collapse-div","CHARTS",``,true,null,"Line chart LCMS summary results");addCollapse("dashboard-results-list","tables-collapse-label","tables-collapse-div","TABLES",``,true,null,"Tabular LCMS summary results");$("#tables-collapse-div").append(staticTemplates.dashboardHighlightsContainer);$("#charts-collapse-div").removeClass("px-5");$("#charts-collapse-div").addClass("px-3");$("#tables-collapse-div").removeClass("px-5");$(".plotly-chart").css("margin-left","");$("#charts-collapse-label").on("click",()=>{console.log("clicked");updateDashboardCharts();});addCollapse("sidebar-left","parameters-collapse-label","parameters-collapse-div","PARAMETERS",``,false,null,"Adjust parameters used to filter and sort LCMS products as well as change how summary areas are selected");addCollapse("sidebar-left","layer-list-collapse-label","layer-list-collapse-div","LCMS SUMMARY AREAS",`LCMS icon`,true,null,"LCMS summary areas to view on map");$("#sidebar-left").append('
            ');addCollapse("sidebar-left","reference-layer-list-collapse-label","reference-layer-list-collapse-div","LCMS DATA",`LCMS icon`,false,null,"LCMS DATA layers to view on map");addCollapse("sidebar-left","support-collapse-label","support-collapse-div","SUPPORT",`Support icon`,false,``,"If you need any help");if(!urlParams.dashboardAreaSelectionMode){urlParams.dashboardAreaSelectionMode={"View-Extent":false,Click:true,"Drag-Box":false,};} addMultiRadio("parameters-collapse-div","summary-area-selection-radio","Choose how to select areas","dashboardAreaSelectionMode",urlParams.dashboardAreaSelectionMode);window.questionDict={fire:{title:"Post Fire Succession",hoverText:"Some more info about fire succession",productHighlightClasses:{"Land-Cover":true,"Land-Use":false,Change:true,},changeHighlightClasses:{Stable:false,"Slow-Loss":true,"Fast-Loss":true,Gain:true,},lcHighlightClasses:{Trees:true,"Tall-Shrubs":false,Shrubs:true,"Grass-Forb-Herb":true,"Barren-or-Impervious":true,"Snow-or-Ice":false,Water:false,},luHighlightClasses:{Agriculture:false,Developed:false,Forest:false,"Non-Forest-Wetland":false,"Rangeland-or-Pasture":false,Other:false,},},glacialRecession:{title:"Glacial Recession",hoverText:"Some more info about glacial succession",productHighlightClasses:{"Land-Cover":true,"Land-Use":false,Change:false,},changeHighlightClasses:{Stable:false,"Slow-Loss":false,"Fast-Loss":false,Gain:false,},lcHighlightClasses:{Trees:false,"Tall-Shrubs":true,Shrubs:false,"Grass-Forb-Herb":false,"Barren-or-Impervious":true,"Snow-or-Ice":true,Water:true,},luHighlightClasses:{Agriculture:false,Developed:false,Forest:false,"Non-Forest-Wetland":false,"Rangeland-or-Pasture":false,Other:false,},},forestToDeveloped:{title:"Forest and Agriculture to Developed",hoverText:"Forest and Agriculture land changing to developed",productHighlightClasses:{"Land-Cover":false,"Land-Use":true,Change:false,},changeHighlightClasses:{Stable:false,"Slow-Loss":false,"Fast-Loss":false,Gain:false,},lcHighlightClasses:{Trees:false,"Tall-Shrubs":false,Shrubs:false,"Grass-Forb-Herb":false,"Barren-or-Impervious":false,"Snow-or-Ice":false,Water:false,},luHighlightClasses:{Agriculture:true,Developed:true,Forest:true,"Non-Forest-Wetland":false,"Rangeland-or-Pasture":false,Other:false,},},waterLoss:{title:"Water Change",hoverText:"Loss of Water",productHighlightClasses:{"Land-Cover":true,"Land-Use":false,Change:true,},changeHighlightClasses:{Stable:false,"Slow-Loss":false,"Fast-Loss":true,Gain:false,},lcHighlightClasses:{Trees:false,"Tall-Shrubs":false,Shrubs:false,"Grass-Forb-Herb":false,"Barren-or-Impervious":false,"Snow-or-Ice":false,Water:true,},luHighlightClasses:{Agriculture:false,Developed:false,Forest:false,"Non-Forest-Wetland":false,"Rangeland-or-Pasture":false,Other:false,},},customQuestion:{title:"Custom - Choose your own Advanced Parameters to summarize",hoverText:"All products turned on for charting but empty until populated by user",productHighlightClasses:{"Land-Cover":true,"Land-Use":true,Change:true,},changeHighlightClasses:{Stable:false,"Slow-Loss":false,"Fast-Loss":false,Gain:false,},lcHighlightClasses:{Trees:false,"Tall-Shrubs":false,Shrubs:false,"Grass-Forb-Herb":false,"Barren-or-Impervious":false,"Snow-or-Ice":false,Water:false,},luHighlightClasses:{Agriculture:false,Developed:false,Forest:false,"Non-Forest-Wetland":false,"Rangeland-or-Pasture":false,Other:false,},},};window.deepLink=false;if(urlParams.questionVar==undefined||urlParams.questionVar===null){urlParams.questionVar=Object.keys(questionDict)[0];}else{deepLink=true;} function makeQuestionDropdown(){addDropdown("parameters-collapse-div","questions-dashboard-dropdown","Learn More About","urlParams.questionVar","Choose a Topic to automatically select certain LCMS products to summarize");} function populateQuestionDropdown(){Object.keys(questionDict).map((k)=>{addDropdownItem("questions-dashboard-dropdown",questionDict[k].title,k,questionDict[k].hoverText);});} @@ -1928,11 +1930,11 @@ if(urlParams.endYear==null||urlParams.endYear==undefined){urlParams.endYear=endY if(urlParams.lossMagThresh==null||urlParams.lossMagThresh==undefined){urlParams.lossMagThresh=-0.15;} if(urlParams.gainMagThresh==null||urlParams.gainMagThresh==undefined){urlParams.gainMagThresh=0.1;} if(urlParams.whichIndices2==null||urlParams.whichIndices2==undefined){urlParams.whichIndices2={nir:false,swir1:false,swir2:false,NBR:true,NDVI:false,};} -addCollapse("sidebar-left","parameters-collapse-label","parameters-collapse-div","PARAMETERS",'',false,null,"Adjust parameters used to filter and sort LCMS base leare products");addDualRangeSlider("parameters-collapse-div","Choose analysis year range:","urlParams.startYear","urlParams.endYear",minYear,maxYear,urlParams.startYear,urlParams.endYear,1,"analysis-year-slider","null","Years of LCMS data to include for land cover, land use, loss, and gain");addSubCollapse("parameters-collapse-div","lt-params-label","lt-params-div","LANDTRENDR Params","",false,"");addCheckboxes("lt-params-div","index-choice-checkboxes","Choose which LandTrendr indices to analyze","whichIndices2",urlParams.whichIndices2);addRangeSlider("lt-params-div","Loss Magnitude Threshold","urlParams.lossMagThresh",-0.8,-0.05,urlParams.lossMagThresh,0.05,"loss-mag-thresh-slider","","The threshold to detect loss for each LANDTRENDR segment. Any difference for a given segement less than this threshold will be flagged as loss");addRangeSlider("lt-params-div","Gain Magnitude Threshold","urlParams.gainMagThresh",0.05,0.8,urlParams.gainMagThresh,0.05,"gain-mag-thresh-slider","","The threshold to detect gain for each LANDTRENDR segment. Any difference for a given segement greater than this threshold will be flagged as gain");$("#parameters-collapse-div").append(`
            `);$("#parameters-collapse-div").append(staticTemplates.reRunButton);addCollapse("sidebar-left","layer-list-collapse-label","layer-list-collapse-div","LCMS BASE LEARNER DATA",`LCMS icon`,true,null,"LCMS DATA layers to view on map");$("#layer-list-collapse-div").append(`
              `);addCollapse("sidebar-left","tools-collapse-label","tools-collapse-div","TOOLS",`Tools icon`,false,"","Tools to measure and chart data provided on the map");if(canExport){addCollapse("sidebar-left","download-collapse-label","download-collapse-div","DOWNLOAD DATA",`Downloads icon`,false,``,"Download "+mode+" products for further analysis");}}else if(mode==="LT"){canExport=true;startYear=1984;endYear=new Date().getYear()+1900;startJulian=152;endJulian=273;initialZoomLevel=9;initialCenter=[37.64109979850402,-107.6917775643849];const minYear=startYear;const maxYear=endYear;if(urlParams.startYear==null||urlParams.startYear==undefined){urlParams.startYear=startYear;} +addCollapse("sidebar-left","parameters-collapse-label","parameters-collapse-div","PARAMETERS",'',false,null,"Adjust parameters used to filter and sort LCMS base leare products");addDualRangeSlider("parameters-collapse-div","Choose analysis year range:","urlParams.startYear","urlParams.endYear",minYear,maxYear,urlParams.startYear,urlParams.endYear,1,"analysis-year-slider","null","Years of LCMS data to include for land cover, land use, loss, and gain");addSubCollapse("parameters-collapse-div","lt-params-label","lt-params-div","LANDTRENDR Params","",false,"");addCheckboxes("lt-params-div","index-choice-checkboxes","Choose which LandTrendr indices to analyze","whichIndices2",urlParams.whichIndices2);addRangeSlider("lt-params-div","Loss Magnitude Threshold","urlParams.lossMagThresh",-0.8,-0.05,urlParams.lossMagThresh,0.05,"loss-mag-thresh-slider","","The threshold to detect loss for each LANDTRENDR segment. Any difference for a given segement less than this threshold will be flagged as loss");addRangeSlider("lt-params-div","Gain Magnitude Threshold","urlParams.gainMagThresh",0.05,0.8,urlParams.gainMagThresh,0.05,"gain-mag-thresh-slider","","The threshold to detect gain for each LANDTRENDR segment. Any difference for a given segement greater than this threshold will be flagged as gain");$("#parameters-collapse-div").append(`
              `);$("#parameters-collapse-div").append(staticTemplates.reRunButton);addCollapse("sidebar-left","layer-list-collapse-label","layer-list-collapse-div","LCMS BASE LEARNER DATA",`LCMS icon`,true,null,"LCMS DATA layers to view on map");$("#layer-list-collapse-div").append(`
                `);addCollapse("sidebar-left","tools-collapse-label","tools-collapse-div","TOOLS",`Tools icon`,false,"","Tools to measure and chart data provided on the map");if(canExport){addCollapse("sidebar-left","download-collapse-label","download-collapse-div","DOWNLOAD DATA",`Downloads icon`,false,``,"Download "+mode+" products for further analysis");}}else if(mode==="LT"){canExport=true;startYear=1984;endYear=new Date().getYear()+1900;startJulian=152;endJulian=273;initialZoomLevel=9;initialCenter=[37.64109979850402,-107.6917775643849];const minYear=startYear;const maxYear=endYear;if(urlParams.startYear==null||urlParams.startYear==undefined){urlParams.startYear=startYear;} if(urlParams.endYear==null||urlParams.endYear==undefined){urlParams.endYear=endYear;} if(urlParams.startJulian==null||urlParams.startJulian==undefined){urlParams.startJulian=startJulian;} if(urlParams.endJulian==null||urlParams.endJulian==undefined){urlParams.endJulian=endJulian;} -addCollapse("sidebar-left","parameters-collapse-label","parameters-collapse-div","PARAMETERS",'',false,null,"Adjust parameters used to filter and sort "+mode+" products");addSubCollapse("parameters-collapse-div","comp-params-label","comp-params-div","Landsat Composite Params","",false,"");$("#comp-params-div").append(`
                `);addDualRangeSlider("comp-params-div","Choose analysis year range:","urlParams.startYear","urlParams.endYear",minYear,maxYear,urlParams.startYear,urlParams.endYear,1,"analysis-year-slider2","null","Years of "+mode+" data to include.");addDualRangeSlider("comp-params-div","Choose analysis date range:","urlParams.startJulian","urlParams.endJulian",1,365,urlParams.startJulian,urlParams.endJulian,1,"julian-day-slider","julian","Days of year of "+ +addCollapse("sidebar-left","parameters-collapse-label","parameters-collapse-div","PARAMETERS",'',false,null,"Adjust parameters used to filter and sort "+mode+" products");addSubCollapse("parameters-collapse-div","comp-params-label","comp-params-div","Landsat Composite Params","",false,"");$("#comp-params-div").append(`
                `);addDualRangeSlider("comp-params-div","Choose analysis year range:","urlParams.startYear","urlParams.endYear",minYear,maxYear,urlParams.startYear,urlParams.endYear,1,"analysis-year-slider2","null","Years of "+mode+" data to include.");addDualRangeSlider("comp-params-div","Choose analysis date range:","urlParams.startJulian","urlParams.endJulian",1,365,urlParams.startJulian,urlParams.endJulian,1,"julian-day-slider","julian","Days of year of "+ mode+ " data to include for land cover, land use, loss, and gain");$("#comp-params-div").append(`
                `);if(urlParams.whichPlatforms===null||urlParams.whichPlatforms===undefined){urlParams.whichPlatforms={L4:true,L5:true,"L7-SLC-On":true,"L7-SLC-Off":false,L8:true,L9:true,};} addCheckboxes("comp-params-div","which-sensor-method-radio","Choose which Landsat platforms to include","whichPlatforms",urlParams.whichPlatforms);$("#comp-params-div").append(`
                `);if(urlParams.yearBuffer===null||urlParams.yearBuffer===undefined){urlParams.yearBuffer=0;} @@ -1948,15 +1950,15 @@ addRangeSlider("lt-params-div","Loss Slope Threshold","urlParams.lossSlopeThresh addRangeSlider("lt-params-div","Gain Magnitude Threshold","urlParams.gainMagThresh",0.01,0.8,urlParams.gainMagThresh,0.01,"gain-mag-thresh-slider","","The threshold to detect gain for each LANDTRENDR segment. Any difference between start and end values for a given segement greater than this threshold will be flagged as gain");if(urlParams.gainSlopeThresh===null||urlParams.gainSlopeThresh===undefined){urlParams.gainSlopeThresh=0.1;} addRangeSlider("lt-params-div","Gain Slope Threshold","urlParams.gainSlopeThresh",0.01,0.8,urlParams.gainSlopeThresh,0.01,"gain-slope-thresh-slider","","The threshold to detect gain for each LANDTRENDR segment. Any slope of a given segement greater than this threshold will be flagged as gain");if(urlParams.howManyToPull===null||urlParams.howManyToPull===undefined){urlParams.howManyToPull=1;} addRangeSlider("lt-params-div","How Many","urlParams.howManyToPull",1,3,urlParams.howManyToPull,1,"how-many-slider","","The number of gains and losses to show. Typically an area only experiences a single loss/gain event, but in the cases where there are multiple above the specified thresholds, they can be shown.");if(urlParams.maxSegments===null||urlParams.maxSegments===undefined){urlParams.maxSegments=6;} -addRangeSlider("lt-params-div","Max LANDTRENDR Segments","urlParams.maxSegments",1,8,urlParams.maxSegments,1,"max-segments-slider","","The max number of segments LANDTRENDR can break time series into. Generally 3-6 works well. Use a smaller number of characterizing long-term trends is the primary focus and a larger number if characterizing every little change is the primary focus.");$("#parameters-collapse-div").append(`
                `);$("#parameters-collapse-div").append(staticTemplates.reRunButton);addCollapse("sidebar-left","layer-list-collapse-label","layer-list-collapse-div","MAP DATA",`Layers icon`,true,null,mode+" DATA layers to view on map");$("#layer-list-collapse-div").append(`
                  `);addCollapse("sidebar-left","tools-collapse-label","tools-collapse-div","TOOLS",`Tools icon`,false,"","Tools to measure and chart data provided on the map");addCollapse("sidebar-left","download-collapse-label","download-collapse-div","DOWNLOAD DATA",`Downloads icon`,false,``,"Download "+mode+" products for further analysis");}else if(mode==="MTBS"){startYear=1984;endYear=2022;if(urlParams.startYear==null||urlParams.startYear==undefined){urlParams.startYear=startYear;} +addRangeSlider("lt-params-div","Max LANDTRENDR Segments","urlParams.maxSegments",1,8,urlParams.maxSegments,1,"max-segments-slider","","The max number of segments LANDTRENDR can break time series into. Generally 3-6 works well. Use a smaller number of characterizing long-term trends is the primary focus and a larger number if characterizing every little change is the primary focus.");$("#parameters-collapse-div").append(`
                  `);$("#parameters-collapse-div").append(staticTemplates.reRunButton);addCollapse("sidebar-left","layer-list-collapse-label","layer-list-collapse-div","MAP DATA",`Layers icon`,true,null,mode+" DATA layers to view on map");$("#layer-list-collapse-div").append(`
                    `);addCollapse("sidebar-left","tools-collapse-label","tools-collapse-div","TOOLS",`Tools icon`,false,"","Tools to measure and chart data provided on the map");addCollapse("sidebar-left","download-collapse-label","download-collapse-div","DOWNLOAD DATA",`Downloads icon`,false,``,"Download "+mode+" products for further analysis");}else if(mode==="MTBS"){startYear=1984;endYear=2024;if(urlParams.startYear==null||urlParams.startYear==undefined){urlParams.startYear=startYear;} if(urlParams.endYear==null||urlParams.endYear==undefined){urlParams.endYear=endYear;} -addCollapse("sidebar-left","support-collapse-label","support-collapse-div","SUPPORT & FEEDBACK",`Support icon`,true,``,"");$("#support-collapse-div").append(staticTemplates.walkThroughButton);$("#support-collapse-div").append(`
                    `);$("#support-collapse-div").append(`

                    MTBS burned area boundaries and severity within the Data Explorer and MTBS web map services are updated regularly, but alignment of their update schedule may vary. Please visit the map services section at MTBS.gov to verify the publication dates when making comparisons between the MTBS data available within these products/services.

                    `);$("#support-collapse-div").append(`
                    `);$("#support-collapse-div").append(`

                    If you have any issues with this tool or have suggestions on how it could be improved, please contact us.

                    `);addCollapse("sidebar-left","parameters-collapse-label","parameters-collapse-div","PARAMETERS",'',false,null,"Adjust parameters used to filter and sort MTBS products");const mtbsZoomToDict={All:true,CONUS:false,Alaska:false,Hawaii:false,"Puerto-Rico":false,};addMultiRadio("parameters-collapse-div","mtbs-zoom-to-radio","Zoom to MTBS Mapping Area","mtbsMappingArea",mtbsZoomToDict);$("#mtbs-zoom-to-radio").prop("title","Zoom to MTBS region");$("#mtbs-zoom-to-radio").change(function(){console.log(mtbsMappingArea);synchronousCenterObject(clientBoundsDict[mtbsMappingArea]);});$("#parameters-collapse-div").append(`
                    `);addDualRangeSlider("parameters-collapse-div","Choose analysis year range:","urlParams.startYear","urlParams.endYear",startYear,endYear,urlParams.startYear,urlParams.endYear,1,"analysis-year-slider","null","Years of MTBS data to include");addMultiRadio("parameters-collapse-div","mtbs-summary-method-radio","How to summarize MTBS data","mtbsSummaryMethod",{"Highest-Severity":true,"Most-Recent":false,Oldest:false,});$("#mtbs-summary-method-radio").prop("title",'Select how to summarize MTBS raster data in areas with multiple fires. Each summary method is applied on a pixel basis. "Highest-Severity" will show the severity and fire year corresponding to the highest severity. "Most-Recent" will show the severity and fire year corresponding to the most recently mapped fire. "Oldest" will show the severity and fire year corresponding to the oldest mapped fire.');$("#parameters-collapse-div").append(`
                    `);$("#parameters-collapse-div").append(staticTemplates.reRunButton);addCollapse("sidebar-left","layer-list-collapse-label","layer-list-collapse-div",mode+" DATA",`MTBS logo`,true,null,mode+" DATA layers to view on map");addCollapse("sidebar-left","reference-layer-list-collapse-label","reference-layer-list-collapse-div","REFERENCE DATA",`Layers icon`,false,null,"Additional relevant layers to view on map intended to provide context for "+ +addCollapse("sidebar-left","support-collapse-label","support-collapse-div","SUPPORT & FEEDBACK",`Support icon`,true,``,"");$("#support-collapse-div").append(staticTemplates.walkThroughButton);$("#support-collapse-div").append(`
                    `);$("#support-collapse-div").append(`

                    MTBS burned area boundaries and severity within the Data Explorer and MTBS web map services are updated regularly, but alignment of their update schedule may vary. Please visit the map services section at MTBS.gov to verify the publication dates when making comparisons between the MTBS data available within these products/services.

                    `);$("#support-collapse-div").append(`
                    `);$("#support-collapse-div").append(`

                    If you have any issues with this tool or have suggestions on how it could be improved, please contact us.

                    `);addCollapse("sidebar-left","parameters-collapse-label","parameters-collapse-div","PARAMETERS",'',false,null,"Adjust parameters used to filter and sort MTBS products");const mtbsZoomToDict={All:true,CONUS:false,Alaska:false,Hawaii:false,"Puerto-Rico":false,};addMultiRadio("parameters-collapse-div","mtbs-zoom-to-radio","Zoom to MTBS Mapping Area","mtbsMappingArea",mtbsZoomToDict);$("#mtbs-zoom-to-radio").prop("title","Zoom to MTBS region");$("#mtbs-zoom-to-radio").change(function(){console.log(mtbsMappingArea);synchronousCenterObject(clientBoundsDict[mtbsMappingArea]);});$("#parameters-collapse-div").append(`
                    `);addDualRangeSlider("parameters-collapse-div","Choose analysis year range:","urlParams.startYear","urlParams.endYear",startYear,endYear,urlParams.startYear,urlParams.endYear,1,"analysis-year-slider","null","Years of MTBS data to include");addMultiRadio("parameters-collapse-div","mtbs-summary-method-radio","How to summarize MTBS data","mtbsSummaryMethod",{"Highest-Severity":true,"Most-Recent":false,Oldest:false,});$("#mtbs-summary-method-radio").prop("title",'Select how to summarize MTBS raster data in areas with multiple fires. Each summary method is applied on a pixel basis. "Highest-Severity" will show the severity and fire year corresponding to the highest severity. "Most-Recent" will show the severity and fire year corresponding to the most recently mapped fire. "Oldest" will show the severity and fire year corresponding to the oldest mapped fire.');$("#parameters-collapse-div").append(`
                    `);$("#parameters-collapse-div").append(staticTemplates.reRunButton);addCollapse("sidebar-left","layer-list-collapse-label","layer-list-collapse-div",mode+" DATA",`MTBS logo`,true,null,mode+" DATA layers to view on map");addCollapse("sidebar-left","reference-layer-list-collapse-label","reference-layer-list-collapse-div","REFERENCE DATA",`Layers icon`,false,null,"Additional relevant layers to view on map intended to provide context for "+ mode+ -" DATA");addCollapse("sidebar-left","tools-collapse-label","tools-collapse-div","TOOLS",`Tools icon`,false,"","Tools to measure and chart data provided on the map");$("#layer-list-collapse-div").append(`
                      `);$("#reference-layer-list-collapse-div").append(`
                        `);$("#introModal-body").append(staticTemplates.walkThroughButton);}else if(mode==="TEST"||mode==="IDS"){addCollapse("sidebar-left","layer-list-collapse-label","layer-list-collapse-div",mode+" DATA",`Layers icon`,true,null,mode+" DATA layers to view on map");$("#layer-list-collapse-div").append(`
                          `);addCollapse("sidebar-left","tools-collapse-label","tools-collapse-div","TOOLS",`Tools icon`,false,"","Tools to measure and chart data provided on the map");}else if(mode==="Bloom-Mapper"){window.algalRunID=1;addCollapse("sidebar-left","parameters-collapse-label","parameters-collapse-div","PARAMETERS",'',false,null,"Adjust parameters used to filter and sort LCMS products");startYear=2022;endYear=2023;if(urlParams.startYear==null||urlParams.startYear==undefined){urlParams.startYear=2023;} +" DATA");addCollapse("sidebar-left","tools-collapse-label","tools-collapse-div","TOOLS",`Tools icon`,false,"","Tools to measure and chart data provided on the map");$("#layer-list-collapse-div").append(`
                            `);$("#reference-layer-list-collapse-div").append(`
                              `);$("#introModal-body").append(staticTemplates.walkThroughButton);}else if(mode==="TEST"||mode==="IDS"){addCollapse("sidebar-left","layer-list-collapse-label","layer-list-collapse-div",mode+" DATA",`Layers icon`,true,null,mode+" DATA layers to view on map");$("#layer-list-collapse-div").append(`
                                `);addCollapse("sidebar-left","tools-collapse-label","tools-collapse-div","TOOLS",`Tools icon`,false,"","Tools to measure and chart data provided on the map");}else if(mode==="Bloom-Mapper"){window.algalRunID=1;addCollapse("sidebar-left","parameters-collapse-label","parameters-collapse-div","PARAMETERS",'',false,null,"Adjust parameters used to filter and sort LCMS products");startYear=2022;endYear=2023;if(urlParams.startYear==null||urlParams.startYear==undefined){urlParams.startYear=2023;} if(urlParams.endYear==null||urlParams.endYear==undefined){urlParams.endYear=2023;} -addDualRangeSlider("parameters-collapse-div","Choose analysis year range:","urlParams.startYear","urlParams.endYear",startYear,endYear,urlParams.startYear,urlParams.endYear,1,"analysis-year-slider","null","Years of algal data to include");$("#parameters-collapse-div").append(staticTemplates.reRunButton);addCollapse("sidebar-left","layer-list-collapse-label","layer-list-collapse-div",mode+" DATA",`Layers icon`,true,null,mode+" DATA layers to view on map");$("#layer-list-collapse-div").append(`
                                  `);addCollapse("sidebar-left","tools-collapse-label","tools-collapse-div","TOOLS",`Tools icon`,false,"","Tools to measure and chart data provided on the map");addCollapse("sidebar-left","support-collapse-label","support-collapse-div","SUPPORT",`Support icon`,false,``,"If you need any help");$("#support-collapse-div").append(staticTemplates.supportDivAlgal);}else if(mode==="LAMDA"){addCollapse("sidebar-left","parameters-collapse-label","parameters-collapse-div","PARAMETERS",'',false,null,"Adjust parameters used to filter and sort LAMDA products");startYear=2021;const endYearCutoff=new Date("2024-02-26").dayOfYear();const currentDate=new Date();endYear=currentDate.getYear()+1900;const currentDayOfYear=currentDate.dayOfYear();if(currentDayOfYear`,true,null,mode+" DATA layers to view on map");$("#layer-list-collapse-div").append(`
                                    `);addCollapse("sidebar-left","tools-collapse-label","tools-collapse-div","TOOLS",`Tools icon`,false,"","Tools to measure and chart data provided on the map");addCollapse("sidebar-left","support-collapse-label","support-collapse-div","SUPPORT",`Support icon`,false,``,"If you need any help");$("#support-collapse-div").append(staticTemplates.supportDivAlgal);}else if(mode==="LAMDA"){addCollapse("sidebar-left","parameters-collapse-label","parameters-collapse-div","PARAMETERS",'',false,null,"Adjust parameters used to filter and sort LAMDA products");startYear=2021;const endYearCutoff=new Date("2024-02-26").dayOfYear();const currentDate=new Date();endYear=currentDate.getYear()+1900;const currentDayOfYear=currentDate.dayOfYear();if(currentDayOfYear`,true,null,mode+" DATA layers to view on map");$("#layer-list-collapse-div").append(`
                                      `);addCollapse("sidebar-left","tools-collapse-label","tools-collapse-div","TOOLS",`Tools icon`,false,"","Tools to measure and chart data provided on the map");}else if(mode==="geeViz"){urlParams.startYear=urlParams.startYear||startYear;urlParams.endYear=urlParams.endYear||endYear;addCollapse("sidebar-left","layer-list-collapse-label","layer-list-collapse-div",mode+" DATA",`Layers icon`,true,null,mode+" DATA layers to view on map");$("#layer-list-collapse-div").append(`
                                        `);addCollapse("sidebar-left","tools-collapse-label","tools-collapse-div","TOOLS",`Tools icon`,false,"","Tools to measure and chart data provided on the map");}else if(mode==="STORM"){canExport=true;addCollapse("sidebar-left","parameters-collapse-label","parameters-collapse-div","PARAMETERS",'',true,null,"Adjust parameters used to prepare storm outputs");$("#parameters-collapse-div").append(` +urlParams.startYear=urlParams.startYear||endYear;urlParams.endYear=urlParams.endYear||endYear;addDualRangeSlider("parameters-collapse-div","Year Range","urlParams.startYear","urlParams.endYear",startYear,endYear,urlParams.startYear,urlParams.endYear,1,"year-slider","","Years of LAMDA products to show");urlParams.startJulian=urlParams.startJulian||30;urlParams.endJulian=urlParams.endJulian||currentDayOfYear;addDualRangeSlider("parameters-collapse-div","Choose date range:","urlParams.startJulian","urlParams.endJulian",1,365,urlParams.startJulian,urlParams.endJulian,1,"julian-day-slider","julian","Days of year of "+mode+" data to include on map and for charting");$("#parameters-collapse-div").append(staticTemplates.reRunButton);addCollapse("sidebar-left","layer-list-collapse-label","layer-list-collapse-div",mode+" DATA",`Layers icon`,true,null,mode+" DATA layers to view on map");$("#layer-list-collapse-div").append(`
                                          `);addCollapse("sidebar-left","tools-collapse-label","tools-collapse-div","TOOLS",`Tools icon`,false,"","Tools to measure and chart data provided on the map");}else if(mode==="geeViz"){urlParams.startYear=urlParams.startYear||startYear;urlParams.endYear=urlParams.endYear||endYear;addCollapse("sidebar-left","layer-list-collapse-label","layer-list-collapse-div",mode+" DATA",`Layers icon`,true,null,mode+" DATA layers to view on map");$("#layer-list-collapse-div").append(`
                                            `);addCollapse("sidebar-left","tools-collapse-label","tools-collapse-div","TOOLS",`Tools icon`,false,"","Tools to measure and chart data provided on the map");}else if(mode==="STORM"){canExport=true;addCollapse("sidebar-left","parameters-collapse-label","parameters-collapse-div","PARAMETERS",'',true,null,"Adjust parameters used to prepare storm outputs");$("#parameters-collapse-div").append(`
                                            @@ -1972,7 +1974,7 @@ urlParams.startYear=urlParams.startYear||endYear;urlParams.endYear=urlParams.end `);$("#parameters-collapse-div").append(`
                                            -
                                            `);addCollapse("sidebar-left","layer-list-collapse-label","layer-list-collapse-div",mode+" DATA",`Layers icon`,true,null,mode+" DATA layers to view on map");$("#layer-list-collapse-div").append(`
                                              `);addCollapse("sidebar-left","tools-collapse-label","tools-collapse-div","TOOLS",`Tools icon`,false,"","Tools to measure and chart data provided on the map");addCollapse("sidebar-left","download-collapse-label","download-collapse-div","DOWNLOAD DATA",`Downloads icon`,false,``,"Download "+mode+" products for further analysis");}else if(mode==="TreeMap"){canExport=true;$("head").append(``);addCollapse("sidebar-left","layer-list-collapse-label","layer-list-collapse-div","TreeMap DATA",`Layers icon`,true,null,mode+" DATA layers to view on map");addCollapse("sidebar-left","tools-collapse-label","tools-collapse-div","TOOLS",`Tools icon`,false,"","Tools to measure and chart data provided on the map");addCollapse("sidebar-left","download-collapse-label","download-collapse-div","DOWNLOAD DATA",`Downloads icon`,false,``,"Download "+mode+" products for further analysis");addCollapse("sidebar-left","support-collapse-label","support-collapse-div","SUPPORT",`Support icon`,false,``,"If you need any help");$("#layer-list-collapse-div").append(`
                                                `);$("#download-collapse-div").append(staticTemplates.TreeMapDownloadDiv);$("#download-collapse-div").append(staticTemplates.TreeMapGEEClippingDiv);$("#support-collapse-div").append(staticTemplates.TreeMapSupportDiv);}else if(mode==="sequoia-view"){addCollapse("sidebar-left","parameters-collapse-label","parameters-collapse-div","PARAMETERS",'',true,null,"Adjust parameters used to prepare change analysis window");const minYear=2017;const maxYear=new Date().getFullYear();const dayOfYear=new Date().dayofYear();if(urlParams.preStartYear==null||urlParams.preStartYear==undefined){urlParams.preStartYear=minYear;} +
                                                `);addCollapse("sidebar-left","layer-list-collapse-label","layer-list-collapse-div",mode+" DATA",`Layers icon`,true,null,mode+" DATA layers to view on map");$("#layer-list-collapse-div").append(`
                                                  `);addCollapse("sidebar-left","tools-collapse-label","tools-collapse-div","TOOLS",`Tools icon`,false,"","Tools to measure and chart data provided on the map");addCollapse("sidebar-left","download-collapse-label","download-collapse-div","DOWNLOAD DATA",`Downloads icon`,false,``,"Download "+mode+" products for further analysis");}else if(mode==="TreeMap"){canExport=true;$("head").append(``);addCollapse("sidebar-left","layer-list-collapse-label","layer-list-collapse-div","TreeMap DATA",`Layers icon`,true,null,mode+" DATA layers to view on map");addCollapse("sidebar-left","tools-collapse-label","tools-collapse-div","TOOLS",`Tools icon`,false,"","Tools to measure and chart data provided on the map");addCollapse("sidebar-left","download-collapse-label","download-collapse-div","DOWNLOAD DATA",`Downloads icon`,false,``,"Download "+mode+" products for further analysis");addCollapse("sidebar-left","support-collapse-label","support-collapse-div","SUPPORT",`Support icon`,false,``,"If you need any help");$("#layer-list-collapse-div").append(`
                                                    `);$("#download-collapse-div").append(staticTemplates.TreeMapDownloadDiv);$("#download-collapse-div").append(staticTemplates.TreeMapGEEClippingDiv);$("#support-collapse-div").append(staticTemplates.TreeMapSupportDiv);}else if(mode==="sequoia-view"){addCollapse("sidebar-left","parameters-collapse-label","parameters-collapse-div","PARAMETERS",'',true,null,"Adjust parameters used to prepare change analysis window");const minYear=2017;const maxYear=new Date().getFullYear();const dayOfYear=new Date().dayofYear();if(urlParams.preStartYear==null||urlParams.preStartYear==undefined){urlParams.preStartYear=minYear;} if(urlParams.preEndYear==null||urlParams.preEndYear==undefined){urlParams.preEndYear=maxYear-1;} if(urlParams.postYear==null||urlParams.postYear==undefined){urlParams.postYear=maxYear;} if(urlParams.startJulian==null||urlParams.startJulian==undefined){urlParams.startJulian=dayOfYear-16;if(urlParams.startJulian<0){urlParams.startJulian=0;}} @@ -1999,7 +2001,7 @@ function populateCountiesDropdown(selectedState){const state=allStates.filter((s function setSelectedCounty(selectedCounty,stateFP,stateAbr){Map.removeLayer(selectedLayerId);window.selectedFeature=ee.FeatureCollection("TIGER/2018/Counties").filter(ee.Filter.eq("STATEFP",stateFP)).filter(ee.Filter.eq("NAME",selectedCounty));selectedLayerId=Map.addLayer(selectedFeature,{strokeColor:"0BFFFF",layerType:"geeVectorImage",canQuery:false},`${selectedCounty}, ${stateAbr}`,true,null,null,"Selected county","county-selection-layer-list");Map.centerObject(selectedFeature);urlParams.selectedState=stateAbr;urlParams.selectedCounty=selectedCounty;selectedCountyAndStateStr=`${selectedCounty}, ${stateAbr}`;exportArea=window.selectedFeature;toggleProcessButton();} function selectSingleCounty(){setTimeout(()=>{google.maps.event.clearListeners(map,"click");google.maps.event.addListener(map,"click",(e)=>{Map.showSpinner();Map.removeLayer(selectedLayerId);const lat=e.latLng.lat();const lng=e.latLng.lng();const point=ee.Geometry.Point([lng,lat]);features=ee.FeatureCollection("TIGER/2018/Counties");window.selectedFeature=features.filterBounds(point);let selectedInfo=ee.List([selectedFeature.first().get("NAME"),selectedFeature.first().get("STATEFP"),]).getInfo();let countyName=selectedInfo[0];let stateFP=selectedInfo[1];let stateAbr=allStates.filter((s)=>s.STATEFP===stateFP)[0].STUSPS;console.log(stateFP);selectedLayerId=Map.addLayer(selectedFeature,{strokeColor:"0BFFFF",layerType:"geeVectorImage",canQuery:false,},`${countyName}, ${stateAbr}`,true,null,null,"Selected county","county-selection-layer-list");Map.centerObject(selectedFeature,true,Map.hideSpinner);urlParams.selectedState=stateAbr;urlParams.selectedCounty=countyName;selectedCountyAndStateStr=`${countyName}, ${stateAbr}`;exportArea=window.selectedFeature;toggleProcessButton();});},0);} function toggleProcessButton(){if(urlParams.preDate1&&urlParams.preDate2&&urlParams.postDate1&&urlParams.postDate2&&window.selectedFeature){$("#process-button").removeAttr("disabled");}else{$("#process-button").attr("disabled","disabled");}} -addCollapse("sidebar-left","pre-post-dates-label","pre-post-dates-div","Define 'post' and 'pre' date ranges",'',true,null,"Select post and pre date ranges for the Hi-Form BMP Tool");addCurrentDateParametersDisplay();const maxPostDate=advanceDate(new Date(),0);const maxPreDate=advanceDate(new Date(),-3);urlParams.postDate1=urlParams.postDate1||advanceDate(maxPostDate,-60);urlParams.postDate2=urlParams.postDate2||maxPostDate;const minPreDate="2016-01-01";const minPostDate="2017-01-01";addHiFormPostDatePicker("pre-post-dates-div","post-date-picker-container",minPostDate,maxPostDate,urlParams.postDate1,urlParams.postDate2);if(!urlParams.preDateRange){urlParams.preDateRange={"6 Month":false,"1 Year":true,Custom:false,};} +addCollapse("sidebar-left","pre-post-dates-label","pre-post-dates-div","Define 'post' and 'pre' date ranges",'',true,null,"Select post and pre date ranges for the Hi-Form BMP Tool");addCurrentDateParametersDisplay();const maxPostDate=advanceDate(new Date(),0);const maxPreDate=advanceDate(new Date(),-3);urlParams.postDate1=urlParams.postDate1||advanceDate(maxPostDate,-60);urlParams.postDate2=urlParams.postDate2||maxPostDate;const minPreDate="2016-01-01";const minPostDate="2017-01-01";addHiFormPostDatePicker("pre-post-dates-div","post-date-picker-container",minPostDate,maxPostDate,urlParams.postDate1,urlParams.postDate2);if(!urlParams.preDateRange){urlParams.preDateRange={"6 Month":false,"1 Year":true,Custom:false,};} addSelectTypeRadio("pre-post-dates-div","define-pre-date-options","Define Pre Date Range","selectedPreDateRangeType",urlParams.preDateRange,"Choose a pre date range option",toggleCustomPostDate);$("#define-pre-date-options").append(`
                                                    Pre Date Range:
                                                    `);$("#selected-date-range").append(`

                                                    `);addHiFormCustomPrePicker("pre-post-dates-div","pre-date-picker-container",minPreDate,maxPreDate);toggleCustomPostDate();function toggleCustomPostDate(){if(selectedPreDateRangeType==="Custom"){$("#pre-ranges-div").show();}else{$("#pre-ranges-div").hide();} handleSelectedPreDateType();} function preDateOneHandler(e){console.log("Date Selected (Pre1): "+e.target.value);urlParams.preDate1=e.target.value;if($("#pre-date-two").val()===""){let bufferDate=advanceDate(urlParams.preDate1,60);if(bufferDate>maxPreDate){bufferDate=maxPreDate;} @@ -2033,11 +2035,11 @@ if(mode!=="geeViz"){addSubAccordianCard("splash-toggle-container","show-splash-r if(["Bloom-Mapper","TreeMap","sequoia-view","HiForm-BMP"].indexOf(mode)===-1){addSubAccordianCard("tools-accordian","pixel-chart-label","pixel-chart-div","Query "+mode+" Time Series",staticTemplates.pixelChartDiv,false,`toggleTool(toolFunctions.pixel.chart)`,staticTemplates.pixelChartTipHover);addDropdown("pixel-chart-div","pixel-collection-dropdown","Choose which "+mode+" time series to chart","whichPixelChartCollection","Choose which "+mode+" time series to chart.");} if(mode==="geeViz"){$("#pixel-chart-label").remove();$("#share-button").remove();$("#usda-notices").remove();} if(mode==="LAMDA"){$("#pixel-chart-label").remove();} -if(mode==="LCMS-pilot"||mode==="MTBS"||mode==="IDS"||mode==="LCMS"||mode==="geeViz"||mode==="LAMDA"||(mode==="TreeMap"&&urlParams.canAreaChart)){$("#tools-accordian").append(`
                                                    Area Tools
                                                    `);addSubCollapse("tools-accordian","area-chart-params-label","area-chart-params-div","Area Tools Parameters","",false,"");$("#area-chart-params-label").prop("title","Click here to select which LCMS products to chart, and change which area units are used. ");addDropdown("area-chart-params-div","area-collection-dropdown","Choose which "+mode+" product to summarize","whichAreaChartCollection","Choose which "+mode+" time series to summarize.");$("#area-chart-params-div").append(`
                                                    `);addMultiRadio("area-chart-params-div","area-summary-format","Area Units","areaChartFormat",{Percentage:true,Acres:false,Hectares:false});if(mode==="LCMS"||mode==="geeViz"){activeStartYear=urlParams.startYear;activeEndYear=urlParams.endYear;$("#area-chart-params-div").append(`
                                                    `);} -$("#area-summary-format").prop("title","Choose how to summarize area- as a percentage of the area, acres, or hectares.");addSubAccordianCard("tools-accordian","map-defined-area-chart-label","map-defined-area-chart-div","Map Extent Area",staticTemplates.mapDefinedAreaChartDiv,false,`toggleTool(toolFunctions.area.mapBounds)`,staticTemplates.mapDefinedAreaChartTipHover);addSubAccordianCard("tools-accordian","user-defined-area-chart-label","user-defined-area-chart-div","User-Defined Area",staticTemplates.userDefinedAreaChartDiv,false,`toggleTool(toolFunctions.area.userDefined)`,staticTemplates.userDefinedAreaChartTipHover);addSubAccordianCard("tools-accordian","upload-area-chart-label","upload-area-chart-div","Upload an Area",staticTemplates.uploadAreaChartDiv,false,"toggleTool(toolFunctions.area.shpDefined)",staticTemplates.uploadAreaChartTipHover);addSubAccordianCard("tools-accordian","select-area-interactive-chart-label","select-area-interactive-chart-div","Select an Area on Map",staticTemplates.selectAreaInteractiveChartDiv,false,"toggleTool(toolFunctions.area.selectInteractive)",staticTemplates.selectAreaInteractiveChartTipHover);addRangeSlider("upload-reduction-factor-container","Vertex Reduction Factor","uploadReductionFactor",1,5,1,1,"upload-reduction-factor-slider","null","Every n vertex in uploaded file will be kept for polygons > 100 vertices (E.g. if 3 is chosen, every third vertex remains). This is intended to help enable use of uploaded areas that may have failed due to its size.");addRangeSlider("simplify-error-range-container","Simplify Area - Max Error","simplifyMaxError",0,500,0,50,"simplify-error-slider","null","If the selected area is very large and/or has a lot of vertices, it may not compute. In this instance, clear out any existing selections (trash can button below), and increase this value. The selected polygon will be simplified using a max error in meters equal to this value upon selection. Generally between 50 and 150 will get most areas to work.");addShapeEditToolbar("user-defined-edit-toolbar","user-defined-area-icon-bar","undoUserDefinedAreaCharting()","restartUserDefinedAreaCarting()");addColorPicker("user-defined-area-icon-bar","user-defined-color-picker","updateUDPColor",udpOptions.strokeColor);addShapeEditToolbar("select-features-edit-toolbar","select-area-interactive-chart-icon-bar","removeLastSelectArea()","clearSelectedAreas()","Click to unselect most recently selected polyogn","Click to clear all selected polygons");} +if(mode==="LCMS-pilot"||mode==="MTBS"||mode==="IDS"||mode==="LCMS"||mode==="geeViz"||mode==="LAMDA"||mode==="TreeMap"){$("#tools-accordian").append(`
                                                    Area Tools
                                                    `);addSubCollapse("tools-accordian","area-chart-params-label","area-chart-params-div","Area Tools Parameters","",false,"");$("#area-chart-params-label").prop("title","Click here to select which layers to chart, and change which area units are used. ");addDropdown("area-chart-params-div","area-collection-dropdown","Choose which "+mode+" product to summarize","whichAreaChartCollection","Choose which "+mode+" time series to summarize.");$("#area-chart-params-div").append(`
                                                    `);urlParams.chartUnits=urlParams.chartUnits||{Percentage:true,Acres:false,Hectares:false,};addMultiRadio("area-chart-params-div","area-summary-format","Area Units","areaChartFormat",urlParams.chartUnits);if(mode==="LCMS"||mode==="geeViz"){activeStartYear=urlParams.startYear;activeEndYear=urlParams.endYear;$("#area-chart-params-div").append(`
                                                    `);} +$("#area-summary-format").prop("title","Choose how to summarize area for thematic layers- as a percentage of the area, acres, or hectares.");addSubAccordianCard("tools-accordian","map-defined-area-chart-label","map-defined-area-chart-div","Map Extent Area",staticTemplates.mapDefinedAreaChartDiv,false,`toggleTool(toolFunctions.area.mapBounds)`,staticTemplates.mapDefinedAreaChartTipHover);addSubAccordianCard("tools-accordian","user-defined-area-chart-label","user-defined-area-chart-div","User-Defined Area",staticTemplates.userDefinedAreaChartDiv,false,`toggleTool(toolFunctions.area.userDefined)`,staticTemplates.userDefinedAreaChartTipHover);addSubAccordianCard("tools-accordian","upload-area-chart-label","upload-area-chart-div","Upload an Area",staticTemplates.uploadAreaChartDiv,false,"toggleTool(toolFunctions.area.shpDefined)",staticTemplates.uploadAreaChartTipHover);addSubAccordianCard("tools-accordian","select-area-interactive-chart-label","select-area-interactive-chart-div","Select an Area on Map",staticTemplates.selectAreaInteractiveChartDiv,false,"toggleTool(toolFunctions.area.selectInteractive)",staticTemplates.selectAreaInteractiveChartTipHover);addRangeSlider("upload-reduction-factor-container","Vertex Reduction Factor","uploadReductionFactor",1,5,1,1,"upload-reduction-factor-slider","null","Every n vertex in uploaded file will be kept for polygons > 100 vertices (E.g. if 3 is chosen, every third vertex remains). This is intended to help enable use of uploaded areas that may have failed due to its size.");addRangeSlider("simplify-error-range-container","Simplify Area - Max Error","simplifyMaxError",0,500,0,50,"simplify-error-slider","null","If the selected area is very large and/or has a lot of vertices, it may not compute. In this instance, clear out any existing selections (trash can button below), and increase this value. The selected polygon will be simplified using a max error in meters equal to this value upon selection. Generally between 50 and 150 will get most areas to work.");addShapeEditToolbar("user-defined-edit-toolbar","user-defined-area-icon-bar","undoUserDefinedAreaCharting()","restartUserDefinedAreaCarting()");addColorPicker("user-defined-area-icon-bar","user-defined-color-picker","updateUDPColor",udpOptions.strokeColor);addShapeEditToolbar("select-features-edit-toolbar","select-area-interactive-chart-icon-bar","removeLastSelectArea()","clearSelectedAreas()","Click to unselect most recently selected polyogn","Click to clear all selected polygons");} if(localStorage["showToolTipModal-"+mode]==undefined||localStorage["showToolTipModal-"+mode]=="undefined"){localStorage["showToolTipModal-"+mode]="true";} tShowToolTipModal=localStorage["showToolTipModal-"+mode];function toggleTooltip(){setTimeout(()=>{console.log("toggle tooltip");if($("#tooltip-radio-label").first().attr("aria-expanded")==="true"){console.log("showing tooltips");localStorage["showToolTipModal-"+mode]="true";}else{localStorage["showToolTipModal-"+mode]="false";}},500);} -addSubAccordianCard("tips-toggle-container","tooltip-radio-label","tooltip-radio-div","Show tool tips",``,localStorage["showToolTipModal-"+mode],"toggleTooltip()","Whether to show tool tips to help explain how to use the tools.");if(mode==="sequoia-view"){$("#tools-accordian").append(`
                                                    Area Tools
                                                    `);addSubAccordianCard("tools-accordian","upload-area-chart-label","upload-area-chart-div","Upload an Area",staticTemplates.uploadShpToMapLayerDiv,false,"toggleTool(toolFunctions.area.shpDefined)",staticTemplates.uploadAreaChartTipHover);} +addSubAccordianCard("tips-toggle-container","tooltip-radio-label","tooltip-radio-div","Show tool tips",``,localStorage["showToolTipModal-"+mode],"toggleTooltip()","Whether to show tool tips to help explain how to use the tools.");if(mode==="sequoia-view"){$("#tools-accordian").append(`
                                                    Area Tools
                                                    `);addSubAccordianCard("tools-accordian","upload-area-chart-label","upload-area-chart-div","Upload an Area",staticTemplates.uploadShpToMapLayerDiv,false,"toggleTool(toolFunctions.area.shpDefined)",staticTemplates.uploadAreaChartTipHover);} if(mode==="MTBS"||mode==="Ancillary"){$("#contributor-logos").prepend(` USGS logo `);$("#contributor-logos").prepend(` @@ -2063,7 +2065,8 @@ $(".dashboard-results-toggler").css("right",`${ $("body").width()) * 100 }%`);} -if(mode==="lcms-dashboard"){$("body").append(staticTemplates.dashboardResultsToggler);$(".dashboard-results-toggler").css("right",`${ +let resizePanes;if(mode!=="lcms-dashboard"){resizePanes=resizeViewerPanes;}else{resizePanes=resizeDashboardPanes;} +$(window).resize(()=>resizePanes());if(mode==="lcms-dashboard"){$("body").append(staticTemplates.dashboardResultsToggler);$(".dashboard-results-toggler").css("right",`${ (($("#dashboard-results-container-right").width() - convertRemToPixels(3)) / $("body").width()) * @@ -2183,7 +2186,7 @@ if(name==undefined||name==null){name="Layer "+NEXT_LAYER_ID;} let checked="";let legendDivID=name.replaceAll(" ","-")+"-"+NEXT_LAYER_ID.toString();legendDivID=legendDivID.replace(/[^A-Za-z0-9]/g,"-");if(urlParams.layerProps[legendDivID]===undefined||urlParams.layerProps[legendDivID]===null){urlParams.layerProps[legendDivID]={};urlParams.layerProps[legendDivID].visible=false;urlParams.layerProps[legendDivID].opacity=viz.opacity||1;}else{viz.opacity=urlParams.layerProps[legendDivID].opacity||1;} if(viz.autoViz){if(viz.dictServerSide){console.log("start");console.log(name);viz.eeObjInfo=viz.eeObjInfo.getInfo();viz.dictServerSide=false;console.log(viz);} if(viz.bands===undefined||viz.bands===null){viz.bands=viz.eeObjInfo.bandNames;} -viz.bands=viz.bands[0];dicts=getLookupDicts(viz.bands,viz.class_values,viz.class_names,viz.class_palette);viz.classLegendDict=dicts.classLegendDict;viz.queryDict=dicts.queryDict;} +viz.bands=viz.bands[0];dicts=getLookupDicts(viz.bands,viz.class_values,viz.class_names,viz.class_palette,viz.includeClassValues);viz.classLegendDict=dicts.classLegendDict;viz.queryDict=dicts.queryDict;} if(viz.mosaic===null||viz.mosaic===undefined){viz.mosaic=false;} viz.canQuery=false;viz.isSelectLayer=false;viz.isTimeLapse=true;viz.timeLapseID=legendDivID;viz.layerType=viz.layerType!=="tileMapService"?"geeImage":viz.layerType;if(viz.dateFormat===null||viz.dateFormat===undefined){viz.dateFormat="YYYY";} viz.advanceInterval=viz.advanceInterval||"year";if(viz.dateField===null||viz.dateField===undefined){viz.dateField="system:time_start";} @@ -2286,7 +2289,7 @@ if((viz.autoViz&&viz.class_names===undefined)||viz.class_names===null){viz=addCl viz.areaChartParams.class_values=viz.class_values;viz.areaChartParams.class_names=viz.class_names;viz.areaChartParams.class_palette=viz.class_palette;viz.areaChartParams.class_visibility=viz.class_visibility;viz.areaChartParams.layerType=viz.areaChartParams.layerType||viz.eeObjectType;viz.areaChartParams.eeObjInfo=viz.eeObjInfo;viz.areaChartParams.dictServerSide=viz.dictServerSide;return viz;} function addClassVizDicts(viz){let cls_names_keys=Object.keys(viz.eeObjInfo).filter((k)=>k.indexOf("_class_names")>-1);if(cls_names_keys.length>0){let bns=cls_names_keys.map((k)=>k.split("_class_names")[0]);bns=bns.filter((bn)=>viz.eeObjInfo.bandNames.indexOf(bn)>-1);if(bns.length>=1){viz.autoViz=true;viz.class_names={};viz.class_values={};viz.class_palette={};viz.class_visibility={};bns.map((bn)=>{let cns=viz.eeObjInfo[`${bn}_class_names`];let cvs=viz.eeObjInfo[`${bn}_class_values`];let cp=viz.eeObjInfo[`${bn}_class_palette`];let cv=viz.eeObjInfo[`${bn}_class_visibility`];if(cns!==undefined){viz.class_names[bn]=viz.class_names[bn]||cns;viz.class_values[bn]=viz.class_values[bn]||cvs;viz.class_palette[bn]=viz.class_palette[bn]||cp;viz.class_visibility[bn]=viz.class_visibility[bn]||cv;}});}} return viz;} -function getLookupDicts(bandName,class_values,class_names,class_palette){let values=class_values[bandName];let palette=class_palette[bandName];let names=class_names[bandName];let value_name=zip(values,names).map((v)=>v.join("- "));legendDict=toObj(value_name,palette);queryDict=toObj(values,names);return{classLegendDict:legendDict,queryDict:queryDict};} +function getLookupDicts(bandName,class_values,class_names,class_palette,includeClassValues){let values=class_values[bandName];let palette=class_palette[bandName];let names=class_names[bandName];includeClassValues=includeClassValues==true||includeClassValues==undefined?true:false;let value_name=includeClassValues==true?zip(values,names).map((v)=>v.join("- ")):names;legendDict=toObj(value_name,palette);queryDict=toObj(values,names);return{classLegendDict:legendDict,queryDict:queryDict};} const typeLookup={Image:"geeImage",ImageCollection:"geeImageCollection",Feature:"geeVectorImage",FeatureCollection:"geeVectorImage",Geometry:"geeVectorImage",};const reverseTypeLookup={};Object.keys(typeLookup).map((k)=>(reverseTypeLookup[typeLookup[k]]=k));function addToMap(item,viz,name,visible,label,fontColor,helpBox,whichLayerList,queryItem){if(viz===undefined||viz===null){viz={};} viz=copyObj(viz);if(viz!==null&&viz!==undefined&&viz.serialized!==null&&viz.serialized!==undefined&&viz.serialized===true){item=ee.Deserializer.decode(item);if(viz.areaChartParams!==undefined&&viz.areaChartParams!==null&&viz.areaChartParams.reducer!==undefined&&viz.areaChartParams.reducer!==null){viz.areaChartParams.reducer=ee.Deserializer.fromJSON(viz.areaChartParams.reducer);}} viz.labelClasses=viz.labelClasses||"";viz.labelIconHTML=viz.labelIconHTML||"";const currentGEERunID=geeRunID;if(whichLayerList===null||whichLayerList===undefined){whichLayerList="layer-list";} @@ -2325,7 +2328,7 @@ const layer={};layer.ID=NEXT_LAYER_ID;NEXT_LAYER_ID+=1;layer.layerChildID=layerC if(viz.canQuery===null||viz.canQuery===undefined){viz.canQuery=true;} layer.canQuery=viz.canQuery;layer.queryItem=queryItem;layer.layerType=viz.layerType;if(viz.autoViz&&viz.isTimeLapse===false){if(viz.dictServerSide){console.log("start");console.log(name);viz.eeObjInfo=viz.eeObjInfo.getInfo();viz.dictServerSide=false;viz=addClassVizDicts(viz);console.log(viz);} if(viz.bands===undefined||viz.bands===null){viz.bands=viz.eeObjInfo.bandNames;} -viz.bands=viz.bands[0];dicts=getLookupDicts(viz.bands,viz.class_values,viz.class_names,viz.class_palette);viz.classLegendDict=dicts.classLegendDict;viz.queryDict=dicts.queryDict;} +viz.bands=viz.bands[0];dicts=getLookupDicts(viz.bands,viz.class_values,viz.class_names,viz.class_palette,viz.includeClassValues);viz.classLegendDict=dicts.classLegendDict;viz.queryDict=dicts.queryDict;} if(viz!=null&&(viz.bands==null||viz.bands.length==1)&&viz.addToLegend!=false&&(viz.addToClassLegend===undefined||viz.addToClassLegend===null||viz.addToClassLegend===false)&&(viz.classLegendDict==undefined||viz.classLegendDict==null)){addLegendContainer(legendDivID,"legend-"+whichLayerList,false,helpBox);const legend={};if(viz.legendTitle!==null&&viz.legendTitle!==undefined){legend.name=viz.legendTitle;}else{legend.name=name;} legend.labelClasses=viz.labelClasses;legend.labelIconHTML=viz.labelIconHTML;legend.helpBoxMessage=helpBox;let palette;if(viz.palette!=null){palette=viz.palette;}else{palette="000,FFF";} let paletteList=palette;if(typeof palette==="string"){paletteList=paletteList.split(",");} @@ -2385,7 +2388,7 @@ function reRun(){if(staticTemplates.loadingModal[mode]===undefined){if(mode==="M setGEERunID();clearSelectedAreas();clearUploadedAreas();layerChildID=0;layerCount=0;geeTileLayersDownloading=0;updateGEETileLayersLoading();stopTimeLapse();queryObj={};areaChartCollections={};pixelChartCollections={};timeLapseObj={};dashboardObj={};intervalPeriod=666.6666666;timeLapseID=null;urlParams.timeLapseFrame=0;cumulativeMode=urlParams.cumulativeMode;NEXT_LAYER_ID=1;clearSelectedAreas();selectedFeaturesGeoJSON={};["layer-list","reference-layer-list","area-charting-select-layer-list","fhp-div","time-lapse-legend-list","related-layer-list","county-selection-layer-list",].map(function(l){$("#"+l).empty();$("#legend-"+l).empty();});$("#export-list").empty();Object.values(featureObj).map(function(f){f.setMap(null);});featureObj={};map.overlayMapTypes.clear();refreshNumber++;exportImageDict={};try{clearDownloadDropdown();}catch(err){} try{areaChart.clearLayers();}catch(err){} google.maps.event.clearListeners(mapDiv,"click");setTimeout(function(){run();if(mode!=="lcms-dashboard"){$(".modal").modal("hide");$(".modal-backdrop").remove();} -setupAreaLayerSelection();smartAddLabelOverlay();},1500);} +setupAreaLayerSelection();smartAddLabelOverlay();if(areaChart.autoChartingOn===true){areaChart.chartMapExtent("",true);}},1500);} function mulberry32(a){return function(){let t=(a+=0x6d2b79f5);t=Math.imul(t^(t>>>15),t|1);t^=t+Math.imul(t^(t>>>7),t|61);const out=((t^(t>>>14))>>>0)/4294967296;return out;};} const randomN=mulberry32(1);function isHexColor(color,regexp=/^[0-9a-fA-F]+$/){return regexp.test(color);} function addColorHash(color){if(isHexColor(color)){return`#${color}`;}else{return color;}} @@ -2459,14 +2462,7 @@ distance=distance*unitMultiplier;if(distance>=0){const distanceContent=distance. dragBox.clickI++;}};dragBox.listenTo={box:dragBox.polygon};dragBox.addListenTo=function(obj,nm){dragBox.listenTo[nm]=obj;};dragBox.startListening=function(){Object.keys(dragBox.listenTo).map((k)=>{dragBox.listeners.click.push(google.maps.event.addListener(dragBox.listenTo[k],"click",dragBox.click));});};dragBox.stopListening=function(hide=true){if(hide){dragBox.polygon.setMap(null);} dragBox.listeners.click.map((e)=>google.maps.event.removeListener(e));dragBox.listeners.mousemove.map((e)=>google.maps.event.removeListener(e));dragBox.listeners={click:[],mousemove:[]};};dragBox.getEEBox=function(){return googleMapPolygonToGEEPolygon(dragBox.polygon);};return dragBox;} function googleMapPolygonToGEEPolygon(googleMapPolygon){let path=googleMapPolygon.getPath().getArray();path=path.map(function(p){return[p.lng(),p.lat()];});const geePolygon=ee.FeatureCollection([ee.Feature(ee.Geometry.Polygon(path)),]);return geePolygon;} -function dropdownUpdateStudyArea(whichOne){$("#summary-spinner").show();resetStudyArea(whichOne);const coords=studyAreaDict[whichOne].center;centerMap(coords[1],coords[0],coords[2]);if(mode==="Ancillary"){run=runAncillary;}else if(mode==="LT"){run=runLT;}else if(mode==="LCMS"||(mode==="LCMS-pilot"&&studyAreaDict[longStudyAreaName].isPilot==false)){run=runGTAC;run=function(){};}else if(mode==="LCMS-pilot"){run=runUSFS;}else if(mode==="STORM"){run=runStorm;}else if(mode==="LAMDA"){run=runLAMDA;}else if(mode==="TreeMap"){run=runTreeMap;}else if(mode==="lcms-base-learner"){run=runBaseLearner;}else if(mode==="sequoia-view"){run=runSequoia;}else if(mode==="HiForm-BMP"){run=runHiForm;}else if(studyAreaName==="CONUS"){run=runCONUS;}else{run=runUSFS;} -reRun();} -const resetStudyArea=function(whichOne){localStorage.setItem("cachedStudyAreaName",whichOne);urlParams.studyAreaName=whichOne;$("#studyAreaDropdown").val(whichOne);$("#study-area-label").text(whichOne);console.log("changing study area");console.log(whichOne);lowerThresholdDecline=studyAreaDict[whichOne].lossThresh;if(studyAreaDict[whichOne].lossSlowThresh!==undefined&&studyAreaDict[whichOne].lossSlowThresh!==null){lowerThresholdSlowLoss=studyAreaDict[whichOne].lossSlowThresh;}else{lowerThresholdSlowLoss=lowerThresholdDecline;} -if(studyAreaDict[whichOne].lossFastThresh!==undefined&&studyAreaDict[whichOne].lossFastThresh!==null){lowerThresholdFastLoss=studyAreaDict[whichOne].lossFastThresh;}else{lowerThresholdFastLoss=lowerThresholdDecline;} -upperThresholdDecline=1;upperThresholdSlowLoss=1;upperThresholdFastLoss=1;lowerThresholdRecovery=studyAreaDict[whichOne].gainThresh;upperThresholdRecovery=1;startYear=studyAreaDict[whichOne].startYear;endYear=studyAreaDict[whichOne].endYear;setUpRangeSlider("lowerThresholdDecline",0,1,lowerThresholdDecline,0.05,"decline-threshold-slider","null");setUpRangeSlider("lowerThresholdRecovery",0,1,lowerThresholdRecovery,0.05,"recovery-threshold-slider","null");setUpRangeSlider("lowerThresholdSlowLoss",0,1,lowerThresholdSlowLoss,0.05,"slow-loss-threshold-slider","null");setUpRangeSlider("lowerThresholdFastLoss",0,1,lowerThresholdFastLoss,0.05,"fast-loss-threshold-slider","null");setUpDualRangeSlider("urlParams.startYear","urlParams.endYear",minYear,maxYear,urlParams.startYear,urlParams.endYear,1,"analysis-year-slider","analysis-year-slider-update","null");const coords=studyAreaDict[whichOne].center;studyAreaName=studyAreaDict[whichOne].name;if(studyAreaName==="CONUS"){run=runCONUS;}else if(mode==="LCMS"||(mode==="LCMS-pilot"&&studyAreaDict[longStudyAreaName].isPilot==false)){run=runGTAC;}else{run=runUSFS;} -if(studyAreaDict[whichOne].addFastSlow){$("#fast-slow-threshold-container").show();}else{$("#fast-slow-threshold-container").hide();} -if(studyAreaDict[whichOne].addGainThresh){$("#recovery-threshold-slider-container").show();}else{$("#recovery-threshold-slider-container").hide();} -$("#export-crs").val(studyAreaDict[whichOne].crs);};function initSearchBox(){const input=document.getElementById("pac-input");const searchBox=new google.maps.places.SearchBox(input);map.addListener("bounds_changed",function(){searchBox.setBounds(map.getBounds());});let markers=[];searchBox.addListener("places_changed",function(){const places=searchBox.getPlaces();if(places.length==0){return;} +function initSearchBox(){const input=document.getElementById("pac-input");const searchBox=new google.maps.places.SearchBox(input);map.addListener("bounds_changed",function(){searchBox.setBounds(map.getBounds());});let markers=[];searchBox.addListener("places_changed",function(){const places=searchBox.getPlaces();if(places.length==0){return;} markers.forEach(function(marker){marker.setMap(null);});markers=[];let bounds=new google.maps.LatLngBounds();const formattedAddresses=[];places.forEach(function(place){if(!place.geometry){console.log("Returned place contains no geometry");return;} formattedAddresses.push(place.formatted_address);const icon={url:place.icon,size:new google.maps.Size(71,71),origin:new google.maps.Point(0,0),anchor:new google.maps.Point(17,34),scaledSize:new google.maps.Size(25,25),};markers.push(new google.maps.Marker({map:map,icon:icon,title:place.name,position:place.geometry.location,}));if(place.geometry.viewport){bounds.union(place.geometry.viewport);}else{bounds.extend(place.geometry.location);}});const boundsBounds={south:[-85,85],west:[-179,179],north:[-85,85],east:[-179,179],};bounds=bounds.toJSON();Object.keys(bounds).map(function(key){const coord=bounds[key];const min=boundsBounds[key][0];const max=boundsBounds[key][1];if(coordmax){bounds[key]=max;showMessage("Search coords tip!","Search coords format is lat lng (e.g. 45 -111)");}});console.log(bounds);console.log(formattedAddresses.join(","));ga("send","event","places-search",JSON.stringify(bounds),formattedAddresses.join(","));map.fitBounds(bounds);});} @@ -2481,7 +2477,7 @@ function backView(){viewIndex--;checkViewIndex();setView(viewList[viewIndex-1]); function forwardView(){viewIndex++;checkViewIndex();setView(viewList[viewIndex-1]);} let labelOverlayAdded=false;function addLabelOverlay(){map.overlayMapTypes.setAt(Object.keys(layerObj).length,labelsMapType);labelOverlayAdded=true;} function removeLabelOverlay(){map.overlayMapTypes.removeAt(Object.keys(layerObj).length);labelOverlayAdded=false;} -function smartAddLabelOverlay(){if(map.mapTypeId==="satellite"){removeLabelOverlay();}else{addLabelOverlay();}} +function smartAddLabelOverlay(){if(urlParams.addLabelOverlay!==false){if(map.mapTypeId==="satellite"){removeLabelOverlay();}else{addLabelOverlay();}}} function toggleLabelOverlay(){if(labelOverlayAdded){removeLabelOverlay();}else{addLabelOverlay();}} let labelsMapType;let geeAuthenticated=false;function initialize(){labelsMapType=new google.maps.StyledMapType([{elementType:"geometry.fill",stylers:[{visibility:"off",},],},{elementType:"geometry.stroke",stylers:[{weight:0.01,},],},]);const mapTypeIds=["roadmap","satellite","hybrid","terrain"];if(urlParams.mapTypeId===undefined||(urlParams.mapTypeId===null&&urlParams.mapTypeId.indexOf(urlParams.mapTypeIds)===-1)){urlParams.mapTypeId="hybrid";} const mapOptions={center:null,zoom:null,minZoom:2,disableDefaultUI:false,disableDoubleClickZoom:true,mapTypeId:urlParams.mapTypeId,streetViewControl:true,fullscreenControl:false,mapTypeControlOptions:{position:google.maps.ControlPosition.TOP_RIGHT,mapTypeIds:mapTypeIds,},streetViewControlOptions:{position:google.maps.ControlPosition.RIGHT_TOP,},scaleControlOptions:{position:google.maps.ControlPosition.RIGHT_TOP},zoomControlOptions:{position:google.maps.ControlPosition.RIGHT_TOP},tilt:0,controlSize:20,scaleControl:true,clickableIcons:false,cursor:"pointer",};let center=new google.maps.LatLng(initialCenter[0],initialCenter[1]);let zoom=initialZoomLevel;let settings=null;if(typeof Storage!=="undefined"){cachedStudyAreaName=localStorage.getItem("cachedStudyAreaName");if(urlParams.studyAreaName!==null&&urlParams.studyAreaName!==undefined){cachedStudyAreaName=decodeURIComponent(urlParams.studyAreaName);}else if(cachedStudyAreaName===null||cachedStudyAreaName===undefined){cachedStudyAreaName=defaultStudyArea;} @@ -2517,7 +2513,8 @@ if(cachedStudyAreaName===null){$("#study-area-label").text(defaultStudyArea);} if(mode==="Ancillary"){run=runAncillary;}else if(mode==="LCMS"||(mode==="LCMS-pilot"&&studyAreaDict[longStudyAreaName].isPilot==false)){run=runGTAC;}else if(mode==="LT"){run=runLT;}else if(mode==="MTBS"){run=runMTBS;}else if(mode==="TEST"){run=runTest;}else if(mode==="IDS"){run=runIDS;}else if(mode==="geeViz"){run=runGeeViz;}else if(mode==="LAMDA"){run=runLAMDA;}else if(mode==="STORM"){run=runStorm;}else if(mode==="lcms-base-learner"){run=runBaseLearner;}else if(mode==="TreeMap"){run=runTreeMap;}else if(mode==="lcms-dashboard"){run=runDashboard;map.setOptions({mapTypeControlOptions:{style:google.maps.MapTypeControlStyle.DROPDOWN_MENU,position:google.maps.ControlPosition.TOP_CENTER,style:google.maps.MapTypeControlStyle.SMALL,},streetViewControlOptions:{position:google.maps.ControlPosition.TOP_CENTER,},scaleControlOptions:{position:google.maps.ControlPosition.TOP_CENTER,},zoomControlOptions:{position:google.maps.ControlPosition.TOP_CENTER,style:google.maps.ZoomControlStyle.SMALL,},draggableCursor:"",});}else if(mode==="Bloom-Mapper"){run=runAlgal;}else if(mode==="sequoia-view"){run=runSequoia;}else if(mode==="HiForm-BMP"){run=runHiForm;}else if(studyAreaName==="CONUS"){longStudyAreaName=cachedStudyAreaName;run=runCONUS;}else if(cachedStudyAreaName!=null){longStudyAreaName=cachedStudyAreaName;resetStudyArea(cachedStudyAreaName);}else{run=runUSFS;} if(mode==="LCMS"){setupDropdownTreeDownloads(studyAreaName);populateLCMSDownloads();} if(mode==="TreeMap"){setupDropdownTreeMapDownloads();populateDownloads();} -setGEERunID();setTimeout(function(){let loaded=false;let loadTryCount=0;const maxLoadTryCount=1;let geeRunError;function loadRun(){try{let runStartTime=new Date();run();let runEndTime=new Date();let runTime=(runEndTime-runStartTime)/1000;console.log(`Run time: ${runTime} seconds`);loaded=true;}catch(err){geeRunError=err;console.log(err);console.log("Failed to load GEE run function. Waiting 0.5 second to retry");loadTryCount++;}} +setGEERunID();setTimeout(function(){let loaded=false;let loadTryCount=0;const maxLoadTryCount=1;let geeRunError;function loadRun(){try{let runStartTime=new Date();run();urlParams.activeTool=urlParams.activeTool||undefined;if(urlParams.activeTool!==undefined&&getActiveTools().length===0){$(toolFunctionsFlat[urlParams.activeTool]).click();} +let runEndTime=new Date();let runTime=(runEndTime-runStartTime)/1000;console.log(`Run time: ${runTime} seconds`);loaded=true;if(mode==="geeViz"){areaChart.autoHideAreaTools();}}catch(err){geeRunError=err;console.log(err);console.log("Failed to load GEE run function. Waiting 0.5 second to retry");loadTryCount++;}} while(loaded===false&&loadTryCountaddLayerSortListener(`#${l}`));}} setupAreaLayerSelection();if(plotsOn){addPlotCollapse();loadAllPlots();} @@ -2578,12 +2575,12 @@ areaChartCollections[whichAreaChartCollection].label+ " Summary",true);}}else{showMessage("Error!","Please select area to chart. Turn on any of the layers and click on polygons to select them. Then hit the Chart Selected Areas button.");$("#summary-spinner").slideUp();}});} function clearQueryGeoJSON(){queryGeoJSON.forEach(function(f){queryGeoJSON.remove(f);});} let queryWindowMode="infoWindow";queryWindowMode="sidepane";const getQueryImages=function(lng,lat){const lngLat=[lng,lat];$(".gm-ui-hover-effect").show();const outDict={};$("#summary-spinner").slideDown();const nameEnd=" Queried Values for Lng "+lng.toFixed(3)+" Lat "+lat.toFixed(3);const queryContent=`
                                                    -
                                                    Queried values for
                                                    lng: ${lng +
                                                    Queried values for
                                                    lng: ${lng .toFixed(3) .toString()} lat: ${lat.toFixed(3).toString()}
                                                  • -
                                                    `;if(queryWindowMode==="infoWindow"){$("#chart-collapse-label-chart-collapse-div").hide();$("#chart-collapse-div").empty();$("#legendDiv").css("max-width","");$("#legendDiv").css("max-height","60%");infowindow.setMap(null);infowindow.setPosition({lng:lng,lat:lat});infowindow.setOptions({maxWidth:350});infowindow.setContent(queryContent);infowindow.open(map);}else{infowindow.setContent("");infowindow.setMap(null);$("#legendDiv").css("max-width","");$("#legendDiv").css("max-height","80%");$("#chart-collapse-label-chart-collapse-div").show();$("#chart-collapse-div").empty();$("#chart-collapse-div").append(queryContent);} +
                                                    `;if(queryWindowMode==="infoWindow"){$("#chart-collapse-label-chart-collapse-div").hide();$("#chart-collapse-div").empty();$("#legendDiv").css("max-width","");$("#legendDiv").css("max-height","60%");infowindow.setMap(null);infowindow.setPosition({lng:lng,lat:lat});infowindow.setOptions({maxWidth:350});infowindow.setContent(queryContent);infowindow.open(map);}else{infowindow.setContent("");infowindow.setMap(null);$("#legendDiv").css("max-width","");resizePanes();$("#chart-collapse-label-chart-collapse-div").show();$("#chart-collapse-div").empty();$("#chart-collapse-div").append(queryContent);} let idI=1;function makeQueryTable(value,q,k){const containerID=k+"-container-"+idI.toString();idI++;$("#query-list-container").append(` @@ -2607,7 +2604,7 @@ clearQueryGeoJSON();keysToShow.map(function(k){const q=queryObj[k];if(q.visible) q.xTickDateFormat=null;if(dateFormat.indexOf("HH:mm")>-1){q.xTickDateFormat="%Y-%m-%d\n%H:%M";} let c=ee.ImageCollection(q.queryItem);const plotBounds=clickPt.buffer(plotRadius).bounds();function getCollectionValues(values){keyI++;if(values.length>1){const header=values[0];values=values.slice(1);let hasTime=false;const timeColumnN=header.indexOf("time");const idColumnN=header.indexOf("id");const ids=arrayColumn(values,idColumnN).filter((v,i,a)=>a.indexOf(v)===i);const expectedLength=ids.length;if(values.length>expectedLength){console.log("reducing number of inputs");values=values.slice(0,expectedLength);} hasTime=values[0][timeColumnN]!==null;let xColumn;let xLabel;if(hasTime){xColumn=arrayColumn(values,timeColumnN);xLabel="Time";}else{xColumn=arrayColumn(values,idColumnN);xLabel="ID";} -const yColumnNames=header.slice(4);yColumns=values.map(function(v){return v.slice(4);});const tableList=yColumnNames.map(function(c,i){let color=q.queryParams.palette!==undefined?q.queryParams.palette[i]:undefined;return{x:xColumn,y:arrayColumn(yColumns,i).map(smartToFixed),mode:"lines+markers",name:c.slice(0,50).chunk(15).join("
                                                    "),line:{color:color,width:1},marker:{size:3},};});makeQueryTable({table:tableList,xLabel:xLabel},q,k);}else{console.log("no data");makeQueryTable(null,q,k);}} +const yColumnNames=header.slice(4);yColumns=values.map(function(v){return v.slice(4);});const tableList=yColumnNames.map(function(c,i){let color=q.queryParams.palette!==undefined?q.queryParams.palette[i]:undefined;return{x:xColumn,y:arrayColumn(yColumns,i).map((n)=>smartToFixed(n)),mode:"lines+markers",name:c.slice(0,50).chunk(15).join("
                                                    "),line:{color:color,width:1},marker:{size:3},};});makeQueryTable({table:tableList,xLabel:xLabel},q,k);}else{console.log("no data");makeQueryTable(null,q,k);}} if(c.first().propertyNames().getInfo().indexOf("system:time_start")>-1){c=c.sort("system:time_start").map(function(img){return img.set("system:time_start",img.date().format(dateFormat));});} const getRegionCall=c.getRegion(plotBounds,scale,crs,transform);getRegionCall.evaluate(function(values,failure){if(values!==undefined&&values!==null){getCollectionValues(values);}else{keyI++;makeQueryTable(null,q,k);} if(failure!==undefined&&failure!==null){showMessage("Error",failure);}});}else if(q.type==="geeVectorImage"||q.type==="geeVector"){let features;try{features=q.queryItem.filterBounds(clickPt.buffer(plotRadius));}catch(err){features=ee.FeatureCollection([q.queryItem]).filterBounds(clickPt.buffer(plotRadius));} @@ -2701,7 +2698,7 @@ function stopAreaCharting(){window.removeEventListener("keydown",restartUserDefi $("#areaUpload").unbind("change");$("#summary-spinner").slideUp();} function startQuery(){areaGeoJson=null;try{udp.setMap(null);}catch(err){console.log(err);} if(queryWindowMode!=="infoWindow"){$("#chart-collapse-label-chart-collapse-div").show();} -google.maps.event.clearListeners(mapDiv,"dblclick");google.maps.event.clearListeners(mapDiv,"click");map.setOptions({draggableCursor:"help"});map.setOptions({cursor:"help"});mapHammer=new Hammer(document.getElementById("map"));mapHammer.on("doubletap",function(e){$("#summary-spinner").slideDown();map.setOptions({draggableCursor:"progress"});map.setOptions({cursor:"progress"});print("Map was double clicked");const x=e.center.x;const y=e.center.y;center=point2LatLng(x,y);const pt=ee.Geometry.Point([center.lng(),center.lat()]);const plotBounds=pt.buffer(plotRadius).bounds();addClickMarker(plotBounds);marker.setMap(map);getQueryImages(center.lng(),center.lat());});} +google.maps.event.clearListeners(mapDiv,"dblclick");google.maps.event.clearListeners(mapDiv,"click");map.setOptions({draggableCursor:"help"});map.setOptions({cursor:"help"});mapHammer=new Hammer(document.getElementById("map"));mapHammer.on("doubletap",function(e){if(exportAreaDrawingActive==false){$("#summary-spinner").slideDown();map.setOptions({draggableCursor:"progress"});map.setOptions({cursor:"progress"});print("Map was double clicked");const x=e.center.x;const y=e.center.y;center=point2LatLng(x,y);const pt=ee.Geometry.Point([center.lng(),center.lat()]);const plotBounds=pt.buffer(plotRadius).bounds();addClickMarker(plotBounds);marker.setMap(map);getQueryImages(center.lng(),center.lat());}});} function stopQuery(){try{mapHammer.destroy();map.setOptions({draggableCursor:""});map.setOptions({cursor:""});google.maps.event.clearListeners(mapDiv,"dblclick");map.setOptions({cursor:"hand"});infowindow.setMap(null);marker.setMap(null);$("#legendDiv").css("max-width","");$("#chart-collapse-div").empty();$("#chart-collapse-label-chart-collapse-div").hide();}catch(err){}} function getImageCollectionValuesForCharting(pt){const icT=ee.ImageCollection(chartCollection.filterBounds(pt));const tryCount=2;try{const allValues=icT.getRegion(pt,scale,crs,transform).evaluate();print(allValues);return allValues;}catch(err){showMessage(' Charting error',err.message);}} Date.prototype.yyyymmdd=function(){const mm=this.getMonth()+1;const dd=this.getDate();return[this.getFullYear(),!mm[1]&&"0",mm,!dd[1]&&"0",dd].join("");};function getDataTable(pt){let values=getImageCollectionValuesForCharting(pt);globalChartValues=values;let startColumn;if(chartIncludeDate){startColumn=3;}else{startColumn=4;} @@ -2806,7 +2803,7 @@ center.lng().toFixed(4).toString()+ " lat: "+ center.lat().toFixed(4).toString()+ ")";csvName=uriName+".csv";function chartValues(values){let startColumn;if(chartIncludeDate){startColumn=3;}else{startColumn=4;} -const header=values[0].slice(startColumn);values=values.slice(1).map(function(v){return v.slice(startColumn);}).sort(sortFunction);if(chartIncludeDate){values=values.map(function(v){const d=v[0];let y;if(pixelChartCollections[whichPixelChartCollection].simplifyDate===false){y=new Date(d).toGMTString();}else if(pixelChartCollections[whichPixelChartCollection].semiSimpleDate===true){y=`${new Date(d).getFullYear()}-${ +const header=values[0].slice(startColumn);values=values.slice(1).map(function(v){return v.slice(startColumn);}).sort(sortFunction);values=arraySmartToFixed(values);if(chartIncludeDate){values=values.map(function(v){const d=v[0];let y;if(pixelChartCollections[whichPixelChartCollection].simplifyDate===false){y=new Date(d).toGMTString();}else if(pixelChartCollections[whichPixelChartCollection].semiSimpleDate===true){y=`${new Date(d).getFullYear()}-${ new Date(d).getMonth() + 1 }-${new Date(d).getDate()}`;}else{y=(new Date(d).getYear()+1900).toString();} v[0]=y;return v;});} @@ -2823,12 +2820,12 @@ let result=innerValue.replace(/"/g,'""');if(result.search(/("|,|\n)/g)>=0)result return finalVal+"\n";};let csvFile="";for(let i=0;i{let grads=$(`#${id}>.plot-container>.svg-container>svg:first>defs`);let plotContainer=$(`#${id}>.plot-container>`);let links=$(`#${id}>.plot-container>.svg-container>svg:first>g.sankey>g.sankey-links>path.sankey-link`);let nodes=$(`#${id}>.plot-container>.svg-container>svg:first>g.sankey>g.sankey-node-set>g.sankey-node`);let sankeyContainer=$(`#${id}>.plot-container>.svg-container>svg:first>g.sankey`);let sankeyLinkContainer=$(`#${id}>.plot-container>.svg-container>svg:first>g.sankey>g.sankey-links`);let svgContainerID=`${id}-new-container`;$(grads).empty();let svgContainer=$(`#${svgContainerID}`);$(links).each((i,element)=>{const gradID=`linear-grad-${allI}`;grads.append(` +function areaChartCls(){this.setupTransitionPeriodUI=setupTransitionPeriodUI;this.setupTransitionPeriodUI();this.areaChartID=1;this.makeChartID=0;this.outstandingAddLayers=0;this.chartLayerSelectFromMapLayers=true;this.areaChartObj={};this.outstandingChartRequests={};this.maxOutStandingChartRequests={};this.chartContainerID="chart-collapse-div";this.layerSelectContainerID="area-chart-params-div";this.layerSelectID="area-chart-layer-select";this.listeners=[];this.plot_bgcolor="#D6D1CA";this.plot_font="Roboto Condensed, sans-serif";this.areaChartingOn=false;this.autoChartingOn=false;this.firstRun=true;this.chartHWRatio=0.7;this.sankeyTransitionPeriodYearBuffer=0;this.currentSankeyLinkColors=[];this.sankeyChartIDs=[];this.chartDecimalProportion=chartDecimalProportion;this.chartPrecision=chartPrecision;$("body").append();this.updateSankeyLinkColors=function(){let allI=0;areaChart.sankeyChartIDs.map((id)=>{let grads=$(`#${id}>.plot-container>.svg-container>svg:first>defs`);let plotContainer=$(`#${id}>.plot-container>`);let links=$(`#${id}>.plot-container>.svg-container>svg:first>g.sankey>g.sankey-links>path.sankey-link`);let nodes=$(`#${id}>.plot-container>.svg-container>svg:first>g.sankey>g.sankey-node-set>g.sankey-node`);let sankeyContainer=$(`#${id}>.plot-container>.svg-container>svg:first>g.sankey`);let sankeyLinkContainer=$(`#${id}>.plot-container>.svg-container>svg:first>g.sankey>g.sankey-links`);let svgContainerID=`${id}-new-container`;$(grads).empty();let svgContainer=$(`#${svgContainerID}`);$(links).each((i,element)=>{const gradID=`linear-grad-${allI}`;grads.append(` `);$(element).css({fill:`url(#${gradID})`,"fill-opacity":1});allI++;});});};this.addMBSankey=function(){$("#legendDiv").css("max-width","1000px");$(".sankey").empty();$(".sankey").append(`BrazilPortugalFranceSpainEnglandCanadaMexicoUSAAngolaSenegalMoroccoSouth AfricaMaliChinaIndiaJapan`);};this.clearLayers=function(){this.clearChartLayerSelect();this.areaChartObj={};this.areaChartID=1;this.clearCharts();};this.addLayer=function(eeLayer,params={},name,shouldChart=true){if(params!==null&¶ms!==undefined&¶ms.serialized!==null&¶ms.serialized!==undefined&¶ms.serialized===true){eeLayer=ee.Deserializer.decode(eeLayer);if(params.reducer!==undefined&¶ms.reducer!==null){params.reducer=ee.Deserializer.fromJSON(params.reducer);} params.serialized=false;} -$("#map-defined-area-chart-label").show();$("#area-collection-dropdown-container").hide();let obj={};obj.name=name||`Area-Layer-${this.areaChartID}`;obj.id=params.id||obj.name.replaceAll(" ","-")+"-"+this.areaChartID.toString();obj.id=obj.id.replace(/[^A-Za-z0-9]/g,"-");params.layerType=params.layerType||getImagesLib.getObjType(eeLayer,"area chart add layer");params.eeObjInfo=params.eeObjInfo||getImagesLib.eeObjInfo(eeLayer,params.layerType);obj.dictServerSide=eeObjServerSide(params.eeObjInfo);if(params.layerType===undefined||params.layerType===null){if(obj.dictServerSide===true){console.log("start");params.eeObjInfo=params.eeObjInfo.getInfo();obj.dictServerSide=false;console.log(params.eeObjInfo);} +$("#map-defined-area-chart-label").show();$("#area-collection-dropdown-container").hide();let obj={};obj.name=name||`Area-Layer-${this.areaChartID}`;obj.id=params.id||obj.name.replaceAll(" ","-")+"-"+this.areaChartID.toString();obj.id=obj.id.replace(/[^A-Za-z0-9-]/g,"-");params.layerType=params.layerType||getImagesLib.getObjType(eeLayer,"area chart add layer");params.eeObjInfo=params.eeObjInfo||getImagesLib.eeObjInfo(eeLayer,params.layerType);obj.dictServerSide=eeObjServerSide(params.eeObjInfo);if(params.layerType===undefined||params.layerType===null){if(obj.dictServerSide===true){console.log("start");params.eeObjInfo=params.eeObjInfo.getInfo();obj.dictServerSide=false;console.log(params.eeObjInfo);} obj.layerType=params.eeObjInfo.layerType;}else{obj.layerType=params.layerType;} eeLayer=obj.layerType==="ImageCollection"?ee.ImageCollection(eeLayer):ee.Image(eeLayer);if(obj.layerType!=="ImageCollection"&&obj.layerType!=="Image"){setTimeout(()=>showMessage("Area Chart addLayer Error",`Cannot add ee object type ${obj.layerType} as an area chart layer.
                                                    Accepted types are ee.ImageCollection and ee.Image`),500);}else if(obj.layerType==="Image"&¶ms.sankey===true){setTimeout(()=>showMessage("Area Chart addLayer Error",`Cannot add ee object type "${obj.layerType}" as an area chart layer sankey : true.
                                                    Accepted sankey GEE object types are "ImageCollection"`),500);}else{if(params.bandNames===undefined||params.bandNames===null){if(obj.dictServerSide){console.log("start");params.eeObjInfo=params.eeObjInfo.getInfo();obj.dictServerSide=false;console.log(params);} obj.bandNames=params.eeObjInfo.bandNames;}else{obj.bandNames=params.bandNames;} @@ -2838,7 +2835,7 @@ obj.rangeSlider=params.rangeSlider===true?{}:null;obj.item=eeLayer.select(obj.ba obj.showGrid=params.showGrid;if(obj.class_names!==null){obj.bandNames=Object.keys(obj.class_names);obj.item=obj.item.select(obj.bandNames);} obj.palette=params.palette;if(typeof obj.palette==="string"){obj.palette=obj.palette.split(",");} obj.palette_lookup=params.palette_lookup;obj.chartType=params.chartType||"line";obj.stackedAreaChart=params.stackedAreaChart==true?0:undefined;obj.steppedLine=params.steppedLine==true?true:false;obj.label=obj.name;obj.shouldUnmask=params.shouldUnmask==true?true:false;obj.unmaskValue=params.unmaskValue||0;obj.xAxisLabel=params.xAxisLabel||obj.layerType==="ImageCollection"?"Year":"";obj.xAxisLabels=params.xAxisLabels;obj.xAxisProperty=params.xAxisProperty||obj.layerType==="ImageCollection"?"year":"system:index";obj.size=1;if(obj.layerType==="ImageCollection"){obj.size=params.eeObjInfo.size!==undefined?params.eeObjInfo.size:obj.item.size().getInfo();} -obj.dateFormat=params.dateFormat||"YYYY";obj.chartTitleFontSize=params.chartTitleFontSize||10;obj.chartLabelFontSize=params.chartLabelFontSize||10;obj.chartAxisTitleFontSize=params.chartAxisTitleFontSize||10;obj.chartLabelMaxWidth=params.chartLabelMaxWidth||16;obj.chartLabelMaxLength=params.chartLabelMaxLength||50;obj.chartWidth=params.chartWidth;obj.chartHeight=params.chartHeight;obj.xTickDateFormat=params.xTickDateFormat||null;obj.chartDecimalProportion=params.chartDecimalProportion;obj.chartPrecision=params.chartPrecision;obj.scale=params.scale!==undefined?params.scale:scale;obj.transform=params.transform!==undefined?params.transform:transform;obj.crs=params.crs||crs;obj.autoScale=params.autoScale||true;obj.minZoomSpecifiedScale=params.minZoomSpecifiedScale||11;obj.maxAutoScale=2**6;obj.sankeyTransitionPeriods=params.sankeyTransitionPeriods;obj.sankeyMinPercentage=params.sankeyMinPercentage!==undefined?params.sankeyMinPercentage:0.5;obj.barChartMaxClasses=params.barChartMaxClasses||20;obj.plots={};obj.tableExportData={};obj.splitStr="----";if(params.scale!==undefined&¶ms.scale!==null&¶ms.transform!==undefined&¶ms.transform!==null){obj.scale=null;} +obj.hovermode=params.hovermode||"closest";obj.dateFormat=params.dateFormat||"YYYY";obj.chartTitleFontSize=params.chartTitleFontSize||10;obj.chartLabelFontSize=params.chartLabelFontSize||10;obj.chartAxisTitleFontSize=params.chartAxisTitleFontSize||10;obj.chartLabelMaxWidth=params.chartLabelMaxWidth||40;obj.chartLabelMaxLength=params.chartLabelMaxLength||100;obj.chartWidth=params.chartWidth;obj.chartHeight=params.chartHeight;obj.xTickDateFormat=params.xTickDateFormat||null;obj.chartDecimalProportion=params.chartDecimalProportion;obj.chartPrecision=params.chartPrecision;obj.scale=params.scale!==undefined?params.scale:scale;obj.transform=params.transform!==undefined?params.transform:transform;obj.crs=params.crs||crs;obj.autoScale=params.autoScale||true;obj.minZoomSpecifiedScale=params.minZoomSpecifiedScale||11;obj.maxAutoScale=2**6;obj.sankeyTransitionPeriods=params.sankeyTransitionPeriods;obj.sankeyMinPercentage=params.sankeyMinPercentage!==undefined?params.sankeyMinPercentage:0.5;obj.barChartMaxClasses=params.barChartMaxClasses||20;obj.plots={};obj.tableExportData={};obj.splitStr="----";if(params.scale!==undefined&¶ms.scale!==null&¶ms.transform!==undefined&¶ms.transform!==null){obj.scale=null;} obj.chartScale=scale;obj.shouldChart=shouldChart;obj.sankey=params.sankey||false;obj.line=params.line||obj.sankey==false;if(obj.scale===undefined||obj.scale===null){obj.chartScale=obj.transform[0];} if(obj.dateFormat.indexOf("HH:mm")>-1){obj.xTickDateFormat="%Y-%m-%d\n%H:%M";} if(obj.sankey){obj.sankey_class_names={};obj.sankey_class_values={};obj.sankey_class_palette={};if(obj.sankeyTransitionPeriods===undefined||obj.sankeyTransitionPeriods===null){let first_last_years=obj.item.reduceColumns(ee.Reducer.minMax(),["system:time_start",]);first_last_years=ee.Dictionary(first_last_years).values().map((n)=>ee.Date(n).format(obj.dateFormat)).sort();obj.sankey_years=params.sankey_years||first_last_years.getInfo();} @@ -2848,23 +2845,22 @@ if(obj.layerType==="ImageCollection"){obj.xAxisLabels=obj.item.aggregate_histogr obj.xAxisLabels=obj.xAxisLabels.map((l)=>isNaN(parseInt(l))||(typeof l==="string"&&l.indexOf("-")>-1)?l:parseInt(l));if(obj.layerType==="ImageCollection"){obj.stackBandNames=[];obj.xAxisLabels.map((xLabel)=>{obj.bandNames.map((bn)=>{obj.stackBandNames.push(`${xLabel}${obj.splitStr}${bn}`);});});if(obj.size>obj.xAxisLabels.length){console.log("Mosaicking for single image per x label");let temp=[];obj.xAxisLabels.map((l)=>{let t=obj.item.filter(ee.Filter.eq(obj.xAxisProperty,l));let f=t.first();t=t.mosaic().copyProperties(f).set(obj.xAxisProperty,l);temp.push(t);});obj.size=temp.length;obj.item=ee.ImageCollection(temp);}}else{obj.stackBandNames=obj.bandNames;}} if(obj.class_names!==null&&Object.keys(obj.class_names).length>0){obj.isThematic=true;if(params.reducer!==undefined&¶ms.reducer!==null){obj.reducer=params.reducer;obj.reducerString=params.reducerString||obj.reducer.getInfo().type.split("Reducer.")[1];}else{obj.reducer=ee.Reducer.frequencyHistogram();obj.reducerString="frequencyHistogram";}}else{obj.isThematic=false;if(params.reducer!==undefined&¶ms.reducer!==null){obj.reducer=params.reducer;obj.reducerString=params.reducerString||obj.reducer.getInfo().type.split("Reducer.")[1];}else{obj.reducer=ee.Reducer.mean();obj.reducerString="mean";}} obj.visible=params.visible;obj.isThematic=obj.reducerString==="frequencyHistogram"?true:obj.isThematic;obj.yAxisLabel=obj.yAxisLabel||obj.reducerString==="frequencyHistogram"?undefined:obj.reducerString.toTitle();this.areaChartObj[obj.id]=obj;this.areaChartID++;this.outstandingAddLayers--;this.autoSankeyTransitionPeriods();}};this.autoSankeyTransitionPeriods=function(){let all_sankey_years=Object.values(this.areaChartObj).filter((v)=>v.sankey_years!==undefined);if(all_sankey_years.length>0){all_sankey_years=Object.values(all_sankey_years).map((v)=>v.sankey_years);activeStartYear=all_sankey_years.map((v)=>v[0]).min();activeEndYear=all_sankey_years.map((v)=>v[1]).max();$("#added-transition-rows tr:first > td input:first").val(activeStartYear);$("#added-transition-rows tr:first > td input:last").val(activeStartYear+this.sankeyTransitionPeriodYearBuffer);$("#added-transition-rows tr:last > td input:first").val(activeEndYear-this.sankeyTransitionPeriodYearBuffer);$("#added-transition-rows tr:last > td input:last").val(activeEndYear);}};this.autoSetScale=function(scaleT,transformT,minZoomSpecifiedScale,maxAutoScale){scaleT=scaleT||transformT[0];let scaleMult=1/((1<maxAutoScale?maxAutoScale:scaleMult;scaleT=scaleT*scaleMult;let nominalScale=scaleT;if(transformT!==undefined&&transformT!==null){transformT[0]=scaleT;transformT[4]=-scaleT;scaleT=null;} -return[scaleT,transformT,scaleMult,nominalScale];};this.getMapExtentCoordsStr=function(joinStr=",",coordOrder=["west","north","east","south"]){let coordJSON=map.getBounds().toJSON();return coordOrder.map((k)=>coordJSON[k]).map(smartToFixed).join(joinStr);};this.startAutoCharting=function(idleDelay=2000){this.setupChartProgress();let idleEventID=0;this.mapCoordsStr=this.getMapExtentCoordsStr();this.listeners.push(google.maps.event.addListener(map,"idle",()=>{let nowCoords=this.getMapExtentCoordsStr();if(nowCoords!==this.mapCoordsStr){this.clearCharts();$("#query-spinner-img").addClass("fa-spin");updateProgress(".progressbar",0);this.mapCoordsStr=nowCoords;idleEventID++;let idleEventIDT=idleEventID;setTimeout(()=>{if(idleEventID===idleEventIDT){this.chartMapExtent();}else{console.log("not idle long enough");console.log(idleEventID,idleEventIDT);}},idleDelay);}else{console.log("Map has not really moved");}}));this.autoChartingOn=true;this.chartMapExtent();};this.stopAutoCharting=function(){this.clearCharts();this.teardownChartProgress();this.listeners.map((e)=>google.maps.event.removeListener(e));this.listeners=[];this.autoChartingOn=false;};this.clearCharts=function(){this.currentSankeyLinkColors=[];this.sankeyChartIDs=[];$(`#${this.chartContainerID}`).empty();};this.chartMapExtent=function(name=""){let mapCoords=Object.values(map.getBounds().toJSON()).map(smartToFixed).join(",");this.clearCharts();this.chartArea(eeBoundsPoly,`${name} (${mapCoords})`);};this.getDownloadButtonGroup=function(id,bn,outFilename){return`
                                                    +return[scaleT,transformT,scaleMult,nominalScale];};this.getMapExtentCoordsStr=function(joinStr=",",coordOrder=["west","north","east","south"]){let coordJSON=map.getBounds().toJSON();return coordOrder.map((k)=>coordJSON[k]).map((n)=>smartToFixed(n,this.chartDecimalProportion,this.chartPrecision)).join(joinStr);};this.startAutoCharting=function(idleDelay=2000){this.setupChartProgress();let idleEventID=0;this.mapCoordsStr=this.getMapExtentCoordsStr();this.listeners.push(google.maps.event.addListener(map,"idle",()=>{let nowCoords=this.getMapExtentCoordsStr();if(nowCoords!==this.mapCoordsStr){this.clearCharts();$("#query-spinner-img").addClass("fa-spin");updateProgress(".progressbar",0);this.mapCoordsStr=nowCoords;idleEventID++;let idleEventIDT=idleEventID;setTimeout(()=>{if(idleEventID===idleEventIDT&&this.autoChartingOn===true){this.chartMapExtent("",true);}else if(this.autoChartingOn===false){console.log("Auto charting turned off - will not chart");}else{console.log("Not idle long enough");console.log(idleEventID,idleEventIDT);}},idleDelay);}else{console.log("Map has not really moved");}}));this.autoChartingOn=true;this.chartMapExtent("",true);};this.stopAutoCharting=function(){this.clearCharts();this.teardownChartProgress();this.listeners.map((e)=>google.maps.event.removeListener(e));this.listeners=[];this.autoChartingOn=false;};this.clearCharts=function(){this.currentSankeyLinkColors=[];this.sankeyChartIDs=[];$(`#${this.chartContainerID}`).empty();};this.chartMapExtent=function(name="",originAuto=false){let mapCoords=Object.values(map.getBounds().toJSON()).map((n)=>smartToFixed(n,this.chartDecimalProportion,this.chartPrecision)).join(",");this.clearCharts();this.chartArea(eeBoundsPoly,`${name} (${mapCoords})`,originAuto);};this.getDownloadButtonGroup=function(id,bn,outFilename){return`
                                                    `;};this.makeSankeyChart=function(sankey_dict,labels,colors,bn,name,selectedObj,csvData,thickness=35,nodePad=15){sankey_dict.hovertemplate="%{value}"+ chartFormatDict[areaChartFormat].label+ -"
                                                    %{source.label}
                                                    %{target.label}";let yAxisLabel=selectedObj.yAxisLabel||chartFormatDict[areaChartFormat].label;var data={type:"sankey",textfont:{size:selectedObj.chartLabelFontSize},orientation:"h",node:{pad:nodePad,thickness:thickness,line:{color:"black",width:0.5,},label:labels,color:colors,opacity:0.5,hovertemplate:"%{value}"+yAxisLabel+"
                                                    %{label}",},link:sankey_dict,};console.log(data);data=[data];const plotLayout={title:name,font:{size:selectedObj.chartTitleFontSize,family:this.plot_font,},plot_bgcolor:this.plot_bgcolor,paper_bgcolor:this.plot_bgcolor,autosize:true,width:this.chartWidth,height:this.chartHeight,margin:{l:25,r:25,b:25,t:50,pad:0,},};const config={toImageButtonOptions:{format:"png",filename:name.replaceAll("
                                                    "," "),width:1000,height:600,},scrollZoom:false,displayModeBar:false,};let outFilename=name.replaceAll("
                                                    "," ");let tempGraphDivID=`${this.chartContainerID}-${selectedObj.id}-${bn}`;let downloadButtons=this.getDownloadButtonGroup(selectedObj.id,bn,outFilename);$(`#${this.chartContainerID}`).append(`
                                                    ${downloadButtons}
                                                    `);this.sankeyChartIDs.push(tempGraphDivID);const graphDiv=document.getElementById(tempGraphDivID);selectedObj.plots[bn]={containerID:tempGraphDivID,plot:Plotly.newPlot(graphDiv,data,plotLayout,config),};};this.makeChart=function(table,name,colors,visible,selectedObj){let outFilename=`${selectedObj.name} ${name}`;let chartTitle=`${selectedObj.name}
                                                    ${name}`;if(selectedObj.chartDecimalProportion!==undefined&&selectedObj.chartDecimalProportion!==null){chartDecimalProportion=selectedObj.chartDecimalProportion;} -if(selectedObj.chartPrecision!==undefined&&selectedObj.chartPrecision!==null){chartPrecision=selectedObj.chartPrecision;} -let csvTable=[table[0].map((s)=>s.replace(/[^A-Za-z0-9]/g,"-"))];if(selectedObj.layerType==="ImageCollection"){csvTable=csvTable.concat(table.slice(1).map((r)=>r.slice(0,1).concat(r.slice(1).map((n)=>smartToFixed(n)))));}else{csvTable=csvTable.concat(table.slice(1).map((r)=>r.map((n)=>smartToFixed(n))));} -selectedObj.tableExportData["line"]=csvTable.map((r)=>r.join(",")).join("\n");let yAxisLabel=selectedObj.yAxisLabel||chartFormatDict[areaChartFormat].label;if(selectedObj.layerType==="ImageCollection"){let xColumn=arrayColumn(table,0).slice(1);let iOffset=selectedObj.layerType==="ImageCollection"?1:0;let header=table[0];table=table.slice(1);let yColumns=range(1,header.length);var data=yColumns.map((i)=>{let c=colors!==undefined?colors[i-iOffset]:null;return{x:xColumn,y:arrayColumn(table,i).map(smartToFixed),stackgroup:selectedObj.stackedAreaChart,mode:"lines+markers",visible:visible[i-1],name:header[i].slice(0,selectedObj.chartLabelMaxLength).chunk(selectedObj.chartLabelMaxWidth).join("
                                                    "),line:{color:c,width:1},marker:{size:3},};});}else{colors=colors||[randomColor()];colors=colors.indexOf(null)>-1?colors.map((c)=>randomColor()):colors;table[0]=table[0].map((n)=>n.slice(0,selectedObj.chartLabelMaxLength).chunk(selectedObj.chartLabelMaxWidth).join("
                                                    "));if(selectedObj.shouldUnmask){table[0]=table[0].slice();} -if(table[0].length>selectedObj.barChartMaxClasses){let totalClases=table[0].length;let pctlCut=1-selectedObj.barChartMaxClasses/totalClases;let values=copyArray(table[1]);let min=quantile(values,pctlCut);let z=zip(table[0],table[1]);z=cbind(z,colors);z=z.filter((r)=>r[1]>min);table=[];table.push(z.map((r)=>r[0]));table.push(z.map((r)=>r[1]));colors=z.map((r)=>r[2]);} -console.log(table);console.log(colors);var data=[{x:table[0],y:table[1],stackgroup:selectedObj.stackedAreaChart,type:"bar",name:selectedObj.name,marker:{color:colors,},},];} -const plotLayout={plot_bgcolor:this.plot_bgcolor,paper_bgcolor:this.plot_bgcolor,font:{family:this.plot_font,size:selectedObj.chartTitleFontSize,},legend:{font:{size:selectedObj.chartLabelFontSize},},margin:{l:35,r:25,b:50,t:50,pad:0,},width:this.chartWidth,height:this.chartHeight,title:{text:chartTitle,},xaxis:{tickangle:45,showgrid:selectedObj.showGrid,rangeslider:selectedObj.rangeSlider,tickformat:selectedObj.xTickDateFormat,tickfont:{size:selectedObj.chartLabelFontSize},title:{text:selectedObj.xAxisLabel,font:{size:selectedObj.chartAxisTitleFontSize,},},},yaxis:{tickfont:{size:selectedObj.chartLabelFontSize},title:{text:yAxisLabel,font:{size:selectedObj.chartAxisTitleFontSize,},},},};const buttonOptions={toImageButtonOptions:{filename:outFilename,width:900,height:600,format:"png",},scrollZoom:false,displayModeBar:false,};let tempGraphDivID=`${this.chartContainerID}-${selectedObj.id}`;let downloadButtons=this.getDownloadButtonGroup(selectedObj.id,"line",outFilename);$(`#${this.chartContainerID}`).append(`
                                                    +"
                                                    %{source.label}
                                                    %{target.label}";let yAxisLabel=selectedObj.yAxisLabel||chartFormatDict[areaChartFormat].label;var data={type:"sankey",textfont:{size:selectedObj.chartLabelFontSize},orientation:"h",node:{pad:nodePad,thickness:thickness,line:{color:"black",width:0.5,},label:labels,color:colors,opacity:0.5,hovertemplate:"%{value}"+yAxisLabel+"
                                                    %{label}",},link:sankey_dict,};data=[data];const plotLayout={title:name,font:{size:selectedObj.chartTitleFontSize,family:this.plot_font,},plot_bgcolor:this.plot_bgcolor,paper_bgcolor:this.plot_bgcolor,autosize:true,width:this.chartWidth,height:this.chartHeight,margin:{l:25,r:25,b:25,t:50,pad:0,},};const config={toImageButtonOptions:{format:"png",filename:name.replaceAll("
                                                    "," "),width:1000,height:600,},scrollZoom:false,displayModeBar:false,};let outFilename=name.replaceAll("
                                                    "," ");let tempGraphDivID=`${this.chartContainerID}-${selectedObj.id}-${bn}`;let downloadButtons=this.getDownloadButtonGroup(selectedObj.id,bn,outFilename);$(`#${this.chartContainerID}`).append(`
                                                    ${downloadButtons}
                                                    `);this.sankeyChartIDs.push(tempGraphDivID);const graphDiv=document.getElementById(tempGraphDivID);selectedObj.plots[bn]={containerID:tempGraphDivID,plot:Plotly.newPlot(graphDiv,data,plotLayout,config),};};this.makeChart=function(table,name,colors,visible,selectedObj){let outFilename=`${selectedObj.name} ${name}`;let chartTitle=`${selectedObj.name}
                                                    ${name}`;let yAxisLabel=selectedObj.yAxisLabel||chartFormatDict[areaChartFormat].label;let csvTable=[table[0].map((s)=>s.replace(/[^A-Za-z0-9 -]/g,"-"))];if(selectedObj.layerType==="ImageCollection"){csvTable=csvTable.concat(table.slice(1).map((r)=>r.slice(0,1).concat(r.slice(1).map((n)=>smartToFixed(n,selectedObj.chartDecimalProportion,selectedObj.chartPrecision)))));}else{csvTable=csvTable.concat(table.slice(1).map((r)=>r.map((n)=>smartToFixed(n,selectedObj.chartDecimalProportion,selectedObj.chartPrecision))));csvTable=transpose(csvTable);csvTable.unshift(["Class Name",yAxisLabel]);} +selectedObj.tableExportData["line"]=csvTable.map((r)=>r.join(",")).join("\n");let yAxisLabelT,xAxisLabelT,margin;if(selectedObj.layerType==="ImageCollection"){let xColumn=arrayColumn(table,0).slice(1);let iOffset=selectedObj.layerType==="ImageCollection"?1:0;let header=table[0];table=table.slice(1);let yColumns=range(1,header.length);var data=yColumns.map((i)=>{let c=colors!==undefined?colors[i-iOffset]:null;const yT=arrayColumn(table,i).map((n)=>smartToFixed(n,selectedObj.chartDecimalProportion,selectedObj.chartPrecision));return{x:xColumn,y:yT,stackgroup:selectedObj.stackedAreaChart,mode:"lines+markers",visible:visible[i-1],name:header[i].slice(0,selectedObj.chartLabelMaxLength).chunk(selectedObj.chartLabelMaxWidth).join("
                                                    "),line:{color:c,width:1},marker:{size:3},};});xAxisLabelT=selectedObj.xAxisLabel;yAxisLabelT=yAxisLabel;margin={l:35,r:25,b:50,t:50,pad:5,};}else{colors=colors||[null];colors=colors.indexOf(null)>-1?table[0].map((c)=>randomColor()):colors;table[0]=table[0].map((n)=>n.slice(0,selectedObj.chartLabelMaxLength).chunk(selectedObj.chartLabelMaxWidth).join("
                                                    "));if(selectedObj.shouldUnmask){table[0]=table[0].slice();} +let z=zip(table[0],table[1]);z=cbind(z,colors);if(table[0].length>selectedObj.barChartMaxClasses){let totalClases=table[0].length;let pctlCut=1-selectedObj.barChartMaxClasses/totalClases;let values=copyArray(table[1]);let min=quantile(values,pctlCut);z=z.filter((r)=>r[1]>min);} +table=[];table.push(z.map((r)=>r[0]));table.push(z.map((r)=>smartToFixed(r[1],selectedObj.chartDecimalProportion,selectedObj.chartPrecision)));colors=z.map((r)=>r[2]);let maxLabelLen=table[0].map((n)=>n.length).max();let totalLabelLen=table[0].length;let orientation="v";let yIndex=1;let xIndex=0;if(maxLabelLen>totalLabelLen||maxLabelLen>6){orientation="h";yIndex=0;xIndex=1;} +var data=[{y:table[yIndex],x:table[xIndex],stackgroup:selectedObj.stackedAreaChart,type:"bar",orientation:orientation,name:selectedObj.name,marker:{color:colors,},},];if(orientation==="h"){yAxisLabelT=selectedObj.xAxisLabel;xAxisLabelT=yAxisLabel;margin={r:15,t:50,pad:5,};}else{xAxisLabelT=selectedObj.xAxisLabel;yAxisLabelT=yAxisLabel;margin={l:35,r:25,b:50,t:50,pad:5,};}} +const plotLayout={hovermode:selectedObj.hovermode,plot_bgcolor:this.plot_bgcolor,paper_bgcolor:this.plot_bgcolor,font:{family:this.plot_font,size:selectedObj.chartTitleFontSize,},legend:{font:{size:selectedObj.chartLabelFontSize},},margin:margin,width:this.chartWidth,height:this.chartHeight,title:{text:chartTitle,},xaxis:{tickangle:45,showgrid:selectedObj.showGrid,rangeslider:selectedObj.rangeSlider,tickformat:selectedObj.xTickDateFormat,tickfont:{size:selectedObj.chartLabelFontSize},title:{text:xAxisLabelT,font:{size:selectedObj.chartAxisTitleFontSize,},},},yaxis:{automargin:"left+bottom",tickfont:{size:selectedObj.chartLabelFontSize},title:{text:yAxisLabelT,font:{size:selectedObj.chartAxisTitleFontSize,},},},};const buttonOptions={toImageButtonOptions:{filename:outFilename,width:900,height:600,format:"png",},scrollZoom:false,displayModeBar:false,};let tempGraphDivID=`${this.chartContainerID}-${selectedObj.id}`;let downloadButtons=this.getDownloadButtonGroup(selectedObj.id,"line",outFilename);$(`#${this.chartContainerID}`).append(`
                                                    ${downloadButtons}
                                                    `);const graphDiv=document.getElementById(tempGraphDivID);selectedObj.plots["line"]={containerID:tempGraphDivID,plot:Plotly.newPlot(graphDiv,data,plotLayout,buttonOptions),};};this.setupChartProgress=function(){if(Object.keys(this.areaChartObj).length>0){$("#chart-collapse-label-chart-collapse-div").show();$("#legendDiv").css("max-width","575px");$("#legendDiv").css("max-height",window.innerHeight-convertRemToPixels(1)+1);if(this.firstRun){$("#area-collection-dropdown-container").hide();$("#query-spinner").append(`
                                                    - GEE logo image @@ -2878,33 +2874,37 @@ const plotLayout={plot_bgcolor:this.plot_bgcolor,paper_bgcolor:this.plot_bgcolor
                                                    `);$("#areaChart-progress-container").width($("#chart-collapse-label-label").width()- -$("#areaChart-progress-container").width());this.firstRun=false;this.areaChartingOn=true;}}};this.teardownChartProgress=function(){$("#areaChart-progress-container").remove();$("#legendDiv").css("max-width","");$("#legendDiv").css("max-height","60%");$("#chart-collapse-div").empty();$("#chart-collapse-label-chart-collapse-div").hide();this.firstRun=true;this.areaChartingOn=false;};this.chartArea=function(area,name=""){let selectedChartLayers;if(this.chartLayerSelectFromMapLayers){selectedChartLayers=[];Object.values(layerObj).concat(Object.values(timeLapseObj)).filter((e)=>e.viz.canAreaChart).map((o)=>{let objT=o.viz.areaChartParams;if(objT.line&&objT.sankey){selectedChartLayers.push([`${o.legendDivID}-----line`,o.visible]);selectedChartLayers.push([`${o.legendDivID}-----sankey`,o.visible,]);}else{selectedChartLayers.push([o.legendDivID,o.visible]);}});selectedChartLayers=Object.fromEntries(selectedChartLayers.filter(([k,v])=>v));}else{selectedChartLayers=Object.fromEntries(Object.entries(checkboxSelectedChartLayers).filter(([k,v])=>v));} +$("#areaChart-progress-container").width());this.firstRun=false;this.areaChartingOn=true;}}};this.teardownChartProgress=function(){$("#areaChart-progress-container").remove();$("#legendDiv").css("max-width","");$("#legendDiv").css("max-height","60%");$("#chart-collapse-div").empty();$("#chart-collapse-label-chart-collapse-div").hide();this.firstRun=true;this.areaChartingOn=false;};this.autoHideAreaTools=function(){if(Object.keys(this.areaChartObj).length===0){hideAreaTools();}};this.hideAreaTools=function(){$("#area-tools-title").hide();$("#area-chart-params-label").hide();$("#user-defined-area-chart-label").hide();$("#upload-area-chart-label").hide();$("#select-area-interactive-chart-label").hide();};this.chartArea=function(area,name="",originAuto=false){let selectedChartLayers;if(this.chartLayerSelectFromMapLayers){selectedChartLayers=[];Object.values(layerObj).concat(Object.values(timeLapseObj)).filter((e)=>e.viz.canAreaChart).map((o)=>{let objT=o.viz.areaChartParams;if(objT.line&&objT.sankey){selectedChartLayers.push([`${o.legendDivID}-----line`,o.visible]);selectedChartLayers.push([`${o.legendDivID}-----sankey`,o.visible,]);}else{selectedChartLayers.push([o.legendDivID,o.visible]);}});selectedChartLayers=Object.fromEntries(selectedChartLayers.filter(([k,v])=>v));}else{selectedChartLayers=Object.fromEntries(Object.entries(checkboxSelectedChartLayers).filter(([k,v])=>v));} selectedChartLayers=Object.keys(selectedChartLayers);let selectedChartObjs=Object.values(this.areaChartObj).filter((v)=>selectedChartLayers.indexOf(v.id)>-1);this.makeChartID++;this.outstandingChartRequests[this.makeChartID]=0;this.maxOutStandingChartRequests[this.makeChartID]=0;if(selectedChartObjs.length===0){this.maxOutStandingChartRequests[this.makeChartID]=1;} this.updateProgress();selectedChartObjs.map((selectedObj)=>{let scaleT=structuredClone(selectedObj.scale);let transformT=structuredClone(selectedObj.transform);let scaleMult=1;let nominalScale=scaleT||transformT[0];let divWidth=$("#"+getWalkThroughCollapseContainerID()).width()- convertRemToPixels(2);this.chartWidth=selectedObj.chartWidth||divWidth;this.chartHeight=selectedObj.chartHeight||parseInt(divWidth*this.chartHWRatio);if(selectedObj.autoScale){let scaleTransform=this.autoSetScale(scaleT,transformT,selectedObj.minZoomSpecifiedScale,selectedObj.maxAutoScale);scaleT=scaleTransform[0];transformT=scaleTransform[1];scaleMult=scaleTransform[2];nominalScale=scaleTransform[3];} let makeChartID=this.makeChartID;if(selectedObj.sankey){selectedObj.bandNames.map((bn)=>{this.outstandingChartRequests[this.makeChartID]++;this.maxOutStandingChartRequests[this.makeChartID]++;let itemBn=selectedObj.item.select(bn);let dummyImage=itemBn.first();let sankeyC=[];let transitionBns=[];let sankeyTransitionPeriods=selectedObj.sankeyTransitionPeriods||getTransitionRowData();if(sankeyTransitionPeriods!==null&&sankeyTransitionPeriods!==undefined){range(0,sankeyTransitionPeriods.length-1).map((transitionPeriodI)=>{let sankeyTransitionPeriod1=sankeyTransitionPeriods[transitionPeriodI];let sankeyTransitionPeriod2=sankeyTransitionPeriods[transitionPeriodI+1];let itemBnTransitionPeriod1=itemBn.filter(ee.Filter.calendarRange(sankeyTransitionPeriod1[0],sankeyTransitionPeriod1[1],"year")).mode();let itemBnTransitionPeriod2=itemBn.filter(ee.Filter.calendarRange(sankeyTransitionPeriod2[0],sankeyTransitionPeriod2[1],"year")).mode();let transitionImg=ee.Image(0);selectedObj.sankey_class_values[bn].map((sankey_class_values_pair)=>{outClass=parseInt(`${sankey_class_values_pair[0]}0990${sankey_class_values_pair[1]}`);transitionImg=transitionImg.where(itemBnTransitionPeriod1.eq(sankey_class_values_pair[0]).and(itemBnTransitionPeriod2.eq(sankey_class_values_pair[1])),outClass);});let transitionBn=`${sankeyTransitionPeriod1.join( "-" - )}---${sankeyTransitionPeriod2.join("-")}`;transitionBns.push(transitionBn);transitionImg=transitionImg.set("system:index",transitionBn).rename(`${bn}`);sankeyC.push(transitionImg);});sankeyC=ee.ImageCollection(sankeyC).toBands().rename(transitionBns);sankeyC.reduceRegion(selectedObj.reducer,area,scaleT,selectedObj.crs,transformT,true,1e13,4).evaluate((counts,failure)=>{if(failure!==undefined){showMessage("Area Charting Error",`Encountered the following error while summarizing ${selectedObj.name}
                                                    ${failure}`);}else{if(this.areaChartingOn===true&&this.makeChartID===this.makeChartID){let transitionPeriodI=1;let sankey_dict={source:[],target:[],value:[],};let labels=[];let colors=[];let outCSV=[];selectedObj.class_names[bn].map((l)=>{let sankeyTransitionPeriod=sankeyTransitionPeriods[0];sankeyTransitionPeriod=sankeyTransitionPeriod[0]===sankeyTransitionPeriod[1]?sankeyTransitionPeriod[0]:sankeyTransitionPeriod.join("-");labels.push(`${sankeyTransitionPeriod} ${l}`);});selectedObj.class_palette[bn].map((c)=>colors.push(c));Object.keys(counts).map((transitionPeriod)=>{let offset1=(transitionPeriodI-1)*selectedObj.class_names[bn].length;let offset2=transitionPeriodI*selectedObj.class_names[bn].length;selectedObj.class_names[bn].map((l)=>{let sankeyTransitionPeriod=sankeyTransitionPeriods[transitionPeriodI];sankeyTransitionPeriod=sankeyTransitionPeriod[0]===sankeyTransitionPeriod[1]?sankeyTransitionPeriod[0]:sankeyTransitionPeriod.join("-");labels.push(`${sankeyTransitionPeriod} ${l}`);});selectedObj.class_palette[bn].map((c)=>colors.push(c));let countsTransitionPeriod=counts[transitionPeriod];let rawValues=Object.values(countsTransitionPeriod);let pixelTotal=sum(rawValues);let mult;if(areaChartFormat==="Percentage"){mult=(1/pixelTotal)*100;}else{mult=chartFormatDict[areaChartFormat].mult*scaleMult;} -let values=rawValues.map((v)=>smartToFixed(v*mult));let classes=Object.keys(countsTransitionPeriod).map((cls)=>cls.split("0990").map((n)=>parseInt(n)));let vi=0;let countLookup={};classes.map((cls)=>{let class_valueI1=selectedObj.class_values[bn].indexOf(cls[0]);let color_value1=selectedObj.class_palette[bn][class_valueI1];let class_valueI2=selectedObj.class_values[bn].indexOf(cls[1]);let color_value2=selectedObj.class_palette[bn][class_valueI2];if((rawValues[vi]/pixelTotal)*100>=selectedObj.sankeyMinPercentage){sankey_dict.source.push(class_valueI1+offset1);sankey_dict.target.push(class_valueI2+offset2);sankey_dict.value.push(values[vi]);this.currentSankeyLinkColors.push([color_value1,color_value2,]);} -countLookup[`${selectedObj.class_names[bn][class_valueI1]}---${selectedObj.class_names[bn][class_valueI2]}`]=values[vi];vi++;});outCSV.push([""].concat(selectedObj.class_names[bn].map((nm)=>{let tp=transitionPeriod.split("---")[1];let tps=tp.split("-");tp=tps[0]===tps[1]?tps[0]:tp;return`${nm.replace(/[^A-Za-z0-9]/g, "-")} ${tp} `;})));selectedObj.class_names[bn].map((nm1)=>{let tp=transitionPeriod.split("---")[0];let tps=tp.split("-");tp=tps[0]===tps[1]?tps[0]:tp;let line=[`${nm1.replace(/[^A-Za-z0-9]/g, "-")} ${tp}`,];selectedObj.class_names[bn].map((nm2)=>{let v=countLookup[`${nm1}---${nm2}`];v=v!==undefined?v:0;line.push(v);});outCSV.push(line);});outCSV.push([""]);transitionPeriodI++;});outCSV=outCSV.map((r)=>r.join(",")).join("\n");selectedObj.tableExportData[bn]=outCSV;labels=labels.map((l)=>l.slice(0,selectedObj.chartLabelMaxLength).chunk(selectedObj.chartLabelMaxWidth).join("
                                                    "));let bnNameTitle=bn.replaceAll("_"," ")+" ";if(selectedObj.bandNames.length===1||selectedObj.name.indexOf(bnNameTitle)>-1){bnNameTitle="";} + )}---${sankeyTransitionPeriod2.join("-")}`;transitionBns.push(transitionBn);transitionImg=transitionImg.set("system:index",transitionBn).rename(`${bn}`);sankeyC.push(transitionImg);});sankeyC=ee.ImageCollection(sankeyC).toBands().rename(transitionBns);sankeyC.reduceRegion(selectedObj.reducer,area,scaleT,selectedObj.crs,transformT,true,1e13,4).evaluate((counts,failure)=>{if(failure!==undefined){showMessage("Area Charting Error",`Encountered the following error while summarizing ${selectedObj.name}
                                                    ${failure}`);}else{if(this.areaChartingOn===true&&makeChartID===this.makeChartID&&originAuto===this.autoChartingOn){let transitionPeriodI=1;let sankey_dict={source:[],target:[],value:[],};let labels=[];let colors=[];let outCSV=[];selectedObj.class_names[bn].map((l)=>{let sankeyTransitionPeriod=sankeyTransitionPeriods[0];sankeyTransitionPeriod=sankeyTransitionPeriod[0]===sankeyTransitionPeriod[1]?sankeyTransitionPeriod[0]:sankeyTransitionPeriod.join("-");labels.push(`${sankeyTransitionPeriod} ${l}`);});selectedObj.class_palette[bn].map((c)=>colors.push(c));Object.keys(counts).map((transitionPeriod)=>{let offset1=(transitionPeriodI-1)*selectedObj.class_names[bn].length;let offset2=transitionPeriodI*selectedObj.class_names[bn].length;selectedObj.class_names[bn].map((l)=>{let sankeyTransitionPeriod=sankeyTransitionPeriods[transitionPeriodI];sankeyTransitionPeriod=sankeyTransitionPeriod[0]===sankeyTransitionPeriod[1]?sankeyTransitionPeriod[0]:sankeyTransitionPeriod.join("-");labels.push(`${sankeyTransitionPeriod} ${l}`);});selectedObj.class_palette[bn].map((c)=>colors.push(c));let countsTransitionPeriod=counts[transitionPeriod];let rawValues=Object.values(countsTransitionPeriod);let pixelTotal=sum(rawValues);let mult;if(areaChartFormat==="Percentage"){mult=(1/pixelTotal)*100;}else{mult=chartFormatDict[areaChartFormat].mult*scaleMult;} +let values=rawValues.map((v)=>smartToFixed(v*mult,selectedObj.chartDecimalProportion,selectedObj.chartPrecision));let classes=Object.keys(countsTransitionPeriod).map((cls)=>cls.split("0990").map((n)=>parseInt(n)));let vi=0;let countLookup={};classes.map((cls)=>{let class_valueI1=selectedObj.class_values[bn].indexOf(cls[0]);let color_value1=selectedObj.class_palette[bn][class_valueI1];let class_valueI2=selectedObj.class_values[bn].indexOf(cls[1]);let color_value2=selectedObj.class_palette[bn][class_valueI2];if((rawValues[vi]/pixelTotal)*100>=selectedObj.sankeyMinPercentage){sankey_dict.source.push(class_valueI1+offset1);sankey_dict.target.push(class_valueI2+offset2);sankey_dict.value.push(values[vi]);this.currentSankeyLinkColors.push([color_value1,color_value2,]);} +countLookup[`${selectedObj.class_names[bn][class_valueI1]}---${selectedObj.class_names[bn][class_valueI2]}`]=values[vi];vi++;});outCSV.push([""].concat(selectedObj.class_names[bn].map((nm)=>{let tp=transitionPeriod.split("---")[1];let tps=tp.split("-");tp=tps[0]===tps[1]?tps[0]:tp;return`${nm.replace( + /[^A-Za-z0-9 -]/g, + "-" + )} ${tp} `;})));selectedObj.class_names[bn].map((nm1)=>{let tp=transitionPeriod.split("---")[0];let tps=tp.split("-");tp=tps[0]===tps[1]?tps[0]:tp;let line=[`${nm1.replace(/[^A-Za-z0-9 -]/g, "-")} ${tp}`,];selectedObj.class_names[bn].map((nm2)=>{let v=countLookup[`${nm1}---${nm2}`];v=v!==undefined?v:0;line.push(v);});outCSV.push(line);});outCSV.push([""]);transitionPeriodI++;});outCSV=outCSV.map((r)=>r.join(",")).join("\n");selectedObj.tableExportData[bn]=outCSV;labels=labels.map((l)=>l.slice(0,selectedObj.chartLabelMaxLength).chunk(selectedObj.chartLabelMaxWidth).join("
                                                    "));let bnNameTitle=bn.replaceAll("_"," ")+" ";if(selectedObj.bandNames.length===1||selectedObj.name.indexOf(bnNameTitle)>-1){bnNameTitle="";} this.makeSankeyChart(sankey_dict,labels,colors,bn,`${selectedObj.name} ${bnNameTitle}
                                                    ${name} (${nominalScale}m)`,selectedObj,outCSV);this.outstandingChartRequests[this.makeChartID]--;this.updateProgress();}else{console.log(`Chart id moved on: Returned ID = ${makeChartID}, Current ID = ${this.makeChartID}`);}}});}else{this.outstandingChartRequests[this.makeChartID]--;this.updateProgress();}});}else{this.outstandingChartRequests[this.makeChartID]++;this.maxOutStandingChartRequests[this.makeChartID]++;let areaChartCollectionStack=selectedObj.layerType==="ImageCollection"?selectedObj.item.toBands():selectedObj.item;areaChartCollectionStack=areaChartCollectionStack.rename(selectedObj.stackBandNames);if(selectedObj.shouldUnmask){areaChartCollectionStack=areaChartCollectionStack.unmask(selectedObj.unmaskValue);} -areaChartCollectionStack.reduceRegion(selectedObj.reducer,area,scaleT,selectedObj.crs,transformT,true,1e13,4).evaluate((counts,failure)=>{if(this.areaChartingOn&&makeChartID===this.makeChartID){if(failure!==undefined){showMessage("Area Charting Error",`Encountered the following error while summarizing ${selectedObj.name}
                                                    ${failure}`);}else{let header=selectedObj.layerType==="ImageCollection"?[selectedObj.xAxisLabel]:[];let colors=[];let visible=[];if(selectedObj.isThematic===true){selectedObj.class_namesT={};selectedObj.bandNames.map((bn)=>{let bnL=bn.replace(/[^A-Za-z0-9]/g,"-");let nameStart=`${bnL}-`;let class_namesT;if(selectedObj.class_names!==null){class_namesT=selectedObj.class_names[bn];}else if(counts[bn]!==undefined){class_namesT=Object.keys(counts[bn]);}else{let bnsT=Object.keys(counts).filter((k)=>k.indexOf(bn)>-1);class_namesT=[];bnsT.map((bnT)=>(class_namesT=class_namesT.concat(Object.keys(counts[bnT]))));class_namesT=unique(class_namesT);selectedObj.class_namesT[bn]=class_namesT;} +areaChartCollectionStack.reduceRegion(selectedObj.reducer,area,scaleT,selectedObj.crs,transformT,true,1e13,4).evaluate((counts,failure)=>{if(this.areaChartingOn===true&&makeChartID===this.makeChartID&&originAuto===this.autoChartingOn){if(failure!==undefined){showMessage("Area Charting Error",`Encountered the following error while summarizing ${selectedObj.name}
                                                    ${failure}`);}else{let header=selectedObj.layerType==="ImageCollection"?[selectedObj.xAxisLabel]:[];let colors=[];let visible=[];if(selectedObj.isThematic===true){selectedObj.class_namesT={};selectedObj.bandNames.map((bn)=>{let bnL=bn.replace(/[^A-Za-z0-9 -]/g,"-");let nameStart=`${bnL}-`;let class_namesT;if(selectedObj.class_names!==null){class_namesT=selectedObj.class_names[bn];}else if(counts[bn]!==undefined){class_namesT=Object.keys(counts[bn]);}else{let bnsT=Object.keys(counts).filter((k)=>k.indexOf(bn)>-1);class_namesT=[];bnsT.map((bnT)=>(class_namesT=class_namesT.concat(Object.keys(counts[bnT]))));class_namesT=unique(class_namesT);selectedObj.class_namesT[bn]=class_namesT;} let class_paletteT;if(selectedObj.class_palette!==null){class_paletteT=selectedObj.class_palette[bn];}else if(selectedObj.palette!==undefined&&selectedObj.palette!==null){class_paletteT=selectedObj.palette;}else if(selectedObj.palette_lookup!==undefined&&selectedObj.palette_lookup!==null){class_paletteT=class_namesT.map((cn)=>selectedObj.palette_lookup[cn]);}else{class_paletteT=class_namesT.map((c)=>null);} if(selectedObj.bandNames.length==1){nameStart="";} -class_namesT.map((cn)=>{cd=cn.replace(/[^A-Za-z0-9]/g,"-");header.push(`${nameStart}${cn}`);});class_paletteT.map((color)=>{color=color!==null&&color!==undefined&&color[0]!=="#"?`#${color}`:color;colors.push(color);});if(selectedObj.class_visibility!==null&&selectedObj.class_visibility[bn]!==undefined){selectedObj.class_visibility[bn].map((v)=>{visible.push(v==true?v:"legendonly");});}else if(selectedObj.visible!==undefined){selectedObj.visible.map((v)=>{visible.push(v==true?v:"legendonly");});}else{class_namesT.map((cn)=>{visible.push(true);});}});}else{colors=selectedObj.palette;visible=selectedObj.visible===undefined?selectedObj.bandNames.map((bn)=>true):selectedObj.visible.map((v)=>v===true?v:"legendonly");selectedObj.bandNames.map((bn)=>header.push(bn.replace(/[^A-Za-z0-9]/g,"-")));} +class_namesT.map((cn)=>{header.push(`${nameStart}${cn}`);});class_paletteT.map((color)=>{color=color!==null&&color!==undefined&&color[0]!=="#"?`#${color}`:color;colors.push(color);});if(selectedObj.class_visibility!==null&&selectedObj.class_visibility[bn]!==undefined){selectedObj.class_visibility[bn].map((v)=>{visible.push(v==true?v:"legendonly");});}else if(selectedObj.visible!==undefined){selectedObj.visible.map((v)=>{visible.push(v==true?v:"legendonly");});}else{class_namesT.map((cn)=>{visible.push(true);});}});}else{colors=selectedObj.palette;visible=selectedObj.visible===undefined?selectedObj.bandNames.map((bn)=>true):selectedObj.visible.map((v)=>v===true?v:"legendonly");selectedObj.bandNames.map((bn)=>header.push(bn.replace(/[^A-Za-z0-9 -]/g," ")));} let outTable=[header];if(selectedObj.layerType==="ImageCollection"){selectedObj.xAxisLabels.map((xLabel)=>{let row=[xLabel];if(selectedObj.isThematic){selectedObj.bandNames.map((bn)=>{let countsT=counts[`${xLabel}${selectedObj.splitStr}${bn}`];let values=selectedObj.class_values!==null?selectedObj.class_values[bn]:selectedObj.class_namesT[bn];let names=selectedObj.class_names!==null?selectedObj.class_names[bn]:selectedObj.class_namesT[bn];let pixelTotal=sum(Object.values(countsT))||0;if(areaChartFormat==="Percentage"){mult=(1/pixelTotal)*100;}else{mult=chartFormatDict[areaChartFormat].mult*scaleMult;} values.map((v)=>{let tv=countsT[v]||0;row.push(tv*mult);});});}else{selectedObj.bandNames.map((bn)=>{let countsT=counts[`${xLabel}${selectedObj.splitStr}${bn}`];row.push(countsT);});} outTable.push(row);});}else{let row=[];if(selectedObj.isThematic){selectedObj.bandNames.map((bn)=>{let countsT=counts[bn];let values=selectedObj.class_values!==null?selectedObj.class_values[bn]:Object.keys(countsT);let names=selectedObj.class_names!==null?selectedObj.class_names[bn]:Object.keys(countsT);let pixelTotal=sum(Object.values(countsT))||0;if(areaChartFormat==="Percentage"){mult=(1/pixelTotal)*100;}else{mult=chartFormatDict[areaChartFormat].mult*scaleMult;} values.map((v)=>{let tv=countsT[v]||0;row.push(tv*mult);});});}else{selectedObj.bandNames.map((bn)=>{let countsT=counts[bn];row.push(countsT);});} outTable.push(row);} -this.outstandingChartRequests[this.makeChartID]--;this.updateProgress();this.makeChart(outTable,`${name} (${nominalScale}m)`,colors,visible,selectedObj);}}else{console.log(`Chart id moved on: Returned ID = ${makeChartID}, Current ID = ${this.makeChartID}`);}});}});};this.clearChartLayerSelect=function(){$("#"+this.layerSelectID).remove();};this.populateChartLayerSelect=function(){this.chartLayerSelectFromMapLayers=false;this.areaChartSelectedObj=this.areaChartSelectedObj||{};let labels=[];Object.keys(this.areaChartObj).map((k)=>{let obj=this.areaChartObj[k];this.areaChartSelectedObj[obj.id]=this.areaChartSelectedObj[obj.id]!==undefined?this.areaChartSelectedObj[obj.id]:obj.shouldChart;labels.push(obj.name);});addCheckboxes(this.layerSelectContainerID,this.layerSelectID,"Area Chart Layers","checkboxSelectedChartLayers",this.areaChartSelectedObj,labels,"Choose which layers to include in area summary charts","prepend");$("#"+this.layerSelectID).change(()=>{if(this.autoChartingOn){this.chartMapExtent();}});$("#area-summary-format").change(()=>{console.log("change");if(this.autoChartingOn){this.chartMapExtent();}});};this.updateProgress=function(){if(this.areaChartingOn){let p=0;if(this.maxOutStandingChartRequests[this.makeChartID]>0){p=parseInt((1- +this.outstandingChartRequests[this.makeChartID]--;this.updateProgress();this.makeChart(outTable,`${name} (${nominalScale}m)`,colors,visible,selectedObj);}}else{console.log(`Chart id moved on: Returned ID = ${makeChartID}, Current ID = ${this.makeChartID}`);}});}});};this.clearChartLayerSelect=function(){$("#"+this.layerSelectID).remove();};this.populateChartLayerSelect=function(){this.chartLayerSelectFromMapLayers=false;urlParams.areaChartSelectedObj=urlParams.areaChartSelectedObj||{};let labels=[];Object.keys(this.areaChartObj).map((k)=>{let obj=this.areaChartObj[k];urlParams.areaChartSelectedObj[obj.id]=urlParams.areaChartSelectedObj[obj.id]!==undefined?urlParams.areaChartSelectedObj[obj.id]:obj.shouldChart;labels.push(obj.name);});addCheckboxes(this.layerSelectContainerID,this.layerSelectID,"Area Chart Layers","checkboxSelectedChartLayers",urlParams.areaChartSelectedObj,labels,"Choose which layers to include in area summary charts","prepend");$("#"+this.layerSelectID).change(()=>{if(this.autoChartingOn){this.chartMapExtent("",true);}});$("#area-summary-format").change(()=>{console.log("change");if(this.autoChartingOn){this.chartMapExtent("",true);}});};this.updateProgress=function(){if(this.areaChartingOn){let p=0;if(this.maxOutStandingChartRequests[this.makeChartID]>0){p=parseInt((1- this.outstandingChartRequests[this.makeChartID]/ this.maxOutStandingChartRequests[this.makeChartID])*100);} updateProgress(".progressbar",p);if(p===100){$("#query-spinner-img").removeClass("fa-spin");}else{$("#query-spinner-img").addClass("fa-spin");}}};} -let areaChart=new areaChartCls();$("#map-defined-area-chart-label").hide();function stopAllTools(){areaChart.stopAutoCharting();stopArea();stopDistance();stopQuery();stopCharting();stopAreaCharting();stopCharting();clearQueryGeoJSON();turnOffUploadedLayers();turnOffSelectLayers();turnOffSelectGeoJSON();Object.keys(toolFunctions).map(function(t){Object.keys(toolFunctions[t]).map(function(tt){toolFunctions[t][tt]["state"]=false;});});updateToolStatusBar();} -const toolFunctions={measuring:{area:{on:'stopAllTools();startArea();showTip("AREA MEASURING",staticTemplates.areaTip);',off:"stopAllTools();",state:false,title:"Measuring Tools-Area Measuring",},distance:{on:'stopAllTools();startDistance();showTip("DISTANCE MEASURING",staticTemplates.distanceTip);',off:"stopAllTools()",state:false,title:"Measuring Tools-Distance Measuring",},},pixel:{query:{on:'stopAllTools();startQuery();showTip("QUERY VISIBLE MAP LAYERS",staticTemplates.queryTip);',off:"stopAllTools()",state:false,title:"Pixel Tools-Query Visible Map Layers",},chart:{on:'stopAllTools();startPixelChartCollection();showTip("QUERY "+mode+" TIME SERIES",staticTemplates.pixelChartTip);',off:"stopAllTools()",state:false,title:"Pixel Tools-Query "+mode+" Time Series",},},area:{mapBounds:{on:'stopAllTools();areaChart.startAutoCharting();showTip("SUMMARIZE BY MAP BOUNDS AREA",staticTemplates.mapDefinedAreaChartTip);',off:"stopAllTools()",state:false,title:"Area Tools-Map Extent Area Tool",},userDefined:{on:'stopAllTools();areaChart.setupChartProgress();areaChartingTabSelect("#user-defined");showTip("SUMMARIZE BY USER-DEFINED AREA",staticTemplates.userDefinedAreaChartTip);',off:"stopAllTools()",state:false,title:"Area Tools-User Defined Area Tool",},shpDefined:{on:'stopAllTools();areaChart.setupChartProgress();areaChartingTabSelect("#shp-defined");showTip("SUMMARIZE BY UPLOADED AREA",staticTemplates.uploadAreaChartTip);',off:"stopAllTools()",state:false,title:"Area Tools-Upload an Area",},selectDropdown:{on:'stopAllTools();areaChartingTabSelect("#pre-defined");showTip("SUMMARIZE BY PRE-DEFINED AREA",staticTemplates.selectAreaDropdownChartTip);',off:"stopAllTools()",state:false,title:"Area Tools-Select an Area from Dropdown",},selectInteractive:{on:'stopAllTools();areaChart.setupChartProgress();turnOffVectorLayers();turnOnSelectedLayers();turnOnSelectGeoJSON();areaChartingTabSelect("#user-selected");showTip("SUMMARIZE BY PRE-DEFINED AREA",staticTemplates.selectAreaInteractiveChartTip);',off:"stopAllTools();turnOffSelectLayers();",state:false,title:"Area Tools-Select an Area on map",},},};function getActiveTools(){const out=[];Object.keys(toolFunctions).map(function(t){Object.keys(toolFunctions[t]).map(function(tt){const state=toolFunctions[t][tt]["state"];const title=toolFunctions[t][tt]["title"];if(state){out.push(title);}});});return out;} +let areaChart=new areaChartCls();$("#map-defined-area-chart-label").hide();const mode_query_key=`Pixel Tools-Query ${mode} Time Series`;const toolCursorLookup={"Measuring Tools-Area Measuring":"crosshair","Measuring Tools-Distance Measuring":"crosshair","Pixel Tools-Query Visible Map Layers":"help","Area Tools-Map Extent Area Tool":"","Area Tools-User Defined Area Tool":"crosshair","Area Tools-Upload an Area":"","Area Tools-Select an Area on map":"pointer",};toolCursorLookup[mode_query_key]="help";function setMapCursor(){map.setOptions({draggableCursor:toolCursorLookup[getActiveTools()[0]]||"",});} +function stopAllTools(){areaChart.stopAutoCharting();areaChart.areaChartingToolName;stopArea();stopDistance();stopQuery();stopCharting();stopAreaCharting();stopCharting();clearQueryGeoJSON();turnOffUploadedLayers();turnOffSelectLayers();turnOffSelectGeoJSON();Object.keys(toolFunctions).map(function(t){Object.keys(toolFunctions[t]).map(function(tt){toolFunctions[t][tt]["state"]=false;});});updateToolStatusBar();} +const toolFunctions={measuring:{area:{on:'stopAllTools();startArea();showTip("AREA MEASURING",staticTemplates.areaTip);',off:"stopAllTools();",state:false,clickSelector:"#measure-distance-label",name:"Area_Measuring",title:"Measuring Tools-Area Measuring",},distance:{on:'stopAllTools();startDistance();showTip("DISTANCE MEASURING",staticTemplates.distanceTip);',off:"stopAllTools();",state:false,clickSelector:"#measure-area-label",name:"Distance_Measuring",title:"Measuring Tools-Distance Measuring",},},pixel:{query:{on:'stopAllTools();startQuery();showTip("QUERY VISIBLE MAP LAYERS",staticTemplates.queryTip);',off:"stopAllTools();",state:false,clickSelector:"#query-label",name:"Pixel_Query",title:"Pixel Tools-Query Visible Map Layers",},chart:{on:'stopAllTools();startPixelChartCollection();showTip("QUERY "+mode+" TIME SERIES",staticTemplates.pixelChartTip);',off:"stopAllTools();",state:false,clickSelector:"#pixel-chart-label",name:"Pixel_TS_Query",title:"Pixel Tools-Query "+mode+" Time Series",},},area:{mapBounds:{on:'stopAllTools();areaChart.areaChartingToolName="map";areaChart.startAutoCharting();showTip("SUMMARIZE BY MAP BOUNDS AREA",staticTemplates.mapDefinedAreaChartTip);',off:"stopAllTools();",state:false,clickSelector:"#map-defined-area-chart-label",name:"Area_Map",title:"Area Tools-Map Extent Area Tool",},userDefined:{on:'stopAllTools();areaChart.areaChartingToolName="user";areaChart.setupChartProgress();areaChartingTabSelect("#user-defined");showTip("SUMMARIZE BY USER-DEFINED AREA",staticTemplates.userDefinedAreaChartTip);',off:"stopAllTools();",state:false,clickSelector:"#user-defined-area-chart-label",name:"Area_User",title:"Area Tools-User Defined Area Tool",},shpDefined:{on:'stopAllTools();areaChart.areaChartingToolName="shp";areaChart.setupChartProgress();areaChartingTabSelect("#shp-defined");showTip("SUMMARIZE BY UPLOADED AREA",staticTemplates.uploadAreaChartTip);',off:"stopAllTools();",state:false,clickSelector:"#upload-area-chart-label",name:"Area_Upload",title:"Area Tools-Upload an Area",},selectDropdown:{on:'stopAllTools();areaChartingTabSelect("#pre-defined");showTip("SUMMARIZE BY PRE-DEFINED AREA",staticTemplates.selectAreaDropdownChartTip);',off:"stopAllTools();",state:false,name:"Area_Select_Dropdown",title:"Area Tools-Select an Area from Dropdown",},selectInteractive:{on:'stopAllTools();areaChart.areaChartingToolName="select";areaChart.setupChartProgress();turnOffVectorLayers();turnOnSelectedLayers();turnOnSelectGeoJSON();areaChartingTabSelect("#user-selected");showTip("SUMMARIZE BY PRE-DEFINED AREA",staticTemplates.selectAreaInteractiveChartTip);',off:"stopAllTools();turnOffSelectLayers();",state:false,clickSelector:"#select-area-interactive-chart-label",name:"Area_Select_Interactive",title:"Area Tools-Select an Area on map",},},};const toolFunctionsFlat={};Object.keys(toolFunctions).map((categoryK)=>{const categoryO=toolFunctions[categoryK];Object.keys(categoryO).map((k)=>(toolFunctionsFlat[categoryO[k].name]=categoryO[k].clickSelector));});function getActiveTools(){const out=[];Object.keys(toolFunctions).map(function(t){Object.keys(toolFunctions[t]).map(function(tt){const state=toolFunctions[t][tt]["state"];const title=toolFunctions[t][tt]["title"];if(state){out.push(title);}});});return out;} function getActiveToolsList(){const out=[];Object.keys(toolFunctions).map(function(t){Object.keys(toolFunctions[t]).map(function(tt){const state=toolFunctions[t][tt]["state"];if(state){out.push([t,tt]);}});});return out;} function updateToolStatusBar(){let somethingShown=false;$("#current-tool-selection").empty();$("#current-tool-selection").append(`Active tools: `);Object.keys(toolFunctions).map(function(t){Object.keys(toolFunctions[t]).map(function(tt){const state=toolFunctions[t][tt]["state"];const title=toolFunctions[t][tt]["title"];if(state){$("#current-tool-selection").append(`${title}`);somethingShown=true;}});});if(!somethingShown){$("#current-tool-selection").append(`No active tools`);}else{ga("send","event","tool-active",mode,$("#current-tool-selection").html().split(": ")[1]);}} -function toggleTool(tool){if(tool.state){eval(tool.off);}else{eval(tool.on);tool.state=true;} +function toggleTool(tool){if(tool.state){urlParams.activeTool=undefined;eval(tool.off);}else{urlParams.activeTool=tool.name;eval(tool.on);tool.state=true;} updateToolStatusBar();} updateToolStatusBar(); \ No newline at end of file diff --git a/geeView/src/styles/style.min.css b/geeView/src/styles/style.min.css index ce93020..9d31719 100644 --- a/geeView/src/styles/style.min.css +++ b/geeView/src/styles/style.min.css @@ -98,7 +98,44 @@ body { font-size: 10px !important; } } - +@media (min-width: 1200px) { + .custom-col-xl { + -ms-flex: 0 0 10%; + flex: 0 0 10%; + max-width: 10%; + } +} +@media (min-width: 992px) { + .custom-col-lg { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; + } +} +@media (min-width: 768px) { + .custom-col-md { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; + } +} +@media (min-width: 576px) { + .custom-col-sm { + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667%; + } +} +.custom-col-xl, +.custom-col-lg, +.custom-col-md, +.custom-col-sm { + position: relative; + width: 100%; + min-height: 1px; + padding-right: 15px; + padding-left: 15px; +} /*/ //////////////////////////////////////////////////////*/ .custom-hidden { display: none; @@ -159,7 +196,7 @@ body { .bg-black, .btn { background-color: var(--black) !important; - margin: 0px !important; + margin: 0px; color: var(--white) !important; outline: none !important; vertical-align: middle !important; @@ -434,7 +471,7 @@ button { .sidebar { overflow-y: auto; - max-height: calc(100% - 1.7em); + max-height: calc(100% - 1.7rem); background-color: var(--black) !important; z-index: 3; /* max-width: 600px; */ @@ -866,6 +903,13 @@ div.dataTables_info { margin-bottom: 0.25rem; } +.query-output-header-title { + font-weight: bold; + padding-top: 0.25rem; + padding-bottom: 0.25rem; + margin-top: 0rem; + margin-bottom: 0rem; +} .chart-table { max-height: 30rem; max-width: 90rem; @@ -1234,7 +1278,8 @@ ul { #reference-layer-list-collapse-div, #related-layer-list, #legend-collapse-div, -#download-collapse-div { +#download-collapse-div, +.walk-through-popup { padding-left: 1rem; padding-right: 1.5rem; } @@ -1304,10 +1349,13 @@ ul { color: #000 !important; outline: none !important; } -.panel-collapse .panel-body { + +.panel-collapse .panel-body, +.sub-panel-collapse { padding-left: 3rem; padding-right: 2rem; } + .bg-download-select { background-color: var(--deep-brown-10) !important; margin: 0px !important; @@ -1360,7 +1408,9 @@ ul { } .sub-panel-title { - padding-top: 0.8em; + padding-top: 0.8rem; + margin-bottom: 0rem; + padding-left: 0.9rem; } .sub-panel-title > a:after { @@ -1410,10 +1460,12 @@ ul { font-size: 1.1em; padding-top: 0.35rem; padding-bottom: 0.35rem; - padding-left: 1rem; + /* border-top: 0.1em solid var(--deep-brown-30); */ } - +.sub-sub-panel-title { + padding-left: 1rem; +} .collapse-title { color: var(--white); } @@ -1433,7 +1485,12 @@ a:hover { font-weight: 1000 !important; cursor: pointer; } - +#parameters-collapse-div > div > .sub-panel-heading { + margin-left: -2.5rem; +} +#parameters-collapse-div > .sub-panel-collapse { + padding-left: 0.5rem; +} .accordion > h5:first-child { padding-left: 3rem; padding-top: 1rem; diff --git a/release-notes.md b/release-notes.md index f406f83..e211e41 100644 --- a/release-notes.md +++ b/release-notes.md @@ -1,3 +1,17 @@ +# geeViz 2024.11.3 Release Notes + +## November 25, 2024 + +### New Features + +- **geeViz.geeView Enanced Image Area Charting** - geeViz.geeView aera charting for thematic images now tries to optimize the orientation of the bar chart based on the length of the class labels. Any chart with long class label lengths will be a horizontal bar chart. Short class labels will remain a vertical bar chart as it has always been. Also, the Plotly `autoMargin` functionality is now used for these charts. + +### Bug fixes + +- Area Charting Tools UI is not only visible if an area charting layer has been added to the map. Previously, the UI would show an older area charting UI if no area charting layers had been added the map. + +--- + # geeViz 2024.11.2 Release Notes ## November 11, 2024 diff --git a/taskManagerLib.py b/taskManagerLib.py index 941c282..1e5d14a 100644 --- a/taskManagerLib.py +++ b/taskManagerLib.py @@ -25,6 +25,7 @@ ################################################################################ # Functions for GEE task management +import geeViz.geeView as gv import ee, time, re, os from datetime import datetime, timedelta @@ -46,13 +47,7 @@ def trackTasks(): running_names = [ [ str(i["description"]), - str( - timedelta( - seconds=int( - ((time.time() * 1000) - int(i["start_timestamp_ms"])) / 1000 - ) - ) - ), + str(timedelta(seconds=int(((time.time() * 1000) - int(i["start_timestamp_ms"])) / 1000))), ] for i in running ] @@ -78,13 +73,7 @@ def trackTasks2(credential_name=None, id_list=None, task_count=1): running_names = [ [ str(i["description"]), - str( - timedelta( - seconds=int( - ((time.time() * 1000) - int(i["start_timestamp_ms"])) / 1000 - ) - ) - ), + str(timedelta(seconds=int(((time.time() * 1000) - int(i["start_timestamp_ms"])) / 1000))), ] for i in running ] @@ -122,13 +111,7 @@ def failedTasks(): failed_names = [ [ str(i["description"]), - str( - timedelta( - seconds=int( - ((time.time() * 1000) - int(i["start_timestamp_ms"])) / 1000 - ) - ) - ), + str(timedelta(seconds=int(((time.time() * 1000) - int(i["start_timestamp_ms"])) / 1000))), ] for i in failed ] @@ -177,14 +160,7 @@ def timeTaskList(starttime, endtime): epoch = datetime.utcfromtimestamp(0) starttime = (starttime - epoch).total_seconds() * 1000.0 endtime = (endtime - epoch).total_seconds() * 1000.0 - thisList = [ - i - for i in tasks - if ( - i["creation_timestamp_ms"] >= starttime - and i["creation_timestamp_ms"] <= endtime - ) - ] + thisList = [i for i in tasks if (i["creation_timestamp_ms"] >= starttime and i["creation_timestamp_ms"] <= endtime)] return thisList @@ -218,13 +194,7 @@ def jobCompletionTracker(starttime, endtime, check_interval): running_names = [ [ str(i["description"]), - str( - timedelta( - seconds=int( - ((time.time() * 1000) - int(i["start_timestamp_ms"])) / 1000 - ) - ) - ), + str(timedelta(seconds=int(((time.time() * 1000) - int(i["start_timestamp_ms"])) / 1000))), ] for i in running ] @@ -243,12 +213,7 @@ def jobCompletionTracker(starttime, endtime, check_interval): # Get list of tasks with specified name/description prefix (e.g. "description" passed to GEE export function) def nameTaskList(nameIdentifier): tasks = ee.data.getTaskList() - thisList = [ - i - for i in tasks - if re.findall(nameIdentifier, i["description"]) - and (i["state"] == "READY" or i["state"] == "RUNNING") - ] + thisList = [i for i in tasks if re.findall(nameIdentifier, i["description"]) and (i["state"] == "READY" or i["state"] == "RUNNING")] return thisList @@ -263,9 +228,7 @@ def getEECUS(output_table_name, nameFind=None, overwrite=False): completed = [i for i in operations if i["metadata"]["state"] == "SUCCEEDED"] if nameFind != None: - completed = [ - i for i in completed if i["metadata"]["description"].find(nameFind) > -1 - ] + completed = [i for i in completed if i["metadata"]["description"].find(nameFind) > -1] output_table_name = os.path.splitext(output_table_name)[0] + ".csv" out_lines = "Name,Run Time, EECU Seconds,Size (megaBytes)\n"