Thailand Hydrometeorological Seasonal Forecasts
āļĢāļ°āļāļāļāļĒāļēāļāļĢāļāđāļāļēāļĄāļĪāļāļđāļāļēāļĨāļāđāļēāļāļāļļāļāļāļāļļ
āļāļēāļĢāļāļĒāļēāļāļĢāļāđāļĄāļĩāļāļāļāļēāļāļŠāļģāļāļąāļāđāļāļāļēāļĢāļ§āļēāļāđāļāļāđāļĨāļ°āđāļāļĢāļĩāļĒāļĄāļāļĢāđāļāļĄāļĢāļąāļāļĄāļ·āļāļāļąāļāļŠāļāļēāļāļāļēāļĢāļāđāļāļĩāđāļāļēāļāđāļāļīāļāļāļķāđāļāđāļāļāļāļēāļāļ āļāđāļ§āļĒāđāļŦāđāļāļēāļĢāļāļąāļāļŠāļīāļāđāļāđāļĨāļ°āļāļēāļĢāđāļāļĢāļĩāļĒāļĄāļāļ§āļēāļĄāļāļĢāđāļāļĄāļĄāļĩāļāļ§āļēāļĄāđāļŦāļĄāļēāļ°āļŠāļĄāđāļĨāļ°āđāļĄāđāļāļĒāļģāļĄāļēāļāļāļķāđāļ āļŠāļģāļŦāļĢāļąāļāļāļĢāļīāļāļāļāđāļēāļāļāļļāļāļāļāļļāļāļļāļāļīāļĒāļĄāļ§āļīāļāļĒāļē āļāļķāđāļāđāļāđāļāļāļēāļĢāļĻāļķāļāļĐāļēāđāļĨāļ°āļāļēāļĢāļāļēāļāļāļēāļĢāļāđāļāļĢāļēāļāļāļāļēāļĢāļāđāļāļĩāđāđāļāļĩāđāļĒāļ§āļāđāļāļāļāļąāļāļ āļđāļĄāļīāļāļēāļāļēāļĻāđāļĨāļ°āļāđāļģ āļāļēāļĢāļāļĒāļēāļāļĢāļāđāļĄāļĩāļāļ§āļēāļĄāļŠāļģāļāļąāļāļāļĒāđāļēāļāļĒāļīāđāļāļāđāļāļāļēāļĢāļāļēāļāļāļēāļĢāļāđāđāļŦāļāļļāļāļēāļĢāļāđāļāļĢāļĢāļĄāļāļēāļāļīāđāļĨāļ°āļāļĨāļāļĢāļ°āļāļāļāļĩāđāļāļēāļāļāļēāļĄāļĄāļē āđāļāļĒāđāļāļāļēāļ°āļāļĒāđāļēāļāļĒāļīāđāļāđāļĄāļ·āđāļāļŠāļ āļēāļāļ āļđāļĄāļīāļāļēāļāļēāļĻāđāļāļĨāļĩāđāļĒāļāđāļāļĨāļāļāļĒāđāļēāļāļĢāļ§āļāđāļĢāđāļ§āđāļĨāļ°āļāļ§āļĩāļāļ§āļēāļĄāļĢāļļāļāđāļĢāļāļĄāļēāļāļāļķāđāļ āļāđāļāļĄāļđāļĨāļāļĒāļēāļāļĢāļāđāļāļĩāđāļĄāļĩāļāļ§āļēāļĄāļĨāļ°āđāļāļĩāļĒāļāđāļāļīāļāļŠāļđāļāļāļ·āđāļāļāļĩāđāđāļāļĢāļ°āļāļąāļāļāđāļāļāļāļīāđāļāļŠāļēāļĄāļēāļĢāļāđāļŦāđāļāđāļāļĄāļđāļĨāļāļĩāđāđāļĄāđāļāļĒāļģāđāļĨāļ°āļĄāļĩāļāļ§āļēāļĄāļĨāļ°āđāļāļĩāļĒāļāļĄāļēāļāļāļķāđāļ āļāļķāđāļāļāđāļ§āļĒāđāļāļīāđāļĄāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļāđāļāļāļēāļĢāđāļāļĢāļĩāļĒāļĄāļāļ§āļēāļĄāļāļĢāđāļāļĄāđāļĨāļ°āļāļēāļĢāļāļāļāļŠāļāļāļāļāđāļāļŠāļāļēāļāļāļēāļĢāļāđāļāļĩāđāđāļāļĨāļĩāđāļĒāļāđāļāļĨāļāđāļāđāļāļĒāđāļēāļāļĄāļĩāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļāđāļĨāļ°āđāļŦāļĄāļēāļ°āļŠāļĄ
āđāļĄāļ·āđāļāđāļāļĢāļĩāļĒāļāđāļāļĩāļĒāļāļāļąāļāļāđāļāļĄāļđāļĨāļŠāļēāļāļēāļĢāļāļ°āļāļāļāļāļąāļ§āđāļāļĢāļāđāļēāļāđ āļāļēāļāļāļļāļāļļāļāļļāļāļāļ§āļīāļāļĒāļēāļāļĩāđāļĄāļĩāļāļĒāļđāđāđāļāļāļąāļāļāļļāļāļąāļ āļĄāļąāļāļĄāļĩāļāļ§āļēāļĄāļĨāļ°āđāļāļĩāļĒāļāđāļāļīāļāļāļ·āđāļāļāļĩāđāļāđāļāļāļāđāļēāļāļāđāļģ (āļāļĢāļ°āļĄāļēāļ 25 āļāļīāđāļĨāđāļĄāļāļĢ) āļāļąāļāļāļąāđāļāļāđāļāļĄāļđāļĨāļāļĒāļēāļāļĢāļāđāļāļĩāđāļĄāļĩāļāļ§āļēāļĄāļĨāļ°āđāļāļĩāļĒāļāļŠāļđāļ (1 āļāļīāđāļĨāđāļĄāļāļĢ) āļāļēāļāļĢāļ°āļāļāļāļĒāļēāļāļĢāļāđāļāļĩāđāļŠāļēāļĄāļēāļĢāļāđāļŦāđāļāļĨāļĨāļąāļāļāđāļāļĩāđāļāļąāļāđāļāļāđāļĨāļ°āļĨāļ°āđāļāļĩāļĒāļāļĄāļēāļāļāļķāđāļāđāļāļĩāđāļĒāļ§āļāļąāļāļĢāļđāļāđāļāļāļŠāļ āļēāļāļāļēāļāļēāļĻāđāļĨāļ°āđāļŦāļāļļāļāļēāļĢāļāđāļāļēāļāļāļļāļāļāļ§āļīāļāļĒāļēāđāļāļāļ·āđāļāļāļĩāđāļĢāļ°āļāļąāļāļāđāļāļāļāļīāđāļ āļāļķāđāļāļāļ§āļēāļĄāļĨāļ°āđāļāļĩāļĒāļāđāļāļĢāļ°āļāļąāļāļāļĩāđāļĄāļĩāļāļĢāļ°āđāļĒāļāļāđāļāļĒāđāļēāļāļĒāļīāđāļāļŠāļģāļŦāļĢāļąāļāļŦāļĨāļēāļĒāļ āļēāļāļŠāđāļ§āļ āđāļāđāļ āđāļāļĐāļāļĢāļāļĢāļĢāļĄ āđāļāļĐāļāļĢāļāļĢāļŠāļēāļĄāļēāļĢāļāđāļāđāļāđāļāļĄāļđāļĨāļāļąāļāļāļĨāđāļēāļ§āđāļāļāļēāļĢāļ§āļēāļāđāļāļāļāļąāļāļāļēāļĢāđāļāļĨāļāđāļāļĐāļāļĢāļāđāļ§āļĒāļāļ§āļēāļĄāđāļĄāđāļāļĒāļģ āđāļāđāļ āļĢāļ°āļāļļāļāļ·āđāļāļāļĩāđāļāļāļāđāļāļĨāļāļāļēāļāļĩāđāļāļēāļāļāđāļģāļŦāļĢāļ·āļāļāļēāļāļļāļāļēāļŦāļēāļĢ āļāļģāđāļŦāđāļŠāļēāļĄāļēāļĢāļāđāļŦāđāļāđāļģāļŦāļĢāļ·āļāđāļŠāđāļāļļāđāļĒāđāļāđāļāļĒāđāļēāļāđāļĄāđāļāļĒāļģāđāļĨāļ°āļāļļāđāļĄāļāđāļē āļāļāļāļāļēāļāļāļĩāđ āļāļēāļĢāļāļĒāļēāļāļĢāļāđāļāļāļāļ āļāļĢāļīāļĄāļēāļāļāđāļģāļāļ āļāđāļ§āļāđāļ§āļĨāļē āđāļĨāļ°āļāļļāļāļŦāļ āļđāļĄāļīāđāļāļāļ·āđāļāļāļĩāđāđāļĨāđāļāļĒāļąāļāļāđāļ§āļĒāđāļŦāđāđāļāļĐāļāļĢāļāļĢāļāļąāļāļŠāļīāļāđāļāđāļāđāļāļĩāļāļķāđāļāđāļāļĩāđāļĒāļ§āļāļąāļāļāļēāļĢāđāļŦāđāļāđāļģ āļāļēāļĢāđāļāļēāļ°āļāļĨāļđāļ āđāļĨāļ°āļāļēāļĢāđāļāđāļāđāļāļĩāđāļĒāļ§ āļāļķāđāļāļŠāđāļāļāļĨāļāđāļāļāļēāļĢāļāļąāļāļāļēāļĢāļāļĢāļąāļāļĒāļēāļāļĢāļāđāļģ āļĨāļāļāļēāļĢāļŠāļīāđāļāđāļāļĨāļ·āļāļāļāļĢāļąāļāļĒāļēāļāļĢ āđāļĨāļ°āļĢāļąāļāļĐāļēāļāļļāļāļ āļēāļāļāļāļāļāļĨāļāļĨāļīāļāđāļŦāđāļĄāļĩāļāļ§āļēāļĄāđāļĄāđāļāļĒāļģāļŠāļđāļāļāļķāđāļ
āđāļāđāļāđāļāļĩāļĒāļ§āļāļąāļāļ āļēāļāļŠāđāļ§āļāļāļ·āđāļāđ āđāļāđāļ āļāļēāļĢāļāļąāļāļāļēāļĢāļ āļąāļĒāļāļīāļāļąāļāļī āļāļēāļĢāļ§āļēāļāđāļāļāđāļāļĢāļāļŠāļĢāđāļēāļāļāļ·āđāļāļāļēāļ āđāļĨāļ°āļāļēāļĢāļāļĢāļīāļŦāļēāļĢāļāļąāļāļāļēāļĢāļāļĢāļąāļāļĒāļēāļāļĢāļāđāļģ āļĒāļąāļāđāļāđāļĢāļąāļāļāļĢāļ°āđāļĒāļāļāđāļāļĒāđāļēāļāļĄāļēāļāļāļēāļāļāļēāļāļāđāļāļĄāļđāļĨāļāļĒāļēāļāļĢāļāđāļĨāļ°āđāļāļĩāļĒāļāđāļāļīāđāļĄāļāļķāđāļāļāļĩāđ āļāđāļ§āļĒāļāđāļāļĄāļđāļĨāļāļĩāđāđāļĄāđāļāļĒāļģāļāļđāđāļĄāļĩāļŠāđāļ§āļāđāļāļĩāđāļĒāļ§āļāđāļāļāļŠāļēāļĄāļēāļĢāļāļ§āļēāļāđāļāļāļāļąāļāļāļēāļāļĨāļĒāļļāļāļāđāļāļēāļĢāđāļāļĢāļĩāļĒāļĄāļāļĢāđāļāļĄāđāļĨāļ°āļāļēāļĢāļāļāļāļŠāļāļāļāđāļāđāļāļĩāļāļķāđāļ āļāļąāļāļāļąāđāļāļāļķāļāđāļāđāļāļāļĢāļ°āđāļĒāļāļāđāļāđāļāđāļāļĐāļāļĢāļāļĢāđāļĨāļ°āļāļđāđāļāļģāļŦāļāļāļāđāļĒāļāļēāļĒāđāļāļāļēāļĢāļāļąāļāļŠāļīāļāđāļāļ§āļēāļāđāļāļāļāļēāļĢāļāļąāļāļāļēāļĢāļāļ·āļāļāļĨāđāļĨāļ°āļāļĨāļĒāļļāļāļāđāļāļēāļĢāļāļĢāļąāļāļāļąāļ§āđāļāļ·āđāļāļĢāļąāļāļĄāļ·āļāļāļąāļāļŠāļ āļēāļāļ āļđāļĄāļīāļāļēāļāļēāļĻāđāļĨāļ°āļŠāļāļēāļāļāļēāļĢāļāđāļāđāļēāļāđ āļāļĩāđāļāļģāļĨāļąāļāļāļ°āđāļāļīāļāļāļķāđāļāđāļāđāļāļĒāđāļēāļāđāļŦāļĄāļēāļ°āļŠāļĄ āļāļģāđāļāļŠāļđāđāļāļēāļĢāļāļĢāļīāļŦāļēāļĢāļāļąāļāļāļēāļĢāļāļĢāļąāļāļĒāļēāļāļĢāđāļĨāļ°āļāļ§āļēāļĄāđāļŠāļĩāđāļĒāļāļāļĩāđāļĄāļĩāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļāđāļĨāļ°āļāđāļēāđāļāļ·āđāļāļāļ·āļāļĄāļēāļāļĒāļīāđāļāļāļķāđāļ
Â
āļĢāļēāļĒāļāļēāļāļāļ§āļēāļĄāļāļ·āļāļŦāļāđāļēāļāļāļāđāļāļĢāļāļāļēāļĢ:
āđāļāļĢāļāļāļēāļĢ THSF āđāļāđāļĢāļąāļāļāļēāļĢāļŠāļāļąāļāļŠāļāļļāļāļāļēāļāļŠāļģāļāļąāļāļāļēāļāļāļąāļāļāļēāļāļēāļĢāļ§āļīāļāļąāļĒāļāļēāļĢāđāļāļĐāļāļĢ (āļāļāļāđāļāļēāļĢāļĄāļŦāļēāļāļ) āļāļąāđāļāđāļāđāđāļāļ·āļāļāļĄāļīāļāļļāļāļēāļĒāļ 2567 āļāļķāļāđāļāļ·āļāļāļĄāļīāļāļļāļāļēāļĒāļ 2568 āđāļĄāđāļ§āđāļēāđāļāļĢāļāļāļēāļĢāļāļ°āļŠāļīāđāļāļŠāļļāļāļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļŠāļāļąāļāļŠāļāļļāļāļāļĒāđāļēāļāđāļāđāļāļāļēāļāļāļēāļĢāđāļĨāđāļ§ āđāļāđāļāļēāļāļāļāļ°āļāļđāđāļ§āļīāļāļąāļĒāļĒāļąāļāļāļāļāļģāđāļāļīāļāļāļēāļĢāļāļąāļāļāļģāļĢāļēāļĒāļāļēāļāļāļĢāļ°āļāļģāļŠāļąāļāļāļēāļŦāđ āđāļāļĒāđāļāđāđāļāļīāļāļāļļāļāļāļēāļāđāļŦāļĨāđāļāļāļ·āđāļāđāļāļ·āđāļāļāļēāļĢāđāļŦāđāļāļĢāļīāļāļēāļĢāļāļģāđāļāļīāļāđāļāļāļĒāđāļēāļāļāđāļāđāļāļ·āđāļāļ
āđāļāļ·āđāļāļāļāļēāļāļāđāļāļāļģāļāļąāļāļāđāļēāļāļāļāļāļĢāļ°āļĄāļēāļ āļāļāļ°āļāļđāđāļ§āļīāļāļąāļĒāļāļķāļāđāļāđāļāļĢāļąāļāļāļĢāļ°āļāļ§āļāļāļēāļĢāļāļģāļāļēāļāđāļĨāļ°āļĢāļđāļāđāļāļāļāđāļāļĄāļđāļĨāđāļŦāđāļŠāļāļāļāļĨāđāļāļāļāļąāļāļāļĢāļąāļāļĒāļēāļāļĢāļāļĩāđāļĄāļĩāļāļĒāļđāđ āđāļāļĒāļĄāļĩāļāļēāļĢāļāļĢāļąāļāđāļāļĨāļĩāđāļĒāļāļāļąāļāļāļĩāđ:
- āļāļĢāļąāļāļāļēāļĢāļāļąāļāđāļāļāļāđāļāļĄāļđāļĨāđāļāđāļāļĢāļēāļĒāđāļāļ·āļāļāđāļāļ·āđāļāļĨāļāļāđāļēāđāļāđāļāđāļēāļĒāļāđāļēāļāļāļēāļĢāļāļĢāļ°āļĄāļ§āļĨāļāļĨ
- āļĨāļāļāļģāļāļ§āļāļāļąāļ§āđāļāļĢāđāļāļ·āđāļāļāļĢāļ°āļŦāļĒāļąāļāļāļ·āđāļāļāļĩāđāļāļąāļāđāļāđāļāļāđāļāļĄāļđāļĨ
- āļāļąāļāļāļģāļāđāļāļĄāļđāļĨāđāļāļĢāļ°āļāļąāļāļāļ§āļēāļĄāļāļĩāđāļĢāļēāļĒāđāļāļ·āļāļ
āļāļāļ°āļāļđāđāļ§āļīāļāļąāļĒāļāļ°āļĒāļąāļāļāļāļāļģāđāļāļīāļāļāļēāļĢāļŠāļāļąāļāļŠāļāļļāļāļāđāļāļĄāļđāļĨāļāļĒāđāļēāļāļāđāļāđāļāļ·āđāļāļāļāđāļāđāļāļāļĢāļēāļāđāļāđāļēāļāļĩāđāļāļāļāļĢāļ°āļĄāļēāļāđāļāļ·āđāļāļāļģāļāļ§āļĒ āļāļāļāļāļāļāļļāļāđāļāļāļ§āļēāļĄāđāļāđāļēāđāļāđāļĨāļ°āļāļēāļĢāļŠāļāļąāļāļŠāļāļļāļāļāļĒāđāļēāļāļāđāļāđāļāļ·āđāļāļāļāļāļāļāđāļēāļ
āļāļ§āļēāļĄāļĨāļ°āđāļāļĩāļĒāļāđāļāļīāļāļāļ·āđāļāļāļĩāđ: āļāļ·āđāļāļāļĩāđāļāļĢāļīāļ 0.01 (āļāļĢāļ°āļĄāļēāļ 1 āļāļīāđāļĨāđāļĄāļāļĢ)
āļāļ§āļēāļĄāļĨāļ°āđāļāļĩāļĒāļāđāļāļīāļāđāļ§āļĨāļē: 1 āļ§āļąāļ āđāļĨāļ°Â 1 āđāļāļ·āļāļ
āļāđāļ§āļāđāļ§āļĨāļē: āļāļēāļāļāļēāļĢāļāđāļĨāđāļ§āļāļŦāļāđāļē 6 āđāļāļ·āļāļāļāļēāļāļāļąāļāļāļļāļāļąāļ
āļĢāļđāļāđāļāļāđāļāļĨāđ: NetCDF, GeoTIFF, Excel
āļāļēāļĢāļāļąāļāđāļāļ: āļāļļāļāđāđāļāļ·āļāļ
Â
| āļāļąāļ§āđāļāļĢ | āļāļ·āđāļāļ āļēāļĐāļēāļāļąāļāļāļĪāļĐ | āļāļ·āđāļāļ āļēāļĐāļēāđāļāļĒ | āļŦāļāđāļ§āļĒ | āļŠāļāļēāļāļ° |
|---|---|---|---|---|
| AvgSurfT | Average Surface Temperature | āļāļļāļāļŦāļ āļđāļĄāļīāļāļ·āđāļāļāļīāļ§āđāļāļĨāļĩāđāļĒ | K | Available |
| EF | Evapotranspiration Fraction | āļŠāļąāļāļŠāđāļ§āļāļāļēāļĢāļĢāļ°āđāļŦāļĒ | – | Discontinued |
| ESoil | Bare Soil Evaporation | āļāļēāļĢāļĢāļ°āđāļŦāļĒāļāļēāļāļāļīāļ | gC/mÂēs | Discontinued |
| Evap | Evapotranspiration | āļāļĢāļīāļĄāļēāļāļāļēāļĢāļāļēāļĒāļĢāļ°āđāļŦāļĒ | kg/mÂēs | Available |
| GPP | Gross Primary Production | āļāļąāļāļĢāļēāļāļēāļĢāļāļĨāļīāļāļāļāļĄāļ āļđāļĄāļīāļĢāļ§āļĄ | gC/mÂēs | Discontinued |
| GWS | Groundwater Storage | āļāļēāļĢāļāļąāļāđāļāđāļāļāđāļģāđāļāđāļāļīāļ | mm | Available |
| LAI | Leaf Area Index | āļāļąāļāļĢāļēāļŠāđāļ§āļāļāļāļāļāļ·āđāļāļāļĩāđāđāļāļāđāļāļāļ·āđāļāļāļĩāđāļāļĨāļđāļ | mÂē/mÂē | Discontinued |
| Lwnet | Net Longwave Radiation | āļāļĢāļīāļĄāļēāļāļĢāļąāļāļŠāļĩāļŠāļļāļāļāļīāļāļĨāļ·āđāļāļĒāļēāļ§ | W/mÂē | Discontinued |
| NEE | Net Ecosystem Exchange | āļāļēāļĢāđāļĨāļāđāļāļĨāļĩāđāļĒāļāļāļēāļĢāļāđāļāļāļŠāļļāļāļāļī | gC/mÂēs | Discontinued |
| NPP | Net Primary Production | āļāļąāļāļĢāļēāļāļēāļĢāļāļĨāļīāļāļāļāļĄāļ āļđāļĄāļīāļŠāļļāļāļāļī | gC/mÂēs | Discontinued |
| Qg | Ground Heat Flux | āļāļ§āļēāļĄāļĢāđāļāļāđāļāļāļīāļ | W/mÂē | Discontinued |
| Qh | Sensible Heat Flux | āļāļ§āļēāļĄāļĢāđāļāļāļāļĩāđāļĢāļđāđāļŠāļķāļāđāļāđ | W/mÂē | Discontinued |
| Qle | Latent Heat Flux | āļāļ§āļēāļĄāļĢāđāļāļāđāļāļ | W/mÂē | Discontinued |
| Qs | Surface Runoff | āļāļĢāļīāļĄāļēāļāļāđāļģāļāđāļēāļāļīāļ§āļāļīāļ | kg/mÂēs | Available |
| Qsb | Subsurface Runoff | āļāļĢāļīāļĄāļēāļāļāđāļģāļāđāļēāđāļāđāļāļīāļ | kg/mÂēs | Available |
| Rainf_f | Rainfall Rate | āļāļĢāļīāļĄāļēāļāļāđāļģāļāļ | kg/mÂēs | Discontinued |
| SoilMoist01 | Average layer 1 soil moisture (10 cm) | āļāđāļēāđāļāļĨāļĩāđāļĒāļāļ§āļēāļĄāļāļ·āđāļāđāļāļāļīāļāļāļąāđāļāļāļĩāđ 1 (āļāļ§āļēāļĄāļŦāļāļēāļāļąāđāļāļāļīāļ 10 āļ.āļĄ.) | mÂģ/mÂģ | Available |
| SoilMoist02 | Average layer 2 soil moisture (30 cm) | āļāđāļēāđāļāļĨāļĩāđāļĒāļāļ§āļēāļĄāļāļ·āđāļāđāļāļāļīāļāļāļąāđāļāļāļĩāđ 2 (āļāļ§āļēāļĄāļŦāļāļēāļāļąāđāļāļāļīāļ 30 āļ.āļĄ.) | mÂģ/mÂģ | Discontinued |
| SoilMoist03 | Average layer 3 soil moisture (60 cm) | āļāđāļēāđāļāļĨāļĩāđāļĒāļāļ§āļēāļĄāļāļ·āđāļāđāļāļāļīāļāļāļąāđāļāļāļĩāđ 3 (āļāļ§āļēāļĄāļŦāļāļēāļāļąāđāļāļāļīāļ 60 āļ.āļĄ.) | mÂģ/mÂģ | Discontinued |
| SoilMoist04 | Average layer 4 soil moisture (100 cm) | āļāđāļēāđāļāļĨāļĩāđāļĒāļāļ§āļēāļĄāļāļ·āđāļāđāļāļāļīāļāļāļąāđāļāļāļĩāđ 4 (āļāļ§āļēāļĄāļŦāļāļēāļāļąāđāļāļāļīāļ 100 āļ.āļĄ.) | mÂģ/mÂģ | Discontinued |
| SoilTemp01 | Average layer 1 soil temperature (10 cm) | āļāđāļēāđāļāļĨāļĩāđāļĒāļāļļāļāļŦāļ āļđāļĄāļīāđāļāļāļīāļāļāļąāđāļāļāļĩāđ 1 (āļāļ§āļēāļĄāļŦāļāļēāļāļąāđāļāļāļīāļ 10 āļ.āļĄ.) | K | Discontinued |
| SoilTemp02 | Average layer 2 soil temperature (30 cm) | āļāđāļēāđāļāļĨāļĩāđāļĒāļāļļāļāļŦāļ āļđāļĄāļīāđāļāļāļīāļāļāļąāđāļāļāļĩāđ 2 (āļāļ§āļēāļĄāļŦāļāļēāļāļąāđāļāļāļīāļ 30 āļ.āļĄ.) | K | Discontinued |
| SoilTemp03 | Average layer 3 soil temperature (60 cm) | āļāđāļēāđāļāļĨāļĩāđāļĒāļāļļāļāļŦāļ āļđāļĄāļīāđāļāļāļīāļāļāļąāđāļāļāļĩāđ 3 (āļāļ§āļēāļĄāļŦāļāļēāļāļąāđāļāļāļīāļ 60 āļ.āļĄ.) | K | Discontinued |
| SoilTemp04 | Average layer 4 soil temperature (100 cm) | āļāđāļēāđāļāļĨāļĩāđāļĒāļāļļāļāļŦāļ āļđāļĄāļīāđāļāļāļīāļāļāļąāđāļāļāļĩāđ 4 (āļāļ§āļēāļĄāļŦāļāļēāļāļąāđāļāļāļīāļ 100 āļ.āļĄ.) | K | Discontinued |
| Swnet | Net Shortwave Radiation | āļāļĢāļīāļĄāļēāļāļĢāļąāļāļŠāļĩāļŠāļļāļāļāļīāļāļĨāļ·āđāļāļŠāļąāđāļ | W/mÂē | Discontinued |
| Tair_f | Air Temperature | āļāļļāļāļŦāļ āļđāļĄāļīāļāļēāļāļēāļĻ | K | Discontinued |
| TVeg | Vegetation Transpiration | āļāļēāļĢāļāļēāļĒāļāđāļģ | kg/mÂēs | Discontinued |
| TWS | Terrestrial Water Storage | āļāļĢāļīāļĄāļēāļāļāļēāļĢāļāļąāļāđāļāđāļāļāđāđāļēāļāļąāđāļāļŦāļĄāļ | mm | Available |
āļāļļāļāļāđāļāļĄāļđāļĨāļāļĩāđāđāļāļīāļāđāļŦāđāđāļāđāļāļēāļāđāļāđāļāļĢāļĩ āđāļāļĒāđāļĄāđāļĄāļĩāļāđāļēāđāļāđāļāđāļēāļĒāđāļāđ āļāļķāđāļāđāļāđāļāļŠāđāļ§āļāļŦāļāļķāđāļāļāļāļāļāļ§āļēāļĄāļĄāļļāđāļāļĄāļąāđāļāļāļāļāļāļđāđāđāļŦāđāļāļĢāļīāļāļēāļĢāļāđāļāļĄāļđāļĨ āđāļāļ·āđāļāļāļēāļĢāļāļąāļāļāļēāļāđāļāļĄāļđāļĨ āļāļ§āļēāļĄāļĢāļđāđāļāļ§āļēāļĄāđāļāđāļēāđāļāļāļēāļāļ§āļīāļāļĒāļēāļĻāļēāļŠāļāļĢāđ āđāļĨāļ°āļŠāđāļāđāļŠāļĢāļīāļĄāļāļēāļĢāļāļģāļāļēāļāļĢāđāļ§āļĄāļāļąāļ āļāļēāļĢāļĨāļāļāļ°āđāļāļĩāļĒāļāļāđāļ§āļĒāđāļŦāđāļāļđāđāđāļāđāļāđāļāļĄāļđāļĨāđāļāđāļēāđāļāļāļāļāđāļāļāđāļĨāļ°āļāļĨāļāļĢāļ°āļāļāļāļāļāļāļēāļĢāđāļāđāļāđāļāļĄāļđāļĨāđāļāđāļāļĩāļāļķāđāļ āļĢāļ§āļĄāļāļķāļāļāđāļ§āļĒāđāļŦāđāļāļđāđāđāļŦāđāļāļĢāļīāļāļēāļĢāļāđāļāļĄāļđāļĨāļŠāļēāļĄāļēāļĢāļāļāļąāļāļĨāļģāļāļąāļāļāļ§āļēāļĄāļŠāļģāļāļąāļāđāļāļ·āđāļāļāļēāļĢāļāļąāļāļāļēāļāļĢāļąāļāļāļĢāļļāļāļāđāļāļĄāļđāļĨāđāļāļāļāļēāļāļ āļāļāļāļāļēāļāļāļĩāđāļāļđāđāđāļāđāļāđāļāļĄāļđāļĨāļŠāļēāļĄāļēāļĢāļāļĢāļąāļāļāđāļāļĄāļđāļĨāđāļāļĩāđāļĒāļ§āļāļąāļāļāļēāļĢāļāļąāļāđāļāļāļŦāļĢāļ·āļāļāļēāļĢāđāļāđāđāļāļāļĩāđāļŠāļģāļāļąāļ āļāļąāļāļāļąāđāļ āļāļēāļĢāļĄāļĩāļŠāđāļ§āļāļĢāđāļ§āļĄāđāļāļāļēāļĢāđāļāđāļāļēāļāļāđāļāļĄāļđāļĨāļāļĩāđāļāļ°āļāđāļ§āļĒāļŠāļāļąāļāļŠāļāļļāļāļāļ§āļēāļĄāļĒāļąāđāļāļĒāļ·āļāđāļĨāļ°āļāļēāļĢāļāļąāļāļāļēāđāļāļĢāļāļāļēāļĢāļāļĢāļīāļāļēāļĢāļāđāļāļĄāļđāļĨāļŠāļēāļāļēāļĢāļāļ°āļāļąāļāđāļāđāļāļāļĢāļ°āđāļĒāļāļāđāļāļĩāđ āđāļĨāļ°āļāļēāļāļāļđāđāđāļŦāđāļāļĢāļīāļāļēāļĢāļāđāļāļĄāļđāļĨāļŦāļ§āļąāļāđāļāđāļāļāļĒāđāļēāļāļĒāļīāđāļāļ§āđāļēāļāļ°āļŠāļēāļĄāļēāļĢāļāļāļąāļāļāļēāļāđāļāļĄāļđāļĨ āļāļĢāļąāļāļāļĢāļļāļāđāļāđāđāļāđāļāđāļāļĒāđāļēāļāļāđāļāđāļāļ·āđāļāļāđāļĨāļ°āļĄāļĩāļāļļāļāļ āļēāļāļāļĢāļāļāļēāļĄāļ§āļąāļāļāļļāļāļĢāļ°āļŠāļāļāđāļāļāļāļāļđāđāđāļāđāļāļēāļāļāļĢāļīāļ
Â
āđāļāļāļēāļĢāđāļāđāļēāļāļķāļ āļāļēāļĢāļāļēāļ§āļāđāđāļŦāļĨāļ āļŦāļĢāļ·āļāļāļēāļĢāđāļāđāļāļļāļāļāđāļāļĄāļđāļĨāļāļĩāđ āļāļĢāļļāļāļē āđāļāđāļēāļŠāļđāđāļĢāļ°āļāļ āļŦāļĢāļ·āļ āļŠāļĄāļąāļāļĢāļĨāļāļāļ°āđāļāļĩāļĒāļ āđāļāļ·āđāļāđāļāđāļēāļāļķāļāļāđāļāļĄāļđāļĨ āđāļāļ·āđāļāļāļāļēāļāļāļēāļāļāļđāđāđāļāđāļāđāļāļĄāļđāļĨāļāļģāđāļāđāļāļāđāļāļāļĢāļąāļāļāļĢāļēāļāļ§āđāļēāđāļāđāļāđāļēāļāļĢāļēāļĒāļĨāļ°āđāļāļĩāļĒāļāļāļēāļĢāđāļāđāļāļēāļ āļāļģāļāļ§āļēāļĄāđāļāđāļēāđāļāļāđāļāļāļąāļāļāļąāļāđāļāđ āđāļĨāļ°āļĒāļāļĄāļĢāļąāļāļāđāļāļāļģāļŦāļāļāđāļĨāļ°āđāļāļ·āđāļāļāđāļāļŠāļģāļŦāļĢāļąāļāļāļļāļāļāđāļāļĄāļđāļĨ
Â
āļāđāļāļĄāļđāļĨāļāļēāļāđāļāļĢāļāļāļēāļĢāļĢāļ°āļāļāļāļĒāļēāļāļĢāļāđāļāļēāļĄāļĪāļāļđāļāļēāļĨāļāđāļēāļāļāļļāļāļļāļāļļāļāļāļāļīāļĒāļĄāļ§āļīāļāļĒāļēāļāļāļāļāļĢāļ°āđāļāļĻāđāļāļĒ (THSF) āļāļđāļāļāļģāđāļŠāļāļāđāļāļĢāļđāļāđāļāļāļāđāļēāļāđ āđāļāļ·āđāļāļāļ§āļēāļĄāļŠāļ°āļāļ§āļāļāļāļāļāļđāđāđāļāđāļāļēāļ āđāļāļĒāļāđāļāļĄāļđāļĨāļāļĢāļ°āđāļ āļāļĢāļēāļŠāđāļāļāļĢāđ (raster) āļāļ°āļāļđāļāļāļąāļāļāļģāđāļāļĢāļđāļāđāļāļ NetCDF āđāļĨāļ° Geotiff āļāļķāđāļāļĢāļāļāļĢāļąāļāļāļēāļĢāļ§āļīāđāļāļĢāļēāļ°āļŦāđāđāļāļīāļāļāļ·āđāļāļāļĩāđ āļŠāđāļ§āļāļāđāļāļĄāļđāļĨāļāļĢāļ°āđāļ āļāļāļāļļāļāļĢāļĄāđāļ§āļĨāļē (Time Series) āļāļ°āļāļđāļāļāļąāļāļāļģāđāļāļĢāļđāļāđāļāļ Excel āļāļķāđāļāđāļŦāļĄāļēāļ°āļŠāļģāļŦāļĢāļąāļāļāļēāļĢāļĻāļķāļāļĐāļēāđāļāļĢāļ°āļāļąāļāļĨāļļāđāļĄāļāđāļģ āļāļąāļāļŦāļ§āļąāļ āļŦāļĢāļ·āļāļāļģāđāļ āļ āļāđāļāļĄāļđāļĨāļāļ°āļāļđāļāļāļąāļāđāļāļāļāļļāļāđ āđāļāļ·āļāļ āđāļĨāļ°āļāļĢāļ°āļāļāļāļāđāļ§āļĒāļāđāļāļĄāļđāļĨāļāļļāļāļļāļāļļāļāļāļāļīāļĒāļĄāļ§āļīāļāļĒāļēāļŠāļģāļŦāļĢāļąāļāļĪāļāļđāļāļēāļĨāļāļąāļāđāļ (āļĨāđāļ§āļāļŦāļāđāļē 6 āđāļāļ·āļāļ)
Â
Â
Figure 1: High-resolution hydrometeorological forecast provides comprehensive variables 6 months in advance, giving a clear, localized view of changes and offering valuable insights for agriculture, water resource management, climate studies, and other sectors. This level of detail enhances the ability to make informed decisions and apply forecasts effectively at a local scale.
āļāļģāđāļāļ°āļāļģ
āļāļđāđāđāļāđāļāļĢāļīāļāļēāļĢāļāđāļāļĄāļđāļĨāļŠāļēāļĄāļēāļĢāļāļāđāļēāļāļāļģāđāļāļ°āļāļģāđāļāđāđāļāļĒāļāļĨāļīāļāļāļĩāđāļĢāļđāļāļ āļēāļ āļŦāļĢāļ·āļ āļŦāļąāļ§āļāđāļāļāļĩāđāļāđāļāļāļāļēāļĢ āđāļĄāļ·āđāļāļāļĨāļīāļāđāļĨāđāļ§āļĢāļēāļĒāļĨāļ°āđāļāļĩāļĒāļāđāļāļ·āđāļāļŦāļēāļāļ°āļāļĢāļēāļāļāļāđāļēāļāļĨāđāļēāļ
āļ§āļīāļāļĩāļāļēāļĢāļĨāļāļāļ°āđāļāļĩāļĒāļ/āđāļāđāļēāļŠāļđāđāļĢāļ°āļāļ/āļāļēāļ§āļāđāđāļŦāļĨāļ
āļāđāļāļĄāļđāļĨāļāļēāļāđāļāļĢāļāļāļēāļĢāļŠāļēāļĄāļēāļĢāļāđāļāđāļāļēāļāđāļāđāđāļāļĒāđāļĄāđāđāļŠāļĩāļĒāļāđāļēāđāļāđāļāđāļēāļĒāđāļāđ āđāļāđāļāļģāđāļāđāļāļāđāļāļāļĨāļāļāļ°āđāļāļĩāļĒāļāđāļāļ·āđāļāļĒāļāļĄāļĢāļąāļāđāļāļ·āđāļāļāđāļāđāļāļāļēāļĢāđāļāđāļāļēāļ āļāļķāļāļŠāļēāļĄāļēāļĢāļāđāļāđāļēāļāļķāļāļāļēāļĢāļāļēāļ§āļāđāđāļŦāļĨāļāđāļāđ āļāļģāđāļāļ°āļāļģāļāļĩāđāļāđāļ§āļĒāļāļāļīāļāļēāļĒāļāļąāđāļāļāļāļāļāļēāļĢāļĨāļāļāļ°āđāļāļĩāļĒāļāļāļĢāđāļāļĄāļĢāļđāļāļ āļēāļāđāļāđāļāđāļĨāļ°āļāļąāđāļāļāļāļ āđāļāļ·āđāļāđāļŦāđāđāļāđāđāļāļ§āđāļēāļāļđāđāđāļāđāļāļĢāļīāļāļēāļĢāļāđāļāļĄāļđāļĨāļŠāļēāļĄāļēāļĢāļāđāļāđāļāļēāļāđāļāđāļāļĒāđāļēāļāļĢāļēāļāļĢāļ·āđāļāđāļĄāđāļ§āđāļēāļāļ°āļĄāļĩāļāļ·āđāļāļāļēāļāļĄāļēāļāļāđāļāļĒāđāļāļĩāļĒāļāđāļ
āđāļāļāļēāļĢāļŠāļĢāđāļēāļāļāļąāļāļāļĩ āđāļŦāđāđāļāļāļĩāđāđāļāđāļāļāđāļēāļāļĨāđāļēāļ:
- āđāļāđāļēāļŠāļđāđāļĢāļ°āļāļ
- āļĨāļāļāļ°āđāļāļĩāļĒāļ
ð āļāļąāđāļāļāļāļāļāļēāļĢāļĨāļāļāļ°āđāļāļĩāļĒāļ
- āļāļĢāļāļāļāļ·āđāļāđāļĨāļ°āļāļēāļĄāļŠāļāļļāļĨāļāļāļāļāļļāļ
- āļĢāļ°āļāļļāļāļĩāđāļĄāļĨāļāļāļāļāļāļāđāļāļĢ
- āļŠāļĢāđāļēāļāļĢāļŦāļąāļŠāļāđāļēāļ
- āļāļĢāļāļāļāļ·āđāļāļāļāļāđāļāļĢāļāļāļāļāļļāļ
â āļĒāļāļĄāļĢāļąāļāđāļāļ·āđāļāļāđāļāļāļēāļĢāđāļāđāļāļēāļāļāđāļ§āļĒāļāļēāļĢāļāļĨāļīāļāđāļāļĢāļ·āđāļāļāļŦāļĄāļēāļĒāđāļāļāđāļāļāļŠāļĩāđāđāļŦāļĨāļĩāđāļĒāļĄ
āļāļēāļāļāļąāđāļ āļāļĨāļīāļ "Submit" āļĢāļ°āļāļāļāļ°āļŠāđāļāļāļĩāđāļĄāļĨāļĒāļ·āļāļĒāļąāļāđāļāļĒāļąāļāļāļĩāđāļĄāļĨāļāļĩāđāļāļļāļāļĢāļ°āļāļļ āđāļāļĒāļāļąāđāļ§āđāļāļāļĩāđāļĄāļĨāļāļĩāđāļāļ°āļĄāļēāļāļķāļāļ āļēāļĒāđāļāđāļĄāđāļāļĩāđāļāļēāļāļĩ āđāļāđāļāļēāļāļāļĢāļąāđāļāļāļēāļāđāļāđāđāļ§āļĨāļēāļāļēāļāļāļķāđāļāļāļķāđāļāļāļĒāļđāđāļāļąāļāļāļđāđāđāļŦāđāļāļĢāļīāļāļēāļĢāļāļĩāđāļĄāļĨāļāļāļāļāļļāļ
āļŦāļĨāļąāļāļāļēāļāļāļĩāđāļāļļāļāļĒāļ·āļāļĒāļąāļāļāļĩāđāļāļĒāļđāđāļāļĩāđāļĄāļĨāđāļāļ·āđāļāđāļāļīāļāđāļāđāļāļēāļāļāļąāļāļāļĩāđāļĨāđāļ§ āļāļļāļāļāļ°āļŠāļēāļĄāļēāļĢāļāđāļāđāļāļēāļāđāļāļĨāļāļāļāļĢāđāļĄāđāļāļ·āđāļāļāđāļāļŦāļēāđāļĨāļ°āļāļēāļ§āļāđāđāļŦāļĨāļāļāđāļāļĄāļđāļĨāļāļĩāđāļāđāļāļāļāļēāļĢāđāļāđ āļāļąāļāļāļąāļ§āļāļĒāđāļēāļāļāđāļēāļāļĨāđāļēāļ:
| āļāļąāļ§āđāļāļĢ | āļāļ·āđāļ | āļŦāļāđāļ§āļĒ | NetCDF | GeoTiff | āļĢāļđāļāļ āļēāļ | Excel |
|---|---|---|---|---|---|---|
| AvgSurfT | Average Surface Temperature | °C | download | download | download | download |
| EF | Evapotranspiration Fraction | - | download | download | download | download |
| ESoil | Soil Evaporation | mm/day | download | download | download | download |
| Evap | Evapotranspiration | mm/day | download | download | download | download |
| GPP | Gross Primary Production | gC/m2/day | download | download | download | download |
| GWS | Groundwater Storage | mm | download | download | download | download |
| LAI | Leaf Area Index | - | download | download | download | download |
| LWdown_f | Downward Longwave Radiation | W/m2 | download | download | download | download |
| Lwnet | Net Longwave Radiation | W/m2 | download | download | download | download |
| NEE | Net Ecosystem Exchange | gC/m2/day | download | download | download | download |
| NPP | Net Primary Production | gC/m2/day | download | download | download | download |
| Qair_f | Specific Humidity | kg/kg | download | download | download | download |
| Qg | Ground Heat Flux | W/m2 | download | download | download | download |
| Qh | Sensible Heat Flux | W/m2 | download | download | download | download |
| Qle | Latent Heat Flux | W/m2 | download | download | download | download |
| Qs | Surface Runoff | mm/day | download | download | download | download |
| Qsb | Subsurface Runoff | mm/day | download | download | download | download |
| Rainf_f | Rainfall Rate | mm/day | download | download | download | download |
| SoilMoist01 | Soil Moisture (Layer 1) | m3/m3 | download | download | download | download |
| SoilMoist02 | Soil Moisture (Layer 2) | m3/m3 | download | download | download | download |
| SoilMoist03 | Soil Moisture (Layer 3) | m3/m3 | download | download | download | download |
| SoilMoist04 | Soil Moisture (Layer 4) | m3/m3 | download | download | download | download |
| SoilTemp01 | Soil Temperature (Layer 1) | °C | download | download | download | download |
| SoilTemp02 | Soil Temperature (Layer 2) | °C | download | download | download | download |
| SoilTemp03 | Soil Temperature (Layer 3) | °C | download | download | download | download |
| SoilTemp04 | Soil Temperature (Layer 4) | °C | download | download | download | download |
| SWdown_f | Downward Shortwave Radiation | W/m2 | download | download | download | download |
| Swnet | Net Shortwave Radiation | W/m2 | download | download | download | download |
| Tair_f | Air Temperature | °C | download | download | download | download |
| TVeg | Vegetation Transpiration | mm/day | download | download | download | download |
| TWS | Terrestrial Water Storage | mm | download | download | download | download |
āļŦāļĄāļēāļĒāđāļŦāļāļļ:āđāļāļāļēāļ°āļāđāļāļĄāļđāļĨāļāļļāļāļŦāļ āļđāļĄāļīāļāļ·āđāļāļāļīāļ§āđāļāļĨāļĩāđāļĒ (AvgSurT) āđāļāđāļēāļāļąāđāļāļāļĩāđāļŠāļēāļĄāļēāļĢāļāļāļģāđāļāđāļāđāđāļāđ
āļ§āļīāļāļĩāļāļēāļĢāļāļĢāļ°āļĄāļ§āļĨāļāļĨāļāđāļāļĄāļđāļĨāļāđāļ§āļĒ Google Earth Engine (GEE)
āļ§āļīāļāļĩāļāļēāļĢāļāļĢāļ°āļĄāļ§āļĨāļāļĨāļāđāļāļĄāļđāļĨāđāļāļĒāđāļāđ GEE āđāļĄāļāļđāļĨāļāļēāļĢāđāļĢāļĩāļĒāļāļāļēāļĢāļŠāļāļāļāļĩāđāļāļģāđāļŠāļāļāļ§āļīāļāļĩāļāļēāļĢāļŠāļēāļĄāđāļāļāļāļĩāđāđāļāļāļāđāļēāļāļāļąāļāļŠāļģāļŦāļĢāļąāļāļāļēāļĢāļāļĢāļ°āļĄāļ§āļĨāļāļĨāļāđāļāļĄāļđāļĨāđāļ Google Earth Engine āđāļāļĒāđāļŦāđāļāļģāđāļāļ°āļāļģāđāļāļĒāļĨāļ°āđāļāļĩāļĒāļāđāļāļĩāđāļĒāļ§āļāļąāļāļāļēāļĢāđāļāđ GEE Code Editor āļŠāļģāļŦāļĢāļąāļāļāļēāļĢāļ§āļīāđāļāļĢāļēāļ°āļŦāđāļāđāļēāļāđāļāļĢāļēāļ§āđāđāļāļāļĢāđ āļāļēāļĢāļĢāļ§āļĄ Google Colab āļŠāļģāļŦāļĢāļąāļāļāļĢāļ°āļāļ§āļāļāļēāļĢāļāļģāļāļēāļāđāļāļĢāļđāļāđāļāļāļŠāļĄāļļāļāļāļąāļāļāļķāļ āđāļĨāļ°āļāļēāļĢāđāļāđ Python API āļŠāļģāļŦāļĢāļąāļāļāļēāļĢāļāļąāļāļāļēāđāļāļāļāļĨāļīāđāļāļāļąāļāđāļāđāļĨāļ°āļŠāđāļ§āļ āļĢāļ§āļĄāļāļķāļāļāļąāļ§āļāļĒāđāļēāļāđāļāđāļāļāļĩāđāđāļāđāļāļēāļāđāļāđāļāļĢāļīāļāđāļĨāļ°āļāļĢāļāļĩāļĻāļķāļāļĐāļē āđāļāļ·āđāļāļāđāļ§āļĒāđāļŦāđāļāļđāđāđāļāđāļāļēāļāļŠāļēāļĄāļēāļĢāļāđāļāđāļāļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļāđāļāļāļēāļĢāļāļĢāļ°āļĄāļ§āļĨāļāļĨāļāļāļ GEE āđāļāđāļāļĒāđāļēāļāļĄāļĩāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļ
- GEE Setup
- GEE Editor
- Google Colab
- Python API
āļāļāļāļģāđāļāļĩāđāļĒāļ§āļāļąāļ Google Earth Engine (GEE)
Google Earth Engine (GEE) āđāļāđāļāđāļāļĨāļāļāļāļĢāđāļĄāļāļāļāļĨāļēāļ§āļāđāļāļĩāđāļāđāļ§āļĒāđāļŦāđāļāļđāđāđāļāđāļ§āļīāđāļāļĢāļēāļ°āļŦāđāđāļĨāļ°āđāļŠāļāļāļāļĨāļāđāļāļĄāļđāļĨāļ āļđāļĄāļīāļĻāļēāļŠāļāļĢāđāđāļāļĢāļ°āļāļąāļāđāļĨāļ āđāļāļĒāļĄāļĩāļāđāļāļĄāļđāļĨāļ āļēāļāļāļēāļ§āđāļāļĩāļĒāļĄāđāļĨāļ°āļāļļāļāļāđāļāļĄāļđāļĨāļ āļđāļĄāļīāļĻāļēāļŠāļāļĢāđāļŦāļĨāļēāļāļŦāļĨāļēāļĒ āļāļĢāđāļāļĄāđāļāļĢāļ·āđāļāļāļĄāļ·āļāļŠāļģāļŦāļĢāļąāļāļāļēāļĢāļ§āļīāđāļāļĢāļēāļ°āļŦāđāđāļĨāļ°āđāļŠāļāļāļāļĨāļāđāļāļĄāļđāļĨ
GEE āđāļŦāļĄāļēāļ°āļŠāļģāļŦāļĢāļąāļ:
- āļāļēāļĢāļāļīāļāļāļēāļĄāļŠāļ āļēāļāđāļ§āļāļĨāđāļāļĄ
- āļāļēāļĢāļāļģāđāļāļāļāļĩāđāļāļēāļĢāđāļāđāļāļĢāļ°āđāļĒāļāļāđāļāļĩāđāļāļīāļāđāļĨāļ°āļŠāļ āļēāļāļāļ·āđāļāļāļĩāđ
- āļāļēāļĢāļ§āļīāļāļąāļĒāļāđāļēāļāļ āļđāļĄāļīāļāļēāļāļēāļĻ
- āļāļēāļĢāļāļāļāļŠāļāļāļāļāđāļāļ āļąāļĒāļāļīāļāļąāļāļī
- āļāļēāļĢāļ§āļīāđāļāļĢāļēāļ°āļŦāđāļāđāļēāļāđāļāļĐāļāļĢāļāļĢāļĢāļĄ
- āļāļēāļĢāļ§āļēāļāļāļąāļāđāļĄāļ·āļāļ
1. āđāļĢāļīāđāļĄāļāđāļāđāļāđāļāļēāļ Google Earth Engine
āļĨāļāļāļ°āđāļāļĩāļĒāļāđāļāļ·āđāļāđāļāđāļēāļāļķāļ GEE:
- āđāļāļāļĩāđāļŦāļāđāļēāļŠāļĄāļąāļāļĢ Earth Engine Signup
- āđāļāđāļāļąāļāļāļĩ Google āļāļāļāļāļļāļāđāļāļāļēāļĢāļĨāļāļāļ°āđāļāļĩāļĒāļ
- āđāļĨāļ·āļāļāļāļĢāļ°āđāļ āļāļāļđāđāđāļāđ āđāļāđāļ āļāļēāļĢāļĻāļķāļāļĐāļē / āļ§āļīāļāļąāļĒ / āđāļĄāđāđāļŠāļ§āļāļŦāļēāļāļĨāļāļģāđāļĢ
- āļĢāļāļāļēāļĢāļāļāļļāļĄāļąāļāļī (āļāļāļāļīāđāļāđāđāļ§āļĨāļē 1-2 āļ§āļąāļāļāļģāļāļēāļĢ)
āļŠāļĢāđāļēāļāđāļāļĢāđāļāļāļāđāđāļ Google Cloud:
- āđāļāļāļĩ Google Cloud Console
- āļŠāļĢāđāļēāļāđāļāļĢāđāļāļāļāđāđāļŦāļĄāđ āļŦāļĢāļ·āļāđāļāđāđāļāļĢāđāļāļāļāđāļāļĩāđāļĄāļĩāļāļĒāļđāđ
- āđāļāļīāļāđāļāđāļāļēāļ Earth Engine API āļŠāļģāļŦāļĢāļąāļāđāļāļĢāđāļāļāļāđāļāļāļāļāļļāļ
- āļŦāļēāļāļāļļāļāđāļāđāļāļąāļāļāļĩāļāļāļāđāļāļĢāđāļĨāļ°āđāļĄāđāļŠāļēāļĄāļēāļĢāļāļŠāļĢāđāļēāļāđāļāļĢāđāļāļāļāđāđāļāđ āđāļŦāđāļāļīāļāļāđāļāļāļđāđāļāļđāđāļĨāļĢāļ°āļāļ IT

