SQL server中的几何图形和地理数据类型

SQL server中的几何图形和地理数据类型,sql,sql-server,sqldatatypes,Sql,Sql Server,Sqldatatypes,有谁能给出SQL server中几何体和地理数据类型的真实示例,并向我解释它们的用途吗?我在任何地方都没有见过这两种数据类型的使用。我们在sql server中有一些通用数据类型,比如varchar,也可以用来存储这些数据。使用这两种数据类型的好处是什么?您能否仅使用varchars计算地球表面多边形的面积 如果你能想象,它比Select@geog.STArea() 它的用途是以适当的类型存储数据,就像XML类型比XML数据的varchar更好,等等。几何和地理是用于存储空间信息的数据类型-描述

有谁能给出SQL server中几何体和地理数据类型的真实示例,并向我解释它们的用途吗?我在任何地方都没有见过这两种数据类型的使用。我们在sql server中有一些通用数据类型,比如varchar,也可以用来存储这些数据。使用这两种数据类型的好处是什么?

您能否仅使用varchars计算地球表面多边形的面积

如果你能想象,它比
Select@geog.STArea()


它的用途是以适当的类型存储数据,就像XML类型比XML数据的varchar更好,等等。

几何地理是用于存储空间信息的数据类型-描述空间中物体的形状和位置(通常在地球表面)

为什么这种信息需要专用的数据类型?想一想你将如何按照空间信息排序——它没有一个自然的排序规则,比如varchar的字母顺序,或者日期/时间的时间顺序。您将如何编写查询来识别靠近给定位置的特征?您无法选择“布里斯托尔”和“伦敦”之间的*位置。因此,自SQLServer2008以来,已经有一系列方法(和索引)专门设计用于执行这类查询

如果您想了解何时使用它们的实际示例:保险公司可以使用客户表中的地理字段来记录每个投保人的位置,并通过连接到河流表来确定其中有多少人可能会受到水位上升的影响,河流表也在地理字段中模拟了河流泛滥平原。 或者,您可能希望通过分析您(和您的竞争对手)现有门店的地理覆盖范围来确定新店的最佳位置。
或者,为配送车辆规划最佳物流路线等。

SQL Server支持两种空间数据类型:几何数据类型和地理数据类型

几何图形类型表示欧几里德(平面)坐标系中的数据。 地理类型表示圆形地球坐标系中的数据

我们可以在sql server 2008及更高版本中轻松找到它

创建表格选项卡 ( id int IDENTITY(1,1)主键, zip nvarchar(20), nvarchar市(500), 地理地理 );


好的,我给你举个例子。 您有一个包含4列X1、Y1、X2、Y2的表。在这列中有坐标

x1=22.4109883
y1=44.740203
x2=22.4112528
y2=44.7404422
现在,在该表中还有3列声明为几何体: 地学艺术

SET @sqlCommand = 'USE [' + @databaseName + '];' +
              ' UPDATE [dbo].[StreetsTable]' +
              ' SET [GEOSTART] = geometry::STGeomFromText(''POINT ('' + [X1] + '' '' + [Y1] + '')'', 4326) WHERE X1<>'''' and Y1<>'''' '; 
EXEC (@sqlCommand)


SET @sqlCommand = 'USE [' + @databaseName + '];' +
              ' UPDATE [dbo].[StreetsTable]' +
              ' SET [GEOEND] = geometry::STGeomFromText(''POINT ('' + [X2] + '' '' + [Y2] + '')'', 4326) WHERE X2<>'''' and Y2<>'''' ';
EXEC (@sqlCommand)

    SET @sqlCommand = 'USE [' + @databaseName + '];' +
                  ' UPDATE [dbo].[StreetsTable]' +
                  ' SET [GEOSEGMENT] = geometry::STGeomFromText(''LINESTRING('' + [X1] + '' '' + [Y1] + '', '' + [X2] + '' '' + [Y2] + '')'', 4326) WHERE X1<>'''' and Y1<>'''' and X2<>'''' and Y2<>'''' ';
EXEC (@sqlCommand)
SET@sqlCommand='使用['+@databaseName+'];'+
'更新[dbo].[StreetsTable]'+
'SET[GEOSTART]=geometry::StGeomeFromText(''点(''+[X1]+'''''+[Y1]+'')',4326),其中X1''和Y1'';
EXEC(@sqlCommand)
SET@sqlCommand='使用['+@databaseName+'];'+
'更新[dbo].[StreetsTable]'+
'SET[GEOEND]=geometry::StGeoFromText(''点(''++[X2]+''''++[Y2]+'')',4326),其中X2''和Y2'';
EXEC(@sqlCommand)
SET@sqlCommand='使用['+@databaseName+'];'+
'更新[dbo].[StreetsTable]'+
'SET[GEOSEGMENT]=geometry::StGeoFromText('LINESTRING(''+[X1]+''''+[Y1]+'','+[X2]+''''+[Y2]+''',4326),其中X1''和Y1''以及X2''和Y2'';
EXEC(@sqlCommand)
更新后,在该表上进行选择。继续“空间结果”,然后选择空间列。您将看到几何图形的用法


希望它能帮助您

他们为您提供空间能力。您可能会看到:。主要是使用与映射、GIS应用程序相关您的声明“我们在sql server中有像varchar这样的通用数据类型…”可以应用于您想要提及的任何数据类型,而不仅仅是这些数据类型。你会认真提倡不要使用
int
datetime
decimal
?@Damien\u异教徒:我明白了。我只是对这两种数据类型很好奇,我还没有看到任何真实世界中使用这两种数据类型的例子。谢谢。除了所有人的评论之外,它们在内部是相同的(在内部都使用二进制数据类型)。因此,如果您希望使用数据在地图上表示数据,或者仅将其表示为文本或作为第三方应用程序的提要(如GIS once),那么请使用几何图形并获得性能。但是,如果您需要对保存的数据进行一些计算(如排序-获取距离-获取面积-等等),您应该使用地理信息。