`AreaDefinition.get_area_slices` doesn't work for cropped geostationary areas like SEVIRI RSS
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 38/100
Direzione di ricerca
Inizia con AreaDefinition.get_area_slices e la gestione delle intersezioni in pyresample/future/geometry/_subset.py, quindi esegui la riproduzione SEVIRI RSS fornita con i riquadri delimitatori di Spagna e Regno Unito. Confronta il comportamento con pyresample v1.25.1 e verifica che le aree geostazionarie ritagliate trovino l’intersezione con la Spagna senza generare NotImplementedError; anche il ritaglio Satpy correlato dovrebbe funzionare senza fill_disk=True.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
There seems to be a bug in the computation of the boundaries and intersections between a cropped geostationary projection, like SEVIRI RSS, and a lon-lat area.
To reproduce:
from pyresample.geometry import AreaDefinition
from satpy.area import get_area_def
rss_area = get_area_def("msg_seviri_rss_3km")
# the saved areadef in satpy is for full-disc, so lets use the actual area_extent from real data
rss_area_loc = rss_area.copy(area_extent=(-5570248.477339745, 1393687.2705221176, 5567248.074173927, 5570248.477339745))
ll_bbox = [0, 40, 1, 41] # fails (South Spain)
# ll_bbox = [0, 50, 1, 51] # works (South UK)
crop_area = AreaDefinition(
"crop_area", "crop_area", "crop_latlong",
{"proj": "latlong"}, 100, 100, ll_bbox)
s = rss_area_loc.get_area_slices(crop_area)
which results in
File "/tcenas/home/andream/.config/JetBrains/PyCharm2025.3/scratches/scratch_18.py", line 13, in <module>
s = rss_area_loc.get_area_slices(crop_area)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tcenas/home/andream/code/satpy_latest/pyresample/pyresample/geometry.py", line 2648, in get_area_slices
return get_area_slices(self, area_to_cover, shape_divisible_by)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tcenas/home/andream/code/satpy_latest/pyresample/pyresample/_caching.py", line 49, in __call__
return self._callable(*args)
^^^^^^^^^^^^^^^^^^^^^
File "/tcenas/home/andream/code/satpy_latest/pyresample/pyresample/future/geometry/_subset.py", line 55, in get_area_slices
raise NotImplementedError
NotImplementedError
as it fails to find an intersection here https://github.com/pytroll/pyresample/blob/a7e1f2508dcd49acc56f99b63e9e427cf6b53e9c/pyresample/future/geometry/_subset.py#L48-L55
The lon-lat bbox used is definitely in the area (it's somewhere in Spain). Using a bbox south of UK works again (see code example).
Additional context
This of course makes also the satpy Scene.crop fail accordingly, to reproduce:
import satpy
path = '/tcenas/fbf/MSG/in/MSG4/OPE4/SEVI-MSG15/MSG4-SEVI-MSG15-0100-NA-20251230083420.370000000Z-NA.nat'
scene = satpy.Scene(reader='seviri_l1b_native', filenames=[path], reader_kwargs={'fill_disk': False})
# load channel
channel = 'VIS008'
scene.load([channel], upper_right_corner='NE')
# crop on ll_box: (lon_min, lat_min, lon_max, lat_max)
ll_box = (0, 40, 1, 41)
scene_sub = scene.crop(ll_bbox=ll_box)
here, the workaround is to use 'fill_disk': True
Additional context II
@simonrp84 reported this already on Slack in 2023 https://pytroll.slack.com/archives/C0LNH7LMB/p1686061927840339 and then also for Himawary when passing a single segment, see https://pytroll.slack.com/archives/C0LNH7LMB/p1716292859837229 .
Additional context III
According to my colleague, it doesn't happen with pyresample v1.25.1
- Lingua principale
- Python
- Stelle
- 388
- Fork
- 102
- Merge medio
- 5g 17h
- PR unite (30g)
- 5
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Nessuna guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di pytroll/pyresample
-
Geometry `__eq__` and `__hash__` violate Python's hash/equality contractForse di nuovo libera @pnuu l’ha presa 45 giorni fa e non c’è nessuna pull request aperta. Apertabug Priority-Medium
pytroll/pyresample#745 · 1 commento · 3 assegnatari ·
-
Improve resampler x/y coordinate metadataForse di nuovo libera @djhoese l’ha presa 64 giorni fa e non c’è nessuna pull request aperta. Apertabug
pytroll/pyresample#739 · 1 assegnatario ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 42/100
pytroll/pyresample#698 · 1 commento ·
-
gradient_search comb effectForse di nuovo libera @mraspaud l’ha presa 384 giorni fa e non c’è nessuna pull request aperta. Aperta
pytroll/pyresample#682 · 7 commenti · 1 assegnatario ·
-
bilinear reference brokenForse di nuovo libera @pnuu l’ha presa 446 giorni fa e non c’è nessuna pull request aperta. Aperta
pytroll/pyresample#671 · 1 commento · 1 assegnatario ·
Tutte le issue di pytroll/pyresample
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
zach-blumenfeld/aip#13 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 80/100
nathanmarlor/foxess_modbus#1287 ·
I maintainer di solito rispondono entro 4 giorni
-
bug good first issue help wanted
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
OpenLakeForge/openlakeforge#498 ·
I maintainer di solito rispondono entro 1 giorno
-
good first issue hacktoberfest help wanted python
Difficoltà 2/5 1-3 ore Idoneità per principianti 73/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 69/100
pollen-robotics/reachy_mini#1493 ·
I maintainer di solito rispondono entro 1 giorno