Географческая точки в области

Вопросы общего характера по ГИС и дистанционному зондированию, не связанные с конкретным ПО.
Ответить
DefKorn
Новоприбывший
Сообщения: 5
Зарегистрирован: 22 апр 2010, 08:10
Репутация: 0

Географческая точки в области

Сообщение DefKorn » 22 апр 2010, 08:26

Всем добрый день. Прошу помочь разобраться (три дня уже ищу инфу, но никак не могу найти). Есть географические координаты точек (широта и долгота), получаемые GPS-устройством. Есть граф, вершины которого - это тоже географические координаты точек (они не изменны). Необходимо всякий раз при приходе точки от GPS-устройства проверять лежит ли новая точка в области +- 50 км скажем от вершин и дуг графа. То есть суть в отслеживании местоположения объекта и в определении того, что его движение должно быть в направлении графа. Собственно помоги пожалуйста:
1. Как найти географические (ну или прямоугольные в пространстве) координаты точки от заданной, имея в наличии только географические координаты заданной и следующей за ней точек? Географические перевел в прямоугольные. Расстояние могу найти - формулу нашел. А вот координаты точки от другой, зная расстояние между ними никак не могу найти.
2. Как найти географические координаты симметричной п.1 точки. Симметрия относительно прямой по двум соседним вершинам графа.
Точки необходимы для того, чтобы построить внешний полигон (+ 50 км) и внутренний полигон (-50 км), а потом в postgresql применить операцию сравнения. Опять-таки сравнение возможно только на плоскости (то есть координаты нужны две - х и у), поэтому наверно оптимально было бы перейти на плоскость, но я нигде не нашел как правильно перейти из пространства на плоскость. Тупо отбрасывать z не получилось. На маленьких расстояних 1 км еще куда ни шло, но при 50 км, точки получаются бог знает где.
Может кто сталкивался с таким. Надеюсь на помощь.
p.s. если все это реализуемо в postgis, то скажите сразу - буду читать по ней доку :-)

Voltron
Гуру
Сообщения: 2627
Зарегистрирован: 29 мар 2007, 14:12
Репутация: 34
Откуда: Ukraine

Re: Географческая точки в области

Сообщение Voltron » 22 апр 2010, 09:09

Возможно, не совсем правильно понял задачу. Но мне кажется, вместо таких вычислений для каждой точки можно один раз построить буферную зону нужной ширины (50 км) вокруг дуг и ребер графа, а потом просто проверять попадает ли точка в эту зону или нет.
И построение буфера, и проверка на попадание в область в PostGIS есть

DefKorn
Новоприбывший
Сообщения: 5
Зарегистрирован: 22 апр 2010, 08:10
Репутация: 0

Re: Географческая точки в области

Сообщение DefKorn » 22 апр 2010, 09:28

Voltron, ок. Но вершин и дуг графа несколько тысяч. Вручную же не построишь... или эту зону можно построить как-то автоматически?

Voltron
Гуру
Сообщения: 2627
Зарегистрирован: 29 мар 2007, 14:12
Репутация: 34
Откуда: Ukraine

Re: Географческая точки в области

Сообщение Voltron » 22 апр 2010, 10:18

Я не спец по PostGIS, но вроде бы можно построить для всех дуг сразу, см. ST_Buffer. Для проверки на вхождение, видимо, надо использовать ST_Contains

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: Географческая точки в области

Сообщение Denis Rykov » 22 апр 2010, 10:27

Конечно не вручную, для этого есть функция ST_Buffer, которую можно применить к вашим данным.
Прочитал ваш первый пост - задача в принципе не сложная, но то что вы расписали в п.1 и п.2 мне совершенно непонятно.

