Я пытаюсь использовать функцию PostGIS ST_MakeValid()
для серии в основном концентричных изодистантных мультиполигонов. ,.
. ,,которые определены с чистым типом геометрии и SRID (и хотя они могут не быть идеально действительными, все еще достаточно действительны для визуализации в QGIS, как показано выше):
trade=# \d tmp1
Table "public.tmp1"
Column | Type | Collation | Nullable | Default
-----------+-----------------------------+-----------+----------+---------
the_geom | geometry(MultiPolygon,4326) | | |
К сожалению,Функция ST_MakeValid()
удаляет как SRID, так и тип геометрии, когда я использую ее для создания новой таблицы:
trade=# CREATE TABLE tmp2 AS (SELECT ST_MakeValid(the_geom) AS the_geom_valid FROM tmp1);
SELECT 25
trade=# \d tmp2
Table "public.tmp2"
Column | Type | Collation | Nullable | Default
----------------+----------+-----------+----------+---------
the_geom_valid | geometry | | |
. ,,и ST_SetSRID()
не может разрешить ее, либо создав новую таблицу:
trade=# CREATE TABLE tmp3 AS (SELECT ST_SetSRID(the_geom_valid,4326) AS the_geom_srid FROM tmp2);
SELECT 25
trade=# \d tmp3
Table "public.tmp3"
Column | Type | Collation | Nullable | Default
---------------+----------+-----------+----------+---------
the_geom_srid | geometry | | |
. ,,или с помощью вложенных функций:
trade=# CREATE TABLE tmp4 AS (SELECT ST_SetSRID(ST_MakeValid(the_geom),4326) AS the_geom_all FROM tmp1);
SELECT 25
trade=# \d tmp4
Table "public.tmp4"
Column | Type | Collation | Nullable | Default
--------------+----------+-----------+----------+---------
the_geom_all | geometry | | |
. ,, или даже с использованием всех любимых ST_MakeValid()
полу-заменителей, ST_Buffer()
:
trade=# CREATE TABLE tmp5 AS (SELECT ST_Buffer(the_geom,0) AS the_geom_buffer FROM tmp1);
SELECT 25
trade=# \d tmp5;
Table "public.tmp5"
Column | Type | Collation | Nullable | Default
-----------------+----------+-----------+----------+---------
the_geom_buffer | geometry | | |
Я не могу найти никаких документов, которые предполагают, что это ожидаемое поведение при использованииST_MakeValid()
- как я могу создать правильную геометрию без потери типа geom и SRID?