技术开发 频道

SQL Server 2008使用空间数据实现位置智能

【IT168 技术文档】
SQL Server 2008:使用空间数据实现位置智能
SQL Server 技术文档

作者:Graeme Malcolm (内容主管)
技术审核员:Joanne Hodgins, Ed Katibah, Isaac Kunen, 以及Michael Rys
项目编辑:Joanne Hodgins


发布日期:2007年8月
应用产品:SQL Server 2008

概述:随着商业客户和最终消费者处理大量数据的能力不断增强,再加上数字地图和利用三维地理空间的应用程序不断改进,都使得我们迫切的需要对地理信息数据进行分析和决策。Microsoft SQL Server™ 2008对于空间数据提供了支持,从而通过对SQL Server 数据库中存储的位置数据进行视觉分析,最终帮助您做出更好的决定。

版权

该白皮书为初步文档,可能会在所述软件进行最后商业发布之前做完全修改。

本文档所包含的信息代表了在发布之日,Microsoft Corporation(微软公司)对所讨论问题的当前看法。因为Microsoft必须顺应不断变化的市场条件,故不应将本文档理解为Microsoft一方的承诺,Microsoft不保证所给出的信息在发布之日以后的准确性。

本白皮书仅用于提供信息。Microsoft对本文档中的信息不做任何明示、默示或法定的担保。

遵守所有适用的版权法律是用户的责任。在不对版权法所规定的权利加以限制的情况下,未得到Microsoft Corporation明确的书面许可,不得为任何目的、以任何形式或手段(电子的、机械的、影印、录制等等)复制、传播本文的任何部分,也不得将其存储或引入到检索系统中。

本文档可能涉及Microsoft的专利、专利申请、商标、版权或其它知识产权。除非Microsoft通过书面许可协议明确提供,此文档并没有授予您对这些专利、商标、版权或其它知识产权的任何许可。

除非特别说明,此处所述作为范例的公司、组织、产品、域名、电子邮件地址、徽标、人员、地点和事件均为虚构,不与任何真实的公司、组织、产品、域名、电子邮件地址、徽标、人员、地点或事件有任何联系,也不应据此进行任何臆测或推断。
 
Ó 2007 Microsoft Corporation.  保留所有权利

Microsoft, SQL Server, 以及 Virtual Earth是Microsoft Corporation在美国和/或其它国家的注册商标或商标。

所有其它商标均是其各自所有者的财产。


导言

如今的信息工作人员和消费者需要处理大量不同类型的信息,从电子表格和数据库中商业数据的传统数据表,到在线的基于媒体的数据(例如视频、照片和音乐)。近来朝向mash up解决方案(mash up解决方案是指合并从多个来源获得的信息和内容来创建通用的在线应用程序)发展的趋势表明计算机用户使用高度集成的解决方案来利用它们可用的大量信息。

同时,技术优势导致地理服务和设备的发展,包括在线绘制地图解决方案,例如Microsoft® Virtual Earth™,和较便宜的全球定位系统(GPS)解决方案。曾经只用于地理信息系统(GIS)专业人员的技术现在广泛的应用于每一个人。

这两个因素为软件应用程序带来了新的期望和机遇。地理服务的普遍性,和用户使用数据所采用的混合度的提高意味着这个空间信息只是合成到解决方案中的另一个组件,并且是作出更好决策和提供更高的价值服务的一个基础。
空间数据有多种使用方式,如下面的示例列表所描述的:

一个零售商网站可以将所有的存储位置作为一个地图上的点显示出来,并按照所给的邮政编码找到最近的存储位置。
一个销售经理可以定义地理销售区域,并使用它们将客户和销售代表匹配起来,并对销售情况进行分析。
一个架构师可以为创建一个新的架构制定计划,并将这些计划覆盖到一个给定的站点地图上。
一个驱动器可以找到两个位置间的距离,并制定路由路线。
一个房地产经纪人可以快速地根据某个客户的要求找到匹配的房子,例如在华盛顿湖岸边的超过20000平方英尺的房子。
一个移动应用程序可以找到所有给定位置的10公里范围内的加油站。

