2017-08-10 71 views
2

我試圖從一張表中獲取所有記錄,這些表的幾何與來自同一張表的緩衝幾何圖形相交,我通過子查詢得到這些記錄。如何在GeoDjango中使用子查詢獲取相交幾何?

我的工作普通的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') 
) 

但我仍然失蹤的緩衝區。
有什麼建議嗎?

回答

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) 

我認爲有更好的方法,但現在,它的工作原理。

1

您的解決方案是正確的@Chris。

唯一的補充可能是添加了Subquery的Django版本1.11。

基本上你可以在你的PostgreSQL的查詢翻譯爲以下幾點:

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

,避免中間環節。

相關問題