GeoDjango tif导入“需要在写入模式下打开光栅以更改值错误”

时间:2017-02-16 22:20:12

标签: django raster gdal geodjango postgis-raster

我正在尝试通过Django Shell将光栅文件导入PostGIS。我在我的模型中创建了一个类,看起来像这样:

class MaxentModel(gismodels.Model):
    birdname = models.ForeignKey('BirdName', null=True)
    model_probability = gismodels.RasterField(srid=4326, null=True)

然后我想尝试使用文档中的这些命令导入第一个栅格数据(在Django shell中尝试过):

>>>from validation_birds.models import BirdName, MaxentModel
>>>taxon_name_object = BirdName.objects.filter(name_cz='name of the bird')[0]
>>>rast = MaxentModel(birdname=taxon_name_object, model_probability='/path/to/file/picture.tif')
>>>rast.save()

但是使用rast.save()异常会引发错误:

raise GDALException('Raster needs to be opened in write mode to change values.')
django.contrib.gis.gdal.error.GDALException: Raster needs to be opened in write mode to change values.

在写入模式下需要打开栅格是什么意思以及为什么GDAL想要更改值(是因为某些设置)?我怎样才能克服这个错误?

我找不到有关此例外的一些信息,所以我很乐意提供任何帮助

1 个答案:

答案 0 :(得分:2)

所以我找到了解决方案。我对文档感到困惑,但需要创建GDALRaster对象,此对象可用于geodjango中的RasterField。这是一个代码:

>>> from validation_birds.models import BirdName, MaxentModel
>>> taxon_name_object = BirdName.objects.filter(name_cz='name of the bird')[0]
>>> from django.contrib.gis.gdal import GDALRaster
>>> gdal_raster = GDALRaster('pathtofile.tif', write=True)
>>> rast = MaxentModel(birdname=taxon_name_object, model_probability=gdal_raster)
>>> rast.save()