【发布时间】:2016-06-30 13:50:25
【问题描述】:
我有一个 XY 像素坐标的栅格,我想将其转换为纬度和经度。
class : RasterLayer
dimensions : 1617, 1596, 2580732 (nrow, ncol, ncell)
resolution : 1, 1 (x, y)
extent : 0, 1596, 0, 1617 (xmin, xmax, ymin, ymax)
coord. ref. : NA
data source : C:\janW1.png
names : janW1
values : 0, 255 (min, max)
我使用here 指定的公式计算了纬度/经度坐标。
这导致了以下数据框
heads(cords)
lat lon x y janW1
1 46.99401 -14.99122 0.5 1616.5 0
2 46.99401 -14.97367 1.5 1616.5 0
3 46.99401 -14.95611 2.5 1616.5 0
4 46.99401 -14.93856 3.5 1616.5 0
5 46.99401 -14.92100 4.5 1616.5 0
6 46.99401 -14.90345 5.5 1616.5 0
如何覆盖或创建空间范围为 lat/long 而不是图像坐标(XY 像素)的重复栅格?或者有没有更简单的方法将像素转换为纬度/经度?
代码
library(raster)
test <- raster('janW1.png')
data_matrix <- rasterToPoints(test)
# Calculate longitude.
lonfract = data_matrix[,"x"] / (1596 - 1)
lon = -15 + (lonfract * (13 - -15))
# Calculate latitude.
latfract = 1.0 - (data_matrix[,"y"] / (1617 - 1))
Ymin = log(tan ((pi/180.0) * (45.0 + (47 / 2.0))))
Ymax = log(tan ((pi/180.0) * (45.0 + (62.999108 / 2.0))))
Yint = Ymin + (latfract * (Ymax - Ymin))
lat = 2.0 * ((180.0/pi) * (atan (exp (Yint))) - 45.0)
# Make single dataframe with XY pixels and latlon coords.
latlon <- data.frame(lat,lon)
tmp <- data.frame(data_matrix)
cords <- cbind(latlon, tmp)
【问题讨论】:
-
欢迎来到 SO。请始终尝试提供可重现的示例 - 包括图像、加载方式和所需的包,以及如何进行地理转换。对于你的问题:如果你只是做
extent(r) <- extent(min(cords$lon), max(cords$lon), min(cords$lat), max(cords$lat))呢? -
已按要求更新。我也尝试过更改范围,但是图像在绘制时只是被拉伸了。
-
note:与
cords数据框相比,extent(r) <- extent(min(cords$lon), max(cords$lon), min(cords$lat), max(cords$lat))产生的纬度/经度坐标似乎略有不同。
标签: r coordinates pixel raster r-raster