PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Получаване на стойности с двойна точност от непоследователни низове за използване на ST_GeomFromText (PostGIS)

Според документите , ST_GeomFromText изисква (text, integer) , а не (double precision) .

Всичко, което трябва да направите, е CONCAT() и трябва да работи.

Решение

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

За вашето тестване

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

Просто за забавление

Реших да преобразувам вашия низ в първоначално поискания DOUBLE PRECISION и след това обратно в низ... крайният резултат е същият като по-горе, но го прави с много повече работа. Въпреки това, това е, което поискахте.

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. Как да използвам настройките на tcp_keepalives в Postgresql?

  2. Тип поле на Rails 4 за множествен избор с предварително дефинирани стойности

  3. модел на приложение за викторина django за въпроси с множество избори

  4. Формулата на коефициента на корелация на Пиърсън в SQL

  5. Грешка при отпадане на Rails + Postgres:базата данни е достъпна от други потребители