1"use strict";(globalThis.webpackChunkvrgs_docs_v_3_1=globalThis.webpackChunkvrgs_docs_v_3_1||[]).push([[25201],{95776(e,n,t){t.r(n),t.d(n,{assets:()=>h,contentTitle:()=>c,default:()=>l,frontMatter:()=>i,metadata:()=>o,toc:()=>a});const o=JSON.parse('{"id":"trees/data/ground-control-points","title":"Ground Control Points","description":"Surveyed control points in the Data tree: what each one records, how they differ from tie points, and the right-click commands on a point and on the branch.","source":"@site/docs/trees/data/ground-control-points.md","sourceDirName":"trees/data","slug":"/trees/data/ground-control-points","permalink":"/docs/next/trees/data/ground-control-points","draft":false,"unlisted":false,"editUrl":"https://github.com/vrgeoscience/vrgs_docs_v3/tree/master/docs/trees/data/ground-control-points.md","tags":[],"version":"current","sidebarPosition":22,"frontMatter":{"id":"ground-control-points","title":"Ground Control Points","description":"Surveyed control points in the Data tree: what each one records, how they differ from tie points, and the right-click commands on a point and on the branch.","sidebar_label":"Ground Control Points","sidebar_position":22},"sidebar":"docs","previous":{"title":"Sample Attributes","permalink":"/docs/next/trees/data/geoattributes"},"next":{"title":"Labels","permalink":"/docs/next/trees/data/labels"}}');var r=t(74848),s=t(28453);const i={id:"ground-control-points",title:"Ground Control Points",description:"Surveyed control points in the Data tree: what each one records, how they differ from tie points, and the right-click commands on a point and on the branch.",sidebar_label:"Ground Control Points",sidebar_position:22},c="Ground Control Points",h={},a=[{value:"Properties",id:"properties",level:2},{value:"Position",id:"position",level:3},{value:"Survey",id:"survey",level:3},{value:"Last reconstruction",id:"last-reconstruction",level:3},{value:"Notes",id:"notes",level:2}];function d(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"ground-control-points",children:"Ground Control Points"})}),"\n",(0,r.jsxs)(n.p,{children:["Surveyed control points held in the project. Each one is a physical target whose\ncoordinates a surveyor measured, and it lives in the project as an ordinary\nobject: visible and pickable in the 3D view, listed in the ",(0,r.jsx)(n.strong,{children:"Data Tree"}),", and\nsaved with the project."]}),"\n",(0,r.jsxs)(n.p,{children:["Control is normally brought in by the SfM workflow \u2014 see\n",(0,r.jsx)(n.a,{href:"../../general/meshes-point-clouds/sfm-user-guide#ground-control-points",children:"Ground control points"}),"\nin the SfM guide for importing a CSV, marking targets in photographs, and reading\nthe accuracy \u2014 but the points themselves are not SfM-only. Anything in the project\ncan use them."]}),"\n",(0,r.jsxs)(n.admonition,{title:"Not the same as Tie Points",type:"note",children:[(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"./tie-points",children:"Tie Points"})," belong to ",(0,r.jsx)(n.strong,{children:"one mesh"})," and record a correction for that\nmesh: ",(0,r.jsx)(n.em,{children:"this point on the model should be over there"}),". A ground control point is\nthe ",(0,r.jsx)(n.strong,{children:"survey record"})," \u2014 one identity per physical monument, with the accuracy the\nsurveyor quoted \u2014 and it belongs to the project, not to any one object."]}),(0,r.jsxs)(n.p,{children:["The two connect: an SfM workflow's ",(0,r.jsx)(n.strong,{children:"Seed Mesh Tie Points from Ground Control"}),"\nturns measured control into a mesh's tie points, so the mesh ribbon's\n",(0,r.jsx)(n.strong,{children:"Corrections \u2192 GCP"})," can pull that mesh onto the survey."]})]}),"\n",(0,r.jsx)(n.h2,{id:"properties",children:"Properties"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.em,{children:"Select a ground control point to see its properties."})}),"\n",(0,r.jsx)(n.h3,{id:"position",children:"Position"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Name"})," \u2014 the surveyor's label for the point (e.g. ",(0,r.jsx)(n.code,{children:"GCP_07"}),")."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"X / East"}),", ",(0,r.jsx)(n.strong,{children:"Y / North"}),", ",(0,r.jsx)(n.strong,{children:"Z"})," \u2014 the surveyed position, in the project's\ncoordinate system."]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"survey",children:"Survey"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Horizontal accuracy (m)"})," \u2014 the one-sigma horizontal accuracy quoted by the\nsurveyor. Weights this point against the photographs in the bundle adjustment."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Vertical accuracy (m)"})," \u2014 the one-sigma vertical accuracy."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Use as control"})," \u2014"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"On"})," ",(0,r.jsx)(n.em,{children:"(control point)"}),": the reconstruction is fitted to this point."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Off"})," ",(0,r.jsx)(n.em,{children:"(check point)"}),": the point is held back from the fit and only\nmeasured."]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Check points matter. A control point's residual only shows how well the fit\nabsorbed it; a check point's residual is the only independent estimate of how\naccurate the model really is."}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"last-reconstruction",children:"Last reconstruction"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Residual 3D (m)"})," \u2014 how far the reconstruction placed this point from where it\nwas surveyed."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Residual dX, dY, dZ (m)"})," \u2014 the same error per axis, in the project's\ncoordinate system (fitted minus surveyed)."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"From workflow"})," \u2014 the SfM workflow this point was published from."]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["A point that no reconstruction has measured reads ",(0,r.jsx)(n.strong,{children:"not measured"})," rather than\nshowing a zero error \u2014 marking it in fewer than two photographs means there is no\nmeasurement, which is not the same as a perfect one."]}),"\n",(0,r.jsx)(n.h2,{id:"notes",children:"Notes"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Editing a point's coordinate here does ",(0,r.jsx)(n.strong,{children:"not"})," feed back into a solve. The\nsurvey is the authority, so control flows from the survey into the model, never\nthe other way. Re-import the CSV if the survey changes."]}),"\n",(0,r.jsxs)(n.li,{children:["Points are matched ",(0,r.jsx)(n.strong,{children:"by name"})," when a workflow publishes them, so re-importing a\nCSV or re-running a reconstruction updates the existing points rather than\nstacking duplicates."]}),"\n"]})]})}function l(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},28453(e,n,t){t.d(n,{R:()=>i,x:()=>c});var o=t(96540);const r={},s=o.createContext(r);function i(e){const n=o.useContext(s);return o.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),o.createElement(s.Provider,{value:n},e.children)}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.