如何合并相邻的多边形

时间:2016-03-29 09:47:51

标签: javascript geometry leaflet voronoi turfjs

我正在使用Fortune算法的Javascript实现来计算voronoi单元格(https://github.com/gorhill/Javascript-Voronoi)。我要计算的网站是地图上的点(所以(lat,lng))。我首先进行了投影(lat,lng) -> (x,y),然后我计算了voronoi单元格,并以另一种方式将半边投影。 它工作正常,我使用传单显示结果,但我需要做一件事。

我最初计算的每个站点都取决于ID,我按ID重新分类voronoi单元格,最后,对于每个具有标准数据结构的ID,如下所示:

{
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "geometry": {
        "type": "Polygon",
        "coordinates": [[
          [9.994812, 53.549487],
          [10.046997, 53.598209],
          [10.117721, 53.531737],
          [9.994812, 53.549487]
        ]]
      }
    }, {
      "type": "Feature",
      "geometry": {
        "type": "Polygon",
        "coordinates": [[
          [10.000991, 53.50418],
          [10.03807, 53.562539],
          [9.926834, 53.551731],
          [10.000991, 53.50418]
        ]]
      }
    }
  ]
};

给定ID的一组多边形(由voronoi单元格的一半边缘构成)。

我需要按ID合并这些多边形,我打算使用turf.merge(),但我有拓扑错误

 turf.min.js:13 Uncaught TopologyError: side location conflict

根据这篇文章(http://lists.refractions.net/pipermail/jts-devel/2009-March/002939.html),我试图将(lat,lng)夫妇从10 ^ -14圈到10 ^ -7但它确实没有用。 在寻找扭结并尝试删除它们之前,我打印了一些数据样本,我知道问自己是否使用了Fortune算法中的好数据。当我显示所有ID的所有多边形时,我有正确的图表,但是当我显示一个ID的所有多边形或一个ID的一些多边形时,我最终会得到不完整的图表:

part of the  full diagram

完整图表的一部分

enter image description here

一个ID

的部分图表

enter image description here

给定ID的两个“多边形”

有没有人知道如何合并至少共享一个共同顶点的多边形?为什么会出现拓扑错误?

编辑:多边形不是“不完整”(我使用折线)

enter image description here

我也尝试了一个更简单的样本:

enter image description here

仍然有错误:

Uncaught TopologyError: side location conflict [ (44.8220601, -0.5869532) ]

所以它不是(或至少不仅仅是)由于扭结

1 个答案:

答案 0 :(得分:2)

您的问题似乎是在数据到达Turf之前发生的。从GitHub issueGeoJSON validator运行GeoJSON会显示两个错误。第一个是你只为每个特征包含一个geometry对象,GeoJSON要求所有特征都有一个properties对象,即使它是空的。其次,更重要的是,有效的GeoJSON多边形必须是闭环,第一个和最后一个点的坐标相同。第二个问题似乎是导致Turf抛出错误的原因。一旦将第一组坐标复制到末尾以关闭环,多边形将成功合并。

在地图上显示数据后,您的纬度和经度也会反转。 GeoJSON中的坐标应该是lon,lat,因为你的坐标在lat,lon,所以多边形出现在印度洋的中间。一旦纠正,它们就会显示在正确的位置。

这是一个显示他们成功合并的小提琴:

http://fiddle.jshell.net/nathansnider/p7kfxvk7/

相关问题