понедельник, 4 июля 2011 г.

Как понизить размерность геометрического поля таблицы в PostGIS

В таблице PostGIS имеем размерность 4 (x, y, z, m). Запрос
SELECT f_geometry_column, coord_dimension, srid, type FROM geometry_columns WHERE f_table_name='main';
возвращает:
geom      4      60000      POINT
При запросе геометрических данных этой таблицы
SELECT ST_AsEWKT(geom), ST_AsText(geom), ST_NDims(geom) FROM main WHERE gid=1;
получаем:
SRID=60000;POINT(-4290.34 7248.45 0 -1.79e+308)      POINT(-4290.34 7248.45)      4
Требуется преобразовать поле geom таблицы main к размерности 2.
Для этого выполним:
ALTER TABLE main DROP CONSTRAINT enforce_dims_geom;
UPDATE geometry_columns SET coord_dimension=2 WHERE f_table_name='main';
UPDATE main SET geom=ST_GeomFromEWKT('SRID='||ST_SRID(geom)||';'||ST_AsText(geom))
        WHERE ST_NDims(geom)=4;
ALTER TABLE main ADD CONSTRAINT enforce_dims_geom CHECK (st_ndims(geom) = 2);
Всё. Задача решена. Размерность понижена с четырёх до двух.

1 комментарий:

  1. Анонимный16 июля 2012 г., 16:07

    В результате выполненной процедуры получаю check constraint "enforce_dims_geom" is violated by some row.
    Что это и как этого избежать?

    ОтветитьУдалить