Ghost


Turbo GPX | Ghost

A GPX file can be displayed on the map as a ghost. The data in the main window is called the base. Comparison data between the ghost and the base can be displayed in Ghost HUD.

Ghost is one way to enjoy GPX data. It is not intended for serious, detailed data analysis.

What Is a Ghost

A GPX file for the ghost is loaded, and ghost data is generated based on the base. The ghost calculates and displays the position on the ghost side that corresponds to the current position of the base.

If the ghost GPX does not contain date/time data, the ghost cannot be generated.

*** Note ***

Travel distance and travel time are calculated from each GPX data set. Even on the same route, travel distance may differ due to GPS fluctuation or drift.


Ghost Generation Logic

The ghost calculates how far the ghost moved at the same elapsed time as the base, and displays the estimated position.

The base is at t seconds after the start
↓
Find the ghost position at t seconds
↓
Display the ghost cursor at that position

Multi Ghost

Multiple GPX files can be loaded as ghosts and displayed at the same time. Multi Ghost is specified using Ghost JSON.



Ghost JSON is a JSON file used to collect multiple ghost GPX files and display settings. The base is the currently opened GPX. Ghost GPX files are specified in Ghost JSON.

Item Description
Base Currently opened GPX
Ghost GPX specified in Ghost JSON
Maximum count 9 ghosts
Ghost number Valid ghosts in Ghost JSON are handled from top to bottom as Ghost #1, Ghost #2, Ghost #3, and so on

Ghost JSON

When a multi-ghost file is loaded, the screen displays the Ghost JSON file name instead of the first ghost GPX file name.


Main Items in Ghost JSON

Ghost JSON Specification

Item Description
Settings Common ghost settings
Ghosts Array of ghost GPX definitions
GpxFileName Ghost GPX file
CursorFolder Ghost cursor image folder
CursorOpacity Ghost cursor opacity
ShowCursor Show ghost cursor
ShowTrack Show ghost track
StartLine Start line
EndLine Finish line

The order specified in Ghosts becomes the basic ghost numbering. To change the order, change the order in the JSON file.

Ghosts with Enabled=false are not generated. G1, G2, and so on in the HUD are treated as the display order of enabled ghosts.

For each ghost, you can individually specify the cursor image folder, opacity, cursor display, and track display.

Behavior When Omitted

Item If omitted
Settings Default values are used
Ghosts.Enabled Treated as enabled
CursorFolder Not specified
CursorOpacity 128
ShowCursor OFF
ShowTrack OFF
StartLine Disabled
EndLine Disabled

CursorOpacity is specified from 0 to 255. 0 is fully transparent, and 255 is fully opaque.

Notes

Start and Finish

There are two ways to set the start and finish.

Full Data Method

The first point of the base data is the start, and the last point is the finish. Adjust the data by deleting unnecessary points to match that range.

To use the first point of the GPX as the start point as-is, turn Use Raw Start ON.

Line Method

Set any two points on the map and draw a line. The point that crosses the line is used as the start / end (finish) point. The detected start / end point index is displayed.

Use 🚩 to set the first point of the line. After clicking it, set the second point and the line is drawn. Use the clear button to clear the line. The Start Pin / End Pin set in Options is used.

Lines are used to determine indexes. Even when ghost data is cleared, the lines remain. To clear a line, press the clear button.

Line Display

If the background of each line is green / red, the line has been drawn. Clear it with the clear button.


StartLine / EndLine in Ghost JSON

In Ghost JSON, StartLine and EndLine can be specified inside Settings.

StartLine is the line used for start detection. EndLine is the line used for end detection.

