很抱歉这个简单的问题,但我是 Python 新手,我需要同样的帮助。
我的数据采用点格式:X、Y、Z。其中 X 和 Y 是坐标,z 是值。
我的问题是:创建一个 0.5 m x 0.5 m(或 1 x 1 m)的栅格(以 TIF 或 ASCII 格式),其中每个像素的值是 Z 的平均值。如果我在像素中没有点-i该值需要为 NAN。
我很高兴能得到一些我可以学习和实现的代码的帮助,
提前感谢您的帮助,我真的需要。
我试着研究并写了一段代码:
from osgeo import gdal, osr, ogr
import math, numpy
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.mlab as ml
import matplotlib.delaunay
tiff = 'test.tif'
gridSize = 0.5
# my area boundary
xmax, xmin = 640000.06, 636999.83
ymax, ymin = 6070000.3, 6066999.86
# number of row and columns
nx = int(math.ceil(abs(xmax - xmin)/gridSize))
ny = int(math.ceil(abs(ymax - ymin)/gridSize))
# Plot the points
plt.scatter(x,y,c=z)
plt.axis([xmin, xmax, ymin, ymax])
plt.colorbar()
plt.show()
# Generate a regular grid.
xi = np.linspace(xmin, xmax, nx)
yi = np.linspace(ymin, ymax, ny)
xi, yi = np.meshgrid(xi, yi)
从这一点来看,我很难理解如何索引 x、y、z 点以了解它们的下降位置。我的第一个想法是为网格网格提供索引并标记点。之后,我可以对像素内的点进行平均。空像素(没有存在点的地方)是 NAN。
但我不知道这是处理我的数据的正确方法。
之后,我编写了以下代码以通过 GDAL 以 TIFF 格式保存
target_ds = gdal.GetDriverByName('GTiff').Create(tiff, nx,ny, 1, gdal.GDT_Byte) #gdal.GDT_Int32
target_ds.SetGeoTransform((xmin, gridSize, 0,ymax, 0, -gridSize,))
if EPSG == None:
proj = osr.SpatialReference()
proj.ImportFromEPSG(EPSG)
# Make the target raster have the same projection as the source
target_ds.SetProjection(proj.ExportToWkt())
else:
# Source has no projection (needs GDAL >= 1.7.0 to work)
target_ds.SetProjection('LOCAL_CS["arbitrary"]')
target_ds.GetRasterBand(1).WriteArray(numpy.zeros((ny,nx)))
target_ds = None
真的感谢所有的帮助