{"id":"v001","input":{"sensor_width":"13.2 mm","sensor_height":"8.8 mm","focal_length":"8.8 mm","image_width":5472,"image_height":3648,"height":"100 m","pitch":"45 deg"},"expect":{"result.gsd_center.value":3.8766819143999305,"result.gsd_center_along.value":5.482456243339584,"result.gsd_near.value":2.4370925485897033,"result.gsd_far.value":21.917808219183144,"result.gsd_nadir.value":2.741228070175438,"result.near_distance.value":33.33333333333333,"result.far_distance.value":300.0,"result.footprint.0.ahead.value":33.33333333333333,"result.footprint.0.right.value":-70.71067811865474,"result.footprint.2.ahead.value":300.0,"result.footprint.2.right.value":212.1320343559642,"ok":true},"source":"Tilted-photo geometry (Wolf, Dewitt & Wilkinson 2014, ch. 10) in closed angle form, evaluated in Python (tools/vectors/gen_drone.py)","sourceVersion":"4th edition (2014)","tolerance":{"result.gsd_center.value":{"rel":1e-09,"abs":1e-09},"result.gsd_center_along.value":{"rel":1e-09,"abs":1e-09},"result.gsd_near.value":{"rel":1e-09,"abs":1e-09},"result.gsd_far.value":{"rel":1e-09,"abs":1e-09},"result.gsd_nadir.value":{"rel":1e-09,"abs":1e-09},"result.near_distance.value":{"rel":1e-09,"abs":1e-09},"result.far_distance.value":{"rel":1e-09,"abs":1e-09},"result.footprint.0.ahead.value":{"rel":1e-09,"abs":1e-09},"result.footprint.0.right.value":{"rel":1e-09,"abs":1e-09},"result.footprint.2.ahead.value":{"rel":1e-09,"abs":1e-09},"result.footprint.2.right.value":{"rel":1e-09,"abs":1e-09}}}
{"id":"v002","input":{"sensor_width":"13.2 mm","sensor_height":"8.8 mm","focal_length":"8.8 mm","image_width":5472,"image_height":3648,"height":"100 m","pitch":"0 deg"},"expect":{"result.gsd_center.value":2.741228070175438,"result.gsd_center_along.value":2.741228070175438,"result.gsd_near.value":2.74122807017676,"result.gsd_far.value":2.74122807017676,"result.gsd_nadir.value":2.741228070175438,"result.near_distance.value":-50.000000000000014,"result.far_distance.value":50.000000000000014,"result.footprint.0.ahead.value":-50.000000000000014,"result.footprint.0.right.value":-75.0,"result.footprint.2.ahead.value":50.000000000000014,"result.footprint.2.right.value":75.0,"ok":true},"source":"Tilted-photo geometry (Wolf, Dewitt & Wilkinson 2014, ch. 10) in closed angle form, evaluated in Python (tools/vectors/gen_drone.py)","sourceVersion":"4th edition (2014)","tolerance":{"result.gsd_center.value":{"rel":1e-09,"abs":1e-09},"result.gsd_center_along.value":{"rel":1e-09,"abs":1e-09},"result.gsd_near.value":{"rel":1e-09,"abs":1e-09},"result.gsd_far.value":{"rel":1e-09,"abs":1e-09},"result.gsd_nadir.value":{"rel":1e-09,"abs":1e-09},"result.near_distance.value":{"rel":1e-09,"abs":1e-09},"result.far_distance.value":{"rel":1e-09,"abs":1e-09},"result.footprint.0.ahead.value":{"rel":1e-09,"abs":1e-09},"result.footprint.0.right.value":{"rel":1e-09,"abs":1e-09},"result.footprint.2.ahead.value":{"rel":1e-09,"abs":1e-09},"result.footprint.2.right.value":{"rel":1e-09,"abs":1e-09}}}
{"id":"v003","input":{"sensor_width":"13.2 mm","sensor_height":"8.8 mm","focal_length":"8.8 mm","image_width":5472,"image_height":3648,"height":"60 m","pitch":"30 deg"},"expect":{"result.gsd_center.value":1.8991785170711368,"result.gsd_center_along.value":2.192982469872362,"result.gsd_near.value":1.3206921599218102,"result.gsd_far.value":4.333138392519231,"result.gsd_nadir.value":1.6447368421052628,"result.near_distance.value":3.6013856609693753,"result.far_distance.value":90.87411293369664,"result.footprint.0.ahead.value":3.6013856609693753,"result.footprint.0.right.value":-40.321662793163256,"result.footprint.2.ahead.value":90.87411293369664,"result.footprint.2.right.value":73.04893552043598,"ok":true},"source":"Tilted-photo geometry (Wolf, Dewitt & Wilkinson 2014, ch. 10) in closed angle form, evaluated in Python (tools/vectors/gen_drone.py)","sourceVersion":"4th edition (2014)","tolerance":{"result.gsd_center.value":{"rel":1e-09,"abs":1e-09},"result.gsd_center_along.value":{"rel":1e-09,"abs":1e-09},"result.gsd_near.value":{"rel":1e-09,"abs":1e-09},"result.gsd_far.value":{"rel":1e-09,"abs":1e-09},"result.gsd_nadir.value":{"rel":1e-09,"abs":1e-09},"result.near_distance.value":{"rel":1e-09,"abs":1e-09},"result.far_distance.value":{"rel":1e-09,"abs":1e-09},"result.footprint.0.ahead.value":{"rel":1e-09,"abs":1e-09},"result.footprint.0.right.value":{"rel":1e-09,"abs":1e-09},"result.footprint.2.ahead.value":{"rel":1e-09,"abs":1e-09},"result.footprint.2.right.value":{"rel":1e-09,"abs":1e-09}}}
{"id":"v004","input":{"sensor_width":"17.3 mm","sensor_height":"13.0 mm","focal_length":"12.29 mm","image_width":5280,"image_height":3956,"height":"80 m","pitch":"20 deg"},"expect":{"result.gsd_center.value":2.269679150804212,"result.gsd_center_along.value":2.415342108623264,"result.gsd_near.value":1.698628129446611,"result.gsd_far.value":3.703733998592895,"result.gsd_nadir.value":2.1328007495623447,"result.near_distance.value":-11.063496602387126,"result.far_distance.value":88.4561084325054,"result.footprint.0.ahead.value":-11.063496602387126,"result.footprint.0.right.value":-50.24704832253346,"result.footprint.2.ahead.value":88.4561084325054,"result.footprint.2.right.value":74.20361364779947,"ok":true},"source":"Tilted-photo geometry (Wolf, Dewitt & Wilkinson 2014, ch. 10) in closed angle form, evaluated in Python (tools/vectors/gen_drone.py)","sourceVersion":"4th edition (2014)","tolerance":{"result.gsd_center.value":{"rel":1e-09,"abs":1e-09},"result.gsd_center_along.value":{"rel":1e-09,"abs":1e-09},"result.gsd_near.value":{"rel":1e-09,"abs":1e-09},"result.gsd_far.value":{"rel":1e-09,"abs":1e-09},"result.gsd_nadir.value":{"rel":1e-09,"abs":1e-09},"result.near_distance.value":{"rel":1e-09,"abs":1e-09},"result.far_distance.value":{"rel":1e-09,"abs":1e-09},"result.footprint.0.ahead.value":{"rel":1e-09,"abs":1e-09},"result.footprint.0.right.value":{"rel":1e-09,"abs":1e-09},"result.footprint.2.ahead.value":{"rel":1e-09,"abs":1e-09},"result.footprint.2.right.value":{"rel":1e-09,"abs":1e-09}}}
{"id":"v005","input":{"sensor_width":"6.17 mm","sensor_height":"4.55 mm","focal_length":"4.5 mm","image_width":4000,"image_height":3000,"height":"50 m","pitch":"50 deg"},"expect":{"result.gsd_center.value":2.666337781035762,"result.gsd_center_along.value":4.148085389472556,"result.gsd_near.value":1.6157106634206997,"result.gsd_far.value":26.225403548068016,"result.gsd_nadir.value":1.713888888888889,"result.near_distance.value":21.41026656777065,"result.far_distance.value":213.49674365397863,"result.footprint.0.ahead.value":21.41026656777065,"result.footprint.0.right.value":-33.27727540466744,"result.footprint.2.ahead.value":213.49674365397863,"result.footprint.2.right.value":134.1545667984536,"ok":true},"source":"Tilted-photo geometry (Wolf, Dewitt & Wilkinson 2014, ch. 10) in closed angle form, evaluated in Python (tools/vectors/gen_drone.py)","sourceVersion":"4th edition (2014)","tolerance":{"result.gsd_center.value":{"rel":1e-09,"abs":1e-09},"result.gsd_center_along.value":{"rel":1e-09,"abs":1e-09},"result.gsd_near.value":{"rel":1e-09,"abs":1e-09},"result.gsd_far.value":{"rel":1e-09,"abs":1e-09},"result.gsd_nadir.value":{"rel":1e-09,"abs":1e-09},"result.near_distance.value":{"rel":1e-09,"abs":1e-09},"result.far_distance.value":{"rel":1e-09,"abs":1e-09},"result.footprint.0.ahead.value":{"rel":1e-09,"abs":1e-09},"result.footprint.0.right.value":{"rel":1e-09,"abs":1e-09},"result.footprint.2.ahead.value":{"rel":1e-09,"abs":1e-09},"result.footprint.2.right.value":{"rel":1e-09,"abs":1e-09}}}
{"id":"v006","input":{"sensor_width":"35.9 mm","sensor_height":"24.0 mm","focal_length":"35.0 mm","image_width":8192,"image_height":5460,"height":"150 m","pitch":"35 deg"},"expect":{"result.gsd_center.value":2.2927843054131003,"result.gsd_center_along.value":2.7989728229357524,"result.gsd_near.value":1.8202715212034093,"result.gsd_far.value":4.846215490115924,"result.gsd_nadir.value":1.8781389508928572,"result.near_distance.value":43.225389966829574,"result.far_distance.value":205.88730561634168,"result.footprint.0.ahead.value":43.225389966829574,"result.footprint.0.right.value":-75.7314970988088,"result.footprint.2.ahead.value":205.88730561634168,"result.footprint.2.right.value":123.58057716319894,"ok":true},"source":"Tilted-photo geometry (Wolf, Dewitt & Wilkinson 2014, ch. 10) in closed angle form, evaluated in Python (tools/vectors/gen_drone.py)","sourceVersion":"4th edition (2014)","tolerance":{"result.gsd_center.value":{"rel":1e-09,"abs":1e-09},"result.gsd_center_along.value":{"rel":1e-09,"abs":1e-09},"result.gsd_near.value":{"rel":1e-09,"abs":1e-09},"result.gsd_far.value":{"rel":1e-09,"abs":1e-09},"result.gsd_nadir.value":{"rel":1e-09,"abs":1e-09},"result.near_distance.value":{"rel":1e-09,"abs":1e-09},"result.far_distance.value":{"rel":1e-09,"abs":1e-09},"result.footprint.0.ahead.value":{"rel":1e-09,"abs":1e-09},"result.footprint.0.right.value":{"rel":1e-09,"abs":1e-09},"result.footprint.2.ahead.value":{"rel":1e-09,"abs":1e-09},"result.footprint.2.right.value":{"rel":1e-09,"abs":1e-09}}}
{"id":"v007","input":{"sensor_width":"23.5 mm","sensor_height":"15.6 mm","focal_length":"16.0 mm","image_width":6000,"image_height":4000,"height":"120 m","pitch":"10 deg"},"expect":{"result.gsd_center.value":2.9828156724143757,"result.gsd_center_along.value":3.028830413529704,"result.gsd_near.value":2.568414063294,"result.gsd_far.value":3.625129110835701,"result.gsd_nadir.value":2.9375,"result.near_distance.value":-34.3850444211354,"result.far_distance.value":87.15065605923841,"result.footprint.0.ahead.value":-34.3850444211354,"result.footprint.0.right.value":-82.40130332438598,"result.footprint.2.ahead.value":87.15065605923841,"result.footprint.2.right.value":97.89988593008702,"ok":true},"source":"Tilted-photo geometry (Wolf, Dewitt & Wilkinson 2014, ch. 10) in closed angle form, evaluated in Python (tools/vectors/gen_drone.py)","sourceVersion":"4th edition (2014)","tolerance":{"result.gsd_center.value":{"rel":1e-09,"abs":1e-09},"result.gsd_center_along.value":{"rel":1e-09,"abs":1e-09},"result.gsd_near.value":{"rel":1e-09,"abs":1e-09},"result.gsd_far.value":{"rel":1e-09,"abs":1e-09},"result.gsd_nadir.value":{"rel":1e-09,"abs":1e-09},"result.near_distance.value":{"rel":1e-09,"abs":1e-09},"result.far_distance.value":{"rel":1e-09,"abs":1e-09},"result.footprint.0.ahead.value":{"rel":1e-09,"abs":1e-09},"result.footprint.0.right.value":{"rel":1e-09,"abs":1e-09},"result.footprint.2.ahead.value":{"rel":1e-09,"abs":1e-09},"result.footprint.2.right.value":{"rel":1e-09,"abs":1e-09}}}
{"id":"v008","input":{"sensor_width":"13.2 mm","sensor_height":"8.8 mm","focal_length":"8.8 mm","image_width":5472,"image_height":3648,"height":"45 m","pitch":"55 deg"},"expect":{"result.gsd_center.value":2.1506333827562885,"result.gsd_center_along.value":3.749515023386607,"result.gsd_near.value":1.2764833298103184,"result.gsd_far.value":45.800853157612664,"result.gsd_nadir.value":1.2335526315789471,"result.near_distance.value":24.366894440527627,"result.far_distance.value":303.45845192941874,"result.footprint.0.ahead.value":24.366894440527627,"result.footprint.0.right.value":-34.328348272297006,"result.footprint.2.ahead.value":303.45845192941874,"result.footprint.2.right.value":205.79216316791482,"ok":true},"source":"Tilted-photo geometry (Wolf, Dewitt & Wilkinson 2014, ch. 10) in closed angle form, evaluated in Python (tools/vectors/gen_drone.py)","sourceVersion":"4th edition (2014)","tolerance":{"result.gsd_center.value":{"rel":1e-09,"abs":1e-09},"result.gsd_center_along.value":{"rel":1e-09,"abs":1e-09},"result.gsd_near.value":{"rel":1e-09,"abs":1e-09},"result.gsd_far.value":{"rel":1e-09,"abs":1e-09},"result.gsd_nadir.value":{"rel":1e-09,"abs":1e-09},"result.near_distance.value":{"rel":1e-09,"abs":1e-09},"result.far_distance.value":{"rel":1e-09,"abs":1e-09},"result.footprint.0.ahead.value":{"rel":1e-09,"abs":1e-09},"result.footprint.0.right.value":{"rel":1e-09,"abs":1e-09},"result.footprint.2.ahead.value":{"rel":1e-09,"abs":1e-09},"result.footprint.2.right.value":{"rel":1e-09,"abs":1e-09}}}
{"id":"v009","input":{"sensor_width":"17.3 mm","sensor_height":"13.0 mm","focal_length":"12.29 mm","image_width":5280,"image_height":3956,"height":"200 m","pitch":"40 deg"},"expect":{"result.gsd_center.value":6.960434112930081,"result.gsd_center_along.value":9.086201541614969,"result.gsd_near.value":4.359564816914485,"result.gsd_far.value":29.357977830659365,"result.gsd_nadir.value":5.332001873905862,"result.near_distance.value":42.97230334805024,"result.far_distance.value":491.89284641933034,"result.footprint.0.ahead.value":42.97230334805024,"result.footprint.0.right.value":-127.27320923588759,"result.footprint.2.ahead.value":491.89284641933034,"result.footprint.2.right.value":330.3691301791546,"ok":true},"source":"Tilted-photo geometry (Wolf, Dewitt & Wilkinson 2014, ch. 10) in closed angle form, evaluated in Python (tools/vectors/gen_drone.py)","sourceVersion":"4th edition (2014)","tolerance":{"result.gsd_center.value":{"rel":1e-09,"abs":1e-09},"result.gsd_center_along.value":{"rel":1e-09,"abs":1e-09},"result.gsd_near.value":{"rel":1e-09,"abs":1e-09},"result.gsd_far.value":{"rel":1e-09,"abs":1e-09},"result.gsd_nadir.value":{"rel":1e-09,"abs":1e-09},"result.near_distance.value":{"rel":1e-09,"abs":1e-09},"result.far_distance.value":{"rel":1e-09,"abs":1e-09},"result.footprint.0.ahead.value":{"rel":1e-09,"abs":1e-09},"result.footprint.0.right.value":{"rel":1e-09,"abs":1e-09},"result.footprint.2.ahead.value":{"rel":1e-09,"abs":1e-09},"result.footprint.2.right.value":{"rel":1e-09,"abs":1e-09}}}
{"id":"v010","input":{"sensor_width":"23.5 mm","sensor_height":"15.6 mm","focal_length":"16.0 mm","image_width":6000,"image_height":4000,"height":"30 m","pitch":"60 deg"},"expect":{"result.gsd_center.value":1.4687499999999996,"result.gsd_center_along.value":2.937500132016879,"result.gsd_near.value":0.8637327345400792,"result.gsd_far.value":120.95846169786455,"result.gsd_nadir.value":0.734375,"result.near_distance.value":20.24345857517273,"result.far_distance.value":427.8645799687481,"result.footprint.0.ahead.value":20.24345857517273,"result.footprint.0.right.value":-23.89020970575318,"result.footprint.2.ahead.value":427.8645799687481,"result.footprint.2.right.value":283.132109292613,"ok":true},"source":"Tilted-photo geometry (Wolf, Dewitt & Wilkinson 2014, ch. 10) in closed angle form, evaluated in Python (tools/vectors/gen_drone.py)","sourceVersion":"4th edition (2014)","tolerance":{"result.gsd_center.value":{"rel":1e-09,"abs":1e-09},"result.gsd_center_along.value":{"rel":1e-09,"abs":1e-09},"result.gsd_near.value":{"rel":1e-09,"abs":1e-09},"result.gsd_far.value":{"rel":1e-09,"abs":1e-09},"result.gsd_nadir.value":{"rel":1e-09,"abs":1e-09},"result.near_distance.value":{"rel":1e-09,"abs":1e-09},"result.far_distance.value":{"rel":1e-09,"abs":1e-09},"result.footprint.0.ahead.value":{"rel":1e-09,"abs":1e-09},"result.footprint.0.right.value":{"rel":1e-09,"abs":1e-09},"result.footprint.2.ahead.value":{"rel":1e-09,"abs":1e-09},"result.footprint.2.right.value":{"rel":1e-09,"abs":1e-09}}}
{"id":"v011","input":{"sensor_width":"13.2 mm","sensor_height":"8.8 mm","focal_length":"8.8 mm","image_width":5472,"image_height":3648,"height":"100 m","pitch":"75 deg"},"expect":{"meta.warnings.0.code":"BEYOND_HORIZON","result.horizon":"the far edge reaches the horizon","ok":true},"source":"add-drone-suite scenarios","sourceVersion":"2026","tolerance":{}}
{"id":"v012","input":{"sensor_width":"13.2 mm","focal_length":"8.8 mm","image_width":5472,"image_height":3648,"height":"100 m","pitch":"45 deg"},"expect":{"result.near_distance.value":33.33333333333334,"ok":true},"source":"Tilted-photo geometry (Wolf, Dewitt & Wilkinson 2014, ch. 10) in closed angle form, evaluated in Python (tools/vectors/gen_drone.py)","sourceVersion":"4th edition (2014)","tolerance":{"result.near_distance.value":{"rel":1e-09,"abs":1e-09}}}
{"id":"v013","input":{"sensor_width":"13.2 mm","sensor_height":"8.8 mm","focal_length":"8.8 mm","image_width":5472,"image_height":3648,"height":"100 m","pitch":"90 deg"},"expect":{"ok":false,"error.code":"INVALID_INPUT"},"source":"add-drone-suite scenarios","sourceVersion":"2026","tolerance":{}}
{"id":"v014","input":{"sensor_width":"13.2 mm","focal_length":"8.8 mm","image_width":5472,"height":"100 m","pitch":"45 deg"},"expect":{"ok":false,"error.code":"INVALID_INPUT"},"source":"add-drone-suite scenarios","sourceVersion":"2026","tolerance":{}}
