GIS-LAB

Географические информационные системы и дистанционное зондирование

Finding intersection of two lines using known points and angles (biangulation)

Simple geometry to solve biangulation problem, application in ornithology.

Обсудить в форуме Комментариев — 11

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), дополнительные поля перенесутся в результирующую тему. Они будут заполнятся значениями из первой точки пары из исходной таблицы.

Обсудить в форуме Комментариев — 11

Последнее обновление: November 26 2010

Дата создания: 04.07.2006
Автор(ы): Максим Дубинин


(Геокруг)

Если Вы обнаружили на сайте ошибку, выберите фрагмент текста и нажмите Ctrl+Enter