PostGIS का उपयोग करके बड़े बहुभुज बनाने के लिए बहुत सारे छोटे बहुभुजों से जुड़ना?


47

पोस्टगिस में SRID 27700 का उपयोग करते हुए मेरी निम्नलिखित परत है:

यहाँ छवि विवरण दर्ज करें

यह यूके में प्रत्येक प्रशासनिक क्षेत्र है, और (जैसा कि आप रंग समूहन से देख सकते हैं) उनमें से प्रत्येक के पास एक पाठ क्षेत्र है जो उस काउंटी में निर्दिष्ट करता है जिसमें वे झूठ बोलते हैं।

मैं जो करना चाहता हूं, वह किसी दिए गए काउंटी में छोटे लोगों से बड़े काउंटी बहुभुज बनाना है, इसलिए सभी चैती रंग बहुभुज के ऊपर चित्र में ईजी एकल बाहरी रिंग से एक बड़ा बहुभुज बनाएगा जिसमें सभी पोल होंगे रंग, जैसे बुद्धिमान सभी बैंगनी, भूरा, गुलाबी, ग्रे आदि सभी को एक बहुभुज बनाना चाहिए।

मैंने पहले ही निम्नलिखित कोशिश की है:

insert into parishesmerged (geometry)
select astext(multi(ST_Union(the_geom))) as the_geom from parishes
group by county_name

लेकिन यह टूटी हुई ज्यामिति उत्पन्न करता रहता है जो मुझे तब बड़ी समस्याओं का प्रसंस्करण करना पड़ता है।

मैं प्रमुख उत्पादन क्षेत्रों के साथ एक सरल काउंटी स्तर का नक्शा बनाने की कोशिश कर रहा हूं।

किसी भी समाधान को Postgis में नहीं होना चाहिए, मेरे पास पूर्ण OS4Geo स्टैक स्थापित है, QGis का नवीनतम संस्करण और इससे अधिक बर्तनों पर मैं एक छड़ी को हिला सकता हूं।

केवल वही चीजें जो मेरे पास नहीं हैं, जैसे कि आर्किग जैसे बड़े लड़के (हालांकि मेरे पास एक पुराना मैपइन्फो कहीं पर पड़ा हो सकता है)


रिकॉर्ड के लिए, मैं जिस डेटासेट को बनाने की कोशिश कर रहा हूं वह एक जीआईएस किताब के साथ है। मैं .NET प्रोग्रामर के उद्देश्य से लेखन पर हूं। जो कि .NET का उपयोग करके जीआईएस एप्लिकेशन लिखना चाहते हैं।


नीचे दिए गए सुझावों को आज़माने के बाद, जिसने सबसे अच्छा काम किया, वह था 'पॉल रामसीज़' समाधान।

अब मेरे पास एक अच्छा सरलीकृत काउंटियां और बोरो फ़ाइल है जो मेरी पुस्तक के लिए पर्याप्त सरल है, लेकिन मुझे कुछ दिलचस्प भू-स्थानिक एसक्यूएल प्रदर्शित करने की अनुमति देने के लिए पर्याप्त जटिल है।

भले ही पॉल का समाधान अंततः वही था जो मेरे लिए काम करता था, मैंने बहुभुज के नक्शे को सरल बनाने और जटिलता को कम करने जैसी चीजों के लिए अन्य उत्तरों पर भी ध्यान दिया।

हालाँकि, मैंने ऐसा करते समय अवलोकन किया था, जबकि ST_Collect वास्तव में ST_Union की तुलना में तेज़ है, इसे चलाने के लिए रन भी टूटे हुए ज्यामितीयों के लिए सबसे अधिक जिम्मेदार था। मेरा अनुमान है कि गति वृद्धि कोर फ़ंक्शन में कम सटीकता की कीमत पर प्राप्त की जाती है।


इस प्रक्रिया को "भंग" के रूप में जाना जाता है। मैं PostGIS के साथ अनुभवी नहीं हूं, लेकिन मेरा मानना ​​है कि आप ST_Union कमांड का उपयोग भंग करने के लिए कर सकते हैं।
dmahr

