आर्कजी का उपयोग करके आर्कगिस डेस्कटॉप में बिंदु द्वारा आर्कएसई बहुभुज का चयन?


15

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

फिलहाल मैं इस बिंदु पर एक बिंदु फीचरक्लास बनाकर और उस पर एक SelectLayerByLocation का प्रदर्शन करके इसे हल करता हूं। हालाँकि, जब बहुभुज फीचर क्लास ओरेकल में होता है (आर्कएसडीई 9. एक्स के माध्यम से एक्सेस किया जाता है) और इसमें 3.5 मिलियन पॉलीगॉन होते हैं, तो चयन करने के लिए लिया गया समय 5 मिनट से अधिक हो सकता है, जब मुझे लगता है कि एक या दो सेकंड (कम कोड के साथ) होगा। अधिक उपयुक्त। भौगोलिक क्षेत्र में प्रवेश को प्रतिबंधित करने के लिए फीचर वर्ग में एक स्थानिक सूचकांक है और मैंने arcpy.env.extent (जो SelectLayerByLocation को अनदेखा करता है) का उपयोग करने की कोशिश की है लेकिन प्रदर्शन बहुत खराब बना हुआ है।

वहाँ ArcGIS डेस्कटॉप 10 और ArcPy का उपयोग कर यह करने के लिए एक तेज तरीका है?


अब इस से अधिक करने के लिए एक समाधान है forums.arcgis.com/threads/... और मैं आज यहां बाद में उस जानकारी को संपादित करेगा - बहुत धन्यवाद जेसन Scheirer और क्रिस स्नाइडर के लिए जाने
PolyGeo

2
बस इस पर ध्यान दें, आप उपकरण के संदर्भ पृष्ठ के नीचे एक उपकरण द्वारा सम्मानित वातावरण पा सकते हैं। SelectByLocation केवल वर्तमान कार्यक्षेत्र और आउटपुट समन्वय प्रणाली का सम्मान करते हैं। help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//…
blord-castillo

जवाबों:


9

इसका एक अन्य तरीका स्पैटियल जॉइन टूल का उपयोग करना होगा। अपनी इनपुट सुविधा परत के रूप में ऊपर और बहुभुज परत को अपनी पहचान सुविधाओं के रूप में बिंदु का उपयोग करें।
SelectLayerByLocation के विपरीत, SpatialJoin करता है हद तक पर्यावरण का सम्मान है।

targetlayer = layername
joinlayer=arcpy.PointGeometry(arcpy.Point(x, y))
fieldmappings = arcpy.FieldMappings()
fieldmappings.addTable(targetlayer)
arcpy.SpatialJoin_analysis(targetlayer, joinlayer, outputlayer, "JOIN_ONE_TO_MANY", "KEEP_COMMON", fieldmappings)

JOIN_ONE_TO_MANY काउंटर-सहज ज्ञान युक्त लग सकता है, लेकिन चूंकि आपके पास केवल एक जुड़ने की सुविधा है, इसलिए इस विकल्प का मुख्य कार्य एकत्रीकरण मर्ज नियमों को बंद करना है। KEEP_COMMON यह सुनिश्चित करेगा कि आपका आउटपुट केवल उस बहुभुज तक ही सीमित है जो आपकी बात को प्रतिपादित करता है। Fieldmappings केवल बहुभुज परत के आकार और विशेषताओं के लिए आउटपुट विशेषताओं को प्रतिबंधित करेगा; डिफ़ॉल्ट में बिंदु परत के गुण भी शामिल होंगे।

शेष चूक ठीक काम करेंगी, इसलिए आप शेष तर्क छोड़ सकते हैं।


इस कोड के लिए बहुत धन्यवाद, जिसमें कुछ तकनीकें शामिल थीं जिन्हें मैंने कोशिश नहीं की थी। मैंने पहले SpatialJoin (ताकि मैं जियोप्रोसेसिंग वातावरण का सम्मान कर सकता था) की कोशिश की, लेकिन उस परीक्षण के साथ-साथ अभी-अभी आपकी तकनीक का परीक्षण भी किया, फिर भी रास्ते के लिए 10-12 सेकंड की तुलना में 4-5 मिनट की प्रतिक्रिया समय के साथ मुझे छोड़ दिया क्रिस स्नाइडर ने मुझे आगे बढ़ाया।
PolyGeo

