Глядя на ваши данные, похоже, что они пересекают антимеридиан (-180/180 долготы).Использование rioxarray для проверки данных.
Обычная проверка может не выявить этого:
import numpy as np
from pyproj import Transformer
import rioxarray
rds = rioxarray.open_rasterio("test.nc", masked=True)
<xarray.Dataset>
Dimensions: (band: 1, x: 10000, y: 6000)
Coordinates:
* y (y) float64 1.583e+06 1.584e+06 ... 4.588e+06 4.589e+06
* x (x) float64 -2.505e+06 -2.504e+06 ... 2.504e+06 2.505e+06
* band (band) int64 1
spatial_ref int64 0
Data variables:
Rad (band, y, x) float64 ...
DQF (band, y, x) float64 ...
rds.rio.crs
CRS.from_wkt('PROJCS["unnamed",GEOGCS["unknown",DATUM["unnamed",SPHEROID["Spheroid",6378137,298.2572221]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]]],PROJECTION["Geostationary_Satellite"],PARAMETER["central_meridian",-137],PARAMETER["satellite_height",35786023],PARAMETER["false_easting",0],PARAMETER["false_northing",0],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["Easting",EAST],AXIS["Northing",NORTH],EXTENSION["PROJ4","+proj=geos +lon_0=-137 +h=35786023 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs +sweep=x"]]')
rds.Rad.rio.transform_bounds("epsg:4326")
(-177.77133129663548,
14.561801004390198,
179.99792429593583,
53.52729472471354)
Но, как только вы преобразовать данные: (примечание стороны, вот почему я использую трансформатор вместо Proj https://pyproj4.github.io/pyproj/stable/gotchas.html#proj-not-a-generic-latitude-longitude-to-projection-converter)
transformer = Transformer.from_crs(rds.rio.crs, "epsg:4326", always_xy=True)
x_coords, y_coords = np.meshgrid(
rds.coords[rds.rio.x_dim], rds.coords[rds.rio.y_dim]
)
lon, lat = transformer.transform(x_coords, y_coords)
вы увидите, что углы не все на той же сторонестрока:
(lon[0][0], lat[0][0]), (lon[-1][-1], lat[-1][-1]), (lon[0][-1], lat[0][-1]), (lon[-1][0], lat[-1][0])```
((-161.57648657675344, 14.798043104222199),
(-89.56850957728933, 53.5204809865526),
(-112.4235101487757, 14.798043165552787),
(175.56851955360526, 53.52047990993389))
Из-за этого, когда вы делаете мин и макс, чтобы получить оценки, будет вводить в заблуждение, как мин и максимальной долготой все будет рядом с часть небесного меридиана, лежащая ниже горизонта (-180/ 180) для лат / долг.
lon.min(), lat.min(), lon.max(), lat.max()
(-179.99994221231273, 14.564185533235145, 179.9999815862486, 53.5204809865526)