Suite

Carte interactive et dynamique avec données de vent dans le dépliant R ?

Carte interactive et dynamique avec données de vent dans le dépliant R ?


J'ai des données comme ceci :

longitude latitude vitesse direction 1 6.10722222 46.23639 4 360 2 6.95416667 43.54694 4 360 3 7.21472222 43.66556 13 330 4 4.01666667 48.32167 7 290 5 2.30833333 43.21611 14 290 6 2.48305556 44.40806 13 320 7 5.21500000 43.43694 19 330 8 4.92361320 43.21611 14 290 6 2.48305556 44.40806 13 320 7 5.21500000 43.43694 19 330 8 4.92361320 43.52258 -0.44972222 49.17389 6 290 11 0.16000000 49.36389 3 0 12 2.41666667 44.89750 5 290 13 -0.31361111 45.65583 8 310 14 0.21888889 45.72972 7 70 15 -1.19527778 46.17917 10 330 16 2.64250000 47.05722 4 270 17 8.48555556 45.03972 8 320.1950 2 0 20 9.40527778 41.92667 15 350 21 9.48472222 42.55083 13 10 22 8.79277778 42.52056 9 50 23 5.09083333 47.26639 9 330 24 -3.47444444 48.75556 6 330 25 -2.85666667 48.53778 6 330 26 0.52055556 44.82444 4 280 27 4.936666 360 289.018 1.37944444 48.05806 5 330 30 -3.81666667 48.60111 9 330 31 -4.42194444 48.44778 10 330 32 -4.16805556 47.97556 12 340 33 -4.15166667 48.53028 10 340 34 -4.44583333 48.28194 12 330 35 4.41611111 43.75778 14 360 36 1.36777778 43.63500 14 310 37 -0.71527778 44.82861 4 290 38 -1.13138889 44.53528 2 360 39 3.96111111 43.58333 5 30 40 3.35333333 43.32333 20.320 41 -2.08000340 48 43 -1.78207 1.72250000 46.85889 3 310 44 0.723333333 47.43306 3 300 45 5.33222222 45.36333 13 360 46 5.42444444 47.04222 8 340 47 -1.06888889 43.68917 4 310 48 -0.50916667 43.91167 6 300 49 1.68916667 47.31750 0 0 50 4.29722222 45.53389.52.360-2 47.156. 47.31056 8 300 53 1.75944444 47.98944 4 320 54 0.59055556 44.17500 8 290 55 -0.31194444 47.56028 3 60 56 -1.47527778 49.65083 8 340 57 4.15666667 49.20861 3 0 58 4.20611111 48.77333 4 320 59 4.90805556 48.6338978 4 30 60 -0.742330 340 62 5.95500000 48.58389 4 310 63 -3.43944444 47.76083 4 250 64 -2.72805556 47.72194 4 310 65 6.24638889 48.97861 6 320 66 3.11083333 47.00417 3 280 67 3.08638889 50.56417 6 280 68 2 .11277778 49.45500 4 310 69 2.51916667 49.25333 0 0 70 1.62750000 50.51472 5 330 71 3.16222222 45.78639 5 350 72 -1.53138889 43.46889 16 330 73 -0.41833333 43.38083 7 350 74 0.0000000 43.18694 7 340 75 2.86972222 42.74083 15 33067 320 735074 0.0000000 43.18694 7 340 75 2.86972222 42.74083 15 33067 320 1 0 78 7.35916667 48.11028 3 0 79 5.08111111 45.72556 10 350 80 4.93861111 45.73028 10 350 81 6.35972222 47.78806 3 0 82 4.02111111 46.40639 8 310 83 0.20166667 47.94917 1 0 84 5.88166667 45.63806. 7 10 88 2,67027778 48.60667 3 300 89 2.11111111 48.74972 4 310 90 2.19166667 48.77417 4 360 91 2.69222222 49.97111 4 360 92 2.28916667 43.55694 13 330 93 6.14583333 43.09722 7 290 94 4.90194444 43.90694 14 290 95 0.3 4.85972666 44.14833 13250 46.58750 32 320 98 1.18027778 45.86111 26 330 99 6.06666667 48.32528 6 290 100 2.43222222 48.94972 3 0 101 2.35944444 48.72556 5 290 102 2.54861111 49. 01000 8 310 103 2.04083333 49.09667 7 70

Je souhaite afficher les données de vent (vitesse et direction) en R avecbrochurepackage, mais jusqu'à présent, je n'ai pas trouvé beaucoup d'exemples à ce sujet.

Cette discussion est très intéressante : rationalise les données de vent espacées irrégulièrement dans R, mais comment puis-je afficher le résultat sur une carte interactive avec dépliant ?

