फीचर्स डिलीट होने पर शेपफाइल्स का आकार कैसे कम करें?


9

यह छोटी सी स्क्रिप्ट सभी परतों में सभी छोटी सुविधाओं को हटा देती है। यह ठीक काम करता है, लेकिन .shp फ़ाइलों का आकार कम नहीं होता है। कृपया मुझे बताए क्यों...

canvas = iface.mapCanvas()
expr = QgsExpression("$length<100")
for l in canvas.layers():
    l.startEditing()
    it = l.getFeatures(QgsFeatureRequest(expr))
    for ft in it:
        l.deleteFeature(ft.id())
    l.commitChanges()

जवाबों:


14

क्योंकि शेपफाइल्स से सुविधाओं को हटाने का सबसे तेज़ तरीका रिकॉर्ड को "हटाए गए" ध्वज के साथ रिकॉर्ड करना है। सभी .shp, .shx और .dbf भागों को फिर से लिखना। यह GDAL shp ड्राइवर पृष्ठ http://www.gdal.org/drv_shapefile.html पर भी प्रलेखित है

ओजीआर शेपफाइल चालक एक शेपफाइल में मौजूदा आकृतियों को हटाने के साथ-साथ आकृतियों को हटाने का समर्थन करता है। हटाए गए आकृतियों को .dbf फ़ाइल में हटाने के लिए चिह्नित किया जाता है, और फिर OGR द्वारा अनदेखा किया जाता है। वास्तव में उन्हें स्थायी रूप से हटाने के लिए (जिसके परिणामस्वरूप FIDs का नाम बदलने के लिए) डेटा स्रोत ExecuteSQL () विधि के माध्यम से SQL 'REPACK' को लागू करें।


2
तकनीकी रूप से, dBase की "मार्क डिलीटेड" सुविधा को शेपफाइल्स द्वारा समर्थित नहीं किया गया है, इसलिए GDAL जब यह करता है तो भ्रष्ट शेपफाइल्स उत्पन्न करता है।
विंस

एक पुराना उत्तर है gis.stackexchange.com/questions/162615/… (यह शायद एक डुप्लिकेट है) जहां मैंने पाया कि ESRI द्वारा MapObjects में इसी तरह का DelRecord (सूचकांक) तरीका था जो शारीरिक रूप से कुछ भी नहीं करता है। शायद ESRI प्रोग्राम शेपफाइल्स को बंद करने से पहले "पैक" चलाने का बेहतर ख्याल रखते हैं, लेकिन ऐसा लगता है कि उनके पास "हटाए गए" के लिए कुछ समर्थन भी है।
user30184

लेयर पर 'सेव एज़' के रूप में प्रदर्शन करने से हटाए गए फ़ीचर हट जाएंगे।
स्पैटियलसुइट

मुझे QGIS और अजगर में उतना बड़ा अनुभव नहीं है। आप SQL 'REPACK' को कैसे लागू करते हैं?
इवानह

5

आपको क्यूजीआईएस के संस्करण की जांच करनी चाहिए जो आप इसमें देख रहे हैं।

मुझे पता है कि इस व्यवहार को २.१४ संस्करण में बदल दिया गया था, ताकि डिलीटफिट्स को कॉल करने के बाद किसी भी बचे हुए अनाथ पंक्तियों को हटाने के लिए एक शेपफाइल को फिर से तैयार किया जाएगा।

आपको संस्करण 2.14 के साथ फिर से परीक्षण करना चाहिए और देखना चाहिए कि क्या कोई सुधार हुआ है।


उत्तर देने के लिए आपका धन्यवाद। यह बहुत अच्छा लगता है कि इसे संस्करण 2.14 में ट्वीक किया गया था। मैं संस्करण २.१२.२ चला रहा हूं और मुझे पता है कि २.१२.३ डाउनलोड के लिए तैयार है, लेकिन मुझे संस्करण २.१४ कहां मिलेगा?
इवानह
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.