Как разбить линию на N шагов?

Не знаете, где задать вопрос? Задавайте здесь.
Ответить
OlegZhdanov
Интересующийся
Сообщения: 35
Зарегистрирован: 29 янв 2014, 13:03
Репутация: 0

Как разбить линию на N шагов?

Сообщение OlegZhdanov » 08 сен 2014, 08:25

Здравствуйте!
Есть приложение на Java c бд postgis. В бд хранится таблица с высотами формата:
широта долгота высота
38.456 45.344 200
38.456 45.345 200
38.456 45.346 210
38.456 45.347 242
.................................
Задаются две точки A и B. Требуется разбить географическую линию AB на равные отрезки с заданным шагом N, чтобы на выходе получился массив точек, равноудалённых друг от друга (за исключением последней). Реализовать можно либо на postgis либо на java.

Раньше пользовался функцией:
SELECT st_astext(ST_GeometryN(ST_LocateAlong(linem, i), 1)) AS geom FROM
(SELECT ST_AddMeasure(line.geom, 0, ST_Length(line.geom)*1000) as linem, generate_series(0, CAST((ST_Length(line.geom)*1000) AS int), 804) as i FROM
(SELECT CAST('SRID=32632;LINESTRING(38.163 44.447,38.706 44.953)' AS geometry)AS geom) as line) as linemesure;

где 38.163 44.447,38.706 44.953 - координаты отрезка, а 804 шаг. Но это функция работает с геометрическим отрезком, а не с географическим. И значения меняются в зависимости от широт.

OlegZhdanov
Интересующийся
Сообщения: 35
Зарегистрирован: 29 янв 2014, 13:03
Репутация: 0

Re: Как разбить линию на N шагов?

Сообщение OlegZhdanov » 08 сен 2014, 16:32

Уже неделю мучаюсь с этим вопросом. ST_AddMeasure работает только для геометрии

OlegZhdanov
Интересующийся
Сообщения: 35
Зарегистрирован: 29 янв 2014, 13:03
Репутация: 0

Re: Как разбить линию на N шагов?

Сообщение OlegZhdanov » 12 сен 2014, 14:48

Никто не сталкивался с проблемой разбития линии на шаре?((

gamm
Гуру
Сообщения: 4168
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1107
Ваше звание: программист
Откуда: Казань

Re: Как разбить линию на N шагов?

Сообщение gamm » 12 сен 2014, 14:58

OlegZhdanov писал(а):Никто не сталкивался с проблемой разбития линии на шаре?((
уже обсуждали на форуме несколько дней назад. Какой-то дяденька сказал, что он просто интерполирует линейно долготу и широту, и это всех устраивает.

Правильное решение на шаре - построить большой круг, в его плоскости перейти к полярным координатам, и нарезать дугу на заданное количество частей. Потом все это вернуть на шар (а можно сразу получить точки в XYZ), и пересчитать в долготу/широту, я вроде даже формулы писал . Задачка для 7 класса ...

Ответить

Вернуться в «Я новичок!»

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

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