R: overwrite the xy coordinates of the raster layer

I have a bitmap with XY coordinates of the pixels that I want to convert to lat and 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)

I calculated the lat / long coordinates using the formula given here .

This led to the next file frame

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

How can I rewrite or duplicate a raster with spatial extent in lat / long instead of image coordinates (XY pixels)? Or is there an easier way to convert pixels to lat / Lon?

the code

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)

janW1.png

+4
source share
2 answers

, ( , ). , , .

projectRaster ( ), .

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 .

+1

, , . , - :

# 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, , .

0

All Articles