我知道在WorldWind Java中你可以找到高程和特定位置,如下所示:
public Double getPositionElevationMeters(Double lat, Double lon) {
double elevation = getWorldWindCanvas().getModel().getGlobe()
.getElevation(Angle.fromDegrees(lat), Angle.fromDegrees(lon));
return elevation;
}
有没有办法弄清楚这个纬度/经度是否实际上是一个主要的水域或土地?我采取了一种“盲目”的方法,只考虑低于0的高度是水,但这显然不理想。
我甚至会使用另一个能够提供这些信息的图书馆;我只需要离线工作。
答案 0 :(得分:6)
您可以使用数据源such as this,您应该可以从中确定地球上所有国家/地区的多边形。南极洲也被添加到该数据集中。这将使你大部分时间都在那里,这取决于你定义为" major"水体。
从那里,您可以使用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;
}
修改强>
请参阅this answer以获得更详细描述此过程的类似问题的答案。