विशाल XYZ CSV को GeoTIFF में बदलें


11

मेरे पास CSV के रूप में एक बड़ी मात्रा में डेटा है जिसमें UTM निर्देशांक Xऔर जानकारी के Yरूप में एक उन्नयन मूल्य Zहै। मुझे आगे के विश्लेषण के लिए इन आंकड़ों को जियोमिफ के रूप में डीईएम में बदलने की जरूरत है। इस मामले में, एक बड़ी राशि का मतलब 16 मीटर है। लाइनों, एक बिंदु के साथ X, Yऔर Zप्रत्येक पंक्ति में। अंक समान रूप से वितरित किए जाते हैं, इसलिए एक प्रक्षेप की आवश्यकता नहीं है; प्रत्येक बिंदु को बस एक रेखापुंज सेल में परिवर्तित करने की आवश्यकता है।

मूल डेटा विभाजक के बिना आया था, निश्चित कॉलम चौड़ाई के साथ। मैंने पहले ही पता लगा लिया था कि कैसे तय चौड़ाई के बजाय एक विभाजक का उपयोग करने के लिए फ़ाइल सिंटैक्स को परिवर्तित करें और स्ट्रीम पाठ संपादक सेड का उपयोग करके सभी अंतरिक्ष वर्णों को समाप्त करें । पर यहाँ से, सामान्य रूप से मेरी कार्यप्रवाह से एक फीचर वर्ग बनाने के द्वारा ArcGIS में डेटा आयात किया जाएगा X, Yऔर Z, डेटा और एक दूसरे कदम के रूप में एक GeoTiff में बिंदु शेपफ़ाइल परिवर्तित करने, का उपयोग करते हुए प्वाइंट रेखापुंज करने के लिए उपकरण। हालाँकि, मेरे पास वर्तमान में मौजूद फ़ाइल इस प्रक्रिया के लिए बहुत बड़ी है।

ऊपर वर्णित वर्कफ़्लो के बजाय, मैं एक कुशल विकल्प की तलाश में था और GDAL की खोज की। हालाँकि, gdal_translateसबसे नज़दीकी समर्थित प्रारूप में , मैं समर्थित फ़िलेटाइप सूची में पा सकता हूँ, ASCII ग्रिड है लेकिन कोई अल्पविराम से अलग नहीं किया गया XYZ। एक और कठिनाई यह है कि मेरे पास UTM निर्देशांक हैं , जबकि अधिकांश उदाहरण दशमलव डिग्री निर्देशांक का उपयोग करते हैं। हालाँकि, मुझे UTM सिस्टम के भीतर रहने की आवश्यकता है (या कम से कम, मेरे आउटपुट GeoTIFF को UTM समन्वय प्रणाली में होना चाहिए)।

इसलिए मैं GDAL का उपयोग करके CSV XYZ को एक GeoTIFF में परिवर्तित करने का एक तरीका ढूंढ रहा हूं , लेकिन अभी तक इस सटीक समस्या से निपटने के लिए उदाहरण नहीं मिल पाए हैं। मुझे कुछ संकेत या कोड उदाहरणों के लिए बहुत खुशी होगी।


आपको क्या लगता है कि GDAL विधि Esri विधि की तुलना में अधिक कुशल होगी?
कलाकृति 21


वास्तव में सवाल क्या है? अभी इसका उत्तर है "हाँ, आप कन्वर्ट करने के लिए GDAL का उपयोग कर सकते हैं"। :}
Bugmenot123

सवाल यह है कि रूपांतरण कैसे लागू किया जाए। मैट की टिप्पणी समाधान प्रदान करने के लिए लगता है - मैं यह कोशिश करूँगा।
Arne

ठीक है! क्या आप डेटा का न्यूनतम उदाहरण प्रदान कर सकते हैं? क्या आप GDAL में जवाब चाहते हैं या अन्य मुफ्त उपकरण (जैसे GMT) ठीक भी होंगे?
बगमनोट123

जवाबों:


16

आप GDAL का उपयोग करके ऐसा कर सकते हैं, यह सीधे XYZ प्रारूप का समर्थन करता है । इससे कोई फर्क नहीं पड़ता कि आपके निर्देशांक UTM हैं, gdal_translate उसी समन्वय प्रणाली में आउटपुट करेगा।

इसलिए जियो टीआईएफएफ में परिवर्तित करना उतना ही सरल है:

gdal_translate test.xyz test.tif

