Я хотел бы создать vectorLayer QGIS
для отображения всех точек, которые образуют LINESTRING
или MULTILINESTRING
хранятся в PostGIS
БД.
Я думаю, что мне нужно преобразовать все точки LINESTRING
(или MULTILINESTRING
) в POINT
.
Первый вопрос :
Есть ли какая-либо PostGIS
функция для этого?
Второй вопрос :
Если я хочу исключить повторяющиеся точки из POINT
таблицы результатов , как я могу это сделать?
qgis
postgis
point
polyline-creation
linestring
гейзенбаг
источник
источник
Ответы:
Чтобы получить точку в порядке и ссылку на оригинальную геометрию, используйте
и удалите дубликаты из http://wiki.postgresql.org/wiki/Deleting_duplicates
помните, что вам нужно иметь один уникальный идентификатор для удаления dublicate, если у вас его нет, вам нужно его создать
источник
SELECT (ST_DumpPoints(the_geom)).path as path, id, (ST_DumpPoints(the_geom)).geom FROM linestrings
Что касается первого вопроса, то для этого есть функция PostGIS, ST_DumpPoints .
Первый пример на странице документов - это именно то, что вам нужно. Это функция, возвращающая множество, поэтому она не только выводит точки, но и некоторую информацию (массив путей), которая связывает их с исходной геометрией. Так как вы заботитесь только о баллах, вы можете попробовать что-то вроде этого:
источник
Объявление 1
Объявление 2. Выберите дубликаты баллов PostGIS
источник
OGC WKB expected, EWKB provided - use GeometryFromEWKB() for this
. Вы могли бы простоST_AsEWKB()
вообще пропустить , но это все равно не имело бы никакого смысла, см. Последний пример в ST_PointFromWKBЧтобы вывести только уникальные точки, вы можете использовать несколько подзапросов с
SELECT DISTINCT ON
выражением :источник