Как я могу отобразить карту по осям xy пространственно-временного куба в R - PullRequest
0 голосов
/ 02 августа 2020

Я работаю над анализом движений животных. Я мог бы создать куб космической высоты для миграции птиц через Египет.

Я хочу показать карту Египта внизу, чтобы увидеть, где птицы летают высоко и где отдыхают. Я использовал следующий код:

    library(leaflet)
    library(rgl)
    
    
    eamEgypt2011 <- read.csv('HUJ MPIO White Stork E-Obs Autumn 11_clean.csv')

    #Check columns of the dataframe
    names(eamEgypt2011)
    
    
    
    # create coloring order for bird individuals in the dataframe
    colors <- c('green', 'red', 'purple', 'black', 'white', 'yellow', 'gray', 'brown')
    pal2 <- colorFactor(colors, eamEgypt2011$individual.local.identifier)
    
    #Plot 3d plot (cube) to display bird altitude across space
    with(storkAutumn11, plot3d(location.long, location.lat, height.above.ellipsoid, type = "p",
                               col = pal2(individual.local.identifier)))
    rglwidget()

Этот код работает и дает такой результат: http://rpubs.com/KhaledElnoby/locatiionAltCubeCiconiaCicAutumnMig11

Но я хочу отобразить карту на оси широта-долгота, как на этой фотографии: Пример того, как я хочу, чтобы график выглядел:

Пример того, что я хочу создать как

Это результат команды R

> library(leaflet)
> library(rgl)
> 
> 
> eamEgypt2011 <- read.csv('HUJ MPIO White Stork E-Obs Autumn 11_clean.csv')
> 
> names(eamEgypt2011)
 [1] "event.id"                                      "visible"                                      
 [3] "timestamp"                                     "location.long"                                
 [5] "location.lat"                                  "bar.barometric.pressure"                      
 [7] "data.decoding.software"                        "eobs.acceleration.axes"                       
 [9] "eobs.acceleration.sampling.frequency.per.axis" "eobs.accelerations.raw"                       
[11] "eobs.activity"                                 "eobs.activity.samples"                        
[13] "eobs.battery.voltage"                          "eobs.fix.battery.voltage"                     
[15] "eobs.horizontal.accuracy.estimate"             "eobs.key.bin.checksum"                        
[17] "eobs.speed.accuracy.estimate"                  "eobs.start.timestamp"                         
[19] "eobs.status"                                   "eobs.temperature"                             
[21] "eobs.type.of.fix"                              "eobs.used.time.to.get.fix"                    
[23] "gps.dop"                                       "gps.satellite.count"                          
[25] "ground.speed"                                  "heading"                                      
[27] "height.above.ellipsoid"                        "import.marked.outlier"                        
[29] "mag.magnetic.field.raw.x"                      "mag.magnetic.field.raw.y"                     
[31] "mag.magnetic.field.raw.z"                      "manually.marked.outlier"                      
[33] "manually.marked.valid"                         "quaternion.raw.w"                             
[35] "quaternion.raw.x"                              "quaternion.raw.y"                             
[37] "quaternion.raw.z"                              "sensor.type"                                  
[39] "individual.taxon.canonical.name"               "tag.local.identifier"                         
[41] "individual.local.identifier"                   "study.name"                                   
[43] "month"                                        
> 
> 
> # coloring for individuals
> colors <- c('green', 'red', 'purple', 'black', 'white', 'yellow', 'gray', 'brown')
> pal2 <- colorFactor(colors, eamEgypt2011$individual.local.identifier)
> 
> with(storkAutumn11, plot3d(location.long, location.lat, height.above.ellipsoid, type = "p",
+                            col = pal2(individual.local.identifier)))
> rglwidget()

1 Ответ

0 голосов
/ 02 августа 2020

rgl не имеет функций для создания карты; вам придется найти другой способ сделать это. Вы можете использовать par3d("bbox"), чтобы найти границы в каждой координате: это даст c(xmin, xmax, ymin, ymax, zmin, zmax). Вы захотите каким-то образом создать файл PNG, содержащий карту, соответствующую c(xmin, xmax, ymin, ymax). Тогда

show2d("z-", filename = "map.png")

отобразит карту на кубе с наименьшим значением z. Убедитесь, что у вас правильная ориентация для вашего графика, построив некоторые известные местоположения.

Другой способ сделать это, если у вас есть код R для создания карты, - запустить

show2d({par(mar=c(0,0,0,0)); plotmap()}, "z-")

как в примере ?show2d.

...