आर्कजीआईएस टूल्स के माध्यम से एसक्यूएल की भाषा किस हद तक सुलभ है?


10

यह सवाल सिर्फ इतना बेमानी लगता है ...
किसी भी दर पर, मुझे आर्कगिस में एसक्यूएल के उपयोग का पता लगाने के लिए कहा गया है। हम सभी सर्वर-साइड स्टोरेज और डीबी प्रबंधन / बड़े पैमाने पर संपादन के लिए एक एसडीई डीबी का उपयोग करते हैं। हालाँकि, मैं गहन रूप से यह बताने का प्रयास कर रहा हूं कि आर्कजीआईएस के टूल में SQL कितना एकीकृत है। आर्कजीआईएस 10 की एसक्यूएल क्वेरी संदर्भ गाइड में एक नोट है, जो स्पष्ट रूप से बताता है कि फील्ड कैलकुलेटर टूल का उपयोग करते समय एसक्यूएल सिंटैक्स काम नहीं करता है। मुझे यह बहुत निराशाजनक लगता है क्योंकि यह क्षेत्र के मूल्यों की गणना करते समय डेटाबेस से सीधे जानकारी को खींचने और सक्षम करने के लिए बहुत उपयोगी प्रतीत होता है।

आर्कजीआईएस में एसक्यूएल का उपयोग करने का प्रयास करते समय सबसे बड़ी सीमाएं और नुकसान क्या हो सकते हैं? SQL के साथ एकीकृत होने पर कौन से उपकरण सबसे अच्छी कार्यक्षमता देखते हैं?

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

या यह है?


किसी भी सारणीबद्ध संस्करण हैं?
माइकल टॉड

संस्करणीकृत? मुझे नहीं लगता कि मैं उस शब्द से परिचित हूं।
नाथानुस

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

जवाबों:


9

यदि आप Python का उपयोग करना चाहते हैं तो ArcSDESQLExecute कमांड पर एक नज़र डालें । यह आपको मनमाने ढंग से SQL निष्पादित करने देगा लेकिन इसे SDE के माध्यम से जोड़ा जाना चाहिए। यदि क्वेरी का परिणाम पंक्तियों का एक सेट है, तो विशेषताओं को सूचियों की पायथन सूची के रूप में वापस कर दिया जाएगा। यदि SQL सफलतापूर्वक निष्पादित हो जाता है या नहीं तो यह सही है कि यह वापस आ जाएगा। इसे भी देखें: एक ArcSDE कनेक्शन का उपयोग करके SQL को निष्पादित करना


मैं निश्चित रूप से ऐसा करूँगा! ऐसा लगता है जैसे मैं इस संदर्भ में क्या देख रहा था। बहुत बहुत धन्यवाद।
नाथानुस

5

यदि आप कस्टम आर्कोबजेक्ट्स लिख रहे हैं, तो आप ExecuteSQL पद्धति का उपयोग करके SDE कार्यक्षेत्र के खिलाफ मनमाने ढंग से SQL निष्पादित कर सकते हैं । यह विधि उन प्रश्नों तक सीमित है, जो परिणाम सेट नहीं लौटाते हैं, जैसे INSERT, UPDATE, या कुछ संग्रहीत कार्यविधियाँ।

यदि आप ArcMap UI के माध्यम से काम कर रहे हैं, तो आपके विकल्प थोड़े अधिक सीमित हैं। गणना फ़ील्ड के माध्यम से आप SQL का उपयोग क्यों नहीं कर सकते इसका कारण यह है कि अभिव्यक्ति वास्तव में VBScript और / या पायथन है। आप मनमाने ढंग से SQL अभिव्यक्ति को निष्पादित करने और परिणामी कर्सर से मान खींचने के लिए VBScript या पायथन का उपयोग कर सकते हैं, लेकिन मैं इसकी सिफारिश नहीं करूंगा।

