Compare commits
8 Commits
133827c2bd
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c1541c693a | ||
|
|
1ab649f25f | ||
|
|
137ddb197b | ||
|
|
5d129f1498 | ||
|
|
010345ae03 | ||
|
|
595388e413 | ||
|
|
20270f5816 | ||
|
|
e2699640ca |
@@ -14,6 +14,12 @@ Develop an R-based software, which will perform the following tasks:
|
|||||||
|
|
||||||
6. In the final project report, describe the problem, describe the method and the developed software support in the R environment, present and interpret the results, and form a conclusion.
|
6. In the final project report, describe the problem, describe the method and the developed software support in the R environment, present and interpret the results, and form a conclusion.
|
||||||
|
|
||||||
|
## Demo
|
||||||
|

|
||||||
|

|
||||||
|

|
||||||
|

|
||||||
|
|
||||||
## Resources
|
## Resources
|
||||||
|
|
||||||
1. [The OpenSky Network. (2025). Internet archive of observed aircraft trajectories.](https://opensky-network.org/datasets/states/)
|
1. [The OpenSky Network. (2025). Internet archive of observed aircraft trajectories.](https://opensky-network.org/datasets/states/)
|
||||||
|
|||||||
@@ -23,11 +23,22 @@ Develop an R-based software, which will perform the following tasks:
|
|||||||
|
|
||||||
## Methodology
|
## Methodology
|
||||||
|
|
||||||
1. acquire data using the OpenSky API
|
1. acquire data using the OpenSky API bindings in the `openSkies` R package
|
||||||
|
|
||||||
2. use
|
2. use `tcltk` and `shiny` for GUI and Web Interface
|
||||||
|
|
||||||
|
3. show an interactive map using leaflet
|
||||||
|
|
||||||
|
4. calculate required parameters using `trajr`
|
||||||
|
|
||||||
|
5. calculate descriptive statistics
|
||||||
|
|
||||||
## Contribution
|
## Contribution
|
||||||
|
|
||||||
- extended functionality of the `openSkies` R package and created a merge request
|
- extended functionality of the `openSkies` R package and created a merge request in the original repository
|
||||||
|
|
||||||
|
- created a web app to display stats, density functions and boxplots
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|

|
||||||
BIN
doc/web-departures.png
Normal file
BIN
doc/web-departures.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 202 KiB |
BIN
doc/web-interpretation.png
Normal file
BIN
doc/web-interpretation.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 166 KiB |
BIN
doc/web-single.png
Normal file
BIN
doc/web-single.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 433 KiB |
BIN
doc/web-stats.png
Normal file
BIN
doc/web-stats.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 177 KiB |
BIN
doc/web-stats_full.png
Normal file
BIN
doc/web-stats_full.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 340 KiB |
682
renv.lock
682
renv.lock
@@ -58,6 +58,31 @@
|
|||||||
"Maintainer": "Kirill Müller <kirill@cynkra.com>",
|
"Maintainer": "Kirill Müller <kirill@cynkra.com>",
|
||||||
"Repository": "https://packagemanager.posit.co/cran/latest"
|
"Repository": "https://packagemanager.posit.co/cran/latest"
|
||||||
},
|
},
|
||||||
|
"KernSmooth": {
|
||||||
|
"Package": "KernSmooth",
|
||||||
|
"Version": "2.23-26",
|
||||||
|
"Source": "Repository",
|
||||||
|
"Priority": "recommended",
|
||||||
|
"Date": "2024-12-10",
|
||||||
|
"Title": "Functions for Kernel Smoothing Supporting Wand & Jones (1995)",
|
||||||
|
"Authors@R": "c(person(\"Matt\", \"Wand\", role = \"aut\", email = \"Matt.Wand@uts.edu.au\"), person(\"Cleve\", \"Moler\", role = \"ctb\", comment = \"LINPACK routines in src/d*\"), person(\"Brian\", \"Ripley\", role = c(\"trl\", \"cre\", \"ctb\"), email = \"Brian.Ripley@R-project.org\", comment = \"R port and updates\"))",
|
||||||
|
"Note": "Maintainers are not available to give advice on using a package they did not author.",
|
||||||
|
"Depends": [
|
||||||
|
"R (>= 2.5.0)",
|
||||||
|
"stats"
|
||||||
|
],
|
||||||
|
"Suggests": [
|
||||||
|
"MASS",
|
||||||
|
"carData"
|
||||||
|
],
|
||||||
|
"Description": "Functions for kernel smoothing (and density estimation) corresponding to the book: Wand, M.P. and Jones, M.C. (1995) \"Kernel Smoothing\".",
|
||||||
|
"License": "Unlimited",
|
||||||
|
"ByteCompile": "yes",
|
||||||
|
"NeedsCompilation": "yes",
|
||||||
|
"Author": "Matt Wand [aut], Cleve Moler [ctb] (LINPACK routines in src/d*), Brian Ripley [trl, cre, ctb] (R port and updates)",
|
||||||
|
"Maintainer": "Brian Ripley <Brian.Ripley@R-project.org>",
|
||||||
|
"Repository": "CRAN"
|
||||||
|
},
|
||||||
"MASS": {
|
"MASS": {
|
||||||
"Package": "MASS",
|
"Package": "MASS",
|
||||||
"Version": "7.3-65",
|
"Version": "7.3-65",
|
||||||
@@ -503,6 +528,68 @@
|
|||||||
"Maintainer": "Winston Chang <winston@posit.co>",
|
"Maintainer": "Winston Chang <winston@posit.co>",
|
||||||
"Repository": "https://packagemanager.posit.co/cran/latest"
|
"Repository": "https://packagemanager.posit.co/cran/latest"
|
||||||
},
|
},
|
||||||
|
"class": {
|
||||||
|
"Package": "class",
|
||||||
|
"Version": "7.3-23",
|
||||||
|
"Source": "Repository",
|
||||||
|
"Priority": "recommended",
|
||||||
|
"Date": "2025-01-01",
|
||||||
|
"Depends": [
|
||||||
|
"R (>= 3.0.0)",
|
||||||
|
"stats",
|
||||||
|
"utils"
|
||||||
|
],
|
||||||
|
"Imports": [
|
||||||
|
"MASS"
|
||||||
|
],
|
||||||
|
"Authors@R": "c(person(\"Brian\", \"Ripley\", role = c(\"aut\", \"cre\", \"cph\"), email = \"Brian.Ripley@R-project.org\"), person(\"William\", \"Venables\", role = \"cph\"))",
|
||||||
|
"Description": "Various functions for classification, including k-nearest neighbour, Learning Vector Quantization and Self-Organizing Maps.",
|
||||||
|
"Title": "Functions for Classification",
|
||||||
|
"ByteCompile": "yes",
|
||||||
|
"License": "GPL-2 | GPL-3",
|
||||||
|
"URL": "http://www.stats.ox.ac.uk/pub/MASS4/",
|
||||||
|
"NeedsCompilation": "yes",
|
||||||
|
"Author": "Brian Ripley [aut, cre, cph], William Venables [cph]",
|
||||||
|
"Maintainer": "Brian Ripley <Brian.Ripley@R-project.org>",
|
||||||
|
"Repository": "CRAN"
|
||||||
|
},
|
||||||
|
"classInt": {
|
||||||
|
"Package": "classInt",
|
||||||
|
"Version": "0.4-11",
|
||||||
|
"Source": "Repository",
|
||||||
|
"Date": "2025-01-06",
|
||||||
|
"Title": "Choose Univariate Class Intervals",
|
||||||
|
"Authors@R": "c( person(\"Roger\", \"Bivand\", role=c(\"aut\", \"cre\"), email=\"Roger.Bivand@nhh.no\", comment=c(ORCID=\"0000-0003-2392-6140\")), person(\"Bill\", \"Denney\", role=\"ctb\", comment=c(ORCID=\"0000-0002-5759-428X\")), person(\"Richard\", \"Dunlap\", role=\"ctb\"), person(\"Diego\", \"Hernangómez\", role=\"ctb\", comment=c(ORCID=\"0000-0001-8457-4658\")), person(\"Hisaji\", \"Ono\", role=\"ctb\"), person(\"Josiah\", \"Parry\", role = \"ctb\", comment = c(ORCID = \"0000-0001-9910-865X\")), person(\"Matthieu\", \"Stigler\", role=\"ctb\", comment =c(ORCID=\"0000-0002-6802-4290\")))",
|
||||||
|
"Depends": [
|
||||||
|
"R (>= 2.2)"
|
||||||
|
],
|
||||||
|
"Imports": [
|
||||||
|
"grDevices",
|
||||||
|
"stats",
|
||||||
|
"graphics",
|
||||||
|
"e1071",
|
||||||
|
"class",
|
||||||
|
"KernSmooth"
|
||||||
|
],
|
||||||
|
"Suggests": [
|
||||||
|
"spData (>= 0.2.6.2)",
|
||||||
|
"units",
|
||||||
|
"knitr",
|
||||||
|
"rmarkdown",
|
||||||
|
"tinytest"
|
||||||
|
],
|
||||||
|
"NeedsCompilation": "yes",
|
||||||
|
"Description": "Selected commonly used methods for choosing univariate class intervals for mapping or other graphics purposes.",
|
||||||
|
"License": "GPL (>= 2)",
|
||||||
|
"URL": "https://r-spatial.github.io/classInt/, https://github.com/r-spatial/classInt/",
|
||||||
|
"BugReports": "https://github.com/r-spatial/classInt/issues/",
|
||||||
|
"RoxygenNote": "6.1.1",
|
||||||
|
"Encoding": "UTF-8",
|
||||||
|
"VignetteBuilder": "knitr",
|
||||||
|
"Author": "Roger Bivand [aut, cre] (<https://orcid.org/0000-0003-2392-6140>), Bill Denney [ctb] (<https://orcid.org/0000-0002-5759-428X>), Richard Dunlap [ctb], Diego Hernangómez [ctb] (<https://orcid.org/0000-0001-8457-4658>), Hisaji Ono [ctb], Josiah Parry [ctb] (<https://orcid.org/0000-0001-9910-865X>), Matthieu Stigler [ctb] (<https://orcid.org/0000-0002-6802-4290>)",
|
||||||
|
"Maintainer": "Roger Bivand <Roger.Bivand@nhh.no>",
|
||||||
|
"Repository": "https://packagemanager.posit.co/cran/latest"
|
||||||
|
},
|
||||||
"cli": {
|
"cli": {
|
||||||
"Package": "cli",
|
"Package": "cli",
|
||||||
"Version": "3.6.5",
|
"Version": "3.6.5",
|
||||||
@@ -757,6 +844,38 @@
|
|||||||
"Maintainer": "Jeroen Ooms <jeroenooms@gmail.com>",
|
"Maintainer": "Jeroen Ooms <jeroenooms@gmail.com>",
|
||||||
"Repository": "https://packagemanager.posit.co/cran/latest"
|
"Repository": "https://packagemanager.posit.co/cran/latest"
|
||||||
},
|
},
|
||||||
|
"crosstalk": {
|
||||||
|
"Package": "crosstalk",
|
||||||
|
"Version": "1.2.2",
|
||||||
|
"Source": "Repository",
|
||||||
|
"Type": "Package",
|
||||||
|
"Title": "Inter-Widget Interactivity for HTML Widgets",
|
||||||
|
"Authors@R": "c( person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Carson\", \"Sievert\", , \"carson@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(, \"jQuery Foundation\", role = \"cph\", comment = \"jQuery library and jQuery UI library\"), person(, \"jQuery contributors\", role = c(\"ctb\", \"cph\"), comment = \"jQuery library; authors listed in inst/www/shared/jquery-AUTHORS.txt\"), person(\"Mark\", \"Otto\", role = \"ctb\", comment = \"Bootstrap library\"), person(\"Jacob\", \"Thornton\", role = \"ctb\", comment = \"Bootstrap library\"), person(, \"Bootstrap contributors\", role = \"ctb\", comment = \"Bootstrap library\"), person(, \"Twitter, Inc\", role = \"cph\", comment = \"Bootstrap library\"), person(\"Brian\", \"Reavis\", role = c(\"ctb\", \"cph\"), comment = \"selectize.js library\"), person(\"Kristopher Michael\", \"Kowal\", role = c(\"ctb\", \"cph\"), comment = \"es5-shim library\"), person(, \"es5-shim contributors\", role = c(\"ctb\", \"cph\"), comment = \"es5-shim library\"), person(\"Denis\", \"Ineshin\", role = c(\"ctb\", \"cph\"), comment = \"ion.rangeSlider library\"), person(\"Sami\", \"Samhuri\", role = c(\"ctb\", \"cph\"), comment = \"Javascript strftime library\") )",
|
||||||
|
"Description": "Provides building blocks for allowing HTML widgets to communicate with each other, with Shiny or without (i.e. static .html files). Currently supports linked brushing and filtering.",
|
||||||
|
"License": "MIT + file LICENSE",
|
||||||
|
"URL": "https://rstudio.github.io/crosstalk/, https://github.com/rstudio/crosstalk",
|
||||||
|
"BugReports": "https://github.com/rstudio/crosstalk/issues",
|
||||||
|
"Imports": [
|
||||||
|
"htmltools (>= 0.3.6)",
|
||||||
|
"jsonlite",
|
||||||
|
"lazyeval",
|
||||||
|
"R6"
|
||||||
|
],
|
||||||
|
"Suggests": [
|
||||||
|
"bslib",
|
||||||
|
"ggplot2",
|
||||||
|
"sass",
|
||||||
|
"shiny",
|
||||||
|
"testthat (>= 2.1.0)"
|
||||||
|
],
|
||||||
|
"Config/Needs/website": "jcheng5/d3scatter, DT, leaflet, rmarkdown",
|
||||||
|
"Encoding": "UTF-8",
|
||||||
|
"RoxygenNote": "7.3.2",
|
||||||
|
"NeedsCompilation": "no",
|
||||||
|
"Author": "Joe Cheng [aut], Carson Sievert [aut, cre] (ORCID: <https://orcid.org/0000-0002-4958-2844>), Posit Software, PBC [cph, fnd], jQuery Foundation [cph] (jQuery library and jQuery UI library), jQuery contributors [ctb, cph] (jQuery library; authors listed in inst/www/shared/jquery-AUTHORS.txt), Mark Otto [ctb] (Bootstrap library), Jacob Thornton [ctb] (Bootstrap library), Bootstrap contributors [ctb] (Bootstrap library), Twitter, Inc [cph] (Bootstrap library), Brian Reavis [ctb, cph] (selectize.js library), Kristopher Michael Kowal [ctb, cph] (es5-shim library), es5-shim contributors [ctb, cph] (es5-shim library), Denis Ineshin [ctb, cph] (ion.rangeSlider library), Sami Samhuri [ctb, cph] (Javascript strftime library)",
|
||||||
|
"Maintainer": "Carson Sievert <carson@posit.co>",
|
||||||
|
"Repository": "RSPM"
|
||||||
|
},
|
||||||
"curl": {
|
"curl": {
|
||||||
"Package": "curl",
|
"Package": "curl",
|
||||||
"Version": "7.0.0",
|
"Version": "7.0.0",
|
||||||
@@ -1004,6 +1123,42 @@
|
|||||||
"Maintainer": "Hadley Wickham <hadley@posit.co>",
|
"Maintainer": "Hadley Wickham <hadley@posit.co>",
|
||||||
"Repository": "https://packagemanager.posit.co/cran/latest"
|
"Repository": "https://packagemanager.posit.co/cran/latest"
|
||||||
},
|
},
|
||||||
|
"e1071": {
|
||||||
|
"Package": "e1071",
|
||||||
|
"Version": "1.7-17",
|
||||||
|
"Source": "Repository",
|
||||||
|
"Title": "Misc Functions of the Department of Statistics, Probability Theory Group (Formerly: E1071), TU Wien",
|
||||||
|
"Imports": [
|
||||||
|
"graphics",
|
||||||
|
"grDevices",
|
||||||
|
"class",
|
||||||
|
"stats",
|
||||||
|
"methods",
|
||||||
|
"utils",
|
||||||
|
"proxy"
|
||||||
|
],
|
||||||
|
"Suggests": [
|
||||||
|
"cluster",
|
||||||
|
"mlbench",
|
||||||
|
"nnet",
|
||||||
|
"randomForest",
|
||||||
|
"rpart",
|
||||||
|
"SparseM",
|
||||||
|
"xtable",
|
||||||
|
"Matrix",
|
||||||
|
"MASS",
|
||||||
|
"slam"
|
||||||
|
],
|
||||||
|
"Authors@R": "c(person(given = \"David\", family = \"Meyer\", role = c(\"aut\", \"cre\"), email = \"David.Meyer@R-project.org\", comment = c(ORCID = \"0000-0002-5196-3048\")), person(given = \"Evgenia\", family = \"Dimitriadou\", role = c(\"aut\",\"cph\")), person(given = \"Kurt\", family = \"Hornik\", role = \"aut\", email = \"Kurt.Hornik@R-project.org\", comment = c(ORCID = \"0000-0003-4198-9911\")), person(given = \"Andreas\", family = \"Weingessel\", role = \"aut\"), person(given = \"Friedrich\", family = \"Leisch\", role = \"aut\"), person(given = \"Chih-Chung\", family = \"Chang\", role = c(\"ctb\",\"cph\"), comment = \"libsvm C++-code\"), person(given = \"Chih-Chen\", family = \"Lin\", role = c(\"ctb\",\"cph\"), comment = \"libsvm C++-code\"))",
|
||||||
|
"Description": "Functions for latent class analysis, short time Fourier transform, fuzzy clustering, support vector machines, shortest path computation, bagged clustering, naive Bayes classifier, generalized k-nearest neighbour ...",
|
||||||
|
"License": "GPL-2 | GPL-3",
|
||||||
|
"LazyLoad": "yes",
|
||||||
|
"NeedsCompilation": "yes",
|
||||||
|
"Author": "David Meyer [aut, cre] (ORCID: <https://orcid.org/0000-0002-5196-3048>), Evgenia Dimitriadou [aut, cph], Kurt Hornik [aut] (ORCID: <https://orcid.org/0000-0003-4198-9911>), Andreas Weingessel [aut], Friedrich Leisch [aut], Chih-Chung Chang [ctb, cph] (libsvm C++-code), Chih-Chen Lin [ctb, cph] (libsvm C++-code)",
|
||||||
|
"Maintainer": "David Meyer <David.Meyer@R-project.org>",
|
||||||
|
"Repository": "https://packagemanager.posit.co/cran/latest",
|
||||||
|
"Encoding": "UTF-8"
|
||||||
|
},
|
||||||
"evaluate": {
|
"evaluate": {
|
||||||
"Package": "evaluate",
|
"Package": "evaluate",
|
||||||
"Version": "1.0.5",
|
"Version": "1.0.5",
|
||||||
@@ -1499,6 +1654,39 @@
|
|||||||
"Maintainer": "Carson Sievert <carson@posit.co>",
|
"Maintainer": "Carson Sievert <carson@posit.co>",
|
||||||
"Repository": "https://packagemanager.posit.co/cran/latest"
|
"Repository": "https://packagemanager.posit.co/cran/latest"
|
||||||
},
|
},
|
||||||
|
"htmlwidgets": {
|
||||||
|
"Package": "htmlwidgets",
|
||||||
|
"Version": "1.6.4",
|
||||||
|
"Source": "Repository",
|
||||||
|
"Type": "Package",
|
||||||
|
"Title": "HTML Widgets for R",
|
||||||
|
"Authors@R": "c( person(\"Ramnath\", \"Vaidyanathan\", role = c(\"aut\", \"cph\")), person(\"Yihui\", \"Xie\", role = \"aut\"), person(\"JJ\", \"Allaire\", role = \"aut\"), person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Carson\", \"Sievert\", , \"carson@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Kenton\", \"Russell\", role = c(\"aut\", \"cph\")), person(\"Ellis\", \"Hughes\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )",
|
||||||
|
"Description": "A framework for creating HTML widgets that render in various contexts including the R console, 'R Markdown' documents, and 'Shiny' web applications.",
|
||||||
|
"License": "MIT + file LICENSE",
|
||||||
|
"URL": "https://github.com/ramnathv/htmlwidgets",
|
||||||
|
"BugReports": "https://github.com/ramnathv/htmlwidgets/issues",
|
||||||
|
"Imports": [
|
||||||
|
"grDevices",
|
||||||
|
"htmltools (>= 0.5.7)",
|
||||||
|
"jsonlite (>= 0.9.16)",
|
||||||
|
"knitr (>= 1.8)",
|
||||||
|
"rmarkdown",
|
||||||
|
"yaml"
|
||||||
|
],
|
||||||
|
"Suggests": [
|
||||||
|
"testthat"
|
||||||
|
],
|
||||||
|
"Enhances": [
|
||||||
|
"shiny (>= 1.1)"
|
||||||
|
],
|
||||||
|
"VignetteBuilder": "knitr",
|
||||||
|
"Encoding": "UTF-8",
|
||||||
|
"RoxygenNote": "7.2.3",
|
||||||
|
"NeedsCompilation": "no",
|
||||||
|
"Author": "Ramnath Vaidyanathan [aut, cph], Yihui Xie [aut], JJ Allaire [aut], Joe Cheng [aut], Carson Sievert [aut, cre] (<https://orcid.org/0000-0002-4958-2844>), Kenton Russell [aut, cph], Ellis Hughes [ctb], Posit Software, PBC [cph, fnd]",
|
||||||
|
"Maintainer": "Carson Sievert <carson@posit.co>",
|
||||||
|
"Repository": "RSPM"
|
||||||
|
},
|
||||||
"httpuv": {
|
"httpuv": {
|
||||||
"Package": "httpuv",
|
"Package": "httpuv",
|
||||||
"Version": "1.6.16",
|
"Version": "1.6.16",
|
||||||
@@ -1819,6 +2007,159 @@
|
|||||||
"Maintainer": "Charlie Gao <charlie.gao@posit.co>",
|
"Maintainer": "Charlie Gao <charlie.gao@posit.co>",
|
||||||
"Repository": "https://packagemanager.posit.co/cran/latest"
|
"Repository": "https://packagemanager.posit.co/cran/latest"
|
||||||
},
|
},
|
||||||
|
"lattice": {
|
||||||
|
"Package": "lattice",
|
||||||
|
"Version": "0.22-7",
|
||||||
|
"Source": "Repository",
|
||||||
|
"Date": "2025-03-31",
|
||||||
|
"Priority": "recommended",
|
||||||
|
"Title": "Trellis Graphics for R",
|
||||||
|
"Authors@R": "c(person(\"Deepayan\", \"Sarkar\", role = c(\"aut\", \"cre\"), email = \"deepayan.sarkar@r-project.org\", comment = c(ORCID = \"0000-0003-4107-1553\")), person(\"Felix\", \"Andrews\", role = \"ctb\"), person(\"Kevin\", \"Wright\", role = \"ctb\", comment = \"documentation\"), person(\"Neil\", \"Klepeis\", role = \"ctb\"), person(\"Johan\", \"Larsson\", role = \"ctb\", comment = \"miscellaneous improvements\"), person(\"Zhijian (Jason)\", \"Wen\", role = \"cph\", comment = \"filled contour code\"), person(\"Paul\", \"Murrell\", role = \"ctb\", email = \"paul@stat.auckland.ac.nz\"), person(\"Stefan\", \"Eng\", role = \"ctb\", comment = \"violin plot improvements\"), person(\"Achim\", \"Zeileis\", role = \"ctb\", comment = \"modern colors\"), person(\"Alexandre\", \"Courtiol\", role = \"ctb\", comment = \"generics for larrows, lpolygon, lrect and lsegments\") )",
|
||||||
|
"Description": "A powerful and elegant high-level data visualization system inspired by Trellis graphics, with an emphasis on multivariate data. Lattice is sufficient for typical graphics needs, and is also flexible enough to handle most nonstandard requirements. See ?Lattice for an introduction.",
|
||||||
|
"Depends": [
|
||||||
|
"R (>= 4.0.0)"
|
||||||
|
],
|
||||||
|
"Suggests": [
|
||||||
|
"KernSmooth",
|
||||||
|
"MASS",
|
||||||
|
"latticeExtra",
|
||||||
|
"colorspace"
|
||||||
|
],
|
||||||
|
"Imports": [
|
||||||
|
"grid",
|
||||||
|
"grDevices",
|
||||||
|
"graphics",
|
||||||
|
"stats",
|
||||||
|
"utils"
|
||||||
|
],
|
||||||
|
"Enhances": [
|
||||||
|
"chron",
|
||||||
|
"zoo"
|
||||||
|
],
|
||||||
|
"LazyLoad": "yes",
|
||||||
|
"LazyData": "yes",
|
||||||
|
"License": "GPL (>= 2)",
|
||||||
|
"URL": "https://lattice.r-forge.r-project.org/",
|
||||||
|
"BugReports": "https://github.com/deepayan/lattice/issues",
|
||||||
|
"NeedsCompilation": "yes",
|
||||||
|
"Author": "Deepayan Sarkar [aut, cre] (<https://orcid.org/0000-0003-4107-1553>), Felix Andrews [ctb], Kevin Wright [ctb] (documentation), Neil Klepeis [ctb], Johan Larsson [ctb] (miscellaneous improvements), Zhijian (Jason) Wen [cph] (filled contour code), Paul Murrell [ctb], Stefan Eng [ctb] (violin plot improvements), Achim Zeileis [ctb] (modern colors), Alexandre Courtiol [ctb] (generics for larrows, lpolygon, lrect and lsegments)",
|
||||||
|
"Maintainer": "Deepayan Sarkar <deepayan.sarkar@r-project.org>",
|
||||||
|
"Repository": "CRAN"
|
||||||
|
},
|
||||||
|
"lazyeval": {
|
||||||
|
"Package": "lazyeval",
|
||||||
|
"Version": "0.2.2",
|
||||||
|
"Source": "Repository",
|
||||||
|
"Title": "Lazy (Non-Standard) Evaluation",
|
||||||
|
"Description": "An alternative approach to non-standard evaluation using formulas. Provides a full implementation of LISP style 'quasiquotation', making it easier to generate code with other code.",
|
||||||
|
"Authors@R": "c( person(\"Hadley\", \"Wickham\", ,\"hadley@rstudio.com\", c(\"aut\", \"cre\")), person(\"RStudio\", role = \"cph\") )",
|
||||||
|
"License": "GPL-3",
|
||||||
|
"LazyData": "true",
|
||||||
|
"Depends": [
|
||||||
|
"R (>= 3.1.0)"
|
||||||
|
],
|
||||||
|
"Suggests": [
|
||||||
|
"knitr",
|
||||||
|
"rmarkdown (>= 0.2.65)",
|
||||||
|
"testthat",
|
||||||
|
"covr"
|
||||||
|
],
|
||||||
|
"VignetteBuilder": "knitr",
|
||||||
|
"RoxygenNote": "6.1.1",
|
||||||
|
"NeedsCompilation": "yes",
|
||||||
|
"Author": "Hadley Wickham [aut, cre], RStudio [cph]",
|
||||||
|
"Maintainer": "Hadley Wickham <hadley@rstudio.com>",
|
||||||
|
"Repository": "RSPM",
|
||||||
|
"Encoding": "UTF-8"
|
||||||
|
},
|
||||||
|
"leaflet": {
|
||||||
|
"Package": "leaflet",
|
||||||
|
"Version": "2.2.3",
|
||||||
|
"Source": "Repository",
|
||||||
|
"Type": "Package",
|
||||||
|
"Title": "Create Interactive Web Maps with the JavaScript 'Leaflet' Library",
|
||||||
|
"Authors@R": "c( person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Barret\", \"Schloerke\", , \"barret@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0001-9986-114X\")), person(\"Bhaskar\", \"Karambelkar\", role = \"aut\"), person(\"Yihui\", \"Xie\", role = \"aut\"), person(\"Garrick\", \"Aden-Buie\", , \"garrick@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-7111-0077\")), person(\"Hadley\", \"Wickham\", role = \"ctb\"), person(\"Kenton\", \"Russell\", role = \"ctb\"), person(\"Kent\", \"Johnson\", role = \"ctb\"), person(\"Vladimir\", \"Agafonkin\", role = c(\"ctb\", \"cph\"), comment = \"Leaflet library\"), person(\"CloudMade\", role = \"cph\", comment = \"Leaflet library\"), person(\"Leaflet contributors\", role = \"ctb\", comment = \"Leaflet library\"), person(\"Brandon Copeland\", role = c(\"ctb\", \"cph\"), comment = \"leaflet-measure plugin\"), person(\"Joerg Dietrich\", role = c(\"ctb\", \"cph\"), comment = \"Leaflet.Terminator plugin\"), person(\"Benjamin Becquet\", role = c(\"ctb\", \"cph\"), comment = \"Leaflet.MagnifyingGlass plugin\"), person(\"Norkart AS\", role = c(\"ctb\", \"cph\"), comment = \"Leaflet.MiniMap plugin\"), person(\"L. Voogdt\", role = c(\"ctb\", \"cph\"), comment = \"Leaflet.awesome-markers plugin\"), person(\"Daniel Montague\", role = c(\"ctb\", \"cph\"), comment = \"Leaflet.EasyButton plugin\"), person(\"Kartena AB\", role = c(\"ctb\", \"cph\"), comment = \"Proj4Leaflet plugin\"), person(\"Robert Kajic\", role = c(\"ctb\", \"cph\"), comment = \"leaflet-locationfilter plugin\"), person(\"Mapbox\", role = c(\"ctb\", \"cph\"), comment = \"leaflet-omnivore plugin\"), person(\"Michael Bostock\", role = c(\"ctb\", \"cph\"), comment = \"topojson\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )",
|
||||||
|
"Description": "Create and customize interactive maps using the 'Leaflet' JavaScript library and the 'htmlwidgets' package. These maps can be used directly from the R console, from 'RStudio', in Shiny applications and R Markdown documents.",
|
||||||
|
"License": "MIT + file LICENSE",
|
||||||
|
"URL": "https://rstudio.github.io/leaflet/, https://github.com/rstudio/leaflet",
|
||||||
|
"BugReports": "https://github.com/rstudio/leaflet/issues",
|
||||||
|
"Depends": [
|
||||||
|
"R (>= 3.5)"
|
||||||
|
],
|
||||||
|
"Imports": [
|
||||||
|
"crosstalk",
|
||||||
|
"htmltools",
|
||||||
|
"htmlwidgets (>= 1.5.4)",
|
||||||
|
"jquerylib",
|
||||||
|
"leaflet.providers (>= 2.0.0)",
|
||||||
|
"magrittr",
|
||||||
|
"methods",
|
||||||
|
"png",
|
||||||
|
"raster (>= 3.6.3)",
|
||||||
|
"RColorBrewer",
|
||||||
|
"rlang",
|
||||||
|
"scales (>= 1.0.0)",
|
||||||
|
"sf (>= 0.9-6)",
|
||||||
|
"stats",
|
||||||
|
"viridisLite",
|
||||||
|
"xfun"
|
||||||
|
],
|
||||||
|
"Suggests": [
|
||||||
|
"knitr",
|
||||||
|
"maps",
|
||||||
|
"purrr",
|
||||||
|
"R6",
|
||||||
|
"RJSONIO",
|
||||||
|
"rmarkdown",
|
||||||
|
"s2",
|
||||||
|
"shiny (>= 1.0.0)",
|
||||||
|
"sp",
|
||||||
|
"terra",
|
||||||
|
"testthat (>= 3.0.0)"
|
||||||
|
],
|
||||||
|
"Config/Needs/website": "dplyr, ncdf4, rnaturalearth, tidyverse/tidytemplate",
|
||||||
|
"Config/testthat/edition": "3",
|
||||||
|
"Encoding": "UTF-8",
|
||||||
|
"LazyData": "true",
|
||||||
|
"RoxygenNote": "7.3.2",
|
||||||
|
"NeedsCompilation": "no",
|
||||||
|
"Author": "Joe Cheng [aut], Barret Schloerke [aut] (ORCID: <https://orcid.org/0000-0001-9986-114X>), Bhaskar Karambelkar [aut], Yihui Xie [aut], Garrick Aden-Buie [aut, cre] (ORCID: <https://orcid.org/0000-0002-7111-0077>), Hadley Wickham [ctb], Kenton Russell [ctb], Kent Johnson [ctb], Vladimir Agafonkin [ctb, cph] (Leaflet library), CloudMade [cph] (Leaflet library), Leaflet contributors [ctb] (Leaflet library), Brandon Copeland [ctb, cph] (leaflet-measure plugin), Joerg Dietrich [ctb, cph] (Leaflet.Terminator plugin), Benjamin Becquet [ctb, cph] (Leaflet.MagnifyingGlass plugin), Norkart AS [ctb, cph] (Leaflet.MiniMap plugin), L. Voogdt [ctb, cph] (Leaflet.awesome-markers plugin), Daniel Montague [ctb, cph] (Leaflet.EasyButton plugin), Kartena AB [ctb, cph] (Proj4Leaflet plugin), Robert Kajic [ctb, cph] (leaflet-locationfilter plugin), Mapbox [ctb, cph] (leaflet-omnivore plugin), Michael Bostock [ctb, cph] (topojson), Posit Software, PBC [cph, fnd]",
|
||||||
|
"Maintainer": "Garrick Aden-Buie <garrick@posit.co>",
|
||||||
|
"Repository": "RSPM"
|
||||||
|
},
|
||||||
|
"leaflet.providers": {
|
||||||
|
"Package": "leaflet.providers",
|
||||||
|
"Version": "2.0.0",
|
||||||
|
"Source": "Repository",
|
||||||
|
"Type": "Package",
|
||||||
|
"Title": "Leaflet Providers",
|
||||||
|
"Authors@R": "c( person(\"Leslie\", \"Huang\", , \"lesliehuang@nyu.edu\", role = \"aut\"), person(\"Barret\", \"Schloerke\", , \"barret@posit.co\", role = c(\"ctb\", \"cre\"), comment = c(ORCID = \"0000-0001-9986-114X\")), person(\"Leaflet Providers contributors\", role = c(\"ctb\", \"cph\"), comment = \"Leaflet Providers plugin\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )",
|
||||||
|
"Description": "Contains third-party map tile provider information from 'Leaflet.js', <https://github.com/leaflet-extras/leaflet-providers>, to be used with the 'leaflet' R package. Additionally, 'leaflet.providers' enables users to retrieve up-to-date provider information between package updates.",
|
||||||
|
"License": "BSD_2_clause + file LICENSE",
|
||||||
|
"URL": "https://rstudio.github.io/leaflet.providers/, https://github.com/rstudio/leaflet.providers",
|
||||||
|
"BugReports": "https://github.com/rstudio/leaflet.providers/issues",
|
||||||
|
"Depends": [
|
||||||
|
"R (>= 2.10)"
|
||||||
|
],
|
||||||
|
"Imports": [
|
||||||
|
"htmltools"
|
||||||
|
],
|
||||||
|
"Suggests": [
|
||||||
|
"jsonlite",
|
||||||
|
"testthat (>= 3.0.0)",
|
||||||
|
"V8"
|
||||||
|
],
|
||||||
|
"Config/Needs/website": "tidyverse/tidytemplate",
|
||||||
|
"Config/testthat/edition": "3",
|
||||||
|
"Encoding": "UTF-8",
|
||||||
|
"Language": "en-US",
|
||||||
|
"RoxygenNote": "7.2.3",
|
||||||
|
"Collate": "'providers_data.R' 'get_current_providers.R' 'leaflet.providers-package.R' 'zzz.R'",
|
||||||
|
"NeedsCompilation": "no",
|
||||||
|
"Author": "Leslie Huang [aut], Barret Schloerke [ctb, cre] (<https://orcid.org/0000-0001-9986-114X>), Leaflet Providers contributors [ctb, cph] (Leaflet Providers plugin), Posit Software, PBC [cph, fnd]",
|
||||||
|
"Maintainer": "Barret Schloerke <barret@posit.co>",
|
||||||
|
"Repository": "RSPM"
|
||||||
|
},
|
||||||
"lifecycle": {
|
"lifecycle": {
|
||||||
"Package": "lifecycle",
|
"Package": "lifecycle",
|
||||||
"Version": "1.0.4",
|
"Version": "1.0.4",
|
||||||
@@ -2420,6 +2761,32 @@
|
|||||||
"Maintainer": "Barret Schloerke <barret@posit.co>",
|
"Maintainer": "Barret Schloerke <barret@posit.co>",
|
||||||
"Repository": "https://packagemanager.posit.co/cran/latest"
|
"Repository": "https://packagemanager.posit.co/cran/latest"
|
||||||
},
|
},
|
||||||
|
"proxy": {
|
||||||
|
"Package": "proxy",
|
||||||
|
"Version": "0.4-29",
|
||||||
|
"Source": "Repository",
|
||||||
|
"Type": "Package",
|
||||||
|
"Title": "Distance and Similarity Measures",
|
||||||
|
"Authors@R": "c(person(given = \"David\", family = \"Meyer\", role = c(\"aut\", \"cre\"), email = \"David.Meyer@R-project.org\", comment = c(ORCID = \"0000-0002-5196-3048\")),\t person(given = \"Christian\", family = \"Buchta\", role = \"aut\"))",
|
||||||
|
"Description": "Provides an extensible framework for the efficient calculation of auto- and cross-proximities, along with implementations of the most popular ones.",
|
||||||
|
"Depends": [
|
||||||
|
"R (>= 3.4.0)"
|
||||||
|
],
|
||||||
|
"Imports": [
|
||||||
|
"stats",
|
||||||
|
"utils"
|
||||||
|
],
|
||||||
|
"Suggests": [
|
||||||
|
"cba"
|
||||||
|
],
|
||||||
|
"Collate": "registry.R database.R dist.R similarities.R dissimilarities.R util.R seal.R",
|
||||||
|
"License": "GPL-2 | GPL-3",
|
||||||
|
"NeedsCompilation": "yes",
|
||||||
|
"Author": "David Meyer [aut, cre] (ORCID: <https://orcid.org/0000-0002-5196-3048>), Christian Buchta [aut]",
|
||||||
|
"Maintainer": "David Meyer <David.Meyer@R-project.org>",
|
||||||
|
"Repository": "https://packagemanager.posit.co/cran/latest",
|
||||||
|
"Encoding": "UTF-8"
|
||||||
|
},
|
||||||
"purrr": {
|
"purrr": {
|
||||||
"Package": "purrr",
|
"Package": "purrr",
|
||||||
"Version": "1.2.0",
|
"Version": "1.2.0",
|
||||||
@@ -2498,6 +2865,49 @@
|
|||||||
"Maintainer": "Hadley Wickham <hadley@rstudio.com>",
|
"Maintainer": "Hadley Wickham <hadley@rstudio.com>",
|
||||||
"Repository": "https://packagemanager.posit.co/cran/latest"
|
"Repository": "https://packagemanager.posit.co/cran/latest"
|
||||||
},
|
},
|
||||||
|
"raster": {
|
||||||
|
"Package": "raster",
|
||||||
|
"Version": "3.6-32",
|
||||||
|
"Source": "Repository",
|
||||||
|
"Type": "Package",
|
||||||
|
"Title": "Geographic Data Analysis and Modeling",
|
||||||
|
"Date": "2025-03-27",
|
||||||
|
"Imports": [
|
||||||
|
"Rcpp",
|
||||||
|
"methods",
|
||||||
|
"terra (>= 1.8-5)"
|
||||||
|
],
|
||||||
|
"LinkingTo": [
|
||||||
|
"Rcpp"
|
||||||
|
],
|
||||||
|
"Depends": [
|
||||||
|
"sp (>= 1.4-5)",
|
||||||
|
"R (>= 3.5.0)"
|
||||||
|
],
|
||||||
|
"Suggests": [
|
||||||
|
"ncdf4",
|
||||||
|
"igraph",
|
||||||
|
"tcltk",
|
||||||
|
"parallel",
|
||||||
|
"rasterVis",
|
||||||
|
"MASS",
|
||||||
|
"sf",
|
||||||
|
"tinytest",
|
||||||
|
"gstat",
|
||||||
|
"fields",
|
||||||
|
"exactextractr"
|
||||||
|
],
|
||||||
|
"Description": "Reading, writing, manipulating, analyzing and modeling of spatial data. This package has been superseded by the \"terra\" package <https://CRAN.R-project.org/package=terra>.",
|
||||||
|
"License": "GPL (>= 3)",
|
||||||
|
"URL": "https://rspatial.org/raster",
|
||||||
|
"BugReports": "https://github.com/rspatial/raster/issues/",
|
||||||
|
"Authors@R": "c( person(\"Robert J.\", \"Hijmans\", role = c(\"cre\", \"aut\"), email = \"r.hijmans@gmail.com\", comment = c(ORCID = \"0000-0001-5872-2872\")), person(\"Jacob\", \"van Etten\", role = \"ctb\"), person(\"Michael\", \"Sumner\", role = \"ctb\"), person(\"Joe\", \"Cheng\", role = \"ctb\"), person(\"Dan\", \"Baston\", role = \"ctb\"), person(\"Andrew\", \"Bevan\", role = \"ctb\"), person(\"Roger\", \"Bivand\", role = \"ctb\"), person(\"Lorenzo\", \"Busetto\", role = \"ctb\"), person(\"Mort\", \"Canty\", role = \"ctb\"), person(\"Ben\", \"Fasoli\", role = \"ctb\"), person(\"David\", \"Forrest\", role = \"ctb\"), person(\"Aniruddha\", \"Ghosh\", role = \"ctb\"), person(\"Duncan\", \"Golicher\", role = \"ctb\"), person(\"Josh\", \"Gray\", role = \"ctb\"), person(\"Jonathan A.\", \"Greenberg\", role = \"ctb\"), person(\"Paul\", \"Hiemstra\", role = \"ctb\"), person(\"Kassel\", \"Hingee\", role = \"ctb\"), person(\"Alex\", \"Ilich\", role = \"ctb\"), person(\"Institute for Mathematics Applied Geosciences\", role=\"cph\"), person(\"Charles\", \"Karney\", role = \"ctb\"), person(\"Matteo\", \"Mattiuzzi\", role = \"ctb\"), person(\"Steven\", \"Mosher\", role = \"ctb\"), person(\"Babak\", \"Naimi\", role = \"ctb\"),\t person(\"Jakub\", \"Nowosad\", role = \"ctb\"), person(\"Edzer\", \"Pebesma\", role = \"ctb\"), person(\"Oscar\", \"Perpinan Lamigueiro\", role = \"ctb\"), person(\"Etienne B.\", \"Racine\", role = \"ctb\"), person(\"Barry\", \"Rowlingson\", role = \"ctb\"), person(\"Ashton\", \"Shortridge\", role = \"ctb\"), person(\"Bill\", \"Venables\", role = \"ctb\"), person(\"Rafael\", \"Wueest\", role = \"ctb\") )",
|
||||||
|
"NeedsCompilation": "yes",
|
||||||
|
"Author": "Robert J. Hijmans [cre, aut] (<https://orcid.org/0000-0001-5872-2872>), Jacob van Etten [ctb], Michael Sumner [ctb], Joe Cheng [ctb], Dan Baston [ctb], Andrew Bevan [ctb], Roger Bivand [ctb], Lorenzo Busetto [ctb], Mort Canty [ctb], Ben Fasoli [ctb], David Forrest [ctb], Aniruddha Ghosh [ctb], Duncan Golicher [ctb], Josh Gray [ctb], Jonathan A. Greenberg [ctb], Paul Hiemstra [ctb], Kassel Hingee [ctb], Alex Ilich [ctb], Institute for Mathematics Applied Geosciences [cph], Charles Karney [ctb], Matteo Mattiuzzi [ctb], Steven Mosher [ctb], Babak Naimi [ctb], Jakub Nowosad [ctb], Edzer Pebesma [ctb], Oscar Perpinan Lamigueiro [ctb], Etienne B. Racine [ctb], Barry Rowlingson [ctb], Ashton Shortridge [ctb], Bill Venables [ctb], Rafael Wueest [ctb]",
|
||||||
|
"Maintainer": "Robert J. Hijmans <r.hijmans@gmail.com>",
|
||||||
|
"Repository": "RSPM",
|
||||||
|
"Encoding": "UTF-8"
|
||||||
|
},
|
||||||
"readr": {
|
"readr": {
|
||||||
"Package": "readr",
|
"Package": "readr",
|
||||||
"Version": "2.1.6",
|
"Version": "2.1.6",
|
||||||
@@ -2715,6 +3125,42 @@
|
|||||||
"Maintainer": "Yihui Xie <xie@yihui.name>",
|
"Maintainer": "Yihui Xie <xie@yihui.name>",
|
||||||
"Repository": "https://packagemanager.posit.co/cran/latest"
|
"Repository": "https://packagemanager.posit.co/cran/latest"
|
||||||
},
|
},
|
||||||
|
"s2": {
|
||||||
|
"Package": "s2",
|
||||||
|
"Version": "1.1.9",
|
||||||
|
"Source": "Repository",
|
||||||
|
"Title": "Spherical Geometry Operators Using the S2 Geometry Library",
|
||||||
|
"Authors@R": "c( person(given = \"Dewey\", family = \"Dunnington\", role = c(\"aut\"), email = \"dewey@fishandwhistle.net\", comment = c(ORCID = \"0000-0002-9415-4582\")), person(given = \"Edzer\", family = \"Pebesma\", role = c(\"aut\", \"cre\"), email = \"edzer.pebesma@uni-muenster.de\", comment = c(ORCID = \"0000-0001-8049-7069\")), person(\"Ege\", \"Rubak\", email=\"rubak@math.aau.dk\", role = c(\"aut\")), person(\"Jeroen\", \"Ooms\", , \"jeroen.ooms@stat.ucla.edu\", role = \"ctb\", comment = \"configure script\"), person(family = \"Google, Inc.\", role = \"cph\", comment = \"Original s2geometry.io source code\") )",
|
||||||
|
"Description": "Provides R bindings for Google's s2 library for geometric calculations on the sphere. High-performance constructors and exporters provide high compatibility with existing spatial packages, transformers construct new geometries from existing geometries, predicates provide a means to select geometries based on spatial relationships, and accessors extract information about geometries.",
|
||||||
|
"License": "Apache License (== 2.0)",
|
||||||
|
"Encoding": "UTF-8",
|
||||||
|
"LazyData": "true",
|
||||||
|
"RoxygenNote": "7.3.2",
|
||||||
|
"SystemRequirements": "cmake, OpenSSL >= 1.0.1, Abseil >= 20230802.0",
|
||||||
|
"LinkingTo": [
|
||||||
|
"Rcpp",
|
||||||
|
"wk"
|
||||||
|
],
|
||||||
|
"Imports": [
|
||||||
|
"Rcpp",
|
||||||
|
"wk (>= 0.6.0)"
|
||||||
|
],
|
||||||
|
"Suggests": [
|
||||||
|
"bit64",
|
||||||
|
"testthat (>= 3.0.0)",
|
||||||
|
"vctrs"
|
||||||
|
],
|
||||||
|
"URL": "https://r-spatial.github.io/s2/, https://github.com/r-spatial/s2, http://s2geometry.io/",
|
||||||
|
"BugReports": "https://github.com/r-spatial/s2/issues",
|
||||||
|
"Depends": [
|
||||||
|
"R (>= 3.0.0)"
|
||||||
|
],
|
||||||
|
"Config/testthat/edition": "3",
|
||||||
|
"NeedsCompilation": "yes",
|
||||||
|
"Author": "Dewey Dunnington [aut] (ORCID: <https://orcid.org/0000-0002-9415-4582>), Edzer Pebesma [aut, cre] (ORCID: <https://orcid.org/0000-0001-8049-7069>), Ege Rubak [aut], Jeroen Ooms [ctb] (configure script), Google, Inc. [cph] (Original s2geometry.io source code)",
|
||||||
|
"Maintainer": "Edzer Pebesma <edzer.pebesma@uni-muenster.de>",
|
||||||
|
"Repository": "https://packagemanager.posit.co/cran/latest"
|
||||||
|
},
|
||||||
"sass": {
|
"sass": {
|
||||||
"Package": "sass",
|
"Package": "sass",
|
||||||
"Version": "0.4.10",
|
"Version": "0.4.10",
|
||||||
@@ -2795,6 +3241,86 @@
|
|||||||
"Maintainer": "Thomas Lin Pedersen <thomas.pedersen@posit.co>",
|
"Maintainer": "Thomas Lin Pedersen <thomas.pedersen@posit.co>",
|
||||||
"Repository": "https://packagemanager.posit.co/cran/latest"
|
"Repository": "https://packagemanager.posit.co/cran/latest"
|
||||||
},
|
},
|
||||||
|
"sf": {
|
||||||
|
"Package": "sf",
|
||||||
|
"Version": "1.0-24",
|
||||||
|
"Source": "Repository",
|
||||||
|
"Title": "Simple Features for R",
|
||||||
|
"Authors@R": "c(person(given = \"Edzer\", family = \"Pebesma\", role = c(\"aut\", \"cre\"), email = \"edzer.pebesma@uni-muenster.de\", comment = c(ORCID = \"0000-0001-8049-7069\")), person(given = \"Roger\", family = \"Bivand\", role = \"ctb\", comment = c(ORCID = \"0000-0003-2392-6140\")), person(given = \"Etienne\", family = \"Racine\", role = \"ctb\"), person(given = \"Michael\", family = \"Sumner\", role = \"ctb\"), person(given = \"Ian\", family = \"Cook\", role = \"ctb\"), person(given = \"Tim\", family = \"Keitt\", role = \"ctb\"), person(given = \"Robin\", family = \"Lovelace\", role = \"ctb\"), person(given = \"Hadley\", family = \"Wickham\", role = \"ctb\"), person(given = \"Jeroen\", family = \"Ooms\", role = \"ctb\", comment = c(ORCID = \"0000-0002-4035-0289\")), person(given = \"Kirill\", family = \"M\\u00fcller\", role = \"ctb\"), person(given = \"Thomas Lin\", family = \"Pedersen\", role = \"ctb\"), person(given = \"Dan\", family = \"Baston\", role = \"ctb\"), person(given = \"Dewey\", family = \"Dunnington\", role = \"ctb\", comment = c(ORCID = \"0000-0002-9415-4582\")) )",
|
||||||
|
"Description": "Support for simple feature access, a standardized way to encode and analyze spatial vector data. Binds to 'GDAL' <doi:10.5281/zenodo.5884351> for reading and writing data, to 'GEOS' <doi:10.5281/zenodo.11396894> for geometrical operations, and to 'PROJ' <doi:10.5281/zenodo.5884394> for projection conversions and datum transformations. Uses by default the 's2' package for geometry operations on geodetic (long/lat degree) coordinates.",
|
||||||
|
"License": "GPL-2 | MIT + file LICENSE",
|
||||||
|
"URL": "https://r-spatial.github.io/sf/, https://github.com/r-spatial/sf",
|
||||||
|
"BugReports": "https://github.com/r-spatial/sf/issues",
|
||||||
|
"Depends": [
|
||||||
|
"methods",
|
||||||
|
"R (>= 3.3.0)"
|
||||||
|
],
|
||||||
|
"Imports": [
|
||||||
|
"classInt (>= 0.4-1)",
|
||||||
|
"DBI (>= 0.8)",
|
||||||
|
"graphics",
|
||||||
|
"grDevices",
|
||||||
|
"grid",
|
||||||
|
"magrittr",
|
||||||
|
"s2 (>= 1.1.0)",
|
||||||
|
"stats",
|
||||||
|
"tools",
|
||||||
|
"units (>= 0.7-0)",
|
||||||
|
"utils"
|
||||||
|
],
|
||||||
|
"Suggests": [
|
||||||
|
"blob",
|
||||||
|
"nanoarrow",
|
||||||
|
"covr",
|
||||||
|
"dplyr (>= 1.0.0)",
|
||||||
|
"ggplot2",
|
||||||
|
"knitr",
|
||||||
|
"lwgeom (>= 0.2-14)",
|
||||||
|
"maps",
|
||||||
|
"mapview",
|
||||||
|
"Matrix",
|
||||||
|
"microbenchmark",
|
||||||
|
"odbc",
|
||||||
|
"pbapply",
|
||||||
|
"pillar",
|
||||||
|
"pool",
|
||||||
|
"raster",
|
||||||
|
"rlang",
|
||||||
|
"rmarkdown",
|
||||||
|
"RPostgres (>= 1.1.0)",
|
||||||
|
"RPostgreSQL",
|
||||||
|
"RSQLite",
|
||||||
|
"sp (>= 1.2-4)",
|
||||||
|
"spatstat (>= 2.0-1)",
|
||||||
|
"spatstat.geom",
|
||||||
|
"spatstat.random",
|
||||||
|
"spatstat.linnet",
|
||||||
|
"spatstat.utils",
|
||||||
|
"stars (>= 0.6-0)",
|
||||||
|
"terra",
|
||||||
|
"testthat (>= 3.0.0)",
|
||||||
|
"tibble (>= 1.4.1)",
|
||||||
|
"tidyr (>= 1.2.0)",
|
||||||
|
"tidyselect (>= 1.0.0)",
|
||||||
|
"tmap (>= 2.0)",
|
||||||
|
"vctrs",
|
||||||
|
"wk (>= 0.9.0)"
|
||||||
|
],
|
||||||
|
"LinkingTo": [
|
||||||
|
"Rcpp"
|
||||||
|
],
|
||||||
|
"VignetteBuilder": "knitr",
|
||||||
|
"Encoding": "UTF-8",
|
||||||
|
"RoxygenNote": "7.3.3",
|
||||||
|
"Config/testthat/edition": "2",
|
||||||
|
"Config/needs/coverage": "XML",
|
||||||
|
"SystemRequirements": "GDAL (>= 2.0.1), GEOS (>= 3.4.0), PROJ (>= 4.8.0), sqlite3",
|
||||||
|
"Collate": "'RcppExports.R' 'init.R' 'import-standalone-s3-register.R' 'crs.R' 'bbox.R' 'read.R' 'db.R' 'sfc.R' 'sfg.R' 'sf.R' 'bind.R' 'wkb.R' 'wkt.R' 'plot.R' 'geom-measures.R' 'geom-predicates.R' 'geom-transformers.R' 'transform.R' 'proj.R' 'sp.R' 'grid.R' 'arith.R' 'tidyverse.R' 'tidyverse-vctrs.R' 'cast_sfg.R' 'cast_sfc.R' 'graticule.R' 'datasets.R' 'aggregate.R' 'agr.R' 'maps.R' 'join.R' 'sample.R' 'valid.R' 'collection_extract.R' 'jitter.R' 'sgbp.R' 'spatstat.R' 'stars.R' 'crop.R' 'gdal_utils.R' 'nearest.R' 'normalize.R' 'sf-package.R' 'defunct.R' 'z_range.R' 'm_range.R' 'shift_longitude.R' 'make_grid.R' 's2.R' 'terra.R' 'geos-overlayng.R' 'break_antimeridian.R'",
|
||||||
|
"NeedsCompilation": "yes",
|
||||||
|
"Author": "Edzer Pebesma [aut, cre] (ORCID: <https://orcid.org/0000-0001-8049-7069>), Roger Bivand [ctb] (ORCID: <https://orcid.org/0000-0003-2392-6140>), Etienne Racine [ctb], Michael Sumner [ctb], Ian Cook [ctb], Tim Keitt [ctb], Robin Lovelace [ctb], Hadley Wickham [ctb], Jeroen Ooms [ctb] (ORCID: <https://orcid.org/0000-0002-4035-0289>), Kirill Müller [ctb], Thomas Lin Pedersen [ctb], Dan Baston [ctb], Dewey Dunnington [ctb] (ORCID: <https://orcid.org/0000-0002-9415-4582>)",
|
||||||
|
"Maintainer": "Edzer Pebesma <edzer.pebesma@uni-muenster.de>",
|
||||||
|
"Repository": "CRAN"
|
||||||
|
},
|
||||||
"shiny": {
|
"shiny": {
|
||||||
"Package": "shiny",
|
"Package": "shiny",
|
||||||
"Version": "1.12.1",
|
"Version": "1.12.1",
|
||||||
@@ -2920,6 +3446,48 @@
|
|||||||
"NeedsCompilation": "yes",
|
"NeedsCompilation": "yes",
|
||||||
"Repository": "https://packagemanager.posit.co/cran/latest"
|
"Repository": "https://packagemanager.posit.co/cran/latest"
|
||||||
},
|
},
|
||||||
|
"sp": {
|
||||||
|
"Package": "sp",
|
||||||
|
"Version": "2.2-0",
|
||||||
|
"Source": "Repository",
|
||||||
|
"Title": "Classes and Methods for Spatial Data",
|
||||||
|
"Authors@R": "c(person(\"Edzer\", \"Pebesma\", role = c(\"aut\", \"cre\"), email = \"edzer.pebesma@uni-muenster.de\"), person(\"Roger\", \"Bivand\", role = \"aut\", email = \"Roger.Bivand@nhh.no\"), person(\"Barry\", \"Rowlingson\", role = \"ctb\"), person(\"Virgilio\", \"Gomez-Rubio\", role = \"ctb\"), person(\"Robert\", \"Hijmans\", role = \"ctb\"), person(\"Michael\", \"Sumner\", role = \"ctb\"), person(\"Don\", \"MacQueen\", role = \"ctb\"), person(\"Jim\", \"Lemon\", role = \"ctb\"), person(\"Finn\", \"Lindgren\", role = \"ctb\"), person(\"Josh\", \"O'Brien\", role = \"ctb\"), person(\"Joseph\", \"O'Rourke\", role = \"ctb\"), person(\"Patrick\", \"Hausmann\", role = \"ctb\"))",
|
||||||
|
"Depends": [
|
||||||
|
"R (>= 3.5.0)",
|
||||||
|
"methods"
|
||||||
|
],
|
||||||
|
"Imports": [
|
||||||
|
"utils",
|
||||||
|
"stats",
|
||||||
|
"graphics",
|
||||||
|
"grDevices",
|
||||||
|
"lattice",
|
||||||
|
"grid"
|
||||||
|
],
|
||||||
|
"Suggests": [
|
||||||
|
"RColorBrewer",
|
||||||
|
"gstat",
|
||||||
|
"deldir",
|
||||||
|
"knitr",
|
||||||
|
"maps",
|
||||||
|
"mapview",
|
||||||
|
"rmarkdown",
|
||||||
|
"sf",
|
||||||
|
"terra",
|
||||||
|
"raster"
|
||||||
|
],
|
||||||
|
"Description": "Classes and methods for spatial data; the classes document where the spatial location information resides, for 2D or 3D data. Utility functions are provided, e.g. for plotting data as maps, spatial selection, as well as methods for retrieving coordinates, for subsetting, print, summary, etc. From this version, 'rgdal', 'maptools', and 'rgeos' are no longer used at all, see <https://r-spatial.org/r/2023/05/15/evolution4.html> for details.",
|
||||||
|
"License": "GPL (>= 2)",
|
||||||
|
"URL": "https://github.com/edzer/sp/ https://edzer.github.io/sp/",
|
||||||
|
"BugReports": "https://github.com/edzer/sp/issues",
|
||||||
|
"Collate": "bpy.colors.R AAA.R Class-CRS.R CRS-methods.R Class-Spatial.R Spatial-methods.R projected.R Class-SpatialPoints.R SpatialPoints-methods.R Class-SpatialPointsDataFrame.R SpatialPointsDataFrame-methods.R Class-SpatialMultiPoints.R SpatialMultiPoints-methods.R Class-SpatialMultiPointsDataFrame.R SpatialMultiPointsDataFrame-methods.R Class-GridTopology.R Class-SpatialGrid.R Class-SpatialGridDataFrame.R Class-SpatialLines.R SpatialLines-methods.R Class-SpatialLinesDataFrame.R SpatialLinesDataFrame-methods.R Class-SpatialPolygons.R Class-SpatialPolygonsDataFrame.R SpatialPolygons-methods.R SpatialPolygonsDataFrame-methods.R GridTopology-methods.R SpatialGrid-methods.R SpatialGridDataFrame-methods.R SpatialPolygons-internals.R point.in.polygon.R SpatialPolygons-displayMethods.R zerodist.R image.R stack.R bubble.R mapasp.R select.spatial.R gridded.R asciigrid.R spplot.R over.R spsample.R recenter.R dms.R gridlines.R spdists.R rbind.R flipSGDF.R chfids.R loadmeuse.R compassRose.R surfaceArea.R spOptions.R subset.R disaggregate.R sp_spat1.R merge.R aggregate.R elide.R sp2Mondrian.R",
|
||||||
|
"VignetteBuilder": "knitr",
|
||||||
|
"NeedsCompilation": "yes",
|
||||||
|
"Author": "Edzer Pebesma [aut, cre], Roger Bivand [aut], Barry Rowlingson [ctb], Virgilio Gomez-Rubio [ctb], Robert Hijmans [ctb], Michael Sumner [ctb], Don MacQueen [ctb], Jim Lemon [ctb], Finn Lindgren [ctb], Josh O'Brien [ctb], Joseph O'Rourke [ctb], Patrick Hausmann [ctb]",
|
||||||
|
"Maintainer": "Edzer Pebesma <edzer.pebesma@uni-muenster.de>",
|
||||||
|
"Repository": "https://packagemanager.posit.co/cran/latest",
|
||||||
|
"Encoding": "UTF-8"
|
||||||
|
},
|
||||||
"ssh": {
|
"ssh": {
|
||||||
"Package": "ssh",
|
"Package": "ssh",
|
||||||
"Version": "0.9.4",
|
"Version": "0.9.4",
|
||||||
@@ -3080,6 +3648,47 @@
|
|||||||
"Maintainer": "Jeroen Ooms <jeroenooms@gmail.com>",
|
"Maintainer": "Jeroen Ooms <jeroenooms@gmail.com>",
|
||||||
"Repository": "https://packagemanager.posit.co/cran/latest"
|
"Repository": "https://packagemanager.posit.co/cran/latest"
|
||||||
},
|
},
|
||||||
|
"terra": {
|
||||||
|
"Package": "terra",
|
||||||
|
"Version": "1.8-93",
|
||||||
|
"Source": "Repository",
|
||||||
|
"Type": "Package",
|
||||||
|
"Title": "Spatial Data Analysis",
|
||||||
|
"Date": "2026-01-11",
|
||||||
|
"Depends": [
|
||||||
|
"R (>= 3.5.0)",
|
||||||
|
"methods"
|
||||||
|
],
|
||||||
|
"Suggests": [
|
||||||
|
"parallel",
|
||||||
|
"tinytest",
|
||||||
|
"ncdf4",
|
||||||
|
"sf (>= 0.9-8)",
|
||||||
|
"deldir",
|
||||||
|
"XML",
|
||||||
|
"leaflet (>= 2.2.1)",
|
||||||
|
"htmlwidgets"
|
||||||
|
],
|
||||||
|
"LinkingTo": [
|
||||||
|
"Rcpp"
|
||||||
|
],
|
||||||
|
"Imports": [
|
||||||
|
"Rcpp (>= 1.0-10)"
|
||||||
|
],
|
||||||
|
"SystemRequirements": "C++17, GDAL (>= 2.2.3), GEOS (>= 3.4.0), PROJ (>= 4.9.3), TBB, sqlite3",
|
||||||
|
"Encoding": "UTF-8",
|
||||||
|
"Language": "en-US",
|
||||||
|
"Maintainer": "Robert J. Hijmans <r.hijmans@gmail.com>",
|
||||||
|
"Description": "Methods for spatial data analysis with vector (points, lines, polygons) and raster (grid) data. Methods for vector data include geometric operations such as intersect and buffer. Raster methods include local, focal, global, zonal and geometric operations. The predict and interpolate methods facilitate the use of regression type (interpolation, machine learning) models for spatial prediction, including with satellite remote sensing data. Processing of very large files is supported. See the manual and tutorials on <https://rspatial.org/> to get started.",
|
||||||
|
"License": "GPL (>= 3)",
|
||||||
|
"URL": "https://rspatial.org/, https://rspatial.github.io/terra/",
|
||||||
|
"BugReports": "https://github.com/rspatial/terra/issues",
|
||||||
|
"LazyLoad": "yes",
|
||||||
|
"Authors@R": "c( person(\"Robert J.\", \"Hijmans\", role=c(\"cre\", \"aut\"), email=\"r.hijmans@gmail.com\", comment=c(ORCID=\"0000-0001-5872-2872\")),\t\t\t person(\"Márcia\", \"Barbosa\", role=\"ctb\", comment=c(ORCID=\"0000-0001-8972-7713\")), person(\"Roger\", \"Bivand\", role=\"ctb\", comment=c(ORCID=\"0000-0003-2392-6140\")), person(\"Andrew\", \"Brown\", role=\"ctb\", comment=c(ORCID=\"0000-0002-4565-533X\")), person(\"Michael\", \"Chirico\", role=\"ctb\", comment=c(ORCID=\"0000-0003-0787-087X\")), person(\"Emanuele\", \"Cordano\", role=\"ctb\",comment=c(ORCID=\"0000-0002-3508-5898\")), person(\"Krzysztof\", \"Dyba\", role=\"ctb\", comment=c(ORCID=\"0000-0002-8614-3816\")), person(\"Edzer\", \"Pebesma\", role=\"ctb\", comment=c(ORCID=\"0000-0001-8049-7069\")), person(\"Barry\", \"Rowlingson\", role=\"ctb\", comment=c(ORCID=\"0000-0002-8586-6625\")), person(\"Michael D.\", \"Sumner\", role=\"ctb\", comment=c(ORCID=\"0000-0002-2471-7511\")))",
|
||||||
|
"NeedsCompilation": "yes",
|
||||||
|
"Author": "Robert J. Hijmans [cre, aut] (ORCID: <https://orcid.org/0000-0001-5872-2872>), Márcia Barbosa [ctb] (ORCID: <https://orcid.org/0000-0001-8972-7713>), Roger Bivand [ctb] (ORCID: <https://orcid.org/0000-0003-2392-6140>), Andrew Brown [ctb] (ORCID: <https://orcid.org/0000-0002-4565-533X>), Michael Chirico [ctb] (ORCID: <https://orcid.org/0000-0003-0787-087X>), Emanuele Cordano [ctb] (ORCID: <https://orcid.org/0000-0002-3508-5898>), Krzysztof Dyba [ctb] (ORCID: <https://orcid.org/0000-0002-8614-3816>), Edzer Pebesma [ctb] (ORCID: <https://orcid.org/0000-0001-8049-7069>), Barry Rowlingson [ctb] (ORCID: <https://orcid.org/0000-0002-8586-6625>), Michael D. Sumner [ctb] (ORCID: <https://orcid.org/0000-0002-2471-7511>)",
|
||||||
|
"Repository": "CRAN"
|
||||||
|
},
|
||||||
"tibble": {
|
"tibble": {
|
||||||
"Package": "tibble",
|
"Package": "tibble",
|
||||||
"Version": "3.3.0",
|
"Version": "3.3.0",
|
||||||
@@ -3363,6 +3972,50 @@
|
|||||||
"Maintainer": "Davis Vaughan <davis@posit.co>",
|
"Maintainer": "Davis Vaughan <davis@posit.co>",
|
||||||
"Repository": "RSPM"
|
"Repository": "RSPM"
|
||||||
},
|
},
|
||||||
|
"units": {
|
||||||
|
"Package": "units",
|
||||||
|
"Version": "1.0-0",
|
||||||
|
"Source": "Repository",
|
||||||
|
"Title": "Measurement Units for R Vectors",
|
||||||
|
"Authors@R": "c(person(\"Edzer\", \"Pebesma\", role = c(\"aut\", \"cre\"), email = \"edzer.pebesma@uni-muenster.de\", comment = c(ORCID = \"0000-0001-8049-7069\")), person(\"Thomas\", \"Mailund\", role = \"aut\", email = \"mailund@birc.au.dk\"), person(\"Tomasz\", \"Kalinowski\", role = \"aut\"), person(\"James\", \"Hiebert\", role = \"ctb\"), person(\"Iñaki\", \"Ucar\", role = \"aut\", email = \"iucar@fedoraproject.org\", comment = c(ORCID = \"0000-0001-6403-5550\")), person(\"Thomas Lin\", \"Pedersen\", role = \"ctb\") )",
|
||||||
|
"Depends": [
|
||||||
|
"R (>= 3.5.0)"
|
||||||
|
],
|
||||||
|
"Imports": [
|
||||||
|
"Rcpp"
|
||||||
|
],
|
||||||
|
"LinkingTo": [
|
||||||
|
"Rcpp (>= 0.12.10)"
|
||||||
|
],
|
||||||
|
"Suggests": [
|
||||||
|
"NISTunits",
|
||||||
|
"measurements",
|
||||||
|
"xml2",
|
||||||
|
"magrittr",
|
||||||
|
"pillar (>= 1.3.0)",
|
||||||
|
"dplyr (>= 1.0.0)",
|
||||||
|
"vctrs (>= 0.3.1)",
|
||||||
|
"ggplot2 (> 3.2.1)",
|
||||||
|
"testthat (>= 3.0.0)",
|
||||||
|
"vdiffr",
|
||||||
|
"knitr",
|
||||||
|
"rvest",
|
||||||
|
"rmarkdown"
|
||||||
|
],
|
||||||
|
"VignetteBuilder": "knitr",
|
||||||
|
"Description": "Support for measurement units in R vectors, matrices and arrays: automatic propagation, conversion, derivation and simplification of units; raising errors in case of unit incompatibility. Compatible with the POSIXct, Date and difftime classes. Uses the UNIDATA udunits library and unit database for unit compatibility checking and conversion. Documentation about 'units' is provided in the paper by Pebesma, Mailund & Hiebert (2016, <doi:10.32614/RJ-2016-061>), included in this package as a vignette; see 'citation(\"units\")' for details.",
|
||||||
|
"SystemRequirements": "udunits-2",
|
||||||
|
"License": "GPL-2",
|
||||||
|
"URL": "https://r-quantities.github.io/units/, https://github.com/r-quantities/units",
|
||||||
|
"BugReports": "https://github.com/r-quantities/units/issues",
|
||||||
|
"RoxygenNote": "7.3.3",
|
||||||
|
"Encoding": "UTF-8",
|
||||||
|
"Config/testthat/edition": "3",
|
||||||
|
"NeedsCompilation": "yes",
|
||||||
|
"Author": "Edzer Pebesma [aut, cre] (ORCID: <https://orcid.org/0000-0001-8049-7069>), Thomas Mailund [aut], Tomasz Kalinowski [aut], James Hiebert [ctb], Iñaki Ucar [aut] (ORCID: <https://orcid.org/0000-0001-6403-5550>), Thomas Lin Pedersen [ctb]",
|
||||||
|
"Maintainer": "Edzer Pebesma <edzer.pebesma@uni-muenster.de>",
|
||||||
|
"Repository": "https://packagemanager.posit.co/cran/latest"
|
||||||
|
},
|
||||||
"utf8": {
|
"utf8": {
|
||||||
"Package": "utf8",
|
"Package": "utf8",
|
||||||
"Version": "1.2.6",
|
"Version": "1.2.6",
|
||||||
@@ -3578,6 +4231,35 @@
|
|||||||
"Maintainer": "Lionel Henry <lionel@posit.co>",
|
"Maintainer": "Lionel Henry <lionel@posit.co>",
|
||||||
"Repository": "https://packagemanager.posit.co/cran/latest"
|
"Repository": "https://packagemanager.posit.co/cran/latest"
|
||||||
},
|
},
|
||||||
|
"wk": {
|
||||||
|
"Package": "wk",
|
||||||
|
"Version": "0.9.5",
|
||||||
|
"Source": "Repository",
|
||||||
|
"Title": "Lightweight Well-Known Geometry Parsing",
|
||||||
|
"Authors@R": "c( person(given = \"Dewey\", family = \"Dunnington\", role = c(\"aut\", \"cre\"), email = \"dewey@fishandwhistle.net\", comment = c(ORCID = \"0000-0002-9415-4582\")), person(given = \"Edzer\", family = \"Pebesma\", role = c(\"aut\"), email = \"edzer.pebesma@uni-muenster.de\", comment = c(ORCID = \"0000-0001-8049-7069\")), person(given = \"Anthony\", family = \"North\", email = \"anthony.jl.north@gmail.com\", role = c(\"ctb\")) )",
|
||||||
|
"Maintainer": "Dewey Dunnington <dewey@fishandwhistle.net>",
|
||||||
|
"Description": "Provides a minimal R and C++ API for parsing well-known binary and well-known text representation of geometries to and from R-native formats. Well-known binary is compact and fast to parse; well-known text is human-readable and is useful for writing tests. These formats are useful in R only if the information they contain can be accessed in R, for which high-performance functions are provided here.",
|
||||||
|
"License": "MIT + file LICENSE",
|
||||||
|
"Encoding": "UTF-8",
|
||||||
|
"RoxygenNote": "7.3.2",
|
||||||
|
"Suggests": [
|
||||||
|
"testthat (>= 3.0.0)",
|
||||||
|
"vctrs (>= 0.3.0)",
|
||||||
|
"sf",
|
||||||
|
"tibble",
|
||||||
|
"readr"
|
||||||
|
],
|
||||||
|
"URL": "https://paleolimbot.github.io/wk/, https://github.com/paleolimbot/wk",
|
||||||
|
"BugReports": "https://github.com/paleolimbot/wk/issues",
|
||||||
|
"Config/testthat/edition": "3",
|
||||||
|
"Depends": [
|
||||||
|
"R (>= 2.10)"
|
||||||
|
],
|
||||||
|
"LazyData": "true",
|
||||||
|
"NeedsCompilation": "yes",
|
||||||
|
"Author": "Dewey Dunnington [aut, cre] (ORCID: <https://orcid.org/0000-0002-9415-4582>), Edzer Pebesma [aut] (ORCID: <https://orcid.org/0000-0001-8049-7069>), Anthony North [ctb]",
|
||||||
|
"Repository": "https://packagemanager.posit.co/cran/latest"
|
||||||
|
},
|
||||||
"xfun": {
|
"xfun": {
|
||||||
"Package": "xfun",
|
"Package": "xfun",
|
||||||
"Version": "0.55",
|
"Version": "0.55",
|
||||||
|
|||||||
24
src/app.Rmd
24
src/app.Rmd
@@ -39,7 +39,7 @@ ui <- fluidPage(
|
|||||||
hr(),
|
hr(),
|
||||||
|
|
||||||
h4("Batch Analysis"),
|
h4("Batch Analysis"),
|
||||||
numericInput("batch_size", "Number of flights to analyze:", value = 10, min = 2, max = 50),
|
numericInput("batch_size", "Days of flights to analyze:", value = 5, min = 1, max = 30),
|
||||||
actionButton("batch_analyze", "Run Batch Analysis", class = "btn-warning"),
|
actionButton("batch_analyze", "Run Batch Analysis", class = "btn-warning"),
|
||||||
|
|
||||||
hr(),
|
hr(),
|
||||||
@@ -144,6 +144,7 @@ server <- function(input, output, session) {
|
|||||||
data.frame(
|
data.frame(
|
||||||
Index = i,
|
Index = i,
|
||||||
ICAO24 = dep[["ICAO24"]] %||% NA,
|
ICAO24 = dep[["ICAO24"]] %||% NA,
|
||||||
|
#FIXME Callsign, Origin, Destination
|
||||||
Callsign = dep[["callsign"]] %||% NA,
|
Callsign = dep[["callsign"]] %||% NA,
|
||||||
Origin = dep[["estDepartureAirport"]] %||% NA,
|
Origin = dep[["estDepartureAirport"]] %||% NA,
|
||||||
Destination = dep[["estArrivalAirport"]] %||% NA,
|
Destination = dep[["estArrivalAirport"]] %||% NA,
|
||||||
@@ -246,28 +247,9 @@ server <- function(input, output, session) {
|
|||||||
status("Running batch analysis...")
|
status("Running batch analysis...")
|
||||||
|
|
||||||
tryCatch({
|
tryCatch({
|
||||||
all_trajectories <- list()
|
|
||||||
n_departures <- min(length(rv$departures), input$batch_size)
|
|
||||||
|
|
||||||
withProgress(message = 'Analyzing flights', value = 0, {
|
withProgress(message = 'Analyzing flights', value = 0, {
|
||||||
for (i in 1:n_departures) {
|
all_trajectories <- getAircraftTrajectories(rv$current_icao, time = Sys.time(), creds, days = input$batch_size)
|
||||||
dep <- rv$departures[[i]]
|
|
||||||
icao24 <- dep[["ICAO24"]]
|
|
||||||
dep_time <- dep[["departure_time"]]
|
|
||||||
|
|
||||||
incProgress(1/n_departures, detail = paste("Processing", icao24))
|
|
||||||
|
|
||||||
if (is.null(dep_time)) next
|
|
||||||
|
|
||||||
# Use calculate_trajectory_params from main.Rmd
|
|
||||||
params <- calculate_trajectory_params(icao24, dep_time, rv$creds)
|
|
||||||
|
|
||||||
if (!is.null(params)) {
|
|
||||||
all_trajectories[[length(all_trajectories) + 1]] <- params
|
|
||||||
}
|
|
||||||
|
|
||||||
Sys.sleep(0.3)
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
|
|
||||||
if (length(all_trajectories) > 0) {
|
if (length(all_trajectories) > 0) {
|
||||||
|
|||||||
651
src/main.Rmd
651
src/main.Rmd
@@ -1,39 +1,122 @@
|
|||||||
---
|
---
|
||||||
title: "Topic 8 - Flight Trajectory Analysis"
|
title: "Topic 8 - Flight Trajectory Analysis"
|
||||||
subtitle: "Erik Neller, Patrik Mišura, Lukas Adrion"
|
|
||||||
output:
|
output:
|
||||||
html_document: default
|
|
||||||
pdf_document: default
|
pdf_document: default
|
||||||
|
html_document: default
|
||||||
date: "`r Sys.Date()`"
|
date: "`r Sys.Date()`"
|
||||||
---
|
---
|
||||||
|
|
||||||
```{r setup, include=FALSE}
|
```{r setup, include=FALSE}
|
||||||
knitr::opts_chunk$set(echo = TRUE)
|
knitr::opts_chunk$set(echo = TRUE)
|
||||||
|
# include `eval=isArtifact()` to check if pdf/html is being produced
|
||||||
|
isArtifact <- function(){
|
||||||
|
isOutput <-knitr::is_html_output() || knitr::is_latex_output()
|
||||||
|
return(isOutput)
|
||||||
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
```{r preamble, message=FALSE, include=FALSE}
|
# Abstract
|
||||||
# Load Libraries
|
|
||||||
|
This project implements an R-based application for the retrieval, processing, and statistical analysis of aircraft trajectories. Flight data is obtained from the OpenSky Network API, transformed into analyzable trajectory objects using the `trajr` package, and subsequently characterized using established movement ecology metrics. The methodology enables quantitative comparison of flight paths through parameters such as path length, straightness index, and fractal dimension.
|
||||||
|
|
||||||
|
# Introduction
|
||||||
|
|
||||||
|
## Background
|
||||||
|
|
||||||
|
The analysis of movement trajectories constitutes a fundamental aspect of spatial data science, with applications ranging from animal behavior studies to transportation network optimization. In the context of aviation, trajectory analysis provides insights into flight efficiency, airspace utilization, and routing patterns.
|
||||||
|
|
||||||
|
## Objectives
|
||||||
|
|
||||||
|
The primary objectives of this project are:
|
||||||
|
|
||||||
|
1. **Data Acquisition**: Implement robust methods for retrieving real-time flight trajectory data from the OpenSky Network
|
||||||
|
2. **Trajectory Characterization**: Apply established metrics from movement ecology to quantify flight path properties
|
||||||
|
3. **Statistical Analysis**: Perform comparative analysis across multiple flights to identify patterns and distributions
|
||||||
|
|
||||||
|
## Theoretical Framework
|
||||||
|
|
||||||
|
The `trajr` package, originally developed for animal movement analysis, provides a comprehensive toolkit for trajectory characterization. Key metrics employed in this analysis include:
|
||||||
|
|
||||||
|
- **Path Length**: Total distance traveled along the trajectory
|
||||||
|
- **Diffusion Distance**: Euclidean displacement from origin to destination
|
||||||
|
- **Straightness Index**: Ratio of diffusion distance to path length (range 0-1)
|
||||||
|
- **Fractal Dimension**: Measure of path complexity (1 = straight line, approaching 2 = space-filling curve)
|
||||||
|
|
||||||
|
# Methodology
|
||||||
|
|
||||||
|
## Data Source
|
||||||
|
|
||||||
|
Flight trajectory data is obtained from the OpenSky Network, a community-based receiver network providing open access to air traffic surveillance data. The API provides:
|
||||||
|
|
||||||
|
- Aircraft state vectors (position, velocity, heading)
|
||||||
|
- Historical flight tracks
|
||||||
|
- Airport departure and arrival information
|
||||||
|
|
||||||
|
## Data Processing Pipeline
|
||||||
|
|
||||||
|
The analysis workflow consists of the following stages:
|
||||||
|
|
||||||
|
1. **Authentication**: Establish connection to OpenSky API using credentials
|
||||||
|
2. **Data Acquisition**: Retrieve departure information for specified airport and time window
|
||||||
|
3. **Track Retrieval**: Obtain detailed waypoint data for individual flights
|
||||||
|
4. **Coordinate Transformation**: Convert geographic coordinates to metric distances
|
||||||
|
5. **Trajectory Construction**: Create `trajr` trajectory objects for analysis
|
||||||
|
6. **Statistical Computation**: Calculate trajectory metrics and aggregate statistics
|
||||||
|
|
||||||
|
## Libraries
|
||||||
|
The following libraries were included for convenience and backend handling.
|
||||||
|
The packages more central to the task, such as `openSkies` and `trajr` are explicitly mentioned in the text.
|
||||||
|
```{r preamble, message=FALSE}
|
||||||
library(dplyr)
|
library(dplyr)
|
||||||
library(lubridate)
|
library(lubridate)
|
||||||
library(readr)
|
library(readr)
|
||||||
library(utils)
|
library(utils)
|
||||||
library(openSkies)
|
|
||||||
library(dotenv)
|
library(dotenv)
|
||||||
library(httr)
|
library(httr)
|
||||||
library(jsonlite)
|
library(jsonlite)
|
||||||
library(trajr)
|
|
||||||
library(shiny)
|
library(shiny)
|
||||||
library(leaflet)
|
|
||||||
```
|
```
|
||||||
|
|
||||||
```{r opensky, include=FALSE}
|
# Implementation
|
||||||
|
|
||||||
|
The following section will demonstrate the implementation of the methodology using R code snippets.
|
||||||
|
|
||||||
|
The full analysis is also available in the `shiny` web interface.
|
||||||
|
|
||||||
|
## API Authentication
|
||||||
|
|
||||||
|
Authentication with https://opensky-network.org/ was supposed to be provided by the `openSkies` R package.
|
||||||
|
The API provider however had deprecated username + password authentication for the API in 2025-03, leading us to first work with the
|
||||||
|
REST API manually.
|
||||||
|
While working on the manual API code, we however already forked the original package at [Rafael-Ayala/openSkies](https://github.com/Rafael-Ayala/openSkies)
|
||||||
|
to [eneller/openSkies](https://github.com/eneller/openSkies/) and made several
|
||||||
|
[changes](https://github.com/Rafael-Ayala/openSkies/issues/3) that were later included in a
|
||||||
|
[pull request](https://github.com/Rafael-Ayala/openSkies/pull/4).
|
||||||
|
Our contributions include refactoring and streamlining authenticated requests to use the `makeAuthenticatedRequest()` function used below
|
||||||
|
and store the token obtained by initial authentication in a `credentials` object obtained from the new `getCredentials()` function.
|
||||||
|
|
||||||
|
We further adjusted the front-facing functions to accept either _username + password_ or _client ID + secret_
|
||||||
|
where applicable using the new credentials object.
|
||||||
|
|
||||||
|
```{r auth, include=FALSE}
|
||||||
|
library(openSkies)
|
||||||
# Openskies API Functions
|
# Openskies API Functions
|
||||||
|
|
||||||
time_now <- Sys.time()
|
|
||||||
creds <- getCredentials(
|
creds <- getCredentials(
|
||||||
client_id = Sys.getenv('OPENSKY_CLIENT_ID'),
|
client_id = Sys.getenv('OPENSKY_CLIENT_ID'),
|
||||||
client_secret = Sys.getenv('OPENSKY_CLIENT_SECRET'))
|
client_secret = Sys.getenv('OPENSKY_CLIENT_SECRET'))
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
## Data Acquisition
|
||||||
|
In the code below, the new `makeAuthenticatedRequests()` is also used to make requests to the `tracks/all` endpoint for which no
|
||||||
|
official function is provided by `openSkies` as that endpoint is still considered experimental at the time of writing.
|
||||||
|
We use this endpoint in `getAircraftTrack()` to obtain the track data that is used for all further trajectory calculations.
|
||||||
|
|
||||||
|
In order to request the track from the API, we first need to get a list of flights for an aircraft using
|
||||||
|
`openSkies::getAircraftFlights()` in our convenience function `getFlights()`.
|
||||||
|
|
||||||
|
```{r get-data}
|
||||||
# Get flights for a specific aircraft from OpenSky API
|
# Get flights for a specific aircraft from OpenSky API
|
||||||
getFlights <- function(icao, time, creds){
|
getFlights <- function(icao, time, creds){
|
||||||
flights <-getAircraftFlights(icao, startTime = time - days(1), endTime = time, credentials = creds )
|
flights <-getAircraftFlights(icao, startTime = time - days(1), endTime = time, credentials = creds )
|
||||||
@@ -53,8 +136,13 @@ getAircraftTrack <- function(icao, time, creds) {
|
|||||||
return(NULL)
|
return(NULL)
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
## Parameter Calculation
|
||||||
|
We then calculate several basic parameters from the route, such as time and distance, that are then used to
|
||||||
|
construct an object in `getTrajFromRoute()` that can later be used with `trajr`.
|
||||||
|
|
||||||
|
```{r trajectory-functions}
|
||||||
|
library(trajr)
|
||||||
|
|
||||||
```{r trajectory-functions, include=FALSE}
|
|
||||||
# Trajectory Conversion Functions
|
# Trajectory Conversion Functions
|
||||||
|
|
||||||
# Convert route to distance in meters
|
# Convert route to distance in meters
|
||||||
@@ -84,10 +172,56 @@ getTrajFromRoute <- function(route_df) {
|
|||||||
return(trj)
|
return(trj)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
The altitude profile reveals distinct flight phases: climb, cruise, and descent. This temporal representation provides insight into vertical movement patterns.
|
||||||
|
|
||||||
|
```{r demo-altitude-plot, fig.width=7, fig.height=4, purl=FALSE, echo=FALSE}
|
||||||
|
time_now <- Sys.time()
|
||||||
|
departures <- getAirportDepartures(
|
||||||
|
airport = "EDDF",
|
||||||
|
startTime = time_now - hours(2),
|
||||||
|
endTime = time_now - hours(1),
|
||||||
|
credentials = creds
|
||||||
|
)
|
||||||
|
cat("Departures retrieved:", length(departures), "\n")
|
||||||
|
route_df <- NULL
|
||||||
|
icao <- "N/A"
|
||||||
|
|
||||||
|
if (length(departures) > 0) {
|
||||||
|
for (i in seq_along(departures)) {
|
||||||
|
icao <- departures[[i]][["ICAO24"]]
|
||||||
|
dep_time <- departures[[i]][["departure_time"]]
|
||||||
|
route_df <- getAircraftTrack(icao, dep_time, creds)
|
||||||
|
if (!is.null(route_df) && nrow(route_df) >= 3) {
|
||||||
|
cat("Aircraft ICAO24:", icao, "\n")
|
||||||
|
cat("Track points acquired:", nrow(route_df), "\n")
|
||||||
|
break
|
||||||
|
}
|
||||||
|
Sys.sleep(1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!is.null(route_df)) {
|
||||||
|
time_minutes <- (route_df$time - route_df$time[1]) / 60
|
||||||
|
plot(time_minutes, route_df$alt, type = "l", col = "red", lwd = 2,
|
||||||
|
main = paste("Altitude Profile -", icao),
|
||||||
|
xlab = "Elapsed Time (min)", ylab = "Barometric Altitude (m)")
|
||||||
|
grid()
|
||||||
|
} else {
|
||||||
|
cat("Insufficient data for altitude analysis\n")
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
# Results
|
||||||
|
|
||||||
|
## Trajectory Metrics
|
||||||
|
For each obtained trajectory, we first calculate the following metrics:
|
||||||
|
duration, length, diffusion distance, straightness index, mean velocity and fractal dimension.
|
||||||
|
```{r trajectory-metrics}
|
||||||
# Calculate trajectory characteristics
|
# Calculate trajectory characteristics
|
||||||
# Input: either route_df (data.frame with lat/lon) or trj (trajr object)
|
# Input: either route_df (data.frame with lat/lon) or trj (trajr object)
|
||||||
# format: "row" for batch analysis (one row per flight), "table" for single flight display
|
# format: "row" for batch analysis (one row per flight), "table" for single flight display
|
||||||
# FIXME for batch analysis: use the same aircraft
|
|
||||||
calculateTrajectoryStats <- function(input, icao = NULL, format = "row") {
|
calculateTrajectoryStats <- function(input, icao = NULL, format = "row") {
|
||||||
# Determine if input is route_df or trj
|
# Determine if input is route_df or trj
|
||||||
if (inherits(input, "Trajectory")) {
|
if (inherits(input, "Trajectory")) {
|
||||||
@@ -166,12 +300,94 @@ calculate_trajectory_params <- function(icao, departure_time, creds) {
|
|||||||
return(NULL)
|
return(NULL)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getAircraftTrajectories <- function(icao, time, creds, days = 5){
|
||||||
|
tracks <- list()
|
||||||
|
for (i in 0: (days-1)) {
|
||||||
|
flights <- getFlights(icao,time - days(i),creds)
|
||||||
|
for (f in flights){
|
||||||
|
track <- calculate_trajectory_params(icao, f[["departure_time"]], creds)
|
||||||
|
if (!is.null(track)){
|
||||||
|
tracks[[length(tracks)+1]] <- track
|
||||||
|
}
|
||||||
|
Sys.sleep(0.5) # API courtesy
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return(tracks)
|
||||||
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
```{r stat-functions, include=FALSE}
|
```{r demo-multiple-tracks, purl=FALSE, echo=FALSE, include=FALSE}
|
||||||
# Statistical Helper Functions
|
flight_data <- list()
|
||||||
|
successful_flights <- 0
|
||||||
|
|
||||||
# Get parameter names and labels for trajectory statistics
|
if (length(departures) > 0) {
|
||||||
|
max_attempts <- min(10, length(departures))
|
||||||
|
|
||||||
|
for (i in seq_len(max_attempts)) {
|
||||||
|
icao_temp <- departures[[i]][["ICAO24"]]
|
||||||
|
dep_time_temp <- departures[[i]][["departure_time"]]
|
||||||
|
|
||||||
|
route_df_temp <- getAircraftTrack(icao_temp, dep_time_temp, creds)
|
||||||
|
|
||||||
|
if (!is.null(route_df_temp) && nrow(route_df_temp) >= 3) {
|
||||||
|
stats <- calculateTrajectoryStats(route_df_temp, icao = icao_temp, format = "row")
|
||||||
|
if (!is.null(stats)) {
|
||||||
|
flight_data[[length(flight_data) + 1]] <- stats
|
||||||
|
successful_flights <- successful_flights + 1
|
||||||
|
cat("Flight", successful_flights, "| ICAO:", icao_temp,
|
||||||
|
"| Waypoints:", nrow(route_df_temp), "\n")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (successful_flights >= 5) break
|
||||||
|
}
|
||||||
|
|
||||||
|
if (length(flight_data) > 0) {
|
||||||
|
all_flights_stats <- do.call(rbind, flight_data)
|
||||||
|
cat("\nSample size (n):", nrow(all_flights_stats), "flights\n")
|
||||||
|
} else {
|
||||||
|
all_flights_stats <- NULL
|
||||||
|
cat("No valid trajectories obtained\n")
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
all_flights_stats <- NULL
|
||||||
|
cat("No departure data available\n")
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
The following table presents computed metrics for all successfully analyzed flights.
|
||||||
|
|
||||||
|
```{r demo-all-stats-table, purl=FALSE, echo=FALSE}
|
||||||
|
# FIXME we should display several flights from the same aircraft as stated in the requirements
|
||||||
|
# not different aircraft's flights
|
||||||
|
if (!is.null(all_flights_stats)) {
|
||||||
|
display_stats <- all_flights_stats
|
||||||
|
display_stats$diffusion_distance_km <- round(display_stats$diffusion_distance_km, 2)
|
||||||
|
display_stats$path_length_km <- round(display_stats$path_length_km, 2)
|
||||||
|
display_stats$straightness <- round(display_stats$straightness, 4)
|
||||||
|
display_stats$duration_min <- round(display_stats$duration_min, 1)
|
||||||
|
display_stats$mean_velocity_kmh <- round(display_stats$mean_velocity_kmh, 1)
|
||||||
|
display_stats$fractal_dimension <- round(display_stats$fractal_dimension, 4)
|
||||||
|
|
||||||
|
knitr::kable(display_stats, caption = "Computed Trajectory Metrics",
|
||||||
|
col.names = c("ICAO24", "Displacement (km)", "Path Length (km)",
|
||||||
|
"Straightness", "Duration (min)", "Velocity (km/h)", "Fractal Dim."))
|
||||||
|
} else {
|
||||||
|
cat("No data available for tabulation\n")
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Trajectory Statistics
|
||||||
|
To enable statistical inference, trajectory data is collected for multiple flights.
|
||||||
|
We then calculate basic descriptive statistics for the metrics we obtained earlier,
|
||||||
|
such as
|
||||||
|
- mean
|
||||||
|
- median
|
||||||
|
- standard deviation
|
||||||
|
- interquartile range
|
||||||
|
```{r trajectory-summary}
|
||||||
getTrajectoryParams <- function() {
|
getTrajectoryParams <- function() {
|
||||||
list(
|
list(
|
||||||
params = c("diffusion_distance_km", "straightness", "duration_min",
|
params = c("diffusion_distance_km", "straightness", "duration_min",
|
||||||
@@ -193,12 +409,12 @@ calculateStatsSummary <- function(trajectory_stats_df) {
|
|||||||
data.frame(
|
data.frame(
|
||||||
Parameter = p$labels[i],
|
Parameter = p$labels[i],
|
||||||
N = length(x),
|
N = length(x),
|
||||||
Mean = round(mean(x), 4),
|
Mean = round(mean(x), 1),
|
||||||
Variance = round(var(x), 4),
|
Variance = round(var(x), 1),
|
||||||
Std_Dev = round(sd(x), 4),
|
Std_Dev = round(sd(x), 1),
|
||||||
Q1 = round(quantile(x, 0.25), 4),
|
Q1 = round(quantile(x, 0.25), 1),
|
||||||
Median = round(median(x), 4),
|
Median = round(median(x), 1),
|
||||||
Q3 = round(quantile(x, 0.75), 4)
|
Q3 = round(quantile(x, 0.75), 1)
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -206,31 +422,23 @@ calculateStatsSummary <- function(trajectory_stats_df) {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
```{r viz-functions, include=FALSE}
|
|
||||||
# Visualization Functions
|
|
||||||
|
|
||||||
# Create interactive map with leaflet
|
The `calculateStatsSummary()` function computes central tendency and dispersion measures for each trajectory parameter.
|
||||||
createInteractiveMap <- function(route) {
|
|
||||||
leaflet(route) %>%
|
```{r demo-summary-stats, purl=FALSE, echo=FALSE}
|
||||||
addTiles() %>%
|
# FIXME first table column broken
|
||||||
addPolylines(lng=~lon, lat=~lat, color="blue", weight=3, opacity=0.8) %>%
|
if (!is.null(all_flights_stats) && nrow(all_flights_stats) >= 2) {
|
||||||
addCircleMarkers(
|
summary_stats <- calculateStatsSummary(all_flights_stats)
|
||||||
lng = ~lon[1],
|
knitr::kable(summary_stats, caption = "Descriptive Statistics Summary")
|
||||||
lat = ~lat[1],
|
} else {
|
||||||
color = "green",
|
cat("Minimum sample size (n >= 2) not met\n")
|
||||||
radius = 6,
|
|
||||||
popup = "Origin"
|
|
||||||
) %>%
|
|
||||||
addCircleMarkers(
|
|
||||||
lng = ~lon[nrow(route)],
|
|
||||||
lat = ~lat[nrow(route)],
|
|
||||||
color = "red",
|
|
||||||
radius = 6,
|
|
||||||
popup = "Destination"
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
```
|
||||||
|
|
||||||
# Create boxplots for trajectory statistics
|
## Visualisation
|
||||||
|
Boxplots provide a robust visualization of parameter distributions, displaying median, interquartile range, and potential outliers. The red diamond indicates the arithmetic mean.
|
||||||
|
|
||||||
|
```{r vis-boxplot}
|
||||||
createBoxplots <- function(trajectory_stats_df) {
|
createBoxplots <- function(trajectory_stats_df) {
|
||||||
p <- getTrajectoryParams()
|
p <- getTrajectoryParams()
|
||||||
|
|
||||||
@@ -244,8 +452,20 @@ createBoxplots <- function(trajectory_stats_df) {
|
|||||||
}
|
}
|
||||||
par(mfrow = c(1, 1))
|
par(mfrow = c(1, 1))
|
||||||
}
|
}
|
||||||
|
```
|
||||||
|
|
||||||
# Create density plots for trajectory statistics
|
```{r demo-boxplot, fig.width=10, fig.height=8, purl=FALSE, echo=FALSE}
|
||||||
|
if (!is.null(all_flights_stats) && nrow(all_flights_stats) >= 2) {
|
||||||
|
createBoxplots(all_flights_stats)
|
||||||
|
} else {
|
||||||
|
cat("Minimum sample size (n >= 2) not met\n")
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
Density plots employ kernel density estimation to approximate the probability distribution of each parameter. Vertical lines indicate mean (red, dashed) and median (green, dotted).
|
||||||
|
|
||||||
|
```{r vis-density}
|
||||||
createDensityPlots <- function(trajectory_stats_df) {
|
createDensityPlots <- function(trajectory_stats_df) {
|
||||||
p <- getTrajectoryParams()
|
p <- getTrajectoryParams()
|
||||||
|
|
||||||
@@ -262,8 +482,19 @@ createDensityPlots <- function(trajectory_stats_df) {
|
|||||||
}
|
}
|
||||||
par(mfrow = c(1, 1))
|
par(mfrow = c(1, 1))
|
||||||
}
|
}
|
||||||
|
```
|
||||||
|
|
||||||
# Create histograms for trajectory statistics
|
```{r demo-density, fig.width=10, fig.height=8, purl=FALSE, echo=FALSE}
|
||||||
|
if (!is.null(all_flights_stats) && nrow(all_flights_stats) >= 3) {
|
||||||
|
createDensityPlots(all_flights_stats)
|
||||||
|
} else {
|
||||||
|
cat("Minimum sample size (n >= 3) not met for density estimation\n")
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Histograms with overlaid density curves provide an alternative visualization of parameter distributions.
|
||||||
|
|
||||||
|
```{r vis-histogram}
|
||||||
createHistograms <- function(trajectory_stats_df) {
|
createHistograms <- function(trajectory_stats_df) {
|
||||||
p <- getTrajectoryParams()
|
p <- getTrajectoryParams()
|
||||||
|
|
||||||
@@ -278,8 +509,20 @@ createHistograms <- function(trajectory_stats_df) {
|
|||||||
}
|
}
|
||||||
par(mfrow = c(1, 1))
|
par(mfrow = c(1, 1))
|
||||||
}
|
}
|
||||||
|
```
|
||||||
|
|
||||||
# Generate interpretation text for trajectory statistics
|
```{r demo-histogram, fig.width=10, fig.height=8, purl=FALSE, echo=FALSE}
|
||||||
|
if (!is.null(all_flights_stats) && nrow(all_flights_stats) >= 3) {
|
||||||
|
createHistograms(all_flights_stats)
|
||||||
|
} else {
|
||||||
|
cat("Minimum sample size (n >= 3) not met for histogram analysis\n")
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
The `generateInterpretation()` function provides contextual analysis of the computed trajectory metrics.
|
||||||
|
|
||||||
|
```{r vis-interpretation, include=FALSE}
|
||||||
generateInterpretation <- function(trajectory_stats_df) {
|
generateInterpretation <- function(trajectory_stats_df) {
|
||||||
df <- trajectory_stats_df
|
df <- trajectory_stats_df
|
||||||
|
|
||||||
@@ -331,288 +574,7 @@ generateInterpretation <- function(trajectory_stats_df) {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
```{r demo-interpretation, purl=FALSE, echo=TRUE}
|
||||||
# Abstract
|
|
||||||
|
|
||||||
This project implements an R-based application for the retrieval, processing, and statistical analysis of aircraft trajectories. Flight data is obtained from the OpenSky Network API, transformed into analyzable trajectory objects using the `trajr` package, and subsequently characterized using established movement ecology metrics. The methodology enables quantitative comparison of flight paths through parameters such as path length, straightness index, and fractal dimension.
|
|
||||||
|
|
||||||
# Introduction
|
|
||||||
|
|
||||||
## Background
|
|
||||||
|
|
||||||
The analysis of movement trajectories constitutes a fundamental aspect of spatial data science, with applications ranging from animal behavior studies to transportation network optimization. In the context of aviation, trajectory analysis provides insights into flight efficiency, airspace utilization, and routing patterns.
|
|
||||||
|
|
||||||
## Objectives
|
|
||||||
|
|
||||||
The primary objectives of this project are:
|
|
||||||
|
|
||||||
1. **Data Acquisition**: Implement robust methods for retrieving real-time flight trajectory data from the OpenSky Network
|
|
||||||
2. **Trajectory Characterization**: Apply established metrics from movement ecology to quantify flight path properties
|
|
||||||
3. **Statistical Analysis**: Perform comparative analysis across multiple flights to identify patterns and distributions
|
|
||||||
|
|
||||||
## Theoretical Framework
|
|
||||||
|
|
||||||
The `trajr` package, originally developed for animal movement analysis, provides a comprehensive toolkit for trajectory characterization. Key metrics employed in this analysis include:
|
|
||||||
|
|
||||||
- **Path Length**: Total distance traveled along the trajectory
|
|
||||||
- **Diffusion Distance**: Euclidean displacement from origin to destination
|
|
||||||
- **Straightness Index**: Ratio of diffusion distance to path length (range 0-1)
|
|
||||||
- **Fractal Dimension**: Measure of path complexity (1 = straight line, approaching 2 = space-filling curve)
|
|
||||||
|
|
||||||
# Methodology
|
|
||||||
|
|
||||||
## Data Source
|
|
||||||
|
|
||||||
Flight trajectory data is obtained from the OpenSky Network, a community-based receiver network providing open access to air traffic surveillance data. The API provides:
|
|
||||||
|
|
||||||
- Aircraft state vectors (position, velocity, heading)
|
|
||||||
- Historical flight tracks
|
|
||||||
- Airport departure and arrival information
|
|
||||||
|
|
||||||
## Data Processing Pipeline
|
|
||||||
|
|
||||||
The analysis workflow consists of the following stages:
|
|
||||||
|
|
||||||
1. **Authentication**: Establish connection to OpenSky API using credentials
|
|
||||||
2. **Query Execution**: Retrieve departure information for specified airport and time window
|
|
||||||
3. **Track Retrieval**: Obtain detailed waypoint data for individual flights
|
|
||||||
4. **Coordinate Transformation**: Convert geographic coordinates to metric distances
|
|
||||||
5. **Trajectory Construction**: Create `trajr` trajectory objects for analysis
|
|
||||||
6. **Statistical Computation**: Calculate trajectory metrics and aggregate statistics
|
|
||||||
|
|
||||||
# Implementation
|
|
||||||
|
|
||||||
The following section will demonstrate the implementation of the methodology using R code snippets.
|
|
||||||
The full analysis is also available in the GUI-based Shiny application.
|
|
||||||
|
|
||||||
## Step 1: API Authentication
|
|
||||||
|
|
||||||
The `getCredentials()` function retrieves API credentials from environment variables, ensuring secure credential management.
|
|
||||||
|
|
||||||
```r
|
|
||||||
creds <- getCredentials(
|
|
||||||
client_id = Sys.getenv("OPENSKY_CLIENT_ID"),
|
|
||||||
client_secret = Sys.getenv("OPENSKY_CLIENT_SECRET")
|
|
||||||
)
|
|
||||||
```
|
|
||||||
|
|
||||||
## Step 2: Data Acquisition
|
|
||||||
|
|
||||||
Recent departures from Frankfurt Airport (ICAO: EDDF) are queried for a two-hour time window. This airport was selected due to its high traffic volume, ensuring sufficient data availability.
|
|
||||||
|
|
||||||
```{r demo-departures}
|
|
||||||
time_now <- Sys.time()
|
|
||||||
departures <- getAirportDepartures(
|
|
||||||
airport = "EDDF",
|
|
||||||
startTime = time_now - hours(2),
|
|
||||||
endTime = time_now - hours(1),
|
|
||||||
credentials = creds
|
|
||||||
)
|
|
||||||
cat("Departures retrieved:", length(departures), "\n")
|
|
||||||
```
|
|
||||||
|
|
||||||
## Step 3: Track Data Retrieval
|
|
||||||
|
|
||||||
The `getAircraftTrack()` function retrieves detailed waypoint data for individual aircraft. The function iterates through available departures until valid track data is obtained.
|
|
||||||
|
|
||||||
```{r demo-track}
|
|
||||||
route_df <- NULL
|
|
||||||
icao <- "N/A"
|
|
||||||
|
|
||||||
if (length(departures) > 0) {
|
|
||||||
for (i in seq_along(departures)) {
|
|
||||||
icao <- departures[[i]][["ICAO24"]]
|
|
||||||
dep_time <- departures[[i]][["departure_time"]]
|
|
||||||
route_df <- getAircraftTrack(icao, dep_time, creds)
|
|
||||||
if (!is.null(route_df) && nrow(route_df) >= 3) {
|
|
||||||
cat("Aircraft ICAO24:", icao, "\n")
|
|
||||||
cat("Track points acquired:", nrow(route_df), "\n")
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is.null(route_df)) {
|
|
||||||
cat("No valid track data available\n")
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## Step 4: Spatial Visualization
|
|
||||||
|
|
||||||
The geographic trajectory is visualized on an interactive map with leaflet using the `createInteractiveMap()` function. Green and red markers indicate departure and current/final position, respectively.
|
|
||||||
|
|
||||||
```{r demo-route-plot, fig.width=7, fig.height=5}
|
|
||||||
if (!is.null(route_df)) {
|
|
||||||
createInteractiveMap(route_df)
|
|
||||||
} else {
|
|
||||||
cat("Insufficient data for visualization\n")
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## Step 5: Vertical Profile Analysis
|
|
||||||
|
|
||||||
The altitude profile reveals distinct flight phases: climb, cruise, and descent. This temporal representation provides insight into vertical movement patterns.
|
|
||||||
|
|
||||||
```{r demo-altitude-plot, fig.width=7, fig.height=4}
|
|
||||||
if (!is.null(route_df)) {
|
|
||||||
time_minutes <- (route_df$time - route_df$time[1]) / 60
|
|
||||||
plot(time_minutes, route_df$alt, type = "l", col = "red", lwd = 2,
|
|
||||||
main = paste("Altitude Profile -", icao),
|
|
||||||
xlab = "Elapsed Time (min)", ylab = "Barometric Altitude (m)")
|
|
||||||
grid()
|
|
||||||
} else {
|
|
||||||
cat("Insufficient data for altitude analysis\n")
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## Step 6: Trajectory Object Construction
|
|
||||||
|
|
||||||
The `getTrajFromRoute()` function transforms geographic coordinates into a metric coordinate system and constructs a `trajr` trajectory object. This transformation is necessary for accurate distance calculations.
|
|
||||||
|
|
||||||
```{r demo-trajectory-plot, fig.width=7, fig.height=5}
|
|
||||||
if (!is.null(route_df)) {
|
|
||||||
trj <- getTrajFromRoute(route_df)
|
|
||||||
plot(trj, main = paste("Metric Trajectory -", icao))
|
|
||||||
cat("Trajectory object created with", nrow(trj), "waypoints\n")
|
|
||||||
} else {
|
|
||||||
cat("Insufficient data for trajectory construction\n")
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## Step 7: Single Flight Characterization
|
|
||||||
|
|
||||||
The `calculateTrajectoryStats()` function computes comprehensive trajectory metrics. The table format provides a clear overview of individual flight characteristics.
|
|
||||||
|
|
||||||
```{r demo-stats-table}
|
|
||||||
if (!is.null(route_df)) {
|
|
||||||
stats_table <- calculateTrajectoryStats(route_df, icao = icao, format = "table")
|
|
||||||
knitr::kable(stats_table, caption = paste("Trajectory Metrics for Aircraft", icao))
|
|
||||||
} else {
|
|
||||||
cat("Insufficient data for statistical analysis\n")
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## Step 8: Multi-Flight Data Collection
|
|
||||||
|
|
||||||
To enable statistical inference, trajectory data is collected for multiple flights. The algorithm attempts to retrieve valid track data for up to five departures in this example.
|
|
||||||
|
|
||||||
```{r demo-multiple-tracks}
|
|
||||||
flight_data <- list()
|
|
||||||
successful_flights <- 0
|
|
||||||
|
|
||||||
if (length(departures) > 0) {
|
|
||||||
max_attempts <- min(10, length(departures))
|
|
||||||
|
|
||||||
for (i in seq_len(max_attempts)) {
|
|
||||||
icao_temp <- departures[[i]][["ICAO24"]]
|
|
||||||
dep_time_temp <- departures[[i]][["departure_time"]]
|
|
||||||
|
|
||||||
route_df_temp <- getAircraftTrack(icao_temp, dep_time_temp, creds)
|
|
||||||
|
|
||||||
if (!is.null(route_df_temp) && nrow(route_df_temp) >= 3) {
|
|
||||||
stats <- calculateTrajectoryStats(route_df_temp, icao = icao_temp, format = "row")
|
|
||||||
if (!is.null(stats)) {
|
|
||||||
flight_data[[length(flight_data) + 1]] <- stats
|
|
||||||
successful_flights <- successful_flights + 1
|
|
||||||
cat("Flight", successful_flights, "| ICAO:", icao_temp,
|
|
||||||
"| Waypoints:", nrow(route_df_temp), "\n")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (successful_flights >= 5) break
|
|
||||||
}
|
|
||||||
|
|
||||||
if (length(flight_data) > 0) {
|
|
||||||
all_flights_stats <- do.call(rbind, flight_data)
|
|
||||||
cat("\nSample size (n):", nrow(all_flights_stats), "flights\n")
|
|
||||||
} else {
|
|
||||||
all_flights_stats <- NULL
|
|
||||||
cat("No valid trajectories obtained\n")
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
all_flights_stats <- NULL
|
|
||||||
cat("No departure data available\n")
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
# Results
|
|
||||||
|
|
||||||
## Individual Flight Metrics
|
|
||||||
|
|
||||||
The following table presents computed metrics for all successfully analyzed flights.
|
|
||||||
|
|
||||||
```{r demo-all-stats-table}
|
|
||||||
if (!is.null(all_flights_stats)) {
|
|
||||||
display_stats <- all_flights_stats
|
|
||||||
display_stats$diffusion_distance_km <- round(display_stats$diffusion_distance_km, 2)
|
|
||||||
display_stats$path_length_km <- round(display_stats$path_length_km, 2)
|
|
||||||
display_stats$straightness <- round(display_stats$straightness, 4)
|
|
||||||
display_stats$duration_min <- round(display_stats$duration_min, 1)
|
|
||||||
display_stats$mean_velocity_kmh <- round(display_stats$mean_velocity_kmh, 1)
|
|
||||||
display_stats$fractal_dimension <- round(display_stats$fractal_dimension, 4)
|
|
||||||
|
|
||||||
knitr::kable(display_stats, caption = "Computed Trajectory Metrics",
|
|
||||||
col.names = c("ICAO24", "Displacement (km)", "Path Length (km)",
|
|
||||||
"Straightness", "Duration (min)", "Velocity (km/h)", "Fractal Dim."))
|
|
||||||
} else {
|
|
||||||
cat("No data available for tabulation\n")
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## Descriptive Statistics
|
|
||||||
|
|
||||||
The `calculateStatsSummary()` function computes central tendency and dispersion measures for each trajectory parameter.
|
|
||||||
|
|
||||||
```{r demo-summary-stats}
|
|
||||||
if (!is.null(all_flights_stats) && nrow(all_flights_stats) >= 2) {
|
|
||||||
summary_stats <- calculateStatsSummary(all_flights_stats)
|
|
||||||
knitr::kable(summary_stats, caption = "Descriptive Statistics Summary")
|
|
||||||
} else {
|
|
||||||
cat("Minimum sample size (n >= 2) not met\n")
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## Distribution Analysis: Boxplots
|
|
||||||
|
|
||||||
Boxplots provide a robust visualization of parameter distributions, displaying median, interquartile range, and potential outliers. The red diamond indicates the arithmetic mean.
|
|
||||||
|
|
||||||
```{r demo-boxplots, fig.width=10, fig.height=8}
|
|
||||||
if (!is.null(all_flights_stats) && nrow(all_flights_stats) >= 2) {
|
|
||||||
createBoxplots(all_flights_stats)
|
|
||||||
} else {
|
|
||||||
cat("Minimum sample size (n >= 2) not met\n")
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## Distribution Analysis: Kernel Density Estimation
|
|
||||||
|
|
||||||
Density plots employ kernel density estimation to approximate the probability distribution of each parameter. Vertical lines indicate mean (red, dashed) and median (green, dotted).
|
|
||||||
|
|
||||||
```{r demo-density, fig.width=10, fig.height=8}
|
|
||||||
if (!is.null(all_flights_stats) && nrow(all_flights_stats) >= 3) {
|
|
||||||
createDensityPlots(all_flights_stats)
|
|
||||||
} else {
|
|
||||||
cat("Minimum sample size (n >= 3) not met for density estimation\n")
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## Distribution Analysis: Histograms
|
|
||||||
|
|
||||||
Histograms with overlaid density curves provide an alternative visualization of parameter distributions.
|
|
||||||
|
|
||||||
```{r demo-histograms, fig.width=10, fig.height=8}
|
|
||||||
if (!is.null(all_flights_stats) && nrow(all_flights_stats) >= 3) {
|
|
||||||
createHistograms(all_flights_stats)
|
|
||||||
} else {
|
|
||||||
cat("Minimum sample size (n >= 3) not met for histogram analysis\n")
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## Parameter Interpretation
|
|
||||||
|
|
||||||
The `generateInterpretation()` function provides contextual analysis of the computed trajectory metrics.
|
|
||||||
|
|
||||||
```{r demo-interpretation}
|
|
||||||
if (!is.null(all_flights_stats) && nrow(all_flights_stats) >= 2) {
|
if (!is.null(all_flights_stats) && nrow(all_flights_stats) >= 2) {
|
||||||
interpretation <- generateInterpretation(all_flights_stats)
|
interpretation <- generateInterpretation(all_flights_stats)
|
||||||
cat(interpretation)
|
cat(interpretation)
|
||||||
@@ -621,6 +583,34 @@ if (!is.null(all_flights_stats) && nrow(all_flights_stats) >= 2) {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
We also include an interactive map using `leaflet` to provide an intuitive display for the route of the aircraft.
|
||||||
|
```{r vis-map}
|
||||||
|
library(leaflet)
|
||||||
|
createInteractiveMap <- function(route) {
|
||||||
|
leaflet(route) %>%
|
||||||
|
addTiles() %>%
|
||||||
|
addPolylines(lng=~lon, lat=~lat, color="blue", weight=3, opacity=0.8) %>%
|
||||||
|
addCircleMarkers(
|
||||||
|
lng = ~lon[1],
|
||||||
|
lat = ~lat[1],
|
||||||
|
color = "green",
|
||||||
|
radius = 6,
|
||||||
|
popup = "Origin"
|
||||||
|
) %>%
|
||||||
|
addCircleMarkers(
|
||||||
|
lng = ~lon[nrow(route)],
|
||||||
|
lat = ~lat[nrow(route)],
|
||||||
|
color = "red",
|
||||||
|
radius = 6,
|
||||||
|
popup = "Destination"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
```
|
||||||
|

|
||||||
|

|
||||||
|

|
||||||
|

|
||||||
|
|
||||||
# Discussion
|
# Discussion
|
||||||
|
|
||||||
## Key Findings
|
## Key Findings
|
||||||
@@ -644,6 +634,9 @@ This project demonstrates the successful application of movement ecology metrics
|
|||||||
|
|
||||||
# References
|
# References
|
||||||
|
|
||||||
- OpenSky Network: https://opensky-network.org/
|
1. [The OpenSky Network. (2025). Internet archive of observed aircraft trajectories.](https://opensky-network.org/datasets/states/)
|
||||||
- McLean, D.J. & Skowron Volponi, M.A. (2018). trajr: An R package for characterisation of animal trajectories. Ethology, 124(6), 440-448: https://CRAN.R-project.org/package=trajr
|
2. [Schäfer, M, Strohmeier, M, Lenders, V, Martinovic, I, Wilhelm, M. (2014). Bringing Up OpenSky: A Large-scale ADS-B Sensor Network for Research. In Proceedings of the 13th IEEE/ACM International Symposium on Information Processing in Sensor Networks (IPSN), pages 83-94.](https://opensky-network.org/files/publications/ipsn2014.pdf)
|
||||||
|
3. [Zheng, Y. (2015). Trajectory Data Mining: An Overview. ACM Transactions on Intelligent Systems and Technology, 61(3), 1–41.](https://doi.org/10.1145/2743025)
|
||||||
|
4. [Thulin, M. (2025). Modern Statistics with R: From wrangling and exploring data to inference and predictive modelling. CRC Press. Boca Raton, Fl.](https://modernstatisticswithr.com/)
|
||||||
|
5. [McLean, D J, and Skowron Volponi, M A. (2018). trajr: An R package for characterisation of animal trajectories. Ethology, 124, 440–448.](https://doi.org/10.1111/eth.12739)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user