हाय dmahr, स्पष्टीकरण के लिए धन्यवाद, यह निश्चित नहीं था कि इसे क्या कहा जाता है, हालांकि यदि आप मेरा प्रश्न पढ़ते हैं, तो आप देखेंगे कि मैंने पहले ही कोशिश की है :-)
shawty

ओह, क्षमा करें ... यह नहीं देखा। क्या आपने astext(multi())भाग के बिना चयन कथन की कोशिश की है ? मैं बस से दूर जा रहा हूँ जो मैं अन्य PostGIS में देखता हूं उदाहरणों को भंग करता हूं।
dmahr

अभी नहीं, अभी कोशिश करेंगे। टी.के.एस। क्या आपके पास उदाहरणों को भंग करने के लिए लिंक है?
shawty

कृपया व्यक्त करने के लिए संपादित करें यदि आप "एकल बाहरी रिंग" चाहते हैं या नहीं। (मेरा उत्तर देखें)
पीटर क्रूस

जवाबों:


43

ST_Union काम करेगा, लेकिन आपकी लाइन का काम लगभग साफ नहीं है। इसलिए आपकी छोटी चीज़ों की सीमाएँ पूरी तरह से पसंद नहीं हैं। आप धीरे-धीरे उन्हें ग्रिड में स्नैप करने की कोशिश कर सकते हैं और उन बाधाओं को बढ़ा सकते हैं जो वर्टेक्स लाइन अप करते हैं, लेकिन मुझे यकीन है कि आपके पास अभी भी कुछ मामले होंगे जो काम नहीं करते हैं। या तो वे सहिष्णुता से परे होंगे या, अधिक संभावना है, ऐसी जगहें होंगी जहां कोने जोड़े नहीं हैं, इसलिए एक तरफ एक रेखा है और दूसरी तरफ एक शीर्ष है।

 CREATE TABLE merged AS
 SELECT ST_Union(ST_SnapToGrid(the_geom,0.0001)) 
 FROM parishes
 GROUP BY county_name;

यदि आपके पास PostGIS 2.0 है, तो एक सहिष्णुता के साथ एक टोपोलॉजी संरचना का निर्माण आपको उस उत्तर के लिए मिल सकता है जिसे आप खोज रहे हैं, अगर आपको कुछ भाग्य है।


ज्यामितीय सुधार के लिए अच्छा सुराग, लेकिन "... एकल बाहरी रिंग से एक बड़ा बहुभुज जिसमें सभी पोल शामिल हैं ..."?
पीटर क्रूस

मैं 'SnapTo' के बारे में नहीं जानता था कि मैं एक कोशिश करूँगा :-) Tks। दुर्भाग्य से, नहीं, अभी तक पीजी 2 का उपयोग नहीं कर रहा है, हालांकि अपग्रेड पाइपलाइन में है।
shawty

सुनिश्चित नहीं है कि आपका सिंटैक्स सही है। पोस्टगिस.नेट / डॉक्स / ST_यूएनएनओएन.ओ.आर। के अनुसार , ऐसा कोई भी हस्ताक्षर नहीं है जो दूसरे पैरामीटर में किसी संख्या को स्वीकार करता है।
ऐरेन कैम्ब्रिज

आप सही हैं, कोष्ठक गलत जगह पर था। संपादित।
पॉल रैमसे

वहाँ एक mysql इस के बराबर है? मैं मिलता रहा Incorrect parameter count in the call to native function 'ST_Union'और मुझे नहीं पता कि यह एक mysql सीमा है।
Jayen

7

आप कहते हैं कि "... एकल बाहरी रिंग से एक बड़ा बहुभुज बनाते हैं जिसमें सभी पोल होते हैं ..."। ST_ExteriorRing ऐसा करते हैं,

SELECT ST_MakePolygon(ST_ExteriorRing(ST_Union(GEOM)))
FROM GEOMTABLE GROUP BY ATTRCOLUMN

आप सुझाए गए अनुसार ST_Union () का उपयोग कर सकते हैं, या ST_Collection () के साथ परीक्षण कर सकते हैं।


नोट: छोटे छोरों या "टूटी हुई ज्यामितीय" से बचने के लिए आप प्रत्येक जियोम के लिए st_convexhull और / या ST_Simplify का उपयोग कर सकते हैं,

SELECT ST_MakePolygon(ST_ExteriorRing(ST_union(ST_Simplify(GEOM,0.5))))
FROM GEOMTABLE GROUP BY ATTRCOLUMN

