QGIS में "खराब परतों को कैसे हैंडल करें" को अनदेखा करें?


11

मेरे पास एक QGIS (2.14.3-एसेन) परियोजना है जो मैं काम और घर दोनों पर उपयोग करता हूं। मैं परियोजना के साथ सभी लेकिन दो परतों को रखता हूं।

शेष दो परतें बहुत बड़ी हैं - एक डीईएम और पहाड़ियों की कुल 20 जीबी से अधिक - और वे काम बनाम घर पर विभिन्न रास्तों में संग्रहीत हैं।

मैं Handle Bad Layersसंवाद को नजरअंदाज करना चाहता हूं और उन परतों के लिए टूटे हुए रास्तों को रखना चाहता हूं । मुझे अक्सर परवाह नहीं है कि वे खराब हैं; मैं प्रोजेक्ट के अन्य हिस्सों में बदलाव करना चाहता हूं।

क्या ऐसा करने का कोई तरीका है, हैंडल बैड लेयर्स डायलॉग को इग्नोर या स्किप करने के लिए तो क्या मैं लेयर्स का रेफरेंस नहीं खोता अगर मैं उन्हें अपडेट करता हूं?


यह कुछ ऐसा है जिसे QGIS में अपस्ट्रीम में हल किया जाना चाहिए। यह करना बहुत कठिन नहीं होगा। मैं इसे निश्चित अपस्ट्रीम (जैसे डायलॉग में अतिरिक्त विकल्प: ए) इस सत्र में छिपाने की सलाह दूंगा b) फिक्स सोर्स पाथ c) लेयर लेयर)। कर रहे हैं चारों ओर कंपनियों के एक बहुत है कि आप के लिए यह करने के लिए खुश हो जाएगा।
मथायस कुह्न

1
@ माथियास कुहन - यह एक बहुत अच्छा विचार है, यह एक अच्छा तरीका होगा। मैं उस सूची में से किसी एक परामर्शी का उपयोग करता हूं (यह सुनिश्चित करने के लिए कि क्या यह उनके नाम की चीज है?)। मैं उनके साथ संभावना तलाशूंगा। धन्यवाद
मार्टिन Hügi

@ मार्टिनहुगी क्या आपने इस पर कोई प्रगति की? मेलिंग सूची lists.osgeo.org/pipermail/qgis-developer/2017-May/048450.html
Matthias Kuhn

नहीं, मैंने इसे आगे नहीं बढ़ाया है, मैं वास्तव में भूल गया था क्योंकि यह उन चीजों में से एक बन गया है जिनके साथ हम रहते हैं। अनुस्मारक के लिए धन्यवाद, मैं हमारी कंसल्टेंसी से सवाल पूछ सकता हूं या यह कुछ ऐसा है जो पहले से ही चल रहा है? @ ऐरन - यह आपके लिए कैसे काम कर गया है?
मार्टिन ह्यूगी

मैं अपने काम का इस्तेमाल जारी रखता हूं। दो समानांतर QGIS परियोजनाएं - एक काम के लिए और एक घर के लिए।
आरोन

जवाबों:


4

बस घर और काम के उपयोग के लिए अपनी परियोजना फ़ाइल से अलग प्रतियां बनाएं ।

आपके द्वारा सेव किया गया डेटा लेयर सोर्स फाइल्स को लिखा जाएगा, प्रोजेक्ट फाइल को नहीं।

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


एक अन्य विकल्प बाहरी स्रोत के चारों ओर एक वीआरटी फ़ाइल लपेटना है।

एक जियोटीफ़ रेखापुंज फ़ाइल के लिए एक नमूना उदाहरण, इसके साथ बनाया गया gdal_translate:

<VRTDataset rasterXSize="1656" rasterYSize="846">
  <GeoTransform> 2.0005201224994706e+005, 6.2653333397239589e+002, 0.0000000000000000e+000, 6.9906275735481549e+006, 0.0000000000000000e+000,-6.2653333397239589e+002</GeoTransform>
  <Metadata>
    <MDI key="TIFFTAG_RESOLUTIONUNIT">2 (pixels/inch)</MDI>
    <MDI key="TIFFTAG_XRESOLUTION">120</MDI>
    <MDI key="TIFFTAG_YRESOLUTION">120</MDI>
  </Metadata>
  <VRTRasterBand dataType="Byte" band="1">
    <ColorInterp>Red</ColorInterp>
    <SimpleSource>
      <SourceFilename relativeToVRT="1">testtif.tif</SourceFilename>
      <SourceBand>1</SourceBand>
      <SourceProperties RasterXSize="1656" RasterYSize="846" DataType="Byte" BlockXSize="1656" BlockYSize="1" />
      <SrcRect xOff="0" yOff="0" xSize="1656" ySize="846" />
      <DstRect xOff="0" yOff="0" xSize="1656" ySize="846" />
    </SimpleSource>
  </VRTRasterBand>
