Страница 1 из 1

Окрестность точки ...

Добавлено: 07 ноя 2006, 09:08
zsergey
Привет всем!
На данный момент пишу программу, разбирающий даталог стороннего автомобильного gps -даталоггера. Задачка вот какая. Есть геодезические координаты определенных объектов. Во время считывания и обработки автомобильного даталога НУЖНО ВЫЧИСЛИТЬ ФАКТ ПРОЕЗДА В ОКРЕСТОСТЯХ ЭТИХ ОБЕКТОВ. Допустим есть точка с координатой 53,5324 сев. широты и 63,6565 вост. долготы.
1. Как расчитать для этой точки окрестность радиусом в 10 метров?


Re: Окрестность точки ...

Добавлено: 07 ноя 2006, 09:57
CYBER
Да просто.
Вариант 1.
Выяснить (посчитать), чему на данной широте равен один метр (по широте и долготе - отдельно, и проверять, входит ли снятые данные в квадрат (можно даже вспомнить формулу круга х2+у2=r2 и определиться именно с кругом) +-5 метров по обоим осям. Вроде я гдето видел (может даже у Снайдера), как посчитать длину дуги в метрах в конкретной точке.
Второй вариан - не заморачиваться на круг (в метрах) а рассматривать эллипс (в угловых единицах. Насколько я понимаю, величина 10 метров - условная и вполне пойдет и 12 и 14 метров. Тогда для конкретной местности просто посчитать, чему в градусах равен 1 метр (опять по обоим осям) и сравнивать принятые данные без перевода в метры с диапазоном в +- 0.1 секунды или сколько там.


Re: Окрестность точки ...

Добавлено: 07 ноя 2006, 11:17
Olexa
В общем, да, если грубо, быстро и в лоб, то так:

((ш - Ш) * 40000000 / 180) ^ 2 + ((д - Д) * 40075696 / 180 * cos(Ш * П / 180)) ^ 2 <= R ^ 2

Где (Ш, Д) - координаты точки, проезд которой контролируем, в градусах, (ш, д) - координаты точки, полученной с даталоггера, тоже в градусах, R - радиус, при котором точка считается посещённой, в метрах, П - число Пи, 40000000 - длина нулевого меридиана, 40075696 - длина экватора. Можешь пооптимизировать формулу с точки зрения погрешности и количества операций, я оставил более-менее наглядной. У полюсов будет глючить ;-).

Если круто и умно, но сложно и долго, то можно пересчитать в трёхмерные прямоугольные пространственные координаты (с учётом высоты над эллипсоидом) и проверить на посещение шара по уравнению шара ((x - X) ^ 2 + (y - Y) ^ 2 + (z - Z) ^ 2 <= R ^ 2). Ссылки на формулы пересчёта в прямоугольные пространственные координаты в этом форуме есть.


все немного сложней

Добавлено: 07 ноя 2006, 13:43
AlexeyEgorov
расчет надо делать не для точек, а для отрезков трека - нет гарантии, что при прохождении авто через контрольную точку отметка трека выпадет рядом с ней. Отдельный расчет для точек трека в этом случае не нужен. пусть контрольная точка K, а соседние точки трека A и B: 1) перпендикуляр от K к AB пересекает отрезок AB, если AB^2+AK^2>=BK^2 and AB^2+BK^2>=AK^2 иначе он пересекает продолжение AB и не интересует нас 2) расстояние от K до AB (http://faqs.org.ru/science/geometry_faq ... tA))^2/<br> ((LatB-LatA)^2+cos(LatK)(LonB-LonA)^2)<=(interval/111km)^2 расстояния тут считаются по формуле D=k*sqrt(dLat^2+(cos((Lat1+Lat2)/2)*dLon)^2) где k=111км - средняя протяженность градуса широты в километрах; (Lat1,Lon1) и (Lat2,Lon2) - координаты точек dLat=(Lat1-Lat2) - разница точек по широте; dLon=(Lon1-Lon2) - разница точек по долготе; (Lat1+Lat2)/2 - широта средней точки отрезка. Чтобы сократить количество вычислений корней и тригонометрии можно заране рассчитать диапазон вокруг контрольной точки по широте и долготе и отбрасывать заведомо далекие отрезки (которых в треке будет большинство), т.е. ситуации типа (LatA<(LatK-intLat)) and (LatB<(LatK-intLat)), (LatA>(LatK+intLat)) and (LatB>(LatK+intLat)). контрольный диапазон в градусах следует задать с небольшим запасом: intLat=interval/111km*(Cos(PI/12)/Cos(Pi/6)) intLon=interval/111km*Cos(LatK)*(Cos(PI/12)/Cos(Pi/6)) почему именно (Cos(PI/12)/Cos(Pi/6)) могу обосновать :) формулы корректно работают на расстояниях до километра. больше имхо для гпс-треков не требуется.

2 Olexa!

Добавлено: 07 ноя 2006, 22:14
CYBER
Крута!!!! ПролЁт в 10 метрах НАД точкой (или ПОД точкой). Это уже не даталоггер, это уже НАВЕДЕНИЕ....
Кстати, а действително, надо трек интерполировать, чтобы узнать, касается или нет окружности. Или сначала задать грубый круг, со, скажем, десятикратным увеличением, и, чтобы не грузить процессор, начинать считать уже точнее, либо просить ЖПС давать данные быстрее. Хотя, наверняка, данный пойдут по НМЕА, а там можно попросить принудительно поторопить приемник.


Re: Окрестность точки ...

Добавлено: 08 ноя 2006, 08:26
Anonym
Нда... А ведь сигнальчик о прохождении точки можно и на детонатор вывести... Едет себе такой мирный грузовичек, до верху груженый...


песец. террористы вокрух :)

Добавлено: 08 ноя 2006, 10:37
AlexeyEgorov
тем же алгоритмом можно из трека автоматом текстовую легенду лепить как вариант - по вейпойнтам или POI карты...
нужно ль кому-то реально - вопрос, но как возможность - забавно :)


Re: 2 Olexa!

Добавлено: 08 ноя 2006, 12:10
Olexa
: Крута!!!! ПролЁт в 10 метрах НАД точкой (или ПОД точкой). Это уже не даталоггер, это уже НАВЕДЕНИЕ.... Да, я уже после того, как написал, подумал, что по-правильному нужно проверять попадание не в шар, а в конус (или хотя бы цилиндр) :-). На нафига нам эти навороты в зоопарке, если точность приёмника по поверхности +/- 15 метров? Вполне достаточно того, что написал AlexeyEgorov (проверять действительно нужно отрезки трека): <A HREF="http://www.gps-forum.ru/cgi-bin/forum/s ... /A> <br>

Re: Окрестность точки ...

Добавлено: 14 ноя 2006, 03:45
igor-k
http://gis-lab.info/qa/great-circles.html Бери последнюю формулу. Сверялся с Озиком, на выходе одинаковый результат, что косвенно подтверждает правильность. Дальше мне кажеться нужно найти две соседние точки на треке, максимально приближенные к контрольной точке. Получаем отрезок и окружность с известными параметрами. Дальше незнаю. Наверное надо решить систему уравнений x*x+y*y=r*r и k*x+c=y

нет смысла считать 10-100м отрезки по great-circle

Добавлено: 14 ноя 2006, 11:09
AlexeyEgorov
декартовых координат вполне достаточно