
Spatialite学习笔记.docx
3页Spatialite 学习笔记1、前言Spatialite 是 Sqlite 的空间版本数据库,迈高图的矢量图渲染绘制采用了矢量瓦片的方案,需要将 shp、kml 等输入矢量文件先加载进 Spatialite,建立空间索引后,从数据库截取瓦片矢量数据所以必须对 Spatialite 非常熟悉,才有了这篇学习笔记对 Spatialite 的学习基于http://www.gaia-gis.it/gaia-sins/spatialite-tutorial-2.3.1.html#mbr_cache《A quick tutorial to SpatiaLite - a Spatial extension for SQLite》使用Spatialite-gui.exe(Spatialite-gui 一个 all in one 的 gui 工具,很方便,就一个exe)和Spatialite.exe 作为实例验证工具2、Spatialite:Sqlite 的空间扩展SQLite in its own hasn't the slightest idea of what GEOMETRY is, and cannot do any other operation on it.SQLite 本身并不知道什么是 GEOMETRY,也不能对它进行任何其他操作。
引用《A quick tutorial to SpatiaLite - a Spatial extension for SQLite》中的一句话来说明 Spatialite 与 Sqlite 的关系如上所述中的“GEOMETRY”的是 Spatialite 数据库表中必须的字段,该字段是 BLOB 类型,对 Sqlite 来说它仅仅是一个二进制字段,此外不具备任何意义了但对Spatialite 来说,GEOMETRY 意义非凡,这是它的核心所在在这个字段上 Spatialite 存储了 feature 的全部数据,在该字段上,Spatialite 也扩展了很多函数以支持对 feature 的空间运算、索引等总而言之:Spatialite = Sqlite + GEOMETRY(以下简称几何列)3、关联空间元数据与几何列对 spatialite 而言,空间元数据与几何列同样重要因为空间元数据不但提供了空间参考列(feature 表的空间参考可引用它),更重要的是:空间元数据提供了一系列的数据库约束,使得 spatialite 表成为"一个严格约束且经过良好检查的空间表"(引用至:《A quick tutorial to SpatiaLite - a Spatial extension for SQLite》中的一句话:implementinga strongly constrained and well checked Spatial tab)le。
空间元数据提供的约束如下:1、约束几何列中包含的几何图形具有所有相同的几何类型2、约束几何列任何一个记录都具有相同的SRID上述约束作用于插入和更新spatialite 需要两步实现上述约束需要两部:1、建立 spatialite 数据库时执行 select InitSpatialMetaData()或控制台执行.read init_spatialite-2.3.sql ASCII 而后数据库至少会多出 geometry_columns 和spatial_ref_sys 表(其中 spatial_ref_sys 包括了各种空间参考记录);2、关联空间表几何列与空间元数据,执行:UPDATE tablename SET Geometry = SetSrid(Geometry, 32632); SELECT RecoverGeometryColumn('tablename', 'Geometry',32632,'MULTIPOLYGON', 2);32632 为 spatial_ref_sys 表 auth_srid执行这两行后再geometry_columns 中会为空间表添加一条记录,指定空间表几何列的名称、空间参考id、feature 类型、维度等。
至此,一个空间表才算真正建立。