Calculator of tree positions using intertree distances and azimuths

The program is written is Visual Basic 6.0, and should work in the Win32-based operating systems. C:\DATA\ directory is required for file I/O. Windows executable / zipped executable.  Zipped source code.

Input files (zipped): The parameter file has values for the name of the output file, azimuth correction (median convergence, degrees, default 6°), a priori SDs of observation errors in photogrammetric coordinates of trees (default 0.25 m), observation errors in azimuth (SDepsazim, default 0.02 radians), and in intertree distances (SDespdist, default 0.1 m).

Output files:

How to

Prepare the ASCII, comma-delimited observation file.

1) Copy the parameter file to c:\data\
2) Start the program
3) Input the control points, File | Open photogrammetric map
4) Input the observations, File | Open field observations
5) Triangulate and trilaterate, File | calculate positions
6) View the comma delimited ASCII-results in C:\DATA\results.txt
    Check accuracy and possible errors in observations
    and run steps 4)-6) again.

Photogrammetric observations

The file all.txt has 5294 tree observations made in the images and LiDAR, identified in the field, and used as control points for the positioning of trees.

Back to Index
Observation file

Structure of the observation file is (ASCII, comma-delimited):
PlotNum, P0TreeID, Sp, NPA, (PATreeID, Dist, Azim) x 5

PlotNum is the plot, where positioning is tried
P0TreeID is the number of the tree to be positioned
Sp is the species of the tree to be positioned
NPA is the number of trees (control points), 1-5
(PATreeID, Dist, Azim) x 5  
   ID of control point, distance and azimuth towards it,
   Missing values are denoted with -99

In the example file, the origins of plots 101 and 2 were positioned. Origin of plot 101 four times (IDs 201-204) and origin of plot 2 once (ID 201). The number of trees (control points) was 3, 4, 4, 4, and 3 in the tries. -99 indicates missing observations.

Results file

The output file has lots of information. The XY-solution and the standard errors of X and Y (SigmaX, SigmaY) are important. SigmaX and SigmaY delineate a rectangle in the XY-plane that contains the 67-% confidence ellipse of the position. SigmaX and SigmaY s.b. below 0.35 m. If the errors are large, check first for typos. The error can be in the distances, azimuths, or the the control points (if you have identified the wrong tree).

Case        // Line # in the observation file
NumofIte    // Number of iterations required for solution
Plot-id,    // Plot code
Tree-id,    // Tree-ID of the positioned tree
Sp,         // Sp of the positioned tree
X_ini,      // Initial approximation of X
Y_ini,      // Initial approximation of Y
X_adj,      // Solution, X
Y_adj,      // Solution, Y
SigmaNull,  // Mean unit weight, ~1.0
SigmaX,     // Standard error of X
SigmaY,     // Standard error of Y
Tau,        // Statistics needed in rejecting outliers
NPA,        // Number of control points/trees 1-5
NumOfObs,   // # of observations = 2*NPA + N_dist + N_azim
Tree,       // Tree-ID of intertree observations
Sp,         // Sp of intertree observatiosn
Obs_X,      // Photogrammetric X
Obs_Y,      // Photogrammetric Y
X_adj,      // Adjusted X (solution)
Y_adj,      // Adjusted Y (solution)
Res_Azim,   // Residual after adjustment, radians
Res_Dist,   // Residual after adjustment, meters
IsDist,     // Boolean, was distance observed or not?
BaardaDist, // Normalized residual, largest is suspicious
Obs_dist,   // Observed distance
Is_Azim,    // Booleqn, Was azimuth observed or not?
Baarda_Azim //
Normalized residual, largest is suspicious
Obs_azim    // Observed intertree azimuth (from unknown)
x 5
TypeofIni   // POLAR = from azimuths and distances,
               INTERSEC = from azimuths (intersection)