2009-07-16 9 views

Respuesta

7

Hará su propia biblioteca, pero no va a escribir ningún código.

Sugiero mirar http://code.google.com/apis/kml/documentation/kmlreference.html. Desde allí puede obtener el XML Schema. Una vez que tenga el esquema, puede usar JAXB para generar un árbol de objetos para analizar y escribir fácilmente KML.

This may also be a good resource, parece que alguien más ya lo ha hecho.

+1

Fui por este camino para practicar un poco, hay un pequeño inconveniente en que hay un par de elementos que chocan cuando el esquema se ejecuta a través del compilador. Nada importante, pero prepárate para escribir algunos enlaces personalizados. – CurtainDog

1

Dado que es XML se puede leer los datos con cualquier analizador pero todavía hay un lib disponible en http://code.google.com/p/libkml/ tiene enlaces para Java, pero el lib está en C++

1

Aquí está mi aplicación JSOUP creo que sirve

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

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

Puede tener varias llamadas a métodos de selección(). que simplifica el código para:

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

Error: (20, 29) java: no se ha encontrado un método adecuado para parse (org.jsoup.nodes.Document.OutputSettings.Syntax, java.lang.String, org.jsoup.parser.Parser) method org.jsoup.Jsoup .parse (java.lang.String, java.lang.String, org.jsoup.parser.Parser) no es aplicable (argumento no coincide; org.jsoup.nodes.Document.OutputSettings.Syntax no se puede convertir a java.lang. Cadena) método – user3871754

+0

mis importaciones: importación org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.parser.Parser; import static org.jsoup.nodes.Document.OutputSettings.Syntax.xml; – user3871754

1

Ésta es otra opción, el archivo KML es un archivo normal, que contienen la estructura del archivo XML. Este es otro ejemplo, para la búsqueda de una marca de posición específica en el archivo de las múltiples marcas de posición

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

aquí falta el punto y coma: System.out.println ("LATI:" + coo [1]) – user3871754

Cuestiones relacionadas