Как разбить линию на N шагов?
Добавлено: 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 шаг. Но это функция работает с геометрическим отрезком, а не с географическим. И значения меняются в зависимости от широт.
Есть приложение на 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 шаг. Но это функция работает с геометрическим отрезком, а не с географическим. И значения меняются в зависимости от широт.