Парсер GPX для Java?

Существуют ли какие-либо библиотеки Java для разбора файлов GPX? Мне нужно разобрать множество файлов GPX в нашу собственную структуру данных (нашу собственную базу данных).


person Buju    schedule 16.08.2010    source источник


Ответы (5)


Этот вопрос слишком стар, как и ответы. Благодаря миру открытого исходного кода у нас теперь есть jgpx в коде Google (разветвлено несколько раз на github) и GPXParser, на sourceforge.net. Также есть много результатов для поиска по Гитхаб.

Я не уверен, какой из них более зрелый (один из них помечен как Alpha), но вы можете попробовать их и сообщить нам об этом здесь.

Редактировать

Взгляните на processing-gpx, он кажется многообещающим.

Вот быстрый пример

import tomc.gpx.*;

// outside setup()
GPX gpx;

  // inside setup()
  gpx = new GPX(this);

  // when you want to load data
  gpx.parse("test.gpx"); // or a URL

  // inside draw()
  for (int i = 0; i < gpx.getTrackCount(); i++) {
    GPXTrack trk = gpx.getTrack(i);
    // do something with trk.name
    for (int j = 0; j < trk.size(); j++) {
      GPXTrackSeg trkseg = trk.getTrackSeg(j);
      for (int k = 0; k < trkseg.size(); k++) {
        GPXPoint pt = trkseg.getPoint(k);
        // do something with pt.lat or pt.lon
      }
    }
  }

  for (int i = 0; i < gpx.getWayPointCount(); i++) {
    GPXWayPoint wpt = gpx.getWayPoint(i);
    // do something with wpt.lat or wpt.lon or wpt.name or wpt.type
  }
person Mohamed Taher Alrefaie    schedule 17.01.2013
comment
Он привязан к ОС Android. - person David George; 22.12.2020

После некоторых исследований действительно не существует Java API/Lib для анализа файлов GPX, но я нашел хороший подход для его анализа с использованием JAXB.

Используя это руководство: http://www.oracle.com/technetwork/articles/javase/index-140168.html

Шаги:
1. Загрузите файл схемы GPX 1.0 и 1.1 (xsd)
2. Создайте из него файл Java, используя Подключаемый модуль Eclipse
3. Запустите JAXBContext с именем пакета сгенерированных java-файлов GPX (у меня было "topografix.gpx.schema10")
4. Разобрать файл GPX

JAXBContext jc = JAXBContext.newInstance("topografix.gpx.schema10");
Unmarshaller unmarshaller = jc.createUnmarshaller();
Gpx root = (Gpx) unmarshaller.unmarshal(new File("sample.gpx"));
List<Trk> tracks = root.getTrk();
....
person Buju    schedule 19.08.2010
comment
Плагин Eclipse: неработающая ссылка :( sourceforge.net/projects/jaxb-builder возможно? - person Diederik; 13.09.2012
comment
Это хорошее место, чтобы начать быстрее: youtube.com/watch?v=Ip0T91q70PA - person Mohamed Taher Alrefaie; 20.01.2013

Очень хорошо. Однако мне нужно было сделать:

    GpxType gpx = null;
    try {
        JAXBContext jc = JAXBContext.newInstance(PACKAGE_NAME);
        Unmarshaller unmarshaller = jc.createUnmarshaller();
        JAXBElement<GpxType> root = (JAXBElement<GpxType>)unmarshaller
            .unmarshal(new File(TEST_FILE));
        gpx = root.getValue();
    } catch(JAXBException ex) {
       // TODO
    }

    List<TrkType> tracks = gpx.getTrk();
    for(TrkType track : tracks) {
        System.out.println(track.getName());
    }

Кстати, я использовал http://www.topografix.com/GPX/1/1. .

-Кен

person Ken    schedule 19.08.2010
comment
да, я знаю, для простоты я пропустил блок try-catch, а для производственного кода вы должны поддерживать как 1.0, так и 1.1 (так что ваш и мой код объединены). Что я сделал, так это сначала попытался разобрать, используя схему 10, если она выдает исключение, я попытался использовать схему 11 (для 1.1). Если это снова не удастся, этот файл не является поддерживаемым файлом GPX. - person Buju; 24.08.2010


Я не знаю какой-либо библиотеки, специализирующейся на анализе файлов GPX, но, поскольку GPX — это XML, вы можете использовать предпочитаемый парсер Java XML для его чтения.
Формат GPX задокументирован здесь (включая схему XSD): http://www.topografix.com/gpx.asp

person Volker Voecking    schedule 16.08.2010
comment
поскольку GPX очень широко распространен, я подумал, что для этого должна быть какая-то библиотека lib/api. Потому что я не хотел начинать с нуля, особенно если кто-то уже должен был это сделать. - person Buju; 17.08.2010