我有一个包含几个点坐标的表格。
| PointName | XCoor | YCoor |
+-----------+-------+-------+
| P1 | X1 | Y1 |
+-----------+-------+-------+
| P2 | X2 | Y2 |
+-----------+-------+-------+
....
我想生成一个包含两点之间距离的表格。
| Point1Name | Point2Name | Distance |
+------------+------------+----------+
| P1 | P2 | ZZZZZ |
+------------+------------+----------+
....
为了能够计算两点之间的距离,我启用了动态扩展加载,并使用extension-functions module进行算术计算。但是,我不太确定是否可以使用任何类型的SQL技巧创建输出表?
我在C ++程序中需要这个功能,所以在最坏的情况下,我会尝试用C ++方式而不是使用SQL语句。但是,这需要我使用sqlite3_exec()并定义我的回调函数,最有可能的是我最终会在第一个回调函数中运行另一个sqlite3_exec()以获得所需的输出。
提前致谢
答案 0 :(得分:3)
这个SQL应该为你生成一个表:
create table distances as
select a.PointName as Point1Name, b.PointName as Point2Name,
sqrt((a.XCoor - b.XCoor) * (a.XCoor - b.XCoor) + (a.YCoor - b.YCoor) * (a.YCoor - b.YCoor)) as Distance
from points a, points b
where a.rowid != b.rowid
你真的需要在桌子上吗?您可以在想要获取值时执行select语句。
答案 1 :(得分:2)
SELECT
a.PointName AS Point1Name,
b.PointName AS Point2Name,
POWER(POWER(a.xCoor - b.xCoor, 2) + POWER(a.yCoor - b.yCoor, 2), 1 / 2) AS Distance
FROM
Points a, Points b
WHERE
a.PointName <> b.PointName
;
将每个距离两次(p1&lt; - &gt; p2和p2&lt; - &gt; p1)