极地立体影像的地理转换?


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 [“格林威治”,0.0],UNIT [“同意”,0.0174532925199433]],投影[“ 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 ],UNIT [“ 50_公里”,50000.0]]'

并输入GeoTransform:

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

通常,还会提供长的网格坐标,并且在投影坐标系中进行查看时,如下所示。当通过左下(黄色)或右上(粉红色)坐标的坐标定义地理变换时,我可以有效地设置范围,但是整个栅格中仍然存在对齐问题。

在此处输入图片说明


如果使用的是ArcGIS,请切换到“立体北极”,并将标准平行线设置为60.0。由于项目可以在任何位置居中,因此ArcGIS立体图形实现使用比例因子而不是标准平行线。
肯尼迪

感谢@mkennedy-您的意思是“北极立体摄影”项目(WKID 102018)吗?我已使用此投影设置了原点纬度和中央子午线值,但仍然存在相同的问题。也许您指的是另一种预测?
jsnider

不,您需要一个投影(方法)为Stereographic_North_Pole的投影仪。我认为我们没有确切的PCS;尝试从3995或3413进行修改。
mkennedy

1
元数据注意:“文件grid_pnt_lls.txt列出了每个x / y的纬度/经度(0,0 =网格的SW角)。” 有了这个文件,您可以将该网格重新投影到所需的任何坐标系,然后从那里继续。
ub

1
我们在哪里可以下载矢量层进行测试?
Farid Cheraghi

Answers:


2

评论太久了,这是@Matej的回答

  1. 将“ .grd”数据添加到ArcGIS中。
  2. 使用“栅格转换为其他格式”功能,然后将.grd文件转换为ESRII GRID格式。这一点很重要,因为ArcGIS中的大多数栅格函数只能以这种格式访问,或者在其他格式上使用时它通常会变得太慢。

  3. 由于它已经具有与文件关联的投影文件。而不是投影新的转换数据,而是定义其投影。ArcToolbox>数据管理工具>投影和变换>定义投影。您可以导航到预定义的极坐标立体图形ESRII投影,并查看其参数是否与元数据中给定的参数匹配(不匹配),因此可以按照@Matej对其进行修改。仅在此处-而不是修改,而是基于NPS投影创建了一个新的投影,更改了中央子午线和原点纬度并将其保存在磁盘上,然后导航到新投影并在定义投影时使用它。这是因为稍后要使用即时修改时,您将无法使用该即时修改来设置数据框的坐标系,



1

我认为您不需要重新投影图像。仅执行以下操作:

  1. 定义(修改)底图的投影
  2. 对图像进行地理配准(移动)到指定位置

请注意,图像(grd)已经在北极立体图形投影中,这仅向您提供如何调整将与图像对齐的底图的指示。

第一步

修改原始北极立体投影(WKID:102018)以调整原点和中央子午线的纬度:

在此处输入图片说明

第2步:

通过将左下角设置为指定的坐标(纬度,经度)来对grd文件进行地理定位。更新地理配准时,将在同一文件夹中创建.gdwx文件。将SW角分配给(40.0451,-129.853)时,文件内容如下所示:

50000
0
0
-50000
-1730620.4315
2744092.9724

编辑:上面的世界文件已根据像元大小进行了手动修改,并提供了SW角的位置-第5和第6行表示图像左上像素的计算位置。图像的位置略有变化。

以上值将图像放置(移动)到指定位置并定义比例。

这是输出: 在此处输入图片说明

如果这似乎没有正确对齐,我将询问为图像的SW角提供的坐标。如果可以访问图像的NE角的坐标,则可以重新计算将在两个(或多个)点之间缩放和旋转图像的转换参数。


.gdwx文件是世界文件吗?如果是,则链接的wiki文章说线5和6参照的上部左边像素。您是否建议将其设置为西南(左下)像素?
Kirk Kuykendall

不。我只指定了自述文件中提到的SW角的位置。文件的结构看起来像世界文件。它是使用ArcMap中的地理配准工具生成的,该工具可能已经计算并存储了西北角的位置-尚未检查。
Matej 2015年

1
是的,我现在检查了一下。.gdwx中的存储位置是左上角。
Matej
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.