- package osm.jp.gpx;
-
- import java.io.File;
- import java.io.IOException;
- import java.text.ParseException;
- import java.util.Date;
- import java.util.TreeMap;
-
- import javax.xml.parsers.DocumentBuilder;
- import javax.xml.parsers.DocumentBuilderFactory;
- import javax.xml.parsers.ParserConfigurationException;
-
- import org.w3c.dom.*;
- import org.xml.sax.SAXException;
-
- @SuppressWarnings("serial")
- public class ElementMapTRKSEG extends TreeMap<Date, ElementMapTRKPT> {
- /**
- * TESTing
- * @param argv
- * @throws ParseException
- * @throws ParserConfigurationException
- * @throws IOException
- * @throws SAXException
- * @throws DOMException
- */
- public static void main(String[] argv) throws DOMException, SAXException, IOException, ParserConfigurationException, ParseException {
- ElementMapTRKSEG mapTRKSEG = null;
- mapTRKSEG = new ElementMapTRKSEG();
- mapTRKSEG.parse(new File("testdata/cameradata/separate.gpx"));
- mapTRKSEG.printinfo();
- }
-
- public ElementMapTRKSEG() {
- super(new TimeComparator());
- }
-
- /**
- * GPXファイルをパースする
- * @code{
- * <gpx>
- * <trk>
- * <trkseg>
- * <trkpt lat="35.32123832" lon="139.56965631">
- * <ele>47.20000076293945</ele>
- * <time>2012-06-15T03:00:29Z</time>
- * <hdop>0.5</hdop>
- * </trkpt>
- * </trkseg>
- * </trk>
- * </gpx>
- * }
- *
- * @param gpxFile
- * @return Document
- * @throws SAXException
- * @throws IOException
- * @throws ParserConfigurationException
- * @throws DOMException
- * @throws ParseException
- */
- public Document parse(File gpxFile) throws SAXException, IOException, ParserConfigurationException, DOMException, ParseException {
- DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
- DocumentBuilder builder = factory.newDocumentBuilder();
- factory.setIgnoringElementContentWhitespace(true);
- factory.setIgnoringComments(true);
- factory.setValidating(true);
-
- Node gpx = builder.parse(gpxFile).getFirstChild();
- Document document = gpx.getOwnerDocument();
- NodeList nodes = gpx.getChildNodes();
- for (int i=0; i < nodes.getLength(); i++) {
- Node node2 = nodes.item(i);
- if (node2.getNodeName().equals("trk")) {
- Element trk = (Element) node2;
-
- NodeList nodes1 = trk.getChildNodes();
- for (int i1=0; i1 < nodes1.getLength(); i1++) {
- Node nodeTRKSEG = nodes1.item(i1);
- if (nodeTRKSEG.getNodeName().equals("trkseg")) {
- this.put(nodeTRKSEG);
- }
- }
- }
- }
- return document;
- }
-
- /**
- * @code{
- * 拡張put value:Node<TRKSEG>をputするとNode<TRKSEG>内のNode<TRKSPT>を put(key,value)する。
- * }
- * @param nodeTRKSEG
- * @throws ParseException
- * @throws DOMException
- */
- public void put(Node nodeTRKSEG) throws DOMException, ParseException {
- if (nodeTRKSEG.getNodeName().equals("trkseg")) {
- NodeList nodes2 = nodeTRKSEG.getChildNodes();
-
- ElementMapTRKPT mapTRKPT = new ElementMapTRKPT();
- for (int i2 = 0; i2 < nodes2.getLength(); i2++) {
- Node nodeTRKPT = nodes2.item(i2);
- if (nodeTRKPT.getNodeName().equals("trkpt")) {
- if (ImportPicture.param_GpxNoFirstNode && (i2 == 0)) {
- continue;
- }
- mapTRKPT.put(new TagTrkpt((Element)nodeTRKPT));
- }
- }
- this.put(mapTRKPT);
- }
- }
-
- /**
- * 拡張put value:ElementMapTRKPTをputするとElementMapTRKPT内の最初のエントリのtimeを読み取ってkeyとしてthis.put(key,value)する。
- * @param value
- * @throws DOMException
- */
- public void put(ElementMapTRKPT value) {
- for (Date key : value.keySet()) {
- this.put(key, value);
- return;
- }
- }
-
- public void printinfo() {
- System.out.println(" +--------------------+--------------------|");
- System.out.println(" GPS logging time | First Time | Last Time |");
- System.out.println("|--------------------------------+--------------------+--------------------|");
- for (java.util.Map.Entry<Date, ElementMapTRKPT> map : this.entrySet()) {
- ElementMapTRKPT mapTRKPT = map.getValue();
- mapTRKPT.printinfo();
- }
- System.out.println("|--------------------------------+--------------------+--------------------|");
- System.out.println();
- }
- }