[geotk] Change the CRS of an existing GridCoverage2D
Martin Desruisseaux
martin.desruisseaux at geomatys.fr
Tue Mar 1 05:16:57 EST 2011
Hello Fabian
Sorry for the delay. I'm at the OGC meeting right now, which make me slower to
answer emails.
Le 27/02/11 22:42, Fabien Carrion a écrit :
> With those two print I get
> crs GEOGCS["WGS 84",
> DATUM["WGS_1984",
> SPHEROID["WGS 84", 6378137.0, 298.257223563, AUTHORITY["EPSG","7030"]],
> AUTHORITY["EPSG","6326"]],
> PRIMEM["Greenwich", 0.0, AUTHORITY["EPSG","8901"]],
> UNIT["degree", 0.017453292519943295],
> AXIS["Longitude", EAST],
> AXIS["Latitude", NORTH],
> AUTHORITY["EPSG","4326"]]
So we have a two dimensional CRS here.
> gridToCRS PARAM_MT["Affine",
> PARAMETER["num_row", 4],
> PARAMETER["num_col", 4],
> PARAMETER["elt_0_0", 0.09000000357627869],
> PARAMETER["elt_0_3", 215.86099243164062],
> PARAMETER["elt_1_1", -0.07699999958276749],
> PARAMETER["elt_1_3", 82.258999414742],
> PARAMETER["elt_2_2", �],
> PARAMETER["elt_2_3", �]]
This is expecting a 3D CRS, as seen from the "num_row" parameter (in the case of
an "Affine" transform - basically a matrix -, the number of rows is the number
of dimension of the target coordinate system plus one), so we have a dimension
mismatch with the above 2D CRS. This is the cause of the
MismatchedDimensionException. However the "?" value for "elt_2_2" and "elt_2_2"
is suspect and will probably cause more issue even if the
MismatchedDimensionException were solved.
> In my code I get the gridcoverage from the NetcdfReader I slightly
> modified and then I recreate a new gridcoverage based on the previous
> one to add the color to the image.
>
> Then I do
> String wkt = "GEOGCS[\"WGS 84\",...snip...]]";
> CoordinateReferenceSystem targetCRS = CRS.parseWKT(wkt);
The CRS needs to be a 3D one, or the grid geometry need to be a 2D one. If you
don't care about the third axis (which I guess is the time axis), the easiest
approach is to just drop the extra-dimension from the grid geometry. There is a
convenience method for that. In:
> oldCoverage.getGridGeometry().getGridToCRS(),
Replace the "getGridToCRS()" call by "getGridToCRS2D()" (the later method is
defined in the GridGeometry2D subclass).
> I am not very good at writting CoordinateReferenceSystem, is there any good documentation/book on it?
I'm not aware of a tutorial. The easiest way is to use an existing WKT, and
modify it. For example use System.out.println(CRS.decode("EPSG:foo")) then edit
the output.
The WKT syntax is defined at
http://www.geoapi.org/snapshot/javadoc/org/opengis/referencing/doc-files/WKT.html.
The projection and parameter names are listed at
http://www.remotesensing.org/geotiff/proj_list/.
Martin
More information about the Geotoolkit
mailing list