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