The nuisance of GoogleMaps is that it does not know GPX and only KML/GeoRSS files can be uploaded. Fortunately it is easy to convert GPX to KML with gpsbabel:
gpsbabel -i gpx -f file.gpx -x simplify,count=333 -o kml -F file.kml
If there are several files they have to be convert one-by-one and then upload to Google. It would be more comfortable to merge them first and upload it in one go rather than uploading each individually.
As I could not find how to merge serveral GPX files into one using gpsbabel (merge option in gpsbabel puts all track points from all tracks into a single track and sorts them by time stamp. Points with identical time stamps will be dropped) I worked out the following simple Perl script:
#!/usr/bin/perl
#
# Combine GPX files into one
# usage: gpxmerge file1 file2 file3 ....
#
use XML::DOM;
binmode(STDOUT, ":utf8");
my $parser = new XML::DOM::Parser;
for my $file2parse (@ARGV) {
my $doc = $parser->parsefile ($file2parse);
for my $w ( $doc->getElementsByTagName ("wpt") ) { $waypoints .= $w->toString() . "\n"; }
for my $r ( $doc->getElementsByTagName ("rte") ) { $routes .= $r->toString() . "\n"; }
for my $t ( $doc->getElementsByTagName ("trk") ) { $tracks .= $t->toString() . "\n"; }
}
print "<?xml version='1.0' encoding='UTF-8' ?>
<gpx version='1.1' creator='GPXmerger'
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'>\n
<author>tomasz przechlewski </author>
<email>tprzechlewski[at]acm.org</email>
<url>http://pinkaccordions.homelinux.org/Geo/gpx/</url>";
print "$waypoints\n$routes\n$tracks\n";
print "</gpx>\n";
The resulting file structure is as follows: first all waypoints, then all routes and finally all tracks. This is perfectly legal GPX file.
Now I convert GPX to KML using gpsbabel:
gpsbabel -i gpx -f file.gpx -x simplify,count=333 -o kml -F file.kml
Since gpsbabel generates pretty verbose KML files I simplify them using XSLT stylesheet (perhaps this step is superfluous):
xsltproc -o simplified.kml kml2kml.xsl file.kml
and the stylesheet looks like:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:kml="http://www.opengis.net/kml/2.2" >
<xsl:output method="xml" indent='yes' />
<xsl:template match="/">
<!-- ;; http://www.jonmiles.co.uk/2007/07/using-xpaths-text-function/ ;; -->
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2">
<Document>
<Folder>
<name>Waypoints</name>
<xsl:for-each select="//kml:Folder[kml:name/text()='Waypoints']/kml:Placemark//kml:Point">
<Placemark>
<!-- <name><xsl:value-of select='../kml:name'/></name> --><!-- niepotrzebne -->
<Point>
<coordinates>
<xsl:value-of select="kml:coordinates"/>
</coordinates>
</Point>
</Placemark>
</xsl:for-each>
</Folder>
<Folder>
<name>Tracks</name>
<xsl:for-each select="//kml:Placemark//kml:LineString">
<Placemark>
<name>Path</name>
<LineString>
<tessellate>1</tessellate>
<coordinates>
<xsl:value-of select="kml:coordinates"/>
</coordinates>
</LineString>
</Placemark>
</xsl:for-each>
</Folder>
</Document>
</kml>
</xsl:template>
</xsl:stylesheet>
Now KML file is ready to be imported to Google maps via Maps → My Places → Create map.
The result of example conversion can be be found here.
Brak komentarzy:
Prześlij komentarz