ArcPy का उपयोग करके बहुभुज के प्रत्येक पक्ष के अभिविन्यास की गणना?


9

मैं एक बहुभुज में प्रत्येक पंक्ति के अभिविन्यास की जांच करना चाहता हूं ताकि मैं उनके सौर जोखिम की गणना कर सकूं। प्रत्येक बहुभुज एक इमारत का प्रतिनिधित्व करता है, और एक संबद्ध ऊंचाई है। फिलहाल, मैं केवल अभिविन्यास पर विचार करना चाहता हूं, और बाद में छायांकन मुद्दों पर विचार करूंगा।

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

मैं अजगर से परिचित हूं और एक स्क्रिप्ट से यह सब करने की योजना बनाई है।


1
इस प्रश्न के उत्तर में मदद करें: gis.stackexchange.com/questions/1886/…
सीन

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

जब आप 'अभिविन्यास' कहते हैं, तो आपने मेरे लिए इसे अच्छी तरह से परिभाषित नहीं किया है --- उदाहरण के लिए, एक सही षट्भुज का उन्मुखीकरण क्या है?
दान एस।

@ दान एस। मैंने सिर्फ बहुभुज में प्रत्येक पंक्ति के अभिविन्यास को शामिल करने के लिए अपने उत्तर को संपादित किया।
djq

खेद है कि उत्तरदाताओं - मैं कल को ठीक से असाइन करने का प्रबंधन नहीं किया।
djq

जवाबों:


6

यदि आप केवल बहुमत अभिविन्यास चाहते हैं, तो @Mapperz का उत्तर देखें।

अन्यथा, जैसा कि आप कहते हैं कि आप बहुभुज टू लाइन टूल का उपयोग करके बहुभुजों को लाइनों में विभाजित कर सकते हैं । यह एक बाएँ और दाएँ FID फ़ील्ड को जोड़ता है, जहाँ फ़ील्ड -1 है यदि कोई बाहरी बहुभुज नहीं है - तो इससे थोड़ी बहुत छेड़छाड़ हो सकती है, हालांकि यदि आपकी इमारतें आसन्न या ओवरलैप हैं।

वहां से आप अपनी लाइनों को हर शीर्ष पर विभाजित कर सकते हैं (हो सकता है कि भाजित कोगो लाइनों में उपयोग करें ), और फिर प्रत्येक पंक्ति में कोणों की गणना करें (संभवतः सीओजीओ विशेषताओं को अपडेट करके )।

मान लें कि आपके कोण क्षेत्र की उत्तर से गणना की गई है, तो वह पहलू सही होगा जहां बायां_फिड -1 है, और जब दायां_फीड -1 है तो पहलू प्राप्त करने के लिए केवल 180 ° जोड़ें। फिर मूल FID के आधार पर आप लंबाई आदि के आधार पर बहुमत पहलू को एकत्रित कर सकते हैं।

बहुभुज से लाइन टूल स्क्रिप्ट करने योग्य है, (जहाँ तक मुझे पता है) COGO टूल नहीं हैं, इसलिए आपको अपने साथ कुछ लेकर आना होगा।

उम्मीद है की यह मदद करेगा!


2
बेशर्म प्लग, और एक टिप्पणी: सबसे पहले, यदि आपके पास इंफो लाइसेंस नहीं है, तो कोड. google.com/p/boundary-generator पॉलीगॉन से लेकर लाइन टूल तक कमोबेश यही करता है। दूसरा - यह आपको समग्र बहुभुज के सामान्य अभिविन्यास के किसी प्रकार को देखने की तुलना में बहुत अधिक जानकारी देता है ... उदाहरण के लिए आप परिणामी तालिका का उपयोग अधिक सटीक सूरज जोखिम गणना करने के लिए कर सकते हैं, प्रत्येक व्यक्ति की दीवार के पहलू को ध्यान में रखते हुए। ।
दान एस।

5

बहुभुज मुख्य कोण (कार्टोग्राफी) की गणना करें

