दिलचस्प सवाल। मैं अपने आप को पोस्टगिस गुरु नहीं मानता, लेकिन मैंने आपकी समस्या के साथ खिलवाड़ किया और निम्नलिखित प्रश्न के साथ आया जो राजमार्ग LINESTRING
रिकॉर्ड को MULTILINESTRING
रिकॉर्ड में भंग कर देता है जब उनके पास कई क्षेत्रों में सामान्य मूल्य होते हैं (मेरे डेटासेट में, मैं name
और state
खेतों पर मेल खाता हूं )। मैंने पोस्टग्रेजल में एक हाईवेज शेपफाइल (ushwys का नाम बदलकर) को पुश करने के लिए OGR का उपयोग किया; इसलिए मेरा ज्यामिति क्षेत्र कहा जाता है wkb_geometry
। अपने डेटा और फ़ील्ड स्थितियों को समायोजित करने के लिए इस क्वेरी को हैक करने का प्रयास करें:
SELECT
u.name,
u.state,
ST_AsText( ST_Multi( ST_Collect( u.wkb_geometry ) ) ) as multilines
FROM ushwys u
GROUP BY u.name, u.state
ORDER BY u.state
LIMIT 100; --########### DROP THE LIMIT WHEN YOU'RE DONE EXPERIMENTING
यदि यह काम करता है, तो आप इस क्वेरी को करने के लिए ogr2ogr का उपयोग कर सकते हैं और परिणाम को किसी भी वेक्टर प्रारूप में निर्यात कर सकते हैं जिसे आप पसंद करते हैं, जैसे कि शेपफाइल, जीएमएल, सीएसवी या अन्यथा। Ogr2ogr से SQL प्रश्नों को कॉल करने की जानकारी के लिए, OGR SQL दस्तावेज़ देखें।
संदर्भ के रूप में, मैंने PostGIS ST_Collect निर्देश की समीक्षा की , साथ ही साथ यह साइट जो कई क्षेत्रों में समूहीकरण को प्रदर्शित करती है।
यदि आपको लगता है कि इस क्वेरी में कटौती आपके लिए काम नहीं करती है, तो कृपया मुझे बताएं और मैं अपने उत्तर को रद्द कर दूंगा ताकि यह लोगों को भ्रमित न करे और लोगों को भ्रमित न करे।
पुनश्च यदि आप पोस्टग्रिज में जियोडेटा को पुश करने के लिए ogr2ogr का उपयोग करने से परिचित नहीं हैं, तो मैंने अपना डेटा आयात करने के लिए निम्नलिखित ogr2ogr स्क्रिप्ट का उपयोग किया ( वेब से कॉपी करना और सीधे अपने ogr2ogr कमांड विंडो में पेस्ट करना, जैसा कि मैंने पृष्ठ स्वरूपण पाया है ओब्रीक स्क्रिप्ट को तोड़ने वाले दोहरे उद्धरणों के लिए लाइनब्रेक और फ़ॉन्ट / चरित्र प्रतिस्थापन का परिचय देता है ):
ogr2ogr -f "PostGreSQL" PG:"host=127.0.0.1 user=postgres dbname=gisdb password=my_password"
"E:\GISData\UnitedStates\highways.shp" -nln ushwys -nlt geometry
[अपडेट करें]
मैं यह देखना चाहता था कि उस क्वेरी को चलाने के बाद QGIS में यह "कैसे" दिखता है, इसलिए मैंने इस WHERE
क्लॉज को लागू करने के लिए क्वेरी को नियंत्रित किया (जो मिसौरी राज्य में यूएस हाईवे 65 के सभी वेरिएंट देता है):
where u.state = 'MO' and u.name LIKE '%US%65%'
इसके बाद मैंने अपने परिणामी राजमार्ग MULTILINESTRING
रिकॉर्ड के सभी आठ (8) की कल्पना करने के लिए QGIS और QuickWKT प्लगइन का उपयोग किया । जैसा कि आप स्क्रीनशॉट में देख सकते हैं, अंतिम परिणाम Hwy 65 को Missoui की उत्तरी सीमा से लेकर आयोवा के साथ अरकंसास के साथ उसकी दक्षिणी सीमा तक सभी तरह से लेते हैं:
मेरे लिए, यह विज़ुअलाइज़ेशन दर्शाता है कि मेरी क्वेरी किसी भी अप्रत्याशित दोहराव या सुविधाओं के उन्मूलन का उत्पादन नहीं करती है। तो अगली बार मैंने सोचा "ठीक है, भंग आठ सुविधाओं को वापस कर दिया, लेकिन वास्तव में मूल तालिका में कितनी विशेषताएं मिसौरी में Hwy 65 का प्रतिनिधित्व करती हैं?" मेरी अगली क्वेरी ने उस प्रश्न का उत्तर दिया। ऐसा लगता है कि मूल डेटासेट मिसौरी में Hwy 65 का प्रतिनिधित्व करने के लिए अड़तीस (38) सुविधाओं का उपयोग करता है:
SELECT count(*) FROM ushwys WHERE state = 'MO' AND name LIKE '%US%65%';
-- returned 38
अंतिम विश्लेषण पर, क्वेरी ने अड़तालीस (38) सुविधाओं को घटाकर आठ (8) सुविधाएँ दीं, जो नाम और राज्य क्षेत्रों में साझा मूल्य हैं। इस बिंदु पर, मैं अपेक्षाकृत आश्वस्त हूं कि यह क्वेरी मल्टीपार्ट-जियोमेट्री में एकल-भाग ज्यामितीय को भंग करने के लिए उपयोगी और उपयुक्त है जब भंग कार्य को कई क्षेत्रों पर विचार करने की आवश्यकता होती है।
चीयर्स। :)