【问题标题】:converting points on map to polygons将地图上的点转换为多边形
【发布时间】:2011-10-18 12:19:54
【问题描述】:

我们在地图上有数千个点。这些点是在人四处移动时定期进行的测量,因此每个点的位置在窗口内是随机的,但是当您查看数据时,您可以看到所采用的路径。 为了更快地渲染数据(现在它是一个蛞蝓),我想将聚集点转换为多边形并绘制它们(我可以通过为缩放级别选择正确的多边形细节来处理丢失的细节)。

有没有什么好的快速算法来做这样的事情?

【问题讨论】:

标签: algorithm polygon point


【解决方案1】:

我认为不可能知道所采用的确切路径,但假设离给定点最近的点是路径上的下一个点将是一个相当合理的假设。我不确定你正在处理什么大小的多边形,但最终你会计算地图上哪个点最接近当前点,那个点将是多边形中的下一个点。如果您的多边形非常大,则需要计算点之间的大圆距离以确保准确性。

【讨论】:

  • 嗯。再次阅读问题。它不完全是你要回答的。我在问是否有一种快速算法可以用多边形逼近一组点。
  • 是的,但我的回答给了你一个算法。快不快还有待确定。
【解决方案2】:

您希望多边形代表什么?你的意思是一个多边形,就像一个覆盖移动路径区域的封闭区域(即仅边界)?还是所有访问点之间的精确线段多边形?后者的绘制速度不会比点本身快,因为它是一个多边形,其角与点数一样多。

如果此人在某个区域内四处走动(例如,送货司机覆盖城市的一部分),那么您可以通过点的凸包来近似他的“覆盖区域”。如果数据集中有 N 个点,这是一个具有 3 到 N 个角的封闭凸多边形。

定义

http://mathworld.wolfram.com/ConvexHull.html

算法

http://en.wikipedia.org/wiki/Convex_hull_algorithms

如果你想对路径而不是一些被覆盖的区域做一个近似,你总是可以通过(比如说)每7个点绘制一个粗略的LOD算法,然后每 5 点,然后当用户进一步放大时每 3 点。更复杂的 LOD 算法可以从点 p0 和 p1 开始,使用通过这些点的方向并查看从方向线到 p2 的距离。如果 p2 与该行足够接近,则跳过它,并调查 p3。如果行进方向有足够大的变化,请将最后两点标记为当前路线并重复。允许的方向变化将是决定绘制多少点的 LOD 参数。该算法将尝试逼近路径上的“重要”点(方向改变的地方)。

【讨论】:

  • 谢谢!我将研究凸包算法。
【解决方案3】:

对于聚集点,您可以使用来自文档的甲板 gls 六边形层 -> 六边形层基于点数组呈现六边形热图。它采用六边形箱的半径,将点投影到六边形箱中。六边形的颜色和高度按其包含的点数进行缩放。

https://github.com/uber/deck.gl/blob/master/docs/layers/hexagon-layer.md

这个超级酷的例子 -> http://deck.gl/#/examples/core-layers/hexagon-layer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-29
    • 1970-01-01
    • 1970-01-01
    • 2018-08-19
    • 1970-01-01
    • 2013-10-03
    • 2013-04-21
    • 1970-01-01
    相关资源
    最近更新 更多