Например:
Как найти географические (ну или прямоугольные в пространстве) координаты точки от заданной, имея в наличии только географические координаты заданной и следующей за ней точек?
"Координаты от точки" - это как понимать? Найти можно, например, расстояние от точки или координаты точки, а что значит координаты от точки - непонятно.
Опять-таки сравнение возможно только на плоскости (то есть координаты нужны две - х и у), поэтому наверно оптимально было бы перейти на плоскость, но я нигде не нашел как правильно перейти из пространства на плоскость. Тупо отбрасывать z не получилось.
Откуда перейти на плоскость? Что такое z? Вероятно из пространства, но в самом начале вы пишите:
Есть географические координаты точек (широта и долгота)...
Spatial is now, more than ever, just another column- The Geometry Column.

DefKorn
Новоприбывший
Сообщения: 5
Зарегистрирован: 22 апр 2010, 08:10
Репутация: 0

Re: Географческая точки в области

Сообщение DefKorn » 22 апр 2010, 10:44

_DR_, признаю несколько сумбурно написал - полно мыслей. Попробую увязать. Есть путь из географических координат. Он не меняется. Есть географические координаты точек от приборов, которые приходят довольно часто. Нужно проверять попадают ли приходящие координаты в область +- 50 км от пути.
п.1 и п.2 из постов выше - это то, к чему я пришел применяя геометрию. То есть я хотел перевести географические точки в прямоугольные в пространстве (x, y, z). Путь - ((x1, y1, z1) , (x2, y2, z2) и т.д.). Пришла точка (x0, y0, z0). Я знаю, что допустимое расстояние +-50 км. Как найти координаты точек, расположенных в +-50 км от ((x1, y1, z1) , (x2, y2, z2) и т.д.), чтобы построить два полигона и проверить вхождение (x0, y0, z0) в них? Но полигоны имеют только две координаты, следовательно нужно как-то избавиться от третьей. Как это сделать правильно?
Читаю доку по PostGIS. Похоже, что он должен помочь, но пока четкого понимания нет.
Просто не хочется переводить координаты из системы в систему, проводить расчеты, затем снова возвращать координаты в искомую систему. Погрешность расчетов гарантирована. PostGIS позволяет оперировать географическими координатами напрямую?

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: Географческая точки в области

Сообщение Denis Rykov » 22 апр 2010, 11:03

Я все равно не пойму, как вы переводите 2 координаты (lon/lat) в 3 (x,y,z)?
Насчет работы с географическими координатами в PostGIS. Существуют 2 типа данных: geometry и geography, последний - это как раз нативный тип для работы с географическими координатами. Так как он появился сравнительно недавно, то не все функции PostGIS работают с ним. Кроме того, можно выполнять измерения на сфере и при использовании планарного типа geometry, например, ST_Distance_Sphere. Там тоже есть свои особенности.
Spatial is now, more than ever, just another column- The Geometry Column.

DefKorn
Новоприбывший
Сообщения: 5
Зарегистрирован: 22 апр 2010, 08:10
Репутация: 0

Re: Географческая точки в области

Сообщение DefKorn » 22 апр 2010, 11:08

Я координаты перевел по формуле:
а-большая полуось ОЗЭ, м
е-эксцентриситет, б/р
В-широта, град
L-долгото, град
Н-высота, м
_____________________
R=a/((1-(e*sin(B))^2)^0.5)
x=(R+H)cos(B)cos(L)
y=(R+H)cos(B)sin(L)
z=((1-e^2)*R+H)sin(B)

DefKorn
Новоприбывший
Сообщения: 5
Зарегистрирован: 22 апр 2010, 08:10
Репутация: 0

Re: Географческая точки в области

Сообщение DefKorn » 22 апр 2010, 14:02

Тему можно закрывать. Спасибо тем, кто откликнулся. В особенности большое спасибо _DR_. Буду писать код...
Если кто тоже столкнулся с такой проблемой, то выход из нее - использование PostGIS, функция ST_BUFFER, которая может построить полигон от любого геометрического объекта, а там и проверить точку на вхождение в него не сложно.

Ответить

Вернуться в «Общие вопросы»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя