/*
* Project Name: GeoTools GPX Support
* Original Organization Name: The SurveyOs Project
* Original Programmer Name: The Sunburned Surveyor
* Current Maintainer Name: The SurveyOS Project
* Current Maintainer Contact Information
* E-Mail Address: The Sunburned Surveyor
* Copyright Holder: The SurveyOS Project
* Date Last Modified: May 20, 2008
* Current Version Number: 00.00.01
* IDE Name: Eclipse
* IDE Version: 3.2.1
* Type: Java Class
*/
package org.geotools.gpx2.io;
import java.io.*;
import java.util.*;
import org.jdom.Attribute;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.joda.time.DateTime;
import org.geotools.gpx2.gpxentities.*;
public class SimpleGpxReader
{
private Document targetDoc;
public SimpleGpxReader()
{
// Default no-argument constructor.
}
public SimpleWaypoint parseWaypoint(Element argWaypointElement)
{
BasicWaypoint toReturn = new BasicWaypoint();
Attribute latitudeAttribute = argWaypointElement.getAttribute("lat");
String latitudeAsString = latitudeAttribute.getValue();
double latitude = Double.parseDouble(latitudeAsString);
toReturn.setLatitude(latitude);
Attribute longitudeAttribute = argWaypointElement.getAttribute("lon");
String longitudeAsString = longitudeAttribute.getValue();
double longitude = Double.parseDouble(longitudeAsString);
toReturn.setLongitude(longitude);
List<Element> allChildren = argWaypointElement.getChildren();
Iterator<Element> goOverEach = allChildren.iterator();
while(goOverEach.hasNext() == true)
{
Element currentElement = goOverEach.next();
String currentElementName = currentElement.getName();
if(currentElementName.equals("ele"))
{
String elevationAsString = currentElement.getTextTrim();
double elevation = Double.parseDouble(elevationAsString);
toReturn.setElevation(elevation);
}
if(currentElementName.equals("name"))
{
String nameAsString = currentElement.getTextTrim();
toReturn.setName(nameAsString);
}
if(currentElementName.equals("time"))
{
String timeAsString = currentElement.getTextTrim();
DateTime dateAndTimeCollected = new DateTime(timeAsString);
toReturn.setTime(dateAndTimeCollected);
}
}
return toReturn;
}
public BasicTrack parseTrack(Element argTrackElement)
{
BasicTrack toReturn = new BasicTrack();
List<Element> allChildren = argTrackElement.getChildren();
Iterator<Element> goOverEach = allChildren.iterator();
while(goOverEach.hasNext() == true)
{
Element currentElement = goOverEach.next();
String currentElementName = currentElement.getName();
if(currentElementName.equals("name") == true)
{
String name = currentElement.getTextTrim();
toReturn.setName(name);
}
if(currentElementName.equals("trkseg") == true)
{
BasicTrackSegment trackSegment = this
.parseTrackSegment(currentElement);
toReturn.addTrackSegment(trackSegment);
}
}
return toReturn;
}
public void setUpForReading(File argTarget)
{
SAXBuilder builder = new SAXBuilder();
try
{
targetDoc = builder.build(argTarget);
}
catch (JDOMException caught)
{
caught.printStackTrace();
}
catch (IOException caught)
{
caught.printStackTrace();
}
}
public List<SimpleWaypoint> getWaypoints()
{
Element rootElement = targetDoc.getRootElement();
List<Element> allChildElements = rootElement.getChildren();
LinkedList<SimpleWaypoint> waypoints = new LinkedList<SimpleWaypoint>();
Iterator<Element> goOverEach = allChildElements.iterator();
while(goOverEach.hasNext() == true)
{
Element currentElement = goOverEach.next();
String currentElementName = currentElement.getName();
if(currentElementName.equals("wpt") == true)
{
SimpleWaypoint toAdd = this.parseWaypoint(currentElement);
waypoints.add(toAdd);
}
}
return waypoints;
}
public List<Track> getTracks()
{
Element rootElement = targetDoc.getRootElement();
List<Element> allChildElements = rootElement.getChildren();
LinkedList<Track> tracks = new LinkedList<Track>();
Iterator<Element> goOverEach = allChildElements.iterator();
while(goOverEach.hasNext() == true)
{
Element currentElement = goOverEach.next();
String currentElementName = currentElement.getName();
if(currentElementName.equals("trk") == true)
{
Track toAdd = this.parseTrack(currentElement);
tracks.add(toAdd);
}
}
return tracks;
}
private BasicTrackSegment parseTrackSegment(Element argTrackSegmentElement)
{
List<Element> allChildElements = argTrackSegmentElement.getChildren();
LinkedList<SimpleWaypoint> trackPoints = new
LinkedList<SimpleWaypoint>();
Iterator<Element> goOverEach = allChildElements.iterator();
while(goOverEach.hasNext() == true)
{
Element currentElement = goOverEach.next();
String currentElementName = currentElement.getName();
if(currentElementName.equals("trkpt") == true)
{
SimpleWaypoint toAdd = this.parseWaypoint(currentElement);
trackPoints.add(toAdd);
}
}
BasicTrackSegment toReturn = new BasicTrackSegment(trackPoints);
return toReturn;
}
}