"Settings": {
  "StartLine": {
    "Enabled": true,
    "P1": {
      "Lat": 35.6810000,
      "Lon": 139.7660000
    },
    "P2": {
      "Lat": 35.6820000,
      "Lon": 139.7670000
    }
  },
  "EndLine": {
    "Enabled": true,
    "P1": {
      "Lat": 35.6815000,
      "Lon": 139.7665000
    },
    "P2": {
      "Lat": 35.6825000,
      "Lon": 139.7675000
    }
  }
}
Setting Behavior
No StartLine / No EndLine Use the entire section
StartLine only Use the section after StartLine
EndLine only Use the section up to EndLine
StartLine and EndLine Use the section from StartLine to EndLine
Same StartLine and EndLine Use the section from the first crossing to the second crossing

Options

Item Description
Use Raw Start ON Use the first point of the ghost source data as the start point
OFF Use the start position found from the line reference
Interpolate Crossing ON Turn ON the setting related to line crossing interpolation
OFF Turn OFF the setting related to line crossing interpolation
Highlight Ghost Range ON Highlight the range used to generate the ghost in the list
OFF Do not highlight
Show Ghost on Chart ON Show the ghost on the chart
OFF Do not show the ghost on the chart

Use Raw Start = ON when you want to use the first point of the GPX as the start point in the full data method.

Use Raw Start = OFF when using the start position detected by the line method.

Interpolate Crossing

In the current version, Interpolate Crossing is kept as a setting item in the UI and Ghost JSON, but its effect on ghost generation and movement results is limited.


Map Display

The ghost cursor and track are displayed.

Specify the folder for Cursor. The contents are the same as the Cursor Pin option.

Item Description
Show Cursor ON Show the ghost cursor
OFF Do not show the ghost cursor
Show Track ON Show the ghost track
OFF Do not show the ghost track

Display Settings

The UI-side Show Cursor / Show Track settings affect all ghosts. ShowCursor / ShowTrack in Ghost JSON are individual settings for each ghost.


Relationship Between UI Settings and JSON Settings

Display Condition
Ghost cursor UI Show Cursor is ON and each ghost has ShowCursor=true
Ghost track UI Show Track is ON and each ghost has ShowTrack=true

The UI-side checkboxes affect all ghosts.

In contrast, CursorOpacity is an individual setting for each ghost. In Multi Ghost, a different opacity can be specified for each ghost.


Ghost Operation

As usual, the cursor moves with the up and down arrow keys. If the base reaches the finish first, the main window reaches the end of the list and cannot move farther, but on the map window you can press the down arrow until the ghost reaches the finish.


Ghost HUD

Displays various ghost information.

Item Description
Top Left Top left
Bottom Left Bottom left
Top Right Top right
Bottom Right Bottom right
Item Name Description
LATI Latitude Latitude Latitude of the current ghost position
LONG Longitude Longitude Longitude of the current ghost position
ELEV Elevation Elevation Elevation of the current ghost position
SPED Speed Speed Speed of the current ghost position
DIST Distance Distance Distance from the ghost start point
HEAD Heading Heading Travel direction of the current ghost position
TYPE Data Type Data type MEAS = measured point / INTR = interpolated point
EDIF Elevation Difference Elevation difference Base elevation - ghost elevation
SDIF Speed Difference Speed difference Base speed - ghost speed
TDIF Time Difference Time difference Time difference between base / ghost at the same distance
DDIF Distance Difference Distance difference Base distance - ghost distance
PDIF Position Difference Position difference Straight-line distance between base position and ghost position
DSTB Remaining Distance Base Base remaining distance Base remaining distance to finish
DSTG Remaining Distance Ghost Ghost remaining distance Ghost remaining distance to finish
TIMB Remaining Time Base Base remaining time Base remaining time to finish
TIMG Remaining Time Ghost Ghost remaining time Ghost remaining time to finish

TDIF

TDIF is the time difference between the base and ghost at the same distance point.

TDIF = elapsed time for the ghost to reach the same distance - elapsed time of the base

When TDIF is positive, the ghost reached the same distance later. In other words, the base is ahead of the ghost.

The TDIF value when the base reaches the finish is a guide to the final time difference.