J'aimerais avoir quelque chose comme ça : http://apps.socib.es/Leaflet.TimeDimension/examples/example3.html


J'ai manqué certaines informations dans votre ensemble de données telles que le CRS et l'horodatage ; J'ai donc créé mon propre ensemble de données pour fournir un exemple reproductible.

Voici une suggestion pour créer des cartes de vent interactives : une statique dans le temps et l'autre dynamique :

  1. Préparer la trame de données (df) avec des données géoréférencées : vitesse et direction du vent.
  2. Complémentdfavec des coordonnées auxiliaires pour représenter le vent sous forme de pointes de flèche.
  3. Créer un objet de classeSpatialLinesDataFrameà utiliser dansbrochure.
  4. Générer de l'interactivité et statique carte de la vitesse et de la direction du vent.
  5. Générer de l'interactivité et dynamique carte de la vitesse et de la direction du vent (intégrée au package Rbrillant).

Voir le code commenté et les sorties ci-dessous :

#------------------------------ #Étape 1 - Préparer la trame de données ('df') avec des données géoréférencées : vitesse du vent et direction du vent. #Données d'échantillon (n=12 ; données recueillies en 4 jours différents de décembre 2016) #Coordonnées projetées. CRS = EPSG3857 (http://spatialreference.org/ref/sr-org/7483/) #Coordonnées x et y de départ (où les données de vent ont été observées). start.x <- c(-5320000,-5316500,-5316020,-5316800,-5316050,-5320400,-5321800,-5320080,-5325000,-5320010,-5322165,-5320786) #longitude start.y <- c(-2180000,-2185900,-2185300,-2184000,-2180700,-2180010,-2189000,-2187500,-2183030,-2184600,-2185025,-2182384) #latitute #Variables vent (vitesse, direction et date) w.speed <- c(10,75,93,40,23,8,65,45,29,54,35,28) #wind speed (km/h) w.direction <- c(330,80, 35 240 170 90 180 180 20 231 360 290 55) #angle d'azimut du vent (degrés) w.date <- do.call("as.Date", list(x = c("1-Dec-2016", "1-Dec-2016 ", "1-déc-2016", "5-déc-2016", "5-déc-2016", "5-déc-2016", "9-déc-2016", "9-déc-2016", "9-Dec-2016", "12-Dec-2016", "12-Dec-2016", "12-Dec-2016"), format = "%d-%b-%Y")) #date de collecte de données (aaaa-mm-jj) id <- c(1:length(start.x)) #id of sample data #Dataframe with georeferenced wind data df <- data.frame(id=id,start.x=start .x,start.y=start.y,w.speed=w.speed,w.direction=w.direction,w.date=w.date) head(df,5) #-------- ---------------------- #Étape 2 - Complément 'df' avec des coordonnées auxiliaires pour représenter le vent sous forme de pointes de flèche. #Paramètres de ligne line.length <- 1000 #longueur des polylignes représentant le vent sur la carte (mètres) arrow.length <- 300 #longueur de la branche de la pointe de flèche (mètres) arrow.angle <- 120 #angle de la branche de la pointe de flèche (azimut en degrés) #Générer un bloc de données avec les coordonnées auxiliaires end.xy.df <- data.frame(end.x=NA,end.y=NA,end.arrow.x=NA,end.arrow.y=NA) pour (i dans c(1:nrow(df))){ #coordonnées des extrémités des lignes de vent (les points initiaux sont ceux où les données ont été observées) if (df$w.direction[i] <= 90) { end.x < - df$start.x[i] + (cos((90 - df$w.direction[i]) * 0.0174532925) * line.length) } else if (df$w.direction[i] > 90 & df$ w.direction[i] <= 180) { end.x <- df$start.x[i] + (cos((df$w.direction[i] - 90) * 0.0174532925) * line.length) } else if (df$w.direction[i] > 180 & df$w.direction[i] <= 270) { end.x <- df$start.x[i] - (cos((270 - df$w. direction[i]) * 0.0174532925) * line.length) } else {end.x <- df$start.x[i] - (cos((df$w.direction[i] - 270) * 0.0174532925) * line .length)} if (df$w.direction[i] <= 90 ) { end.y <- df$start.y[i] + (sin((90 - df$w.direction[i]) * 0.0174532925) * line.length) } else if (df$w.direction[i ] > 90 & df$w.direction[i] <= 180) { end.y <- df$start.y[i] - (sin((df$w.direction[i] - 90) * 0.0174532925) * line.length) } else if (df$w.direction[i] > 180 & df$w.direction[i] <= 270) { end.y <- df$start.y[i] - (sin(( 270 - df$w.direction[i]) * 0.0174532925) * line.length) } else {end.y <- df$start.y[i] + (sin((df$w.direction[i] - 270 ) * 0.0174532925) * line.length)} #coordonnées des points d'extrémité pour les lignes de jambe de flèche (les points initiaux sont les points d'extrémité précédents) end.arrow.x <- end.x + (cos((df$w.direction[ i] + arrow.angle) * 0,0174532925) * arrow.length) end.arrow.y <- end.y - (sin((df$w.direction[i] + arrow.angle) * 0,0174532925) * arrow.length ) end.xy.df <- rbind(end.xy.df,c(end.x,end.y,end.arrow.x,end.arrow.y)) } end.xy <- end.xy.df [-1,] df <- data.frame(df,end.xy) #df avec variables observées et auxiliaires head(df,3) #------------------ ------------ #Étape 3 - Créer e un objet de classe 'SpatialLinesDataFrame' à utiliser dans 'leaflet'. lignes <- data.frame(cbind(lng=c(df$start.x,df$end.x,df$end.arrow.x), lat=c(df$start.y,df$end.y, df$end.arrow.y), id=c(rep(df$id,3)))) lines.list <- list() library(sp) 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") #define CRS #Convertir CRS en coordonnées géographiques (http://spatialreference.org/ref/epsg/4326/) #pour superposer sur les tuiles OpenStreetMaps dans Leaflet sp .lines <- spTransform(sp.lines, CRS("+init=epsg:4326")) rownames(df) = df$id #Joindre les variables de vent (id, vitesse, direction et date) à l'objet de la classe 'SpatialLines' sp.lines.df <- SpatialLinesDataFrame(sp.lines, df[,c(1,4:6)]) #object of class 'SpatialLinesDataFrame' str(sp.lines.df) #inspecter la structure de l'objet #---- -------------------------- # Code pour ne xt étapes principalement adaptées de https://rstudio.github.io/leaflet/ #------------------------------ #- ----------------------------- #Étape 4 - Générez une carte interactive et **statique** de la vitesse et de la direction du vent. library(leaflet) #popup settings labels <- paste0("ID: ",[email protected]$id, "
Vitesse du vent : ",[email protected]$w.speed," Km/h
", "Direction du vent : ",[email protected]$w.direction," degrés d'azimut
", "Date : ", [email protected]$w.date) #pallete settings pal <- colorNumeric(palette = colorRampPalette(c("red", "blue"))(5), domain = 0 : max([email protected]$w.speed)) #Créer un objet pour la classe 'leaflet"htmlwidget' m <- prospectus(sp.lines.df) %>% addTiles() %>% # ajouter une carte OpenStreetMap par défaut carreaux addPolylines(color = ~pal(w.speed), opacity=1, weight = 3, popup = labels) %>% addLegend("bottomright", pal = pal, values ​​= ~w.speed, title = "Vitesse du vent
(km/h)", opacité = 1) %>% fitBounds([email protected][1,1], [email protected][2,1], [email protected][ 1,2], [email protected][2,2]) #Plot map m

