11

是否有可用于解析 KML 的库?

4

7 回答 7

10

You'll be making your own library, but you won't be writing any code.

I suggest looking at http://code.google.com/apis/kml/documentation/kmlreference.html. From there you can get the XML Schema. Once you've got the schema you can use JAXB to generate an object tree to easily parse and write KML.

This may also be a good resource, looks like someone else has already done it!

于 2009-07-16T20:42:57.470 回答
7

这个库看起来也很有前途:

http://code.google.com/p/javaapiforkml/

该库提供支持至今。

于 2009-12-07T19:31:02.183 回答
2

这是我的 JSOUP 实现,希望对您有所帮助

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;
}
于 2014-01-22T13:07:50.777 回答
1

Since it is xml you can read the data with any parser but still there is an lib available at http://code.google.com/p/libkml/ it has bindings for java but the lib is in C++

于 2009-07-16T20:49:36.113 回答
1

这是其他选项,kml 文件是一个普通文件,其中包含 xml 文件的结构。这是另一个示例,对于在文件中搜索一个特定的地标,多个地标

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;
}
于 2016-10-04T18:38:34.037 回答
0

osmbonuspack在处理 kml 数据时效果很好。

于 2016-05-05T07:35:15.620 回答
0

如果你使用 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());
        }

您可以有多个 select() 方法调用。我将代码简化为:

 Element e = doc.select("LineString").select("coordinates").first();
于 2016-09-29T06:54:50.993 回答