2009-07-16 16 views

答えて

7

あなた自身のライブラリを作成しますが、コードを書くことはありません。

私はhttp://code.google.com/apis/kml/documentation/kmlreference.htmlをお勧めします。そこからXML Schemaを得ることができます。スキーマを取得したら、JAXBを使用してオブジェクトツリーを生成し、KMLを簡単に解析して書き込むことができます。

This may also be a good resourceのように、他の誰かが既に行っているようです。

+1

私はちょっとした練習のためにこの道を歩みましたが、スキーマがコンパイラで実行されるときにいくつかの要素が衝突するという点で少し問題があります。大事なことはありませんが、いくつかのカスタムバインディングを書く準備はできています。 – CurtainDog

1

それがXMLであるので、あなたは、任意のパーサを使用してデータを読み取ることができますが、それでもこのライブラリは、同様に有望に見える、それはJava用のバインディングを持っていますが、libにはC++で

1

は、ここに私のJSOUPの実装は、それがKMLデータを扱う場合には本当によく

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作品を役に立てば幸いです。あなたはアンドロイドスタジオ:)

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

を使用する場合

0

あなたは、複数のselect()メソッドの呼び出しを持つことができます。 は私がにコードを簡素化:

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

エラー:(20,29)java:parse(org.jsoup.nodes.Document.OutputSettings.Syntax、java.lang.String、org.jsoup.parser.Parser)の適切なメソッドが見つかりません メソッドorg.jsoup.Jsoup .parse(java.lang.String、java.lang.String、org.jsoup.parser.Parser)は適用されません (引数の不一致; org.jsoup.nodes.Document.OutputSettings.Syntaxはjava.langに変換できません。 String) メソッド – user3871754

+0

私のインポート:import 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

これは構造にxmlファイルが含まれている他のオプション、KMLファイルは通常のファイルである、です。 これは、ファイル内の検索一つの特定の目印のために、

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

ここにセミコロンがありません:System.out.println( "LATI:" + coo [1]) – user3871754

関連する問題