Thanks, I did not know this.
I finished my script and it seems to be working.
Here is the input GPX file (exported from the openstreetmap of my previous post).
<?xml version="1.0" encoding="UTF-8"?>
<gpx xmlns="http://www.topografix.com/GPX/1/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd" version="1.1" creator="overpass-turbo">
<metadata>
<copyright>The data included in this document is from www.openstreetmap.org. The data is made available under ODbL.</copyright>
<desc>Filtered OSM data converted to GPX by overpass turbo</desc>
<time>2013-05-17T10:21:04Z</time>
</metadata>
<wpt lat="46.0175605" lon="11.1050988">
<link href="http://osm.org/browse/node/279578864" />
<name>node 279578864</name>
</wpt>
<wpt lat="46.0949906" lon="11.1181303">
<link href="http://osm.org/browse/node/1404110926" />
<name>node 1404110926</name>
</wpt>
<wpt lat="46.0198794" lon="11.0422148">
<link href="http://osm.org/browse/node/1848898571" />
<name>node 1848898571</name>
</wpt>
<trk>
<link href="http://osm.org/browse/way/151527792" />
<name>way 151527792</name>
<trkseg>
<trkpt lat="46.0570556" lon="11.1367906" />
<trkpt lat="46.0568935" lon="11.1367927" />
<trkpt lat="46.0568943" lon="11.1369187" />
<trkpt lat="46.0570564" lon="11.1369165" />
<trkpt lat="46.0570556" lon="11.1367906" />
</trkseg>
</trk>
<trk>
<link href="http://osm.org/browse/way/44063226" />
<name>way 44063226</name>
<trkseg>
<trkpt lat="46.0520006" lon="11.1445192" />
<trkpt lat="46.0520979" lon="11.1446197" />
<trkpt lat="46.0519798" lon="11.1448573" />
<trkpt lat="46.0518825" lon="11.1447568" />
<trkpt lat="46.0520006" lon="11.1445192" />
</trkseg>
</trk>
<trk>
<link href="http://osm.org/browse/way/75356286" />
<name>way 75356286</name>
<trkseg>
<trkpt lat="46.0683234" lon="11.1287503" />
<trkpt lat="46.0681867" lon="11.1287446" />
<trkpt lat="46.0681845" lon="11.1288559" />
<trkpt lat="46.0683212" lon="11.1288616" />
<trkpt lat="46.0683234" lon="11.1287503" />
</trkseg>
</trk>
<trk>
<link href="http://osm.org/browse/way/75414528" />
<name>way 75414528</name>
<trkseg>
<trkpt lat="46.0661657" lon="11.1247468" />
<trkpt lat="46.066063" lon="11.1247635" />
<trkpt lat="46.0660709" lon="11.1248633" />
<trkpt lat="46.0661735" lon="11.1248466" />
<trkpt lat="46.0661657" lon="11.1247468" />
</trkseg>
</trk>
<trk>
<link href="http://osm.org/browse/way/75689902" />
<name>way 75689902</name>
<trkseg>
<trkpt lat="46.055584" lon="11.1271918" />
<trkpt lat="46.0556168" lon="11.1273733" />
<trkpt lat="46.0555521" lon="11.1273975" />
<trkpt lat="46.0555194" lon="11.127216" />
<trkpt lat="46.055584" lon="11.1271918" />
</trkseg>
</trk>
<trk>
<link href="http://osm.org/browse/way/75689907" />
<name>way 75689907</name>
<trkseg>
<trkpt lat="46.0570914" lon="11.1259289" />
<trkpt lat="46.0571822" lon="11.1260272" />
<trkpt lat="46.0571416" lon="11.1261052" />
<trkpt lat="46.0570507" lon="11.1260069" />
<trkpt lat="46.0570914" lon="11.1259289" />
</trkseg>
</trk>
<trk>
<link href="http://osm.org/browse/way/82078000" />
<name>way 82078000</name>
<trkseg>
<trkpt lat="46.0901187" lon="11.118852" />
<trkpt lat="46.0900159" lon="11.118852" />
<trkpt lat="46.0900159" lon="11.1189392" />
<trkpt lat="46.0901187" lon="11.1189392" />
<trkpt lat="46.0901187" lon="11.118852" />
</trkseg>
</trk>
<trk>
<link href="http://osm.org/browse/way/109578357" />
<name>way 109578357</name>
<trkseg>
<trkpt lat="46.0254467" lon="11.2304638" />
<trkpt lat="46.0253126" lon="11.2304745" />
<trkpt lat="46.0253153" lon="11.2305799" />
<trkpt lat="46.0254498" lon="11.2305684" />
<trkpt lat="46.0254467" lon="11.2304638" />
</trkseg>
</trk>
<trk>
<link href="http://osm.org/browse/way/133399564" />
<name>way 133399564</name>
<trkseg>
<trkpt lat="46.0749179" lon="11.1426166" />
<trkpt lat="46.0749014" lon="11.1427617" />
<trkpt lat="46.0747176" lon="11.1427181" />
<trkpt lat="46.0747342" lon="11.142573" />
<trkpt lat="46.0749179" lon="11.1426166" />
</trkseg>
</trk>
<trk>
<link href="http://osm.org/browse/way/170735434" />
<name>way 170735434</name>
<trkseg>
<trkpt lat="46.0410342" lon="11.057953" />
<trkpt lat="46.0408907" lon="11.058104" />
<trkpt lat="46.0409647" lon="11.0582499" />
<trkpt lat="46.0411081" lon="11.0580989" />
<trkpt lat="46.0410342" lon="11.057953" />
</trkseg>
</trk>
<trk>
<link href="http://osm.org/browse/way/170735435" />
<name>way 170735435</name>
<trkseg>
<trkpt lat="46.041145" lon="11.0581441" />
<trkpt lat="46.041303" lon="11.0585463" />
<trkpt lat="46.0411409" lon="11.0586784" />
<trkpt lat="46.0409829" lon="11.0582762" />
<trkpt lat="46.041145" lon="11.0581441" />
</trkseg>
</trk>
<trk>
<link href="http://osm.org/browse/way/217019045" />
<name>way 217019045</name>
<trkseg>
<trkpt lat="46.0391761" lon="11.0584289" />
<trkpt lat="46.0391142" lon="11.0587273" />
<trkpt lat="46.0389824" lon="11.0586706" />
<trkpt lat="46.0390442" lon="11.0583722" />
<trkpt lat="46.0391761" lon="11.0584289" />
</trkseg>
</trk>
<trk>
<link href="http://osm.org/browse/way/217019046" />
<name>way 217019046</name>
<trkseg>
<trkpt lat="46.0391169" lon="11.058774" />
<trkpt lat="46.0389864" lon="11.0587747" />
<trkpt lat="46.0389872" lon="11.0590768" />
<trkpt lat="46.0391176" lon="11.0590761" />
<trkpt lat="46.0391169" lon="11.058774" />
</trkseg>
</trk>
<trk>
<link href="http://osm.org/browse/way/217042083" />
<name>way 217042083</name>
<trkseg>
<trkpt lat="46.006981" lon="11.1295178" />
<trkpt lat="46.0068012" lon="11.1294589" />
<trkpt lat="46.0068278" lon="11.1292906" />
<trkpt lat="46.0070076" lon="11.1293495" />
<trkpt lat="46.006981" lon="11.1295178" />
</trkseg>
</trk>
<trk>
<link href="http://osm.org/browse/way/221382168" />
<name>way 221382168</name>
<trkseg>
<trkpt lat="46.1390071" lon="11.1101498" />
<trkpt lat="46.138922" lon="11.1101555" />
<trkpt lat="46.1389295" lon="11.1103906" />
<trkpt lat="46.1390146" lon="11.110385" />
<trkpt lat="46.1390071" lon="11.1101498" />
</trkseg>
</trk>
<trk>
<link href="http://osm.org/browse/way/221509483" />
<name>way 221509483</name>
<trkseg>
<trkpt lat="46.0758884" lon="11.1420714" />
<trkpt lat="46.075737" lon="11.1420269" />
<trkpt lat="46.0757525" lon="11.1419168" />
<trkpt lat="46.075904" lon="11.1419613" />
<trkpt lat="46.0758884" lon="11.1420714" />
</trkseg>
</trk>
</gpx>
And here is the resulting GPX file (after running my script) that can be imported into google maps:
<?xml version="1.0" encoding="UTF-8"?>
<gpx xmlns="http://www.topografix.com/GPX/1/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd" version="1.1" creator="overpass-turbo">
<metadata>
<copyright>The data included in this document is from www.openstreetmap.org. The data is made available under ODbL.</copyright>
<desc>Filtered OSM data converted to GPX by overpass turbo</desc>
<time>2013-05-17T10:21:04Z</time>
</metadata>
<wpt lat="46.0175605" lon="11.1050988">
<link href="http://osm.org/browse/node/279578864" />
<name>node 279578864</name>
</wpt>
<wpt lat="46.0949906" lon="11.1181303">
<link href="http://osm.org/browse/node/1404110926" />
<name>node 1404110926</name>
</wpt>
<wpt lat="46.0198794" lon="11.0422148">
<link href="http://osm.org/browse/node/1848898571" />
<name>node 1848898571</name>
</wpt>
<wpt lat="46.0569749" lon="11.1368546">
<link href="http://osm.org/browse/way/151527792" />
<name>way 151527792</name>
</wpt>
<wpt lat="46.0519902" lon="11.1446882">
<link href="http://osm.org/browse/way/44063226" />
<name>way 44063226</name>
</wpt>
<wpt lat="46.0682539" lon="11.1288031">
<link href="http://osm.org/browse/way/75356286" />
<name>way 75356286</name>
</wpt>
<wpt lat="46.0661183" lon="11.1248050">
<link href="http://osm.org/browse/way/75414528" />
<name>way 75414528</name>
</wpt>
<wpt lat="46.0555681" lon="11.1272946">
<link href="http://osm.org/browse/way/75689902" />
<name>way 75689902</name>
</wpt>
<wpt lat="46.0571165" lon="11.1260170">
<link href="http://osm.org/browse/way/75689907" />
<name>way 75689907</name>
</wpt>
<wpt lat="46.0900673" lon="11.1188956">
<link href="http://osm.org/browse/way/82078000" />
<name>way 82078000</name>
</wpt>
<wpt lat="46.0253811" lon="11.2305217">
<link href="http://osm.org/browse/way/109578357" />
<name>way 109578357</name>
</wpt>
<wpt lat="46.0748178" lon="11.1426673">
<link href="http://osm.org/browse/way/133399564" />
<name>way 133399564</name>
</wpt>
<wpt lat="46.0409994" lon="11.0581014">
<link href="http://osm.org/browse/way/170735434" />
<name>way 170735434</name>
</wpt>
<wpt lat="46.0411430" lon="11.0584113">
<link href="http://osm.org/browse/way/170735435" />
<name>way 170735435</name>
</wpt>
<wpt lat="46.0390792" lon="11.0585497">
<link href="http://osm.org/browse/way/217019045" />
<name>way 217019045</name>
</wpt>
<wpt lat="46.0390520" lon="11.0589254">
<link href="http://osm.org/browse/way/217019046" />
<name>way 217019046</name>
</wpt>
<wpt lat="46.0069044" lon="11.1294042">
<link href="http://osm.org/browse/way/217042083" />
<name>way 217042083</name>
</wpt>
<wpt lat="46.1389683" lon="11.1102702">
<link href="http://osm.org/browse/way/221382168" />
<name>way 221382168</name>
</wpt>
<wpt lat="46.0758205" lon="11.1419941">
<link href="http://osm.org/browse/way/221509483" />
<name>way 221509483</name>
</wpt>
</gpx>
If you have any idea how to improve the process please let me know!
Here is my script.
# USAGE: awk -f thisscript.awk inputfile.gpx > outfile.gpx
# Example: awk -f convert_gpx.awk export.gpx > test.gpx
BEGIN {
# List of variables
trackbegin="<trk>";
trackend="</trk>";
trackflag=0;
tracksegment="<trkseg>";
trackpoint="<trkpt";
tracksegmentend = "</trkseg>";
linkstart = "<link";
namestart = "<name>";
trkcounter = 0;
trkpointcounter = 0;
newlatindex = 0;
newlat[newlatindex]="";
newlonindex = 0;
newlon[newlonindex]="";
myline = "";
mylink = "";
myname = "";
latpoint="lat=\"";
#myregexp="\"([^\"]*)\"";
myregexp ="\"([^\"]*)\".*=\"([^\"]*)\"";
# espressione regolare: "([^"]*)" ovvero: raggruppa (parentesi tonde), classe (parentesi quadre), qualsiasi carattere tranne virgolette (^"), N volte (*), che compare tra virgolette (" blablabla ") di cui ho fatto escape (\ davanti a ")
# awk function substr(s,c,n) returns the substring from string s starting from character position c up to a maximum length of n characters. If n is not supplied, the rest of the string from c is returned.
}
{
# myline is equal to the input read line
myline = $0;
# find <trk> tag in input XML
if (match($0,trackbegin)) {
# count the number of <trk> points found
trkcounter++;
# myline set to NULL because we do not print anything
myline = "";
# trackflag set to 1, meaning we are inside a <trk>
trackflag = 1;
}
# find </trk> tag in XML
if (match($0,trackend)) {
# change </trk> to </wpt> and print it later
myline = " </wpt>";
# we reached the end of the <trk> tag
trackflag = 0;
}
# find link tag in XML and we are inside a <trk> tag
if (match($0,linkstart) && trackflag == 1) {
mylink = $0;
myline = "";
}
# find <name> tag in XML and we are inside a <trk> tag
if (match($0,namestart) && trackflag == 1) {
myname = $0;
myline = "";
}
# find <trkseg> in XML
if (match($0,tracksegment)) {
myline = "";
}
# find </trkseg> in XML
if (match($0,tracksegmentend)) {
myline = "";
}
# read first 4 coordinates of the waypoint and average them
# we skip the 5th point because it is an area, defined with 5 points as follows
# Waypoint: A (Xa, Ya), B (Xb, Yb), C(Xc, Yc), D(Xd, Yd), A (Xa, Ya)
if (match($0,trackpoint)) {
if (match($0, myregexp, mycoordinates) AND trkpointcounter<4) {
newlat[newlatindex]=mycoordinates[1];
newlatindex++;
newlon[newlonindex]=mycoordinates[2];
newlonindex++;
}
trkpointcounter++;
# skip 5th point coordinates and print the new WAYPOINT with the average of the read coordinates
if (trkpointcounter==5) {
printf (" <wpt lat=\"%.7f\" lon=\"%.7f\">\n", (newlat[0]+newlat[1]+newlat[2]+newlat[3])/4, (newlon[0]+newlon[1]+newlon[2]+newlon[3])/4);
# print link address and name of the new WAYPOINT
print mylink;
print myname;
# reset counters to 0 for the next waypoint
trkpointcounter = 0;
newlatindex = 0;
newlonindex = 0;
}
myline = "";
}
# if we are not inside a <trk> node and we have something to print
if (myline!="" && trackflag == 0) {
print myline;
}
}
END {
#print "Trovati", trkcounter, "waypoints da convertire!";
}
I copy here http://wiki.openstreetmap.org/wiki/Mkgmap/help/options for reference.