热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开源空间数据引擎MsSQLSpatial简介_MySQL

开源空间数据引擎MsSQLSpatial简介
MsSQLSpatial是一个开源空间数据引擎项目,本文通过介绍这一项目的同时,也对基于MS SQLServer 2005 CLR Integration(公共语言运行时集成,下文简称“CLR集成”)技术实现一个空间数据引擎及优缺点做一些简单分析。

MsSQLSpatial项目

这个项目遵从于OGC Simple Features Specification for SQL Revision 1.1,基于两个着名的.NET平台下的开源GIS项目NetTopologySuite(NetTopologySuite是JTS Topology Suite的C#/.net版本,简称NTS)和SharpMap(一个基于.net 2.0的Map渲染类库)来构建,所以划分为NTS、SharpMap和SqlClr三大模块,SqlClr这部分为CLR集成实现代码。主要实现了基于SQLServer 2005 CLR集成的空间数据库相关封装。当前提供了一个命令行工具来支持shape文件和PostGIS的数据导入。

开发语言:C Sharp 2.0。

目前版本:Release 0.1.RC2。

许可协议:GNU LESSER GENERAL PUBLIC LICENSE Version 2.1。

官方网址:http://www.codeplex.com/Wiki/View.aspx?ProjectName=MsSQLSpatial。

MsSQLSpatial官方给的说法是一个MS SQLServer2005空间扩展(Spatial Extensions),确切地说它应该是一个专属于SQLServer2005的空间数据引擎。所谓的空间数据引擎,其实就是基于关系型数据库的空间数据库技术的软件实现,实质上是个封装了空间领域知识的中间件,GIS等应用层通过这个中间层与关系型数据库交互。

典型的莫过于GIS开发者都比较熟悉的ESRI ArcSDE,Supermap SDX+等等。那么,这个MsSQLSpatial与以前的空间数据引擎差别在哪里?下文我们将讨论这个问题。(实际上Oracle 10g也支持CLR集成,但在此不进行相关比较。)

基于CLR集成的空间数据引擎

显而易见,每一次数据库技术与数据访问技术的进步发展都会带动空间数据存储管理解决方案的进步与发展,就好像关系型数据库上BLOB数据类型的支持才使得空间数据库实现了空间特征数据与属性数据一体化存储管理。

关于MS SQLServer 2005有哪些新特性,在这里笔者就不再赘述,相信微软已做了大量宣传。

且不管广告如何,作为一个与整个.NET平台紧密集成的全新一代的数据库产品,我们更关心它的新特性会给GIS最重要的组成部分之一“空间数据库技术”带来什么样的解决方案。这个关键,就是它的“CLR集成”。通过宿主Microsoft.net Framework 2.0公共语言运行时 (CLR),可以在SQLServer 2005上利用.net Framework类库和任何如C#、VB、.net、C++/CLI等CLR语言来开发数据库应用,扩展用户自己的类型系统和聚合函数。许多之前在SQLServer 2000上用T-SQL或扩展存储过程等编程模型难以实现的或无法实现的任务现在可以用托管代码来完成,譬如几何计算这样具有复杂逻辑的计算密集型任务。

在空间数据库的设计问题上,没有CLR集成技术的RDBMS例如SQLServer2000,在涉及查询脚本的空间表达时就出现了问题,T-SQL语句难以做到空间关系和属性特征联合查询。

因此,空间索引和以二进制方式存储的空间特征数据都必须通过数据访问接口获取出来映射到空间数据引擎这个中间层还原成空间对象才能完成空间关系的判断。还有点不妙的就是每次涉及空间分析的操作都会从空间数据库服务器中取出一部分冗余的结果集,如果在I/O密集的情况下则更糟。

SQLServer 2005上,非常显着的一个特点是,这类基于CLR集成的开发的.NET应用程序集是直接部署在数据库服务器上,SQLServer2005在进程内宿主.net CLR,外部GIS应用层可直接与空间数据库交互时使用T-SQL语句操作。

我们来看MsSQLSpatial的解决方案, MsSQLSpatial用CLR表值函数封装了一组简单而有效的空间索引实现,在这些CLR表值函数中实习了OGC简单特征规范定义的用于描述各种对象的空间关系的空间关系谓词,由NTS类库提供底层的空间对象和空间关系算子,在数据库进程内部直接完成空间查询操作。

SQL Server 2005数据库CLR集成技术代码和数据的紧密结合使我们能够充分利用服务器的处理能力。而且因为它减少了数据层和中间层之间的流量,CLR 函数也可以利用到SQLServer 2005查询处理器的并行和优化功能。但如果在空间数据引擎中完全封装,这无异于把密集计算的任务完全放在空间数据库服务器上,在空间数据库的I/O量与计算资源之间如何取舍,这是值得斟酌之处。

开源空间数据引擎MsSQLSpatial体系架构

MsSQLSpatial展望

MsSQLSpatial是开源GIS网站Freegis.org于2006年8月份加入的一个新开源项目,更新比较频繁。正由于其刚刚开始,可能作者忙于调整架构和实现相关应用,所以相关文档和介绍相当的少,对其长远的发展规划和定位还不得而知。

这个新生的开源项目目前还比较简单,没有提供构建高级空间索引的能力,进行空间查询时其仅是对最小外包矩形(MBR)比较后获得粗略子集后就通过一个委托调用NTS中空间对象的操作算子进行精确的匹配计算以获得目标结果集。

MsSQLSpatial目前也没有栅格数据相关部分,要达到海量矢量/栅格管理,拓扑关系支持、长事务、日志、多用户并发、权限控制等商业层次要求的空间数据引擎还有很长的距离。不过在这个技术体系框架之下,这个的紧密捆绑目前最好的商业关系型数据库之一与采用先进的数据库编程模型的开源空间数据库项目,还是很具发展潜力的,我们期待其后继版本能够带来更多的东西。

推荐阅读
  • PHP组合工具以及开发所需的工具
    本文介绍了PHP开发中常用的组合工具和开发所需的工具。对于数据分析软件,包括Excel、hihidata、SPSS、SAS、MARLAB、Eview以及各种BI与报表工具等。同时还介绍了PHP开发所需的PHP MySQL Apache集成环境,包括推荐的AppServ等版本。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • JavaScript简介及语言特点
    本文介绍了JavaScript的起源和发展历程,以及其在前端验证和服务器端开发中的应用。同时,还介绍了ECMAScript标准、DOM对象和BOM对象的作用及特点。最后,对JavaScript作为解释型语言和编译型语言的区别进行了说明。 ... [详细]
  • 本文介绍了禅道作为一款国产开源免费的测试管理工具的特点和功能,并提供了禅道的搭建和调试方法。禅道是一款B/S结构的项目管理工具,可以实现组织管理、后台管理、产品管理、项目管理和测试管理等功能。同时,本文还介绍了其他软件测试相关工具,如功能自动化工具和性能自动化工具,以及白盒测试工具的使用。通过本文的阅读,读者可以了解禅道的基本使用方法和优势,从而更好地进行测试管理工作。 ... [详细]
  • loader资源模块加载器webpack资源模块加载webpack内部(内部loader)默认只会处理javascript文件,也就是说它会把打包过程中所有遇到的 ... [详细]
  • asp中如何嵌入python的简单介绍
    本文目录一览:1、如何在IIS中执行Python脚本 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
author-avatar
突击手丶罪域
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有