Spatial-Yap:基于逻辑的地理信息系统
立即解锁
发布时间: 2025-08-21 01:16:32 阅读量: 2 订阅数: 11 

### Spatial-Yap:基于逻辑的地理信息系统
#### 1. 引言
逻辑编程和关系数据库都基于一阶逻辑,但它们有着不同的目标。逻辑编程(LP)系统侧重于核心编程结构的高效实现,强调控制和统一;而关系数据库管理系统(RDBMS)则专注于数据操作的高效实现,强调索引结构和大规模存储。
为了增强LP系统高效管理大量数据的能力,当前的一个趋势是将LP系统与RDBMS结合,开发耦合演绎数据库系统,如XSB和MYDDAS。这种耦合不仅扩展了逻辑系统处理大量数据的能力,还能执行更大的程序,将RDBMS作为执行逻辑代码的抽象机器。
目前,大多数耦合系统仅允许在数据库系统中存储Datalog事实,无法访问复合术语。然而,近年来RDBMS不断发展,能够存储和管理更复杂的信息,其中空间数据是增长迅速且有趣的一类复杂数据。本文将介绍演绎数据库框架在空间数据处理中的应用,特别是在空间数据建模、空间查询语言和空间数据挖掘等方面。
#### 2. 空间数据库
在过去的几年里,空间数据在计算机科学的许多领域中的应用不断增加。空间数据库是过去二十年的活跃研究领域,应用范围广泛,从全球定位系统(GPS)到医学应用等。空间数据的出现促使RDBMS进行更新,以支持空间参考数据,并提供相关的操作功能。
开放地理空间联盟(OGC)提出了“OpenGis Simple Features Specification for SQL”(OGC99)标准,用于扩展SQL - 92,定义了支持简单地理空间特征集合存储、检索、查询和更新的标准SQL模式。
空间类型(或几何类型)在OGC99标准中有明确定义,主要包括三种简单类型:点(Point)、线(Linestring)和多边形(Polygon),以及几何集合类型(Geometry Collection)。具体如下:
- **点(Point)**:零维几何类型,代表坐标系中的一个位置,有两个坐标 (x, y)。
- **线(Linestring)**:一维几何类型,以点序列存储,通过线性插值表示。
- **多边形(Polygon)**:二维空间对象,定义一个平面表面,由一个外环和零个或多个内环组成,内环可定义多边形内的孔洞。
空间数据库系统需要在逻辑层面将几何信息的表示和操作与传统数据集成,同时在物理层面提供高效的存储和处理支持。常见的实现方式是基于RDBMS的可扩展性,例如Oracle Spatial和PostGIS。
#### 3. 空间演绎数据库系统
Spatial Yap是多个组件之间复杂接口的产物,主要由Yap Prolog系统和MySQL RDBMS通过MYDDAS接口(Mysql/Yap Deductive DAtabase System)耦合而成。MYDDAS接口负责将这两个系统连接起来,它能将逻辑查询透明地转换为SQL语句,将MySQL属性转换为Yap术语,并利用YapTab表引擎解决涉及数据库目标的递归查询。
为了构建空间演绎数据库系统,对MYDDAS接口进行了扩展,以支持MySQL几何类型。几何对象以二进制序列的形式存储在MySQL关系中,类似于知名二进制(WKB)格式。此外,还需要两个关键组件:空间运算符库和可视化组件。
##### 3.1 空间术语
对MYDDAS接口进行扩展,以支持空间术语。空间术语以二进制序列的形式存储在MySQL关系中,可以使用OGC标准的asBinary运算符进行检索,但由于MySQL在存储空间类型时会添加额外信息,因此直接忽略这些额外信息进行检索。
空间术语的定义类似于OGC的知名文本(Well Known Text),并符合以下语法:
```plaintext
SpatialTerm = Point
| LineString
| Polygon
| MultiPoint
| MultiLineString
| MultiPolygon
| GeometryCollection ;
Point = "point" PointTerm ;
LineString = "linestring(" PointTermList ")" ;
Polygon = "polygon(" PointTermListList ")" ;
MultiPoint = "multipoint(" PointTermList ")" ;
MultiLinestring = "multilinestring(" PointTermListList ")" ;
MultiPolygon = "multipolygon(" PointTermListListList ")" ;
GeometryCollection = "geometrycollection(" SpatialTermList ")" ;
PointTerm = "(" Number "," Number ")" ;
```
在Spatial - Yap中,空间术语可以通过查询数据库表及其几何属性创建,也可以由程序员文本创建,或者通过应用空间谓词生成。同时,Spatial - Yap还可以将空间术语持久存储在MySQL数据库关系中。
##### 3.2 简单图形对空间数据的可视化
在处理空间数据时,图形化表示至关重要。对于地理信息系统(GIS)用户来说,将地图表示为一组Prolog术语是不可接受的,更重要的是能够以图形方式表示空间操作,如两个多边形的交集。因此,任何空间数据库系统都需要一个可视化组件来支持用户驱动的空间分析和空间查询结果集的表示。
在Spatial - Yap的背景下,开发了一个图形接口Simple Graphics(SG)。SG接收空间术语,并在交互式窗口中绘制它们,用户可以进行缩放、平移和截图操作。此外,可视化原语还可以创建图像并将其导出为Postscript文件。
SG的核心系统使用几何对象栈来处理Prolog回溯,但绘图时将其视为先进先出结构。例如,要基于MySQL关系“europe”构建一个显示欧洲国家的窗口,该关系的模式为:name varchar(30), pop bigint, currency varchar(30), geom geometry,可以使用以下代码:
```prolog
:- use_module(library(myddas)).
:- use_module(library(simplegraphics)).
:- db_open(mysql,’localhost’/’geodb’,’user’,’passwd’).
:- db_import(europe,europe).
draw_bas
```
0
0
复制全文
相关推荐









