解决Turf.js中计算交集intersect方法产生的bug_一指流沙叹风华的博客

Turf.js中intersect方法的定义是两个多边形并找到它们的交点,如果它们共享一个边界,返回边界;如果它们不相交,返回undefined。这就是gis里的求交操作,输入两个面要素,如果有交集就返回公共的交集。原本是想用这个方法去代替Turf.js中的bboxClip方法,不过Turf的这个clip裁剪方法有点拉胯,输入的裁剪范围只能是BBox,就是矩形范围(extent in minX, minY, maxX, maxY ),如果你的裁剪要素是多边形就不能使用这个方法,可以用这个intersect方法变形代替。
在这里插入图片描述
在这里插入图片描述

在使用intersect方法时,要素feature是multiPolygon类型,即使要素显示的是polygon类型,如果它的geometry.coordinates属性的数组长度大于1,就已经是multiPolygon类型了,也叫做多部件要素,这时turf取交集操作会出现bug,取交集后明明是交集部分确会漏掉一些要素,这里可能是因为intersect方法在实现取交时只针对输入面要素属性中的geometry.coordinates数组中的第一个,一般只有multiPolygon要素中coordinates属性长度会大于1。此时要分解才能取交成功,即把多个一起的多边形要素分解为每个单独的多边形要素,具体实现如下

if (feature.geometry.coordinates.length > 1) {
          feature.geometry.coordinates.forEach((i) => {
            const geometry = {
              type: 'polygon',
              coordinates: [[...i]]
            }
            const feature: any = turf.feature(geometry)
            feature.properties = layer1.properties
            const f = intersect(feature, layer2)
            f && features.push(f)
          })
        }

本文转自 https://blog.csdn.net/weixin_38676065/article/details/125018023,如有侵权,请联系删除。

posted @ 2022-05-28 22:07  游侠舒迟  阅读(1093)  评论(0编辑  收藏  举报