Как установить проекцию GeoTiff на WGS 1984 с помощью GDAL - PullRequest
0 голосов
/ 01 апреля 2019

Я пытаюсь преобразовать данные из файла netcdf глобальных данных LDAS NASA (доступно здесь по умолчанию для поднаборов -60 и -180,180 и всех переменных) в геотиф вWGS 1984 проекция.Я использую GDAL и Python 3.

Я написал более или менее тот же код, который я видел в примерах и других вопросах о создании геотифов, и он работает, пока я не попытаюсь установить проекцию.

Когда я пытаюсь установить проекцию, я сталкиваюсь с проблемами.я попробовал new_geotiff.SetProjection('WGS84') и получил Only OGC WKT Projections supported for writing to GeoTIFF. WGS84 not supported. я попробовал

spatialreference = osr.SpatialReference().ImportFromWkt('WGS84')
new_geotiff.SetProjection(spatialreference)

и получил ошибку

TypeError: in method 'Dataset_SetProjection', argument 2 of type 'char const *'

Вот вся функция, которую я написал:

    import netCDF4
    import numpy
    import gdal, gdalconst
    import osr

    # Reading in data from the netcdf
    nc_obj = netCDF4.Dataset(file_path, 'r')
    var_data = nc_obj.variables[var][:]
    lat = nc_obj.variables['lat'][:]
    lon = nc_obj.variables['lon'][:]

    # format the array of information going to the tiff
    x = numpy.asarray(var_data)[0, :, :]

    # Creates geotiff raster file (filepath, x-dimensions, y-dimensions, number of bands, datatype)
    geotiffdriver = gdal.GetDriverByName('GTiff')
    new_geotiff = geotiffdriver.Create(save_dir_path + 'geotiff.tif', len(lon), len(lat), 1, gdal.GDT_Float32)

    # calculate the geographic transform information and set the projection
    # geotransform = (topleft x, x-width/spacing, orientation angle, topleft y, orientation angle, y-width/spacing)
    yorigin = lat.max()
    xorigin = lon.min()
    xres = lat[1] - lat[0]
    yres = lon[1] - lon[0]
    new_geotiff.SetGeoTransform((xorigin, xres, 0, yorigin, 0, -yres))

    # Set the projection of the geotiff
    new_geotiff.SetProjection('WGS84')             # set the projection for the new geotiff

    # actually write the data array to the tiff file and save it
    new_geotiff.GetRasterBand(1).WriteArray(x)               # write band to the raster (variable array)
    new_geotiff.FlushCache()                                 # write to disk

Не уверен, где я иду не так.Я трачу свое время и на геотрансформатор, просто не знаю, где на самом деле посмотреть

...