डुप्लिकेट बनाए बिना QGIS में एक्सेल से लेकर विशेषता तालिका में डेटा शामिल करना?


15

मेरे पास QGIS में दो खाली क्षेत्रों के साथ एक विशेषता तालिका है।

उदाहरण 1

मैं QGIS में अपने खाली क्षेत्रों को भरने के लिए एक एक्सेल डेटाबेस आयात करना चाहता हूं। मेरी एक्सेल फ़ाइल मेरी QGIS विशेषता तालिका के कॉलम से मेल खाती है।

Example_2

मैं अपने एक्सेल (.CSV) को अपने शेपफाइल में ठीक से शामिल करने में सक्षम हूं। हालाँकि, प्रक्रिया, जैसा मैं चाहता हूँ, खाली फ़ील्ड भरने के बजाय डुप्लिकेट बनाया। «टेबल मैनेजर» की मदद से मैं स्थिति को सही करने में सक्षम हूं, लेकिन इसके लिए बहुत समय की आवश्यकता होती है। मैं अपने एक्सेल डेटा में शामिल होने के लिए अधिक कुशल तरीके की तलाश कर रहा हूं।

Example_3

डुप्लीकेट बनाए बिना मैं अपनी एक्सेल फाइल को अपनी विशेषता तालिका में कैसे शामिल कर सकता हूं?


3
इस ट्यूटोरियल पर एक नज़र डालें: प्रदर्शन तालिका में सम्मिलित हों
अरोमाएर

जवाबों:


13

मैं जीवन को आसान बनाने के लिए निम्नलिखित बातें करूंगा:

ऐसा करने से पहले, अपने शेपफाइल का बैकअप बना लें।

  1. अपने शेपफाइल में, लेयर प्रॉपर्टीज / फील्ड में जाएं और एडिट मोड को ऑन करें।
  2. ID फ़ील्ड को छोड़कर सभी फ़ील्ड का चयन करें
  3. ID फ़ील्ड को छोड़कर सभी फ़ील्ड हटाएं
  4. QGIS (मुख्य मेनू / परत / परत जोड़ें / सीमांकित पाठ परत जोड़ें) में एक परत के रूप में अपनी सीएसवी फ़ाइल जोड़ें यहाँ छवि विवरण दर्ज करें(कोई ज्यामिति चुनें)
  5. अपने आकार-प्रकार में, गुण / जोड़ का चयन करें और स्रोत और लक्ष्य के लिए दोनों आईडी फ़ील्ड चुनें। जैसा कि इस प्रश्न के अन्य उत्तर में वर्णित है।
  6. अपने संशोधित शेपफाइल को सेव करें।

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

यह वह फ़ील्ड टैब है जिसका मैं उल्लेख कर रहा हूं

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

अनावश्यक फ़ील्ड को हटाने से पहले और बाद में संपादन टॉगल करना न भूलें


13

आप आकृति फ़ाइल में एक्सेल फ़ाइल से जुड़ना चाहेंगे। आप उन्हें एक सामान्य विशेषता में शामिल कर लेंगे और परिणाम एक सम्मिलित परत होगी, जहां प्रत्येक रिकॉर्ड दोनों आकृति और एक्सेल फ़ाइल की विशेषताओं को रखता है।

ठीक है पहले आप अपनी एक्सेल फाइल और अपने वेक्टर को बाद में लेयर्स में लोड करें। मैंने कुछ परीक्षण डेटा का उपयोग किया था, लेकिन आपका सेटअप नीचे के समान दिखना चाहिए। यहाँ छवि विवरण दर्ज करें

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

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

यहां कुछ आसान ट्यूटोरियल दिए गए हैं जो आपको कदम से कदम दिखाते हैं कि यह कैसे करना है:

https://www.mapbox.com/tilemill/docs/guides/joining-data/

http://maps.cga.harvard.edu/qgis/wkshop/join_csv.php

http://qgis.spatialthoughts.com/2012/03/using-tabular-data-in-qgis.html

QGIS में एक आकृति की विशेषता तालिका के साथ बाहरी तालिकाओं में कैसे शामिल हों?

http://www.digital-geography.com/qgis-tutorial-ii-how-to-join-data-with-shapefiles/#.Vs9vpmHXKUk

और ट्यूटोरियल ArMoraer टिप्पणियों में उल्लेख किया गया है।


