【问题标题】:Fast polygon union in javascriptjavascript中的快速多边形联合
【发布时间】:2021-02-02 07:15:10
【问题描述】:

我有一个包含多边形和多多边形的大 (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)
}

【问题讨论】:

    标签: javascript polygon geojson shapely turfjs


    【解决方案1】:

    这并不是真正的解决方案,但发现它比一次处理所有功能更快

    union = features.reduce((accUnion,feature,index)=>index?turf.union(accUnion,feature):feature,null);
    

    【讨论】:

      【解决方案2】:

      如果您需要一种非常快速的方法来在客户端合并多边形,那么我建议您使用 Rust 或 C++ 编写多边形联合算法并将其编译为 WebAssembly。

      然后您可以将 .wasm 文件导入 Javascript 并从 WebAssembly 的速度中受益。

      【讨论】:

      • 通过一个简短的谷歌研究,我发现了this js-angusj-clipper js 库,它支持union 操作。也许这个会满足你的要求。
      • js-angusj-clipper 库似乎只支持整数,但您可以尝试将纬度、经度坐标乘以十的正确幂。我不确定这会花费多少性能。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-27
      • 2011-10-14
      • 1970-01-01
      • 2015-05-07
      • 1970-01-01
      • 2013-12-07
      • 1970-01-01
      相关资源
      最近更新 更多