{"id":13680274,"url":"https://github.com/r-earthengine/ee_extra","last_synced_at":"2025-04-04T14:08:08.979Z","repository":{"id":41552988,"uuid":"353989811","full_name":"r-earthengine/ee_extra","owner":"r-earthengine","description":"A ninja python package that unifies the Google Earth Engine ecosystem.","archived":false,"fork":false,"pushed_at":"2024-10-30T01:38:45.000Z","size":3608,"stargazers_count":63,"open_issues_count":14,"forks_count":10,"subscribers_count":7,"default_branch":"master","last_synced_at":"2024-10-30T03:58:49.197Z","etag":null,"topics":["dataviz","earth-engine","geographic-information-systems","gis","google-earth-engine","javascript","landsat","modis","python","python3","r","remote-sensing","rstats","satellite-imagery","sentinel"],"latest_commit_sha":null,"homepage":"https://ee-extra.readthedocs.io/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/r-earthengine.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-04-02T10:47:48.000Z","updated_at":"2024-10-30T01:38:49.000Z","dependencies_parsed_at":"2023-12-18T02:22:36.576Z","dependency_job_id":"2343ab4c-96c3-401a-8a9f-fbfffd96e2ad","html_url":"https://github.com/r-earthengine/ee_extra","commit_stats":{"total_commits":922,"total_committers":6,"mean_commits":"153.66666666666666","dds":0.2993492407809111,"last_synced_commit":"1d550e4b73d45fe904dd20aa3b975607bd79d6bd"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/r-earthengine%2Fee_extra","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/r-earthengine%2Fee_extra/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/r-earthengine%2Fee_extra/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/r-earthengine%2Fee_extra/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/r-earthengine","download_url":"https://codeload.github.com/r-earthengine/ee_extra/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":238921050,"owners_count":19552677,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dataviz","earth-engine","geographic-information-systems","gis","google-earth-engine","javascript","landsat","modis","python","python3","r","remote-sensing","rstats","satellite-imagery","sentinel"],"created_at":"2024-08-02T13:01:15.114Z","updated_at":"2025-03-01T11:13:56.531Z","avatar_url":"https://github.com/r-earthengine.png","language":"Python","funding_links":[],"categories":["Google Earth Engine","Python","Sustainable Development"],"sub_categories":["Python","Data Catalogs and Interfaces"],"readme":"\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://user-images.githubusercontent.com/16768318/139555722-cc8cd77e-aa51-455e-bed3-0cac76b59258.png\" alt=\"ee_extra\" width=\"800\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n    \u003cem\u003eA Python package that unifies the Google Earth Engine ecosystem.\u003c/em\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003cb\u003e\n    \u003ca href=\"https://github.com/KMarkert/EarthEngine.jl\" target=\"_blank\"\u003eEarthEngine.jl\u003c/a\u003e |\n    \u003ca href=\"https://github.com/r-spatial/rgee\" target=\"_blank\"\u003e rgee \u003c/a\u003e | \n    \u003ca href=\"https://github.com/r-earthengine/rgeeExtra\" target=\"_blank\"\u003e rgee+ \u003c/a\u003e | \n    \u003ca href=\"https://github.com/davemlz/eemont\" target=\"_blank\"\u003e eemont\u003c/a\u003e\n  \u003c/b\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n\u003ca href='https://pypi.python.org/pypi/ee_extra'\u003e\n    \u003cimg src='https://img.shields.io/pypi/v/ee_extra.svg' alt='PyPI' /\u003e\n\u003c/a\u003e\n\u003ca href='https://anaconda.org/conda-forge/ee_extra'\u003e\n    \u003cimg src='https://img.shields.io/conda/vn/conda-forge/ee_extra.svg' alt='conda-forge' /\u003e\n\u003c/a\u003e\n\u003ca href=\"https://opensource.org/licenses/Apache-2.0\" target=\"_blank\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/License-Apache%202.0-blue.svg\" alt=\"License\"\u003e\n\u003c/a\u003e\n\u003ca href='https://ee-extra.readthedocs.io/en/latest/?badge=latest'\u003e\n    \u003cimg src='https://readthedocs.org/projects/ee-extra/badge/?version=latest' alt='Documentation Status' /\u003e\n\u003c/a\u003e\n\u003ca href=\"https://github.com/r-earthengine/ee_extra/actions/workflows/tests.yml\" target=\"_blank\"\u003e\n    \u003cimg src=\"https://github.com/r-earthengine/ee_extra/actions/workflows/tests.yml/badge.svg\" alt=\"Tests\"\u003e\n\u003c/a\u003e\n\u003ca href=\"https://github.com/r-earthengine/ee_extra/actions/workflows/update_awesome_spectral_indices.yml\" target=\"_blank\"\u003e\n    \u003cimg src=\"https://github.com/r-earthengine/ee_extra/actions/workflows/update_awesome_spectral_indices.yml/badge.svg\" alt=\"Awesome Spectral Indices\"\u003e\n\u003c/a\u003e\n\u003ca href=\"https://github.com/r-earthengine/ee_extra/actions/workflows/update_gee_stac_ids.yml\" target=\"_blank\"\u003e\n    \u003cimg src=\"https://github.com/r-earthengine/ee_extra/actions/workflows/update_gee_stac_ids.yml/badge.svg\" alt=\"GEE STAC\"\u003e\n\u003c/a\u003e\n\u003ca href=\"https://github.com/r-earthengine/ee_extra/actions/workflows/update_gee_stac_scale_offset.yml\" target=\"_blank\"\u003e\n    \u003cimg src=\"https://github.com/r-earthengine/ee_extra/actions/workflows/update_gee_stac_scale_offset.yml/badge.svg\" alt=\"Scale and Offset\"\u003e\n\u003c/a\u003e\n\u003ca href=\"https://github.com/r-earthengine/ee_extra/actions/workflows/update_ee_appshot.yml\" target=\"_blank\"\u003e\n    \u003cimg src=\"https://github.com/r-earthengine/ee_extra/actions/workflows/update_ee_appshot.yml/badge.svg\" alt=\"ee-appshot\"\u003e\n\u003c/a\u003e\n\u003ca href=\"https://github.com/psf/black\" target=\"_blank\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/code%20style-black-000000.svg\" alt=\"Black\"\u003e\n\u003c/a\u003e\n\u003ca href=\"https://pycqa.github.io/isort/\" target=\"_blank\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/%20imports-isort-%231674b1?style=flat\u0026labelColor=ef8336\" alt=\"isort\"\u003e\n\u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n**GitHub**: [https://github.com/r-earthengine/ee_extra](https://github.com/r-earthengine/ee_extra)\n\n**Documentation**: [https://ee-extra.readthedocs.io](https://ee-extra.readthedocs.io)\n\n**PyPI**: [https://pypi.python.org/pypi/ee_extra](https://pypi.python.org/pypi/ee_extra)\n\n**Conda-forge**: [https://anaconda.org/conda-forge/ee_extra](https://anaconda.org/conda-forge/ee_extra)\n\n---\n\n## Overview\n\n[Google Earth Engine](https://earthengine.google.com/) (GEE) is a cloud-based service for \ngeospatial processing of vector and raster data. The Earth Engine platform has a \n[JavaScript and a Python API](https://developers.google.com/earth-engine/guides) with \ndifferent methods to process geospatial objects. Google Earth Engine also provides a \n[HUGE PETABYTE-SCALE CATALOG](https://developers.google.com/earth-engine/datasets/) of \nraster and vector data that users can process online. \n\nThere are a lot of fantastic third-party GEE packages and projects around GitHub. However,\nmost of them are coded in JavaScript or Python, and they are not straightforward\nto translate to R, Julia, or other programming languages. The main goal of `eeExtra` is\nto guarantee a smooth `import` of these projects in other programming languages by\nstandardizing different methods and enabling the use of JavaScript modules outside the\n[Code Editor](https://code.earthengine.google.com/).\n\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://user-images.githubusercontent.com/16768318/139555895-d384832a-28fb-4812-a836-4d4455faf443.png\" alt=\"ee_extra_diagram\" width=\"650\"\u003e\n\u003c/p\u003e\n\nSome of the `eeExtra` features are listed here:\n\n- Automatic scaling and offsetting.\n- Spectral Indices computation (using [Awesome Spectral Indices](https://github.com/davemlz/awesome-spectral-indices)).\n- Clouds and shadows masking.\n- STAC related functions.\n\nAnd the most important feature:\n\n- Enabling the usage of JavaScript modules outside the Code Editor.\n\n\n## How does it work?\n\n`eeExtra` is a Python package, just like any other, but it is a *ninja* that serves as a \nmethods provider for different environments: R, Julia and Python itself. `eeExtra` \naccomplish this by being the powerhouse of some amazing packages such as [rgee](https://github.com/r-spatial/rgee),\n[rgee+](https://github.com/r-earthengine/rgeeExtra), and [eemont](https://github.com/davemlz/eemont).\n\nPublic JavaScript module can also be used outside the Code Editor in these packages\nthrough `eeExtra`. For this, `eeExtra` implements a rigorous JavaScript translation\nmodule that allows users to install, require and use JavaScript modules as if they\nwere on the Code Editor!\n\nYou may be wondering *\"Why is it a ninja package?\"*, well, that's a valid question,\nthe whole point of `eeExtra` resides in the fact that nobody has to use `eeExtra` itself,\nbut rather use one of the packages that are powered by `eeExtra`! :) \n\n\n## Installation\n\nInstall the latest version from PyPI:\n\n```\npip install ee_extra\n```\n\nInstall soft ee_extra dependencies:\n\n```\npip install jsbeautifier regex\n```\n\nUpgrade `eeExtra` by running:\n\n```\npip install -U ee_extra\n```\n\nInstall the latest version from conda-forge:\n\n```\nconda install -c conda-forge ee_extra\n```\n\nInstall the latest dev version from GitHub by running:\n\n```\npip install git+https://github.com/r-earthengine/ee_extra\n```\n\n## Features\n\nLet's see some of the awesome features of `eeExtra` and how to use them from the powered\npackages in python and R!\n\n### Scale and Offset\n\nMost datasets in the data catalog are scaled and in order to get their real values,\nwe have to scale (and sometimes offset) them!\n\n\u003ctable\u003e\n\n\u003ctr\u003e\n\u003cth\u003e Python (eemont) \u003c/th\u003e\n\u003cth\u003e R (rgee+) \u003c/th\u003e\n\u003cth\u003e Julia (EarthEngine.jl) \u003c/th\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd\u003e\n  \n``` python\nimport ee, eemont\nee.Initialize()\ndb = 'COPERNICUS/S2_SR'\nS2 = ee.ImageCollection(db)\nS2.scaleAndOffset()\n```\n\n\u003c/td\u003e\n\u003ctd\u003e\n\n``` r\nlibrary(rgee)\nlibrary(rgeeExtra)\nee_Initialize()\ndb \u003c- 'COPERNICUS/S2_SR'\nS2 \u003c- ee$ImageCollection(db)\nee_extra_scaleAndOffset(S2)\n```\n\u003c/td\u003e\n\n\u003ctd\u003e\n\n``` julia\nusing PyCall\nusing EarthEngine\n\nInitialize()\n\nee_extra = pyimport(\"ee_extra\")\nee_core = ee_extra.STAC.core\ndb = \"COPERNICUS/S2_SR\"\nS2 = ee.ImageCollection(db)\nee_core.scaleAndOffset(S2)\n```\n\u003c/td\u003e\n\n\n\u003c/tr\u003e\n\n\u003c/table\u003e\n\n### Spectral Indices\n\nDo you know the [Awesome Spectral Indices](https://github.com/davemlz/awesome-spectral-indices)? \nWell, you can compute them automatically with `eeExtra`! \n\n\u003ctable\u003e\n\n\u003ctr\u003e\n\u003cth\u003e Python (eemont) \u003c/th\u003e\n\u003cth\u003e R (rgee+) \u003c/th\u003e\n\u003cth\u003e Julia (EarthEngine.jl) \u003c/th\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd\u003e\n  \n``` python\nimport ee, eemont\nee.Initialize()\ndb = 'COPERNICUS/S2_SR'\nS2 = ee.ImageCollection(db)\nS2 = S2.scaleAndOffset()\nS2.spectralIndices(\"EVI\")\n```\n\n\u003c/td\u003e\n\u003ctd\u003e\n\n``` r\nlibrary(rgee)\nlibrary(rgeeExtra)\nee_Initialize()\ndb \u003c- 'COPERNICUS/S2_SR'\nS2 \u003c- ee$ImageCollection(db)\nS2 \u003c- ee_extra_scaleAndOffset(S2)\nee_extra_spIndices(S2, \"EVI\")\n```\n\u003c/td\u003e\n\n\u003ctd\u003e\n  \n```julia\nusing PyCall\nusing EarthEngine\n\nInitialize()\n\nee_extra = pyimport(\"ee_extra\")\nee_core = ee_extra.STAC.core\nee_sp = ee_extra.Spectral.core\ndb = \"COPERNICUS/S2_SR\"\nS2 = ee.ImageCollection(db)\nS2 = ee_core.scaleAndOffset(S2)\nee_sp.spectralIndices(S2, \"EVI\")\n```\n  \n\u003c/td\u003e  \n\u003c/tr\u003e\n\u003c/table\u003e\n\n### STAC features\n\nAccess STAC properties easily!\n\n\u003ctable\u003e\n\n\u003ctr\u003e\n\u003cth\u003e Python (eemont) \u003c/th\u003e\n\u003cth\u003e R (rgee+) \u003c/th\u003e\n\u003cth\u003e Julia (EarthEngine.jl) \u003c/th\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd\u003e\n  \n``` python\nimport ee, eemont\nee.Initialize()\ndb = 'COPERNICUS/S2_SR'\nS2 = ee.ImageCollection(db)\nS2.getSTAC()\n```\n\n\u003c/td\u003e\n\u003ctd\u003e\n\n``` r\nlibrary(rgee)\nlibrary(rgeeExtra)\nee_Initialize()\ndb \u003c- 'COPERNICUS/S2_SR'\nS2 \u003c- ee$ImageCollection(db)\nee_extra_getSTAC()\n```\n\u003c/td\u003e\n  \n\n\u003ctd\u003e\n\n``` julia\n  \nusing PyCall\nusing EarthEngine\n\nInitialize()\n\nee_extra = pyimport(\"ee_extra\")\nee_core = ee_extra.STAC.core\ndb = \"COPERNICUS/S2_SR\"\nS2 = ee.ImageCollection(db)\nee_core.getSTAC(S2)\n\n```\n\u003c/td\u003e\n  \n\u003c/tr\u003e\n\n\u003c/table\u003e\n\n### JavaScript Modules\n\nThis is perhaps the most important feature in `eeExtra`! What if you could use a\nJavaScript module (originally just useful for the Code Editor) in python or R? Well,\nwait no more for it!\n\n  - **JS Code Editor**\n\n``` javascript\nvar mod = require('users/sofiaermida/landsat_smw_lst:modules/Landsat_LST.js')\n\nvar geom = ee.Geometry.Rectangle(-8.91, 40.0, -8.3, 40.4)\nvar LST = mod.collection(\"L8\", \"2018-05-15\", \"2018-05-31\", geom, true)\n\nprint(LST)\n```\n\n  - **Python eemont**  \n\n``` python\nimport ee, eemont\n\nee.Initialize()\nmodule = 'users/sofiaermida/landsat_smw_lst:modules/Landsat_LST.js'\nee.install(module)\nmod = ee.require(module)\n\ngeom = ee.Geometry.Rectangle(-8.91, 40.0, -8.3, 40.4)\nLST = mod.collection(\"L8\", \"2018-05-15\", \"2018-05-31\", geom, True)\nprint(LST)\n```\n\n  - **R rgeeExtra**  \n\n``` r\nlibrary(rgee)\nlibrary(rgeeExtra)\n\nee_Initialize()\n\nlsmod \u003c- 'users/sofiaermida/landsat_smw_lst:modules/Landsat_LST.js'\nmod \u003c- module(lsmod)\n\ngeom \u003c- ee$Geometry$Rectangle(-8.91, 40.0, -8.3, 40.4)\nLST \u003c- mod$collection(\"L8\", \"2018-05-15\", \"2018-05-31\", geom, TRUE)\nprint(LST)\n```\n  \n  - **Julia EarthEngine.jl**\n\n``` julia\nusing PyCall\nusing EarthEngine\n\nInitialize()\n\nee_extra = pyimport(\"ee_extra\")\nlandsat_module = \"users/sofiaermida/landsat_smw_lst:modules/Landsat_LST.js\"\nee_extra.install(landsat_module)\nlsmodule = ee_extra.require(landsat_module)\n\ngeom = Rectangle(-8.91, 40.0, -8.3, 40.4)\nLST = lsmodule.collection(\"L8\", \"2018-05-15\", \"2018-05-31\", geom, true)\nprint(LST)\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fr-earthengine%2Fee_extra","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fr-earthengine%2Fee_extra","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fr-earthengine%2Fee_extra/lists"}