跨越180度经线的重投影
原文链接: https://www.nv5geospatialsoftware.com/Learn/Blogs/Blog-Details/re-projection-over-the-180th-meridian
17971 评价此文章:
暂无评分
跨越180度经线的重投影
匿名 2015年4月28日,星期二
对于某些数据格式,尤其是那些具有大范围扫描带的数据,如 AVHRR、NPP VIIRS 和 MODIS,有时数据的地理范围会跨越180度经线。当在投影中使用度来度量经度时,这可能会带来一个问题,因为经度从 -180 度到 180 度不是连续的。为了正确地进行重投影,可以使用 ENVI 和 IDL 通过几种方法来校正数据中的这种异常情况。对于下面的示例,假设我们从 AVHRR HDF4 文件中读取了变量“lat”、“lon”和“data”。使用 IDL 获取这些变量的一种方法如下:
e = envi(/current)
hdf_id = hdf_sd_start('my_hdf_file.hdf')
hdf_sd_fileinfo, hdf_id, numData,atts
dataset_names = strarr(numData)
for i=0, numData-1 do begin
hdf_sd_getinfo, hdf_sd_select(hdf_id, i),name=name
dataset_names[i] = name
endfor
index = where(dataset_names eq 'avhrr_band1')
lon_index = where(dataset_names eq 'longitude')
lat_index = where(dataset_names eq 'latitude')
dataset_id=hdf_sd_select(hdf_id, index)
hdf_sd_getdata, dataset_id, data
hdf_sd_endaccess, dataset_id
lon_id=hdf_sd_select(hdf_id, lon_index)
hdf_sd_getdata, lon_id, lon
hdf_sd_endaccess, lon_id
lat_id=hdf_sd_select(hdf_id, lat_index)
hdf_sd_getdata, lat_id, lat
hdf_sd_endaccess, lat_id
; 关闭文件:
hdf_sd_end,hdf_id
如何判断我的数据是否跨越了180度经线?
根据您的数据集,有几种方法可以测试是否需要校正数据范围从 -180 度跨越到 +180 度的情况。如果您在某个特定区域(例如美国和夏威夷)工作,可以测试经度是否超过某个阈值。如果您知道正在查看北美地区的数据,可以通过计算经度网格的最大值来测试是否存在接近 180 度的经度值:
if max(lon)gt 179 then ...
检查数据集是否跨越180度经线的一个更可靠的方法是计算最小和最大经度之间的差值。如果数据确实跨越了180度经线,最大值将约为 180,最小值将约为 -180。虽然您的数据不太可能环绕整个地球(例如南北极周围的数据),但这个问题我将留到另一篇文章中讨论。因此,我们可以假设如果最大和最小经度之差接近 360 度,则数据跨越了180度经线:
if (max(lon)- min(lon)) gt 359 then ...
如何校正这种情况?
如果您想使用 ENVI 中提供的 GLT 重投影工具将数据投影到规则网格上,而您的数据又跨越了180度经线,那么您很幸运!Exelis 的工程师们投入时间自动校正了这种情况。如果您的数据跨越了180度经线,生成的图像将位于标准 WGS-84 世界地图的右侧(+180 度)。如果您希望它位于 WGS-84 地图的左侧(-180 度),只需在进行 GLT 重投影之前,从“lon”变量中减去 360 度即可:
lon -= 360
以下是 ENVI 中的一个显示示例——在一幅图像中我应用了 360 度的偏移,在另一幅中则保持原样。
