WKB per SQL bearbeiten?

Hi Leute,
Ich habe Koordinaten in meiener geom Spalte, gespeichert als WKB.
Ich arbeite mit OSGB36 Daten, sprich SRID = 27700
Wenn ich mir diese mit der Funktion st_astext(geom) anzeigen lasse, bekomme ich folgendes: LINESTRING(442955550 112754100 …usw)
Originale OSGB36 Koordinaten haben aber höchstens 6 stellen, dann ein Komma - müssten also so aussehen: LINESTRING(442955.550 112754.100 …usw)
Nun meine Frage: Gibt es eine Möglichkeit das WKB per SQL, oder den Linestring per SQL durch 1000 zu dividieren? (das wäre meine erste Idee)

Ich hoffe ihr könnt mir helfen…
Danke
Peter
[font=&quot][/font]

Hallo! Du kannst mit st_[x|y|z] die jeweilige Koordinate eines Punktes rauslesen und umrechnen. Wenn du Linien oder Polygone hast, brauchst du eine kleine Funktion, die dir die Linie durchläuft. Ein Polygon müsstest du erst in eine Linie verwandeln. Aber ich hab jetzt Feierabend und meld mich morgen wieder :wink: Gruß Uwe

wow! ich hab mir das schon so gedacht dass es da eine möglichkeit gibt… aber per SQL kann man eine linie nicht durchlaufen…
ich habe es zur anzeige in meinem java programm so gelöst, dass ich den st_astext(geom) in einer for schleife durchgehe und dann ein komma setze. aber ich hätte es gerne in der datenbank, so dass ich die koordinaten dann auch nach wgs84 transformieren kann. wenn das mit sql geht? oder extern skripten und dann die DB updaten? wie auch immer? bin schon gespannt auf morgen :wink:
so long,
thanks

Hallo!
Du kannst das mit einer Funktion in Postgres lösen. Du nimmst die Linie, loops mit st_pointn durch und prozessierst jeden einzelnen erzeugten Punkt. diese setzt du dann wieder zu einer Linie zusammen, die die Funktion zurückgibt. Als Anregung diene mal die Funktion unten, die geschrieben habe, um aus Polygonen Punktlisten zu erzeugen. Wesentlich wäre für dich der loop durch die Linie. Dort müsstest du dein eigenes Processing einsetzen.

Gruß Uwe

-- Function: getborderpoints(geometry)

DROP FUNCTION getborderpoints(geometry);

CREATE OR REPLACE FUNCTION getborderpoints(geom geometry, OUT i int, OUT xcoord numeric, OUT ycoord numeric) 
returns setof record AS 
$BODY$
DECLARE

  xcoord numeric;
  ycoord numeric;
  
BEGIN
  for i in 1 .. (select st_numpoints($1)) loop
    xcoord := st_x(st_pointn($1,i));
    ycoord := st_y(st_pointn($1,i));
    raise notice '%, %, %', i, xcoord, ycoord;
    return next;
  end loop;
  return;
END;
$BODY$
  LANGUAGE 'plpgsql';

EDIT: Die Funktion erwartet einen LINESTRING als EIngabe, falsche Geometrien habe ich (noch) nicht abgefangen…