如何使用Java从kml文件中提取坐标

时间:2018-11-20 06:15:08

标签: java automation maps kml google-earth

我有一个KML文件https://files.fm/u/nbwf3trv,我需要提取所有坐标并将其添加到列表中。

示例:KML文件中的必需坐标。 11.651548147201538,48.249088525772095,0 9.20654296875,50.00086069107056,0 7.010795159396929,51.45182674763414,0“。

请提出建议。 谢谢。

1 个答案:

答案 0 :(得分:1)

JAK(用于KML的Java API)是一种简单而强大的Java API,可以从头开始解析和/或创建KML文件。

https://github.com/micromata/javaapiforkml

这是一段Java代码,可从KML文件中提取坐标。在这种情况下,它是一个地标和一个多边形几何。如果KML文件具有多个地标,那么您将遍历所有地标。

JAXBContext jc = JAXBContext.newInstance(Kml.class);

// create KML reader to parse arbitrary KML into Java Object structure
Unmarshaller u = jc.createUnmarshaller();
Kml kml = (Kml) u.unmarshal(new File("test.kml"));

Placemark placemark = (Placemark) kml.getFeature();
Polygon geom = (Polygon) placemark.getGeometry();
LinearRing linearRing = geom.getOuterBoundaryIs().getLinearRing();
List<Coordinate> coordinates = linearRing.getCoordinates();
for (Coordinate coordinate : coordinates) {
    System.out.println(coordinate.getLongitude());
    System.out.println(coordinate.getLatitude());
    System.out.println(coordinate.getAltitude());
}

如果KML中的第一个功能是“文件夹”,则可以将“文件夹”投射到对象,然后遍历功能。

Folder doc = (Folder) kml.getFeature();
List<Feature> features = doc.getFeature();
for(Feature f : features) {
  ...
}