X-Git-Url: http://gitweb.fperrin.net/?p=GpsPrune.git;a=blobdiff_plain;f=tim%2Fprune%2Fsave%2FKmlExporter.java;h=c091d0c74ac0f705be6acd1ebd977b6010a0af86;hp=11474a6c8e8fb37f911f53f3f79e51edebc5fcf4;hb=da0b1f449260a0b4a94318006382a9039726ef3e;hpb=5625a1abadb5f2ca5f017fe7dbda1d5141cb637b
diff --git a/tim/prune/save/KmlExporter.java b/tim/prune/save/KmlExporter.java
index 11474a6..c091d0c 100644
--- a/tim/prune/save/KmlExporter.java
+++ b/tim/prune/save/KmlExporter.java
@@ -35,8 +35,10 @@ import javax.swing.SwingConstants;
import javax.swing.filechooser.FileFilter;
import tim.prune.I18nManager;
+import tim.prune.data.Altitude;
import tim.prune.data.Coordinate;
import tim.prune.data.DataPoint;
+import tim.prune.data.Field;
import tim.prune.data.Track;
import tim.prune.data.TrackInfo;
import tim.prune.gui.ImageUtils;
@@ -52,6 +54,7 @@ public class KmlExporter implements Runnable
private Track _track = null;
private JDialog _dialog = null;
private JTextField _descriptionField = null;
+ private JCheckBox _altitudesCheckbox = null;
private JCheckBox _kmzCheckbox = null;
private JCheckBox _exportImagesCheckbox = null;
private JProgressBar _progressBar = null;
@@ -116,6 +119,10 @@ public class KmlExporter implements Runnable
descPanel.add(_descriptionField);
mainPanel.add(descPanel);
dialogPanel.add(mainPanel, BorderLayout.CENTER);
+ // Checkbox for altitude export
+ _altitudesCheckbox = new JCheckBox(I18nManager.getText("dialog.exportkml.altitude"));
+ _altitudesCheckbox.setHorizontalTextPosition(SwingConstants.LEFT);
+ mainPanel.add(_altitudesCheckbox);
// Checkboxes for kmz export and image export
_kmzCheckbox = new JCheckBox(I18nManager.getText("dialog.exportkml.kmz"));
_kmzCheckbox.setHorizontalTextPosition(SwingConstants.LEFT);
@@ -166,6 +173,8 @@ public class KmlExporter implements Runnable
*/
private void enableCheckboxes()
{
+ boolean hasAltitudes = _track.hasData(Field.ALTITUDE);
+ if (!hasAltitudes) {_altitudesCheckbox.setSelected(false);}
boolean hasPhotos = _trackInfo.getPhotoList() != null && _trackInfo.getPhotoList().getNumPhotos() > 0;
_exportImagesCheckbox.setSelected(hasPhotos && _kmzCheckbox.isSelected());
_exportImagesCheckbox.setEnabled(hasPhotos && _kmzCheckbox.isSelected());
@@ -339,6 +348,7 @@ public class KmlExporter implements Runnable
}
inWriter.write("\n");
+ boolean exportAltitudes = _altitudesCheckbox.isSelected();
int i = 0;
DataPoint point = null;
boolean hasTrackpoints = false;
@@ -352,7 +362,11 @@ public class KmlExporter implements Runnable
// Make a blob for each waypoint
if (point.isWaypoint())
{
- exportWaypoint(point, inWriter);
+ exportWaypoint(point, inWriter, exportAltitudes);
+ }
+ else if (point.getPhoto() == null)
+ {
+ hasTrackpoints = true;
}
// Make a blob with description for each photo
if (point.getPhoto() != null)
@@ -363,11 +377,7 @@ public class KmlExporter implements Runnable
writtenPhotoHeader = true;
}
photoNum++;
- exportPhotoPoint(point, inWriter, inExportImages, photoNum);
- }
- else
- {
- hasTrackpoints = true;
+ exportPhotoPoint(point, inWriter, inExportImages, photoNum, exportAltitudes);
}
}
// Make a line for the track, if there is one
@@ -375,14 +385,19 @@ public class KmlExporter implements Runnable
{
inWriter.write("\t\n\t\ttrack\n\t\t\n\t\t\n\t\t\t");
+ + "\t\t\t33cc0000\n"
+ + "\t\t\n\t\t\n");
+ if (exportAltitudes) {
+ inWriter.write("\t\t\t1\n\t\t\tabsolute\n");
+ }
+ inWriter.write("\t\t\t");
// Loop over track points
for (i=0; i\n\t\t\n\t");
@@ -396,18 +411,30 @@ public class KmlExporter implements Runnable
* Export the specified waypoint into the file
* @param inPoint waypoint to export
* @param inWriter writer object
+ * @param inExportAltitude true to include altitude
* @throws IOException on write failure
*/
- private void exportWaypoint(DataPoint inPoint, Writer inWriter) throws IOException
+ private void exportWaypoint(DataPoint inPoint, Writer inWriter, boolean inExportAltitude) throws IOException
{
inWriter.write("\t\n\t\t");
inWriter.write(inPoint.getWaypointName().trim());
inWriter.write("\n");
- inWriter.write("\t\t\n\t\t\t");
+ inWriter.write("\t\t\n");
+ if (inExportAltitude && inPoint.hasAltitude()) {
+ inWriter.write("\t\t\tabsolute\n");
+ }
+ inWriter.write("\t\t\t");
inWriter.write(inPoint.getLongitude().output(Coordinate.FORMAT_DEG_WITHOUT_CARDINAL));
inWriter.write(',');
inWriter.write(inPoint.getLatitude().output(Coordinate.FORMAT_DEG_WITHOUT_CARDINAL));
- inWriter.write(",0\n\t\t\n\t\n");
+ inWriter.write(",");
+ if (inExportAltitude && inPoint.hasAltitude()) {
+ inWriter.write("" + inPoint.getAltitude().getValue(Altitude.FORMAT_METRES));
+ }
+ else {
+ inWriter.write("0");
+ }
+ inWriter.write("\n\t\t\n\t\n");
}
@@ -417,9 +444,11 @@ public class KmlExporter implements Runnable
* @param inWriter writer object
* @param inImageLink flag to set whether to export image links or not
* @param inImageNumber number of image for filename
+ * @param inExportAltitude true to include altitude
* @throws IOException on write failure
*/
- private void exportPhotoPoint(DataPoint inPoint, Writer inWriter, boolean inImageLink, int inImageNumber)
+ private void exportPhotoPoint(DataPoint inPoint, Writer inWriter, boolean inImageLink,
+ int inImageNumber, boolean inExportAltitude)
throws IOException
{
inWriter.write("\t\n\t\t");
@@ -436,11 +465,22 @@ public class KmlExporter implements Runnable
+ "Caption for the photo |
]]>");
}
inWriter.write("#camera_icon\n");
- inWriter.write("\t\t\n\t\t\t");
+ inWriter.write("\t\t\n");
+ if (inExportAltitude && inPoint.hasAltitude()) {
+ inWriter.write("\t\t\tabsolute\n");
+ }
+ inWriter.write("\t\t\t");
inWriter.write(inPoint.getLongitude().output(Coordinate.FORMAT_DEG_WITHOUT_CARDINAL));
inWriter.write(',');
inWriter.write(inPoint.getLatitude().output(Coordinate.FORMAT_DEG_WITHOUT_CARDINAL));
- inWriter.write(",0\n\t\t\n\t\n");
+ inWriter.write(",");
+ if (inExportAltitude && inPoint.hasAltitude()) {
+ inWriter.write("" + inPoint.getAltitude().getValue(Altitude.FORMAT_METRES));
+ }
+ else {
+ inWriter.write("0");
+ }
+ inWriter.write("\n\t\t\n\t\n");
}
@@ -448,14 +488,22 @@ public class KmlExporter implements Runnable
* Export the specified trackpoint into the file
* @param inPoint trackpoint to export
* @param inWriter writer object
+ * @param inExportAltitude true to include altitude
*/
- private void exportTrackpoint(DataPoint inPoint, Writer inWriter) throws IOException
+ private void exportTrackpoint(DataPoint inPoint, Writer inWriter, boolean inExportAltitude) throws IOException
{
inWriter.write(inPoint.getLongitude().output(Coordinate.FORMAT_DEG_WITHOUT_CARDINAL));
inWriter.write(',');
inWriter.write(inPoint.getLatitude().output(Coordinate.FORMAT_DEG_WITHOUT_CARDINAL));
- // Altitude not exported, locked to ground by Google Earth
- inWriter.write(",0\n");
+ // Altitude either absolute or locked to ground by Google Earth
+ inWriter.write(",");
+ if (inExportAltitude && inPoint.hasAltitude()) {
+ inWriter.write("" + inPoint.getAltitude().getValue(Altitude.FORMAT_METRES));
+ }
+ else {
+ inWriter.write("0");
+ }
+ inWriter.write("\n");
}