Theo tài liệu
, ST_GeomFromText
yêu cầu (text, integer)
, không phải (double precision)
.
Tất cả những gì bạn cần làm là CONCAT()
và nó sẽ hoạt động.
Giải pháp
ST_GeomFromText(CONCAT('LINESTRING(', "YourTable"."YourString", ')'), 4326);
Để thử nghiệm của bạn
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";
Chỉ để giải trí
Tôi quyết định chuyển đổi chuỗi của bạn thành DOUBLE PRECISION
được yêu cầu ban đầu và sau đó trở lại thành một chuỗi ... kết quả cuối cùng giống như trên, nhưng nó thực hiện với nhiều công việc hơn. Tuy nhiên, đó là những gì bạn yêu cầu.
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";