Pytanie w prawie taki sam, jak ten , ale muszę użyć PostGIS.
Mam wiele polilinii i chcę przekształcić je w punkty co n metrów wzdłuż tych linii.
edycja: Wielkie dzięki dla Stefana. Moje ostatnie zapytanie było nieco inne, prawdopodobnie ze względu na starszą wersję PostGIS (1.5), ale ostatecznie dostałem to, co było potrzebne. Punkty połączono w mapę cieplną gęstości dróg.
Odpowiedzi:
To zapytanie powinno załatwić sprawę:
Najpierw wybierasz wyraźne linie z kolumny polilinestring za pomocą
ST_Dump
Następnie musisz zdefiniować elementy miary
ST_AddMeasure
, zaczynając od 0 (początek oznaczenia linii) i na końcu oznaczenia linii (taka sama jak długość oznaczenia linii).Generate_series
tworzy serię na podstawie tego pomiaru o krok 10. Tutaj możesz zdefiniować"n metres"
(w tym przykładzie 10 metrów).i
Wartość zaczyna się od nowa za każdym LINESTRING.Za pomocą
ST_LocateAlong
iST_GeometryN
tworzysz wielowymiarową geometrię punktów.Na koniec musisz wyodrębnić wartości X i Y tej geometrii i utworzyć z niej punkt.
Wynik może wyglądać następująco:
EDYTOWAĆ
Aby być uczciwym, chcę dodać te informacje: Pomysł i zapytanie zawarte w tej odpowiedzi zostały wyodrębnione z zapytania, którego używam do tworzenia linii obłożenia z DEM w PostGIS. Doskonałe wdrożenie tego wyjaśniono w tym artykule Mathieu Leplatre.
źródło
WITH line AS
jest używany? Nigdzie nie widzę „linii”.WITH Query
Zapewnia stosowanie tabel tymczasowych dla większych zapytań. Oto kilka informacji: postgresql.org/docs/8.4/static/queries-with.html .line
jest używany w następnym podzapytaniulinemeasure
. Wybrane dane w tym podzapytaniu są oparte na wyborach dokonanych w tymline
podzapytaniu. Są zbudowane na sobie. Mam nadzieję, że to pomogło!st_locate_along_measure
.