{"id":"v001","input":{"lat1":40.0,"lon1":-105.0,"height1":"250.0 m","lat2":40.018012369978514,"lon2":-105.0,"height2":"370.0 m"},"expect":{"result.slant_range.value":2003.6940389122071,"result.elevation_angle.value":3.4244572384745284,"result.ground_distance.value":2000.000000054,"result.height_difference.value":120.0,"result.flat_earth_range.value":2003.596765872814,"result.azimuth.value":0.0,"ok":true},"source":"add-navigation-and-geometry scenarios","sourceVersion":"2026","tolerance":{"result.slant_range.value":{"abs":1e-06},"result.elevation_angle.value":{"abs":1e-06},"result.ground_distance.value":{"abs":1e-06},"result.height_difference.value":{"abs":1e-06},"result.flat_earth_range.value":{"abs":1e-06},"result.azimuth.value":{"abs":1e-06}}}
{"id":"v002","input":{"lat1":51.47,"lon1":-0.4543,"height1":"25.0 m","lat2":51.5074,"lon2":-0.1278,"height2":"310.0 m"},"expect":{"result.slant_range.value":23058.848764773495,"result.elevation_angle.value":0.6048179377580166,"result.ground_distance.value":23056.495644911,"result.height_difference.value":285.0,"result.flat_earth_range.value":23058.257011834176,"ok":true},"source":"GeographicLib CartConvert -l, GeodSolve -i, and GeoidEval (egm96-15) (tools/vectors/gen_vector3d.py)","sourceVersion":"GeographicLib 2.x","tolerance":{"result.slant_range.value":{"abs":1e-06},"result.elevation_angle.value":{"abs":1e-06},"result.ground_distance.value":{"abs":1e-06},"result.height_difference.value":{"abs":1e-06},"result.flat_earth_range.value":{"abs":1e-06}}}
{"id":"v003","input":{"lat1":-33.8688,"lon1":151.2093,"height1":"5.0 m","lat2":-33.9399,"lon2":151.1753,"height2":"11000.0 m"},"expect":{"result.slant_range.value":13896.024347494882,"result.elevation_angle.value":52.26266982268429,"result.ground_distance.value":8490.272882047,"result.height_difference.value":10995.0,"result.flat_earth_range.value":13891.53550229861,"ok":true},"source":"GeographicLib CartConvert -l, GeodSolve -i, and GeoidEval (egm96-15) (tools/vectors/gen_vector3d.py)","sourceVersion":"GeographicLib 2.x","tolerance":{"result.slant_range.value":{"abs":1e-06},"result.elevation_angle.value":{"abs":1e-06},"result.ground_distance.value":{"abs":1e-06},"result.height_difference.value":{"abs":1e-06},"result.flat_earth_range.value":{"abs":1e-06}}}
{"id":"v004","input":{"lat1":64.1466,"lon1":-21.9426,"height1":"0.0 m","lat2":65.6835,"lon2":-18.1262,"height2":"2500.0 m"},"expect":{"result.slant_range.value":248929.58050182316,"result.elevation_angle.value":-0.540165524849297,"result.ground_distance.value":248884.086717726,"result.height_difference.value":2500.0,"result.flat_earth_range.value":248896.64244685293,"ok":true},"source":"GeographicLib CartConvert -l, GeodSolve -i, and GeoidEval (egm96-15) (tools/vectors/gen_vector3d.py)","sourceVersion":"GeographicLib 2.x","tolerance":{"result.slant_range.value":{"abs":1e-06},"result.elevation_angle.value":{"abs":1e-06},"result.ground_distance.value":{"abs":1e-06},"result.height_difference.value":{"abs":1e-06},"result.flat_earth_range.value":{"abs":1e-06}}}
{"id":"v005","input":{"lat1":0.0,"lon1":179.9,"height1":"100.0 m","lat2":0.1,"lon2":-179.9,"height2":"35786000.0 m"},"expect":{"result.slant_range.value":35785957.142083995,"result.elevation_angle.value":89.73659264315113,"result.ground_distance.value":24858.54719217,"result.height_difference.value":35785900.0,"result.flat_earth_range.value":35785908.63394932,"ok":true},"source":"GeographicLib CartConvert -l, GeodSolve -i, and GeoidEval (egm96-15) (tools/vectors/gen_vector3d.py)","sourceVersion":"GeographicLib 2.x","tolerance":{"result.slant_range.value":{"abs":1e-05},"result.elevation_angle.value":{"abs":1e-05},"result.ground_distance.value":{"abs":1e-05},"result.height_difference.value":{"abs":1e-05},"result.flat_earth_range.value":{"abs":1e-05}}}
{"id":"v006","input":{"lat1":39.7392,"lon1":-104.9903,"height1":"1609.0 m","reference1":"msl","lat2":39.9,"lon2":-105.2,"height2":"2500.0 m","reference2":"msl","geoid":"egm96"},"expect":{"result.slant_range.value":25343.907300781997,"result.height_difference.value":892.1914000000002,"ok":true},"source":"GeographicLib CartConvert -l, GeodSolve -i, and GeoidEval (egm96-15) (tools/vectors/gen_vector3d.py)","sourceVersion":"GeographicLib 2.x","tolerance":{"result.slant_range.value":{"abs":0.0001},"result.height_difference.value":{"abs":0.0001}}}
{"id":"v007","input":{"lat1":39.7392,"lon1":-104.9903,"height1":"1609.0 m","lat2":39.9,"lon2":-105.2,"height2":"2500.0 m","reference2":"msl","geoid":"egm96"},"expect":{"result.slant_range.value":25343.348518323095,"ok":true},"source":"GeographicLib CartConvert -l, GeodSolve -i, and GeoidEval (egm96-15) (tools/vectors/gen_vector3d.py)","sourceVersion":"GeographicLib 2.x","tolerance":{"result.slant_range.value":{"abs":0.0001}}}
{"id":"v008","input":{"lat1":40,"lon1":-105,"height1":"250 m","lat2":40.01,"lon2":-105,"height2":"370 m","reference2":"msl"},"expect":{"ok":false,"error.code":"INVALID_INPUT","error.field":"/geoid"},"source":"add-navigation-and-geometry scenarios","sourceVersion":"2026","tolerance":{}}
{"id": "v009", "input": {"lat1": 40.0, "lon1": -105.0, "height1": "1600 m", "lat2": 40.1, "lon2": -105.0, "height2": "1700 m", "reference1": "hae", "reference2": "hae"}, "expect": {"ok": true, "result.slant_range.value": 11106.88792781773, "result.height_difference.value": 100.0, "result.elevation_angle.value": 0.46586471527313866}, "source": "PROJ through pyproj, EPSG:4979 to EPSG:4978 (WGS 84 geodetic to geocentric), with the east-north-up rotation applied from its own definition (tools/vectors/gen_nav_vector.py)", "sourceVersion": "pyproj 3.6.1 / PROJ 9.3.0", "tolerance": {"result.slant_range.value": {"abs": 1e-06}, "result.height_difference.value": {"abs": 1e-09}, "result.elevation_angle.value": {"abs": 1e-09}}}
{"id": "v010", "input": {"lat1": 40.0, "lon1": -105.0, "height1": "0 m", "lat2": 40.0, "lon2": -105.0, "height2": "1000 m", "reference1": "hae", "reference2": "hae"}, "expect": {"ok": true, "result.slant_range.value": 1000.0000000003433, "result.height_difference.value": 1000.0, "result.elevation_angle.value": 89.99999999998694}, "source": "PROJ through pyproj, EPSG:4979 to EPSG:4978 (WGS 84 geodetic to geocentric), with the east-north-up rotation applied from its own definition (tools/vectors/gen_nav_vector.py)", "sourceVersion": "pyproj 3.6.1 / PROJ 9.3.0", "tolerance": {"result.slant_range.value": {"abs": 1e-06}, "result.height_difference.value": {"abs": 1e-09}, "result.elevation_angle.value": {"abs": 1e-09}}}
{"id": "v011", "input": {"lat1": 0.0, "lon1": 0.0, "height1": "0 m", "lat2": 0.0, "lon2": 1.0, "height2": "0 m", "reference1": "hae", "reference2": "hae"}, "expect": {"ok": true, "result.slant_range.value": 111318.07788798446, "result.height_difference.value": 0.0, "result.elevation_angle.value": -0.49999999999975836}, "source": "PROJ through pyproj, EPSG:4979 to EPSG:4978 (WGS 84 geodetic to geocentric), with the east-north-up rotation applied from its own definition (tools/vectors/gen_nav_vector.py)", "sourceVersion": "pyproj 3.6.1 / PROJ 9.3.0", "tolerance": {"result.slant_range.value": {"abs": 1e-06}, "result.height_difference.value": {"abs": 1e-09}, "result.elevation_angle.value": {"abs": 1e-09}}}
{"id": "v012", "input": {"lat1": 51.47, "lon1": -0.4543, "height1": "25 m", "lat2": 51.5074, "lon2": -0.1278, "height2": "310 m", "reference1": "hae", "reference2": "hae"}, "expect": {"ok": true, "result.slant_range.value": 23058.84876477392, "result.height_difference.value": 285.0, "result.elevation_angle.value": 0.6048179377581988}, "source": "PROJ through pyproj, EPSG:4979 to EPSG:4978 (WGS 84 geodetic to geocentric), with the east-north-up rotation applied from its own definition (tools/vectors/gen_nav_vector.py)", "sourceVersion": "pyproj 3.6.1 / PROJ 9.3.0", "tolerance": {"result.slant_range.value": {"abs": 1e-06}, "result.height_difference.value": {"abs": 1e-09}, "result.elevation_angle.value": {"abs": 1e-09}}}
{"id": "v013", "input": {"lat1": -33.8688, "lon1": 151.2093, "height1": "58 m", "lat2": -33.9399, "lon2": 151.1753, "height2": "6 m", "reference1": "hae", "reference2": "hae"}, "expect": {"ok": true, "result.slant_range.value": 8490.474213184129, "result.height_difference.value": -52.0, "result.elevation_angle.value": -0.3891583702886939}, "source": "PROJ through pyproj, EPSG:4979 to EPSG:4978 (WGS 84 geodetic to geocentric), with the east-north-up rotation applied from its own definition (tools/vectors/gen_nav_vector.py)", "sourceVersion": "pyproj 3.6.1 / PROJ 9.3.0", "tolerance": {"result.slant_range.value": {"abs": 1e-06}, "result.height_difference.value": {"abs": 1e-09}, "result.elevation_angle.value": {"abs": 1e-09}}}
{"id": "v014", "input": {"lat1": 35.6762, "lon1": 139.6503, "height1": "40 m", "lat2": 35.5494, "lon2": 139.7798, "height2": "5 m", "reference1": "hae", "reference2": "hae"}, "expect": {"ok": true, "result.slant_range.value": 18319.24642164551, "result.height_difference.value": -35.0, "result.elevation_angle.value": -0.1918709863324636}, "source": "PROJ through pyproj, EPSG:4979 to EPSG:4978 (WGS 84 geodetic to geocentric), with the east-north-up rotation applied from its own definition (tools/vectors/gen_nav_vector.py)", "sourceVersion": "pyproj 3.6.1 / PROJ 9.3.0", "tolerance": {"result.slant_range.value": {"abs": 1e-06}, "result.height_difference.value": {"abs": 1e-09}, "result.elevation_angle.value": {"abs": 1e-09}}}
{"id": "v015", "input": {"lat1": 89.0, "lon1": 0.0, "height1": "100 m", "lat2": 89.0, "lon2": 180.0, "height2": "100 m", "reference1": "hae", "reference2": "hae"}, "expect": {"ok": true, "result.slant_range.value": 223379.87919275844, "result.height_difference.value": 0.0, "result.elevation_angle.value": -1.0000000000000049}, "source": "PROJ through pyproj, EPSG:4979 to EPSG:4978 (WGS 84 geodetic to geocentric), with the east-north-up rotation applied from its own definition (tools/vectors/gen_nav_vector.py)", "sourceVersion": "pyproj 3.6.1 / PROJ 9.3.0", "tolerance": {"result.slant_range.value": {"abs": 1e-06}, "result.height_difference.value": {"abs": 1e-09}, "result.elevation_angle.value": {"abs": 1e-09}}}
{"id": "v016", "input": {"lat1": 25.2048, "lon1": 55.2708, "height1": "828 m", "lat2": 25.2532, "lon2": 55.3657, "height2": "10 m", "reference1": "hae", "reference2": "hae"}, "expect": {"ok": true, "result.slant_range.value": 10994.0673974715, "result.height_difference.value": -818.0, "result.elevation_angle.value": -4.316238824518631}, "source": "PROJ through pyproj, EPSG:4979 to EPSG:4978 (WGS 84 geodetic to geocentric), with the east-north-up rotation applied from its own definition (tools/vectors/gen_nav_vector.py)", "sourceVersion": "pyproj 3.6.1 / PROJ 9.3.0", "tolerance": {"result.slant_range.value": {"abs": 1e-06}, "result.height_difference.value": {"abs": 1e-09}, "result.elevation_angle.value": {"abs": 1e-09}}}
{"id": "v017", "input": {"lat1": -22.9068, "lon1": -43.1729, "height1": "710 m", "lat2": -22.8099, "lon2": -43.2436, "height2": "5 m", "reference1": "hae", "reference2": "hae"}, "expect": {"ok": true, "result.slant_range.value": 12973.66422070213, "result.height_difference.value": -705.0, "result.elevation_angle.value": -3.1734160660032518}, "source": "PROJ through pyproj, EPSG:4979 to EPSG:4978 (WGS 84 geodetic to geocentric), with the east-north-up rotation applied from its own definition (tools/vectors/gen_nav_vector.py)", "sourceVersion": "pyproj 3.6.1 / PROJ 9.3.0", "tolerance": {"result.slant_range.value": {"abs": 1e-06}, "result.height_difference.value": {"abs": 1e-09}, "result.elevation_angle.value": {"abs": 1e-09}}}
{"id": "v018", "input": {"lat1": 64.1466, "lon1": -21.9426, "height1": "50 m", "lat2": 63.985, "lon2": -22.6056, "height2": "40 m", "reference1": "hae", "reference2": "hae"}, "expect": {"ok": true, "result.slant_range.value": 37041.25609470883, "result.height_difference.value": -10.0, "result.elevation_angle.value": -0.1814397125732872}, "source": "PROJ through pyproj, EPSG:4979 to EPSG:4978 (WGS 84 geodetic to geocentric), with the east-north-up rotation applied from its own definition (tools/vectors/gen_nav_vector.py)", "sourceVersion": "pyproj 3.6.1 / PROJ 9.3.0", "tolerance": {"result.slant_range.value": {"abs": 1e-06}, "result.height_difference.value": {"abs": 1e-09}, "result.elevation_angle.value": {"abs": 1e-09}}}
{"id": "v019", "input": {"lat1": 1.3521, "lon1": 103.8198, "height1": "100 m", "lat2": 1.3644, "lon2": 103.9915, "height2": "7 m", "reference1": "hae", "reference2": "hae"}, "expect": {"ok": true, "result.slant_range.value": 19156.943248840595, "result.height_difference.value": -93.0, "result.elevation_angle.value": -0.3641969058672908}, "source": "PROJ through pyproj, EPSG:4979 to EPSG:4978 (WGS 84 geodetic to geocentric), with the east-north-up rotation applied from its own definition (tools/vectors/gen_nav_vector.py)", "sourceVersion": "pyproj 3.6.1 / PROJ 9.3.0", "tolerance": {"result.slant_range.value": {"abs": 1e-06}, "result.height_difference.value": {"abs": 1e-09}, "result.elevation_angle.value": {"abs": 1e-09}}}
{"id": "v020", "input": {"lat1": 60.0, "lon1": 5.0, "height1": "300 m", "lat2": 60.5, "lon2": 7.0, "height2": "50 m", "reference1": "hae", "reference2": "hae"}, "expect": {"ok": true, "result.slant_range.value": 123972.56842357124, "result.height_difference.value": -250.0, "result.elevation_angle.value": -0.6711470244802336}, "source": "PROJ through pyproj, EPSG:4979 to EPSG:4978 (WGS 84 geodetic to geocentric), with the east-north-up rotation applied from its own definition (tools/vectors/gen_nav_vector.py)", "sourceVersion": "pyproj 3.6.1 / PROJ 9.3.0", "tolerance": {"result.slant_range.value": {"abs": 1e-06}, "result.height_difference.value": {"abs": 1e-09}, "result.elevation_angle.value": {"abs": 1e-09}}}