āļāļēāļĢāđāļāđāļēāļāļķāļ Earth Engine:
- Code Editor: code.earthengine.google.com
- Python API: āđāļāđāļĢāđāļ§āļĄāļāļąāļ Jupyter/Colab
- REST API: āļŠāļģāļŦāļĢāļąāļāļĢāļ°āļāļāļāļĩāđāļāļąāļāļāļēāļāļķāđāļāđāļāļ
2. āļŠāļģāļĢāļ§āļāļŠāđāļ§āļāļāļīāļāļāđāļāļāļāļ Code Editor
- Script Panel: āļŠāļģāļŦāļĢāļąāļāđāļāļĩāļĒāļ JavaScript
- Map Panel: āđāļŠāļāļāļāļĨāļĨāļąāļāļāđ
- Console Panel: āđāļŠāļāļ log āđāļĨāļ° error
- Asset Manager: āļāļąāļāļāļēāļĢāļāđāļāļĄāļđāļĨāļāļĩāđāļāļģāđāļāđāļē
- Documentation Panel: āļāļđāļāļąāļāļāđāļāļąāļāđāļĨāļ°āļāļģāļāļāļīāļāļēāļĒ
3. āļāļēāļĢāļāļģāļāļēāļāļāļąāļāļāđāļāļĄāļđāļĨ
āļāđāļāļŦāļēāđāļĨāļ°āļāļģāđāļāđāļēāļāļļāļāļāđāļāļĄāļđāļĨ:
- āđāļāļāļĩāđ âDatasetsâ
- āļāđāļāļŦāļēāļāđāļāļĄāļđāļĨ āđāļāđāļ "Landsat", "MODIS", āļŊāļĨāļŊ
- āļāļģāđāļāđāļēāļāđāļāļĄāļđāļĨāļ āļēāļĒāļāļāļāļāđāļēāļāđāļĄāļāļđ Assets āļŦāļĢāļ·āļāđāļāđ API
4. āļāļēāļĢāļāļąāđāļāļāđāļēāđāļāļĢāđāļāļāļāđāđāļĨāļ°āļāļēāļĢāļĒāļ·āļāļĒāļąāļ
JavaScript:
ee.initialize({
projectId: 'my-project-id' #āđāļāļĨāļĩāđāļĒāļāļāļ·āđāļāđāļāļĢāđāļāļāļāđāđāļāđāļāļāļāļāļāļļāļāđāļāļ
});
Python:
import ee
ee.Authenticate()
ee.Initialize(project='my-project-id') #āđāļāļĨāļĩāđāļĒāļāļāļ·āđāļāđāļāļĢāđāļāļāļāđāđāļāđāļāļāļāļāļāļļāļāđāļāļ
5. āļāļēāļĢāļāļīāļāļāļąāđāļ Python API
pip install earthengine-api
āļĒāļ·āļāļĒāļąāļāļāļąāļ§āļāļ:
import ee
ee.Authenticate()
ee.Initialize()
āļāļģāļāļēāļĄāļāļģāđāļāļ°āļāļģāļāļĩāđ āļāļļāļāļāļ°āļŠāļēāļĄāļēāļĢāļāđāļāđāļēāļāļķāļ Google Earth Engine āđāļĨāļ°āđāļĢāļīāđāļĄāļāļąāļāļāļēāđāļāļĢāđāļāļāļāđāļāļēāļĢāļ§āļīāđāļāļĢāļēāļ°āļŦāđāļāđāļāļĄāļđāļĨāļ āļđāļĄāļīāļĻāļēāļŠāļāļĢāđāļāļāļāļāļąāļ§āļāļļāļāđāļāļāđāļāđāļāļĒāđāļēāļāđāļāđāļĄāļāļĩāđ
ð āļāļąāļ§āļāļĒāđāļēāļāđāļāđāļāļāļ GEE:
āđāļāļīāļāļāļąāļ§āļāļĒāđāļēāļāļāļ GEE
āļāļēāļĢāļāļģāļāļēāļāđāļĨāļ°āļāļĢāļ°āļĄāļ§āļĨāļāļĨāļāļ Google Earth Engine (GEE)
āļāļąāđāļāļāļāļāļāļĩāđ 1: āļŠāļģāļĢāļ§āļāđāļĨāļ°āđāļŠāļāļāļāđāļāļĄāļđāļĨāđāļ GEE Code Editor
āđāļāđāļēāļŠāļđāđāļĢāļ°āļāļ Code Editor āđāļāļāļĩāđ Earth Engine Code Editor
āļāļąāđāļāļāļāļāļāļĩāđ 2: āļāļģāļāļ§āļēāļĄāđāļāđāļēāđāļāļāļĩāđāļāļāļĢāđāļāđāļēāļāđ āđāļ Code Editor GEE
Code Editor āđāļāđāļ IDE āļāļĩāđāđāļāđāđāļ§āđāļāļŠāļģāļŦāļĢāļąāļ Earth Engine JavaScript API āļāļķāđāļāļāļđāļāļāļāļāđāļāļāļĄāļēāđāļāļ·āđāļāļ§āļīāđāļāļĢāļēāļ°āļŦāđāļāđāļāļĄāļđāļĨāļ āļđāļĄāļīāļŠāļēāļĢāļŠāļāđāļāļĻ āđāļāļĒāļĄāļĩ:
āļāļąāđāļāļāļāļāļāļĩāđ 3: āļāļēāļĢāļāļēāļ§āđāļŦāļĨāļāļāđāļāļĄāļđāļĨāđāļ Code Editor GEE
// Load temperature image from project assets
var temperature = ee.Image("projects/ee-udomporn/assets/AvgSurfT");
// Calculate statistics
var stats = temperature.reduceRegion({
reducer: ee.Reducer.minMax(),
geometry: temperature.geometry(),
scale: 1000,
bestEffort: true
});
// Print statistics
print("Min/Max:", stats);
print("Bands:", temperature.bandNames());
print("Resolution:", temperature.projection().nominalScale());
print("Projection:", temperature.projection());
print("Image Geometry:", temperature.geometry());
// Load Thailand boundary (Example: FAO GAUL dataset)
var thailand = ee.FeatureCollection('FAO/GAUL/2015/level0')
.filter(ee.Filter.eq('ADM0_NAME', 'Thailand'));
});
āļāļąāđāļāļāļāļāļāļĩāđ 4: āļāļēāļĢāđāļĨāļ·āļāļ band āđāļĨāļ°āļāļēāļĢāļāļąāđāļāļāđāļēāļāļēāļĢāđāļŠāļāļāļāļĨ
// Select the first month of temperature data
var month1 = temperature.select('b1');
palette: ['blue', 'cyan', 'yellow', 'orange', 'red']
// Visualization settings
var visParams = {
min: 290,
max: 315,
palette: ['blue', 'cyan', 'yellow', 'orange', 'red']
āļāļąāđāļāļāļāļāļāļĩāđ 5: āļāļēāļĢāđāļŠāļāļāļāļĨāļāđāļāļĄāļđāļĨāđāļĨāļ°āļāļēāļĢāļāļĢāļąāļāđāļāđāļāđāļāļāļāļĩāđ
// Display results on map
Map.centerObject(thailand, 6);
Map.addLayer(month1, visParams, 'Temperature');
Map.addLayer(thailand.style({color: 'black', width: 1}), {}, 'Boundary');
Map
āļāļąāđāļāļāļāļāļāļĩāđ 6: āļāļēāļĢāđāļĨāļ·āļāļāđāļĨāļ°āļāļąāļāļāđāļāļĄāļđāļĨ āļāļąāļ§āļāļĒāđāļēāļāļāļāļāđāļāļāļāļĢāļļāļāđāļāļāļŊ
āļāļąāđāļāļāļāļāļāļĩāđ 7: āļāļēāļĢāļŠāđāļāļāļāļāļāđāļāļĄāļđāļĨāđāļāļāļāļĩāđāđāļāļĒāļąāļ Google Drive
Export.image.toDrive({
image: month1,
description: 'Thailand_SurfaceTemp',
folder: 'GEE', // Creates a folder named "GEE" in Google Drive
fileNamePrefix: 'AvgSurfT_Thailand',
region: thailand.geometry(),
scale: 1000, // Resolution in meters
crs: 'EPSG:4326',
maxPixels: 1e13
āļāļąāđāļāļāļāļāļāļĩāđ 8: āļāļēāļĢāļāļģāđāļāļīāļāļāļēāļĢāļāļēāļĢāļŠāđāļāļāļāļ
ð āļāļąāļ§āļāļĒāđāļēāļāđāļāđāļāļāļ :
GEE code editor
āļāļēāļĢāđāļāđ GEE Asset āđāļĨāļ° Project āļāļģāļāļēāļāđāļĨāļ°āļāļĢāļ°āļĄāļ§āļĨāļāļ Google Colab
āļāļąāđāļāļāļāļāļāļĩāđ 1: āļāļīāļāļāļąāđāļāđāļāđāļāđāļāļāļāļĩāđāļāļģāđāļāđāļ
āļāļģāđāļāđāļāļāđāļāļāļāļīāļāļāļąāđāļāđāļāđāļāđāļāļāļŠāļģāļŦāļĢāļąāļāļāļēāļĢāļāļģāļāļēāļāļāļąāļ Google Earth Engine āđāļ Colab:
# āļāļīāļāļāļąāđāļāđāļāđāļāđāļāļāļāļĩāđāļāļģāđāļāđāļ
!pip install geemap rasterio localtileserver
āļāļąāđāļāļāļāļāļāļĩāđ 2: āļāļģāđāļāđāļēāđāļĨāļāļĢāļēāļĢāļĩ
import ee
import geemap
import os
from google.colab import drive
import matplotlib.pyplot as plt
import rasterio
from rasterio.plot import show
import numpy as np
āļāļąāđāļāļāļāļāļāļĩāđ 3: āđāļāļ·āđāļāļĄāļāđāļ Google Drive āļāļąāļāđāļāļŠāļāļąāļ Colab āļāļāļāļāļļāļ
Google Colab āđāļĄāđāļŠāļēāļĄāļēāļĢāļāđāļāđāļēāļāļķāļāđāļāļĨāđāđāļāļĒāļāļĢāļāđāļāđ āļāļąāļāļāļąāđāļāļāļķāļāļāļģāđāļāđāļāļāđāļāļāđāļāļ·āđāļāļĄāļāđāļāļāļąāļ Google Drive āļāđāļāļāļāļēāļĢāđāļāđāļāļēāļ:
# āđāļĄāļēāļāđ Google Drive
drive.mount('/content/drive')
āļāļēāļĢāđāļŦāđāļŠāļīāļāļāļīāđāļāļēāļĢāđāļāđāļēāļāļķāļ
āļāļēāļĢāđāļāđāļēāļāļķāļāđāļāļĨāđāđāļ Google Drive
!ls /content/drive/MyDrive/
āļāļąāđāļāļāļāļāļāļĩāđ 4: āļĒāļ·āļāļĒāļąāļāļāļąāļ§āļāļāļāļąāļ Earth Engine
Earth Engine āļāļģāđāļāđāļāļāđāļāļāļĄāļĩāļāļēāļĢāļĒāļ·āļāļĒāļąāļāļāļąāļ§āļāļāđāļĨāļ°āļāļēāļĢāđāļĢāļīāđāļĄāļāđāļāļāđāļāļāđāļāđāļāļēāļāļāļąāļāļāđāļāļąāļāļāđāļēāļāđ
# āđāļĢāļīāđāļĄāļāđāļ Earth Engine
ee.Authenticate()
āļāļąāđāļāļāļāļāļāļēāļĢāļĒāļ·āļāļĒāļąāļāļāļąāļ§āļāļ
āļāļąāđāļāļāļāļāļāļĩāđ 5: āđāļĢāļīāđāļĄāļāđāļ Earth Engine āļāđāļ§āļĒāđāļāļĢāđāļāļāļāđāļāļāļāļāļļāļ
# āđāļĢāļīāđāļĄāļāđāļ Earth Engine
ee.Initialize(project='ee-udomporn') # āļāļ·āđāļāđāļāļĢāđāļāļāļāđ GEE āļāļāļāļāļļāļ
āļāļąāđāļāļāļāļāļāļĩāđ 6: āđāļŦāļĨāļāļāđāļāļĄāļđāļĨāļāļēāļ GEE Asset
# āđāļŦāļĨāļāļāđāļāļĄāļđāļĨāļāļēāļ GEE Asset
asset_id = "projects/ee-udomporn/assets/AvgSurfT"
temperature_image = ee.Image(asset_id)
āļāļąāđāļāļāļāļāļāļĩāđ 7: āļāļĢāļ§āļāļŠāļāļāļāđāļēāļāđāļģāļŠāļļāļ/āļŠāļđāļāļŠāļļāļāļŠāļģāļŦāļĢāļąāļāđāļāđāļĨāļ°āđāļāļāļāđ
āđāļāļ·āđāļāļ§āļīāđāļāļĢāļēāļ°āļŦāđāļāđāļ§āļāļāļāļāļāđāļēāļŠāļģāļŦāļĢāļąāļāđāļāđāļĨāļ°āđāļāļāļāđ (āđāļāđāļĨāļ°āđāļāļ·āļāļ) āđāļŦāđāļ§āļāļĨāļđāļāļāđāļēāļāđāļāļāļāđāđāļĨāļ°āļāļĢāļ§āļāļŠāļāļāļāđāļēāļāđāļģāļŠāļļāļ/āļŠāļđāļāļŠāļļāļ
for i in range(1, 6):
band_name = f'b{i}'
stats = temperature_image.select(band_name).reduceRegion(
reducer=ee.Reducer.minMax(),
geometry=temperature_image.geometry(),
scale=1000, # āļāļ§āļēāļĄāļĨāļ°āđāļāļĩāļĒāļāđāļāļŦāļāđāļ§āļĒāđāļĄāļāļĢ
maxPixels=1e9
).getInfo()
print(f'{band_name}: {stats}')
āļāļąāđāļāļāļāļāļāļĩāđ 8: āđāļĨāļ·āļāļ band āđāļĨāļ°āļāļāļāđāļāļāļāļĢāļ°āđāļāļĻāđāļāļĒ
# āđāļĨāļ·āļāļāđāļāļāļāđ 1 (āđāļāļ·āļāļāļāļĩāđ 1)
month1 = temperature_image.select('b1')
# āđāļŦāļĨāļāļāļāļāđāļāļāļāļĢāļ°āđāļāļĻāđāļāļĒāļāļēāļ FAO GAUL
# Load FAO GAUL Boundaries
fao_admin = ee.FeatureCollection("FAO/GAUL_SIMPLIFIED_500m/2015/level1")
# Filter for Thailand
thailand = fao_admin.filter(ee.Filter.eq('ADM0_NAME', 'Thailand'))
āļāļąāđāļāļāļāļāļāļĩāđ 9: āđāļĨāļ·āļāļāļāđāļāļĄāļđāļĨ
āļāļķāļāđāļāļāļāđ 1 (āđāļāļ·āļāļāļāļĩāđ 1) āđāļĨāļ°āļāļąāļāđāļŦāđāļāļāļāļĩāļāļąāļāļāļāļāđāļāļāļāļāļāļāļĢāļ°āđāļāļĻāđāļāļĒ
# āđāļĨāļ·āļāļāđāļāļāļāđ 1 (āđāļāļ·āļāļāļāļĩāđ 1)
month1 = temperature_image.select('b1')
āļāļąāđāļāļāļāļāļāļĩāđ 10: āđāļŠāļāļāļāđāļāļĄāļđāļĨāđāļ geemap
āļŠāļĢāđāļēāļāđāļāļāļāļĩāđāđāļāļāļāļīāļāđāļāļāļĢāđāđāļāļāļāļĩāļāđāļāļĒāđāļŦāđāļāļĢāļ°āđāļāļĻāđāļāļĒāļāļĒāļđāđāļāļĢāļāļāļĨāļēāļ
Map = geemap.Map(center=[13, 101], zoom=6)
# āļāļģāļŦāļāļāļāļēāļĢāļēāļĄāļīāđāļāļāļĢāđāļāļēāļĢāđāļŠāļāļāļāļĨ
vis_params = {
'min': 290,
'max': 315,
'palette': ['blue', 'cyan', 'yellow', 'orange', 'red']
}
# āļŠāļĢāđāļēāļāļŠāđāļāļĨāđāļŠāļģāļŦāļĢāļąāļāđāļŠāđāļāļāļāļāđāļāļ
thailand_outline = thailand.style(
color='black', # āļŠāļĩāđāļŠāđāļ
width=0.5, # āļāļ§āļēāļĄāļāļ§āđāļēāļāđāļŠāđāļ
fillColor='00000000' # āļŠāļĩāļāļ·āđāļāļŦāļĨāļąāļāđāļāļāđāļāļĢāđāļāđāļŠ
)
# āđāļāļīāđāļĄāđāļĨāđāļĒāļāļĢāđāļĨāļāđāļāđāļāļāļāļĩāđ
Map.addLayer(month1, vis_params, 'Surface Temp')
Map.addLayer(thailand_outline, {}, 'Thailand Boundary (Thin)')
Map.add_colorbar(vis_params, label='Temperature (K)')
Map.addLayerControl()
Map
āļāļąāđāļāļāļāļāļāļĩāđ 11: āļāļēāļĢāđāļĨāļ·āļāļāđāļĨāļ°āļāļąāļāļāđāļāļĄāļđāļĨ āļāļąāļ§āļāļĒāđāļēāļāļāļāļāđāļāļāļāļĢāļļāļāđāļāļāļŊ
# āļāļĢāļāļāļāļāļāđāļāļāđāļāļāļēāļ°āļāļĢāļļāļāđāļāļāļŊ
bangkok = thailand.filter(ee.Filter.eq('ADM1_NAME', 'Bangkok'))
# āļāļąāļāļāđāļāļĄāļđāļĨāđāļāļāļēāļ°āļāļĢāļļāļāđāļāļāļŊ
bangkok_clipped = month1.clip(bangkok)
# āļāļēāļĢāđāļŠāļāļāļāļĨāļāđāļāļĄāļđāļĨāļāļļāļāļŦāļ āļđāļĄāļīāđāļāļāļēāļ°āļāļĢāļļāļāđāļāļāļŊ
Map.addLayer(bangkok_clipped, vis_params, 'Surface Temperature for Bangkok') # āļĄāļĩāļĻāļđāļāļĒāđāļāļĨāļēāļāļāļĩāđāļāļĢāļļāļāđāļāļāļŊ
Map
āļāļąāđāļāļāļāļāļāļĩāđ 12: āļŠāđāļāļāļāļāļāđāļāļĄāļđāļĨāđāļāļĒāļąāļ Google Drive
# āļŠāđāļāļāļāļāđāļāļĒāļąāļ Google Drive
task = ee.batch.Export.image.toDrive(
image=clipped_image,
description='Thailand_SurfaceTemp',
folder='GEE_Export', # āđāļāļĨāđāļāļāļĢāđāđāļ Google Drive āļāļāļāļāļļāļ
fileNamePrefix='AvgSurfT_Thailand',
region=thailand.geometry(),
scale=1000,
crs='EPSG:4326',
maxPixels=1e13
)
task.start()
print('āđāļĢāļīāđāļĄāļāļēāļāļŠāđāļāļāļāļāđāļĨāđāļ§ āļāļĢāļ§āļāļŠāļāļāđāļāđāļ Earth Engine Tasks')
āļŦāļĨāļąāļāļāļēāļāļāļēāļĢāļŠāđāļāļāļāļāđāļŠāļĢāđāļāļŠāļĄāļāļđāļĢāļāđāđāļāđāļāđāļ GEE Task
# āļāļēāļ§āļāđāđāļŦāļĨāļāļāļēāļ Drive āđāļāļĒāļąāļ Colab
!cp /content/drive/MyDrive/GEE_Export/AvgSurfT_Thailand.tif /content/
# āļāļēāļ§āļāđāđāļŦāļĨāļāđāļāļĒāļąāļāļāļāļĄāļāļīāļ§āđāļāļāļĢāđāļāļāļāļāļļāļ
files.download('/content/AvgSurfT_Thailand.tif')
ð āļāļąāļ§āļāļĒāđāļēāļāđāļāđāļāļāļ : Google Colab
āļāļēāļĢāđāļāđāļāļēāļ Google Earth Engine āļŠāļģāļŦāļĢāļąāļāļāļēāļĢāļ§āļīāđāļāļĢāļēāļ°āļŦāđāļāđāļāļĄāļđāļĨāđāļāļīāļāļāļ·āđāļāļāļĩāđāđāļ Python
āļāļāđāļāļ°āļāļģāļāļĩāđāđāļŠāļāļāļ§āļīāļāļĩāļāļēāļĢāļ§āļīāđāļāļĢāļēāļ°āļŦāđāđāļĨāļ°āđāļŠāļāļāļāļĨāļāđāļāļĄāļđāļĨāļāļļāļāļŦāļ āļđāļĄāļīāđāļāļīāļāļāļ·āđāļāļāļĩāđāđāļāļĒāđāļāđ Google Earth Engine (GEE) āđāļĨāļ° Python āđāļĢāļēāļāļ°āļāļĢāļāļāļāļĨāļļāļĄāļāļēāļĢāļĒāļ·āļāļĒāļąāļāļāļąāļ§āļāļ, āļāļēāļĢāđāļŦāļĨāļāļāđāļāļĄāļđāļĨāļāļēāļ Earth Engine, āļāļēāļĢāļāļĢāļ°āļĄāļ§āļĨāļāļĨāļāđāļāļĄāļđāļĨ āđāļĨāļ°āļāļēāļĢāļŠāļĢāđāļēāļāđāļāļāļāļĩāđāđāļāļāđāļāđāļāļāļ
āļāļąāđāļāļāļāļāļāļēāļĢāļāļģāļāļēāļāļāļąāļ Earth Engine
āļāļąāđāļāļāļāļāļāļĩāđ 1. āļāļēāļĢāļāļīāļāļāļąāđāļ geemap āđāļĨāļ°āđāļĨāļāļĢāļēāļĢāļĩāļāļĩāđāļāļģāđāļāđāļ:
# āļāļīāļāļāļąāđāļ geemap āđāļĨāļ°āđāļĨāļāļĢāļēāļĢāļĩāļāļĩāđāđāļāļĩāđāļĒāļ§āļāđāļāļ
!pip install geemap earthengine-api
āļāļąāđāļāļāļāļāļāļĩāđ 2. āļāļēāļĢāļĒāļ·āļāļĒāļąāļāļāļąāļ§āļāļāļāļąāļ Earth Engine
import ee
# āļĒāļ·āļāļĒāļąāļāļāļąāļ§āļāļ
ee.Authenticate()
āļāļąāđāļāļāļāļāļāļĩāđ 3. āđāļĢāļīāđāļĄāļāđāļāđāļāđāļāļēāļ Earth Engine āļāļąāļāđāļāļĢāđāļāļāļāđāļāļāļāļāļļāļ
# āđāļĢāļīāđāļĄāļāđāļāđāļāđāļāļēāļ Earth Engine āļāļąāļāđāļāļĢāđāļāļāļāđāđāļāļāļēāļ°āļāļāļāļāļļāļ
ee.Initialize(project='ee-udomporn') # āđāļāļāļāļĩāđāļāđāļ§āļĒāļāļ·āđāļāđāļāļĢāđāļāļāļāđ GEE āļāļāļāļāļļāļ
āļāļąāđāļāļāļāļāļāļĩāđ 4. āđāļŦāļĨāļāļāđāļāļĄāļđāļĨāļāļēāļāđāļŦāļĨāđāļāļāđāļāļĄāļđāļĨ GEE
# āđāļŦāļĨāļāļāđāļāļĄāļđāļĨāļāļļāļāļŦāļ āļđāļĄāļīāļāļēāļāđāļŦāļĨāđāļāļāđāļāļĄāļđāļĨ Earth Engine āļāļāļāļāļļāļ
asset_id = "projects/ee-udomporn/assets/AvgSurfT"
temperature_image = ee.Image(asset_id)
# āļāļīāļĄāļāđāļāđāļāļĄāļđāļĨāļāļ·āđāļāļāļēāļāđāļāļĩāđāļĒāļ§āļāļąāļāļ āļēāļ
print(temperature_image.bandNames().getInfo())
āļāļąāđāļāļāļāļāļāļĩāđ 5. āļāļĢāļ§āļāļŠāļāļāļāđāļēāļāđāļģāļŠāļļāļ/āļŠāļđāļāļŠāļļāļāļŠāļģāļŦāļĢāļąāļāđāļāđāļĨāļ°āđāļāļāļāđ
# āļāļąāļāļāđāļāļąāļāđāļāļ·āđāļāļĢāļąāļāļāđāļēāļŠāļāļīāļāļīāļāđāļģāļŠāļļāļ/āļŠāļđāļāļŠāļļāļāļŠāļģāļŦāļĢāļąāļāđāļāļāļāđ
def get_band_stats(image, band_name):
stats = image.select(band_name).reduceRegion(
reducer=ee.Reducer.minMax(),
geometry=image.geometry(),
scale=1000,
maxPixels=1e9
)
return stats.getInfo()
# āļĢāļąāļāļāļ·āđāļāđāļāļāļāđ
band_names = temperature_image.bandNames().getInfo()
# āļāļīāļĄāļāđāļŠāļāļīāļāļīāļŠāļģāļŦāļĢāļąāļāđāļāđāļĨāļ°āđāļāļāļāđ
for band in band_names:
stats = get_band_stats(temperature_image, band)
print(f"āđāļāļāļāđ {band}: āļāđāļģāļŠāļļāļ = {stats[band+'_min']}, āļŠāļđāļāļŠāļļāļ = {stats[band+'_max']}")
āļāļąāđāļāļāļāļāļāļĩāđ 6. āđāļŦāļĨāļāļāļāļāđāļāļāļāļĢāļ°āđāļāļĻāđāļāļĒāļāļēāļ FAO GAUL
# āđāļŦāļĨāļāļāļāļāđāļāļāļāļĢāļ°āđāļāļĻāđāļāļĒāļāļēāļāļāļąāđāļāļāđāļāļĄāļđāļĨāļŦāļāđāļ§āļĒāļāļēāļĢāļāļāļāļĢāļāļāļāļąāđāļ§āđāļĨāļāļāļāļ FAO
thailand = ee.FeatureCollection('FAO/GAUL/2015/level0')\
.filter(ee.Filter.eq('ADM0_NAME', 'Thailand'))
# āļāļīāļĄāļāđāļāđāļāļĄāļđāļĨāđāļāļĩāđāļĒāļ§āļāļąāļāļāļāļāđāļāļ
print(f"āļāļāļāđāļāļāļāļĢāļ°āđāļāļĻāđāļāļĒ: {thailand.first().getInfo()['properties']['ADM0_NAME']}")
āļāļąāđāļāļāļāļāļāļĩāđ 7. āđāļŠāļāļāļāđāļāļĄāļđāļĨāđāļ GeeMap
import geemap
# āļŠāļĢāđāļēāļāđāļāļāļāļĩāđāđāļāļĒāļĄāļĩāļĻāļđāļāļĒāđāļāļĨāļēāļāļāļĩāđāļāļĢāļ°āđāļāļĻāđāļāļĒ
Map = geemap.Map(center=[13, 101], zoom=6)
# āļāļģāļŦāļāļāļāļēāļĢāļēāļĄāļīāđāļāļāļĢāđāļāļēāļĢāđāļŠāļāļāļāļĨ
vis_params = {
'min': 290,
'max': 315,
'palette': ['blue', 'cyan', 'yellow', 'orange', 'red']
}
# āļŠāļĢāđāļēāļāļāļāļāļēāļāļļāļāļĢāļĄāļŠāđāļāļĨāđāļŠāļģāļŦāļĢāļąāļāđāļŠāđāļāļāļāļāđāļāļāļāļēāļ
thailand_outline = thailand.style(
color='black', # āļŠāļĩāđāļŠāđāļ
width=0.5, # āļāļ§āļēāļĄāļāļ§āđāļēāļāđāļŠāđāļ
fillColor='00000000' # āļŠāļĩāļāļ·āđāļāđāļāļĢāđāļāđāļŠ
)
# āđāļāļīāđāļĄāļāļąāđāļāļāđāļāļĄāļđāļĨāļĨāļāđāļāđāļāļāļāļĩāđ
Map.addLayer(clipped_image, vis_params, 'āļāļļāļāļŦāļ āļđāļĄāļīāļāļ·āđāļāļāļīāļ§āļāļĢāļ°āđāļāļĻāđāļāļĒ')
Map.addLayer(thailand_outline, {}, 'āļāļāļāđāļāļāļāļĢāļ°āđāļāļĻāđāļāļĒ (āļāļēāļ)')
Map.add_colorbar(vis_params, label='āļāļļāļāļŦāļ āļđāļĄāļī (K)')
Map.addLayerControl()
# āđāļŠāļāļāđāļāļāļāļĩāđ
Map
āļāļąāđāļāļāļāļāļāļĩāđ 8. āļāļēāļĢāđāļĨāļ·āļāļāđāļĨāļ°āļāļąāļāļāđāļāļĄāļđāļĨāļāļēāļĄāļāļāļāđāļāļāļāļĢāļļāļāđāļāļāļŊ
# āđāļŦāļĨāļāļāļāļāđāļāļāļāļēāļĢāļāļāļāļĢāļāļāļĢāļ°āļāļąāļ 1 āļāļāļāđāļāļĒ (āļāļąāļāļŦāļ§āļąāļ)
provinces = ee.FeatureCollection('FAO/GAUL/2015/level1')\
.filter(ee.Filter.eq('ADM0_NAME', 'Thailand'))
# āļāļĢāļāļāđāļāļ·āđāļāļĢāļąāļāđāļāļāļēāļ°āļāļĢāļļāļāđāļāļāļŊ
bangkok = provinces.filter(ee.Filter.eq('ADM1_NAME', 'Bangkok'))
# āļāļīāļĄāļāđāļāļ·āđāļāđāļāļ·āđāļāļāļĢāļ§āļāļŠāļāļ
print(f"āļāļ·āđāļāļāļĩāđāļāļĩāđāđāļĨāļ·āļāļ: {bangkok.first().getInfo()['properties']['ADM1_NAME']}")
# āđāļĨāļ·āļāļāđāļāļāļāđ 1 (āđāļāļ·āļāļ 1)
month1 = temperature_image.select('b1')
# āļāļąāļāļ āļēāļāļāļēāļĄāļāļāļāđāļāļāļāļĢāļļāļāđāļāļāļŊ
bangkok_clipped = month1.clip(bangkok)
āļāļąāđāļāļāļāļāļāļĩāđ 9. āļāļēāļĢāđāļŠāļāļāļāļĨāļāđāļāļĄāļđāļĨāļāļļāļāļŦāļ āļđāļĄāļīāļāļĢāļļāļāđāļāļāļŊ
# āļŠāļĢāđāļēāļāđāļāļāļāļĩāđāđāļāļĒāļĄāļĩāļĻāļđāļāļĒāđāļāļĨāļēāļāļāļĩāđāļāļĢāļļāļāđāļāļāļŊ
Map = geemap.Map(center=[13.7563, 100.5018], zoom=10) # āļĄāļĩāļĻāļđāļāļĒāđāļāļĨāļēāļāļāļĩāđāļāļĢāļļāļāđāļāļāļŊ
# āļāļģāļŦāļāļāļāļēāļĢāļēāļĄāļīāđāļāļāļĢāđāļāļēāļĢāđāļŠāļāļāļāļĨ
vis_params = {
'min': 290,
'max': 315,
'palette': ['blue', 'cyan', 'yellow', 'orange', 'red']
}
# āļŠāļĢāđāļēāļāļāļāļāļēāļāļļāļāļĢāļĄāļŠāđāļāļĨāđāļŠāļģāļŦāļĢāļąāļāđāļŠāđāļāļāļāļāđāļāļāļāļēāļ
bangkok_outline = bangkok.style(
color='black', # āļŠāļĩāđāļŠāđāļ
width=1, # āļāļ§āļēāļĄāļāļ§āđāļēāļāđāļŠāđāļ
fillColor='00000000' # āļŠāļĩāļāļ·āđāļāđāļāļĢāđāļāđāļŠ
)
# āđāļāļīāđāļĄāļāļąāđāļāļāđāļāļĄāļđāļĨāļĨāļāđāļāđāļāļāļāļĩāđ
Map.addLayer(bangkok_clipped, vis_params, 'āļāļļāļāļŦāļ āļđāļĄāļīāļāļ·āđāļāļāļīāļ§āļāļĢāļļāļāđāļāļāļŊ')
Map.addLayer(bangkok_outline, {}, 'āļāļāļāđāļāļāļāļĢāļļāļāđāļāļāļŊ')
Map.add_colorbar(vis_params, label='āļāļļāļāļŦāļ āļđāļĄāļī (K)')
Map.addLayerControl()
# āđāļŠāļāļāđāļāļāļāļĩāđ
Map
āļāļąāđāļāļāļāļāļāļĩāđ 10. āļāļēāļĢāļŠāđāļāļāļāļāļāđāļāļĄāļđāļĨ Earth Engine āđāļāļĒāļąāļāđāļāļĢāļāđāđāļāđāļāļĢāļ·āđāļāļāļāļāļāļāļļāļ
# āļŠāđāļāļāļāļāđāļāđāļāļĢāļđāļāļ āļēāļ PNG
Map.to_image('bangkok_temperature_map.png')
print("āļŠāđāļāļāļāļāđāļāļāļāļĩāđāđāļāđāļ PNG āļŠāļģāđāļĢāđāļāđāļĨāđāļ§")
# āļŠāđāļāļāļāļāđāļāđāļāđāļāļĨāđ JPG
Map.to_jpg('bangkok_temperature_map.jpg')
print("āļŠāđāļāļāļāļāđāļāļāļāļĩāđāđāļāđāļ JPG āļŠāļģāđāļĢāđāļāđāļĨāđāļ§")
# āļŠāđāļāļāļāļāđāļāđāļāđāļāļĨāđ PDF
Map.to_pdf('bangkok_temperature_map.pdf')
print("āļŠāđāļāļāļāļāđāļāļāļāļĩāđāđāļāđāļ PDF āļŠāļģāđāļĢāđāļāđāļĨāđāļ§")
import os
# āļāļąāđāļāļāđāļēāđāļāđāļĢāļāļāļāļĢāļĩāļŠāļģāļŦāļĢāļąāļāļāļąāļāļāļķāļāđāļāļĨāđ
output_dir = './exports'
if not os.path.exists(output_dir):
os.makedirs(output_dir)
# āļāļģāļŦāļāļ path āļāļĩāđāļāļ°āļāļąāļāļāļķāļāđāļāļĨāđ
output_file = os.path.join(output_dir, 'bangkok_temp.tif')
# āļŠāđāļāļāļāļāļāđāļāļĄāļđāļĨāđāļāđāļāđāļāļĨāđ GeoTIFF āđāļāļāđāļĄāđāļāđāļēāļ Google Drive
geemap.ee_export_image(
bangkok_clipped, # āļ āļēāļāļāļĩāđāļāđāļāļāļāļēāļĢāļŠāđāļāļāļāļ
filename=output_file, # āļāļ·āđāļāđāļāļĨāđ
scale=100, # āļāļ§āļēāļĄāļĨāļ°āđāļāļĩāļĒāļ
region=bangkok.geometry(), # āļāļ·āđāļāļāļĩāđāļāļĩāđāļāđāļāļāļāļēāļĢāļŠāđāļāļāļāļ
file_per_band=False
)
print(f"āļŠāđāļāļāļāļāļāđāļāļĄāļđāļĨāđāļāļĒāļąāļ {output_file} āļŠāļģāđāļĢāđāļāđāļĨāđāļ§")
āļāļēāļĢāđāļāđ geemap āđāļ Jupyter Notebook āļāļģāđāļŦāđāļāļļāļāļŠāļēāļĄāļēāļĢāļāļ§āļīāđāļāļĢāļēāļ°āļŦāđāđāļĨāļ°āđāļŠāļāļāļāļĨāļāđāļāļĄāļđāļĨāđāļāļīāļāļāļ·āđāļāļāļĩāđāđāļāđāļāļĒāđāļēāļāļĄāļĩāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļ āđāļĨāļ°āļŠāļēāļĄāļēāļĢāļāļŠāđāļāļāļāļāļāļĨāļĨāļąāļāļāđāđāļāļĢāļđāļāđāļāļāļāđāļēāļāđ āļāļēāļĄāļāļ§āļēāļĄāļāđāļāļāļāļēāļĢāļāļāļāļāļļāļāđāļāđ
ð āļāļąāļ§āļāļĒāđāļēāļāđāļāđāļāļāļ Jupyter Notebook
āļāļēāļĢāļāđāļēāļāļāđāļāļĄāļđāļĨāđāļāļīāļāļāļ·āđāļāļāļĩāđāđāļ Python
āļāļēāļĢāļāļģāļāļēāļāļāļąāļāļāđāļāļĄāļđāļĨāļ āļđāļĄāļīāļŠāļēāļĢāļŠāļāđāļāļĻāđāļāđāļāļĢāļ·āđāļāļāļĄāļĩāļāđāļāļāļĩāļĄāļēāļāļĄāļēāļĒ āđāļāđāļ āļāļēāļĢāļāļĢāļ°āļĄāļ§āļĨāļāļĨāļāļĩāđāļĢāļ§āļāđāļĢāđāļ§āļāļķāđāļ āļāļ§āļēāļĄāđāļāđāļāļŠāđāļ§āļāļāļąāļ§āļāļĩāđāđāļāļīāđāļĄāļāļķāđāļ āđāļĨāļ°āļāļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļāđāļāļāļēāļĢāļāļģāļāļēāļāđāļāļĒāđāļĄāđāļāđāļāļāđāļāļ·āđāļāļĄāļāđāļāļāļąāļāļāļīāļāđāļāļāļĢāđāđāļāđāļ āļāļđāđāļĄāļ·āļāļāļĩāđāļĄāļļāđāļāđāļāđāļāđāļāļāļĩāđāļĢāļđāļāđāļāļāļāđāļāļĄāļđāļĨāļ āļđāļĄāļīāļŠāļēāļĢāļŠāļāđāļāļĻāļāļĩāđāļŠāļģāļāļąāļāļŠāļāļāļāļĢāļ°āđāļ āļ āđāļāđāđāļāđ āđāļāļĨāđ GeoTIFF āđāļĨāļ° NetCDF āđāļāļĒāđāļŦāđāļāļģāđāļāļ°āļāļģāļāļĩāđāļāļĢāļāļāļāļĨāļļāļĄāđāļāļĩāđāļĒāļ§āļāļąāļāļāļēāļĢāļāļąāđāļāļāđāļēāļŠāļ āļēāļāđāļ§āļāļĨāđāļāļĄ āļāļēāļĢāđāļŦāļĨāļāļāđāļāļĄāļđāļĨ āđāļāļāļāļīāļāļāļēāļĢāđāļŠāļāļāļāļĨ āđāļĨāļ°āļāļēāļĢāļāļāļīāļāļąāļāļīāļāļēāļĢāđāļāļīāļāļāļ·āđāļāļāļĩāđāļāļąāđāļāļŠāļđāļ
āđāļĄāđāļ§āđāļēāļāļļāļāļāļ°āļāļģāļĨāļąāļāļ§āļīāđāļāļĢāļēāļ°āļŦāđāļ āļēāļāļāļēāļāļāļēāļĢāļŠāļģāļĢāļ§āļāļĢāļ°āļĒāļ°āđāļāļĨ āļāđāļāļĄāļđāļĨāļŠāļ āļēāļāļ āļđāļĄāļīāļāļēāļāļēāļĻ āļŦāļĢāļ·āļāļŠāļĢāđāļēāļāđāļāļāļāļĩāđāđāļāļāļēāļ°āļāļēāļ āļāļģāđāļāļ°āļāļģāļāļĩāļĨāļ°āļāļąāđāļāļāļāļāđāļŦāļĨāđāļēāļāļĩāđāļāļ°āļāđāļ§āļĒāđāļŦāđāļāļļāļāļŠāļĢāđāļēāļāļāļĢāļ°āļāļ§āļāļāļēāļĢāļāļģāļāļēāļāļ āļđāļĄāļīāļŠāļēāļĢāļŠāļāđāļāļĻāđāļāļāļāļāļāđāļĨāļāđāļāļĩāđāļĄāļĩāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļāđāļ Python āđāļāđ āđāļĄāļ·āđāļāļāļāļāļđāđāļĄāļ·āļāļāļĩāđ āļāļļāļāļāļ°āļŠāļēāļĄāļēāļĢāļāļāļąāļāļāļēāļĢāļāđāļāļĄāļđāļĨāļ āļđāļĄāļīāļŠāļēāļĢāļŠāļāđāļāļĻāđāļāđāļāļĒāđāļēāļāļĄāļąāđāļāđāļ āļŠāļĢāđāļēāļāļ āļēāļāļāđāļāļĄāļđāļĨāļāļĩāđāđāļŦāđāļāļ§āļēāļĄāļĢāļđāđ āđāļĨāļ°āļāļģāđāļāļīāļāļāļēāļĢāļāļēāļāļ āļđāļĄāļīāļĻāļēāļŠāļāļĢāđāļāļąāđāļ§āđāļ āđāļāđāļ āļāļēāļĢāļāļąāļāļāđāļāļĄāļđāļĨāđāļŦāđāđāļāđāļēāļāļąāļāļ āļđāļĄāļīāļ āļēāļāļāļĩāđāđāļāļāļēāļ°āđāļāļēāļ°āļāļ
- āļāļēāļĢāļāļąāđāļāļāđāļē Python
- āļāļēāļĢāļāđāļēāļ GeoTIFF
- āļāļēāļĢāļāđāļēāļ NetCDF
āļāļēāļĢāļāļąāđāļāļāđāļēāļŠāļ āļēāļāđāļ§āļāļĨāđāļāļĄ Python āļŠāļģāļŦāļĢāļąāļāļ āļđāļĄāļīāļŠāļēāļĢāļŠāļāđāļāļĻ (Windows)
āļāļąāđāļāļāļāļāļāļĩāđ 1: āļāļīāļāļāļąāđāļ Anaconda (āđāļāļ°āļāļģ Python 3.10):
āļāļēāļ§āļāđāđāļŦāļĨāļ Anaconda āđāļāđāļāļĩāđ Anaconda Download
āļāļđāđāļĄāļ·āļāļāļĩāđāļāļ°āđāļāļ°āļāļģāļ§āļīāļāļĩāļāļēāļĢāļāļąāđāļāļāđāļēāļŠāļ āļēāļāđāļ§āļāļĨāđāļāļĄ Python āļŠāļģāļŦāļĢāļąāļāļ āļđāļĄāļīāļŠāļēāļĢāļŠāļāđāļāļĻāđāļ Windows āļāļĢāđāļāļĄāļāļąāļāđāļĨāļāļĢāļēāļĢāļĩāļāļĩāđāļŠāļģāļāļąāļāļāļąāđāļāļŦāļĄāļāļŠāļģāļŦāļĢāļąāļāļāļēāļĢāļ§āļīāđāļāļĢāļēāļ°āļŦāđāļāđāļāļĄāļđāļĨāļ āļđāļĄāļīāļŠāļēāļĢāļŠāļāđāļāļĻ āļāļēāļĢāđāļŠāļāļāļāļĨ āđāļĨāļ°āļāļēāļĢāļāļĢāļ°āļĄāļ§āļĨāļāļĨ
āļāļąāđāļāļāļāļāļāļĩāđ 2. āļŠāļĢāđāļēāļāļŠāļ āļēāļāđāļ§āļāļĨāđāļāļĄ Conda āđāļŦāļĄāđ (geo_env)
conda create -n geo_env python=3.10
conda activate geo_env
āļāļąāđāļāļāļāļāļāļĩāđ 3. āļāļīāļāļāļąāđāļāđāļāđāļāđāļāļ GeoPython āļāļĩāđāļāļģāđāļāđāļ
conda install -c conda-forge rasterio geopandas xarray geemap localtileserver jupyterlab notebook earthengine-api ipykernel
āļāļąāđāļāļāļāļāļāļĩāđ 4. āđāļāļīāđāļĄ geo_env āđāļāļĒāļąāļāđāļāļāļĢāđāđāļāļĨ Jupyter Notebook
python -m ipykernel install --user --name=geo_env --display-name "Python (geo_env)"
āļāļąāđāļāļāļāļāļāļĩāđ 5. āđāļāļīāļ Jupyter Notebook
jupyter notebook
â āļāļāļŠāļāļāļāļēāļĢāļāļąāđāļāļāđāļēāļāļāļāļāļļāļ
import rasterio
import geemap
print("āļāļļāļāļāļĒāđāļēāļāļāļģāļāļēāļāđāļāđ â
")
conda activate geo_env
jupyter notebook
6. āļāļēāļĢāđāļāđāđāļāļāļąāļāļŦāļēāļāļąāđāļ§āđāļ
conda install -c conda-forge rasterio
conda install -c conda-forge geopandas
conda install -c conda-forge xarray
# āđāļĨāļ°āļāļ·āđāļāđ...
conda install -c conda-forge gdal
āļāđāļāļāļīāļāļāļĨāļēāļāļŦāļāđāļ§āļĒāļāļ§āļēāļĄāļāļģāļĢāļ°āļŦāļ§āđāļēāļāļāļēāļĢāļāļīāļāļāļąāđāļ
āļāļ§āļēāļĄāļāļąāļāđāļĒāđāļāļāļāļāđāļ§āļāļĢāđāļāļąāļ Python
conda create -n geo_env python=3.9 # āļŦāļĢāļ·āļāđāļ§āļāļĢāđāļāļąāļāļāļ·āđāļ
āļāļēāļĢāļāļąāļāđāļāļāļŠāļ āļēāļāđāļ§āļāļĨāđāļāļĄāļāļāļāļāļļāļ
conda update --all
pip install rasterio geopandas xarray geemap
āđāļāđāļāđāļāļāļāļĩāđāđāļāđāļāļāļĢāļ°āđāļĒāļāļāđāđāļāļīāđāļĄāđāļāļīāļĄ
conda install -c conda-forge matplotlib seaborn plotly contextily folium rasterstats
ð āļāļīāđāļĻāļĐ: āļāļēāļĢāļāļąāđāļāļāđāļēāļāļēāļĢāļĒāļ·āļāļĒāļąāļāļāļąāļ§āļāļ Google Earth Engine
āļŦāļēāļāļāļļāļāļāļģāļĨāļąāļāđāļāđ Google Earth Engine (GEE) āļāļļāļāļāļ°āļāđāļāļāļĒāļ·āļāļĒāļąāļāļāļąāļ§āļāļ:
import ee
ee.Authenticate() # āļāļģāļāļēāļĄāļāļģāđāļāļ°āļāļģāđāļāđāļāļĢāļēāļ§āđāđāļāļāļĢāđāļāļāļāļāļļāļ
ee.Initialize()
āļāļēāļĢāļāļąāļāļāļēāļĢāļāđāļāļĄāļđāļĨ GeoTIFF āđāļĨāļ°āļāļēāļĢāđāļŠāļāļāļāļĨ
āļāļđāđāļĄāļ·āļāđāļāļ°āļāļģāļāļĩāđāđāļŠāļāļāļ§āļīāļāļĩāļāļēāļĢāļāļģāļāļēāļāļāļąāļāļāđāļāļĄāļđāļĨ GeoTIFF āđāļāļāļāļāļāđāļĨāļāđāđāļāļĒāđāļāđ Python āļāļļāļāļāļ°āđāļāđāđāļĢāļĩāļĒāļāļĢāļđāđāļ§āļīāļāļĩāļāļēāļĢāļāļēāļ§āļāđāđāļŦāļĨāļ āļāđāļēāļ āđāļŠāļāļāļāļĨ āđāļĨāļ°āļāļĢāļąāļāđāļāļĨāļĩāđāļĒāļāļāđāļāļĄāļđāļĨāđāļĢāļŠāđāļāļāļĢāđāļ āļđāļĄāļīāļŠāļēāļĢāļŠāļāđāļāļĻ āđāļāļĒāļāļąāđāļāļŦāļĄāļāļāļ°āļāļģāđāļāļīāļāļāļēāļĢāđāļāđāļāļĢāļ·āđāļāļāļāļāļāļāļļāļāđāļāļ āļ§āļīāļāļĩāļāļĩāđāđāļŦāļĄāļēāļ°āļāļĒāđāļēāļāļĒāļīāđāļāļŠāļģāļŦāļĢāļąāļāļŠāļ āļēāļāđāļ§āļāļĨāđāļāļĄāļāļĩāđāļĄāļĩāļāļēāļĢāđāļāļ·āđāļāļĄāļāđāļāļāļīāļāđāļāļāļĢāđāđāļāđāļāļāļģāļāļąāļāļŦāļĢāļ·āļāđāļĄāļ·āđāļāļāļģāļāļēāļāļāļąāļāļāļļāļāļāđāļāļĄāļđāļĨāļāļāļēāļāđāļŦāļāđ
āļāđāļāļāļģāļŦāļāļāđāļāļ·āđāļāļāļāđāļ â āļāļĢāļ§āļāļŠāļāļāļāļēāļĢāļāļīāļāļāļąāđāļāđāļāđāļāđāļāļ āđāļāļ·āđāļāđāļŦāđāļĄāļąāđāļāđāļāļ§āđāļēāđāļāđāļāđāļāļāļāļąāđāļāļŦāļĄāļāļāļđāļāļāļīāļāļāļąāđāļāļāļĒāđāļēāļāļāļđāļāļāđāļāļ:
āļāļĢāļ§āļāļŠāļāļāļāļēāļĢāļāļīāļāļāļąāđāļāđāļāđāļāđāļāļ
# āļāļāļŠāļāļāļāļēāļĢāļāļģāđāļāđāļēāđāļāđāļĨāļ°āđāļāđāļāđāļāļ
import rasterio
import geopandas
import matplotlib
import numpy
import requests
print("āļāļģāđāļāđāļēāđāļāđāļāđāļāļāļāļąāđāļāļŦāļĄāļāļŠāļģāđāļĢāđāļ!")
āļāļąāđāļāļāļāļāļāļēāļĢāļāļģāļāļēāļ
āļāļąāđāļāļāļāļāļāļĩāđ 1. āļāļēāļ§āļāđāđāļŦāļĨāļ GeoTIFF āļāļēāļāđāļāļĨāļāļāļāļĢāđāļĄāļāļāļāđāļĢāļēāđāļĨāļ°āļāļąāļāļāļķāļāđāļāđāļāļĢāļ·āđāļāļ
import requests
# āļĨāļīāļāļāđāļāļēāļ§āļāđāđāļŦāļĨāļāđāļāļĒāļāļĢāļāļāļēāļāđāļāļĨāļāļāļāļĢāđāļĄ
url = "https://dl.dropboxusercontent.com/scl/fi/ijfjpdntc1qv068wjlbbb/AvgSurfT.tif?rlkey=wx9lgdgkcf2ahrymemln1y37v&dl=0"
output_path = "AvgSurfT.tif"
# āļāļēāļ§āļāđāđāļŦāļĨāļāđāļĨāļ°āļāļąāļāļāļķāļāđāļāđāļāļĢāļ·āđāļāļ
response = requests.get(url)
with open(output_path, "wb") as f:
f.write(response.content)
print("āļāļēāļ§āļāđāđāļŦāļĨāļāđāļāļĨāđāđāļĨāļ°āļāļąāļāļāļķāļāđāļāđāļ:", output_path)
āļāļąāđāļāļāļāļāļāļĩāđ 2. āļāđāļēāļāđāļāļĨāđ GeoTIFF āđāļĨāļ°āļŠāļģāļĢāļ§āļāļāļļāļāļŠāļĄāļāļąāļāļī
import rasterio
# āđāļāļīāļāđāļāļĨāđ GeoTIFF
with rasterio.open("AvgSurfT.tif") as dataset:
print("āļāđāļāļĄāļđāļĨāđāļĄāļāļē:", dataset.profile)
print("CRS:", dataset.crs)
print("āļāļģāļāļ§āļāđāļāļāļāđ:", dataset.count)
āļāļąāđāļāļāļāļāļāļĩāđ 3. āļāđāļēāļāļāđāļāļĄāļđāļĨāđāļāļāļāđāđāļĨāļ°āļāļģāļāļ§āļāļŠāļāļīāļāļī
import numpy as np
with rasterio.open("AvgSurfT.tif") as dataset:
band1 = dataset.read(1).astype("float64") # āļāđāļēāļāđāļāļāļāđāđāļĢāļ
valid_data = band1[~np.isnan(band1)] # āļāļąāļ NaNs āļāļāļ
stats = {
'min': float(np.min(valid_data)),
'max': float(np.max(valid_data)),
'mean': float(np.mean(valid_data)),
'std': float(np.std(valid_data))
}
print("āļŠāļāļīāļāļīāđāļāļāļāđ 1:", stats)
āļāļąāđāļāļāļāļāļāļĩāđ 4. āđāļŠāļāļāļ āļēāļāļāđāļāļĄāļđāļĨāđāļāļāļāđ
import matplotlib.pyplot as plt
plt.figure(figsize=(6, 8))
plt.imshow(band1, cmap='hot_r', vmin=280, vmax=320)
plt.colorbar(label="āļāļļāļāļŦāļ āļđāļĄāļī (K)")
plt.title("AvgSurfT - āđāļāļāļāđ 1")
plt.xlabel("X (āļāļīāļāđāļāļĨ)")
plt.ylabel("Y (āļāļīāļāđāļāļĨ)")
plt.show()
āļāļąāđāļāļāļāļāļāļĩāđ 5. āđāļāļāļāļĩāđāļāļīāļāļąāļāļāļīāļāđāļāļĨāļāđāļ§āļĒāļāļīāļāļąāļāļ āļđāļĄāļīāļĻāļēāļŠāļāļĢāđ
with rasterio.open("AvgSurfT.tif") as src:
band1 = src.read(1)
transform = src.transform
from rasterio.transform import xy
# āļĢāļąāļāļāļāļēāļ
nrows, ncols = band1.shape
# āļĢāļąāļāļĨāļāļāļāļīāļāļđāļ/āļĨāļ°āļāļīāļāļđāļāļāļāļāļĄāļļāļĄāļāļāļāđāļēāļĒāđāļĨāļ°āļĄāļļāļĄāļĨāđāļēāļāļāļ§āļē
lon_min, lat_max = xy(transform, 0, 0)
lon_max, lat_min = xy(transform, nrows - 1, ncols - 1)
# āļŠāļĢāđāļēāļāļāļāļāđāļāļ
extent = [lon_min, lon_max, lat_min, lat_max]
plt.figure(figsize=(10, 6))
plt.imshow(band1, cmap='hot_r', vmin=280, vmax=320, extent=extent)
plt.colorbar(label="āļāļļāļāļŦāļ āļđāļĄāļī (K)")
plt.title("AvgSurfT - āđāļāļāļāđ 1")
plt.xlabel("āļĨāļāļāļāļīāļāļđāļ")
plt.ylabel("āļĨāļ°āļāļīāļāļđāļ")
plt.show()
āļāļąāđāļāļāļāļāļāļĩāđ 6. āđāļŠāļāļāļ āļēāļāļāļļāļāđāļāļāļāđ
# āđāļāļīāļāļāļļāļāļāđāļāļĄāļđāļĨ
with rasterio.open("AvgSurfT.tif") as dataset:
num_bands = dataset.count # āļāļģāļāļ§āļāđāļāļāļāđ
transform = dataset.transform
height = dataset.height
width = dataset.width
# āļĢāļąāļāļāļāļāđāļāļāļ āļđāļĄāļīāļĻāļēāļŠāļāļĢāđ
lon_min, lat_max = xy(transform, 0, 0)
lon_max, lat_min = xy(transform, height - 1, width - 1)
extent = [lon_min, lon_max, lat_min, lat_max]
# āļŠāļĢāđāļēāļāđāļāļāļ āļēāļāļĒāđāļāļĒāļŠāļģāļŦāļĢāļąāļāđāļāđāļĨāļ°āđāļāļāļāđ
fig, axes = plt.subplots(1, num_bands, figsize=(5 * num_bands, 6))
if num_bands == 1:
axes = [axes] # āļāļģāđāļŦāđāđāļāđāđāļāļ§āđāļē axes āđāļāđāļāļĢāļđāļāđāļāļāļāļĩāđāļ§āļāļāđāļģāđāļāđāđāļŠāļĄāļ
for i in range(num_bands):
band = dataset.read(i + 1) # āļāđāļēāļāđāļāļāļāđ (āļāļąāļāļāļĩāđāļĢāļīāđāļĄāļāļĩāđ 1)
ax = axes[i]
im = ax.imshow(band, cmap='hot_r', vmin=280, vmax=320, extent=extent)
ax.set_title(f"āđāļāļāļāđ {i + 1}")
ax.set_xlabel("āļĨāļāļāļāļīāļāļđāļ")
ax.set_ylabel("āļĨāļ°āļāļīāļāļđāļ")
plt.colorbar(im, ax=ax, shrink=1)
plt.tight_layout()
plt.show()
āļāļąāđāļāļāļāļāļāļĩāđ 7. āļāļąāļāļāđāļāļĄāļđāļĨ GeoTIFF āđāļŦāđāđāļāđāļāļāļ·āđāļāļāļĩāđāđāļāļāļēāļ° (āļāļāļāđāļāļāļāļĢāļ°āđāļāļĻāđāļāļĒ)
import geopandas as gpd
from rasterio.mask import mask
# āđāļŦāļĨāļāđāļāļĨāđ shapefile GADM āļĢāļ°āļāļąāļ 1 āļŠāļģāļŦāļĢāļąāļāļāļĢāļ°āđāļāļĻāđāļāļĒ
thailand = gpd.read_file("path/to/your/shapefile.shp") # āļāļąāļāđāļāļāļāđāļ§āļĒāļāļēāļāļāļāļāļāļļāļ
# āļāļąāļāđāļāļāļēāļ°āļāļąāļāļŦāļ§āļąāļāļāļĩāđāļāđāļāļāļāļēāļĢ
bangkok = thailand[thailand["shapeName"] == "Bangkok"]
# āđāļāļīāļ GeoTIFF āđāļĨāļ°āļāļģāļāļēāļĢāļāļąāļ
with rasterio.open("AvgSurfT.tif") as src:
if bangkok.crs != src.crs:
bangkok = bangkok.to_crs(src.crs)
# āļāļąāļāļĢāļēāļŠāđāļāļāļĢāđ
out_image, out_transform = mask(src, bangkok.geometry, crop=True)
out_meta = src.meta.copy()
# āļāļąāļāđāļāļāļāđāļāļĄāļđāļĨāđāļĄāļāļēāļŠāļģāļŦāļĢāļąāļāļāļĨāļĨāļąāļāļāđ
out_meta.update({
"height": out_image.shape[1],
"width": out_image.shape[2],
"transform": out_transform
})
āļāļąāđāļāļāļāļāļāļĩāđ 8. āļāļąāļāļāļķāļāđāļĨāļ°āđāļŠāļāļāļ āļēāļāļāļĨāļĨāļąāļāļāđāļāļĩāđāļāļąāļāđāļĨāđāļ§
# āļāļąāļāļāļķāļ GeoTIFF āļāļĩāđāļāļąāļāđāļĨāđāļ§
with rasterio.open("AvgSurfT_bkk.tif", "w", **out_meta) as dest:
dest.write(out_image)
# āļĢāļąāļāļāļģāļāļ§āļāđāļāļ§āđāļĨāļ°āļāļāļĨāļąāļĄāļāđ
nrows, ncols = out_image.shape[1], out_image.shape[2]
# āļĢāļąāļāļāļīāļāļąāļāļāļāļāđāļāļāđāļāļĒāđāļāđāļāļēāļĢāđāļāļĨāļāđāļāļ affine
lon_min, lat_max = xy(out_transform, 0, 0)
lon_max, lat_min = xy(out_transform, nrows - 1, ncols - 1)
# āļŠāļĢāđāļēāļāļāļāļāđāļāļāļŠāļģāļŦāļĢāļąāļ imshow (āļāđāļēāļĒ, āļāļ§āļē, āļĨāđāļēāļ, āļāļ)
extent = [lon_min, lon_max, lat_min, lat_max]
# āđāļŠāļāļāļĢāļēāļŠāđāļāļāļĢāđāđāļĨāļ°āļāļāļāđāļāļ
fig, ax = plt.subplots(figsize=(10, 6))
raster = ax.imshow(out_image[0], cmap='hot_r', vmin=300, vmax=320, extent=extent)
bangkok.boundary.plot(ax=ax, edgecolor='black', linewidth=0.5)
plt.colorbar(raster, ax=ax, label="āļāļļāļāļŦāļ āļđāļĄāļī (K)")
ax.set_title("AvgSurfT - āļāļąāļāļāļāļāđāļāļāļāļĢāļļāļāđāļāļāļŊ āļāļĢāđāļāļĄāđāļŠāļāļāđāļŠāđāļāļāļāļ")
ax.set_xlabel("āļĨāļāļāļāļīāļāļđāļ")
ax.set_ylabel("āļĨāļ°āļāļīāļāļđāļ")
ax.set_axis_on()
plt.savefig("AvgSurfT_bkk_with_boundary.png", dpi=300)
plt.show()
āļāļāļŠāļĢāļļāļ
āļŦāļĄāļēāļĒāđāļŦāļāļļ: āļāļāđāļĢāļĩāļĒāļāļāļĩāđāļŠāļąāļāļāļīāļĐāļāļēāļāļ§āđāļēāļāļļāļāļĄāļĩāļāļ§āļēāļĄāļāļļāđāļāđāļāļĒāļāļ·āđāļāļāļēāļāļāļąāļāļāļēāļĢāđāļāļĩāļĒāļāđāļāļĢāđāļāļĢāļĄ Python āđāļĨāļ°āđāļāļ§āļāļīāļāđāļāļīāļāļāļ·āđāļāļāļĩāđ āļŠāļģāļŦāļĢāļąāļāļāļģāļāļāļīāļāļēāļĒāļāļĩāđāļĨāļ°āđāļāļĩāļĒāļāđāļāļĩāđāļĒāļ§āļāļąāļāļāļąāļāļāđāļāļąāļāđāļāļāļēāļ° āđāļāļĢāļāļāļđāđāļāļāļŠāļēāļĢāļāļĢāļ°āļāļāļāļŠāļģāļŦāļĢāļąāļ rasterio, GeoPandas āđāļĨāļ° Matplotlib
ð āļāļąāļ§āļāļĒāđāļēāļāđāļāđāļāļāļ : GeoTiff in Python
āļāļēāļĢāļāļĢāļ°āļĄāļ§āļĨāļāļĨāđāļĨāļ°āļāļēāļĢāđāļŠāļāļāļāļĨāļāđāļāļĄāļđāļĨ NetCDF
āļāļđāđāļĄāļ·āļāļāļĩāđāļĄāļĩāļāļģāđāļāļ°āļāļģāļāļĒāđāļēāļāļāļĢāļāļāđāļ§āļāđāļāļĩāđāļĒāļ§āļāļąāļāļāļēāļĢāļāļģāļāļēāļāļāļąāļāđāļāļĨāđ NetCDF (.nc) āđāļāļĒāđāļāđ Python āļĢāļ§āļĄāļāļķāļāļāļēāļĢāđāļŦāļĨāļāļāđāļāļĄāļđāļĨ āļāļēāļĢāļ§āļīāđāļāļĢāļēāļ°āļŦāđ āđāļĨāļ°āļāļēāļĢāļŠāļĢāđāļēāļāļ āļēāļāļāđāļāļĄāļđāļĨāļŦāļĨāļēāļāļŦāļĨāļēāļĒāļāļĢāļ°āđāļ āļ āđāļāļĒāđāļāđāļāđāļāļāļĩāđāļāđāļāļĄāļđāļĨāļāļēāļāļāļļāļāļļāļāļīāļĒāļĄāļ§āļīāļāļĒāļēāđāļĨāļ°āļ āļđāļĄāļīāļŠāļēāļĢāļŠāļāđāļāļĻ
āļāđāļāļāļģāļŦāļāļāđāļāļ·āđāļāļāļāđāļ â āļāļēāļ§āļāđāđāļŦāļĨāļāđāļāļĨāđ NetCDF
āļāļąāđāļāļāļāļāļāļĩāđ 1. āļāļēāļĢāļāļīāļāļāļąāđāļāđāļĨāļāļĢāļēāļĢāļĩāļāļĩāđāļāļģāđāļāđāļ
pip install xarray netCDF4 matplotlib numpy scipy cartopy geopandas
āļāļąāđāļāļāļāļāļāļĩāđ 2. āļāļēāļĢāđāļŦāļĨāļāđāļĨāļ°āļŠāļģāļĢāļ§āļāļāđāļāļĄāļđāļĨ NetCDF
import xarray as xr
import os
import matplotlib.pyplot as plt
import geopandas as gpd
import numpy as np
import pandas as pd
# āđāļŠāđāļāļāļēāļāđāļāļĒāļąāļāđāļāļĨāđ NetCDF āļāļāļāļāļļāļ
nc_file_path = r"C:\Users\ASUS\Jupyter\ALICE\data\AvgSurfT.nc"
# āđāļāļīāļāļāļļāļāļāđāļāļĄāļđāļĨ
ds = xr.open_dataset(nc_file_path)
# āļŠāļģāļĢāļ§āļāđāļāļĢāļāļŠāļĢāđāļēāļāļāļļāļāļāđāļāļĄāļđāļĨ
print("āļ āļēāļāļĢāļ§āļĄāļāļļāļāļāđāļāļĄāļđāļĨ:")
print(ds)
# āļāļđāļāļąāļ§āđāļāļĢāļāļĩāđāļĄāļĩāļāļĒāļđāđāđāļāļāļļāļāļāđāļāļĄāļđāļĨ
print(f"āļāļąāļ§āđāļāļĢāļāļĩāđāļĄāļĩāļāļĒāļđāđ: {list(ds.data_vars)}")
# āđāļĒāļāļāļąāļ§āđāļāļĢāļāļĩāđāļŠāļāđāļ
var_data = ds['AvgSurfT'] # āđāļāļāļāļĩāđāļāđāļ§āļĒāļāļ·āđāļāļāļąāļ§āđāļāļĢāļāļāļāļāļļāļāļŦāļēāļāđāļāļāļāđāļēāļ
# āļāļĢāļ§āļāļŠāļāļāļāđāļāļĄāļđāļĨāđāļĄāļāļēāđāļĨāļ°āļāļļāļāļĨāļąāļāļĐāļāļ°
print(f"āļāļļāļāļĨāļąāļāļĐāļāļ°āļāļāļāļāļąāļ§āđāļāļĢ: {var_data.attrs}")
print(f"āļĄāļīāļāļī: {var_data.dims}")
print(f"āļāļīāļāļąāļ: {var_data.coords}")
print(f"āļĢāļđāļāļĢāđāļēāļ: {var_data.shape}")
āļāļąāđāļāļāļāļāļāļĩāđ 3. āļŠāļāļīāļāļīāļāļ·āđāļāļāļēāļāđāļĨāļ°āļāļēāļĢāļŠāļģāļĢāļ§āļāļāđāļāļĄāļđāļĨ
# āļāļģāļāļ§āļāļŠāļāļīāļāļīāļāļ·āđāļāļāļēāļ
ds_mean_value = var_data.mean().values
ds_min_value = var_data.min().values
ds_max_value = var_data.max().values
ds_std_dev = var_data.std().values
# āļĢāļąāļāļāđāļ§āļāđāļ§āļĨāļē
min_date = str(var_data.time.values.min())[:10]
max_date = str(var_data.time.values.max())[:10]
# āđāļŠāļāļāļŠāļāļīāļāļī
print(f"āļāđāļ§āļāđāļ§āļĨāļē: {min_date} āļāļķāļ {max_date}")
print(f"āļāđāļēāđāļāļĨāļĩāđāļĒ: {ds_mean_value:.4f} {var_data.attrs.get('units', '')}")
print(f"āļāđāļēāļāđāļģāļŠāļļāļ: {ds_min_value:.4f} {var_data.attrs.get('units', '')}")
print(f"āļāđāļēāļŠāļđāļāļŠāļļāļ: {ds_max_value:.4f} {var_data.attrs.get('units', '')}")
print(f"āļāđāļēāđāļāļĩāđāļĒāļāđāļāļāļĄāļēāļāļĢāļāļēāļ: {ds_std_dev:.4f} {var_data.attrs.get('units', '')}")
# āļŠāļāļīāļāļīāđāļāļīāļāļāļ·āđāļāļāļĩāđāđāļāļīāđāļĄāđāļāļīāļĄ
print("\nāļāļēāļĢāļ§āļīāđāļāļĢāļēāļ°āļŦāđāđāļāļīāļāļāļ·āđāļāļāļĩāđ:")
spatial_mean = var_data.mean(dim=['lat', 'lon']).values
print(f"āļāđāļēāđāļāļĨāļĩāđāļĒāđāļāļāļļāļāļāļģāđāļŦāļāđāļ: {spatial_mean.mean():.4f}")
# āļŠāļāļīāļāļīāđāļāļīāļāđāļ§āļĨāļē
print("\nāļāļēāļĢāļ§āļīāđāļāļĢāļēāļ°āļŦāđāđāļāļīāļāđāļ§āļĨāļē:")
if 'time' in var_data.dims:
temporal_mean = var_data.mean(dim='time')
print(f"āļĢāļđāļāļĢāđāļēāļāļāđāļēāđāļāļĨāļĩāđāļĒāđāļāļīāļāđāļ§āļĨāļē: {temporal_mean.shape}")
print(f"āļāđāļēāļŠāļđāļāļŠāļļāļāđāļāļāđāļēāđāļāļĨāļĩāđāļĒāđāļāļīāļāđāļ§āļĨāļē: {temporal_mean.max().values:.4f}")
print(f"āļāđāļēāļāđāļģāļŠāļļāļāđāļāļāđāļēāđāļāļĨāļĩāđāļĒāđāļāļīāļāđāļ§āļĨāļē: {temporal_mean.min().values:.4f}")
āļāļąāđāļāļāļāļāļāļĩāđ 4. āļāļēāļĢāđāļŠāļāļāļāļĨāļ āļēāļāđāļāļīāļāļāļ·āđāļāļāļĩāđāļāļĢāđāļāļĄāļāļāļāđāļāļāļāļēāļāļ āļđāļĄāļīāļĻāļēāļŠāļāļĢāđ
# āđāļŦāļĨāļāļāļāļāđāļāļāļāļĢāļ°āđāļāļĻāđāļāļĒ
thailand_boundary = gpd.read_file("https://geodata.ucdavis.edu/gadm/gadm4.1/json/gadm41_THA_0.json")
# āļŠāļĢāđāļēāļāļĢāļđāļāļ āļēāļāļāļĩāđāļĄāļĩāļŠāļāļāđāļāļāļ āļēāļāļĒāđāļāļĒ
fig, axes = plt.subplots(1, 2, figsize=(14, 6), constrained_layout=True)
# āļāđāļēāđāļāļĨāļĩāđāļĒāđāļāļīāļāļāļ·āđāļāļāļĩāđāđāļāļāļāļĩāļ (āđāļāļāļ āļēāļāļĒāđāļāļĒāļāđāļēāļĒ)
temp = ds # āđāļāđāļāļļāļāļāđāļāļĄāļđāļĨāđāļāļīāļĄ
temp['AvgSurfT'].mean(dim="time").plot(
cmap="hot_r", ax=axes[0], vmin=290, vmax=310,
cbar_kwargs={"label": "āļāđāļēāđāļāļĨāļĩāđāļĒ AvgSurfT āđāļāļāļāļĩāļ (K)"}
)
thailand_boundary.plot(edgecolor="black", facecolor="none", lw=0.7, ax=axes[0])
axes[0].set_title(f"āļāđāļēāđāļāļĨāļĩāđāļĒ AvgSurfT āđāļāļāļāļĩāļ\n{min_date} āļāļķāļ {max_date}")
axes[0].set_xlabel("āļĨāļāļāļāļīāļāļđāļ")
axes[0].set_ylabel("āļĨāļ°āļāļīāļāļđāļ")
# āđāļāļāļ āļēāļāļāđāļēāđāļāļĩāđāļĒāļāđāļāļāļĄāļēāļāļĢāļāļēāļ (āđāļāļāļ āļēāļāļĒāđāļāļĒāļāļ§āļē)
temp['AvgSurfT'].std(dim="time").plot(
cmap="viridis", ax=axes[1],
cbar_kwargs={"label": "āļāđāļēāđāļāļĩāđāļĒāļāđāļāļāļĄāļēāļāļĢāļāļēāļāļāļāļ AvgSurfT (K)"}
)
thailand_boundary.plot(edgecolor="black", facecolor="none", lw=0.7, ax=axes[1])
axes[1].set_title(f"āļāļ§āļēāļĄāđāļāļĢāļāļĢāļ§āļāļāļāļ AvgSurfT\n{min_date} āļāļķāļ {max_date}")
axes[1].set_xlabel("āļĨāļāļāļāļīāļāļđāļ")
axes[1].set_ylabel("āļĨāļ°āļāļīāļāļđāļ")
# āļāļąāļāļāļķāļāļĢāļđāļāļ āļēāļ
fig.savefig(r"C:\Users\ASUS\Jupyter\ALICE\data\AvgSurfT\ncAvgSurfT_map.png", dpi=300, bbox_inches='tight')
plt.show()
āļāļąāđāļāļāļāļāļāļĩāđ 5. āļāļēāļĢāđāļŠāļāļāļāļĨāļ āļēāļāļŦāļĨāļēāļĒāļāđāļ§āļāđāļ§āļĨāļē
# āļĢāļąāļāļāļģāļāļ§āļāļāđāļ§āļāđāļ§āļĨāļēāļāļĩāđāļĄāļĩāļāļĒāļđāđ
time_steps = len(var_data.time)
# āļāļģāļŦāļāļāļāļģāļāļ§āļāļāļĩāđāļāļ°āđāļŠāļāļ (āļŠāļđāļāļŠāļļāļ 6)
n_plots = min(time_steps, 6)
# āļŠāļĢāđāļēāļāđāļāļāļ āļēāļāļĒāđāļāļĒ 1xn
fig, axes = plt.subplots(nrows=1, ncols=n_plots, figsize=(4*n_plots, 4), constrained_layout=True)
# āļŦāļēāļāļĄāļĩāđāļāļāļ āļēāļāļĒāđāļāļĒāđāļāļĩāļĒāļāļŦāļāļķāđāļ āļāļģāđāļŦāđ axes āđāļāđāļāļĢāļđāļāđāļāļāļāļĩāđāļ§āļāļāđāļģāđāļāđ
if n_plots == 1:
axes = [axes]
# āđāļŠāļāļāđāļāđāļĨāļ°āļāđāļ§āļāđāļ§āļĨāļēāđāļāđāļāļāļ āļēāļāļĒāđāļāļĒāļāļāļāļĄāļąāļ
for i, time_idx in enumerate(range(n_plots)):
ax = axes[i]
time_value = var_data.time.values[time_idx]
time_data = var_data.sel(time=time_value)
# āđāļŠāļāļāļāļļāļāļŦāļ āļđāļĄāļīāđāļĨāļ°āļāđāļāļāļāļąāļāļāļāļāđāļāļ
time_data.plot(ax=ax, cmap="hot_r", vmin=280, vmax=315,
cbar_kwargs={'label': '' if i < n_plots-1 else 'AvgSurfT (K)'}) # āđāļŠāļāļāļāđāļēāļĒāđāļāļāļŠāļĩāđāļāļāļēāļ°āđāļāļāļ āļēāļāļŠāļļāļāļāđāļēāļĒ
thailand_boundary.plot(ax=ax, edgecolor="black", facecolor="none", linewidth=0.7)
# āļāļąāļāļĢāļđāļāđāļāļāļŠāļāļĢāļīāļāđāļ§āļĨāļēāļŠāļģāļŦāļĢāļąāļāļāļ·āđāļāđāļĢāļ·āđāļāļ
time_str = str(time_value)[:10] # āļĢāļąāļāļĢāļđāļāđāļāļ YYYY-MM-DD
ax.set_title(f"{time_str}")
ax.set_xlabel("")
ax.set_ylabel("" if i > 0 else "āļĨāļ°āļāļīāļāļđāļ")
# āđāļāļīāđāļĄāļāđāļēāļĒāļĨāļāļāļāļīāļāļđāļāđāļāļāļēāļ°āđāļāđāļāļāļ āļēāļāļāđāļēāļāļĨāđāļēāļ
if i == n_plots // 2:
ax.set_xlabel("āļĨāļāļāļāļīāļāļđāļ")
# āļāļ·āđāļāđāļĢāļ·āđāļāļāļĢāļ§āļĄ
plt.suptitle(f"āđāļāļāļāļĩāđ AvgSurfT ({min_date} āļāļķāļ {max_date})", fontsize=16, y=1.05)
# āļāļąāļāļāļķāļāļĢāļđāļāļ āļēāļ
plt.savefig(r"C:\Users\ASUS\Jupyter\ALICE\data\AvgSurfT\ncAvgSurfT_allmap.png", dpi=300, bbox_inches='tight')
plt.show()
āļāļąāđāļāļāļāļāļāļĩāđ 6. āļāļąāļāļāđāļāļĄāļđāļĨ NetCDF āđāļŦāđāđāļāđāļāļāļ·āđāļāļāļĩāđāđāļāļāļēāļ° (āļāļāļāđāļāļāļāļĢāļļāļāđāļāļāļŊ)
import rioxarray as rio
# āļāļģāđāļŦāđāđāļāđāđāļāļ§āđāļēāļāđāļāļĄāļđāļĨ NetCDF āļĄāļĩāļĄāļīāļāļīāđāļāļīāļāļāļ·āđāļāļāļĩāđāđāļĨāļ° CRS āļāļĩāđāđāļŦāļĄāļēāļ°āļŠāļĄ
ds_geo = temp['AvgSurfT'].rio.set_spatial_dims(x_dim="lon", y_dim="lat")
ds_geo = ds_geo.rio.write_crs("EPSG:4326") # āļāļąāđāļāļāđāļēāđāļāđāļāļĢāļ°āļāļāļāļīāļāļąāļ WGS84
# āļāļĢāļāļāļāļĢāļāļāļāđāļāļĄāļđāļĨāđāļāļīāļāļ āļđāļĄāļīāļĻāļēāļŠāļāļĢāđāđāļāļ·āđāļāđāļĨāļ·āļāļāđāļāļāļēāļ°āļāļĢāļļāļāđāļāļāļŊ
thailand_boundary = gpd.read_file("https://geodata.ucdavis.edu/gadm/gadm4.1/json/gadm41_THA_1.json")
bangkok = thailand_boundary[thailand_boundary["NAME_1"].isin(["BangkokMetropolis"])]
# āļāļĢāļ§āļāļŠāļāļāļ§āđāļēāļāļāļāđāļāļāļāļĒāļđāđāđāļ CRS āļāļĩāđāļāļđāļāļāđāļāļ
if bangkok.crs != "EPSG:4326":
bangkok = bangkok.to_crs("EPSG:4326")
# āļāļąāļāļāđāļāļĄāļđāļĨ NetCDF āđāļŦāđāđāļāđāļāļāļāļāđāļāļāļāļĢāļļāļāđāļāļāļŊ
bangkok_data = ds_geo.rio.clip(bangkok.geometry, bangkok.crs)
# āļāļģāļāļ§āļāļāđāļēāđāļāļĨāļĩāđāļĒāđāļāļīāļāđāļ§āļĨāļēāļŠāļģāļŦāļĢāļąāļāļāļēāļĢāđāļŠāļāļāļāļĨāļ āļēāļ
bangkok_mean = bangkok_data.mean(dim='time')
# āđāļŠāļāļāļāļĨāļ āļēāļāļāđāļāļĄāļđāļĨāļāļĩāđāļāļąāļāđāļĨāđāļ§
plt.figure(figsize=(10, 8))
im = bangkok_mean.plot(cmap='hot_r', vmin=300, vmax=315, add_colorbar=False) # āļĨāļāđāļāļāļŠāļĩāđāļĢāļīāđāļĄāļāđāļ
plt.colorbar(im, shrink=0.8) # āđāļāļīāđāļĄāđāļāļāļŠāļĩāļāļĩāđāļĄāļĩāļāļāļēāļāļāļģāļŦāļāļāđāļāļ (āļāļĢāļąāļāļāđāļē shrink āļāļēāļĄāļāđāļāļāļāļēāļĢ)
bangkok.boundary.plot(edgecolor='black', linewidth=1.5, ax=plt.gca())
plt.title(f"āļāļļāļāļŦāļ āļđāļĄāļīāļāļ·āđāļāļāļīāļ§āđāļāļĨāļĩāđāļĒāđāļāļāļĢāļļāļāđāļāļāļŊ\n{min_date} āļāļķāļ {max_date}")
plt.xlabel("āļĨāļāļāļāļīāļāļđāļ")
plt.ylabel("āļĨāļ°āļāļīāļāļđāļ")
plt.tight_layout()
# āļāļąāļāļāļķāļāļāđāļāļĄāļđāļĨāļāļĩāđāļāļąāļāđāļĨāđāļ§āļŦāļēāļāļāļģāđāļāđāļ
plt.savefig("Bangkok_AvgSurfT.png", dpi=300, bbox_inches='tight')
plt.show()
āļāļāļŠāļĢāļļāļ
āđāļĄāļ·āđāļāļāļģāļāļēāļāļāļąāļāđāļāļĨāđ NetCDF (.nc) āđāļ Python āđāļāļĢāļāļāļģāļāļąāđāļāļāļāļāļŠāļģāļāļąāļāđāļŦāļĨāđāļēāļāļĩāđ:
1. āļāļēāļĢāļŠāļģāļĢāļ§āļāđāļāļ·āđāļāļāļāđāļ: āđāļāļīāļāđāļāļĨāđāļāđāļ§āļĒ xarray āđāļĨāļ°āļāļĢāļ§āļāļŠāļāļāđāļāļĢāļāļŠāļĢāđāļēāļ āļāļąāļ§āđāļāļĢ āđāļĨāļ°āļĄāļīāļāļīāļāļāļāļĄāļąāļ
2. āļāļēāļĢāļŠāļāļąāļāļāđāļāļĄāļđāļĨ: āđāļĨāļ·āļāļāļāļąāļ§āđāļāļĢāđāļĨāļ°āļāļ·āđāļāļāļĩāđāđāļāļāļēāļ°āļāļĩāđāļŠāļāđāļāļāļēāļāļāļļāļāļāđāļāļĄāļđāļĨ
3. āļāļēāļĢāļ§āļīāđāļāļĢāļēāļ°āļŦāđāļāļēāļāļŠāļāļīāļāļī: āļāļģāļāļ§āļāļŠāļāļīāļāļīāļāļ·āđāļāļāļēāļāđāļĨāļ°āļāļģāļāļēāļĢāļ§āļīāđāļāļĢāļēāļ°āļŦāđāđāļāļīāļāđāļ§āļĨāļē/āđāļāļīāļāļāļ·āđāļāļāļĩāđ
4. āļāļēāļĢāđāļŠāļāļāļāļĨāļ āļēāļ: āļŠāļĢāđāļēāļāđāļāļāļ āļēāļāļāļĩāđāļĄāļĩāļāļ§āļēāļĄāļŦāļĄāļēāļĒāđāļāļ·āđāļāđāļŠāļāļāļāļĨāļ āļēāļāļāđāļāļĄāļđāļĨāļāļāļāļāļļāļ (āļāļāļļāļāļĢāļĄāđāļ§āļĨāļē āđāļāļāļāļĩāđ āļŊāļĨāļŊ)
5. āļāļēāļĢāļŠāđāļāļāļāļāļāđāļāļĄāļđāļĨ: āļāļąāļāļāļķāļāļāđāļāļĄāļđāļĨāļāļĩāđāļāļĢāļ°āļĄāļ§āļĨāļāļĨāđāļĨāđāļ§āđāļĨāļ°āļāļĨāļĨāļąāļāļāđāđāļāļĢāļđāļāđāļāļāļāļĩāđāđāļŦāļĄāļēāļ°āļŠāļĄ
āđāļāļĒāļāļēāļĢāļāļāļīāļāļąāļāļīāļāļēāļĄāļāļđāđāļĄāļ·āļāļāļĩāđ āļāļļāļāļāļ§āļĢāļāļ°āļŠāļēāļĄāļēāļĢāļāļāļĢāļ°āļĄāļ§āļĨāļāļĨ āļ§āļīāđāļāļĢāļēāļ°āļŦāđ āđāļĨāļ°āđāļŠāļāļāļāļĨāļ āļēāļāļāđāļāļĄāļđāļĨāļāļēāļāđāļāļĨāđ NetCDF āļŠāļģāļŦāļĢāļąāļāļāļēāļĢāļāļĢāļ°āļĒāļļāļāļāđāđāļāđāļāđāļēāļāļāļļāļāļļāļāļīāļĒāļĄāļ§āļīāļāļĒāļē āļŠāļ āļēāļāļ āļđāļĄāļīāļāļēāļāļēāļĻ āđāļĨāļ°āļāđāļāļĄāļđāļĨāđāļāļīāļāļāļ·āđāļāļāļĩāđāđāļāđāļāļĒāđāļēāļāļĄāļĩāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļ
āđāļāļĢāļāļāļģāđāļ§āđāđāļŠāļĄāļāļ§āđāļēāđāļŦāđāļāļĢāļ§āļāļŠāļāļāļĢāļ°āļāļāļāļīāļāļąāļ āļŦāļāđāļ§āļĒ āđāļĨāļ°āļāđāļāļĄāļđāļĨāđāļĄāļāļēāļāļāļāđāļāļĨāđ NetCDF āļāļāļāļāļļāļ āđāļāļ·āđāļāļāļāļēāļāļŠāļīāđāļāđāļŦāļĨāđāļēāļāļĩāđāļāļēāļāđāļāļāļāđāļēāļāļāļąāļāđāļāļāļķāđāļāļāļĒāļđāđāļāļąāļāđāļŦāļĨāđāļāļāļĩāđāļĄāļēāđāļĨāļ°āļāļĢāļ°āđāļ āļāļāļāļāļāđāļāļĄāļđāļĨ
ð āļāļąāļ§āļāļĒāđāļēāļāđāļāđāļāļāļ : NetCDF in Python
āļāļēāļĢāļāļĢāļ°āļĄāļ§āļĨāļāļĨāļāđāļāļĄāļđāļĨ Time Series
āļāđāļāļĄāļđāļĨāļāļāļļāļāļĢāļĄāđāļ§āļĨāļēāļĄāļĩāļāļ§āļēāļĄāļŠāļģāļāļąāļāļŠāļģāļŦāļĢāļąāļāļāļēāļĢāļāļīāļāļāļēāļĄāļāļēāļĢāđāļāļĨāļĩāđāļĒāļāđāļāļĨāļāļāļēāļĄāļāđāļ§āļāđāļ§āļĨāļēâāđāļĄāđāļ§āđāļēāļāļ°āđāļāđāļāļāļēāļĢāļ§āļąāļāļŠāļ āļēāļāļ āļđāļĄāļīāļāļēāļāļēāļĻ āđāļāļ§āđāļāđāļĄāļāļēāļāļāļļāļāļāļ§āļīāļāļĒāļē āļŦāļĢāļ·āļāļāļąāļ§āļāļĩāđāļ§āļąāļāļāđāļēāļāļŠāļīāđāļāđāļ§āļāļĨāđāļāļĄ āđāļāļāļĢāļ°āļāļ§āļāļāļēāļĢāļāđāļēāļāļ āļđāļĄāļīāļŠāļēāļĢāļŠāļāđāļāļĻ āđāļĢāļēāļĄāļąāļāļāļģāļāļēāļāļāļąāļāļāđāļāļĄāļđāļĨāļāļāļļāļāļĢāļĄāđāļ§āļĨāļēāļāļēāļāđāļŦāļĨāđāļāļāđāļēāļ āđ āđāļāđāļ Google Earth Engine (GEE) āļŦāļĢāļ·āļ Excel āļāļđāđāļĄāļ·āļāļāļĩāđāļāļ°āđāļāļ°āļāļģāļāļļāļāđāļāļĩāđāļĒāļ§āļāļąāļāļŠāļāļāļāļĢāļ°āļāļ§āļāļāļēāļĢāļāļģāļāļēāļāđāļāļ·āđāļāļāļąāļāļāļēāļĢāļāļąāļāļāđāļāļĄāļđāļĨāļāļāļļāļāļĢāļĄāđāļ§āļĨāļēāđāļāļĒāđāļāđ Python:
- āļāļĢāļ°āļĄāļ§āļĨāļāļĨāļāđāļāļĄāļđāļĨ Google Earth Engine āļāļ Python
- āļāļĢāļ°āļĄāļ§āļĨāļāļĨāļāđāļāļĄāļđāļĨ Excel āļāļ Python
āļāļēāļĢāļāđāļēāļāļāđāļāļĄāļđāļĨāļāļāļļāļāļĢāļĄāđāļ§āļĨāļēāļāļēāļ GEE āđāļāđāļēāļŠāļđāđ Python
Google Earth Engine (GEE) āđāļāđāļāđāļāļĨāļāļāļāļĢāđāļĄāļāļĩāđāļāļĢāļāļāļĨāļąāļāļŠāļģāļŦāļĢāļąāļāļāļēāļĢāļ§āļīāđāļāļĢāļēāļ°āļŦāđāļāđāļāļĄāļđāļĨāđāļāļīāļāļāļ·āđāļāļāļĩāđ āļāđāļ§āļĒāđāļŦāđāļāļđāđāđāļāđāļŠāļēāļĄāļēāļĢāļāļāļąāļāđāļāđāļ āļāļĢāļ°āļĄāļ§āļĨāļāļĨ āđāļĨāļ°āđāļŠāļāļāļ āļēāļāļāđāļēāļĒāļāļēāļ§āđāļāļĩāļĒāļĄāđāļĨāļ°āļāļļāļāļāđāļāļĄāļđāļĨāđāļāļīāļāļāļ·āđāļāļāļĩāđāļāļ·āđāļ āđ āļāļēāļāļāļĢāļąāđāļ āļāļļāļāļāļēāļāļŠāđāļāļāļāļāļāđāļāļĄāļđāļĨāļāļāļļāļāļĢāļĄāđāļ§āļĨāļē (āđāļāđāļ āļŠāļ āļēāļāļ āļđāļĄāļīāļāļēāļāļēāļĻ āļāļēāļĢāđāļāđāļāļĩāđāļāļīāļ āļāļļāļāļŦāļ āļđāļĄāļī) āļāļēāļ GEE āđāļāļĢāļđāļāđāļāļ FeatureCollection (āļĢāļđāļāđāļāļāļāļēāļĢāļēāļ) āļāļđāđāļĄāļ·āļāļāļĩāđāļāļ°āđāļāļ°āļāļģāļ§āļīāļāļĩāļāļēāļĢāļāđāļēāļāđāļĨāļ°āļ§āļīāđāļāļĢāļēāļ°āļŦāđāļāđāļāļĄāļđāļĨāļāļēāļĢāļēāļāļāļāļļāļāļĢāļĄāđāļ§āļĨāļēāđāļāļ āļēāļĐāļē Python āđāļāļĒāđāļāđ earthengine-api āđāļĨāļ° pandas āđāļĄāđāļ§āđāļēāļāļļāļāļāļ°āļāļīāļāļāļēāļĄāļāļļāļāļŦāļ āļđāļĄāļīāļāļīāļ§āļāđāļģāļāļēāļĄāđāļ§āļĨāļēāļŦāļĢāļ·āļāļāļĢāļīāļĄāļēāļāļāđāļģāļāļāđāļāļĨāļļāđāļĄāļāđāļģāļāđāļēāļ āđ āļāļđāđāļĄāļ·āļāļāļĩāđāļāļ°āđāļŦāđāđāļāļĢāļ·āđāļāļāļĄāļ·āļāļāļĩāđāļāļļāļāļāđāļāļāļāļēāļĢāđāļāļ·āđāļāļāļĢāļ°āļĄāļ§āļĨāļāļĨāđāļĨāļ°āđāļŠāļāļāļāļĨāđāļāđāļāļĒāđāļēāļāļāđāļēāļĒāļāļēāļĒ
āļāļąāđāļāļāļāļāļāļĩāđ 1. āļāļīāļāļāļąāđāļāđāļĨāļāļĢāļēāļĢāļĩāļāļĩāđāļāļģāđāļāđāļ
pip install earthengine-api pandas matplotlib
āļāļąāļ§āđāļĨāļ·āļāļāđāļāļīāđāļĄāđāļāļīāļĄ: āļŦāļēāļāđāļāđ Jupyter āđāļŦāđāļāļīāļāļāļąāđāļ ipython, notebook āļŦāļĢāļ·āļ jupyterlab
āļāļąāđāļāļāļāļāļāļĩāđ 2. āļāļēāļĢāļĒāļ·āļāļĒāļąāļāļāļąāļ§āļāļāđāļĨāļ°āđāļĢāļīāđāļĄāļāđāļ Earth Engine
import ee
# āļāļēāļĢāļĒāļ·āļāļĒāļąāļāļāļąāļ§āļāļāļāļĢāļąāđāļāđāļĢāļ
ee.Authenticate()
# āđāļĢāļīāđāļĄāļāđāļ Earth Engine API
ee.Initialize()
āļāļąāđāļāļāļāļāļāļĩāđ 3. āđāļŦāļĨāļāļāđāļāļĄāļđāļĨāļāļāļļāļāļĢāļĄāđāļ§āļĨāļēāļāļāļāđāļāļĢāļāļāļēāļĢāļāļēāļāļāļąāļ§āļāļĒāđāļēāļ
asset_path = "projects/ee-udomporn/assets/AvgSurfT_basin"
basin_fc = ee.FeatureCollection(asset_path)
āļāļąāđāļāļāļāļāļāļĩāđ 4. āđāļāļĨāļāđāļāđāļ pandas DataFrame
import pandas as pd
features = basin_fc.getInfo()['features']
records = [f['properties'] for f in features]
basin_df = pd.DataFrame(records)
āļāļąāđāļāļāļāļāļāļĩāđ 5. āđāļĒāļāļ§āļīāđāļāļĢāļēāļ°āļŦāđāļ§āļąāļāļāļĩāđāđāļĨāļ°āļāļąāđāļāļāđāļēāļāļąāļāļāļĩāđāļ§āļĨāļē
# āđāļāļĨāļāđāļāđāļ datetime āđāļĨāļ°āļāļąāđāļāļāđāļēāļāļąāļāļāļĩ
basin_df['Date'] = pd.to_datetime(basin_df[['Year', 'Month', 'Day']])
basin_df.set_index('Date', inplace=True)
# āļāļąāļ§āđāļĨāļ·āļāļ: āļĨāļāļŠāđāļ§āļāļ§āļąāļāļāļĩāđāđāļĒāļ
basin_df.drop(columns=['Day', 'Month', 'Year'], inplace=True, errors='ignore')
āļāļąāđāļāļāļāļāļāļĩāđ 6. āļ§āļīāđāļāļĢāļēāļ°āļŦāđāļāđāļāļĄāļđāļĨāļāļēāļāļŠāļāļīāļāļī
# āđāļĨāļ·āļāļāđāļāļāļēāļ°āļāļāļĨāļąāļĄāļāđāļāļąāļ§āđāļĨāļ
numeric_data = basin_df.select_dtypes(include='number')
# āļŠāļāļīāļāļīāļāļ·āđāļāļāļēāļ
stats = pd.DataFrame({
'Mean (K)': numeric_data.mean(),
'Min (K)': numeric_data.min(),
'Max (K)': numeric_data.max(),
'Std Dev (K)': numeric_data.std()
}).round(2)
print(stats)
stats['Mean (K)'].sort_values().plot(kind='barh', figsize=(10, 6), color='skyblue')
plt.title('āļāļļāļāļŦāļ āļđāļĄāļīāļāļīāļ§āļāđāļģāđāļāļĨāļĩāđāļĒāļāļēāļĄāļĨāļļāđāļĄāļāđāļģ')
plt.xlabel('āļāļļāļāļŦāļ āļđāļĄāļī (K)')
plt.grid(True)
plt.tight_layout()
plt.show()
āļāļąāđāļāļāļāļāļāļĩāđ 7. āđāļŠāļāļāļāļĨāļāļāļļāļāļĢāļĄāđāļ§āļĨāļē (āļāļąāļ§āļāļĒāđāļēāļ)
import matplotlib.pyplot as plt
plt.figure(figsize=(10, 4))
plt.plot(basin_df.index, basin_df['Chi'], label='āļĨāļļāđāļĄāļāđāļģāļāļĩ', color='tab:blue')
plt.title('āļāļļāļāļŦāļ āļđāļĄāļīāļāļīāļ§āļāđāļģ - āļĨāļļāđāļĄāļāđāļģāļāļĩ')
plt.xlabel('āļ§āļąāļāļāļĩāđ')
plt.ylabel('āļāļļāļāļŦāļ āļđāļĄāļīāļāļīāļ§āļāđāļģāđāļāļĨāļĩāđāļĒ (K)')
plt.grid(True)
plt.legend()
plt.tight_layout()
plt.show()
basins = ['Chi', 'Mun', 'Ping']
fig, axes = plt.subplots(1, 3, figsize=(18, 4), constrained_layout=True)
for i, basin in enumerate(basins):
axes[i].plot(basin_df.index, basin_df[basin], label=basin)
axes[i].set_title(basin)
axes[i].set_xlabel('āļ§āļąāļāļāļĩāđ')
axes[i].set_ylabel('āļāļļāļāļŦāļ āļđāļĄāļīāļāļīāļ§āļāđāļģāđāļāļĨāļĩāđāļĒ (K)')
axes[i].grid(True)
plt.suptitle('āļāļļāļāļŦāļ āļđāļĄāļīāļāļīāļ§āļāđāļģāđāļāļĨāļĩāđāļĒ - āļĨāļļāđāļĄāļāđāļģāļāļĩāđāđāļĨāļ·āļāļ')
plt.show()
āļāļąāđāļāļāļāļāļāļĩāđ 8. āļāļēāļĢāļāļąāļāļāļķāļāļāđāļāļĄāļđāļĨāļāļĩāđāļāļĢāļ°āļĄāļ§āļĨāļāļĨāđāļĨāđāļ§
# āļāļąāļāļāļķāļāļāđāļāļĄāļđāļĨāļāļĩāđāļāļĢāļ°āļĄāļ§āļĨāļāļĨāđāļĨāđāļ§āļĨāļāđāļāđāļāļĨāđ Excel āđāļŦāļĄāđ
output_path = "processed_basin_data.xlsx"
basin_df.to_excel(output_path)
print(f"āļāļąāļāļāļķāļāļāđāļāļĄāļđāļĨāļāļĩāđāļāļĢāļ°āļĄāļ§āļĨāļāļĨāđāļĨāđāļ§āđāļāļĒāļąāļ {output_path}")
# āļāļąāļāļāļķāļāļāļĢāļēāļāđāļāđāļāđāļāļĨāđāļ āļēāļ
fig.savefig("basin_plot.png", dpi=300, bbox_inches='tight')
print("āļāļąāļāļāļķāļāļāļĢāļēāļāđāļāđāļāđāļāļĨāđāļ āļēāļāđāļĨāđāļ§")
āļāļāļŠāļĢāļļāļ
āļāļāļāļāļĩāđāļāļļāļāđāļāđāđāļĢāļĩāļĒāļāļĢāļđāđāļ§āļīāļāļĩ:
ð āļāļąāļ§āļāļĒāđāļēāļāđāļāđāļāļāļ GEE into Python
āļāļēāļĢāļāļĢāļ°āļĄāļ§āļĨāļāļĨāđāļĨāļ°āđāļŠāļāļāļāļĨāļāđāļāļĄāļđāļĨāļāļāļļāļāļĢāļĄāđāļ§āļĨāļēāļāļēāļ Excel
āļāļđāđāļĄāļ·āļāļāļĩāđāļāļ°āđāļāļ°āļāļģāļāļļāļāļāđāļēāļāļāļĢāļ°āļāļ§āļāļāļēāļĢāļāđāļēāļ āļāļĢāļ°āļĄāļ§āļĨāļāļĨ āđāļĨāļ°āđāļŠāļāļāļāļĨāļāđāļāļĄāļđāļĨāļāļāļļāļāļĢāļĄāđāļ§āļĨāļēāļāļēāļāđāļāļĨāđ Excel āđāļāļĒāđāļāđ Python āđāļĢāļēāļāļ°āļāļĢāļāļāļāļĨāļļāļĄāļāļēāļĢāļāļīāļāļāļąāđāļāđāļĨāļāļĢāļēāļĢāļĩāļāļĩāđāļāļģāđāļāđāļ āļāļēāļĢāđāļŦāļĨāļāļāđāļāļĄāļđāļĨ āļāļēāļĢāđāļāļĢāļĩāļĒāļĄāļāđāļāļĄāļđāļĨ āļāļēāļĢāļ§āļīāđāļāļĢāļēāļ°āļŦāđāļāļēāļāļŠāļāļīāļāļī āđāļĨāļ°āļāļēāļĢāļŠāļĢāđāļēāļāļāļēāļĢāđāļŠāļāļāļāļĨāļŦāļĨāļēāļāļŦāļĨāļēāļĒāļĢāļđāļāđāļāļ
āļāđāļāļāļģāļŦāļāļāđāļāļ·āđāļāļāļāđāļ â āļāļēāļ§āļāđāđāļŦāļĨāļāđāļāļĨāđ Excel āļāļēāļāđāļāļĨāļāļāļāļĢāđāļĄāļāļāļāđāļĢāļē:
āļāļąāđāļāļāļāļāļāļĩāđ 1. āļāļēāļĢāļāļīāļāļāļąāđāļāđāļĨāļāļĢāļēāļĢāļĩāļāļĩāđāļāļģāđāļāđāļ
pip install pandas matplotlib numpy scipy seaborn openpyxl
āļāļąāđāļāļāļāļāļāļĩāđ 2. āļāļēāļĢāđāļŦāļĨāļāļāđāļāļĄāļđāļĨāļāļēāļ Excel
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
from scipy import stats
# āļāļąāđāļāļāđāļēāđāļŠāđāļāļāļēāļāđāļāļĒāļąāļāđāļāļĨāđ Excel āļāļāļāļāļļāļ
basin_excel_path = r"C:\data\AvgSurfT\AvgSurfT_basin.xlsx"
# āļāļđāļāļąāļ§āļāļĒāđāļēāļāļāđāļāļĄāļđāļĨ
basin_df = pd.read_excel(basin_excel_path)
print(basin_df.head()) # āđāļŠāļāļ 5 āđāļāļ§āđāļĢāļ
print(basin_df.columns) # āđāļŠāļāļāļāļ·āđāļāļāļāļĨāļąāļĄāļāđ
# āļāđāļēāļāđāļāļĨāđ Excel āļāļĩāļāļāļĢāļąāđāļ āđāļāļĒāļāđāļēāļĄāđāļāļ§āđāļĢāļ (āļŠāļģāļŦāļĢāļąāļāļŦāļąāļ§āļāļāļĨāļąāļĄāļāđāļ āļēāļĐāļēāđāļāļĒ)
basin_df = pd.read_excel(basin_excel_path, skiprows=1)
print(basin_df.columns) # āđāļŠāļāļāļāļ·āđāļāļāļāļĨāļąāļĄāļāđāļŦāļĨāļąāļāļāļēāļāļāđāļēāļĄāđāļāļ§āđāļĢāļ
āļāļąāđāļāļāļāļāļāļĩāđ 3. āļāļēāļĢāđāļāļĢāļĩāļĒāļĄāļāđāļāļĄāļđāļĨ
# āđāļāļĨāļāļāļāļĨāļąāļĄāļāđāļāļĩāđāđāļāļĩāđāļĒāļ§āļāđāļāļāļāļąāļāļ§āļąāļāļāļĩāđāđāļāđāļāļāļąāļ§āđāļĨāļāļāļģāļāļ§āļāđāļāđāļĄ
basin_df['Year'] = basin_df['Year'].astype(int)
basin_df['Month'] = basin_df['Month'].astype(int)
basin_df['Day'] = basin_df['Day'].astype(int)
# āđāļāļĨāļāđāļāđāļ datetime āđāļĨāļ°āļāļąāđāļāđāļāđāļāļāļąāļāļāļĩ
basin_df['Date'] = pd.to_datetime(basin_df[['Year', 'Month', 'Day']])
basin_df.set_index('Date', inplace=True)
# āļĨāļāļāļāļĨāļąāļĄāļāđāļ§āļąāļāļāļĩāđāđāļāļīāļĄāļŦāļēāļāļāđāļāļāļāļēāļĢ
basin_df.drop(columns=['Year', 'Month', 'Day'], inplace=True)
# āļāļĢāļ§āļāļŠāļāļāļāđāļāļĄāļđāļĨāļāļĩāđāļāļĢāļ°āļĄāļ§āļĨāļāļĨāđāļĨāđāļ§
print(basin_df.info())
print(basin_df.describe())
āļāļąāđāļāļāļāļāļāļĩāđ 4. āļāļēāļĢāļ§āļīāđāļāļĢāļēāļ°āļŦāđāļāđāļāļĄāļđāļĨāđāļāļ·āđāļāļāļāđāļ
# āļāļĢāļ§āļāļŠāļāļāļāđāļēāļāļĩāđāļŦāļēāļĒāđāļ
print("\nāļāđāļēāļāļĩāđāļŦāļēāļĒāđāļāđāļāđāļāđāļĨāļ°āļāļāļĨāļąāļĄāļāđ:")
print(basin_df.isna().sum())
# āļŠāļāļīāļāļīāļāļ·āđāļāļāļēāļāļŠāļģāļŦāļĢāļąāļāđāļāđāļĨāļ°āļĨāļļāđāļĄāļāđāļģ
print("\nāļŠāļāļīāļāļīāļāļ·āđāļāļāļēāļ:")
print(basin_df.describe())
# āļāļĢāļ§āļāļŠāļāļāļāđāļ§āļāđāļ§āļĨāļēāļāļāļāļāđāļāļĄāļđāļĨ
print("\nāļāđāļāļĄāļđāļĨāļāļĢāļāļāļāļĨāļļāļĄāļāļąāđāļāđāļāđ:", basin_df.index.min(), "āļāļķāļ", basin_df.index.max())
# āļāļĢāļ§āļāļŠāļāļāļāđāļēāļāļīāļāļāļāļāļīāđāļāļĒāđāļāđ Z-score
z_scores = stats.zscore(basin_df)
potential_outliers = (abs(z_scores) > 3).any(axis=1)
print("\nāļāļģāļāļ§āļāļāđāļēāļāļīāļāļāļāļāļīāļāļĩāđāļāļēāļāđāļāļīāļāļāļķāđāļ:", potential_outliers.sum())
# āļĢāļđāļāđāļāļāļĢāļēāļĒāđāļāļ·āļāļāđāļĨāļ°āļāļēāļĄāļĪāļāļđāļāļēāļĨ
basin_df['Month'] = basin_df.index.month
basin_df['Year'] = basin_df.index.year
# āļāļģāļāļ§āļāļāđāļēāđāļāļĨāļĩāđāļĒāļĢāļēāļĒāđāļāļ·āļāļ
monthly_avg = basin_df.groupby('Month').mean()
print("\nāļāđāļēāđāļāļĨāļĩāđāļĒāļĢāļēāļĒāđāļāļ·āļāļ:")
print(monthly_avg)
# āļĨāļāļāļāļĨāļąāļĄāļāđāļāļĩāđāđāļāļīāđāļĄāđāļāđāļēāđāļāļŦāļēāļāđāļĄāđāļāļģāđāļāđāļāļāđāļāļāđāļāđāļāļĩāļāļāđāļāđāļ
basin_df.drop(columns=['Month', 'Year'], inplace=True, errors='ignore')
āļāļąāđāļāļāļāļāļāļĩāđ 5. āļāļēāļĢāđāļŠāļāļāļāļĨāđāļāļīāļāļ āļēāļāļāļ·āđāļāļāļēāļ
plt.figure(figsize=(10, 4))
plt.plot(basin_df.index, basin_df['Chi'], color='tab:blue')
plt.title('āļāļļāļāļŦāļ āļđāļĄāļīāļāļīāļ§āļāđāļģāđāļāļĨāļĩāđāļĒ - āļĨāļļāđāļĄāļāđāļģāļāļĩ')
plt.xlabel('āļ§āļąāļāļāļĩāđ')
plt.ylabel('āļāļļāļāļŦāļ āļđāļĄāļīāļāļīāļ§āļāđāļģāđāļāļĨāļĩāđāļĒ (K)')
plt.grid(True)
plt.tight_layout()
plt.show()
basins_to_plot = ['Chi', 'Mun', 'Ping']
fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(18, 4), sharey=True)
for i, basin in enumerate(basins_to_plot):
axes[i].plot(basin_df.index, basin_df[basin], label=basin, color=f'tab:{["blue", "orange", "green"][i]}')
axes[i].set_title(f'āļĨāļļāđāļĄāļāđāļģ{basin}')
axes[i].set_xlabel('āļ§āļąāļāļāļĩāđ')
axes[i].grid(True)
axes[0].set_ylabel('āļāļļāļāļŦāļ āļđāļĄāļīāļāļīāļ§āļāđāļģāđāļāļĨāļĩāđāļĒ (K)')
plt.suptitle('āļāļļāļāļŦāļ āļđāļĄāļīāļāļīāļ§āļāđāļģāđāļāļĨāļĩāđāļĒ - āļĨāļļāđāļĄāļāđāļģāļāļĩāđāđāļĨāļ·āļāļ', fontsize=16)
plt.tight_layout(rect=[0, 0, 1, 0.95])
plt.show()
āļāļąāđāļāļāļāļāļāļĩāđ 6. āļāļēāļĢāļāļąāļāļāļķāļāļāđāļāļĄāļđāļĨāļāļĩāđāļāļĢāļ°āļĄāļ§āļĨāļāļĨāđāļĨāđāļ§
# āļāļąāļāļāļķāļāļāđāļāļĄāļđāļĨāļāļĩāđāļāļĢāļ°āļĄāļ§āļĨāļāļĨāđāļĨāđāļ§āļĨāļāđāļāđāļāļĨāđ Excel āđāļŦāļĄāđ
output_path = "processed_basin_data.xlsx"
basin_df.to_excel(output_path)
print(f"āļāļąāļāļāļķāļāļāđāļāļĄāļđāļĨāļāļĩāđāļāļĢāļ°āļĄāļ§āļĨāļāļĨāđāļĨāđāļ§āđāļāļĒāļąāļ {output_path}")
# āļāļąāļāļāļķāļāļāļĢāļēāļāđāļāđāļāđāļāļĨāđāļ āļēāļ
fig.savefig("basin_plot.png", dpi=300, bbox_inches='tight')
print("āļāļąāļāļāļķāļāļāļĢāļēāļāđāļāđāļāđāļāļĨāđāļ āļēāļāđāļĨāđāļ§")
āļāđāļ§āļĒāļāļēāļĢāļāļģāļāļēāļĄāļāļđāđāļĄāļ·āļāļāļĩāđāļāļĢāļāļāļāļĨāļļāļĄāļāļĩāđ āļāļļāļāļŠāļēāļĄāļēāļĢāļāļāļĢāļ°āļĄāļ§āļĨāļāļĨ āļ§āļīāđāļāļĢāļēāļ°āļŦāđ āđāļĨāļ°āđāļŠāļāļāļāļĨāļāđāļāļĄāļđāļĨāļāļāļļāļāļĢāļĄāđāļ§āļĨāļēāļāļēāļāđāļāļĨāđ Excel āđāļāļĒāđāļāđ Python āđāļāđāļāļĒāđāļēāļāļĄāļĩāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļ āđāļāļāļāļīāļāļāļĩāđāđāļŠāļāļāļŠāļēāļĄāļēāļĢāļāļāļģāđāļāđāļāđāļāļąāļāļāđāļāļĄāļđāļĨāļāļāļļāļāļĢāļĄāđāļ§āļĨāļēāļāļĢāļ°āđāļ āļāļāđāļēāļ āđ
ð āļāļąāļ§āļāļĒāđāļēāļāđāļāđāļāļāļ Python Time series










