Загруженный tiff Mapbox Studio отображает пустую вертикальную линию на антимеридиане и не распространяется на полюса - PullRequest
0 голосов
/ 25 апреля 2020

У меня есть файл GeoTIFF, который я пытаюсь отобразить в Mapbox Studio, но он отображается с пустой вертикальной линией на антимеридиане (линии даты), и растр не распространяется на полюса, как это должно быть. Файл GeoTIFF был создан в Python из полос массива RGB numpy, которые имеют размеры 1440x721 в диапазоне от -180 до 180 градусов долготы и от 90 до -90 градусов широты. GeoTIFF отлично отображается в QGIS.

Вот фрагмент кода, который создает файл:

driver = gdal.GetDriverByName("GTiff")
ds_out = driver.Create('gfs.t12z.pgrb2.0p25.spd_rgb_10.f012_EPSG_GRIB.tif', 1440, 721, 3, 
gdal.GDT_Byte)
ds_out.SetGeoTransform([-180.125, 0.25, 0, 90.125, 0, -0.25])
ds_out.SetProjection('GEOGCS["Coordinate System imported from GRIB file",DATUM["unknown",SPHEROID["Sphere",6371229,0]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433]]')
ds_out.GetRasterBand(1).WriteArray(red)
ds_out.GetRasterBand(2).WriteArray(green)
ds_out.GetRasterBand(3).WriteArray(blue)
ds_out.FlushCache()
ds_out = None

Вот изображение GeoTIFF, отображаемое в Ma c Предварительный просмотр OSX:

снимок экрана GeoTIFF, отображаемый в Ma c OSX Preview

Вот два представления того, как он отображается в Mapbox Studio:

снимок экрана GeoTIFF, отображаемый в Mapbox Studio, увеличенный

снимок экрана GeoTIFF, отображаемый в Mapbox Studio, увеличенный

Я также попытался изменить проекцию на EPSG: 3857 с помощью gdalwarp перед загрузкой в ​​Mapbox Studio, но он по-прежнему отображается так же.

1 Ответ

0 голосов
/ 01 мая 2020

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

driver = gdal.GetDriverByName("GTiff")
ds_out = driver.Create('gfs.t12z.pgrb2.0p25.spd_rgb_10.f012_EPSG_3857.tif', 
x_size, x_size, 3, gdal.GDT_Byte)
cell_dim = 20037508.34 / 720.0
ds_out.SetGeoTransform([-20037508.34, cell_dim, 0, 20037508.34, 0, -cell_dim])
spatialReference = osr.SpatialReference()
spatialReference.ImportFromEPSG(3857)
ds_out.SetProjection(spatialReference.ExportToWkt())
ds_out.GetRasterBand(1).WriteArray(red)
ds_out.GetRasterBand(2).WriteArray(green)
ds_out.GetRasterBand(3).WriteArray(blue)
ds_out.FlushCache()
ds_out = None
ds_in = None
...