2009-07-16 41 views

Trả lời

7

Bạn sẽ tạo thư viện của riêng mình, nhưng bạn sẽ không viết bất kỳ mã nào.

Tôi khuyên bạn nên xem http://code.google.com/apis/kml/documentation/kmlreference.html. Từ đó bạn có thể lấy số XML Schema. Khi bạn đã có giản đồ, bạn có thể sử dụng JAXB để tạo cây đối tượng để dễ dàng phân tích cú pháp và viết KML.

This may also be a good resource, có vẻ như ai đó đã thực hiện nó!

+1

Tôi đã đi xuống con đường này cho một chút thực hành, có một chút nấc cục ở chỗ có một vài yếu tố va chạm khi lược đồ được chạy qua trình biên dịch. Không có gì lớn, nhưng được chuẩn bị để viết một vài ràng buộc tùy chỉnh. – CurtainDog

1

Vì nó là xml bạn có thể đọc dữ liệu với bất kỳ phân tích cú pháp nhưng vẫn còn là một lib có sẵn tại http://code.google.com/p/libkml/ nó đã gán cho java nhưng lib là trong C++

1

Dưới đây là thực hiện JSOUP tôi hy vọng nó sẽ giúp

public ArrayList<ArrayList<LatLng>> getCoordinateArrays() { 
    ArrayList<ArrayList<LatLng>> allTracks = new ArrayList<ArrayList<LatLng>>(); 

    try { 
     StringBuilder buf = new StringBuilder(); 
     InputStream json = MyApplication.getInstance().getAssets().open("track.kml"); 
     BufferedReader in = new BufferedReader(new InputStreamReader(json)); 
     String str; 
         String buffer; 
     while ((str = in.readLine()) != null) { 
      buf.append(str); 
     } 

     in.close(); 
     String html = buf.toString(); 
     Document doc = Jsoup.parse(html, "", Parser.xmlParser()); 
     ArrayList<String> tracksString = new ArrayList<String>(); 
     for (Element e : doc.select("coordinates")) { 
      tracksString.add(e.toString().replace("<coordinates>", "").replace("</coordinates>", "")); 
     } 

     for (int i = 0; i < tracksString.size(); i++) { 
      ArrayList<LatLng> oneTrack = new ArrayList<LatLng>(); 
      ArrayList<String> oneTrackString = new ArrayList<String>(Arrays.asList(tracksString.get(i).split("\\s+"))); 
      for (int k = 1; k < oneTrackString.size(); k++) { 
       LatLng latLng = new LatLng(Double.parseDouble(oneTrackString.get(k).split(",")[0]), 
         Double.parseDouble(oneTrackString.get(k).split(",")[1])); 
       oneTrack.add(latLng); 
      } 
      allTracks.add(oneTrack); 
     }} 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return allTracks; 
} 
0

osmbonuspack tác phẩm thực sự tốt trong trường hợp xử lý dữ liệu kml.

0

nếu bạn sử dụng phòng thu android :)

dependencies { 
    compile 'org.jsoup:jsoup:1.8.1' 
} 


     // find a way to read the file and store it in a string 

     String inputFileContents = ""; 
     String xmlContent = inputFileContents; 
     Document doc = Jsoup.parse(xml, "", Parser.xmlParser()); 

     for(Element e : doc.select("LineString").select("coordinates")) { 
      // the contents 
      System.out.println(e.text()); 
     } 

Bạn có thể có nhiều lựa chọn() phương thức gọi. tôi đơn giản hóa mã để:

Element e = doc.select("LineString").select("coordinates").first(); 
+0

Lỗi: (20, 29) java: không tìm thấy phương thức phù hợp để phân tích cú pháp (org.jsoup.nodes.Document.OutputSettings.Syntax, java.lang.String, org.jsoup.parser.Parser) phương thức org.jsoup.Jsoup .parse (java.lang.String, java.lang.String, org.jsoup.parser.Parser) không được áp dụng (đối số không khớp, org.jsoup.nodes.Document.OutputSettings.Syntax không thể chuyển đổi thành java.lang. Chuỗi) phương thức – user3871754

+0

nhập khẩu của tôi: nhập org.jsoup.Jsoup; nhập org.jsoup.nodes.Document; nhập org.jsoup.nodes.Element; nhập org.jsoup.parser.Parser; nhập tệp org.jsoup.nodes.Document.OutputSettings.Syntax.xml tĩnh; – user3871754

1

Đây là lựa chọn khác, file kml là một tập tin bình thường, người có cấu trúc file xml. Đây là ví dụ khác, cho tìm kiếm một vị trí cụ thể trong file nhiều placemarks

private static void readKML(InputStream fileKML, String nameCoordinates) { 
    String column = null; 
    Boolean folder = Boolean.TRUE; 
    Boolean placemark = Boolean.FALSE; 
    Boolean placeCorrect = Boolean.FALSE; 
    BufferedReader br = new BufferedReader(new InputStreamReader(fileKML)); 
    try { 
     while ((column = br.readLine()) != null) { 
      if (folder) { 
       int ifolder = column.indexOf("<Folder>"); 
       if (ifolder != -1) { 
        folder = Boolean.FALSE; 
        placemark = Boolean.TRUE; 
        continue; 
       } 
      } 
      if (placemark) { 
       String tmpLine = nameCoordinates; 
       tmpLine = tmpLine.replaceAll("\t", ""); 
       tmpLine = tmpLine.replaceAll(" ", ""); 
       String tmpColumn = column; 
       tmpColumn = tmpColumn.replaceAll("\t", ""); 
       tmpColumn = tmpColumn.replaceAll(" ", ""); 
       int name = tmpColumn.indexOf(tmpLine); 
       if (name != -1) { 
        placemark = Boolean.FALSE; 
        placeCorrect = Boolean.TRUE; 
        continue; 
       } 
      } 
      if (placeCorrect) { 
       int coordin = column.indexOf("<coordinates>"); 
       if (coordin != -1) { 
        String tmpCoordin = column; 
        tmpCoordin = tmpCoordin.replaceAll(" ", ""); 
        tmpCoordin = tmpCoordin.replaceAll("\t", ""); 
        tmpCoordin = tmpCoordin.replaceAll("<coordinates>", ""); 
        tmpCoordin = tmpCoordin 
          .replaceAll("</coordinates>", ""); 
        String[] coo = tmpCoordin.split(","); 
        System.out.println("LONG: "+coo[0]); 
        System.out.println("LATI: "+coo[1]) 
        break; 
       } 
      } 

     } 
     br.close(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return cresp; 
} 
+0

ở đây thiếu dấu chấm phẩy: System.out.println ("LATI:" + coo [1]) – user3871754

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