TerraTec
Aerial deliveries from TerraTec: forward and backward oblique imagery, nadir imagery, orthophotos and point clouds, delivered together.
Folder layout#
<dataset bucket>/
├── Metadata/
│ └── ImageFootprints/
│ ├── <name>_F_<name>.shp forward oblique footprints (+ .dbf, .shx)
│ ├── <name>_B_<name>.shp backward oblique
│ └── <name>_N_<name>.shp nadir
├── FW/
│ ├── AbsImgOri_<name>.txt exterior orientations
│ └── tif/<name>.tif
├── BW/
│ ├── AbsImgOri_<name>.txt
│ └── tif/<name>.tif
├── NAD/
│ ├── AbsImgOri_<name>.txt
│ └── tif/<name>.tif
├── Ortho/
│ └── tif/<name>.tif REQUIRED
├── Pointcloud/
│ └── <name>.laz
└── Reports/ REQUIRED
Every name is a fixed, case-sensitive literal. The direction letter in the
shapefile name — _F_, _B_, _N_ — is what pairs a footprint file with its
imagery folder.
Reports/ and Ortho/tif/ must exist, even if you have nothing else to put
in them: the run fails on a missing one, and it fails after the imagery has
already been indexed.
The whole bucket is downloaded before processing, so deliver only what belongs.
Files#
| Imagery | .tif lowercase only. .TIF and .tiff are treated as missing |
| Footprints | The first *_<letter>_*.shp found, with its .dbf and .shx siblings present |
| Orientations | The first AbsImgOri_*.txt in the direction folder — the prefix is mandatory |
| Point clouds | .laz only — .las files are not indexed |
The orientation file#
| Separator | Any run of whitespace |
| Preamble | Exactly 9 lines are skipped, then one header line is consumed. Data starts on line 11 |
| Columns | Positional, exactly seven |
| Position | Meaning |
|---|---|
| 1 | Filename, without extension — the join key |
| 2, 3, 4 | X, Y, Z in the dataset's CRS |
| 5, 6, 7 | Omega, phi, kappa in degrees |
The footprint shapefile#
Attributes are addressed by name and all are required:
| Attribute | Meaning |
|---|---|
PhotoID | Join key; must equal the orientation file's filename value, without the extension |
geometry | The footprint polygon |
Rec_Time | Capture time; also selects the camera model (see below) |
Focal_leng | Focal length as text, e.g. 108.405 mm — read only for captures after 2021-02-28 |
The join between the shapefile and the orientation file keeps only records
present in both. Anything in one and not the other is dropped silently,
so a mismatch in PhotoID spelling produces a quiet, partial delivery.
Camera model#
Intrinsics are selected by direction and by whether Rec_Time is after
2021-02-28. Later captures read the focal length from Focal_leng; earlier
ones use fixed values. Because Rec_Time is parsed permissively, an ambiguous
date such as 03/04/2021 can land on the wrong side of that boundary and select
the wrong camera model for the whole delivery. Use an unambiguous format.
Coordinate reference system#
Nothing is reprojected, and the shapefile's .prj is ignored. Footprints
must already be in the dataset's 2D CRS and positions in its 3D CRS. See
Coordinates.
Ingest parameters#
None are required. set_name is accepted for point-cloud records, default 1.
Sets#
One set per camera direction: F, B, N, and O for
the orthophotos.
Tolerance#
- A metadata record whose
.tifis missing → warning only, the record is skipped. - Extra
.tiffiles not referenced by the metadata → never reported, never indexed. - A missing footprint shapefile or orientation file for one direction → that direction is skipped and the run continues.
So a run can succeed having indexed nothing at all. Check the count.
Common failures#
| Symptom | Cause |
|---|---|
| Far fewer photos than delivered | PhotoID includes the .tif extension, or disagrees with the orientation filename — the join drops them silently |
| Imagery not found | Delivered as .TIF or .tiff |
| Footprints in the wrong place | Shapefile is in a different CRS than the dataset's; the .prj is not read |
| Run fails at the very end | Reports/ or Ortho/tif/ missing — after everything else was already indexed |
| Wrong camera model | An ambiguous Rec_Time around the 2021-02-28 boundary |
| Point clouds not indexed | Delivered as .las — only .laz is read |
| A direction missing entirely | Its orientation file lacks the AbsImgOri_ prefix, or the header block isn't exactly 9 lines plus 1 |