2013-09-06 22 views
5

Tôi đi theo ví dụ này để phân tích một tập tin GPX địa phương trong Android: http://android-coding.blogspot.pt/2013/01/get-latitude-and-longitude-from-gpx-file.htmlPhân tích tập tin GPX địa phương trong Android

Tất cả hoạt động tốt để truy cập "lat" và "dài" nhưng tôi cũng cần phải nhận được "ele" giá trị nhưng tất cả các dự án của tôi đều không thành công. Bất kỳ ai cũng có thể cho tôi một số lượt truy cập để làm điều đó?

Cảm ơn trước! Trân trọng, NR.

Trả lời

2

bạn có nút "Nút nút = nodelist_trkpt.item (i);" trong vòng lặp đầu tiên của bạn. Lấy các phần tử con từ nút này chạy qua các phần tử con này.

ví dụ .:

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()); 
    } 
} 
+0

Hoàn hảo! Cảm ơn – user2649377

1

Cập nhật: Tôi cũng đã thêm phần tử phân tích cú pháp "ele", vì vậy mã này có thể phù hợp với yêu cầu của bạn.

Tôi sẽ đề xuất phương pháp tiếp cận khác nhau: https://gist.github.com/kamituel/6465125.

Trong cách tiếp cận của tôi, tôi không tạo ra một ArrayList của tất cả các điểm theo dõi (điều này được thực hiện trong ví dụ bạn đã đăng). Danh sách như vậy có thể tiêu thụ khá nhiều bộ nhớ, có thể là một vấn đề trên Android.

Tôi thậm chí đã từ bỏ việc sử dụng phân tích cú pháp regex để tránh phân bổ quá nhiều đối tượng (khiến trình thu gom rác chạy).

Kết quả là, chạy Java với kích thước heap 16Mb, phân tích cú pháp tệp GPX với hơn 600 điểm, bộ thu gom rác sẽ chỉ chạy 12 lần. Tôi chắc rằng người ta có thể xuống thấp hơn, nhưng tôi đã không tối ưu hóa nó nhiều.

Cách sử dụng:

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

Tôi đã sử dụng thành công mã này để phân tích khoảng 100 Mb bộ GPX tập tin trên Android. Xin lỗi nó không có trong repo thường xuyên, tôi đã không có kế hoạch để chia sẻ nó chỉ được nêu ra.

+0

Thats tuyệt vời! Cảm ơn – user2649377

1

tôi đã chuyển các GPXParser thư viện bằng cách ghitabot với Android.

https://github.com/urizev/j4gpx

+0

cách sử dụng trong studio? – Prasad

+0

@Prasad Thêm tệp jar vào thư mục libs – Urizev

+0

thư viện này sẽ hỗ trợ tiện ích mở rộng trong tệp gpx – Prasad

3

tôi sẽ bổ sung thêm thư viện của tôi cho GPX phân tích những câu trả lời: https://github.com/ticofab/android-gpx-parser. Nó cung cấp hai cách để phân tích bạn GPX file: một khi bạn có được/tạo một đối tượng GPXParser (mParser trong các ví dụ dưới đây), sau đó bạn có thể hoặc phân tích trực tiếp tập tin GPX của bạn

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 
} 

hoặc bạn có thể phân tích một tập tin từ xa:

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 
     } 
    } 
}); 

Đóng góp được hoan nghênh.

+0

bạn có thể cho tôi biết cách phân tích cú pháp mở rộng trong tệp GPx bằng cách sử dụng thư viện của bạn – Prasad

+0

hey @Prasad Tôi đã thấy [vấn đề về GitHub] của bạn (https://github.com/ticofab/android-gpx-parser/issues/11), nhưng chưa có thời gian để làm việc. Vui lòng thêm chức năng và mở yêu cầu kéo :) – ticofab

Các vấn đề liên quan