онлайн Разбор локального файла gpx на Android



geotagging (4)

Обновление: я добавил синтаксический анализ элемента «ele», поэтому этот код может соответствовать вашим требованиям.

Я предлагаю другой подход: https://gist.github.com/kamituel/6465125 .

В моем подходе я не создаю ArrayList всех точек трека (это делается в примере, который вы опубликовали). Такой список может потреблять довольно много памяти, что может быть проблемой для Android.

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

В результате, запуск Java с размером кучи 16 Мб, разбор GPX-файла с более чем 600 точками, сборщик мусора будет выполняться всего 12 раз. Я уверен, что можно пойти ниже, но я еще не оптимизировал его.

Применение:

GpxParser parser = new GpxParser(new FileInputStream(file));
TrkPt point = null;
while ((point = parser.nextTrkPt()) != null) {
  // point.getLat()
  // point.getLon()
}

Я успешно использовал этот код для анализа около 100 МБ файлов GPX на Android. Извините, что это не в обычном репо, я еще не планировал поделиться им.

Я последовал этому примеру, чтобы проанализировать локальный файл GPX в Android: http://android-coding.blogspot.pt/2013/01/get-latitude-and-longitude-from-gpx-file.html

Все работает нормально, чтобы получить доступ к «лат» и «длинный», но мне нужно также получить значение «ele», но все мои пробники оказались безуспешными. Кто-нибудь может дать мне несколько хитов, чтобы сделать это?

Заранее спасибо! С наилучшими пожеланиями, Н.Р.



Answer #2

у вас есть «Node node = nodelist_trkpt.item (i)»; в вашем первом цикле. Получите дочерние элементы из этого узла, пропустив эти дочерние элементы.

например:

NodeList nList = node.getChildNodes();
for(int j=0; j<nList.getLength(); j++) {
    Node el = nList.item(j);
    if(el.getNodeName().equals("ele")) {
     System.out.println(el.getTextContent());
  }
}

Answer #3

Я добавлю свою библиотеку для разбора GPX к этим ответам: https://github.com/ticofab/android-gpx-parser . Он предоставляет два способа анализа вашего файла GPX: как только вы получаете / создаете объект mParser ( mParser в приведенных ниже примерах), вы можете либо проанализировать непосредственно ваш GPX-файл

Gpx parsedGpx = null;
try {
    InputStream in = getAssets().open("test.gpx");
    parsedGpx = mParser.parse(in);
} catch (IOException | XmlPullParserException e) {
    e.printStackTrace();
}
if (parsedGpx == null) {
    // error parsing track
} else {
    // do something with the parsed track
}

или вы можете проанализировать удаленный файл:

mParser.parse("http://myserver.com/track.gpx", new GpxFetchedAndParsed() {
    @Override
    public void onGpxFetchedAndParsed(Gpx gpx) {
        if (gpx == null) {
            // error parsing track
        } else {
            // do something with the parsed track
        }
    }
});

Взносы приветствуются.





gpx