TFX project files ======================= About .TFX files ---------------- *.TFX* files are *.zip* files containing the folders *_IMAGE*, *_LINE* and *_MISSION* necessary for |Company name| :doc:`mission management <./../MISSIONPLANNER/Missions>`. When the *Missions* main page in |Software name| is opened, all files in *_IMAGE*, *_LINE* are automatically read and the corresponding data is displayed in the workspace. When importing or exporting a *.TFX* file in the :doc:`Missions <./../MISSIONPLANNER/Missions>` tab, the files are automatically unzipped and any new files are added to the existing *_IMAGE*, *_LINE* and *_MISSION* folders. This updates all flight line and image information while preserving the history. .. important:: Never manually modify the .csv files in the *_IMAGE* and *_LINE* folders! Doing so will corrupt the history. |Company name| |Navigation Software name| (Version 24 and newer) creates :ref:`image takings ` and :ref:`line takings files ` that can be :ref:`imported ` into |Software name|. In |Software name|, planned missions can be :ref:`exported ` for use in |Navigation Software name|. The complete flight plan and the individual missions are stored as *.json* files in the *_MISSION* folder. .. _image-takings-file: ImageTakings file ------------------ | The first *.csv* file created in the *_IMAGE* folder contains headers for all values. | All following files that are created do not include a header. Their names are formatted as: **IT_** *operatorName* **_** *date* **_** *time* **.csv** . .. hint:: The operator name is specified in the :ref:`Settings ` |settings| and can be adjusted there! The .csv files contain the following values, separated by semicolons: .. list-table:: :widths: 20 15 65 :header-rows: 1 * - Property name - Type - Description * - TimestampWeek - Integer - GPS week timestamp * - TimestampSecond - Float - GPS second (seconds since begin of the GPS week) * - User - String - Operator name * - LineID - Integer - :ref:`flight line number ` * - SegmentID - Integer - :ref:`flight line segment number ` * - ImageID - Integer - Image number * - State - Integer - |Navigation Software name| returns a three-digit status code: - 100-199 Successful (green) - 200-299 Warning (orange) - 300-399 Error (red) - 400-499 Refly (yellow) - 500-599 Not flown (gray) - 600-699 Unknown (blue) The even hundreds indicate the general status category without additional specificity * - PhotoID - Integer - Photo number * - EventID - Integer - Event number * - Simulation - Integer - Image creation (simulation=1, real=0) * - Longitude - Float - Longitude of image location * - Latitude - Float - Latitude of image location * - Altitude - Float - Altitude of image location * - Roll - Float - roll angle (landscape=0°, portrait=90°) * - Pitch - Float - pitch angle (pointing to the horizon=0°, pointing to nadir=-90°) * - Heading - Float - yaw angle (front=0°, right=90°, back=180°, left=270°) * - Sensor type - String - Specification of sensor type (e.g. FrameCamera) * - SensorName - String - Full sensor name (e.g. PhaseONE iXU-RS 1000 - 50 mm) .. _line-takings-file: LineTakings file ----------------- | The first file created in the *_LINE* folder contains headers for all values. | All following files that are created do not include a header. Their names are formatted as: **LT_** *operatorName* **_** *date* **_** *time* **.csv** . .. hint:: The operator name is specified in the :ref:`Settings ` |settings| and can be adjusted there! The .csv files contain the following values, separated by semicolons: .. list-table:: :widths: 20 15 65 :header-rows: 1 * - Property name - Type - Description * - TimestampWeek - Integer - GPS week timestamp * - TimestampSecond - Float - GPS second (seconds since begin of the GPS week) * - User - String - Operator name * - LineID - Integer - :ref:`flight line number ` * - SegmentID - Integer - :ref:`flight line segment number ` * - State - Integer - |Navigation Software name| returns a three-digit status code: - 100-199 Successful (green) - 200-299 Warning (orange) - 300-399 Error (red) - 400-499 Refly (yellow) - 500-599 Not flown (gray) - 600-699 Unknown (blue) The even hundreds indicate the general status category without additional specificity * - Simulation - Integer - Line creation (simulation=1, real=0) * - Longitude - Float - Longitude of line location (taken ~every 2 seconds) * - Latitude - Float - Latitude of line location (taken ~every 2 seconds) * - Altitude - Float - Altitude of line location (taken ~every 2 seconds) * - Roll - Float - roll angle (landscape=0°, portrait=90°) * - Pitch - Float - pitch angle (pointing to the horizon=0°, pointing to nadir=-90°) * - Heading - Float - yaw angle (front=0°, right=90°, back=180°, left=270°) * - Sensor type - String - Specification of sensor type (e.g. FrameCamera) * - SensorName - String - Full sensor name (e.g. PhaseONE iXU-RS 1000 - 50 mm) Missions file structure ------------------------------- The *.json* files in the *_MISSION* folder contain the following feature fields and structure. .. rubric:: Feature fields - mission object .. list-table:: :widths: 20 20 60 :header-rows: 1 * - Property name - Type - Description * - name - String - Mission name * - uuid - String - Unique identifier of the feature * - assignedTo - String - Name of the operator undertaking the mission * - createdBy - String - Name of the operator that created the mission * - createdAt - String - Date of creation * - updatedAt - String - Date of the last mission update * - originAirport - String - Currently not in use * - finalAirport - String - Currently not in use * - turnTime_s - Float - Extra time to move to the next line: this value is used to calculate the remaining time of a mission * - transferSpeed_kt - Float - Speed of the aircraft from the airport to the project area * - mappingSpeed_kt - Float - Speed of the aircraft on a flight line: this value is used to calculate the remaining time of a mission * - deprecated - Integer - 0 = mission is up-to-date and operational, 1 = mission is outdated and no longer in use * - stateLine - :ref:`StateLineObject` - Overview of the current line status (LiDAR, Pushbroom) * - stateImage - :ref:`StateImageObject` - Overview of the current image status (if available) * - lines - :ref:`Array of LineObject` - Defines the lines that belong to the mission | .. _stateLine-object: .. rubric:: Feature fields - stateLine object .. list-table:: :widths: 20 20 60 :header-rows: 1 * - Property name - Type - Description * - updatedAt - String - Date of last update * - success - Float - Distance [m] flagged as "success" * - warning - Float - Distance [m] flagged as "warning" * - error - Float - Distance [m] flagged as "error" * - refly - Float - Distance [m] flagged as "refly" * - notFlown - Float - Distance [m] flagged as "notFlown" * - undefined - Float - Distance [m] flagged as "undefined" * - total - Float - Total length [m] of all flight lines in the mission | .. _stateImage-object: .. rubric:: Feature fields - stateImage object .. list-table:: :widths: 20 20 60 :header-rows: 1 * - Property name - Type - Description * - updatedAt - String - Date of last update * - success - Float - Number of pictures flagged as "success" * - warning - Float - Number of pictures flagged as "warning" * - error - Float - Number of pictures lagged as "error" * - refly - Float - Number of pictures flagged as "refly" * - notFlown - Float - Number of pictures flagged as "notFlown" * - undefined - Float - Number of pictures flagged as "undefined" * - total - Float - Total number of pictures in the mission .. hint:: When multiple images were taken at the same position, the status refers to the *Latest*, not the *Best* image. | .. _lines-object: .. rubric:: Feature fields - lines object .. list-table:: :widths: 20 20 60 :header-rows: 1 * - Property name - Type - Description * - parentId - Integer - :ref:`Flight line parent ID number` * - segmentId - Integer - :ref:`Flight line segment ID number` * - length - Float - Total length [m] of the flight line * - level - String - *Complete* (entire line belongs to the mission) or *Partial* (only parts of the line belong to the mission) * - parts - :ref:`Array of PartObject` - only required when *level=Partial*: defines which part(s) of the line belong to the mission | .. _part-object: .. rubric:: Feature fields - part object .. list-table:: :widths: 20 20 60 :header-rows: 1 * - Property name - Type - Description * - start - Float - linear reference of the starting point on the flight line [m] * - end - Float - linear reference of the end point on the flight line [m] | .. rubric:: Example .. code-block:: json { "name": "Mission_B", "uuid": "0951F448-4962-4D76-B654-F34D5C4DBCD1", "assignedTo": "UNDEFINED", "createdBy": "OFFICE_123", "createdAt": "2025-05-05T11:40:45Z", "updatedAt": "2025-05-05T16:01:13Z", "originAirport": "UNDEFINED", "finalAirport": "UNDEFINED", "turnTime_s": 20.0, "transferSpeed_kt": 100.0, "mappingSpeed_kt": 100.0, "deprecated": 0, "stateLine": { "updatedAt": "2025-05-05T16:01:50Z", "success": 10805.2265625, "warning": 0.0, "error": 0.0, "refly": 0.0, "notFlown": 0.0, "undefined": 0.0, "total": 10205.40234375 }, "stateImage": { "updatedAt": "2025-05-05T16:01:50Z", "success": 32, "warning": 0, "error": 0, "refly": 0, "notFlown": 0, "undefined": 0, "total": 32 }, "lines": [ { "parentId": 17, "segmentId": 1, "length": 3118.23657226562, "level": "Complete", "parts": [] }, { "parentId": 18, "segmentId": 1, "length": 3883.84301757812, "level": "Partial", "parts": [ { "start": 0.0, "end": 1822.91284179687 }, { "start": 2000.91284179687, "end": 3883.84301757812 } ] }, { "parentId": 19, "segmentId": 1, "length": 3203.32275390625, "level": "Complete", "parts": [] } ] }