我正在尝试将.grib文件转换为要在GIS(特别是ArcGIS)中使用的GeoTIFF,但是在使图像正确投影方面遇到困难。我已经能够使用Python中的GDAL创建一个GeoTIFF,它可以显示数据,但是当导入ArcGIS时却没有显示在正确的位置。结果图像如下。
我正在使用的数据可以从https://gimms.gsfc.nasa.gov/SMOS/SMAP/L05/
下载。我正在尝试将数据投影到WGS84 Web Mercator(辅助球),EPSG:3857
注意:我已经尝试通过创建应该能够使用.grib数据的栅格马赛克通过ArcMap引入数据,但是我没有任何运气。
更新:我也尝试过使用“项目栅格”工具,但是ArcGIS不喜欢来自.grib文件的默认投影并给出错误。
我正在使用的代码:
import gdal
src_filename = r"C:\att\project\arcshare\public\disaster_response\nrt_products\smap\20150402_20150404_anom1.grib"
dst_filename = r"C:\att\project\arcshare\public\disaster_response\nrt_products\smap\smap_py_test1.tif"
#Open existing dataset
src_ds = gdal.Open(src_filename)
#Open output format driver, see gdal_translate --formats for list
format = "GTiff"
driver = gdal.GetDriverByName( format )
#Output to new format
dst_file = driver.CreateCopy( dst_filename, src_ds, 0 )
#Properly close the datasets to flush to disk
dst_ds = None
src_ds = None
我不太熟悉Python中的GDAL或GDAL,因此将不胜感激任何帮助或提示。
答案 0 :(得分:0)
类似的事情应该将您的本机坐标转换为所需的投影。尚未测试。 (可以按纬度而不是纬度)。
from cfgrib import xarray_store
from pyproj import Proj, transform
grib_data = xarray_store.open_dataset('your_grib_file.grib')
lat = grib_data.latitudes.value
lon = grib_data.longitudes.value
lon_transformed, lat_transformed = transform (Proj(init='init_projection'),
Proj(init='target_projection', lon, lat)
答案 1 :(得分:0)
尝试使用gdal.Translate(在Python中)或gdal_translate(从命令行)。以下是我过去如何使用每种方法的两个示例:
选项1:Python方法
from osgeo import gdal
# Open existing dataset
src_ds = gdal.Open(src_filename)
# Ensure number of bands in GeoTiff will be same as in GRIB file.
bands = [] # Set up array for gdal.Translate().
if src_ds is not None:
bandNum = src_ds.RasterCount # Get band count
for i in range(bandNum+1): # Update array based on band count
if (i==0): #gdal starts band counts at 1, not 0 like the Python for loop does.
pass
else:
bands.append(i)
# Open output format driver
out_form= "GTiff"
# Output to new format using gdal.Translate. See https://gdal.org/python/ for osgeo.gdal.Translate options.
dst_ds = gdal.Translate(dst_filename, src_ds, format=out_form, bandList=bands)
# Properly close the datasets to flush to disk
dst_ds = None
src_ds = None
选项2:命令行gdal_translate(从Python调用)方法
import os
# Open output format driver, see gdal_translate --formats for list
out_form = "GTiff"
# Pull out specific band of interest
band=3
# Convert from GRIB to GeoTIFF using system gdal_translate
src_ds = src_filename
dst_ds = dst_filename
os.system("gdal_translate -b %s -of %s %s %s" %(str(band), out_form, src_ds, dst_ds))
过去我在使用选项2创建多波段GeoTiff时遇到了麻烦,因此我建议尽可能使用选项1。