Я работаю с базой данных postgres, расширением postgis и Java-приложением, которое сохраняет геоданные.У меня есть файл формы, который содержит MultiLineString
, состоящий из одного закрытого LineString
.Хотя технически это не MultiPolygon
, мне нужно преобразовать его в MultiPolygon
, чтобы сохранить его в столбце shape
, определенном как geometry(MultiPolygon,4326)
.
Я читал, что у postgis есть функция, ST_ConvexHull
и я использовал то, что кажется его эквивалентом в Java, следующим образом:
Geometry shape = ... // the shape, which happens to be a MultiLineString
...
Geometry convexHull = shape.convexHull();
if (convexHull instanceof Polygon) {
shapeDTO.setShape(geometryFactory.createMultiPolygon(new Polygon[] { (Polygon) convexHull }));
} else {
final String errMsg = "shape does not have at least 3 points, cannot create polygonal convex hull";
log.error(errMsg);
throw new IOException(errMsg);
}
Альтернативой этому может быть
GeometryFactory gf = new GeometryFactory();
Polygon polygon = gf.createPolygon(shape.getCoordinates());
MultiPolygon multiPolygon = gf.createMultiPolygon(new Polygon[]{ polygon });
multiPolygon.setSRID(4326);
shapeDTO.setShape(multiPolygon);
, который кажется более точным, если формаLineString
закрыто
Кто-нибудь занимался подобной проблемой?