PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Abrufen von Werten mit doppelter Genauigkeit aus inkonsistenten Zeichenfolgen für die Verwendung von ST_GeomFromText (PostGIS)

Laut der Dokumentation , ST_GeomFromText benötigt (text, integer) , nicht (double precision) .

Alles, was Sie tun müssen, ist CONCAT() und es sollte funktionieren.

Lösung

ST_GeomFromText(CONCAT('LINESTRING(', "YourTable"."YourString", ')'), 4326);

Zum Testen

SELECT
    ST_GeomFromText('LINESTRING(3.985 58.934, 4.56 61.2323, 5.4 63.234355, 3.25982 59.309)', 4326),
    CONCAT('LINESTRING(', "T1"."C1", ')'),
    ST_GeomFromText(CONCAT('LINESTRING(', "T1"."C1", ')'), 4326)
FROM
    (
        SELECT '3.985 58.934, 4.56 61.2323, 5.4 63.234355, 3.25982 59.309, 4.5632 58.32423' AS "C1"
    ) AS "T1";

Nur so zum Spaß

Ich habe mich entschieden, Ihre Zeichenfolge in die ursprünglich angeforderte DOUBLE PRECISION umzuwandeln und dann zurück in eine Zeichenfolge ... das Endergebnis ist das gleiche wie oben, aber es macht es mit viel mehr Arbeit. Trotzdem haben Sie darum gebeten.

SELECT
    ST_GeomFromText(CONCAT('LINESTRING(', (SELECT STRING_AGG(ARRAY_TO_STRING("Line"."Points", ' '), ',') FROM REGEXP_MATCHES(ARRAY_TO_STRING(REGEXP_SPLIT_TO_ARRAY("T1"."C1", E', | ')::DOUBLE PRECISION[], ' '), '(\d*\.\d*) (\d*\.\d*)', 'g') AS "Line"("Points")), ')'), 4326)
FROM
    (
        SELECT '3.985 58.934, 4.56 61.2323, 5.4 63.234355, 3.25982 59.309, 4.5632 58.32423'::TEXT AS "C1"
    ) AS "T1";