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) にあるため、カウント = 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 以外の異なるステップを使用したい場合があると思います) と lat/lon-range に基づいて、配列の整数制限を計算します。

注 2: ここに示した便利な定義済み関数の欠如は、すべての中で自分自身awkを定義する必要があることを示しています。数学関数floorのほとんどを除外するという選択がなされたのはなぜだろうか。C

注 3: これが明確でない場合、この出力は、緯度の 0.5 ステップごとに 1 行、経度のそのようなステップごとに 1 列の、各セルのヒット カウントの大きなマトリックスになります。

于 2012-11-04T17:30:10.220 に答える