</VRTDataset>

और एक आकृति के लिए एक नमूना:

<OGRVRTDataSource>
    <OGRVRTLayer name="testshp">
        <SrcDataSource>F:\Karten\vrt\testshp.shp</SrcDataSource>
            <SrcLayer>testshp</SrcLayer>
            <GeometryType>wkbPolygon</GeometryType>
            <LayerSRS>EPSG:31466</LayerSRS>
    </OGRVRTLayer>
</OGRVRTDataSource>

जब स्रोत फाइलें मौजूद नहीं होती हैं, तो रेखापुंज को काले वर्ग के रूप में प्रदर्शित किया जाता है (आप परत को अदृश्य में बदल सकते हैं), और वेक्टर परत एक गैर-ज्यामिति तालिका बन जाती है, बिना किसी त्रुटि संदेश के। स्रोत फ़ाइलों के साथ अतिरिक्त गैर-vrt परतें जिन्हें हटाया नहीं गया है वे बनी रहेंगी और संपादित की जा सकती हैं। यदि आप स्रोत फ़ाइलों को पुनर्स्थापित करते हैं, तो सब कुछ सामान्य हो जाता है, यहां तक ​​कि अन्य परतों में परिवर्तन भी।


1
इस विशेष मामले में घर और कार्यालय के लिए अलग-अलग प्रोजेक्ट बनाना एक अच्छा काम है। हालांकि, अन्य मामले भी हैं, जैसे कि जब नक्शा सेवा अस्थायी रूप से नीचे होती है, तो आप खराब परतों की अधिसूचना को अनदेखा करना चाहेंगे। तो फिर से मैं पूछता हूं, क्या हैंडल बैड लेयर्स डायलॉग को इग्नोर या स्किप करने का कोई तरीका है ताकि कोई एक रेफरेंस लेयर्स न खोए?
आरोन

क्या आप वीआरटी फाइलों पर कुछ और विवरण प्रदान कर सकते हैं, वे क्या हैं, और कैसे शुरू करें। क्या मैंने वीआरटी पर ध्यान दिया है जो केवल आपदाओं पर लागू होता है? वेक्टर फ़ाइलों के बारे में क्या है, या दूरस्थ PostGIS परतें जो कोई कनेक्शन नहीं होने पर उपलब्ध नहीं हैं। आप इन 'हैंडल बैड लेयर्स' को कैसे अनदेखा कर सकते हैं?
मार्टिन हागी

@ मार्टिनहुगी आप वेक्टर फ़ाइलों के लिए वीआरटी का निर्माण भी कर सकते हैं, लेकिन इसके लिए अभी भी हैंडवर्क की जरूरत है: gdal.org/drv_vrt.html और paolocorti.net/2012/03/08/gdal_virtual_formats । मैं कुछ उदाहरणों के लिए जल्द ही अपने उत्तर का विस्तार करूंगा।
आंद्रे जे

@AndreJ धन्यवाद, इसलिए उन लिंक को देखकर, मेरी सीमित समझ यह है कि एक xml फ़ाइल डेटा के स्रोत के लिए इनबिल्ट मैप के रूप में कार्य करती है। तो QGIS 'सोचता है' यह वहाँ है, भले ही डेटा स्रोत उपलब्ध नहीं है? GDAL ऐसा कुछ है जो ऐसा लगता है कि इसके साथ पकड़ना अच्छा होगा या कम से कम इसकी समझ होनी चाहिए।
मार्टिन ह्यूगी

हां, आप सिर्फ QGIS त्रुटि हैंडलर को बेवकूफ बना रहे हैं।
आंद्रे जे

3

एक स्क्रिप्ट का उपयोग करके अपने qgs प्रोजेक्ट फ़ाइल को संशोधित करने के लिए चारों ओर एक संभावित कार्य होगा। मैंने पाया कि यदि आप डेटा स्रोत को बदल देते हैं <datasource>.</datsource>तो यह हैंडल बैड लेयर्स को पॉप अप कर देगा।

यदि आप कुछ परतों को लोड नहीं करना चाहते हैं तो पायथन स्क्रिप्ट को चलाना है।

import fileinput

replaceNextLine = False

for line in fileinput.input('path\to\your\project.qgs', inplace=True):
    if replaceNextLine:
        print '<datasource>.</datasource>'
        replaceNextLine = False
    else:
        print line,

    if '<id>layer_name_whos_datasource_needs_to_change' in line:
        replaceNextLine = True

