GDAL का उपयोग करके पायथन में चूहों को चिकना / प्रक्षेपित करना?


20

मैं पायथन में विकसित कर रहा हूं और ओएसजीओ से जीडीएएल का उपयोग करने के लिए जोड़-तोड़ और आपदाओं और आकार के साथ बातचीत करता हूं।

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

RasterizeLayer का उपयोग करने के बाद मेरे पास क्या है:

[Gdal.rasterizelayer का उपयोग करने से रेखापुंज]

अंतिम उत्पाद के लिए मुझे क्या चाहिए:

यहां छवि विवरण दर्ज करें

मेरा मानना ​​है कि मैं जिस फ़ंक्शन की तलाश कर रहा हूं उसे आर्कगिसस्क्रिप्टिंग आयात से 'स्पलाइन_सा ()' के रूप में जाना जाता है।

क्या GDAL का एक समान कार्य है, या मेरा वांछित आउटपुट प्राप्त करने के लिए एक अलग विधि है?

जवाबों:


18

मैं NumPy और Scipy पर एक नज़र डालूंगा - scipy.interpolate.griddata फ़ंक्शन का उपयोग करके SciPy Cookbook में बिंदु डेटा को इंटरपोलेट करने का एक अच्छा उदाहरण है । स्पष्ट रूप से इसके लिए यह आवश्यक है कि आपके पास डेटा एक संख्या में हो;

  • GDAL python बाइंडिंग का उपयोग करके आप अपने डेटा को पायथन का उपयोग करके पायथन में पढ़ सकते हैं gdal.Dataset.ReadAsArray()
  • OGR के साथ आप फीचर लेयर के माध्यम से लूप करेंगे और शेपफाइल से पॉइंट डेटा निकालेंगे (या बेहतर अभी तक, CSFGEOMETRY=AS_XYZ का शेपफाइल लिखकर [ OGR CSV फाइल फॉर्मेट देखें] और पायथन में csv पढ़ें)।

एक बार जब आप एक ग्रिड आउटपुट प्राप्त कर लेते हैं, तो आप परिणामी रूप से एक रेखापुंज को लिखने के लिए GDAL का उपयोग कर सकते हैं।

अंत में, यदि आपके पास स्किप इंटरपोलेट लाइब्रेरी के साथ कोई भाग्य नहीं है, तो आप हमेशा scipy.ndimage भी कोशिश कर सकते हैं ।


सहायता के लिए धन्यवाद! मैं Scipy.interpolate.griddata एक चक्कर दे रहा हूं। मैं अपने परिणाम वापस भेजूंगा।
डग

1
मैं इस पद पर वापस आने के लिए इतना समय लेने के लिए माफी चाहता हूं। उपरोक्त उत्तर मूल रूप से मैंने अपनी समस्या को हल करने के लिए किया था। मैंने उन नोडाटा स्थानों को भरने के लिए स्किप इंटरपोलेट लाइब्रेरी का उपयोग किया और फिर इसे रस्टबैंड पर वापस लिखा। मदद के लिए बहुत शुक्रिया दोस्तों!
डग

@ डग कोई चिंता नहीं - हील करने के लिए खुश!
om_henners

1
यह कितनी तेजी से समाधान है? क्या इसका उपयोग 10k x 10k ग्रिड के लिए किया जा सकता है जहां केवल हर 100x100 मूल्य ज्ञात है? मैंने gdal_fillnodata की कोशिश की, जो किसी भी प्रक्षेप की तुलना में अविश्वसनीय रूप से तेज़ है, लेकिन यह बहुत विरल बिंदुओं के लिए अच्छी तरह से काम नहीं करता है। इस समय मैं सागा से त्रिकोणासन का उपयोग कर रहा हूं, लेकिन यह मध्यम सरणियों के लिए बहुत धीमा है और बड़े लोगों के साथ विफल है।
मिरो

12

GDAL ग्रिडिंग API पर एक नज़र डालें । मुझे लगता है कि अगर पायथन बाइंडिंग में सामने आ रहा है पता नहीं है, लेकिन अगर नहीं, तो आप फोन कॉल gdal_grid के माध्यम से उपयोगिता उपप्रक्रिया मॉड्यूल।

GDAL ग्रिड एपीआई केवल इनवर्स डिस्टेंस वेटिंग, मूविंग एवरेज और निकटतम पड़ोसी का उपयोग करता है, यह स्प्लिन को लागू नहीं करता है। एक अन्य विकल्प स्किपी का उपयोग करना है ।


1

इस धागे के लिए थोड़ा पुराना है, लेकिन मैंने एक सरल मॉड्यूल लिखा है जो स्केन्टर से केएनएन एल्गोरिथ्म का उपयोग करता है जिसे स्केस्पाटियल कहा जाता है।

https://github.com/rosskush/skspatial

आप जियोपैन्डस का उपयोग करके एक आकृति का आयात कर सकते हैं और एक कॉलम का चयन कर सकते हैं और यह एक सतह को प्रक्षेपित करेगा जिसे एक रैस्टर को निर्यात किया जा सकता है। यह बहुत बुनियादी है और शायद इसे करने का सबसे अच्छा तरीका नहीं है, लेकिन यह सब कुछ कम से कम शुद्ध अजगर रखता है।

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