如何从Django.contrib.gis.gdal.gdalMaster对象创建gdal.Dataset或xarray.Dataset对象?

2024-06-16 19:06:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做一个Django项目,在这个项目中,我试图从我的数据库中获取所有光栅数据

这是我在models.py中的模型

from django.contrib.gis.db import models
class RasterWithName(models.Model):
    raster = models.RasterField()
    name = models.TextField()

下面是我用来从django的shell中的数据库中获取所有行的方法

首先,我必须执行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

现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场##############

编辑‌ #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'>

但是,我认为这不是很理想,因为它只是从本地存储上的路径打开文件


Tags: infromobjectsobjectmodelsall现场database