我有一个带有XY像素坐标的光栅,我希望将其转换为lat和long。
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像素)的重复栅格?或者是否有更简单的方法将像素转换为lat / Lon?
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)
答案 0 :(得分:1)
更改栅格数据的投影并不像点(和线,多边形)那么简单。这是因为如果从当前单元格计算新坐标,它们将不在常规栅格中。
您可以使用函数library(raster)
test <- raster('janW1.png')
# In this case, you need to provide the correct crs to your data
# I am guessing. (this would be necessary for spatial data sets)
crs(test) <- '+proj=merc +datum=WGS84'
# you may also need to set the extent to actual coordinate values
# extent(test) <- c( , , ,)
x <- projectRaster(test, crs='+proj=longlat +datum=WGS84')
(光栅包)来处理此问题。
?raster::interpolate
或者,您可以将计算的值插入到新栅格中。有关示例,请参阅def self.followed_by(user)
followed_ids = %(SELECT followed_id FROM relationships WHERE follower_id = :user_id) { :conditions => ["user_id IN (#{followed_ids}) OR user_id = :user_id", { :user_id => user }] }
end
。
答案 1 :(得分:0)
您可以使用所需的分辨率和空间范围从头开始创建栅格,然后将值导入其中。要创建栅格,您可以使用以下内容:
# Create a matrix of coordinates that define the limits of your raster
ex <- matrix(c(-20, -9.5, 20.5, 31.5), nrow = 2, ncol = 2, byrow = T)
# Turn those coordinates into an extent
ex <- extent(ex)
# Create a raster with the same dimensions as your original one
r <- raster(nrows = 1617, ncols = 1596)
# Set the extent of your raster
r <- setExtent(r, ex, keepres=F)
要将您之前栅格中的值添加到刚刚创建的栅格中,您可以使用:
test <- raster('janW1.png')
# Create vector of values from test
n <- values(test)
# Give values from test to r
values(r) <- n
我认为我从你的代码中得到了正确的分辨率,但是你需要将四个坐标放在你自己的范围内。空白栅格必须具有与原始栅格完全相同的分辨率,否则它将无法工作。您创建的空白栅格将自动在WGS84中,因此您可能希望在获得数据后重新投影它。