अद्यतन: मैंने पार्सिंग "ele" तत्व भी जोड़ा है, इसलिए यह कोड आपकी आवश्यकताओं से मेल खा सकता है।
मैं अलग-अलग दृष्टिकोण का प्रस्ताव दूंगा: https://gist.github.com/kamituel/6465125।
मेरे दृष्टिकोण में मैं सभी ट्रैक पॉइंट्स का एक ऐरेलिस्ट नहीं बनाता (यह आपके द्वारा पोस्ट किए गए उदाहरण में किया जाता है)। ऐसी सूची काफी मेमोरी का उपभोग कर सकती है, जो एंड्रॉइड पर एक मुद्दा हो सकती है।
मैंने कई ऑब्जेक्ट्स आवंटित करने से बचने के लिए रेगेक्स पार्सिंग का उपयोग करने पर भी छोड़ दिया है (जो कचरा कलेक्टर चलाने के लिए कारण बनता है)।
परिणामस्वरूप, जावा को 16 एमबी ढेर आकार के साथ चलाना, 600 अंकों से अधिक जीपीएक्स फ़ाइल को पार्स करना, कचरा कलेक्टर केवल 12 गुना चलाया जाएगा। मुझे यकीन है कि कोई कम हो सकता है, लेकिन मैंने इसे अभी तक अनुकूलित नहीं किया है।
उपयोग:
GpxParser parser = new GpxParser(new FileInputStream(file));
TrkPt point = null;
while ((point = parser.nextTrkPt()) != null) {
// point.getLat()
// point.getLon()
}
मैं सफलतापूर्वक Android पर करीब 100 एमबी GPX की फ़ाइलों को पार्स करने के लिए इस कोड का उपयोग किया है। क्षमा करें यह नियमित रेपो में नहीं है, मैंने अभी तक इसे साझा करने की योजना नहीं बनाई है।
बिल्कुल सही! धन्यवाद – user2649377