1

我尝试将 tiff 转换为 netcdf 文件。错误是说索引错误:

import numpy as np
from netCDF4 import Dataset
import rasterio


with rasterio.drivers():
    src=rasterio.open(r"ia.tiff","r")
    dst_transform=src.transform
    dst_width=src.width
    dst_height=src.height
    print (dst_transform)
    xmin = dst_transform[0]
    xmax = dst_transform[0] + dst_transform[1]*dst_width
    print (xmax)
    min = dst_transform[3] + dst_transform[5]*dst_height
    print(ymin)
    ymax = dst_transform[3]

    dst_width=dst_width+1
    dst_height=dst_height+1
    outf=Dataset(r'ia.nc','w',format='NETCDF4_CLASSIC')
    lats=np.linspace(ymin,ymax,dst_width)
    lons=np.linspace(xmin,xmax,dst_height)


    lat=outf.createDimension('lon',len(lats))
    lon=outf.createDimension('lat',len(lons))
    longitude=outf.createVariable('longitude',np.float64,('lon',))
    latitude=outf.createVariable('latitude',np.float64,('lat',))
    SHIA=outf.createVariable('SHIA',np.int8,('lon','lat'))

    outf.variables['longitude'][:]=lons
    outf.varibales['longitude'][:]=lat
    im=src.read()
    SHIA[:,:]=im

    outf.description="IA for"
    longitude.units="degrees east"
    latitude.units='degrees north'

    print ("created empty array")

    outf.close()




outf.close()

错误是索引错误:数据数组的大小不符合切片。有人可以看看并帮助我在哪里做错了。非常感激!

4

2 回答 2

0

我将 xarray 用于此类事情。为您拥有的每个变量创建 xarray DataArray(您的似乎是 SHIA)。用它创建 DataSet 和相关的 DataArray。不要忘记将坐标变量设置为 Dataset 作为坐标。

见:http: //xarray.pydata.org/en/stable/io.html

您也可以将您的 netcdf / tiff 转换为数据框并再次返回。但除非你不得不这样做,否则我不会推荐这个。因为 netcdf 是多维数据,而数据框将所有数据表示为克隆到一个矩阵。

于 2020-04-03T08:54:01.777 回答
0

我能想到的最简单的方法是使用 GDAL 工具。

# Convert TIF to netCDF
gdal_translate -of netCDF -co "FOMRAT=NC4" ia.tif ia.nc

# Convert SHP to netCDF
gdal_rasterize -of netCDF -burn 1 -tr 0.01 0.01 input.shp output.nc
于 2020-05-28T13:04:22.893 回答