PostGIS तालिका में सभी ज्यामितीयों को निरस्त कर रहा है?


39

मैंने SRID: 4326 के साथ एक स्थानिक तालिका बनाई। अब मैं SRID: 32644 में एक नई तालिका में कुल प्रक्षेपण को बदलना चाहता हूं। पुरानी तालिका अपरिवर्तित रहनी चाहिए।


मैं इसे एक उत्तर के बजाय एक टिप्पणी के रूप में जोड़ रहा हूं क्योंकि अधिक सुरुचिपूर्ण विधि होनी चाहिए। लेकिन आप तालिका की प्रतिलिपि बना सकते हैं, और फिर चला सकते हैं: अद्यतन करें <तालिका> SET the_geom = ST_Transform (the_geom, 32644); (मान लें कि आपके पास अपने spatial_ref_sys में पूर्ण प्रवेश 32644 के लिए है।)
L_Holcombe

मैंने कोशिश की लेकिन इस त्रुटि को अपडेट करने के लिए abc SET geom = ST_Transform (geom, 32644); संबंध के लिए नई पंक्ति "एबीसी" चेक की कमी का उल्लंघन करती है "enforce_srid_geom"
सत्या चंद्र

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?
मोहयमीन

नहीं, डर नहीं।
पॉल रैमसे

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

QGIS में जोड़ने के लिए आपकी स्थानिक तालिका में एक पूर्णांक ID फ़ील्ड होना चाहिए।


मैंने ऊपर की कोशिश की और सफल रहा, लेकिन मैं परिणामी तालिका को क्यूजीस / udig में निर्यात करने में असमर्थ हूं, यहां तक ​​कि यह डेटाबेस में दिखाई दे रहा है?
सत्य चंद्र

आपकी सटीक समस्या क्या है?
व्लादिमीर

2
यदि आप संस्करण 2.0 से पुराने PostGIS के संस्करण का उपयोग कर रहे हैं, तो आपको अपनी नई तालिका की ओर इशारा करते हुए अपने Geometry_Columns तालिका में एक रिकॉर्ड जोड़ना होगा।
हेओवरटेयर

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. बस इतना ही!

यदि आप पहली पंक्ति में नया टेबल नहीं बना सकते हैं, तो pls 2 की कोशिश करें। और 3. इसके बाद नंबर 1 के साथ अपनी तालिका बनाएं।

मुझे उम्मीद है इससे आपको मदद मिली होगी...


3
यह समाधान जियोमेट्री को पुन: अस्वीकार नहीं करता है। यदि ज्यामिति को अन्य SRID का उपयोग करके संग्रहीत किया जाता है, तो डेटा परिवर्तन अवरोधों के बाद असंगतता होगी। आपको st_trasnform का उपयोग करने की आवश्यकता है।
फरिश्ता 8
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.