turf.buffer(result, 0, 'kilometers')
您可以尝试通过( turf-buffer docs )运行生成的多边形。如果您的结果是无效的 geojson,那么使用 0 的缓冲区应该清理几何图形(删除中间的点/线)。
如果没有看到结果的实际 GeoJSON,很难说什么会起作用。有什么办法可以将它上传到pastebin或其他东西吗?
更新 - 在这种情况下,草皮缓冲区不起作用。我可以开始工作的唯一解决方案是对turf.union(p1, p2)
.
result.geometry.coordinates = [result.geometry.coordinates[0]]
您要小心使用此解决方案,因为它会从多边形中移除除外环之外的所有内容。
要了解其工作原理/方式,您需要确保了解 geojson 多边形的坐标是如何工作的。来自geojson.org geojson 多边形规范
对于“Polygon”类型,“coordinates”成员必须是 LinearRing 坐标数组的数组。对于具有多个环的多边形,第一个必须是外环,其他必须是内环或孔。
外环本质上是多边形的轮廓。任何内环通常表示为孔。在您的情况下,内环实际上是线条。
查看 geojson 多边形的坐标时,您会注意到所有坐标都包含在外部数组中。这是一个只有一个(外部)环的 geojson 多边形示例。
{"type": "Feature", "properties": {}, "geometry": {"type": "Polygon", "coordinates": **[ [ [1, 1], [1, 2], [1, 3], [1, 1] ] ]**
请注意,环的第一个坐标和最后一个坐标必须始终相同。这确保我们得到一个封闭的形状(即:多边形)。
现在这是一个带有外环和内环的示例
{"type": "Feature", "properties": {}, "geometry": {"type": "Polygon", "coordinates": **[ [ [1, 1], [1, 2], [1, 3], [1, 1] ], [ [1, 2], [1, 3], [1, 1] ] ]**
现在,如果我们将建议的解决方案应用于上述示例,我们将获得与第一个示例相同的坐标,因为我们只从多边形中获取第一组坐标,这始终是外环。坐标数组中的任何后续元素都将表示内部环(这就是线条,即使它们在技术上不是有效的内部环)。
{"type": "Feature", "properties": {}, "geometry": {"type": "Polygon", "coordinates": **[ [ [1, 1], [1, 2], [1, 3], [1, 1] ] ]**
如您所见,我们正在从多边形中移除所有内环。这就是你必须小心使用它的原因。如果你有有效的内环,它实际上会摆脱那些。
我认为发生这种情况的原因是因为您的多边形 (p1
和p2
) 共享一个边界。