From df39331f630b994eeb87bb95640f054f272aac6b Mon Sep 17 00:00:00 2001 From: Debabrata Date: Sat, 13 Apr 2024 00:27:39 +0530 Subject: [PATCH] added shoreline change analysis project --- .gitignore | 11 +- README.md | 1 + consts.py | 7 + docs/functions.md | 4 + docs/notes.md | 38 ++- main.py | 6 + notebooks/data/shorelines/Baseline.cpg | 1 + notebooks/data/shorelines/Baseline.dbf | Bin 0 -> 119 bytes notebooks/data/shorelines/Baseline.prj | 1 + notebooks/data/shorelines/Baseline.qpj | 1 + notebooks/data/shorelines/Baseline.shp | Bin 0 -> 3276 bytes notebooks/data/shorelines/Baseline.shx | Bin 0 -> 108 bytes notebooks/data/shorelines/OffShoreline.cpg | 1 + notebooks/data/shorelines/OffShoreline.dbf | Bin 0 -> 77 bytes notebooks/data/shorelines/OffShoreline.prj | 1 + notebooks/data/shorelines/OffShoreline.qpj | 1 + notebooks/data/shorelines/OffShoreline.shp | Bin 0 -> 636 bytes notebooks/data/shorelines/OffShoreline.shx | Bin 0 -> 108 bytes .../shorelines/shorelines/Shoreline_1973.cpg | 1 + .../shorelines/shorelines/Shoreline_1973.dbf | Bin 0 -> 77 bytes .../shorelines/shorelines/Shoreline_1973.prj | 1 + .../shorelines/shorelines/Shoreline_1973.qpj | 1 + .../shorelines/shorelines/Shoreline_1973.shp | Bin 0 -> 2316 bytes .../shorelines/shorelines/Shoreline_1973.shx | Bin 0 -> 108 bytes .../shorelines/shorelines/Shoreline_1977.cpg | 1 + .../shorelines/shorelines/Shoreline_1977.dbf | Bin 0 -> 77 bytes .../shorelines/shorelines/Shoreline_1977.prj | 1 + .../shorelines/shorelines/Shoreline_1977.qpj | 1 + .../shorelines/shorelines/Shoreline_1977.shp | Bin 0 -> 2924 bytes .../shorelines/shorelines/Shoreline_1977.shx | Bin 0 -> 108 bytes .../shorelines/shorelines/Shoreline_1980.cpg | 1 + .../shorelines/shorelines/Shoreline_1980.dbf | Bin 0 -> 77 bytes .../shorelines/shorelines/Shoreline_1980.prj | 1 + .../shorelines/shorelines/Shoreline_1980.qpj | 1 + .../shorelines/shorelines/Shoreline_1980.shp | Bin 0 -> 2444 bytes .../shorelines/shorelines/Shoreline_1980.shx | Bin 0 -> 108 bytes .../shorelines/shorelines/Shoreline_1989.cpg | 1 + .../shorelines/shorelines/Shoreline_1989.dbf | Bin 0 -> 77 bytes .../shorelines/shorelines/Shoreline_1989.prj | 1 + .../shorelines/shorelines/Shoreline_1989.qpj | 1 + .../shorelines/shorelines/Shoreline_1989.shp | Bin 0 -> 604 bytes .../shorelines/shorelines/Shoreline_1989.shx | Bin 0 -> 108 bytes .../shorelines/shorelines/Shoreline_1993.cpg | 1 + .../shorelines/shorelines/Shoreline_1993.dbf | Bin 0 -> 77 bytes .../shorelines/shorelines/Shoreline_1993.prj | 1 + .../shorelines/shorelines/Shoreline_1993.qpj | 1 + .../shorelines/shorelines/Shoreline_1993.shp | Bin 0 -> 2812 bytes .../shorelines/shorelines/Shoreline_1993.shx | Bin 0 -> 108 bytes .../shorelines/shorelines/Shoreline_1997.cpg | 1 + .../shorelines/shorelines/Shoreline_1997.dbf | Bin 0 -> 120 bytes .../shorelines/shorelines/Shoreline_1997.prj | 1 + .../shorelines/shorelines/Shoreline_1997.qpj | 1 + .../shorelines/shorelines/Shoreline_1997.shp | Bin 0 -> 652 bytes .../shorelines/shorelines/Shoreline_1997.shx | Bin 0 -> 108 bytes .../shorelines/shorelines/Shoreline_2003.cpg | 1 + .../shorelines/shorelines/Shoreline_2003.dbf | Bin 0 -> 120 bytes .../shorelines/shorelines/Shoreline_2003.prj | 1 + .../shorelines/shorelines/Shoreline_2003.qpj | 1 + .../shorelines/shorelines/Shoreline_2003.shp | Bin 0 -> 1004 bytes .../shorelines/shorelines/Shoreline_2003.shx | Bin 0 -> 108 bytes .../shorelines/shorelines/Shoreline_2008.cpg | 1 + .../shorelines/shorelines/Shoreline_2008.dbf | Bin 0 -> 120 bytes .../shorelines/shorelines/Shoreline_2008.prj | 1 + .../shorelines/shorelines/Shoreline_2008.qpj | 1 + .../shorelines/shorelines/Shoreline_2008.shp | Bin 0 -> 780 bytes .../shorelines/shorelines/Shoreline_2008.shx | Bin 0 -> 108 bytes .../shorelines/shorelines/Shoreline_2014.cpg | 1 + .../shorelines/shorelines/Shoreline_2014.dbf | Bin 0 -> 120 bytes .../shorelines/shorelines/Shoreline_2014.prj | 1 + .../shorelines/shorelines/Shoreline_2014.qpj | 1 + .../shorelines/shorelines/Shoreline_2014.shp | Bin 0 -> 892 bytes .../shorelines/shorelines/Shoreline_2014.shx | Bin 0 -> 108 bytes .../shorelines/shorelines/Shoreline_2018.cpg | 1 + .../shorelines/shorelines/Shoreline_2018.dbf | Bin 0 -> 120 bytes .../shorelines/shorelines/Shoreline_2018.prj | 1 + .../shorelines/shorelines/Shoreline_2018.qpj | 1 + .../shorelines/shorelines/Shoreline_2018.shp | Bin 0 -> 956 bytes .../shorelines/shorelines/Shoreline_2018.shx | Bin 0 -> 108 bytes notebooks/shoreline_change_rate.ipynb | 188 ++++++++++++ pyproject.toml | 2 +- rsgtools/__init__.py | 8 +- rsgtools/config_entity.py | 6 - rsgtools/geo_app/calc_shoreline_changerate.py | 285 ++++++++++++++++++ .../calc_shoreline_dist_from_baseline.py | 112 +++++++ .../geo_app/calc_shoreline_uncertainty.py | 4 + .../generate_shoreline_baseline_intersects.py | 94 ++++++ .../geo_app/generate_shoreline_transects.py | 61 ++++ rsgtools/geo_app/generate_transects_seqid.py | 160 ++++++++++ rsgtools/geo_app/shoreline_change_analysis.py | 121 ++++++++ rsgtools/ref_scripts.py | 89 ++++-- rsgtools/utils.py | 264 ++++++++++++++-- rsgtools/vector_ops/create_buffer.py | 52 ++++ rsgtools/vector_ops/find_nearest_point.py | 19 +- rsgtools/vector_ops/lines_middle_points.py | 77 +++++ setup.py | 4 +- tests/results/merge_lines.dbf | Bin 390 -> 0 bytes tests/results/merge_lines.prj | 1 - tests/results/merge_lines.shp | Bin 4620 -> 0 bytes tests/results/merge_lines.shx | Bin 316 -> 0 bytes tests/results/out_cross_section.dbf | Bin 13693 -> 0 bytes tests/results/out_cross_section.prj | 1 - tests/results/out_cross_section.shp | Bin 12156 -> 0 bytes tests/results/out_cross_section.shx | Bin 1196 -> 0 bytes tests/results/point_to_grid.dbf | Bin 451 -> 0 bytes tests/results/point_to_grid.prj | 1 - tests/results/point_to_grid.shp | Bin 4860 -> 0 bytes tests/results/point_to_grid.shx | Bin 380 -> 0 bytes tests/{test_geobhumi.py => test_rsgtools.py} | 0 108 files changed, 1568 insertions(+), 84 deletions(-) create mode 100644 consts.py create mode 100644 main.py create mode 100644 notebooks/data/shorelines/Baseline.cpg create mode 100644 notebooks/data/shorelines/Baseline.dbf create mode 100644 notebooks/data/shorelines/Baseline.prj create mode 100644 notebooks/data/shorelines/Baseline.qpj create mode 100644 notebooks/data/shorelines/Baseline.shp create mode 100644 notebooks/data/shorelines/Baseline.shx create mode 100644 notebooks/data/shorelines/OffShoreline.cpg create mode 100644 notebooks/data/shorelines/OffShoreline.dbf create mode 100644 notebooks/data/shorelines/OffShoreline.prj create mode 100644 notebooks/data/shorelines/OffShoreline.qpj create mode 100644 notebooks/data/shorelines/OffShoreline.shp create mode 100644 notebooks/data/shorelines/OffShoreline.shx create mode 100644 notebooks/data/shorelines/shorelines/Shoreline_1973.cpg create mode 100644 notebooks/data/shorelines/shorelines/Shoreline_1973.dbf create mode 100644 notebooks/data/shorelines/shorelines/Shoreline_1973.prj create mode 100644 notebooks/data/shorelines/shorelines/Shoreline_1973.qpj create mode 100644 notebooks/data/shorelines/shorelines/Shoreline_1973.shp create mode 100644 notebooks/data/shorelines/shorelines/Shoreline_1973.shx create mode 100644 notebooks/data/shorelines/shorelines/Shoreline_1977.cpg create mode 100644 notebooks/data/shorelines/shorelines/Shoreline_1977.dbf create mode 100644 notebooks/data/shorelines/shorelines/Shoreline_1977.prj create mode 100644 notebooks/data/shorelines/shorelines/Shoreline_1977.qpj create mode 100644 notebooks/data/shorelines/shorelines/Shoreline_1977.shp create mode 100644 notebooks/data/shorelines/shorelines/Shoreline_1977.shx create mode 100644 notebooks/data/shorelines/shorelines/Shoreline_1980.cpg create mode 100644 notebooks/data/shorelines/shorelines/Shoreline_1980.dbf create mode 100644 notebooks/data/shorelines/shorelines/Shoreline_1980.prj create mode 100644 notebooks/data/shorelines/shorelines/Shoreline_1980.qpj create mode 100644 notebooks/data/shorelines/shorelines/Shoreline_1980.shp create mode 100644 notebooks/data/shorelines/shorelines/Shoreline_1980.shx create mode 100644 notebooks/data/shorelines/shorelines/Shoreline_1989.cpg create mode 100644 notebooks/data/shorelines/shorelines/Shoreline_1989.dbf create mode 100644 notebooks/data/shorelines/shorelines/Shoreline_1989.prj create mode 100644 notebooks/data/shorelines/shorelines/Shoreline_1989.qpj create mode 100644 notebooks/data/shorelines/shorelines/Shoreline_1989.shp create mode 100644 notebooks/data/shorelines/shorelines/Shoreline_1989.shx create mode 100644 notebooks/data/shorelines/shorelines/Shoreline_1993.cpg create mode 100644 notebooks/data/shorelines/shorelines/Shoreline_1993.dbf create mode 100644 notebooks/data/shorelines/shorelines/Shoreline_1993.prj create mode 100644 notebooks/data/shorelines/shorelines/Shoreline_1993.qpj create mode 100644 notebooks/data/shorelines/shorelines/Shoreline_1993.shp create mode 100644 notebooks/data/shorelines/shorelines/Shoreline_1993.shx create mode 100644 notebooks/data/shorelines/shorelines/Shoreline_1997.cpg create mode 100644 notebooks/data/shorelines/shorelines/Shoreline_1997.dbf create mode 100644 notebooks/data/shorelines/shorelines/Shoreline_1997.prj create mode 100644 notebooks/data/shorelines/shorelines/Shoreline_1997.qpj create mode 100644 notebooks/data/shorelines/shorelines/Shoreline_1997.shp create mode 100644 notebooks/data/shorelines/shorelines/Shoreline_1997.shx create mode 100644 notebooks/data/shorelines/shorelines/Shoreline_2003.cpg create mode 100644 notebooks/data/shorelines/shorelines/Shoreline_2003.dbf create mode 100644 notebooks/data/shorelines/shorelines/Shoreline_2003.prj create mode 100644 notebooks/data/shorelines/shorelines/Shoreline_2003.qpj create mode 100644 notebooks/data/shorelines/shorelines/Shoreline_2003.shp create mode 100644 notebooks/data/shorelines/shorelines/Shoreline_2003.shx create mode 100644 notebooks/data/shorelines/shorelines/Shoreline_2008.cpg create mode 100644 notebooks/data/shorelines/shorelines/Shoreline_2008.dbf create mode 100644 notebooks/data/shorelines/shorelines/Shoreline_2008.prj create mode 100644 notebooks/data/shorelines/shorelines/Shoreline_2008.qpj create mode 100644 notebooks/data/shorelines/shorelines/Shoreline_2008.shp create mode 100644 notebooks/data/shorelines/shorelines/Shoreline_2008.shx create mode 100644 notebooks/data/shorelines/shorelines/Shoreline_2014.cpg create mode 100644 notebooks/data/shorelines/shorelines/Shoreline_2014.dbf create mode 100644 notebooks/data/shorelines/shorelines/Shoreline_2014.prj create mode 100644 notebooks/data/shorelines/shorelines/Shoreline_2014.qpj create mode 100644 notebooks/data/shorelines/shorelines/Shoreline_2014.shp create mode 100644 notebooks/data/shorelines/shorelines/Shoreline_2014.shx create mode 100644 notebooks/data/shorelines/shorelines/Shoreline_2018.cpg create mode 100644 notebooks/data/shorelines/shorelines/Shoreline_2018.dbf create mode 100644 notebooks/data/shorelines/shorelines/Shoreline_2018.prj create mode 100644 notebooks/data/shorelines/shorelines/Shoreline_2018.qpj create mode 100644 notebooks/data/shorelines/shorelines/Shoreline_2018.shp create mode 100644 notebooks/data/shorelines/shorelines/Shoreline_2018.shx create mode 100644 notebooks/shoreline_change_rate.ipynb create mode 100644 rsgtools/geo_app/calc_shoreline_changerate.py create mode 100644 rsgtools/geo_app/calc_shoreline_dist_from_baseline.py create mode 100644 rsgtools/geo_app/calc_shoreline_uncertainty.py create mode 100644 rsgtools/geo_app/generate_shoreline_baseline_intersects.py create mode 100644 rsgtools/geo_app/generate_shoreline_transects.py create mode 100644 rsgtools/geo_app/generate_transects_seqid.py create mode 100644 rsgtools/geo_app/shoreline_change_analysis.py create mode 100644 rsgtools/vector_ops/create_buffer.py create mode 100644 rsgtools/vector_ops/lines_middle_points.py delete mode 100644 tests/results/merge_lines.dbf delete mode 100644 tests/results/merge_lines.prj delete mode 100644 tests/results/merge_lines.shp delete mode 100644 tests/results/merge_lines.shx delete mode 100644 tests/results/out_cross_section.dbf delete mode 100644 tests/results/out_cross_section.prj delete mode 100644 tests/results/out_cross_section.shp delete mode 100644 tests/results/out_cross_section.shx delete mode 100644 tests/results/point_to_grid.dbf delete mode 100644 tests/results/point_to_grid.prj delete mode 100644 tests/results/point_to_grid.shp delete mode 100644 tests/results/point_to_grid.shx rename tests/{test_geobhumi.py => test_rsgtools.py} (100%) diff --git a/.gitignore b/.gitignore index 796644d..44d6ac3 100644 --- a/.gitignore +++ b/.gitignore @@ -131,8 +131,9 @@ dmypy.json # others .idea logs/* -geobhumi/__pycache__ -geobhumi/geo_app/__pycache__ -geobhumi/raster_ops/__pycache__ -geobhumi/vector_ops/__pycache__ -tests/__pycache__ \ No newline at end of file +rsgtools/__pycache__ +rsgtools/geo_app/__pycache__ +rsgtools/raster_ops/__pycache__ +rsgtools/vector_ops/__pycache__ +tests/__pycache__ +tests/results/* diff --git a/README.md b/README.md index 9a1a9cc..1ba6859 100644 --- a/README.md +++ b/README.md @@ -48,6 +48,7 @@ The `geoutils-rsg` Python package aims to simplify geospatial tasks and automate | :--------------------------------- | :--------------------------------------------------------------------------------------------- | | generate_shoreline_raster() | Shoreline Extraction | | generate_morphometric_parameters() | Morphometric Analysis for Prioritizing Sub-watershed and Management Using Geospatial Technique | +| shoreline_change_analysis() | Digital Shoreline Change-Rate Analysis (example: `notebooks/shoreline_change_rate.ipynb`) | # Installation diff --git a/consts.py b/consts.py new file mode 100644 index 0000000..08ac7de --- /dev/null +++ b/consts.py @@ -0,0 +1,7 @@ +# constants values + +DEG_TO_KM = 111.0 + + +# References +# https://education.nationalgeographic.org/resource/latitude/ diff --git a/docs/functions.md b/docs/functions.md index 2d9d880..327240e 100644 --- a/docs/functions.md +++ b/docs/functions.md @@ -14,6 +14,10 @@ offset_random_point read_raster_as_array np2gdal_dtype write_geotiff_file +timeit +Histogram +OTSU +get_shapefile_epsg_code ``` ### ref_scripts.py diff --git a/docs/notes.md b/docs/notes.md index 490e70b..a13a00c 100644 --- a/docs/notes.md +++ b/docs/notes.md @@ -1,9 +1,41 @@ # Notes: -- convert ipynb to py file in vscode: ctrl+shift+p --> type Export --> select Export to Python Script -- project layouts: https://realpython.com/python-application-layouts/ -- python project structure: https://github.com/yngvem/python-project-structure +- Convert ipynb to py file in vscode: ctrl+shift+p --> type Export --> select Export to Python Script +- Project layouts: https://realpython.com/python-application-layouts/ +- Python project structure: https://github.com/yngvem/python-project-structure - Reset GitHub repository URL on local system if you changed it: https://stackoverflow.com/questions/30443333/error-with-renamed-repo-in-github-remote-this-repository-moved-please-use-th - To check the current one: git remote -v - If it was origin, Then you change it like: git remote set-url origin https://github.com/YOUR-USERNAME/YOUR-REPO - If it was upstream, you change it like: git remote set-url upstream https://github.com/YOUR-USERNAME/YOUR-REPO +- Git Commands: + - Run this command to see what branch you're on: `git status` + - Run this command to see local branches: `git branch` + - Run this command to see remote branches: `git branch -r` + - Run this command to see all local and remote branches: `git branch -a` + - Create a new branch: + - `git checkout -b ` + - Switch to a branch in your local repo: `git checkout ` + - Run this command to get a list of all branches from the remote: `git pull` + - Run this command to switch to a branch that came from a remote repo: `git checkout --track origin/` + - Push to a branch if local branch already exists on the remote: `git push origin ` or `git push` + - Push to a branch if local branch does not exist on the remote: `git push -u origin ` or `git push -u origin HEAD` + - Rename git branch: + - To rename the current branch: `git branch -m ` + - To rename a branch while pointed to any branch: `git branch -m ` + - Merge a branch: + - `git status` + - `git checkout ` + - `git merge ` + - Delete branches: + - Run this command to delete a remote branch: `git push origin --delete ` + - Run this command to delete a local branch: `git branch -d ` or `git branch -D ` + - More commands: + - `git stash` when you want to change to a different branch, and you want to store changes that are not ready to be committed. + - Steps to follow after every edit in the project: + - `git status` + - `git add .` or `git add ` + - `git commit -m ""` + - `git stash` (if needed) + - `git pull` (if needed) + - `git push origin ` + - `git status` diff --git a/main.py b/main.py new file mode 100644 index 0000000..716c062 --- /dev/null +++ b/main.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +""" +Created on Mon Mar 25 18:41:31 2024 + +@author: USER +""" diff --git a/notebooks/data/shorelines/Baseline.cpg b/notebooks/data/shorelines/Baseline.cpg new file mode 100644 index 0000000..3ad133c --- /dev/null +++ b/notebooks/data/shorelines/Baseline.cpg @@ -0,0 +1 @@ +UTF-8 \ No newline at end of file diff --git a/notebooks/data/shorelines/Baseline.dbf b/notebooks/data/shorelines/Baseline.dbf new file mode 100644 index 0000000000000000000000000000000000000000..9caae50df2bfa481fc95fe97021a685b839759f6 GIT binary patch literal 119 zcmZRsVPRurU|>jO5CxK$z{N4d6)NfsqPftN_&NIGmFHDJ0H?&_)SS$`R0Rbo0AlF~ A!~g&Q literal 0 HcmV?d00001 diff --git a/notebooks/data/shorelines/Baseline.prj b/notebooks/data/shorelines/Baseline.prj new file mode 100644 index 0000000..b9cf562 --- /dev/null +++ b/notebooks/data/shorelines/Baseline.prj @@ -0,0 +1 @@ +PROJCS["WGS_1984_UTM_Zone_45N",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["Meter",1]] \ No newline at end of file diff --git a/notebooks/data/shorelines/Baseline.qpj b/notebooks/data/shorelines/Baseline.qpj new file mode 100644 index 0000000..e9f9151 --- /dev/null +++ b/notebooks/data/shorelines/Baseline.qpj @@ -0,0 +1 @@ +PROJCS["WGS 84 / UTM zone 45N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["Easting",EAST],AXIS["Northing",NORTH],AUTHORITY["EPSG","32645"]] diff --git a/notebooks/data/shorelines/Baseline.shp b/notebooks/data/shorelines/Baseline.shp new file mode 100644 index 0000000000000000000000000000000000000000..92e865dbb39e2d65e1205ce4c286119ebd3bb5aa GIT binary patch literal 3276 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 literal 0 HcmV?d00001 diff --git a/notebooks/data/shorelines/Baseline.shx b/notebooks/data/shorelines/Baseline.shx new file mode 100644 index 0000000000000000000000000000000000000000..161167d95f16f5f44c416eb052f99f7c928b8663 GIT binary patch literal 108 zcmZQzQ0HR64$NLKGcW)V!=Ig&|8)PzIo{06E8=Q$bUc~9r+<&Mykm3smX9_qj*i&1 Mqlg+YFt8Z_0OC9m4gdfE literal 0 HcmV?d00001 diff --git a/notebooks/data/shorelines/OffShoreline.cpg b/notebooks/data/shorelines/OffShoreline.cpg new file mode 100644 index 0000000..3ad133c --- /dev/null +++ b/notebooks/data/shorelines/OffShoreline.cpg @@ -0,0 +1 @@ +UTF-8 \ No newline at end of file diff --git a/notebooks/data/shorelines/OffShoreline.dbf b/notebooks/data/shorelines/OffShoreline.dbf new file mode 100644 index 0000000000000000000000000000000000000000..3aafc9c4f656bf3069cb3c9ee10b6289270738b7 GIT binary patch literal 77 mcmZRsU}9rrU|?`$;0BVIATtFn<_BVN!MP9yuL2wxN&x_MeFKgF literal 0 HcmV?d00001 diff --git a/notebooks/data/shorelines/OffShoreline.prj b/notebooks/data/shorelines/OffShoreline.prj new file mode 100644 index 0000000..b9cf562 --- /dev/null +++ b/notebooks/data/shorelines/OffShoreline.prj @@ -0,0 +1 @@ +PROJCS["WGS_1984_UTM_Zone_45N",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["Meter",1]] \ No newline at end of file diff --git a/notebooks/data/shorelines/OffShoreline.qpj b/notebooks/data/shorelines/OffShoreline.qpj new file mode 100644 index 0000000..e9f9151 --- /dev/null +++ b/notebooks/data/shorelines/OffShoreline.qpj @@ -0,0 +1 @@ +PROJCS["WGS 84 / UTM zone 45N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["Easting",EAST],AXIS["Northing",NORTH],AUTHORITY["EPSG","32645"]] diff --git a/notebooks/data/shorelines/OffShoreline.shp b/notebooks/data/shorelines/OffShoreline.shp new file mode 100644 index 0000000000000000000000000000000000000000..cbd42d4873fb65dcd1f97c4655916d6ad2f43331 GIT binary patch literal 636 zcmZQzQ0HR63K;EPFf%X!5krhZ^mCsda*jz8Y`6J0I6D5-HV=NLCGWWNv`$`0tD_@U z?Wlr`3=E7M#FzzC$RG#R%TX%JAN*I&F>I|8^UP*PM^4TP$JU>6j<=T`d&vXj!`x-V zC;MbVlcS@rb|6~|(4At{?{W=*{Ck>F^R#}+IZ7y|wXAJ)bYy>c=#B!Tykped<3{>G zeyGi~*MZ#fj^4f@_lki2Y7>q+mkJTC@$~V zrEFJL4&-~v%E_85$vbY`mh+UmjKH5S`=To$t3UC z@}g^TIM6)1Wd%~+|KuFs&7E{_8_<5w+^c^Qf${U3FM9ecAphp<2!RkFf2QX-aZr5u aMBWww#or6B#o+i0d@U~s;wPDeg82Xf?AI0m literal 0 HcmV?d00001 diff --git a/notebooks/data/shorelines/OffShoreline.shx b/notebooks/data/shorelines/OffShoreline.shx new file mode 100644 index 0000000000000000000000000000000000000000..80a20ee69f936b6a4cb5059a865bc95ab3fbe5be GIT binary patch literal 108 zcmZQzQ0HR64$NLKGcW)VLySW7bDtk_j!6@2xA`|XI{wu*4}PX4@3`}{PF_i?qa$|h LD56FT42&EAWl0X> literal 0 HcmV?d00001 diff --git a/notebooks/data/shorelines/shorelines/Shoreline_1973.cpg b/notebooks/data/shorelines/shorelines/Shoreline_1973.cpg new file mode 100644 index 0000000..3ad133c --- /dev/null +++ b/notebooks/data/shorelines/shorelines/Shoreline_1973.cpg @@ -0,0 +1 @@ +UTF-8 \ No newline at end of file diff --git a/notebooks/data/shorelines/shorelines/Shoreline_1973.dbf b/notebooks/data/shorelines/shorelines/Shoreline_1973.dbf new file mode 100644 index 0000000000000000000000000000000000000000..669dcb3ef4cd706da3fe50562dabff4c849be4ff GIT binary patch literal 77 ucmZRsU}9usU|?`$;0BVIz{N4d6)NfsqPftN@G2Nunj7mH80s3DO923c9Rzg% literal 0 HcmV?d00001 diff --git a/notebooks/data/shorelines/shorelines/Shoreline_1973.prj b/notebooks/data/shorelines/shorelines/Shoreline_1973.prj new file mode 100644 index 0000000..b9cf562 --- /dev/null +++ b/notebooks/data/shorelines/shorelines/Shoreline_1973.prj @@ -0,0 +1 @@ +PROJCS["WGS_1984_UTM_Zone_45N",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["Meter",1]] \ No newline at end of file diff --git a/notebooks/data/shorelines/shorelines/Shoreline_1973.qpj b/notebooks/data/shorelines/shorelines/Shoreline_1973.qpj new file mode 100644 index 0000000..e9f9151 --- /dev/null +++ b/notebooks/data/shorelines/shorelines/Shoreline_1973.qpj @@ -0,0 +1 @@ +PROJCS["WGS 84 / UTM zone 45N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["Easting",EAST],AXIS["Northing",NORTH],AUTHORITY["EPSG","32645"]] diff --git a/notebooks/data/shorelines/shorelines/Shoreline_1973.shp b/notebooks/data/shorelines/shorelines/Shoreline_1973.shp new file mode 100644 index 0000000000000000000000000000000000000000..08ec7f196bbfcf742c2c0be149e3d22d4e14213b GIT binary patch literal 2316 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 literal 0 HcmV?d00001 diff --git a/notebooks/data/shorelines/shorelines/Shoreline_1977.shx b/notebooks/data/shorelines/shorelines/Shoreline_1977.shx new file mode 100644 index 0000000000000000000000000000000000000000..37b13bfd5416fba68151eb2184bb9f2d5030e04f GIT binary patch literal 108 zcmZQzQ0HR64$NLKGcW)V!*b8)!uVfujv_u8Pk9?19mR9}uUlx!JGwo7$XVOs=!jiA Lil`9-18V~SC8iEO literal 0 HcmV?d00001 diff --git a/notebooks/data/shorelines/shorelines/Shoreline_1980.cpg b/notebooks/data/shorelines/shorelines/Shoreline_1980.cpg new file mode 100644 index 0000000..3ad133c --- /dev/null +++ b/notebooks/data/shorelines/shorelines/Shoreline_1980.cpg @@ -0,0 +1 @@ +UTF-8 \ No newline at end of file diff --git a/notebooks/data/shorelines/shorelines/Shoreline_1980.dbf b/notebooks/data/shorelines/shorelines/Shoreline_1980.dbf new file mode 100644 index 0000000000000000000000000000000000000000..15639e383e9f2406b16aff950009bbfb6e26a590 GIT binary patch literal 77 ucmZRsU}9usU|?`$;0BVIz{N4d6)NfsqPftN@G2NuS{UdW80s3DO923c4g_-m literal 0 HcmV?d00001 diff --git a/notebooks/data/shorelines/shorelines/Shoreline_1980.prj b/notebooks/data/shorelines/shorelines/Shoreline_1980.prj new file mode 100644 index 0000000..b9cf562 --- /dev/null +++ b/notebooks/data/shorelines/shorelines/Shoreline_1980.prj @@ -0,0 +1 @@ +PROJCS["WGS_1984_UTM_Zone_45N",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["Meter",1]] \ No newline at end of file diff --git a/notebooks/data/shorelines/shorelines/Shoreline_1980.qpj b/notebooks/data/shorelines/shorelines/Shoreline_1980.qpj new file mode 100644 index 0000000..e9f9151 --- /dev/null +++ b/notebooks/data/shorelines/shorelines/Shoreline_1980.qpj @@ -0,0 +1 @@ +PROJCS["WGS 84 / UTM zone 45N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["Easting",EAST],AXIS["Northing",NORTH],AUTHORITY["EPSG","32645"]] diff --git a/notebooks/data/shorelines/shorelines/Shoreline_1980.shp b/notebooks/data/shorelines/shorelines/Shoreline_1980.shp new file mode 100644 index 0000000000000000000000000000000000000000..165c721c14af284ed554405a91f468cb4f2a7dc6 GIT binary patch literal 2444 zcma*pdpK2D9|!QGq)>569JjNLO7~PIMN#V{xkYBu$w-<~REj!g zCR3{EU~*S-J8pAa%0x9G*Ir%@@qRr|`>FSR`s4NZ=W~90t^ND0{o8vj24j&7$3HmPcxPm$T>bw8_x5c1XG|NWx`gCTkT|CtLH zGR}P(E3$SG%Z###p|*8|AefLxO`Ik%d~N?wR}((?>RWF|L-;53?8tPp=+lll{E!lZIfO@dR7J1e?tI=+`~-G$Cqbg9;o5 zMLa|6QWfB;1m%&lQz#OWYV*q)_-B66A3RBl98O9!$rVZr!?DZ#qSOPm8ZILp-}RkaGxThNoRKf#0i^IbWJV5u0fp zB7JzmWuk743`H(B*BsphZ!yjYWXV#5;vXCO4*omjmhDA2EAdVCQMmh|FYk9a%FjkI z99HPjl+=M6_EZ*D!%vpVjizJ1>kSfPFJTXl)BLHhx-d7T3(hPnbk&olNI*^H@pth0 z`fUqpkdIuFXLk)OU8%Bu3H)5?he|$Nb+Wxs4f%T~C|M=JdJRF5;nP0HopmlJ*uwf- zipV|0MRN<(nXsjUdqFPz&y4c%Myy|W^b|oIT2X)dq2I z4FOk~Ns*jRyZ0RUN}F)1F-+etSIc8448Fh$QZhu`?f%T&MiINTJ$lWs+$kdgL!BbJ zz5UBXa7Sgr@| zm>+L>){;#TlHB4n`TisY8M1<4y52>xGArz0y1sii8pv8W#7|`+%>qm(1 zkQ|Q)bGi#^SuePg}LYEX;8$t{gt#ooRL-bA>=C_ ze|o6Q5AhQzw$@=^#7nqut}pwBBDI&=PI)4pqG2$d4_``aIMx0{@%AMIudc(p&jdDY+*%t_kk+JbK??bTEO)E z>3%J}u8~`gd`g{WN}oqR-u7ZNuf{%T-`9~I0DoMs@Hz*U6z@Ch1k?Lu#dO&|6FAYK zkLQTENt{8!BKX_T@?KfECnYPD3I9{EIprtJZ@e_CZv^{n{-^qs@4CI}fg>OA3U*?B z>Fdqq|0>sn-(Gp{umIz=TDF>uQP`iD!NN7L^QPIwEVxhB&}$RC?zYO+#dyAS{E1TY zqc`YRdVKUUR;M(a;^p~L0oSjJId-fB{h>uUN6vH@QA#4>*F^$mg_l!-9%V54LZ;v^?r}Vi( zsnN}D!xV~?d^%?oa*Fo3OMJe5PME76pMn0c7pPCp$1xIV*I_>|Jn+o&9h{gqWbX(^ zinMFHVS4{>Wu=dNfG0kk4~DW^W=_Dbg9hTfabBS7q0bkGr9woL_3|p4EG%)}aLeZ= ztH4)B@2ol_W)tO;Jua(YiV!Z literal 0 HcmV?d00001 diff --git a/notebooks/data/shorelines/shorelines/Shoreline_1989.cpg b/notebooks/data/shorelines/shorelines/Shoreline_1989.cpg new file mode 100644 index 0000000..3ad133c --- /dev/null +++ b/notebooks/data/shorelines/shorelines/Shoreline_1989.cpg @@ -0,0 +1 @@ +UTF-8 \ No newline at end of file diff --git a/notebooks/data/shorelines/shorelines/Shoreline_1989.dbf b/notebooks/data/shorelines/shorelines/Shoreline_1989.dbf new file mode 100644 index 0000000000000000000000000000000000000000..3db3371d593a9eaf0a1fd887418f2a632f76c57b GIT binary patch literal 77 ucmZRsU}9usU|?`$;0BVIz{N4d6)NfsqPftN@G2NuT3G5DnCTjsO923cas+|^ literal 0 HcmV?d00001 diff --git a/notebooks/data/shorelines/shorelines/Shoreline_1989.prj b/notebooks/data/shorelines/shorelines/Shoreline_1989.prj new file mode 100644 index 0000000..b9cf562 --- /dev/null +++ b/notebooks/data/shorelines/shorelines/Shoreline_1989.prj @@ -0,0 +1 @@ +PROJCS["WGS_1984_UTM_Zone_45N",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["Meter",1]] \ No newline at end of file diff --git a/notebooks/data/shorelines/shorelines/Shoreline_1989.qpj b/notebooks/data/shorelines/shorelines/Shoreline_1989.qpj new file mode 100644 index 0000000..e9f9151 --- /dev/null +++ b/notebooks/data/shorelines/shorelines/Shoreline_1989.qpj @@ -0,0 +1 @@ +PROJCS["WGS 84 / UTM zone 45N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["Easting",EAST],AXIS["Northing",NORTH],AUTHORITY["EPSG","32645"]] diff --git a/notebooks/data/shorelines/shorelines/Shoreline_1989.shp b/notebooks/data/shorelines/shorelines/Shoreline_1989.shp new file mode 100644 index 0000000000000000000000000000000000000000..6b9d29216755af2963dce377db8ba13584c284d4 GIT binary patch literal 604 zcmZQzQ0HR63K;cXFf%X!5kqEg6W8Qla*i1ui#6IB9UU`|m2OT|l6RCSF5?bsadgD0 z9aWGK$o)Z#Ss;ZnP`$}jZqsk@AlV~&+-wCuf**D8)6{SgdB@+y4Sd`{cSu~G8)_~l z?|84IOYlH5f^X~;D?Ay<59F9X<(jm-QC|X7f630UJ%AUXp7WfPg(e4rFZb-`iI2<(^-nk4=nVQN z2iLDYU-wkeA2~;#hbC%=K=A^Nr_2Xh%Dh1L-U!V7#r0bb?!Rft61!dj)n`>~lAQvS z|C_gd#X}ZEc-;Bk(s7Yh-qC2)RS6zoc)|F0?=Xp50{JlYV$SJe9zcGM@vIq#3{om!zDv*X)+`YC=Tg17?MH? zNhF>KC*l}Vr*bnyGFQeF%9z?YU(a(_y5~86T#tV~`}?l-zVC0n@4FU_wwyux+dulT z0U;U<|Fp-g4;ni^a>;wenzY|SNixdlN~6CbL9RNmTli`iN&fBS|NEl=jYePp|J(}= zX&L{$R^&gjdfy8ZWS5wfm?ip2xL#uXanZc*hHTqev5+8N>A$rxKt7$HS#uK3$jA}X zgLms*O8A9NkoVKN?e^^V@XFSn#j-GePj2SR1qA6+SO1C$$0^!6--bW=hKP&8 zr?aYyz31F!bc}z3Bu~9_XSl(Yi{&Lg!`!|X58n$BEH4;h1WIarcJ^& z)tAo%eBqM6cZkUj!~SpIU2NrZ$>7TA=>9o3IQvP$5eGA6yWpNi+jj3yT+*{v)4URH zvGJKVeiw&8L@Ej>QD_)|j4##V?051oHQrw9>TWrh-t?tA6uEb|n$lu;J=@{UaX8AuTyV}s zt){IruvSow(iiL#56gsAw?1>pDW;q92>kiU>z;9Vv!KP=L3p96P?j6&Ra-tGH~?R( z4hmm}=TVl!SMG*S40em0!SnoJ;${B|rq&yEKWcrRn~AwQj@(r*uu>Q6o9h2s-v|9R z*x_i&C>`V5Sh_dR3i~5o+`x4a%-VW(uORjpHJ|$a$mll=f@IMS6*G|=+16;j6rIl- z)@esrFD6Js^}4M>$oV>(1exOV{hhOJx6qOxNEf9?yQVRow^1vUXC;ZR^Z&^$Vxi;` zf*j~CsU1dM%Q^h-1SwoEZ8Opb_bw4Rue5Z2{+z~S+cj*0-1ejUjuzw&9xZ1Ej_C-y} z6JO7@A&cOmSOtRIEyF!fiuT7kSN@>MB}j|xRM-2klNUpoOU%zlBFytY8mI zm>pxPS_=Q##p5}^a)<7`=6_@A9Hw&0+EPDp!@s$oSbnC!+9F4{Y}+_rn(|~3i*Ki;VmM_sq3QkWhm73J`@f=-oJ~7oT~Rg(CaU2;oh@4PloV3*k)er z^{|BOhOLEg%*voT8@No(+b84JKTC;PWim@esJeKW?c%T;b4PYYf}#N=YsUJKW;}a(47PhGcJrew zLC&;IGs9q^lFsTq@bg}HN(yZ9C~uJ~^1w|Ev%WA@ z@2Ty+tCqtdZ5x?;kxT0;507C#Q}u|r5NVzZm%r`f9z|Xx6VUDpQ}w0x|13XL?G$q3 z(=B-%x6Mbe|!!8R{i86NP8A;-R1 zoUf%;Z6^ERjI6wpH*l1(F~bk8VYLifz_cUd_R;X`*`d4^oX^S3dyPqOXL1rd0nT*v zbV`N?M)&`#3+FraoyTvf;+(_zPkBd>#f26zf;7k(3XVtne0j^dDEPCeut*FX_I_W{ z0Nx)P8QhXcSfacvCJwH;mL_rnzP2;*`83`)8Ozi{0^zh3MQ;k>ujB2yKP3zcn5{P7 ziF{2`uIUSr`S}jmjY`YFSFZ2Mw@1!ftq=eT!=9>dN?N5?MP1(!<|jO5Cf8!z{N4d6)NfsqPftNz$Agfejq7sW>f{d3Wk=J=DG%kx<)1n MU|^_cYG5D*06hi=1ONa4 literal 0 HcmV?d00001 diff --git a/notebooks/data/shorelines/shorelines/Shoreline_1997.prj b/notebooks/data/shorelines/shorelines/Shoreline_1997.prj new file mode 100644 index 0000000..b9cf562 --- /dev/null +++ b/notebooks/data/shorelines/shorelines/Shoreline_1997.prj @@ -0,0 +1 @@ +PROJCS["WGS_1984_UTM_Zone_45N",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["Meter",1]] \ No newline at end of file diff --git a/notebooks/data/shorelines/shorelines/Shoreline_1997.qpj b/notebooks/data/shorelines/shorelines/Shoreline_1997.qpj new file mode 100644 index 0000000..e9f9151 --- /dev/null +++ b/notebooks/data/shorelines/shorelines/Shoreline_1997.qpj @@ -0,0 +1 @@ +PROJCS["WGS 84 / UTM zone 45N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["Easting",EAST],AXIS["Northing",NORTH],AUTHORITY["EPSG","32645"]] diff --git a/notebooks/data/shorelines/shorelines/Shoreline_1997.shp b/notebooks/data/shorelines/shorelines/Shoreline_1997.shp new file mode 100644 index 0000000000000000000000000000000000000000..1ae9f510afb6a0e536289f80539677be5131fbd0 GIT binary patch literal 652 zcmZQzQ0HR63K-p9Ff%X!5yP(&)1{<;$vL*V&s4qG=;#=m&ZQzJFYlOl;{yAJ7Dq>{ z+EE1=85kG^h%pPOkU<`**NIuC`~)w;o_llWh|Lf{@aL>|zg8|J@7QH;&s73+#|pm9 zsryCc9dlM36k62m=*YbL-jO^hc}JsFS0#9W{6LQRQ?5zNJKk}rmf6(g=*TbS6|zlM z-toukmvUu5{<}r;Cd=dye3(CPulcN~jif&FftE5a5`W*?zbX%a;R3S{7EWmjajNsh z|&eeGtf>mMpRB70|r)@)c6|f&4{>nmvse xaA5et_{L7L!jpmg-c?6-WU|ORF6C1b+6d(T&0D|XA&~#OxPgxw7+>h|3jjpp;FSOX literal 0 HcmV?d00001 diff --git a/notebooks/data/shorelines/shorelines/Shoreline_1997.shx b/notebooks/data/shorelines/shorelines/Shoreline_1997.shx new file mode 100644 index 0000000000000000000000000000000000000000..4ce0c455f272215030658f19639827f88053389a GIT binary patch literal 108 zcmZQzQ0HR64$NLKGcW)V!><$5rKEq!IkvjbRK3{f=op*Mr6MOU@0fSv0{ey*M@Q`1 LQACXx7#IZrOXvjO5Cf8!z{N4d6)NfsqPftNz$Agfejq7sW>f{d3PuJ7#=3@vx<;l7 MU|^(YU|=8x06T96?EnA( literal 0 HcmV?d00001 diff --git a/notebooks/data/shorelines/shorelines/Shoreline_2003.prj b/notebooks/data/shorelines/shorelines/Shoreline_2003.prj new file mode 100644 index 0000000..b9cf562 --- /dev/null +++ b/notebooks/data/shorelines/shorelines/Shoreline_2003.prj @@ -0,0 +1 @@ +PROJCS["WGS_1984_UTM_Zone_45N",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["Meter",1]] \ No newline at end of file diff --git a/notebooks/data/shorelines/shorelines/Shoreline_2003.qpj b/notebooks/data/shorelines/shorelines/Shoreline_2003.qpj new file mode 100644 index 0000000..e9f9151 --- /dev/null +++ b/notebooks/data/shorelines/shorelines/Shoreline_2003.qpj @@ -0,0 +1 @@ +PROJCS["WGS 84 / UTM zone 45N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["Easting",EAST],AXIS["Northing",NORTH],AUTHORITY["EPSG","32645"]] diff --git a/notebooks/data/shorelines/shorelines/Shoreline_2003.shp b/notebooks/data/shorelines/shorelines/Shoreline_2003.shp new file mode 100644 index 0000000000000000000000000000000000000000..5a093ea98e9676c5c1c939d892be101fe0f89d1f GIT binary patch literal 1004 zcmZQzQ0HR63K+k=U}j(dB8Fclrb|ixl5^Zs`%eE-gQMe(u7t&RmE;}&aC2}@YH@VL zsvT93k%58n05N6(6*8DY^#-lF^R}8z-qF}8R(Nu=qhpTotQnE4nEcM=+xg!D<##ni zWgG;m&vo$R)dafhMc4;%NltmkWy{v`SOEDg9}Bj>;6}JR|K>(D1px%V+Cp|)y0Efe>{i5=YckeKXTLR_N6yj9pi_1G^3s^}=1NkaOoKNc{ zoTjkS{_`a2U6g+|ax_c%r zdUEoPnGdv-d6D?vg_Bg?H##~ROe`rmCL{0Y^Uy@?5Rf0pF@MT6p!;F`ExB@E*?|7j ze`Kdw4wQ%S_llNjMFRP-@PVZhSa`ztbJn|GD;JV?6ngBTqXSeA;|o_`P}>aTM;-h$ zH5?e;=zMR_wc6H5=A-jr_J5BqHdP142h4p}pLmFhOCZdH@%OF$tMUM79!x#V|F8eB zFS`$nf0#T^iP5q5K=&F{9aH`XRG(bsHvI+Gqn>irT>N>|J$aM<$EB<07|y zB^e<9{0zyTolFS*>hpC^75$Nen+MBRF#Rw-EPdPv%>BjnTh8&0OSQ}A!>DKr{`Q9?|m;0J@B7U;qFB literal 0 HcmV?d00001 diff --git a/notebooks/data/shorelines/shorelines/Shoreline_2003.shx b/notebooks/data/shorelines/shorelines/Shoreline_2003.shx new file mode 100644 index 0000000000000000000000000000000000000000..afbb04f0bd374f6b99b8f75b25b1c7e33c911ab1 GIT binary patch literal 108 zcmZQzQ0HR64$NLKGcW)V!><$5rKEq!Iqs=_r+=xz(eXxC!s5G1@{WJFIXEY^I67k2 Mjv{Krz`%F_0Kpp&&Hw-a literal 0 HcmV?d00001 diff --git a/notebooks/data/shorelines/shorelines/Shoreline_2008.cpg b/notebooks/data/shorelines/shorelines/Shoreline_2008.cpg new file mode 100644 index 0000000..3ad133c --- /dev/null +++ b/notebooks/data/shorelines/shorelines/Shoreline_2008.cpg @@ -0,0 +1 @@ +UTF-8 \ No newline at end of file diff --git a/notebooks/data/shorelines/shorelines/Shoreline_2008.dbf b/notebooks/data/shorelines/shorelines/Shoreline_2008.dbf new file mode 100644 index 0000000000000000000000000000000000000000..7407d93a2dbbbf187ff51ed87660835eb0a554ed GIT binary patch literal 120 zcmZRsVPRurU|>jO5Cf8!z{N4d6)NfsqPftNz$Agfejq7sW>f{d3PuJ77P^K;x<)1n MU|^tUYG5D*06W literal 0 HcmV?d00001 diff --git a/notebooks/data/shorelines/shorelines/Shoreline_2008.prj b/notebooks/data/shorelines/shorelines/Shoreline_2008.prj new file mode 100644 index 0000000..b9cf562 --- /dev/null +++ b/notebooks/data/shorelines/shorelines/Shoreline_2008.prj @@ -0,0 +1 @@ +PROJCS["WGS_1984_UTM_Zone_45N",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["Meter",1]] \ No newline at end of file diff --git a/notebooks/data/shorelines/shorelines/Shoreline_2008.qpj b/notebooks/data/shorelines/shorelines/Shoreline_2008.qpj new file mode 100644 index 0000000..e9f9151 --- /dev/null +++ b/notebooks/data/shorelines/shorelines/Shoreline_2008.qpj @@ -0,0 +1 @@ +PROJCS["WGS 84 / UTM zone 45N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["Easting",EAST],AXIS["Northing",NORTH],AUTHORITY["EPSG","32645"]] diff --git a/notebooks/data/shorelines/shorelines/Shoreline_2008.shp b/notebooks/data/shorelines/shorelines/Shoreline_2008.shp new file mode 100644 index 0000000000000000000000000000000000000000..77eb5e12c6f195d6e7146f62a4b059600033725b GIT binary patch literal 780 zcmZQzQ0HR63K-j7Ff%X!5yP(&)1{<;$vJ-UK5Y`!;OJ;Dv83dfjJ)F?ZVt{#Esl;@ zwWA6$GB7X(5MvflA%i+p@5bY7=?;AIj%8;fiY}RmK>3MAQl$xk@{WHef16?pl)pE3j@S&Kym0jewaq~Ogn&D42K@4l--VM@-UInx zwni^c;E{J+4qDfLI337`nTV5y7lX~oTEY2 zG39?i^I+k0d(CG>ZJ>FXy-i$`f#J6Jo|x=nApfxCx=g44a*m>_?@J#9@_Sbu*^$X2 z@3^FFp14*sf`71dibyGtzfSS}jY?*DM`Nd0;mJV0+_Re}J_7lj%eV8t1@bE0?YT;Te3<{>@g#cOYz5H&Fg{O-(XsbJ2>mcV%>37X z*q7ZGmUj$r3>LTtv=7E#%BLo@5y-dnI#KE_D)0E~_7C9}Ab$nl=G6T_zL;~mm<$5rKEq!IezgzZ4%Ys=x8vpq~w^4yyG8k4$es}j*i&1 Mqlg+YFfaxH0B}?e^#A|> literal 0 HcmV?d00001 diff --git a/notebooks/data/shorelines/shorelines/Shoreline_2014.cpg b/notebooks/data/shorelines/shorelines/Shoreline_2014.cpg new file mode 100644 index 0000000..3ad133c --- /dev/null +++ b/notebooks/data/shorelines/shorelines/Shoreline_2014.cpg @@ -0,0 +1 @@ +UTF-8 \ No newline at end of file diff --git a/notebooks/data/shorelines/shorelines/Shoreline_2014.dbf b/notebooks/data/shorelines/shorelines/Shoreline_2014.dbf new file mode 100644 index 0000000000000000000000000000000000000000..982598dfb33bea2fd16aeda20f21f3967e519a52 GIT binary patch literal 120 zcmZRsVPRurU|>jO5Cf8!z{N4d6)NfsqPftNz$Agfejq7sW>f{d3PuKoCb|ZOx(4P7 MU|^_cYG5D*06UQe@&Et; literal 0 HcmV?d00001 diff --git a/notebooks/data/shorelines/shorelines/Shoreline_2014.prj b/notebooks/data/shorelines/shorelines/Shoreline_2014.prj new file mode 100644 index 0000000..b9cf562 --- /dev/null +++ b/notebooks/data/shorelines/shorelines/Shoreline_2014.prj @@ -0,0 +1 @@ +PROJCS["WGS_1984_UTM_Zone_45N",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["Meter",1]] \ No newline at end of file diff --git a/notebooks/data/shorelines/shorelines/Shoreline_2014.qpj b/notebooks/data/shorelines/shorelines/Shoreline_2014.qpj new file mode 100644 index 0000000..e9f9151 --- /dev/null +++ b/notebooks/data/shorelines/shorelines/Shoreline_2014.qpj @@ -0,0 +1 @@ +PROJCS["WGS 84 / UTM zone 45N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["Easting",EAST],AXIS["Northing",NORTH],AUTHORITY["EPSG","32645"]] diff --git a/notebooks/data/shorelines/shorelines/Shoreline_2014.shp b/notebooks/data/shorelines/shorelines/Shoreline_2014.shp new file mode 100644 index 0000000000000000000000000000000000000000..bdc8e7ea02ada177c437af8ad1fd7b6e1ff63de8 GIT binary patch literal 892 zcmZQzQ0HR63K;jjU}j(dB8Fclrb|ixl5@QAB*ti3gQKIt#FCO@GV+e5ML8S`TO1v+ zYDX1hWME+IAjT}9LIypk-sCE`={I-~_Dl%4<7U8*;O|u{`qnNe?-+RV7FR0J9k2he zFS{=+?U>n^X6T$~)$)I4HCT$ZwzC;ksT--f>CUJaH``U&V;?X`Q6J zqo1IQ^o1sbzp^Se$xcDyx7}Azhye1Lci%gbCnfKg`9MpV7m45MK2!B#qoZRW$NVYR zq~#rjt1qZ+2J#P_>1^=>hLgAFT5W3}zo`D?mS;fyF#hCkpRara+MnUESfdRn|2?|c zR9#%&QU8&hW;u{wZ6UiY9q6B%HBWS8fqb44qhs%dUIgEXS*H91kiS5zL6;9`e*VpkY6?L8 zLXSOkbbx%nq;@s|p!s`6%d{eq__suI)RzGHF!OyLny4KD@?r5~P<2fCACNDq+jhKw zTi)^Zn$L>b!0?*MY2dMu9l>9x`2I#Ev%Dirz50CJQ$>H|;CxuR6A_M3v;yjf@nP|E zBQWON4u(K}L8iBTTTmwR^e z#7Ch0*#cG)(!lg!AItKR5y-z+(j|BR$iMTwrQ;&2yyNfU20m_J`r9(N%B*!`p5Ik*t~r5UrY{{Zq2FI~*p43tMt&j7<%IpF{R literal 0 HcmV?d00001 diff --git a/notebooks/data/shorelines/shorelines/Shoreline_2014.shx b/notebooks/data/shorelines/shorelines/Shoreline_2014.shx new file mode 100644 index 0000000000000000000000000000000000000000..42039df4bf64491ddeddb4e8f8021b0eb4daffbd GIT binary patch literal 108 zcmZQzQ0HR64$NLKGcW)V!><$5rKEq!Io@~@V>GS7(a~UHNy#x8c}LTt9FB!8j*i&1 Mqlg+YFfeui0E6EThX4Qo literal 0 HcmV?d00001 diff --git a/notebooks/data/shorelines/shorelines/Shoreline_2018.cpg b/notebooks/data/shorelines/shorelines/Shoreline_2018.cpg new file mode 100644 index 0000000..3ad133c --- /dev/null +++ b/notebooks/data/shorelines/shorelines/Shoreline_2018.cpg @@ -0,0 +1 @@ +UTF-8 \ No newline at end of file diff --git a/notebooks/data/shorelines/shorelines/Shoreline_2018.dbf b/notebooks/data/shorelines/shorelines/Shoreline_2018.dbf new file mode 100644 index 0000000000000000000000000000000000000000..69068e0ebecc7a17f5fc22f50cc2380209a365e9 GIT binary patch literal 120 zcmZRsVPRurU|>jO5Cf8!z{N4d6)NfsqPftNz$Agfejq7sW>f{d3PuKo7P^K;x&|f+ MU|^_cZfYO}06Xpm`~Uy| literal 0 HcmV?d00001 diff --git a/notebooks/data/shorelines/shorelines/Shoreline_2018.prj b/notebooks/data/shorelines/shorelines/Shoreline_2018.prj new file mode 100644 index 0000000..b9cf562 --- /dev/null +++ b/notebooks/data/shorelines/shorelines/Shoreline_2018.prj @@ -0,0 +1 @@ +PROJCS["WGS_1984_UTM_Zone_45N",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["Meter",1]] \ No newline at end of file diff --git a/notebooks/data/shorelines/shorelines/Shoreline_2018.qpj b/notebooks/data/shorelines/shorelines/Shoreline_2018.qpj new file mode 100644 index 0000000..e9f9151 --- /dev/null +++ b/notebooks/data/shorelines/shorelines/Shoreline_2018.qpj @@ -0,0 +1 @@ +PROJCS["WGS 84 / UTM zone 45N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",87],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["Easting",EAST],AXIS["Northing",NORTH],AUTHORITY["EPSG","32645"]] diff --git a/notebooks/data/shorelines/shorelines/Shoreline_2018.shp b/notebooks/data/shorelines/shorelines/Shoreline_2018.shp new file mode 100644 index 0000000000000000000000000000000000000000..010a0c18cbeec0f35554fe0bd2e7febf96df6231 GIT binary patch literal 956 zcmZQzQ0HR63K;LbU}j(dB8El1`vO1wlyi(c^>f?i21iE++kz)^WaS;>)e|&2S{xm* zYDX1hWME)iL5x{Ig$zbey@jdbvyXAhJ4VL&thofVmtAopPYN%P4|Rv+?;CmYeDaQ| zTEepq1La|ShhzILd;sz-)BL7q2+BM9OlsZt5Xe8jtXyP~sJx@Vw8fITjgF4fm#-6W zk(PIqNy=iE1M-6=aaivG@*kvjBxM5mFn>;;d;k1lApd0gp8hp5@{W&ISUz0ZgpltQ zIhDZQ?C97MB(_Th7%qRBE3A(I`7rZt$g326MB>j@b~{wr z5qU?27iU>oL!uT-%urG6vU=Tp08(93p z(vkgAPMJ6^dB^O}YGRc@{nPk8JXkpp=B-S5Fi(XI;s5d_m*n@b$UA=6zR~wG&^-+2 zy#dnq@ldj64fOwT iy: - return line_end + res = line_end else: - return line_start + res = line_start else: ix = line_start[0]+u*(line_end[0]-line_start[0]) iy = line_start[1]+u*(line_end[1]-line_start[1]) - return ix, iy + res = (ix, iy) + + return res # [3, 4] -def fixed_interval_points(infc, interval, flipline=False, save=False, outfc=None, lineslope=False): - """Generate fixed interval points along polyline. - """ +def mid_point(p1, p2, l1, l2): + iX = p1[0]+((p2[0]-p1[0])*(l1/l2)) + iY = p1[1]+((p2[1]-p1[1])*(l1/l2)) + pts = [iX, iY] + return pts - def mid_point(p1, p2, l1, l2): - iX = p1[0]+((p2[0]-p1[0])*(l1/l2)) - iY = p1[1]+((p2[1]-p1[1])*(l1/l2)) - pts = [iX, iY] - return pts - # get nodes and objectids - if flipline == True: - openfile = ogr.Open(infc) - in_layer = openfile.GetLayer(0) - objects, nodes = flip_line(in_layer) - else: - objects, nodes = reading_polyline(infc) - - # generate points +def interval_point(objects, nodes, interval): points = [] slopes = [] for n, i in zip(objects, nodes): tDist = 0 # total distance vPoint = None # previous point for pnt in i: - if not (vPoint is None): - thisDist = dist_calc(vPoint, pnt) + if not isinstance(vPoint, type(None)): + thisDist = dist_calc(list(vPoint), list(pnt)) maxAddDist = interval - tDist if (tDist+thisDist) > interval: pCnt = int((tDist+thisDist)/interval) @@ -100,11 +93,11 @@ def mid_point(p1, p2, l1, l2): maxAddDist = interval - tDist nPoint = mid_point( vPoint, pnt, maxAddDist, thisDist) - slope = line_slope(vPoint, nPoint) + slope = line_slope(list(vPoint), nPoint) points.append(nPoint+[n]) slopes.append(slope) vPoint = nPoint - thisDist = dist_calc(vPoint, pnt) + thisDist = dist_calc(list(vPoint), list(pnt)) tDist = 0 tDist += thisDist else: @@ -112,8 +105,31 @@ def mid_point(p1, p2, l1, l2): else: tDist = 0 vPoint = pnt + return points, slopes + + +def fixed_interval_points(infc, interval, flipline=False, save=False, outfc=None, lineslope=False): + """Generate fixed interval points along polyline. + """ + + # check scr projection and change interval accordingly + src_epsg_code = get_shapefile_epsg_code(infc) + if src_epsg_code == 4326: + interval = interval/DEG_TO_KM/1000.0 + + # get nodes and objectids + if flipline == True: + openfile = ogr.Open(infc) + in_layer = openfile.GetLayer(0) + objects, nodes = flip_line(in_layer) + else: + objects, nodes = reading_polyline(infc) + + # generate points + points, slopes = interval_point(objects, nodes, interval) # save if needed + res = None if save == True: openfile = ogr.Open(infc) in_layer = openfile.GetLayer(0) @@ -141,12 +157,11 @@ def mid_point(p1, p2, l1, l2): # Flush shapeData.Destroy() - - # return points - if lineslope == True: - return points, slopes + elif lineslope == True: + res = (points, slopes) else: - return points + res = points + return res # [5] @@ -328,6 +343,19 @@ def extract_pixel_value(imgfile, point_list): return pnt_values +# [13] +def find_wgs2utm_epsg_code(lon: float, lat: float): + """Based on lat and lng, return best utm epsg-code""" + utm_band = str((math.floor((lon + 180) / 6) % 60) + 1) + if len(utm_band) == 1: + utm_band = '0'+utm_band + if lat >= 0: + epsg_code = '326' + utm_band + return epsg_code + epsg_code = '327' + utm_band + return epsg_code + + # Reference: # [1] https://gis.stackexchange.com/questions/57964/get-vector-features-inside-a-specific-extent # [2] https://gis.stackexchange.com/questions/396/nearest-neighbor-between-point-layer-and-line-layer @@ -341,6 +369,7 @@ def extract_pixel_value(imgfile, point_list): # [10] https://stackoverflow.com/questions/24467972/calculate-area-of-polygon-given-x-y-coordinates # [11] http://stackoverflow.com/questions/13416764/clipping-raster-image-with-a-polygon-suggestion-to-resolve-an-error-related-to # [12] http://gis.stackexchange.com/questions/46893/how-do-i-get-the-pixel-value-of-a-gdal-raster-under-an-ogr-point-without-numpy +# [13] https://gis.stackexchange.com/questions/269518/auto-select-suitable-utm-zone-based-on-grid-intersection # https://gis.stackexchange.com/questions/392515/create-a-shapefile-from-geometry-with-ogr # https://www.gis.usu.edu/~chrisg/python/2009/lectures/ospy_slides2.pdf diff --git a/rsgtools/utils.py b/rsgtools/utils.py index 08a4c98..488ca75 100644 --- a/rsgtools/utils.py +++ b/rsgtools/utils.py @@ -12,21 +12,32 @@ import random import datetime import numpy as np +import geopandas as gpd +import pandas as pd +import glob +import collections +import operator from osgeo import ogr, osr, gdal, gdalconst +from shapely.geometry import Point, mapping, LineString +from shapely.ops import split, snap +from fiona import collection +from fiona.crs import from_epsg from ensure import ensure_annotations -from typing import Any +# from typing import Any from rsgtools import CustomException, logger +from consts import DEG_TO_KM +# Set GDAL/Geopandas Configuration +gdal.SetConfigOption('SHAPE_RESTORE_SHX', 'YES') -@ensure_annotations -def dist_calc(p1: list, p2: list) -> float: + +def dist_calc(p1, p2): """Calculate distance between two points""" return math.sqrt((p1[0]-p2[0])**2+(p1[1]-p2[1])**2) -@ensure_annotations -def line_slope(p1: list, p2: list) -> Any: +def line_slope(p1, p2): """Calculate slope of a line""" return "Inf" if p1[0] == p2[0] else ((p2[1]-p1[1])/(p2[0]-p1[0])) @@ -109,50 +120,54 @@ def reading_polyline(inshp, shptype='polyline', fieldname=None, isnode=False): # return results if fieldname != None: - if isnode == True: - return nodes, objects, fdisc + if isnode: + res = (nodes, objects, fdisc) else: - return fdisc + res = fdisc else: - return objects, nodes + res = (objects, nodes) + + return res -def writting_polyline(xylists, outfile, inlayer='', epsgno=0): +def write_line_shapefile(line_coordinates, out_line_file, ref_line_file=None, dst_epsg_code=None): """ Create new line shapefile. """ # Set up the shapefile driver driver = ogr.GetDriverByName("ESRI Shapefile") + if os.path.exists(out_line_file): + driver.DeleteDataSource(out_line_file) # create the data source - ds = driver.CreateDataSource(outfile) + ds = driver.CreateDataSource(out_line_file) - if len(inlayer) > 0: + if ref_line_file != None: + openfile = ogr.Open(ref_line_file) + ref_lyr = openfile.GetLayer(0) # get the spatial reference system - srs = inlayer.GetSpatialRef() - # create one layer - layer = ds.CreateLayer("line", srs, ogr.wkbLineString) - elif epsgno > 0: + srs = ref_lyr.GetSpatialRef() + elif dst_epsg_code != None: # create the spatial reference system srs = osr.SpatialReference() - srs.ImportFromEPSG(epsgno) - # create one layer - layer = ds.CreateLayer("line", srs, ogr.wkbLineString) + srs.ImportFromEPSG(dst_epsg_code) else: raise CustomException( - "SpatialReference not define, pass inlayer or epsgno arguments to the function") + "SpatialReference not define, pass inlayer or dst_epsg_code arguments to the function") + + # create one layer + dst_layer = ds.CreateLayer('mylyr', srs, ogr.wkbLineString) # Add an ID field idField = ogr.FieldDefn("id", ogr.OFTInteger) - layer.CreateField(idField) - + dst_layer.CreateField(idField) # Create the feature and set values - featureDefn = layer.GetLayerDefn() + featureDefn = dst_layer.GetLayerDefn() feature = ogr.Feature(featureDefn) # loop over line_list - for n, xylist in enumerate(xylists): + for n, xylist in enumerate(line_coordinates): # Creating a line geometry linegeom = ogr.Geometry(ogr.wkbLineString) @@ -161,8 +176,8 @@ def writting_polyline(xylists, outfile, inlayer='', epsgno=0): feature.SetGeometry(linegeom) feature.SetField("id", n+1) - - layer.CreateFeature(feature) + # create feature + dst_layer.CreateFeature(feature) feature = None # Save and close DataSource @@ -305,7 +320,7 @@ def offset_random_point(lon, lat, offset=10, unit='km'): if offset > 0: if unit == 'km': # 1 degree = 111 km. - a0 = offset*(1/111.0) + a0 = offset*(1/DEG_TO_KM) else: raise Exception("convert offset to km.") @@ -442,3 +457,198 @@ def get_shapefile_epsg_code(in_shp): shp_lyr = shp_ds.GetLayer() src_epsg_code = int(shp_lyr.GetSpatialRef().GetAttrValue("AUTHORITY", 1)) return src_epsg_code + + +def select_by_location(select_feature_from=None, feature_overlap_with=None, overlap_method=None, save=False, out_selected_features=None, col_name=None): + if isinstance(select_feature_from, str): + get_selected = gpd.read_file(select_feature_from) + else: + get_selected = select_feature_from + + if isinstance(feature_overlap_with, str): + selected_by = gpd.read_file(feature_overlap_with) + else: + selected_by = feature_overlap_with + + selected_features = gpd.sjoin( + get_selected, selected_by, predicate=overlap_method) + + if isinstance(col_name, str): + selected_features.rename(columns={'index_right':col_name}, inplace=True) + + res = None + if save: + selected_features.to_file(out_selected_features) + else: + res = selected_features + + return res + + +def split_lines_at_points(line_feature, points, snap_dist=None, src_epsg_code=None, save=False, out_line_feature=None): + if src_epsg_code == 4326: + tolerance = snap_dist/DEG_TO_KM/1000 + else: + tolerance = snap_dist + # create point dataframe + df = pd.DataFrame( + { + "Latitude": [y for _, y in points], + "Longitude": [x for x, _ in points], + } + ) + # create points geodataframe + pnt_gdf = gpd.GeoDataFrame(df, geometry=gpd.points_from_xy( + df.Longitude, df.Latitude), crs=f"EPSG:{src_epsg_code}") + + if isinstance(line_feature, str): + ln_gdf = gpd.read_file(line_feature) + else: + ln_gdf = line_feature + + # get geometry + point_gdf = pnt_gdf.geometry.unary_union + line_gdf = ln_gdf.geometry.unary_union + + # split lines + split_line = split(snap(line_gdf, point_gdf, tolerance), point_gdf) + + # convert geometry collection to geo-dataframe + segments = [feat for feat in split_line.geoms] + gdf_segments = gpd.GeoDataFrame( + list(range(len(segments))), geometry=segments, crs=f"EPSG:{src_epsg_code}") + gdf_segments.columns = ['objectid', 'geometry'] + + res = None + if save: + gdf_segments.to_file(out_line_feature) + else: + res = gdf_segments + + return res + + +def leap_year(y): + if (y % 4.0 == 0) and (y % 100.0 == 0): + if (y % 400.0 == 0): + result = "Leap year", y + else: + result = "Not a leap year", y + elif (y % 4.0 == 0) and (y % 100.0 != 0): + result = "Leap year", y + else: + result = "Not a leap year", y + return result + + +def unlink_files(dir_path=None, file_extent=None, is_file=False, file_path=None): + # search files + if is_file: + flist = glob.glob( + os.path.join( + os.path.dirname(file_path), + os.path.basename(file_path).split('.')[0]+'*' + ) + ) + else: + flist = glob.glob( + os.path.join( + dir_path, + '*.'+file_extent + ) + ) + # remove files + for f in flist: + os.remove(f) + return + + +def write_point_file(points, out_point_shp, dst_epsg_cide): + schema = {'geometry': 'Point', 'properties': {}} + with collection( + out_point_shp, + "w", "ESRI Shapefile", + schema, + crs=from_epsg(dst_epsg_cide) + ) as output: + for x, y in points: + output.write({'properties': {}, 'geometry': mapping(Point(x, y))}) + + +def extend_line_shapefile(line_shapefile, extended_shapefile, max_snap_dist=None, keep_field=None, flip=False): + # compute new coordinates + def new_node(nodes, dist): + x1, y1 = nodes[0] + x2, y2 = nodes[1] + dx = x2 - x1 + dy = y2 - y1 + line_ln = math.hypot(dx, dy) + new_x = x2 + dx/line_ln * dist + new_y = y2 + dy/line_ln * dist + return new_x, new_y + + def accumulate(i): + it = iter(i) + total = next(it) + yield total + for elm in it: + total = operator.add(total, elm) + yield total + return + + def extract_line_geoms(line_gdf): + nodes = [] + line_ids = [] + for i in line_gdf.itertuples(): + objid = i.Index + geom = i.geometry + coords = list(geom.coords) + nodes.append(coords) + line_ids.append(objid) + return line_ids, nodes + + # read line geometry + line2 = gpd.read_file(line_shapefile) + epsg_code = get_shapefile_epsg_code(line_shapefile) + seq_ids = line2[keep_field].tolist() + + # get line ids and line nodes + if flip: + shp_ds = ogr.Open(line_shapefile) + shp_lyr = shp_ds.GetLayer() + line_ids, line_nodes = flip_line(shp_lyr) + shp_lyr = None + shp_ds = None + else: + line_ids, line_nodes = extract_line_geoms(line2) + + if epsg_code == 4326: + max_snap_dist = max_snap_dist*(1/DEG_TO_KM)/1000 + + # count vectices + vert_counts = list(accumulate(collections.Counter(line_ids).values())) + # get the end node of the lines + end_pnts = [pnt for i, pnt in enumerate(line_nodes) if i+1 in vert_counts or i+2 in vert_counts] + # calculate new nodes + new_nodes = [new_node(geom, max_snap_dist) for geom in end_pnts] + # extended line nodes + ext_nodes = [p_nds + [n_nd] for p_nds, n_nd in zip(line_nodes, new_nodes)] + + # construct line feature + line_strings = [] + line_index = [] + for line_coords, line_id in zip(ext_nodes, seq_ids): + line = LineString(line_coords) + line_strings.append(line) + line_index.append(line_id) + + # save line feature + col_dict = {keep_field: [ix for ix in line_index]} + gdf = gpd.GeoDataFrame( + col_dict, + index=range(len(line_index)), + crs='epsg:'+str(epsg_code), + geometry=line_strings + ) + gdf.to_file(extended_shapefile) + return diff --git a/rsgtools/vector_ops/create_buffer.py b/rsgtools/vector_ops/create_buffer.py new file mode 100644 index 0000000..90a271b --- /dev/null +++ b/rsgtools/vector_ops/create_buffer.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +""" +Created on Mon Mar 25 19:29:41 2024 + +@author: USER +""" + +import geopandas as gpd +import pandas as pd +import shapely.ops as sp_ops + +from pyproj import Transformer +from rsgtools.ref_scripts import find_wgs2utm_epsg_code + +def buffer_feature(input_feature, buffer_offset=None, src_epsg_code=None, save=False, out_buffer_feature=None): + if isinstance(input_feature, str): + gdf = gpd.read_file(input_feature) + else: + gdf = input_feature + + # check src projection + if src_epsg_code == 4326: + minx, miny, maxx, maxy = gdf.geometry.total_bounds + dst_epsg_code = int(find_wgs2utm_epsg_code(minx, maxy)) + transformer1 = Transformer.from_crs(f'EPSG:{src_epsg_code}', f'EPSG:{dst_epsg_code}', always_xy=True) + # set geometry + geom_transformed1 = pd.Series([sp_ops.transform(transformer1.transform, geom) for geom in gdf['geometry'].tolist()]) + gdf.set_geometry(geom_transformed1, inplace=True, crs=dst_epsg_code) + # create buffer + gdf_buffer_series = gdf.buffer(buffer_offset) + gdf_buffer = gpd.GeoDataFrame(geometry=gpd.GeoSeries(gdf_buffer_series)) + # re-project to src coordinates + transformer2 = Transformer.from_crs(f'EPSG:{dst_epsg_code}', f'EPSG:{src_epsg_code}', always_xy=True) + # set geometry + geom_transformed2 = pd.Series([sp_ops.transform(transformer2.transform, geom) for geom in gdf_buffer['geometry'].tolist()]) + gdf_buffer.set_geometry(geom_transformed2, inplace=True, crs=src_epsg_code) + + else: + gdf_buffer = gdf.buffer(buffer_offset) + + res = gdf_buffer + if save: + gdf_buffer.to_file(out_buffer_feature) + else: + res = gdf_buffer + + return res + + + +# Reference +# https://github.com/geopandas/geopandas/issues/1175 diff --git a/rsgtools/vector_ops/find_nearest_point.py b/rsgtools/vector_ops/find_nearest_point.py index 3cc025a..106f72c 100644 --- a/rsgtools/vector_ops/find_nearest_point.py +++ b/rsgtools/vector_ops/find_nearest_point.py @@ -43,12 +43,25 @@ def find_closest_point(self): return nearest_pnt -def get_nearest_point(point: str, ref_line_file: Path): +def get_nearest_point(point: list, ref_line_file: Path): pntconfig = PointConfig( - single_point=point + inpoint=None, + single_point=point, + point_offset=None ) plconfig = PolylineConfig( - inline=ref_line_file + inline=ref_line_file, + fnodeid=None, + tnodeid=None, + lineid=None, + seqid=None, + is_xscl_available=None, + outxsclline=None, + uidfield=None, + objectidfield=None, + linefield=None, + interval=None, + offset=None ) obj = FindNearestPoint(pntconfig=pntconfig, plineconfig=plconfig) res = obj.find_closest_point() diff --git a/rsgtools/vector_ops/lines_middle_points.py b/rsgtools/vector_ops/lines_middle_points.py new file mode 100644 index 0000000..ae58c4b --- /dev/null +++ b/rsgtools/vector_ops/lines_middle_points.py @@ -0,0 +1,77 @@ +# -*- coding: utf-8 -*- +""" +Created on Mon Mar 25 21:29:13 2024 + +@author: Debabrata Ghorai, Ph.D. + +Generate middle point of a line. + +""" + +import os +import glob + +from osgeo import ogr +from rsgtools.ref_scripts import interval_point +from rsgtools.utils import dist_calc + + +def generate_lines_middle_point(line_feature=None, out_mid_points=None): + src_ds = ogr.Open(line_feature) + layer = src_ds.GetLayer(0) + # Get input file spatial reference + sr = layer.GetSpatialRef() + # sr.ExportToWkt() + # Create new shapefile + driver = ogr.GetDriverByName('ESRI Shapefile') + if os.path.exists(out_mid_points): + try: + driver.DeleteDataSource(out_mid_points) + except: + pass + flist = glob.glob( + os.path.join( + os.path.dirname(out_mid_points), + os.path.basename(out_mid_points).split('.')[0]+'*' + ) + ) + for f in flist: + os.remove(f) + # create ds + ds = driver.CreateDataSource(out_mid_points) + # Create new shapefile layer + lyr = ds.CreateLayer('mylyr', sr, ogr.wkbPoint) + lyrDef = lyr.GetLayerDefn() + + # calculate mid point of a line + for i in range(layer.GetFeatureCount()): + feature = layer.GetFeature(i) + geom = feature.GetGeometryRef() + pnts = geom.GetPoints() + if not isinstance(pnts, type(None)): + # calc segment dist + lineDist = list() + for p in range(len(pnts)-1): + lineDist.append(dist_calc(pnts[p], pnts[p+1])) + # get mid-length + midLength = sum(lineDist)*0.5 + objects = [i+1] + nodes = [pnts] + points, _ = interval_point(objects, nodes, midLength) + # Point file generation + point = ogr.Geometry(ogr.wkbPoint) + point.SetPoint(0, points[0][0], points[0][1]) + featIndex = 0 + feat = ogr.Feature(lyrDef) + feat.SetGeometry(point) + feat.SetFID(featIndex) + lyr.CreateFeature(feat) + # Flush + layer = None + sr = None + ds.Destroy() + ds = None + driver = None + lyrDef = None + lyr = None + return diff --git a/setup.py b/setup.py index 00000bd..d358d71 100644 --- a/setup.py +++ b/setup.py @@ -14,8 +14,8 @@ def get_requirements(): setup( name='geoutils-rsg', version='0.0.3', - package_dir={"": "geobhumi"}, - packages=find_packages(where='geobhumi'), + package_dir={"": "rsgtools"}, + packages=find_packages(where='rsgtools'), url='https://github.com/dghorai', license='MIT License', author='Debabrata Ghorai, Ph.D.', diff --git a/tests/results/merge_lines.dbf b/tests/results/merge_lines.dbf deleted file mode 100644 index 4ff327de1f24f3239ca31505463dac32674adbc8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 390 zcmZ9_I|_h63`Nm^jo@bi+PDN?{Fj0VHnuLt&8wiy#T1h}X-;&;d1+>|rT6=r!))D_ z@3=pae7|>RRhT+tCA6a(bc^oLJ$gWo=qa?|3a;P^uHXu;;0mtb3a-O-xDMChI$VeA GeQ^OpI4*7g diff --git a/tests/results/merge_lines.prj b/tests/results/merge_lines.prj deleted file mode 100644 index f45cbad..0000000 --- a/tests/results/merge_lines.prj +++ /dev/null @@ -1 +0,0 @@ -GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]] \ No newline at end of file diff --git a/tests/results/merge_lines.shp b/tests/results/merge_lines.shp deleted file mode 100644 index ca13aba378b7fb957486b9e1c6429f6abd3a45b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4620 zcmai&J&ct_6oxMgTwFwCSLJ8%kE<+%%FLG#V>M9gsH?7jaaHhr5BJ%bJFaoE!{*&{=A1L{oH=Jc27`T@ z2WyV$;n(X21N{t^x6RDV?CA5tEsb|mKDVH;zt30v_vtRLxqR}E>jYo7ttWa7+1h+u z<7Ue9hcq56wyZciUW@J}`@NMi_{sAc>$-g9s)lTxd`n|}!KdHW*wEdMb7!Al^YTqy zp6xVt6@2U^4Po|i(RM0)>Ws!*pU>LQ#xB2UyA?j@z3eXjPdly(AMqaV@AE<18Fcx* zC5;M4JP-7F-f?JuNBz6P7aWgp%N1BOO=)KH`m%kmp*!mshFvzV8#O)9MRwi%Xf3>f zkNBLYy45p+ch0Pe!y&xle~`ViXEYk!NI85xRQBLF?$-1`7dt1+lXBtabK>>yl))=c zDM$V)xpFP(9RDox@U>EKoY$`@U-Eg$UhM0af@2>)r5t&!*pmJJSa6)j4=Km_O1|A3 zE*1HTlH3=H2ZzW>?-d!P>#TfwY9>wHrzCmhSqDT6s5V�moDcf&f*fAJ6)!_=GkA$ux%=OYee149ZTMr7 zmkC|Ts1xW?C)ju7nd$b8C3sY9$IRFAm`C9W9)#I<@FGlJQkUQX zdBm^1i<3>7Pdi^iHX8FF8D|(dp&WOhvo~8 zD{8}hSsS+Z^*L&qa?5c|YkCC#l?+T>U@iQDC+dXOlZUJ)4~d1m1H(7^>{B5*w5S8E zjNXc^x(>9u!;yyiFuKpUPE{CN0F0zP2`N@9BPjH-@ z@(tVad8g)MKDSoZ=AQjp&!g2PZ?W61)siim&#&ff6$5>UT(Tc0lSgZZ{>OgkQ~0GX zf$1~o2S4f?;K(Ooe7CVEgu683Tw>3vf!JAKXnWGCD*VFB{~acDZ+)XY^6s2QaqDA27Vj)lSW*2XGv_%yY@lhgSC!>@26Im{a*I>%ZDk0qYr%aZ(B08TQmAk+!e*l|An+Q!hY#LtuF6? p=zH&%??vJuU)V$3L*)yY{DD961swfIb&-2YT?7*=`3I&R{R2tMkxKvo diff --git a/tests/results/merge_lines.shx b/tests/results/merge_lines.shx deleted file mode 100644 index 5e05b07993a19fa04273615ffcaa2809bf3ba266..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 316 zcmZwBu@AvO6vy!&Eybi3yG3IX5;5Lr6iLO{$=vt@3?`F^Kfo;g0}RFvMmD3_+`)+N zr51^oyL@u*-o1BHyQcrKe>f6LS>5;jW@wT(aqXE+LIj~nZNAz!|DXS4dz=pJJKIQw z7H;u~L(Fh36_>e={nLo)Q;hJ0)H%;w*Y@j5?i^>Be)BIJOQi|Mct#_YZNC5qNT2co eBfKH?UI)4N>^$oVneScDNR`G{d(ZpI4&x7r-6aD6 diff --git a/tests/results/out_cross_section.dbf b/tests/results/out_cross_section.dbf deleted file mode 100644 index f8eb8ae0a0fb862ae8289863c7a59920f05ec968..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13693 zcmcKAyKWRg5CzbcNFaa@AmS6cs^2Nbfe|tUAi@dw3?f4Qnmenh+mc1t*MVnu?CrDt zsOrb=tKYBR{k`38e{R3<`^C@C+wIHK^W)Q}`~Bzh_nR00^7Z5A$A|Ct|M>6Ue_Sud z%O1{`etYryw;$ri_`r@7kM~|lxE*{fBC;L6x9BL1@4VQNg2Zsud_iKmYQBg;XGA z6Dw;`vT9-_QL}1dCDF2KVkObDYGNfZvT9-_F|%r7jr^TcQAIZiE2`*@DI$AS)q+H> z@>-Ot%2BLEt*RVFqE%InBGIcVN0As+m7_?^s>)G8lvGtYiiA~Fjv|5R7A^isoY5Vt z&%KNP*g}@lR5^-7ZK@naqBT{HBGH>FN0As!m7_?^rpi%4)YMctii9;)jw0brm7_@H zrpi%qdQ(eRMK_7sRnbkNbyal78C2~<)lekHP&E{ZIn)i+(om(rs714(N`oYPsM25@ zIkr4iBZ@?ssu4w^PSJ?s(y28|nwDBb2O(KUEn9d&g0ZrWVos zeW*^0RxKuo7+!n3J8Cf!i0GKTMC@3HVdJgo3la`OlR!vh5SqRqQ9y|MqJoIN7j<_7 z5mgcq9Yk!IM8p6Qn+*{$LB#4)L(Bvs)@^%SF~9wF50m!qJof&s6{jok`c9t4ni`b7BN6bM${rE225~)6HBWc~@Hhv=FjBb9iw9{C%xJUQS@P7XfD2)sY diff --git a/tests/results/out_cross_section.prj b/tests/results/out_cross_section.prj deleted file mode 100644 index f45cbad..0000000 --- a/tests/results/out_cross_section.prj +++ /dev/null @@ -1 +0,0 @@ -GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]] \ No newline at end of file diff --git a/tests/results/out_cross_section.shp b/tests/results/out_cross_section.shp deleted file mode 100644 index 65a2f6da538dfba22d2b4ff4e6407d22f54bc53b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12156 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 KK##S|vi3ix+6!X< diff --git a/tests/results/out_cross_section.shx b/tests/results/out_cross_section.shx deleted file mode 100644 index 3d3dd676d1f47227fb1d64395c16185abf76c7d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1196 zcmZw8F-QUd6vpxEEUPQ8vbvzbLBhnr!N5U84hIJZhd_e{2L}fS0|$qoh6V?R1_y@* zg9rx$2L}fS2L}g(2nmM<2Zsm=35SLT$$0-I=@$O^?c~TEHy>Zh5BIA_=D+WMOW*u-&y&O=HgO~_=or8>mavUuQ8h4( zS-in6PDP6YqnO7#e8O*W(S^r&i8UOEODcNt6bsnEp=j06k14#y7QTtgb_`(#%hJE%z9`Eo8zr_s~9^)m}a3F4~=*3ekU;~HZmWF;z;Wf7KO|;uFgc&Sj2Pfk8 vK1MKy73|@cxZ}hao?{jJI1_h0n7}Kn1-{yplKaUQ%ZgO=v4oBu^cCJ%EOG~A;(kN7!k~X=)(BO+DHT7g=8viXVD^`Z{*j!-F$+J%lCfn|Al%Bb~;;L>h%3F^wp#J zoz9E(_T9ks;d3MVyVGZ8zS(|zvisxS&wsu#vA_HGmJe3l9-iv}>4!oDky%b|W}pL?8rbNu^H>bttG{(I^Cdu#i9;-DVf|U3pv%y+88VKbPr!$KUFGSJ%Zi#wG_h_4mj(>^8fw@5dNi4d&xKKHoLIz z%Hwia$ivolpI-OZuQQYX?RMbKxBq-tJ8nJf&Kq`{T{!c&9ENz}>4!n)*fIlRonwshH+ zZ0nJ4*ll)UUGlgb7W1$zUA86LdgL2+n_XC!JT8Y}9=4^+wq#q6e8XhZ`f^iVO{dL z9G3I2EnT)H+j`_1cAH&Tmpm?q5gxXs%eG`&k9@;!vkU8z$K^1}!?r&A*U6(@7Io74?FdS-DVfgJT8Y7JZwvsZOOJC`G(zQ7uF?@%VCU%ZRxTt+14Z9u-ojy zy5w;=tmI)^x@=3f^~g8uHoLGcd0Y;wc-WRM+mdZP@(sJqF04x)m&0lvwx!FqWLuAX z!)~(+>ypRiu!e_i>9Q@^)+67r+w8)+2M!U)dJld2r;1YqjInBj2#w?83U_ zaXGBzVOzRvOSbjMH|#dMur7IA4&yv*OP6iQwjTM0-DVfoC6CKt9S_^mWm~eXN4{aV z*@bn<<8oNf!?twUmTc>hZ`f^iVO{dL95(Q3