diff --git a/environment.yml b/environment.yml
new file mode 100644
index 0000000000000000000000000000000000000000..4e6c95f078ec4e4d5e9391f7fbb04997a69795c3
--- /dev/null
+++ b/environment.yml
@@ -0,0 +1,385 @@
+name: iamap
+channels:
+  - conda-forge
+dependencies:
+  - _libgcc_mutex=0.1=conda_forge
+  - _openmp_mutex=4.5=2_kmp_llvm
+  - affine=2.4.0=pyhd8ed1ab_0
+  - alsa-lib=1.2.12=h4ab18f5_0
+  - attr=2.5.1=h166bdaf_1
+  - attrs=24.2.0=pyh71513ae_0
+  - aws-c-auth=0.7.31=h57bd9a3_0
+  - aws-c-cal=0.7.4=hfd43aa1_1
+  - aws-c-common=0.9.28=hb9d3cd8_0
+  - aws-c-compression=0.2.19=h756ea98_1
+  - aws-c-event-stream=0.4.3=h29ce20c_2
+  - aws-c-http=0.8.10=h5e77a74_0
+  - aws-c-io=0.14.18=h4e6ae90_11
+  - aws-c-mqtt=0.10.7=h02abb05_0
+  - aws-c-s3=0.6.6=h834ce55_0
+  - aws-c-sdkutils=0.1.19=h756ea98_3
+  - aws-checksums=0.1.20=h756ea98_0
+  - aws-crt-cpp=0.28.3=h3e6eb3e_6
+  - aws-sdk-cpp=1.11.407=h9f1560d_0
+  - azure-core-cpp=1.13.0=h935415a_0
+  - azure-identity-cpp=1.8.0=hd126650_2
+  - azure-storage-blobs-cpp=12.12.0=hd2e3451_0
+  - azure-storage-common-cpp=12.7.0=h10ac4d7_1
+  - blosc=1.21.6=hef167b5_0
+  - branca=0.7.2=pyhd8ed1ab_0
+  - brotli=1.1.0=hb9d3cd8_2
+  - brotli-bin=1.1.0=hb9d3cd8_2
+  - brotli-python=1.1.0=py312h2ec8cdc_2
+  - bzip2=1.0.8=h4bc722e_7
+  - c-ares=1.33.1=heb4867d_0
+  - ca-certificates=2024.8.30=hbcca054_0
+  - cairo=1.18.0=hebfffa5_3
+  - ceres-solver=2.2.0=h30ec75d_2
+  - certifi=2024.8.30=pyhd8ed1ab_0
+  - cffi=1.17.1=py312h06ac9bb_0
+  - cfitsio=4.4.1=hf8ad068_0
+  - charset-normalizer=3.3.2=pyhd8ed1ab_0
+  - click=8.1.7=unix_pyh707e725_0
+  - click-plugins=1.1.1=py_0
+  - cligj=0.7.2=pyhd8ed1ab_1
+  - colorama=0.4.6=pyhd8ed1ab_0
+  - contourpy=1.3.0=py312h68727a3_2
+  - coverage=7.6.1=py312h66e93f0_1
+  - cpd=0.5.5=h434a139_2
+  - cuda-cudart=12.6.77=h5888daf_0
+  - cuda-cudart_linux-64=12.6.77=h3f2d84a_0
+  - cuda-nvrtc=12.6.77=hbd13f7d_0
+  - cuda-nvtx=12.6.77=hbd13f7d_0
+  - cuda-version=12.6=h7480c83_3
+  - cudnn=9.3.0.75=h93bb076_0
+  - cycler=0.12.1=pyhd8ed1ab_0
+  - dataclasses=0.8=pyhc8e2a94_3
+  - dbus=1.13.6=h5008d03_3
+  - draco=1.5.7=h00ab1b0_0
+  - eigen=3.4.0=h00ab1b0_0
+  - einops=0.8.0=pyhd8ed1ab_0
+  - exiv2=0.28.3=h4dc94ea_0
+  - expat=2.6.3=h5888daf_0
+  - fgt=0.4.11=hee0ac4a_0
+  - filelock=3.16.1=pyhd8ed1ab_0
+  - fiona=1.10.1=py312h5aa26c2_1
+  - fmt=11.0.2=h434a139_0
+  - folium=0.17.0=pyhd8ed1ab_0
+  - font-ttf-dejavu-sans-mono=2.37=hab24e00_0
+  - font-ttf-inconsolata=3.000=h77eed37_0
+  - font-ttf-source-code-pro=2.038=h77eed37_0
+  - font-ttf-ubuntu=0.83=h77eed37_3
+  - fontconfig=2.14.2=h14ed4e7_0
+  - fonts-conda-ecosystem=1=0
+  - fonts-conda-forge=1=0
+  - fonttools=4.54.1=py312h66e93f0_0
+  - freetype=2.12.1=h267a509_2
+  - freexl=2.0.0=h743c826_0
+  - fsspec=2024.9.0=pyhff2d567_0
+  - future=1.0.0=pyhd8ed1ab_0
+  - gdal=3.9.2=py312h1299960_7
+  - geopandas=1.0.1=pyhd8ed1ab_1
+  - geopandas-base=1.0.1=pyha770c72_1
+  - geos=3.13.0=h5888daf_0
+  - geotiff=1.7.3=h77b800c_3
+  - gettext=0.22.5=he02047a_3
+  - gettext-tools=0.22.5=he02047a_3
+  - gflags=2.2.2=h5888daf_1005
+  - giflib=5.2.2=hd590300_0
+  - glib=2.82.1=h2ff4ddf_0
+  - glib-tools=2.82.1=h4833e2c_0
+  - glog=0.7.1=hbabe93e_0
+  - gmp=6.3.0=hac33072_2
+  - gmpy2=2.1.5=py312h7201bc8_2
+  - graphite2=1.3.13=h59595ed_1003
+  - gsl=2.7=he838d99_0
+  - gst-plugins-base=1.24.7=h0a52356_0
+  - gstreamer=1.24.7=hf3bb09a_0
+  - h2=4.1.0=pyhd8ed1ab_0
+  - harfbuzz=9.0.0=hda332d3_1
+  - hdf4=4.2.15=h2a13503_7
+  - hdf5=1.14.3=nompi_hdf9ad27_105
+  - hpack=4.0.0=pyh9f0ad1d_0
+  - httplib2=0.22.0=pyhd8ed1ab_0
+  - huggingface_hub=0.25.1=pyhd8ed1ab_0
+  - hyperframe=6.0.1=pyhd8ed1ab_0
+  - icu=75.1=he02047a_0
+  - idna=3.10=pyhd8ed1ab_0
+  - jinja2=3.1.4=pyhd8ed1ab_0
+  - joblib=1.4.2=pyhd8ed1ab_0
+  - json-c=0.18=h6688a6e_0
+  - kealib=1.5.3=hf8d3e68_2
+  - keyutils=1.6.1=h166bdaf_0
+  - kiwisolver=1.4.7=py312h68727a3_0
+  - kornia=0.7.3=pyhd8ed1ab_0
+  - kornia-rs=0.1.5=py312h9a6ef7b_0
+  - krb5=1.21.3=h659f571_0
+  - lame=3.100=h166bdaf_1003
+  - laz-perf=3.4.0=h00ab1b0_0
+  - lcms2=2.16=hb7c19ff_0
+  - ld_impl_linux-64=2.43=h712a8e2_1
+  - lerc=4.0.0=h27087fc_0
+  - libabseil=20240116.2=cxx17_he02047a_1
+  - libaec=1.1.3=h59595ed_0
+  - libarchive=3.7.4=hfca40fe_0
+  - libarrow=15.0.2=head2ede_33_cpu
+  - libarrow-acero=15.0.2=h5d0bfc1_33_cpu
+  - libarrow-dataset=15.0.2=h5d0bfc1_33_cpu
+  - libasprintf=0.22.5=he8f35ee_3
+  - libasprintf-devel=0.22.5=he8f35ee_3
+  - libblas=3.9.0=24_linux64_openblas
+  - libbrotlicommon=1.1.0=hb9d3cd8_2
+  - libbrotlidec=1.1.0=hb9d3cd8_2
+  - libbrotlienc=1.1.0=hb9d3cd8_2
+  - libcap=2.69=h0f662aa_0
+  - libcblas=3.9.0=24_linux64_openblas
+  - libclang-cpp15=15.0.7=default_h127d8a8_5
+  - libclang13=19.1.0=default_h9c6a7e4_0
+  - libcrc32c=1.1.2=h9c3ff4c_0
+  - libcublas=12.6.3.3=hbd13f7d_0
+  - libcufft=11.3.0.4=hbd13f7d_0
+  - libcups=2.3.3=h4637d8d_4
+  - libcurand=10.3.7.77=hbd13f7d_0
+  - libcurl=8.10.1=hbbe4b11_0
+  - libcusolver=11.7.1.2=hbd13f7d_0
+  - libcusparse=12.5.4.2=hbd13f7d_0
+  - libdeflate=1.22=hb9d3cd8_0
+  - libdrm=2.4.123=hb9d3cd8_0
+  - libedit=3.1.20191231=he28a2e2_2
+  - libegl=1.7.0=ha4b6fd6_1
+  - libev=4.33=hd590300_2
+  - libevent=2.1.12=hf998b51_1
+  - libexpat=2.6.3=h5888daf_0
+  - libffi=3.4.2=h7f98852_5
+  - libflac=1.4.3=h59595ed_0
+  - libgcc=14.1.0=h77fa898_1
+  - libgcc-ng=14.1.0=h69a702a_1
+  - libgcrypt=1.11.0=h4ab18f5_1
+  - libgdal=3.9.2=ha770c72_7
+  - libgdal-arrow-parquet=3.9.2=h3ff7ee4_7
+  - libgdal-core=3.9.2=hd5b9bfb_7
+  - libgdal-fits=3.9.2=h2db6552_7
+  - libgdal-grib=3.9.2=hc3b29a1_7
+  - libgdal-hdf4=3.9.2=hd5ecb85_7
+  - libgdal-hdf5=3.9.2=h6283f77_7
+  - libgdal-jp2openjpeg=3.9.2=h1b2c38e_7
+  - libgdal-kea=3.9.2=h1df15e4_7
+  - libgdal-netcdf=3.9.2=hf2d2f32_7
+  - libgdal-pdf=3.9.2=h600f43f_7
+  - libgdal-pg=3.9.2=h151b34b_5
+  - libgdal-postgisraster=3.9.2=h151b34b_5
+  - libgdal-tiledb=3.9.2=ha8d0372_1
+  - libgdal-xls=3.9.2=h03c987c_7
+  - libgettextpo=0.22.5=he02047a_3
+  - libgettextpo-devel=0.22.5=he02047a_3
+  - libgfortran=14.1.0=h69a702a_1
+  - libgfortran-ng=14.1.0=h69a702a_1
+  - libgfortran5=14.1.0=hc5f4f2c_1
+  - libgl=1.7.0=ha4b6fd6_1
+  - libglib=2.82.1=h2ff4ddf_0
+  - libglvnd=1.7.0=ha4b6fd6_1
+  - libglx=1.7.0=ha4b6fd6_1
+  - libgomp=14.1.0=h77fa898_1
+  - libgoogle-cloud=2.29.0=h435de7b_0
+  - libgoogle-cloud-storage=2.29.0=h0121fbd_0
+  - libgpg-error=1.50=h4f305b6_0
+  - libgrpc=1.62.2=h15f2491_0
+  - libhwloc=2.11.2=default_he43201b_1000
+  - libiconv=1.17=hd590300_2
+  - libjpeg-turbo=3.0.0=hd590300_1
+  - libkml=1.3.0=hf539b9f_1021
+  - liblapack=3.9.0=24_linux64_openblas
+  - libllvm15=15.0.7=hb3ce162_4
+  - libllvm19=19.1.1=ha7bfdaf_0
+  - libmagma=2.8.0=h0af6554_0
+  - libmagma_sparse=2.8.0=h0af6554_0
+  - libnetcdf=4.9.2=nompi_h135f659_114
+  - libnghttp2=1.58.0=h47da74e_1
+  - libnl=3.10.0=h4bc722e_0
+  - libnsl=2.0.1=hd590300_0
+  - libnvjitlink=12.6.77=hbd13f7d_1
+  - libnvjpeg=12.3.3.54=h5888daf_0
+  - libogg=1.3.5=h4ab18f5_0
+  - libopenblas=0.3.27=pthreads_hac2b453_1
+  - libopus=1.3.1=h7f98852_1
+  - libparquet=15.0.2=h4141fc9_33_cpu
+  - libpciaccess=0.18=hd590300_0
+  - libpdal=2.8.0=ha770c72_1
+  - libpdal-arrow=2.8.0=h8bbc2ab_1
+  - libpdal-core=2.8.0=h8f62525_1
+  - libpdal-cpd=2.8.0=h5888daf_1
+  - libpdal-draco=2.8.0=h5888daf_1
+  - libpdal-e57=2.8.0=h258f5e6_1
+  - libpdal-hdf=2.8.0=hf8d3e68_1
+  - libpdal-icebridge=2.8.0=hf8d3e68_1
+  - libpdal-nitf=2.8.0=h86beebd_1
+  - libpdal-pgpointcloud=2.8.0=hda54c46_1
+  - libpdal-tiledb=2.8.0=h72bbe06_1
+  - libpdal-trajectory=2.8.0=h8c7babf_1
+  - libpng=1.6.44=hadc24fc_0
+  - libpq=16.4=h2d7952a_2
+  - libprotobuf=4.25.3=hd5b35b9_1
+  - libre2-11=2023.09.01=h5a48ba9_2
+  - librttopo=1.1.0=h97f6797_17
+  - libsecret=0.18.8=h329b89f_2
+  - libsndfile=1.2.2=hc60ed4a_1
+  - libspatialindex=2.0.0=he02047a_0
+  - libspatialite=5.1.0=h1b4f908_11
+  - libsqlite=3.46.1=hadc24fc_0
+  - libssh2=1.11.0=h0841786_0
+  - libstdcxx=14.1.0=hc0a3c3a_1
+  - libstdcxx-ng=14.1.0=h4852527_1
+  - libsystemd0=256.6=h2774228_0
+  - libthrift=0.20.0=h0e7cc3e_1
+  - libtiff=4.7.0=he137b08_1
+  - libtorch=2.4.1=cuda120_hba08053_300
+  - libutf8proc=2.8.0=h166bdaf_0
+  - libuuid=2.38.1=h0b41bf4_0
+  - libuv=1.49.0=hb9d3cd8_0
+  - libvorbis=1.3.7=h9c3ff4c_0
+  - libwebp-base=1.4.0=hd590300_0
+  - libxcb=1.17.0=h8a09558_0
+  - libxcrypt=4.4.36=hd590300_1
+  - libxkbcommon=1.7.0=h2c5496b_1
+  - libxml2=2.12.7=he7c6b58_4
+  - libxslt=1.1.39=h76b75d6_0
+  - libzip=1.11.1=hf83b1b0_0
+  - libzlib=1.3.1=hb9d3cd8_2
+  - llvm-openmp=19.1.0=h84d6215_0
+  - lxml=5.3.0=py312he28fd5a_1
+  - lz4-c=1.9.4=hcb278e6_0
+  - lzo=2.10=hd590300_1001
+  - mapclassify=2.8.1=pyhd8ed1ab_0
+  - markupsafe=3.0.0=py312h66e93f0_0
+  - matplotlib-base=3.9.2=py312hd3ec401_1
+  - metis=5.1.0=hd0bcaf9_1007
+  - minizip=4.0.7=h401b404_0
+  - mkl=2023.2.0=h84fe81f_50496
+  - mock=5.1.0=pyhd8ed1ab_0
+  - mpc=1.3.1=h24ddda3_1
+  - mpfr=4.2.1=h90cbb55_3
+  - mpg123=1.32.6=h59595ed_0
+  - mpi=1.0=openmpi
+  - mpmath=1.3.0=pyhd8ed1ab_0
+  - munkres=1.1.4=pyh9f0ad1d_0
+  - mysql-common=9.0.1=h266115a_1
+  - mysql-libs=9.0.1=he0572af_1
+  - nccl=2.23.4.1=h52f6c39_0
+  - ncurses=6.5=he02047a_1
+  - networkx=3.3=pyhd8ed1ab_1
+  - nitro=2.7.dev8=h59595ed_0
+  - nose2=0.9.2=py_0
+  - nspr=4.35=h27087fc_0
+  - nss=3.105=hd34e28f_0
+  - numpy=2.1.2=py312h58c1407_0
+  - ocl-icd=2.3.2=hd590300_1
+  - openjpeg=2.5.2=h488ebb8_0
+  - openmpi=5.0.5=h6ae21d5_103
+  - openssl=3.3.2=hb9d3cd8_0
+  - orc=2.0.2=h669347b_0
+  - owslib=0.31.0=pyhd8ed1ab_0
+  - packaging=24.1=pyhd8ed1ab_0
+  - pandas=2.2.2=py312h1d6d2e6_1
+  - pcre2=10.44=hba22ea6_2
+  - pdal=2.8.0=hd8ed1ab_0
+  - pillow=10.4.0=py312h56024de_1
+  - pip=24.2=pyh8b19718_1
+  - pixman=0.43.2=h59595ed_0
+  - plotly=5.24.1=pyhd8ed1ab_0
+  - ply=3.11=pyhd8ed1ab_2
+  - poppler=24.08.0=h47131b8_1
+  - poppler-data=0.4.12=hd8ed1ab_0
+  - postgresql=16.4=hb2eb5c0_2
+  - proj=9.5.0=h12925eb_0
+  - psutil=6.0.0=py312h66e93f0_1
+  - psycopg2=2.9.9=py312h9862866_1
+  - pthread-stubs=0.4=hb9d3cd8_1002
+  - pulseaudio-client=17.0=hb77b528_0
+  - pycparser=2.22=pyhd8ed1ab_0
+  - pygments=2.18.0=pyhd8ed1ab_0
+  - pyogrio=0.10.0=py312he8b4914_0
+  - pyparsing=3.1.4=pyhd8ed1ab_0
+  - pyproj=3.7.0=py312he630544_0
+  - pyqt=5.15.9=py312h949fe66_5
+  - pyqt5-sip=12.12.2=py312h30efb56_5
+  - pyqtwebkit=5.15.9=py312hc23280e_2
+  - pysocks=1.7.1=pyha2e5f31_6
+  - python=3.12.7=hc5c86c4_0_cpython
+  - python-dateutil=2.9.0=pyhd8ed1ab_0
+  - python-pdal=3.4.5=py312h356d258_12
+  - python-tzdata=2024.2=pyhd8ed1ab_0
+  - python_abi=3.12=5_cp312
+  - pytorch=2.4.1=cuda120_py312h257e401_300
+  - pytz=2024.2=pyhd8ed1ab_0
+  - pyyaml=6.0.2=py312h66e93f0_1
+  - qca=2.3.9=h7e7bb2e_0
+  - qgis=3.38.3=py312hf92df33_3
+  - qhull=2020.2=h434a139_5
+  - qjson=0.9.0=h0c700ba_1009
+  - qscintilla2=2.14.1=py312hc23280e_0
+  - qt-main=5.15.8=h3155989_26
+  - qtkeychain=0.14.3=h8f99554_0
+  - qtwebkit=5.212=h0fbc989_17
+  - qwt=6.3.0=h7c222af_0
+  - rasterio=1.4.1=py312h8456570_0
+  - re2=2023.09.01=h7f4b329_2
+  - readline=8.2=h8228510_1
+  - requests=2.32.3=pyhd8ed1ab_0
+  - rtree=1.3.0=py312h18067a2_2
+  - s2n=1.5.4=h1380c3d_0
+  - safetensors=0.4.5=py312h12e396e_0
+  - scikit-learn=1.5.2=py312h7a48858_1
+  - scipy=1.14.1=py312h7d485d2_0
+  - setuptools=75.1.0=pyhd8ed1ab_0
+  - shapely=2.0.6=py312h391bc85_2
+  - sip=6.7.12=py312h30efb56_0
+  - six=1.16.0=pyh6c4a22f_0
+  - sleef=3.7=h1b44611_0
+  - snappy=1.2.1=ha2e4443_0
+  - snuggs=1.4.7=pyhd8ed1ab_1
+  - spdlog=1.14.1=hed91bc2_1
+  - sqlite=3.46.1=h9eae976_0
+  - suitesparse=5.10.1=h9e50725_1
+  - sympy=1.13.3=pypyh2585a3b_103
+  - tbb=2021.7.0=h924138e_0
+  - tenacity=9.0.0=pyhd8ed1ab_0
+  - threadpoolctl=3.5.0=pyhc1e730c_0
+  - tiledb=2.25.0=h4c922dd_14
+  - timm=1.0.9=pyhd8ed1ab_0
+  - tk=8.6.13=noxft_h4845f30_101
+  - toml=0.10.2=pyhd8ed1ab_0
+  - tomli=2.0.2=pyhd8ed1ab_0
+  - torchvision=0.19.1=cuda120py312h00ec985_1
+  - tqdm=4.66.5=pyhd8ed1ab_0
+  - typing-extensions=4.12.2=hd8ed1ab_0
+  - typing_extensions=4.12.2=pyha770c72_0
+  - tzcode=2024b=hb9d3cd8_0
+  - tzdata=2024b=hc8b5060_0
+  - uriparser=0.9.8=hac33072_0
+  - urllib3=2.2.3=pyhd8ed1ab_0
+  - wheel=0.44.0=pyhd8ed1ab_0
+  - xcb-util=0.4.1=hb711507_2
+  - xcb-util-image=0.4.0=hb711507_2
+  - xcb-util-keysyms=0.4.1=hb711507_0
+  - xcb-util-renderutil=0.3.10=hb711507_0
+  - xcb-util-wm=0.4.2=hb711507_0
+  - xerces-c=3.2.5=h988505b_2
+  - xkeyboard-config=2.43=hb9d3cd8_0
+  - xorg-libice=1.1.1=hb9d3cd8_1
+  - xorg-libsm=1.2.4=he73a12e_1
+  - xorg-libx11=1.8.10=h4f16b4b_0
+  - xorg-libxau=1.0.11=hb9d3cd8_1
+  - xorg-libxdmcp=1.1.5=hb9d3cd8_0
+  - xorg-libxext=1.3.6=hb9d3cd8_0
+  - xorg-libxrender=0.9.11=hb9d3cd8_1
+  - xorg-libxxf86vm=1.1.5=hb9d3cd8_3
+  - xorg-xf86vidmodeproto=2.3.1=hb9d3cd8_1003
+  - xorg-xorgproto=2024.1=hb9d3cd8_1
+  - xyzservices=2024.9.0=pyhd8ed1ab_0
+  - xz=5.2.6=h166bdaf_0
+  - yaml=0.2.5=h7f98852_2
+  - zlib=1.3.1=hb9d3cd8_2
+  - zstandard=0.23.0=py312hef9b889_1
+  - zstd=1.5.6=ha6fb4c9_0
+  - pip:
+      - pdal-plugins==1.6.2