MutableList转自定义Point对象列表出错,坐标出现无穷值求排查
问题排查与修复方案
核心问题:转换逻辑完全错误
你当前的转换代码根本没有读取coordinateArray中存储的经纬度数据,而是用循环索引i和i+1生成了无意义的坐标值。这种不符合地理坐标规范的输入,会导致AreaBuffer.buffer函数在计算时出现数值异常(比如溢出),最终产生无穷值。正确的转换逻辑
假设coordinateArray中每个子列表的结构是[经度, 纬度](即每个MutableList<Double>包含两个Double值),正确的转换代码应该是:val pointList: MutableList<Point> = ArrayList() for (coords in coordinateArray) { // 确保子列表包含至少两个元素,避免索引越界 if (coords.size >= 2) { val point = Point(coords[0], coords[1]) pointList.add(point) } } val distance = 0.0001 val bufferedPolygonList: List<Point> = AreaBuffer.buffer(pointList, distance)或者用更简洁的Kotlin风格写法:
val pointList = coordinateArray .filter { it.size >= 2 } .map { Point(it[0], it[1]) } .toMutableList() val distance = 0.0001 val bufferedPolygonList = AreaBuffer.buffer(pointList, distance)额外检查点
- 确认
coordinateArray本身是否有有效数据:如果原列表是空的,或者子列表的数值本身是非法值(比如无穷大、NaN),也会导致后续计算异常。 - 检查
AreaBuffer.buffer函数的输入要求:比如是否要求点列表构成闭合多边形(首尾点相同),如果输入的是开放线段,可能也会引发计算错误。
- 确认
内容的提问来源于stack exchange,提问作者KJSR
相关产品推荐
相关产品推荐

