4 import java.io.FileNotFoundException;
5 import java.io.FileOutputStream;
6 import java.io.IOException;
7 import java.text.ParseException;
9 import javax.xml.parsers.DocumentBuilder;
10 import javax.xml.parsers.DocumentBuilderFactory;
11 import javax.xml.parsers.ParserConfigurationException;
12 import javax.xml.transform.OutputKeys;
13 import javax.xml.transform.Transformer;
14 import javax.xml.transform.TransformerException;
15 import javax.xml.transform.TransformerFactory;
16 import javax.xml.transform.dom.DOMSource;
17 import javax.xml.transform.stream.StreamResult;
19 import org.w3c.dom.DOMException;
20 import org.w3c.dom.Document;
21 import org.w3c.dom.Element;
22 import org.w3c.dom.NamedNodeMap;
23 import org.w3c.dom.Node;
24 import org.w3c.dom.NodeList;
25 import org.xml.sax.SAXException;
27 @SuppressWarnings("serial")
28 public class GpxFile extends File {
30 ElementMapTRKSEG mapTRKSEG = null;
33 @SuppressWarnings("LeakingThisInConstructor")
34 public GpxFile(File file) throws ParserConfigurationException, DOMException, SAXException, IOException, ParseException {
35 super(file.getParentFile(), file.getName());
37 DocumentBuilderFactory factory = null;
38 DocumentBuilder builder = null;
40 factory = DocumentBuilderFactory.newInstance();
41 builder = factory.newDocumentBuilder();
42 factory.setIgnoringElementContentWhitespace(true);
43 factory.setIgnoringComments(true);
44 factory.setValidating(true);
47 mapTRKSEG = new ElementMapTRKSEG();
48 document = mapTRKSEG.parse(this);
50 // パースされた mapTRKSEG の中身を出力する
51 mapTRKSEG.printinfo();
53 // GPX file --> Node root
54 gpx = builder.parse(this).getFirstChild();
60 * @throws FileNotFoundException
61 * @throws TransformerException
63 public void output(File outDir) throws FileNotFoundException, TransformerException {
64 String fileName = this.getName();
65 String iStr = fileName.substring(0, fileName.length() - 4);
66 File outputFile = new File(outDir, iStr +"_.gpx");
67 System.out.println(this.getAbsolutePath() + " => "+ outputFile.getAbsolutePath());
69 outputFile.getParentFile().mkdirs();
70 DOMSource source = new DOMSource(this.gpx);
71 FileOutputStream os = new FileOutputStream(outputFile);
72 StreamResult result = new StreamResult(os);
73 TransformerFactory transFactory = TransformerFactory.newInstance();
74 Transformer transformer = transFactory.newTransformer();
75 transformer.setOutputProperty(OutputKeys.INDENT, "yes");
76 transformer.setOutputProperty(OutputKeys.METHOD, "xml");
77 transformer.transform(source, result);
79 os = new FileOutputStream(outputFile);
80 result = new StreamResult(os);
81 transformer.transform(source, result);
85 * <wpt lat="35.25714922" lon="139.15490497">
86 * <ele>62.099998474121094</ele>
87 * <time>2012-06-11T00:44:38Z</time>
88 * <name><![CDATA[写真]]></name>
89 * <link href="2012-06-11_09-44-38.jpg">
90 * <text>2012-06-11_09-44-38.jpg</text>
94 * <trkpt lat="35.32123832" lon="139.56965631">
95 * <ele>47.20000076293945</ele>
96 * <time>2012-06-15T03:00:29Z</time>
105 public Element createWptTag(File iFile, File imgDir, long timestamp, Element trkpt) {
106 Element wpt = document.createElement("wpt");
108 NamedNodeMap nodeMap = trkpt.getAttributes();
109 if (null != nodeMap) {
110 for (int j=0; j < nodeMap.getLength(); j++ ) {
111 switch (nodeMap.item(j).getNodeName()) {
113 String lat = nodeMap.item(j).getNodeValue();
114 wpt.setAttribute("lat", lat);
117 String lon = nodeMap.item(j).getNodeValue();
118 wpt.setAttribute("lon", lon);
124 NodeList nodes1 = trkpt.getChildNodes();
125 for (int i1=0; i1 < nodes1.getLength(); i1++) {
126 Node node1 = nodes1.item(i1);
127 NodeList nodes2 = node1.getChildNodes();
128 switch (node1.getNodeName()) {
130 for (int i2=0; i2 < nodes2.getLength(); i2++) {
131 Node node2 = nodes2.item(i2);
133 if (node2.getNodeType() == Node.TEXT_NODE) {
134 String eleStr = node2.getNodeValue();
135 Element eleE = document.createElement("ele");
136 eleE.setTextContent(eleStr);
137 wpt.appendChild(eleE);
143 for (int i2=0; i2 < nodes2.getLength(); i2++) {
144 Node node2 = nodes2.item(i2);
146 if (node2.getNodeType() == Node.TEXT_NODE) {
147 String timeStr = node2.getNodeValue();
148 Element timeE = document.createElement("time");
149 timeE.setTextContent(timeStr);
150 wpt.appendChild(timeE);
156 for (int i2=0; i2 < nodes2.getLength(); i2++) {
157 Node node2 = nodes2.item(i2);
159 if (node2.getNodeType() == Node.TEXT_NODE) {
160 String magvarStr = node2.getNodeValue();
161 Element magvarE = document.createElement("magvar");
162 magvarE.setTextContent(magvarStr);
163 wpt.appendChild(magvarE);
169 for (int i2=0; i2 < nodes2.getLength(); i2++) {
170 Node node2 = nodes2.item(i2);
172 if (node2.getNodeType() == Node.TEXT_NODE) {
173 String speedStr = node2.getNodeValue();
174 Element speedE = document.createElement("speed");
175 speedE.setTextContent(speedStr);
176 wpt.appendChild(speedE);
184 Element name = document.createElement("name");
185 name.appendChild(document.createCDATASection("写真"));
186 wpt.appendChild(name);
188 Element link = document.createElement("link");
189 link.setAttribute("href", ImportPicture.getShortPathName(imgDir, iFile));
190 Element text = document.createElement("text");
191 text.setTextContent(iFile.getName());
192 link.appendChild(text);
193 wpt.appendChild(link);