返回numpy meshgrid中每个网格正方形的边界框

xytpbqjk  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(88)

我有一个函数,它接受一个边界框(左下角和右上角坐标),以及在每个轴上将网格分割成的网格正方形的数量。该函数返回表示每个网格正方形左下角的坐标列表。

def grid(min_x, min_y, max_x, max_y, split_grid_x, split_grid_y):
    x = np.linspace(min_x, max_x, split_grid_x)
    y = np.linspace(min_y, max_y, split_grid_y)
    xv, yv = np.meshgrid(x, y)
    grid = np.hstack((xv.reshape((xv.size, 1)), yv.reshape((yv.size, 1))))
    return grid.tolist()

举例来说:

grid(0, 0, 2, 2, 3, 3)

回报率:

[[0.0, 0.0], [1.0, 0.0], [2.0, 0.0], [0.0, 1.0], [1.0, 1.0], [2.0, 1.0], [0.0, 2.0], [1.0, 2.0], [2.0, 2.0]]

我想要的是函数返回每个网格正方形的边界框。例如,上面数组中的第一个元素将返回[0.0,0.0,1.0,1.0]
我希望我已经有效地解释了这一点,让我知道如果你需要澄清。提前感谢!

l5tcr1uw

l5tcr1uw1#

我建立了一个小优化的方式,但它为我工作:

div_lat = np.linspace(lat_min, lat_max, 5)
div_lon = np.linspace(lon_min, lon_max, 5)
  
x, y = np.meshgrid(div_lon, div_lat)
  
lista_comb = np.hstack((x.reshape((x.size,1)),y.reshape((y.size,1))))
grid_lons, grid_lats = np.array(lista_comb).T

lista_lons = []
for i in range(len(div_lon)):
    try:
        lst = [div_lon[i], div_lon[i+1]]
        lista_lons.append(lst)
    except:
        break

lista_lats = []
for i in range(len(div_lat)):
    try:
        lst = [div_lat[i], div_lat[i+1]]
        lista_lats.append(lst)
    except:
        break

lista_final = []
for lst_lat in lista_lats:
    for lst_lon in lista_lons:
        lista_final.append(lst_lon + lst_lat)

bb_dict = {}

for i, bb in enumerate(lista_final):
    bb_dict[i+1] = {
        'lon_min': round(bb[0], 2),
        'lon_max': round(bb[1], 2),
        'lat_min': round(bb[2], 2),
        'lat_max': round(bb[3], 2)
    }

相关问题