Add support for controlling the accuracy of the receiver location
written in the JSON metadata used by the webmap.
This commit is contained in:
parent
bbcfbb8279
commit
58dfbdcb6b
2
debian/changelog
vendored
2
debian/changelog
vendored
|
@ -3,6 +3,8 @@ dump1090-mutability (1.08.2302.14+1mu-4) UNRELEASED; urgency=medium
|
||||||
* Remove half-implemented --no-decode option.
|
* Remove half-implemented --no-decode option.
|
||||||
* Remove Windows support files that aren't needed for the Debian package.
|
* Remove Windows support files that aren't needed for the Debian package.
|
||||||
* Remove some legacy support scripts not needed by the Debian package.
|
* Remove some legacy support scripts not needed by the Debian package.
|
||||||
|
* Add support for controlling the accuracy of the receiver location
|
||||||
|
written in the JSON metadata used by the webmap.
|
||||||
|
|
||||||
-- Oliver Jowett <oliver@mutability.co.uk> Sat, 27 Dec 2014 20:08:44 +0000
|
-- Oliver Jowett <oliver@mutability.co.uk> Sat, 27 Dec 2014 20:08:44 +0000
|
||||||
|
|
||||||
|
|
3
debian/config-template
vendored
3
debian/config-template
vendored
|
@ -112,5 +112,8 @@ JSON_DIR=
|
||||||
# Interval between writing json state (in seconds). 0 disables.
|
# Interval between writing json state (in seconds). 0 disables.
|
||||||
JSON_INTERVAL=
|
JSON_INTERVAL=
|
||||||
|
|
||||||
|
# Accuracy of receiver location to write to json state, one of "exact" / "approximate" / "none"
|
||||||
|
JSON_LOCATION_ACCURACY=
|
||||||
|
|
||||||
# Additional options that are passed to the Daemon.
|
# Additional options that are passed to the Daemon.
|
||||||
EXTRA_ARGS=
|
EXTRA_ARGS=
|
||||||
|
|
2
debian/dump1090-mutability.config
vendored
2
debian/dump1090-mutability.config
vendored
|
@ -47,6 +47,7 @@ if [ -e $CONFIGFILE ]; then
|
||||||
db_set $NAME/stats-interval "$STATS_INTERVAL"
|
db_set $NAME/stats-interval "$STATS_INTERVAL"
|
||||||
db_set $NAME/json-dir "$JSON_DIR"
|
db_set $NAME/json-dir "$JSON_DIR"
|
||||||
db_set $NAME/json-interval "$JSON_INTERVAL"
|
db_set $NAME/json-interval "$JSON_INTERVAL"
|
||||||
|
db_set $NAME/json-location-accuracy "$JSON_LOCATION_ACCURACY"
|
||||||
db_set $NAME/extra-args "$EXTRA_ARGS"
|
db_set $NAME/extra-args "$EXTRA_ARGS"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -202,6 +203,7 @@ db_go || true; db_get $NAME/auto-start; if [ "$RET" = "true" ]; then
|
||||||
db_go || true; db_get $NAME/json-interval; if [ -n "$RET" ] && [ "$RET" -gt 0 ]; then
|
db_go || true; db_get $NAME/json-interval; if [ -n "$RET" ] && [ "$RET" -gt 0 ]; then
|
||||||
# only if json-interval was given and non-zero
|
# only if json-interval was given and non-zero
|
||||||
db_input low $NAME/json-dir || true
|
db_input low $NAME/json-dir || true
|
||||||
|
db_input low $NAME/json-location-accuracy || true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
db_input low $NAME/extra-args || true
|
db_input low $NAME/extra-args || true
|
||||||
|
|
6
debian/dump1090-mutability.init
vendored
6
debian/dump1090-mutability.init
vendored
|
@ -83,6 +83,12 @@ if [ -n "$NET_BIND_ADDRESS" ]; then ARGS="$ARGS --net-bind-address $NET_BIND_ADD
|
||||||
if [ -n "$STATS_INTERVAL" ]; then ARGS="$ARGS --stats-every $STATS_INTERVAL"; fi
|
if [ -n "$STATS_INTERVAL" ]; then ARGS="$ARGS --stats-every $STATS_INTERVAL"; fi
|
||||||
if [ -n "$JSON_DIR" ]; then ARGS="$ARGS --write-json $JSON_DIR"; fi
|
if [ -n "$JSON_DIR" ]; then ARGS="$ARGS --write-json $JSON_DIR"; fi
|
||||||
if [ -n "$JSON_INTERVAL" ]; then ARGS="$ARGS --write-json-every $JSON_INTERVAL"; fi
|
if [ -n "$JSON_INTERVAL" ]; then ARGS="$ARGS --write-json-every $JSON_INTERVAL"; fi
|
||||||
|
case "x$JSON_LOCATION_ACCURACY" in
|
||||||
|
xexact) ARGS="$ARGS --json-location-accuracy 2" ;;
|
||||||
|
xapproximate) ARGS="$ARGS --json-location-accuracy 1" ;;
|
||||||
|
*) ARGS="$ARGS --json-location-accuracy 0" ;;
|
||||||
|
esac
|
||||||
|
|
||||||
if [ -n "$EXTRA_ARGS" ]; then ARGS="$ARGS $EXTRA_ARGS"; fi
|
if [ -n "$EXTRA_ARGS" ]; then ARGS="$ARGS $EXTRA_ARGS"; fi
|
||||||
|
|
||||||
# Load the VERBOSE setting and other rcS variables
|
# Load the VERBOSE setting and other rcS variables
|
||||||
|
|
1
debian/dump1090-mutability.postinst
vendored
1
debian/dump1090-mutability.postinst
vendored
|
@ -84,6 +84,7 @@ case "$1" in
|
||||||
subvar stats-interval STATS_INTERVAL
|
subvar stats-interval STATS_INTERVAL
|
||||||
subvar json-dir JSON_DIR
|
subvar json-dir JSON_DIR
|
||||||
subvar json-interval JSON_INTERVAL
|
subvar json-interval JSON_INTERVAL
|
||||||
|
subvar json-location-accuracy JSON_LOCATION_ACCURACY
|
||||||
subvar extra-args EXTRA_ARGS
|
subvar extra-args EXTRA_ARGS
|
||||||
|
|
||||||
cp -a -f $CONFIGFILE $CONFIGFILE.tmp
|
cp -a -f $CONFIGFILE $CONFIGFILE.tmp
|
||||||
|
|
21
debian/dump1090-mutability.templates
vendored
21
debian/dump1090-mutability.templates
vendored
|
@ -234,6 +234,27 @@ Description: Interval between writing JSON aircraft state, in seconds:
|
||||||
Type: string
|
Type: string
|
||||||
Default: 1
|
Default: 1
|
||||||
|
|
||||||
|
Template: dump1090-mutability/json-location-accuracy
|
||||||
|
Description: Receiver location accuracy to show in the web interface:
|
||||||
|
dump1090 can provide the configured receiver location to the web map,
|
||||||
|
so that the map can show distances from the receiver.
|
||||||
|
.
|
||||||
|
For privacy reasons, if you are making the map publicly available you
|
||||||
|
may not want to show the exact location of the receiver. There are three
|
||||||
|
options available to control what is shown:
|
||||||
|
.
|
||||||
|
approximate: dump1090 will provide the receiver location rounded to the
|
||||||
|
nearest 0.01 degree of latitude and longitude. This gives a location
|
||||||
|
that is accurate to within about 0.5 - 1km.
|
||||||
|
.
|
||||||
|
exact: dump1090 will provide the exact receiver location.
|
||||||
|
.
|
||||||
|
none: dump1090 will not provide the receiver location at all; distance
|
||||||
|
display will be disabled.
|
||||||
|
Type: select
|
||||||
|
Choices: approximate, exact, none
|
||||||
|
Default: approximate
|
||||||
|
|
||||||
Template: dump1090-mutability/extra-args
|
Template: dump1090-mutability/extra-args
|
||||||
Description: Extra arguments to pass to dump1090:
|
Description: Extra arguments to pass to dump1090:
|
||||||
Here you can add any extra arguments you want to pass to dump1090.
|
Here you can add any extra arguments you want to pass to dump1090.
|
||||||
|
|
|
@ -83,6 +83,7 @@ void modesInitConfig(void) {
|
||||||
Modes.fUserLat = MODES_USER_LATITUDE_DFLT;
|
Modes.fUserLat = MODES_USER_LATITUDE_DFLT;
|
||||||
Modes.fUserLon = MODES_USER_LONGITUDE_DFLT;
|
Modes.fUserLon = MODES_USER_LONGITUDE_DFLT;
|
||||||
Modes.json_interval = 1;
|
Modes.json_interval = 1;
|
||||||
|
Modes.json_location_accuracy = 1;
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
//=========================================================================
|
//=========================================================================
|
||||||
|
@ -448,6 +449,7 @@ void showHelp(void) {
|
||||||
"--no-decode Don't decode the message contents beyond the minimum necessary\n"
|
"--no-decode Don't decode the message contents beyond the minimum necessary\n"
|
||||||
"--write-json <dir> Periodically write json output to <dir> (for serving by a separate webserver)\n"
|
"--write-json <dir> Periodically write json output to <dir> (for serving by a separate webserver)\n"
|
||||||
"--write-json-every <t> Write json output every t seconds (default 1)\n"
|
"--write-json-every <t> Write json output every t seconds (default 1)\n"
|
||||||
|
"--json-location-accuracy <n> Accuracy of receiver location in json metadata: 0=no location, 1=approximate, 2=exact\n"
|
||||||
"--help Show this help\n"
|
"--help Show this help\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Debug mode flags: d = Log frames decoded with errors\n"
|
"Debug mode flags: d = Log frames decoded with errors\n"
|
||||||
|
@ -844,6 +846,8 @@ int main(int argc, char **argv) {
|
||||||
strcat(Modes.json_metadata_path, "/receiver.json");
|
strcat(Modes.json_metadata_path, "/receiver.json");
|
||||||
} else if (!strcmp(argv[j], "--write-json-every") && more) {
|
} else if (!strcmp(argv[j], "--write-json-every") && more) {
|
||||||
Modes.json_interval = atoi(argv[++j]);
|
Modes.json_interval = atoi(argv[++j]);
|
||||||
|
} else if (!strcmp(argv[j], "--json-location-accuracy") && more) {
|
||||||
|
Modes.json_location_accuracy = atoi(argv[++j]);
|
||||||
#endif
|
#endif
|
||||||
} else {
|
} else {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
|
|
|
@ -371,6 +371,7 @@ struct { // Internal state
|
||||||
char *json_aircraft_path; // Path to json aircraft file to write, or NULL not to.
|
char *json_aircraft_path; // Path to json aircraft file to write, or NULL not to.
|
||||||
char *json_metadata_path; // Path to json metadata file to write, or NULL not to.
|
char *json_metadata_path; // Path to json metadata file to write, or NULL not to.
|
||||||
int json_interval; // Interval between rewriting the json aircraft file
|
int json_interval; // Interval between rewriting the json aircraft file
|
||||||
|
int json_location_accuracy; // Accuracy of location metadata: 0=none, 1=approx, 2=exact
|
||||||
|
|
||||||
// User details
|
// User details
|
||||||
double fUserLat; // Users receiver/antenna lat/lon needed for initial surface location
|
double fUserLat; // Users receiver/antenna lat/lon needed for initial surface location
|
||||||
|
|
17
net_io.c
17
net_io.c
|
@ -739,11 +739,18 @@ char *generateReceiverJson(int *len)
|
||||||
"\"refresh\" : %d",
|
"\"refresh\" : %d",
|
||||||
MODES_DUMP1090_VERSION, Modes.json_interval * 1000);
|
MODES_DUMP1090_VERSION, Modes.json_interval * 1000);
|
||||||
|
|
||||||
if (Modes.fUserLat != 0.0 || Modes.fUserLon != 0.0) {
|
if (Modes.json_location_accuracy && (Modes.fUserLat != 0.0 || Modes.fUserLon != 0.0)) {
|
||||||
p += sprintf(p, ", " \
|
if (Modes.json_location_accuracy == 1) {
|
||||||
"\"lat\" : %.2f, "
|
p += sprintf(p, ", " \
|
||||||
"\"lon\" : %.2f",
|
"\"lat\" : %.2f, "
|
||||||
Modes.fUserLat, Modes.fUserLon); // round to 2dp - about 0.5-1km accuracy - for privacy reasons
|
"\"lon\" : %.2f",
|
||||||
|
Modes.fUserLat, Modes.fUserLon); // round to 2dp - about 0.5-1km accuracy - for privacy reasons
|
||||||
|
} else {
|
||||||
|
p += sprintf(p, ", " \
|
||||||
|
"\"lat\" : %.6f, "
|
||||||
|
"\"lon\" : %.6f",
|
||||||
|
Modes.fUserLat, Modes.fUserLon); // exact location
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
p += sprintf(p, " }\n");
|
p += sprintf(p, " }\n");
|
||||||
|
|
Loading…
Reference in a new issue