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

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

Добавлено: 08 сен 2014, 08:25
OlegZhdanov
Здравствуйте!
Есть приложение на 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 шаг. Но это функция работает с геометрическим отрезком, а не с географическим. И значения меняются в зависимости от широт.

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

Добавлено: 08 сен 2014, 16:32
OlegZhdanov
Уже неделю мучаюсь с этим вопросом. ST_AddMeasure работает только для геометрии

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

Добавлено: 12 сен 2014, 14:48
OlegZhdanov
Никто не сталкивался с проблемой разбития линии на шаре?((

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

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

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