को देखो GeoTiff उत्पादन विकल्प (जैसे संपीड़न के रूप में) और के लिए डॉक gdal_translate अधिक उपयोग की जानकारी के लिए दस्तावेज़। विशेष रूप से, आपको निर्दिष्ट करना चाहिए कि -a_srsपैरामीटर के साथ समन्वय प्रणाली क्या है ।

-a_srs srs_def:

आउटपुट फ़ाइल के लिए प्रक्षेपण को ओवरराइड करें। Srs_def सामान्य GDAL / OGR रूपों में से कोई भी हो सकता है, पूरा WKT, PROJ.4, EPSG: n या WKT युक्त फ़ाइल।

gdal_translate -a_srs EPSG:12345 test.xyz test.tif

कोमा / अंतरिक्ष अलग और निश्चित स्तंभ चौड़ाई, एक हेडर पंक्ति के साथ और बिना समर्थित हैं।

समर्थित स्तंभ विभाजक स्थान, अल्पविराम, अर्धविराम और सारणियाँ हैं।

$ head -n 2 test_space.xyz 
x y z
146.360047076550984 -39.0631214488636616 0.627969205379486084

$ gdalinfo test_space.xyz
Driver: XYZ/ASCII Gridded XYZ
Files: test_space.xyz
Size is 84, 66
Coordinate System is `'
Origin = (146.359922066953317,-39.062997159090934)
Pixel Size = (0.000250019195332,-0.000248579545455)
Corner Coordinates:
Upper Left  ( 146.3599221, -39.0629972) 
Lower Left  ( 146.3599221, -39.0794034) 
Upper Right ( 146.3809237, -39.0629972) 
Lower Right ( 146.3809237, -39.0794034) 
Center      ( 146.3704229, -39.0712003) 
Band 1 Block=84x1 Type=Float32, ColorInterp=Undefined
  Min=0.336 Max=0.721 

$ head -n 2 test_commas.xyz 
x, y, z
146.360047076550984, -39.0631214488636616, 0.627969205379486084

$ gdalinfo test_commas.xyz
Driver: XYZ/ASCII Gridded XYZ
etc...

$ head -n 2 test_formatted.xyz
x                       y                       z
146.3600471            -39.06312145             0.627969205

$ gdalinfo test_formatted.xyz
Driver: XYZ/ASCII Gridded XYZ
etc...

केवल gotchas मैं के बारे में पता कर रहा हूँ कर रहे हैं:

  1. बड़े डेटासेट के खुलने की गति धीमी हो सकती है क्योंकि डेटासेट के आकार और स्थानिक रिज़ॉल्यूशन को निर्धारित करने के लिए ड्राइवर को पूरी फाइल को स्कैन करना होगा; तथा
  2. फ़ाइल को सही तरीके से क्रमबद्ध किया जाना है (Y, फिर X)।

    समान Y निर्देशांक वाली कोशिकाओं को लगातार लाइनों पर रखा जाना चाहिए। समान Y समन्वय मूल्य के लिए, डेटासेट में लाइनों को X मान बढ़ाकर व्यवस्थित किया जाना चाहिए। Y समन्वय का मूल्य हालांकि बढ़ या घट सकता है।

    $ head -n 5 test.csv
    x,y,z
    146.3707979,-39.07778764,0.491866767
    146.3787985,-39.07157315,0.614820838
    146.3637974,-39.07132457,0.555555582
    146.3630473,-39.07579901,0.481217861
    
    $ gdalinfo test.csv
    ERROR 1: Ungridded dataset: At line 3, too many stepY values
    gdalinfo failed - unable to open 'test.csv'.
    
    $ tail -n +2 test.csv| sort -n -t ',' -k2 -k1 > test_sorted.xyz
    
    $ head -n 5 test_sorted.xyz 
    146.3600471,-39.07927912,0.606096148
    146.3602971,-39.07927912,0.603663027
    146.3605471,-39.07927912,0.603663027
    146.3607971,-39.07927912,0.589507282
    146.3610472,-39.07927912,0.581049323
    
    $ gdalinfo test_sorted.xyz
    Driver: XYZ/ASCII Gridded XYZ
    etc...

2
मैं अत्यधिक निर्देशांक के सीआरएस को निर्देश देने के लिए सुझाव दूंगा कि निर्देशांक क्या हैं:-a_srs EPSG:12345
Bugmenot123

1
शुभ बिंदु @bugmenot
user2856

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