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

Last change on this file since 8540 was 8540, checked in by Don-vip, 9 years ago

fix remaining checkstyle issues

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