将地图上的点转换为多边形

问题描述 投票:1回答:3

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

做这样的事有什么好的快速算法吗?

algorithm polygon point
3个回答
1
投票

你想要多边形代表什么?你是指覆盖移动路径区域的封闭区域中的多边形(即仅边界)?或者所有访问点之间的线段的精确多边形?后者绘制的速度不会比点本身快,因为它将是一个多边形,角落数量与点数相同。

如果此人在一个区域内移动(例如覆盖城市一部分的送货司机),那么您可以通过点的凸包来近似他的“覆盖区域”。如果数据集中有N个点,则这是一个闭合的凸多边形,介于3和N角之间。

定义

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

算法

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

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


0
投票

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


0
投票

对于聚类点,您可以使用甲板gls六边形层,从文档 - >六边形层渲染基于点阵列的六边形热图。它采用六边形箱的半径,将点投射到六边形箱中。六边形的颜色和高度按其包含的点数进行缩放。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.