और अपनी ज्यामितीय जाँच करें,

SELECT * FROM (
   SELECT gid, ST_IsValid(geom) as valid, ST_IsSimple(geom) as simple 
   FROM GEOMTABLE) AS t  
WHERE NOT(valid AND simple); 

इस भ्रम के लिए खेद है: मेरे विवरण से मेरा मतलब था कि छोटे लोगों से बनाया गया एक बड़ा बहुभुज, मुझे एहसास है कि संदर्भ के आधार पर 'आउटर रिंग' का मतलब अलग-अलग लोगों के लिए अलग-अलग चीजें हो सकती हैं, मेरा इरादा एक बहुभुज से निर्मित एक बहुभुज का वर्णन करना था प्रत्येक बहुभुज समूह के चारों ओर सीमा मौजूद है।
शावि

7

ST_Collect फ़ंक्शन PostgreSQL की शब्दावली में एक "कुल" फ़ंक्शन है

" SELECT ST_Collect(GEOM) FROM GEOMTABLE GROUP BY ATTRCOLUMN" ATTRCOLUM के प्रत्येक अलग मूल्य के लिए एक अलग GEOMETRYCOLLECTION लौटाएगा

http://postgis.net/docs/ST_Collect.html

नोट: ST_Collect ST_Union की तुलना में बहुत तेज है


3
मैंने कोशिश की और थोड़ा अलग परिणाम मिला, हालांकि एक ज्यामिति संग्रह है जो मुझे चाहिए? मैं अनिवार्य रूप से एक बड़ा बहुभुज बनाने की कोशिश कर रहा हूं, वैकल्पिक रूप से इसमें छेद के साथ (विशेष रूप से डर्बीशायर और नॉटिंघमशायर में, जहां दोनों डर्बी और नॉटिंघम केंद्र में अलग-अलग जिले बनाते हैं। मैंने गति अंतर का अवलोकन किया था, हालांकि, केवली।
शॉटी

2

मैं आपके प्रश्न से यह मान रहा हूं कि आप आयुध सर्वेक्षण के सीमा-रेखा उत्पाद का उपयोग कर रहे हैं। अगर ऐसा है तो इसमें पहले से ही एक काउंटी स्तर का डेटा सेट शामिल है ताकि निचले स्तर के पल्ली क्षेत्रों से इसे स्वयं उत्पन्न करने का प्रयास करने की आवश्यकता न हो।

यदि आप बाउंड्री-लाइन का उपयोग नहीं कर रहे हैं, तो मैं आपको सलाह देता हूं कि यह ओएस ओपनडाटा लाइसेंस के तहत मुफ्त है और एक काउंटी स्तर है एक आकृति फ़ाइल के रूप में आप सीधे पोस्टजीआईएस में लोड कर सकते हैं।


2
जो लोग इसे नहीं जानते उनके लिए एक लिंक प्रदान करने के बारे में कैसे? धन्यवाद।
जोंतर

1
हाय चॉंडरसन आप वास्तव में सही हैं, हां मैं ओएस ओपेंडेटा से निर्धारित सीमा परत डेटा का उपयोग कर रहा हूं, दुर्भाग्य से काउंटी की सीमाएं पूरी नहीं हैं, वास्तविक काउंटी के आकार की फाइल में केवल वे शामिल हैं जिन्हें काउंटियों के रूप में नामित किया गया है, लंदन के बोरों में आसपास के क्षेत्र शामिल हैं लंदन, और अन्य फाइलों में सभी कुछ हिस्से हैं, अन्य की तुलना में कुछ निचले और छोटे स्तर हैं। एकमात्र फ़ाइल जिसमें यूके की संपूर्ण रूपरेखा है, और बाद में सभी ऊपरी स्तर की काउंटियों और नगरपालिका सीमाओं को एक परत में निकालने का कोई भी मौका पारिश्रमिक परत है, इसलिए मैं ऐसा करने का प्रयास कर रहा हूं।
shawty

उन लोगों के लिए जो आपको काउंटी की सीमाएं और अधिक डाउनलोड कर सकते हैं, यहीं: ordnancesurvey.co.uk/oswebsite/products/os-opendata.html
shawty
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.