空间数据检查相交的时候报错
报错内容:
found non-noded intersection between LINESTRING ( 108.5802541270701 34.56878983554159, 108.5803530815391 34.56838529513284 ) and LINESTRING ( 108.58052086127647 34.56883746454898, 108.5802541270701 34.56878983554159 ) [ (108.5802541270701, 34.56878983554159, NaN) ]
查看存在问题地块发现存在自相交问题:
解决方法: 修复地块,使用修复后的地块在检查相交
修复问题地块方法:
import org.locationtech.jts.geom.Geometry;
import org.locationtech.jts.operation.polygonize.Polygonizer;
import java.util.Collection;
public class GeoTools {
/**
* 修复Geometry
* 该方法旨在修复给定几何图形的无效多边形通过将它们转换为有效多边形
* 它使用Polygonizer来分解和重建输入几何图形
*
* @param geometry 需要修复的几何图形对象
* @return 修复后的几何图形对象,如果无法修复则返回null
*/
public static Geometry fixGeometry(Geometry geometry) {
// 使用Polygonizer分解输入几何图形
Polygonizer oldPolygonizer = new Polygonizer();
oldPolygonizer.add(geometry);
Collection<Geometry> polygons = oldPolygonizer.getPolygons();
// 创建新的Polygonizer来重建多边形
Polygonizer newPolygonizer = new Polygonizer();
for (Geometry polygon : polygons) {
// 检查多边形是否有效,如果无效,则使用缓冲区操作来修复
if (!polygon.isValid()) {
Geometry buffer = polygon.buffer(0);
newPolygonizer.add(buffer);
} else {
newPolygonizer.add(polygon);
}
}
// 获取重建后的几何图形并检查其有效性
Geometry newGeometry = newPolygonizer.getGeometry();
if (newGeometry.isValid()) {
return newGeometry;
}
return null;
}
}
评论区