从Java中的KML文件中提取坐标

Shu*_*udy 5 java parsing kml coordinates jak

我正在尝试用Java解析Kml文件.因为我需要获取地标的坐标,在java中生成一个poligon并使用它.

但我的问题是,我正在使用JAK这个库解析它,我无法提取我想要的信息.(我在官方页面中读到了"帮助",但我没有找到任何帮助解决我的问题)

我正在尝试这样做:

final Kml kml = Kml.unmarshal(new File("C:/Users/A556520/Documents/Proyectos/GeoFencing/res/labasa.kml"));
final Document document = (Document)kml.getFeature();       
List<Feature> listafeatures = document.getFeature();        
Run Code Online (Sandbox Code Playgroud)

但在这一点上我不知道如何提取坐标.

我试图解析的文件就是这个:la basa

A4L*_*A4L 10

的javadoc(非官方),您需要检查-使用instanceof-每个Feature是否是一个Placemark,如果是投给它,并得到了Geometry其本身需要检查它是否是一个Polygon,如果是,则投给它.之后,坐标的路径如下(就像它在kml文件中一样):

getOuterBoundaryIs > getlinearRing > getCoordinates
Run Code Online (Sandbox Code Playgroud)

以下是代码中的样子:

@Test
public void parseKml() {
    String src = "misctests/stackoverflow/kml/labasa.kml";
    try(InputStream is = getClass().getClassLoader().getResourceAsStream(src)) {
        Assert.assertNotNull(is);
        Kml kml = Kml.unmarshal(is);
        Feature feature = kml.getFeature();
        parseFeature(feature);
    }
}

private void parseFeature(Feature feature) {
    if(feature != null) {
        if(feature instanceof Document) {
            Document document = (Document) feature;
            List<Feature> featureList = document.getFeature();
            for(Feature documentFeature : featureList) {
                if(documentFeature instanceof Placemark) {
                    Placemark placemark = (Placemark) documentFeature;
                    Geometry geometry = placemark.getGeometry();
                    parseGeometry(geometry);
                }
            }
        }
    }
}

private void parseGeometry(Geometry geometry) {
    if(geometry != null) {
        if(geometry instanceof Polygon) {
            Polygon polygon = (Polygon) geometry;
            Boundary outerBoundaryIs = polygon.getOuterBoundaryIs();
            if(outerBoundaryIs != null) {
                LinearRing linearRing = outerBoundaryIs.getLinearRing();
                if(linearRing != null) {
                    List<Coordinate> coordinates = linearRing.getCoordinates();
                    if(coordinates != null) {
                        for(Coordinate coordinate : coordinates) {
                            parseCoordinate(coordinate);
                        }
                    }
                }
            }
        }
    }
}

private void parseCoordinate(Coordinate coordinate) {
    if(coordinate != null) {
        System.out.println("Longitude: " +  coordinate.getLongitude());
        System.out.println("Latitude : " +  coordinate.getLatitude());
        System.out.println("Altitude : " +  coordinate.getAltitude());
        System.out.println("");
    }
}
Run Code Online (Sandbox Code Playgroud)