इनपुट बहुभुज सुविधाओं के प्रमुख कोणों की गणना करता है और फ़ीचर वर्ग में एक निर्दिष्ट फ़ील्ड में मान निर्दिष्ट करता है

http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//007000000028000000.htm


5

अभिविन्यास ढूँढना

एक स्क्रिप्ट के भीतर, बहुभुज रिंगों के एक सेट के रूप में उपलब्ध होगा - एक बाहरी रिंग और शून्य या अधिक आंतरिक रिंग्स - प्रत्येक अंगूठी के साथ एक चक्रीय रूप से आदेशित टुपल ऑफ वैक्टर (वी [0], वी 1 , ... , v [m-1], v [m] = v [०])। प्रत्येक वेक्टर एक शीर्ष के निर्देशांक देता है (कोई दो क्रमिक कोने संयोग के साथ)। इससे यह सीधा है, जैसा कि अन्य ने बताया है, सामान्य वैक्टर प्राप्त करने के लिए (यानी, किनारे के किनारों पर लंबवत वैक्टर):

n [i] = t (v [i + 1] - v [i])।

"T" ऑपरेशन एक वेक्टर को 90 डिग्री वामावर्त घुमाता है :

t (x, y)) = (y, -x)।

केवल इन सामान्य वैक्टरों की दिशाएं मायने रखती हैं, इसलिए उन्हें इकाई की लंबाई के लिए पुनर्विक्रय करें: एक वेक्टर (x, y) बचाव के लिए (x / s, y / s) जहां s = Sqrt (x ^ 2 + y ^ 2) (जो इसकी संबंधित धार की लंबाई है)। अब से, मान लेते हैं कि यह किया गया है। परिणामस्वरूप इकाई सामान्य वैक्टर के घटकों को लिखें

n [i] = (u [i], v [i]), i = ०, १, ..., m-१।

अंदर से बाहर भेदभाव

जैसा कि आप टिप्पणी करते हैं, यह एक दिशात्मक अस्पष्टता छोड़ देता है: क्या हमें n [i] या -n [i] का उपयोग करना चाहिए? कौन सा अंक बाहर की ओर है? यह सवाल पाने के लिए बराबर है डिग्री के गॉस मानचित्र । इसकी गणना करने के लिए, आपको उन कोणों को योग करने की आवश्यकता होती है जिनके द्वारा आप एक रिंग के चारों ओर मार्च करते हुए सामान्य दिशाएं बदलते हैं। क्योंकि सामान्य वैक्टर में इकाई लंबाई होती है, दो क्रमिक किनारों के बीच के कोण का कोसाइन होता है

कॉस (q_i) = n [i]। n [i + 1] = u [i] * u [i + 1] + v [i] * v [i + 1], i = 0, 1, ..., m-1।

(परिभाषित n [m] = n [0])

दो क्रमिक किनारों के बीच के कोण की साइन है

पाप (q_i) = n [i]। t (n [i + 1]) = u [i] * v [i + 1] - v [i] * u [i + 1]।

(ध्यान दें कि इन गणनाओं में अब तक केवल रकम, अंतर और उत्पादों की आवश्यकता होती है।) प्रिंसिपल उलटा स्पर्श समारोह (ATan2) को किसी भी ऐसे (कोसाइन, साइन) जोड़े पर लागू करने से कोण -1_80 और 180 डिग्री के बीच q_i हो जाता है। I = 0, 1, ..., n-1 के लिए इन कोणों को समेटना (फ्लोटिंग पॉइंट एरर तक) रिंग की कुल वक्रता, जो कि 360 डिग्री से अधिक होनी चाहिए; एक बंद नॉन-सेल्फ-इंटरसेक्टिंग रिंग के लिए यह wil +360 या -360 होना चाहिए। पहले मामले में डिग्री 1 है और दूसरे मामले में डिग्री -1 है। मानक बाहरी रूप से उन्मुख होते हैं जब बाहरी रिंग की डिग्री +1 होती है और आंतरिक रिंग की डिग्री -1 होती है। इस नियम के अनुसार, आवश्यक रूप से, अंगूठी द्वारा उन्हें फिर से उन्मुख करें। यही है, अगर किसी भी अंगूठी की डिग्री इसके विपरीत है, जिसकी आवश्यकता है, तो उस अंगूठी के सभी मानदंडों को नकार दें। अब आप अपनी दिमागी गणना के साथ आगे बढ़ सकते हैं।


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

