Geotransformação para estereografia polar?

16

Atualmente, estou trabalhando para importar dados climáticos do CANGRID (fornecidos como Surfer Grid ascii, arquivos ".grd") para o ArcGIS. A grade é de 95 linhas por 125 colunas de tamanho. Os metadados fornecem lat / lon de origem (canto inferior esquerdo), tamanho da célula (50 km), bem como projeção de notas como estereográfica polar com meridiano central (110 graus W) e latitude de origem (60 graus N).

Após tentar converter o .grd em rasters como .ascii e .flt, sem êxito, consegui usar o GDAL para definir a extensão e a projeção, no entanto, o conjunto de dados não se alinha corretamente aos limites da área pretendida. Veja a imagem abaixo.

Existe uma geotransformação aceita para estereografia polar que possa explicar essa falta de alinhamento?

Por exemplo, existe um fator de conversão ou rotação específico que eu deveria usar?

Um arquivo de exemplo do conjunto de dados está aqui: "t201113.grd"

Aqui está o código que estou usando atualmente no 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
`

Além disso, aqui estão as informações da projeção, conforme definidas pela entrada, ou seja, de "GetProjection ()":

'PROJCS ["North_Pole_Stereographic", GEOGCS ["GCS_WGS_1984", DATUM ["WGS_1984", SPHEROID ["WGS_1984", 6378137.0,298.257223563]], PRIMEM ["Greenwich", 0.0], UNIDADE ["3232", 1995], 33] 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 ], UNIDADE ["50_Kilômetros", 50000.0]] '

E a entrada GeoTransform:

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

Lat, comprimentos das coordenadas da grade também são fornecidos e, quando visualizados no sistema de coordenadas projetado, são parecidos abaixo. Quando a geotransformação é definida por coordenadas do cordado inferior esquerdo (amarelo) ou superior direito (rosa), posso definir efetivamente a extensão, mas ainda há problemas de alinhamento durante a varredura.

insira a descrição da imagem aqui

jsnider
fonte
Se você estiver usando o ArcGIS, alterne para o Pólo Norte Estereográfico e defina o padrão paralelo para 60.0. A implementação estereográfica do ArcGIS usa um fator de escala em vez de um paralelo padrão, porque o proj pode ser centralizado em qualquer lugar.
Mcknedy #
Obrigado @mkennedy - você quer dizer o projeto "Estereográfico do Polo Norte" (WKID 102018)? Defina a latitude de origem e os valores do meridiano central usando essa projeção e ainda tenho o mesmo problema. Talvez você esteja se referindo a outra projeção?
jsnider
Não, você precisa de um em que a projeção (método) seja Stereographic_North_Pole. Eu não acho que temos o PCS exato; tente modificar a partir de 3995 ou 3413.
mkennedy
1
Os metadados observam que "O arquivo grid_pnt_lls.txt lista os lat / longs para cada x / y (0,0 = canto do SW da grade)". Com esse arquivo em mãos, você pode reprojetar essa grade para qualquer sistema de coordenadas que desejar e continuar a partir daí.
whuber
1
Onde podemos baixar a camada vetorial para teste?
Farid Cheraghi

Respostas:

2

Muito tempo para um comentário, é para acompanhar a resposta de @ Matej .

  1. Adicione os dados ".grd" ao ArcGIS.
  2. Use a função “Raster para outro formato” e converta seu arquivo .grd em um formato ESRII GRID. Isso é importante porque a maioria das funções de varredura no ArcGIS são acessíveis apenas para este formato, isso ou geralmente fica muito lento quando você o usa em outros formatos.

  3. Como ele já possui o arquivo de projeção associado ao arquivo. Em vez de projetar os novos dados convertidos, defina sua projeção. ArcToolbox> Ferramentas de Gerenciamento de Dados> Projeções e Transformações> Definir Projeção. Você pode navegar para a projeção ESRII polar estéreo polar predefinida e ver se seus parâmetros correspondem aos dados nos metadados (não), para modificá-lo conforme @Matej. Somente aqui - em vez de modificar, crie um novo com base na projeção NPS com o meridiano central e Latitude de origem alterados e salve-o em disco, navegue até a nova projeção e use-a ao definir sua projeção. Isso ocorre porque sua modificação imediata não estará disponível mais tarde quando você desejar usá-la para definir o sistema de coordenadas para seu quadro de dados,

yanes
fonte
1

Eu não acho que você precise reprojetar a imagem. Faça apenas o seguinte:

  1. definir (modificar) a projeção do mapa base
  2. georreferenciar (deslocar) a imagem para o local especificado

Observe que a imagem (GRD) já está na projeção estéreo do Polo Norte, que fornece apenas a indicação de como ajustar o mapa base que será alinhado com a imagem.

Etapa 1 :

Modifique a projeção estereográfica do Polo Norte original (WKID: 102018) para ajustar a latitude de origem e o meridiano central:

insira a descrição da imagem aqui

Passo 2:

Georeferencie o arquivo grd configurando o canto inferior esquerdo para a coordenada especificada (lat, lon). Quando você atualiza o georreferenciamento, o arquivo .gdwx é criado na mesma pasta. Ao atribuir o canto SW a (40.0451, -129.853), o conteúdo do arquivo é o seguinte:

50000
0
0
-50000
-1730620.4315
2744092.9724

editar: o arquivo mundial acima foi modificado manualmente com base no tamanho da célula e no local fornecido do canto SW - a 5ª e a 6ª linhas representam o local calculado do pixel superior esquerdo da imagem. A posição da imagem mudou ligeiramente.

Os valores acima colocam (deslocam) a imagem no local especificado e definem a escala.

E esta é a saída: insira a descrição da imagem aqui

Se isso não parecer alinhado corretamente, eu questionaria as coordenadas fornecidas para o canto SW da imagem. Caso você tenha acesso às coordenadas do canto NE da imagem, é possível recalcular os parâmetros de transformação que seriam dimensionados e girariam a imagem entre dois (ou mais) pontos.

Matej
fonte
O arquivo .gdwx é um arquivo mundial ? Nesse caso, o artigo wiki vinculado diz que as linhas 5 e 6 fazem referência ao pixel superior esquerdo. Você está sugerindo configurá-lo para o pixel sudoeste (canto inferior esquerdo)?
Kirk Kuykendall
Não. Especifiquei apenas o local do canto SW, conforme observado no arquivo leia-me. A estrutura do arquivo se parece com o arquivo mundial. Foi gerado usando a ferramenta de georreferenciamento no ArcMap que pode ter calculado e armazenado o local do canto noroeste - ainda não foi verificado.
Matej
1
Sim, eu verifiquei agora. O local armazenado no .gdwx é o canto superior esquerdo.
Matej