क्या आपने SpatialJoin के साथ भी क्रिस स्नाइडर की तकनीक को आजमाया है? मुझे लगता है कि मुख्य कारण बफर तकनीक इतनी तेज है कि यह बहुभुज वर्ग की मेमोरी कॉपी का उपयोग करता है। I -think- स्थान के अनुसार चयन स्थानिक जुड़ने की तुलना में तेज़ होना चाहिए, लेकिन मुझे यकीन नहीं है।
ब्लॉर्ड-कैस्टिलो

अंत में in_memory बिट का उपयोग नहीं किया गया। यह पहले से ही इतना फैला हुआ था कि मैंने इसे रिजर्व में रखा था। मुझे लगता है कि प्रमुख चीज़ एक / कुछ बहुभुज (3.5 मिलियन से) प्राप्त करने के लिए सीमा तय कर रही थी, कि मुझे एक्स, वाई के खिलाफ जांच करने की आवश्यकता थी, जल्दी से एक स्थानीय फ़ाइल जियोडेटाबेस में कॉपी किया गया। इसलिए SpatialJoin से पहले उस हिस्से को करने से मुझे लगता है कि समान / समान प्रदर्शन में सुधार होगा।
PolyGeo

1

मुझे कुछ एहसास हुआ ...

यदि आप इसका उपयोग जियोप्रोसेसिंग सेवा को लागू करने के लिए कर रहे हैं, तो आप इसके बजाय अपनी बहुभुज परत के साथ एक फ़ीचर सेवा भी लागू कर सकते हैं और सुविधा सेवा पर क्वेरी ऑपरेशन का उपयोग कर सकते हैं।

आप कर सकते हैं फ़ीचर सर्विस क्वेरी ऑपरेशन के साथ एक साधारण XY स्थान का उपयोग हैं, साथ ही आकृति सहित आउटपुट विशेषताओं को नियंत्रित कर सकते हैं।

आपके पास इस बात पर प्रतिबंध हो सकता है कि आप बहुभुज सुविधा वर्ग को कितना उजागर कर सकते हैं, लेकिन यदि आप पहले से ही इसे जियोप्रोसेसिंग सेवा के लिए सुलभ बना रहे हैं, तो आपको एक सुविधा सेवा भी बनाने में सक्षम होना चाहिए।


यह अन्य आवश्यकताओं को पूरा करने के लिए एक उपयोगी विचार है लेकिन, इस मामले में, क्लाइंट एप्लिकेशन बहुत सरल है, और मेरे नियंत्रण से बाहर है, इसलिए मैं केवल एक जियोप्रोसेसिंग सेवा प्रदान करने में सक्षम हूं।
PolyGeo

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

1

यह जवाब पुराने आर्कगिस चर्चा मंच से आया है

कुछ और संक्षिप्त कोड के लिए धन्यवाद जेसन शहीर:

SelectLayerByLocation(in_layer=arcpy.PointGeometry(arcpy.Point(x, y)), select_features="mylayer") 

और विशेष रूप से क्रिस स्नाइडर को एक प्रदर्शन टिप के लिए:

चारों ओर तेजी से काम हो सकता है कि आप अपनी बात को थोड़ा सा बढ़ाएं और फिर बफर सीमा का उपयोग विश्लेषण सीमा के रूप में अपने SDE डेटा की in_memory कॉपी (CopyFeatures टूल) बनाने के लिए करें, और फिर छोटे और स्थानीय in_memory डेटासेट पर SelectByLocation करें। इस तरह से आप SelectByLocation टूल को विश्लेषण सीमा पर्यावरण का सम्मान करने के लिए तैयार कर रहे हैं, जो यह सामान्य रूप से नहीं करेगा। BTW: विश्लेषण सीमा के साथ ओवरलैप करने वाली किसी भी विशेषता को CopyFeatures टूल के साथ कॉपी किया जाएगा। मुझे यकीन है कि SelectByLocation टूल और कर्सर के तरीकों ने विश्लेषण सीमा को सम्मानित किया है ...

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