diff options
| author | Tim Redfern <tim@eclectronics.org> | 2012-07-19 15:14:17 +0100 |
|---|---|---|
| committer | Tim Redfern <tim@eclectronics.org> | 2012-07-19 15:14:17 +0100 |
| commit | 01fbd54df87813b43c96a33c97af76556b84cb54 (patch) | |
| tree | 3c8ba070a2a08737267b141aac6f50322dec0e0a /gpsviewer.pde | |
| parent | dd419cfe1232a86583f013bd5fc6b18153bc13f5 (diff) | |
objectified
Diffstat (limited to 'gpsviewer.pde')
| -rw-r--r-- | gpsviewer.pde | 159 |
1 files changed, 98 insertions, 61 deletions
diff --git a/gpsviewer.pde b/gpsviewer.pde index 715c79f..b2a0686 100644 --- a/gpsviewer.pde +++ b/gpsviewer.pde @@ -1,87 +1,124 @@ -XMLElement kml; -ArrayList points = new ArrayList(); +p3d max=new p3d(-1000,-1000,-1000,""); +p3d min=new p3d(1000,1000,1000,""); + +float xOffset,yOffset,spanDegrees,pixelsPerDegree; + +trace pts1,pts2; class p3d { float x,y,z; - p3d(float _x,float _y,float _z) { + String time; + p3d(float _x,float _y,float _z,String _t) { x=_x; y=_y; z=_z; } } -p3d max=new p3d(-1000,-1000,-1000); -p3d min=new p3d(1000,1000,1000); - -float xOffset,yOffset,spanDegrees; - -void addPoint(String[] coord) { - p3d p; - if (coord.length>2) { - p=new p3d(float(coord[0]),float(coord[1]),float(coord[2])); - } - else p=new p3d(float(coord[0]),float(coord[1]),0.0); - points.add(p); - if (p.x>max.x) max.x=p.x; - if (p.y>max.y) max.y=p.y; - if (p.z>max.z) max.z=p.z; - if (p.x<min.x) min.x=p.x; - if (p.y<min.y) min.y=p.y; - if (p.z<min.z) min.z=p.z; -} - -void setup() { - size(512,512); - kml = new XMLElement(this, "tim-openpaths.kml").getChild("Document"); - //kml = new XMLElement(this, "everytrip-demo.kml").getChild("Document"); - int num = kml.getChildCount(); - for (int i = 0; i < num; i++) { - if (kml.getChild(i).getName().equals("Placemark")) { - if (kml.getChild(i).getChildren("Point").length>0) { //element contains a single coordinate - addPoint(kml.getChild(i).getChild("Point").getChild("coordinates").getContent().split(",")); +class trace { + ArrayList points = new ArrayList(); + PApplet parent; + trace(PApplet _this,String filename) { + parent=_this; + parseXml(filename); + } + void addPoint(float _x,float _y,float _z,String _t) { + p3d p=new p3d(_x,_y,_z,_t); + points.add(p); + if (p.x>max.x) max.x=p.x; + if (p.y>max.y) max.y=p.y; + if (p.z>max.z) max.z=p.z; + if (p.x<min.x) min.x=p.x; + if (p.y<min.y) min.y=p.y; + if (p.z<min.z) min.z=p.z; + } + void draw() { + for (int i=0;i<points.size()-1;i++) { + float x1=((((p3d)points.get(i)).x-min.x)*pixelsPerDegree)+xOffset; + float y1=(height-((((p3d)points.get(i)).y-min.y)*pixelsPerDegree))-yOffset; + float x2=((((p3d)points.get(i+1)).x-min.x)*pixelsPerDegree)+xOffset; + float y2=(height-((((p3d)points.get(i+1)).y-min.y)*pixelsPerDegree))-yOffset; + line(x1,y1,x2,y2); } - if (kml.getChild(i).getChildren("coordinates").length>0) { //element contains a table of coordinates - String[] coords=kml.getChild(i).getChild("coordinates").getContent().split("\\n"); - for (int j=0;j<coords.length;j++) { - addPoint(coords[j].split(",")); + } + void parseXml(String _file) { + ArrayList pts = new ArrayList(); + //XMLElement gpx = new XMLElement(this, "2012-07-18 11-25-38-gpstrack.gpx"); + XMLElement gpx = new XMLElement(parent, _file); + //read all the tracks + int trks = gpx.getChildCount(); + for (int i = 0; i < trks; i++) { + XMLElement trk=gpx.getChild(i); + println("trk children: "+str(trk.getChildCount())+": "+trk.getChild(0).getName()); + if (trk.getName().equals("trk")) { + //read all the tracksegs; + int trkseqs = trk.getChildCount(); + for (int j = 0; j < trkseqs; j++) { + XMLElement trkseq=trk.getChild(j); + if (trkseq.getName().equals("trkseg")) { + //read all the trackpts; + int trkpts = trkseq.getChildCount(); + for (int k = 0; k < trkpts; k++) { + XMLElement trkpt=trkseq.getChild(k); + if (trkpt.getName().equals("trkpt")) { + float lat=trkpt.getFloat("lat"); + float lng=trkpt.getFloat("lon"); + float elev=0.0; + String time=""; + int trkptchildren = trkpt.getChildCount(); + for (int l = 0; l < trkptchildren; l++) { + if (trkpt.getChild(l).getName().equals("ele")) { + elev=Float.parseFloat(trkpt.getChild(l).getContent()); + } + if (trkpt.getChild(l).getName().equals("time")) { + time=trkpt.getChild(l).getContent(); + } + } + addPoint(lng,lat,elev,time); + } + } + } + } } } + //work out offsets + if (max.x-min.x>max.y-min.y) { + //scale to X + xOffset=0; + yOffset=(height/2)-((height*((max.y-min.y)/(max.x-min.x))*0.5)); // } + else { + //scale to Y + xOffset=(width/2)-((width*((max.x-min.x)/(max.y-min.y))*0.5)); + println("ratio: "+str((max.x-min.x)/(max.y-min.y))); + yOffset=0; + } + println (_file+" "+str(pts.size())+" data points, bounds: "+str(min.x)+","+str(min.y)+" to "+str(max.x)+","+str(max.y)); } - println ("found "+str(points.size())+" data points"); - - //work out offsets - if (max.x-min.x>max.y-min.y) { - //scale to X - xOffset=0; - yOffset=(height/2)-((height*((max.y-min.y)/(max.x-min.x))*0.5)); // - } - else { - //scale to Y - xOffset=(width/2)-((width*((max.x-min.x)/(max.y-min.y))*0.5)); - println("ratio: "+str((max.x-min.x)/(max.y-min.y))); - yOffset=0; - } +} + +void setup() { + size(512,512); + pts1 = new trace(this,"2012-07-18 11-25-38-gpstrack.gpx"); + pts2 = new trace(this,"1667831-gpstrack.gpx"); background(0); stroke(255); + + spanDegrees=max(max.x-min.x,max.y-min.y); + if (max.x-min.x>max.y-min.y) pixelsPerDegree=width/spanDegrees; //maximum span of latitude/longitude + else pixelsPerDegree=height/spanDegrees; } void draw() { - spanDegrees=max(max.x-min.x,max.y-min.y); if (spanDegrees==0.0) println("no movement!"); else { - float pixelsPerDegree; - if (max.x-min.x>max.y-min.y) pixelsPerDegree=width/spanDegrees; //maximum span of latitude/longitude - else pixelsPerDegree=height/spanDegrees; - for (int i=0;i<points.size()-1;i++) { - float x1=((((p3d)points.get(i)).x-min.x)*pixelsPerDegree)+xOffset; - float y1=(height-((((p3d)points.get(i)).y-min.y)*pixelsPerDegree))-yOffset; - float x2=((((p3d)points.get(i+1)).x-min.x)*pixelsPerDegree)+xOffset; - float y2=(height-((((p3d)points.get(i+1)).y-min.y)*pixelsPerDegree))-yOffset; - line(x1,y1,x2,y2); - } + stroke(255,255,0); + pts1.draw(); + stroke(255,128,128); + pts2.draw(); } noLoop(); + saveFrame(); } |
