मैं PolyGons (प्रोसेसिंग.trimmedparcelsnew) का एक सेट बनाने के लिए ST_Difference का उपयोग करने की कोशिश कर रहा हूं, जिसमें पोस्टगिस 2.1 (और पोस्टग्रेज एसक्यूएल 9.3) के साथ पॉलीगोन (test.single_geometry_1) के एक और सेट द्वारा कवर किया गया कोई भी क्षेत्र शामिल नहीं है। यहाँ मेरी क्वेरी है:
CREATE TABLE processing.trimmedparcelsnew AS
SELECT
orig.id, ST_Difference(orig.geom, cont.geom) AS difference
FROM
test.single_geometry_1 cont,
test.multi_geometry_1 orig;
लेकिन परिणामी बहुभुजों को छंटनी नहीं की गई है, इसके बजाय वे विभाजित हो गए हैं जहां वे दूसरी परत के साथ अंतर करते हैं। मैंने केवल एक तालिका में परिणाम डाले बिना चयन को चलाने की कोशिश की है और बाकी सब कुछ जिसके बारे में मैं सोच सकता हूं, लेकिन मुझे यह काम करने के लिए नहीं मिल सकता है।
मैंने परिणाम की एक तस्वीर संलग्न की है
टिप्पणियों के बाद, मैंने WHERE क्लॉज जोड़ने की कोशिश की है। मैं चाहता हूं कि जिन पार्सल में कोई चौराहा नहीं है, और हटाए गए अन्य पार्सल के चौराहे वाले क्षेत्र (परत परीक्षण.सिंघल_गेमेट्री मैं अपने पार्सल से हटाए जाने वाले संदूषण का प्रतिनिधित्व करता हूं)। मैंने एक प्रतिच्छेदन की कोशिश की लेकिन निश्चित रूप से मैं वास्तव में गैर-चौराहों को चाहता हूं इसलिए मैं अब एक असहमति की कोशिश कर रहा हूं। मैंने अपनी तालिका में मूल को जोड़ने की भी कोशिश की है, लेकिन ST_Difference ( http://postgis.net/docs/ST_Difference.html ) के लिए प्रलेखन यह कहता है कि मुझे सटीक ज्यामिति चाहिए जो मुझे चाहिए (एक ज्यामिति जो ज्यामिति के उस हिस्से का प्रतिनिधित्व करती है जो ज्यामिति बी के साथ प्रतिच्छेद नहीं करता है), इसलिए मुझे भ्रम है कि मैं इसके बजाय मूल बहुभुज को अपनी तालिका में क्यों चाहूंगा। वैसे भी, यहाँ मेरा संशोधित कोड है:
CREATE TABLE processing.trimmedparcelsnew AS
SELECT
orig.id, ST_Difference(orig.geom, cont.geom) AS difference, orig.geom AS geom
FROM
test.single_geometry_1 cont,
test.multi_geometry_1 orig
WHERE ST_Disjoint(orig.geom, cont.geom);
Dbaston के उत्तर के बाद मैंने अब कोशिश की है:
CREATE TABLE processing.parcels_trimmed AS
SELECT id, COALESCE(ST_Difference(geom, (SELECT ST_Union(b.geom)
FROM test.single_geometry_1 b
WHERE ST_Intersects(a.geom, b.geom)
AND a.id != b.id)), a.geom)
FROM test.multi_geometry_1 a;
इसका परिणाम सिर्फ test.multi_geometry_1 की एक प्रति है। हालांकि अब बंटवारा नहीं हो रहा है।
मैंने पहले संस्करण की कोशिश की थी, लेकिन फिर से test.multi_geometry_1 की एक प्रति प्राप्त करें:
CREATE TABLE processing.parcels_trimmed_no_coalesce AS
SELECT id, COALESCE(ST_Difference(geom, (SELECT ST_Union(b.geom)
FROM test.single_geometry_1 b
WHERE ST_Intersects(a.geom, b.geom)
AND a.id != b.id)), a.geom)
FROM test.multi_geometry_1 a;
मुझे आश्चर्य होने लगा है कि क्या कुछ और है जो मैं गलत कर रहा हूं? कार्यवाही कथन है:
DROP TABLE IF EXISTS processing.parcels_trimmed_no_coalesce;
और मैं PostgreSQL SQL क्वेरी विंडो और Openjump से क्वेरी चला रहा हूं।
तालिका देखने के लिए मैं जिस कथन का उपयोग करता हूं वह है:
SELECT * FROM processing.parcels_trimmed_no_coalesce;
सरलीकरण के हित में मैंने अब इस क्वेरी को घटाकर केवल:
SELECT id, COALESCE(ST_Difference(geom, (SELECT ST_Union(b.geom)
FROM test.geometriestocutagainst b
WHERE ST_Intersects(a.geom, b.geom)
AND a.id != b.id)), a.geom)
FROM test.geometriestocut a;
यह अभी भी सिर्फ मूल बहुभुज (test.geometriestocut) में परिणाम देता है जब वांछित परिणाम test.geometriestocutagainst के खिलाफ मूल छंटनी की जाती है।
WHERE
खंड निर्दिष्ट नहीं किया है , इसलिए आपको परिणामी तालिका में बहुपद विस्तार हो सकता है। कितने पंक्तियों में हैंtrimmedparcelsnew
?