在WorldWind中找出位置是陆地还是水域

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的区域为水域,但这显然不是理想的方法。如果有其他库可以提供这些信息,我也可以使用它们,只要它可以离线工作即可。

您可以尝试访问gis.stackexchange.com,那里可能会得到更好的答案。 - kapex
2
这篇帖子http://forum.worldwindcentral.com/showthread.php?20991-Path-finding-using-ElevationModel有一个开发者的回复,他说在SDK中不可能实现,除非自2009年以来已经添加了。他建议两种替代方案,而不是查看高程:一种是“使用具有特定颜色的位图来表示水体,但由于分辨率有限,边界的估计会比较粗糙”,另一种是“使用定义每个水体周界的矢量数据,并使用多边形包含逻辑来确定一个点是否在水体内部”。 - Christian Wilkie
我在WorldWind论坛上找到了这个帖子,其中包含了一些有用的想法,但没有什么特别具体的内容。http://forum.worldwindcentral.com/showthread.php?8853-Terrain-type&highlight=Water - Rudi Kershaw
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;
}

编辑

请参考此答案,它对一个类似的问题进行了更详细的描述。


不想去抢赏金 - 但是这个问题也有有用的信息 - 特别是(在我看来)这个答案,如果OP可以使用Python而不是/并行Java。这里有一些非常好的Open Street地图衍生数据文件,在这里 - J Richard Snape
嗨,杰夫,你能否回答我一个关于World Wind的问题?谢谢。问题链接 - prem30488

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接