2011-01-08 4 views
0

衛星画像を表示したい(できればPythonを使用しますが、他のソリューションも歓迎します)。それは次元NxMの浮動小数点パラメータPで構成され、各ピクセルは緯度と経度のフィールド(サイズNxMの各フィールド)で地理的に配置されます。だから私はしたい:リサイズせずにカスタムマップ上に海岸線を描画する方法

(1)関連付けられているカラースケールでパラメータPの画像を作成します。それは次元N×Mの

(2)この画像の上に表示海岸線が

現在、私はPILを使って(1)を行うことができますを持っている必要がありますので画像は、リサンプリングするべきではありません。私はベースマップライブラリを使って画像と海岸線を表示することもできますが、再投影せずにNxMサイズの画像投影に留めておく方法はわかりません。

編集:パラメータPには海岸線に関する情報は含まれていません。海岸線を覆うためにピクセルの位置(緯度、経度)のみが使用されるべきである。海岸線の座標は、例えばgshhsから得ることができる。 gshhsは実際にはベースマップ・ライブラリで使用されます。

答えて

0

あなたがしようとしているのは、土地と水の境界を広げることだけですが、ハイパスフィルタを使用するとよいでしょう。例えば

、レナから始め: alt text

およびハイパスフィルタ適用: alt text

は、元の上にハイパスオーバーレイ: alt text

(詳細および例はhereです)。

フィルタはscipy hereにあります。

+0

これは私がやろうとしていることではありません。私は質問を明確にします... –

0

この質問に対する答えを探しているコミュニティの方には、私が現在実装している方法(v。類似の目的のために、衛星データのジオロケーションをテストしようとしています)にはランドマスクが必要です。

オンラインでは、ルールと特性がそれぞれ異なるランドマークのデータセットが利用できます。私はPythonでnetCDF4データを扱っています。私のランドマスクは、海洋要素が1、土地要素が0と評価されているグリッド化.ncデータセットです。

私の衛星データを繰り返します。それぞれの緯度と経度の値にランドマスク内の1度あたりの要素の数。私の場合は120個の緯度/経度の学位あたりの要素なので、

lon_inds = (lons*120).astype(int) 
lat_inds = (lats*120).astype(int) 

それぞれ

len(lons)/360 
len(lats)/180 

120を代入伴うだろうこれを書いて、より一般的な方法があります。これらの操作の両方の例は、numpy配列を使用するとほぼ即座に実行できます(これはpython netCDF4モジュールの場合です)。

は今、私は自分のマスクを作成します。

my_mask = np.zeros(data.shape, dtype=int) 
:それは(すべて同一の寸法を持つことになります密接衛星、データ、ラッツとロンアレイに精通していない人のための)データ配列と同じ次元を持つ必要があります

ここでは、海岸線があるマスクの値を置き換えるだけです。場合、これは1に

mask[i,j] 

の値を、lat_indsとlon_indsアレイを反復ルックアップ値を

landmask[lon_inds[i,j],lat_inds[i,j]] 

のlandmaskおよび変化させることによって行われる近隣の任意

landmask[lon_inds[i,j]-1,lat_inds[i,j]] 
landmask[lon_inds[i,j]+1,lat_inds[i,j]] 
landmask[lon_inds[i,j],lat_inds[i,j]-1] 
landmask[lon_inds[i,j],lat_inds[i,j]+1] 

は0ではありません(もちろん、斜めに隣接するセルを追加することでより滑らかな海岸線を生成することができますが、ランドマークのデータを使用することをお勧めします)衛星データよりも鮮明な空間分解能を備えています)。

+0

海洋が1とマークされ、土地が0とマークされていることを確認するために、あなたのランドマークのメタデータをチェックすることを忘れないでください。これは逆の可能性があります。ランドマスクに応じて利用可能です。 – user4746

関連する問題