Ich arbeite derzeit daran, CANGRID-Klimadaten (bereitgestellt als Surfer Grid-ASCII-Dateien ".grd") in ArcGIS zu importieren. Das Raster ist 95 Zeilen mal 125 Spalten groß. Die Metadaten enthalten die Länge des Ursprungs (linke untere Ecke), die Zellengröße (50 km) sowie die Notenprojektion als polare Stereografie mit Mittelmeridian (110 Grad W) und den Breitengrad des Ursprungs (60 Grad N).
Nachdem ich zum ersten Mal erfolglos versucht habe, die GRD-Datei in Raster-Dateien wie .ascii und .flt zu konvertieren, konnte ich GDAL zum Festlegen der Ausdehnung und Projektion verwenden. Das Dataset ist jedoch nicht korrekt an den Grenzen des beabsichtigten Bereichs ausgerichtet. Siehe Bild unten.
Gibt es eine akzeptierte Geotransformation für polare Stereografien, die diese mangelnde Ausrichtung erklären könnte?
Gibt es zum Beispiel einen bestimmten Umrechnungsfaktor oder eine Rotation, die ich verwenden sollte?
Eine Beispieldatei aus dem Datensatz ist hier: "t201113.grd"
Hier ist der Code, den ich derzeit in GDAL verwende
ds = gdal.Open("t201113.grd")
array = ds.ReadAsArray()
x_rotation = 0
y_rotation = 0
xres = 1
yres = -1
llx = -129.8530
lly = 40.0451
ulx = -175.144
uly = 71.385
input_osr = osr.SpatialReference()
input_osr.ImportFromWkt(ds.GetProjection())
wgs84_osr = osr.SpatialReference()
wgs84_osr.ImportFromEPSG(4326)
wgs_to_nps_trans = osr.CoordinateTransformation(wgs84_osr, input_osr)
x, y, z = wgs_to_nps_trans.TransformPoint(llx,lly)
geo_transform = [ x, xres, x_rotation, y, y_rotation, yres ]
ncol = ds.RasterXSize
nrow = ds.RasterYSize
out_driver = gdal.GetDriverByName("HFA")
out_ds = out_driver.Create(t201113.img", ncol, nrow, 1, gdal.GDT_Float32)
out_ds.SetGeoTransform(geo_transform)
out_prj = 'PROJCS["North_Pole_Stereographic",GEOGCS["GCS_WGS_1984",DATUM["WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Stereographic"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",-110.0],PARAMETER["Scale_Factor",1.0],PARAMETER["Latitude_Of_Origin",60.0],UNIT["50_Kilometers",50000.0]]'
out_ds.SetProjection(out_prj)
out_ds.GetRasterBand(1).WriteArray(array)
out_ds.GetRasterBand(1).SetNoDataValue(1.70141e+038)
out_ds.FlushCache()
out_ds = None
`
Hier ist auch die Projektionsinformation, wie sie durch die Eingabe definiert ist, dh von "GetProjection ()":
'PROJCS ["North_Pole_Stereographic", GEOGCS ["GCS_WGS_1984", DATUM ["WGS_1984", SPHEROID ["WGS_1984", 6378137.0,298.257223563]], PRIMEM ["Greenwich", 0.0], UNIT ["Degree9.1994. PROJEKTION ["Stereographic"], PARAMETER ["False_Easting", 0.0], PARAMETER ["False_Northing", 0.0], PARAMETER ["Central_Meridian", 0.0], PARAMETER ["Scale_Factor", 1.0], PARAMETER ["Latitude_Of_Origin", 90 ], UNIT ["50_Kilometer", 50000.0]] '
Und die Eingabe GeoTransform:
(-0.5, 1.0, 0.0, 94.5, 0.0, -1.0)
Lat, Longs der Gitterkoordinaten werden ebenfalls bereitgestellt, und wenn die Ansicht im projizierten Koordinatensystem wie folgt aussieht. Wenn die Geotransformation durch Koordinaten der unteren linken (gelb) oder oberen rechten (rosa) Koordinate definiert ist, kann ich die Ausdehnung effektiv festlegen, es bleiben jedoch Ausrichtungsprobleme im gesamten Raster.