PostGIS tablosundaki tüm geometrilerin yeniden oluşturulması?


39

SRID: 4326 ile uzamsal bir tablo oluşturdum. Şimdi toplam projeksiyonu SRID: 32644 olarak yeni bir tabloya dönüştürmek istiyorum. Eski masa değişmeden kalmalıdır.


Bunu cevap yerine yorum olarak ekliyorum çünkü daha şık bir yöntem olmalı. Ancak tabloyu kopyalayabilir ve sonra şunu çalıştırabilirsiniz: UPDATE <table> SET the_geom = ST_Transform (the_geom, 32644); (Spatial_ref_sys'inize 32644 için tam bir giriş yaptığınızı varsayalım.)
L_Holcombe

denedim ama bu hatayı güncelledim abc SET geom = ST_Transform (geom, 32644); "abc" ilişkisi için yeni satır kontrol kısıtlamasını ihlal "enforce_srid_geom"
Satya Chandra

1
bu kısıtlamayı bırak. ve sabit
simplexio

Yanıtlar:


62

PostGIS 2.0+ kullanıyorsanız, gidebilirsiniz:

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

Elbette, "Nokta" yı, geometrinizin gerçek geometri türüyle değiştirmelisiniz.
Paul Ramsey

Yerine basit bir yolu var mı Pointile The same geometry type as it was?
Mohayemin

Hayır, korkma.
Paul Ramsey,

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

Mekansal tablonuzda, QGIS'e eklemek için bir tamsayı kimliği alanı olmalıdır.


Yukarıdaki gibi denedim ve başarılı oldum, ancak sonuçta ortaya çıkan tabloyu qgis / udig dosyasına veremiyorum, veritabanında bile var mı?
Satya Chandra

Senin derdin ne?
Vladimir

2
PostGIS'in 2.0 sürümünden daha eski bir sürümünü kullanıyorsanız, yeni tablonuzu gösteren Geometry_Columns tablonuza bir kayıt eklemeniz gerekir.
HeyOverThere

4

şu yolu takip et:

  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. İşte bu!

Eğer ilk satırda yeni tablo oluşturamazsanız, lütfen 2. ve 3. denemeleri yapın. Önce masanızı 1 numara ile yaratın.

umarım sana yardımcı olur ...


3
Bu çözüm geometrileri yeniden değil. Geometriler diğer SRID kullanılarak depolanırsa, değişiklik kısıtlamalarından sonra veriler tutarsız olacaktır. St_trasnform kullanmanız gerekir.
angelcervera
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.