9

我知道在 WorldWind Java 中,您可以通过以下方式找到海拔高度和特定位置:

public Double getPositionElevationMeters(Double lat, Double lon) {

    double elevation = getWorldWindCanvas().getModel().getGlobe()
            .getElevation(Angle.fromDegrees(lat), Angle.fromDegrees(lon));

    return elevation;
}

有没有办法以编程方式确定该纬度/经度是否实际上是主要的水域或土地?我采取了一种“盲目”的方法,仅将低于 0 的海拔视为水,但这显然并不理想。

我什至会使用另一个可以为我提供这些信息的库;我只需要它离线工作。

4

1 回答 1

6

您可能会使用这样的数据源,您应该能够从中确定地球上所有国家的多边形。南极洲也被添加到该数据集中。这将使您大部分时间到达那里,具体取决于您定义为“主要”水体的内容。

从那里,您可以使用GeoTools导入形状数据并计算给定纬度/经度对属于哪些多边形。如果没有,那么它可能是一片海洋。

以下伪代码说明了逻辑流程:

// pseudocode, not the actual GeoTools API
boolean isWater(Coordinate point) 
{
    ShapeDataStore countryShapes = loadShapeData("world.shp");

    GeoShape shape = countryShapes.findShapeByPoint(point);

    if (shape == null)
        return true // not a country or Antarctica, must be international waters.
    else
        return false;
}

编辑

有关更详细地描述此过程的类似问题的答案,请参阅此答案。

于 2015-01-27T22:55:17.493 回答