वैकल्पिक रूप से, आप रेगन के उत्तर का उपयोग कर सकते हैं और क्वेरी लेयर बना सकते हैं । केवल-पढ़ने के लिए डेटा, यह आपका सबसे अच्छा तरीका है। यदि आपको डेटा अपडेट करने की आवश्यकता है, तो यह थोड़ा अधिक जटिल है। आपको अपने "नए" मानों के साथ एक क्वेरी लेयर बनाने की आवश्यकता होगी, अपनी मौजूदा तालिका के विरुद्ध एक जॉइन करें और फिर गणना फ़ील्ड का उपयोग करें। यह जटिल अपडेट करने के लिए ExecuteSQL के साथ जोड़ा जा सकता है और फिर परिणाम (क्लूनी के प्रकार) को देख सकता है।

आपका अंतिम विकल्प आर्कसीडीई तालिकाओं के खिलाफ SQL को सीधे निष्पादित करना है।


1
आपका अंतिम बिंदु (सीधे तालिकाओं के खिलाफ एसक्यूएल निष्पादित करना) यही कारण है कि मैंने अपना संस्करण सवाल पूछा था। डेटाबेस स्तर पर एक SQL क्वेरी केवल बेस लेयर से खींचती है (जब तक कि कोई एक मल्टीविवर्टेड व्यू सेट नहीं करता है), ताकि लेयर के वर्जन होने पर यह काम न करे।
माइकल टॉड

मैं जो काम कर रहा हूं, वह ज्यादातर पायथन में है, लेकिन यह अधिक से अधिक लगता है कि यूआई में वास्तविक कार्यक्षमता आर्कोबजेक्ट्स पर निर्भर करती है।
नाथानुस

सब कुछ आंतरिक रूप से आर्कऑब्जेक्ट पर बनाया गया है, जिसमें अजगर कार्यक्षमता भी शामिल है।
जेम्स स्कैच

यदि Python में ArcSDESQLExecute परिणाम लौटा सकता है, तो IWorkspace.ExecuteSQL के माध्यम से इसे कैसे प्राप्त किया जा सकता है?
पेट्र क्रेब्स

@ आप सीधे नहीं कर सकते ... मैंने अपना उत्तर अपडेट कर दिया है।
जेम्स स्कैच


1

RDBMS आपके द्वारा उपयोग किए जा रहे हैं, इसके आधार पर, आप आर्क लाइब्रेरी या आर्कपी के बाहर SQL लाइब्रेरी का लाभ उठा सकते हैं, जब तक कि आप फीचर डेटा वापस पाने पर निर्भर नहीं होते हैं। SQL सर्वर डेटाबेस में मेरे द्वारा दैनिक आधार पर उपयोग किए जाने वाले कई प्रश्न प्रकृति में स्थानिक नहीं हैं, इसलिए मैं .NET के अंदर System.Data कक्षाओं का उपयोग करूंगा, या पायथन अनुप्रयोगों के अंदर जिमस पाइकल लाइब्रेरी। यदि आपको स्थानिक डेटा के उपयोग की आवश्यकता होती है, तो क्वेरी लेयर्स आपकी सबसे अच्छी शर्त है। क्वेरी लेयर्स के साथ केवल कैविएट हैं वे केवल स्पैटियल डेटा प्रकारों का उपयोग करके संग्रहीत डेटा के साथ काम करते हैं (मानक SDEBINT प्रकार नहीं)।


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

यदि आपको ज्यामिति प्रकारों को वापस करने की आवश्यकता है, तो मैं मानक आर्कोबजेक्ट्स / आर्कपी डेटा एक्सेस का उपयोग करूंगा। यदि आप सभी कर रहे हैं "सारणीबद्ध" डेटा (कोई स्थानिक प्रकार शामिल है) तक पहुँच रहा है, तो बस नियमित SqlConnections (SQL सर्वर के लिए - आपके कनेक्शन प्रकार भिन्न हो सकते हैं) का उपयोग कर डेटाबेस कॉल करें। परिणाम आईसीसोर से बाहर निकलने की तुलना में अधिक लचीले हैं। यदि मैं आपके प्रश्न को समझता हूं, और आप क्षेत्र कैलकुलेटर का उपयोग करने के लिए सीमित हैं, तो आप कच्चे एसक्यूएल का उपयोग नहीं कर पाएंगे।
सेजब्रशगिस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.