Finding intersection of two lines using known points and angles (biangulation)
Немного простейшей геометрии
для решения задачи биангуляции. Применение в орнитологии. |
Task: To find intersection of two lines using two starting points and azimuths.

Application
This extension created to calculate locations of radiotagged animal using biangulation.
Для изучения поведения животных часто используют радиотелеметрический метод: исследуемый объект помечается радиопередатчиком, который испускает радиосигнал определенной частоты и далее исследователь при помощи приемника и принимающей антенны следит за перемещениями этого объекта. Одним из возможных способов определения точного местоположения объекта является метод биангуляции. Для этого исследователю требуется взять 2 азимута на исследуемый объект с точек с известными координатами. Местоположение объекта будет соответствовать точке пересечения этих двух азимутов. Координаты точек, с которых засекаются азимуты можно снять с помощью спутникового навигатора (GPS), либо азимуты снимаются с реперных точек, координаты которых известны заранее. Азимут в этом случае – направление на источник наиболее сильного сигнала, исходящего от меченного передатчиком объекта, измеряемое обычно в градусах.
 
Для того чтобы рассчитанное местоположение исследуемого объекта наиболее точно соответствовало реальному положению нужно учитывать следующее:
1) необходимо стараться дождаться момента, чтобы ошибка определения координат в навигаторе была как можно меньше.
2) чтобы угол между азимутами стремился к 90 градусам (по крайней мере, был больше 30 и меньше 150 градусов).
Расстояние, с которого следует снимать азимут, зависит от дальности действия передатчика, при этом применяется эмпирическое правило, что погрешность в определении азимута увеличивается на 1 метр с удалением от исследуемого объекта на каждые 10 м. Т.о. при снятии азимута с расстоянием до объекта 100 м погрешность составит 10 м. Однако, это правило применимо на ровной открытой местности. Следует учитывать, что неровности рельефа и древесно-кустарниковая растительность экранируют и отражают сигнал. Следует избегать нахождения в непосредственной близости от исследуемого объекта, т.к. во-первых, слишком сильный сигнал затруднит определение точного азимута, а, во-вторых, в некоторых случаях будет невозможно рассчитать точку пересечения из-за того, что второй азимут будет проходить за точкой снятия первого азимута. Временной интервал между снятием пары азимутов должен быть минимизирован, но, конечно, зависит от подвижности исследуемого животного.
Решение
Задача решается с помощью простейшей геометрии и решения
системы уравнений.
Для начала из точки и азимута получаем уравнение прямой, для этого:
Из уравнения общего вида:
ax + by + c = 0
при условии, что b<>0 получаем
y = kx + d, где k=-(a/b), d=-(c/b)
таким образом, получаем
k=tan(a)
d=y-tan(a)*x
b=1
Далее решив систему уравнений:
k1x + d1 = y
k2x + d2 = y
Получаем координаты X и Y общей точки двух прямых (точки пересечения).
В уравнении необходимо предусмотреть два особых случая,
когда прямые параллельны (k1=k2).
Так как мы имеем дело не с векторами и не с лучами, то есть у линий нет начала и конца, то так же необходимо предусмотреть случай пересечения прямых вне области интереса, т.н. ложное пересечение. Решение этой задачи достигается измерением азимута из ложной точки a3 на точку 2, если азимут a3 = a2, то пересечение ложное, обратный азимут от полученной точки обратно на исходные 2 не должен быть равен одному из исходных азимутов.
Необходимая процедура на языке Avenue выглядит так:
a1rad = (90-a1)*pi/180 a2rad = (90-a2)*pi/180
'в случае если линия параллельна оси абсцисс if ((a1 = 0) or (a1 = 180)) then l1a = 1 l1b = 0 l1c = x1 else l1a = -(a1rad.tan) l1b = 1 l1c = y1 - (a1rad.tan*x1) end if ((a2 = 0) or (a2 = 180)) then l2a = 1 l2b = 0 l2c = x2 else l2a = -(a2rad.tan) l2b = 1 l2c = y2 - (a2rad.tan*x2) end D = l1a*l2b - l2a*l1b
'Если линии параллельны, в поле результата записываются несуществующие значения if (D = 0) then resX = 9999 resY = 9999 end
|
Здесь находится расширение для Arcview GIS для расчета точек пересечения двух прямых,
включая проверку ложных пересечений.
В качестве исходных данных для работы используется точечная тема Arcview
(в формате shape или заданная как Event theme таблица). Тема
должна быть выделена (активна). Пары исходных координат (засечек) в таблице
должны располагаться друг за другом.
Названия полей должны быть следующими:
X - долгота
Y - широта
Bear - азимут (угол от оси Y по часовой стрелке)
(скрипт легко модифицируется если у вас другие названия полей).
В названиях полей не должно содержаться символа #.
Такие поля следует переименовать. Покрытия Arcinfo некоторые поля
которых как правило содержат такой символ нужно сконвертировать
в shape-файл и также переименовать поля, убрав #.
Результатом работы скрипта является shape-файл в атрибутивной
таблице которого будут находится расчетные координаты точки пересечения
для каждой пары засечек. Полей в исходной таблице может быть больше
чем 3 (x, y, bear), дополнительные поля перенесутся в результирующую
тему. Они будут заполнятся значениями из первой точки пары из исходной
таблицы.
Обсудить в форуме (Комментариев - 1)
См. также:
Уравнение прямой >>>
Решение линейных систем уравнений (систем уравнений 1-й степени)
с двумя неизвестными >>>
Вычисление радиуса окружности ошибки для оценки точности GPS-измерений >>>
Усреднение данных о перемещении с учетом ошибки локации >>>
Построение минимального конвексного полигона с учетом ошибки локации >>>
|
Last update: August 03 2007 (Top)
|