1

文件中有大量数据(3 列),例如:

longitude  latitude   count
20.12      50.45       1
35.78      24.26       1
20.48      50.16       2
...         ...       ...

地图(经纬度)分割很多格子:0.5*0.5(大小),例如:

longitude: [0, 0.5), [0.5, 1.0), ... , [179.5, 180.0)
latitude : [-90, -89.5), [-89.5, -89.0), ... , [89.5, 90.0]

网格在地图上的格式为 0.5*0.5。

例如:上面的第1条和第3条记录位于网格经度[20.0, 20.5)和纬度[50.0, 50.5),所以counts=1+2=3。

那么,如何编程以使用 awk 或其他脚本从数据文件中获取位于每个网格中的计数?如何绘制结果?

4

1 回答 1

1

我认为这会做你想要的:

awk 'function floor(x){
    y=int(x); return y>x?y-1:y
}{
    ilon=floor($1/0.5)
    ilat=floor($2/0.5)
    hist[ilat,ilon]+=$3
}END{
    for(ilat=-180;ilat<=180;ilat++)
        for(ilon=-360;ilon<=360;ilon++){
            printf(" %4d", hist[ilat,ilon])
        printf("\n")
    }
}'

注意:我硬编码了 lon [-180:180] 和 lat [-90:90] 的限制(包括步长)。更一般地说,您将根据当前步长(我想您可能想要使用不同的步长而不是一直使用 0.5)和纬度/经度范围来计算数组的整数限制。

注意 2:此处显示的缺少有用的预定义函数awk,我需要定义floor自己,所有的事情。我想知道为什么选择排除大多数C数学函数。

注意 3:如果不清楚,其输出将是每个单元格的命中计数的大矩阵,纬度每 0.5 步对应一行,经度每步对应一列。

于 2012-11-04T17:30:10.220 回答