package cz.agents.dbtokmlexporter.kmlitem; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.LinkedList; import java.util.List; import org.apache.log4j.Logger; import cz.agents.alite.googleearth.updates.Kmz; import cz.agents.resultsvisio.kml.KmlItem; import cz.agents.resultsvisio.kml.util.TimeKmlFormater; import de.micromata.opengis.kml.v_2_2_0.Folder; import de.micromata.opengis.kml.v_2_2_0.ScreenOverlay; import de.micromata.opengis.kml.v_2_2_0.TimeSpan; import de.micromata.opengis.kml.v_2_2_0.Units; import de.micromata.opengis.kml.v_2_2_0.Vec2; /** * * @author Marek Cuchy * */ public class ScreenOverlayTimeKmlItem implements KmlItem { private static final Logger logger = Logger.getLogger(ScreenOverlayTimeKmlItem.class); private final long intervalLength; private final List<Record> records = new LinkedList<>(); public ScreenOverlayTimeKmlItem(long intervalLength) { super(); this.intervalLength = intervalLength; } public void addTextOverlay(long time, String text) { records.add(new Record(time, text)); } public Folder initFeatureForKml(Kmz kmz) { Folder folder = new Folder(); for (Record record : records) { try { folder.addToFeature(createScreenOverlay(record)); } catch (UnsupportedEncodingException e) { logger.warn("Record not exported to kml: " + record, e); } } return folder; } private ScreenOverlay createScreenOverlay(Record record) throws UnsupportedEncodingException { ScreenOverlay overlay = new ScreenOverlay(); TimeSpan timeSpan = new TimeSpan(); timeSpan.setBegin(TimeKmlFormater.getTimeForKML(record.time)); timeSpan.setEnd(TimeKmlFormater.getTimeForKML(record.time + intervalLength - 1000)); overlay.withTimePrimitive(timeSpan); overlay.createAndSetIcon().withHref(getHref(record.text)); Vec2 overlayXY = overlay.createAndSetOverlayXY(); overlayXY.withX(0).withY(-1).withXunits(Units.FRACTION).withYunits(Units.FRACTION); Vec2 screenXY = overlay.createAndSetScreenXY(); screenXY.withX(0.1).withY(0.1).withXunits(Units.FRACTION).withYunits(Units.FRACTION); Vec2 rotationXY = overlay.createAndSetRotationXY(); rotationXY.withX(0).withY(0).withXunits(Units.FRACTION).withYunits(Units.FRACTION); Vec2 sizeXY = overlay.createAndSetSize(); sizeXY.withX(0).withY(0).withXunits(Units.FRACTION).withYunits(Units.FRACTION); return overlay; } private String getHref(String text) throws UnsupportedEncodingException { StringBuilder sb = new StringBuilder("http://chart.apis.google.com/chart?chst=d_text_outline&chld=FFBBBB|16|l|BB0000|b"); String[] split = text.split("\n"); for (String s : split) { sb.append("|" + URLEncoder.encode(s, "UTF-8")); } return sb.toString(); } private class Record { public final long time; public final String text; public Record(long time, String text) { super(); this.time = time; this.text = text; } @Override public String toString() { return "Record [time=" + time + ", text=" + text + "]"; } } }