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
ます。
私が達成したいのは、この例外なしでポリゴンにキャストすることです。または、例外は実際に有効であり、2座標のLineStringをPolygonにキャストできないようにする必要がありますか?
回答
3 IanTurton Aug 17 2020 at 20:27
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))
注:ポリゴンには幅がないため、線のように見えますが、それが必要なことだと思います。