OSDN Git Service

green: GxpFile.java
[importpicture/importpicture.git] / importPicture / src / osm / jp / gpx / GpxFile.java
diff --git a/importPicture/src/osm/jp/gpx/GpxFile.java b/importPicture/src/osm/jp/gpx/GpxFile.java
new file mode 100644 (file)
index 0000000..721fa0f
--- /dev/null
@@ -0,0 +1,194 @@
+package osm.jp.gpx;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.text.ParseException;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
+import org.w3c.dom.DOMException;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.SAXException;
+
+@SuppressWarnings("serial")
+public class GpxFile extends File {
+    Node gpx = null;
+    ElementMapTRKSEG mapTRKSEG = null;
+    Document document;
+
+       public GpxFile(File file) throws ParserConfigurationException, DOMException, SAXException, IOException, ParseException {
+               super(file.getParentFile(), file.getName());
+
+        DocumentBuilderFactory factory = null;
+        DocumentBuilder        builder = null;
+        
+        factory = DocumentBuilderFactory.newInstance();
+        builder = factory.newDocumentBuilder();
+        factory.setIgnoringElementContentWhitespace(true);
+        factory.setIgnoringComments(true);
+        factory.setValidating(true);
+
+        // GPXファイルをパースする
+        mapTRKSEG = new ElementMapTRKSEG();
+        document = mapTRKSEG.parse(this);
+        
+        // パースされた mapTRKSEG の中身を出力する
+        mapTRKSEG.printinfo();
+        
+        // GPX file --> Node root
+        gpx = builder.parse(this).getFirstChild();
+       }
+       
+       /**
+        * GPX 変換出力
+        * @throws FileNotFoundException 
+        * @throws TransformerException 
+        */
+       public void output(File outDir) throws FileNotFoundException, TransformerException {
+        String fileName = this.getName();
+        String iStr = fileName.substring(0, fileName.length() - 4);
+        File outputFile = new File(outDir, iStr +"_.gpx");
+        System.out.println(this.getAbsolutePath() + " => "+ outputFile.getAbsolutePath());
+        
+               outputFile.getParentFile().mkdirs();
+        DOMSource source = new DOMSource(this.gpx);
+        FileOutputStream os = new FileOutputStream(outputFile);
+        StreamResult result = new StreamResult(os);
+        TransformerFactory transFactory = TransformerFactory.newInstance();
+        Transformer transformer = transFactory.newTransformer();
+        transformer.setOutputProperty(OutputKeys.INDENT, "yes");
+        transformer.setOutputProperty(OutputKeys.METHOD, "xml");
+        transformer.transform(source, result);         
+
+        os = new FileOutputStream(outputFile);
+        result = new StreamResult(os);
+        transformer.transform(source, result);
+       }
+
+    /**
+     * <wpt lat="35.25714922" lon="139.15490497">
+     *         <ele>62.099998474121094</ele>
+     *         <time>2012-06-11T00:44:38Z</time>
+     *         <name><![CDATA[写真]]></name>
+     *         <link href="2012-06-11_09-44-38.jpg">
+     *                 <text>2012-06-11_09-44-38.jpg</text>
+     *         </link>
+     * </wpt>
+     *
+     * <trkpt lat="35.32123832" lon="139.56965631">
+     *         <ele>47.20000076293945</ele>
+     *         <time>2012-06-15T03:00:29Z</time>
+     * </trkpt>
+     *
+     * @return
+     * @param iFile
+     * @param timestamp
+     * @param trkpt
+     */
+    public Element createWptTag(File iFile, File imgDir, long timestamp, Element trkpt) {
+        Element wpt = document.createElement("wpt");
+
+        NamedNodeMap nodeMap = trkpt.getAttributes();
+        if (null != nodeMap) {
+            for (int j=0; j < nodeMap.getLength(); j++ ) {
+                switch (nodeMap.item(j).getNodeName()) {
+                case "lat":
+                    String lat = nodeMap.item(j).getNodeValue();
+                    wpt.setAttribute("lat", lat);
+                    break;
+                case "lon":
+                    String lon = nodeMap.item(j).getNodeValue();
+                    wpt.setAttribute("lon", lon);
+                    break;
+                }
+            }
+        }
+
+        NodeList nodes1 = trkpt.getChildNodes();
+        for (int i1=0; i1 < nodes1.getLength(); i1++) {
+            Node node1 = nodes1.item(i1);
+            NodeList nodes2 = node1.getChildNodes();
+            switch (node1.getNodeName()) {
+            case "ele":
+                for (int i2=0; i2 < nodes2.getLength(); i2++) {
+                    Node node2 = nodes2.item(i2);
+                    if (node2 != null) {
+                        if (node2.getNodeType() == Node.TEXT_NODE) {
+                            String eleStr = node2.getNodeValue();
+                            Element eleE = document.createElement("ele");
+                            eleE.setTextContent(eleStr);
+                            wpt.appendChild(eleE);
+                        }
+                    }
+                }
+                break;
+            case "time":
+                for (int i2=0; i2 < nodes2.getLength(); i2++) {
+                    Node node2 = nodes2.item(i2);
+                    if (node2 != null) {
+                        if (node2.getNodeType() == Node.TEXT_NODE) {
+                            String timeStr = node2.getNodeValue();
+                            Element timeE = document.createElement("time");
+                            timeE.setTextContent(timeStr);
+                            wpt.appendChild(timeE);
+                        }
+                    }
+                }
+                break;
+            case "magvar":
+                for (int i2=0; i2 < nodes2.getLength(); i2++) {
+                    Node node2 = nodes2.item(i2);
+                    if (node2 != null) {
+                        if (node2.getNodeType() == Node.TEXT_NODE) {
+                            String magvarStr = node2.getNodeValue();
+                            Element magvarE = document.createElement("magvar");
+                            magvarE.setTextContent(magvarStr);
+                            wpt.appendChild(magvarE);
+                        }
+                    }
+                }
+                break;
+            case "speed":
+                for (int i2=0; i2 < nodes2.getLength(); i2++) {
+                    Node node2 = nodes2.item(i2);
+                    if (node2 != null) {
+                        if (node2.getNodeType() == Node.TEXT_NODE) {
+                            String speedStr = node2.getNodeValue();
+                            Element speedE = document.createElement("speed");
+                            speedE.setTextContent(speedStr);
+                            wpt.appendChild(speedE);
+                        }
+                    }
+                }
+                break;
+            }
+        }
+
+        Element name = document.createElement("name");
+        name.appendChild(document.createCDATASection("写真"));
+        wpt.appendChild(name);
+
+        Element link = document.createElement("link");
+        link.setAttribute("href", ImportPicture.getShortPathName(imgDir, iFile));
+        Element text = document.createElement("text");
+        text.setTextContent(iFile.getName());
+        link.appendChild(text);
+        wpt.appendChild(link);
+
+        return wpt;
+    }
+}