SurViz is a tool for better visualizing stated choice surveys.
This is a continuation of a student software project developed as part of a practical course in the Bachelor’s program in Computer Science at Karlsruhe Institute of Technology (view on GitHUb).
Since then, it has been used and further developed at the Institute for Transport Studies. Major changes: Introduced dummy‑encoded single values with full UI & export support; added single‑value dividers, prefix and smarter decimals; implemented configurable 999‑value handling; strengthened Ngene import; and overhauled export warnings & dialog UX.
Tip
See notes/User_guide or Help window for detailed explanation
- .ngd (Ngene)
- .png
- .svg
- .png (whole situation or individual options)
- .html for Unipark
The layout of the generated images can further be configured by changing the values in image_generator.properties.
Warning
Changes to these values can lead to distorted images and improper functioning of the program.
The layout is based per single option in a situation. The general layout of an option is as follows:
Green and blue area are representing the single value/timeline section. Further layout of those areas is explained in corresponding sections.
| Nr. | Identifier/Calculation | Description | Unit |
|---|---|---|---|
| 1 | set by user; default=situation_default_width
|
width | px |
| 2 | situation_height |
height | px |
| 3 | border_padding |
border padding | px |
| 4 |
column_padding
|
padding around divider line | px |
| 5 |
single_value_min_width single_value_size |
width of single value section | px |
| 6 |
border_padding column_padding |
width of timeline section | px |
Other general adjustments that can be made:
| Identifier | Description | Unit |
|---|---|---|
background_color |
background color | ARGB value in hex |
divider_weight |
thickness of divider line | pt |
divider_color |
color of divider line | ARGB value in hex |
| Nr. | Identifier/Calculation | Description | Unit |
|---|---|---|---|
| 7 | single_value_size |
size of each single value column | px |
| 8 | single_value_y_offset |
middle offset from center line | px |
| 9 | single_value_text_padding |
padding between center line and top pixel of text | px |
| 10 | single_value_icon_padding |
padding between center line and icon | px |
Other adjustments that can be made:
| Identifier | Description | Unit |
|---|---|---|
single_value_alpha |
alpha value of single values with value |
float between 0-1 |
Other identifiers
| Nr. | Description |
|---|---|
| 11 | Icon |
| 12 | Text |
| Nr. | Identifier/Calculation | Description | Unit | ||
|---|---|---|---|---|---|
| 13 | timeline_y_offset |
offset from center line | px | ||
| 14 | timeline_divider_height |
height of divider between timeline sections | px | ||
| 15 | timeline_padding |
padding of text and icons from timeline | px | ||
| 16 | timeline_icon_size |
width and height of icon | px | ||
| 17 |
timeline_default_scaling
|
length of timeline section | px |
Other adjustments that can be made:
| Identifier | Description | Unit |
|---|---|---|
timeline_weight |
line thickness of timeline | pt |
To add an Importer to support a new file type simply create a class that implements the Importer interface.
For the new Importer to be recognized by the rest of the program add YourImporter to ImporterVariant:
enum class ImporterVariant(private val importer: Importer) {
Ngene(NgeneImporter),
//....
YourFileFormat(YourImporter),
//....
}Similar to adding an Importer, you just have to implement the Exporter interface. With getFields() the exporter can request inputs from the user for configuration.
export, as the name implies, is called when the user wants to export.
For the exporter to be shown in the UI, simply add YourExporter to ExporterVariant:
enum class ExporterVariant(private val exporter: Exporter) {
//....
YourExporterName(YourExporter),
}

