Изменение SRID существующих данных в PostGIS?

50

При импорте данных моего шейп-файла в PostGIS я не выбрал правильную проекцию.

Как мне теперь изменить SRID данных, не трансформируя Координаты?

Девдатта Тенгше
источник

Ответы:

84

Есть функция с одной строкой, которая делает это для вас. Просто используйте следующий запрос SQL:

select UpdateGeometrySRID('Schema Name', 'mytable', 'the_geom', newSRID) ;

Но, если вы похожи на меня, вас заинтересуют миниатюрные ступени низкого уровня. Логически говоря, вышеуказанная функция эквивалентна следующему четырехэтапному процессу:

  1. В таблице geometry_columns обновите SRID до требуемого значения.

  2. Удалите ограничение на таблицу, используя следующую инструкцию SQL

    ALTER TABLE mytable DROP CONSTRAINT enforce_srid_the_geom;

  3. Обновите SRID для геометрии, используя следующую инструкцию SQL

    UPDATE mytable SET the_geom = ST_SetSRID(the_geom, newSRID);

  4. Добавьте обратно ограничение, используя следующую инструкцию SQL

    ALTER TABLE mytable

    ADD CONSTRAINT enforce_srid_the_geom CHECK (st_srid(the_geom) = (newSRID));

Девдатта Тенгше
источник
1
См. Postgis.org/docs/ST_SetSRID.html для получения дополнительной информации и ссылок
BradHards
13

В PostGIS 2.x геометрические столбцы обычно используют typemods, например geometry(Point, 1234). Для этого вы можете использовать ALTER TABLE для непосредственного изменения типа столбца геометрии за один шаг.

Например, чтобы установить SRID geomв mytableWGS84, используйте ST_SetSRID :

ALTER TABLE mytable
  ALTER COLUMN geom
    TYPE geometry(Point, 4326)
    USING ST_SetSRID(geom, 4326);

Обратите внимание, что это только изменит SRID, но не преобразует данные координат.

Майк Т
источник
1
При тривиальном изменении это также будет работать со столбцами географии , которые UpdateGeometrySRIDне поддерживаются.
DSZ