Sqlite根据点信息

时间:2015-08-04 04:42:07

标签: c++ sql sqlite

我有一个包含几个点坐标的表格。

| 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()以获得所需的输出。

提前致谢

2 个答案:

答案 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)