You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Buffer Polygon线性环不闭合问题求助:返回含无穷坐标

解决缓冲多边形首尾点不一致及出现Infinity坐标问题
  • 确保原始输入是闭合的LinearRing
    多数缓冲算法要求输入的多边形是闭合状态(首尾点坐标完全一致),如果你的coordinateArray未闭合,先手动处理:

    val pointList = coordinateArray.map { Point(it[0], it[1]) }
    // 检查并闭合原始点列表
    val closedPointList = if (pointList.first() != pointList.last()) {
        pointList + pointList.first()
    } else {
        pointList
    }
    
  • 过滤无效坐标并闭合缓冲结果
    生成缓冲后先剔除包含Infinity或NaN的无效点,再强制闭合缓冲后的点列表:

    val distance = 0.0001
    val bufferedPolygonList: List<Point> = AreaBuffer.buffer(closedPointList, distance)
    // 过滤非有限值的异常点
    val validPoints = bufferedPolygonList.filter { it.x.isFinite() && it.y.isFinite() }
    // 确保缓冲后的多边形首尾闭合
    val closedValidPoints = if (validPoints.isNotEmpty() && validPoints.first() != validPoints.last()) {
        validPoints + validPoints.first()
    } else {
        validPoints
    }
    val newBufferedCoordinateArray = closedValidPoints.map { mutableListOf(it.x, it.y) }.toMutableList()
    
  • 检查原始多边形的顶点顺序
    部分缓冲算法对顶点的顺时针/逆时针顺序有严格要求,乱序可能触发计算溢出。可以尝试调整顶点顺序(比如按顺时针重新排列)后再执行缓冲操作。

  • 替换为更可靠的GIS库实现
    如果上述方法无法解决问题,建议使用成熟的GIS库(如JTS)生成缓冲,其算法稳定性更强,能处理更多边界情况:

    import org.locationtech.jts.geom.*
    import org.locationtech.jts.operation.buffer.BufferOp
    
    // 初始化JTS几何工厂
    val geometryFactory = GeometryFactory()
    
    // 转换原始坐标为JTS Coordinate数组并闭合
    val rawCoords = coordinateArray.map { Coordinate(it[0], it[1]) }.toTypedArray()
    if (rawCoords.first() != rawCoords.last()) {
        rawCoords += rawCoords.first()
    }
    val polygon = geometryFactory.createPolygon(rawCoords)
    
    // 生成缓冲(注意:若原始坐标是经纬度,distance单位为度,如需米级缓冲需先投影)
    val bufferedPolygon = polygon.buffer(distance)
    
    // 提取最终缓冲坐标
    val newBufferedCoordinateArray = bufferedPolygon.coordinates.map { mutableListOf(it.x, it.y) }.toMutableList()
    

内容的提问来源于stack exchange,提问作者KJSR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 19:45:31