क्या QGIS में ID कॉलम के लिए auto_increment का एक तरीका है


22

मैं एक काल्पनिक नक्शा बना रहा हूं और इसलिए मुझे बहुत सारे बिंदुओं, रेखाओं और सुनिश्चित बहुभुज बनाने की आवश्यकता है। बाद में मैं अपने डेटा को जियोजोन के रूप में निर्यात करता हूं। लेकिन इससे पहले कि मुझे रास्ते में जाना है और हर तत्व को एक अद्वितीय आईडी देनी है।

मुझे एक विशेष छंटाई की आवश्यकता नहीं है, जैसे कि सबसे बड़ी बहुभुज को सबसे छोटी आईडी मिलती है। मैं बस जरूरत है सभी बहुभुज के साथ एक आईडी , अंत में बिना कर यह मैन्युअल रूप से है कि मैं अब क्या करना है।

बहुत अच्छा होगा यदि कोई जानता है कि यह कैसे करना है।


क्या आप शेपफाइल्स का उपयोग कर रहे हैं? क्या आईडी को हर निर्यात के बाद समान होना चाहिए, या क्या आप प्रत्येक संपादन सत्र के बाद आईडी फ़ील्ड को पॉप्युलेट कर सकते हैं?
DPSSpatial

आप एक स्क्रिप्ट से बहुभुज कैसे बना रहे हैं, क्यूजीआईएस डेस्कटॉप में डिजिटाइज़िंग, या शेपफाइल आदि से कॉपी करना?
भूमिहारियन

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

जवाबों:


26

क्षेत्र कैलकुलेटर का उपयोग करने का तरीका है:

में कोई आईडी नहीं दी गई थी

  1. बिना किसी आईडी में प्रवेश किए हर सुविधाओं को डिजिटाइज़ करें।
  2. निर्यात से पहले, क्षेत्र कैलकुलेटर का उपयोग करते हुए, अभिव्यक्ति के साथ अद्वितीय Ids को अपडेट करें, '$ Id'।

कोई आईडी नहीं दी गई

कुछ आईडी पहले से ही दी गई हैं

  1. यदि आपके पास पहले से आईडी है तो आप '- $ आईडी' का उपयोग कर सकते हैं। सुनिश्चित करें कि आप केवल नई सुविधाओं का चयन करते हैं, इसका मतलब है कि आईडी पंक्ति में 'NULL' हैं। बस कॉलम का आदेश देकर ऐसा करें।
  2. अब चित्रों से चरण करें:

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


हाँ, awsome। सुपर आसान और ठीक से काम कर रहा है। धन्यवाद दोस्त। Btw: शायद आप जानते हैं कि यह भी कैसे करना है कि पहले से ही कुछ मौजूदा आईडी है? अगर मैं ऐसा करता हूं तो मुझे -2 -3 और इतने पर मिलता है
kwoxer

एक समाधान मिला और इसे अपनी पोस्ट में जोड़ा। एक बार फिर धन्यवाद।
kwoxer

6

हलिलुय! या यूरेका। जो कुछ भी। यह संभव है। एक आकृति के साथ।

  1. यदि पहले से कोई नहीं है, तो फ़ील्‍ड आईडी सम्‍मिलित करने के लिए एक फ़ील्ड जोड़ें, "FID", प्रकार की पूर्ण संख्या (पूर्णांक) कहें ।
  2. ओपन परत गुण (परत पर राइट क्लिक करें और चुनें गुण ... या डबल क्लिक करें परत), क्लिक पर पर्चा गुण टैब और फिर तहत जनरल अचिह्नित संपादन योग्य और तहत चूक क्षेत्र में डिफ़ॉल्ट मूल्य प्रकार maximum("FID") + 1

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

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

परत के गुण


ध्यान दें कि इसके लिए काम करने के लिए, आपको कम से कम एक फीचर बनाना होगा और उसके FID में टाइप करना होगा फिर विशेषता फॉर्म को डिफ़ॉल्ट मान में बदलना होगा। अन्यथा, आप एक पूर्ण FID के साथ समाप्त होते हैं।
Techie_Gus

