我正在尝试从一个表中获取所有记录,这些表的几何与来自同一个表的缓冲几何相交,我用子查询得到它。
我的工作原理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')
)
但我仍然错过了缓冲区 有什么建议吗?
答案 0 :(得分: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 :(得分:0)
你的解决方案是正确的@Chris。
唯一的补充可能是添加了Subquery
的Django 1.11版。
基本上,您可以将PostgreSQL查询转换为以下内容:
var http = require('http');
var express = require('express'); // Web Framework
var app = express();
var sql = require('mssql'); // MS Sql Server client
var sqlConfig = {
server: '(localdb)\MSSQLLocalDB',
database: 'NodejsApp',
user: 'ra',
password: 'root@123',
port: 1433
}
// Start server and listen on http://localhost:8081/
var server = app.listen(8081, function () {
var host = server.address().address
var port = server.address().port
console.log("app listening at http://%s:%s", host, port)
});
function makeconn() {
var conn = new sql.Connection(sqlConfig);
var req = new sql.Request(conn);
conn.connect(function (err) {
if (err) {
console.log(err);
return;
}
else {
console.log('success');
}
});
}
makeconn();
并避免中间步骤。