GeoTools - Как выполнять расчеты и расчеты курса с использованием классов GeoTools

В настоящее время я использую инструментарий GeoTools для выполнения расчетов по данным морских судов, таких как вычисление расстояния по Большому кругу между двумя точками lon/lat. У меня есть два других требования, которые мне нужно выполнить, но я не уверен, где искать в GeoTools, чтобы найти классы для таких вычислений.

ТРЕБОВАНИЕ № 1: Рассчитать мертвую позицию для движущегося судна.

ВХОДНЫЕ ЦЕННОСТИ:

  • текущая долгота
  • текущая широта
  • текущая скорость (которая может быть легко преобразована в расстояние с учетом времени 'T')
  • текущий курс

ОЖИДАЕМЫЕ ВЫХОДЫ:

  • расчетное положение долготы / широты после истечения времени 'T'

ТРЕБОВАНИЕ № 2: Рассчитайте курс от положения "A" до положения "B".

ВХОДНЫЕ ЦЕННОСТИ:

  • долгота 'A'
  • широта 'A'
  • долгота 'B'
  • широта 'B'

ОЖИДАЕМЫЕ ВЫХОДЫ:

  • Конечно, который указывает непосредственно от "А" до "В"

ВОПРОС

Кто-нибудь может направить меня в классы в GeoTools, которые способны выполнять эти вычисления? Я поражен большим количеством классов в GeoTools, и я не могу найти то, что мне нужно для этого.

1 ответ

Решение

КАК РАССЧИТАТЬ КУРС ОТ ПОЗИЦИИ 'A' К ПОЗИЦИИ 'B'

  • Нужно иметь широту / долготу позиций 'A' и 'B'
  • Получить экземпляр GeodeticCalculator учебный класс
  • Вызов setStartingGeographicPoint()
  • Вызов setDestinationGeographicPoint()
  • Вызов getAzimuth()
  • Преобразовать из азимута в десятичные градусы

КАК РАСЧЕТИТЬ МЕРТВУЮ ОТКРЫТУЮ ПОЗИЦИЮ "X", НАЧИНАЮЩУЮСЯ ИЗ ПОЗИЦИИ "А"

  • Нужно иметь широту / долготу позиции "А"
  • Нужно иметь текущий курс судна по азимуту
  • Необходимо указать расстояние в метрах (или рассчитать это как скорость * время)
  • Получить экземпляр GeodeticCalculator учебный класс
  • Вызов setStartingGeographicPoint()
  • Вызов setDirection()
  • Вызов getDestinationGeographicPoint()

Вот несколько простых методов преобразования единиц измерения, которые мне нужно было реализовать самостоятельно. Азимут был немного запутанным. Азимут колеблется от -180 до +180, причем значения увеличиваются по мере увеличения направления "угол" по часовой стрелке. Таким образом, -180 - юг, -90 - запад, 0 - истинный север, +90 - восток и +180 - также юг.

public static final double KNOTS_PER_MPS = 1.9438444924406;
public static final double MPS_PER_KNOT = 0.514444444444444;


public static double metersPerSecondToKnots(double speedInMetersPerSecond) {
    return speedInMetersPerSecond * KNOTS_PER_MPS;
}

public static double knotsToMetersPerSecond(double speedInKnots) {
    return speedInKnots * MPS_PER_KNOT;
}

public static double courseInDegreesToAzimuth(double courseInDegrees) {
    Validate.isTrue(courseInDegrees >= 0.0 && courseInDegrees <= 360.0);
    double azimuth;
    if (courseInDegrees > 180.0) {
        azimuth = -180.0 + (courseInDegrees - 180.0);
    } else {
        azimuth = courseInDegrees;
    }
    return azimuth;
}

public static double azimuthToCourseInDegrees(double azimuth) {
    Validate.isTrue(azimuth >= -180.0 && azimuth <= 180.0);
    double courseInDegrees;
    if (azimuth < 0.0) {
        courseInDegrees = 360.0 + azimuth;
    } else {
        courseInDegrees = azimuth;
    }
    return courseInDegrees;
}
Другие вопросы по тегам