В настоящее время я работаю над тем, чтобы импортировать климатические данные CANGRID (предоставленные как Surfer Grid ascii, файлы .grd) в ArcGIS. Сетка размером 95 строк на 125 столбцов. Метаданные обеспечивают широту / долготу происхождения (нижний левый угол), размер ячейки (50 км), а также проекцию нот в виде полярной стереографии с центральным меридианом (110 градусов западной долготы) и широтой происхождения (60 градусов северной широты).
После первой попытки безуспешно преобразовать .grd в растры как .ascii и .flt, мне удалось использовать GDAL для установки экстента и проекции, однако набор данных неправильно совмещается с границами предполагаемой области. Смотрите изображение ниже.
Существует ли общепринятая геотрансформация для полярной стереографии, которая могла бы объяснить это отсутствие выравнивания?
Например, есть ли конкретный коэффициент преобразования или ротация, который я должен использовать?
Пример файла из набора данных находится здесь: "t201113.grd"
Вот код, который я сейчас использую в 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
`
Кроме того, вот информация о проекции, как определено вводом, то есть из «GetProjection ()»:
«PROJCS [ "North_Pole_Stereographic", GEOGCS [ "GCS_WGS_1984", НУЛЕВОЙ [ "WGS_1984", сфероида [ "WGS_1984", 6378137.0,298.257223563]], PRIMEM [ "Гринвич", 0,0], блок [ "Степень", 0,0174532925199433]], ПРОЕЦИРОВАНИЯ [ "стереографическая"], параметр [ "False_Easting", 0,0], параметр [ "False_Northing", 0,0], параметр [ "Central_Meridian", 0,0], параметр [ "Scale_Factor", 1,0], параметр [ "Latitude_Of_Origin", 90.0 ], [БЛОК "50_Kilometers", 50000,0]]»
И вход GeoTransform:
(-0.5, 1.0, 0.0, 94.5, 0.0, -1.0)
Широта, длинные координаты сетки также предоставляются, и при просмотре в проецируемой системе координат выглядят как показано ниже. Когда геотрансформация определяется координатами нижнего левого (желтого) или верхнего правого (розового) кордината, я могу эффективно установить экстент, но остаются проблемы с выравниванием по всему растру.