5

Fortune のアルゴリズムの Javascript 実装を使用して、ボロノイ セル ( https://github.com/gorhill/Javascript-Voronoi ) を計算しています。計算する私のサイトは、マップ上のポイントです (そう(lat,lng)です)。最初に射影を作成し(lat,lng) -> (x,y)、次にボロノイ セルを計算し、半分のエッジの射影を逆に作成しました。
リーフレットを使用して結果を表示しますが、もう 1 つ行う必要があります。

最初に計算する各サイトは ID に依存します。ボロノイ セルを ID で再分類すると、各 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 のポリゴンのセット (ボロノイ セルの半分のエッジから作成)。

これらのポリゴンを 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 のすべてのポリゴンを表示すると、正しい図が表示されますが、1 つの ID のすべてのポリゴンまたは 1 つの ID のいくつかのポリゴンを表示すると、不完全な図になります。

全体図の一部

全体図の一部

ここに画像の説明を入力

1 つの ID の図の一部

ここに画像の説明を入力

特定の ID の 2 つの「ポリゴン」

少なくとも 1 つの共通の頂点を共有するポリゴンをマージする方法を知っている人はいますか? また、トポロジ エラーが発生するのはなぜですか?

編集:ポリゴンは「不完全」ではありません(ポリラインを使用していました)

ここに画像の説明を入力

簡単なサンプルも試しました:

ここに画像の説明を入力

それでもエラーが発生しました:

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

したがって、ねじれが原因ではありません (または少なくともそれだけではありません)。

4

1 に答える 1