Перетворення прогнозованого geoTiff в WGS84 за допомогою GDAL та Python


16

Вибачте, якщо наступне питання є дещо дурним, але я лише ДУЖЕ новий для всієї цієї ГІС речі.

Я намагаюся перетворити деякі проектовані зображення GeoTiff в WGS84 за допомогою gdal в python. Я знайшов публікацію, яка окреслює процес перетворення точок в прогнозованих GeoTiff, використовуючи щось подібне до наступного:

from osgeo import osr, gdal

# get the existing coordinate system
ds = gdal.Open('path/to/file')
old_cs= osr.SpatialReference()
old_cs.ImportFromWkt(ds.GetProjectionRef())

# create the new coordinate system
wgs84_wkt = """
GEOGCS["WGS 84",
    DATUM["WGS_1984",
        SPHEROID["WGS 84",6378137,298.257223563,
            AUTHORITY["EPSG","7030"]],
        AUTHORITY["EPSG","6326"]],
    PRIMEM["Greenwich",0,
        AUTHORITY["EPSG","8901"]],
    UNIT["degree",0.01745329251994328,
        AUTHORITY["EPSG","9122"]],
    AUTHORITY["EPSG","4326"]]"""
new_cs = osr.SpatialReference()
new_cs .ImportFromWkt(wgs84_wkt)

# create a transform object to convert between coordinate systems
transform = osr.CoordinateTransformation(old_cs,new_cs) 

#get the point to transform, pixel (0,0) in this case
width = ds.RasterXSize
height = ds.RasterYSize
gt = ds.GetGeoTransform()
minx = gt[0]
miny = gt[3] + width*gt[4] + height*gt[5] 

#get the coordinates in lat long
latlong = transform.TransformPoint(x,y) 

Моє запитання: якщо я хочу перетворити ці точки і створити новий файл WGS84 GeoTiff, це найкращий спосіб зробити це? Чи існує така функція, яка виконає такі завдання, як 1 крок?

Спасибі!

Відповіді:


21

Одним простішим способом було б використання інструментів командного рядка GDAL:

gdalwarp infile.tif outfile.tif -t_srs "+proj=longlat +ellps=WGS84"

На це можна звернутися досить легко за допомогою сценаріїв для пакетних завдань. Це дозволить перетягнути растр до нової сітки, і є інші варіанти керування деталями.

http://www.gdal.org/gdalwarp.html

Цільова (t_srs) система координат може бути PROJ.4, як показано, або власне файл із WKT, серед інших варіантів. Джерельна система координат (-s_srs) вважається відомою, але може бути встановлена ​​явно як цільова.

Це може бути простіше зробити роботу, якщо вам не доведеться використовувати API GDAL через Python.

Тут є підручник для викривлення з API, він говорить про те, що підтримка Python неповна (я не знаю деталей): http://www.gdal.org/warptut.html


1
Дякуємо за чудову відповідь mdsumner! Хоча рішення, яке я маю після, має бути написане пітоном, можливо, я можу піти, просто закрутивши цю команду в сценарій python.
JT.WK

16

Як сказав mdsumner, використовувати командний рядок набагато простіше, ніж зв'язки python, якщо ви не хочете виконувати дуже складні завдання.

Отже, якщо вам подобається python, як я, ви можете запустити інструмент командного рядка за допомогою:

import os  
os.sys('gdalwarp infile.tif outfile.tif -t_srs "+proj=longlat +ellps=WGS84"')

або повторіть список файлів:

listoffiles=['file1, file2, file3, filen']  
for file in listoffiles:
    os.system('gdalwarp %s %s -t_srs "+proj=longlat +ellps=WGS84"' %(file,'new_'+file))  

І навіть використовуючи багатопроцесорні інструменти, використовуйте всю потужність машини для виконання великих завдань.


Дякую Пабло. Багатопроцесорні інструменти - це те, що я обов'язково буду вивчати!
JT.WK

У gdal 2.0 є вбудована підтримка багатопроцесорної обробки - просто додайте до вашої команди gdalwarp -У NUM_THREADS = ALL_CPUS.
клапан Лондон

3
os.sys- це вбудований модуль; ви хочете os.systemкоманду
Майк Т

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