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

Last change on this file since 6093 was 6093, checked in by akks, 11 years ago

see #8902 - collection size ==/!= 0 -> isEmpty()/!isEmpty() (patch by shinigami)

File size: 4.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.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<ImageEntry>();
33 NodeList imgNodes = elem.getChildNodes();
34 for (int i=0; i<imgNodes.getLength(); ++i) {
35 Node imgNode = imgNodes.item(i);
36 if (imgNode.getNodeType() == Node.ELEMENT_NODE) {
37 Element imgElem = (Element) imgNode;
38 if (imgElem.getTagName().equals("geoimage")) {
39 ImageEntry entry = new ImageEntry();
40 NodeList attrNodes = imgElem.getChildNodes();
41 for (int j=0; j<attrNodes.getLength(); ++j) {
42 Node attrNode = attrNodes.item(j);
43 if (attrNode.getNodeType() == Node.ELEMENT_NODE) {
44 Element attrElem = (Element) attrNode;
45 try {
46 if (attrElem.getTagName().equals("file")) {
47 entry.setFile(new File(attrElem.getTextContent()));
48 } else if (attrElem.getTagName().equals("position")) {
49 double lat = Double.parseDouble(attrElem.getAttribute("lat"));
50 double lon = Double.parseDouble(attrElem.getAttribute("lon"));
51 entry.setPos(new LatLon(lat, lon));
52 } else if (attrElem.getTagName().equals("speed")) {
53 entry.setSpeed(Double.parseDouble(attrElem.getTextContent()));
54 } else if (attrElem.getTagName().equals("elevation")) {
55 entry.setElevation(Double.parseDouble(attrElem.getTextContent()));
56 } else if (attrElem.getTagName().equals("gps-time")) {
57 entry.setGpsTime(new Date(Long.parseLong(attrElem.getTextContent())));
58 } else if (attrElem.getTagName().equals("gps-orientation")) {
59 entry.setExifOrientation(Integer.parseInt(attrElem.getTextContent()));
60 } else if (attrElem.getTagName().equals("exif-time")) {
61 entry.setExifTime(new Date(Long.parseLong(attrElem.getTextContent())));
62 } else if (attrElem.getTagName().equals("exif-coordinates")) {
63 double lat = Double.parseDouble(attrElem.getAttribute("lat"));
64 double lon = Double.parseDouble(attrElem.getAttribute("lon"));
65 entry.setExifCoor(new LatLon(lat, lon));
66 } else if (attrElem.getTagName().equals("exif-image-direction")) {
67 entry.setExifImgDir(Double.parseDouble(attrElem.getTextContent()));
68 }
69 // TODO: handle thumbnail loading
70 } catch (NumberFormatException e) {
71 // nothing
72 }
73 }
74 }
75 entries.add(entry);
76 }
77 }
78 }
79
80 GpxLayer gpxLayer = null;
81 List<SessionReader.LayerDependency> deps = support.getLayerDependencies();
82 if (!deps.isEmpty()) {
83 Layer layer = deps.iterator().next().getLayer();
84 if (layer instanceof GpxLayer) {
85 gpxLayer = (GpxLayer) layer;
86 }
87 }
88
89 return new GeoImageLayer(entries, gpxLayer);
90 }
91
92}
Note: See TracBrowser for help on using the repository browser.