LineString을 Polygon으로 캐스팅하면 y 좌표가 같을 때 ClassCastException이 발생합니다.

Aug 17 2020
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 ()을 사용합니다. 그러나 첫 번째 좌표를 34.6309 4 로 변경하는 것과 같이 좌표의 y 값을 변경할 때 오류가 발생하지 않습니다.
나는 org.locationtech.jts-1.17.

내가 달성하고 싶은 것은이 예외없이 Polygon으로 캐스팅하는 것입니다. 아니면 예외가 실제로 유효하고 2 좌표 LineString을 Polygon으로 캐스트 할 수 없어야합니까?

답변

3 IanTurton Aug 17 2020 at 20:27

MultiLineString이 수직선이기 때문에 JTS는 봉투를 요청할 때 줄을 돌려줍니다 (이것이 도움이된다고 생각합니다). 그래서 당신 internalEnvelope은 당신에게 Envelope(xmin / xmax, ymin / ymax)를 줄 것을 물어야합니다 . 그런 다음 Utility 클래스를Polygon 사용하여 이를로 변환 할 수 있습니다 .org.geotools.geometry.jts.JTS

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))

참고 : 다각형은 너비가 없기 때문에 여전히 선처럼 보이지만 원하는 것입니다.