如何从2D numpy(lat,lon)数组中删除扇区/切片?

时间:2018-12-19 06:43:04

标签: python arrays numpy geometry

我在numpy数组中有一个网格网格(纬度,经度)数据的二维数组。从此数组中的单个指定点开始,我想在不同方向上延伸两条线,以便这两条线之间的区域创建一个圆的扇区。最好在下面的可视化文件中对此进行解释:

enter image description here

图像中的数字没有意义,仅用于可视化。

我希望将扇区内的所有点转换为NaN值,以便可以捕获红色零的索引。 (在图像中,将它们绘制为红色零点较为容易,但最好使用NaN。我所追求的确实是它们的索引。)对此的输入将是数组,圆弧的中心点以及角度每条线相对于水平线(或垂直线)。如图所示,这些线应超出(lat,lon)区域的边缘。

任何人都可以提出一种让我入门的方法,哪种numpy例程最有帮助?我承认我有些困惑。

编辑:我也有一个匹配的网格划分纬度和经度经度的数组。已知中心点的整数索引(因为我知道中心点的纬度/经度)。在本文中,“角度”和“线”是指文字地理空间。

1 个答案:

答案 0 :(得分:1)

让您拥有中央索引cx, cy

预先计算扇形的开始和结束角度的值:

  S_Cos = Cos(Start)
  S_Sin = Sin(Start)
  E_Cos = Cos(End)
  E_Sin = Sin(End)

然后使用边界条件将floodfill设置为零:

 (x-cx) * S_Sin - (y-cy) * S_Cos >= 0   //point is left to starting ray
 (x-cx) * E_Sin - (y-cy) * E_Cos <= 0   //point is right to ending ray
 x >= minx, y>=miny, x<=maxx, y<=maxy   //coordinate is inside array

以前的方法:

对于小弧角(<90度):

选择填充方向-在大多数情况下,水平线是不错的选择,而对于某些开始/结束方向,垂直填充更方便(例如:350度-10度)

使用Bresenham line algorithm沿中心光线进行遍历。对于每个Y步,在射线之间或射线与矩形(阵列)边界之间用零水平线填充

对于较大的圆弧-通过OX,OY轴将圆弧划分为较小的圆弧。