Enligt dokumenten
, ST_GeomFromText
kräver (text, integer)
, inte (double precision)
.
Allt du behöver göra är CONCAT()
och det borde fungera.
Lösning
ST_GeomFromText(CONCAT('LINESTRING(', "YourTable"."YourString", ')'), 4326);
För dina tester
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";
Bara för skojs skull
Jag bestämde mig för att konvertera din sträng till den ursprungligen begärda DOUBLE PRECISION
och sedan tillbaka till en sträng... slutresultatet är detsamma som ovan, men det gör det med mycket mer arbete. Ändå är det vad du bad om.
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";