JavaScript中的快速多边形联合

问题描述

我有一个很大的(2.5 MB)geoJSON文件,其中包含多边形和多多边形。

我想让所有这些元素结合在一起,在浏览器的地图上进行绘制。

在python中,我使用shapely.ops.unary_union耗时不到一秒

在javascript中,使用turf.uniondocs)几乎需要花费一分钟的时间来处理同一文件...

有没有办法在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 的速度中受益。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...