Menurut dokumen
, ST_GeomFromText
membutuhkan (text, integer)
, bukan (double precision)
.
Yang perlu Anda lakukan hanyalah CONCAT()
dan itu akan berhasil.
Solusi
ST_GeomFromText(CONCAT('LINESTRING(', "YourTable"."YourString", ')'), 4326);
Untuk pengujian Anda
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";
Hanya untuk bersenang-senang
Saya memutuskan untuk mengubah string Anda menjadi DOUBLE PRECISION
yang awalnya diminta dan kemudian kembali ke string ... hasil akhirnya sama seperti di atas, tetapi melakukannya dengan lebih banyak pekerjaan. Namun demikian, itulah yang Anda minta.
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";