【问题标题】:Pass a list to geodjango multipolygon lookup将列表传递给 geodjango 多面体查找
【发布时间】:2020-11-10 11:41:41
【问题描述】:

我有一个点列表,如下所示:

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)...

【问题讨论】:

    标签: django geodjango


    【解决方案1】:

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

    我将点列表合并并创建了一个 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-24
      • 1970-01-01
      • 1970-01-01
      • 2016-02-25
      • 1970-01-01
      • 1970-01-01
      • 2014-03-11
      相关资源
      最近更新 更多