<< 文系のためのMapserver | top | OpenLayersの表示ができた(やっと・・・) >>

VBからGDALのハンドリング

FWToolsのWindows用のパッケージには、gdal_csharp.dll、ogr_csharp.dll、osr_csharp.dllが含まれている。

これらは、VB(.NET) で、mapscirpt_csharp.dll を参照設定するのと同じようにすると、GDAL/OGRのクラスが使えるようになる。

スクリプト系の言語になじみが薄いことから、GDAL/OGRで何ができるのかよく知りませんでしたが、これらに含まれるクラスは、ベクターデータ、ラスターデータに関して、ファイルの作成、変換、座標系の操作や、SQLを使った検索などが行うことができます。
使い方のチュートリアルは、ここにあり、CSharp(C#)のソースは、ここのコンバータで VB(.NET)に変換して試してみました。

今回は、Erdas Imagine のラスターデータの作成をしましたが、GDALでは、ファイルの読み込み時にファイルフォーマットを指定しなくても、自動的に判断してくれます。

読み込みのざっくりな手順は、
・Imports OSGeo.GDAL でNamespaceを宣言
・Gdal.AllRegister() ですべての画像ハンドリングのドライバーを読み込み
・Dim ds As Dataset = Gdal.Open(inputname, Access.GA_ReadOnly) ファイル名を指定して、Datasetにファイルを読み込む
・Datasetのプロパティを使って、画像の情報を取得
 ds.GetProjectionRef()・・・座標系をProj4のWKTで取得
 ds.RasterCount・・・ラスターデータが持っているバンド数
・Dim drv As Driver = ds.GetDriver() 使われている画像フォーマットのドライバーを取得
・Dim band As Band = ds.GetRasterBand(iBand) バンド(レイヤーみたいなもの)を取得→ここから実際の値を取得 

書き込みのざっくりな手順は、
・Gdal.AllRegister() ですべての画像ハンドリングのドライバーを読み込み
・Dim dsw As Dataset = drv.Create(outputname, w, h, 1, DataType.GDT_Float32, options) でDatasetを新規作成
・Dim wgs84 As New SpatialReference("")
Dim strProj4 As New String("")
wgs84.ImportFromEPSG("4326")
wgs84.ExportToWkt(strProj4)
 dsw.SetProjection(strProj4)
 で投影法を設定
・Dim ba As Band = dsw.GetRasterBand(1)  バンドを作成
・Dim buffer(w * h) As Double 書き込む値を作成
・ba.ComputeBandStats(kekka, 1)
 ba.SetStatistics(kekka(0), kekka(1), kekka(2), kekka(3))
 で統計値の計算と設定
・ba.FlushCache()
dsw.FlushCache()
 で書き込み

VB(.NET)で、両方とも参照設定すれば、地図データがなくても、計算結果から地図データを作成して、MapScriptで重ねて表示ということができてしまいます。

すごい!
bugna | MapServer | 17:59 | comments(0) | trackbacks(0) | - | - |
Comment









Trackback
URL:

05
--
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
--
>>
<<
--