You are on page 1of 4

1

E15: DEM Processing

บทนํา
ขอมูลแบบจําลองภูมิประเทศ เปนอีกสิ่งทีม่ ีความสําคัญ ในการนํามาใชในการดัดแกภาพ
ออรโท และสามารถนํามาใชประมวลผลดานตางๆในระบบภูมิสารสนเทศ โดยขอมูลจะถูกจัดเก็บ
ในรูปแบบราสเตอรไฟล คลายกับภาพถายดาวเทียมแตมีแค Band เดียวโดยเก็บในรูปแบบ Floating
ที่มีขนาดใหญครอบคลุมกับระดับคาความสูงที่บรรจุใน Digital Number

วัตถุประสงค
1. เรียนรูการเขาถึงคา Digital Value จาก THEOS ดวย Python
2. ศึกษาการจัดการขอมูลเชิงคลื่น ในภาพถายดาวเทียม
วิธีการ
ทดลองเขียนโปรแกรมดังตอไปนี้

# เรียกโมดูลทีต่ องการเพื่อใชงาน
import os
import sys
from osgeo import gdal
import string
import math
# ทดลองใช Alias name
import numpy as Numeric
dataset = gdal.Open("C:\data\image\ASTGTM_N15E099_dem.tif")
R=1
print "Python Code for SRTM DEM Acessing"

#เขาถึงขอมูลไฟล GDEM
# ตรวสอบ Band และชั้นขอมูลราสเตอร
image_count=dataset.RasterCount

ฝกอบรมการเขียนโปรแกรมการประมวผลขอมูลภูมิสารสนเทศ นาย ชัยภัทร เนื่องคํามา


2

# ตรวจสอบขนาด Pixelsize
image_x_size=dataset.RasterXSize
image_y_size=dataset.RasterYSize

# เขาถึง Header File ของ GDEM


md = dataset.GetMetadata()
md_list=dataset.GetMetadata_List()

#เขาถึงระบบพิกัดอางอิง
image_CRS=dataset.GetGeoTransform()
image_proj=dataset.GetGCPProjection()
print "image size is ",image_x_size,'*',image_y_size
# เขาถึงขอมูล Digital Value
array = dataset.ReadAsArray()
band = dataset.GetRasterBand(1)
print 'Band Type=',gdal.GetDataTypeName(band.DataType)
min = band.GetMinimum()
max = band.GetMaximum()

#คํานวณคาสถิติของ GDEM
if min is None or max is None:(min,max) = band.ComputeRasterMinMax(1)
print 'Min=%.3f, Max=%.3f' % (min,max)

#ตรวจสอบ Overview Layer บนราสเตอร


if band.GetOverviewCount() > 0:
print 'Band has ', band.GetOverviewCount(), ' overviews.'
if not band.GetRasterColorTable() is None:print 'Band has a color table with ', \
band.GetRasterColorTable().GetCount(), ' entries.'

ฝกอบรมการเขียนโปรแกรมการประมวผลขอมูลภูมิสารสนเทศ นาย ชัยภัทร เนื่องคํามา


3

# Loop เขาหาคา DN
for iBand in range(1, dataset.RasterCount + 1):

inband = dataset.GetRasterBand(iBand)
#print inband.YSize
for i in range(inband.YSize - 1, -1, -1):
scanline = inband.ReadAsArray(0, i, inband.XSize, 1, inband.XSize, 1)
scanline = Numeric.choose(Numeric.equal( scanline, 999),(scanline, 000) )
#print 'line ',scanline, 0, i

#ทําการจัดตัวคาพิกัดอางอิง
geoTrans = dataset.GetGeoTransform()
cellSizeX = geoTrans[1]
cellSizeY = geoTrans[5]
nXSize = dataset.RasterXSize
nYSize = dataset.RasterYSize
print 'Cell Size',cellSizeX,cellSizeY
cx=1
cy=1
dem=band.ReadAsArray(0, cx , cy, 1) # Acess Dem Value
arr=len(dem) # check number of rows
arc=len(dem[0]) # check number of columns
print 'cx,cy,value :',cx,cy,dem[0,0]

# ทดลองสรางสวนของ moving window


winSize= 2*R + 1

inGridBand=dataset.GetRasterBand(1)
buff = inGridBand.ReadAsArray(xoff=0, yoff=0, win_xsize=nXSize,win_ysize=1)
# create distance array
dist=Numeric.zeros((winSize,winSize),float)
#print dist.size

ฝกอบรมการเขียนโปรแกรมการประมวผลขอมูลภูมิสารสนเทศ นาย ชัยภัทร เนื่องคํามา


4

for i in range(winSize):
for j in range(winSize):
dist[i][j]=Numeric.sqrt((cellSizeX*(i-R))**2 +
(cellSizeY*(j-R))**2)

#print dist

ฝกอบรมการเขียนโปรแกรมการประมวผลขอมูลภูมิสารสนเทศ นาย ชัยภัทร เนื่องคํามา

You might also like