PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Dapatkan nilai presisi ganda dari string yang tidak konsisten untuk menggunakan ST_GeomFromText (PostGIS)

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL pilih nilai dan kenaikan sekaligus

  2. Salin struktur tabel ke tabel baru

  3. String -> java.util.Date -> java.sql.Date (dengan cap waktu)

  4. Temukan n Tetangga Terdekat untuk Titik tertentu menggunakan PostGIS?

  5. Bagaimana cara INSERT INTO table dari dynamic query?