Atualmente, estou trabalhando para importar dados climáticos do CANGRID (fornecidos como Surfer Grid ascii, arquivos ".grd") para o ArcGIS. A grade é de 95 linhas por 125 colunas de tamanho. Os metadados fornecem lat / lon de origem (canto inferior esquerdo), tamanho da célula (50 km), bem como projeção de notas como estereográfica polar com meridiano central (110 graus W) e latitude de origem (60 graus N).
Após tentar converter o .grd em rasters como .ascii e .flt, sem êxito, consegui usar o GDAL para definir a extensão e a projeção, no entanto, o conjunto de dados não se alinha corretamente aos limites da área pretendida. Veja a imagem abaixo.
Existe uma geotransformação aceita para estereografia polar que possa explicar essa falta de alinhamento?
Por exemplo, existe um fator de conversão ou rotação específico que eu deveria usar?
Um arquivo de exemplo do conjunto de dados está aqui: "t201113.grd"
Aqui está o código que estou usando atualmente no 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
`
Além disso, aqui estão as informações da projeção, conforme definidas pela entrada, ou seja, de "GetProjection ()":
'PROJCS ["North_Pole_Stereographic", GEOGCS ["GCS_WGS_1984", DATUM ["WGS_1984", SPHEROID ["WGS_1984", 6378137.0,298.257223563]], PRIMEM ["Greenwich", 0.0], UNIDADE ["3232", 1995], 33] PROJECTION ["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.0 ], UNIDADE ["50_Kilômetros", 50000.0]] '
E a entrada GeoTransform:
(-0.5, 1.0, 0.0, 94.5, 0.0, -1.0)
Lat, comprimentos das coordenadas da grade também são fornecidos e, quando visualizados no sistema de coordenadas projetado, são parecidos abaixo. Quando a geotransformação é definida por coordenadas do cordado inferior esquerdo (amarelo) ou superior direito (rosa), posso definir efetivamente a extensão, mas ainda há problemas de alinhamento durante a varredura.