我们在地图上有数千个点。这些点是在人们四处移动时定期进行的测量,因此每个点的位置在窗口内是随机的,但是当您查看数据时,您可以看到所采用的路径。 为了更快地渲染数据(现在它是一个slu),我想将聚类点转换为多边形并改为绘制它们(我可以通过为缩放级别选择正确的多边形细节来处理丢失的细节)。
有没有什么好的快速算法来做这样的事情?
答案 0 :(得分: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参数。该算法将尝试近似路径上的“重要”点(方向发生变化)。
答案 1 :(得分:0)
我认为不可能知道所采用的精确路径,但假设到给定点的最近点是路径上的下一个点是一个相当合理的假设。我不确定你正在处理什么尺寸的多边形,但最终你会计算出地图上哪个点最接近当前点,而那个点将是多边形中的下一个点。如果多边形非常大,则需要计算点之间的大圆距离以确保准确性。
答案 2 :(得分:0)
对于聚类点,您可以使用docs-> Hexagon层基于点数组绘制六边形热图。它采用六角形容器的半径,将点投影到六角形容器中。六角形的颜色和高度根据其包含的点数进行缩放。
https://github.com/uber/deck.gl/blob/master/docs/layers/hexagon-layer.md
超级酷的例子-> http://deck.gl/#/examples/core-layers/hexagon-layer