Cercle déformé par rotation autour de son centre avec la fonction spin() du paquet terra

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

jean lobry
Messages : 736
Enregistré le : 17 Jan 2008, 20:00
Contact :

Cercle déformé par rotation autour de son centre avec la fonction spin() du paquet terra

Messagepar jean lobry » 24 Juil 2024, 08:29

Bonjour,

voici mon code reproductible, il faut installer le paquet terra :

Code : Tout sélectionner

xlon <- +5.220700 ; ylat <- +46.21010
FRBOUB <- terra::vect(cbind(xlon, ylat), crs = "EPSG:4326")
cercle <- terra::buffer(FRBOUB, width = 25*10^3, quadsegs = 100)
rotated <- terra::spin(cercle, 45, xlon, ylat)
terra::plot(cercle, las = 1, xlab = "Longitude", ylab = "Latitude")
terra::points(FRBOUB, pch = 3, cex = 2)
terra::sbar(type = "bar", below = "km")
terra::north()
terra::lines(rotated, col = "red")


Je ne comprends pas pourquoi mon cercle est déformé par rotation. Est-ce que j'ai oublié de spécifier quelque chose d'évident ?

Amicalement,

Jean

Michaël Delorme
Messages : 70
Enregistré le : 04 Avr 2016, 10:21

Re: Cercle déformé par rotation autour de son centre avec la fonction spin() du paquet terra

Messagepar Michaël Delorme » 02 Aoû 2024, 06:52

Ça marche bien pour des géométries projetées (ex "EPSG:2154" au lieu de "EPSG:4326")...

jean lobry
Messages : 736
Enregistré le : 17 Jan 2008, 20:00
Contact :

Re: Cercle déformé par rotation autour de son centre avec la fonction spin() du paquet terra

Messagepar jean lobry » 27 Aoû 2024, 07:38

Bonjour Michaël,

merci pour la piste, c'est parfait ! Il suffit de passer en EPSG:2154 avant de faire la rotation puis de revenir en EPSG:4326 pour la représentation et le tour est joué :

Code : Tout sélectionner

xlon <- +5.220700 ; ylat <- +46.21010
FRBOUB <- terra::vect(cbind(xlon, ylat), crs = "EPSG:4326") # GPS
FRBOUBL93 <- terra::project(FRBOUB, "EPSG:2154") # Lambert 93
xlonL93 <- terra::geom(FRBOUBL93)[1, "x"]
ylatL93 <- terra::geom(FRBOUBL93)[1, "y"]
cercle <- terra::buffer(FRBOUB, width = 25*10^3, quadsegs = 100)
cercleL93 <- terra::project(cercle, "EPSG:2154")
rotated <- terra::spin(cercleL93, 45, xlonL93, ylatL93)
terra::plot(cercle, las = 1, xlab = "Longitude", ylab = "Latitude")
terra::points(FRBOUB, pch = 3, cex = 2)
terra::sbar(type = "bar", below = "km")
terra::north()
terra::lines(terra::project(rotated, "EPSG:4326"), col = "red")


Amicalement,

Jean


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité

cron