From 2e3b90316fbb2b1be2c0d07e71b08b77adccb2b0 Mon Sep 17 00:00:00 2001 From: Kilian Vos Date: Tue, 16 Oct 2018 11:26:55 +1100 Subject: [PATCH] updated ReadMe --- .../shoreline_extraction-checkpoint.ipynb | 199 ----------------- README.md | 34 ++- environment.txt | 203 ++++++++++++++++++ environment.yml | 192 +++++++++-------- 4 files changed, 341 insertions(+), 287 deletions(-) delete mode 100644 .ipynb_checkpoints/shoreline_extraction-checkpoint.ipynb create mode 100644 environment.txt diff --git a/.ipynb_checkpoints/shoreline_extraction-checkpoint.ipynb b/.ipynb_checkpoints/shoreline_extraction-checkpoint.ipynb deleted file mode 100644 index 8d99b85..0000000 --- a/.ipynb_checkpoints/shoreline_extraction-checkpoint.ipynb +++ /dev/null @@ -1,199 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Shoreline extraction from satellite images" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This notebook shows how to download satellite images (Landsat 5,7,8 and Sentinel-2) from Google Earth Engine and apply the shoreline detection algorithm described in *Vos K., Harley M.D., Splinter K.D., Simmons J.A., Turner I.L. (in review). Capturing intra-annual to multi-decadal shoreline variability from publicly available satellite imagery, Coastal Engineering*. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Initial settings" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The Python packages required to run this notebook can be installed by running the following anaconda command:\n", - "*\"conda env create -f environment.yml\"*. This will create a new enviroment with all the relevant packages installed. You will also need to sign up for Google Earth Engine (https://earthengine.google.com and go to signup) and authenticate on the computer so that python can access via your login." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "import pickle\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "import warnings\n", - "warnings.filterwarnings(\"ignore\")\n", - "# load modules from directory\n", - "import SDS_download, SDS_preprocess, SDS_tools, SDS_shoreline" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Download images" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Define the region of interest, the dates and the satellite missions from which you want to download images. The image will be cropped on the Google Earth Engine server and only the region of interest will be downloaded resulting in low memory allocation (~ 1 megabyte/image for 5 km of beach)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# define the area of interest (longitude, latitude)\n", - "polygon = [[[151.301454, -33.700754],\n", - " [151.311453, -33.702075], \n", - " [151.307237, -33.739761],\n", - " [151.294220, -33.736329],\n", - " [151.301454, -33.700754]]]\n", - " \n", - "# define dates of interest\n", - "dates = ['2017-12-01','2018-01-01']\n", - "\n", - "# define satellite missions ('L5' --> landsat 5 , 'S2' --> Sentinel-2)\n", - "sat_list = ['L5', 'L7', 'L8', 'S2']\n", - "\n", - "# give a name to the site\n", - "sitename = 'NARRA'\n", - "\n", - "# download satellite images. The cropped images are saved in a '/data' subfolder. The image information is stored\n", - "# into 'metadata.pkl'.\n", - "# SDS_download.get_images(sitename, polygon, dates, sat_list)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Shoreline extraction" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Performs a sub-pixel resolution shoreline detection method integrating a supervised classification component that allows to map the boundary between water and sand." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# parameters and settings\n", - "%matplotlib qt\n", - "settings = { \n", - " 'sitename': sitename,\n", - " \n", - " # general parameters:\n", - " 'cloud_thresh': 0.5, # threshold on maximum cloud cover\n", - " 'output_epsg': 28356, # epsg code of the desired output spatial reference system\n", - " \n", - " # shoreline detection parameters:\n", - " 'min_beach_size': 20, # minimum number of connected pixels for a beach\n", - " 'buffer_size': 7, # radius (in pixels) of disk for buffer around sandy pixels\n", - " 'min_length_sl': 200, # minimum length of shoreline perimeter to be kept \n", - " 'max_dist_ref': 100 , # max distance (in meters) allowed from a reference shoreline\n", - " \n", - " # quality control:\n", - " 'check_detection': True # if True, shows each shoreline detection and lets the user \n", - " # decide which shorleines are correct and which ones are false due to\n", - " # the presence of clouds and other artefacts. \n", - " # If set to False, shorelines are extracted from all images.\n", - " }\n", - "\n", - "# load metadata structure (contains information on the downloaded satellite images and is created\n", - "# after all images have been successfully downloaded)\n", - "filepath = os.path.join(os.getcwd(), 'data', settings['sitename'])\n", - "with open(os.path.join(filepath, settings['sitename'] + '_metadata' + '.pkl'), 'rb') as f:\n", - " metadata = pickle.load(f)\n", - " \n", - "# [OPTIONAL] saves .jpg files of the preprocessed images (cloud mask and pansharpening/down-sampling) \n", - "#SDS_preprocess.preprocess_all_images(metadata, settings)\n", - "\n", - "# [OPTIONAL] to avoid false detections and identify obvious outliers there is the option to\n", - "# create a reference shoreline position (manually clicking on a satellite image)\n", - "settings['refsl'] = SDS_preprocess.get_reference_sl(metadata, settings)\n", - "\n", - "# extract shorelines from all images. Saves out.pkl which contains the shoreline coordinates for each date in the spatial\n", - "# reference system specified in settings['output_epsg']. Save the output in a file called 'out.pkl'.\n", - "out = SDS_shoreline.extract_shorelines(metadata, settings)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Plot the shorelines" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "plt.figure()\n", - "plt.axis('equal')\n", - "plt.xlabel('Eastings [m]')\n", - "plt.ylabel('Northings [m]')\n", - "plt.title('Shorelines')\n", - "for satname in out.keys():\n", - " if satname == 'meta':\n", - " continue\n", - " for i in range(len(out[satname]['shoreline'])):\n", - " sl = out[satname]['shoreline'][i]\n", - " date = out[satname]['timestamp'][i]\n", - " plt.plot(sl[:,0], sl[:,1], '-', label=date.strftime('%d-%m-%Y'))\n", - "plt.legend()" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.4" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/README.md b/README.md index c15b548..7939dbd 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ -# coastsat +# CoastSat -Python code to download publicly available satellite imagery with Google Earth Engine API and extract shorelines using a robust sub-pixel resolution shoreline detection algorithm described in *Vos K., Harley M.D., Splinter K.D., Simmons J.A., Turner I.L. (in review). Capturing intra-annual to multi-decadal shoreline variability from publicly available satellite imagery, Coastal Engineering*. +Python code to extract shorelines at sub-pixel resolution from publicly available satellite imagery. The shoreline detection algorithm is described in *Vos K., Harley M.D., Splinter K.D., Simmons J.A., Turner I.L. (in review). Capturing intra-annual to multi-decadal shoreline variability from publicly available satellite imagery, Coastal Engineering*. Google Earth Engine's Python API is used to access the archive of publicly available satellite imagery (Landsat series and Sentinel-2). Written by *Kilian Vos*. @@ -10,12 +10,38 @@ Satellite remote sensing can provide low-cost long-term shoreline data capable o *coastsat* is an open-source Python module that allows to extract shorelines from Landsat 5, Landsat 7, Landsat 8 and Sentinel-2 images. The shoreline detection algorithm proposed here combines a sub-pixel border segmentation and an image classification component, which refines the segmentation into four distinct categories such that the shoreline detection is specific to the sand/water interface. +## Requirements + +In this section instructions on how to install all the necessary Python packages using *Anaconda* are provided. +Best practice is to create a new environment that will contain all the packages. To do this open the *Anaconda prompt* and run the following command: +- *conda create -n coastsat python=3.6* (it will create a new Python 3.6 environment called *coastsat*) + +Then activate the new environment run: +- *conda activate coastsat* + +Now you need to install **Google Earth Engine's Python API** module. +Follow these steps to install the *earthengine-api* package: +- go to https://earthengine.google.com and go to signup +Go back to the *Anaconda prompt* where the *coastsat* environment is active and run the following commands: +- *conda install -c conda-forge earthengine-api* +- *earthengine authenticate* (this will open a web browser where you will have login with your Google Earth Engine credentials) + +Once you have installed the *earthengine-api*, you need to install the other Python packages that are used in this toolbox (*scikit-image*, *scikit-learn* etc...). + +If on *win-64*, use the *Anaconda prompt* to navigate to the directory where you downloaded the repository and run: +- *conda install --name coastsat --file environment.txt* (this will install all the necessary packages) + +Now you are ready to start using the toolbox! + +If on *linux* or *osx*, you can create the *coastsat* environment with the following command: +- *conda env create -f environment.yml* + +Then, follow the instructions above to install *earthengine-api* in your environment. + ## Use A demonstration of the use of *coastsat* is provided in the Jupyter Notebook *shoreline_extraction.ipynb*. The code can also be run in Spyder with *main_spyder.py*. -The Python packages required to run this notebook can be installed by running the following anaconda command: *conda env create -f environment.yml*. This will create a new enviroment with all the relevant packages installed. You will also need to sign up for Google Earth Engine (https://earthengine.google.com and go to signup) and authenticate on the computer so that python can access via your login. - The first step is to retrieve the satellite images of the region of interest from Google Earth Engine servers by calling *SDS_download.get_images(sitename, polygon, dates, sat_list)*: - *sitename* is a string which will define the name of the folder where the files will be stored - *polygon* contains the coordinates of the region of interest (longitude/latitude pairs) diff --git a/environment.txt b/environment.txt new file mode 100644 index 0000000..c3e9630 --- /dev/null +++ b/environment.txt @@ -0,0 +1,203 @@ +# This file may be used to create an environment using: +# $ conda create --name --file +# platform: win-64 +@EXPLICIT +https://conda.anaconda.org/anaconda/win-64/ca-certificates-2018.03.07-0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/icc_rt-2017.0.4-h97af966_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/intel-openmp-2018.0.0-hd92c6cd_8.tar.bz2 +https://repo.anaconda.com/pkgs/free/win-64/libgdal-1.11.2-1.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/pandoc-1.19.2.1-hb2460c7_1.tar.bz2 +https://conda.anaconda.org/anaconda/win-64/vs2015_runtime-15.5.2-3.tar.bz2 +https://conda.anaconda.org/anaconda/win-64/winpty-0.4.3-4.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/mkl-2018.0.1-h2108138_4.tar.bz2 +https://conda.anaconda.org/anaconda/win-64/vc-14.1-h21ff451_3.tar.bz2 +https://repo.anaconda.com/pkgs/main/win-64/bzip2-1.0.6-hfa6e2cd_5.tar.bz2 +https://conda.anaconda.org/anaconda/win-64/expat-2.2.5-he025d50_0.tar.bz2 +https://conda.anaconda.org/anaconda/win-64/geos-3.6.2-h9ef7328_2.tar.bz2 +https://conda.anaconda.org/anaconda/win-64/icu-58.2-ha66f8fd_1.tar.bz2 +https://conda.anaconda.org/anaconda/win-64/jpeg-9b-hb83a4c4_2.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/libiconv-1.15-h1df5818_7.tar.bz2 +https://conda.anaconda.org/anaconda/win-64/libwebp-1.0.0-hfa6e2cd_1.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/nodejs-8.9.3-hd6b2f15_0.tar.bz2 +https://conda.anaconda.org/anaconda/win-64/openssl-1.0.2p-hfa6e2cd_0.tar.bz2 +https://conda.anaconda.org/anaconda/win-64/proj4-4.9.3-hcf24537_7.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/python-3.6.4-h6538335_1.tar.bz2 +https://repo.anaconda.com/pkgs/main/win-64/sqlite-3.24.0-h7602738_0.tar.bz2 +https://conda.anaconda.org/anaconda/win-64/tk-8.6.8-hfa6e2cd_0.tar.bz2 +https://conda.anaconda.org/anaconda/win-64/xerces-c-3.2.1-h27bfe9a_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/xz-5.2.3-h7c615d8_2.tar.bz2 +https://conda.anaconda.org/anaconda/win-64/yaml-0.1.7-hc54c509_2.tar.bz2 +https://conda.anaconda.org/anaconda/win-64/zlib-1.2.11-h8395fce_2.tar.bz2 +https://repo.anaconda.com/pkgs/main/win-64/affine-2.2.0-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/alabaster-0.7.10-py36hcd07829_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/asn1crypto-0.24.0-py36_0.tar.bz2 +https://repo.anaconda.com/pkgs/main/win-64/attrs-17.4.0-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/backports-1.0-py36h81696a8_1.tar.bz2 +https://conda.anaconda.org/anaconda/win-64/certifi-2018.8.24-py36_1.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/chardet-3.0.4-py36h420ce6e_1.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/click-6.7-py36hec8c647_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/cloudpickle-0.5.2-py36_1.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/colorama-0.3.9-py36h029ae33_0.tar.bz2 +https://repo.anaconda.com/pkgs/main/win-64/cssselect-1.0.3-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/dask-core-0.17.0-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/decorator-4.2.1-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/docutils-0.14-py36h6012d8f_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/entrypoints-0.2.3-py36hfd66bb0_2.tar.bz2 +https://repo.anaconda.com/pkgs/main/win-64/freexl-1.0.5-hfa6e2cd_0.tar.bz2 +https://conda.anaconda.org/anaconda/win-64/hdf4-4.2.13-h712560f_2.tar.bz2 +https://repo.anaconda.com/pkgs/main/win-64/hdf5-1.10.2-hac2f561_1.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/heapdict-1.0.0-py36_2.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/idna-2.6-py36h148d497_1.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/imagesize-0.7.1-py36he29f638_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/ipython_genutils-0.2.0-py36h3c5d0ee_0.tar.bz2 +https://repo.anaconda.com/pkgs/main/win-64/jmespath-0.9.3-py36h0745840_0.tar.bz2 +https://repo.anaconda.com/pkgs/main/win-64/kiwisolver-1.0.1-py36h12c3424_0.tar.bz2 +https://conda.anaconda.org/anaconda/win-64/krb5-1.16.1-h038dc86_6.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/lazy-object-proxy-1.3.1-py36hd1c21d2_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/libboost-1.65.1-he51fdeb_4.tar.bz2 +https://conda.anaconda.org/anaconda/win-64/libpng-1.6.34-h79bbb47_0.tar.bz2 +https://conda.anaconda.org/anaconda/win-64/libprotobuf-3.6.0-h1a1b453_0.tar.bz2 +https://conda.anaconda.org/anaconda/win-64/libssh2-1.8.0-hd619d38_4.tar.bz2 +https://conda.anaconda.org/anaconda/win-64/libtiff-4.0.9-h36446d0_2.tar.bz2 +https://conda.anaconda.org/anaconda/win-64/libxml2-2.9.8-hadb2253_1.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/locket-0.2.0-py36hfed976d_1.tar.bz2 +https://repo.continuum.io/pkgs/free/win-64/markdown-2.6.9-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/markupsafe-1.0-py36h0e26971_1.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/mccabe-0.6.1-py36hb41005a_1.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/mistune-0.8.3-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/msgpack-python-0.5.1-py36he980bc4_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/numpy-1.14.1-py36hb69e940_2.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/olefile-0.45.1-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/pandocfilters-1.4.2-py36h3ef6317_1.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/parso-0.1.1-py36hae3edee_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/pickleshare-0.7.4-py36h9de030f_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/psutil-5.4.3-py36hfa6e2cd_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/pycodestyle-2.3.1-py36h7cc55cd_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/pycparser-2.18-py36hd053e01_1.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/pyparsing-2.2.0-py36h785a196_1.tar.bz2 +https://repo.anaconda.com/pkgs/main/win-64/pyshp-1.2.12-py36h9b5cf0b_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/pytz-2018.3-py36_0.tar.bz2 +https://conda.anaconda.org/anaconda/win-64/pywin32-223-py36hfa6e2cd_1.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/pywinpty-0.5-py36h6538335_1.tar.bz2 +https://conda.anaconda.org/conda-forge/win-64/pyyaml-3.12-py36_1.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/pyzmq-16.0.3-py36he714bf5_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/qtpy-1.3.1-py36hb8717c5_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/rope-0.10.7-py36had63a69_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/send2trash-1.4.2-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/simplegeneric-0.8.1-py36_2.tar.bz2 +https://repo.anaconda.com/pkgs/main/win-64/sip-4.19.8-py36h6538335_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/six-1.11.0-py36h4db2310_1.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/snowballstemmer-1.2.1-py36h763602f_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/sortedcontainers-1.5.9-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/sphinxcontrib-1.0-py36hbbac3d2_1.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/tblib-1.3.2-py36h30f5020_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/testpath-0.3.1-py36h2698cfe_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/toolz-0.9.0-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/tornado-4.5.3-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/typing-3.6.2-py36hb035bda_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/wcwidth-0.1.7-py36h3d5aa90_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/webencodings-0.5.1-py36h67c50ae_1.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/werkzeug-0.14.1-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/win_inet_pton-1.0.1-py36he67d7fd_1.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/wincertstore-0.2-py36h7fe50ca_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/wrapt-1.10.11-py36he5f5981_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/babel-2.5.3-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/free/win-64/backports.weakref-1.0rc1-py36_0.tar.bz2 +https://conda.anaconda.org/anaconda/win-64/boost-cpp-1.65.1-hfa6e2cd_4.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/cffi-1.11.4-py36hfa6e2cd_0.tar.bz2 +https://repo.anaconda.com/pkgs/main/win-64/cftime-1.0.0b1-py36h452e1ab_0.tar.bz2 +https://repo.anaconda.com/pkgs/free/win-64/click-plugins-1.0.3-py36_0.tar.bz2 +https://repo.anaconda.com/pkgs/free/win-64/cligj-0.4.0-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/cycler-0.10.0-py36h009560c_0.tar.bz2 +https://conda.anaconda.org/anaconda/win-64/freetype-2.8-h51f8f2c_1.tar.bz2 +https://conda.anaconda.org/anaconda/win-64/geotiff-1.4.2-hd5bfa41_0.tar.bz2 +https://repo.continuum.io/pkgs/free/win-64/html5lib-0.9999999-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/jedi-0.11.1-py36_0.tar.bz2 +https://repo.anaconda.com/pkgs/main/win-64/kealib-1.4.7-hf7dd379_6.tar.bz2 +https://conda.anaconda.org/anaconda/win-64/keyring-13.2.1-py36_0.tar.bz2 +https://repo.anaconda.com/pkgs/main/win-64/libcurl-7.60.0-hc4dcbb0_0.tar.bz2 +https://conda.anaconda.org/anaconda/win-64/libpq-10.5-h5fe2233_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/libspatialite-4.3.0a-h383548d_18.tar.bz2 +https://conda.anaconda.org/anaconda/win-64/libxslt-1.1.32-hf6f1972_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/networkx-2.1-py36_0.tar.bz2 +https://conda.anaconda.org/anaconda/win-64/openjpeg-2.3.0-h5ec785f_1.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/packaging-16.8-py36ha0986f6_1.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/partd-0.3.8-py36hc8e763b_0.tar.bz2 +https://conda.anaconda.org/anaconda/win-64/protobuf-3.6.0-py36he025d50_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/pysocks-1.6.7-py36h698d350_1.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/python-dateutil-2.6.1-py36h509ddcb_1.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/pywavelets-0.5.2-py36hc649158_0.tar.bz2 +https://repo.anaconda.com/pkgs/main/win-64/qt-5.9.6-vc14h62aca36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/qtawesome-0.4.4-py36h5aa48f6_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/scipy-1.0.0-py36h1260518_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/setuptools-38.4.0-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/shapely-1.6.4-py36h2a969d5_0.tar.bz2 +https://repo.anaconda.com/pkgs/main/win-64/snuggs-1.4.1-py36hd271b8d_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/sphinxcontrib-websupport-1.0.1-py36hb5e5916_1.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/terminado-0.8.1-py36_1.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/traitlets-4.3.2-py36h096827d_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/zict-0.1.3-py36h2d8e73e_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/astroid-1.6.1-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/free/win-64/bleach-1.5.0-py36_0.tar.bz2 +https://conda.anaconda.org/conda-forge/win-64/boost-1.66.0-py36_vc14_1.tar.bz2 +https://repo.anaconda.com/pkgs/main/win-64/botocore-1.10.4-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/cryptography-2.1.4-py36he1d7878_0.tar.bz2 +https://conda.anaconda.org/anaconda/win-64/curl-7.60.0-h7602738_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/distributed-1.21.0-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/isort-4.2.15-py36h6198cc5_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/jinja2-2.10-py36h292fed1_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/jsonschema-2.6.0-py36h7636477_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/jupyter_core-4.4.0-py36h56e9d50_0.tar.bz2 +https://conda.anaconda.org/conda-forge/win-64/lxml-4.1.1-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/pandas-0.22.0-py36h6538335_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/patsy-0.5.0-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/pillow-5.0.0-py36h0738816_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/pyflakes-1.6.0-py36h0b975d6_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/pygments-2.2.0-py36hb010967_0.tar.bz2 +https://repo.anaconda.com/pkgs/free/win-64/pyproj-1.9.5.1-py36_0.tar.bz2 +https://repo.anaconda.com/pkgs/main/win-64/pyqt-5.9.2-py36h1aa27d4_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/scikit-learn-0.19.1-py36h53aea1b_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/wheel-0.30.0-py36h6c3ec14_1.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/bokeh-0.12.14-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/imageio-2.3.0-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/jupyter_client-5.2.2-py36_0.tar.bz2 +https://conda.anaconda.org/conda-forge/win-64/libkml-1.3.0-vc14_6.tar.bz2 +https://repo.anaconda.com/pkgs/main/win-64/libnetcdf-4.6.1-h62daf8c_0.tar.bz2 +https://repo.anaconda.com/pkgs/main/win-64/matplotlib-2.2.2-py36h153e9ff_1.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/nbformat-4.4.0-py36h3a5bc1b_0.tar.bz2 +https://repo.anaconda.com/pkgs/main/win-64/pip-9.0.3-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/prompt_toolkit-1.0.15-py36h60b8f86_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/pylint-1.8.2-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/pyopenssl-17.5.0-py36h5b7d817_0.tar.bz2 +https://repo.anaconda.com/pkgs/main/win-64/s3transfer-0.1.13-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/statsmodels-0.8.0-py36h6189b4c_0.tar.bz2 +https://repo.continuum.io/pkgs/free/win-64/tensorflow-1.2.1-py36_0.tar.bz2 +https://repo.anaconda.com/pkgs/main/win-64/boto3-1.7.4-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/dask-0.17.0-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/ipython-6.2.1-py36h9cf0123_1.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/nbconvert-5.3.1-py36h8dc0fde_0.tar.bz2 +https://repo.anaconda.com/pkgs/main/win-64/netcdf4-1.4.0-py36hbfe741f_1.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/urllib3-1.22-py36h276f60a_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/ipykernel-4.8.0-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/requests-2.18.4-py36h4371aae_1.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/scikit-image-0.13.1-py36hfa6e2cd_1.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/jupyter_console-5.2.0-py36h6d89b47_1.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/notebook-5.4.0-py36_0.tar.bz2 +https://repo.anaconda.com/pkgs/main/win-64/owslib-0.16.0-py36_0.tar.bz2 +https://repo.anaconda.com/pkgs/main/win-64/pyepsg-0.3.2-py36h6c744c8_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/qtconsole-4.3.1-py36h99a29a9_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/sphinx-1.6.6-py36_0.tar.bz2 +https://conda.anaconda.org/anaconda/win-64/spyder-kernels-0.2.4-py36_0.tar.bz2 +https://repo.anaconda.com/pkgs/main/win-64/cartopy-0.16.0-py36hbd42bde_0.tar.bz2 +https://conda.anaconda.org/conda-forge/win-64/jupyter_contrib_core-0.3.3-py36_1.tar.bz2 +https://conda.anaconda.org/conda-forge/win-64/jupyterlab_launcher-0.10.3-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/numpydoc-0.7.0-py36ha25429e_0.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/widgetsnbextension-3.1.0-py36_0.tar.bz2 +https://conda.anaconda.org/conda-forge/win-64/ipywidgets-7.1.1-py36_0.tar.bz2 +https://conda.anaconda.org/conda-forge/win-64/jupyter_highlight_selected_word-0.1.0-py36_0.tar.bz2 +https://conda.anaconda.org/conda-forge/win-64/jupyter_latex_envs-1.3.8.2-py36_1.tar.bz2 +https://conda.anaconda.org/conda-forge/win-64/jupyter_nbextensions_configurator-0.4.0-py36_0.tar.bz2 +https://conda.anaconda.org/conda-forge/win-64/jupyterlab-0.31.5-py36_1.tar.bz2 +https://conda.anaconda.org/anaconda/win-64/spyder-3.3.1-py36_1.tar.bz2 +https://repo.continuum.io/pkgs/main/win-64/jupyter-1.0.0-py36_4.tar.bz2 +https://conda.anaconda.org/conda-forge/win-64/jupyter_contrib_nbextensions-0.4.0-py36_0.tar.bz2 diff --git a/environment.yml b/environment.yml index 4f45511..38e8680 100644 --- a/environment.yml +++ b/environment.yml @@ -1,109 +1,136 @@ -name: env_py3 +name: coastsat channels: + - conda-forge - anaconda - defaults dependencies: + - boost-cpp=1.65.1=hfa6e2cd_4 + - ca-certificates=2018.03.07=0 + - certifi=2018.8.24=py36_1 + - curl=7.60.0=h7602738_0 + - expat=2.2.5=he025d50_0 + - freetype=2.8=h51f8f2c_1 + - geos=3.6.2=h9ef7328_2 + - geotiff=1.4.2=hd5bfa41_0 + - hdf4=4.2.13=h712560f_2 + - icu=58.2=ha66f8fd_1 + - jpeg=9b=hb83a4c4_2 - keyring=13.2.1=py36_0 - - netcdf4=1.3.1=py36h8bd0532_2 + - krb5=1.16.1=h038dc86_6 + - libpng=1.6.34=h79bbb47_0 + - libpq=10.5=h5fe2233_0 + - libprotobuf=3.6.0=h1a1b453_0 + - libssh2=1.8.0=hd619d38_4 + - libtiff=4.0.9=h36446d0_2 + - libwebp=1.0.0=hfa6e2cd_1 + - libxml2=2.9.8=hadb2253_1 + - libxslt=1.1.32=hf6f1972_0 + - openjpeg=2.3.0=h5ec785f_1 + - openssl=1.0.2p=hfa6e2cd_0 + - proj4=4.9.3=hcf24537_7 + - protobuf=3.6.0=py36he025d50_0 - pywin32=223=py36hfa6e2cd_1 - spyder=3.3.1=py36_1 - - spyder-kernels=0.2.6=py36_0 - - vc=14.1=h0510ff6_3 + - spyder-kernels=0.2.4=py36_0 + - tk=8.6.8=hfa6e2cd_0 + - vc=14.1=h21ff451_3 - vs2015_runtime=15.5.2=3 + - winpty=0.4.3=4 + - xerces-c=3.2.1=h27bfe9a_0 + - yaml=0.1.7=hc54c509_2 + - zlib=1.2.11=h8395fce_2 + - boost=1.66.0=py36_vc14_1 + - ipywidgets=7.1.1=py36_0 + - jupyter_contrib_core=0.3.3=py36_1 + - jupyter_contrib_nbextensions=0.4.0=py36_0 + - jupyter_highlight_selected_word=0.1.0=py36_0 + - jupyter_latex_envs=1.3.8.2=py36_1 + - jupyter_nbextensions_configurator=0.4.0=py36_0 + - jupyterlab=0.31.5=py36_1 + - jupyterlab_launcher=0.10.3=py36_0 + - libkml=1.3.0=vc14_6 + - lxml=4.1.1=py36_0 + - pyyaml=3.12=py36_1 + - affine=2.2.0=py36_0 - alabaster=0.7.10=py36hcd07829_0 - asn1crypto=0.24.0=py36_0 - - astroid=1.6.2=py36_0 + - astroid=1.6.1=py36_0 + - attrs=17.4.0=py36_0 - babel=2.5.3=py36_0 - - bleach=2.1.3=py36_0 + - backports=1.0=py36h81696a8_1 + - backports.weakref=1.0rc1=py36_0 + - bleach=1.5.0=py36_0 - bokeh=0.12.14=py36_0 - - ca-certificates=2018.03.07=0 + - boto3=1.7.4=py36_0 + - botocore=1.10.4=py36_0 + - bzip2=1.0.6=hfa6e2cd_5 - cartopy=0.16.0=py36hbd42bde_0 - - certifi=2018.8.24=py36_1 - - cffi=1.11.5=py36h945400d_0 + - cffi=1.11.4=py36hfa6e2cd_0 + - cftime=1.0.0b1=py36h452e1ab_0 - chardet=3.0.4=py36h420ce6e_1 - click=6.7=py36hec8c647_0 + - click-plugins=1.0.3=py36_0 + - cligj=0.4.0=py36_0 - cloudpickle=0.5.2=py36_1 - colorama=0.3.9=py36h029ae33_0 - - cryptography=2.2.1=py36hfa6e2cd_0 - - curl=7.58.0=h7602738_0 + - cryptography=2.1.4=py36he1d7878_0 + - cssselect=1.0.3=py36_0 - cycler=0.10.0=py36h009560c_0 - - cytoolz=0.9.0.1=py36hfa6e2cd_0 - - dask=0.17.2=py36_0 - - dask-core=0.17.2=py36_0 + - dask=0.17.0=py36_0 + - dask-core=0.17.0=py36_0 - decorator=4.2.1=py36_0 - - distributed=1.21.4=py36_0 + - distributed=1.21.0=py36_0 - docutils=0.14=py36h6012d8f_0 - entrypoints=0.2.3=py36hfd66bb0_2 - - expat=2.2.5=hcc4222d_0 - - freetype=2.8=h51f8f2c_1 - freexl=1.0.5=hfa6e2cd_0 - - gdal=2.2.2=py36hcebd033_1 - - geos=3.6.2=h9ef7328_2 - - hdf4=4.2.13=h712560f_2 - - hdf5=1.10.1=h98b8871_1 + - hdf5=1.10.2=hac2f561_1 - heapdict=1.0.0=py36_2 - - html5lib=1.0.1=py36h047fa9f_0 + - html5lib=0.9999999=py36_0 - icc_rt=2017.0.4=h97af966_0 - - icu=58.2=ha66f8fd_1 - idna=2.6=py36h148d497_1 - imageio=2.3.0=py36_0 - - imagesize=1.0.0=py36_0 - - intel-openmp=2018.0.0=8 - - ipykernel=4.8.2=py36_0 + - imagesize=0.7.1=py36he29f638_0 + - intel-openmp=2018.0.0=hd92c6cd_8 + - ipykernel=4.8.0=py36_0 - ipython=6.2.1=py36h9cf0123_1 - ipython_genutils=0.2.0=py36h3c5d0ee_0 - - ipywidgets=7.1.2=py36_0 - - isort=4.3.4=py36_0 - - jedi=0.11.1=py36_1 + - isort=4.2.15=py36h6198cc5_0 + - jedi=0.11.1=py36_0 - jinja2=2.10=py36h292fed1_0 - - jpeg=9b=hb83a4c4_2 + - jmespath=0.9.3=py36h0745840_0 - jsonschema=2.6.0=py36h7636477_0 - jupyter=1.0.0=py36_4 - - jupyter_client=5.2.3=py36_0 + - jupyter_client=5.2.2=py36_0 - jupyter_console=5.2.0=py36h6d89b47_1 - jupyter_core=4.4.0=py36h56e9d50_0 - - kealib=1.4.7=ha5b336b_5 + - kealib=1.4.7=hf7dd379_6 - kiwisolver=1.0.1=py36h12c3424_0 - - krb5=1.14.2=h63dfc2a_6 - lazy-object-proxy=1.3.1=py36hd1c21d2_0 - libboost=1.65.1=he51fdeb_4 - - libcurl=7.58.0=h7602738_0 - - libgdal=2.2.2=h2727f2b_1 + - libcurl=7.60.0=hc4dcbb0_0 + - libgdal=1.11.2=1 - libiconv=1.15=h1df5818_7 - - libkml=1.3.0=hc65d273_3 - - libnetcdf=4.4.1.1=h825a56a_8 - - libpng=1.6.34=h79bbb47_0 - - libpq=9.6.6=hfe3f2bf_0 + - libnetcdf=4.6.1=h62daf8c_0 - libspatialite=4.3.0a=h383548d_18 - - libssh2=1.8.0=hd619d38_4 - - libtiff=4.0.9=h0f13578_0 - - libxml2=2.9.7=h79bbb47_0 - - libxslt=1.1.32=hf6f1972_0 - locket=0.2.0=py36hfed976d_1 - - lxml=4.2.1=py36heafd4d3_0 - - m2w64-gcc-libgfortran=5.3.0=6 - - m2w64-gcc-libs=5.3.0=7 - - m2w64-gcc-libs-core=5.3.0=7 - - m2w64-gmp=6.1.0=2 - - m2w64-libwinpthread-git=5.0.0.4634.697f757=2 + - markdown=2.6.9=py36_0 - markupsafe=1.0=py36h0e26971_1 - - matplotlib=2.2.2=py36h153e9ff_0 + - matplotlib=2.2.2=py36h153e9ff_1 - mccabe=0.6.1=py36hb41005a_1 - mistune=0.8.3=py36_0 - - mkl=2018.0.2=1 - - msgpack-python=0.5.5=py36he980bc4_0 - - msys2-conda-epoch=20160418=1 + - mkl=2018.0.1=h2108138_4 + - msgpack-python=0.5.1=py36he980bc4_0 - nbconvert=5.3.1=py36h8dc0fde_0 - nbformat=4.4.0=py36h3a5bc1b_0 + - netcdf4=1.4.0=py36hbfe741f_1 - networkx=2.1=py36_0 - - notebook=5.4.1=py36_0 - - numpy=1.14.2=py36h5c71026_0 + - nodejs=8.9.3=hd6b2f15_0 + - notebook=5.4.0=py36_0 + - numpy=1.14.1=py36hb69e940_2 - numpydoc=0.7.0=py36ha25429e_0 - olefile=0.45.1=py36_0 - - openjpeg=2.2.0=h29c51c3_2 - - openssl=1.0.2p=hfa6e2cd_0 - owslib=0.16.0=py36_0 - - packaging=17.1=py36_0 + - packaging=16.8=py36ha0986f6_1 - pandas=0.22.0=py36h6538335_0 - pandoc=1.19.2.1=hb2460c7_1 - pandocfilters=1.4.2=py36h3ef6317_1 @@ -112,8 +139,7 @@ dependencies: - patsy=0.5.0=py36_0 - pickleshare=0.7.4=py36h9de030f_0 - pillow=5.0.0=py36h0738816_0 - - pip=9.0.1=py36_5 - - proj4=4.9.3=hcf24537_7 + - pip=9.0.3=py36_0 - prompt_toolkit=1.0.15=py36h60b8f86_0 - psutil=5.4.3=py36hfa6e2cd_0 - pycodestyle=2.3.1=py36h7cc55cd_0 @@ -121,63 +147,61 @@ dependencies: - pyepsg=0.3.2=py36h6c744c8_0 - pyflakes=1.6.0=py36h0b975d6_0 - pygments=2.2.0=py36hb010967_0 - - pylint=1.8.3=py36_0 + - pylint=1.8.2=py36_0 - pyopenssl=17.5.0=py36h5b7d817_0 - pyparsing=2.2.0=py36h785a196_1 - pyproj=1.9.5.1=py36_0 - - pyqt=5.6.0=py36hb5ed885_5 + - pyqt=5.9.2=py36h1aa27d4_0 - pyshp=1.2.12=py36h9b5cf0b_0 - - pysocks=1.6.8=py36_0 - - python=3.6.4=h0c2934d_3 - - python-dateutil=2.7.0=py36_0 + - pysocks=1.6.7=py36h698d350_1 + - python=3.6.4=h6538335_1 + - python-dateutil=2.6.1=py36h509ddcb_1 - pytz=2018.3=py36_0 - pywavelets=0.5.2=py36hc649158_0 - - pywinpty=0.5.1=py36_0 - - pyyaml=3.12=py36h1d1928f_1 - - pyzmq=17.0.0=py36hfa6e2cd_0 - - qt=5.6.2=vc14h6f8c307_12 + - pywinpty=0.5=py36h6538335_1 + - pyzmq=16.0.3=py36he714bf5_0 + - qt=5.9.6=vc14h62aca36_0 - qtawesome=0.4.4=py36h5aa48f6_0 - qtconsole=4.3.1=py36h99a29a9_0 - - qtpy=1.4.0=py36_0 + - qtpy=1.3.1=py36hb8717c5_0 - requests=2.18.4=py36h4371aae_1 - rope=0.10.7=py36had63a69_0 + - s3transfer=0.1.13=py36_0 - scikit-image=0.13.1=py36hfa6e2cd_1 - scikit-learn=0.19.1=py36h53aea1b_0 - scipy=1.0.0=py36h1260518_0 - - send2trash=1.5.0=py36_0 - - setuptools=38.5.1=py36_0 + - send2trash=1.4.2=py36_0 + - setuptools=38.4.0=py36_0 - shapely=1.6.4=py36h2a969d5_0 - simplegeneric=0.8.1=py36_2 - - sip=4.18.1=py36h9c25514_2 + - sip=4.19.8=py36h6538335_0 - six=1.11.0=py36h4db2310_1 - snowballstemmer=1.2.1=py36h763602f_0 + - snuggs=1.4.1=py36hd271b8d_0 - sortedcontainers=1.5.9=py36_0 - - sphinx=1.7.1=py36_0 + - sphinx=1.6.6=py36_0 - sphinxcontrib=1.0=py36hbbac3d2_1 - sphinxcontrib-websupport=1.0.1=py36hb5e5916_1 - - sqlite=3.22.0=h9d3ae62_0 + - sqlite=3.24.0=h7602738_0 - statsmodels=0.8.0=py36h6189b4c_0 - tblib=1.3.2=py36h30f5020_0 + - tensorflow=1.2.1=py36_0 - terminado=0.8.1=py36_1 - testpath=0.3.1=py36h2698cfe_0 - - tk=8.6.7=hcb92d03_3 - toolz=0.9.0=py36_0 - - tornado=5.0=py36_0 + - tornado=4.5.3=py36_0 - traitlets=4.3.2=py36h096827d_0 - - typing=3.6.4=py36_0 + - typing=3.6.2=py36hb035bda_0 - urllib3=1.22=py36h276f60a_0 - wcwidth=0.1.7=py36h3d5aa90_0 - webencodings=0.5.1=py36h67c50ae_1 + - werkzeug=0.14.1=py36_0 - wheel=0.30.0=py36h6c3ec14_1 - - widgetsnbextension=3.1.4=py36_0 + - widgetsnbextension=3.1.0=py36_0 - win_inet_pton=1.0.1=py36he67d7fd_1 - wincertstore=0.2=py36h7fe50ca_0 - - winpty=0.4.3=4 - wrapt=1.10.11=py36he5f5981_0 - - xerces-c=3.2.1=h27bfe9a_0 - xz=5.2.3=h7c615d8_2 - - yaml=0.1.7=hc54c509_2 - zict=0.1.3=py36h2d8e73e_0 - - zlib=1.2.11=h8395fce_2 -prefix: C:\Anaconda\envs\env_py3 +prefix: C:Anaconda\envs\coastsat