बाहरी CSV के डेटा के साथ QGIS मॉडलर कई रेखापुंज गणना करना?


20

मुझे CSV मेटाडेटा फ़ाइल में मानों के आधार पर आपदाओं के एक सेट पर कई गणना करने की आवश्यकता है।

मैं क्यूजीआईएस ग्राफिकल मॉडलर का उपयोग कर रहा हूं Tableऔर Table Fieldइनपुट के साथ एक सीएसवी में एक विशिष्ट क्षेत्र को कॉल कर सकता हूं ।

चूंकि मेरे पास कई रिस्ते हैं, और प्रत्येक रैस्टर का CSV में एक ही मूल्य है, मैं विशिष्ट पंक्ति को कैसे कहूं? (उदाहरण के लिए एक लुकअप के समान)।

यदि मुझे उपयोग में आसानी के लिए कोई स्क्रिप्ट नहीं मिलानी है, तो मैं नहीं जोड़ना चाहता।


1
संभवत: रैस्टोरेंट को पॉइंट फाइलों में परिवर्तित करके इसे एप्रोच करना आसान होगा। वहां से दोनों फाइलों के बीच आवश्यक संबंध बनाना आसान होगा। webhelp.esri.com/arcgisdesktop/9.3/…
Jamie2483

3
अपने कार्य की एक सूची (स्यूडोकोड) बनाएं। यह आपको बताएगा कि क्या आपको अपना काम करने के लिए स्क्रिप्ट का सहारा लेना चाहिए। लिपियों का सहारा लेने के लिए Iterations या सशर्त प्रक्रियाएं आपके संकेतक हैं। संरचना स्क्रिप्ट के साथ आपके मित्र हैं।
ragnvald

जवाबों:


2

वास्तव में पुरानी पोस्ट लेकिन मुझे लगता है कि एक संभावित समाधान है, दुर्भाग्य से आपके मामले के लिए, अपने मॉडलर में एक स्क्रिप्ट का उपयोग करें जो:

  • सभी लोड किए गए रेखापुंज परतों के नामों को पुनः प्राप्त करता है।
  • मेटाडेटा के माध्यम से Iterate जिसमें रेखापुंज नामों वाला एक कॉलम होता है।
  • मेटाडेटा में लोड किए गए रैस्टर नामों से मेल खाता है।
  • यदि कोई मिलान पाया जाता है, तो रेखापुंज का संबंधित मान निकाला जाता है।

  1. आप एक स्क्रिप्ट बना सकते हैं:

    Processing Toolbox > Scripts > Tools > Create new script
    

    फिर निम्नलिखित जैसे कुछ का उपयोग करें:

    ##Example=name
    ##Table=table
    ##Field=Field Table
    ##Output_value=output Number
    
    from qgis.core import QgsMapLayer, QgsMapLayerRegistry
    import csv
    
    raster_list = [layer.name() for layer in QgsMapLayerRegistry.instance().mapLayers().values() if layer.type() == QgsMapLayer.RasterLayer]
    with open(Table) as f:
        reader = csv.reader(f)
        for row in reader:
            for raster in raster_list:
                if raster in row[0]:
                    Output_value = row[1]
                    print Output_value
    

  1. फिर अपने मॉडलर में स्क्रिप्ट जोड़ें (मैंने सिर्फ दो इनपुट के साथ एक सरल उदाहरण बनाया):

    नमूना बनानेवाला

    अगर मैं ऊपर दिए गए स्क्रिप्ट का उपयोग करके इस मॉडल को चलाता हूं, तो यह बस मेटाडेटा से आउटपुट वैल्यू प्रिंट करता है जो रैड के नाम से मेल खाती है:

    परिणाम


  1. इस बात पर निर्भर करता है कि आपके मॉडल को किस तरह से संरचित किया गया है और संभवत: पटकथा को ट्विक करते हुए, आप अपने कई रेखीय गणना कर सकते हैं।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.