这些例子只显示了空间数据集成到软件应用程序中所产生的一些可能案例。

SQL Server 2008通过引入新的空间数据类型提供了对地理数据的支持,你可以使用它来存储和操纵基于位置的信息,SQL server 2008中的空间支持可以帮助用户通过分析例如下面所示的场景中的位置数据来作出更好的决策:
关注于消费者的基于位置的信息

基于客户的管理和开发
与环境相关的数据的影响、分析和计划
公司中的财务和经济分析
基于政府的计划和开发分析
市场分割和分析
科学研究设计和分析
房地产开发和分析

这篇白皮书对SQL Server 2008中的全面的空间数据支持做了高层次的介绍,并描述了其高性能的空间能力和位置智能应用程序的可扩展性。
 

对空间数据的全面支持

SQL Server 2008通过新的数据类型提供了广泛的空间支持。要理解你可以怎样使用这些数据类型来存储位置智能的数据,你首先需要了解空间数据——特别是地理数据——是怎么工作的。

空间模型

空间数据是用于显示一个表面的点、线和区域的。一般情况下,这些元素与地球上的实际物理位置有关,所以它们可以被称为地理数据。我们已经通过使用地球仪和地图熟悉了这个概念,它们一般显示了多个地理特性和它们的相对位置。
大地测量空间模型

描述一个行星表面位置的困难就在于行星不是平的。地球是一个非常复杂的对象,它可以近似的看作是一个扁椭圆体,一个(稍微)有点平坦的球体。地球的一个准确表示通常是通过地球仪来显示的,在它上面行星表面的位置是通过经度和纬度来表示的,它们是根据从赤道开始和按照相应的国际日界线所测量得到的。这个建立地理位置模型的方法被称作大地测量模型,它提供了一个定义如图1所示的地球仪上的位置和对象的精确方法。现在全球在使用几个不同的大地测量模型,包括英国的国家地图地理系统所使用的Airy 1830 椭球体,和全球的GPS解决方案所使用的WGS84 椭球体。

平面空间模型

一个大地测量模型提供了最精确的方法来显示地理特性,它使用一个椭圆体并考虑了行星的弯曲程度,这在以前人们必须使用平面地图时要计算距离是非常困难的。过去,使用二维表面或平面是非常方便的,所以在许多平面(平坦)模型中显示的一般都是基于位置的数据。现在要在一个平面二维表面使用地理数据,就要创建一个投影来展平椭球体上的地理对象。有了大地测量模型,就产生了很多用于将地球的地理特性设计到一个平坦的表面上的数学模型,包括Mercator投影、Peters投影,和Lambert Conformal

Conic投影。

无论使用哪个投影,将一个椭球体上的地理数据转换成平面表面总会导致结果地图上的地理特性方面的一些形状、尺寸或位置(或三者都有)上的失真,这就是为什么在图2中的投影中格陵兰显示如美国一般大小,而事实上它的土地面积要小很多。一般来说,投影的表面面积越大,失真就越严重——地图边缘的地方的失真程度要大于中心位置的失真程度。为此,平面模型用于较小的地理区域比较好,例如单个的国家、州和城镇,或者是没有投影的空间表面,例如内层布置图。

SQL Server 2008空间数据类型

SQL Server 2008为大地测量空间数据提供了geography数据类型,为平面空间数据提供了geometry数据类型。这两个都是Microsoft .NET Framework通用语言运行时(CLR)类型,并且可以用来存储不同种类的地理元素,例如点、线和多边形。这两个数据类型都提供了你可以用来执行空间操作的属性和方法,例如计算位置间的距离和找出两者间交叉的地理特性(例如一条河流经一个城镇。)

geography 数据类型

geography数据类型为空间数据提供了一个由经度和纬度联合定义的存储结构。使用这种数据的典型用法包括定义道路、建筑、或者地理特性如可以覆盖到一个光栅图上的向量数据,它考虑了地球的弯曲性,或者计算真实的圆弧距离和空中传播轨道,而这些在一个平面模型中所存在的固有失真引起的错误程度是不可接受的。

