将列表传递给geodjango多多边形查找

时间:2020-11-10 11:41:41

标签: django geodjango

我列出了如下要点:

points_list = [<Point object at 0x7f92b96103c8>, <Point object at 0x7f92b96105e8>]

现在,我想使用此列表在MultipolygonField上进行过滤。我无法将整个列表传递给多多边形查询,因为出现错误Tuple too long for lookup covers

现在我要做的就是简单地遍历列表,并将过滤的多面对象保存在新列表中,例如:

下面说geom是一个multipolygon字段

multipolygon_list = []
for point in points_list:
    dam_obj = DAM.objects.filter(geom__contains=point).values_list('id', flat=True)
    multipolygon_list.append(dam_object)

现在,我要删除上面的循环,所有这些都是单个查询。有没有办法将其删除? 像我不能做下面的事情吗?

DAM.objects.filter(geom__contains=points_list)...

1 个答案:

答案 0 :(得分:0)

在找到解决方案时回答我自己的问题。 所以我想删除循环。

我合并了点列表,并创建了一个Multipoint,然后将该多点传递给查找。

from django.contrib.gis.db.models import Union
single_multipoint = Union(points_list)

# pass the single multipoint to the lookup.
DAM.objects.filter(geom__contains=single_multipoint)