Перетворити величезний XYZ CSV в GeoTIFF


11

У мене величезна кількість даних у вигляді CSV, що містить координати UTM як Xі Yзначення висоти як Zінформацію. Мені потрібно конвертувати ці дані в DEM як GeoTIFF для подальшого аналізу. У цьому випадку величезна кількість означає 16 м. лінії, з якою -то момент X, Yі в Zкожному рядку. Бали розподіляються однаково, тому інтерполяція не потрібна; кожну точку просто потрібно перетворити в растрову клітинку.

Оригінальні дані надходили без роздільника, із фіксованою шириною стовпця. Я вже зрозумів, як перетворити синтаксис файлів, щоб використовувати роздільник замість фіксованої ширини та усунути всі символи пробілу, використовуючи редактор тексту потоку sed . З цього моменту зазвичай моїм робочим процесом буде імпорт даних у ArcGIS, створивши клас функції з X, Yта Zданих, і як другий крок, перетворити файл форми форми в GeoTIFF, використовуючи інструмент « Показувати на Растр ». Однак файл, який я зараз маю, занадто великий для цього процесу.

Замість описаного вище робочого процесу я шукав ефективну альтернативу та відкрив GDAL. Однак у gdal_translateнайближчому підтримуваному форматі, який я можу знайти у списку підтримуваних файлів, є сітка ASCII, але XYZ не відокремлена комою. Ще одна складність полягає в тому, що у мене є координати UTM , тоді як у більшості прикладів, здається, використовуються десяткові координати градусів. Однак мені потрібно залишатися в системі UTM (або, принаймні, мій вихідний GeoTIFF повинен бути в системі координат UTM).

Тому я шукаю спосіб перетворити CSV XYZ в GeoTIFF, використовуючи GDAL , але поки що не вдалося знайти приклади, що стосуються цієї точної проблеми. Я був би дуже радий натяками або навіть прикладами коду.


Чому, на вашу думку, метод GDAL був би більш ефективним, ніж метод Есрі?
художній твір21

Точний приклад використання А-CSV для кальциту знаходиться в documentaion тут: gdal.org/gdal_grid.html
Матовий

Яке саме питання? Зараз відповідь "так, ви можете використовувати GDAL для перетворення". :}
bugmenot123

Питання в тому, як застосувати конверсію. Коментар Матта, здається, забезпечує рішення - я спробую це.
Арн

Гаразд! Чи можете ви навести мінімальний приклад випадку даних? Ви хочете отримати відповідь у GDAL, чи буде добре також інші безкоштовні інструменти (наприклад, GMT)?
bugmenot123

Відповіді:


16

Це можна зробити за допомогою GDAL, він безпосередньо підтримує формат XYZ . Не має значення, чи є ваші координати UTM, gdal_translate буде виводитися в одній і тій же системі координат.

Отже, конвертувати в GeoTIFF так просто, як:

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...

Єдині речі, про які я знаю:

  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
Я настійно пропоную призначити CRS до виводу, щоб було зрозуміло, що таке координати:-a_srs EPSG:12345
bugmenot123

1
Хороша точка @bugmenot
user2856

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.