SQL Server空间功能:.STDistance是否返回英里或米?

问题描述 投票:1回答:3

我正在尝试使用SQL Server 2014函数来确定地理表面上两点之间的距离。我在表格中有三个字段(Lat,Long,Coordinates)。 [Lat]和[Long]是现有值,我使用以下内容将地理点坐标存储在[Coordinates]字段中:

UPDATE dbo.[MyTable]
SET [Coordinates] = geography::STPointFromText('POINT(' + CAST([Lon] AS VARCHAR(20)) + ' ' + CAST([Lat] AS VARCHAR(20)) + ')', 4326) ;

所以现在我有一个表格,其中包含在[坐标]字段中预先计算的地理坐标的记录。现在我想确定Point_A和Point_B之间的距离。我使用了以下内容:

- 计算Point_A:

DECLARE @g geography = (SELECT [Coordinates] FROM [MyTable] WHERE [Id] = 68);

- 计算Point_B:

DECLARE @h geography = (SELECT [Coordinates] FROM [MyTable] WHERE [Id] = 1439);

- 计算距离:

SELECT ROUND(@g.STDistance(@h))  AS [Distance];

实际距离大约是20英里,但这个计算给我的数字是20英里的数千倍。

是.STDistance返回米而不是英里?

在一个相关的说明:任何人都可以指向我在网络上的一个例子,其中一个匹配表中的数千个地理点与另一个包含数千个点的表中最近的地理点?如果我找不到缩短过程的方法,我可以看到这个计算需要很长时间。

sql-server spatial-query
3个回答
0
投票

返回的实际值取决于地理列的SRID(空间参考标识符) - 您在创建地理项目时设置此值。如果未指定SRID,则假定默认值4326,其对应于WGS 84数据。

就性能而言,您可以索引地理列,这是一个链接,可以让您走上正确的道路。

https://technet.microsoft.com/en-us/library/bb964712(v=sql.105).aspx


0
投票

我使用的默认SRID值为4326。

通过反复试验,我发现它正在返回米与英里之间。

如果微软能够在文档中做得更清楚,那就太好了。


0
投票

如果您的SRID是4326,则单位为米

你可以使用这个SQL检查另一个SRID

Select * from sys.spatial_reference_systems
© www.soinside.com 2019 - 2024. All rights reserved.