Geotransformacja dla stereograficznej biegunowości?


16

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.

wprowadź opis zdjęcia tutaj


Jeśli korzystasz z ArcGIS, przełącz na stereograficzny biegun północny i ustaw standard równolegle na 60,0. W stereograficznej implementacji ArcGIS zastosowano współczynnik skali, a nie standardową równoległość, ponieważ pro można wyśrodkować w dowolnym miejscu.
mkennedy

Dzięki @mkennedy - masz na myśli proj „Stereograficzny biegun północny” (WKID 102018)? Ustawiłem szerokość geograficzną i wartości środkowego południka za pomocą tej projekcji i nadal mam ten sam problem. Może masz na myśli inną projekcję?
jsnider

Nie, potrzebujesz takiego, w którym rzut (metoda) to Stereographic_North_Pole. Nie sądzę, że mamy dokładny PCS; spróbuj zmodyfikować z 3995 lub 3413.
mkennedy

1
Metadane zauważają, że „plik grid_pnt_lls.txt zawiera listę lat / longs dla każdego x / y (0,0 = narożnik SW siatki).” Mając ten plik w ręku, możesz ponownie skierować tę siatkę do dowolnego układu współrzędnych, który chcesz, i stamtąd.
whuber

1
Gdzie możemy pobrać warstwę wektorową do testowania?
Farid Cheraghi

Odpowiedzi:


2

Zbyt długo na komentarz, musi towarzyszyć odpowiedzi @ Matej .

  1. Dodaj dane „.grd” do ArcGIS.
  2. Użyj funkcji „Raster to Other Format” i przekonwertuj plik .grd na format ESRII GRID. Jest to ważne, ponieważ większość funkcji rastrowych w ArcGIS jest dostępna tylko dla tego formatu, albo to albo zwykle staje się zbyt wolne, gdy używasz go w innych formatach.

  3. Ponieważ ma już plik projekcji powiązany z tym plikiem. Zamiast wyświetlać nowe przekonwertowane dane, zdefiniuj ich rzut. ArcToolbox> Narzędzia zarządzania danymi> Projekcje i transformacje> Zdefiniuj projekcję. Możesz przejść do predefiniowanej polarnej projekcji ESRII z grafiką stereo i sprawdzić, czy jej parametry odpowiadają parametrom podanym w metadanych (tak nie jest), więc możesz zmodyfikować ją zgodnie z @Matej. Tylko tutaj - zamiast modyfikować, utwórz nowy oparty na projekcji NPS ze zmienionym środkowym południkiem i Współrzędnością pochodzenia i zapisz go na dysku, a następnie przejdź do nowej projekcji i użyj jej podczas definiowania projekcji. Wynika to z faktu, że modyfikacja „w locie” nie będzie później dostępna, gdy będzie używana do ustawienia układu współrzędnych dla ramki danych,



1

Nie sądzę, że musisz zmienić projekt obrazu. Wykonaj tylko następujące czynności:

  1. zdefiniuj (zmodyfikuj) rzut mapy bazowej
  2. georeferencja (przesunięcie) obrazu do określonej lokalizacji

Zauważ, że obraz (grd) jest już w projekcji StereoGraphic na biegunie północnym, co daje jedynie wskazanie, jak dostosować mapę bazową, która zostanie wyrównana z obrazem.

Krok 1 :

Zmodyfikuj oryginalną projekcję stereograficzną bieguna północnego (WKID: 102018), aby dostosować szerokość geograficzną i południk środkowy:

wprowadź opis zdjęcia tutaj

Krok 2:

Georeferencja w pliku grd, ustawiając lewy dolny róg na określoną współrzędną (lat, lon). Podczas aktualizacji georeferencji plik .gdwx jest tworzony w tym samym folderze. Przy przypisywaniu rogu SW do (40.0451, -129.853) zawartość pliku wygląda następująco:

50000
0
0
-50000
-1730620.4315
2744092.9724

edycja: powyższy plik świata został ręcznie zmodyfikowany w oparciu o rozmiar komórki i podaną lokalizację rogu SW - 5. i 6. linia reprezentują obliczoną lokalizację lewego górnego piksela obrazu. Pozycja obrazu zmieniła się nieznacznie.

Powyższe wartości umieszczają (przesuwają) obraz w określonej lokalizacji i określają skalę.

A to jest wynik: wprowadź opis zdjęcia tutaj

Jeśli to nie wydaje się być wyrównane poprawnie, kwestionowałbym podane współrzędne narożnika SW obrazu. Jeśli masz dostęp do współrzędnych tj. NE narożnika obrazu, możesz ponownie obliczyć parametry transformacji, które skalowałyby i obracały obraz między dwoma (lub więcej) punktami.


Czy plik .gdwx jest plikiem światowym ? Jeśli tak, to linkowany artykuł wiki mówi, że linie 5 i 6 odnoszą się do lewego górnego piksela. Czy sugerujesz ustawienie go na południowy zachód (lewy dolny) piksel?
Kirk Kuykendall

Nie. Podałem tylko lokalizację narożnika SW, jak podano w pliku readme. Struktura pliku wygląda jak plik świata. Został wygenerowany za pomocą narzędzia Georeferencing w ArcMap, które mogło obliczyć i zapisać położenie narożnika NW - jeszcze nie sprawdzone.
Matej

1
Tak, sprawdziłem to teraz. Lokalizacja zapisana w .gdwx to lewy górny róg.
Matej
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.