Вопрос почти такой же, как этот , но мне нужно использовать PostGIS.
У меня есть несколько полилиний, и я хочу преобразовать их в точки через каждые n метров вдоль этих линий.
редактировать: большое спасибо Стефану. Мой последний запрос был немного другим, возможно, из-за более старой версии PostGIS (1.5), но в итоге я получил то, что было нужно. Точки были объединены в тепловую карту плотности дорог.
Ответы:
Этот запрос должен сделать трюк:
Сначала вы выбираете отдельные строки из столбца полилин
ST_Dump
Затем необходимо определить элементы меры с помощью
ST_AddMeasure
, начиная с 0 (начало строки строки) и конец строки строки (такой же, как длина строки строки).Generate_series
создает серию над этим измерением с шагом 10. Здесь вы можете определить"n metres"
(в этом примере 10 метров).i
Значение начинается заново для каждого LineString.С помощью
ST_LocateAlong
иST_GeometryN
вы создаете многомерную точечную геометрию.Наконец, вы должны извлечь значения X и Y этой геометрии и создать точку из нее.
Результат может выглядеть так:
РЕДАКТИРОВАТЬ
Чтобы быть справедливым, я хочу добавить эту информацию: идея и запрос в этом ответе извлечены из запроса, который я использую для создания линий драпировки из матрицы высот в PostGIS. Отличная реализация этого объясняется в этой статье от Матье Леплатре.
источник
WITH line AS
используется? Я не вижу «линии» в другом месте.WITH Query
обеспечивает использование временных таблиц для больших запросов. Вот некоторая информация: postgresql.org/docs/8.4/static/queries-with.html .line
используется в следующем подзапросеlinemeasure
. Выбранные данные в этом подзапросе основаны на выборках, сделанных вline
подзапросе. Они основаны друг на друге. Надеюсь, что это помогло!st_locate_along_measure
.