How would i add overall miles to this script?

///////////////////////////////////////////////////////////////////////////////
// loadgpx.4.js
//
// Javascript object to load GPX-format GPS data into Google Maps.
//
// Copyright (C) 2006 Kaz Okuda (http://notions.okuda.ca)
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
//
// If you use this script or have any questions please leave a comment
// at http://notions.okuda.ca/geotagging/projects-im-working-on/gpx-viewer/
// A link to the GPL license can also be found there.
//
///////////////////////////////////////////////////////////////////////////////
//
// History:
//    revision 1 - Initial implementation
//    revision 2 - Removed LoadGPXFileIntoGoogleMap and made it the
callers
//                 responsibility.  Added more options (colour, width,
delta).
//    revision 3 - Waypoint parsing now compatible with Firefox.
//    revision 4 - Upgraded to Google Maps API version 2.  Tried
changing the way
//               that the map calculated the way the center and zoom
level, but
//               GMAP API 2 requires that you center and zoom the map
first.
//               I have left the bounding box calculations commented
out in case
//               they might come in handy in the future.
//
// Author: Kaz Okuda
// URI: http://notions.okuda.ca/geotagging/projects-im-working-on/gpx-viewer/
//
///////////////////////////////////////////////////////////////////////////////

function GPXParser(xmlDoc, map)
{
        this.xmlDoc = xmlDoc;
        this.map = map;
        this.trackcolour = "#ff00ff"; // red
        this.trackwidth = 5;
        this.mintrackpointdelta = 0.0001
}

// Set the colour of the track line segements.
GPXParser.prototype.SetTrackColour = function(colour)
{
        this.trackcolour = colour;
}

// Set the width of the track line segements
GPXParser.prototype.SetTrackWidth = function(width)
{
        this.trackwidth = width;
}

// Set the minimum distance between trackpoints.
// Used to cull unneeded trackpoints from map.
GPXParser.prototype.SetMinTrackPointDelta = function(delta)
{
        this.mintrackpointdelta = delta;
}

GPXParser.prototype.TranslateName = function(name)
{
        if (name == "wpt")
        {
                return "Waypoint";
        }
        else if (name == "trkpt")
        {
                return "Track Point";
        }
}


GPXParser.prototype.CreateMarker = function(point)
{
        var lon = parseFloat(point.getAttribute("lon"));
        var lat = parseFloat(point.getAttribute("lat"));
        var html = "";

        if (point.getElementsByTagName("html").length > 0)
        {
                for (i=0; i<point.getElementsByTagName("html").item
(0).childNodes.length; i++)
                {
                        html += 
point.getElementsByTagName("html").item(0).childNodes
[i].nodeValue;
                }
        }
        else
        {
                // Create the html if it does not exist in the point.
                html = "<b>" + this.TranslateName(point.nodeName) + "</b><br>";
                var attributes = point.attributes;
                var attrlen = attributes.length;
                for (i=0; i<attrlen; i++)
                {
                        html += attributes.item(i).name + " = " + 
attributes.item
(i).nodeValue + "<br>";
                }

                if (point.hasChildNodes)
                {
                        var children = point.childNodes;
                        var childrenlen = children.length;
                        for (i=0; i<childrenlen; i++)
                        {
                                // Ignore empty nodes
                                if (children[i].nodeType != 1) continue;
                                html += children[i].nodeName + " = " + children
[i].firstChild.nodeValue + "<br>";
                        }
                }
        }

        var marker = new GMarker(new GLatLng(lat,lon));
        GEvent.addListener(marker, "click",
                function()
                {
                        marker.openInfoWindowHtml(html);
                }
        );

        this.map.addOverlay(marker);


        // All methods that add items to the map return the bounding box of
what they added.
        //var latlng = new GLatLng(lat,lon);
        //return new GLatLngBounds(latlng,latlng);
}


GPXParser.prototype.AddTrackSegmentToMap = function(trackSegment,
colour, width)
{
        //var latlngbounds = new GLatLngBounds();

        var trackpoints = trackSegment.getElementsByTagName("trkpt");
        if (trackpoints.length == 0)
        {
                return; //latlngbounds;
        }

        var pointarray = [];

        // process first point
        var lastlon = parseFloat(trackpoints[0].getAttribute("lon"));
        var lastlat = parseFloat(trackpoints[0].getAttribute("lat"));
        var latlng = new GLatLng(lastlat,lastlon);
        pointarray.push(latlng);
        //latlngbounds.extend(latlng);

        // Create a marker at the begining of each track segment
        //this.CreateMarker(trackpoints[0]);

        for (var i=1; i < trackpoints.length; i++)
        {
                var lon = parseFloat(trackpoints[i].getAttribute("lon"));
                var lat = parseFloat(trackpoints[i].getAttribute("lat"));

                // Verify that this is far enough away from the last point to be
used.
                var latdiff = lat - lastlat;
                var londiff = lon - lastlon;
                if ( Math.sqrt(latdiff*latdiff + londiff*londiff) >
this.mintrackpointdelta )
                {
                        lastlon = lon;
                        lastlat = lat;
                        latlng = new GLatLng(lat,lon);
                        pointarray.push(latlng);
                        //latlngbounds.extend(latlng);
                }

        }

        var polyline = new GPolyline(pointarray, colour, width);

        this.map.addOverlay(polyline);

        // All methods that add items to the map return the bounding box of
what they added.
        //return latlngbounds;
}

