~foxtrotgps-team/foxtrotgps/trunk

« back to all changes in this revision

Viewing changes to contrib/convert2osm

  • Committer: Joshua Judson Rosen
  • Author(s): Marcus Bauer
  • Date: 2010-08-08 22:28:45 UTC
  • Revision ID: rozzin@geekspace.com-20100808222845-86w25l3qq5nlf5ib
Perl scripts to convert track-logs from tangoGPS format to GPX and OSM.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/bin/perl
 
2
#
 
3
# (c) 2008 Marcus Bauer
 
4
# License: GPLv2
 
5
#
 
6
# Convert tangoGPS .csv logfiles into .osm files for processing in JOSM
 
7
#
 
8
# Usage: ./convert2osm.pl logfiles*.log
 
9
#
 
10
# creates for each input .log one .osm file
 
11
#
 
12
 
 
13
 
 
14
 
 
15
 
 
16
$curr_arg = "";
 
17
 
 
18
while(<>)
 
19
{
 
20
 
 
21
        if($curr_arg ne $ARGV)
 
22
        {
 
23
                if($curr_arg ne "")
 
24
                {
 
25
                        &print_footer;
 
26
                        close(FD);
 
27
 
 
28
                        &convert2osm;
 
29
 
 
30
                }
 
31
                $curr_arg = $ARGV;
 
32
 
 
33
                $filename = $ARGV . ".gpx";
 
34
                print $filename . "\n";
 
35
                open(FD, "> $filename");
 
36
                &print_header;
 
37
        }
 
38
 
 
39
        else
 
40
        {
 
41
                &print_trackpoint;
 
42
        }
 
43
        
 
44
}
 
45
 
 
46
 
 
47
#--------------------------------
 
48
# and the same for the last file:
 
49
#--------------------------------
 
50
&print_footer;
 
51
&convert2osm;
 
52
 
 
53
 
 
54
### END MAIN
 
55
 
 
56
 
 
57
#########################################################
 
58
#
 
59
# sub routines
 
60
#
 
61
#########################################################
 
62
 
 
63
 
 
64
#---------
 
65
# header
 
66
#---------
 
67
 
 
68
sub print_header
 
69
{
 
70
print FD <<EOT
 
71
<?xml version="1.0" encoding="UTF-8"?>
 
72
<gpx    version="1.0"
 
73
        creator="convert2gpx.pl http://www.tangogps.org"
 
74
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 
75
        xmlns="http://www.topografix.com/GPX/1/0"
 
76
        xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd">
 
77
 
 
78
<trk>
 
79
<trkseg>
 
80
 
 
81
EOT
 
82
;
 
83
}
 
84
 
 
85
 
 
86
#-------------
 
87
# trackpoint
 
88
# ------------
 
89
 
 
90
sub print_trackpoint
 
91
{
 
92
@arr = split(',',$_);
 
93
chop @arr[6];
 
94
 
 
95
 
 
96
print FD <<EOT
 
97
<trkpt lat="@arr[0]" lon="@arr[1]">
 
98
  <ele>@arr[2]</ele>
 
99
  <speed>@arr[3]</speed>
 
100
  <course>@arr[4]</course>
 
101
  <fix>3d</fix>
 
102
  <hdop>@arr[5]</hdop>
 
103
  <time>@arr[6]</time>
 
104
</trkpt>
 
105
 
 
106
EOT
 
107
;
 
108
}
 
109
 
 
110
 
 
111
#---------
 
112
# footer
 
113
# --------
 
114
 
 
115
sub print_footer
 
116
{
 
117
 
 
118
print FD <<EOT
 
119
 
 
120
</trkseg>
 
121
</trk>
 
122
</gpx>
 
123
 
 
124
EOT
 
125
;
 
126
 
 
127
}
 
128
 
 
129
 
 
130
#=======================================================================
 
131
#
 
132
# convert 2 osm
 
133
#
 
134
#=======================================================================
 
135
 
 
136
 
 
137
#---------------------------------------------------------------------
 
138
#
 
139
# MAIN SUB convert to .osm
 
140
#
 
141
#----------------------------------------------------------------------
 
142
sub convert2osm
 
143
{
 
144
 
 
145
        #
 
146
        # 1. simplify with gpsbabel
 
147
        #
 
148
        `gpsbabel -i gpx -f $filename -x simplify,error=0.001k -x discard,hdop=3.1 -o csv -F $filename.csv`;
 
149
 
 
150
 
 
151
        #
 
152
        # 2. convert .csv to .osm
 
153
        #
 
154
        &convert_csv2osm;
 
155
 
 
156
 
 
157
        #
 
158
        # 3. remove .csv
 
159
        #
 
160
        `rm $filename.csv`;
 
161
 
 
162
}
 
163
 
 
164
# END MAIN SUB convert2osm
 
165
 
 
166
 
 
167
 
 
168
 
 
169
#----------------
 
170
# .csv to .osm
 
171
#----------------
 
172
 
 
173
sub convert_csv2osm
 
174
{
 
175
 
 
176
        print "converting to osm...\n";
 
177
 
 
178
        $i = 0;
 
179
 
 
180
        open(FDCSV,"$filename.csv") || die $filename.csv;
 
181
        open(FDOSM,"> $filename.osm") || die $filename.osm;
 
182
 
 
183
        &print_header_osm;
 
184
 
 
185
        while($_ = <FDCSV>)
 
186
        {
 
187
                &print_nodes_osm;
 
188
        }
 
189
        
 
190
        &print_way_osm;
 
191
 
 
192
        &print_footer_osm;
 
193
 
 
194
        close FDCSV;
 
195
        close FDOSM;
 
196
 
 
197
}
 
198
 
 
199
 
 
200
#----------
 
201
# header
 
202
#----------
 
203
 
 
204
sub print_header_osm
 
205
{
 
206
print FDOSM "<?xml version='1.0' encoding='UTF-8'?>\n";
 
207
print FDOSM "<osm version='0.5' generator='JOSM'>\n";
 
208
}
 
209
 
 
210
 
 
211
 
 
212
#---------
 
213
# nodes
 
214
#---------
 
215
 
 
216
sub print_nodes_osm
 
217
{
 
218
        $i--;
 
219
 
 
220
        @arr = split(',', $_);
 
221
        $lat = $arr[0];
 
222
        $lon = $arr[1];
 
223
        $lon =~ s/ //;
 
224
        print FDOSM "\t<node id='$i' visible='true' lat='$lat' lon='$lon' />\n";
 
225
}
 
226
 
 
227
 
 
228
#-------
 
229
# way
 
230
#-------
 
231
 
 
232
sub print_way_osm
 
233
{
 
234
        $way_id = $i - 1;
 
235
 
 
236
        print FDOSM "\t<way id='$way_id' action='modify' visible='true'>\n";
 
237
 
 
238
        $j = -1;
 
239
        for(; $i<0; $i++)
 
240
        {
 
241
                print FDOSM "\t\t<nd ref='$j' />\n";
 
242
                $j--;
 
243
        }
 
244
 
 
245
}
 
246
 
 
247
 
 
248
#----------
 
249
# footer
 
250
#----------
 
251
 
 
252
sub print_footer_osm
 
253
{
 
254
        print FDOSM "\t\t<tag k='highway' v='residential' /> \n";
 
255
        print FDOSM "\t\t<tag k='name' v='nn' /> \n";
 
256
 
 
257
        print FDOSM "\t</way> \n";
 
258
        print FDOSM "</osm> \n";
 
259
}
 
260
 
 
261
 
 
262
 
 
263
 
 
264