QGIS के साथ स्वचालित तरीके से विशेषताएँ उत्पन्न करना?


11

जब मैं नई सुविधाएँ बनाता हूं, तो मैं आईडी को ऑटोजेनरेट करना चाहता हूं। इसलिए हर बार जब मैं एक नया बिंदु बनाता हूं, तो इसकी आईडी निम्नलिखित की तरह 1 बढ़ जाएगी:

Feature 1: id 1
Feature 2: id 2
Feature 3: id 3

मैं इस पर हमला कैसे कर सकता हूं?

जवाबों:


8

यदि आप अपनी परत को राइट-क्लिक करते हैं और Properties > Fieldsफिर क्लिक करें Text Edit, तो आप डिफ़ॉल्ट मान (या तो मान में टाइप करके या एक अभिव्यक्ति का उपयोग करके) सेट कर सकते हैं जो स्वचालित रूप से विशेषता तालिका में दिखाई देगा।

दुर्भाग्य से, एक अभिव्यक्ति का उपयोग $rownumकरना ( जैसे कि आपको अपनी सुविधाओं के लिए अद्वितीय आईडी प्राप्त करना चाहिए) काम नहीं करता है (मेरा अनुमान है क्योंकि सुविधा को पहले प्रतिबद्ध करना है?)। लेकिन हम एक ऐसा फंक्शन बना सकते हैं, जिसमें किए गए फीचर्स की संख्या गिना जाए और 1. आप फंक्शन एडिटर तक पहुंच सकें, जैसा कि इमेज में दिखाया गया है:

समारोह संपादक

फिर फ़ंक्शन एडिटर में, एक नई फ़ाइल बनाएं या किसी मौजूदा को संपादित करें और निम्नलिखित कोड का उपयोग करें:

from qgis.core import *
from qgis.gui import *

@qgsfunction(args='auto', group='Custom')
def update(feature, parent):
    layer = qgis.utils.iface.activeLayer()
    x = layer.featureCount()
    return x + 1

लोड करें पर क्लिक करें और उसके बाद अभिव्यक्ति टैब पर जाएं और एक्सप्रेशन डालें:

update()

फिर ठीक पर क्लिक करें और आपको एक पूर्वावलोकन मूल्य देखना चाहिए:

पूर्वावलोकन

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



3

मुझे लगता है कि एक नई सुविधा बनाते समय आप डिफ़ॉल्ट मान सेट नहीं कर सकते हैं, लेकिन आप निम्नलिखित कार्य के लिए प्रयास कर सकते हैं:

  • अपनी विशेषताएँ बनाते समय विशेषता तालिका पर जाएँ
  • फ़ील्ड कैलकुलेटर पर जाएं और एक नया कॉलम बनाएं idजिसमें Int लिखा हो
  • मान डालने के रूप में @row_numberजो पंक्ति संख्या के अनुसार अद्वितीय घाट निकलेगा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.