2
각 포인트에 대해 해당 포인트의 위도와 경도를 알고 있고 다른 데이터에서 투영 된 GTiff에 데이터를 쓰고 싶습니다. 파일. 새 파일을 어떻게 정확하게 지리 참조합니까? 난 그냥 지금 시도하고있는 무슨 Python GDAL : 다른 파일을 투영에 사용하는 지형 참조 배열
이
은 다음과 같습니다import numpy as np
import gdal
from gdalconst import *
from osgeo import osr
def GetGeoInfo(FileName):
SourceDS = gdal.Open(FileName, GA_ReadOnly)
GeoT = SourceDS.GetGeoTransform()
Projection = osr.SpatialReference()
Projection.ImportFromWkt(SourceDS.GetProjectionRef())
return GeoT, Projection
def CreateGeoTiff(Name, Array, driver,
xsize, ysize, GeoT, Projection):
DataType = gdal.GDT_Float32
NewFileName = Name+'.tif'
# Set up the dataset
DataSet = driver.Create(NewFileName, xsize, ysize, 1, DataType)
# the '1' is for band 1.
DataSet.SetGeoTransform(GeoT)
DataSet.SetProjection(Projection.ExportToWkt())
# Write the array
DataSet.GetRasterBand(1).WriteArray(Array)
return NewFileName
def ReprojectCoords(x, y,src_srs,tgt_srs):
trans_coords=[]
transform = osr.CoordinateTransformation(src_srs, tgt_srs)
x,y,z = transform.TransformPoint(x, y)
return x, y
# Some Data
Data = np.random.rand(5,6)
Lats = np.array([-5.5, -5.0, -4.5, -4.0, -3.5])
Lons = np.array([135.0, 135.5, 136.0, 136.5, 137.0, 137.5])
# A raster file that exists in the same approximate aregion.
RASTER_FN = 'some_raster.tif'
# Open the raster file and get the projection, that's the
# projection I'd like my new raster to have, it's 'projected',
# i.e. x, y values are numbers of pixels.
GeoT, TargetProjection, DataType = GetGeoInfo(RASTER_FN)
# Meanwhile my raster is currently in geographic coordinates.
SourceProjection = TargetProjection.CloneGeogCS()
# Get the corner coordinates of my array
LatSize, LonSize = len(Lats), len(Lons)
LatLow, LatHigh = Lats[0], Lats[-1]
LonLow, LonHigh = Lons[0], Lons[-1]
# Reproject the corner coordinates from geographic
# to projected...
TopLeft = ReprojectCoords(LonLow, LatHigh, SourceProjection, TargetProjection)
BottomLeft = ReprojectCoords(LonLow, LatLow, SourceProjection, TargetProjection)
TopRight = ReprojectCoords(LonHigh, LatHigh, SourceProjection, TargetProjection)
# And define my Geotransform
GeoTNew = [TopLeft[0], (TopLeft[0]-TopRight[0])/(LonSize-1), 0,
TopLeft[1], 0, (TopLeft[1]-BottomLeft[1])/(LatSize-1)]
# I want a GTiff
driver = gdal.GetDriverByName('GTiff')
# Create the new file...
NewFileName = CreateGeoTiff('Output', Data, driver, LatSize, LonSize, GeoTNew, TargetProjection)
무엇을하려고합니까? 'SourceProjection = TargetProjection.CloneGeogCS()'를 사용한다면, 데이터 값을 목표 그리드로 보간하기를 원하지 않습니까? osr.CoordinateTransformation을 사용한 재 투영은 소스 및 대상 격자가 아마도 '정렬'되어 있지 않기 때문에 래스터/격자에 유용하지 않으므로 채워진 대상 격자가 필요하면 일부 보간 형식을 수행해야합니다. –
@RutgerKassies 예. 재 투영이 어떤 형태의 보간법을 초래할 수도 있지만, 너무 좁은 영역에서는 그다지 중요하지 않을 것이라는 것을 알고 있습니다. QGIS에서 다른 래스터 파일로 열 수 있도록 배열에 양식을 저장하고 싶습니다. – EddyTheB
다른 질문으로 썼습니다. (http://gis.stackexchange.com/questions/58517/python-gdal-save-array-as-raster-with-projection-from-other-file/58551?noredirect=1# 58551) 그런 다음 몇 가지 이유로 내 프로필에서 질문이 사라 졌으므로 여기를 클릭하여 저장하지 않았거나 무언가를 다시 작성하지 못했다고 가정했습니다. 이제 원판이 대답과 함께 나타났습니다. 아마도 필요한 reptation을 가진 누군가가이 질문을 복제본으로 표시 할 수 있습니까? – EddyTheB