Linestring splitten und mit den Werten arbeiten

Hallo liebe Member,

im brauche dringend Hilfe mit PL/pgSQL.
Ich brauche eine eigene Funktion, die mir aus einem Linestring der z.B. diese Werte hat:

Linestring((3.584731 60.739211,3.590472 60.738030,3.592740 60.736220))

erst jeweils die einzelnen Koordinaten aufsplittet wie z.B.

3.584731 60.739211
x1 y1

und ich dann sozusagen mit ihnen rechnen kann ala das bilden einer euklidischen Norm.
Danach soll die Funktion das Ergebnis zurückgeben.

Mein Problem ist das ich mit PL/pgSQL überhaupt nicht klar komme also mit der Syntax.
Helft einer armen Studentin :slight_smile:

Ich bedanke mich schon mal für eure Antworten wenn welche kommen :slight_smile:

Das ist auch nix für plpgsql, sondern PostGIS. Du willst also einen Punkt aus einem Linestring extrahieren. Das kann man so fast direkt in Google werfen:

https://www.google.de/?gws_rd=ssl#q=postgis+extract+point+from+linestring

erster Treffer: http://postgis.net/docs/manual-2.0/ST_PointN.html

Danke aber ich mir fehlt der zweite Schritt und zwar wie ich aus diesen Punkte sozusagen nochmal die Einzelwerte kriegen und sie berechnen kann .

Um es nochmal zu erklären :

ich könnte mit z.B.

SELECT ST_X(d.geom), ST_Y(d.geom)
FROM ST_DumbPoints(
‘Linestring(3.584731 60.739211,3.590472 60.738030,3.592740 60.736220)’) AS d;

st_x | st_y
----------±----------
3.584731 | 60.739211
3.590472 | 60.73803
3.59274 | 60.73622

den Linestring aufsplitten in die Einzelpunkte. Jetzt muss ich mit diesen Punkten weiterarbeiten und die Werte in eine x-beliebige mathematische Funktion reinsetzten ala f((3.584731)²+(60.739211)²)+ ((3.590472)²+(60.73803)²) + ((3.59274)²+(60.73622)²) und den Betrag als Double ausgeben. Dies bräuchte ich als ganze pl/pgSQL Funktion. Wie gesagt komm ich mit der Syntax von dieser Sprache überhaupt nicht klar :frowning:

wir fragen wieder Google, diesmal mit “postgis get coordinates from geometry”, und erfreuen uns am ersten Treffer.

Sorry wenn ich dich nerve aber wie packe ich das jetzt alles in eine eigene PL/pgSQL- Funktion.
:slight_smile:

Du hast doch jetzt quasi eine Tabelle mit x und y, du suchst nun nur noch ein sum(x^2 + y^2), das kannst Du bequem um Deine Fumktion herum direkt in SQL machen.

Du hattest da einen Fehler beim guttenbergen gemacht :wink:

test=*# select sum(st_x * st_x + st_y * st_y) from (SELECT ST_X(d.geom), ST_Y(d.geom)
FROM ST_DumpPoints(
'Linestring(3.584731 60.739211,3.590472 60.738030,3.592740 60.736220)') AS d) bla;
       sum
------------------
 11105.8980273046
(1 row)

ST_DumpPoints, nicht ST_DumbPoints …

Ich danke euch :slight_smile:

wem außer mir noch? SCNR :wink: