Sqlite根据点信息生成距离表

Sqlite generate distance table from point information

本文关键字:距离 信息 Sqlite      更新时间:2023-10-16

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

| PointName | XCoor | YCoor |
+-----------+-------+-------+
|    P1     |  X1   |  Y1   |
+-----------+-------+-------+
|    P2     |  X2   |  Y2   |
+-----------+-------+-------+
....

我想生成一个包含两点之间距离的表格。

| Point1Name | Point2Name | Distance |
+------------+------------+----------+
|    P1      |    P2      |  ZZZZZ   |
+------------+------------+----------+
....

为了能够计算两点之间的距离,我启用了动态扩展加载,并使用扩展函数模块进行算术计算。然而,我不太确定是否可以使用任何SQL技巧创建输出表?

我在C++程序中需要这个函数,所以在最坏的情况下,我会尝试用C++的方式来实现它,而不是使用SQL语句。然而,这将需要我使用sqlite3_exec((并定义我的回调函数,而且很可能我最终会在第一个回调函数中运行另一个sqlite3_exec((来获得所需的输出。

提前感谢

这个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语句。

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<->p2和p2<->p1(