import java.util.List; // KMLGenerator.java // by Morgan Wahl /** * Class to generate KML output for Traveling-Salesman Approximation. * */ public class KMLGenerator { private List places; private List origConnections; private List mstConnections; private List routeConnections; public KMLGenerator(List places, List origConnections, List mstConnections, List routeConnections) { this.places = places; this.origConnections = origConnections; this.mstConnections = mstConnections; this.routeConnections = routeConnections; } /** * returns the KML for the paths contained in this KMLGenerator */ public String toString() { // TODO use actual XML classes // yes, this is really ugly, but it works. StringBuffer kml = new StringBuffer(); kml.append(""); kml.append(""); kml.append("\n"); kml.append("Approximate TSP"); kml.append("1"); // places style kml.append("\n"); // whole graph style kml.append(""); // mst style kml.append("\n"); // route style kml.append("\n"); // the place-names kml.append("\n"); kml.append("places\n"); kml.append("0\n"); for (Place p : places) { kml.append("\n"); kml.append("#places\n"); kml.append("" + p.getName() + "\n"); kml.append("\n"); kml.append("\n"); kml.append(p.getLon() + "," + p.getLat() + ",0\n"); kml.append("\n"); kml.append("\n"); kml.append(""); } kml.append("\n"); // the whole graph kml.append("\n"); kml.append("whole graph\n"); kml.append("0\n"); for (Connection p : origConnections) { kml.append(connectionToKML(p, "graph")); } kml.append("\n"); // the minimum-spaning tree kml.append("\n"); kml.append("MST\n"); kml.append("1\n"); for (Connection p : mstConnections) { kml.append(connectionToKML(p, "mst")); } kml.append("\n"); // the solution route kml.append("\n"); kml.append("route\n"); kml.append("#route\n"); kml.append("1\n"); kml.append("\n"); kml.append("1\n"); kml.append("clampToGround\n"); kml.append("\n"); for (Connection p : routeConnections) { kml.append(p.getLon1() + "," + p.getLat1() + " "); } kml.append("\n"); kml.append("\n"); kml.append(""); kml.append("\n"); kml.append("\n"); return kml.toString(); } private String connectionToKML(Connection p, String styleUrl) { StringBuffer kml = new StringBuffer(); kml.append("\n"); kml.append("" + p.getLabel() + "\n"); kml.append("" + styleUrl + "\n"); kml.append("\n"); kml.append("1\n"); kml.append("clampToGround\n"); kml.append("\n"); kml.append(p.getLon1() + "," + p.getLat1() + " "); kml.append(p.getLon2() + "," + p.getLat2() + "\n"); kml.append("\n"); kml.append("\n"); kml.append(""); return kml.toString(); } }