我有一个包含多边形和多多边形的大型(2.5 MB(geoJSON文件。
我想让它们的并集在浏览器中的地图上绘制。
在python中,我使用shapely.ops.unary_union
,它只需要不到一秒的
在javascript中,使用turf.union
(docs(处理同一个文件几乎需要一分钟。。。
有没有一种方法可以在javascript中实现快速多边形并集?我试图避免在服务器端上这样做
Python代码:
from shapely.ops import unary_union
from shapely.geometry import shape
geoJSON=json.load(open(filename,'rb'))
shapes=[]
for feature in geoJSON['features']:
shapes.append(shape(feature['geometry']))
union = unary_union(shapes)
Javascript代码:
function union(geojson){
features = geojson.features
union = turf.union(...features)
}
这不是一个真正的解决方案,但发现它比同时处理所有功能更快
union = features.reduce((accUnion,feature,index)=>index?turf.union(accUnion,feature):feature,null);
如果你需要一种非常快速的方法来合并客户端的多边形,那么我建议你用Rust或C++编写一个多边形并集算法,并将其编译到WebAssembly中。
然后,您可以将.wasm文件导入Javascript,并从WebAssembly的速度中获益。