Javascript 一组多边形的外部封套

Javascript 一组多边形的外部封套,javascript,leaflet,polygon,geojson,turfjs,Javascript,Leaflet,Polygon,Geojson,Turfjs,我有一个GeoJson文件,它有多个多边形。 像这样的 我使用传单在网站上呈现此GeoJson。 我想画一个围绕多边形的轮廓,它覆盖了所有多边形。像这样的。 我使用的GeoJSOn格式: { "features": [ { "geometry": { "coordinates": [ [ [ 1074.426, -1136.986 ], [

我有一个GeoJson文件,它有多个多边形。 像这样的

我使用传单在网站上呈现此GeoJson。
我想画一个围绕多边形的轮廓,它覆盖了所有多边形。像这样的。

我使用的GeoJSOn格式:

{
"features": [
  {
    "geometry": {
      "coordinates": [
        [
          [
            1074.426,
            -1136.986
          ],
          [
            1088.241,
            -1123.171
          ]
        ]
      ],
      "type": "Polygon"
    },
    "properties": {
      "number": "2009",
      "type": "",
      "spaceid": null,
      "alias": null,
      "roomkey": "5/2009"
    },
    "type": "Feature"
  }
],
"bbox": [
  2445.578,
  2445.578
],
"crs": {
  "properties": {
    "name": "urn:ogc:def:crs:OGC:1.3:CRS84"
  },
  "type": "name"
},
"type": "FeatureCollection"
}

任何指针都会有帮助:)谢谢你寻找“凸面外壳”:

在数学中,欧几里德平面或欧几里德空间(或更一般地说,在实数上的仿射空间)中的点集X的凸包或凸包是包含X的最小凸集

参考:

您可以使用turp.js
convertic
方法:

获取要素或要素集合并返回凸面外壳多边形

参考:

例如:

var-map=newl.map('传单',{center:[0,0],zoom:0});
var collection=turp.featureCollection([
草皮多边形([-80,-80],-40,-80],-40,-40],-80,-40],-80,-80]]),
草皮多边形([[80,80],[40,80],[40,40],[80,40],[80,80]])
]);
新的L.GeoJSON(集合,{color:'red'}).addTo(map);
var polygon=草皮凸面(集合);
新的L.GeoJSON(多边形,{color:'black',fill:'false})
正文{
保证金:0;
}
html,正文,#传单{
身高:100%;
}

单张1.2.0

@Shaswat,关于凸面外壳缺少内点,你是对的。所以我试着用turf.union:

const turf = require('@turf/turf')

const originGeojson = require('./SECCIONES_13_geo.json')

const totalUnion = originGeojson.features.reduce((union, feature, index) => {
  if (!union) {
    return turf.polygon(feature.geometry.coordinates)
  }

  try {
    return turf.union(union, turf.polygon(feature.geometry.coordinates))
  } catch (err) {
    return union
  }
})

console.log(JSON.stringify(totalUnion))
但它会产生像这样的东西,里面有很多洞

对于catch块,代码本身是不正确的,这只是一种遍历整个列表的方法。捕获中的错误是:

错误:多边形的每个线性化必须有4个或更多位置


如果有人能分享解决此问题的正确方法,我将不胜感激。

我成功地做到了这一点,但使用了TopoJSON

首先,我尝试在tuffjs中使用“union”函数。但是它非常慢(我有一个非常详细的geojson)

所以我换成了topojson。首先,需要将geojson转换为topojson。然后使用topojson客户端库中的“merge”函数。合并返回多多边形,但它比原始几何图形简单得多

然后,您需要在代码中执行其他处理,以删除属于其他多边形的一些多边形


但是凸面外壳忽略了内部点。如果你考虑一个L形的拐角…如果你看到这张图片,你会选择上面的两点,我不想要那些空白。边界必须沿边运行。要包络的多边形是否共享边?如果没有,凸面外壳是您的主要选择(如其他答案中所述)。如果多边形共享边,则可能存在基于未共享边(以及组合多边形的外部限制)组装外部多边形(和内环)的解决方案。