उपयुक्त डेटा स्रोत पथ सम्मिलित करने के लिए चलाने के लिए पायथन स्क्रिप्ट।

import fileinput

replaceNextLine = False

for line in fileinput.input('path\to\your\project.qgs', inplace=True):
    if replaceNextLine:
        print '<datasource>.\path\to\your\datasource</datasource>'
        replaceNextLine = False
    else:
        print line,

    if '<id>layer_name_whos_datasource_needs_to_change' in line:
        replaceNextLine = True

ऐसा करने से आप DoNotLoad.pyशीर्ष स्क्रिप्ट के साथ सेट कर सकते हैं और home.pyअपने घर के स्रोतों के work.pyलिए पथ और पैटर्न के रूप में दूसरी स्क्रिप्ट का उपयोग करके अपने कार्य स्रोतों के लिए पथ के साथ।

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


धन्यवाद। मुझे अवधारणा मिलती है, मुझे स्पष्ट रूप से अब उस समय को बिताने की आवश्यकता है, जिसका अर्थ है कि मैं पायथन के बुनियादी उपयोग को समझने के लिए चारों ओर पहुंच गया हूं। अभी के लिए मुझे यह अवधारणा मिल गई है क्योंकि मैंने डेटासोर्स को बदलने के लिए WordPad के साथ प्रोजेक्ट .qgs को मैन्युअल रूप से संपादित किया और इसे वापस बदल दिया। क्यूजीआईएस ने खराब परतों को नजरअंदाज नहीं किया, लेकिन जैसा कि <ID> एक प्लेसहोल्डर काम करता है मैं वापस जाने और अपने परिवर्तन को वापस करने में सक्षम था। तो हाँ, मुझे लगता है कि - मुझे लगता है।
मार्टिन ह्युगी

मुझे लगता है कि यह wiki.python.org/moin/BeginnersGuide
मार्टिन ह्युगी

@ मार्टिनहुगी यदि यह मदद करता है, तो मुझे इस स्क्रिप्ट के मुख्य पैटर्न से इस स्टैकओवरफ्लो उत्तर stackoverflow.com/a/290494/4708150 के बारे में पता चला। यह स्क्रिप्ट के तर्क को और अच्छी तरह से समझाता है। टिप्पणियों को देखने के लिए सुनिश्चित करें। एक टॉप रेटेड टिप्पणी है जो बताती है कि प्रिंट स्टेटमेंट के अंत में कॉमा क्यों है।
TJ रॉकफेलर

1

ChangeDataSource प्लगइन फाइल को लेयर्स को अस्थायी रूप से हैंडल लेयर्स ग्रुप में ले जाकर रखता है। https://geogear.wordpress.com/2016/01/29/changedatasourceplugin-plugin-release-2-0/ यह वही करना चाहिए जो आपको चाहिए। पिछले साल मैं इसी तरह का मुद्दा रख रहा था और ध्यान दिया कि चेंजडेटासोर्स प्लगइन था जो परतों के साथ काम करता था लेकिन खराब परतों को संभालता नहीं था। मैंने उल्लेख किया है कि डेवलपर (एनरिको फेरगुटी) ब्लॉग पर टिप्पणियों में खराब परतों को संभालना एक महान विशेषता होगी। एक सप्ताह के भीतर उन्होंने इसे जोड़ दिया था!


यह प्लगइन खराब परतों को संभालने के लिए मेरे काम नहीं आया। मैंने दो अलग-अलग लैपटॉप पर कोशिश की - एक Win7 चला रहा था और दूसरा Win10। दोनों में QGIS 2.18.0 स्थापित है। मैंने "हैंडल खराब लेयर्स" की जाँच की और स्थापित करने के बाद QGIS को फिर से शुरू किया। खराब परतों को संभालने के लिए QGIS डिफ़ॉल्ट पॉप अप करना जारी रखा, न कि प्लगइन की सूचना इसे मिली और अमान्य डेटा स्रोत संभाला।
आरोन

अभी मेरे लिए काम नहीं कर रहा है। मैं डेवलपर को बता दूंगा।
बस्विन

मैंने सत्यापित किया कि changeDataSource प्लगइन बिना मुद्दों के चलता है। मैं अपवादों को फेंकने या झूठी त्रुटि की रिपोर्ट करने के लिए कुछ अनकही शर्तों को ठीक करता हूं और एक नए संस्करण को रिपॉजिटरी के लिए प्रतिबद्ध करता हूं। [यदि आपके मुद्दे जारी रहते हैं तो कृपया रिपोर्ट करें] ( github.com/enricofer/changeDataSource/issues ) डेटासेट्स या उन्हें पुन: उत्पन्न करने के लिए ऑपरेटिंग चरणों को निर्दिष्ट करना।
एनरिको फेरगुटी

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