Chciałbym utworzyć vectorLayer w QGIS
celu wyświetlenia wszystkich punktów, które tworzą a LINESTRING
lub MULTILINESTRING
przechowywane w PostGIS
DB.
Myślę, że muszę przekształcić wszystkie punkty LINESTRING
(lub MULTILINESTRING
) na POINT
.
Pierwsze pytanie :
Czy jest jakaś PostGIS
funkcja, aby to zrobić?
Drugie pytanie :
POINT
Jak mogę to zrobić, jeśli chcę wykluczyć zduplikowane punkty z tabeli wyników ?
qgis
postgis
point
polyline-creation
linestring
Heisenbug
źródło
źródło
Odpowiedzi:
Aby uzyskać punkt w kolejności i link do geometrii pierwotnej, użyj
i usuń dublikaty z http://wiki.postgresql.org/wiki/Deleting_duplicates
pamiętaj, że musisz mieć jeden unikalny identyfikator do zdublowania, jeśli go nie masz, musisz go utworzyć
źródło
SELECT (ST_DumpPoints(the_geom)).path as path, id, (ST_DumpPoints(the_geom)).geom FROM linestrings
Jeśli chodzi o pierwsze pytanie, istnieje tylko funkcja PostGIS, ST_DumpPoints .
Pierwszy przykład na stronie dokumentów jest dokładnie tym, czego potrzebujesz. Jest to funkcja zwracająca zestaw, więc nie tylko zrzuca punkty, ale także pewne informacje (tablica ścieżki), które odnoszą je do oryginalnej geometrii. Ponieważ zależy Ci tylko na punktach, możesz spróbować czegoś takiego:
źródło
ad 1.
ad 2. Wybierz Duplicate Points PostGIS
źródło
OGC WKB expected, EWKB provided - use GeometryFromEWKB() for this
. Możesz po prostuST_AsEWKB()
całkowicie pominąć , ale nadal nie miałoby to sensu, zobacz ostatni przykład w ST_PointFromWKBAby zrzucić tylko unikalne punkty, możesz użyć kilku podkwerend z
SELECT DISTINCT ON
wyrażeniem :źródło