Я нашел хакерское решение, основная проблема в том, что ввод - это просто фрагмент gml, а не действительный документ. Поэтому невозможно использовать xpath для извлечения атрибута srsName, поскольку пространства имен не связаны.
Я искал с помощью регулярных выражений атрибут srsName и преобразовал геометрию.
try {
String gml = "<gml:LineString srsName=\"EPSG:25832\"><gml:coordinates>663957.75944074022118,5103981.64908889029175 663955.915655555087142,5103991.151674075052142</gml:coordinates></gml:LineString>";
Geometry geometry = gmlReader.read(gml, geometryFactory);
Pattern p = Pattern.compile("srsName=\\\"([^\"]*)\\\"");
Matcher m = p.matcher(gml);
if (m.find()) {
String srs = m.group(1);
CoordinateReferenceSystem crsSource = CRS.decode(srs);
GeographicCRS crsTarget =
org.geotools.referencing.crs.DefaultGeographicCRS.WGS84;
MathTransform transform = CRS.findMathTransform(crsSource, crsTarget, false);
geometry = JTS.transform(geometry, transform);
}
String wktString = wktWriter.write(geometry);
} catch (Exception e) {
throw new RuntimeException(e);
}
Гадкий как ****, есть ли более чистый путь?