私は、測定の場所を含むCSVファイルを取り込み、その測定値に基づいて確率マップを作成するスクリプトに取り組んでいます。私はGeoTIFFに確率を書き込むためにGDALを使用していますが、データのどれもGeoTIFFに正しく書き込まれていないことに気づいています。ヒートマップを生成するとき、numpyを使用してデータをX行Y列に格納し、その配列をGeoTIFFに書き込みます。私が260 x 262メートルで測定している現在のデータセット、そして結果として得られるGeoTIFFは正しい次元を持ち、適切に地理参照されています。ヒートマップデータのピクセル値は-51から0までですが、GeoTIFFをQGISに読み込むと、QGISの値は-51から-31までしかありません。GDALを使用してジオテフにデータが書き込まれるようにするにはどうすればよいですか?
GeoTIFFは32ビット浮動小数点データとロスレス圧縮として保存する必要があります。そのため、データ範囲や圧縮の問題ではありません。
私は、下記の関連するコードを添付しました:
import sys
import numpy as np
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plot
# USING utm 0.4.0 from https://pypi.python.org/pypi/utm
import utm
import os
import argparse
import fileinput
from osgeo import gdal
import osr
import math
# finalLon and finalLat are 1-D arrays containing the UTM coordinates for each measurement
tiffXSize = int(max(finalLon)) - int(min(finalLon)) + maxRange * 2
tiffYSize = int(max(finalLat)) - int(min(finalLat)) + maxRange * 2
pixelSize = 1
heatMapArea = np.zeros((tiffXSize, tiffYSize)) # y, x
refLat = min(finalLat) - maxRange
maxLat = max(finalLat) + maxRange
refLon = max(finalLon) + maxRange
minLon = min(finalLon) - maxRange
# some code to set values in the heatMapArea array
outputFileName = '%s/RUN_06d_COL_%06d.tiff' % (output_path, run_num, num_col)
driver = gdal.GetDriverByName('GTiff')
dataset = driver.Create(
outputFileName,
tiffYSize,
tiffXSize,
1,
gdal.GDT_Float32, ['COMPRESS=LZW'])
spatialReference = osr.SpatialReference()
spatialReference.SetUTM(zonenum, zone >= 'N')
spatialReference.SetWellKnownGeogCS('WGS84')
wkt = spatialReference.ExportToWkt()
retval = dataset.SetProjection(wkt)
dataset.SetGeoTransform((
refLat, # 0
1, # 1
0, # 2
refLon, # 3
0, # 4
-1))
band = dataset.GetRasterBand(1)
band.SetNoDataValue(100)
print(tiffXSize)
print(tiffYSize)
print(np.amin(heatMapArea))
print(np.amax(heatMapArea))
print(np.mean(heatMapArea))
print(np.std(heatMapArea))
print((heatMapArea > -30).sum())
band.WriteArray(heatMapArea)
band.SetStatistics(np.amin(heatMapArea), np.amax(heatMapArea), np.mean(heatMapArea), np.std(heatMapArea))
dataset.FlushCache()
dataset = None