पायथन मॉड्यूल SHP सुविधाओं को हटाने के लिए (बिना डेस्कटॉप जीआईएस स्थापित)


16

मेरे पास सॉफ़्टवेयर का एक टुकड़ा है (आर्क नहीं) जो एक गैर-उत्पादन मशीन पर रात को चलता है जो बाहरी डेटाबेस से आकार-प्रकार की सुविधाओं को अपडेट करता है। समय-समय पर मैं शेपफाइल में मौजूद सभी फीचर्स को डिलीट करना चाहता हूं (फाइल ही नहीं, जिसे रहना ही चाहिए) और स्क्रीफाइल को खरोंच से "पुनर्निर्माण" करने दें। मैं इस प्रक्रिया को स्वचालित करना चाहूंगा।

मेरे पास उस मशीन पर वर्तमान में स्थापित कोई जीआईएस सॉफ्टवेयर नहीं है। मैं उम्मीद कर रहा था कि मैं पायथन में एक रूटीन को स्क्रिप्ट कर सकता हूं जो स्वचालित रूप से सुविधाओं को हटा देगा, जैसे आर्क के डिलीट फीचर्स जियोप्रोसेसिंग टूल।

क्या कोई पायथन मॉड्यूल हैं जो मुझे ऐसा करने की अनुमति देगा? अधिमानतः खुला स्रोत? मैंने Shapely और PyShp को देखा, लेकिन ऐसा कुछ भी नहीं देखा जो मुझे बड़े पैमाने पर सुविधाओं को हटाने की अनुमति देता हो या जो WHERE क्लॉज से मेल खाता हो। वे फीचर लिख सकते हैं और उनका विश्लेषण कर सकते हैं, लेकिन कहीं भी DELETE फीचर्स को नहीं देखा है।

मैं निश्चित रूप से कुछ सरल याद आ रही होगी ...

संपादित करें: मेरे पास 35 फ़ोल्डर हैं (विभिन्न भौगोलिक विस्तार, सभी अपने स्वयं के प्रक्षेपण में), 35-65 आकार के साथ, जिससे निपटने के लिए लगभग 1000 आकारफाइल बनाते हैं।

जवाबों:


16

आप GDAL / OGR अजगर एपीआई का उपयोग कर सकते हैं , कोड इस तरह होगा:

from osgeo import ogr

shapefile = ogr.Open( "shapfile.shp",1 )
layer=shapefile.GetLayerByIndex(0)
count=layer.GetFeatureCount()
for feature in range(count):
    layer.DeleteFeature(feature)

मुझे मिलता हैERROR 1: The DeleteFeature() operation is not permitted on a read-only shapefile
मैट विल्की

4
आपको इसे लिखने के लिए खोलना होगा। इसके साथ करें: ogr.Open ('shapefile.shp', 1)
capooti

12

कमांड लाइन ogr2ogr जहाँ खाली परिणाम बनाने की गारंटी देता है, एक त्वरित और आसान तरीका है:

ogr2ogr output.shp input.shp -where "FID < 0"

अजगर और OGR (और GDAL) का संक्षिप्त विवरण पृष्ठ http://trac.osgeo.org/gdal/wiki/GdalOgrInPython है


मुझे यह विचार पसंद आया। मुझे इनपुट फ़ाइल को हटाने के लिए कुछ स्क्रिप्टिंग करनी होगी और आउटपुट फ़ाइल को वापस इनपुट नाम में बदलना होगा, लेकिन अगर कोई अन्य समाधान प्रस्तुत नहीं किया जाता है, तो मैं इसे काम कर सकता हूं।
रयानडाल्टन

1
यहाँ उस के लिए एक लाइन बैच फ़ाइल है for %%a in (sample.shp) do (ogr2ogr %temp%\xxx.shp %%a -where "FID < 0" && copy %temp%\xxx.* %%~na.*):। पाब्लो का जवाब हालांकि अधिक एक्स्टेंसिबल है।
मैट विल्की

11

आप इसे pyshp में कर सकते हैं। यह सरल है लेकिन स्पष्ट नहीं है क्योंकि मैंने इस उपयोग के मामले में कभी कल्पना नहीं की है। लेकिन यह स्वचालित अद्यतन अनुप्रयोगों के लिए समझ में आता है। मैंने कोड की निम्नलिखित 6 लाइनों का परीक्षण किया और इसने बहुत अच्छा काम किया:

import shapefile
r = shapefile.Reader("myshape")
w = shapefile.Writer(r.shapeType)
# This line will give us the same dbf schema
w.fields = r.fields
# Use the original bounding box as a place holder in the header
w.bbox = lambda: r.bbox
w.save("myshape")

अब आपके पास मूल के ऊपर लिखा हुआ एक आकृति है जिसमें सही हेडर और मूल dbf फ़ील्ड हैं। यह जीआईएस सॉफ्टवेयर और शेपफाइल लाइब्रेरी में सुरक्षित रूप से खुलेगा लेकिन इसमें कोई फीचर या डीबीएफ रिकॉर्ड नहीं है।

लैम्ब्डा फ़ंक्शन प्लेसहोल्डर के रूप में मूल बाउंडिंग बॉक्स को स्थानांतरित करता है। [Xmin, ymin, xmax, ymax] की एक सरणी में आप जो कभी भी फ्लोट मान चाहते हैं वह डाल सकते हैं। उदाहरण:

w.bbox = lambda: [0.0, 0.0, 0.0, 0.0]

Dbf फ़ील्ड्स को बदलना बहुत आसान है और pyshp डॉक्स में प्रलेखित है।

उम्मीद है की वो मदद करदे।


8

क्यों न खाली शेपफाइल की कॉपी को सहेजा जाए और अपनी शेपफाइल ऑफ इंटरेस्ट को लिखे।


विडंबना यह है कि जब तक स्कीमा ज्यादा नहीं बदलती है तब तक IMHO यह सबसे कुशल समाधान होगा ...
रागी यासर बुरहुम

1
अगर यह 1 या 2 फाइलों के लिए होता, तो मैं सहमत होता। इसका मुख्य कारण यह नहीं होगा कि मेरे पास 35 -65 शेपफाइल्स के साथ 35 फ़ोल्डर (विभिन्न भौगोलिक विस्तार, सभी अपने स्वयं के प्रक्षेपण में) हैं। गणित कहता है कि 1000+ खाली शेपफाइल्स को प्रबंधित करना होगा, जो व्यावहारिक नहीं है। आकृतिफाइल्स की खोज करने और सुविधाओं को हटाने के लिए एक प्रक्रिया को स्क्रिप्ट करना, जो मुझे अंततः समाप्त होने की उम्मीद है।
रयान किडल्टन

@RyanDalton Q में आपने "आकृति" कहा, जिसने हमें वैसे भी, एक विलक्षण समाधान के बारे में सोचने और समर्पित करने के लिए प्रेरित किया। मैं शिकायत नहीं कर रहा हूं, बस यह इंगित कर रहा हूं कि उपयोग के मामले के बारे में अधिक जानकारी सामने आने के तुरंत बाद और अधिक त्वरित रूप से लागू होने वाले उत्तर हो सकते हैं।
मैट विल्की
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.