geometry数据类型

geometry数据类型为空间数据提供了一个存储结构,它是由任意平面上的坐标定义的。这种数据通常是用在区域匹配系统中的,例如由美国政府制定的州平面系统,或者是不需要考虑地球弯曲性的地图和内层布置图。

geometry 数据类型提供了与开放地理空间联盟(OGC)Simple Features Specification for SQL标准结合的属性和方法,使得你可以对geometry数据执行操作以产生行业标准的行为。

空间数据类型的方法

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  

 

 

高性能的空间数据

SQL Server 2008中的空间数据类型作为CLR系统类型来执行。SQL Server 2008增加了数据库中的CLR类型的最大规模,提高了原来在SQL Server 2005中的8000字节的限制,这使得它可以存储非常复杂的空间数据元素,例如通过许多点定义的多边形。

通过在关系表中存储空间数据,SQL Server 2008 使得可以结合空间数据到其他任何商业数据类型中去;这消除了对维护一个单独的只用于空间数据存储的维护要求,并使得可以做高性能查询,它不需要结合从多个外部来源获得的数据。

在SQL Server 2008中对空间索引的支持进一步增强了对空间数据的查询操作。你可以用一个集成在SQL Server数据库引擎中的适合的多级网格索引来检索空间数据。空间索引包含一个基于网格的层级,在其中每一级索引又细分为由上一级所定义的网格区域。

SQL Server查询优化器会作出基于成本的决策,决定对给定的查询使用哪种索引,并且因为空间索引是数据库引擎的一个完整部分,可以作出关于是否使用特殊的空间索引的基于成本的决策,就像其它索引一样。

位置智能的应用程序可扩展性

geography 和geometry数据类型在SQL server 2008的多个版本中都得到了支持,从个人桌面应用程序到企业级数据存储,使得你可以建立任何规模的地理解决方案。这个广泛的支持将空间数据能力提供给所有种类的应用程序,而不需要具有地理解决方案的昂贵的所有权。

导入空间数据

geography 和geometry数据类型包括以用于在OGC中所定义的地理数据的已知文本(Well Known Text,WKT)和已知二进制(Well Known Binary,WKB)格式导入和导出数据的方法,还包括普遍使用的地理标示语言(Geographic Markup Language,GML)格式,这使得很容易从支持这些格式的数据源导入地理数据。地理数据很容易从一些政府和商业数据源获得,并且可以相对容易地从许多现有的GIS应用程序和GPS系统中导出。Microsoft保持与一些第三方GIS供应商和地理数据解决方案供应商的紧密关系,这帮助确保SQL server 2008和广泛的行业标准工具间的强大兼容能力,以用于导入、导出和操纵空间数据。

使用空间数据

正如在本篇白皮书中已经描述过的,geography和geometry数据类型提供了使你可以用来对你的数据执行空间操作的方法。因为这些数据类型是作为.NET CLR类型来执行的,你可以很容易的创建通过数据可编程性使用SQL Server的空间数据的客户端应用程序,并使用在客户端管理的代码来调用空间类型的实例上的方法。这使得你可以建立强大的应用程序来使用你的空间数据,并将它集成到其它位置智能的应用程序和服务中,例如虚拟地球。

总结

随着地理信息集成到应用程序中变得越来越普遍,应用程序开发人员将越来越需要可以存储和操纵空间数据的数据库系统。随着geography和geometry数据类型的推出,SQL Server 2008为空间数据提供了一个全面的、高性能的和可扩展的数据存储解决方案,并使得所有规模的公司都可以将地理特性集成到它们的应用程序和服务中去。

更多信息,请访问:
http://www.microsoft.com/sql

这篇文档对您有帮助吗?请将您的反馈提交给我们。告诉我们您的评价1(很不好)-5(很好)。您如何评价以及为何如此评价,例如:
您是否因为其中的优秀示例或截图、清晰的描述或其他原因打了高分?
您是否因为其中不恰当的示例或模糊不清的截图、不清晰的描述打了低分?
这些反馈将帮助我们提高我们今后发布的白皮书的质量。

发送反馈

0
相关文章