Узнайте, является ли местоположение землей или водой в WorldWind

Я знаю, что в WorldWind Java вы можете узнать высоту и конкретное местоположение примерно так:

public Double getPositionElevationMeters(Double lat, Double lon) {

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

    return elevation;
}

Есть ли способ программно определить, является ли эта широта/долгота крупным водоемом или сушей? Я использовал «слепой» подход, рассматривая высоту меньше 0 как воду, но это, очевидно, не идеально.

Я бы даже использовал другую библиотеку, которая дала бы мне эту информацию; Мне просто нужно, чтобы он работал в автономном режиме.


person mainstringargs    schedule 25.01.2015    source источник
comment
Вы можете попробовать gis.stackexchange.com, где вы можете получить более точные ответы.   -  person kapex    schedule 28.01.2015
comment
Этот пост forum.worldwindcentral.com/ имеет ответ одного из разработчиков о том, что это невозможно в SDK, если только он не был добавлен с 2009 года. Он предлагает две альтернативы вместо того, чтобы смотреть на высоту: использование растрового изображения, которое имеет определенный цвет для водоемов, но которое ограничивает разрешение приведет к несколько грубой оценке границ или использованию векторных данных, которые определяют периметр каждого тела как многоугольник и используют логику включения многоугольника, чтобы определить, находится ли точка внутри водоема или нет.   -  person Christian Wilkie    schedule 28.01.2015
comment
Мне удалось найти это на форуме WorldWind, где есть несколько полезных идей, но ничего конкретного. forum.worldwindcentral.com/   -  person Rudi Kershaw    schedule 28.01.2015


Ответы (1)


Возможно, вы могли бы использовать источник данных подобный этому, из которого вы сможете определить полигоны для все страны на Земле. Антарктида также была добавлена ​​к этому набору данных. Это позволит вам пройти большую часть пути, в зависимости от того, что вы определяете как «крупный» водоем.

Оттуда вы можете использовать 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;
}

изменить

См. этот ответ для ответа на аналогичный вопрос, который описывает этот процесс более подробно.

person Jeffrey Mixon    schedule 27.01.2015
comment
Не хочу красть награду, но это вопрос также содержит полезную информацию - особенно (IMO) этот ответ, если OP может использовать python вместо/рядом с Java. Есть несколько довольно хороших файлов данных, полученных из карт Open Street, здесь. - person J Richard Snape; 28.01.2015
comment
Привет Джефф, не могли бы вы ответить на один из моих вопросов, связанных с мировым ветром? Спасибо.. вопрос - person prem30488; 26.02.2015