我正在使用Fortune算法的Javascript实现来计算Voronoi图形 (https://github.com/gorhill/Javascript-Voronoi)。我的计算站点是地图上的点 (即
它的工作正常,我使用leaflet显示结果,但我需要做更多的事情。
每个我最初计算的站点都依赖于一个ID,我通过ID重新分类Voronoi单元格,最终为每个ID得到一个标准数据结构,看起来像这样:
给定ID的一组多边形(由沃罗诺伊单元的半边构成)。
我需要按ID将这些多边形合并,打算使用,但出现了拓扑错误。
基于这篇文章(http://lists.refractions.net/pipermail/jts-devel/2009-March/002939.html),我尝试将
所以这不是(或至少不仅仅是)由于缺陷引起的。
(纬度,经度)
)。我首先进行了投影 (纬度,经度) -> (x,y)
,然后计算了Voronoi图形,并将半边投影到另一侧。它的工作正常,我使用leaflet显示结果,但我需要做更多的事情。
每个我最初计算的站点都依赖于一个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的一组多边形(由沃罗诺伊单元的半边构成)。
我需要按ID将这些多边形合并,打算使用,但出现了拓扑错误。
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的图表的一部分
给定ID的两个“多边形”
有没有人有想法如何合并共享至少一个公共顶点的多边形?为什么会出现拓扑错误?
编辑:多边形不是“不完整的”(我使用了折线)
我还在一个更简单的样本上尝试过:
但仍然出现错误:
Uncaught TopologyError: side location conflict [ (44.8220601, -0.5869532) ]
所以这不是(或至少不仅仅是)由于缺陷引起的。