├── docs
├── build
│ ├── html
│ │ ├── .nojekyll
│ │ ├── _static
│ │ │ ├── custom.css
│ │ │ ├── up.png
│ │ │ ├── down.png
│ │ │ ├── file.png
│ │ │ ├── minus.png
│ │ │ ├── plus.png
│ │ │ ├── comment.png
│ │ │ ├── up-pressed.png
│ │ │ ├── ajax-loader.gif
│ │ │ ├── comment-close.png
│ │ │ ├── down-pressed.png
│ │ │ ├── comment-bright.png
│ │ │ ├── fonts
│ │ │ │ ├── Lato-Bold.ttf
│ │ │ │ ├── Lato-Regular.ttf
│ │ │ │ ├── Inconsolata-Bold.ttf
│ │ │ │ ├── RobotoSlab-Bold.ttf
│ │ │ │ ├── Inconsolata-Regular.ttf
│ │ │ │ ├── RobotoSlab-Regular.ttf
│ │ │ │ ├── fontawesome-webfont.eot
│ │ │ │ ├── fontawesome-webfont.ttf
│ │ │ │ └── fontawesome-webfont.woff
│ │ │ ├── css
│ │ │ │ └── badge_only.css
│ │ │ ├── pygments.css
│ │ │ ├── js
│ │ │ │ ├── theme.js
│ │ │ │ └── modernizr.min.js
│ │ │ ├── doctools.js
│ │ │ ├── underscore.js
│ │ │ ├── basic.css
│ │ │ └── alabaster.css
│ │ ├── _sources
│ │ │ ├── functions.rst.txt
│ │ │ ├── modules.rst.txt
│ │ │ ├── eeconvert.rst.txt
│ │ │ ├── installation.rst.txt
│ │ │ ├── eeconvert.tests.rst.txt
│ │ │ ├── index.rst.txt
│ │ │ └── LICENSE.rst.txt
│ │ ├── objects.inv
│ │ ├── .buildinfo
│ │ ├── searchindex.js
│ │ ├── search.html
│ │ ├── modules.html
│ │ ├── functions.html
│ │ ├── py-modindex.html
│ │ ├── eeconvert.tests.html
│ │ ├── LICENSE.html
│ │ ├── installation.html
│ │ ├── index.html
│ │ ├── genindex.html
│ │ └── eeconvert.html
│ └── doctrees
│ │ ├── index.doctree
│ │ ├── LICENSE.doctree
│ │ ├── modules.doctree
│ │ ├── eeconvert.doctree
│ │ ├── environment.pickle
│ │ ├── functions.doctree
│ │ ├── installation.doctree
│ │ └── eeconvert.tests.doctree
├── source
│ ├── modules.rst
│ ├── eeconvert.rst
│ ├── installation.rst
│ ├── eeconvert.tests.rst
│ ├── index.rst
│ ├── LICENSE.rst
│ └── conf.py
├── Makefile
└── make.bat
├── eeconvert
├── tests
│ ├── __init__.py
│ └── test_rutger.py
└── __init__.py
├── requirements.txt
├── .gitignore
├── .travis.yml
├── setup.py
├── examples
└── sample.ipynb
├── LICENSE
└── README.md
/docs/build/html/.nojekyll:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/eeconvert/tests/__init__.py:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/docs/build/html/_static/custom.css:
--------------------------------------------------------------------------------
1 | /* This file intentionally left blank. */
2 |
--------------------------------------------------------------------------------
/docs/build/html/_sources/functions.rst.txt:
--------------------------------------------------------------------------------
1 | Functions
2 | =========
3 |
4 | This is a test
--------------------------------------------------------------------------------
/docs/build/html/objects.inv:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gee-community/eeconvert/master/docs/build/html/objects.inv
--------------------------------------------------------------------------------
/docs/source/modules.rst:
--------------------------------------------------------------------------------
1 | eeconvert
2 | =========
3 |
4 | .. toctree::
5 | :maxdepth: 4
6 |
7 | eeconvert
8 |
--------------------------------------------------------------------------------
/docs/build/html/_static/up.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gee-community/eeconvert/master/docs/build/html/_static/up.png
--------------------------------------------------------------------------------
/docs/build/doctrees/index.doctree:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gee-community/eeconvert/master/docs/build/doctrees/index.doctree
--------------------------------------------------------------------------------
/docs/build/html/_static/down.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gee-community/eeconvert/master/docs/build/html/_static/down.png
--------------------------------------------------------------------------------
/docs/build/html/_static/file.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gee-community/eeconvert/master/docs/build/html/_static/file.png
--------------------------------------------------------------------------------
/docs/build/html/_static/minus.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gee-community/eeconvert/master/docs/build/html/_static/minus.png
--------------------------------------------------------------------------------
/docs/build/html/_static/plus.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gee-community/eeconvert/master/docs/build/html/_static/plus.png
--------------------------------------------------------------------------------
/docs/build/doctrees/LICENSE.doctree:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gee-community/eeconvert/master/docs/build/doctrees/LICENSE.doctree
--------------------------------------------------------------------------------
/docs/build/doctrees/modules.doctree:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gee-community/eeconvert/master/docs/build/doctrees/modules.doctree
--------------------------------------------------------------------------------
/docs/build/html/_sources/modules.rst.txt:
--------------------------------------------------------------------------------
1 | eeconvert
2 | =========
3 |
4 | .. toctree::
5 | :maxdepth: 4
6 |
7 | eeconvert
8 |
--------------------------------------------------------------------------------
/docs/build/html/_static/comment.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gee-community/eeconvert/master/docs/build/html/_static/comment.png
--------------------------------------------------------------------------------
/docs/build/doctrees/eeconvert.doctree:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gee-community/eeconvert/master/docs/build/doctrees/eeconvert.doctree
--------------------------------------------------------------------------------
/docs/build/doctrees/environment.pickle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gee-community/eeconvert/master/docs/build/doctrees/environment.pickle
--------------------------------------------------------------------------------
/docs/build/doctrees/functions.doctree:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gee-community/eeconvert/master/docs/build/doctrees/functions.doctree
--------------------------------------------------------------------------------
/docs/build/html/_static/up-pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gee-community/eeconvert/master/docs/build/html/_static/up-pressed.png
--------------------------------------------------------------------------------
/docs/build/doctrees/installation.doctree:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gee-community/eeconvert/master/docs/build/doctrees/installation.doctree
--------------------------------------------------------------------------------
/docs/build/html/_static/ajax-loader.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gee-community/eeconvert/master/docs/build/html/_static/ajax-loader.gif
--------------------------------------------------------------------------------
/docs/build/html/_static/comment-close.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gee-community/eeconvert/master/docs/build/html/_static/comment-close.png
--------------------------------------------------------------------------------
/docs/build/html/_static/down-pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gee-community/eeconvert/master/docs/build/html/_static/down-pressed.png
--------------------------------------------------------------------------------
/docs/build/doctrees/eeconvert.tests.doctree:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gee-community/eeconvert/master/docs/build/doctrees/eeconvert.tests.doctree
--------------------------------------------------------------------------------
/docs/build/html/_static/comment-bright.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gee-community/eeconvert/master/docs/build/html/_static/comment-bright.png
--------------------------------------------------------------------------------
/docs/build/html/_static/fonts/Lato-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gee-community/eeconvert/master/docs/build/html/_static/fonts/Lato-Bold.ttf
--------------------------------------------------------------------------------
/docs/build/html/_static/fonts/Lato-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gee-community/eeconvert/master/docs/build/html/_static/fonts/Lato-Regular.ttf
--------------------------------------------------------------------------------
/eeconvert/tests/test_rutger.py:
--------------------------------------------------------------------------------
1 | # content of test_sample.py
2 | def inc(x):
3 | return x + 1
4 |
5 | def test_answer():
6 | assert inc(4) == 5
--------------------------------------------------------------------------------
/requirements.txt:
--------------------------------------------------------------------------------
1 | boto3
2 | botocore
3 | sqlalchemy
4 | earthengine-api
5 | shapely
6 | folium
7 | geojson
8 | branca
9 | pandas
10 | geopandas
11 |
--------------------------------------------------------------------------------
/docs/build/html/_static/fonts/Inconsolata-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gee-community/eeconvert/master/docs/build/html/_static/fonts/Inconsolata-Bold.ttf
--------------------------------------------------------------------------------
/docs/build/html/_static/fonts/RobotoSlab-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gee-community/eeconvert/master/docs/build/html/_static/fonts/RobotoSlab-Bold.ttf
--------------------------------------------------------------------------------
/docs/build/html/_static/fonts/Inconsolata-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gee-community/eeconvert/master/docs/build/html/_static/fonts/Inconsolata-Regular.ttf
--------------------------------------------------------------------------------
/docs/build/html/_static/fonts/RobotoSlab-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gee-community/eeconvert/master/docs/build/html/_static/fonts/RobotoSlab-Regular.ttf
--------------------------------------------------------------------------------
/docs/build/html/_static/fonts/fontawesome-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gee-community/eeconvert/master/docs/build/html/_static/fonts/fontawesome-webfont.eot
--------------------------------------------------------------------------------
/docs/build/html/_static/fonts/fontawesome-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gee-community/eeconvert/master/docs/build/html/_static/fonts/fontawesome-webfont.ttf
--------------------------------------------------------------------------------
/docs/build/html/_static/fonts/fontawesome-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gee-community/eeconvert/master/docs/build/html/_static/fonts/fontawesome-webfont.woff
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Compiled python modules.
2 | *.pyc
3 |
4 | # Setuptools distribution folder.
5 | /dist/
6 | /build/
7 |
8 | # Python egg metadata, regenerated from source files by setuptools.
9 | /*.egg-info
--------------------------------------------------------------------------------
/docs/source/eeconvert.rst:
--------------------------------------------------------------------------------
1 | eeconvert package
2 | =================
3 |
4 | Module contents
5 | ---------------
6 |
7 | .. automodule:: eeconvert
8 | :members:
9 | :undoc-members:
10 | :show-inheritance:
11 |
--------------------------------------------------------------------------------
/docs/build/html/_sources/eeconvert.rst.txt:
--------------------------------------------------------------------------------
1 | eeconvert package
2 | =================
3 |
4 | Module contents
5 | ---------------
6 |
7 | .. automodule:: eeconvert
8 | :members:
9 | :undoc-members:
10 | :show-inheritance:
11 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: python
2 |
3 | os:
4 | - linux
5 |
6 | compiler:
7 | - gcc
8 |
9 | python:
10 | - 2.7
11 | - 3.5
12 | - 3.6
13 |
14 | install:
15 | - pip install -r requirements.txt
16 |
17 | script:
18 | - pytest
19 |
20 |
--------------------------------------------------------------------------------
/docs/build/html/.buildinfo:
--------------------------------------------------------------------------------
1 | # Sphinx build info version 1
2 | # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
3 | config: 70ad31b159ce3ba3a56de573ce42b678
4 | tags: 645f666f9bcd5a90fca523b33c5a78b7
5 |
--------------------------------------------------------------------------------
/docs/source/installation.rst:
--------------------------------------------------------------------------------
1 | Installation
2 | =================
3 |
4 | Step 1:
5 | ---------------
6 |
7 | One of the packages' dependencies is pyproj which requires a compiler to be installed.
8 |
9 | Linux
10 |
11 | `apt-get install gcc`
12 |
13 | MacOS
14 |
15 | Using brew:
16 | `brew install llvm`
17 |
18 |
19 | Windows
20 |
21 | Install MicroSoft Visual
22 |
23 | Step 2:
24 | ---------------
25 |
26 | `pip install eeconvert`
--------------------------------------------------------------------------------
/docs/build/html/_sources/installation.rst.txt:
--------------------------------------------------------------------------------
1 | Installation
2 | =================
3 |
4 | Step 1:
5 | ---------------
6 |
7 | One of the packages' dependencies is pyproj which requires a compiler to be installed.
8 |
9 | Linux
10 |
11 | `apt-get install gcc`
12 |
13 | MacOS
14 |
15 | Using brew:
16 | `brew install llvm`
17 |
18 |
19 | Windows
20 |
21 | Install MicroSoft Visual
22 |
23 | Step 2:
24 | ---------------
25 |
26 | `pip install eeconvert`
--------------------------------------------------------------------------------
/setup.py:
--------------------------------------------------------------------------------
1 | from setuptools import setup
2 |
3 | setup(name='eeconvert',
4 | version='0.1.23',
5 | description='',
6 | url='http://github.com/rutgerhofste/eeconvert',
7 | author='Rutger Hofste',
8 | author_email='rutgerhofste@gmail.com',
9 | license='MIT',
10 | packages=['eeconvert'],
11 | install_requires=['boto3','botocore','sqlalchemy','earthengine-api','shapely','folium','geojson','branca','pandas','geopandas'],
12 | zip_safe=False)
13 |
--------------------------------------------------------------------------------
/docs/source/eeconvert.tests.rst:
--------------------------------------------------------------------------------
1 | eeconvert\.tests package
2 | ========================
3 |
4 | Submodules
5 | ----------
6 |
7 | eeconvert\.tests\.test\_rutger module
8 | -------------------------------------
9 |
10 | .. automodule:: eeconvert.tests.test_rutger
11 | :members:
12 | :undoc-members:
13 | :show-inheritance:
14 |
15 |
16 | Module contents
17 | ---------------
18 |
19 | .. automodule:: eeconvert.tests
20 | :members:
21 | :undoc-members:
22 | :show-inheritance:
23 |
--------------------------------------------------------------------------------
/docs/build/html/_sources/eeconvert.tests.rst.txt:
--------------------------------------------------------------------------------
1 | eeconvert\.tests package
2 | ========================
3 |
4 | Submodules
5 | ----------
6 |
7 | eeconvert\.tests\.test\_rutger module
8 | -------------------------------------
9 |
10 | .. automodule:: eeconvert.tests.test_rutger
11 | :members:
12 | :undoc-members:
13 | :show-inheritance:
14 |
15 |
16 | Module contents
17 | ---------------
18 |
19 | .. automodule:: eeconvert.tests
20 | :members:
21 | :undoc-members:
22 | :show-inheritance:
23 |
--------------------------------------------------------------------------------
/docs/source/index.rst:
--------------------------------------------------------------------------------
1 | .. eeconvert documentation master file, created by
2 | sphinx-quickstart on Tue Jan 9 14:57:18 2018.
3 | You can adapt this file completely to your liking, but it should at least
4 | contain the root `toctree` directive.
5 |
6 | Welcome to eeconvert's documentation!
7 | =====================================
8 |
9 | .. toctree::
10 | :maxdepth: 2
11 | :caption: Contents:
12 |
13 | installation
14 | eeconvert
15 | LICENSE
16 |
17 |
18 |
19 |
20 | Indices and tables
21 | ==================
22 |
23 | * :ref:`genindex`
24 | * :ref:`modindex`
25 | * :ref:`search`
26 |
--------------------------------------------------------------------------------
/docs/build/html/_sources/index.rst.txt:
--------------------------------------------------------------------------------
1 | .. eeconvert documentation master file, created by
2 | sphinx-quickstart on Tue Jan 9 14:57:18 2018.
3 | You can adapt this file completely to your liking, but it should at least
4 | contain the root `toctree` directive.
5 |
6 | Welcome to eeconvert's documentation!
7 | =====================================
8 |
9 | .. toctree::
10 | :maxdepth: 2
11 | :caption: Contents:
12 |
13 | installation
14 | eeconvert
15 | LICENSE
16 |
17 |
18 |
19 |
20 | Indices and tables
21 | ==================
22 |
23 | * :ref:`genindex`
24 | * :ref:`modindex`
25 | * :ref:`search`
26 |
--------------------------------------------------------------------------------
/docs/Makefile:
--------------------------------------------------------------------------------
1 | # Minimal makefile for Sphinx documentation
2 | #
3 |
4 | # You can set these variables from the command line.
5 | SPHINXOPTS =
6 | SPHINXBUILD = sphinx-build
7 | SPHINXPROJ = eeconvert
8 | SOURCEDIR = source
9 | BUILDDIR = build
10 |
11 | # Put it first so that "make" without argument is like "make help".
12 | help:
13 | @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
14 |
15 | .PHONY: help Makefile
16 |
17 | # Catch-all target: route all unknown targets to Sphinx using the new
18 | # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
19 | %: Makefile
20 | @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
--------------------------------------------------------------------------------
/docs/make.bat:
--------------------------------------------------------------------------------
1 | @ECHO OFF
2 |
3 | pushd %~dp0
4 |
5 | REM Command file for Sphinx documentation
6 |
7 | if "%SPHINXBUILD%" == "" (
8 | set SPHINXBUILD=sphinx-build
9 | )
10 | set SOURCEDIR=source
11 | set BUILDDIR=build
12 | set SPHINXPROJ=eeconvert
13 |
14 | if "%1" == "" goto help
15 |
16 | %SPHINXBUILD% >NUL 2>NUL
17 | if errorlevel 9009 (
18 | echo.
19 | echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
20 | echo.installed, then set the SPHINXBUILD environment variable to point
21 | echo.to the full path of the 'sphinx-build' executable. Alternatively you
22 | echo.may add the Sphinx directory to PATH.
23 | echo.
24 | echo.If you don't have Sphinx installed, grab it from
25 | echo.http://sphinx-doc.org/
26 | exit /b 1
27 | )
28 |
29 | %SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS%
30 | goto end
31 |
32 | :help
33 | %SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS%
34 |
35 | :end
36 | popd
37 |
--------------------------------------------------------------------------------
/examples/sample.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "code",
5 | "execution_count": 30,
6 | "metadata": {
7 | "collapsed": true
8 | },
9 | "outputs": [],
10 | "source": [
11 | "import eeconvert\n",
12 | "import ee\n",
13 | "import geopandas as gpd\n",
14 | "ee.Initialize()\n",
15 | "fc = ee.FeatureCollection(\"USDOS/LSIB_SIMPLE/2017\");\n",
16 | "fcEu = fc.filter(ee.Filter.eq(\"wld_rgn\",\"Europe\"))\n",
17 | "fcTest = fcEu.filter(ee.Filter.inList(\"country_co\",[\"PO\",\"NL\"]))\n",
18 | "gdf =eeconvert.fcToGdf(fcTest)"
19 | ]
20 | }
21 | ],
22 | "metadata": {
23 | "kernelspec": {
24 | "display_name": "Python 35",
25 | "language": "python",
26 | "name": "python35"
27 | },
28 | "language_info": {
29 | "codemirror_mode": {
30 | "name": "ipython",
31 | "version": 3
32 | },
33 | "file_extension": ".py",
34 | "mimetype": "text/x-python",
35 | "name": "python",
36 | "nbconvert_exporter": "python",
37 | "pygments_lexer": "ipython3",
38 | "version": "3.5.4"
39 | }
40 | },
41 | "nbformat": 4,
42 | "nbformat_minor": 2
43 | }
44 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2018 Rutger Hofste
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/docs/source/LICENSE.rst:
--------------------------------------------------------------------------------
1 | LICENCE
2 | =======
3 |
4 | MIT License
5 |
6 | Copyright (c) 2018 Rutger Hofste
7 |
8 | Permission is hereby granted, free of charge, to any person obtaining a copy
9 | of this software and associated documentation files (the "Software"), to deal
10 | in the Software without restriction, including without limitation the rights
11 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12 | copies of the Software, and to permit persons to whom the Software is
13 | furnished to do so, subject to the following conditions:
14 |
15 | The above copyright notice and this permission notice shall be included in all
16 | copies or substantial portions of the Software.
17 |
18 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
24 | SOFTWARE.
25 |
--------------------------------------------------------------------------------
/docs/build/html/_sources/LICENSE.rst.txt:
--------------------------------------------------------------------------------
1 | LICENCE
2 | =======
3 |
4 | MIT License
5 |
6 | Copyright (c) 2018 Rutger Hofste
7 |
8 | Permission is hereby granted, free of charge, to any person obtaining a copy
9 | of this software and associated documentation files (the "Software"), to deal
10 | in the Software without restriction, including without limitation the rights
11 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12 | copies of the Software, and to permit persons to whom the Software is
13 | furnished to do so, subject to the following conditions:
14 |
15 | The above copyright notice and this permission notice shall be included in all
16 | copies or substantial portions of the Software.
17 |
18 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
24 | SOFTWARE.
25 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # eeConvert
2 |
3 | **pre-alpha, use at own risk.**
4 |
5 | Easy to use functions to convert google earth engine data types such as featureCollections into other GIS formats such as geopandas GeoDataframes or Folium map layers. These functions are client side so don't use them on large featureCollections or images. This package is mainly tailored to test subsets of your results and visualize them in a dataframe or folium map.
6 |
7 | Supported formats:
8 |
9 | 1. pandas
10 | 1. geopandas
11 | 1. folium
12 | 1. postGreSQL
13 | 1. postGIS (enabled postGreSQL)
14 |
15 | use at your own risk.
16 |
17 | Documentation is currently limited to the comments of the different functions in the eeconvert/eeconvert/__init__.py file.
18 |
19 | [Link to read the Docs](http://eeconvert.readthedocs.io/en/latest/index.html)
20 |
21 |
22 | ## Installation:
23 |
24 | ### Step 1:
25 |
26 | One of the packages' dependencies is pyproj which requires a compiler to be installed.
27 |
28 | #### Linux
29 |
30 | `apt-get install gcc`
31 |
32 | #### MacOS
33 |
34 | Using brew:
35 | `brew install llvm`
36 |
37 |
38 | #### Windows
39 |
40 | Install MicroSoft Visual
41 |
42 |
43 | ### Step 2:
44 |
45 | `pip install eeconvert`
46 |
47 |
48 | ## Todo:
49 | 1. allow to install using `conda install eeconvert`
50 | 1. Develop testing scripts
51 | 1. create a read the docs
52 | 1. improve functionality
53 |
54 |
55 | [](https://travis-ci.org/rutgerhofste/eeconvert)
56 |
--------------------------------------------------------------------------------
/docs/build/html/_static/css/badge_only.css:
--------------------------------------------------------------------------------
1 | .fa:before{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-weight:normal;font-style:normal;src:url("../font/fontawesome_webfont.eot");src:url("../font/fontawesome_webfont.eot?#iefix") format("embedded-opentype"),url("../font/fontawesome_webfont.woff") format("woff"),url("../font/fontawesome_webfont.ttf") format("truetype"),url("../font/fontawesome_webfont.svg#FontAwesome") format("svg")}.fa:before{display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:normal;line-height:1;text-decoration:inherit}a .fa{display:inline-block;text-decoration:inherit}li .fa{display:inline-block}li .fa-large:before,li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-0.8em}ul.fas li .fa{width:0.8em}ul.fas li .fa-large:before,ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before{content:""}.icon-book:before{content:""}.fa-caret-down:before{content:""}.icon-caret-down:before{content:""}.fa-caret-up:before{content:""}.icon-caret-up:before{content:""}.fa-caret-left:before{content:""}.icon-caret-left:before{content:""}.fa-caret-right:before{content:""}.icon-caret-right:before{content:""}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;border-top:solid 10px #343131;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;z-index:400}.rst-versions a{color:#2980B9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27AE60;*zoom:1}.rst-versions .rst-current-version:before,.rst-versions .rst-current-version:after{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book{float:left}.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#E74C3C;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#F1C40F;color:#000}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:gray;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:solid 1px #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px}.rst-versions.rst-badge .icon-book{float:none}.rst-versions.rst-badge .fa-book{float:none}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book{float:left}.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge .rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width: 768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}
2 | /*# sourceMappingURL=badge_only.css.map */
3 |
--------------------------------------------------------------------------------
/docs/build/html/searchindex.js:
--------------------------------------------------------------------------------
1 | Search.setIndex({docnames:["LICENSE","eeconvert","eeconvert.tests","index","installation","modules"],envversion:53,filenames:["LICENSE.rst","eeconvert.rst","eeconvert.tests.rst","index.rst","installation.rst","modules.rst"],objects:{"":{eeconvert:[1,0,0,"-"]},"eeconvert.tests":{test_rutger:[2,0,0,"-"]},"eeconvert.tests.test_rutger":{inc:[2,1,1,""],test_answer:[2,1,1,""]},eeconvert:{defaultMap:[1,1,1,""],dfToFc:[1,1,1,""],dfToPostgreSQL:[1,1,1,""],eeImageToFoliumLayer:[1,1,1,""],fcToDf:[1,1,1,""],fcToGdf:[1,1,1,""],gdfToFc:[1,1,1,""],gdfToFoliumGroup:[1,1,1,""],gdfToPostGIS:[1,1,1,""],noGeometryEEFeature:[1,1,1,""],postGisToGdf:[1,1,1,""],postgreSQLToDf:[1,1,1,""],rdsConnect:[1,1,1,""],shapelyToEEFeature:[1,1,1,""],shapelyToFoliumFeature:[1,1,1,""],tests:[2,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","function","Python function"]},objtypes:{"0":"py:module","1":"py:function"},terms:{"0013ff":1,"boolean":1,"break":1,"default":1,"function":1,"return":1,"true":1,AND:0,AWS:1,BUT:0,CRS:1,FOR:0,For:1,NOT:0,One:4,RDS:1,THE:0,The:0,USE:0,Use:1,Using:4,WITH:0,abov:0,action:0,add:1,addit:1,afterward:1,all:[0,1],allow:1,ani:0,append:1,appi:1,appli:1,apt:4,arg:1,argument:1,aris:0,associ:0,author:0,base:1,becaus:1,blob:1,brew:4,call:1,camelcas:1,can:1,caveat:1,charg:0,child:1,claim:0,collect:1,color:1,column:1,com:1,combin:1,command:1,compil:4,condit:0,connect:[0,1],consid:1,content:[3,5],contract:0,convert:1,coordin:1,copi:0,copyright:0,correspond:1,crs:1,current:1,damag:0,data:1,databas:1,database_identifi:1,database_nam:1,datafram:1,date:1,deal:0,defaultmap:1,depend:4,dftofc:1,dftopostgresql:1,dict:1,dictionari:1,directori:1,discard:1,distribut:0,document:0,earch:1,earth:1,eeconvert:4,eeimagetofoliumlay:1,eelay:1,empti:1,enabl:1,engin:1,epsg:1,event:0,exist:1,express:0,fctodf:1,fctogdf:1,featur:1,featurecollect:1,featuregroup:1,ff0000:1,file:[0,1],filter:1,fit:0,folium:1,folium_ge:1,folium_kwarg:1,foliumfeatur:1,foliumkwarg:1,follow:0,format:1,free:0,from:[0,1],furnish:0,gcc:4,gdf:1,gdftofc:1,gdftofoliumgroup:1,gdftopostgi:1,geo:1,geodatafram:1,geodes:1,geometri:1,geopanda:1,get:[1,4],github:1,gitignor:1,googl:1,grant:0,group:1,handl:1,have:1,henc:1,herebi:0,hofst:0,holder:0,http:1,identifi:1,imag:1,impli:0,inc:2,includ:[0,1],index:[1,3],init:1,input:1,instal:3,instanc:1,instead:1,interpret:1,jupyt:1,keyword:1,kind:0,larger:1,layer:1,layercontrol:1,layernam:1,leaflet:1,liabil:0,liabl:0,licenc:3,licens:0,like:1,limit:[0,1],line:1,linux:4,llvm:4,load:1,maco:4,make:1,map:1,master:1,master_usernam:1,match:1,mccarthyryanc:1,memori:1,merchant:0,merg:[0,1],method:1,microsoft:4,mit:0,modifi:0,modul:[3,5],multipolygon:1,name:1,need:1,nogeometryeefeatur:1,non:1,nonam:1,none:1,noninfring:0,note:1,notic:0,obtain:0,onli:1,open:1,option:1,other:0,otherwis:[0,1],out:0,output:1,packag:[3,4,5],page:3,palatt:1,palett:1,panda:1,paramet:1,particular:0,password:1,pep8:1,permiss:0,permit:0,person:0,pip:4,planar:1,polygon:1,popup:1,portion:0,postgi:1,postgistogdf:1,postgresql:1,postgresqltodf:1,properti:1,provid:0,publish:0,purpos:0,pyproj:4,python:1,rdsconnect:1,refer:1,remov:1,requir:4,restrict:0,right:0,row:1,rutger:0,save:1,saveindex:1,search:3,sell:0,separ:1,server:1,set:1,shall:0,shape:1,shapelytoeefeatur:1,shapelytofoliumfeatur:1,should:1,side:1,simpli:1,size:1,softwar:0,specifi:1,split:1,sql:1,sqlalchemi:1,step:3,store:1,string:1,structur:1,subject:0,sublicens:0,submodul:[],substanti:0,support:1,sure:1,system:1,tabl:1,tablenam:1,test:[],test_answ:2,test_rutg:[],than:1,thi:[0,1],tile:1,todo:1,tort:0,upload:1,use:[0,1],used:1,usernam:1,using:1,valid:1,vis_param:1,visparam:1,visual:[1,4],warranti:0,when:1,whether:0,which:4,whom:0,window:4,without:[0,1],work:1,you:1,your:1},titles:["LICENCE","eeconvert package","eeconvert.tests package","Welcome to eeconvert\u2019s documentation!","Installation","eeconvert"],titleterms:{"function":[],content:[1,2],document:3,eeconvert:[1,2,3,5],indic:3,instal:4,licenc:0,modul:[1,2],packag:[1,2],step:4,submodul:2,tabl:3,test:2,test_rutg:2,welcom:3}})
--------------------------------------------------------------------------------
/docs/build/html/_static/pygments.css:
--------------------------------------------------------------------------------
1 | .highlight .hll { background-color: #ffffcc }
2 | .highlight { background: #eeffcc; }
3 | .highlight .c { color: #408090; font-style: italic } /* Comment */
4 | .highlight .err { border: 1px solid #FF0000 } /* Error */
5 | .highlight .k { color: #007020; font-weight: bold } /* Keyword */
6 | .highlight .o { color: #666666 } /* Operator */
7 | .highlight .ch { color: #408090; font-style: italic } /* Comment.Hashbang */
8 | .highlight .cm { color: #408090; font-style: italic } /* Comment.Multiline */
9 | .highlight .cp { color: #007020 } /* Comment.Preproc */
10 | .highlight .cpf { color: #408090; font-style: italic } /* Comment.PreprocFile */
11 | .highlight .c1 { color: #408090; font-style: italic } /* Comment.Single */
12 | .highlight .cs { color: #408090; background-color: #fff0f0 } /* Comment.Special */
13 | .highlight .gd { color: #A00000 } /* Generic.Deleted */
14 | .highlight .ge { font-style: italic } /* Generic.Emph */
15 | .highlight .gr { color: #FF0000 } /* Generic.Error */
16 | .highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
17 | .highlight .gi { color: #00A000 } /* Generic.Inserted */
18 | .highlight .go { color: #333333 } /* Generic.Output */
19 | .highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */
20 | .highlight .gs { font-weight: bold } /* Generic.Strong */
21 | .highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
22 | .highlight .gt { color: #0044DD } /* Generic.Traceback */
23 | .highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */
24 | .highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */
25 | .highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */
26 | .highlight .kp { color: #007020 } /* Keyword.Pseudo */
27 | .highlight .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */
28 | .highlight .kt { color: #902000 } /* Keyword.Type */
29 | .highlight .m { color: #208050 } /* Literal.Number */
30 | .highlight .s { color: #4070a0 } /* Literal.String */
31 | .highlight .na { color: #4070a0 } /* Name.Attribute */
32 | .highlight .nb { color: #007020 } /* Name.Builtin */
33 | .highlight .nc { color: #0e84b5; font-weight: bold } /* Name.Class */
34 | .highlight .no { color: #60add5 } /* Name.Constant */
35 | .highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */
36 | .highlight .ni { color: #d55537; font-weight: bold } /* Name.Entity */
37 | .highlight .ne { color: #007020 } /* Name.Exception */
38 | .highlight .nf { color: #06287e } /* Name.Function */
39 | .highlight .nl { color: #002070; font-weight: bold } /* Name.Label */
40 | .highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */
41 | .highlight .nt { color: #062873; font-weight: bold } /* Name.Tag */
42 | .highlight .nv { color: #bb60d5 } /* Name.Variable */
43 | .highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */
44 | .highlight .w { color: #bbbbbb } /* Text.Whitespace */
45 | .highlight .mb { color: #208050 } /* Literal.Number.Bin */
46 | .highlight .mf { color: #208050 } /* Literal.Number.Float */
47 | .highlight .mh { color: #208050 } /* Literal.Number.Hex */
48 | .highlight .mi { color: #208050 } /* Literal.Number.Integer */
49 | .highlight .mo { color: #208050 } /* Literal.Number.Oct */
50 | .highlight .sa { color: #4070a0 } /* Literal.String.Affix */
51 | .highlight .sb { color: #4070a0 } /* Literal.String.Backtick */
52 | .highlight .sc { color: #4070a0 } /* Literal.String.Char */
53 | .highlight .dl { color: #4070a0 } /* Literal.String.Delimiter */
54 | .highlight .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */
55 | .highlight .s2 { color: #4070a0 } /* Literal.String.Double */
56 | .highlight .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */
57 | .highlight .sh { color: #4070a0 } /* Literal.String.Heredoc */
58 | .highlight .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */
59 | .highlight .sx { color: #c65d09 } /* Literal.String.Other */
60 | .highlight .sr { color: #235388 } /* Literal.String.Regex */
61 | .highlight .s1 { color: #4070a0 } /* Literal.String.Single */
62 | .highlight .ss { color: #517918 } /* Literal.String.Symbol */
63 | .highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */
64 | .highlight .fm { color: #06287e } /* Name.Function.Magic */
65 | .highlight .vc { color: #bb60d5 } /* Name.Variable.Class */
66 | .highlight .vg { color: #bb60d5 } /* Name.Variable.Global */
67 | .highlight .vi { color: #bb60d5 } /* Name.Variable.Instance */
68 | .highlight .vm { color: #bb60d5 } /* Name.Variable.Magic */
69 | .highlight .il { color: #208050 } /* Literal.Number.Integer.Long */
--------------------------------------------------------------------------------
/docs/build/html/search.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | Search — eeconvert 0.0.1 documentation
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 | eeconvert
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 | Docs »
139 |
140 | Search
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 | Please activate JavaScript to enable the search
159 | functionality.
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 |
174 |
188 |
189 |
190 |
191 |
192 |
193 |
194 |
195 |
196 |
197 |
198 |
199 |
200 |
210 |
211 |
212 |
213 |
214 |
215 |
216 |
217 |
218 |
219 |
220 |
221 |
222 |
223 |
224 |
229 |
230 |
233 |
234 |
235 |
236 |
237 |
238 |
239 |
--------------------------------------------------------------------------------
/docs/build/html/modules.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | eeconvert — eeconvert 0.0.1 documentation
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 | eeconvert
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 | Docs »
139 |
140 | eeconvert
141 |
142 |
143 |
144 |
145 |
146 | View page source
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
eeconvert
161 |
169 |
170 |
171 |
172 |
173 |
174 |
175 |
176 |
177 |
191 |
192 |
193 |
194 |
195 |
196 |
197 |
198 |
199 |
200 |
201 |
202 |
203 |
213 |
214 |
215 |
216 |
217 |
218 |
219 |
220 |
221 |
222 |
223 |
224 |
225 |
226 |
231 |
232 |
233 |
234 |
--------------------------------------------------------------------------------
/docs/source/conf.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | # -*- coding: utf-8 -*-
3 | #
4 | # eeconvert documentation build configuration file, created by
5 | # sphinx-quickstart on Tue Jan 9 14:57:18 2018.
6 | #
7 | # This file is execfile()d with the current directory set to its
8 | # containing dir.
9 | #
10 | # Note that not all possible configuration values are present in this
11 | # autogenerated file.
12 | #
13 | # All configuration values have a default; values that are commented out
14 | # serve to show the default.
15 |
16 | # If extensions (or modules to document with autodoc) are in another directory,
17 | # add these directories to sys.path here. If the directory is relative to the
18 | # documentation root, use os.path.abspath to make it absolute, like shown here.
19 | #
20 | import os
21 | import sys
22 | sys.path.insert(0, os.path.abspath('../..'))
23 |
24 | # sys.path.insert(0, os.path.abspath('.'))
25 |
26 |
27 | # -- General configuration ------------------------------------------------
28 |
29 |
30 | # Added by Rutger
31 | # Add autodoc and napoleon to the extensions list
32 | extensions = ['sphinx.ext.autodoc', 'sphinxcontrib.napoleon']
33 |
34 |
35 | # If your documentation needs a minimal Sphinx version, state it here.
36 | #
37 | # needs_sphinx = '1.0'
38 |
39 | # Add any Sphinx extension module names here, as strings. They can be
40 | # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
41 | # ones.
42 | extensions = ['sphinx.ext.autodoc',
43 | 'sphinx.ext.githubpages']
44 |
45 | # Add any paths that contain templates here, relative to this directory.
46 | templates_path = ['_templates']
47 |
48 | # The suffix(es) of source filenames.
49 | # You can specify multiple suffix as a list of string:
50 | #
51 | # source_suffix = ['.rst', '.md']
52 | source_suffix = '.rst'
53 |
54 | # The master toctree document.
55 | master_doc = 'index'
56 |
57 | # General information about the project.
58 | project = 'eeconvert'
59 | copyright = '2018, Rutger Hofste'
60 | author = 'Rutger Hofste'
61 |
62 | # The version info for the project you're documenting, acts as replacement for
63 | # |version| and |release|, also used in various other places throughout the
64 | # built documents.
65 | #
66 | # The short X.Y version.
67 | version = '0.0.1'
68 | # The full version, including alpha/beta/rc tags.
69 | release = '0.0.1'
70 |
71 | # The language for content autogenerated by Sphinx. Refer to documentation
72 | # for a list of supported languages.
73 | #
74 | # This is also used if you do content translation via gettext catalogs.
75 | # Usually you set "language" from the command line for these cases.
76 | language = None
77 |
78 | # List of patterns, relative to source directory, that match files and
79 | # directories to ignore when looking for source files.
80 | # This patterns also effect to html_static_path and html_extra_path
81 | exclude_patterns = []
82 |
83 | # The name of the Pygments (syntax highlighting) style to use.
84 | pygments_style = 'sphinx'
85 |
86 | # If true, `todo` and `todoList` produce output, else they produce nothing.
87 | todo_include_todos = False
88 |
89 |
90 | # -- Options for HTML output ----------------------------------------------
91 |
92 | # The theme to use for HTML and HTML Help pages. See the documentation for
93 | # a list of builtin themes.
94 | #
95 | html_theme = 'sphinx_rtd_theme'
96 |
97 | # Theme options are theme-specific and customize the look and feel of a theme
98 | # further. For a list of options available for each theme, see the
99 | # documentation.
100 | #
101 | # html_theme_options = {}
102 |
103 | # Add any paths that contain custom static files (such as style sheets) here,
104 | # relative to this directory. They are copied after the builtin static files,
105 | # so a file named "default.css" will overwrite the builtin "default.css".
106 | html_static_path = ['_static']
107 |
108 | # Custom sidebar templates, must be a dictionary that maps document names
109 | # to template names.
110 | #
111 | # This is required for the alabaster theme
112 | # refs: http://alabaster.readthedocs.io/en/latest/installation.html#sidebars
113 | html_sidebars = {
114 | '**': [
115 | 'relations.html', # needs 'show_related': True theme option to display
116 | 'searchbox.html',
117 | ]
118 | }
119 |
120 |
121 | # -- Options for HTMLHelp output ------------------------------------------
122 |
123 | # Output file base name for HTML help builder.
124 | htmlhelp_basename = 'eeconvertdoc'
125 |
126 |
127 | # -- Options for LaTeX output ---------------------------------------------
128 |
129 | latex_elements = {
130 | # The paper size ('letterpaper' or 'a4paper').
131 | #
132 | # 'papersize': 'letterpaper',
133 |
134 | # The font size ('10pt', '11pt' or '12pt').
135 | #
136 | # 'pointsize': '10pt',
137 |
138 | # Additional stuff for the LaTeX preamble.
139 | #
140 | # 'preamble': '',
141 |
142 | # Latex figure (float) alignment
143 | #
144 | # 'figure_align': 'htbp',
145 | }
146 |
147 | # Grouping the document tree into LaTeX files. List of tuples
148 | # (source start file, target name, title,
149 | # author, documentclass [howto, manual, or own class]).
150 | latex_documents = [
151 | (master_doc, 'eeconvert.tex', 'eeconvert Documentation',
152 | 'Rutger Hofste', 'manual'),
153 | ]
154 |
155 |
156 | # -- Options for manual page output ---------------------------------------
157 |
158 | # One entry per manual page. List of tuples
159 | # (source start file, name, description, authors, manual section).
160 | man_pages = [
161 | (master_doc, 'eeconvert', 'eeconvert Documentation',
162 | [author], 1)
163 | ]
164 |
165 |
166 | # -- Options for Texinfo output -------------------------------------------
167 |
168 | # Grouping the document tree into Texinfo files. List of tuples
169 | # (source start file, target name, title, author,
170 | # dir menu entry, description, category)
171 | texinfo_documents = [
172 | (master_doc, 'eeconvert', 'eeconvert Documentation',
173 | author, 'eeconvert', 'One line description of project.',
174 | 'Miscellaneous'),
175 | ]
176 |
177 |
178 |
179 |
--------------------------------------------------------------------------------
/docs/build/html/functions.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | Functions — eeconvert 0.0.1 documentation
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 | eeconvert
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 | Docs »
140 |
141 | Functions
142 |
143 |
144 |
145 |
146 |
147 | View page source
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
Functions
162 |
This is a test
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
194 |
195 |
196 |
197 |
198 |
199 |
200 |
201 |
202 |
203 |
204 |
205 |
206 |
216 |
217 |
218 |
219 |
220 |
221 |
222 |
223 |
224 |
225 |
226 |
227 |
228 |
229 |
234 |
235 |
236 |
237 |
--------------------------------------------------------------------------------
/docs/build/html/py-modindex.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | Python Module Index — eeconvert 0.0.1 documentation
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 | eeconvert
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 | Docs »
142 |
143 | Python Module Index
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
Python Module Index
162 |
163 |
166 |
167 |
188 |
189 |
190 |
191 |
192 |
193 |
194 |
195 |
209 |
210 |
211 |
212 |
213 |
214 |
215 |
216 |
217 |
218 |
219 |
220 |
221 |
231 |
232 |
233 |
234 |
235 |
236 |
237 |
238 |
239 |
240 |
241 |
242 |
243 |
244 |
249 |
250 |
251 |
252 |
--------------------------------------------------------------------------------
/docs/build/html/eeconvert.tests.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | eeconvert.tests package — eeconvert 0.0.1 documentation
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | eeconvert
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 | Docs »
138 |
139 | eeconvert.tests package
140 |
141 |
142 |
143 |
144 |
145 | View page source
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
eeconvert.tests package
160 |
161 |
Submodules
162 |
163 |
164 |
eeconvert.tests.test_rutger module
165 |
166 |
167 | eeconvert.tests.test_rutger.inc( x )
168 |
169 |
170 |
171 |
172 | eeconvert.tests.test_rutger.test_answer( )
173 |
174 |
175 |
176 |
177 |
Module contents
178 |
179 |
180 |
181 |
182 |
183 |
184 |
185 |
186 |
187 |
201 |
202 |
203 |
204 |
205 |
206 |
207 |
208 |
209 |
210 |
211 |
212 |
213 |
223 |
224 |
225 |
226 |
227 |
228 |
229 |
230 |
231 |
232 |
233 |
234 |
235 |
236 |
241 |
242 |
243 |
244 |
--------------------------------------------------------------------------------
/docs/build/html/LICENSE.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | LICENCE — eeconvert 0.0.1 documentation
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 | eeconvert
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 | Docs »
139 |
140 | LICENCE
141 |
142 |
143 |
144 |
145 |
146 | View page source
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
LICENCE
161 |
MIT License
162 |
Copyright (c) 2018 Rutger Hofste
163 |
Permission is hereby granted, free of charge, to any person obtaining a copy
164 | of this software and associated documentation files (the “Software”), to deal
165 | in the Software without restriction, including without limitation the rights
166 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
167 | copies of the Software, and to permit persons to whom the Software is
168 | furnished to do so, subject to the following conditions:
169 |
The above copyright notice and this permission notice shall be included in all
170 | copies or substantial portions of the Software.
171 |
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
172 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
173 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
174 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
175 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
176 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
177 | SOFTWARE.
178 |
179 |
180 |
181 |
182 |
183 |
184 |
185 |
186 |
207 |
208 |
209 |
210 |
211 |
212 |
213 |
214 |
215 |
216 |
217 |
218 |
219 |
229 |
230 |
231 |
232 |
233 |
234 |
235 |
236 |
237 |
238 |
239 |
240 |
241 |
242 |
247 |
248 |
249 |
250 |
--------------------------------------------------------------------------------
/docs/build/html/_static/js/theme.js:
--------------------------------------------------------------------------------
1 | require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o");
80 |
81 | // Add expand links to all parents of nested ul
82 | $('.wy-menu-vertical ul').not('.simple').siblings('a').each(function () {
83 | var link = $(this);
84 | expand = $(' ');
85 | expand.on('click', function (ev) {
86 | self.toggleCurrent(link);
87 | ev.stopPropagation();
88 | return false;
89 | });
90 | link.prepend(expand);
91 | });
92 | };
93 |
94 | nav.reset = function () {
95 | // Get anchor from URL and open up nested nav
96 | var anchor = encodeURI(window.location.hash);
97 | if (anchor) {
98 | try {
99 | var link = $('.wy-menu-vertical')
100 | .find('[href="' + anchor + '"]');
101 | // If we didn't find a link, it may be because we clicked on
102 | // something that is not in the sidebar (eg: when using
103 | // sphinxcontrib.httpdomain it generates headerlinks but those
104 | // aren't picked up and placed in the toctree). So let's find
105 | // the closest header in the document and try with that one.
106 | if (link.length === 0) {
107 | var doc_link = $('.document a[href="' + anchor + '"]');
108 | var closest_section = doc_link.closest('div.section');
109 | // Try again with the closest section entry.
110 | link = $('.wy-menu-vertical')
111 | .find('[href="#' + closest_section.attr("id") + '"]');
112 |
113 | }
114 | $('.wy-menu-vertical li.toctree-l1 li.current')
115 | .removeClass('current');
116 | link.closest('li.toctree-l2').addClass('current');
117 | link.closest('li.toctree-l3').addClass('current');
118 | link.closest('li.toctree-l4').addClass('current');
119 | }
120 | catch (err) {
121 | console.log("Error expanding nav for anchor", err);
122 | }
123 | }
124 | };
125 |
126 | nav.onScroll = function () {
127 | this.winScroll = false;
128 | var newWinPosition = this.win.scrollTop(),
129 | winBottom = newWinPosition + this.winHeight,
130 | navPosition = this.navBar.scrollTop(),
131 | newNavPosition = navPosition + (newWinPosition - this.winPosition);
132 | if (newWinPosition < 0 || winBottom > this.docHeight) {
133 | return;
134 | }
135 | this.navBar.scrollTop(newNavPosition);
136 | this.winPosition = newWinPosition;
137 | };
138 |
139 | nav.onResize = function () {
140 | this.winResize = false;
141 | this.winHeight = this.win.height();
142 | this.docHeight = $(document).height();
143 | };
144 |
145 | nav.hashChange = function () {
146 | this.linkScroll = true;
147 | this.win.one('hashchange', function () {
148 | this.linkScroll = false;
149 | });
150 | };
151 |
152 | nav.toggleCurrent = function (elem) {
153 | var parent_li = elem.closest('li');
154 | parent_li.siblings('li.current').removeClass('current');
155 | parent_li.siblings().find('li.current').removeClass('current');
156 | parent_li.find('> ul li.current').removeClass('current');
157 | parent_li.toggleClass('current');
158 | }
159 |
160 | return nav;
161 | };
162 |
163 | module.exports.ThemeNav = ThemeNav();
164 |
165 | if (typeof(window) != 'undefined') {
166 | window.SphinxRtdTheme = { StickyNav: module.exports.ThemeNav };
167 | }
168 |
169 | },{"jquery":"jquery"}]},{},["sphinx-rtd-theme"]);
170 |
--------------------------------------------------------------------------------
/docs/build/html/installation.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | Installation — eeconvert 0.0.1 documentation
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 | eeconvert
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 | Docs »
145 |
146 | Installation
147 |
148 |
149 |
150 |
151 |
152 | View page source
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
Installation
167 |
168 |
Step 1:
169 |
One of the packages’ dependencies is pyproj which requires a compiler to be installed.
170 |
Linux
171 |
apt-get install gcc
172 |
MacOS
173 |
Using brew:
174 | brew install llvm
175 |
Windows
176 |
Install MicroSoft Visual
177 |
178 |
179 |
Step 2:
180 |
pip install eeconvert
181 |
182 |
183 |
184 |
185 |
186 |
187 |
188 |
189 |
190 |
213 |
214 |
215 |
216 |
217 |
218 |
219 |
220 |
221 |
222 |
223 |
224 |
225 |
235 |
236 |
237 |
238 |
239 |
240 |
241 |
242 |
243 |
244 |
245 |
246 |
247 |
248 |
253 |
254 |
255 |
256 |
--------------------------------------------------------------------------------
/docs/build/html/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | Welcome to eeconvert’s documentation! — eeconvert 0.0.1 documentation
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 | eeconvert
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 | Docs »
140 |
141 | Welcome to eeconvert’s documentation!
142 |
143 |
144 |
145 |
146 |
147 | View page source
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
Welcome to eeconvert’s documentation!
162 |
163 |
Contents:
164 |
176 |
177 |
178 |
179 |
Indices and tables
180 |
185 |
186 |
187 |
188 |
189 |
190 |
191 |
192 |
193 |
214 |
215 |
216 |
217 |
218 |
219 |
220 |
221 |
222 |
223 |
224 |
225 |
226 |
236 |
237 |
238 |
239 |
240 |
241 |
242 |
243 |
244 |
245 |
246 |
247 |
248 |
249 |
254 |
255 |
256 |
257 |
--------------------------------------------------------------------------------
/docs/build/html/_static/doctools.js:
--------------------------------------------------------------------------------
1 | /*
2 | * doctools.js
3 | * ~~~~~~~~~~~
4 | *
5 | * Sphinx JavaScript utilities for all documentation.
6 | *
7 | * :copyright: Copyright 2007-2018 by the Sphinx team, see AUTHORS.
8 | * :license: BSD, see LICENSE for details.
9 | *
10 | */
11 |
12 | /**
13 | * select a different prefix for underscore
14 | */
15 | $u = _.noConflict();
16 |
17 | /**
18 | * make the code below compatible with browsers without
19 | * an installed firebug like debugger
20 | if (!window.console || !console.firebug) {
21 | var names = ["log", "debug", "info", "warn", "error", "assert", "dir",
22 | "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace",
23 | "profile", "profileEnd"];
24 | window.console = {};
25 | for (var i = 0; i < names.length; ++i)
26 | window.console[names[i]] = function() {};
27 | }
28 | */
29 |
30 | /**
31 | * small helper function to urldecode strings
32 | */
33 | jQuery.urldecode = function(x) {
34 | return decodeURIComponent(x).replace(/\+/g, ' ');
35 | };
36 |
37 | /**
38 | * small helper function to urlencode strings
39 | */
40 | jQuery.urlencode = encodeURIComponent;
41 |
42 | /**
43 | * This function returns the parsed url parameters of the
44 | * current request. Multiple values per key are supported,
45 | * it will always return arrays of strings for the value parts.
46 | */
47 | jQuery.getQueryParameters = function(s) {
48 | if (typeof s === 'undefined')
49 | s = document.location.search;
50 | var parts = s.substr(s.indexOf('?') + 1).split('&');
51 | var result = {};
52 | for (var i = 0; i < parts.length; i++) {
53 | var tmp = parts[i].split('=', 2);
54 | var key = jQuery.urldecode(tmp[0]);
55 | var value = jQuery.urldecode(tmp[1]);
56 | if (key in result)
57 | result[key].push(value);
58 | else
59 | result[key] = [value];
60 | }
61 | return result;
62 | };
63 |
64 | /**
65 | * highlight a given string on a jquery object by wrapping it in
66 | * span elements with the given class name.
67 | */
68 | jQuery.fn.highlightText = function(text, className) {
69 | function highlight(node, addItems) {
70 | if (node.nodeType === 3) {
71 | var val = node.nodeValue;
72 | var pos = val.toLowerCase().indexOf(text);
73 | if (pos >= 0 && !jQuery(node.parentNode).hasClass(className)) {
74 | var span;
75 | var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg");
76 | if (isInSVG) {
77 | span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
78 | } else {
79 | span = document.createElement("span");
80 | span.className = className;
81 | }
82 | span.appendChild(document.createTextNode(val.substr(pos, text.length)));
83 | node.parentNode.insertBefore(span, node.parentNode.insertBefore(
84 | document.createTextNode(val.substr(pos + text.length)),
85 | node.nextSibling));
86 | node.nodeValue = val.substr(0, pos);
87 | if (isInSVG) {
88 | var bbox = span.getBBox();
89 | var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
90 | rect.x.baseVal.value = bbox.x;
91 | rect.y.baseVal.value = bbox.y;
92 | rect.width.baseVal.value = bbox.width;
93 | rect.height.baseVal.value = bbox.height;
94 | rect.setAttribute('class', className);
95 | var parentOfText = node.parentNode.parentNode;
96 | addItems.push({
97 | "parent": node.parentNode,
98 | "target": rect});
99 | }
100 | }
101 | }
102 | else if (!jQuery(node).is("button, select, textarea")) {
103 | jQuery.each(node.childNodes, function() {
104 | highlight(this, addItems);
105 | });
106 | }
107 | }
108 | var addItems = [];
109 | var result = this.each(function() {
110 | highlight(this, addItems);
111 | });
112 | for (var i = 0; i < addItems.length; ++i) {
113 | jQuery(addItems[i].parent).before(addItems[i].target);
114 | }
115 | return result;
116 | };
117 |
118 | /*
119 | * backward compatibility for jQuery.browser
120 | * This will be supported until firefox bug is fixed.
121 | */
122 | if (!jQuery.browser) {
123 | jQuery.uaMatch = function(ua) {
124 | ua = ua.toLowerCase();
125 |
126 | var match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||
127 | /(webkit)[ \/]([\w.]+)/.exec(ua) ||
128 | /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
129 | /(msie) ([\w.]+)/.exec(ua) ||
130 | ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
131 | [];
132 |
133 | return {
134 | browser: match[ 1 ] || "",
135 | version: match[ 2 ] || "0"
136 | };
137 | };
138 | jQuery.browser = {};
139 | jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true;
140 | }
141 |
142 | /**
143 | * Small JavaScript module for the documentation.
144 | */
145 | var Documentation = {
146 |
147 | init : function() {
148 | this.fixFirefoxAnchorBug();
149 | this.highlightSearchWords();
150 | this.initIndexTable();
151 |
152 | },
153 |
154 | /**
155 | * i18n support
156 | */
157 | TRANSLATIONS : {},
158 | PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; },
159 | LOCALE : 'unknown',
160 |
161 | // gettext and ngettext don't access this so that the functions
162 | // can safely bound to a different name (_ = Documentation.gettext)
163 | gettext : function(string) {
164 | var translated = Documentation.TRANSLATIONS[string];
165 | if (typeof translated === 'undefined')
166 | return string;
167 | return (typeof translated === 'string') ? translated : translated[0];
168 | },
169 |
170 | ngettext : function(singular, plural, n) {
171 | var translated = Documentation.TRANSLATIONS[singular];
172 | if (typeof translated === 'undefined')
173 | return (n == 1) ? singular : plural;
174 | return translated[Documentation.PLURALEXPR(n)];
175 | },
176 |
177 | addTranslations : function(catalog) {
178 | for (var key in catalog.messages)
179 | this.TRANSLATIONS[key] = catalog.messages[key];
180 | this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')');
181 | this.LOCALE = catalog.locale;
182 | },
183 |
184 | /**
185 | * add context elements like header anchor links
186 | */
187 | addContextElements : function() {
188 | $('div[id] > :header:first').each(function() {
189 | $('').
190 | attr('href', '#' + this.id).
191 | attr('title', _('Permalink to this headline')).
192 | appendTo(this);
193 | });
194 | $('dt[id]').each(function() {
195 | $('').
196 | attr('href', '#' + this.id).
197 | attr('title', _('Permalink to this definition')).
198 | appendTo(this);
199 | });
200 | },
201 |
202 | /**
203 | * workaround a firefox stupidity
204 | * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075
205 | */
206 | fixFirefoxAnchorBug : function() {
207 | if (document.location.hash && $.browser.mozilla)
208 | window.setTimeout(function() {
209 | document.location.href += '';
210 | }, 10);
211 | },
212 |
213 | /**
214 | * highlight the search words provided in the url in the text
215 | */
216 | highlightSearchWords : function() {
217 | var params = $.getQueryParameters();
218 | var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : [];
219 | if (terms.length) {
220 | var body = $('div.body');
221 | if (!body.length) {
222 | body = $('body');
223 | }
224 | window.setTimeout(function() {
225 | $.each(terms, function() {
226 | body.highlightText(this.toLowerCase(), 'highlighted');
227 | });
228 | }, 10);
229 | $('' + _('Hide Search Matches') + '
')
231 | .appendTo($('#searchbox'));
232 | }
233 | },
234 |
235 | /**
236 | * init the domain index toggle buttons
237 | */
238 | initIndexTable : function() {
239 | var togglers = $('img.toggler').click(function() {
240 | var src = $(this).attr('src');
241 | var idnum = $(this).attr('id').substr(7);
242 | $('tr.cg-' + idnum).toggle();
243 | if (src.substr(-9) === 'minus.png')
244 | $(this).attr('src', src.substr(0, src.length-9) + 'plus.png');
245 | else
246 | $(this).attr('src', src.substr(0, src.length-8) + 'minus.png');
247 | }).css('display', '');
248 | if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) {
249 | togglers.click();
250 | }
251 | },
252 |
253 | /**
254 | * helper function to hide the search marks again
255 | */
256 | hideSearchWords : function() {
257 | $('#searchbox .highlight-link').fadeOut(300);
258 | $('span.highlighted').removeClass('highlighted');
259 | },
260 |
261 | /**
262 | * make the url absolute
263 | */
264 | makeURL : function(relativeURL) {
265 | return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL;
266 | },
267 |
268 | /**
269 | * get the current relative url
270 | */
271 | getCurrentURL : function() {
272 | var path = document.location.pathname;
273 | var parts = path.split(/\//);
274 | $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() {
275 | if (this === '..')
276 | parts.pop();
277 | });
278 | var url = parts.join('/');
279 | return path.substring(url.lastIndexOf('/') + 1, path.length - 1);
280 | },
281 |
282 | initOnKeyListeners: function() {
283 | $(document).keyup(function(event) {
284 | var activeElementType = document.activeElement.tagName;
285 | // don't navigate when in search box or textarea
286 | if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT') {
287 | switch (event.keyCode) {
288 | case 37: // left
289 | var prevHref = $('link[rel="prev"]').prop('href');
290 | if (prevHref) {
291 | window.location.href = prevHref;
292 | return false;
293 | }
294 | case 39: // right
295 | var nextHref = $('link[rel="next"]').prop('href');
296 | if (nextHref) {
297 | window.location.href = nextHref;
298 | return false;
299 | }
300 | }
301 | }
302 | });
303 | }
304 | };
305 |
306 | // quick alias for translations
307 | _ = Documentation.gettext;
308 |
309 | $(document).ready(function() {
310 | Documentation.init();
311 | });
--------------------------------------------------------------------------------
/docs/build/html/genindex.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 | Index — eeconvert 0.0.1 documentation
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 | eeconvert
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 | Docs »
140 |
141 | Index
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
Index
160 |
161 |
162 |
D
163 | |
E
164 | |
F
165 | |
G
166 | |
I
167 | |
N
168 | |
P
169 | |
R
170 | |
S
171 | |
T
172 |
173 |
174 |
D
175 |
187 |
188 |
E
189 |
203 |
204 |
F
205 |
215 |
216 |
G
217 |
229 |
230 |
I
231 |
237 |
238 |
N
239 |
245 |
246 |
P
247 |
257 |
258 |
R
259 |
265 |
266 |
S
267 |
277 |
278 |
T
279 |
285 |
286 |
287 |
288 |
289 |
290 |
291 |
292 |
293 |
307 |
308 |
309 |
310 |
311 |
312 |
313 |
314 |
315 |
316 |
317 |
318 |
319 |
329 |
330 |
331 |
332 |
333 |
334 |
335 |
336 |
337 |
338 |
339 |
340 |
341 |
342 |
347 |
348 |
349 |
350 |
--------------------------------------------------------------------------------
/docs/build/html/_static/underscore.js:
--------------------------------------------------------------------------------
1 | // Underscore.js 1.3.1
2 | // (c) 2009-2012 Jeremy Ashkenas, DocumentCloud Inc.
3 | // Underscore is freely distributable under the MIT license.
4 | // Portions of Underscore are inspired or borrowed from Prototype,
5 | // Oliver Steele's Functional, and John Resig's Micro-Templating.
6 | // For all details and documentation:
7 | // http://documentcloud.github.com/underscore
8 | (function(){function q(a,c,d){if(a===c)return a!==0||1/a==1/c;if(a==null||c==null)return a===c;if(a._chain)a=a._wrapped;if(c._chain)c=c._wrapped;if(a.isEqual&&b.isFunction(a.isEqual))return a.isEqual(c);if(c.isEqual&&b.isFunction(c.isEqual))return c.isEqual(a);var e=l.call(a);if(e!=l.call(c))return false;switch(e){case "[object String]":return a==String(c);case "[object Number]":return a!=+a?c!=+c:a==0?1/a==1/c:a==+c;case "[object Date]":case "[object Boolean]":return+a==+c;case "[object RegExp]":return a.source==
9 | c.source&&a.global==c.global&&a.multiline==c.multiline&&a.ignoreCase==c.ignoreCase}if(typeof a!="object"||typeof c!="object")return false;for(var f=d.length;f--;)if(d[f]==a)return true;d.push(a);var f=0,g=true;if(e=="[object Array]"){if(f=a.length,g=f==c.length)for(;f--;)if(!(g=f in a==f in c&&q(a[f],c[f],d)))break}else{if("constructor"in a!="constructor"in c||a.constructor!=c.constructor)return false;for(var h in a)if(b.has(a,h)&&(f++,!(g=b.has(c,h)&&q(a[h],c[h],d))))break;if(g){for(h in c)if(b.has(c,
10 | h)&&!f--)break;g=!f}}d.pop();return g}var r=this,G=r._,n={},k=Array.prototype,o=Object.prototype,i=k.slice,H=k.unshift,l=o.toString,I=o.hasOwnProperty,w=k.forEach,x=k.map,y=k.reduce,z=k.reduceRight,A=k.filter,B=k.every,C=k.some,p=k.indexOf,D=k.lastIndexOf,o=Array.isArray,J=Object.keys,s=Function.prototype.bind,b=function(a){return new m(a)};if(typeof exports!=="undefined"){if(typeof module!=="undefined"&&module.exports)exports=module.exports=b;exports._=b}else r._=b;b.VERSION="1.3.1";var j=b.each=
11 | b.forEach=function(a,c,d){if(a!=null)if(w&&a.forEach===w)a.forEach(c,d);else if(a.length===+a.length)for(var e=0,f=a.length;e2;a==
12 | null&&(a=[]);if(y&&a.reduce===y)return e&&(c=b.bind(c,e)),f?a.reduce(c,d):a.reduce(c);j(a,function(a,b,i){f?d=c.call(e,d,a,b,i):(d=a,f=true)});if(!f)throw new TypeError("Reduce of empty array with no initial value");return d};b.reduceRight=b.foldr=function(a,c,d,e){var f=arguments.length>2;a==null&&(a=[]);if(z&&a.reduceRight===z)return e&&(c=b.bind(c,e)),f?a.reduceRight(c,d):a.reduceRight(c);var g=b.toArray(a).reverse();e&&!f&&(c=b.bind(c,e));return f?b.reduce(g,c,d,e):b.reduce(g,c)};b.find=b.detect=
13 | function(a,c,b){var e;E(a,function(a,g,h){if(c.call(b,a,g,h))return e=a,true});return e};b.filter=b.select=function(a,c,b){var e=[];if(a==null)return e;if(A&&a.filter===A)return a.filter(c,b);j(a,function(a,g,h){c.call(b,a,g,h)&&(e[e.length]=a)});return e};b.reject=function(a,c,b){var e=[];if(a==null)return e;j(a,function(a,g,h){c.call(b,a,g,h)||(e[e.length]=a)});return e};b.every=b.all=function(a,c,b){var e=true;if(a==null)return e;if(B&&a.every===B)return a.every(c,b);j(a,function(a,g,h){if(!(e=
14 | e&&c.call(b,a,g,h)))return n});return e};var E=b.some=b.any=function(a,c,d){c||(c=b.identity);var e=false;if(a==null)return e;if(C&&a.some===C)return a.some(c,d);j(a,function(a,b,h){if(e||(e=c.call(d,a,b,h)))return n});return!!e};b.include=b.contains=function(a,c){var b=false;if(a==null)return b;return p&&a.indexOf===p?a.indexOf(c)!=-1:b=E(a,function(a){return a===c})};b.invoke=function(a,c){var d=i.call(arguments,2);return b.map(a,function(a){return(b.isFunction(c)?c||a:a[c]).apply(a,d)})};b.pluck=
15 | function(a,c){return b.map(a,function(a){return a[c]})};b.max=function(a,c,d){if(!c&&b.isArray(a))return Math.max.apply(Math,a);if(!c&&b.isEmpty(a))return-Infinity;var e={computed:-Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b>=e.computed&&(e={value:a,computed:b})});return e.value};b.min=function(a,c,d){if(!c&&b.isArray(a))return Math.min.apply(Math,a);if(!c&&b.isEmpty(a))return Infinity;var e={computed:Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;bd?1:0}),"value")};b.groupBy=function(a,c){var d={},e=b.isFunction(c)?c:function(a){return a[c]};j(a,function(a,b){var c=e(a,b);(d[c]||(d[c]=[])).push(a)});return d};b.sortedIndex=function(a,
17 | c,d){d||(d=b.identity);for(var e=0,f=a.length;e>1;d(a[g])=0})})};b.difference=function(a){var c=b.flatten(i.call(arguments,1));return b.filter(a,function(a){return!b.include(c,a)})};b.zip=function(){for(var a=i.call(arguments),c=b.max(b.pluck(a,"length")),d=Array(c),e=0;e=0;d--)b=[a[d].apply(this,b)];return b[0]}};
24 | b.after=function(a,b){return a<=0?b():function(){if(--a<1)return b.apply(this,arguments)}};b.keys=J||function(a){if(a!==Object(a))throw new TypeError("Invalid object");var c=[],d;for(d in a)b.has(a,d)&&(c[c.length]=d);return c};b.values=function(a){return b.map(a,b.identity)};b.functions=b.methods=function(a){var c=[],d;for(d in a)b.isFunction(a[d])&&c.push(d);return c.sort()};b.extend=function(a){j(i.call(arguments,1),function(b){for(var d in b)a[d]=b[d]});return a};b.defaults=function(a){j(i.call(arguments,
25 | 1),function(b){for(var d in b)a[d]==null&&(a[d]=b[d])});return a};b.clone=function(a){return!b.isObject(a)?a:b.isArray(a)?a.slice():b.extend({},a)};b.tap=function(a,b){b(a);return a};b.isEqual=function(a,b){return q(a,b,[])};b.isEmpty=function(a){if(b.isArray(a)||b.isString(a))return a.length===0;for(var c in a)if(b.has(a,c))return false;return true};b.isElement=function(a){return!!(a&&a.nodeType==1)};b.isArray=o||function(a){return l.call(a)=="[object Array]"};b.isObject=function(a){return a===Object(a)};
26 | b.isArguments=function(a){return l.call(a)=="[object Arguments]"};if(!b.isArguments(arguments))b.isArguments=function(a){return!(!a||!b.has(a,"callee"))};b.isFunction=function(a){return l.call(a)=="[object Function]"};b.isString=function(a){return l.call(a)=="[object String]"};b.isNumber=function(a){return l.call(a)=="[object Number]"};b.isNaN=function(a){return a!==a};b.isBoolean=function(a){return a===true||a===false||l.call(a)=="[object Boolean]"};b.isDate=function(a){return l.call(a)=="[object Date]"};
27 | b.isRegExp=function(a){return l.call(a)=="[object RegExp]"};b.isNull=function(a){return a===null};b.isUndefined=function(a){return a===void 0};b.has=function(a,b){return I.call(a,b)};b.noConflict=function(){r._=G;return this};b.identity=function(a){return a};b.times=function(a,b,d){for(var e=0;e /g,">").replace(/"/g,""").replace(/'/g,"'").replace(/\//g,"/")};b.mixin=function(a){j(b.functions(a),
28 | function(c){K(c,b[c]=a[c])})};var L=0;b.uniqueId=function(a){var b=L++;return a?a+b:b};b.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var t=/.^/,u=function(a){return a.replace(/\\\\/g,"\\").replace(/\\'/g,"'")};b.template=function(a,c){var d=b.templateSettings,d="var __p=[],print=function(){__p.push.apply(__p,arguments);};with(obj||{}){__p.push('"+a.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(d.escape||t,function(a,b){return"',_.escape("+
29 | u(b)+"),'"}).replace(d.interpolate||t,function(a,b){return"',"+u(b)+",'"}).replace(d.evaluate||t,function(a,b){return"');"+u(b).replace(/[\r\n\t]/g," ")+";__p.push('"}).replace(/\r/g,"\\r").replace(/\n/g,"\\n").replace(/\t/g,"\\t")+"');}return __p.join('');",e=new Function("obj","_",d);return c?e(c,b):function(a){return e.call(this,a,b)}};b.chain=function(a){return b(a).chain()};var m=function(a){this._wrapped=a};b.prototype=m.prototype;var v=function(a,c){return c?b(a).chain():a},K=function(a,c){m.prototype[a]=
30 | function(){var a=i.call(arguments);H.call(a,this._wrapped);return v(c.apply(b,a),this._chain)}};b.mixin(b);j("pop,push,reverse,shift,sort,splice,unshift".split(","),function(a){var b=k[a];m.prototype[a]=function(){var d=this._wrapped;b.apply(d,arguments);var e=d.length;(a=="shift"||a=="splice")&&e===0&&delete d[0];return v(d,this._chain)}});j(["concat","join","slice"],function(a){var b=k[a];m.prototype[a]=function(){return v(b.apply(this._wrapped,arguments),this._chain)}});m.prototype.chain=function(){this._chain=
31 | true;return this};m.prototype.value=function(){return this._wrapped}}).call(this);
32 |
--------------------------------------------------------------------------------
/eeconvert/__init__.py:
--------------------------------------------------------------------------------
1 | import boto3
2 | import botocore
3 | import sqlalchemy
4 | import ee
5 | import pandas as pd
6 | import geopandas as gpd
7 | import shapely
8 | import shapely.wkt
9 | import branca
10 | import folium
11 | import geojson
12 |
13 |
14 | def rdsConnect(database_identifier,database_name,master_username):
15 | """open a connection to AWS RDS
16 |
17 | in addition to specifying the arguments you need to store your password in a file called .password in the current working directory.
18 | You can do this using the command line or Jupyter. Make sure to have your .gitignore file up to date.
19 |
20 | Args:
21 | database_identifier (string) : postgresql database identifier used when you set up the AWS RDS instance. \n
22 | database_name (string) : the database name to connect to. \n
23 | master_username (string) : the master username for the database.
24 |
25 | Returns:
26 | engine (sqlalchemy.engine.base.Engine) : database engine. \n
27 | connection (sqlalchemy.engine.base.Connection) : database connection.
28 | """
29 |
30 |
31 | rds = boto3.client('rds')
32 | F = open(".password","r")
33 | password = F.read().splitlines()[0]
34 | F.close()
35 | response = rds.describe_db_instances(DBInstanceIdentifier="%s"%(database_identifier))
36 | status = response["DBInstances"][0]["DBInstanceStatus"]
37 | print("Status:",status)
38 | endpoint = response["DBInstances"][0]["Endpoint"]["Address"]
39 | print("Endpoint:",endpoint)
40 | engine = sqlalchemy.create_engine('postgresql://%s:%s@%s:5432/%s' %(master_username,password,endpoint,database_name))
41 | connection = engine.connect()
42 | return engine, connection
43 |
44 |
45 |
46 | def fcToGdf(fc,crs = {'init' :'epsg:4326'}):
47 | """converts a featurecollection to a geoPandas GeoDataFrame. Use this function only if all features have a geometry.
48 |
49 | caveats:
50 | Currently only supports non-geodesic (planar) geometries because of limitations in geoPandas and Leaflet. Geodesic geometries are simply interpreted as planar geometries.
51 | FeatureCollections larger than memory are currently not supported. Consider splitting data and merging (server side) afterwards.
52 |
53 | Args:
54 | fc (ee.FeatureCollection) : the earth engine feature collection to convert.
55 | crs (dictionary, optional) : the coordinate reference system in geopandas format. Defaults to {'init' :'epsg:4326'}
56 |
57 | Returns:
58 | gdf (geoPandas.GeoDataFrame or pandas.DataFrame) : the corresponding (geo)dataframe.
59 |
60 | """
61 | crs = {'init' :'epsg:4326'}
62 |
63 | features = fc.getInfo()['features']
64 | dictarr = []
65 |
66 | for f in features:
67 | #geodesic = ee.Feature(f).geometry().edgesAreGeodesics()
68 | #if geodesic:
69 | attr = f['properties']
70 | attr['geometry'] = f['geometry']
71 | attr['geometry']
72 | dictarr.append(attr)
73 |
74 | gdf = gpd.GeoDataFrame(dictarr)
75 | gdf['geometry'] = list(map(lambda s: shapely.geometry.shape(s), gdf.geometry))
76 | gdf.crs = crs
77 | return gdf
78 |
79 |
80 | def fcToDf(fc):
81 | """converts a featurecollection to a Pandas DataFrame. Use this function for featureCollections without geometries. For featureCollections with geometries, use fcToGdf()
82 |
83 | Args:
84 | fc (ee.FeatureCollection) : the earth engine feature collection to convert. Size is limited to memory (geopandas limitation)
85 | crs (dictionary, optional) : the coordinate reference system in geopandas format. Defaults to {'init' :'epsg:4326'}
86 |
87 | Returns:
88 | df (pandas.DataFrame) : the corresponding dataframe.
89 |
90 | """
91 |
92 | def gdfToPostGIS(connection, gdf,tableName,saveIndex = True):
93 | """this function uploads a geodataframe to table in AWS RDS.
94 |
95 | It handles combined polygon/multipolygon geometry and stores it in valid multipolygon in epsg 4326.
96 |
97 | Args:
98 | connection (sqlalchemy.engine.base.Connection) : postGIS enabled database connection
99 | gdf (geoPandas.GeoDataFrame) : input geoDataFrame
100 | tableName (string) : postGIS table name (string)
101 | saveIndex (boolean, optional) : save geoDataFrame index column in separate column in postgresql, otherwise discarded. Default is True
102 |
103 | Returns:
104 | gdf (geoPandas.GeoDataFrame) : the geodataframe loaded from the database. Should match the input dataframe
105 |
106 | todo:
107 | currently removes table if exists. Include option to break or append
108 |
109 | """
110 |
111 | gdf["type"] = gdf.geometry.geom_type
112 | geomTypes = ["Polygon","MultiPolygon"]
113 |
114 | for geomType in geomTypes:
115 | gdfType = gdf.loc[gdf["type"]== geomType]
116 | geomTypeLower = str.lower(geomType)
117 | gdfType['geom'] = gdfType['geometry'].apply(lambda x: geoalchemy2.WKTElement(x.wkt, srid=4326))
118 | gdfType.drop(["geometry","type"],1, inplace=True)
119 | print("Create table temp%s" %(geomTypeLower))
120 | gdfType.to_sql(
121 | name = "temp%s" %(geomTypeLower),
122 | con = engine,
123 | if_exists='replace',
124 | index= saveIndex,
125 | dtype={'geom': geoalchemy2.Geometry(str.upper(geomType), srid= 4326)}
126 | )
127 |
128 | # Merge both tables and make valid
129 | sql = []
130 | sql.append("DROP TABLE IF EXISTS %s" %(tableName))
131 | sql.append("ALTER TABLE temppolygon ALTER COLUMN geom type geometry(MultiPolygon, 4326) using ST_Multi(geom);")
132 | sql.append("CREATE TABLE %s AS (SELECT * FROM temppolygon UNION SELECT * FROM tempmultipolygon);" %(tableName))
133 | sql.append("UPDATE %s SET geom = st_makevalid(geom);" %(tableName))
134 | sql.append("DROP TABLE temppolygon,tempmultipolygon")
135 |
136 | for statement in sql:
137 | print(statement)
138 | result = connection.execute(statement)
139 | gdfFromSQL =gpd.GeoDataFrame.from_postgis("select * from %s" %(tableName),connection,geom_col='geom' )
140 | return gdfFromSQL
141 |
142 |
143 | def dfToPostgreSQL(connection, df,tableName,saveIndex = True):
144 | """this function uploads a dataframe to table in AWS RDS.
145 |
146 | Args:
147 | connection (sqlalchemy.engine.base.Connection) :database connection
148 | df (pandas.GeoDataFrame) : input dataFrame
149 | tableName (string) : table name (string)
150 | saveIndex (boolean, optional) : save geoDataFrame index column in separate column in postgresql, otherwise discarded. Default is True
151 |
152 | Returns:
153 | gdf (geoPandas.GeoDataFrame) : the geodataframe loaded from the database. Should match the input dataframe
154 |
155 | todo:
156 | currently removes table if exists. Include option to break or append
157 |
158 | """
159 | df.to_sql(
160 | name = tableName,
161 | con = connection,
162 | if_exists="replace",
163 | index = saveIndex,
164 | chunkSize = None
165 | )
166 |
167 | return 1
168 |
169 |
170 | def postGisToGdf(connection,tableName):
171 | """this function gets a geoDataFrame from a postGIS database instance
172 |
173 |
174 | Args:
175 | connection (sqlalchemy.engine.base.Connection) : postGIS enabled database connection
176 | tableName (string) : table name
177 |
178 | Returns:
179 | gdf (geoPandas.GeoDataFrame) : the geodataframe from PostGIS
180 |
181 | todo:
182 | allow for SQL filtering
183 |
184 |
185 | """
186 | gdf =gpd.GeoDataFrame.from_postgis("select * from %s" %(tableName),connection,geom_col='geom' )
187 | gdf.crs = {'init' :'epsg:4326'}
188 | return gdf
189 |
190 | def postgreSQLToDf(connection,tableName):
191 | """this function gets a dataFrame from a postGIS database instance
192 |
193 | Args:
194 | connection (sqlalchemy.engine.base.Connection) : postGIS enabled database connection
195 | tableName (string) : table name
196 |
197 | Returns:
198 | df (pandas.DataFrame) : the dataframe from PostGIS
199 |
200 | todo:
201 | allow for SQL filtering
202 |
203 |
204 | """
205 | df = pd.read_sql_query('select * from "%s"' %(tableName),con=engine )
206 | return df
207 |
208 |
209 | def shapelyToEEFeature(row):
210 | properties = row.drop(["geometry"]).to_dict()
211 | geoJSONfeature = geojson.Feature(geometry=row["geometry"], properties=properties)
212 | return ee.Feature(geoJSONfeature)
213 |
214 | def noGeometryEEFeature(row):
215 | properties = row.to_dict()
216 | return ee.Feature(None,properties)
217 |
218 |
219 | def gdfToFc(gdf):
220 | """converts a geodataframe to a featurecollection
221 |
222 | Args:
223 | gdf (geoPandas.GeoDataFrame) : the input geodataframe
224 |
225 | Returns:
226 | fc (ee.FeatureCollection) : feature collection (server side)
227 |
228 |
229 | """
230 | gdfCopy = gdf.copy()
231 | gdfCopy["eeFeature"] = gdfCopy.apply(shapelyToEEFeature,1)
232 | featureList = gdfCopy["eeFeature"].tolist()
233 | fc = ee.FeatureCollection(featureList)
234 | return fc
235 |
236 |
237 | def dfToFc(df):
238 | """converts a dataframe to a featurecollection without geometry
239 |
240 | Args:
241 | df (pandas.dataFrame) : the input dataframe
242 |
243 | Returns:
244 | fc (ee.FeatureCollection) : feature collection with empty geometry
245 |
246 |
247 | """
248 | dfCopy = df.copy()
249 | dfCopy["eeFeature"] = gdfCopy.apply(noGeometryEEFeature,1)
250 | featureList = dfCopy["eeFeature"].tolist()
251 | fc = ee.FeatureCollection(featureList)
252 | return fc
253 |
254 |
255 | def shapelyToFoliumFeature(row):
256 | """converts a shapely feature to a folium (leaflet) feature. row needs to have a geometry column. CRS is 4326
257 |
258 | Args:
259 | row (geoPandas.GeoDataFrame row) : the input geodataframe row. Appy this function to a geodataframe gdf.appy(function, 1)
260 |
261 | Returns:
262 | foliumFeature (folium feature) : foliumFeature with popup child.
263 |
264 | """
265 |
266 | width, height = 310,110
267 | dfTemp = pd.DataFrame(row.drop("geometry"))
268 | htmlTable = dfTemp.to_html()
269 | iFrame = branca.element.IFrame(htmlTable, width=width, height=height)
270 | geoJSONfeature = geojson.Feature(geometry=row["geometry"], properties={})
271 | foliumFeature = folium.features.GeoJson(geoJSONfeature)
272 | foliumFeature.add_child(folium.Popup(iFrame))
273 | return foliumFeature
274 |
275 |
276 |
277 | def defaultMap():
278 | m = folium.Map(
279 | location=[5, 52],
280 | tiles='Mapbox Bright',
281 | zoom_start=4
282 | )
283 | return m
284 |
285 |
286 | def gdfToFoliumGroup(gdf,name="noName"):
287 | """converts a geodataframe to a folium featureGroup with the properties as a popup child
288 |
289 | Args:
290 | gdf (geoPandas.GeoDataFrame) : the input geodataframe
291 | name (string) : output folium feature group name
292 |
293 | Returns:
294 | fc (ee.FeatureCollection) : feature collection (server side)
295 | """
296 |
297 | featureGroup = folium.FeatureGroup(name=name)
298 |
299 |
300 | features = gdf.apply(shapelyToFoliumFeature,1)
301 | map(lambda x: x.add_to(featureGroup),features)
302 |
303 | return featureGroup
304 |
305 |
306 |
307 | def eeImageToFoliumLayer(image,layerName="eeLayer",visParams=None,foliumKwargs={}):
308 | """
309 | Function to add Google Earch Engine tile layer as a Folium layer.
310 | based on https://github.com/mccarthyryanc/folium_gee/blob/master/folium_gee.py hence PEP8 instead of camelcase
311 |
312 | Args:
313 | image (ee.Image) : Google Earth Engine Image.
314 | layerName (string) : Layer name for in folium layerControl. Default : "eeLayer"
315 | vis_params (dict) : Dict with visualization parameters as used in Google Earth Engine. Note that color palatte inputs in python needs to be structured like: "palette": "ff0000,ff0000,0013ff"
316 | folium_kwargs (dict) : Keyword args for Folium Map.
317 |
318 | Returns:
319 | layer () : folium Layer. Add to map by applying method .add(m)
320 |
321 | """
322 |
323 | # Get the MapID and Token after applying parameters
324 | image_info = image.getMapId(visParams)
325 | mapid = image_info['mapid']
326 | token = image_info['token']
327 | foliumKwargs['attr'] = ('Map Data © Google Earth Engine ')
328 | foliumKwargs['tiles'] = "https://earthengine.googleapis.com/map/%s/{z}/{x}/{y}?token=%s"%(mapid,token)
329 |
330 | layer = folium.TileLayer(**foliumKwargs)
331 | layer.layer_name = layerName
332 | return layer
333 |
334 | features = fc.getInfo()['features']
335 | dictarr = []
336 | for f in features:
337 | attr = f['properties']
338 | dictarr.append(attr)
339 |
340 | df = pd.DataFrame(dictarr)
341 | return df
342 |
343 |
344 |
345 |
--------------------------------------------------------------------------------
/docs/build/html/_static/basic.css:
--------------------------------------------------------------------------------
1 | /*
2 | * basic.css
3 | * ~~~~~~~~~
4 | *
5 | * Sphinx stylesheet -- basic theme.
6 | *
7 | * :copyright: Copyright 2007-2018 by the Sphinx team, see AUTHORS.
8 | * :license: BSD, see LICENSE for details.
9 | *
10 | */
11 |
12 | /* -- main layout ----------------------------------------------------------- */
13 |
14 | div.clearer {
15 | clear: both;
16 | }
17 |
18 | /* -- relbar ---------------------------------------------------------------- */
19 |
20 | div.related {
21 | width: 100%;
22 | font-size: 90%;
23 | }
24 |
25 | div.related h3 {
26 | display: none;
27 | }
28 |
29 | div.related ul {
30 | margin: 0;
31 | padding: 0 0 0 10px;
32 | list-style: none;
33 | }
34 |
35 | div.related li {
36 | display: inline;
37 | }
38 |
39 | div.related li.right {
40 | float: right;
41 | margin-right: 5px;
42 | }
43 |
44 | /* -- sidebar --------------------------------------------------------------- */
45 |
46 | div.sphinxsidebarwrapper {
47 | padding: 10px 5px 0 10px;
48 | }
49 |
50 | div.sphinxsidebar {
51 | float: left;
52 | width: 230px;
53 | margin-left: -100%;
54 | font-size: 90%;
55 | word-wrap: break-word;
56 | overflow-wrap : break-word;
57 | }
58 |
59 | div.sphinxsidebar ul {
60 | list-style: none;
61 | }
62 |
63 | div.sphinxsidebar ul ul,
64 | div.sphinxsidebar ul.want-points {
65 | margin-left: 20px;
66 | list-style: square;
67 | }
68 |
69 | div.sphinxsidebar ul ul {
70 | margin-top: 0;
71 | margin-bottom: 0;
72 | }
73 |
74 | div.sphinxsidebar form {
75 | margin-top: 10px;
76 | }
77 |
78 | div.sphinxsidebar input {
79 | border: 1px solid #98dbcc;
80 | font-family: sans-serif;
81 | font-size: 1em;
82 | }
83 |
84 | div.sphinxsidebar #searchbox input[type="text"] {
85 | width: 170px;
86 | }
87 |
88 | img {
89 | border: 0;
90 | max-width: 100%;
91 | }
92 |
93 | /* -- search page ----------------------------------------------------------- */
94 |
95 | ul.search {
96 | margin: 10px 0 0 20px;
97 | padding: 0;
98 | }
99 |
100 | ul.search li {
101 | padding: 5px 0 5px 20px;
102 | background-image: url(file.png);
103 | background-repeat: no-repeat;
104 | background-position: 0 7px;
105 | }
106 |
107 | ul.search li a {
108 | font-weight: bold;
109 | }
110 |
111 | ul.search li div.context {
112 | color: #888;
113 | margin: 2px 0 0 30px;
114 | text-align: left;
115 | }
116 |
117 | ul.keywordmatches li.goodmatch a {
118 | font-weight: bold;
119 | }
120 |
121 | /* -- index page ------------------------------------------------------------ */
122 |
123 | table.contentstable {
124 | width: 90%;
125 | margin-left: auto;
126 | margin-right: auto;
127 | }
128 |
129 | table.contentstable p.biglink {
130 | line-height: 150%;
131 | }
132 |
133 | a.biglink {
134 | font-size: 1.3em;
135 | }
136 |
137 | span.linkdescr {
138 | font-style: italic;
139 | padding-top: 5px;
140 | font-size: 90%;
141 | }
142 |
143 | /* -- general index --------------------------------------------------------- */
144 |
145 | table.indextable {
146 | width: 100%;
147 | }
148 |
149 | table.indextable td {
150 | text-align: left;
151 | vertical-align: top;
152 | }
153 |
154 | table.indextable ul {
155 | margin-top: 0;
156 | margin-bottom: 0;
157 | list-style-type: none;
158 | }
159 |
160 | table.indextable > tbody > tr > td > ul {
161 | padding-left: 0em;
162 | }
163 |
164 | table.indextable tr.pcap {
165 | height: 10px;
166 | }
167 |
168 | table.indextable tr.cap {
169 | margin-top: 10px;
170 | background-color: #f2f2f2;
171 | }
172 |
173 | img.toggler {
174 | margin-right: 3px;
175 | margin-top: 3px;
176 | cursor: pointer;
177 | }
178 |
179 | div.modindex-jumpbox {
180 | border-top: 1px solid #ddd;
181 | border-bottom: 1px solid #ddd;
182 | margin: 1em 0 1em 0;
183 | padding: 0.4em;
184 | }
185 |
186 | div.genindex-jumpbox {
187 | border-top: 1px solid #ddd;
188 | border-bottom: 1px solid #ddd;
189 | margin: 1em 0 1em 0;
190 | padding: 0.4em;
191 | }
192 |
193 | /* -- domain module index --------------------------------------------------- */
194 |
195 | table.modindextable td {
196 | padding: 2px;
197 | border-collapse: collapse;
198 | }
199 |
200 | /* -- general body styles --------------------------------------------------- */
201 |
202 | div.body p, div.body dd, div.body li, div.body blockquote {
203 | -moz-hyphens: auto;
204 | -ms-hyphens: auto;
205 | -webkit-hyphens: auto;
206 | hyphens: auto;
207 | }
208 |
209 | a.headerlink {
210 | visibility: hidden;
211 | }
212 |
213 | h1:hover > a.headerlink,
214 | h2:hover > a.headerlink,
215 | h3:hover > a.headerlink,
216 | h4:hover > a.headerlink,
217 | h5:hover > a.headerlink,
218 | h6:hover > a.headerlink,
219 | dt:hover > a.headerlink,
220 | caption:hover > a.headerlink,
221 | p.caption:hover > a.headerlink,
222 | div.code-block-caption:hover > a.headerlink {
223 | visibility: visible;
224 | }
225 |
226 | div.body p.caption {
227 | text-align: inherit;
228 | }
229 |
230 | div.body td {
231 | text-align: left;
232 | }
233 |
234 | .first {
235 | margin-top: 0 !important;
236 | }
237 |
238 | p.rubric {
239 | margin-top: 30px;
240 | font-weight: bold;
241 | }
242 |
243 | img.align-left, .figure.align-left, object.align-left {
244 | clear: left;
245 | float: left;
246 | margin-right: 1em;
247 | }
248 |
249 | img.align-right, .figure.align-right, object.align-right {
250 | clear: right;
251 | float: right;
252 | margin-left: 1em;
253 | }
254 |
255 | img.align-center, .figure.align-center, object.align-center {
256 | display: block;
257 | margin-left: auto;
258 | margin-right: auto;
259 | }
260 |
261 | .align-left {
262 | text-align: left;
263 | }
264 |
265 | .align-center {
266 | text-align: center;
267 | }
268 |
269 | .align-right {
270 | text-align: right;
271 | }
272 |
273 | /* -- sidebars -------------------------------------------------------------- */
274 |
275 | div.sidebar {
276 | margin: 0 0 0.5em 1em;
277 | border: 1px solid #ddb;
278 | padding: 7px 7px 0 7px;
279 | background-color: #ffe;
280 | width: 40%;
281 | float: right;
282 | }
283 |
284 | p.sidebar-title {
285 | font-weight: bold;
286 | }
287 |
288 | /* -- topics ---------------------------------------------------------------- */
289 |
290 | div.topic {
291 | border: 1px solid #ccc;
292 | padding: 7px 7px 0 7px;
293 | margin: 10px 0 10px 0;
294 | }
295 |
296 | p.topic-title {
297 | font-size: 1.1em;
298 | font-weight: bold;
299 | margin-top: 10px;
300 | }
301 |
302 | /* -- admonitions ----------------------------------------------------------- */
303 |
304 | div.admonition {
305 | margin-top: 10px;
306 | margin-bottom: 10px;
307 | padding: 7px;
308 | }
309 |
310 | div.admonition dt {
311 | font-weight: bold;
312 | }
313 |
314 | div.admonition dl {
315 | margin-bottom: 0;
316 | }
317 |
318 | p.admonition-title {
319 | margin: 0px 10px 5px 0px;
320 | font-weight: bold;
321 | }
322 |
323 | div.body p.centered {
324 | text-align: center;
325 | margin-top: 25px;
326 | }
327 |
328 | /* -- tables ---------------------------------------------------------------- */
329 |
330 | table.docutils {
331 | border: 0;
332 | border-collapse: collapse;
333 | }
334 |
335 | table caption span.caption-number {
336 | font-style: italic;
337 | }
338 |
339 | table caption span.caption-text {
340 | }
341 |
342 | table.docutils td, table.docutils th {
343 | padding: 1px 8px 1px 5px;
344 | border-top: 0;
345 | border-left: 0;
346 | border-right: 0;
347 | border-bottom: 1px solid #aaa;
348 | }
349 |
350 | table.footnote td, table.footnote th {
351 | border: 0 !important;
352 | }
353 |
354 | th {
355 | text-align: left;
356 | padding-right: 5px;
357 | }
358 |
359 | table.citation {
360 | border-left: solid 1px gray;
361 | margin-left: 1px;
362 | }
363 |
364 | table.citation td {
365 | border-bottom: none;
366 | }
367 |
368 | /* -- figures --------------------------------------------------------------- */
369 |
370 | div.figure {
371 | margin: 0.5em;
372 | padding: 0.5em;
373 | }
374 |
375 | div.figure p.caption {
376 | padding: 0.3em;
377 | }
378 |
379 | div.figure p.caption span.caption-number {
380 | font-style: italic;
381 | }
382 |
383 | div.figure p.caption span.caption-text {
384 | }
385 |
386 | /* -- field list styles ----------------------------------------------------- */
387 |
388 | table.field-list td, table.field-list th {
389 | border: 0 !important;
390 | }
391 |
392 | .field-list ul {
393 | margin: 0;
394 | padding-left: 1em;
395 | }
396 |
397 | .field-list p {
398 | margin: 0;
399 | }
400 |
401 | .field-name {
402 | -moz-hyphens: manual;
403 | -ms-hyphens: manual;
404 | -webkit-hyphens: manual;
405 | hyphens: manual;
406 | }
407 |
408 | /* -- other body styles ----------------------------------------------------- */
409 |
410 | ol.arabic {
411 | list-style: decimal;
412 | }
413 |
414 | ol.loweralpha {
415 | list-style: lower-alpha;
416 | }
417 |
418 | ol.upperalpha {
419 | list-style: upper-alpha;
420 | }
421 |
422 | ol.lowerroman {
423 | list-style: lower-roman;
424 | }
425 |
426 | ol.upperroman {
427 | list-style: upper-roman;
428 | }
429 |
430 | dl {
431 | margin-bottom: 15px;
432 | }
433 |
434 | dd p {
435 | margin-top: 0px;
436 | }
437 |
438 | dd ul, dd table {
439 | margin-bottom: 10px;
440 | }
441 |
442 | dd {
443 | margin-top: 3px;
444 | margin-bottom: 10px;
445 | margin-left: 30px;
446 | }
447 |
448 | dt:target, span.highlighted {
449 | background-color: #fbe54e;
450 | }
451 |
452 | rect.highlighted {
453 | fill: #fbe54e;
454 | }
455 |
456 | dl.glossary dt {
457 | font-weight: bold;
458 | font-size: 1.1em;
459 | }
460 |
461 | .optional {
462 | font-size: 1.3em;
463 | }
464 |
465 | .sig-paren {
466 | font-size: larger;
467 | }
468 |
469 | .versionmodified {
470 | font-style: italic;
471 | }
472 |
473 | .system-message {
474 | background-color: #fda;
475 | padding: 5px;
476 | border: 3px solid red;
477 | }
478 |
479 | .footnote:target {
480 | background-color: #ffa;
481 | }
482 |
483 | .line-block {
484 | display: block;
485 | margin-top: 1em;
486 | margin-bottom: 1em;
487 | }
488 |
489 | .line-block .line-block {
490 | margin-top: 0;
491 | margin-bottom: 0;
492 | margin-left: 1.5em;
493 | }
494 |
495 | .guilabel, .menuselection {
496 | font-family: sans-serif;
497 | }
498 |
499 | .accelerator {
500 | text-decoration: underline;
501 | }
502 |
503 | .classifier {
504 | font-style: oblique;
505 | }
506 |
507 | abbr, acronym {
508 | border-bottom: dotted 1px;
509 | cursor: help;
510 | }
511 |
512 | /* -- code displays --------------------------------------------------------- */
513 |
514 | pre {
515 | overflow: auto;
516 | overflow-y: hidden; /* fixes display issues on Chrome browsers */
517 | }
518 |
519 | span.pre {
520 | -moz-hyphens: none;
521 | -ms-hyphens: none;
522 | -webkit-hyphens: none;
523 | hyphens: none;
524 | }
525 |
526 | td.linenos pre {
527 | padding: 5px 0px;
528 | border: 0;
529 | background-color: transparent;
530 | color: #aaa;
531 | }
532 |
533 | table.highlighttable {
534 | margin-left: 0.5em;
535 | }
536 |
537 | table.highlighttable td {
538 | padding: 0 0.5em 0 0.5em;
539 | }
540 |
541 | div.code-block-caption {
542 | padding: 2px 5px;
543 | font-size: small;
544 | }
545 |
546 | div.code-block-caption code {
547 | background-color: transparent;
548 | }
549 |
550 | div.code-block-caption + div > div.highlight > pre {
551 | margin-top: 0;
552 | }
553 |
554 | div.code-block-caption span.caption-number {
555 | padding: 0.1em 0.3em;
556 | font-style: italic;
557 | }
558 |
559 | div.code-block-caption span.caption-text {
560 | }
561 |
562 | div.literal-block-wrapper {
563 | padding: 1em 1em 0;
564 | }
565 |
566 | div.literal-block-wrapper div.highlight {
567 | margin: 0;
568 | }
569 |
570 | code.descname {
571 | background-color: transparent;
572 | font-weight: bold;
573 | font-size: 1.2em;
574 | }
575 |
576 | code.descclassname {
577 | background-color: transparent;
578 | }
579 |
580 | code.xref, a code {
581 | background-color: transparent;
582 | font-weight: bold;
583 | }
584 |
585 | h1 code, h2 code, h3 code, h4 code, h5 code, h6 code {
586 | background-color: transparent;
587 | }
588 |
589 | .viewcode-link {
590 | float: right;
591 | }
592 |
593 | .viewcode-back {
594 | float: right;
595 | font-family: sans-serif;
596 | }
597 |
598 | div.viewcode-block:target {
599 | margin: -1px -10px;
600 | padding: 0 10px;
601 | }
602 |
603 | /* -- math display ---------------------------------------------------------- */
604 |
605 | img.math {
606 | vertical-align: middle;
607 | }
608 |
609 | div.body div.math p {
610 | text-align: center;
611 | }
612 |
613 | span.eqno {
614 | float: right;
615 | }
616 |
617 | span.eqno a.headerlink {
618 | position: relative;
619 | left: 0px;
620 | z-index: 1;
621 | }
622 |
623 | div.math:hover a.headerlink {
624 | visibility: visible;
625 | }
626 |
627 | /* -- printout stylesheet --------------------------------------------------- */
628 |
629 | @media print {
630 | div.document,
631 | div.documentwrapper,
632 | div.bodywrapper {
633 | margin: 0 !important;
634 | width: 100%;
635 | }
636 |
637 | div.sphinxsidebar,
638 | div.related,
639 | div.footer,
640 | #top-link {
641 | display: none;
642 | }
643 | }
--------------------------------------------------------------------------------
/docs/build/html/_static/alabaster.css:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 | @import url("basic.css");
54 |
55 | /* -- page layout ----------------------------------------------------------- */
56 |
57 | body {
58 | font-family: 'goudy old style', 'minion pro', 'bell mt', Georgia, 'Hiragino Mincho Pro', serif;
59 | font-size: 17px;
60 | background-color: #fff;
61 | color: #000;
62 | margin: 0;
63 | padding: 0;
64 | }
65 |
66 |
67 | div.document {
68 | width: 940px;
69 | margin: 30px auto 0 auto;
70 | }
71 |
72 | div.documentwrapper {
73 | float: left;
74 | width: 100%;
75 | }
76 |
77 | div.bodywrapper {
78 | margin: 0 0 0 220px;
79 | }
80 |
81 | div.sphinxsidebar {
82 | width: 220px;
83 | font-size: 14px;
84 | line-height: 1.5;
85 | }
86 |
87 | hr {
88 | border: 1px solid #B1B4B6;
89 | }
90 |
91 | div.body {
92 | background-color: #fff;
93 | color: #3E4349;
94 | padding: 0 30px 0 30px;
95 | }
96 |
97 | div.body > .section {
98 | text-align: left;
99 | }
100 |
101 | div.footer {
102 | width: 940px;
103 | margin: 20px auto 30px auto;
104 | font-size: 14px;
105 | color: #888;
106 | text-align: right;
107 | }
108 |
109 | div.footer a {
110 | color: #888;
111 | }
112 |
113 | p.caption {
114 | font-family: inherit;
115 | font-size: inherit;
116 | }
117 |
118 |
119 | div.relations {
120 | display: none;
121 | }
122 |
123 |
124 | div.sphinxsidebar a {
125 | color: #444;
126 | text-decoration: none;
127 | border-bottom: 1px dotted #999;
128 | }
129 |
130 | div.sphinxsidebar a:hover {
131 | border-bottom: 1px solid #999;
132 | }
133 |
134 | div.sphinxsidebarwrapper {
135 | padding: 18px 10px;
136 | }
137 |
138 | div.sphinxsidebarwrapper p.logo {
139 | padding: 0;
140 | margin: -10px 0 0 0px;
141 | text-align: center;
142 | }
143 |
144 | div.sphinxsidebarwrapper h1.logo {
145 | margin-top: -10px;
146 | text-align: center;
147 | margin-bottom: 5px;
148 | text-align: left;
149 | }
150 |
151 | div.sphinxsidebarwrapper h1.logo-name {
152 | margin-top: 0px;
153 | }
154 |
155 | div.sphinxsidebarwrapper p.blurb {
156 | margin-top: 0;
157 | font-style: normal;
158 | }
159 |
160 | div.sphinxsidebar h3,
161 | div.sphinxsidebar h4 {
162 | font-family: 'Garamond', 'Georgia', serif;
163 | color: #444;
164 | font-size: 24px;
165 | font-weight: normal;
166 | margin: 0 0 5px 0;
167 | padding: 0;
168 | }
169 |
170 | div.sphinxsidebar h4 {
171 | font-size: 20px;
172 | }
173 |
174 | div.sphinxsidebar h3 a {
175 | color: #444;
176 | }
177 |
178 | div.sphinxsidebar p.logo a,
179 | div.sphinxsidebar h3 a,
180 | div.sphinxsidebar p.logo a:hover,
181 | div.sphinxsidebar h3 a:hover {
182 | border: none;
183 | }
184 |
185 | div.sphinxsidebar p {
186 | color: #555;
187 | margin: 10px 0;
188 | }
189 |
190 | div.sphinxsidebar ul {
191 | margin: 10px 0;
192 | padding: 0;
193 | color: #000;
194 | }
195 |
196 | div.sphinxsidebar ul li.toctree-l1 > a {
197 | font-size: 120%;
198 | }
199 |
200 | div.sphinxsidebar ul li.toctree-l2 > a {
201 | font-size: 110%;
202 | }
203 |
204 | div.sphinxsidebar input {
205 | border: 1px solid #CCC;
206 | font-family: 'goudy old style', 'minion pro', 'bell mt', Georgia, 'Hiragino Mincho Pro', serif;
207 | font-size: 1em;
208 | }
209 |
210 | div.sphinxsidebar hr {
211 | border: none;
212 | height: 1px;
213 | color: #AAA;
214 | background: #AAA;
215 |
216 | text-align: left;
217 | margin-left: 0;
218 | width: 50%;
219 | }
220 |
221 | /* -- body styles ----------------------------------------------------------- */
222 |
223 | a {
224 | color: #004B6B;
225 | text-decoration: underline;
226 | }
227 |
228 | a:hover {
229 | color: #6D4100;
230 | text-decoration: underline;
231 | }
232 |
233 | div.body h1,
234 | div.body h2,
235 | div.body h3,
236 | div.body h4,
237 | div.body h5,
238 | div.body h6 {
239 | font-family: 'Garamond', 'Georgia', serif;
240 | font-weight: normal;
241 | margin: 30px 0px 10px 0px;
242 | padding: 0;
243 | }
244 |
245 | div.body h1 { margin-top: 0; padding-top: 0; font-size: 240%; }
246 | div.body h2 { font-size: 180%; }
247 | div.body h3 { font-size: 150%; }
248 | div.body h4 { font-size: 130%; }
249 | div.body h5 { font-size: 100%; }
250 | div.body h6 { font-size: 100%; }
251 |
252 | a.headerlink {
253 | color: #DDD;
254 | padding: 0 4px;
255 | text-decoration: none;
256 | }
257 |
258 | a.headerlink:hover {
259 | color: #444;
260 | background: #EAEAEA;
261 | }
262 |
263 | div.body p, div.body dd, div.body li {
264 | line-height: 1.4em;
265 | }
266 |
267 | div.admonition {
268 | margin: 20px 0px;
269 | padding: 10px 30px;
270 | background-color: #EEE;
271 | border: 1px solid #CCC;
272 | }
273 |
274 | div.admonition tt.xref, div.admonition code.xref, div.admonition a tt {
275 | background-color: #FBFBFB;
276 | border-bottom: 1px solid #fafafa;
277 | }
278 |
279 | div.admonition p.admonition-title {
280 | font-family: 'Garamond', 'Georgia', serif;
281 | font-weight: normal;
282 | font-size: 24px;
283 | margin: 0 0 10px 0;
284 | padding: 0;
285 | line-height: 1;
286 | }
287 |
288 | div.admonition p.last {
289 | margin-bottom: 0;
290 | }
291 |
292 | div.highlight {
293 | background-color: #fff;
294 | }
295 |
296 | dt:target, .highlight {
297 | background: #FAF3E8;
298 | }
299 |
300 | div.warning {
301 | background-color: #FCC;
302 | border: 1px solid #FAA;
303 | }
304 |
305 | div.danger {
306 | background-color: #FCC;
307 | border: 1px solid #FAA;
308 | -moz-box-shadow: 2px 2px 4px #D52C2C;
309 | -webkit-box-shadow: 2px 2px 4px #D52C2C;
310 | box-shadow: 2px 2px 4px #D52C2C;
311 | }
312 |
313 | div.error {
314 | background-color: #FCC;
315 | border: 1px solid #FAA;
316 | -moz-box-shadow: 2px 2px 4px #D52C2C;
317 | -webkit-box-shadow: 2px 2px 4px #D52C2C;
318 | box-shadow: 2px 2px 4px #D52C2C;
319 | }
320 |
321 | div.caution {
322 | background-color: #FCC;
323 | border: 1px solid #FAA;
324 | }
325 |
326 | div.attention {
327 | background-color: #FCC;
328 | border: 1px solid #FAA;
329 | }
330 |
331 | div.important {
332 | background-color: #EEE;
333 | border: 1px solid #CCC;
334 | }
335 |
336 | div.note {
337 | background-color: #EEE;
338 | border: 1px solid #CCC;
339 | }
340 |
341 | div.tip {
342 | background-color: #EEE;
343 | border: 1px solid #CCC;
344 | }
345 |
346 | div.hint {
347 | background-color: #EEE;
348 | border: 1px solid #CCC;
349 | }
350 |
351 | div.seealso {
352 | background-color: #EEE;
353 | border: 1px solid #CCC;
354 | }
355 |
356 | div.topic {
357 | background-color: #EEE;
358 | }
359 |
360 | p.admonition-title {
361 | display: inline;
362 | }
363 |
364 | p.admonition-title:after {
365 | content: ":";
366 | }
367 |
368 | pre, tt, code {
369 | font-family: 'Consolas', 'Menlo', 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
370 | font-size: 0.9em;
371 | }
372 |
373 | .hll {
374 | background-color: #FFC;
375 | margin: 0 -12px;
376 | padding: 0 12px;
377 | display: block;
378 | }
379 |
380 | img.screenshot {
381 | }
382 |
383 | tt.descname, tt.descclassname, code.descname, code.descclassname {
384 | font-size: 0.95em;
385 | }
386 |
387 | tt.descname, code.descname {
388 | padding-right: 0.08em;
389 | }
390 |
391 | img.screenshot {
392 | -moz-box-shadow: 2px 2px 4px #EEE;
393 | -webkit-box-shadow: 2px 2px 4px #EEE;
394 | box-shadow: 2px 2px 4px #EEE;
395 | }
396 |
397 | table.docutils {
398 | border: 1px solid #888;
399 | -moz-box-shadow: 2px 2px 4px #EEE;
400 | -webkit-box-shadow: 2px 2px 4px #EEE;
401 | box-shadow: 2px 2px 4px #EEE;
402 | }
403 |
404 | table.docutils td, table.docutils th {
405 | border: 1px solid #888;
406 | padding: 0.25em 0.7em;
407 | }
408 |
409 | table.field-list, table.footnote {
410 | border: none;
411 | -moz-box-shadow: none;
412 | -webkit-box-shadow: none;
413 | box-shadow: none;
414 | }
415 |
416 | table.footnote {
417 | margin: 15px 0;
418 | width: 100%;
419 | border: 1px solid #EEE;
420 | background: #FDFDFD;
421 | font-size: 0.9em;
422 | }
423 |
424 | table.footnote + table.footnote {
425 | margin-top: -15px;
426 | border-top: none;
427 | }
428 |
429 | table.field-list th {
430 | padding: 0 0.8em 0 0;
431 | }
432 |
433 | table.field-list td {
434 | padding: 0;
435 | }
436 |
437 | table.field-list p {
438 | margin-bottom: 0.8em;
439 | }
440 |
441 | /* Cloned from
442 | * https://github.com/sphinx-doc/sphinx/commit/ef60dbfce09286b20b7385333d63a60321784e68
443 | */
444 | .field-name {
445 | -moz-hyphens: manual;
446 | -ms-hyphens: manual;
447 | -webkit-hyphens: manual;
448 | hyphens: manual;
449 | }
450 |
451 | table.footnote td.label {
452 | width: .1px;
453 | padding: 0.3em 0 0.3em 0.5em;
454 | }
455 |
456 | table.footnote td {
457 | padding: 0.3em 0.5em;
458 | }
459 |
460 | dl {
461 | margin: 0;
462 | padding: 0;
463 | }
464 |
465 | dl dd {
466 | margin-left: 30px;
467 | }
468 |
469 | blockquote {
470 | margin: 0 0 0 30px;
471 | padding: 0;
472 | }
473 |
474 | ul, ol {
475 | /* Matches the 30px from the narrow-screen "li > ul" selector below */
476 | margin: 10px 0 10px 30px;
477 | padding: 0;
478 | }
479 |
480 | pre {
481 | background: #EEE;
482 | padding: 7px 30px;
483 | margin: 15px 0px;
484 | line-height: 1.3em;
485 | }
486 |
487 | div.viewcode-block:target {
488 | background: #ffd;
489 | }
490 |
491 | dl pre, blockquote pre, li pre {
492 | margin-left: 0;
493 | padding-left: 30px;
494 | }
495 |
496 | tt, code {
497 | background-color: #ecf0f3;
498 | color: #222;
499 | /* padding: 1px 2px; */
500 | }
501 |
502 | tt.xref, code.xref, a tt {
503 | background-color: #FBFBFB;
504 | border-bottom: 1px solid #fff;
505 | }
506 |
507 | a.reference {
508 | text-decoration: none;
509 | border-bottom: 1px dotted #004B6B;
510 | }
511 |
512 | /* Don't put an underline on images */
513 | a.image-reference, a.image-reference:hover {
514 | border-bottom: none;
515 | }
516 |
517 | a.reference:hover {
518 | border-bottom: 1px solid #6D4100;
519 | }
520 |
521 | a.footnote-reference {
522 | text-decoration: none;
523 | font-size: 0.7em;
524 | vertical-align: top;
525 | border-bottom: 1px dotted #004B6B;
526 | }
527 |
528 | a.footnote-reference:hover {
529 | border-bottom: 1px solid #6D4100;
530 | }
531 |
532 | a:hover tt, a:hover code {
533 | background: #EEE;
534 | }
535 |
536 |
537 | @media screen and (max-width: 870px) {
538 |
539 | div.sphinxsidebar {
540 | display: none;
541 | }
542 |
543 | div.document {
544 | width: 100%;
545 |
546 | }
547 |
548 | div.documentwrapper {
549 | margin-left: 0;
550 | margin-top: 0;
551 | margin-right: 0;
552 | margin-bottom: 0;
553 | }
554 |
555 | div.bodywrapper {
556 | margin-top: 0;
557 | margin-right: 0;
558 | margin-bottom: 0;
559 | margin-left: 0;
560 | }
561 |
562 | ul {
563 | margin-left: 0;
564 | }
565 |
566 | li > ul {
567 | /* Matches the 30px from the "ul, ol" selector above */
568 | margin-left: 30px;
569 | }
570 |
571 | .document {
572 | width: auto;
573 | }
574 |
575 | .footer {
576 | width: auto;
577 | }
578 |
579 | .bodywrapper {
580 | margin: 0;
581 | }
582 |
583 | .footer {
584 | width: auto;
585 | }
586 |
587 | .github {
588 | display: none;
589 | }
590 |
591 |
592 |
593 | }
594 |
595 |
596 |
597 | @media screen and (max-width: 875px) {
598 |
599 | body {
600 | margin: 0;
601 | padding: 20px 30px;
602 | }
603 |
604 | div.documentwrapper {
605 | float: none;
606 | background: #fff;
607 | }
608 |
609 | div.sphinxsidebar {
610 | display: block;
611 | float: none;
612 | width: 102.5%;
613 | margin: 50px -30px -20px -30px;
614 | padding: 10px 20px;
615 | background: #333;
616 | color: #FFF;
617 | }
618 |
619 | div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p,
620 | div.sphinxsidebar h3 a {
621 | color: #fff;
622 | }
623 |
624 | div.sphinxsidebar a {
625 | color: #AAA;
626 | }
627 |
628 | div.sphinxsidebar p.logo {
629 | display: none;
630 | }
631 |
632 | div.document {
633 | width: 100%;
634 | margin: 0;
635 | }
636 |
637 | div.footer {
638 | display: none;
639 | }
640 |
641 | div.bodywrapper {
642 | margin: 0;
643 | }
644 |
645 | div.body {
646 | min-height: 0;
647 | padding: 0;
648 | }
649 |
650 | .rtd_doc_footer {
651 | display: none;
652 | }
653 |
654 | .document {
655 | width: auto;
656 | }
657 |
658 | .footer {
659 | width: auto;
660 | }
661 |
662 | .footer {
663 | width: auto;
664 | }
665 |
666 | .github {
667 | display: none;
668 | }
669 | }
670 |
671 |
672 | /* misc. */
673 |
674 | .revsys-inline {
675 | display: none!important;
676 | }
677 |
678 | /* Make nested-list/multi-paragraph items look better in Releases changelog
679 | * pages. Without this, docutils' magical list fuckery causes inconsistent
680 | * formatting between different release sub-lists.
681 | */
682 | div#changelog > div.section > ul > li > p:only-child {
683 | margin-bottom: 0;
684 | }
685 |
686 | /* Hide fugly table cell borders in ..bibliography:: directive output */
687 | table.docutils.citation, table.docutils.citation td, table.docutils.citation th {
688 | border: none;
689 | /* Below needed in some edge cases; if not applied, bottom shadows appear */
690 | -moz-box-shadow: none;
691 | -webkit-box-shadow: none;
692 | box-shadow: none;
693 | }
--------------------------------------------------------------------------------
/docs/build/html/_static/js/modernizr.min.js:
--------------------------------------------------------------------------------
1 | /* Modernizr 2.6.2 (Custom Build) | MIT & BSD
2 | * Build: http://modernizr.com/download/#-fontface-backgroundsize-borderimage-borderradius-boxshadow-flexbox-hsla-multiplebgs-opacity-rgba-textshadow-cssanimations-csscolumns-generatedcontent-cssgradients-cssreflections-csstransforms-csstransforms3d-csstransitions-applicationcache-canvas-canvastext-draganddrop-hashchange-history-audio-video-indexeddb-input-inputtypes-localstorage-postmessage-sessionstorage-websockets-websqldatabase-webworkers-geolocation-inlinesvg-smil-svg-svgclippaths-touch-webgl-shiv-mq-cssclasses-addtest-prefixed-teststyles-testprop-testallprops-hasevent-prefixes-domprefixes-load
3 | */
4 | ;window.Modernizr=function(a,b,c){function D(a){j.cssText=a}function E(a,b){return D(n.join(a+";")+(b||""))}function F(a,b){return typeof a===b}function G(a,b){return!!~(""+a).indexOf(b)}function H(a,b){for(var d in a){var e=a[d];if(!G(e,"-")&&j[e]!==c)return b=="pfx"?e:!0}return!1}function I(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:F(f,"function")?f.bind(d||b):f}return!1}function J(a,b,c){var d=a.charAt(0).toUpperCase()+a.slice(1),e=(a+" "+p.join(d+" ")+d).split(" ");return F(b,"string")||F(b,"undefined")?H(e,b):(e=(a+" "+q.join(d+" ")+d).split(" "),I(e,b,c))}function K(){e.input=function(c){for(var d=0,e=c.length;d',a,""].join(""),l.id=h,(m?l:n).innerHTML+=f,n.appendChild(l),m||(n.style.background="",n.style.overflow="hidden",k=g.style.overflow,g.style.overflow="hidden",g.appendChild(n)),i=c(l,a),m?l.parentNode.removeChild(l):(n.parentNode.removeChild(n),g.style.overflow=k),!!i},z=function(b){var c=a.matchMedia||a.msMatchMedia;if(c)return c(b).matches;var d;return y("@media "+b+" { #"+h+" { position: absolute; } }",function(b){d=(a.getComputedStyle?getComputedStyle(b,null):b.currentStyle)["position"]=="absolute"}),d},A=function(){function d(d,e){e=e||b.createElement(a[d]||"div"),d="on"+d;var f=d in e;return f||(e.setAttribute||(e=b.createElement("div")),e.setAttribute&&e.removeAttribute&&(e.setAttribute(d,""),f=F(e[d],"function"),F(e[d],"undefined")||(e[d]=c),e.removeAttribute(d))),e=null,f}var a={select:"input",change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"};return d}(),B={}.hasOwnProperty,C;!F(B,"undefined")&&!F(B.call,"undefined")?C=function(a,b){return B.call(a,b)}:C=function(a,b){return b in a&&F(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=w.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(w.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(w.call(arguments)))};return e}),s.flexbox=function(){return J("flexWrap")},s.canvas=function(){var a=b.createElement("canvas");return!!a.getContext&&!!a.getContext("2d")},s.canvastext=function(){return!!e.canvas&&!!F(b.createElement("canvas").getContext("2d").fillText,"function")},s.webgl=function(){return!!a.WebGLRenderingContext},s.touch=function(){var c;return"ontouchstart"in a||a.DocumentTouch&&b instanceof DocumentTouch?c=!0:y(["@media (",n.join("touch-enabled),("),h,")","{#modernizr{top:9px;position:absolute}}"].join(""),function(a){c=a.offsetTop===9}),c},s.geolocation=function(){return"geolocation"in navigator},s.postmessage=function(){return!!a.postMessage},s.websqldatabase=function(){return!!a.openDatabase},s.indexedDB=function(){return!!J("indexedDB",a)},s.hashchange=function(){return A("hashchange",a)&&(b.documentMode===c||b.documentMode>7)},s.history=function(){return!!a.history&&!!history.pushState},s.draganddrop=function(){var a=b.createElement("div");return"draggable"in a||"ondragstart"in a&&"ondrop"in a},s.websockets=function(){return"WebSocket"in a||"MozWebSocket"in a},s.rgba=function(){return D("background-color:rgba(150,255,150,.5)"),G(j.backgroundColor,"rgba")},s.hsla=function(){return D("background-color:hsla(120,40%,100%,.5)"),G(j.backgroundColor,"rgba")||G(j.backgroundColor,"hsla")},s.multiplebgs=function(){return D("background:url(https://),url(https://),red url(https://)"),/(url\s*\(.*?){3}/.test(j.background)},s.backgroundsize=function(){return J("backgroundSize")},s.borderimage=function(){return J("borderImage")},s.borderradius=function(){return J("borderRadius")},s.boxshadow=function(){return J("boxShadow")},s.textshadow=function(){return b.createElement("div").style.textShadow===""},s.opacity=function(){return E("opacity:.55"),/^0.55$/.test(j.opacity)},s.cssanimations=function(){return J("animationName")},s.csscolumns=function(){return J("columnCount")},s.cssgradients=function(){var a="background-image:",b="gradient(linear,left top,right bottom,from(#9f9),to(white));",c="linear-gradient(left top,#9f9, white);";return D((a+"-webkit- ".split(" ").join(b+a)+n.join(c+a)).slice(0,-a.length)),G(j.backgroundImage,"gradient")},s.cssreflections=function(){return J("boxReflect")},s.csstransforms=function(){return!!J("transform")},s.csstransforms3d=function(){var a=!!J("perspective");return a&&"webkitPerspective"in g.style&&y("@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}",function(b,c){a=b.offsetLeft===9&&b.offsetHeight===3}),a},s.csstransitions=function(){return J("transition")},s.fontface=function(){var a;return y('@font-face {font-family:"font";src:url("https://")}',function(c,d){var e=b.getElementById("smodernizr"),f=e.sheet||e.styleSheet,g=f?f.cssRules&&f.cssRules[0]?f.cssRules[0].cssText:f.cssText||"":"";a=/src/i.test(g)&&g.indexOf(d.split(" ")[0])===0}),a},s.generatedcontent=function(){var a;return y(["#",h,"{font:0/0 a}#",h,':after{content:"',l,'";visibility:hidden;font:3px/1 a}'].join(""),function(b){a=b.offsetHeight>=3}),a},s.video=function(){var a=b.createElement("video"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('video/ogg; codecs="theora"').replace(/^no$/,""),c.h264=a.canPlayType('video/mp4; codecs="avc1.42E01E"').replace(/^no$/,""),c.webm=a.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/,"")}catch(d){}return c},s.audio=function(){var a=b.createElement("audio"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),c.mp3=a.canPlayType("audio/mpeg;").replace(/^no$/,""),c.wav=a.canPlayType('audio/wav; codecs="1"').replace(/^no$/,""),c.m4a=(a.canPlayType("audio/x-m4a;")||a.canPlayType("audio/aac;")).replace(/^no$/,"")}catch(d){}return c},s.localstorage=function(){try{return localStorage.setItem(h,h),localStorage.removeItem(h),!0}catch(a){return!1}},s.sessionstorage=function(){try{return sessionStorage.setItem(h,h),sessionStorage.removeItem(h),!0}catch(a){return!1}},s.webworkers=function(){return!!a.Worker},s.applicationcache=function(){return!!a.applicationCache},s.svg=function(){return!!b.createElementNS&&!!b.createElementNS(r.svg,"svg").createSVGRect},s.inlinesvg=function(){var a=b.createElement("div");return a.innerHTML=" ",(a.firstChild&&a.firstChild.namespaceURI)==r.svg},s.smil=function(){return!!b.createElementNS&&/SVGAnimate/.test(m.call(b.createElementNS(r.svg,"animate")))},s.svgclippaths=function(){return!!b.createElementNS&&/SVGClipPath/.test(m.call(b.createElementNS(r.svg,"clipPath")))};for(var L in s)C(s,L)&&(x=L.toLowerCase(),e[x]=s[L](),v.push((e[x]?"":"no-")+x));return e.input||K(),e.addTest=function(a,b){if(typeof a=="object")for(var d in a)C(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b=="function"?b():b,typeof f!="undefined"&&f&&(g.className+=" "+(b?"":"no-")+a),e[a]=b}return e},D(""),i=k=null,function(a,b){function k(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function l(){var a=r.elements;return typeof a=="string"?a.split(" "):a}function m(a){var b=i[a[g]];return b||(b={},h++,a[g]=h,i[h]=b),b}function n(a,c,f){c||(c=b);if(j)return c.createElement(a);f||(f=m(c));var g;return f.cache[a]?g=f.cache[a].cloneNode():e.test(a)?g=(f.cache[a]=f.createElem(a)).cloneNode():g=f.createElem(a),g.canHaveChildren&&!d.test(a)?f.frag.appendChild(g):g}function o(a,c){a||(a=b);if(j)return a.createDocumentFragment();c=c||m(a);var d=c.frag.cloneNode(),e=0,f=l(),g=f.length;for(;e",f="hidden"in a,j=a.childNodes.length==1||function(){b.createElement("a");var a=b.createDocumentFragment();return typeof a.cloneNode=="undefined"||typeof a.createDocumentFragment=="undefined"||typeof a.createElement=="undefined"}()}catch(c){f=!0,j=!0}})();var r={elements:c.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",shivCSS:c.shivCSS!==!1,supportsUnknownElements:j,shivMethods:c.shivMethods!==!1,type:"default",shivDocument:q,createElement:n,createDocumentFragment:o};a.html5=r,q(b)}(this,b),e._version=d,e._prefixes=n,e._domPrefixes=q,e._cssomPrefixes=p,e.mq=z,e.hasEvent=A,e.testProp=function(a){return H([a])},e.testAllProps=J,e.testStyles=y,e.prefixed=function(a,b,c){return b?J(a,b,c):J(a,"pfx")},g.className=g.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(f?" js "+v.join(" "):""),e}(this,this.document),function(a,b,c){function d(a){return"[object Function]"==o.call(a)}function e(a){return"string"==typeof a}function f(){}function g(a){return!a||"loaded"==a||"complete"==a||"uninitialized"==a}function h(){var a=p.shift();q=1,a?a.t?m(function(){("c"==a.t?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){"img"!=a&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l=b.createElement(a),o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};1===y[c]&&(r=1,y[c]=[]),"object"==a?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),"img"!=a&&(r||2===y[c]?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i("c"==b?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),1==p.length&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&"[object Opera]"==o.call(a.opera),l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return"[object Array]"==o.call(a)},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;f
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | eeconvert package — eeconvert 0.0.1 documentation
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 | eeconvert
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 | Docs »
144 |
145 | eeconvert package
146 |
147 |
148 |
149 |
150 |
151 | View page source
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
eeconvert package
166 |
167 |
Module contents
168 |
169 |
170 | eeconvert.defaultMap( )
171 |
172 |
173 |
174 |
175 | eeconvert.dfToFc( df )
176 | converts a dataframe to a featurecollection without geometry
177 |
178 | Args:
179 | df (pandas.dataFrame) : the input dataframe
180 | Returns:
181 | fc (ee.FeatureCollection) : feature collection with empty geometry
182 |
183 |
184 |
185 |
186 |
187 | eeconvert.dfToPostgreSQL( connection , df , tableName , saveIndex=True )
188 | this function uploads a dataframe to table in AWS RDS.
189 |
190 | Args:
191 | connection (sqlalchemy.engine.base.Connection) :database connection
192 | df (pandas.GeoDataFrame) : input dataFrame
193 | tableName (string) : table name (string)
194 | saveIndex (boolean, optional) : save geoDataFrame index column in separate column in postgresql, otherwise discarded. Default is True
195 | Returns:
196 | gdf (geoPandas.GeoDataFrame) : the geodataframe loaded from the database. Should match the input dataframe
197 | todo:
198 | currently removes table if exists. Include option to break or append
199 |
200 |
201 |
202 |
203 |
204 | eeconvert.eeImageToFoliumLayer( image , layerName='eeLayer' , visParams=None , foliumKwargs={} )
205 | Function to add Google Earch Engine tile layer as a Folium layer.
206 | based on https://github.com/mccarthyryanc/folium_gee/blob/master/folium_gee.py hence PEP8 instead of camelcase
207 |
208 | Args:
209 | image (ee.Image) : Google Earth Engine Image.
210 | layerName (string) : Layer name for in folium layerControl. Default : “eeLayer”
211 | vis_params (dict) : Dict with visualization parameters as used in Google Earth Engine. Note that color palatte inputs in python needs to be structured like: “palette”: “ff0000,ff0000,0013ff”
212 | folium_kwargs (dict) : Keyword args for Folium Map.
213 | Returns:
214 | layer () : folium Layer. Add to map by applying method .add(m)
215 |
216 |
217 |
218 |
219 |
220 | eeconvert.fcToDf( fc )
221 | converts a featurecollection to a Pandas DataFrame. Use this function for featureCollections without geometries. For featureCollections with geometries, use fcToGdf()
222 |
223 | Args:
224 | fc (ee.FeatureCollection) : the earth engine feature collection to convert. Size is limited to memory (geopandas limitation)
225 | crs (dictionary, optional) : the coordinate reference system in geopandas format. Defaults to {‘init’ :’epsg:4326’}
226 | Returns:
227 | df (pandas.DataFrame) : the corresponding dataframe.
228 |
229 |
230 |
231 |
232 |
233 | eeconvert.fcToGdf( fc , crs={'init': 'epsg:4326'} )
234 | converts a featurecollection to a geoPandas GeoDataFrame. Use this function only if all features have a geometry.
235 | caveats:
236 | Currently only supports non-geodesic (planar) geometries because of limitations in geoPandas and Leaflet. Geodesic geometries are simply interpreted as planar geometries.
237 | FeatureCollections larger than memory are currently not supported. Consider splitting data and merging (server side) afterwards.
238 |
239 | Args:
240 | fc (ee.FeatureCollection) : the earth engine feature collection to convert.
241 | crs (dictionary, optional) : the coordinate reference system in geopandas format. Defaults to {‘init’ :’epsg:4326’}
242 | Returns:
243 | gdf (geoPandas.GeoDataFrame or pandas.DataFrame) : the corresponding (geo)dataframe.
244 |
245 |
246 |
247 |
248 |
249 | eeconvert.gdfToFc( gdf )
250 | converts a geodataframe to a featurecollection
251 |
252 | Args:
253 | gdf (geoPandas.GeoDataFrame) : the input geodataframe
254 | Returns:
255 | fc (ee.FeatureCollection) : feature collection (server side)
256 |
257 |
258 |
259 |
260 |
261 | eeconvert.gdfToFoliumGroup( gdf , name='noName' )
262 | converts a geodataframe to a folium featureGroup with the properties as a popup child
263 |
264 | Args:
265 | gdf (geoPandas.GeoDataFrame) : the input geodataframe
266 | name (string) : output folium feature group name
267 | Returns:
268 | fc (ee.FeatureCollection) : feature collection (server side)
269 |
270 |
271 |
272 |
273 |
274 | eeconvert.gdfToPostGIS( connection , gdf , tableName , saveIndex=True )
275 | this function uploads a geodataframe to table in AWS RDS.
276 | It handles combined polygon/multipolygon geometry and stores it in valid multipolygon in epsg 4326.
277 |
278 | Args:
279 | connection (sqlalchemy.engine.base.Connection) : postGIS enabled database connection
280 | gdf (geoPandas.GeoDataFrame) : input geoDataFrame
281 | tableName (string) : postGIS table name (string)
282 | saveIndex (boolean, optional) : save geoDataFrame index column in separate column in postgresql, otherwise discarded. Default is True
283 | Returns:
284 | gdf (geoPandas.GeoDataFrame) : the geodataframe loaded from the database. Should match the input dataframe
285 | todo:
286 | currently removes table if exists. Include option to break or append
287 |
288 |
289 |
290 |
291 |
292 | eeconvert.noGeometryEEFeature( row )
293 |
294 |
295 |
296 |
297 | eeconvert.postGisToGdf( connection , tableName )
298 | this function gets a geoDataFrame from a postGIS database instance
299 |
300 | Args:
301 | connection (sqlalchemy.engine.base.Connection) : postGIS enabled database connection
302 | tableName (string) : table name
303 | Returns:
304 | gdf (geoPandas.GeoDataFrame) : the geodataframe from PostGIS
305 | todo:
306 | allow for SQL filtering
307 |
308 |
309 |
310 |
311 |
312 | eeconvert.postgreSQLToDf( connection , tableName )
313 | this function gets a dataFrame from a postGIS database instance
314 |
315 | Args:
316 | connection (sqlalchemy.engine.base.Connection) : postGIS enabled database connection
317 | tableName (string) : table name
318 | Returns:
319 | df (pandas.DataFrame) : the dataframe from PostGIS
320 | todo:
321 | allow for SQL filtering
322 |
323 |
324 |
325 |
326 |
327 | eeconvert.rdsConnect( database_identifier , database_name , master_username )
328 | open a connection to AWS RDS
329 | in addition to specifying the arguments you need to store your password in a file called .password in the current working directory.
330 | You can do this using the command line or Jupyter. Make sure to have your .gitignore file up to date.
331 |
332 | Args:
333 | database_identifier (string) : postgresql database identifier used when you set up the AWS RDS instance.
334 | database_name (string) : the database name to connect to.
335 | master_username (string) : the master username for the database.
336 |
337 | Returns:
338 | engine (sqlalchemy.engine.base.Engine) : database engine.
339 | connection (sqlalchemy.engine.base.Connection) : database connection.
340 |
341 |
342 |
343 |
344 |
345 |
346 | eeconvert.shapelyToEEFeature( row )
347 |
348 |
349 |
350 |
351 | eeconvert.shapelyToFoliumFeature( row )
352 | converts a shapely feature to a folium (leaflet) feature. row needs to have a geometry column. CRS is 4326
353 |
354 | Args:
355 | row (geoPandas.GeoDataFrame row) : the input geodataframe row. Appy this function to a geodataframe gdf.appy(function, 1)
356 | Returns:
357 | foliumFeature (folium feature) : foliumFeature with popup child.
358 |
359 |
360 |
361 |
362 |
363 |
364 |
365 |
366 |
367 |
368 |
369 |
370 |
393 |
394 |
395 |
396 |
397 |
398 |
399 |
400 |
401 |
402 |
403 |
404 |
405 |
415 |
416 |
417 |
418 |
419 |
420 |
421 |
422 |
423 |
424 |
425 |
426 |
427 |
428 |
433 |
434 |
435 |
436 |
--------------------------------------------------------------------------------