Item Reference
Ghost cursor Same elapsed time
TDIF Same distance point
DDIF Distance difference at the same elapsed time
PDIF Straight-line distance between base position and ghost position

The ghost cursor shows "where the ghost is at the same time", and TDIF shows "how many seconds apart the base and ghost reached the same distance".

Multi Ghost HUD

In Multi Ghost, ghost numbers are added to the HUD.

TDIF G1 +12.34 s
     G2 -03.21 s

G1 and G2 indicate the display order of enabled ghosts.

Multi Ghost HUD Display Item

In Multi Ghost HUD, all specified HUD items are not listed. Instead, only the single item with the highest priority is displayed for each ghost.

If you want to display TDIF in Multi Ghost, it is safest to specify only TDIF in Items in Ghost JSON.

"Hud": {
  "Position": "TopRight",
  "Items": [
    "TDIF"
  ]
}

HUD Item Priority Order

The HUD item display order is not the order written in Items in Ghost JSON. It is handled using a fixed internal order.

  1. LATI
  2. LONG
  3. ELEV
  4. SPED
  5. DIST
  6. HEAD
  7. TYPE
  8. EDIF
  9. SDIF
  10. TDIF
  11. DDIF
  12. PDIF
  13. DST
  14. TIM

For example, if the following is specified, Multi Ghost HUD displays SPED instead of TDIF.

"Items": [
  "TDIF",
  "SPED"
]

This is because SPED has higher priority.

Ghost JSON Examples

Single Ghost

{
  "FileType": "TurboGPX.Ghost",
  "Version": 1,
  "Settings": {
    "UseRawStart": false,
    "InterpolateCrossing": false,
    "Hud": {
      "Position": "TopRight",
      "Items": [
        "TDIF"
      ]
    }
  },
  "Ghosts": [
    {
      "Enabled": true,
      "GpxFileName": "C:\\GPX\\ghost01.gpx",
      "CursorFolder": "C:\\Turbo GPX\\image\\ghost\\ghost01",
      "CursorOpacity": 255,
      "ShowCursor": true,
      "ShowTrack": true
    }
  ]
}

Multi Ghost

{
  "FileType": "TurboGPX.Ghost",
  "Version": 1,
  "Settings": {
    "UseRawStart": false,
    "InterpolateCrossing": false,
    "Hud": {
      "Position": "TopRight",
      "Items": [
        "TDIF"
      ]
    }
  },
  "Ghosts": [
    {
      "Enabled": true,
      "GpxFileName": "C:\\GPX\\ghost01.gpx",
      "CursorFolder": "C:\\Turbo GPX\\image\\ghost\\ghost01",
      "CursorOpacity": 255,
      "ShowCursor": true,
      "ShowTrack": true
    },
    {
      "Enabled": true,
      "GpxFileName": "C:\\GPX\\ghost02.gpx",
      "CursorFolder": "C:\\Turbo GPX\\image\\ghost\\ghost02",
      "CursorOpacity": 192,
      "ShowCursor": true,
      "ShowTrack": true
    },
    {
      "Enabled": false,
      "GpxFileName": "C:\\GPX\\ghost03.gpx",
      "CursorFolder": "C:\\Turbo GPX\\image\\ghost\\ghost03",
      "CursorOpacity": 128,
      "ShowCursor": true,
      "ShowTrack": true
    }
  ]
}

In this example, Ghost #1 and Ghost #2 are enabled. Ghost #3 is not generated because Enabled=false.

Notes on GPX Data

Ghost accuracy depends on the quality of the GPX data.

Condition Effect
GPX point intervals are coarse Position and time errors become larger
GPS log is unstable Ghost position may move unnaturally
Base and ghost courses are very different Distance and time differences become less intuitive
Start positions are misaligned Affects TDIF and the comparison start position
Finish positions are misaligned Affects the final time difference

For more accurate comparison, align the start position, finish position, and course shape of the base GPX and ghost GPX as much as possible.

inserted by FC2 system