इस उत्तर पर कुछ नोट्स: विशिष्ट जीआईएस एपीआई हमेशा एक बहुभुज के बाहर वामावर्त क्रम में, IIRC प्रस्तुत करेंगे, जिसका अर्थ है कि आपको ऐसा करने की ज़रूरत नहीं है कि अंदर से बाहर भेदभाव कर रहे हैं - बस बाहरी रिंगों पर दक्षिणावर्त घुमाव का उपयोग करें और छिद्रों पर प्रतिवाद। सेलेनियस के लिए एक स्पष्टीकरण: 'रिंग्स का सेट' बिट है कि कैसे सबसे APIs, जिसमें आर्कगिस का अजगर शामिल है, आपको बहुभुज को उसके घटक रेखा खंडों में विघटित करने की अनुमति देता है - एक अंगूठी उनमें से एक बंद वक्र है। चूंकि बहुभुज द्वीपों और छिद्रों का समर्थन कर सकते हैं, आपके पास कई छल्ले हो सकते हैं ...
दान एस।

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

.. ठीक है, मैं उस छोटे IIRC अस्वीकरण में रखा, शुक्र है। ;) यह सब नहीं है कि अक्सर मैं ESRI स्टैक पर अब ज्यामिति-स्तरीय सामान करता हूं।
दान एस।

@ दान एस - मैं अभी भी थोड़ा अस्पष्ट हूं कि यह कैसे अजगर में क्रमादेशित किया जा सकता है। क्या इसके लिए कोई दिशानिर्देश हैं?
djq

1

क्या यह मदद कर सकता है ?


यह एक दिलचस्प पेपर है जिसे आपने खोदा है। हालाँकि, वर्णित विधियों में से कोई भी सौर एक्सपोज़र गणना के लिए प्रासंगिक नहीं है (जब तक कि गणना एक क्रूड सन्निकटन के लिए अभिप्रेत नहीं है, जो कि यहाँ मामला प्रतीत नहीं होता है)।
whuber

1

/ * शायद इससे मदद मिलती है:

अजीमुथ - पी / 2 आरएचआर बहुभुज के पक्षों का बाहरी रूप से सामना करना पड़ रहा है:

यहाँ एक PostGIS उदाहरण है, आप अंत में स्टेटमेंट का उपयोग करके bldg117862 टेबल बना सकते हैं। SRID EPSG 2271 (PA StatePlane North Feet) है और ज्यामिति एक मल्टीपोलीगॉन है। ArcGIS 10 में कल्पना करने के लिए, तालिका bldg117862 बनाने के बाद पोस्टगिस के लिए क्वेरी लेयर कनेक्शन में क्वेरी / उपश्रेणियों को चिपकाएँ। * /

- === QUERY का ===

/ * बाहरी क्वेरी बाहरी जावक orthogonals के उन्मुखीकरण प्रदान करता है, और पक्षों के मध्य बिंदु से पक्षों के रूप में समान लंबाई के जावक orthogonal लाइनों बनाता है।

प्रमुख सामना दिशा (ओं) की लंबाई का योग होगा, उन्मुखीकरण द्वारा समूहीकृत, अवरोही क्रम में * /

अभिविन्यास के रूप में साइड_आईडी, लंबाई, डिग्री (ऑर्थोज़) के रूप में चयन करें। st_makeline (st_setsrid (st_line_interpolate_point (geom, 5। 22)), 2271), stsetsrid (st_makepoint (st_line_interpolate_point) (geom। 5)। orthoaz))), st_y (st_line_interpolate_point (geom, .5)) + (लंबाई * (cos (orthoaz)))), 2271)) से geom के रूप में

