Page 168 - 《软件学报》2026年第3期
P. 168
刘孟怡 等: 基于大语言模型的空间数据库自然语言查询转换方法 1131
根据空间对象与查询范围的关系, 空间范围查询可分为如下两类.
(1) 相交查询, 返回与查询地点具有非空交集的所有空间对象, 如检索穿过某一区域的道路或河流. 该类查询
需要的实体信息为空间关系和查询地点, 运算符为 intersects, 结构化语言模型为:
query <relation> feed filter [.GeoData intersects <location>] consume;
(2) 包含查询, 提取完全位于查询范围内的空间对象, 如查询某区域内的建筑物. 该类查询需要的实体信息为
空间关系和查询地点, 运算符为 within, 结构化语言模型为:
query <relation> feed filter [.GeoData within <location>] consume;
最近邻居查询需要的实体信息为空间关系、查询地点和最近邻居数, 运算符为 creatertree 和 distancescan. 运
算符 creatertree 为空间关系构建 R 树索引. 运算符 distancescan 根据查询地点、存储在 R 树中的对象和最近邻居
数 k, 返回 R 树中对象距离查询地点的 k 个最近邻居. 结构化语言模型为:
query <relation> creatertree [GeoData] <relation> distancescan [<location>, <k>] consume;
空间 Join 查询的核心在于基于空间关系 (如位置、距离等) 进行连接, 包括如下具体形式.
(1) 基于位置关系的 Join, 返回两个空间对象集合中所有满足空间相交条件的对象对, 例如分析每个行政区的
公园. 该类查询需要的实体信息为空间关系, 运算符为 symmjoin 和 intersects. 运算符 symmjoin 将两个空间关系的
元组结合起来, 等同于 SQL 中的 JOIN 关键字. 运算符 intersects 用于构成 symmjoin 运算符的连接条件. 结构化语
言模型为:
query <relation1> feed {a} <relation2> feed {b} symmjoin [.GeoData_a intersects ..GeoData_b] consume;
(2) 基于距离关系的 Join, 返回两个空间对象集合中距离在给定阈值内的对象对, 例如查找距离工业园区一定
范围内的住宅区. 该类查询需要的实体信息为空间关系, 运算符为 symmjoin 和 distance. 运算符 distance 用于构成
symmjoin 运算符的连接条件. 结构化语言模型为:
query <relation1> feed {a} <relation2> feed {b} symmjoin [distance (.GeoData_a, ..GeoData_b) ≤ <d>] consume;
根据聚合类型的不同, 空间聚合查询包括如下典型形式.
(1) 数量统计, 统计与查询地点相交的空间对象数量, 例如评估某一生态保护区内的树木分布密度. 该类查询
需要的实体信息为空间关系和查询地点, 运算符为 intersects 和 count, 结构化语言模型为:
query <relation1> feed extend [Cnt: fun(t: TUPLE) <relation2> feed filter [.GeoData intersects attr(t, GeoData)]
count] consume;
(2) 总和统计, 计算空间对象集合中与查询地点相交部分的面积总和, 例如估算某一洪水区的受灾土地面积.
该类查询需要的实体信息为空间关系和查询地点, 运算符为 intersection 和 sum, 结构化语言模型为:
query <relation> feed extend [IntersectionArea: area ( intersection (.GeoData, <location>))] sum [IntersectionArea];
(3) 最大值统计, 返回空间对象集合中, 与另一集合对象相交数量最多的对象, 例如查询南京市中拥有最多公
园的行政区. 查询需要的实体为空间关系, 运算符为 intersects、sortby 和 head, 结构化语言模型为:
query <relation1> feed extend [Cnt: fun(t: TUPLE) <relation2> feed filter [.GeoData intersects attr (t, GeoData)]
count] sortby [Cnt desc] head [1] consume;
结构化语言模型的设计基于两个关键原则: 查询逻辑的普适性和功能映射的灵活性. 查询逻辑是空间数据查
询的基础, 它描述了查询的目标和过程, 具有很强的通用性. 此外, 不同空间数据库系统在运算符和函数的命名、
参数形式上可能有所不同, 但功能本质上是相通的. 因此, 只要目标空间数据库系统具备类似功能的运算符和函
数, 上述构造的结构化语言模型即可通过简单的运算符和函数替换, 适配新系统. 以 PostGIS 系统为例, 在结构化
语言模型中, 和 SECONDO 系统的对应关系如表 3 所示. 在 PostGIS 的 CREATE 和 DROP 语句中, <object> 代表
操作对象, 例如 FUNCTION、INDEX、TABLE 和 TYPE. 根据表 3 可得 PostGIS 的范围查询的结构化语言模型为:
SELECT * FROM <relation> WHERE ST_Intersects(<relation> .GeoData, <location>);
当转换最近邻居查询的自然语言时, PostGIS 使用的运算符为 ST_Distance, ORDER BY 和 LIMIT. ST_Distance

