XMLElement kml; ArrayList points = new ArrayList(); class p3d { float x,y,z; p3d(float _x,float _y,float _z) { x=_x; y=_y; z=_z; } } p3d max=new p3d(-1000,-1000,-1000); p3d min=new p3d(1000,1000,1000); float xo,yo,sc; 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.x0) { //element contains a single coordinate addPoint(kml.getChild(i).getChild("Point").getChild("coordinates").getContent().split(",")); } 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;jmax.y-min.y) { //scale to X xo=0; yo=(height/2)-((height*((max.y-min.y)/(max.x-min.x))*0.5)); println("ratio: "+str((max.y-min.y)/(max.x-min.x))); } else { //scale to Y xo=(width/2)-((width*((max.x-min.x)/(max.y-min.y))*0.5)); println("ratio: "+str((max.x-min.x)/(max.y-min.y))); yo=0; } size(512,512); background(0); stroke(255); } void draw() { println(str(min.x)+","+str(min.y)+" to "+str(max.x)+","+str(max.y)); println("offset: "+str(xo)+","+str(yo)); sc=max(max.x-min.x,max.y-min.y); if (sc==0.0) println("no movement!"); else { float psc; //pixels per degree if (max.x-min.x>max.y-min.y) psc=width/sc; //maximum span of latitude/longitude else psc=height/sc; //println("scale: "+str(sc)+" :"+str(width/sc)+" pixels/degree"); for (int i=0;i