Extraire l'élévation par longitude et latitude

Sep 07 2020

J'ai un gros fichier de coordonnées sur la carte de la Nouvelle-Zélande, par longitude et latitude. Je veux trouver l'élévation approximative à chaque point. En commençant par une seule zone, j'ai trouvé un raster avec les données dont j'ai besoin. Je l'ai chargé dans QGIS et cela me semble bien. Il contient ces informations:

Name    NZDEM_SoS_v1-0_27_Dunedin_gf
Path    C:\...\elevation\kx-27-dunedin-15m-dem-nzsosdem-v10-GTiff\NZDEM_SoS_v1-0_27_Dunedin_gf.tif
CRS EPSG:2193 - NZGD2000 / New Zealand Transverse Mercator 2000 - Projected
Extent  1372000.0000000000000000,4866000.0000000000000000 : 1492000.0000000000000000,5046000.0000000000000000
Unit    meters
Width   8000
Height  12000
Data type   Float32 - Thirty two bit floating point
GDAL Driver Description GTiff
GDAL Driver Metadata    GeoTIFF

Jusqu'ici tout va bien. Maintenant dans R, j'ai installé le package raster et je peux faire:

fname = "../elevation/kx-27-dunedin-15m-dem-nzsosdem-v10-GTiff/NZDEM_SoS_v1-0_27_Dunedin_gf.tif"
elev.r <- raster(fname)

Cela me donne cet avertissement, mais ce n'est peut-être pas un problème:

Message d'avertissement: Dans showSRID (uprojargs, format = "PROJ", multiline = "NO"): Datum ignoré Inconnu basé sur l'ellipsoïde GRS80 dans la définition CRS, mais + towgs84 = valeurs préservées

Alors je peux faire

extract(elev.r,1000,1000)

et qui renvoie une valeur 1125,455 qui est vraisemblablement l'élévation.

Que dois-je faire pour convertir ma longitude, ma latitude en x, y que la fonction d'extraction comprendra?

J'ai téléchargé le raster ici: https://koordinates.com/my/downloads/2000967/download/?dl

long = 170.605375
lat =  -45.859668


xy <- cbind(lat,long)
colnames(xy) <- c('x', 'y')
xy <- as.data.frame(xy)

coordinates(xy) <- ~ x + y # telling R these are spatial points
crs(xy) <- crs(elev.r) # set the same crs as in your_raster
crs(xy)

extract(elev.r, xy)

renvoie NA tout ce qui semble être dans xy

Réponses

2 Liman Sep 08 2020 at 05:21

Que dois-je faire pour convertir ma longitude, ma latitude en x, y que la fonction d'extraction comprendra?

Vous avez besoin que vos points soient l'un des suivants (je suppose que vos points x, y sont chargés dans un objet appelé xy, et votre raster d'élévation dans un objet appelé your_raster):

  • points représentés par une matrice à deux colonnes ou data.frame. Cela signifie que vous devez les formater comme dans la mise en page suivante:
library(raster)

# read your raster here
your_raster <- raster("path/to/the/elevation/raster")

# creating a data.frame with the x,y data
xy <- data.frame(x = seq(1400000, 1450000, by = 10000),
                 y = seq(4900000, 5000000, by = 100000))

print (xy)

#      x       y
# 1 1400000 4900000
# 2 1410000 5000000
# 3 1420000 4900000
# 4 1430000 5000000
# 5 1440000 4900000
# 6 1450000 5000000

extract(your_raster, xy)
  • SpatialPoints ou SpatialPointsDataframe
library(sp)
library(raster)

# read your raster here
your_raster <- raster("path/to/the/elevation/raster")

# creating a data.frame with the x,y data
xy <- data.frame(x = seq(1400000, 1450000, by = 10000),
                 y = seq(4900000, 5000000, by = 100000))

print (xy)

#      x       y
# 1 1400000 4900000
# 2 1410000 5000000
# 3 1420000 4900000
# 4 1430000 5000000
# 5 1440000 4900000
# 6 1450000 5000000

coordinates(xy) <- ~ x + y # telling R these are spatial points
crs (xy) <- crs(your_raster) # set the same crs as in your_raster
extract(your_raster, xy)

Les points que vous avez publiés semblent être longlat/WGS84alors que le raster est dans une autre projection. Vous pouvez transformer le point en crs du raster avant l'extraction.

xy = data.frame(x=170.605375, y=-45.859668)
coordinates(xy) <- ~ x + y
crs(xy) <- CRS("+proj=longlat +datum=WGS84")
xy <- spTransform(xy, crs(your_raster))
extract(your_raster, xy)