{"id":15008865,"url":"https://github.com/ozak/georasters","last_synced_at":"2025-05-15T20:01:51.507Z","repository":{"id":24024412,"uuid":"27409039","full_name":"ozak/georasters","owner":"ozak","description":"GeoRasters is a Python module that provides a fast and flexible tool to work with GIS raster files.","archived":false,"fork":false,"pushed_at":"2024-12-07T01:01:20.000Z","size":11634,"stargazers_count":200,"open_issues_count":19,"forks_count":36,"subscribers_count":12,"default_branch":"master","last_synced_at":"2025-04-01T04:52:11.950Z","etag":null,"topics":["gis-raster-files","python","python-3","python-library","python2","python3"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ozak.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","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}},"created_at":"2014-12-02T01:29:08.000Z","updated_at":"2025-03-09T06:31:03.000Z","dependencies_parsed_at":"2024-03-02T03:28:36.624Z","dependency_job_id":"599adc11-ed29-4d01-a88e-a8c4601f266d","html_url":"https://github.com/ozak/georasters","commit_stats":{"total_commits":230,"total_committers":10,"mean_commits":23.0,"dds":"0.11739130434782608","last_synced_commit":"898626e87a2c093b4b6a42d1fb448964ef8a0497"},"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ozak%2Fgeorasters","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ozak%2Fgeorasters/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ozak%2Fgeorasters/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ozak%2Fgeorasters/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ozak","download_url":"https://codeload.github.com/ozak/georasters/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247792247,"owners_count":20996881,"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":["gis-raster-files","python","python-3","python-library","python2","python3"],"created_at":"2024-09-24T19:21:11.068Z","updated_at":"2025-04-08T06:33:19.992Z","avatar_url":"https://github.com/ozak.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ca href=\"https://pypi.python.org/pypi/georasters/\"\u003e![PyPiVersion](https://img.shields.io/pypi/v/georasters.svg)\u003c/a\u003e [![Anaconda-Server Badge](https://anaconda.org/conda-forge/georasters/badges/version.svg)](https://anaconda.org/conda-forge/georasters)  \u003ca href=\"\"\u003e![Pyversions](https://img.shields.io/pypi/pyversions/georasters.svg)\u003c/a\u003e \u003ca href=\"https://georasters.readthedocs.io/en/latest/\"\u003e![ReadTheDocs](https://readthedocs.org/projects/georasters/badge/?version=latest\u0026style=plastic)\u003c/a\u003e \u003ca href=\"https://coveralls.io/r/ozak/georasters\"\u003e![CoverageStatus](https://img.shields.io/coveralls/ozak/georasters.svg)\u003c/a\u003e [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/ozak/georasters/master) [![Binder](https://img.shields.io/badge/launch-JupyterLab-579ACA.svg?logo=data:image/png;base64,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)](https://mybinder.org/v2/gh/ozak/georasters/master?urlpath=lab/tree/) [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.4058462.svg)](https://doi.org/10.5281/zenodo.4058462)\n\nGeoRasters\n---\n\nThe `GeoRasters` package is a python module that provides a fast and flexible tool to work with GIS raster files. It provides the GeoRaster class, which makes working with rasters quite transparent and easy. In a way it tries to do for rasters what [GeoPandas](https://github.com/geopandas/geopandas) does for geometries.\n\nIt includes tools to\n\n-   Merge rasters\n-   Plot rasters\n-   Extract information from rasters\n-   Given a point (lat,lon) find its location in a raster\n-   Aggregate rasters to lower resolutions\n-   Align two rasters of different sizes to common area and size\n-   Get all the geographical information of raster\n-   Create GeoTiff files easily\n-   Load GeoTiff files as masked numpy rasters\n-   Clip raster using geometries\n-   Get zonal statistics using geometries\n-   Spatial analysis tools\n\nInstall\n-------\n\n``GeoRasters`` can be installed using ``pip`` or ``conda``.\n\n    pip install git+git://github.com/ozak/georasters.git\n    pip install georasters\n    conda install -c conda-forge georasters\n    conda install -c ozak georasters\n\nYou can try it out easily using ``conda env`` and the provided scripts:\n\n * [try_georasters2.yml](https://github.com/ozak/georasters/blob/master/try_georasters2.yml) creates a GIS functional ``python-2.7`` environment\n * [try_georasters3.yml](https://github.com/ozak/georasters/blob/master/try_georasters3.yml) creates a GIS functional ``python-3.5`` environment.\n\nRequirements\n------------\nYou need to install the following software for ``georasters`` to work.\n\n* GDAL\n\nExample Usage: GeoRasters\n-------------------------\n\n```python\nimport georasters as gr\nimport numpy as np\n\n# Load data\nraster = './data/slope.tif'\ndata = gr.from_file(raster)\n\n# Plot data\ndata.plot()\n\n# Get some stats\ndata.mean()\ndata.sum()\ndata.std()\n\n# Convert to Pandas DataFrame\ndf = data.to_pandas()\n\n# Save transformed data to GeoTiff\ndata2 = data**2\ndata2.to_tiff('./data2')\n\n# Algebra with rasters\ndata3 = np.sin(data.raster) / data2\ndata3.plot()\n\n# Notice that by using the data.raster object,\n# you can do any mathematical operation that handles\n# Numpy Masked Arrays\n\n# Find value at point (x,y) or at vectors (X,Y)\nvalue = data.map_pixel(x,y)\nValue = data.map_pixel(X,Y)\n```\n\nExample Merge GeoRasters:\n-------------------------\n```python\nimport os\nimport georasters as gr\nimport matplotlib.pyplot as plt\n\nDATA = \"/path/to/tiff/files\"\n\n# Import raster\nraster = os.path.join(DATA, 'pre1500.tif')\ndata = gr.from_file(raster)\n(xmin, xsize, x, ymax, y, ysize) = data.geot\n\n# Split raster in two\ndata1 = gr.GeoRaster(data.raster[:data.shape[0] / 2, :],\n\t\t\t\t\t data.geot,\n\t\t\t\t\t nodata_value=data.nodata_value,\n\t\t\t\t\t projection=data.projection,\n\t\t\t\t\t datatype=data.datatype)\n\ndata2 = gr.GeoRaster(data.raster[data.shape[0] / 2:, :],\n\t\t\t\t\t (xmin, xsize, x, ymax + ysize * data.shape[0] / 2, y, ysize),\n\t\t\t\t\t nodata_value=data.nodata_value,\n\t\t\t\t\t projection=data.projection,\n\t\t\t\t\t datatype=data.datatype,)\n\n# Plot both parts and save them\nplt.figure(figsize=(12, 8))\ndata1.plot()\nplt.savefig(os.path.join(DATA, 'data1.png'), bbox_inches='tight')\n```\n\n![plot1](./tests/data/data1.png)\n\n```python\nplt.figure(figsize=(12,8))\ndata2.plot()\nplt.savefig(os.path.join(DATA,'data2.png'), bbox_inches='tight')\n```\n\n![plot2](./tests/data/data2.png)\n\n# Generate merged raster\n\n```python\ndata3 = data1.union(data2)\n\n# Plot it and save the figure\nplt.figure(figsize=(12,8))\ndata3.plot()\nplt.savefig(os.path.join(DATA,'data3.png'), bbox_inches='tight')\n```\n\n![plot3](./tests/data/data3.png)\n\n\nAnother Merge:\n==============\n\nExample Usage: Other functions\n==============================\n\n```python\nimport georasters as gr\nimport numpy as np\n\n# Get info on raster\nNDV, xsize, ysize, GeoT, Projection, DataType = gr.get_geo_info(raster)\n\n# Load raster\ndata = load_tiff(raster)\n\n# Find location of point (x,y) on raster, e.g. to extract info at that location\ncol, row = gr.map_pixel(x,y,GeoT[1],GeoT[-1], GeoT[0],GeoT[3])\nvalue = data[row,col]\n\n# Agregate raster by summing over cells in order to increase pixel size by e.g. 10\ngr.aggregate(data,NDV,(10,10))\n\n# Align two rasters\ndata2 = load_tiff(raster2)\n(alignedraster_o, alignedraster_a, GeoT_a) = gr.align_rasters(raster, raster2, how=np.mean)\n\n# Create GeoRaster\nA=gr.GeoRaster(data, GeoT, nodata_value=NDV)\n\n# Load another raster\nNDV, xsize, ysize, GeoT, Projection, DataType = gr.get_geo_info(raster2)\ndata = load_tiff(raster2)\nB=gr.GeoRaster(data2, GeoT, nodata_value=NDV)\n\n# Plot Raster\nA.plot()\n\n# Merge both rasters and plot\nC=B.merge(A)\nC.plot()\n```\n\nIssues\n------\n\nFind a bug? Report it via Github issues by providing\n\n- a link to download the smallest possible raster and vector dataset necessary to reproduce the error\n- python code or command to reproduce the error\n- information on your environment: versions of python, gdal and numpy and system memory\n\n# Copyright \n\n\u0026copy; Ömer Özak (2014)\n\nThis code and data is provided under [Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) License](https://creativecommons.org/licenses/by-sa/4.0/) and [GPLv3](https://www.gnu.org/licenses/gpl-3.0.html).\n![](http://mirrors.creativecommons.org/presskit/buttons/88x31/svg/by-sa.svg) ![](https://www.gnu.org/graphics/gplv3-127x51.png)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fozak%2Fgeorasters","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fozak%2Fgeorasters","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fozak%2Fgeorasters/lists"}