source: josm/trunk/src/org/openstreetmap/josm/io/session/GeoImageSessionImporter.java@ 14095

Last change on this file since 14095 was 12620, checked in by Don-vip, 7 years ago

see #15182 - deprecate all Main logging methods and introduce suitable replacements in Logging for most of them

  • Property svn:eol-style set to native
File size: 4.8 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.io.session;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5
6import java.io.File;
7import java.io.IOException;
8import java.util.ArrayList;
9import java.util.Date;
10import java.util.List;
11
12import org.openstreetmap.josm.data.coor.LatLon;
13import org.openstreetmap.josm.gui.layer.GpxLayer;
14import org.openstreetmap.josm.gui.layer.Layer;
15import org.openstreetmap.josm.gui.layer.geoimage.GeoImageLayer;
16import org.openstreetmap.josm.gui.layer.geoimage.ImageEntry;
17import org.openstreetmap.josm.gui.progress.ProgressMonitor;
18import org.openstreetmap.josm.io.IllegalDataException;
19import org.openstreetmap.josm.tools.Logging;
20import org.w3c.dom.Element;
21import org.w3c.dom.Node;
22import org.w3c.dom.NodeList;
23
24/**
25 * Session importer for {@link GeoImageLayer}.
26 * @since 5505
27 */
28public class GeoImageSessionImporter implements SessionLayerImporter {
29
30 @Override
31 public Layer load(Element elem, SessionReader.ImportSupport support, ProgressMonitor progressMonitor)
32 throws IOException, IllegalDataException {
33 String version = elem.getAttribute("version");
34 if (!"0.1".equals(version)) {
35 throw new IllegalDataException(tr("Version ''{0}'' of meta data for geoimage layer is not supported. Expected: 0.1", version));
36 }
37
38 List<ImageEntry> entries = new ArrayList<>();
39 NodeList imgNodes = elem.getChildNodes();
40 boolean useThumbs = false;
41 for (int i = 0; i < imgNodes.getLength(); ++i) {
42 Node imgNode = imgNodes.item(i);
43 if (imgNode.getNodeType() == Node.ELEMENT_NODE) {
44 Element imgElem = (Element) imgNode;
45 if ("geoimage".equals(imgElem.getTagName())) {
46 ImageEntry entry = new ImageEntry();
47 NodeList attrNodes = imgElem.getChildNodes();
48 for (int j = 0; j < attrNodes.getLength(); ++j) {
49 Node attrNode = attrNodes.item(j);
50 if (attrNode.getNodeType() == Node.ELEMENT_NODE) {
51 handleElement(entry, (Element) attrNode);
52 }
53 }
54 entries.add(entry);
55 } else if ("show-thumbnails".equals(imgElem.getTagName())) {
56 useThumbs = Boolean.parseBoolean(imgElem.getTextContent());
57 }
58 }
59 }
60
61 GpxLayer gpxLayer = null;
62 List<SessionReader.LayerDependency> deps = support.getLayerDependencies();
63 if (!deps.isEmpty()) {
64 Layer layer = deps.get(0).getLayer();
65 if (layer instanceof GpxLayer) {
66 gpxLayer = (GpxLayer) layer;
67 }
68 }
69
70 return new GeoImageLayer(entries, gpxLayer, useThumbs);
71 }
72
73 private static void handleElement(ImageEntry entry, Element attrElem) {
74 try {
75 switch(attrElem.getTagName()) {
76 case "file":
77 entry.setFile(new File(attrElem.getTextContent()));
78 break;
79 case "position":
80 double lat = Double.parseDouble(attrElem.getAttribute("lat"));
81 double lon = Double.parseDouble(attrElem.getAttribute("lon"));
82 entry.setPos(new LatLon(lat, lon));
83 break;
84 case "speed":
85 entry.setSpeed(Double.valueOf(attrElem.getTextContent()));
86 break;
87 case "elevation":
88 entry.setElevation(Double.valueOf(attrElem.getTextContent()));
89 break;
90 case "gps-time":
91 entry.setGpsTime(new Date(Long.parseLong(attrElem.getTextContent())));
92 break;
93 case "exif-orientation":
94 entry.setExifOrientation(Integer.valueOf(attrElem.getTextContent()));
95 break;
96 case "exif-time":
97 entry.setExifTime(new Date(Long.parseLong(attrElem.getTextContent())));
98 break;
99 case "exif-gps-time":
100 entry.setExifGpsTime(new Date(Long.parseLong(attrElem.getTextContent())));
101 break;
102 case "exif-coordinates":
103 entry.setExifCoor(new LatLon(
104 Double.parseDouble(attrElem.getAttribute("lat")),
105 Double.parseDouble(attrElem.getAttribute("lon"))));
106 break;
107 case "exif-image-direction":
108 entry.setExifImgDir(Double.valueOf(attrElem.getTextContent()));
109 break;
110 case "is-new-gps-data":
111 if (Boolean.parseBoolean(attrElem.getTextContent())) {
112 entry.flagNewGpsData();
113 }
114 break;
115 default: // Do nothing
116 }
117 // TODO: handle thumbnail loading
118 } catch (NumberFormatException e) {
119 Logging.trace(e);
120 }
121 }
122}
Note: See TracBrowser for help on using the repository browser.