问题描述
我有一个很大的(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 的速度中受益。