将坐标舍入到网格正方形的中心

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

我目前正在尝试从 API 收集一些天气数据,并为了减少 API 调用量,我尝试根据其分辨率对 0.5 度经度和纬度块进行批量调用。 我有这个代码

def round_to_grid_center(coordinate,grid_spacing=0.5 ):
        offset = grid_spacing / 2
        return round(((coordinate - offset) / grid_spacing)) * grid_spacing + offset

但是这个函数将 0.5 的值四舍五入到 0.25,而不是向上舍入到 0.75, incorrect rounding for entry 5 所以我添加了这个修复。它对我有用,但我确信有一种更好更有效的方法将坐标舍入到最接近的网格方形中心。请告诉我!

def round_to_grid_center(coordinate,grid_spacing=0.5 ):
    #temp fix for round down error
    if ((coordinate % 0.5)== 0 and (coordinate % 1 )!= 0):
        offset = grid_spacing / 2
        return round(((coordinate + 0.01 - offset) / grid_spacing)) * grid_spacing + offset
    else:
        offset = grid_spacing / 2
        return round(((coordinate - offset) / grid_spacing)) * grid_spacing + offset

Output rounding entry 5 correctly for batch

python coordinates rounding
1个回答
0
投票

尝试使用这个:

def round_to_grid_center(coordinate,grid_spacing=0.5 ):
        offset = grid_spacing / 2
        return round(((coordinate - offset) / grid_spacing)) * grid_spacing + offset

偏移量 grid_spacing / 2 用于移动坐标,以便舍入发生在网格中心周围(例如,0.5 度网格为 0.25、0.75)。

我们四舍五入到最接近的 grid_spacing 倍数

最后减去偏移量,使坐标返回到正确的中心位置

当您舍入(坐标+偏移)/ grid_spacing时,您确保舍入发生在每个网格单元的中心。 这种方式可以更好地处理所有情况,包括坐标恰好在边界上的情况(例如 5.0、5.5),而不会导致错误或不一致。

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