Відхилення всіх геометрій у таблиці PostGIS?


39

Я створив просторову таблицю з SRID: 4326. Тепер я хочу змінити загальну проекцію на SRID: 32644 на нову таблицю. Стара таблиця повинна залишатися незмінною.


Я додаю це як коментар замість відповіді, оскільки має бути більш елегантний метод. Але ви можете скопіювати таблицю та запустити: UPDATE <table> SET the_geom = ST_Transform (the_geom, 32644); (Припустимо, що у вас є повний запис у просторовому_рефісі за 32644.)
L_Holcombe

я спробував, але я заробив це оновлення помилки abc SET geom = ST_Transform (geom, 32644); новий рядок для відношення "abc" порушує контрольне обмеження "Execuce_srid_geom"
Satya Chandra

1
скинути це обмеження. і його фіксований
симплексіо

Відповіді:


62

Якщо ви перебуваєте на PostGIS 2.0+, ви можете перейти:

ALTER TABLE mytable 
  ALTER COLUMN geom 
  TYPE Geometry(Point, 32644) 
  USING ST_Transform(geom, 32644);

Звертаючи увагу, що ви повинні замінити "Точку" фактичним типом геометрії вашої геометрії.
Пол Рамзі

Є простий спосіб замінити Pointз The same geometry type as it was?
Mohayemin

Ні, не боїться.
Пол Рамзі

18
CREATE TABLE new_table AS 
  SELECT ST_Transform(the_geom,32644) AS the_geom 
  FROM original_table;

У вашій просторовій таблиці повинно бути ціле поле ідентифікатора, щоб додати його до QGIS.


Я спробував як вище і досяг успіху, але я не в змозі експортувати отриману таблицю в qgis / udig, навіть якщо вона з’являється в базі даних?
Сатья Чандра

Яка ваша точна проблема?
Володимир

2
Якщо ви використовуєте версію PostGIS, старшу за версію 2.0, вам потрібно буде додати запис до таблиці Geometry_Columns, що вказує на вашу нову таблицю.
HeyOverThere

4

слідуйте таким чином:

  1. CREATE TABLE 'new_table' AS SELECT * FROM 'old_table';
  2. ALTER TABLE new_table DROP CONSTRAINT enforce_srid_the_geom;
  3. ALTER TABLE new_table DROP CONSTRAINT enforce_geotype_the_geom;
  4. UPDATE new_table SET the_geom = ST_SetSRID(the_geom, new_srid);
  5. ALTER TABLE new_table ADD CONSTRAINT enforce_srid_the_geom CHECK (st_srid(the_geom) = (new_srid));
  6. ALTER TABLE new_table ADD CONSTRAINT enforce_geotype_geom CHECK ((geometrytype(the_geom) = 'POINT'::text OR the_geom IS NULL);
  7. Це все!

якщо ви не можете створити нову таблицю в першому рядку, будь ласка, спробуйте 2. і 3. спочатку створіть свою таблицю з номером 1.

я сподіваюся, що це допоможе тобі ...


3
Це рішення не переробляє геометрії. Якщо геометрії зберігаються за допомогою іншого SRID, дані будуть невідповідними після обмежень зміни. Вам потрібно використовувати st_trasnform.
angelcervera
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.