Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Framework for reprojection to ellipsoid heights #38

Open
wants to merge 4 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
455 changes: 455 additions & 0 deletions docs/examples/elevation_plotting.ipynb

Large diffs are not rendered by default.

1,465 changes: 783 additions & 682 deletions pixi.lock

Large diffs are not rendered by default.

16 changes: 10 additions & 6 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -35,10 +35,10 @@ dependencies = [
"geopandas>=1.0.1,<2",
"maxar-platform>=1.0.2,<2",
"odc-stac>=0.3.10,<0.4",
"pyarrow>=18.0.0,<19",
"pyarrow>=18.0.0,<=19",
"pystac-client>=0.8.3,<0.9",
"requests>=2.32.3,<3",
"rioxarray>=0.17.0,<0.18",
"rioxarray>=0.17.0,<0.19",
"stac-asset>=0.4.3,<0.5",
"stac-geoparquet>=0.6.0,<0.7",
]
Expand Down Expand Up @@ -221,7 +221,8 @@ pyarrow = "*"
jsonschema = ">=4.23.0,<5"
libgdal-arrow-parquet = ">=3.10.0,<4"
gdal = ">=3.10.0,<4"

contextily = ">=1.6.2,<2"
matplotlib-scalebar = ">=0.8.1,<0.9"

[tool.pixi.feature.dev.dependencies]
# NOTE: ipykernel to run notebooks in vscode
Expand All @@ -233,19 +234,22 @@ pre-commit = "<4"
pylint = "*"
pytest = "*"
sliderule = "*"

# NOTE: test new dependencies locally by adding below
#rich = ">=13.8.1,<14" # Optional. convenient for rich.print(dataset)
#xvec = ">=0.3.0,<0.4"
#sliderule = ">=4.7.1,<5"
#matplotlib = ">=3.9.4,<4"
#adlfs = ">=2024.7.0,<2025"
#planetary-computer = "*"

[tool.pixi.pypi-dependencies]
coincident = { path = ".", editable = false }

#[dependency-groups]
#dev = ["aiohttp"]
#cloudpathlib = { version = "0.20.0,<0.21", extras = ["s3"]}

[tool.pixi.feature.dev.pypi-dependencies]
coincident = { path = ".", editable = true }
#aiohttp = ">=3.11.11,<4"

