It is little a bit difficult to draw gridlines when the grids are defined as the groups of high resolution lonlat grids (hereinafter raster) like the river model CaMa-Flood.
Grid line is drawn by drawing the line between each pair of adjacent pixels when their value were different, but it takes too much time to calculate or draw them one by one.
Therefore, it is required to obtain grid lines using arrays, divising so that it can be used for drawing as it is withought any loop. Sample program follows.
basin.bin and catmxy.bin is basin number and grid index respectively, and both are raster data of CaMa-Flood. Basin number is an order of basin size, so the largest basin has 1.
miss (int, float or None): Missing value. None in default. If it is valid number (neither None nor nan), rasters with this value are not colored.
河川モデル
CaMa-Floodのように,格子が高解像度の緯度経度格子(以下ラスター)の集合で構成される場合,その格子線を描くのが少し難しい.
隣り合うラスターの値(格子番号)が異なる場合その間に線を引く,ということをすれば良いわけだが,これをひとつひとつ計算したり描いたりしようとすると計算時間がえらいことになる.
なのでなるべく配列を使って格子線を取得し,またその際,ループ無しで描画に使えるよう工夫する.サンプルプログラムを以下に示す.
basin.binと
catmxy.binはいずれも
CaMa-Floodのラスターデータで,それぞれ流域番号と格子番号である.流域番号は流域面積の順番なので,1が最も大きな流域に対応する.
miss (int,float又はNone): 欠損値.デフォルト値はNone.有効な数値(Noneとnan以外)が与えられたとき,その値のラスターは色付けされない.
簡単に説明すると,経度方向の線と緯度方向の線を分けて取得している.
隣り合うピクセルの値が同じとき,その間の線は描画されない.
点の座標のリストがあったとして,2つの点の間に線を引きたくないときは,間に
NaNを入れればよい.ただそのたびにリストに要素を加えていくのでは時間がかかるので,予め配列を用意しておき,描画したくないところだけ値を
NaNに差し替える,という方法を取っている.
メイン部で
としているのは,小さい流域を描画しないためである(全て描画すると沿岸部がごちゃごちゃして見づらくなる).また
としているのは,素直に流域番号を与えて色を付けると,番号の変化が緯度方向に大きく経度方向に小さいというデータの性質上,左右に隣り合う格子の色がほとんど同じになってしまって見分けがつかないためである.
気に入らないところ,機能が不足しているところなどは必要に応じて調整して使っていただければと思う.
drawの引数を適宜変更して描画したのがこちら.
Basin (< 2000) (Japan)
Basin (< 2000) (around Hyogo)
Grid index (around Hokuriku)
ちなみに小さい流域も描画するとこうなる.範囲の広い図で
basinを全部描画すると沿岸部が汚くなる.
Basin (no limit) (around Tokyo bay)
小さい流域は適当に閾値を設けてカットしたほうが良い.
Basin (< 2000) (around Tokyo bay)