Cyclomedia import
Imports Cyclomedia panorama deliveries, driven by Cyclomedia's own
DataPackage.xml rather than by a CSV.
Two things are unusual about it: it is configured explicitly rather than by folder scanning, and it reprojects coordinates from the SRID declared in the package.
Configuration#
The folders are not discovered — they are named explicitly when the run is started:
| Variable | Meaning | Example |
|---|---|---|
CYCLOMEDIA_XML_PATHS | Comma-separated XML paths | NL-BVLD-230901.DataPackage.xml,NL-BVLD-230906.DataPackage.xml |
CYCLOMEDIA_JPG_DIRECTORIES | Comma-separated image folders, paired positionally with the XML list | nl-bvld-230901,nl-bvld-230906 |
The two lists must be the same length and are matched by position — the first XML goes with the first directory. A mismatch stops the run immediately.
If you are delivering data rather than running the import, what this means for you is simply: give your Georizon contact the XML filenames and the matching image folder names.
Folder layout#
<dataset bucket>/
├── NL-BVLD-230901.DataPackage.xml named by CYCLOMEDIA_XML_PATHS
└── nl-bvld-230901/ named by CYCLOMEDIA_JPG_DIRECTORIES
├── 001234/ first 6 characters of the ImageId
│ └── 001234ab.jpg
└── 005678/
└── 005678cd.jpg
Exactly one level of subfolder is expected under the image directory, and its
name is the first six characters of the ImageId — Cyclomedia's own
bucketing scheme. Each such subfolder becomes one
set.
Images are .jpg.
The DataPackage XML#
Namespace http://www.cyclomedia.com/. One <Recording> per photo:
| Element | Required | Meaning |
|---|---|---|
ImageId | yes | Photo name; the file is <ImageId>.jpg |
RecordedAt/DateTime | yes | Capture time |
SRID | yes | Coordinate system of this recording — see below |
Longitude | yes | X when the SRID is projected |
Latitude | yes | Y when the SRID is projected |
Height | no | Defaults to 2 when absent or xsi:nil |
Orientation | no | Heading; defaults to 0 when absent or xsi:nil |
xsi:nil="true" is handled explicitly for Height and Orientation, so an
empty element is a default rather than an error.
Tilt and roll are always recorded as zero — the format carries no values for them.
Coordinate reference system#
This template reprojects. Four source SRIDs are supported; anything else stops the run.
| Source SRID | Handling |
|---|---|
28992 (RD New) | Used as-is |
7415 (RD New + NAP) | Used as-is |
31370 (Belgian Lambert 72) | Transformed to the dataset's CRS |
4258 (ETRS89) | Promoted to 4937 (3D) so height converts correctly, then transformed |
One transformer is built per package, so a single delivery is assumed to use a single source SRID throughout.
Ingest parameters#
| Key | Required | Default |
|---|---|---|
height_above_ground | no | 2.06 |
Photos are recorded as already anonymised, and are not queued for blurring.
Tolerance#
A <Recording> whose JPG is not present is skipped with a warning and the
run continues. That is more forgiving than most templates here — but it also
means a wholesale path mismatch produces a run that "succeeds" with almost
nothing indexed. Check the indexed count against the recording count.
Common failures#
| Symptom | Cause |
|---|---|
| "Number of XML paths and JPG directories must be the same" | The two configured lists have different lengths |
| "SRID … not supported, quitting" | The package uses a source CRS outside the four supported ones |
| Run succeeds but almost nothing indexed | The image folder name or the six-character subfolder layout doesn't match what the XML implies |
| Everything at height 2 m | The XML has no Height values, so the default was used throughout |