【问题标题】:How to get intersecting geometries with subquery in GeoDjango?如何在 GeoDjango 中获得与子查询相交的几何图形?
【发布时间】:2017-08-10 09:51:44
【问题描述】:

我正在尝试从一个表中获取所有记录,该表的几何与来自同一个表的缓冲几何相交,这是我通过子查询获得的。

我的工作普通 SQL 语句是:

SELECT id FROM table 
WHERE ST_INTERSECTS(geom, (
    SELECT ST_BUFFER(geom, 10) FROM table WHERE id = 1)
);

如何使用 GeoDjango 实现这一点?

编辑:

得到它与以下工作:

records = table.objects.filter(
    geom__intersects = table.objects.filter(pk=1).values('geom')
)

但我仍然缺少缓冲区。
有什么建议吗?

【问题讨论】:

    标签: python django postgis geodjango


    【解决方案1】:

    经过一番研究,我通过以下方式解决了它:

    # First get the geometry i tried to get in the subquery
    tempgeom = table.objects.get(pk=1)
    # Apply the buffer
    tempgeom = tempgeom.geom.buffer(10)
    # Use the buffered geometry to get the records
    records = table.objects.filter(geom__intersects = tempgeom)
    

    我认为有更好的方法,但现在,它有效。

    【讨论】:

      【解决方案2】:

      您的解决方案是正确的@Chris。

      唯一添加的可能是 Django 版本 1.11,其中添加了 Subquery

      基本上,您可以将 PostgreSQL 查询转换为以下内容:

      records = table.objects.filter(
          geom__intersects=Subquery(
              table.objects.get(pk=1).geom.buffer(10)
          )
      )
      

      并避免中间步骤。

      【讨论】:

        猜你喜欢
        • 2012-05-18
        • 1970-01-01
        • 2020-02-23
        • 2013-03-19
        • 2022-01-20
        • 1970-01-01
        • 2013-08-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多