小编Bul*_*lva的帖子

GeoDjango tif 导入,带有“需要以写入模式打开栅格才能更改值错误”

我正在尝试通过 Django Shell 将光栅文件导入 PostGIS。我在我的模型中创建了一个类,如下所示:

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

然后我想尝试从文档中使用这些命令导入第一个栅格数据(在 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()
Run Code Online (Sandbox Code Playgroud)

但是使用 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.
Run Code Online (Sandbox Code Playgroud)

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

我找不到有关此异常的一些信息,因此我很乐意为您提供帮助

django raster gdal geodjango postgis-raster

5
推荐指数
1
解决办法
511
查看次数

自定义标签,例如使用 django-filter

我有观察者模型,它通过 OneToOneRelation 扩展用户模型。我对具有观察者外键的模型清单进行了过滤。这是 models.py 代码:

\n\n
class Observer(models.Model):\n    user = models.OneToOneField(User, on_delete=models.CASCADE)\n    rating = models.IntegerField(default=0)\n    bird_ratings = models.ManyToManyField(\'BirdName\', through=\'BirdRatings\')\n\nclass Checklist(gismodels.Model):\n    date = models.DateField()\n    time_start = models.TimeField(null=True)\n    time_end = models.TimeField(null=True)\n    site_name = models.CharField(max_length=200)\n    municipality = models.CharField(max_length=200)\n    observer = models.ForeignKey(Observer, null=True, default=\'\')\n    other_observers = models.CharField(max_length=150, default=\'\')\n    note = models.CharField(max_length=2000)\n    location_note = models.CharField(max_length=2000, default=\'\')\n    position = gismodels.PointField(null=True, srid=4326)\n    created = models.DateTimeField(db_index=True, null=True)\n    rating = models.IntegerField(default=0)\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后我在filters.py中创建了ChecklistFilter类:

\n\n
class ChecklistFilter(django_filters.FilterSet):\n    date = DateFromToRangeFilter(label=\'Datum pozorov\xc3\xa1n\xc3\xad\', widget=RangeWidget(attrs={\'display\': \'inline\'}))\n    #groups = django_filters.ModelMultipleChoiceFilter(queryset=User.objects.filter(), widget=forms.CheckboxSelectMultiple)\n    created = DateFilter(label=\'Datum …
Run Code Online (Sandbox Code Playgroud)

django django-models django-forms django-filter modelchoicefield

4
推荐指数
1
解决办法
4707
查看次数

优雅地迭代列表或字典

我有一个变量(来自数据库的对象).在某些情况下,这种变量可以是类型列表在某些情况下和字典.

如果变量是列表,则循环标准:

for value in object_values:
    self.do_something(value)
Run Code Online (Sandbox Code Playgroud)

变量的标准,如果变量是字典:

for key, value in object_values.items():
    self.do_something(value)
Run Code Online (Sandbox Code Playgroud)

我可以使用instanceof()两种检查类型,但是我仍然需要两个函数或if两个for循环.我现在if有条件调用两个函数中的一个,一个用于迭代作为列表(例如iterate_list()),第二个用于迭代作为字典(例如iterate_dict()).

有没有更好的选择如何优雅和更pythonic方式解决问题,我不知道变量将是列表或字典?

python dictionary list

2
推荐指数
1
解决办法
358
查看次数

用于训练模型的 Keras F1 得分指标

我是 keras 新手,我想用 F1-score 作为指标来训练模型。

\n\n

我遇到了两件事,一是我可以添加回调,二是使用内置的指标函数\n这里,它说指标函数将不会用于训练模型。那么,这是否意味着我可以metrics在编译模型时进行任何争论?\n具体来说,

\n\n
model.compile(optimizer=\'rmsprop\',\n    loss=\'binary_crossentropy\',\n    metrics=[\'accuracy\'])\n
Run Code Online (Sandbox Code Playgroud)\n\n

在上述情况下,即使准确性作为指标传递,它也不会用于训练模型。

\n\n

第二件事是使用此处定义的回调,

\n\n
import numpy as np\nfrom keras.callbacks import Callback\nfrom sklearn.metrics import confusion_matrix, f1_score, precision_score, recall_score\nclass Metrics(Callback):\ndef on_train_begin(self, logs={}):\n self.val_f1s = []\n self.val_recalls = []\n self.val_precisions = []\n\ndef on_epoch_end(self, epoch, logs={}):\n val_predict = (np.asarray(self.model.predict(self.model.validation_data[0]))).round()\n val_targ = self.model.validation_data[1]\n _val_f1 = f1_score(val_targ, val_predict)\n _val_recall = recall_score(val_targ, val_predict)\n _val_precision = precision_score(val_targ, val_predict)\n self.val_f1s.append(_val_f1)\n self.val_recalls.append(_val_recall)\n self.val_precisions.append(_val_precision)\n print \xe2\x80\x9c \xe2\x80\x94 val_f1: %f \xe2\x80\x94 val_precision: %f \xe2\x80\x94 val_recall %f\xe2\x80\x9d …
Run Code Online (Sandbox Code Playgroud)

python deep-learning keras tensorflow

0
推荐指数
1
解决办法
5534
查看次数