无环多边形连接中的Geodjango点

问题描述 投票:0回答:1
class Location(models.Model):
    coordinates = models.PointField()


class Boundary(models.Model):
    geom = models.MultiPolygonField()

我想查询每个位置并包括其包含的边界。边界不重叠,因此每个位置都恰好包含在一个边界中。

我的SQL查询看起来像这样:

SELECT *
FROM
  Location l
  INNER JOIN Boundary b on ST_CONTAINS(b.geom, l.coordinates)

我想避免分别遍历我的边界,例如:

for boundary in Boundary.objects.all():
    Location.objects.filter(coordinates__within=boundary.geom)

似乎是一个显而易见的用例,但我还没有看到任何解决方案。

geodjango
1个回答
0
投票

根据Django文档中的example使用子查询解决了。

from django.db.models import OuterRef, Subquery
sq = Boundary.objects.filter(geom__contains=OuterRef("coordinates"))
points = Location.objects.annotate(boundary=Subquery(sq).values("pk"))
© www.soinside.com 2019 - 2024. All rights reserved.