{
  "_id": "6ac8ab46de46216d5edd55ef",
  "Type": "Package",
  "Package": "nvctr",
  "Title": "The n-vector Approach to Geographical Position Calculations\nusing an Ellipsoidal Model of Earth",
  "Version": "0.1.7",
  "Authors@R": "c(person(given = \"Enrico\",\nfamily = \"Spinielli\",\nrole = c(\"aut\", \"cre\"),\nemail = \"enrico.spinielli@eurocontrol.int\",\ncomment = c(ORCID = \"0000-0001-8584-9131\")),\nperson(given = \"EUROCONTROL\",\nrole = c(\"cph\", \"fnd\")))",
  "Maintainer": "Enrico Spinielli <enrico.spinielli@eurocontrol.int>",
  "Description": "The n-vector framework uses the normal vector to the Earth\nellipsoid (called n-vector) as a non-singular position\nrepresentation that turns out to be very convenient for\npractical position calculations.  The n-vector is simple to use\nand gives exact answers for all global positions, and all\ndistances, for both ellipsoidal and spherical Earth models.\nThis package is a translation of the 'Matlab' library from FFI,\nthe Norwegian Defence Research Establishment, as described in\nGade (2010) <doi:10.1017/S0373463309990415>.",
  "License": "MIT + file LICENSE",
  "URL": "https://nvctr.ansperformance.eu,\nhttps://github.com/euctrl-pru/nvctr",
  "BugReports": "https://github.com/euctrl-pru/nvctr/issues",
  "VignetteBuilder": "knitr",
  "Encoding": "UTF-8",
  "Language": "en-US",
  "RoxygenNote": "7.3.3",
  "Repository": "https://euctrl-pru.r-universe.dev",
  "Date/Publication": "2025-12-13 14:18:57 UTC",
  "RemoteUrl": "https://github.com/euctrl-pru/nvctr",
  "RemoteRef": "HEAD",
  "RemoteSha": "0a8092e2b66e332fee0c1525b659cb7ab2fc54f4",
  "NeedsCompilation": "no",
  "Packaged": {
    "Date": "2026-10-09 08:48:20 UTC",
    "User": "root"
  },
  "Author": "Enrico Spinielli [aut, cre] (ORCID:\n<https://orcid.org/0000-0001-8584-9131>),\nEUROCONTROL [cph, fnd]",
  "_user": "euctrl-pru",
  "_type": "src",
  "_file": "nvctr_0.1.7.tar.gz",
  "_fileid": "https://r2.ropensci.org/7b97e6a1cd81623c3cb26220ffd197d7e07c524c858084c1bb0150eed704962e",
  "_filesize": 496937,
  "_sha256": "7b97e6a1cd81623c3cb26220ffd197d7e07c524c858084c1bb0150eed704962e",
  "_expires": "2027-01-17T08:52:21.000Z",
  "_created": "2026-10-09T08:48:20.000Z",
  "_published": "2026-10-09T08:52:22.675Z",
  "_buildurl": "https://github.com/r-universe/euctrl-pru/actions/runs/37906903453",
  "_status": "success",
  "_host": "GitHub-Actions",
  "_jobs": [
    {
      "job": 113743688951,
      "time": 109,
      "config": "linux-devel-x86_64",
      "r": "4.7.0",
      "check": "OK",
      "artifact": "11605241024"
    },
    {
      "job": 113743689016,
      "time": 102,
      "config": "linux-release-x86_64",
      "r": "4.6.1",
      "check": "OK",
      "artifact": "11604609795"
    },
    {
      "job": 113743688929,
      "time": 191,
      "config": "macos-oldrel-arm64",
      "r": "4.5.3",
      "check": "OK",
      "artifact": "11605270914"
    },
    {
      "job": 113743688899,
      "time": 159,
      "config": "macos-release-arm64",
      "r": "4.6.1",
      "check": "OK",
      "artifact": "11604754374"
    },
    {
      "job": 113742563551,
      "time": 197,
      "config": "source",
      "r": "4.6.1",
      "check": "OK",
      "artifact": "11604956772"
    },
    {
      "job": 113743688941,
      "time": 91,
      "config": "wasm-release",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "11604858586"
    },
    {
      "job": 113743688970,
      "time": 68,
      "config": "windows-devel-x86_64",
      "r": "4.7.0",
      "check": "OK",
      "artifact": "11604963043"
    },
    {
      "job": 113743688934,
      "time": 83,
      "config": "windows-oldrel-x86_64",
      "r": "4.5.3",
      "check": "OK",
      "artifact": "11604179747"
    },
    {
      "job": 113743688993,
      "time": 64,
      "config": "windows-release-x86_64",
      "r": "4.6.1",
      "check": "OK",
      "artifact": "11605131317"
    }
  ],
  "_upstream": "https://github.com/euctrl-pru/nvctr",
  "_commit": {
    "id": "0a8092e2b66e332fee0c1525b659cb7ab2fc54f4",
    "author": "Enrico Spinielli <enrico.spinielli@eurocontrol.int>",
    "committer": "Enrico Spinielli <enrico.spinielli@eurocontrol.int>",
    "message": "submission finally\n",
    "time": 1765635537
  },
  "_maintainer": {
    "name": "Enrico Spinielli",
    "email": "enrico.spinielli@eurocontrol.int",
    "login": "espinielli",
    "mastodon": "@espinielli@mstdn.social",
    "bluesky": "@espinielli.eurosky.social",
    "linkedin": "in/espinielli",
    "orcid": "0000-0001-8584-9131",
    "description": "I am interested in dataviz and am looking forward to a world where human brains are freed from boring, repetitive, manual, click-copy-paste tasks.\n ",
    "uuid": 891692
  },
  "_distro": "resolute",
  "_registered": true,
  "_dependencies": [
    {
      "package": "magrittr",
      "role": "Imports"
    },
    {
      "package": "pracma",
      "role": "Imports"
    },
    {
      "package": "bookdown",
      "role": "Suggests"
    },
    {
      "package": "covr",
      "role": "Suggests"
    },
    {
      "package": "geosphere",
      "role": "Suggests"
    },
    {
      "package": "knitr",
      "role": "Suggests"
    },
    {
      "package": "png",
      "role": "Suggests"
    },
    {
      "package": "rmarkdown",
      "role": "Suggests"
    },
    {
      "package": "spelling",
      "role": "Suggests"
    },
    {
      "package": "testthat",
      "role": "Suggests"
    }
  ],
  "_owner": "euctrl-pru",
  "_selfowned": true,
  "_usedby": 0,
  "_updates": [
    {
      "week": "2025-47",
      "n": 5
    },
    {
      "week": "2025-50",
      "n": 10
    }
  ],
  "_tags": [],
  "_topics": [
    "geographical-positions",
    "n-vector"
  ],
  "_stars": 12,
  "_contributors": [
    {
      "user": "espinielli",
      "count": 123,
      "uuid": 891692
    }
  ],
  "_userbio": {
    "uuid": 10348651,
    "type": "organization",
    "name": "Aviation Intelligence Unit - EUROCONTROL",
    "followers": 29,
    "description": "The Aviation Intelligence Unit / Performance Review Unit of EUROCONTROL."
  },
  "_downloads": {
    "count": 279,
    "source": "https://cranlogs.r-pkg.org/downloads/total/last-month/nvctr"
  },
  "_devurl": "https://github.com/euctrl-pru/nvctr",
  "_pkgdown": "https://nvctr.ansperformance.eu",
  "_searchresults": 33,
  "_rbuild": "4.6.1",
  "_assets": [
    "extra/citation.cff",
    "extra/citation.html",
    "extra/citation.json",
    "extra/citation.txt",
    "extra/contents.json",
    "extra/manual.pdf",
    "extra/NEWS.html",
    "extra/NEWS.txt",
    "extra/nvctr.html",
    "extra/readme.html",
    "extra/readme.md",
    "LICENSE"
  ],
  "_homeurl": "https://github.com/euctrl-pru/nvctr",
  "_realowner": "euctrl-pru",
  "_cranurl": true,
  "_releases": [
    {
      "version": "0.1.1",
      "date": "2019-03-08"
    },
    {
      "version": "0.1.4",
      "date": "2020-10-28"
    },
    {
      "version": "0.1.7",
      "date": "2025-12-13"
    }
  ],
  "_exports": [
    "%>%",
    "along_track_distance",
    "altitude_azimuth_distance",
    "cross_track_distance",
    "cross_track_intersection",
    "deg",
    "lat_lon2n_E",
    "n_E_and_wa2R_EL",
    "n_E2lat_lon",
    "n_E2R_EN",
    "n_EA_E_and_n_EB_E2p_AB_E",
    "n_EA_E_and_p_AB_E2n_EB_E",
    "n_EB_E2p_EB_E",
    "p_EB_E2n_EB_E",
    "R_Ee",
    "R_EL2n_E",
    "R_EN2n_E",
    "R2xyz",
    "R2zyx",
    "rad",
    "unit",
    "xyz2R",
    "zyx2R"
  ],
  "_help": [
    {
      "page": "along_track_distance",
      "title": "Compute the along-track distance from a great circle arc",
      "concept": [
        "utilities"
      ],
      "topics": [
        "along_track_distance"
      ]
    },
    {
      "page": "altitude_azimuth_distance",
      "title": "Calculate the altitude, azimuth and distance of B from A",
      "concept": [
        "utilities"
      ],
      "topics": [
        "altitude_azimuth_distance"
      ]
    },
    {
      "page": "cross_track_distance",
      "title": "Compute the cross-track distance from a great circle arc",
      "concept": [
        "utilities"
      ],
      "topics": [
        "cross_track_distance"
      ]
    },
    {
      "page": "cross_track_intersection",
      "title": "Calculate cross-track intersection",
      "concept": [
        "utilities"
      ],
      "topics": [
        "cross_track_intersection"
      ]
    },
    {
      "page": "deg",
      "title": "Convert angle in radians to degrees",
      "concept": [
        "helpers"
      ],
      "topics": [
        "deg"
      ]
    },
    {
      "page": "lat_lon2n_E",
      "title": "Convert (geodetic) latitude and longitude to n-vector",
      "topics": [
        "lat_lon2n_E"
      ]
    },
    {
      "page": "n_E_and_wa2R_EL",
      "title": "Find 'R_EL' from n-vector and wander azimuth angle",
      "topics": [
        "n_E_and_wa2R_EL"
      ]
    },
    {
      "page": "n_E2lat_lon",
      "title": "Convert n-vector to latitude and longitude",
      "topics": [
        "n_E2lat_lon"
      ]
    },
    {
      "page": "n_E2R_EN",
      "title": "Find the rotation matrix R_EN from n-vector",
      "topics": [
        "n_E2R_EN"
      ]
    },
    {
      "page": "n_EA_E_and_n_EB_E2p_AB_E",
      "title": "Find the delta position from two positions A and B",
      "topics": [
        "n_EA_E_and_n_EB_E2p_AB_E"
      ]
    },
    {
      "page": "n_EA_E_and_p_AB_E2n_EB_E",
      "title": "Find position B from position A and delta",
      "topics": [
        "n_EA_E_and_p_AB_E2n_EB_E"
      ]
    },
    {
      "page": "n_EB_E2p_EB_E",
      "title": "Convert n-vector to cartesian position vector in meters",
      "topics": [
        "n_EB_E2p_EB_E"
      ]
    },
    {
      "page": "nvctr",
      "title": "nvctr: non-singular geographical position calculations",
      "topics": [
        "nvctr-package",
        "nvctr"
      ]
    },
    {
      "page": "p_EB_E2n_EB_E",
      "title": "Convert cartesian position vector in meters to n-vector",
      "topics": [
        "p_EB_E2n_EB_E"
      ]
    },
    {
      "page": "R_Ee",
      "title": "Select the axes of the coordinate frame E",
      "topics": [
        "R_Ee"
      ]
    },
    {
      "page": "R_EL2n_E",
      "title": "Find n-vector from the rotation matrix (direction cosine matrix) 'R_EL'",
      "topics": [
        "R_EL2n_E"
      ]
    },
    {
      "page": "R_EN2n_E",
      "title": "Find n-vector from R_E",
      "topics": [
        "R_EN2n_E"
      ]
    },
    {
      "page": "R2xyz",
      "title": "Find the three rotation angles about new axes in the xyz order from a rotation matrix",
      "topics": [
        "R2xyz"
      ]
    },
    {
      "page": "R2zyx",
      "title": "Find the three angles about new axes in the zyx order from a rotation matrix",
      "topics": [
        "R2zyx"
      ]
    },
    {
      "page": "rad",
      "title": "Convert angle in degrees to radians.",
      "concept": [
        "helpers"
      ],
      "topics": [
        "rad"
      ]
    },
    {
      "page": "unit",
      "title": "Make input vector unit length, i.e. norm == 1",
      "concept": [
        "helpers"
      ],
      "topics": [
        "unit"
      ]
    },
    {
      "page": "xyz2R",
      "title": "Create a rotation matrix from 3 angles about new axes in the xyz order.",
      "topics": [
        "xyz2R"
      ]
    },
    {
      "page": "zyx2R",
      "title": "Create a rotation matrix from 3 angles about new axes in the zyx order.",
      "topics": [
        "zyx2R"
      ]
    }
  ],
  "_pkglogo": "https://github.com/euctrl-pru/nvctr/raw/HEAD/man/figures/logo.svg",
  "_readme": "https://github.com/euctrl-pru/nvctr/raw/HEAD/README.md",
  "_rundeps": [
    "magrittr",
    "pracma"
  ],
  "_vignettes": [
    {
      "source": "position-calculations.Rmd",
      "filename": "position-calculations.html",
      "title": "Simple and Exact Solutions to Position Calculation",
      "author": "Enrico Spinielli",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Example 1: A and B to delta",
        "Solution",
        "Example 2: B and delta to C",
        "Example 3: ECEF-vector to geodetic latitude",
        "Example 4: Geodetic latitude to ECEF-vector",
        "Example 5: Surface distance",
        "Spherical model",
        "Elliptical model (WGS-84 ellipsoid)",
        "Example 6: Interpolated position",
        "Example 7: Mean position (center/midpoint)",
        "Example 8: A and azimuth/distance to B",
        "Example 9: Intersection of two paths",
        "Example 10: Cross track distance (cross track error)",
        "Example 11: Cross track intersection",
        "References"
      ],
      "created": "2019-02-07 17:12:24",
      "modified": "2025-12-11 12:38:04",
      "commits": 25
    }
  ],
  "_score": 5.597695185925513,
  "_indexed": true,
  "_nocasepkg": "nvctr",
  "_universes": [
    "euctrl-pru",
    "espinielli"
  ],
  "_binaries": [
    {
      "r": "4.7.0",
      "os": "linux",
      "version": "0.1.7",
      "date": "2026-10-09T08:51:02.000Z",
      "distro": "resolute",
      "commit": "0a8092e2b66e332fee0c1525b659cb7ab2fc54f4",
      "fileid": "https://r2.ropensci.org/453566dafa076a57d682b51c1b324f99c632c6bd511c4a4a1109930a9457f4e9",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/euctrl-pru/actions/runs/37906903453"
    },
    {
      "r": "4.6.1",
      "os": "linux",
      "version": "0.1.7",
      "date": "2026-10-09T08:50:20.000Z",
      "distro": "resolute",
      "commit": "0a8092e2b66e332fee0c1525b659cb7ab2fc54f4",
      "fileid": "https://r2.ropensci.org/44bf3ff48850aaef8d43ddcae3a2008928d6ce42de5d89e00b61252a237c121c",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/euctrl-pru/actions/runs/37906903453"
    },
    {
      "r": "4.5.3",
      "os": "mac",
      "version": "0.1.7",
      "date": "2026-10-09T08:51:21.000Z",
      "commit": "0a8092e2b66e332fee0c1525b659cb7ab2fc54f4",
      "fileid": "https://r2.ropensci.org/396e6c8a4d29d0b35069a1e85b349caca7375757dc6dcf19beb890cae3df9587",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/euctrl-pru/actions/runs/37906903453"
    },
    {
      "r": "4.6.1",
      "os": "mac",
      "version": "0.1.7",
      "date": "2026-10-09T08:50:55.000Z",
      "commit": "0a8092e2b66e332fee0c1525b659cb7ab2fc54f4",
      "fileid": "https://r2.ropensci.org/bfb725cdff86955336323db6accea8fe1b281789a01f36431bd5406670944a3e",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/euctrl-pru/actions/runs/37906903453"
    },
    {
      "r": "4.6.0",
      "os": "wasm",
      "version": "0.1.7",
      "date": "2026-10-09T08:50:20.000Z",
      "commit": "0a8092e2b66e332fee0c1525b659cb7ab2fc54f4",
      "fileid": "https://r2.ropensci.org/a63c6fe6ba3ffa835ab0f78ab9e9c2ac9ad05e64ade6acd16dea4a3ed6f41dae",
      "status": "success",
      "buildurl": "https://github.com/r-universe/euctrl-pru/actions/runs/37906903453"
    },
    {
      "r": "4.7.0",
      "os": "win",
      "version": "0.1.7",
      "date": "2026-10-09T08:49:41.000Z",
      "commit": "0a8092e2b66e332fee0c1525b659cb7ab2fc54f4",
      "fileid": "https://r2.ropensci.org/cfad76987d63c7c1b445773a2c0e681c15f850e4257fa014ccc5175fbe61577d",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/euctrl-pru/actions/runs/37906903453"
    },
    {
      "r": "4.5.3",
      "os": "win",
      "version": "0.1.7",
      "date": "2026-10-09T08:49:55.000Z",
      "commit": "0a8092e2b66e332fee0c1525b659cb7ab2fc54f4",
      "fileid": "https://r2.ropensci.org/46b737ca2610b1d0c6f6457f462885c4caf32bfaa2a72fd96306fe421c18954a",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/euctrl-pru/actions/runs/37906903453"
    },
    {
      "r": "4.6.1",
      "os": "win",
      "version": "0.1.7",
      "date": "2026-10-09T08:49:41.000Z",
      "commit": "0a8092e2b66e332fee0c1525b659cb7ab2fc54f4",
      "fileid": "https://r2.ropensci.org/6c264cd2331224d5d83c4d588cbe26a69ab340d877f721c59aa7ce526c9a470d",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/euctrl-pru/actions/runs/37906903453"
    }
  ]
}