这篇文章主要描述了如何使用GDAL/OGR打开矢量文件、读取点位的经纬度,并根据经纬度读取栅格数据。
代码
from osgeo import ogr
import os, sys
os.chdir(r'D:\')
driver = ogr.GetDriverByName('ESRI Shapefile')
ds = driver.Open('sites.shp', 0)
if ds is None:
print('Could not open ' +'sites.shp')
sys.exit(1)
layer = ds.GetLayer()
xValues = []
yValues = []
feature = layer.GetNextFeature()
while feature:
geometry = feature.GetGeometryRef()
x = geometry.GetX()
y = geometry.GetY()
xValues.append(x)
yValues.append(y)
feature = layer.GetNextFeature()
from osgeo import gdal
from gdalconst import *
import os, sys
os.chdir(r'D:\')
gdal.AllRegister()
ds = gdal.Open('aster.img', GA_ReadOnly)
if ds is None:
print('Could not open image')
sys.exit(1)
rows = ds.RasterYSize
cols = ds.RasterXSize
bands = ds.RasterCount
transform = ds.GetGeoTransform()
xOrigin = transform[0]
yOrigin = transform[3]
pixelWidth = transform[1]
pixelHeight = transform[5]
values = []
for i in range(len(xValues)):
x = xValues[i]
y = yValues[i]
xOffset = int((x-xOrigin)/pixelWidth)
yOffset = int((y-yOrigin)/pixelHeight)
s = str(int(x)) + ' ' + str(int(y)) + ' ' + str(xOffset) + ' '+str(yOffset) + ' '
for j in range(bands):
band = ds.GetRasterBand(j+1)
data = band.ReadAsArray(xOffset, yOffset,1,1)
value = data[0,0]
s = s + str(value) + ' '
print(s)
values.append(s)