конвертировать MultiLineString в MultiPolygon - PullRequest
0 голосов
/ 22 октября 2018

Я работаю с базой данных 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 закрыто

Кто-нибудь занимался подобной проблемой?

...