Я работаю над проектом Django, в котором я пытаюсь получить все растровые данные из моей базы данных.
Вот моя модель в models.py
from django.contrib.gis.db import models
class RasterWithName(models.Model):
raster = models.RasterField()
name = models.TextField()
Вот метод, который я использую для получения всех строк из моей базы данных в оболочке django.
Сначала мне нужно выполнить python manage.py shell
, а затем запустить приведенный ниже код, одну за другой:
all_objects = RasterWithName.objects.all()
first_object_in_database = all_objects[0]
print(first_object_in_database)
Он печатает:
RasterWithName object (1)
Кроме того, запустив следующую строку,
print(type(first_object_in_database))
печатает:
<class 'geo.models.RasterWithName'>
Затем я запускаю две строки ниже:
raster = first_object_in_database.raster
print(type(raster))
Что печатает:
<class 'django.contrib.gis.gdal.raster.source.GDALRaster'>
Как я могу преобразовать этот GDALRaster
объект в более известный объект, такой как gdal Dataset
(который можно импортировать как это: from osgeo.gdal import Dataset
) или xarray Dataset
(что можно импортировать так: from xarray import Dataset
)?
#################### ###############################
EDIT # 1:
####################################################################### ########
Благодаря Val , вот рабочее решение:
all_objects = RasterWithName.objects.all()
first_object_in_database = all_objects[0]
my_raster = first_object_in_database.raster
gdal_raster = gdal.Open(raster.name)
print(type(gdal_raster))
, которое печатает:
<class 'osgeo.gdal.Dataset'>
Хо wever, я не думаю, что это было бы очень оптимально, поскольку он просто открывает файл по его пути в моем локальном хранилище.