【问题标题】:geodjango get polygon intersections for each modelgeodjango 获取每个模型的多边形交点
【发布时间】:2022-01-15 23:45:32
【问题描述】:

我试图通过商店(点)获取位置(多边形)。我不想将位置的外键引用添加到商店模型中,而是想通过检查交叉点来获取位置。

class Shop(models.Model):
    name = models.CharField(max_length=40)
    location = PointField()
    
    @property
    def point(self):
        return self.location.wkt
    

class Location(models.Model):
    name = models.CharField(max_length=200)
    area = PolygonField()

遍历位置我可以获得我需要的东西,但是我正在寻找更好的方法。

for i in Location.objects.all():
    print(Shop.objects.filter(location__intersects = i.area))

## output: 
<QuerySet [<Shop: Shop object (1)>, <Shop: Shop object (2)>, <Shop: Shop object (4)>]>
<QuerySet [<Shop: Shop object (3)>]>

我尝试使用子查询,但遍历完整的 Location 查询集返回错误 more than one row returned。所以我将限制设置为 1。

loc=Location.objects.all()
shp=Shop.objects.filter(location__intersects=Subquery(loc.values('area')[:1]))

我想将相交的位置附加到我的查询集。

【问题讨论】:

    标签: django django-queryset postgis geodjango


    【解决方案1】:

    通过关注此answer 获得所需的输出。不得不稍作修改。

    Shop.objects.annotate(
        contained_points=
            Location.objects.values('area').filter(
               area__intersects=OuterRef('location')
        )[:1],
    ).values()
    

    【讨论】:

      猜你喜欢
      • 2020-02-23
      • 1970-01-01
      • 2021-12-05
      • 2012-11-01
      • 1970-01-01
      • 2012-11-13
      • 2016-09-06
      • 1970-01-01
      • 2016-09-03
      相关资源
      最近更新 更多