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) ]
したがって、ねじれが原因ではありません (または少なくともそれだけではありません)。