2012-09-27 2 views
1

쉬운 질문이지만 유감 스럽지만 파이썬에서는 새로운 기능이므로 동일한 도움이 필요합니다.파이썬 : 통계 특성을 추출하기 위해 포인트 X, Y, Z를 그리드

나의 데이터는 포인트 형식으로되어 있습니다 : X, Y, Z. 여기서 X와 Y는 좌표이고, z는 값입니다.

내 문제는 : 0.5m x 0.5m (또는 1m x 1)의 래스터 (TIF 또는 ASCII)를 만듭니다. 각 픽셀의 값은 Z의 avarage입니다. 포인트가없는 경우 pixel-i 값은 NAN 일 필요가있다. 내가 공부하고 구현할 수있는 몇 가지 코드에 대한 도움말은 정말 기뻐요

의 도움에 미리

감사합니다, 정말 필요합니다. 나는 그들이 떨어질 경우 인덱스가 X, Y는, 순서 Z 점을 알고하는 방법을 이해하는 문제가이 점에서

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) 

:

내가 공부하고 코드를 작성했습니다. 첫 번째 아이디어는 메쉬 그리드에 인덱스를 지정하고 포인트를 표시하는 것입니다. 그런 다음 픽셀 내부의 점에 대한 평균을 구할 수 있습니다. 픽셀 빈 (현재 점이없는 경우)은 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에있는 그리드 포인트의 수입니다.
  • 예를 들어를 사용하여 모든 값이 0 인 크기의 두 개의 numpy 어레이를 생성합니다. (X, Y, V)의 포인트중인 세트를 통해 np.zeros([N_x, N_y])
  • 대하여 반복
    • 프로젝트 두 개 (정수)를 통해 식별 된 대응하는 화소에 각각의 (x, y)에 한 쌍의 인덱스 : x_i, y_i = tuple([int(c//spacing) for c in (x, y)])
    • 가 추가 1 장소 (x_i, y_i)에있는 하나 개의 어레이 (이하 "횟수"를 개최)에
    • 는 두 배열 채워진 후에 장소 (x_i, y_i) (값들의 합을 유지)
  • 의 다른 배열에 값 v 추가 sum-of-values-array를 count-array로 나눕니다. 0/0.0은 NaN에 자동으로 지정되고 c/0.0은 Inf이됩니다.
+0

친애하는 Jan-Philip, 재생 해 주셔서 감사합니다. 내가 공부할 때 예를 물어보고 파이썬에 대한 나의 기본적인 지식을 향상시킬 수 있을까요? 할 수 있으면 감사합니다. –

+0

이 답변으로 문제를 해결할 수 있다면 적어도 upvote를 부여하는 것이 좋습니다. –

+0

나는 할 것입니다! :디 –

관련 문제