LineString'i Polygon'a çevrim, y koordinatları aynı olduğunda ClassCastException ile sonuçlanır

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

Bu tür kod, ClassCastException () ile sonuçlanır. Ancak, herhangi bir koordinatın y değerini değiştirdiğimde, örneğin birincisini 34.6309 4'e değiştirdiğimde herhangi bir hata almıyorum.
Ben kullanıyorum org.locationtech.jts-1.17.

Bu İstisna olmadan onu Polygon'a aktarmak istiyorum. Veya istisna gerçekte geçerli ve iki koordinatlı LineString'i Polygon'a çevirememem mi gerekiyor?

Yanıtlar

3 IanTurton Aug 17 2020 at 20:27

MultiLineString'iniz dikey bir çizgi olduğu için, zarfı istediğinizde JTS size bir satır geri verir (bunun yararlı olduğunu düşünür). Öyleyse internalEnvelope, size bir Envelope(xmin / xmax, ymin / ymax) verecek olanı istemeniz gerekir. Daha sonra bunu Utility sınıfınıPolygon kullanarak dönüştürebilirsiniz .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);

Hangi üretir:

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

Not: Çokgen, genişliği olmadığı için yine de bir çizgi gibi görünecektir, ancak sanırım istediğiniz budur.