Kavel 10 oblique
Oblique aerial imagery from Kavel 10, delivered as flat imagery folders plus per-camera direct-referencing orientation CSVs.
Footprints are not delivered. They are computed here by projecting each
image's four corners onto a horizontal ground plane, so the orientation values
below have to be right — an error in Kappa or the principal point moves the
footprint, not just the metadata.
Folder layout#
<dataset bucket>/
└── 05_Luchtfotografie/
├── 07_Oblieke_Luchtfotografie/ imagery, FLAT
│ ├── 12345_678.jpg
│ └── 12345_679.jpg
└── 08_Direct_Referencing_Orientaties/ orientations
├── CM011129.csv one CSV per camera serial
└── CM011130.csv
Both paths are fixed — there are no alternative spellings.
Imagery must sit directly in 07_Oblieke_Luchtfotografie. The folder is
listed one level deep only, so anything in a subfolder is invisible and every
photo in it is skipped without the run failing. This is the most common way a
Kavel 10 delivery ends up with far fewer photos indexed than expected.
Images themselves are never downloaded — only their names and sizes are read from the bucket listing — so a large delivery costs nothing extra to index.
The orientation CSVs#
Every *.csv directly inside 08_Direct_Referencing_Orientaties is read and
the rows are concatenated, so one file per camera serial is the expected shape.
An empty or missing folder fails the run.
| Separator | Comma |
| Encoding | UTF-8 with BOM — this is what the delivery tooling writes, and it is read as such |
| Header row | Required; columns are addressed by name |
| Extra columns | Tolerated and ignored |
Every column below is mandatory. A missing one fails the run rather than defaulting.
| Column | Type | Meaning |
|---|---|---|
ImageName | text | Photo name without the extension — .jpg is appended |
Description | text | Camera direction; see below |
CameraX | number | Easting, in the dataset's CRS |
CameraY | number | Northing |
CameraZ | number | Height, same vertical datum as ground_height (NAP metres) |
Omega | number | Degrees |
Phi | number | Degrees |
Kappa | number | Degrees, measured from the object X-axis |
FocalLength | number | Millimetres |
PixelSize | number | Micrometres |
ImageCols | integer | Image width in pixels |
ImageRows | integer | Image height in pixels |
PrincipalPointX | number | Millimetres; see the sign note below |
PrincipalPointY | number | Millimetres |
Date | text | ISO date, YYYY-MM-DD |
UTC_Time | text | ISO time. Interpreted as UTC |
Camera direction#
Description must be exactly one of these four strings. Anything else is
skipped with a message.
Description | Set name |
|---|---|
Oblique Forward | Forward |
Oblique Right | Right |
Oblique Back | Back |
Oblique Left | Left |
Principal point sign#
PrincipalPointX / PrincipalPointY are delivered with the opposite sign to
the Vexcel calibration report — where the report gives the left cone
+6.680 mm, the CSV carries -6.680. Ingest negates them on read, which is the
sign that places the left and right footprints correctly.
If you are validating a delivery against a calibration report, expect the signs to differ. Delivering the report's sign instead pushes the left and right footprints roughly 125 m off; forward and backward are unaffected either way, because their offset is zero.
Kappa#
Kappa is measured from the object X-axis, not the image axes. Ingest converts
it to the stored convention itself.
Deliveries indexed before this convention was corrected are rotated 90° in the stored kappa, and older tooling compensated by rotating the pixels when building the zoom images. That compensation must not be applied to current deliveries.
Footprints and ground height#
Each image's four corners are projected onto a horizontal plane at
ground_height. A photo whose corner rays point at or above the horizon has no
ground intersection and is skipped with a message — the run continues.
| Parameter | Required | Default |
|---|---|---|
ground_height | no | 15.0 |
ground_height is in the same vertical datum as CameraZ. Because the plane is
flat, terrain relief is not modelled: on strongly varying terrain the footprint
is an approximation, and setting ground_height near the mean ground level of
the block gives the best result.
Coordinate reference system#
Nothing is reprojected. CameraX/Y/Z are used as delivered and stamped with
the dataset's SRIDs, and computed footprints inherit the same. Deliver in the
dataset's configured CRS — see
Coordinates.
What you get back#
Indexed oblique photo records carrying the computed footprint, camera position, full interior orientation and capture time, grouped into one set per camera direction. Zoom images for the viewer are generated separately, after indexing.
Common failures#
| Symptom | Cause |
|---|---|
| Run fails immediately | 08_Direct_Referencing_Orientaties is missing or contains no *.csv |
| Far fewer photos indexed than delivered | Imagery is in subfolders of 07_Oblieke_Luchtfotografie rather than directly inside it |
| A whole camera missing | Its Description value is not one of the four exact strings |
| Some photos skipped near the block edge | Corner rays did not meet the ground plane — check ground_height against CameraZ |
| Left and right footprints ~125 m out | Principal point delivered with the calibration report's sign instead of the CSV convention |
KeyError on a column name | A mandatory column is missing or spelled differently — none of them are optional |