使用网格

时间:2017-07-10 04:24:51

标签: python algorithm pandas numpy grid

我有轨迹数据,其中每个轨迹由一系列坐标组成,每个轨迹由唯一ID标识。

这些轨迹位于 x-y 平面,我想将整个平面划分为相等大小的单元网格(方形网格)。该网格显然是不可见的,但用于将轨迹划分为子轨迹。每当轨迹与网格线相交时,它就会成为一个带有“ new_id ”的新子轨迹,即轨迹在网格线的交点处被划分,并且这些段中的每一个都具有新的唯一ID

最后,我希望选择任何随机网格单元并检索该单元格中的所有子轨迹。

请建议我将2d平面划分为网格的方法,以及如何在遇到网格线时对轨迹进行分割。我正在研究Python,并寻找一些python实现链接,建议,算法,甚至是伪代码。

如果有任何不清楚的地方,请告诉我。

1 个答案:

答案 0 :(得分:1)

网格索引很简单:

x_idx =  Floor(x / CellSize)  //rounding it integer down 

但是找到与网格的交叉点取决于方式 - 如何定义轨迹。如果它们是折线 - 直线段的序列 - 只需计算线段与网格线的交点

 X = k * CellSize
 Y = l * CellSize

在k,l段的起始和结束单元格之间的间隔

示例:折线从点x [0],y [0]开始。这对应于具有索引的单元格

x_idx[0] =  Floor(x[0] / CellSize)
y_idx[0] =  Floor(y[0] / CellSize)

第一个分段x[1], y[1]末尾的查找单元格。如果单元格索引保持不变,则整个段位于单个单元格中,并且不与网格交叉。如果x_idx[1]大于x_idx[0],则段与垂直网格线相交

(x_idx[0] + 1) * CellSize   //right border of the initial cell
(x_idx[0] + 2) * CellSize   
...
(x_idx[1]) * CellSize       //left border of the final cell

How to find intersection point

P.S。如果段很长并且通常与许多单元格相交,则值得使用高级算法进行交叉计算,例如Amanatides and Woo