LineString'i Polygon'a çevrim, y koordinatları aynı olduğunda ClassCastException ile sonuçlanır
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
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.