Существуют ли какие-либо библиотеки Java для разбора файлов GPX? Мне нужно разобрать множество файлов GPX в нашу собственную структуру данных (нашу собственную базу данных).
Парсер GPX для Java?
Ответы (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
}
После некоторых исследований действительно не существует 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();
....
Очень хорошо. Однако мне нужно было сделать:
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. .
-Кен
Готовый к использованию, с открытым исходным кодом и полнофункциональный java GpxParser (и многое другое) здесь https://sourceforge.net/projects/geokarambola/
Подробности здесь https://plus.google.com/u/0/communities/110606810455751902142 а>
С приведенной выше библиотекой синтаксический анализ файла GPX представляет собой один вкладыш:
Gpx gpx = GpxFileIo.parseIn( "SomeGeoCollection.gpx" ) ;
Получение точек, маршрутов или треков тоже тривиально:
ArrayList<Route> routes = gpx.getRoutes( ) ;
Я не знаю какой-либо библиотеки, специализирующейся на анализе файлов GPX, но, поскольку GPX — это XML, вы можете использовать предпочитаемый парсер Java XML для его чтения.
Формат GPX задокументирован здесь (включая схему XSD): http://www.topografix.com/gpx.asp