如何将 Lambert Conic Conformal 栅格投影更改为 latlon 度数 R
How to change a Lambert Conic Conformal raster projection to latlon degree R
我有一个栅格,是从 netcdf 中获得的(Lambert Conic Conformal projection):
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
已经尝试了很多选项,但 none 给出了正确的结果...
这应该有效:
> ll = projectRaster(wrf_temporary,crs="+init=epsg:4326")
> plot(ll[[1]])
并产生这个:
乍一看是正确的,但格林威治子午线(经度=0)不经过伦敦。
将分辨率设置为其他值(4 或 12)不会出现此问题。当使用分辨率 =36 调用时,您会得到一个范围比其他栅格更大的栅格,但具有相同的投影字符串。这不可能是对的。例如,以下图中的 (0,0) 坐标应该是地球上的同一点,因为它们声称是相同的投影,但它们不是。
我认为分辨率=12 是正确的。这是转换为经纬度并覆盖 EU 矢量覆盖的栅格:
完美对齐。
所以我会说它是一个错误 - getRaster
要么是在猜测投影并弄错了,要么是在裁剪后没有应用投影更改,或者它使用的任何服务都在投影。
getRaster
是猜测。投影信息位于下载的 NetCDF 文件中。以另一种格式。对于分辨率=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
然后我用 EU overlay 测试....
请注意,这次我重新投影了欧盟。对 latlong 做 projectRaster
也有效:
> wrfLL = projectRaster(wrf, crs="+init=epsg:4326")
> plot(wrfLL[[1]])
> abline(v=0)
格林威治子午线在其应有的位置。
我有一个栅格,是从 netcdf 中获得的(Lambert Conic Conformal projection):
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
已经尝试了很多选项,但 none 给出了正确的结果...
这应该有效:
> ll = projectRaster(wrf_temporary,crs="+init=epsg:4326")
> plot(ll[[1]])
并产生这个:
乍一看是正确的,但格林威治子午线(经度=0)不经过伦敦。
将分辨率设置为其他值(4 或 12)不会出现此问题。当使用分辨率 =36 调用时,您会得到一个范围比其他栅格更大的栅格,但具有相同的投影字符串。这不可能是对的。例如,以下图中的 (0,0) 坐标应该是地球上的同一点,因为它们声称是相同的投影,但它们不是。
我认为分辨率=12 是正确的。这是转换为经纬度并覆盖 EU 矢量覆盖的栅格:
完美对齐。
所以我会说它是一个错误 - getRaster
要么是在猜测投影并弄错了,要么是在裁剪后没有应用投影更改,或者它使用的任何服务都在投影。
getRaster
是猜测。投影信息位于下载的 NetCDF 文件中。以另一种格式。对于分辨率=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
然后我用 EU overlay 测试....
请注意,这次我重新投影了欧盟。对 latlong 做 projectRaster
也有效:
> wrfLL = projectRaster(wrf, crs="+init=epsg:4326")
> plot(wrfLL[[1]])
> abline(v=0)
格林威治子午线在其应有的位置。