किसी अन्य dbf तालिका से मानों के साथ एक आकार आकृति विशेषता तालिका को अद्यतन करें


10

मैं यहाँ समझाने की कोशिश कर रहा हूँ कि मैं क्या करने की कोशिश कर रहा हूँ:

मेरे पास एक शेपफाइल और एक ही फ़ील्ड के साथ एक स्वतंत्र dbf टेबल है। Dbf तालिका में सभी फ़ील्ड पॉपुलेटेड हैं, लेकिन शेपफाइल विशेषता तालिका में सिर्फ एक, इसे "OneField" नाम देता है। मैं क्या करना चाहता हूं यह जांचने के लिए कि "OneField" (शेपफाइल) से मान "OneField" (dbf तालिका) के मान के समान हैं और यदि हां, तो शेष खाली फ़ील्ड को लोगों के साथ तालिका में पॉप्युलेट करने के लिए स्वतंत्र dbf तालिका में।

फिलहाल मैं सिर्फ स्वतंत्र dbf तालिका से आकृति आकृति तालिका में मानों को कॉपी करने की कोशिश कर रहा हूं, लेकिन मैं फंस गया हूं। (जब मैं इस कोड को चलाता हूं तो मुझे एक संदेश मिलता है कि pythonwin ने काम करना बंद कर दिया है और तालिकाओं के साथ कुछ भी नहीं होता है)। क्या आप मुझे एक हाथ दे सकते हैं?

यहाँ कोड है:

import arcpy

table = "link/to/table.dbf"
fc = "link/to/shapefile.shp"

# Create a search cursor

rowsTable = arcpy.SearchCursor(table)

# Create an update cursor

rowsFc = arcpy.UpdateCursor(fc) 

for row in rowsTable:
    row = row.getValue("OneField")
    valueTable = row
    for row in rowsFc:
        row = row.setValue("OneField", valueTable)
        rowsFc.updateRow(row)
        row = rowsFc.next()
    row = rowsTable.next()    

del row, rowsFc, rowsTable

आपका बहुत बहुत धन्यवाद


1
सही करने या जानकारी जोड़ने के लिए आप अपने मूल प्रश्न को संपादित कर सकते हैं।
ब्रैड नेसोम

उन पर छोरों "के लिए" के लिए सभी) लाइनों है कि .next (, बाहर लेने के साथ arcpy पंक्तियों iterable हैं, तो आप कोशिश करते हैं, आप .next ऐसा नहीं करते हैं ()
gotchula

जवाबों:


3

यही QGIS ftools "एट्रीब्यूट बाय अटेंशन" टूल कर रहा है। यह एक आकृति फ़ाइल और एक dbf फ़ाइल (या एक दूसरी आकृति फ़ाइल) लेता है और उनकी विशेषता तालिकाओं में शामिल होता है। उपकरण अजगर में लिखा गया है, इसलिए आपको अपनी ज़रूरत की हर चीज़ यहाँ मिलनी चाहिए: http://trac.osgeo.org/qgis/browser/trunk/qgis/python/plugins/fTools/tools/doJoinAttributes.py


3

देखने के कोड बिंदु से, ऐसा लगता है कि आप "पंक्ति" के लिए एक गुच्छा (~ 4) विभिन्न चीजों का उपयोग कर रहे हैं, जिनमें से कुछ अनावश्यक प्रतीत होते हैं। मैं चापलूसी के साथ बहुत कुछ नहीं करता, लेकिन मैं कुछ इस तरह की कल्पना करता हूं कि यह बेहतर काम करेगा। यदि ऐसा हुआ, तो आप अपने FC में पूरे OneField कॉलम को अपने टेबल से OneField के अंतिम मान के साथ समाप्त कर देंगे:

for rowT in rowsTable:
    valueTable = rowT.getValue("OneField")
    for rowF in rowsFc:
        rowF.setValue("OneField", valueTable)
        rowsFc.updateRow(rowF)
        rowF = rowsFc.next()
    rowT = rowsTable.next() 

neuhausr, बहुत बहुत धन्यवाद, यह अच्छी तरह से काम करता है कि आप इसे कैसे
लगाते हैं

3

मैंने खुद को आज़माने में अच्छा समय बिताया और मुझे कुछ ऐसा मिला है जो काम करता है। इसे काम करने के लिए मेरे कोड का संदर्भ लें।

शाखाओं के साथ मूल्यों के माध्यम से पुनरावृत्ति करके फीचर वर्ग को कैसे अपडेट करें?

आपको एक सूची बनाने की आवश्यकता होगी जिसमें सभी फ़ील्ड शामिल हों ताकि आप उनके माध्यम से पुनरावृति कर सकें।


2

एक dbf से एक आकृति के लिए डेटा ले जाने के लिए मेरी विधि। (निश्चित रूप से मैं एक gui सॉफ्टवेयर के अंदर ऐसा करना पसंद करता हूं) dbf को शेपफाइल में शामिल करता हूं।

उस बिंदु पर मैं सामान्य रूप से उन विशेषताओं का चयन करता हूं जो अशक्त नहीं हैं (मैं दूसरी तालिका के आईडी क्षेत्र पर ऐसा करता हूं)। अगर वे अशक्त नहीं हैं तो उन्होंने मैच किया।

एक बार यह पूरा हो जाने के बाद आप शेपफाइल.ऑनफील्ड <> table.onefield द्वारा मूल्यों का चयन कर सकते हैं।

फिर आकृति में अपनी गणना चलाएँ।


-1

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

यदि आप उदाहरण के लिए शेपफाइल और डीबीएफ को पोस्टजीआईएस डीबी में लोड करते हैं तो आपकी क्वेरी कुछ इस तरह दिख सकती है:

CREATE TABLE new_table AS
SELECT a.the_geom, a.populated_field, b.populated_field2, b.populated_field3
FROM shape_table a LEFT JOIN dbf_table b ON a.populated_field=b.populated_field1;

यदि आप शामिल होने वाले क्षेत्रों पर सूचकांक डालते हैं, तो यह बहुत तेज़ होना चाहिए। आप इसके बजाय आकृति_टेबल को निश्चित रूप से अपडेट कर सकते हैं, लेकिन मूल डेटा को नष्ट नहीं करने के बजाय एक नई तालिका बनाना पसंद करते हैं।

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