import java.util.List;
// KMLGenerator.java
// by Morgan Wahl
/**
* Class to generate KML output for Traveling-Salesman Approximation.
*
* Three sets of paths can be added to:
* - white ones for all the edges in the graph
*
- thick, orange ones for the minimum spanning tree
*
- thick, green ones for the final path derived from a euclidean tour of
* the spanning tree
*
*/
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();
}
}