Географическая библиотека для C#
Я программирую игровое приложение с помощью C#. Я хочу рассчитать движение объектов на экране приложения. Например, я хочу знать, если мой объект перемещается из источника в пункт назначения (используя их latitude
а также longitude
) с speed
а также direction
(и если возможно turn rate
), что является пунктом назначения через некоторое время.
другими словами, нужно что-то вроде этого:
void Move(double sourceLatitude, double sourceLongitude, double speed, double bearingOrDirection, double turnRate, double destinationLatitude, double destinationLongitude)
{
// code goes here
}
Есть ли в библиотеке такой метод или что-то подобное?
1 ответ
Сначала необходимо преобразовать широту / долготу в ортогональную систему координат, такую как универсальная поперечная проекция Меркатора (UTM). Соответствующие компоненты скорости в ортогональной системе координат затем рассчитываются по заданному курсу. Используя шаг по времени, рассчитывается изменение положения и добавляется к исходным координатам. Наконец, обновленные координаты преобразуются обратно в широту / долготу. В псевдокоде:
(latitude_degN, longitude_degE) --> (easting_m, northing_m, utm_zone)
heading_rad += turn_rate_radps * timestep_s
east_velocity_mps = sin(heading_rad)
north_velocity_mps = cos(heading_rad)
delta_east_m = east_velocity_mps * timestep_s
delta_north_m = north_velocity_mps * timestep_s
easting_m += delta_east_m
northing_m += delta_north_m
(easting_m, northing_m, utm_zone) --> (latitude_degN, longitude_degE)
Это предполагает направление на север (0 градусов северной широты, увеличение до 90 градусов восточной долготы) и небольшой временной шаг.