LineString을 Polygon으로 캐스팅하면 y 좌표가 같을 때 ClassCastException이 발생합니다.
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
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))
참고 : 다각형은 너비가 없기 때문에 여전히 선처럼 보이지만 원하는 것입니다.