Как мне найти широту / долготу, которая составляет x км к востоку / западу от заданной широты / долготы?

У меня есть две заданные точки широты и долготы. Например, предположим, что у меня есть две позиции (точка_1 и точка_2) в координатах (lat1, lon1) и (lat2, lon2). Я хотел бы вычислить третью точку, которая находится на той же широте, что и точка_2, но на x км к востоку или западу от точки_2. Таким образом, третья точка будет иметь ту же широту, что и точка_2, но разную долготу в зависимости от расстояния x (в километрах), другими словами, точка_3 будет (широта2, долгота?). Я пишу это на IDL, но любой другой язык или формулы были бы очень кстати.

Спасибо


person Community    schedule 06.10.2009    source источник
comment
Эта проблема решается с помощью тригонометрии и базовой математики. Уверены, что не сможешь понять?   -  person svens    schedule 06.10.2009
comment
Мне непонятно, при чем тут ...? Что касается вашего вопроса, вы просто ищете позицию x ml к западу или востоку от точки 2. Это правильно ....?   -  person KristoferA    schedule 06.10.2009
comment
Координаты указаны в градусах: минутах: секундах или десятичных градусах?   -  person James Goodwin    schedule 06.10.2009
comment
Этот джентльмен предоставил все, что вам нужно в виде кода C # в своем блоге: bryan.reynoldslive.com/post/   -  person KristoferA    schedule 06.10.2009


Ответы (1)


Вы нигде не используете пункт 1, не так ли? Скажем, наша точка P = (lat, lon)

Первое правило таких задач: нарисуйте картинку! Из поперечного сечения Земли вы можете видеть, что радиус круга с центром на земной оси, проходящего через ваши две точки, равен R*cos(lat). (R - это радиус Земли. Надеюсь, вам не нужно рассматривать здесь Землю как эллипсоид.) Таким образом, длина x составляет угол (в градусах) 360*x/(2*pi*R*cos(lat)). Тогда вам нужна новая точка:

P' = ( lat, lon +- 180*x/(2Rcos(lat)) )

Я предполагаю, что вы используете от -180 до 0 для западной долготы, поэтому у вас есть +/- для востока / запада. Вам нужно будет проверить, нужно ли вам оборачиваться. Псевдокод:

if (lon < -180)
   lon += 360
else if (long > 180)
   lon -= 360

Просто для удовольствия: если вы заботитесь о том, чтобы Земля была эллипсоидальной, радиус круга (вместо R * cos (lat)):

1/sqrt(tan^2 lat / Rp^2 + 1 / Re^2)

где Rp - полярный радиус, Re - экваториальный радиус. Если Rp = Re, это сводится к исходной формуле, поскольку 1 + tan^2 lat = sec^2 lat

person Cascabel    schedule 06.10.2009