asp-plot 1.18.0__tar.gz → 1.18.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {asp_plot-1.18.0 → asp_plot-1.18.1}/AGENTS.md +2 -2
- {asp_plot-1.18.0 → asp_plot-1.18.1}/CHANGELOG.md +5 -0
- {asp_plot-1.18.0 → asp_plot-1.18.1}/PKG-INFO +1 -1
- {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/scenes.py +2 -1
- {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/sensors.py +6 -0
- {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/stereo.py +2 -1
- {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/utils.py +28 -8
- {asp_plot-1.18.0 → asp_plot-1.18.1}/pyproject.toml +1 -1
- {asp_plot-1.18.0 → asp_plot-1.18.1}/.flake8 +0 -0
- {asp_plot-1.18.0 → asp_plot-1.18.1}/.github/workflows/release.yml +0 -0
- {asp_plot-1.18.0 → asp_plot-1.18.1}/.github/workflows/run-tests.yml +0 -0
- {asp_plot-1.18.0 → asp_plot-1.18.1}/.gitignore +0 -0
- {asp_plot-1.18.0 → asp_plot-1.18.1}/.pre-commit-config.yaml +0 -0
- {asp_plot-1.18.0 → asp_plot-1.18.1}/.readthedocs.yaml +0 -0
- {asp_plot-1.18.0 → asp_plot-1.18.1}/LICENSE +0 -0
- {asp_plot-1.18.0 → asp_plot-1.18.1}/README.md +0 -0
- {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/__init__.py +0 -0
- {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/alignment.py +0 -0
- {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/altimetry.py +0 -0
- {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/altimetry_plots.py +0 -0
- {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/altimetry_source.py +0 -0
- {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/asp_log.py +0 -0
- {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/bodies.py +0 -0
- {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/bundle_adjust.py +0 -0
- {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/cli/__init__.py +0 -0
- {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/cli/asp_plot.py +0 -0
- {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/cli/csm_camera_plot.py +0 -0
- {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/cli/gallery.py +0 -0
- {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/cli/request_planetary_altimetry.py +0 -0
- {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/cli/stereo_geom.py +0 -0
- {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/csm_analysis.py +0 -0
- {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/csm_camera.py +0 -0
- {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/csm_io.py +0 -0
- {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/gallery.py +0 -0
- {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/icesat2_source.py +0 -0
- {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/mapproject.py +0 -0
- {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/planetary_source.py +0 -0
- {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/processing_parameters.py +0 -0
- {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/report.py +0 -0
- {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/report_captions.py +0 -0
- {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/report_pipeline.py +0 -0
- {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/selections.py +0 -0
- {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/stereo_geometry.py +0 -0
- {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/stereopair_metadata_parser.py +0 -0
- {asp_plot-1.18.0 → asp_plot-1.18.1}/conda-forge-recipe/meta.yaml +0 -0
- {asp_plot-1.18.0 → asp_plot-1.18.1}/environment.yml +0 -0
|
@@ -110,8 +110,8 @@ The package is organized by functionality, with each module focused on a specifi
|
|
|
110
110
|
- Coordinate utilities: `get_utm_epsg()` for determining UTM EPSG from lon/lat, `get_planetary_bounds()` for DEM bounds in planetocentric 0-360 lon/lat
|
|
111
111
|
- Planetary body detection: `detect_planetary_body(dem_fn)` returns `"earth"`, `"moon"`, or `"mars"` by inspecting CRS WKT DATUM/ELLIPSOID fields
|
|
112
112
|
- Subprocess utilities: `run_subprocess_command()`
|
|
113
|
-
- Vantor/copyright utilities:
|
|
114
|
-
- `detect_vantor_satellite(directory)`:
|
|
113
|
+
- Vantor/copyright utilities (an **attribution** concern — named for the rights-holder — kept deliberately distinct from sensor/reader **identity**, the WorldView-named abstraction in `sensors.py`; #137):
|
|
114
|
+
- `detect_vantor_satellite(directory)`: True when an XML camera file's `SATID` matches `VANTOR_SATID_PREFIXES` — any DigitalGlobe→Maxar→Vantor-owned satellite, i.e. the WorldView family (`WV*`, incl. Legion `WVLG`), GeoEye (`GE*`), QuickBird (`QB*`), IKONOS (`IK*`) — not just WorldView. Gates the `© Vantor` overlay via `Plotter.is_vantor`
|
|
115
115
|
- `add_copyright_overlay(ax)`: Adds "© Vantor {year}" text overlay to bottom-right of matplotlib axes
|
|
116
116
|
- Scene metadata: `get_acquisition_dates(directory, extra_dirs=None)` reads `FIRSTLINETIME` from WorldView/Maxar XMLs and parses the capture timestamp from `AST_L1A_...` file/directory names. Returns a sorted, deduplicated list of `"YYYY-MM-DD HH:MM:SS UTC"` strings; empty if nothing is found. Used by the CLI to populate `ReportMetadata.acquisition_dates`.
|
|
117
117
|
|
|
@@ -5,6 +5,11 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [1.18.1] - 2026-06-26
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
- **`© Vantor` attribution now covers all Vantor-owned satellites, not just WorldView** ([#137](https://github.com/uw-cryo/asp_plot/issues/137)). The copyright-overlay check (`detect_vantor_satellite`) matched only `SATID` values starting with `WV`, so GeoEye-1 (`GE01`), QuickBird (`QB02`), and IKONOS scenes — all owned by the same rights-holder (DigitalGlobe → Maxar → Vantor) — were silently left un-attributed. Detection now matches a `VANTOR_SATID_PREFIXES` whitelist (`WV` incl. WorldView Legion `WVLG`, `GE`, `QB`, `IK`). This clarifies that `is_vantor` / `detect_vantor_satellite` are an **attribution** concern (named for the company), intentionally distinct from sensor/reader **identity** (the WorldView-named abstraction in `sensors.py`); the two names are documented as deliberately different so they aren't reconciled into one.
|
|
12
|
+
|
|
8
13
|
## [1.18.0] - 2026-06-25
|
|
9
14
|
|
|
10
15
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: asp_plot
|
|
3
|
-
Version: 1.18.
|
|
3
|
+
Version: 1.18.1
|
|
4
4
|
Summary: Package for plotting outputs Ames Stereo Pipeline processing
|
|
5
5
|
Project-URL: Homepage, https://github.com/uw-cryo/asp_plot
|
|
6
6
|
Project-URL: Documentation, https://asp-plot.readthedocs.io
|
|
@@ -26,7 +26,8 @@ class SceneFiles:
|
|
|
26
26
|
full_stereo_directory : str
|
|
27
27
|
Full path to the stereo directory.
|
|
28
28
|
is_vantor : bool
|
|
29
|
-
Whether the source imagery is from a Vantor (WorldView
|
|
29
|
+
Whether the source imagery is from a Vantor-owned satellite (WorldView
|
|
30
|
+
family, GeoEye, QuickBird, etc.); gates the "© Vantor" copyright overlay.
|
|
30
31
|
left_scene_sub_fn, right_scene_sub_fn : str or None
|
|
31
32
|
Paths to the left/right sub-sampled scene files.
|
|
32
33
|
"""
|
|
@@ -106,6 +106,12 @@ class WorldViewMetadata(SensorMetadata):
|
|
|
106
106
|
extract per-scene metadata, handling both single XML files and multiple XML
|
|
107
107
|
tiles per scene (mosaicked with ``dg_mosaic``).
|
|
108
108
|
|
|
109
|
+
This class is named for the *sensor family* (the stable WorldView name) and
|
|
110
|
+
governs which reader parses the XML. It is intentionally distinct from the
|
|
111
|
+
*attribution* check :func:`asp_plot.utils.detect_vantor_satellite`, which is
|
|
112
|
+
named for the rights-holder (Vantor) and decides whether the "© Vantor"
|
|
113
|
+
overlay applies. The two concerns use different names on purpose; see #137.
|
|
114
|
+
|
|
109
115
|
Attributes
|
|
110
116
|
----------
|
|
111
117
|
directory : str
|
|
@@ -39,7 +39,8 @@ class StereoFiles:
|
|
|
39
39
|
full_directory : str
|
|
40
40
|
Full path to the stereo directory.
|
|
41
41
|
is_vantor : bool
|
|
42
|
-
Whether the source imagery is from a Vantor (WorldView
|
|
42
|
+
Whether the source imagery is from a Vantor-owned satellite (WorldView
|
|
43
|
+
family, GeoEye, QuickBird, etc.); gates the "© Vantor" copyright overlay.
|
|
43
44
|
reference_dem : str or None
|
|
44
45
|
Path to the reference DEM (supplied or recovered from the stereo log).
|
|
45
46
|
left_image_fn, left_image_sub_fn, right_image_sub_fn : str or None
|
|
@@ -1101,9 +1101,10 @@ class Plotter:
|
|
|
1101
1101
|
title : str, optional
|
|
1102
1102
|
Plot title, default is None
|
|
1103
1103
|
is_vantor : bool, optional
|
|
1104
|
-
Whether the source imagery is from a Vantor (
|
|
1105
|
-
When True, ``plot_array``
|
|
1106
|
-
|
|
1104
|
+
Whether the source imagery is from a Vantor-owned satellite (the
|
|
1105
|
+
WorldView family, GeoEye, QuickBird, etc.). When True, ``plot_array``
|
|
1106
|
+
adds a "© Vantor" copyright overlay for panels that request it via
|
|
1107
|
+
``copyright=True``. Default is False.
|
|
1107
1108
|
"""
|
|
1108
1109
|
self.clim_perc = clim_perc
|
|
1109
1110
|
self.lognorm = lognorm
|
|
@@ -1196,8 +1197,8 @@ class Plotter:
|
|
|
1196
1197
|
Whether to add a satellite-imagery copyright overlay, default is
|
|
1197
1198
|
False. The overlay is only drawn when this is True *and* the Plotter
|
|
1198
1199
|
was created with ``is_vantor=True`` (i.e. the source imagery is from
|
|
1199
|
-
a Vantor
|
|
1200
|
-
|
|
1200
|
+
a Vantor-owned satellite). Set on the panels that display the optical
|
|
1201
|
+
scenes.
|
|
1201
1202
|
|
|
1202
1203
|
Returns
|
|
1203
1204
|
-------
|
|
@@ -1297,8 +1298,26 @@ class Plotter:
|
|
|
1297
1298
|
ctx.add_basemap(ax=ax, **ctx_kwargs)
|
|
1298
1299
|
|
|
1299
1300
|
|
|
1301
|
+
# SATID prefixes for the DigitalGlobe -> Maxar -> Vantor satellite heritage, all
|
|
1302
|
+
# of which carry "© Vantor" attribution. Covers the WorldView family ("WV", incl.
|
|
1303
|
+
# WorldView Legion "WVLG"), GeoEye ("GE"), QuickBird ("QB"), and IKONOS ("IK").
|
|
1304
|
+
VANTOR_SATID_PREFIXES = ("WV", "GE", "QB", "IK")
|
|
1305
|
+
|
|
1306
|
+
|
|
1300
1307
|
def detect_vantor_satellite(directory):
|
|
1301
|
-
"""Check if XML files in directory indicate a Vantor
|
|
1308
|
+
"""Check if XML files in directory indicate a Vantor-owned satellite.
|
|
1309
|
+
|
|
1310
|
+
This is an *attribution* check, distinct from sensor/reader identity: it
|
|
1311
|
+
decides whether the "© Vantor" copyright overlay applies (see
|
|
1312
|
+
:func:`add_copyright_overlay` and :class:`Plotter`). It is named for the
|
|
1313
|
+
rights-holder (Vantor, formerly Maxar/DigitalGlobe) and matches *any* Vantor
|
|
1314
|
+
satellite, not just WorldView. Sensor *identity* — which reader parses the
|
|
1315
|
+
XML — is a separate concern handled by the WorldView-named abstraction in
|
|
1316
|
+
:mod:`asp_plot.sensors`; the two names intentionally differ and should not be
|
|
1317
|
+
"reconciled" into one.
|
|
1318
|
+
|
|
1319
|
+
A scene is considered Vantor-owned when an XML camera file carries a SATID
|
|
1320
|
+
matching one of :data:`VANTOR_SATID_PREFIXES`.
|
|
1302
1321
|
|
|
1303
1322
|
Parameters
|
|
1304
1323
|
----------
|
|
@@ -1308,7 +1327,8 @@ def detect_vantor_satellite(directory):
|
|
|
1308
1327
|
Returns
|
|
1309
1328
|
-------
|
|
1310
1329
|
bool
|
|
1311
|
-
True if any XML file contains a
|
|
1330
|
+
True if any XML file contains a Vantor-heritage SATID (e.g. WV01-WV04,
|
|
1331
|
+
WVLG, GE01, QB02).
|
|
1312
1332
|
"""
|
|
1313
1333
|
try:
|
|
1314
1334
|
xml_files = glob_file(directory, "*.[Xx][Mm][Ll]", all_files=True)
|
|
@@ -1320,7 +1340,7 @@ def detect_vantor_satellite(directory):
|
|
|
1320
1340
|
for xml_file in xml_files:
|
|
1321
1341
|
try:
|
|
1322
1342
|
satid = get_xml_tag(xml_file, "SATID")
|
|
1323
|
-
if satid.startswith(
|
|
1343
|
+
if satid.startswith(VANTOR_SATID_PREFIXES):
|
|
1324
1344
|
return True
|
|
1325
1345
|
except (ValueError, Exception):
|
|
1326
1346
|
continue
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|