#------------------------------ #Étape 5 - Générez une carte interactive et **dynamique** de la vitesse et de la direction du vent. library(shiny) #User interface (UI) settings ui <- fluidPage(leafletOutput("m.dynamic"), absolutePanel(top = 10, right = 10, draggable = TRUE, sliderInput("range", "Time of data collection :", min = min([email protected]$w.date), max = max([email protected]$w.date), value = min([email protected]$w .date), step = 4, animate=TRUE))) #Name @coords slot of SpatialLinesDataFrame: 'lng' et 'lat' #task nécessaire pour 'observer' dans la fonction 'server' pour (i in c(1:max ([email protected]$id))) { colnames([email protected][[i]]@Lines[[1]]@coords) <- c("lng","lat") } #Server logic server <- function(input, output){ filteredData <- reactive({ sp.lines.df[[email protected]$w.date == input$range[1],] }) output $m.dynamic <- renderLeaflet({ brochure(sp.lines.df) %>% addTiles() %>% # Ajouter les tuiles de carte OpenStreetMap par défaut addLegend("bottomright",pal = pal, values ​​= ~w.speed, title = "Vitesse du vent 
(km/h)", opacité = 0.9) %>% fitBounds([email protected][1,1], [email protected][2,1], [email protected][ 1,2], [email protected][2,2]) }) observe({ leafProxy("m.dynamic", data = filteredData()) %>% clearShapes() %>% addPolylines(color = ~pal(w.speed), opacity=1, weight = 3, popup = labels) }) } # Application complète avec UI et composants de serveur shinyApp(ui, server)