
# Introduction
TronGisPy aims to automate the whole GIS process on raster data using python interface. To get start, please see [GettingStarted.ipynb](https://github.com/thinktron/TronGisPy/blob/master/GettingStarted.ipynb). The main module are listed below:
- **Raster**: This module is Main class in TronGisPy. Use `ras = tgp.read_raster('<file_path>')` to read the file as Raster object. A Raster object contains all required attribute for a gis raster file such as *.tif* or *.geotiff* file including digital number for each pixel (`ras.data`), number of rows (`ras.rows`), number of columns (`ras.cols`), number of bands (`ras.bands`), geo_transform (`ras.geo_transform`), projection (`ras.projection`), no_data_value and metadata. The Raster object can also be plot with GeoDataFrame(shapefile) on the same canvas using `ras.plot()`. Functions like `ras.reproject()`, `ras.remap()` and `ras.refine_resolution()` are useful functions.
- **CRS**: Convert the projection sys between well known text (WKT) and epsg(`tgp.epsg_to_wkt`, `tgp.wkt_to_epsg`). Convert the indexing sys tem between numpy index and coordinate system(`tgp.coords_to_npidxs`, `tgp.npidxs_to_coords`).
- **ShapeGrid**: Interaction between raster and vector data including `tgp.ShapeGrid.rasterize_layer`, `tgp.ShapeGrid.rasterize_layer_by_ref_raster`, `tgp.ShapeGrid.vectorize_layer`, `tgp.ShapeGrid.clip_raster_with_polygon` and `tgp.ShapeGrid.clip_raster_with_extent`.
- **DEMProcessor**: General dem processing functions including `tgp.DEMProcessor.dem_to_hillshade`, `tgp.DEMProcessor.dem_to_slope`, `tgp.DEMProcessor.dem_to_aspect`, `tgp.DEMProcessor.dem_to_TRI`, `tgp.DEMProcessor.dem_to_TPI` and `tgp.DEMProcessor.dem_to_roughness`.
normalizer.
- **Interpolation**: Interpolation for raster data on specific cells which are usually nan cells. Once majority or mean value in the filter (convolution) are prefered value for interpolation, `tgp.Interpolation.majority_interpolation`, `tgp.Interpolation.mean_interpolation` are written in numba to speed up the process. If Inverse Distance Weight (IDW) method is appropriate, `tgp.Interpolation.gdal_fillnodata` impolemented by GDAL can be called.
- **Normalizer**: Normalize the Image data for model training or plotting. Normalizer can be initialize from `normalizer = tgp.Normalizer()`. Function `normalizer.fit_transform()` can help to normalize the data. Function `normalizer.clip_by_percentage` can be used to clip the head and tail of the data to avoid the outlier affecting plotting.
- **SplittedImage**: Split raster images for machine learning model training. Use `splitted_image = tgp.SplittedImage(raster, box_size, step_size=step_size)` to initialize SplittedImage object. SplittedImage object have `n_steps_h`, `n_steps_w`, `padded_rows`, `padded_cols`, `shape`, `n_splitted_images`, `padded_image` attributes. Function `splitted_image.apply()` can be used to process all splitted images using the funtion. Function `splitted_image.get_geo_attribute()` helps to get the vector of all splitted images and return GeoDataFrame object. When the prediction on each image is done, `splitted_image.write_splitted_images()` can be called to combine the prediction results on each splitted images to have the same size as original raster image.
- **TypeCast**: Mapping the data type betyween gdal and numpy, and convert the gdal data type from integer to readable string. Because gdal use integer to represent defferent data types, `tgp.get_gdaldtype_name()` helps to convert the integer to its data type name in string. Also, once converting the data type between numpy and gdal is required, `tgp.gdaldtype_to_npdtype` and `tgp.npdtype_to_gdaldtype` can help.
- **io**: Create, read and update the raster from the raster file. Use `tgp.read_raster` to read raster file as Raster object. Functions `tgp.get_raster_info` and `tgp.get_raster_extent` can be used when you don't want to read all digital value of the raster into the memory. Function `tgp.update_raster_info` can used to update the infomation of the raster file such as projection and geo_transform. Finally, if you want to get the testing file, `tgp.get_testing_fp` can help.
<!-- 6. AeroTriangulation: Do the aero-triangulation calculation.
10. GisIO: Some file-based gis functions. -->
# Contributor
## Author
- [GoatWang/王選仲](https://github.com/GoatWang), AI Engineer from Thinktron
- [DavidHuang/黃梓育](https://github.com/moonstarsky37)(聯絡人), AI Engineer from Thinktron
- [Funskie/方子齊](https://github.com/Funskie), AI Engineer from Thinktron
## Domain Instructor
- 沈哲緯, Tech Lead of Thinktron
- [YuHsiang/王禹翔](https://github.com/b6100111524)(聯絡人), Remote Sensing Engineer, Section Manager from Thinktron
- 周立生, RD Engineer, Section Manager from Thinktron
- 鄧澤揚, RD Engineer from Thinktron
# Getting Started
To get start, please see [GettingStarted.ipynb](https://github.com/thinktron/TronGisPy/blob/master/GettingStarted.ipynb).
# Install
## Python Version
Python3.6 and Python3.7 is tested.
## Windows
1. Install preinstalls from pre-build wheel package
- Python3.6
- [GDAL==3.0.4](https://www.lfd.uci.edu/~gohlke/pythonlibs/#gdal)
- [Fiona==1.8.13](https://www.lfd.uci.edu/~gohlke/pythonlibs/#fiona)
- [Shapely==1.6.4.post2](https://www.lfd.uci.edu/~gohlke/pythonlibs/#shapely)
- [geopandas==0.7.0](https://www.lfd.uci.edu/~gohlke/pythonlibs/#geopandas)
- [Rtree==0.9.4](https://www.lfd.uci.edu/~gohlke/pythonlibs/#rtree)
- [opencv_python>=4.1.2](https://www.lfd.uci.edu/~gohlke/pythonlibs/#opencv)
- Python3.7
- [GDAL==3.3.1](https://www.lfd.uci.edu/~gohlke/pythonlibs/#gdal)
- [Fiona==1.8.20](https://www.lfd.uci.edu/~gohlke/pythonlibs/#fiona)
- [Shapely==1.7.1](https://www.lfd.uci.edu/~gohlke/pythonlibs/#shapely)
- [geopandas==0.9.0](https://www.lfd.uci.edu/~gohlke/pythonlibs/#geopandas)
- [Rtree==0.9.7](https://www.lfd.uci.edu/~gohlke/pythonlibs/#rtree)
- [opencv_python==4.5.3](https://www.lfd.uci.edu/~gohlke/pythonlibs/#opencv)
2. Install TronGisPy
```
pip install TronGisPy
```
## Linux
- Python3.6
1. Build GDAL==3.0.4 by yourself
2. Build opencv by yourself
3. install other preinstalls from public pypi server
```
pip install GDAL==3.0.4 Fiona==1.8.13 Shapely==1.6.4.post2 geopandas==0.7.0 Rtree>=0.9.4
```
4. Install TronGisPy
```
pip install TronGisPy
```
- Python3.7
1. Build GDAL==3.3.1 by yourself
2. Build opencv by yourself
3. install other preinstalls from public pypi server
```
pip install GDAL==3.3.1 Fiona==1.8.20 Shapely==1.1.1 geopandas==0.9.0 Rtree==0.9.7
```
4. Install TronGisPy
```
pip install TronGisPy
```
## Docker
```
sudo docker run -it --rm jeremy4555/trongispy:latest
```
<!--
## Taiwan DataCube
1. uninstall gdal
```
pip uninstall gdal
```
2. install requirements for gdal
```
sudo apt-get install python3-dev build-essential libssl-dev libffi-dev libxml2-dev libxslt1-dev zlib1g-dev
```
3. add gdal path
```
echo "export CPLUS_INCLUDE_PATH=/usr/include/gdal" >> ~/.profile
echo "export C_INCLUDE_PATH=/usr/include/gdal" >> ~/.profile
source ~/.profile
```
4. install gdal
```
pip install GDAL==3.0.4
``` -->
# For Developer
## Build
```bash
python setup.py sdist bdist_wheel
```
<!-- ## Document Generation
0. [Installaion](https://sphinx-rtd-tutorial.readthedocs.io/en/latest/install.html)
```
pip install sphinx
pip install sphinx-rtd-theme
pip install numpydoc
```
1. generatate index.rst (https://docs.readthedocs.io/en/stable/intro/getting-started-with-sphinx.html)
```
mkdir docs
cd docs
sphinx-quickstart
```
2. modify docs/source/conf.py (https://www.sphinx-doc.org/en/master/usage/extensions/napoleon.html)
```
vim source/conf.py
```
```
base_dir = os.path.dirname(os.path.realpath(__file__))
sys.path.insert(0, os.path.abspath(os.path.join(base_dir, '..', '..')))
html_theme = "classic"
extensions = ['sphinx.ext.napoleon']
exclude_patterns = ['setup.py', 'req_generator.py', 'test.py']
```
3. generate TronGisPy rst
```
cd ..
python clean_docs_source.py
sphinx-apidoc --force --separate --module-first -o docs\source .
```
4. generate html
```
cd docs
make clean
make html
``` -->
## Docker Build
```
sudo docker build -t <dockerhub_id>/trongispy:latest -< Dockerfile
```
# Reference
1. [Logo](https://github.com/thinktron/TronGisPy/blob/master/static/trongispy.01-01.png)
# For Thinktron Worker
## Install on Windows
1. Install preinstall thinktron pypi server
```
# python36
pip install -U --index-url http://192.168.0.128:28181/simple --trusted-host 192.168.0.128 GDAL>=3.0.4 Fiona>=1.8.13 Shapely>=1.6.4.post2 geopandas>=0.7.0 Rtree>=0.9.4 opencv_python>=4.1.2
# python37
pip install pyproj
pip install -U --index-url http://192.168.0.128:28181/simple --trusted-host 192.168.0.128 GDAL Fiona Shapely geopandas Rtree opencv_python
```
2. Install TronGisPy from thinktron pypi server (Windows)
```
pip install TronGisPy
```
Raw data
{
"_id": null,
"home_page": "https://github.com/thinktron/TronGisPy",
"name": "TronGisPy",
"maintainer": "",
"docs_url": null,
"requires_python": "",
"maintainer_email": "",
"keywords": "",
"author": "Thinktron",
"author_email": "jeremywang@thinktronltd.com, moon.starsky37@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/fb/2d/c64277d9d337be31e9a7eb8d2e1de5ba1d655e3317788e1acccc77cedc27/TronGisPy-1.4.8.tar.gz",
"platform": null,
"description": "\n\n# Introduction\nTronGisPy aims to automate the whole GIS process on raster data using python interface. To get start, please see [GettingStarted.ipynb](https://github.com/thinktron/TronGisPy/blob/master/GettingStarted.ipynb). The main module are listed below:\n\n- **Raster**: This module is Main class in TronGisPy. Use `ras = tgp.read_raster('<file_path>')` to read the file as Raster object. A Raster object contains all required attribute for a gis raster file such as *.tif* or *.geotiff* file including digital number for each pixel (`ras.data`), number of rows (`ras.rows`), number of columns (`ras.cols`), number of bands (`ras.bands`), geo_transform (`ras.geo_transform`), projection (`ras.projection`), no_data_value and metadata. The Raster object can also be plot with GeoDataFrame(shapefile) on the same canvas using `ras.plot()`. Functions like `ras.reproject()`, `ras.remap()` and `ras.refine_resolution()` are useful functions.\n\n- **CRS**: Convert the projection sys between well known text (WKT) and epsg(`tgp.epsg_to_wkt`, `tgp.wkt_to_epsg`). Convert the indexing sys tem between numpy index and coordinate system(`tgp.coords_to_npidxs`, `tgp.npidxs_to_coords`).\n\n- **ShapeGrid**: Interaction between raster and vector data including `tgp.ShapeGrid.rasterize_layer`, `tgp.ShapeGrid.rasterize_layer_by_ref_raster`, `tgp.ShapeGrid.vectorize_layer`, `tgp.ShapeGrid.clip_raster_with_polygon` and `tgp.ShapeGrid.clip_raster_with_extent`.\n\n- **DEMProcessor**: General dem processing functions including `tgp.DEMProcessor.dem_to_hillshade`, `tgp.DEMProcessor.dem_to_slope`, `tgp.DEMProcessor.dem_to_aspect`, `tgp.DEMProcessor.dem_to_TRI`, `tgp.DEMProcessor.dem_to_TPI` and `tgp.DEMProcessor.dem_to_roughness`.\nnormalizer.\n- **Interpolation**: Interpolation for raster data on specific cells which are usually nan cells. Once majority or mean value in the filter (convolution) are prefered value for interpolation, `tgp.Interpolation.majority_interpolation`, `tgp.Interpolation.mean_interpolation` are written in numba to speed up the process. If Inverse Distance Weight (IDW) method is appropriate, `tgp.Interpolation.gdal_fillnodata` impolemented by GDAL can be called.\n\n- **Normalizer**: Normalize the Image data for model training or plotting. Normalizer can be initialize from `normalizer = tgp.Normalizer()`. Function `normalizer.fit_transform()` can help to normalize the data. Function `normalizer.clip_by_percentage` can be used to clip the head and tail of the data to avoid the outlier affecting plotting.\n\n- **SplittedImage**: Split raster images for machine learning model training. Use `splitted_image = tgp.SplittedImage(raster, box_size, step_size=step_size)` to initialize SplittedImage object. SplittedImage object have `n_steps_h`, `n_steps_w`, `padded_rows`, `padded_cols`, `shape`, `n_splitted_images`, `padded_image` attributes. Function `splitted_image.apply()` can be used to process all splitted images using the funtion. Function `splitted_image.get_geo_attribute()` helps to get the vector of all splitted images and return GeoDataFrame object. When the prediction on each image is done, `splitted_image.write_splitted_images()` can be called to combine the prediction results on each splitted images to have the same size as original raster image.\n\n- **TypeCast**: Mapping the data type betyween gdal and numpy, and convert the gdal data type from integer to readable string. Because gdal use integer to represent defferent data types, `tgp.get_gdaldtype_name()` helps to convert the integer to its data type name in string. Also, once converting the data type between numpy and gdal is required, `tgp.gdaldtype_to_npdtype` and `tgp.npdtype_to_gdaldtype` can help.\n\n- **io**: Create, read and update the raster from the raster file. Use `tgp.read_raster` to read raster file as Raster object. Functions `tgp.get_raster_info` and `tgp.get_raster_extent` can be used when you don't want to read all digital value of the raster into the memory. Function `tgp.update_raster_info` can used to update the infomation of the raster file such as projection and geo_transform. Finally, if you want to get the testing file, `tgp.get_testing_fp` can help.\n\n<!-- 6. AeroTriangulation: Do the aero-triangulation calculation.\n10. GisIO: Some file-based gis functions. -->\n\n# Contributor\n## Author\n- [GoatWang/\u738b\u9078\u4ef2](https://github.com/GoatWang), AI Engineer from Thinktron\n- [DavidHuang/\u9ec3\u6893\u80b2](https://github.com/moonstarsky37)(\u806f\u7d61\u4eba), AI Engineer from Thinktron\n- [Funskie/\u65b9\u5b50\u9f4a](https://github.com/Funskie), AI Engineer from Thinktron\n\n## Domain Instructor \n- \u6c88\u54f2\u7def, Tech Lead of Thinktron\n- [YuHsiang/\u738b\u79b9\u7fd4](https://github.com/b6100111524)(\u806f\u7d61\u4eba), Remote Sensing Engineer, Section Manager from Thinktron\n- \u5468\u7acb\u751f, RD Engineer, Section Manager from Thinktron\n- \u9127\u6fa4\u63da, RD Engineer from Thinktron\n\n# Getting Started\nTo get start, please see [GettingStarted.ipynb](https://github.com/thinktron/TronGisPy/blob/master/GettingStarted.ipynb).\n\n# Install\n## Python Version\nPython3.6 and Python3.7 is tested.\n\n## Windows\n1. Install preinstalls from pre-build wheel package\n - Python3.6\n - [GDAL==3.0.4](https://www.lfd.uci.edu/~gohlke/pythonlibs/#gdal)\n - [Fiona==1.8.13](https://www.lfd.uci.edu/~gohlke/pythonlibs/#fiona)\n - [Shapely==1.6.4.post2](https://www.lfd.uci.edu/~gohlke/pythonlibs/#shapely)\n - [geopandas==0.7.0](https://www.lfd.uci.edu/~gohlke/pythonlibs/#geopandas)\n - [Rtree==0.9.4](https://www.lfd.uci.edu/~gohlke/pythonlibs/#rtree)\n - [opencv_python>=4.1.2](https://www.lfd.uci.edu/~gohlke/pythonlibs/#opencv)\n - Python3.7\n - [GDAL==3.3.1](https://www.lfd.uci.edu/~gohlke/pythonlibs/#gdal)\n - [Fiona==1.8.20](https://www.lfd.uci.edu/~gohlke/pythonlibs/#fiona)\n - [Shapely==1.7.1](https://www.lfd.uci.edu/~gohlke/pythonlibs/#shapely)\n - [geopandas==0.9.0](https://www.lfd.uci.edu/~gohlke/pythonlibs/#geopandas)\n - [Rtree==0.9.7](https://www.lfd.uci.edu/~gohlke/pythonlibs/#rtree)\n - [opencv_python==4.5.3](https://www.lfd.uci.edu/~gohlke/pythonlibs/#opencv)\n\n2. Install TronGisPy\n ```\n pip install TronGisPy\n ```\n\n## Linux\n- Python3.6\n 1. Build GDAL==3.0.4 by yourself\n 2. Build opencv by yourself\n 3. install other preinstalls from public pypi server\n ```\n pip install GDAL==3.0.4 Fiona==1.8.13 Shapely==1.6.4.post2 geopandas==0.7.0 Rtree>=0.9.4\n ```\n 4. Install TronGisPy\n ```\n pip install TronGisPy\n ```\n\n- Python3.7\n 1. Build GDAL==3.3.1 by yourself\n 2. Build opencv by yourself\n 3. install other preinstalls from public pypi server\n ```\n pip install GDAL==3.3.1 Fiona==1.8.20 Shapely==1.1.1 geopandas==0.9.0 Rtree==0.9.7\n ```\n 4. Install TronGisPy\n ```\n pip install TronGisPy\n ```\n\n## Docker\n```\nsudo docker run -it --rm jeremy4555/trongispy:latest\n```\n\n<!-- \n## Taiwan DataCube\n1. uninstall gdal\n```\npip uninstall gdal\n```\n\n2. install requirements for gdal\n```\nsudo apt-get install python3-dev build-essential libssl-dev libffi-dev libxml2-dev libxslt1-dev zlib1g-dev\n```\n\n\n3. add gdal path\n```\necho \"export CPLUS_INCLUDE_PATH=/usr/include/gdal\" >> ~/.profile\necho \"export C_INCLUDE_PATH=/usr/include/gdal\" >> ~/.profile\nsource ~/.profile\n```\n\n4. install gdal\n```\npip install GDAL==3.0.4\n``` -->\n\n# For Developer\n## Build\n```bash\npython setup.py sdist bdist_wheel\n```\n<!-- ## Document Generation\n0. [Installaion](https://sphinx-rtd-tutorial.readthedocs.io/en/latest/install.html)\n```\npip install sphinx\npip install sphinx-rtd-theme\npip install numpydoc\n```\n\n1. generatate index.rst (https://docs.readthedocs.io/en/stable/intro/getting-started-with-sphinx.html)\n```\nmkdir docs\ncd docs\nsphinx-quickstart\n```\n\n2. modify docs/source/conf.py (https://www.sphinx-doc.org/en/master/usage/extensions/napoleon.html)\n```\nvim source/conf.py\n```\n```\nbase_dir = os.path.dirname(os.path.realpath(__file__))\nsys.path.insert(0, os.path.abspath(os.path.join(base_dir, '..', '..')))\n\nhtml_theme = \"classic\"\nextensions = ['sphinx.ext.napoleon']\nexclude_patterns = ['setup.py', 'req_generator.py', 'test.py']\n```\n\n3. generate TronGisPy rst\n```\ncd ..\npython clean_docs_source.py\nsphinx-apidoc --force --separate --module-first -o docs\\source .\n```\n\n4. generate html\n```\ncd docs\nmake clean\nmake html\n``` -->\n\n## Docker Build\n```\nsudo docker build -t <dockerhub_id>/trongispy:latest -< Dockerfile\n```\n\n# Reference\n1. [Logo](https://github.com/thinktron/TronGisPy/blob/master/static/trongispy.01-01.png)\n\n\n# For Thinktron Worker\n## Install on Windows\n1. Install preinstall thinktron pypi server\n```\n# python36\npip install -U --index-url http://192.168.0.128:28181/simple --trusted-host 192.168.0.128 GDAL>=3.0.4 Fiona>=1.8.13 Shapely>=1.6.4.post2 geopandas>=0.7.0 Rtree>=0.9.4 opencv_python>=4.1.2\n\n# python37\npip install pyproj\npip install -U --index-url http://192.168.0.128:28181/simple --trusted-host 192.168.0.128 GDAL Fiona Shapely geopandas Rtree opencv_python\n```\n\n2. Install TronGisPy from thinktron pypi server (Windows)\n```\npip install TronGisPy \n```\n",
"bugtrack_url": null,
"license": "",
"summary": "Gis raster data processing tool",
"version": "1.4.8",
"project_urls": {
"Homepage": "https://github.com/thinktron/TronGisPy"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "d2c1ccc6c87e4f40383572f5078f24f9c393561c43de2a29e5f997049fe7b4a0",
"md5": "d3b56e6bb9900bb51c046ad9e0338f3a",
"sha256": "54380cd67ee99751656a889cbfa782d8fe53c3cd90f70ba2b2b9bf0e36d2da04"
},
"downloads": -1,
"filename": "TronGisPy-1.4.8-py3-none-any.whl",
"has_sig": false,
"md5_digest": "d3b56e6bb9900bb51c046ad9e0338f3a",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 20775206,
"upload_time": "2023-12-25T13:59:16",
"upload_time_iso_8601": "2023-12-25T13:59:16.369093Z",
"url": "https://files.pythonhosted.org/packages/d2/c1/ccc6c87e4f40383572f5078f24f9c393561c43de2a29e5f997049fe7b4a0/TronGisPy-1.4.8-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "fb2dc64277d9d337be31e9a7eb8d2e1de5ba1d655e3317788e1acccc77cedc27",
"md5": "c744425515a483cf29c7c368c4afe7eb",
"sha256": "e900f7bfd0bfe7cf55db16c4541e14370aa6a7d97490ad212f0f12501a7c14ce"
},
"downloads": -1,
"filename": "TronGisPy-1.4.8.tar.gz",
"has_sig": false,
"md5_digest": "c744425515a483cf29c7c368c4afe7eb",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 20615345,
"upload_time": "2023-12-25T13:59:19",
"upload_time_iso_8601": "2023-12-25T13:59:19.632057Z",
"url": "https://files.pythonhosted.org/packages/fb/2d/c64277d9d337be31e9a7eb8d2e1de5ba1d655e3317788e1acccc77cedc27/TronGisPy-1.4.8.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-12-25 13:59:19",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "thinktron",
"github_project": "TronGisPy",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"requirements": [
{
"name": "affine",
"specs": [
[
"==",
"2.3.0"
]
]
},
{
"name": "alabaster",
"specs": [
[
"==",
"0.7.12"
]
]
},
{
"name": "astroid",
"specs": [
[
"==",
"2.4.2"
]
]
},
{
"name": "attrs",
"specs": [
[
"==",
"19.3.0"
]
]
},
{
"name": "autopep8",
"specs": [
[
"==",
"1.5.3"
]
]
},
{
"name": "Babel",
"specs": [
[
"==",
"2.8.0"
]
]
},
{
"name": "bleach",
"specs": [
[
"==",
"3.1.5"
]
]
},
{
"name": "certifi",
"specs": [
[
"==",
"2020.4.5.2"
]
]
},
{
"name": "chardet",
"specs": [
[
"==",
"3.0.4"
]
]
},
{
"name": "click",
"specs": [
[
"==",
"7.1.2"
]
]
},
{
"name": "click-plugins",
"specs": [
[
"==",
"1.1.1"
]
]
},
{
"name": "cligj",
"specs": [
[
"==",
"0.5.0"
]
]
},
{
"name": "colorama",
"specs": [
[
"==",
"0.4.3"
]
]
},
{
"name": "cycler",
"specs": [
[
"==",
"0.10.0"
]
]
},
{
"name": "decorator",
"specs": [
[
"==",
"4.4.2"
]
]
},
{
"name": "descartes",
"specs": [
[
"==",
"1.1.0"
]
]
},
{
"name": "docutils",
"specs": [
[
"==",
"0.16"
]
]
},
{
"name": "Fiona",
"specs": [
[
"==",
"1.8.13"
]
]
},
{
"name": "GDAL",
"specs": [
[
"==",
"3.0.4"
]
]
},
{
"name": "geopandas",
"specs": [
[
"==",
"0.7.0"
]
]
},
{
"name": "idna",
"specs": [
[
"==",
"2.9"
]
]
},
{
"name": "imagesize",
"specs": [
[
"==",
"1.2.0"
]
]
},
{
"name": "importlib-metadata",
"specs": [
[
"==",
"1.6.1"
]
]
},
{
"name": "isort",
"specs": [
[
"==",
"4.3.21"
]
]
},
{
"name": "Jinja2",
"specs": [
[
"==",
"2.11.2"
]
]
},
{
"name": "joblib",
"specs": [
[
"==",
"0.15.1"
]
]
},
{
"name": "keyring",
"specs": [
[
"==",
"21.2.1"
]
]
},
{
"name": "kiwisolver",
"specs": [
[
"==",
"1.2.0"
]
]
},
{
"name": "lazy-object-proxy",
"specs": [
[
"==",
"1.4.3"
]
]
},
{
"name": "llvmlite",
"specs": [
[
"==",
"0.32.1"
]
]
},
{
"name": "MarkupSafe",
"specs": [
[
"==",
"1.1.1"
]
]
},
{
"name": "matplotlib",
"specs": [
[
"==",
"3.2.1"
]
]
},
{
"name": "mccabe",
"specs": [
[
"==",
"0.6.1"
]
]
},
{
"name": "munch",
"specs": [
[
"==",
"2.5.0"
]
]
},
{
"name": "numba",
"specs": [
[
"==",
"0.49.1"
]
]
},
{
"name": "numpy",
"specs": [
[
"==",
"1.18.5"
]
]
},
{
"name": "numpydoc",
"specs": [
[
"==",
"1.1.0"
]
]
},
{
"name": "opencv-python",
"specs": [
[
"==",
"4.1.2"
]
]
},
{
"name": "packaging",
"specs": [
[
"==",
"20.4"
]
]
},
{
"name": "pandas",
"specs": [
[
"==",
"1.0.4"
]
]
},
{
"name": "pkginfo",
"specs": [
[
"==",
"1.5.0.1"
]
]
},
{
"name": "pycodestyle",
"specs": [
[
"==",
"2.6.0"
]
]
},
{
"name": "Pygments",
"specs": [
[
"==",
"2.6.1"
]
]
},
{
"name": "pylint",
"specs": [
[
"==",
"2.5.3"
]
]
},
{
"name": "pyparsing",
"specs": [
[
"==",
"2.4.7"
]
]
},
{
"name": "pyproj",
"specs": [
[
"==",
"2.6.1.post1"
]
]
},
{
"name": "python-dateutil",
"specs": [
[
"==",
"2.8.1"
]
]
},
{
"name": "pytz",
"specs": [
[
"==",
"2020.1"
]
]
},
{
"name": "pywin32-ctypes",
"specs": [
[
"==",
"0.2.0"
]
]
},
{
"name": "readme-renderer",
"specs": [
[
"==",
"26.0"
]
]
},
{
"name": "requests",
"specs": [
[
"==",
"2.23.0"
]
]
},
{
"name": "requests-toolbelt",
"specs": [
[
"==",
"0.9.1"
]
]
},
{
"name": "Rtree",
"specs": [
[
"==",
"0.9.4"
]
]
},
{
"name": "scikit-learn",
"specs": [
[
"==",
"0.23.1"
]
]
},
{
"name": "scipy",
"specs": [
[
"==",
"1.4.1"
]
]
},
{
"name": "Shapely",
"specs": [
[
"==",
"1.6.4.post2"
]
]
},
{
"name": "six",
"specs": [
[
"==",
"1.15.0"
]
]
},
{
"name": "snowballstemmer",
"specs": [
[
"==",
"2.0.0"
]
]
},
{
"name": "Sphinx",
"specs": [
[
"==",
"3.2.1"
]
]
},
{
"name": "sphinx-rtd-theme",
"specs": [
[
"==",
"0.5.0"
]
]
},
{
"name": "sphinxcontrib-applehelp",
"specs": [
[
"==",
"1.0.2"
]
]
},
{
"name": "sphinxcontrib-devhelp",
"specs": [
[
"==",
"1.0.2"
]
]
},
{
"name": "sphinxcontrib-htmlhelp",
"specs": [
[
"==",
"1.0.3"
]
]
},
{
"name": "sphinxcontrib-jsmath",
"specs": [
[
"==",
"1.0.1"
]
]
},
{
"name": "sphinxcontrib-qthelp",
"specs": [
[
"==",
"1.0.3"
]
]
},
{
"name": "sphinxcontrib-serializinghtml",
"specs": [
[
"==",
"1.1.4"
]
]
},
{
"name": "threadpoolctl",
"specs": [
[
"==",
"2.1.0"
]
]
},
{
"name": "toml",
"specs": [
[
"==",
"0.10.1"
]
]
},
{
"name": "tqdm",
"specs": [
[
"==",
"4.46.1"
]
]
},
{
"name": "twine",
"specs": [
[
"==",
"3.1.1"
]
]
},
{
"name": "typed-ast",
"specs": [
[
"==",
"1.4.1"
]
]
},
{
"name": "urllib3",
"specs": [
[
"==",
"1.25.9"
]
]
},
{
"name": "webencodings",
"specs": [
[
"==",
"0.5.1"
]
]
},
{
"name": "wrapt",
"specs": [
[
"==",
"1.12.1"
]
]
},
{
"name": "zipp",
"specs": [
[
"==",
"3.1.0"
]
]
}
],
"lcname": "trongispy"
}