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

Last change on this file since 7937 was 7937, checked in by bastiK, 9 years ago

add subversion property svn:eol=native

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