Hello Gary, and welcome!
Le 2024-01-07 à 22 h 00, Gary Lucas a écrit :
I am working on a Java application which develops an elevation data
raster product that I would like to store in a GeoTIFF file. Some of
my input data comes from shapefiles with associated .prj files. I
would like to be able to extract relevant information from the .prj
files and use it to populate GeoTIFF tags for output.
The easiest way would be:
import org.apache.sis.referencing.CRS;
CoordinateReferenceSystem crs = CRS.fromWKT(wkt);
However, the Shapefile format uses an old WKT version, which sometime
agrees with the standard expected by above method, and sometime not. So
a safer approach is to set explicitly the expected WKT variant:
import org.apache.sis.io.wkt.WKTFormat;
var parser = new WKTFormat(null, null);
parser.setConvention(Convention.WKT1_COMMON_UNITS);
var crs = (CoordinateReferenceSystem) parser.parseObject(wkt);
Can someone point me toward example code I could look at or maybe a
general outline of the steps for doing so? I have been looking through
the documentation, but need a place to start.
There is a "how to" page at https://sis.apache.org/howto.html - but of
course it needs more examples. For the next step (getting the EPSG code
to write in a GeoTIFF), see the "Get the EPSG code or URN of an existing
CRS" item.
Some of my sources come with EPSG codes that I can use to populate the
GeoTIFF ProjectedCrsGeoKey (GeoTiff spec section 6.3.3.1). However,
others carry general datum and map-projection parameters, so I would
have to populate multiple GeoTIff elements. A few of my data sources
are in geographic coordinate systems.
When the EPSG code is sufficient, above should help. When datum and
other properties needs to be written, this is more complicated. Apache
SIS 1.5 (not yet released, but available on snapshot repository) will
have a GeoTIFF writer, but if you prefer doing the work on your side,
the class `org.apache.sis.storage.geotiff.writer.GeoEncoder` class may
be used as a source of inspiration, in particular the
`writeCRS(GeodeticCRS)` and `writeCRS(ProjectedCRS)` method:
https://github.com/apache/sis/blob/2330bb247ded208d8722cbb88753310cd9b0bd68/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/writer/GeoEncoder.java#L364
Please let us know if there is any issue.
Martin