- बाहरी बाहरी उपकुंजी प्रत्येक बिंदुओं के लिए बाहरी बिंदुओं की ओर की ओर जोड़े से बिंदुओं की जोड़ी बनाती है, प्रत्येक खंड के लिए ऑर्थमथ (ऑर्थोज़) की गणना करती है

(SELECT bldg2009gid, line_id, st_length (st_makeline (startpoint, endpoint)) :: संख्यात्मक (10,2) लंबाई के रूप में, azimuth (startpoint, समापन बिंदु), azuth (startpoint, समापन बिंदु) - pi () / 2 orthoaz, st_makeline के रूप में startpoint, एंडपॉइंट) से जियोम के रूप में

/ * अंतरतम सबक्वेरी - जेनरेट_सेरीज़ () का उपयोग कर पॉलीगोंस को पक्षों के स्टार्टपॉइंट / एंडपॉइंट पॉइंट जोड़ियों में विघटित करना - नोट 1 - सभी बहुभुज पक्षों के सामान्य अभिविन्यास को सुनिश्चित करने के लिए राइट-हैंड-नियम नोट 2 - उदाहरण बहुभुज का उपयोग करता है, बहुभुज के लिए ज्यामिति () हटाया जा सकता है */

(SELECT generate_series (1, npoint (externalring (geometryn (st_forceRHR (geom), 1))) - 1) line_id के रूप में, gid को bldg2009gid, pointn (externalring (geometryn (st_forceRHR (geom), 1)), Gener_series (1) के रूप में चुनें। npoint (एक्सट्रीमिंग (ज्यामिति (st_forceRHR (geom)), 1))) - 1)) startpoint, pointn (externalring (ज्यामिति (st_forceRHR (geom)), 1)) के रूप में, generate_series (2, npoints (ज्यामिति (st_forceRHR)) ), 1))))) t1 से b1g के रूप में) bldg117862 से समापन बिंदु के रूप में)

- === END of QUERY ===

- bldg117862 टेबल स्टेटमेंट बनाएँ / डालें

STANDARD_CONFORMING_STRINGS को सेट करें; Select DropGeometryColumn ('', 'bldg117862', 'geom'); DROP टेबल "bldg117862"; शुरू; क्रिएट टेबल "bldg117862" (gid serial PRIMARY KEY, "motherpin" varchar (14), "taxpin" varchar (14), "status" varchar (15), "क्षेत्र" संख्यात्मक, "prev_area" सांख्यिक, "pct_change" सांख्यिक। "चित्र" varchar (133), "mappage" varchar (6), "sref_gid" int4, "e_address" varchar (19), "a_address" varchar (19), "perim" संख्यात्मक, "card" int4, "a_addnum" int4, "e_street" varchar (50), "a_street" varchar (50), "e_hsnum" varchar (10)); Add AddeeometryColumn ('', 'bldg117862', 'geom', '2271', 'MULTIPOLYGON', 2); 0106000020DF080000010000000103000020DF080000010000000B0000008C721D6C98AC34415E2C5BB9D3E32541AE56DE17BEAC34410613E5A0A0E325411AB6C794AEAC3441BA392FE372E32541C89C38429DAC3441643857628AE325418C299A9095AC3441F66C29B573E32541983F02087EAC34413080AA9F93E325419BAC3C0A86AC3441AC1F3B3DABE32541803A40B974AC3441E8CF3DB9C2E325413E3758C186AC3441D0AAB0E7F7E325410AAAA5429BAC3441BA971217DCE325418C721D6C98AC34415E2C5BB9D3E32541 '); क्रिएट INDEX "bldg117862_geom_gist" पर "bldg117862" जिस्ट ("जियोम" gist_geometry_ops) का उपयोग कर; समाप्त;


0

यह मानते हुए कि लाइन सेगमेंट का ओरिएंटेशन एक बहुभुज में स्थिर है, आप प्रत्येक लाइन सेगमेंट के वेक्टर लंब के असर (हेडिंग) की गणना कर सकते हैं। मेरे पास अभी समय नहीं है कि कोड को निकालूं लेकिन अगर आपको गणित की आवश्यकता है, तो इसे आसानी से आपूर्ति की जा सकती है :-)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.