blob: dbe27cdd07299503190b2b80941d0e817d02b307 [file] [log] [blame] [view]
---
title: Resample a raster
---
This example reprojects a raster to a different Coordinate Reference System (CRS).
This example assumes a preloaded two-dimensional raster.
For the loading part,
see [read from a netCDF file](read_netcdf.html)
or [read from a GeoTIFF file](read_geotiff.html)
code examples.
# Direct dependencies
Maven coordinates | Module info | Remarks
------------------------------------------- | ------------------------------------- | -------------------
`org.apache.sis.code:sis-feature` | `org.apache.sis.feature` |
`org.apache.sis.non-free:sis-embedded-data` | `org.apache.sis.referencing.database` | Non-Apache license.
The [EPSG dependency](../epsg.html) is necessary for this example
because a Coordinate Reference System (CRS) is instantiated from its EPSG code.
But it would also be possible to specify a CRS without EPSG code,
for example using Well Known Text (WKT) format.
# Code example
The file name in following code need to be updated for yours data.
```java
import org.apache.sis.coverage.grid.GridCoverage;
import org.apache.sis.coverage.grid.GridCoverageProcessor;
import org.apache.sis.image.Interpolation;
import org.apache.sis.referencing.CRS;
import org.opengis.referencing.operation.TransformException;
import org.opengis.util.FactoryException;
public class ResampleRaster {
/**
* Demo entry point.
*
* @param args ignored.
* @throws FactoryException if an error occurred while creating the Coordinate Reference System (CRS).
* @throws TransformException if an error occurred while transforming coordinates to the target CRS.
*/
public static void main(String[] args) throws FactoryException, TransformException {
GridCoverage data = ...; // See "Read netCDF" or "Read GeoTIFF" code examples.
System.out.printf("Information about the selected image:%n%s%n", data.getGridGeometry());
/*
* Reproject to "WGS 84 / World Mercator" (EPSG::3395) using bilinear interpolation.
* This example lets Apache SIS choose the output grid size and resolution.
* But it is possible to specify those aspects if desired.
*/
var processor = new GridCoverageProcessor();
processor.setInterpolation(Interpolation.BILINEAR);
data = processor.resample(data, CRS.forCode("EPSG::3395"));
System.out.printf("Information about the image after reprojection:%n%s%n", data.getGridGeometry());
}
}
```
# Output
The output depends on the raster data and the locale.
Below is an example:
```
Information about the image after reprojection:
GridGeometry
  ├─Grid extent
  │   ├─Column: [0 … 8191] (8192 cells)
  │   └─Row: [0 … 8191] (8192 cells)
  ├─Geographic extent
  │   ├─Lower bound: 48°59′20″N 02°31′33″E
  │   └─Upper bound: 49°01′08″N 02°34′16″E
  ├─Envelope
  │   ├─Easting: 465,341.6 … 468,618.39999999997 ∆E = 0.4 m
  │   └─Northing: 5,426,352.8 … 5,429,629.6 ∆N = 0.4 m
  ├─Coordinate reference system
  │   └─EPSG:32631 — WGS 84 / UTM zone 31N
  └─Conversion (origin in a cell center)
      └─┌ ┐
        │ 0.4 0 465341.8 │
        │ 0 -0.4 5429629.4 │
        │ 0 0 1 │
        └ ┘
Information about the image after reprojection:
GridGeometry
  ├─Grid extent
  │   ├─Dimension 0: [0 … 8239] (8240 cells)
  │   └─Dimension 1: [0 … 8240] (8241 cells)
  ├─Geographic extent
  │   ├─Lower bound: 48°59′20″N 02°31′33″E
  │   └─Upper bound: 49°01′08″N 02°34′16″E
  ├─Envelope
  │   ├─Easting: 281,190.4273301751 … 286,207.11249780044 ∆E = 0.60882102 m
  │   └─Northing: 6,240,752.860382801 … 6,245,770.154371441 ∆N = 0.60882102 m
  ├─Coordinate reference system
  │   └─EPSG:3395 — WGS 84 / World Mercator
  └─Conversion (origin in a cell center)
      └─┌ ┐
        │ 0.6088210154885099 0 281190.73174068285 │
        │ 0 -0.60882101548851 6245769.8499609330 │
        │ 0 0 1 │
        └ ┘
```