2012-09-27 55 views
1

對不起,這個簡單的問題,但我是新的Python,我需要相同的幫助。Python:網格點X,Y和Z爲了提取統計屬性

我的數據是點格式:X,Y,Z。 X和Y是座標,z是數值。

我的問題是:創建一個0.5米乘0.5米(或1乘1米)的柵格(以TIF或ASCII),其中每個像素的值是Z的平均值。如果我沒有指向像素 - 我的值需要是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,爲了ž點,知道他們在哪裏下降。我的第一個想法是給一個索引網格並標記點。之後,我可以爲像素內的點取平均值。像素爲空(其中不存在點)是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 

真的感謝所有幫助

回答

3

很長的路要走:

  • 定義網格spacing(浮點數),這是在同一維度中的兩個像素/體素中點之間的距離
  • 找出您需要的網格大小,即xy尺寸中的網格點數,N_xN_y
  • 創建兩個numpy陣列的所有值爲零,使用例如。 np.zeros([N_x, N_y])
  • 迭代通過您的組(X,Y,V)點和
    • 項目中的每個(X,Y)對成其相應的像素中,通過兩個(整數)識別索引:x_i, y_i = tuple([int(c//spacing) for c in (x, y)])
    • 添加1在地方(x_i, y_i)所述一個陣列(持「計數」)
    • 具有填充了兩個陣列之後的值v在地方(x_i, y_i)(保持值的總和)
  • 添加到另一陣列,將count-array-sum-of-values-array除以count-array。 0/0.0將自動分配給NaN,而c/0.0將被分配爲Inf
+0

親愛的揚菲利普, 感謝您的回覆。我可以問一個關於學習的例子,並提高我在Python中真正的基礎知識。 謝謝,如果你可以,我不想濫用你的時間 –

+0

如果這個答案幫助你解決你的問題,你可能會考慮給予至少一個upvote :) –

+0

我會做! :d –

相關問題