Геотрансформація для полярної стереографічної?


16

Зараз я працюю над імпортом кліматичних даних 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", DATUM ["WGS_1984", SPHEROID ["WGS_1984", 6378137.0,298.257223563]], PRIMEM ["Greenwich", 0,0]], UN] ["Грінвіч", 0,0],] ПРОЕКЦІЯ ["Стереографічний"], ПАРАМЕТР ["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_Kilometers", 50000.0]] '

І вхідний GeoTransform:

(-0.5, 1.0, 0.0, 94.5, 0.0, -1.0)

Lat, довгі координати сітки також надаються, і при перегляді в проектованій системі координат виглядають як нижче. Коли геотрансформа визначається координатами нижнього лівого (жовтого) або верхнього правого (рожевого) кординату, я можу ефективно встановити масштаб, але залишаються проблеми вирівнювання по всій растрі.

введіть тут опис зображення


Якщо ви використовуєте ArcGIS, переключіться на стереографічний Північний полюс і встановіть стандартну паралель 60,0. Стереографічна реалізація ArcGIS використовує масштабний коефіцієнт, а не стандартну паралель, оскільки проект може бути зосереджений у будь-якому місці.
mkennedy

Дякую @mkennedy - ти маєш на увазі "стереографічний" північний полюс (WKID 102018)? Я встановив широту початку та центральні значення меридіанів за допомогою цієї проекції, і все ще маю те саме питання. Можливо, ви маєте на увазі іншу проекцію?
jsnider

Ні, вам потрібен той, де проекція (метод) - Stereographic_North_Pole. Я не думаю, що у нас є точні ПКС; спробуйте змінити з 3995 або 3413.
mkennedy

1
Метадані зазначають, що "Файл grid_pnt_lls.txt перераховує lat / longs для кожного x / y (0,0 = SW кут сітки)." Маючи цей файл у руці, ви можете повторно відхилити цю сітку до будь-якої системи координат, яку ви хочете, і перейти звідти.
whuber

1
Де ми можемо завантажити векторний шар для тестування?
Фарид Черагі

Відповіді:


2

Занадто довго для коментарів, це супроводжує відповідь @ Матея .

  1. Додайте дані .grd до ArcGIS.
  2. Використовуйте функцію "Растр в інший формат" і конвертуйте .grd файл у формат ESRII GRID. Це важливо, оскільки більшість растрових функцій в ArcGIS доступні лише для цього формату, або це, або він стає занадто повільним, коли ви використовуєте його в інших форматах.

  3. Оскільки в ньому вже є файл проекції, пов'язаний з файлом. Замість того, щоб проектувати нові перетворені дані, визначте його проекцію. ArcToolbox> Інструменти управління даними> Проекції та перетворення> Визначення проекції. Ви можете перейти до заздалегідь визначеної полярної стереографічної проекції ESRII і побачити, чи відповідають його параметри тим, які вказані в метаданих (це не так), тож ви можете змінити їх відповідно до @Matej. Тільки тут, а не модифікуйте, створіть новий на основі проекції NPS із зміненим центральним меридіаном та широтою походження та збережіть його на диску, а потім перейдіть до нової проекції та використовуйте це під час визначення проекції. Це відбувається тому, що ваша модифікація на льоту не буде доступна пізніше, коли ви хочете використовувати її для встановлення системи координат для вашого кадру даних,



1

Я не думаю, що вам потрібно переробляти зображення. Виконайте лише наступне:

  1. визначити (змінити) проекцію базової карти
  2. геореференція (зміщення) зображення у вказане місце

Зауважте, що зображення (grd) вже є у стереографічній проекції Північного полюса, що лише дає вам вказівку, як відрегулювати базову карту, яка буде вирівнюватись із зображенням.

Крок 1 :

Змініть оригінальну стереографічну проекцію Північного полюса (WKID: 102018), щоб регулювати широту походження та центральний меридіан:

введіть тут опис зображення

Крок 2:

Геореференція файлу grd, встановивши нижній лівий кут на вказану координату (lat, lon). Під час оновлення геореференцій файл .gdwx створюється в тій же папці. При призначенні SW кута (40.0451, -129.853) вміст файлу виглядає так:

50000
0
0
-50000
-1730620.4315
2744092.9724

редагувати: світовий файл, наведений вище, був вручну модифікований на основі розміру комірки та надав розташування кута SW - 5-й та 6-й рядок представляють обчислене розташування верхнього лівого пікселя зображення. Положення зображення незначно змінилося.

Наведені вище значення розміщують (зміщують) зображення у вказане місце та визначають масштаб.

І це вихід: введіть тут опис зображення

Якщо це не здається правильно вирівняним, я б поставив під сумнів надані координати для SW кута зображення. Якщо у вас є доступ до координат, тобто NE кута зображення, ви можете перерахувати параметри перетворення, які б масштабували та обертали зображення між двома (або більше) точками.


Чи є файл .gdwx світовим файлом ? Якщо так, то у зв’язаній статті вікі йдеться, що рядки 5 та 6 посилаються на верхній лівий піксель. Ви пропонуєте встановити його на південно-західний (нижній лівий) піксель?
Кірк Куйкендал

Ні. Я лише вказав розташування SW кута, як зазначено у файлі readme. Структура файлу виглядає як світовий файл. Він був створений за допомогою інструменту геореференції в ArcMap, який, можливо, розраховував і зберігав місце розташування куточка СЗ - ще не перевіряв.
Матей

1
Так, я перевірив це зараз. Збережене місце у .gdwx - верхній лівий кут.
Матей
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.