Я использую geotools и jts-класс BufferOP, чтобы создать буфер вокруг моей геометрии. Во время тестирования я получил странный результат с точечной геометрией. Если я установлю capstyle на flat, мой результат всегда будет пустым многоугольником.
Линии и Полигоны работают. Кажется, только у этой проблемы есть проблемы.
Если я изменю его на параметр округления или квадрата, я получу ожидаемый результат.
Я использую снимок geotools 21 с Maven и Jave 8.
вот файл maven pom, который я использовал, и пример кода
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<geotools.version>21-SNAPSHOT</geotools.version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-geometry</artifactId>
<version>${geotools.version}</version>
</dependency>
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-epsg-hsql</artifactId>
<version>${geotools.version}</version>
</dependency>
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-epsg-wkt </artifactId>
<version>${geotools.version}</version>
</dependency>
import org.geotools.geometry.jts.JTSFactoryFinder;
import org.geotools.referencing.CRS;
import org.geotools.util.factory.Hints;
import org.locationtech.jts.geom.*;
import org.locationtech.jts.io.ParseException;
import org.locationtech.jts.io.WKTReader;
import org.locationtech.jts.operation.buffer.BufferOp;
import org.locationtech.jts.operation.buffer.BufferParameters;
import org.opengis.referencing.FactoryException;
import org.opengis.referencing.crs.CoordinateReferenceSystem;
import org.opengis.referencing.operation.TransformException;
import java.io.IOException;
public class App
{
public static void main( String[] args ) throws ParseException, IOException, FactoryException, TransformException {
Integer epsg= 32632;
String wkt = "POINT (5293201.002716452 1208988.4067087262)";
//setup geometry point in utm coordinates (meter)
// create geometry
CoordinateReferenceSystem crs = CRS.decode(("EPSG:"+ epsg.toString()));
Hints hints = new Hints(Hints.CRS, crs);
GeometryFactory geometryFactoryWKT = JTSFactoryFinder.getGeometryFactory(hints);
WKTReader wktReader = new WKTReader(geometryFactoryWKT);
Geometry geom = wktReader.read(wkt);
geom.setSRID(epsg);
// creates BufferParameters
BufferParameters bufferParam = new BufferParameters();
bufferParam.setEndCapStyle(BufferParameters.CAP_FLAT);
// if using any other parameter result is as expected
// bufferParam.setEndCapStyle(BufferParameters.CAP_ROUND);
bufferParam.setJoinStyle(BufferParameters.JOIN_BEVEL );
bufferParam.setMitreLimit(5);
bufferParam.setSimplifyFactor(0.01);
bufferParam.setQuadrantSegments(8);
// creates buffer geom on point with 10m distance and use set bufferParameters
Geometry bufferGeom = BufferOp.bufferOp(geom ,10, bufferParam);
System.out.println(bufferGeom);
}
Кто-нибудь знает почему?