Obecnie pracuję nad importem danych klimatycznych CANGRID (dostarczanych jako Surfer Grid ascii, pliki „.grd”) do ArcGIS. Siatka ma 95 rzędów na 125 kolumn. Metadane zapewniają lat / lon pochodzenia (lewy dolny róg), rozmiar komórki (50 km), a także odwzorowanie notatek jako stereograficzne biegunowe z południkiem środkowym (110 stopni W) i szerokością geograficzną (60 stopni N).
Po pierwszej próbie konwersji .grd na rastry jako .ascii i .flt bezskutecznie, udało mi się użyć GDAL do ustawienia zasięgu i projekcji, jednak zestaw danych nie wyrównuje się poprawnie z granicami zamierzonego obszaru. Zobacz zdjęcie poniżej.
Czy istnieje akceptowana geotransformacja dla stereograficznej biegunowości, która mogłaby wyjaśnić ten brak wyrównania?
Na przykład, czy powinienem zastosować określony współczynnik konwersji lub rotację?
Przykładowy plik z zestawu danych znajduje się tutaj: „t201113.grd”
Oto kod, którego obecnie używam w GDAL
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
`
Oto informacje o projekcji zdefiniowane przez dane wejściowe, tj. Z „GetProjection ()”:
„PROJCS [„ North_Pole_Stereographic ”, GEOGCS [„ GCS_WGS_1984 ”, DATUM [„ WGS_1984 ”, SPHEROID [„ WGS_1984 ”, 6378137.0,298.257223563]], PRIMEM [„ Greenwich ”, 0,0], UN1 [45] PROJEKCJA [„Stereograficzny”], PARAMETR [„False_Easting”, 0,0], PARAMETER [„False_Northing”, 0,0], PARAMETER [„Central_Meridian”, 0,0], PARAMETER [„Scale_Factor”, 1,0], PARAMETER [„Latitude_Of_Origin”, 90,0 ], UNIT [„50_Kilometers”, 50000.0]] ”
I wejściowy GeoTransform:
(-0.5, 1.0, 0.0, 94.5, 0.0, -1.0)
Podane są również długości współrzędnych siatki, a gdy widok w rzutowanym układzie współrzędnych wygląda jak poniżej. Gdy geotransforma jest zdefiniowana za pomocą współrzędnych kordinatu lewego lewego (żółtego) lub prawego górnego (różowego), mogę skutecznie ustawić zasięg, ale występują problemy z wyrównaniem w całym rastrze.