{"id":13585624,"url":"https://github.com/davemlz/eemont","last_synced_at":"2025-05-15T00:08:20.465Z","repository":{"id":41053507,"uuid":"322478954","full_name":"davemlz/eemont","owner":"davemlz","description":"A python package that extends Google Earth Engine.","archived":false,"fork":false,"pushed_at":"2025-01-18T01:04:23.000Z","size":35816,"stargazers_count":424,"open_issues_count":11,"forks_count":69,"subscribers_count":13,"default_branch":"master","last_synced_at":"2025-05-14T03:16:20.513Z","etag":null,"topics":["earth-engine","geographic-information-systems","gis","google","google-earth-engine","python","python3","raster","remote-sensing","satellite-imagery","satellite-images","spectral-indices"],"latest_commit_sha":null,"homepage":"https://eemont.readthedocs.io/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/davemlz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.rst","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":"davemlz","ko_fi":"davemlz","custom":"buymeacoffee.com/davemlz"}},"created_at":"2020-12-18T03:33:12.000Z","updated_at":"2025-05-07T03:41:28.000Z","dependencies_parsed_at":"2023-09-22T07:26:54.980Z","dependency_job_id":"ae7700e0-ac3c-416e-a659-298706dde7c0","html_url":"https://github.com/davemlz/eemont","commit_stats":{"total_commits":982,"total_committers":5,"mean_commits":196.4,"dds":0.4837067209775967,"last_synced_commit":"072ccac97c65c9db7104e24a4b6513a74efe6715"},"previous_names":[],"tags_count":23,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davemlz%2Feemont","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davemlz%2Feemont/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davemlz%2Feemont/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davemlz%2Feemont/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/davemlz","download_url":"https://codeload.github.com/davemlz/eemont/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254249202,"owners_count":22039029,"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":["earth-engine","geographic-information-systems","gis","google","google-earth-engine","python","python3","raster","remote-sensing","satellite-imagery","satellite-images","spectral-indices"],"created_at":"2024-08-01T15:05:02.907Z","updated_at":"2025-05-15T00:08:15.453Z","avatar_url":"https://github.com/davemlz.png","language":"Python","funding_links":["https://github.com/sponsors/davemlz","https://ko-fi.com/davemlz","buymeacoffee.com/davemlz","https://www.buymeacoffee.com/davemlz"],"categories":["Python","Google Earth Engine","Python API"],"sub_categories":["Python","Packages"],"readme":"\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/davemlz/eemont\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/davemlz/eemont/master/docs/_static/header2.png\" alt=\"header\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n    \u003cem\u003eA python package that extends Google Earth Engine\u003c/em\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n\u003ca href='https://pypi.python.org/pypi/eemont'\u003e\n    \u003cimg src='https://img.shields.io/pypi/v/eemont.svg' alt='PyPI' /\u003e\n\u003c/a\u003e\n\u003ca href='https://anaconda.org/conda-forge/eemont'\u003e\n    \u003cimg src='https://img.shields.io/conda/vn/conda-forge/eemont.svg' alt='conda-forge' /\u003e\n\u003c/a\u003e\n\u003ca href=\"https://opensource.org/licenses/MIT\" target=\"_blank\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/License-MIT-blue.svg\" alt=\"License\"\u003e\n\u003c/a\u003e\n\u003ca href='https://eemont.readthedocs.io/en/latest/?badge=latest'\u003e\n    \u003cimg src='https://readthedocs.org/projects/eemont/badge/?version=latest' alt='Documentation Status' /\u003e\n\u003c/a\u003e\n\u003ca href=\"https://github.com/davemlz/eemont/actions/workflows/tests.yml\" target=\"_blank\"\u003e\n    \u003cimg src=\"https://github.com/davemlz/eemont/actions/workflows/tests.yml/badge.svg\" alt=\"Tests\"\u003e\n\u003c/a\u003e\n\u003ca href=\"https://github.com/sponsors/davemlz\" target=\"_blank\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/GitHub%20Sponsors-Donate-ff69b4.svg\" alt=\"GitHub Sponsors\"\u003e\n\u003c/a\u003e\n\u003ca href=\"https://www.buymeacoffee.com/davemlz\" target=\"_blank\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Buy%20me%20a%20coffee-Donate-ff69b4.svg\" alt=\"Buy me a coffee\"\u003e\n\u003c/a\u003e\n\u003ca href=\"https://ko-fi.com/davemlz\" target=\"_blank\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/kofi-Donate-ff69b4.svg\" alt=\"Ko-fi\"\u003e\n\u003c/a\u003e\n\u003ca href=\"https://developers.google.com/earth-engine/tutorials/community/developer-resources\" target=\"_blank\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/GEE%20Community-Developer%20Resources-00b6ff.svg\" alt=\"GEE Community\"\u003e\n\u003c/a\u003e\n\u003ca href=\"https://twitter.com/dmlmont\" target=\"_blank\"\u003e\n    \u003cimg src=\"https://img.shields.io/twitter/follow/dmlmont?style=social\" alt=\"Twitter\"\u003e\n\u003c/a\u003e\n\u003ca href='https://joss.theoj.org/papers/34696c5b62c50898b4129cbbe8befb0a'\u003e\n    \u003cimg src='https://joss.theoj.org/papers/34696c5b62c50898b4129cbbe8befb0a/status.svg' alt='JOSS' /\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/davemlz/eemont](https://github.com/davemlz/eemont)\n\n**Documentation**: [https://eemont.readthedocs.io/](https://eemont.readthedocs.io/)\n\n**PyPI**: [https://pypi.org/project/eemont/](https://pypi.org/project/eemont/)\n\n**Conda-forge**: [https://anaconda.org/conda-forge/eemont](https://anaconda.org/conda-forge/eemont)\n\n**Tutorials**: [https://github.com/davemlz/eemont/tree/master/docs/tutorials](https://github.com/davemlz/eemont/tree/master/docs/tutorials)\n\n**Paper**: [https://joss.theoj.org/papers/10.21105/joss.03168](https://joss.theoj.org/papers/10.21105/joss.03168)\n\n---\n\n## Overview\n\n[Google Earth Engine](https://earthengine.google.com/) 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 (e.g. Landsat Missions Image \nCollections, Sentinel Missions Image Collections, MODIS Products Image Collections, World \nDatabase of Protected Areas, etc.). The eemont package extends the \n[Google Earth Engine Python API](https://developers.google.com/earth-engine/guides/python_install) \nwith pre-processing and processing tools for the most used satellite platforms by adding \nutility methods for different \n[Earth Engine Objects](https://developers.google.com/earth-engine/guides/objects_methods_overview) \nthat are friendly with the Python method chaining.\n\n\n## Google Earth Engine Community: Developer Resources\n\nThe eemont Python package can be found in the \n[Earth Engine Community: Developer Resources](https://developers.google.com/earth-engine/tutorials/community/developer-resources) \ntogether with other awesome resources such as [geemap](https://geemap.org/) and \n[rgee](https://github.com/r-spatial/rgee).\n\n\n## How does it work?\n\nThe eemont python package extends the following Earth Engine classes:\n\n- [ee.Feature](https://developers.google.com/earth-engine/guides/features)\n- [ee.FeatureCollection](http://developers.google.com/earth-engine/guides/feature_collections)\n- [ee.Geometry](https://developers.google.com/earth-engine/guides/geometries)\n- [ee.Image](https://developers.google.com/earth-engine/guides/image_overview)\n- [ee.ImageCollection](https://developers.google.com/earth-engine/guides/ic_creating)\n- [ee.List](https://developers.google.com/earth-engine/guides/objects_methods_overview)\n- [ee.Number](https://developers.google.com/earth-engine/guides/objects_methods_overview)\n\nNew utility methods and constructors are added to above-mentioned classes in order\nto create a more fluid code by being friendly with the Python method chaining. These\nmethods are mandatory for some pre-processing and processing tasks (e.g. clouds masking,\nshadows masking, image scaling, spectral indices computation, etc.), and they are\npresented as simple functions that give researchers, students and analysts the chance to\nanalyze data with far fewer lines of code.\n\nLook at this simple example where a\n[Sentinel-2 Surface Reflectance Image Collection](https://developers.google.com/earth-engine/datasets/catalog/COPERNICUS_S2_SR)\nis pre-processed and processed in just one step:\n\n```python\nimport ee, eemont\n   \nee.Authenticate()\nee.Initialize()\n\npoint = ee.Geometry.PointFromQuery(\n    'Cali, Colombia',\n    user_agent = 'eemont-example'\n) # Extended constructor\n\nS2 = (ee.ImageCollection('COPERNICUS/S2_SR')\n    .filterBounds(point)\n    .closest('2020-10-15') # Extended (pre-processing)\n    .maskClouds(prob = 70) # Extended (pre-processing)\n    .scaleAndOffset() # Extended (pre-processing)\n    .spectralIndices(['NDVI','NDWI','BAIS2'])) # Extended (processing)\n```\n\nAnd just like that, the collection was pre-processed, processed and ready to be analyzed!\n\n## Installation\n\nInstall the latest version from PyPI:\n\n```\npip install eemont\n```\n\nUpgrade `eemont` by running:\n\n```\npip install -U eemont\n```\n\nInstall the latest version from conda-forge:\n\n```\nconda install -c conda-forge eemont\n```\n\nInstall the latest dev version from GitHub by running:\n\n```\npip install git+https://github.com/davemlz/eemont\n```\n\n## Features\n\nLet's see some of the main features of eemont and how simple they are compared to the GEE\nPython API original methods:\n\n### Overloaded Operators\n\nThe following operators are overloaded: +, -, \\*\\, /, //, %, \\**\\ , \u003c\u003c, \u003e\u003e, \u0026, \\|\\, \u003c, \u003c=,\n==, !=, \u003e, \u003e=, -, ~. (and you can avoid the `ee.Image.expression()` method!)\n\n\u003ctable\u003e\n\n\u003ctr\u003e\n\u003cth\u003e GEE Python API \u003c/th\u003e\n\u003cth\u003e eemont-style \u003c/th\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd\u003e\n  \n``` python\nds = 'COPERNICUS/S2_SR'\n          \nS2 = (ee.ImageCollection(ds)\n.first())\n\ndef scaleImage(img):\n    scaling = img.select('B.*')\n    x = scaling.multiply(0.0001)\n    scaling = img.select(['AOT','WVP'])\n    scaling = scaling.multiply(0.001)\n    x = x.addBands(scaling)\n    notScaling = img.select([\n        'SCL',\n        'TCI.*',\n        'MSK.*',\n        'QA.*'\n    ]))\n    return x.addBands(notScaling)\n    \nS2 = scaleImage(S2)\n\nexp = '2.5*(N-R)/(N+(6*R)-(7.5*B)+1)'\n\nimgDict = {\n'N': S2.select('B8'),\n'R': S2.select('B4'),\n'B': S2.select('B2')\n}\n\nEVI = S2.expression(exp,imgDict)\n```\n\n\u003c/td\u003e\n\u003ctd\u003e\n\n``` python\nds = 'COPERNICUS/S2_SR'\n          \nS2 = (ee.ImageCollection(ds)\n.first()\n.scale())\n\nN = S2.select('B8')\nR = S2.select('B4')\nB = S2.select('B2')\n\nEVI = 2.5*(N-R)/(N+(6*R)-(7.5*B)+1)\n```\n\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003c/table\u003e\n\n### Clouds and Shadows Masking\n\nMasking clouds and shadows can be done using eemont with just one method: `maskClouds()`!\n\n\u003ctable\u003e\n\n\u003ctr\u003e\n\u003cth\u003e GEE Python API \u003c/th\u003e\n\u003cth\u003e eemont-style \u003c/th\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd\u003e\n  \n``` python\nds = 'LANDSAT/LC08/C01/T1_SR'\n          \ndef maskCloudsShadows(img):\n    c = (1 \u003c\u003c 3)\n    s = (1 \u003c\u003c 5)\n    qa = 'pixel_qa'\n    qa = img.select(qa)\n    cm = qa.bitwiseAnd(c).eq(0)\n    sm = qa.bitwiseAnd(s).eq(0)\n    mask = cm.And(sm)\n    return img.updateMask(mask)\n    \n(ee.ImageCollection(ds)\n    .map(maskCloudsShadows))\n```\n\n\u003c/td\u003e\n\u003ctd\u003e\n\n``` python\nds = 'LANDSAT/LC08/C01/T1_SR'\n          \n(ee.ImageCollection(ds)\n    .maskClouds())\n```\n\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003c/table\u003e\n\n### Image Scaling and Offsetting\n\nScaling and offsetting can also be done using eemont with just one method: `scale()`!\n\n\u003ctable\u003e\n\n\u003ctr\u003e\n\u003cth\u003e GEE Python API \u003c/th\u003e\n\u003cth\u003e eemont-style \u003c/th\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd\u003e\n  \n``` python\ndef scaleBands(img):\n    scaling = img.select([\n    'NDVI',\n    'EVI',\n    'sur.*'\n    ])\n    x = scaling.multiply(0.0001)\n    scaling = img.select('.*th')\n    scaling = scaling.multiply(0.01)\n    x = x.addBands(scaling)\n    notScaling = img.select([\n    'DetailedQA',\n    'DayOfYear',\n    'SummaryQA'\n    ])\n    return x.addBands(notScaling)              \n\nds = 'MODIS/006/MOD13Q1'\n\n(ee.ImageCollection(ds)\n    .map(scaleBands))\n```\n\n\u003c/td\u003e\n\u003ctd\u003e\n\n``` python\nds = 'MODIS/006/MOD13Q1'\n          \n(ee.ImageCollection(ds)\n    .scaleAndOffset())\n```\n\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003c/table\u003e\n\n\n### Complete Preprocessing\n\nThe complete preprocessing workflow (Masking clouds and shadows, and image scaling and\noffsetting) can be done using eemont with just one method: `preprocess()`!\n\n\n\u003ctable\u003e\n\n\u003ctr\u003e\n\u003cth\u003e GEE Python API \u003c/th\u003e\n\u003cth\u003e eemont-style \u003c/th\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd\u003e\n  \n``` python\nds = 'LANDSAT/LC08/C01/T1_SR'\n          \ndef maskCloudsShadows(img):\n    c = (1 \u003c\u003c 3)\n    s = (1 \u003c\u003c 5)\n    qa = 'pixel_qa'\n    qa = img.select(qa)\n    cm = qa.bitwiseAnd(c).eq(0)\n    sm = qa.bitwiseAnd(s).eq(0)\n    mask = cm.And(sm)\n    return img.updateMask(mask)\n    \ndef scaleBands(img):\n    scaling = img.select('B[1-7]')\n    x = scaling.multiply(0.0001)\n    scaling = img.select([\n    'B10','B11'\n    ])\n    scaling = scaling.multiply(0.1)\n    x = x.addBands(scaling)\n    notScaling = img.select([\n    'sr_aerosol',\n    'pixel_qa',\n    'radsat_qa'\n    ])\n    return x.addBands(notScaling)\n    \n(ee.ImageCollection(ds)\n    .map(maskCloudsShadows)\n    .map(scaleBands))\n```\n\n\u003c/td\u003e\n\u003ctd\u003e\n\n``` python\nds = 'LANDSAT/LC08/C01/T1_SR'\n          \n(ee.ImageCollection(ds)\n    .preprocess())\n```\n\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003c/table\u003e\n\n\n### Spectral Indices\n\nDo you need to compute several spectral indices? Use the `spectralIndices()` method! The\nindices are taken from [Awesome Spectral Indices](https://github.com/davemlz/awesome-spectral-indices).\n\n\u003ctable\u003e\n\n\u003ctr\u003e\n\u003cth\u003e GEE Python API \u003c/th\u003e\n\u003cth\u003e eemont-style \u003c/th\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd\u003e\n  \n``` python\nds = 'LANDSAT/LC08/C01/T1_SR'\n          \ndef scaleImage(img):\n    scaling = img.select('B[1-7]')\n    x = scaling.multiply(0.0001)\n    scaling = img.select(['B10','B11'])\n    scaling = scaling.multiply(0.1)\n    x = x.addBands(scaling)\n    notScaling = img.select([\n        'sr_aerosol',\n        'pixel_qa',\n        'radsat_qa'\n    ]))\n    return x.addBands(notScaling)\n\ndef addIndices(img):\n    x = ['B5','B4']\n    a = img.normalizedDifference(x)\n    a = a.rename('NDVI')\n    x = ['B5','B3']\n    b = img.normalizedDifference(x)\n    b = b.rename('GNDVI')\n    x = ['B3','B6']\n    c = img.normalizedDifference(x)\n    c = b.rename('NDSI')\n    return img.addBands([a,b,c])                    \n\n(ee.ImageCollection(ds)\n    .map(scaleImage)\n    .map(addIndices))\n```\n\n\u003c/td\u003e\n\u003ctd\u003e\n\n``` python\nds = 'LANDSAT/LC08/C01/T1_SR'\n          \n(ee.ImageCollection(ds)\n    .scaleAndOffset()\n    .spectralIndices([\n        'NDVI',\n        'GNDVI',\n        'NDSI'])\n)\n```\n\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003c/table\u003e\n\nThe list of available indices can be retrieved by running:\n\n``` python \neemont.listIndices()\n```\n\nInformation about the indices can also be checked:\n\n``` python \nindices = eemont.indices() \nindices.BAIS2.formula\nindices.BAIS2.reference\n```\n\n### Closest Image to a Specific Date\n\nStruggling to get the closest image to a specific date? Here is the solution: the\n`closest()` method!\n\n\u003ctable\u003e\n\n\u003ctr\u003e\n\u003cth\u003e GEE Python API \u003c/th\u003e\n\u003cth\u003e eemont-style \u003c/th\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd\u003e\n  \n``` python\nds = 'COPERNICUS/S5P/OFFL/L3_NO2'\n          \nxy = [-76.21, 3.45]\npoi = ee.Geometry.Point(xy)\n\ndate = ee.Date('2020-10-15')\ndate = date.millis()\n\ndef setTimeDelta(img):              \n    prop = 'system:time_start'\n    prop = img.get(prop)\n    prop = ee.Number(prop)              \n    delta = prop.subtract(date)\n    delta = delta.abs()              \n    return img.set(\n    'dateDist',\n    delta)                     \n\n(ee.ImageCollection(ds)\n    .filterBounds(poi)\n    .map(setTimeDelta)\n    .sort('dateDist')\n    .first())\n```\n\n\u003c/td\u003e\n\u003ctd\u003e\n\n``` python\nds = 'COPERNICUS/S5P/OFFL/L3_NO2'\n          \nxy = [-76.21, 3.45]\npoi = ee.Geometry.Point(xy)\n\n(ee.ImageCollection(ds)\n    .filterBounds(poi)\n    .closest('2020-10-15'))\n```\n\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003c/table\u003e\n\n\n### Time Series By Regions\n\nThe JavaScript API has a method for time series extraction (included in the `ui.Chart`\nmodule), but this method is missing in the Python API... so, here it is!\n\nPD: Actually, there are two methods that you can use: `getTimeSeriesByRegion()` and\n`getTimeSeriesByRegions()`!\n\n``` python\nf1 = ee.Feature(ee.Geometry.Point([3.984770,48.767221]).buffer(50),{'ID':'A'})\nf2 = ee.Feature(ee.Geometry.Point([4.101367,48.748076]).buffer(50),{'ID':'B'})\nfc = ee.FeatureCollection([f1,f2])\n\nS2 = (ee.ImageCollection('COPERNICUS/S2_SR')\n    .filterBounds(fc)\n    .filterDate('2020-01-01','2021-01-01')\n    .maskClouds()\n    .scaleAndOffset()\n    .spectralIndices(['EVI','NDVI']))\n\n# By Region\nts = S2.getTimeSeriesByRegion(reducer = [ee.Reducer.mean(),ee.Reducer.median()],\n                                geometry = fc,\n                                bands = ['EVI','NDVI'],\n                                scale = 10)\n\n# By Regions\nts = S2.getTimeSeriesByRegions(reducer = [ee.Reducer.mean(),ee.Reducer.median()],\n                                collection = fc,\n                                bands = ['EVI','NDVI'],\n                                scale = 10)\n```\n\n### Constructors by Queries\n\nDon't you have the coordinates of a place? You can construct them by using queries!\n\n``` python\nusr = 'my-eemont-query-example'\n   \nseattle_bbox = ee.Geometry.BBoxFromQuery('Seattle',user_agent = usr)\ncali_coords = ee.Feature.PointFromQuery('Cali, Colombia',user_agent = usr)\namazonas_river = ee.FeatureCollection.MultiPointFromQuery('Río Amazonas',user_agent = usr)\n```\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\u003ctable\u003e\n\n\u003ctr\u003e\n\u003cth\u003e JS (Code Editor) \u003c/th\u003e\n\u003cth\u003e Python (eemont) \u003c/th\u003e\n\u003cth\u003e R (rgee+) \u003c/th\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd\u003e\n  \n``` javascript\nvar usr = 'users/sofiaermida/'\nvar rep = 'landsat_smw_lst:'\nvar fld = 'modules/'\nvar fle = 'Landsat_LST.js'\nvar pth = usr+rep+fld+fle\nvar mod = require(pth)\nvar LST = mod.collection(\n    ee.Geometry.Rectangle([\n        -8.91,\n        40.0,\n        -8.3,\n        40.4\n    ]),\n    'L8',\n    '2018-05-15',\n    '2018-05-31',\n    true\n)\n```\n\n\u003c/td\u003e\n\u003ctd\u003e\n  \n``` python\nimport ee, eemont\nee.Initialize()\nusr = 'users/sofiaermida/'\nrep = 'landsat_smw_lst:'\nfld = 'modules/'\nfle = 'Landsat_LST.js'\npth = usr+rep+fld+fle\nee.install(pth)\nmod = ee.require(pth)\nLST = mod.collection(\n    ee.Geometry.Rectangle([\n        -8.91,\n        40.0,\n        -8.3,\n        40.4\n    ]),\n    'L8',\n    '2018-05-15',\n    '2018-05-31',\n    True\n)\n```\n\n\u003c/td\u003e\n\u003ctd\u003e\n\n``` r\nlibrary(rgee)\nlibrary(rgeeExtra)\nee_Initialize()\nusr \u003c- 'users/sofiaermida/'\nrep \u003c- 'landsat_smw_lst:'\nfld \u003c- 'modules/'\nfle \u003c- 'Landsat_LST.js'\npth \u003c- paste0(usr,rep,fld,fle)\nmod \u003c- ee$require(pth)\nLST = mod$collection(\n    ee$Geometry$Rectangle(c(\n        -8.91,\n        40.0,\n        -8.3,\n        40.4\n    )),\n    'L8',\n    '2018-05-15',\n    '2018-05-31',\n    TRUE\n)\n```\n\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003c/table\u003e\n\n## License\n\nThe project is licensed under the MIT license.\n\n## How to cite\n\nDo you like using eemont and think it is useful? Share the love by citing it!:\n\n```\nMontero, D., (2021). eemont: A Python package that extends Google Earth Engine. \nJournal of Open Source Software, 6(62), 3168, https://doi.org/10.21105/joss.03168\n```\n   \nIf required, here is the BibTex!:\n\n```\n@article{Montero2021,\n    doi = {10.21105/joss.03168},\n    url = {https://doi.org/10.21105/joss.03168},\n    year = {2021},\n    publisher = {The Open Journal},\n    volume = {6},\n    number = {62},\n    pages = {3168},\n    author = {David Montero},\n    title = {eemont: A Python package that extends Google Earth Engine},\n    journal = {Journal of Open Source Software}\n}\n```\n\n## Artists\n\n- [David Montero Loaiza](https://github.com/davemlz): Lead Developer of eemont and eeExtra.\n- [César Aybar](https://github.com/csaybar): Lead Developer of rgee and eeExtra.\n- [Aaron Zuspan](https://github.com/aazuspan): Plus Codes Constructors and Methods, Panchromatic Sharpening and Histogram Matching Developer.\n\n## Credits\n\nSpecial thanks to [Justin Braaten](https://github.com/jdbcode) for featuring eemont in\ntutorials and the GEE Community: Developer Resources Page, to\n[César Aybar](https://github.com/csaybar) for the formidable help with Awesome Spectral\nIndices and to the JOSS Review Team ([Katy Barnhart](https://github.com/kbarnhart),\n[Jayaram Hariharan](https://github.com/elbeejay), [Qiusheng Wu](https://github.com/giswqs)\nand [Patrick Gray](https://github.com/patrickcgray)) for the comments, suggestions and contributions!","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdavemlz%2Feemont","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdavemlz%2Feemont","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdavemlz%2Feemont/lists"}