{"id":"v001","input":{"points":[{"northing":0,"easting":0},{"northing":0,"easting":100},{"northing":50,"easting":100},{"northing":50,"easting":0}]},"expect":{"result.area.value":5000.0,"result.acres.value":0.1147842056932966,"result.hectares.value":0.04645152,"result.perimeter.value":300.0,"result.orientation":"counterclockwise","ok":true},"source":"add-survey-suite scenarios","sourceVersion":"2026","tolerance":{"result.area.value":{"rel":1e-11,"abs":1e-09},"result.acres.value":{"rel":1e-11,"abs":1e-09},"result.hectares.value":{"rel":1e-11,"abs":1e-09},"result.perimeter.value":{"rel":1e-11,"abs":1e-09}}}
{"id":"v002","input":{"points":[{"northing":1000,"easting":1000},{"northing":1200,"easting":1100},{"northing":1150,"easting":1400},{"northing":900,"easting":1300}]},"expect":{"result.area.value":75000.0,"result.acres.value":1.721763085399449,"result.hectares.value":0.6967728,"result.perimeter.value":1113.2309306384532,"result.orientation":"clockwise","ok":true},"source":"Surveying formulas (Ghilani & Wolf 2018) evaluated in Python (tools/vectors/gen_survey.py)","sourceVersion":"15th edition (2018)","tolerance":{"result.area.value":{"rel":1e-11,"abs":1e-09},"result.acres.value":{"rel":1e-11,"abs":1e-09},"result.hectares.value":{"rel":1e-11,"abs":1e-09},"result.perimeter.value":{"rel":1e-11,"abs":1e-09}}}
{"id":"v003","input":{"points":[{"northing":0,"easting":0},{"northing":300,"easting":0},{"northing":0,"easting":400}]},"expect":{"result.area.value":60000.0,"result.acres.value":1.3774104683195592,"result.hectares.value":0.5574182400000001,"result.perimeter.value":1200.0,"result.orientation":"clockwise","ok":true},"source":"Surveying formulas (Ghilani & Wolf 2018) evaluated in Python (tools/vectors/gen_survey.py)","sourceVersion":"15th edition (2018)","tolerance":{"result.area.value":{"rel":1e-11,"abs":1e-09},"result.acres.value":{"rel":1e-11,"abs":1e-09},"result.hectares.value":{"rel":1e-11,"abs":1e-09},"result.perimeter.value":{"rel":1e-11,"abs":1e-09}}}
{"id":"v004","input":{"points":[{"northing":5000,"easting":5000},{"northing":5000,"easting":5660},{"northing":4340,"easting":5660},{"northing":4340,"easting":5000}]},"expect":{"result.area.value":435600.0,"result.acres.value":10.0,"result.hectares.value":4.0468564224,"result.perimeter.value":2640.0,"result.orientation":"clockwise","ok":true},"source":"Surveying formulas (Ghilani & Wolf 2018) evaluated in Python (tools/vectors/gen_survey.py)","sourceVersion":"15th edition (2018)","tolerance":{"result.area.value":{"rel":1e-11,"abs":1e-09},"result.acres.value":{"rel":1e-11,"abs":1e-09},"result.hectares.value":{"rel":1e-11,"abs":1e-09},"result.perimeter.value":{"rel":1e-11,"abs":1e-09}}}
{"id":"v005","input":{"points":[{"northing":10,"easting":10},{"northing":20,"easting":50},{"northing":60,"easting":70},{"northing":80,"easting":30},{"northing":40,"easting":0}]},"expect":{"result.area.value":2950.0,"result.acres.value":0.067722681359045,"result.hectares.value":0.027406396800000003,"result.perimeter.value":212.29655195785202,"result.orientation":"counterclockwise","ok":true},"source":"Surveying formulas (Ghilani & Wolf 2018) evaluated in Python (tools/vectors/gen_survey.py)","sourceVersion":"15th edition (2018)","tolerance":{"result.area.value":{"rel":1e-11,"abs":1e-09},"result.acres.value":{"rel":1e-11,"abs":1e-09},"result.hectares.value":{"rel":1e-11,"abs":1e-09},"result.perimeter.value":{"rel":1e-11,"abs":1e-09}}}
{"id":"v006","input":{"points":[{"northing":"5000 ftUS","easting":"5000 ftUS"},{"northing":"5000 ftUS","easting":"5660 ftUS"},{"northing":"4340 ftUS","easting":"5660 ftUS"},{"northing":"4340 ftUS","easting":"5000 ftUS"}]},"expect":{"result.acres.value":10.0,"result.acres.unit":"acUS","meta.warnings.1.code":"LEGACY_UNIT","ok":true},"source":"add-survey-suite scenarios","sourceVersion":"2026","tolerance":{"result.acres.value":{"rel":1e-11,"abs":1e-09}},"supersededBy":"v021","reason":"Promotion to stable removed the EXPERIMENTAL_TOOL warning, so LEGACY_UNIT moved to the first position. No numbers changed."}
{"id":"v021","input":{"points":[{"northing":"5000 ftUS","easting":"5000 ftUS"},{"northing":"5000 ftUS","easting":"5660 ftUS"},{"northing":"4340 ftUS","easting":"5660 ftUS"},{"northing":"4340 ftUS","easting":"5000 ftUS"}]},"expect":{"result.acres.value":10.0,"result.acres.unit":"acUS","meta.warnings.0.code":"LEGACY_UNIT","ok":true},"source":"add-survey-suite scenarios","sourceVersion":"2026","tolerance":{"result.acres.value":{"rel":1e-11,"abs":1e-09}}}
{"id":"v007","input":{"points":[{"northing":0,"easting":0},{"northing":0,"easting":208.71},{"northing":208.71,"easting":208.71},{"northing":208.71,"easting":0}]},"expect":{"result.area.value":43559.864100000006,"result.acres.value":0.9999968801652894,"result.hectares.value":0.4046843796876865,"result.perimeter.value":834.84,"result.orientation":"counterclockwise","ok":true},"source":"Surveying formulas (Ghilani & Wolf 2018) evaluated in Python (tools/vectors/gen_survey.py)","sourceVersion":"15th edition (2018)","tolerance":{"result.area.value":{"rel":1e-11,"abs":1e-09},"result.acres.value":{"rel":1e-11,"abs":1e-09},"result.hectares.value":{"rel":1e-11,"abs":1e-09},"result.perimeter.value":{"rel":1e-11,"abs":1e-09}}}
{"id":"v008","input":{"points":[{"northing":100,"easting":100},{"northing":340,"easting":180},{"northing":520,"easting":90},{"northing":610,"easting":400},{"northing":300,"easting":520},{"northing":80,"easting":330}]},"expect":{"result.area.value":151850.0,"result.acres.value":3.485996326905418,"result.hectares.value":1.4107326624000003,"result.perimeter.value":1631.0007460790007,"result.orientation":"clockwise","ok":true},"source":"Surveying formulas (Ghilani & Wolf 2018) evaluated in Python (tools/vectors/gen_survey.py)","sourceVersion":"15th edition (2018)","tolerance":{"result.area.value":{"rel":1e-11,"abs":1e-09},"result.acres.value":{"rel":1e-11,"abs":1e-09},"result.hectares.value":{"rel":1e-11,"abs":1e-09},"result.perimeter.value":{"rel":1e-11,"abs":1e-09}}}
{"id":"v009","input":{"points":[{"northing":0,"easting":0},{"northing":1320,"easting":0},{"northing":1320,"easting":1320},{"northing":0,"easting":1320}]},"expect":{"result.area.value":1742400.0,"result.acres.value":40.0,"result.hectares.value":16.1874256896,"result.perimeter.value":5280.0,"result.orientation":"clockwise","ok":true},"source":"Surveying formulas (Ghilani & Wolf 2018) evaluated in Python (tools/vectors/gen_survey.py)","sourceVersion":"15th edition (2018)","tolerance":{"result.area.value":{"rel":1e-11,"abs":1e-09},"result.acres.value":{"rel":1e-11,"abs":1e-09},"result.hectares.value":{"rel":1e-11,"abs":1e-09},"result.perimeter.value":{"rel":1e-11,"abs":1e-09}}}
{"id":"v010","input":{"points":[{"northing":5000.25,"easting":3000.5},{"northing":5100.75,"easting":3150.25},{"northing":4980.5,"easting":3300.0},{"northing":4870.0,"easting":3120.75}]},"expect":{"result.area.value":34846.125,"result.acres.value":0.799956955922865,"result.hectares.value":0.32373109447200005,"result.perimeter.value":760.2466735721642,"result.orientation":"clockwise","ok":true},"source":"Surveying formulas (Ghilani & Wolf 2018) evaluated in Python (tools/vectors/gen_survey.py)","sourceVersion":"15th edition (2018)","tolerance":{"result.area.value":{"rel":1e-11,"abs":1e-09},"result.acres.value":{"rel":1e-11,"abs":1e-09},"result.hectares.value":{"rel":1e-11,"abs":1e-09},"result.perimeter.value":{"rel":1e-11,"abs":1e-09}}}
{"id":"v011","input":{"points":[{"northing":0,"easting":0},{"northing":10,"easting":0},{"northing":10,"easting":10},{"northing":5,"easting":3},{"northing":0,"easting":10}]},"expect":{"result.area.value":65.0,"result.acres.value":0.0014921946740128558,"result.hectares.value":0.00060386976,"result.perimeter.value":47.20465053408525,"result.orientation":"clockwise","ok":true},"source":"Surveying formulas (Ghilani & Wolf 2018) evaluated in Python (tools/vectors/gen_survey.py)","sourceVersion":"15th edition (2018)","tolerance":{"result.area.value":{"rel":1e-11,"abs":1e-09},"result.acres.value":{"rel":1e-11,"abs":1e-09},"result.hectares.value":{"rel":1e-11,"abs":1e-09},"result.perimeter.value":{"rel":1e-11,"abs":1e-09}}}
{"id":"v012","input":{"points":[{"northing":250000,"easting":1500000},{"northing":250400,"easting":1500900},{"northing":249700,"easting":1501300},{"northing":249300,"easting":1500500}]},"expect":{"result.area.value":775000.0,"result.acres.value":17.791551882460972,"result.hectares.value":7.1999856,"result.perimeter.value":3545.771272713644,"result.orientation":"clockwise","ok":true},"source":"Surveying formulas (Ghilani & Wolf 2018) evaluated in Python (tools/vectors/gen_survey.py)","sourceVersion":"15th edition (2018)","tolerance":{"result.area.value":{"rel":1e-11,"abs":1e-09},"result.acres.value":{"rel":1e-11,"abs":1e-09},"result.hectares.value":{"rel":1e-11,"abs":1e-09},"result.perimeter.value":{"rel":1e-11,"abs":1e-09}}}
{"id":"v013","input":{"points":[{"northing":0,"easting":0},{"northing":2640,"easting":0},{"northing":2640,"easting":1320},{"northing":1320,"easting":1320},{"northing":1320,"easting":2640},{"northing":0,"easting":2640}]},"expect":{"result.area.value":5227200.0,"result.acres.value":120.0,"result.hectares.value":48.5622770688,"result.perimeter.value":10560.0,"result.orientation":"clockwise","ok":true},"source":"Surveying formulas (Ghilani & Wolf 2018) evaluated in Python (tools/vectors/gen_survey.py)","sourceVersion":"15th edition (2018)","tolerance":{"result.area.value":{"rel":1e-11,"abs":1e-09},"result.acres.value":{"rel":1e-11,"abs":1e-09},"result.hectares.value":{"rel":1e-11,"abs":1e-09},"result.perimeter.value":{"rel":1e-11,"abs":1e-09}}}
{"id":"v014","input":{"points":[{"northing":12.5,"easting":7.25},{"northing":40.0,"easting":3.5},{"northing":61.75,"easting":22.0},{"northing":55.5,"easting":48.25},{"northing":30.0,"easting":60.0},{"northing":8.0,"easting":41.5}]},"expect":{"result.area.value":2181.40625,"result.acres.value":0.05007819674012856,"result.hectares.value":0.020265927210000003,"result.perimeter.value":174.65779665919575,"result.orientation":"clockwise","ok":true},"source":"Surveying formulas (Ghilani & Wolf 2018) evaluated in Python (tools/vectors/gen_survey.py)","sourceVersion":"15th edition (2018)","tolerance":{"result.area.value":{"rel":1e-11,"abs":1e-09},"result.acres.value":{"rel":1e-11,"abs":1e-09},"result.hectares.value":{"rel":1e-11,"abs":1e-09},"result.perimeter.value":{"rel":1e-11,"abs":1e-09}}}
{"id":"v015","input":{"points":[{"northing":0,"easting":0},{"northing":-500,"easting":300},{"northing":-200,"easting":900},{"northing":400,"easting":700},{"northing":600,"easting":100}]},"expect":{"result.area.value":635000.0,"result.acres.value":14.577594123048668,"result.hectares.value":5.899343040000001,"result.perimeter.value":3127.1028998316406,"result.orientation":"counterclockwise","ok":true},"source":"Surveying formulas (Ghilani & Wolf 2018) evaluated in Python (tools/vectors/gen_survey.py)","sourceVersion":"15th edition (2018)","tolerance":{"result.area.value":{"rel":1e-11,"abs":1e-09},"result.acres.value":{"rel":1e-11,"abs":1e-09},"result.hectares.value":{"rel":1e-11,"abs":1e-09},"result.perimeter.value":{"rel":1e-11,"abs":1e-09}}}
{"id":"v016","input":{"points":[{"northing":1000,"easting":1000},{"northing":1000,"easting":1001},{"northing":1001,"easting":1001},{"northing":1001,"easting":1000}]},"expect":{"result.area.value":1.0,"result.acres.value":2.295684113865932e-05,"result.hectares.value":9.290304e-06,"result.perimeter.value":4.0,"result.orientation":"counterclockwise","ok":true},"source":"Surveying formulas (Ghilani & Wolf 2018) evaluated in Python (tools/vectors/gen_survey.py)","sourceVersion":"15th edition (2018)","tolerance":{"result.area.value":{"rel":1e-11,"abs":1e-09},"result.acres.value":{"rel":1e-11,"abs":1e-09},"result.hectares.value":{"rel":1e-11,"abs":1e-09},"result.perimeter.value":{"rel":1e-11,"abs":1e-09}}}
{"id":"v017","input":{"points":[{"northing":0,"easting":0},{"northing":3000,"easting":250},{"northing":5200,"easting":2900},{"northing":2600,"easting":5400},{"northing":-300,"easting":3100}]},"expect":{"result.area.value":18810000.0,"result.acres.value":431.8181818181818,"result.hectares.value":174.75061824,"result.perimeter.value":16877.367829075105,"result.orientation":"clockwise","ok":true},"source":"Surveying formulas (Ghilani & Wolf 2018) evaluated in Python (tools/vectors/gen_survey.py)","sourceVersion":"15th edition (2018)","tolerance":{"result.area.value":{"rel":1e-11,"abs":1e-09},"result.acres.value":{"rel":1e-11,"abs":1e-09},"result.hectares.value":{"rel":1e-11,"abs":1e-09},"result.perimeter.value":{"rel":1e-11,"abs":1e-09}}}
{"id":"v018","input":{"points":[{"northing":33,"easting":44},{"northing":133,"easting":44},{"northing":133,"easting":144}]},"expect":{"result.area.value":5000.0,"result.acres.value":0.1147842056932966,"result.hectares.value":0.04645152,"result.perimeter.value":341.4213562373095,"result.orientation":"clockwise","ok":true},"source":"Surveying formulas (Ghilani & Wolf 2018) evaluated in Python (tools/vectors/gen_survey.py)","sourceVersion":"15th edition (2018)","tolerance":{"result.area.value":{"rel":1e-11,"abs":1e-09},"result.acres.value":{"rel":1e-11,"abs":1e-09},"result.hectares.value":{"rel":1e-11,"abs":1e-09},"result.perimeter.value":{"rel":1e-11,"abs":1e-09}}}
{"id":"v019","input":{"points":[{"northing":7000,"easting":7000},{"northing":7600,"easting":7050},{"northing":7650,"easting":7700},{"northing":7040,"easting":7640}]},"expect":{"result.area.value":387750.0,"result.acres.value":8.901515151515152,"result.hectares.value":3.602315376000001,"result.perimeter.value":2508.1924679640138,"result.orientation":"clockwise","ok":true},"source":"Surveying formulas (Ghilani & Wolf 2018) evaluated in Python (tools/vectors/gen_survey.py)","sourceVersion":"15th edition (2018)","tolerance":{"result.area.value":{"rel":1e-11,"abs":1e-09},"result.acres.value":{"rel":1e-11,"abs":1e-09},"result.hectares.value":{"rel":1e-11,"abs":1e-09},"result.perimeter.value":{"rel":1e-11,"abs":1e-09}}}
{"id":"v020","input":{"points":[{"easting":1,"northing":6},{"easting":3,"northing":1},{"easting":7,"northing":2},{"easting":4,"northing":4},{"easting":8,"northing":5}]},"expect":{"result.area.value":16.5,"ok":true},"source":"Wikipedia, Shoelace formula (worked example)","sourceVersion":"retrieved 2026-09-19","tolerance":{"result.area.value":{"rel":1e-12,"abs":1e-09}}}
