【问题标题】:How to change a Lambert Conic Conformal raster projection to latlon degree R如何将 Lambert Conic Conformal 栅格投影更改为纬度 R
【发布时间】:2016-04-26 14:52:18
【问题描述】:

我有一个栅格,从 (Lambert Conic Conformal projection) 中的 netcdf 获得:

    library(meteoForecast)
    wrf_temporary <- getRaster("temp", day = Sys.Date(), frames = 'complete', resolution = 36, service = "meteogalicia")
    wrf_temporary

extent      : -18, 4230, -18, 3726  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=lcc +lat_1=43 +lat_2=43 +lat_0=34.82300186157227 +lon_0=-14.10000038146973 +x_0=536402.34 +y_0=-18558.61 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=km +no_defs 

现在我想将该 wrf_temporary 栅格转换为 "+proj=longlat +datum=WGS84"(经纬度)。该怎么办? 我想要这样的东西:

    mfExtent('meteogalicia', resolution = 36)

class       : Extent 
xmin        : -49.18259 
xmax        : 18.789 
ymin        : 24.03791 
ymax        : 56.06608 

已经尝试了很多选项,但都没有给出正确的结果...

【问题讨论】:

  • 你试过projectRaster吗?如果是这样,怎么做?如果没有,请尝试一下。
  • 是的,试过projectRaster(wrf_temporary, crs="+proj=longlat +datum=WGS84"),但运气不好:(

标签: r raster netcdf map-projections


【解决方案1】:

这应该可行:

> ll = projectRaster(wrf_temporary,crs="+init=epsg:4326")
> plot(ll[[1]])

并产生这个:

乍看之下是正确的,但格林威治子午线 (longitude=0) 没有穿过伦敦。

分辨率设置为其他值 4 或 12 时不会出现此问题。使用分辨率 = 36 调用时,您会得到一个范围比其他值更大的栅格,但具有相同的投影字符串。这不可能。例如,以下图上的 (0,0) 坐标应该是地球上的同一个点,因为它们声称是相同的投影,但它们不是。

我认为分辨率=12 是正确的。这是转换为经纬度的栅格,覆盖了欧盟矢量覆盖范围:

完美排列。

所以我会说这是一个错误 - getRaster 猜测投影并弄错了,或者在裁剪后没有应用投影更改,或者它使用的任何服务都在投影。

getRaster 在猜测。投影信息在下载的 NetCDF 文件中。以另一种格式。对于 resolution=36 文件,投影信息部分是这样的:

int Lambert_Conformal ;
    Lambert_Conformal:standard_parallel = 43., 43. ;
    Lambert_Conformal:latitude_of_projection_origin = 24.2280006408691 ;
    Lambert_Conformal:false_easting = 2182.62935 ;
    Lambert_Conformal:false_northing = -269.65597 ;
    Lambert_Conformal:grid_mapping_name = "lambert_conformal_conic" ;
    Lambert_Conformal:longitude_of_central_meridian = -14.1000003814697 ;
    Lambert_Conformal:_CoordinateTransformType = "Projection" ;
    Lambert_Conformal:_CoordinateAxisTypes = "GeoX GeoY" ;

这与 R 包使用的 resolution=12 投影有点不同。所以做一个合规的:

p = "+proj=lcc +lat_1=43 +lat_2=43 +lat_0=24.2280006408691 +lon_0=-14.1000003814697 +x_0=2182629.35 +y_0=-269655.97 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=km +no_defs"
 wrf <- getRaster('temp', day = testDay, resolution=36)
 projection(wrf) = p

然后我的测试与欧盟覆盖......

请注意,这次我重新预测了欧盟。对 latlong 执行 projectRaster 也可以:

> wrfLL = projectRaster(wrf, crs="+init=epsg:4326")
> plot(wrfLL[[1]])
> abline(v=0)

格林威治子午线在其应有的位置。

【讨论】:

  • 非常感谢您的评论,我已经尝试过了,但是有一个问题,投影不正确,它不代表经度,让您了解它有多糟糕,尝试运行以下代码:image(ll, layers = 1) plot(getMap(resolution = "high"), add = T) 谢谢,Ricardo Faria
  • 啊哈。格林威治子午线 (x=0) 没有穿过伦敦……应该注意到了……嗯。
  • 问题是我需要域 03,即分辨率=36,我需要马德拉群岛和加那利群岛的数据。分辨率=12 没有覆盖我需要的区域。
  • 为你做了一些侦探工作!我现在也看到了你的错误报告!
  • 我的错。我对三种分辨率使用了相同的投影字符串。它是fixed now。非常感谢您的详细回答。
猜你喜欢
  • 2018-11-20
  • 2012-05-21
  • 2016-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-26
  • 1970-01-01
相关资源
最近更新 更多