Je travaille actuellement pour importer des données climatiques CANGRID (fournies sous forme de fichiers Surfer Grid ascii, ".grd") dans ArcGIS. La grille est de 95 lignes par 125 colonnes. Les métadonnées fournissent le lat / lon d'origine (coin inférieur gauche), la taille des cellules (50 km) ainsi que la projection des notes en stéréographie polaire avec méridien central (110 degrés W) et latitude d'origine (60 degrés N).
Après avoir tenté de convertir le .grd en rasters en .ascii et .flt sans succès, j'ai réussi à utiliser GDAL pour définir l'étendue et la projection, mais l'ensemble de données ne s'aligne pas correctement avec les limites de la zone prévue. Voir l'image ci-dessous.
Existe-t-il une géotransformation acceptée pour la stéréographie polaire qui pourrait expliquer ce manque d'alignement?
Par exemple, y a-t-il un facteur de conversion ou une rotation spécifique que je devrais utiliser?
Un exemple de fichier de l'ensemble de données est ici: "t201113.grd"
Voici le code que j'utilise actuellement dans 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
`
Voici également les informations de projection, telles que définies par l'entrée, c'est-à-dire de "GetProjection ()":
'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,099432] 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 ], UNIT ["50_Kilomètres", 50000.0]] »
Et l'entrée GeoTransform:
(-0.5, 1.0, 0.0, 94.5, 0.0, -1.0)
Lat, les coordonnées longues de la grille sont également fournies, et lorsqu'elles sont affichées dans le système de coordonnées projeté, elles sont comme ci-dessous. Lorsque la géotransformation est définie par les coordonnées de la coordonnée inférieure gauche (jaune) ou supérieure droite (rose), je peux effectivement définir l'étendue, mais il reste des problèmes d'alignement tout au long du raster.