2009-07-16 18 views

Odpowiedz

7

Będziesz tworzyć własną bibliotekę, ale nie będziesz pisać żadnego kodu.

Proponuję przejrzeć http://code.google.com/apis/kml/documentation/kmlreference.html. Stamtąd można uzyskać XML Schema. Po uzyskaniu schematu można użyć JAXB do wygenerowania drzewa obiektów, aby łatwo parsować i pisać KML.

This may also be a good resource, wygląda na to, że ktoś już to zrobił!

+1

Poszedłem tą drogą do małej praktyki, jest małe rozdarcie, ponieważ istnieje kilka elementów, które kolidują, gdy schemat jest uruchamiany przez kompilator. Nic poważnego, ale przygotuj się na napisanie kilku niestandardowych wiązań. – CurtainDog

1

Ponieważ xml można odczytać dane z dowolnego parsera, ale wciąż nie jest dostępny lib w http://code.google.com/p/libkml/ ma ona powiązania dla Java ale lib jest w C++

1

Oto moja realizacja JSOUP nadzieję, że pomoże

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

jeśli używasz android studio :)

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

można mieć wiele select() wywołuje metodę. ja uproszczony kod do:

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

Błąd: (20, 29) java: nie znaleziono odpowiedniej metody dla parse (org.jsoup.nodes.Document.OutputSettings.Syntax, java.lang.String, org.jsoup.parser.Parser) metoda org.jsoup.Jsoup .parse (java.lang.String, java.lang.String, org.jsoup.parser.Parser) nie ma zastosowania (niedopasowanie argumentu; org.jsoup.nodes.Document.OutputSettings.Syntax nie można przekonwertować na java.lang. String) metoda – user3871754

+0

moje import: import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.parser.Parser; import statycznych plików org.jsoup.nodes.Document.OutputSettings.Syntax.xml; – user3871754

1

to inne opcje, plik KML to normalny plik, który zawierają struktury pliku XML. Jest inny przykład, do szukania jednego określonego oznaczenia miejsca w pliku wielokrotne oznaczenia miejsc

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

tutaj brakuje średnika: System.out.println ("LATI:" + coo [1]) – user3871754

Powiązane problemy