[tool.pixi.feature.dev.tasks]
precommit = "pre-commit run --all"
Expand Down
11 changes: 11 additions & 0 deletions src/coincident/io/transforms/cop-dem-glo-30.gti
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<GDALTileIndexDataset>
<IndexDataset>/vsiaz/items/cop-dem-glo-30.parquet</IndexDataset>
<LocationField>assets.data.href</LocationField>
<GeoTransform>-1.8000013890000000e+02,2.7777777777777778e-04,0.0000000000000000e+00,8.4000138899999996e+01,0.0000000000000000e+00,-2.7777777777777778e-04</GeoTransform> <!-- optional -->
<XSize>1296001</XSize>
<YSize>626401</YSize>
<BlockXSize>1024</BlockXSize>
<BlockYSize>1024</BlockYSize>
<BandCount>1</BandCount>
<DataType>Float32</DataType>
</GDALTileIndexDataset>
39 changes: 39 additions & 0 deletions src/coincident/io/transforms/cop30_7912.vrt
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
<VRTDataset rasterXSize="1296001" rasterYSize="626401" subClass="VRTWarpedDataset">
<SRS dataAxisToSRSAxisMapping="2,1,3">GEOGCRS["ITRF2014",DYNAMIC[FRAMEEPOCH[2010]],DATUM["International Terrestrial Reference Frame 2014",ELLIPSOID["GRS 1980",6378137,298.257222101,LENGTHUNIT["metre",1]]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],CS[ellipsoidal,3],AXIS["geodetic latitude (Lat)",north,ORDER[1],ANGLEUNIT["degree",0.0174532925199433]],AXIS["geodetic longitude (Lon)",east,ORDER[2],ANGLEUNIT["degree",0.0174532925199433]],AXIS["ellipsoidal height (h)",up,ORDER[3],LENGTHUNIT["metre",1]],USAGE[SCOPE["Geodesy."],AREA["World."],BBOX[-90,-180,90,180]],ID["EPSG",7912]]</SRS>
<GeoTransform> -1.8000000000000000e+02, 2.7777754476150239e-04, 0.0000000000000000e+00, 8.4000152620432672e+01, 0.0000000000000000e+00, -2.7777756619494005e-04</GeoTransform>
<VRTRasterBand dataType="Float32" band="1" subClass="VRTWarpedRasterBand" />
<BlockXSize>1024</BlockXSize>
<BlockYSize>1024</BlockYSize>
<GDALWarpOptions>
<WarpMemoryLimit>5.24288e+08</WarpMemoryLimit>
<ResampleAlg>NearestNeighbour</ResampleAlg>
<WorkingDataType>Float32</WorkingDataType>
<Option name="INIT_DEST">0</Option>
<Option name="APPLY_VERTICAL_SHIFT">YES</Option>
<Option name="MULT_FACTOR_VERTICAL_SHIFT">1</Option>
<Option name="MULT_FACTOR_VERTICAL_SHIFT_PIPELINE">1</Option>
<Option name="ERROR_OUT_IF_EMPTY_SOURCE_WINDOW">FALSE</Option>
<SourceDataset relativeToVRT="1">cop-dem-glo-30.gti</SourceDataset>
<Transformer>
<GenImgProjTransformer>
<SrcGeoTransform>-180.0001389,0.00027777777777777778,0,84.000138899999996,0,-0.00027777777777777778</SrcGeoTransform>
<SrcInvGeoTransform>648000.50003999996,3600,0,302400.50004000001,0,-3600</SrcInvGeoTransform>
<DstGeoTransform>-180,0.00027777754476150239,0,84.000152620432672,0,-0.00027777756619494005</DstGeoTransform>
<DstInvGeoTransform>648000.54358082323,3600.0030198934624,0,302400.77977169206,0,-3600.0027421156656</DstInvGeoTransform>
<ReprojectTransformer>
<ReprojectionTransformer>
<SourceSRS>COMPD_CS["WGS 84 + EGM2008 height",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"]],AXIS["Latitude",NORTH],AXIS["Longitude",EAST],AUTHORITY["EPSG","4326"]],VERT_CS["EGM2008 height",VERT_DATUM["EGM2008 geoid",2005,AUTHORITY["EPSG","1027"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["Gravity-related height",UP],AUTHORITY["EPSG","3855"]],AUTHORITY["EPSG","9518"]]</SourceSRS>
<TargetSRS>GEOGCRS["ITRF2014",DYNAMIC[FRAMEEPOCH[2010]],DATUM["International Terrestrial Reference Frame 2014",ELLIPSOID["GRS 1980",6378137,298.257222101,LENGTHUNIT["metre",1]]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],CS[ellipsoidal,3],AXIS["geodetic latitude (Lat)",north,ORDER[1],ANGLEUNIT["degree",0.0174532925199433]],AXIS["geodetic longitude (Lon)",east,ORDER[2],ANGLEUNIT["degree",0.0174532925199433]],AXIS["ellipsoidal height (h)",up,ORDER[3],LENGTHUNIT["metre",1]],USAGE[SCOPE["Geodesy."],AREA["World."],BBOX[-90,-180,90,180]],ID["EPSG",7912]]</TargetSRS>
<Options>
<Option key="CENTER_LONG">-1.11111e-08</Option>
<Option key="COORDINATE_OPERATION">+proj=pipeline +step +proj=axisswap +order=2,1 +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=vgridshift +grids=us_nga_egm08_25.tif +multiplier=1 +step +proj=cart +ellps=GRS80 +step +inv +proj=helmert +x=1.0053 +y=-1.90921 +z=-0.54157 +rx=0.02678138 +ry=-0.00042027 +rz=0.01093206 +s=0.00036891 +dx=0.00079 +dy=-0.0006 +dz=-0.00144 +drx=6.667e-05 +dry=-0.00075744 +drz=-5.133e-05 +ds=-7.201e-05 +t_epoch=2010 +convention=coordinate_frame +step +inv +proj=cart +ellps=GRS80 +step +proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1</Option>
</Options>
</ReprojectionTransformer>
</ReprojectTransformer>
</GenImgProjTransformer>
</Transformer>
<BandList>
<BandMapping src="1" dst="1" />
</BandList>
</GDALWarpOptions>
</VRTDataset>
9 changes: 9 additions & 0 deletions src/coincident/io/transforms/nasadem.gti
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<GDALTileIndexDataset>
<IndexDataset>/vsiaz/items/nasadem.parquet</IndexDataset>
<LocationField>assets.elevation.href</LocationField>
<GeoTransform>-1.8000013888888890e+02,2.7777777777781459e-04,0.0000000000000000e+00,6.0000138888888891e+01,0.0000000000000000e+00,-2.7777777777781459e-04</GeoTransform>
<XSize>1296001</XSize>
<YSize>417601</YSize>
<BandCount>1</BandCount>
<DataType>Int16</DataType>
</GDALTileIndexDataset>
39 changes: 39 additions & 0 deletions src/coincident/io/transforms/nasadem_7912.vrt
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
<VRTDataset rasterXSize="1296001" rasterYSize="417601" subClass="VRTWarpedDataset">
<SRS dataAxisToSRSAxisMapping="2,1,3">GEOGCRS["ITRF2014",DYNAMIC[FRAMEEPOCH[2010]],DATUM["International Terrestrial Reference Frame 2014",ELLIPSOID["GRS 1980",6378137,298.257222101,LENGTHUNIT["metre",1]]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],CS[ellipsoidal,3],AXIS["geodetic latitude (Lat)",north,ORDER[1],ANGLEUNIT["degree",0.0174532925199433]],AXIS["geodetic longitude (Lon)",east,ORDER[2],ANGLEUNIT["degree",0.0174532925199433]],AXIS["ellipsoidal height (h)",up,ORDER[3],LENGTHUNIT["metre",1]],USAGE[SCOPE["Geodesy."],AREA["World."],BBOX[-90,-180,90,180]],ID["EPSG",7912]]</SRS>
<GeoTransform> -1.8000013890000000e+02, 2.7777777779492454e-04, 0.0000000000000000e+00, 6.0000138900000003e+01, 0.0000000000000000e+00, -2.7777777783099178e-04</GeoTransform>
<VRTRasterBand dataType="Float32" band="1" subClass="VRTWarpedRasterBand" />
<BlockXSize>512</BlockXSize>
<BlockYSize>512</BlockYSize>
<GDALWarpOptions>
<WarpMemoryLimit>5.24288e+08</WarpMemoryLimit>
<ResampleAlg>Bilinear</ResampleAlg>
<WorkingDataType>Float32</WorkingDataType>
<Option name="INIT_DEST">0</Option>
<Option name="APPLY_VERTICAL_SHIFT">YES</Option>
<Option name="MULT_FACTOR_VERTICAL_SHIFT">1</Option>
<Option name="MULT_FACTOR_VERTICAL_SHIFT_PIPELINE">1</Option>
<Option name="ERROR_OUT_IF_EMPTY_SOURCE_WINDOW">FALSE</Option>
<SourceDataset relativeToVRT="1">nasadem.gti</SourceDataset>
<Transformer>
<GenImgProjTransformer>
<SrcGeoTransform>-180.0001388888889,0.00027777777777781459,0,60.000138888888891,0,-0.00027777777777781459</SrcGeoTransform>
<SrcInvGeoTransform>648000.4999999142,3599.999999999523,0,216000.49999997139,0,-3599.999999999523</SrcInvGeoTransform>
<DstGeoTransform>-180.0001389,0.00027777777779492454,0,60.000138900000003,0,-0.00027777777783099178</DstGeoTransform>
<DstInvGeoTransform>648000.5,3599.9999997777777,0,216000.49999862071,0,-3599.9999993103465</DstInvGeoTransform>
<ReprojectTransformer>
<ReprojectionTransformer>
<SourceSRS>COMPD_CS["WGS 84 + EGM96 height",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"]],AXIS["Latitude",NORTH],AXIS["Longitude",EAST],AUTHORITY["EPSG","4326"]],VERT_CS["EGM96 height",VERT_DATUM["EGM96 geoid",2005,AUTHORITY["EPSG","5171"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["Gravity-related height",UP],AUTHORITY["EPSG","5773"]],AUTHORITY["EPSG","9707"]]</SourceSRS>
<TargetSRS>GEOGCRS["ITRF2014",DYNAMIC[FRAMEEPOCH[2010]],DATUM["International Terrestrial Reference Frame 2014",ELLIPSOID["GRS 1980",6378137,298.257222101,LENGTHUNIT["metre",1]]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],CS[ellipsoidal,3],AXIS["geodetic latitude (Lat)",north,ORDER[1],ANGLEUNIT["degree",0.0174532925199433]],AXIS["geodetic longitude (Lon)",east,ORDER[2],ANGLEUNIT["degree",0.0174532925199433]],AXIS["ellipsoidal height (h)",up,ORDER[3],LENGTHUNIT["metre",1]],USAGE[SCOPE["Geodesy."],AREA["World."],BBOX[-90,-180,90,180]],ID["EPSG",7912]]</TargetSRS>
<Options>
<Option key="CENTER_LONG">2.38458e-11</Option>
<Option key="COORDINATE_OPERATION">+proj=pipeline +step +proj=axisswap +order=2,1 +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=vgridshift +grids=us_nga_egm96_15.tif +multiplier=1 +step +proj=cart +ellps=GRS80 +step +inv +proj=helmert +x=1.0053 +y=-1.90921 +z=-0.54157 +rx=0.02678138 +ry=-0.00042027 +rz=0.01093206 +s=0.00036891 +dx=0.00079 +dy=-0.0006 +dz=-0.00144 +drx=6.667e-05 +dry=-0.00075744 +drz=-5.133e-05 +ds=-7.201e-05 +t_epoch=2010 +convention=coordinate_frame +step +inv +proj=cart +ellps=GRS80 +step +proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1</Option>
</Options>
</ReprojectionTransformer>
</ReprojectTransformer>
</GenImgProjTransformer>
</Transformer>
<BandList>
<BandMapping src="1" dst="1" />
</BandList>
</GDALWarpOptions>
</VRTDataset>
49 changes: 49 additions & 0 deletions src/coincident/io/transforms/threedep10_7912.vrt
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
<VRTDataset rasterXSize="756000" rasterYSize="357053" subClass="VRTWarpedDataset">
<SRS dataAxisToSRSAxisMapping="2,1,3">GEOGCRS["ITRF2014",DYNAMIC[FRAMEEPOCH[2010]],DATUM["International Terrestrial Reference Frame 2014",ELLIPSOID["GRS 1980",6378137,298.257222101,LENGTHUNIT["metre",1]]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],CS[ellipsoidal,3],AXIS["geodetic latitude (Lat)",north,ORDER[1],ANGLEUNIT["degree",0.0174532925199433]],AXIS["geodetic longitude (Lon)",east,ORDER[2],ANGLEUNIT["degree",0.0174532925199433]],AXIS["ellipsoidal height (h)",up,ORDER[3],LENGTHUNIT["metre",1]],USAGE[SCOPE["Geodesy."],AREA["World."],BBOX[-90,-180,90,180]],ID["EPSG",7912]]</SRS>
<GeoTransform> -1.3000001896098505e+02, 9.2592592659999998e-05, 0.0000000000000000e+00, 5.7210379199593987e+01, 0.0000000000000000e+00, -9.2592592659999998e-05</GeoTransform>
<VRTRasterBand dataType="Float32" band="1" subClass="VRTWarpedRasterBand">
<NoDataValue>-999999</NoDataValue>
<ColorInterp>Gray</ColorInterp>
</VRTRasterBand>
<BlockXSize>256</BlockXSize>
<BlockYSize>256</BlockYSize>
<GDALWarpOptions>
<WarpMemoryLimit>5.24288e+08</WarpMemoryLimit>
<ResampleAlg>Bilinear</ResampleAlg>
<WorkingDataType>Float32</WorkingDataType>
<Option name="INIT_DEST">NO_DATA</Option>
<Option name="APPLY_VERTICAL_SHIFT">YES</Option>
<Option name="MULT_FACTOR_VERTICAL_SHIFT">1</Option>
<Option name="MULT_FACTOR_VERTICAL_SHIFT_PIPELINE">1</Option>
<Option name="ERROR_OUT_IF_EMPTY_SOURCE_WINDOW">FALSE</Option>
<SourceDataset relativeToVRT="0">/vsis3/prd-tnm/StagedProducts/Elevation/13/TIFF/USGS_Seamless_DEM_13.vrt</SourceDataset>
<OpenOptions>
<OOI key="OVERVIEW_LEVEL">1</OOI>
</OpenOptions>
<Transformer>
<GenImgProjTransformer>
<SrcGeoTransform>-180.00055555609359,0.0003703705611604237,0,72.000555556294898,0,-0.0003703703706396376</SrcGeoTransform>
<SrcInvGeoTransform>486001.24964610097,2699.9986091412275,0,194401.49986066215,0,-2699.9999980370417</SrcInvGeoTransform>
<DstGeoTransform>-130.00001896098505,9.2592592659999998e-05,0,57.210379199593987,0,-9.2592592659999998e-05</DstGeoTransform>
<DstInvGeoTransform>1404000.2037565263,10799.9999921376,0,617872.09490580414,0,-10799.9999921376</DstInvGeoTransform>
<ReprojectTransformer>
<ReprojectionTransformer>
<SourceSRS>COMPD_CS["NAD83(2011) + NAVD88 height",GEOGCS["NAD83(2011)",DATUM["NAD83_National_Spatial_Reference_System_2011",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","1116"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AXIS["Latitude",NORTH],AXIS["Longitude",EAST],AUTHORITY["EPSG","6318"]],VERT_CS["NAVD88 height",VERT_DATUM["North American Vertical Datum 1988",2005,AUTHORITY["EPSG","5103"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["Gravity-related height",UP],AUTHORITY["EPSG","5703"]]]</SourceSRS>
<TargetSRS>GEOGCRS["ITRF2014",DYNAMIC[FRAMEEPOCH[2010]],DATUM["International Terrestrial Reference Frame 2014",ELLIPSOID["GRS 1980",6378137,298.257222101,LENGTHUNIT["metre",1]]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],CS[ellipsoidal,3],AXIS["geodetic latitude (Lat)",north,ORDER[1],ANGLEUNIT["degree",0.0174532925199433]],AXIS["geodetic longitude (Lon)",east,ORDER[2],ANGLEUNIT["degree",0.0174532925199433]],AXIS["ellipsoidal height (h)",up,ORDER[3],LENGTHUNIT["metre",1]],USAGE[SCOPE["Geodesy."],AREA["World."],BBOX[-90,-180,90,180]],ID["EPSG",7912]]</TargetSRS>
<Options>
<Option key="COORDINATE_OPERATION">+proj=pipeline +step +proj=axisswap +order=2,1 +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=vgridshift +grids=us_noaa_g2018u0.tif +multiplier=1 +step +proj=cart +ellps=GRS80 +step +inv +proj=helmert +x=1.0053 +y=-1.90921 +z=-0.54157 +rx=0.02678138 +ry=-0.00042027 +rz=0.01093206 +s=0.00036891 +dx=0.00079 +dy=-0.0006 +dz=-0.00144 +drx=6.667e-05 +dry=-0.00075744 +drz=-5.133e-05 +ds=-7.201e-05 +t_epoch=2010 +convention=coordinate_frame +step +inv +proj=cart +ellps=GRS80 +step +proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1</Option>
</Options>
</ReprojectionTransformer>
</ReprojectTransformer>
</GenImgProjTransformer>
</Transformer>
<BandList>
<BandMapping src="1" dst="1">
<SrcNoDataReal>-999999</SrcNoDataReal>
<SrcNoDataImag>0</SrcNoDataImag>
<DstNoDataReal>-999999</DstNoDataReal>
<DstNoDataImag>0</DstNoDataImag>
</BandMapping>
</BandList>
</GDALWarpOptions>
</VRTDataset>
64 changes: 64 additions & 0 deletions src/coincident/io/xarray.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,14 @@
from __future__ import annotations

import os
from importlib import resources
from typing import Any

import geopandas as gpd
import odc.stac
import pystac
import rasterio
import requests # type: ignore[import-untyped]

# NOTE: must import for odc.stac outputs to have .rio accessor
import rioxarray # noqa: F401
Expand All @@ -21,6 +23,68 @@
# Sets GDAL_DISABLE_READDIR_ON_OPEN to 'EMPTY_DIR' etc.
odc.stac.configure_rio(cloud_defaults=True, VSICURL_PC_URL_SIGNING="YES")

cop_to_7912 = resources.files("coincident.io.transforms") / "cop30_7912.vrt"
nasadem_to_7912 = resources.files("coincident.io.transforms") / "nasadem_7912.vrt"
threedep_to_7912 = resources.files("coincident.io.transforms") / "threedep_7912.vrt"


def load_dem_7912(dataset: str, aoi: gpd.GeoDataFrame) -> xr.DataArray:
"""
Load a Digital Elevation Model (DEM) dataset and clip it to the area of interest (AOI).
Reprojection-on-reading to EPSG:7912 is performed by GDAL.

Parameters
----------
dataset : str
The name of the DEM dataset to load. Must be one of 'cop30', 'nasadem', or '3dep'.
aoi : gpd.GeoDataFrame
Polygon with lon,lat coordinates to which the DEM will be clipped.

Returns
-------
xr.DataArray
The clipped DEM data as an xarray DataArray.

Notes
-----
- This function does eagerly pulls all data into memory, so may fail if aoi is large
"""
if dataset in ["cop30", "nasadem"]:
r = requests.get(
"https://planetarycomputer.microsoft.com/api/sas/v1/token/pcstacitems/items",
timeout=10,
)
token = r.json()["token"]
if dataset == "cop30":
uri = cop_to_7912
elif dataset == "nasadem":
uri = nasadem_to_7912
ENV = rasterio.Env(
GDAL_DISABLE_READDIR_ON_OPEN="EMPTY_DIR",
AZURE_STORAGE_ACCOUNT="pcstacitems",
AZURE_STORAGE_SAS_TOKEN=token,
VSICURL_PC_URL_SIGNING="YES",
)

elif dataset == "3dep":
uri = threedep_to_7912
ENV = rasterio.Env(
GDAL_DISABLE_READDIR_ON_OPEN="EMPTY_DIR", AWS_NO_SIGN_REQUEST="YES"
)

else:
msg = f"Unknown dataset: {dataset}, must be 'cop30', 'nasadem', or '3dep'"
raise ValueError(msg)

# Pull all data into memory
with ENV:
return (
xr.open_dataarray(uri, engine="rasterio")
.rio.clip_box(**aoi.bounds)
.squeeze()
.load()
)


def to_dataset(
gf: gpd.GeoDataFrame,
Expand Down
28 changes: 26 additions & 2 deletions src/coincident/plot/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,30 @@

from __future__ import annotations

from coincident.plot.matplotlib import plot_esa_worldcover, plot_maxar_browse
from coincident.plot.matplotlib import (
boxplot_terrain_diff,
clear_labels,
compare_dems,
get_elev_diff,
hillshade,
plot_altimeter_points,
plot_dem,
plot_diff_hist,
plot_esa_worldcover,
plot_maxar_browse,
plot_worldcover_custom_ax,
)

__all__ = ["plot_esa_worldcover", "plot_maxar_browse"]
__all__ = [
"plot_esa_worldcover",
"plot_maxar_browse",
"hillshade",
"clear_labels",
"plot_dem",
"plot_altimeter_points",
"get_elev_diff",
"plot_diff_hist",
"plot_worldcover_custom_ax",
"compare_dems",
"boxplot_terrain_diff",
]
Loading
Loading