@@ -13,10 +13,11 @@ import (
1313 "github.com/ptrv/go-gpx"
1414)
1515
16- var version = "2.1 .0"
16+ var version = "2.2 .0"
1717var target gpx.Wpt
1818var dist * float64
1919var debug * bool
20+ var warnings * bool
2021var wg sync.WaitGroup
2122var globInnerMinDist = math .MaxFloat64
2223var globOuterMinDist = math .MaxFloat64
@@ -33,7 +34,6 @@ func scan(gpxFile *gpx.Gpx, absFileName string) {
3334 }
3435
3536 minDist := math .MaxFloat64
36-
3737 for _ , track := range gpxFile .Tracks {
3838 for _ , segment := range track .Segments {
3939 for _ , waypoint := range segment .Waypoints {
@@ -44,17 +44,16 @@ func scan(gpxFile *gpx.Gpx, absFileName string) {
4444 }
4545 }
4646 }
47-
48- if minDist == math .MaxFloat64 {
49- fmt .Println ("\r [Warning] file: " , absFileName , " has no waypoints" )
47+ if * warnings && minDist == math .MaxFloat64 {
48+ fmt .Println ("\r [Warning]" , absFileName , "has no waypoints" )
49+ printState (finished , total )
50+ finished ++
5051 return
5152 }
52-
5353 if * debug {
5454 fmt .Printf ("\r %8.0f m, %s\n " , minDist , absFileName )
5555 printState (finished , total )
5656 }
57-
5857 if minDist <= * dist {
5958 if globInnerMinDist > minDist {
6059 globInnerMinDist = minDist
@@ -66,78 +65,27 @@ func scan(gpxFile *gpx.Gpx, absFileName string) {
6665 globOuterMinDist = minDist
6766 globOuterMinDistAbsFileName = absFileName
6867 }
69-
7068 finished ++
7169}
7270
73- // scans a gpx datastructure
74- /*func scan(file string) {
75- if *parallel {
76- defer wg.Done()
77- }
78- minDist := math.MaxFloat64
79- var gpxFile, err = gpx.ParseFile(file)
80- absFileName, _ := filepath.Abs(file)
81- if err != nil {
82- fmt.Println("\r[Error] while parsing the file: ", absFileName)
83- return
84- }
85-
86- for _, track := range gpxFile.Tracks {
87- for _, segment := range track.Segments {
88- for _, waypoint := range segment.Waypoints {
89- currDist := waypoint.Distance2D(&target)
90- if minDist > currDist {
91- minDist = currDist
92- }
93- }
94- }
95- }
96-
97- if minDist == math.MaxFloat64 {
98- fmt.Println("\r[Warning] file: ", absFileName, " has no waypoints")
99- return
100- }
101-
102- if *debug {
103- fmt.Printf("\r%8.0f m, %s\n", minDist, absFileName)
104- }
105-
106- if minDist <= *dist {
107- if globInnerMinDist > minDist {
108- globInnerMinDist = minDist
109- globInnerMinDistAbsFileName = absFileName
110- }
111- fmt.Printf("\r%8.0f m, %s\n", minDist, absFileName)
112- } else if globOuterMinDist > minDist {
113- globOuterMinDist = minDist
114- globOuterMinDistAbsFileName = absFileName
115- }
116-
117- if *parallel {
118- finished++
119- printState(finished, total)
120- }
121- }*/
122-
12371func printState (index int , total int ) {
124- fmt .Print ("\r " )
125- fmt .Print (strconv .Itoa (int (math .Round (float64 (index )/ float64 (total )* 100.0 ))), "% scanning..." )
72+ fmt .Print ("\r " , strconv .Itoa (int (math .Round (float64 (index )/ float64 (total )* 100.0 ))), "% scanning..." )
12673}
12774
12875func main () {
12976
13077 lat := flag .Float64 ("lat" , 0 , "latitude of target (North to South)" )
13178 lon := flag .Float64 ("lon" , 0 , "longitude of target (East to West)" )
132- dist = flag .Float64 ("dist" , 1000 , "distance between target and waypoint in meters" )
79+ dist = flag .Float64 ("dist" , 0 , "distance between target and waypoint in meters" )
13380 root := flag .String ("path" , "." , "path containing the gpx files (from the executable)" )
134- parallel = flag .Bool ("parallel" , false , "parallel mode (faster, but this eats up your hardware!)" )
81+ parallel = flag .Bool ("parallel" , true , "parallel scanning mode" )
82+ warnings = flag .Bool ("warnings" , true , "print warnings" )
13583 debug = flag .Bool ("debug" , false , "debug mode (print out all file distances)" )
13684
13785 flag .Parse ()
13886
13987 if len (os .Args ) <= 1 {
140- fmt .Print ("gpx_analyzer version " , version , " \n \n " )
88+ fmt .Println ("gpx_analyzer" , version )
14189 flag .PrintDefaults ()
14290 return
14391 }
@@ -158,7 +106,7 @@ func main() {
158106 }
159107
160108 abs , err := filepath .Abs (* root )
161- fmt .Println ("\r searching in" , abs , strings .Join ([]string {"(" , strconv .Itoa (fileCount ), " GPX-Files)" }, "" ), " parallel =" , * parallel , ":" )
109+ fmt .Println ("\r searching in" , abs , strings .Join ([]string {"(" , strconv .Itoa (fileCount ), " GPX-Files)" }, "" ), "parallel =" , * parallel , "warnings =" , * warnings , ":" )
162110 if err != nil {
163111 panic (err )
164112 }
@@ -173,42 +121,35 @@ func main() {
173121 absFileName , _ := filepath .Abs (file )
174122 var gpxFile , err = gpx .ParseFile (file )
175123 if err != nil {
176- fmt .Println ("\r [Error] while parsing the file: " , absFileName )
124+ fmt .Println ("\r [Error]" , absFileName , "failed to parse file" )
177125 wg .Done ()
178126 finished ++
179127 continue
180128 }
181129 go scan (gpxFile , absFileName )
182130 }
183131 wg .Wait ()
184-
185132 } else {
186133
187134 for i , file := range files {
188135 absFileName , _ := filepath .Abs (file )
189136 var gpxFile , err = gpx .ParseFile (file )
190137 if err != nil {
191- fmt .Println ("\r [Error] while parsing the file: " , absFileName )
138+ fmt .Println ("\r [Error]" , absFileName , "failed to parse file" )
192139 continue
193140 }
194141 scan (gpxFile , absFileName )
195142 printState (i , total )
196143 }
197-
198144 }
199-
200- fmt .Print ("\r " )
201-
145+ fmt .Println ("\r " )
202146 if globInnerMinDist <= math .MaxFloat64 {
203- fmt .Println ("\n \ n Nearest in dist was:" )
147+ fmt .Println ("\n Nearest in dist was:" )
204148 fmt .Printf ("%8.0f m, %s\n " , globInnerMinDist , globInnerMinDistAbsFileName )
205149 }
206-
207150 if globOuterMinDist <= math .MaxFloat64 {
208- fmt .Println ("\n \ n Nearest out of dist was:" )
151+ fmt .Println ("\n Nearest out of dist was:" )
209152 fmt .Printf ("%8.0f m, %s\n " , globOuterMinDist , globOuterMinDistAbsFileName )
210153 }
211-
212154 fmt .Println ("\n Done." )
213-
214155}
0 commit comments