libtiff.netを使用してGeoTIFFファイルから標高データを読み込もうとしています。 これまでのところ、libtiff.netのWebページの例を使って、ファイルからメタデータを読み込むことがほとんどできました。GeoTIFF libtiff.net標高データを取得する#
しかしHOWTO説明したように、私はhereTiff.ReadScanline()
で読んまず試みたが、(私はそれを正しく理解すれば、おそらくタイルに)私が持っているファイルを異なる保存されているようだ...私は理解していない標高データを読み込む
ここメタデータは(私の知る限り読むことができたとして)である(TIFFファイルは、デンマークの地形標高データセットからです):
のTIFF C:\ユーザーは*** \ DTM_1km_6170_500.tif、ページ0を持っています以下のタグセット:
IMAGEWIDTH可能System.Int32 2500
IMAGELENGTH可能System.Int32 2500
は、bitsPerSampleのSystem.Int16:32
COMPRESSION BitMiracle.LibTiff.Classic.Compression:ADOBE_DEFLATE
測光BitMiracle.LibTiff.Classic。測光:MINISBLACK
STRIPOFFSETS System.UInt64 []:System.UInt64 []
SAMPL ESPERPIXELのSystem.Int16:1
STRIPBYTECOUNTS System.UInt64 []:System.UInt64 []
PLANARCONFIG BitMiracle.LibTiff.Classic.PlanarConfig:コンティグ
PREDICTOR BitMiracle.LibTiff.Classic.Predictor:浮動小数点
tileWidthプロパティ可能System.Int32:256
TILELENGTH可能System.Int32:256
TILEOF FSETS System.UInt64 []:System.UInt64 []
TILEBYTECOUNTS System.UInt64 []:System.UInt64 []
SAMPLEFORMATのBitMiracle.LibTiff.Classic.SampleFormat:IEEEFP
データ型のSystem.Int16 :3
GEOTIFF_MODELPIXELSCALETAGシステム.Int32:3 GEOTIFF_MODELPIXELSCALETAG System.Byte []:Ù?Ù?
GEOTIFF_MODELTIEPOINTTAG可能System.Int32:6 GEOTIFF_MODELTIEPOINTTAG System.Byte []:A^WA
34735可能System.Int32:36 34735 System.Byte []:ED°#)#± ±
34736 System.Int32:3 34736 System.Byte []:
34737 System.Int32:30 34737システム。バイト[]:ETRS89/UTMゾーン 32N | ETRS89 |
42113可能System.Int32:6 42113 System.Byte []:-9999
次のように私がこれまでに書いたコードは次のとおりです。誰もが知っている場合
はnamespace GeoTIFFReader
{
public class GeoTIFF
{
private double[,] heightmap;
private double dx;
private double dy;
private double startx;
private double starty;
public GeoTIFF(string fn)
{
using (Tiff tiff = Tiff.Open(fn, "r"))
{
if (tiff == null)
{
// Error - could not open
return;
}
int width = tiff.GetField(TiffTag.IMAGEWIDTH)[0].ToInt();
int height = tiff.GetField(TiffTag.IMAGELENGTH)[0].ToInt();
heightmap = new double[width, height];
FieldValue[] modelPixelScaleTag = tiff.GetField(TiffTag.GEOTIFF_MODELPIXELSCALETAG);
FieldValue[] modelTiePointTag = tiff.GetField(TiffTag.GEOTIFF_MODELTIEPOINTTAG);
byte[] modelPixelScale = modelPixelScaleTag[1].GetBytes();
dx = BitConverter.ToDouble(modelPixelScale, 0);
dy = BitConverter.ToDouble(modelPixelScale, 8) * -1;
byte[] modelTransformation = modelTiePointTag[1].GetBytes();
double originLon = BitConverter.ToDouble(modelTransformation, 24);
double originLat = BitConverter.ToDouble(modelTransformation, 32);
startx = originLon + dx/2.0;
starty = originLat + dy/2.0;
double curx = startx;
double cury = starty;
FieldValue[] bitsPerSampleTag = tiff.GetField(TiffTag.BITSPERSAMPLE);
FieldValue[] tilewtag = tiff.GetField(TiffTag.TILEWIDTH);
FieldValue[] tilehtag = tiff.GetField(TiffTag.TILELENGTH);
int tilew = tilewtag[0].ToInt();
int tileh = tilehtag[0].ToInt();
var tile = new byte[tilew*tileh];
//var scanline = new byte[tiff.ScanlineSize()]; Does not work... wrong format
for (int il = 0; il < height; il++)
{
//tiff.ReadScanline(scanline, il); // Load il'th line of data
for (int ir = 0; ir < width; ir++)
{
// Here I would like to read each pixel data that contains elevation in gray-scale in f32 as far I as I understand from metadata
//object value = scanline[ir];
//heightmap[ir, il] = double.Parse(value.ToString());
}
}
Console.WriteLine(heightmap.ToString());
}
}
}
}
のでHOWTOはこれを抽出データ、それは非常に感謝されるでしょう。