Как создать объект gdal.Dataset или xarray.Dataset из объекта django .contrib.gis.gdal.GDALRaster? - PullRequest
5 голосов
/ 05 августа 2020

Я работаю над проектом 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, я не думаю, что это было бы очень оптимально, поскольку он просто открывает файл по его пути в моем локальном хранилище.

...