मैंने ट्यूटोरियल mapbox.com/tilemill/docs/guides/joining-data विच पर देखा , वैसे, बहुत उपयोगी था। हालाँकि, मैं अभी भी अपने DBF फ़ाइल को मेरे आकार फ़ाइल में शामिल नहीं कर पा रहा हूँ। यह मुझे आश्चर्यचकित करता है क्योंकि मेरी दोनों तालिका संरचना पूरी तरह से मेल खाती है। मुझे लगता है कि «क्षेत्र में शामिल हों» और «लक्ष्य क्षेत्र» को गलत समझा। क्या आप अधिक विवरण जोड़ सकते हैं?
लॉरेंट रॉबिटेल-लैनेसे

1
@Laurent Robitaille-Lainesse मैंने अपने पोस्ट को स्टेप गाइड द्वारा और अधिक कदम के साथ अपडेट किया। मैं एक टेस्ट एक्सेल फाइल को एक बहुभुज आकार की फाइल में मिला देता हूं ताकि यह सुनिश्चित हो सके कि मेरे कदम सही थे।
ed.hank

मैं अपनी एक्सेल फाइल को QGIS में ठीक से शामिल करने के लिए आगे बढ़ा। मैं देखता हूं कि «ज्वाइन» विकल्प विशेषता तालिका में एक नया क्षेत्र जोड़ता है। अगर मैं गलत हूं तो मुझे सुधारें, लेकिन मेरी एक्सेल फाइल से डेटा को मेरी विशेषता तालिका में खाली फ़ील्ड में जोड़ना असंभव लगता है।
लॉरेंट रॉबिटेल-लैनेसे

1
यदि आपके पास एक खाली फ़ील्ड है, तो आप अपनी तालिका में नए सम्मिलित फ़ील्ड से फ़ील्ड में पॉप्युलेट करने के लिए फ़ील्ड कैलकुलेटर का उपयोग करते हैं।
ed.hank

10

बस एक और तरीका जोड़ने के लिए, आप एक प्रोजेक्ट मैक्रो सेट कर सकते हैं जो लोड होने पर:

  1. स्वचालित रूप से अपने आकार को अपने सीएसवी में जोड़ता है
  2. IP1और IP2फ़ील्ड अपडेट करता है
  3. केवल आकृति के क्षेत्र छोड़ने वाले सम्मिलित क्षेत्रों को हटा देता है (अर्थात डुप्लिकेट नहीं)

सबसे पहले, एक प्रोजेक्ट बनाएं यदि आपने पहले से ऐसा नहीं किया है और फिर टूलबार पर जाएं:

प्रोजेक्ट> प्रोजेक्ट गुण ...> मैक्रोज़

फिर def openProject():फ़ंक्शन में निम्न कोड का उपयोग करें और अपनी परतों और उन फ़ील्ड्स के नाम दर्ज करें, जो आप चाहते हैं। मैंने अपने क्षेत्र के साथ क्रमशः अपनी आकृति आकृति और सीएसवी फ़ाइल के लिए "उदाहरण" और "स्प्रेडशीट" का उपयोग किया ID:

from PyQt4.QtCore import *
import qgis
from qgis.core import QgsMapLayerRegistry, QgsVectorJoinInfo

for layer in QgsMapLayerRegistry.instance().mapLayers().values():
    # Change to your shapefile name
    if layer.name() == "Example":
        qgis.utils.iface.setActiveLayer(layer)
        shp = qgis.utils.iface.activeLayer()

for layer in QgsMapLayerRegistry.instance().mapLayers().values():
    # Change to your csv name
    if layer.name() == "spreadsheet":
        qgis.utils.iface.setActiveLayer(layer)
        csv = qgis.utils.iface.activeLayer()

# Set up join parameters
shpField='ID'
csvField='ID'
joinObject = QgsVectorJoinInfo()
joinObject.joinLayerId = csv.id()
joinObject.joinFieldName = csvField
joinObject.targetFieldName = shpField
shp.addJoin(joinObject)

# Define fields to update and joined fields to copy values from
ip1 = shp.fieldNameIndex('IP1') 
ip1_join = shp.fieldNameIndex('spreadsheet_IP1')
ip2 = shp.fieldNameIndex('IP2') 
ip2_join = shp.fieldNameIndex('spreadsheet_IP2')

shp.startEditing()
for feat in shp.getFeatures():
    shp.changeAttributeValue(feat.id(), ip1, feat.attributes()[ip1_join])
    shp.changeAttributeValue(feat.id(), ip2, feat.attributes()[ip2_join])
shp.commitChanges()

# Remove join 
shp.removeJoin(csv.id())

प्रोजेक्ट मैक्रो