5

मैं विनयन पद और संक्षिप्त करने के लिए उल्लेख जोड़ना चाहते हैं ROWNUM समारोह, के रूप में यह बहुत समान है और कुछ मामलों में एक छोटे से अधिक सुविधाजनक हो सकता है।

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

आईडी फीचर आईडी लौटाता है, जिसका अर्थ है कि यह हमेशा शून्य पर शुरू होता है
rownum पंक्ति की संख्या लौटाता है, जिसका अर्थ है कि यह एक पर शुरू होता है।

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

इसलिए, मूल रूप से, यदि आप चाहते हैं कि ऑटो-इंक्रीमेंट 0 पर शुरू हो तो $ id के लिए जाना चाहिए , और यदि आप इसे 1 पर शुरू करना चाहते हैं तो $ rownum के लिए जाएं


कोशिश की और वास्तव में एक अच्छा समाधान भी है। लेकिन यहां इस समाधान के साथ यदि आपके पास पहले से ही कुछ आईडी हैं और उन्हें पंक्तिबद्ध रखना चाहते हैं तो यह अच्छा नहीं है। वह फ़ंक्शन हमेशा 1 के साथ शुरू होता है। ऊपर का रास्ता अधिक बुद्धिमान तरीके से गिन रहा है, भले ही इसे स्थापित करना कठिन हो। तो विकल्प के लिए धन्यवाद, लेकिन अब के लिए आईडी समारोह मेरा पसंदीदा समाधान है =)
kwoxer

4

यह विषय यहां आया है: क्यूजीआईएस में ऑटो इंक्रीमेंट प्राइमरी की के साथ शेपफाइल बनाएं

मेरे सुझाव होंगे:

1) SQLITE / स्पैटियललाइट डेटाबेस इंटीग्रेटर कुंजी के लिए सेट फ़ील्ड पर ऑटो-इंक्रीमेंटिंग का समर्थन करते हैं:

एक INSERT पर, यदि ROWID या INTEGER PRIMARY KEY कॉलम को स्पष्ट रूप से मान नहीं दिया जाता है, तो यह स्वचालित रूप से अप्रयुक्त पूर्णांक के साथ भर जाएगा, आमतौर पर वर्तमान में उपयोग किए जाने वाले सबसे बड़े ROWID से एक। यह सच है कि AUTOINCREMENT कीवर्ड का उपयोग किया गया है या नहीं।

हर बार जब आप पॉलीगॉन संपादित करते हैं / बनाते हैं, तो आप उनकी विशेषताओं को भर सकते हैं, और SQLITE उस क्षेत्र में एक वृद्धिशील अद्वितीय मूल्य देगा, जिसे आपने INTEGER PRIMARY KEY प्रकार पर सेट किया है।

जब आप GEOJSON को निर्यात करने के लिए तैयार हों, तो आप अपने UNIQUE ID के साथ सेट हो जाएं।

2) अगर शेपफाइल्स का उपयोग कर रहे हैं, तो INTEGER प्रकार का एक OBJECTID फ़ील्ड बनाएं और उस क्षेत्र को पॉप्युलेट करने के लिए एक फ़ील्ड कैलकुलेटर एक्सप्रेशन का उपयोग करें, जो हर बार आपके द्वारा पॉलीगॉन बनाने / संपादित करने और उन्हें निर्यात करने की आवश्यकता होती है। आप मूल आईडी को एक बार एक बहुभुज खो देंगे, लेकिन आप इसका उपयोग करने का एकमात्र तरीका है .SHP। (मुझे क्षेत्र कैलकुलेटर की अभिव्यक्ति ढूंढनी होगी)।

PostGIS एक और डेटा स्रोत है जिसे आप एक्सप्लोर करना चाहते हैं, हालाँकि SQLITE की तुलना में अधिक भारी लिफ्ट, आपको आगे बढ़ने पर ऐसी प्रणाली में मान मिल सकता है ...


