谁能给出 SQL Server 中几何和地理数据类型的真实示例并解释它们的用途?我还没有在任何地方看到使用这两种数据类型。我们在 sql server 中有通用数据类型,例如 varchar,也可以用于存储此类数据。使用这两种数据类型有什么好处?
4 回答
您可以仅使用 varchars 计算地球表面上多边形的面积吗?
如果可以的话,我可以想象它比Select @geog.STArea()
用于以适当的类型存储数据,就像 XML 类型比 XML 数据的 varchar 更好,等等。
几何和地理是用于存储空间信息的数据类型 - 描述空间中物体的形状和位置(通常在地球表面上)。
为什么需要专门的数据类型来存储此类信息?考虑一下您将如何按空间信息排序 - 它没有自然排序规则,例如 varchar 的字母顺序或日期/时间的时间顺序。以及您将如何编写查询来识别靠近给定位置的要素 - 您无法 SELECT * WHERE location BETWEEN 'Bristol' AND 'London'。因此,自 SQL Server 2008 以来,已经有一系列专门为执行此类查询而设计的方法(和索引)。
如果您想了解何时使用它们的实际示例:保险公司可能会使用客户表中的地理字段来记录每个保单持有人的位置,并通过加入在地理领域也模拟了河流洪泛区的河流表。或者,您可能希望通过分析您(和您的竞争对手)现有商店的地理覆盖范围来确定新商店的最佳位置。或者,为送货车辆等规划最佳物流路线等。
SQL Server 支持两种空间数据类型:几何数据类型和地理数据类型。
几何类型表示欧几里得(平面)坐标系中的数据。地理类型表示圆形地球坐标系中的数据。
我们可以在 sql server 2008 及更高版本中轻松找到它。
创建 TABLE tab_spatial ( id int IDENTITY (1,1) 主键, zip nvarchar(20), city nvarchar(500), geography );
好的,我有一个例子给你。您有一个包含 4 列 X1、Y1、X2、Y2 的表。在此列中,您有坐标
x1=22.4109883
y1=44.740203
x2=22.4112528
y2=44.7404422
现在在此表中,您还有 3 列声明为几何:GEOSTART、GEOEND、GEEOSGMENT
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)
更新后去那个表上做一个选择。继续空间结果并选择空间列。您将看到几何图形的使用。
希望对你有帮助