Javascript 一组多边形的外部封套
我有一个GeoJson文件,它有多个多边形。 像这样的 我使用传单在网站上呈现此GeoJson。Javascript 一组多边形的外部封套,javascript,leaflet,polygon,geojson,turfjs,Javascript,Leaflet,Polygon,Geojson,Turfjs,我有一个GeoJson文件,它有多个多边形。 像这样的 我使用传单在网站上呈现此GeoJson。 我想画一个围绕多边形的轮廓,它覆盖了所有多边形。像这样的。 我使用的GeoJSOn格式: { "features": [ { "geometry": { "coordinates": [ [ [ 1074.426, -1136.986 ], [
我想画一个围绕多边形的轮廓,它覆盖了所有多边形。像这样的。 我使用的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.jsconvertic
方法:
获取要素或要素集合并返回凸面外壳多边形
参考:
例如:
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形的拐角…如果你看到这张图片,你会选择上面的两点,我不想要那些空白。边界必须沿边运行。要包络的多边形是否共享边?如果没有,凸面外壳是您的主要选择(如其他答案中所述)。如果多边形共享边,则可能存在基于未共享边(以及组合多边形的外部限制)组装外部多边形(和内环)的解决方案。