GPXParser.prototype.AddTrackToMap = function(track, colour, width)
{
        var segments = track.getElementsByTagName("trkseg");
        //var latlngbounds = new GLatLngBounds();
        for (var i=0; i < segments.length; i++)
        {
                var segmentlatlngbounds = this.AddTrackSegmentToMap(segments[i],
colour, width);
                //this.AddTrackSegmentToMap(segments[i], colour, width);
                //latlngbounds.extend(segmentlatlngbounds.getSouthWest());
                //latlngbounds.extend(segmentlatlngbounds.getNorthEast());
        }

        // All methods that add items to the map return the bounding box of
what they added.
        //return latlngbounds;
}

GPXParser.prototype.CenterAndZoom = function (trackSegment, maptype)
{

        var pointlist = new Array("trkpt", "wpt");
        var minlat = 0;
        var maxlat = 0;
        var minlon = 0;
        var maxlon = 0;

        for (var pointtype=0; pointtype < pointlist.length; pointtype++)
        {

                // Center the map and zoom on the given segment.
                var trackpoints = trackSegment.getElementsByTagName(pointlist
[pointtype]);

                // If the min and max are uninitialized then initialize them.
                if ( (trackpoints.length > 0) && (minlat == maxlat) && (minlat 
==
0) )
                {
                        minlat = parseFloat(trackpoints[0].getAttribute("lat"));
                        maxlat = parseFloat(trackpoints[0].getAttribute("lat"));
                        minlon = parseFloat(trackpoints[0].getAttribute("lon"));
                        maxlon = parseFloat(trackpoints[0].getAttribute("lon"));
                }

                for (var i=0; i < trackpoints.length; i++)
                {
                        var lon = 
parseFloat(trackpoints[i].getAttribute("lon"));
                        var lat = 
parseFloat(trackpoints[i].getAttribute("lat"));

                        if (lon < minlon) minlon = lon;
                        if (lon > maxlon) maxlon = lon;
                        if (lat < minlat) minlat = lat;
                        if (lat > maxlat) maxlat = lat;
                }
        }

        if ( (minlat == maxlat) && (minlat = 0) )
        {
                this.map.setCenter(new GLatLng(49.327667, -122.942333), 14);
                return;
        }

        // Center around the middle of the points
        var centerlon = (maxlon + minlon) / 2;
        var centerlat = (maxlat + minlat) / 2;

        var bounds = new GLatLngBounds(new GLatLng(minlat, minlon), new
GLatLng(maxlat, maxlon));

        this.map.setCenter(new GLatLng(centerlat, centerlon),
this.map.getBoundsZoomLevel(bounds), maptype);
}

GPXParser.prototype.CenterAndZoomToLatLngBounds = function
(latlngboundsarray)
{
        var boundingbox = new GLatLngBounds();
        for (var i=0; i<latlngboundsarray.length; i++)
        {
                if (!latlngboundsarray[i].isEmpty())
                {
                        boundingbox.extend(latlngboundsarray[i].getSouthWest());
                        boundingbox.extend(latlngboundsarray[i].getNorthEast());
                }
        }

        var centerlat = (boundingbox.getNorthEast().lat() +
boundingbox.getSouthWest().lat()) / 2;
        var centerlng = (boundingbox.getNorthEast().lng() +
boundingbox.getSouthWest().lng()) / 2;
        this.map.setCenter(new GLatLng(centerlat, centerlng),
this.map.getBoundsZoomLevel(boundingbox));
}


GPXParser.prototype.AddTrackpointsToMap = function ()
{
        var tracks = this.xmlDoc.documentElement.getElementsByTagName("trk");
        //var latlngbounds = new GLatLngBounds();

        for (var i=0; i < tracks.length; i++)
        {
                this.AddTrackToMap(tracks[i], this.trackcolour, 
this.trackwidth);
                //var tracklatlngbounds = this.AddTrackToMap(tracks[i],
this.trackcolour, this.trackwidth);
                //latlngbounds.extend(tracklatlngbounds.getSouthWest());
                //latlngbounds.extend(tracklatlngbounds.getNorthEast());
        }

        // All methods that add items to the map return the bounding box of
what they added.
        //return latlngbounds;
}

GPXParser.prototype.AddWaypointsToMap = function ()
{
        var waypoints = this.xmlDoc.documentElement.getElementsByTagName
("wpt");
        //var latlngbounds = new GLatLngBounds();

        for (var i=0; i < waypoints.length; i++)
        {
                this.CreateMarker(waypoints[i]);
                //var waypointlatlngbounds = this.CreateMarker(waypoints[i]);
                //latlngbounds.extend(waypointlatlngbounds.getSouthWest());
                //latlngbounds.extend(waypointlatlngbounds.getNorthEast());
        }

        // All methods that add items to the map return the bounding box of
what they added.
        //return latlngbounds;
}



--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Google Maps API" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/Google-Maps-API?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to