У меня есть долгота и широта, сохраненные в виде геометрии с SRID 4326.
Я хочу создать линию длиной ровно 1000 метров, которая будет 90 градусов (вправо).
Я знаю, что перевод из продольной / широтной степени в метр зависит от того, где вы находитесь на земном шаре.Вот почему я передам эталонный длинный / лат, который можно принять во внимание.
Я ищу что-то «достаточно хорошее», предполагающее, что расстояние, которое вы хотите, не будет превышать 100 миль.
Учитывая длинное / лат и метровое расстояние 1000 метров, верните мне размер линии длинные / латовые градусы.
Этот вопрос относится только к одному примеру, но я ищу общийрешение, потому что у меня есть много функций, которые работают с «Единицами SRID», и SRID, с которым я работаю, это long / lat (4326), но я всегда хочу иметь дело с метрами, а не градусами.
Надежда состоит в том, что яМожно вызвать функцию масштабирования, чтобы преобразовать нужные мне метры в 4326.
Некоторые хаки, которые я рассмотрел для поиска Х-метров, - это преобразование геометрии в географию и использование STBuffer (X), чтобы сделать круг срадиус, равный X, затем создайте длинную линию, которая пересекает буфер, и найдите точку пересечения, которая будет long / lat точно XметровЭто кажется очень хакерским и неэффективным, но может быть наиболее точным
Редактировать:
Чтобы найти deltaX и deltaY, функция выполняет следующее:
DeltaX = Cos(@AngleRads) * @DistanceInDegrees;
DeltaY = Sin(@AngleRads) * @DistanceInDegrees;
Я могу предоставить @AngleRads и @DistanceInDegrees.Проблема в том, что @DistanceInDegrees должен соответствовать 4326 единицам (градусам).Можно ли даже найти @DistanceInDegrees, который будет соответствовать 1000 метров независимо от того, какой угол задан?
Когда я использую формулу @DistanceInDegrees = (@Meters / 6371008.7714) * (180 / pi()) / cos(@Lat1 * pi()/180)
и угол 90 градусов, тогда длина линии равна1002 метра, близко, но не тождественно 1000 .. Если я использую градус 45, длина линии составляет 1191,67 метра.