Приведение LineString к Polygon приводит к исключению ClassCastException, когда координаты y совпадают
final WKTReader wktReader = new WKTReader();
String geomString = "MULTILINESTRING ((-98.753985 34.63093, -98.7555568 34.63093))";
MultiLineString geom = (MultiLineString)wktReader.read(geomString);
LineString newGeom = new GeometryFactory().createLineString(geom.getCoordinates());
Polygon envelope = (Polygon) newGeom.getEnvelope();
Такой код получается с ClassCastException (). Однако, когда я изменяю значение y любой из координат, например, первое на 34.6309 4 , я не получаю никаких ошибок.
Я использую org.locationtech.jts-1.17
.
Чего бы я хотел добиться, так это привести его к Polygon без этого исключения. Или исключение действительно действительно, и я не смогу преобразовать двухкоординатный LineString в Polygon?
Ответы
Поскольку ваш MultiLineString представляет собой вертикальную линию, JTS возвращает вам строку, когда вы запрашиваете конверт (он думает, что это полезно). Поэтому вам нужно спросить, internalEnvelope
что даст вам Envelope
(xmin / xmax, ymin / ymax). Вы можете преобразовать это в Polygon
использовании org.geotools.geometry.jts.JTS
класса Utility .
final WKTReader wktReader = new WKTReader();
String geomString = "MULTILINESTRING ((-98.753985 34.63093, -98.7555568 34.63093))";
MultiLineString geom = (MultiLineString) wktReader.read(geomString);
LineString newGeom = new GeometryFactory().createLineString(geom.getCoordinates());
Geometry envelope = newGeom.getEnvelope();
System.out.println(envelope);
Envelope env = newGeom.getEnvelopeInternal();
System.out.println(env);
Polygon polygon = JTS.toGeometry(env);
System.out.println(polygon);
Что производит:
LINESTRING (-98.7555568 34.63093, -98.753985 34.63093)
Env[-98.7555568 : -98.753985, 34.63093 : 34.63093]
POLYGON ((-98.7555568 34.63093, -98.753985 34.63093, -98.753985 34.63093, -98.7555568 34.63093, -98.7555568 34.63093))
Примечание: многоугольник по-прежнему будет выглядеть как линия, поскольку у него нет ширины, но я думаю, это то, что вам нужно.