समझाने के लिए धन्यवाद। लेकिन मुझे नहीं लगता कि यह उपकरण में सीधे एक auto_increment विकल्प के बजाय कोई अच्छा समाधान होगा। मेरे पास पहले से ही बहुत सारे डेटा प्रारूप हैं और अभी तक एक और उपकरण नहीं चाहते हैं। हो सकता है कि मुझे इसके लिए एक एडऑन लिखना चाहिए जब मेरे पास कुछ समय हो ...
kwoxer

.SHP को छोड़ना आसान हो सकता है! कौन जानता है कि यह आपको किस नए उपक्रम में ले जाएगा ...
डीपीएससपिटल

2

पुरानी पोस्ट लेकिन किसी और के लिए एक त्वरित समाधान की तलाश में खदान $ ID + 1 के साथ एक क्षेत्र बनाना था और यह स्वचालित रूप से 1 के साथ शुरू होगा!


2

QGIS 3 के लिए अपडेट

मुझे पता है कि मुझे इसमें काफी देरी है लेकिन हमेशा कोई भी अपडेट देने के लिए अच्छा है:

QGIS 3 में अब एक देशी उपकरण है जिसका उपयोग इस सटीक कार्य को करने के लिए किया जा सकता है और इसे "ऑटोनोक्रिमेंटल फील्ड जोड़ें"

फ़ील्ड कैलकुलेटर में किसी अभिव्यक्ति का उपयोग करने या कोई कोडिंग करने की आवश्यकता नहीं है, लेकिन फिर भी ये सभी अभी भी बहुत उपयोगी हैं और जानना अच्छा है।

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


1

ऐसा करने का सबसे आसान तरीका शायद अजगर स्क्रिप्ट के साथ होगा या शायद यह क्षेत्र कैलकुलेटर के साथ संभव है। क्षमा करें, मेरे पास आपके लिए एक नहीं है, शायद कोई और होगा। इस बीच, मैं इसके लिए एक अजगर स्क्रिप्ट की खोज करूँगा। मैंने आर्कगिस के लिए इसके बारे में बहुत कुछ देखा है, लेकिन मुझे यकीन है कि क्यूजीआईएस के लिए कुछ है।


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

1

यदि आपको मानवीय रूप से सुपाच्य कुछ की आवश्यकता नहीं है, तो अब एक आसान तय है: क्षेत्र के प्रचार में, "UUID जेनरेटर" का चयन करें, और सब कुछ खाली छोड़ दें।

यह स्वचालित रूप से क्षेत्र में एक यूयूआईडी बनाएगा। एक साधारण संख्या ($ id या $ rownum के अनुसार) के रूप में अनुकूल नहीं है, लेकिन शुरू से ही UUID को सही बनाता है, इसलिए कोई क्रमिक कदम नहीं।यहाँ छवि विवरण दर्ज करें


0

मैं जोड़ना चाहूंगा कि जब आप पोस्टग्रेसीक्यूएल डेटाबेस लेयर्स का उपयोग कर रहे हैं तो यह काम नहीं करता है। $ ID और $ rownum सभी 0. 0. PostgreSQL 9.6 QGIS 2.18.12 लौटाते हैं


0

इन समाधानों ने अब मेरे लिए QGIS 2.01 Dufour में काम नहीं किया। $idअभिव्यक्ति इनपुट क्षेत्र में 'आईडी' नाम के एक नए या मौजूदा क्षेत्र पर टाइप करने से मुझे एक त्रुटि मिली "अभिव्यक्ति अमान्य है"

कार्य टाइप करने के लिए क्या किया गया था $rownumऔर फिर "ओके" पर क्लिक करें

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


0

आप पहले कॉलम (आईडी) को हटा सकते हैं और नया "वर्चुअल फील्ड के रूप में" बना सकते हैं यहाँ छवि विवरण दर्ज करें यहाँ छवि विवरण दर्ज करें

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