From 6fae25b305d714b3ab7608fa003f1af9bf024545 Mon Sep 17 00:00:00 2001 From: Hsieh Chin Fan Date: Tue, 14 Feb 2023 13:33:23 +0800 Subject: Rename tools into bin --- bin/gpx/footer | 1 + bin/gpx/gpx.check.py | 85 ++++++++++++++++++++++++++++++++++++++++++++++++ bin/gpx/gpx.merge_gpx.sh | 5 +++ bin/gpx/gpx.merge_trk.sh | 4 +++ bin/gpx/gpx2geojson.sh | 48 +++++++++++++++++++++++++++ bin/gpx/header | 10 ++++++ 6 files changed, 153 insertions(+) create mode 100644 bin/gpx/footer create mode 100755 bin/gpx/gpx.check.py create mode 100755 bin/gpx/gpx.merge_gpx.sh create mode 100755 bin/gpx/gpx.merge_trk.sh create mode 100755 bin/gpx/gpx2geojson.sh create mode 100644 bin/gpx/header (limited to 'bin/gpx') diff --git a/bin/gpx/footer b/bin/gpx/footer new file mode 100644 index 0000000..d0759c0 --- /dev/null +++ b/bin/gpx/footer @@ -0,0 +1 @@ + diff --git a/bin/gpx/gpx.check.py b/bin/gpx/gpx.check.py new file mode 100755 index 0000000..10be97c --- /dev/null +++ b/bin/gpx/gpx.check.py @@ -0,0 +1,85 @@ +#!/usr/bin/env python3 + +import sys +import os +import argparse +import copy +import fileinput +from osgeo import ogr +import osr +import urllib.parse + +def rewrite_gpx(filename): + for line in fileinput.input(filename, inplace=True): + if fileinput.isfirstline() and "'" in line: + line = '' + if fileinput.filelineno() == 2 and "version" not in line: + line = line.replace('= threshold: + if not flag: + print(f'{filename} has problem, the following urls shows the points with distance far from {threshold}m:') + print() + flag = True + if add_prefix: + dir = os.path.dirname(filename) + if dir: + dir += '/' + os.rename(filename, f'{dir}invalid_{os.path.basename(filename)}') + + geojson = '{{"type": "LineString", "coordinates": [[{}, {}], [{}, {}]]}}'.format( + geom1.GetX(), geom1.GetY(), + geom2.GetX(), geom2.GetY() + ) + encoded = urllib.parse.quote(geojson) + print('http://geojson.io/#data=data:application/json,{}'.format(encoded)) + print() + else: + break + trkpt = nextTrkpt + +def main(argv): + parser = argparse.ArgumentParser() + parser.add_argument('file', help="you can add multiple gpx files at the same time", nargs='+') + parser.add_argument("-i", help="add prefix to invalid files", action="store_true") + parser.add_argument("-d", help="distance of tolerance(m), 100 by default", dest="distance", default=100) + args = parser.parse_args() + for file in args.file: + check_valid(file, float(args.distance), args.i) + +if __name__ == '__main__': + main(sys.argv) diff --git a/bin/gpx/gpx.merge_gpx.sh b/bin/gpx/gpx.merge_gpx.sh new file mode 100755 index 0000000..4b024a7 --- /dev/null +++ b/bin/gpx/gpx.merge_gpx.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +GPX_DIR=$(dirname $0) + +sed '// p' -nr | cat $GPX_DIR/header - $GPX_DIR/footer diff --git a/bin/gpx/gpx.merge_trk.sh b/bin/gpx/gpx.merge_trk.sh new file mode 100755 index 0000000..c3a72d4 --- /dev/null +++ b/bin/gpx/gpx.merge_trk.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +sed '//,/<\/name>/ d; /<\/trk>/ d; /<\/gpx>/ i \ \ <\/trk>' |\ +awk '// && !x {print " \n combined_trk"; x=1} 1' diff --git a/bin/gpx/gpx2geojson.sh b/bin/gpx/gpx2geojson.sh new file mode 100755 index 0000000..eefcf5e --- /dev/null +++ b/bin/gpx/gpx2geojson.sh @@ -0,0 +1,48 @@ +#! /bin/bash + +<$1 xq '.gpx | + ( + label $out | + if .wpt != null then [.wpt] else break $out end | + flatten[] | + { + type: "Feature", + properties: { name: .name }, + geometry: { + type: "Point", + coordinates: [ + (.["@lon"]|tonumber), + (.["@lat"]|tonumber), + (.ele | if . == null then null else tonumber end) + ] + } + } + ), + ( + label $out | + if .trk != null then [.trk] else break $out end | + flatten[] | + { + type: "Feature", + properties: { name: .name }, + geometry: { + type: "MultiLineString", + coordinates: + [.trkseg] | flatten | map( + .trkpt | map( + [ + (.["@lon"]|tonumber), + (.["@lat"]|tonumber), + (.ele | if . == null then null else tonumber end) + ] + ) + ) + } + } + ) +' | jq -s ' + { + type: "FeatureCollection", + features: . + } +' diff --git a/bin/gpx/header b/bin/gpx/header new file mode 100644 index 0000000..1912e8b --- /dev/null +++ b/bin/gpx/header @@ -0,0 +1,10 @@ + + + + + + Garmin International + + + + -- cgit v1.2.3-70-g09d2