sql >> Databasteknik >  >> RDS >> PostgreSQL

Få dubbla precisionsvärden från inkonsekventa strängar för att använda ST_GeomFromText (PostGIS)

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";



  1. Trigram Wildcard String Search i SQL Server

  2. Kan inte infoga icke-latinska symboler i MySQL

  3. Finns det nackdelar med att använda en generisk varchar(255) för alla textbaserade fält?

  4. MySQL-tidszonförvirring