SQL Server 2008:使用空间数据实现位置智能
2008-04-14 09:53:55 来源:WEB开发网1. 导言
现今的信息工作人员和消费者处理大量不同类型的信息,从电子表格和数据库中的商业数据的传统数据表,到在线的基于媒体的数据例如视频、照片和音乐。近来朝向mash up解决方案(mash up解决方案是指合并从多个来源获得的信息和内容来创建通用的在线应用程序)发展的趋势表明计算机用户使用高度集成的解决方案来利用它们可用的大量信息。
同时,技术优势导致地理服务和设备的发展,包括在线绘制地图解决方案,例如Microsoft® Virtual Earth™,和较便宜的全球定位系统(GPS)解决方案。曾经只用于地理信息系统(GIS)专家的技术现在广泛的应用于每一个人。
这两个因素为软件应用程序带来了新的期望和机遇。地理服务的普遍性,和用户使用数据所采用的混合度的提高意味着这个空间信息只是合成到解决方案中的另一个组件,并且是作出更好决策和提供更高的价值服务的一个基础。
空间数据有多种使用方式,如下面的示例列表所描述的:
· 一个零售商网站可以将所有的存储位置作为一个地图上的点显示出来,并按照所给的邮政编码找到最近的存储位置。
· 一个销售经理可以定义地理销售区域,并使用它们将客户和销售代表匹配起来,并对销售情况进行分析。
· 一个架构师可以为创建一个新的架构制定计划,并将这些计划覆盖到一个给定的站点地图上。
· 一个驱动器可以找到两个位置间的距离,并制定路由路线。
· 一个房地产经纪人可以快速地根据某个客户的要求找到匹配的房子,例如在华盛顿湖岸边的超过20000平方英尺的房子。
· 一个移动应用程序可以找到所有给定位置的10公里范围内的加油站。
这些例子只显示了空间数据集成到软件应用程序中所产生的一些可能案例。
SQL Server 2008通过引入新的空间数据类型提供了对地理数据的支持,你可以使用它来存储和操纵基于位置的信息,SQL Server 2008中的空间支持可以帮助用户通过分析例如下面所示的场景中的位置数据来作出更好的决策:
· 关注于消费者的基于位置的信息
· 基于客户的管理和开发
· 与环境相关的数据的影响、分析和计划
· 公司中的财务和经济分析
· 基于政府的计划和开发分析
· 市场分割和分析
· 科学研究设计和分析
· 房地产开发和分析
这篇白皮书对SQL Server 2008中的全面的空间数据支持做了高层次的介绍,并描述了它的具有高性能的空间能力和位置智能应用程序的可扩展性。
2. 广泛的空间支持
SQL Server 2008通过新的数据类型提供了广泛的空间支持。要理解你可以怎样使用这些数据类型来存储位置智能的数据,你首先需要了解空间数据——特别是地理数据——是怎么工作的。
2.1 空间模型
空间数据是用于显示一个表面的点、线和区域的。一般情况下,这些元素与地球上的实际物理位置有关,所以它们可以被称为地理数据。我们大多数都通过使用地球仪和地图熟悉了这个概念,它们一般显示了多个地理特性和它们的相对位置。
大地测量空间模型
描述一个行星表面位置的困难就在于行星不是平的。地球是一个非常复杂的对象,它可以近似的看作是一个扁椭圆体,一个(稍微)有点平坦的球体。地球的一个准确表示通常是通过地球仪来显示的,在它上面行星表面的位置是通过经度和纬度来表示的,它们是根据从赤道开始和按照相应的国际日界线所测量得到的。这个建立地理位置模型的方法被称作大地测量模型,它提供了一个定义如图1所示的地球仪上的位置和对象的精确方法。现在全球在使用几个不同的大地测量模型,包括英国的国家地图地理系统所使用的Airy 1830 椭球体,和全球的GPS解决方案所使用的WGS84 椭球体。
图1: 一个大地测量模型
平面空间模型
一个大地测量模型提供了最精确的方法来显示地理特性,它使用一个椭圆体并考虑了行星的弯曲程度,这在以前人们必须使用平面地图时要计算距离是非常困难的。过去,使用二维表面或平面是非常方便的,所以在许多平面(平坦)模型中显示的一般都是基于位置的数据。现在要在一个平面二维表面使用地理数据,就要创建一个投影来展平椭球体上的地理对象。有了大地测量模型,就产生了很多用于将地球的地理特性设计到一个平坦的表面上的数学模型,包括Mercator投影、Peters投影,和朗伯正形圆锥投影。图2显示了一个基于Mercator投影的地球平面模型。
图2:一个平面模型
无论使用哪个投影,将一个椭球体上的地理数据转换成平面表面总会导致结果地图上的地理特性方面的一些形状、尺寸或位置(或三者都有)上的失真,这就是为什么在图2中的投影中格陵兰显示如美国一般大小,而事实上它的土地面积要小很多。一般来说,投影的表面面积越大,失真就越严重——地图边缘的地方的失真程度要大于中心位置的失真程度。为此,平面模型用于较小的地理区域比较好,例如单个的国家、州和城镇,或者是没有投影的空间表面,例如内层布置图。
2.2 SQL Server 2008空间数据类型
SQL Server 2008为大地测量空间数据提供了geography数据类型,为平面空间数据提供了geometry数据类型。这两个都是Microsoft .NET 框架通用语言运行时(CLR)类型,并且可以用来存储不同种类的地理元素,例如点、线和多边形。这两个数据类型都提供了你可以用来执行空间操作的属性和方法,例如计算位置间的距离和找出两者间交叉的地理特性(例如一条河流经一个城镇。)
Geography数据类型
geography 数据类型为空间数据提供了一个由经度和纬度联合定义的存储结构。使用这种数据的典型用法包括定义道路、建筑、或者地理特性如可以覆盖到一个光栅图上的向量数据,它考虑了地球的弯曲性,或者计算真实的圆弧距离和空中传播轨道,而这些在一个平面模型中所存在的固有失真引起的错误程度是不可接受的。
Geometry数据类型
geometry 数据类型为空间数据提供了一个存储结构,它是由任意平面上的坐标定义的。这种数据通常是用在区域匹配系统中的,例如由美国政府制定的州平面系统,或者是不需要考虑地球弯曲性的地图和内层布置图。
geometry 数据类型提供了与开放地理空间联盟(OGC)Simple Features Specification for SQL标准结合的属性和方法,使得你可以对geometry数据执行操作以产生行业标准的行为。
2.3 空间数据类型的方法
SQL Server 2008中的两种空间数据类型都提供了一组全面的实例和静态方法,你可以使用它们对空间数据执行查询和操作。例如,下面的代码示例为一个城市地图应用程序创建了两个表;一个包含了城市中区的geometry值,另一个包含了城市中的街道的geometry 值。然后一个查询获得了城市中交叉的街道和区。
CREATE TABLE Districts
(DistrictId int IDENTITY (1,1),
DistrictName nvarchar(20),
DistrictGeo geometry);
GO
CREATE TABLE Streets
(StreetId int IDENTITY (1,1),
StreetName nvarchar(20),
StreetGeo geometry);
GO
INSERT INTO Districts (DistrictName, DistrictGeo)
VALUES ('Downtown',
geometry::STGeomFromText
('POLYGON ((0 0, 150 0, 150 150, 0 150, 0 0))', 0));
INSERT INTO Districts (DistrictName, DistrictGeo)
VALUES ('Green Park',
geometry::STGeomFromText
('POLYGON ((300 0, 150 0, 150 150, 300 150, 300 0))', 0));
INSERT INTO Districts (DistrictName, DistrictGeo)
VALUES ('Harborside',
geometry::STGeomFromText
('POLYGON ((150 0, 300 0, 300 300, 150 300, 150 0))', 0));
INSERT INTO Streets (StreetName, StreetGeo)
VALUES ('First Avenue',
geometry::STGeomFromText
('LINESTRING (100 100, 20 180, 180 180)', 0))
GO
INSERT INTO Streets (StreetName, StreetGeo)
VALUES ('Mercator Street',
geometry::STGeomFromText
('LINESTRING (300 300, 300 150, 50 50)', 0))
GO
SELECT StreetName, DistrictName
FROM Districts d, Streets s
WHERE s.StreetGeo.STIntersects(DistrictGeo) = 1
ORDER BY StreetName
这个查询的结果如下表所示:
StreetName | DistrictName |
First Avenue | Downtown |
First Avenue | Harborside |
Mercator Street | Downtown |
Mercator Street | Green Park |
Mercator Street | Harborside |
3. 高性能的空间数据能力
SQL Server 2008中的空间数据类型作为CLR系统类型来执行。SQL Server 2008增加了数据库中的CLR类型的最大规模,提高了原来在SQL Server 2005中的8000字节的限制,这使得它可以存储非常复杂的空间数据元素,例如通过许多点定义的多边形。
通过在关系表中存储空间数据,SQL Server 2008 使得可以结合空间数据到其他任何商业数据类型中去;这消除了对维护一个单独的只用于空间数据存储的维护要求,并使得可以做高性能查询,它不需要结合从多个外部来源获得的数据。
在SQL Server 2008中对空间索引的支持进一步增强了对空间数据的查询操作。你可以用一个集成在SQL Server数据库引擎中的适合的多级网格索引来检索空间数据。空间索引包含一个基于网格的层级,在其中每一级索引又细分为由上一级所定义的网格区域。一个空间索引的概念模型如图3所示。
图3:一个空间索引
SQL Server查询优化器会作出基于成本的决策,决定对给定的查询使用哪种索引,并且因为空间索引是数据库引擎的一个完整部分,可以作出关于是否使用特殊的空间索引的基于成本的决策,就像其它索引一样。
4. 位置智能的应用程序可扩展性
geography和geometry 数据类型在SQL Server 2008的多个版本中都得到了支持,从个人桌面应用程序到企业级数据存储,使得你可以建立任何规模的地理解决方案。这个广泛的支持将空间数据能力提供给所有种类的应用程序,而不需要具有地理解决方案的昂贵的所有权。
4.1 导入空间数据
geography和geometry 数据类型包括以用于在OGC中所定义的地理数据的已知文本(Well Known Text,WKT)和已知二进制(Well Known Binary,WKB)格式导入和导出数据的方法,还包括普遍使用的地理标示语言(Geographic Markup Language,GML)格式,这使得很容易从支持这些格式的数据源导入地理数据。地理数据很容易从一些政府和商业数据源获得,并且可以相对容易地从许多现有的GIS应用程序和GPS系统中导出。Microsoft保持与一些第三方GIS供应商和地理数据解决方案供应商的紧密关系,这帮助确保SQL Server 2008和广泛的行业标准工具间的强大兼容能力,以用于导入、导出和操纵空间数据。
4.2 使用空间数据
正如在本篇白皮书中已经描述过的,geography和geometry数据类型提供了使你可以用来对你的数据执行空间操作的方法。因为这些数据类型是作为.NET CLR类型来执行的,你可以很容易的创建通过数据可编程性使用SQL Server的空间数据的客户端应用程序,并使用在客户端管理的代码来调用空间类型的实例上的方法。这使得你可以建立强大的应用程序来使用你的空间数据,并将它集成到其它位置智能的应用程序和服务中,例如虚拟地球。
例如,图4显示了一个应用程序,其中从SQL Server 2008获得的空间数据与虚拟地球集成在一起。这个应用程序显示了在某邮政编码区域的普查街区,包括计算了周围的餐厅。在每个街道的餐厅数目,相对于街道的规模产生一个密度值,这在显示区域上显示为从白色阴影(低密度)到红色阴影(密度最高)。
图4:和虚拟地球集成的空间数据
5. 总结
随着地理信息集成到应用程序中变得越来越普遍,应用程序开发人员将越来越需要可以存储和操纵空间数据的数据库系统。随着geography和geometry数据类型的推出,SQL Server 2008为空间数据提供了一个全面的、高性能的和可扩展的数据存储解决方案,并使得所有规模的公司都可以将地理特性集成到它们的应用程序和服务中去。
- ››SQL Server 2008 R2 下如何清理数据库日志文件
- ››sqlite 存取中文的解决方法
- ››SQL2005、2008、2000 清空删除日志
- ››SQL Server 2005和SQL Server 2000数据的相互导入...
- ››sql server 2008 在安装了活动目录以后无法启动服...
- ››使用word强大的搜索和替换功能
- ››sqlserver 每30分自动生成一次
- ››sqlite 数据库 对 BOOL型 数据的插入处理正确用法...
- ››使用Win7自带屏幕录制功能的方法
- ››sql server自动生成批量执行SQL脚本的批处理
- ››使用linux中的quota教程
- ››sql server 2008亿万数据性能优化
更多精彩
赞助商链接