सुनिश्चित करें कि परतें शामिल नहीं हुई हैं, प्रोजेक्ट को सहेजें और टूलबार पर जाकर मैक्रो को सक्षम करें :

सेटिंग्स> सामान्य> मैक्रो सक्षम करें


अब जब आप प्रोजेक्ट को बंद करते हैं और सीएसवी फ़ाइल को संपादित करते हैं, तो अगली बार जब आप प्रोजेक्ट को लोड करते हैं, तो फ़ील्ड स्वचालित रूप से अपडेट होनी चाहिए:

सीएसवी फ़ाइल का संपादन

परिणाम


7

मेरा सुझाव है कि अपने एक्सेल फ़ाइल को संपादित करने और .dbf फ़ाइल बनाने के लिए ओपन सोर्स लिब्रे ऑफिस / ओपन ऑफिस का उपयोग करें। मैंने आपके लिए टेस्ट वर्कबुक तैयार की। टेस्ट वर्कबुक - लिंक

  1. Libre Office / Open Office में फ़ाइल खोलें।
  2. अपनी एक्सेल फ़ाइल से "एक्सेल" शीट डेटा पेस्ट करें।
  3. अपनी .dbf फ़ाइल (केवल आईडी, X, Y) (IP1, IP2 मानों को स्वचालित रूप से जोड़ा जाएगा) से "DBF" शीट डेटा में पेस्ट करें।
  4. Name.dbf फ़ाइल के रूप में सहेजें (जहाँ नाम आपकी आकृति फ़ाइल नाम के समान है)।

QGIS में डुप्लिकेट के बिना परिणाम तालिका: यहाँ छवि विवरण दर्ज करें


5

खाली खेतों को शुरू करने के लिए क्यों हैं? क्या आप खाली खेतों के बिना शुरू कर सकते हैं और सिर्फ जुड़ने में निर्मित दो कॉलम का उपयोग कर सकते हैं? मुझे लगता है कि यह सबसे सरल तरीका है। या तो वह या आर्कजीआईएस में "लोड" टूल के समान एक टूल ढूंढें।

https://desktop.arcgis.com/en/arcmap/latest/extensions/production-mapping/loading-data-into-a-geodatabase.htm

यदि आप जियोडेटाबेस का उपयोग नहीं कर रहे हैं, तो मैं इसकी अत्यधिक अनुशंसा करता हूं।


मैं जियोडेटाबेस का उपयोग नहीं कर रहा हूं। वास्तव में, मैं इसके साथ पारिवारिक नहीं हूं।
लॉरेंट रॉबिटेल-लैनेसे

1
@ LaurentRobitaille-Lainesse मैं अत्यधिक एक नई फ़ाइल जियोडेटाबेस बनाने की सलाह देता हूं, फिर उसके भीतर एक नई सुविधा वर्ग, और अपने डेटा को संग्रहीत करने के लिए इसका उपयोग करें। मैं जियोडैट डेटाबेस और फीचर कक्षाओं पर कुछ संक्षिप्त शोध करने की सलाह देता हूं और हम उन्हें क्यों उपयोग करते हैं, वे शेपफाइल्स से परे क्या पेश करते हैं।
स्टेला

4

मैं नहीं जानता कि अगर वहाँ एक सीधा तरीका है डुप्लिकेट के बिना शामिल होने के लिए। इस DBF में स्तंभ प्रकार की घोषणा की गई है जैसे कि पूर्णांक, वास्तविक, स्ट्रिंग, आदि इसकी लंबाई और सटीकता के विस्तार के साथ। CSV फ़ाइल में बिना किसी प्रकार के घोषित सामान्य कॉलम है। मुझे नहीं पता कि आपकी फ़ाइल कितनी बड़ी है। मेरे लिए, मैं डुप्लिकेट फ़ील्ड्स रखूंगा और फिर सामान्य सूत्र के साथ फ़ील्ड कैलीक्यूलेटर का उपयोग करूंगा :

मूल Field_x = Field_x डुप्लिकेट

फिर उन सभी डुप्लिकेट किए गए फ़ील्ड को हटाएं (QGIS या डेटाबेस प्रोग्राम के माध्यम से)


3

मेरा मानना ​​है कि इसे ठीक करने का सबसे आसान तरीका यह होगा कि जॉइन करने से पहले QGIS टेबल में प्रश्न के दो कॉलम को हटा दें। फिर, जब आप शेपफाइल में शामिल होते हैं, तो आपके इच्छित दो कॉलम डुप्लिकेट नहीं होंगे और उनके मूल कॉलम नाम रखेंगे।

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