IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

R Discussion :

mauvais référentiel de projection géographique sous R


Sujet :

R

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2021
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2021
    Messages : 6
    Points : 12
    Points
    12
    Par défaut mauvais référentiel de projection géographique sous R
    Bonjour,

    Je suis bloquée depuis 2 semaines sur un problème de projection géographique sur R où j'ai représenté sur une carte le sens et la vitesse du vent avec des flèches (objets spatiaux) en suivant ce tuto
    https://gis.stackexchange.com/questi.../394584#394584,
    mais la carte d'affichage est la corse au lieu de la vendée !

    Or les coordonnées UTM que j'obtiens en transformant les données latitude et longitude GPS sont correctes...
    sauriez-vous l'erreur que j'ai faite pour me retrouver en corse au lieu de la vendée ?
    Merci beaucoup pour votre aide précieuse

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    heure <- c("05:17:53","17:53:48","18:10:49","20:04:30","21:03:18","22:21:14")
     
    df <- data_frame(
      heure = as_hms(heure),
      latitude =c(46.50253,46.24055,46.22687,46.22042,46.20115,46.16915),
      longitude = c(-1.788917,-1.360150,-1.337583,-1.317250,-1.279983,-1.245900),
      vitesse =c(5.54,7.23,2.28,3.92,7.23,5.20),
      angle = c(231,290,332,223,283,220)
    )
     
    #Step 1 - Prepare data frame (`df`) with georeferenced data: wind speed and wind direction.
     
    # Setting existing coordinate as lat-long system (WSG84)
    cord.dec = SpatialPoints(cbind(df$longitude, df$latitude), proj4string=CRS("+proj=longlat"))
     
    # Transforming coordinate to WSG84 UTM zone 29 using EPSG=2154 (france)
    cord.UTM <- spTransform(cord.dec, CRS("+proj=utm +zone=29N ellps=WGS84"))
     
     
    #Dataframe with georeferenced wind data
     
    id <- c(1:length(df$angle))
     
    df2 <- data.frame(id=id,
                      start.x= cord.UTM$coords.x1,
                      start.y= cord.UTM$coords.x2,
                      w.speed= df$vitesse,
                      w.direction= df$angle,
                      w.temps= df$heure)
     
     
    #Step 2 - Complement `df` with auxiliary coordinates for representing wind as arrowhead lines.
     
    #Line parameters
    line.length <- 1000 #length of polylines representing wind in the map (meters)
    arrow.length <- 300 #lenght of arrowhead leg (meters)
    arrow.angle <- 120 #angle of arrowhead leg (degrees azimuth)
     
    #Generate data frame with auxiliary coordinates
    end.xy.df2 <- data.frame(end.x=NA,end.y=NA,end.arrow.x=NA,end.arrow.y=NA)
     
    for (i in c(1:nrow(df2))){
     
      #coordinates of end points for wind lines (the initial points are the ones where data was observed)
      if (df2$w.direction[i] <= 90) {
        end.x <- df2$start.x[i] + (cos((90 - df2$w.direction[i]) * 0.0174532925) * line.length)
      } else if (df2$w.direction[i] > 90 & df2$w.direction[i] <= 180) {
        end.x <- df2$start.x[i] + (cos((df2$w.direction[i] - 90) * 0.0174532925) * line.length)
      } else if (df2$w.direction[i] > 180 & df2$w.direction[i] <= 270) {
        end.x <- df2$start.x[i] - (cos((270 - df2$w.direction[i]) * 0.0174532925) * line.length)
      } else {end.x <- df2$start.x[i] - (cos((df2$w.direction[i] - 270) * 0.0174532925) * line.length)}
     
      if (df2$w.direction[i] <= 90) {
        end.y <- df2$start.y[i] + (sin((90 - df2$w.direction[i]) * 0.0174532925) * line.length)
      } else if (df2$w.direction[i] > 90 & df2$w.direction[i] <= 180) {
        end.y <- df2$start.y[i] - (sin((df2$w.direction[i] - 90) * 0.0174532925) * line.length)
      } else if (df2$w.direction[i] > 180 & df2$w.direction[i] <= 270) {
        end.y <- df2$start.y[i] - (sin((270 - df2$w.direction[i]) * 0.0174532925) * line.length)
      } else {end.y <- df2$start.y[i] + (sin((df2$w.direction[i] - 270) * 0.0174532925) * line.length)}
     
      #coordinates of end points for arrowhead leg lines (the initial points are the previous end points)
      end.arrow.x <- end.x + (cos((df2$w.direction[i] + arrow.angle) * 0.0174532925) * arrow.length)
      end.arrow.y <- end.y - (sin((df2$w.direction[i] + arrow.angle) * 0.0174532925) * arrow.length)
     
      end.xy.df2 <- rbind(end.xy.df2,c(end.x,end.y,end.arrow.x,end.arrow.y))
    }
     
    end.xy2 <- end.xy.df2[-1,]
     
    df2 <- data.frame(df2,end.xy2) #df with observed and auxiliary variables
     
     
    #Step 3 - Create an object of class `SpatialLinesDataFrame` to use within `leaflet`.
     
    lines <- data.frame(cbind(lng=c(df2$start.x,df2$end.x,df2$end.arrow.x),
                              lat=c(df2$start.y,df2$end.y,df2$end.arrow.y),
                              id=c(rep(df2$id,3))))
     
    lines.list <- list()
     
    for (i in c(1:max(lines$id))){
      line <- subset(lines,lines$id==i)
      line <- as.matrix(line[,c(1:2)])
      line <- Line(line) #object of class 'Line'
      lines.list[[i]] <- Lines(list(line), ID = i) #list of 'objects'Lines'
    }
     
    sp.lines <- SpatialLines(lines.list) #object of class 'SpatialLines'
    proj4string(sp.lines) <- CRS("+init=epsg:3857")
     
    #Convert CRS to geographic coordinates (http://spatialreference.org/ref/epsg/4326/)
    #for overlaying on OpenStreetMaps tiles in Leaflet
    sp.lines <- spTransform(sp.lines, CRS("+init=epsg:4326"))
     
    rownames(df2) = df2$id
    #Join wind variables (id, speed, direction and date) to object of class 'SpatialLines'
    sp.lines.df <- SpatialLinesDataFrame(sp.lines, df2[,c(1,4:6)]) #object of class 'SpatialLinesDataFrame'
    str(sp.lines.df) #inspect object structure
     
     
    #Step 4 - Generate interactive and **static** map of wind speed and direction.
     
    #popup settings
    labels <- paste0("Vitesse vent réel: ",sp.lines.df@data$w.speed," knots/h<br>",
                     "Angle vent réel : ",sp.lines.df@data$w.direction," degrees<br>",
                     "heure: ", sp.lines.df@data$w.temps)
     
    #pallete settings
    pal <- colorNumeric(palette = colorRampPalette(c("red", "blue"))(5),
                        domain = 0:10)
     
    #Create object fo class 'leaflet' 'htmlwidget'
    m <- leaflet(sp.lines.df) %>%
      addTiles() %>%  # add default OpenStreetMap map tiles
      addPolylines(color = ~pal(w.speed), opacity=1, weigh = 3, popup = labels) %>%
      addLegend("bottomright", pal = pal, values = ~w.speed,
                title = "Vitesse vent réel <br> (knots/h)",
                opacity = 1) %>%
      fitBounds(sp.lines.df@bbox[1,1], sp.lines.df@bbox[2,1], sp.lines.df@bbox[1,2], sp.lines.df@bbox[2,2])
     
    #Plot map
    m

  2. #2
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2021
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2021
    Messages : 6
    Points : 12
    Points
    12
    Par défaut solution au problème
    j'ai trouvé la solution ; mes données étaient transformées au début de mon code du 4326 en utm au lieu de 4326 en 3857 pour permettre les calculs qui suivent...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    # Transforming coordinate  from WSG84 4326 to 3857
    cord.UTM <- spTransform(cord.dec, CRS("+init=epsg:3857"))

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Création project archive sous Eclipse
    Par lamaaa dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 14/12/2011, 12h06
  2. Les systèmes d'information géographiques sous Mac OS X
    Par genemartin dans le forum Contribuez
    Réponses: 1
    Dernier message: 05/02/2011, 16h21
  3. Mauvais comportement des menu déroulant sous IE
    Par KeKeMaN dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 13/10/2008, 15h27
  4. [DHTML+CSS] Mauvais affichage sous firefox
    Par j14z dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 30/01/2006, 18h02
  5. Integrité référentiel sous postgres
    Par josoft dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 19/07/2003, 12h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo