标签: mapshaper

如何修复geojson以满足mongodb 2dsphere索引的需求

我在mongo集合中有~400K文档,所有文档都具有几何type:Polygon.2dsphere由于几何体显然具有自交叉,因此无法像当前所示那样为数据添加索引.

在过去,我们有一个hacky解决方法,即在mongoose保存钩子上计算几何的边界框,然后索引而不是几何体本身,但我们想简化事情并只使用实际几何.

到目前为止,我尝试使用草皮如下(这是一个函数的主体fix):

let geom = turf.polygon(geometry.coordinates);
geom = turf.simplify(geom, { tolerance: 1e-7 }); 
geom = turf.cleanCoords(geom); 
geom = turf.unkinkPolygon(geom);
geom = turf.combine(geom);
return geom.features[0].geometry;
Run Code Online (Sandbox Code Playgroud)

最重要的功能是unkinkPolygons我希望它能完全符合我的要求,即使几何体足够好以便进行索引.这simplify可能没什么用,但我把它添加进去了.那clean是因为unkink抱怨它的输入,并且combine是将Polygons 数组转换成单个数组MultiPolygon.实际上,unkink仍然不满意它的输入,所以我不得不编写一个hacky函数,如下所示,抖动重复的顶点,这会修改geom之前传递给unkink:

function jitterDups(geom) {
  let coords = geom.geometry.coordinates;
  let points = new Set();
  for (let ii = 0; ii < coords.length; ii++) {
    // last coords is …
Run Code Online (Sandbox Code Playgroud)

postgis mongodb geojson turfjs mapshaper

5
推荐指数
1
解决办法
364
查看次数

标签 统计

geojson ×1

mapshaper ×1

mongodb ×1

postgis ×1

turfjs ×1