Неявное преобразование геометрии в строку WKT в PostGIS - PullRequest
0 голосов
/ 08 февраля 2019

Предположим, у меня есть таблица, определенная следующим образом:

CREATE TABLE gtest (name varchar, geom geometry);

Чтобы вставить, я могу просто сделать это:

INSERT INTO gtest
VALUES (
    'Polygon',
    'SRID=4326;POLYGON((0 0,1 0,1 1,0 1,0 0))'
);

Мне не нужно оборачивать WKTстрока в функции ST_GeomFromText(), потому что PostGIS имеет неявное приведение, которое делает это.Это хорошо объясняется @JGH здесь

С помощью команды Postgres \dC можно перечислить определенные приведенные типы, в том числе:

                                     List of casts
     Source type         |         Target type         |      Function      |   Implicit?
-------------------------+-----------------------------+--------------------+---------------
text                     | geometry                    | geometry           | yes
geometry                 | text                        | text               | yes

Я быЯ хотел бы сделать так, чтобы я мог просто сделать SELECT * FROM gtest и получить результаты столбца геометрии, неявно преобразованные в WKT.В настоящее время он будет просто отображать их как WKB.

Сначала я попытался создать новое приведение следующим образом:

CREATE CAST (geometry AS text) WITH FUNCTION st_astext(geometry) AS IMPLICIT;

Это вернуло ошибку, так как приведение из геометрии к тексту уже существует(как видно из таблицы).

Затем я попытался ALTER EXTENSION postgis DROP CAST (geometry as text);, а затем DROP CAST (geometry as text); и смог создать новый актерский состав:

                                     List of casts
     Source type         |         Target type         |      Function      |   Implicit?
-------------------------+-----------------------------+--------------------+---------------
geometry                 | text                        | st_astext          | yes

Это все еще неработать, однако, когда я делаю выбор, я все равно получаю результаты в WKB.

Во-первых, возможно ли это?Я просто что-то делаю не так?Во-вторых, не нарушатся ли какие-либо геометрические функции, добавив это неявное приведение?

1 Ответ

0 голосов
/ 08 февраля 2019

Когда данные преобразуются в строку или отправляются клиенту в текстовом режиме, вызывается функция вывода типа .В этом случае не применяется приведение.

Эта функция написана на C, и вам придется взломать PostGIS, чтобы изменить ее.Кроме того, вам также придется изменить функцию ввода типа, чтобы она принимала текстовый формат.

Я надеюсь, что вы провели этот эксперимент на тестовой машине, потому что ALTER EXTENSION изуродовал расширение PostGIS.

...