sql >> Database >  >> RDS >> PostgreSQL

Verkrijg dubbele precisiewaarden van inconsistente tekenreeksen voor het gebruik van ST_GeomFromText (PostGIS)

Volgens de documenten , ST_GeomFromText vereist (text, integer) , niet (double precision) .

Het enige wat u hoeft te doen is CONCAT() en het zou moeten werken.

Oplossing

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

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

Gewoon voor de lol

Ik heb besloten om je string om te zetten in de oorspronkelijk gevraagde DOUBLE PRECISION en dan terug in een string ... het eindresultaat is hetzelfde als hierboven, maar het doet het met veel meer werk. Toch is het waar je om vroeg.

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. Statistieken met Tcl en Mysql

  2. Een belangrijke wijziging in Extended Events in SQL Server 2012

  3. SQL-query voor het berekenen van het rekeningsaldo

  4. Redenen om Access-apps om te zetten in webgebaseerde apps