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.
źródło
Odpowiedzi:
Zbyt długo na komentarz, musi towarzyszyć odpowiedzi @ Matej .
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.
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,
źródło
Odpowiednie informacje dotyczące projekcji dla tych plików można znaleźć tutaj: Zdefiniuj ciąg Proj4 dla zestawu danych CANGRD
źródło
Nie sądzę, że musisz zmienić projekt obrazu. Wykonaj tylko następujące czynności:
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:
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:
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:
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.
źródło