Skip to content

Gaps in GIS interoperability: no raster (GeoTIFF) I/O, no reprojection/regridding, no vector export #4085

Description

@martinguthrie93

Summary

MetPy depends on GIS machinery internally (pyproj is a hard dependency, Cartopy powers all mapping, and CFProjection parses CF grid_mapping metadata), but it exposes no interoperability layer with the wider GIS ecosystem. Data can be read and computed on in its native projected coordinates, yet it cannot be exchanged with standard GIS software (QGIS, ArcGIS, GDAL-based tooling) nor re-gridded between projections. This issue collects three related, concrete gaps.

1. Raster GIS (GeoTIFF / rasterio) support is entirely absent

There is no code path for reading or writing GeoTIFF (or any GDAL/rasterio raster format). A search of src/metpy for rasterio|gdal|geotiff returns nothing.

Impact: a MetPy gridded field (e.g. a reflectivity mosaic, a model field, or a computed derived field) cannot be exported as a georeferenced raster for use in general-purpose GIS software, and georeferenced rasters cannot be ingested.

Possible direction: offer an optional rioxarray-based bridge, e.g. writing/reading a metpy_crs-tagged DataArray to/from GeoTIFF while preserving the CRS.

2. No reprojection / regridding / warping between projections

MetPy has no reproject / regrid / warp utility. Two grids stored in different projections cannot be aligned to a common grid without the user manually combining pyproj with scipy/xarray interpolation. The building blocks exist (CFProjection.to_pyproj(), the .metpy.pyproj_crs accessor, assign_y_x / assign_latitude_longitude), but there is no high-level function that resamples field A onto the grid of field B (or onto an arbitrary target CRS and extent).

Impact: cross-source workflows (combining model + satellite + radar grids) require significant boilerplate and are error-prone with respect to map-factor and datum handling.

3. No vector GIS export

MetPy can create vector geometries — metpy.io.text.parse_wpc_surface_bulletin() returns Shapely points/lines/polygons — but there is no way to write them (or any derived geometry) out to a standard vector format (GeoJSON, Shapefile, GeoPackage). The optional geopandas dependency is used only for plotting via PlotGeometry, not for I/O.

Impact: parsed fronts/pressure-center geometries and other analysis output stay locked inside MetPy for rendering only; they cannot be handed to downstream GIS tools.

Why this matters

The three gaps share one root cause: MetPy treats projections as an internal concern for correct computation and plotting, but does not provide an interchange boundary with the GIS world. Closing even one of these (GeoTIFF export via rioxarray is likely the lowest-effort, highest-value first step) would substantially improve MetPy's usefulness in mixed meteorology + GIS pipelines.

Notes

  • pyproj is listed as a hard dependency in pyproject.toml, though the README still describes it as optional — a minor doc inconsistency worth fixing alongside this.
  • Related, pre-existing precision TODO: make_latlon in src/metpy/plots/mapping.py always returns PlateCarree() (sphere), ignoring the datum; the default Geod(ellps='sphere') in calc/tools.py similarly assumes a sphere rather than WGS84.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions