SQL Server 空间特征:.STDistance 它返回英里还是米?
Posted
技术标签:
【中文标题】SQL Server 空间特征:.STDistance 它返回英里还是米?【英文标题】:SQL Server spatial feature: .STDistance Does it return miles or meters? 【发布时间】:2016-03-29 18:05:50 【问题描述】:我正在尝试使用 SQL Server 2014 函数来确定地理表面上两点之间的距离。我在一个表中有三个字段(纬度、经度、坐标)。 [Lat] 和 [Long] 是现有值,我使用以下方法将地理点坐标存储在 [Coordinates] 字段中:
UPDATE dbo.[MyTable]
SET [Coordinates] = geography::STPointFromText('POINT(' + CAST([Lon] AS VARCHAR(20)) + ' ' + CAST([Lat] AS VARCHAR(20)) + ')', 4326) ;
所以现在我有一个表,其中包含在 [Coordinates] 字段中预先计算的地理坐标的记录。现在我想确定 Point_A 和 Point_B 之间的距离(以英里为单位)。我使用了以下内容:
-- 计算点_A:
DECLARE @g geography = (SELECT [Coordinates] FROM [MyTable] WHERE [Id] = 68);
-- 计算点_B:
DECLARE @h geography = (SELECT [Coordinates] FROM [MyTable] WHERE [Id] = 1439);
-- 计算距离:
SELECT ROUND(@g.STDistance(@h)) AS [Distance];
实际距离约为 20 英里,但这个计算结果给我的数字是 20 英里的数千倍。
.STDistance 返回的是米而不是英里?
关于相关说明:谁能指出网络上的一个示例,其中将一个表中的数千个地理点与另一个包含数千个点的表中最近的地理点进行匹配?如果我找不到缩短过程的方法,我可以看到这个计算需要很长时间。
【问题讨论】:
SQL Server 2008 GEOGRAPHY STDistance() value的可能重复 至于速度,我相信你想要一个spatial index (restrictions may apply)。 我相信它以米为单位 【参考方案1】:返回的实际值取决于您的地理列的 SRID(空间参考标识符) - 您在创建地理项时设置了此项。如果未指定 SRID,则假定默认值 4326,对应 WGS 84 基准。
就性能而言,您可以索引地理列,这里有一个链接可以让您走上正确的道路。
https://technet.microsoft.com/en-us/library/bb964712(v=sql.105).aspx
【讨论】:
没有回答问题。汤姆 C 自己找到了。【参考方案2】:如果你的 SRID 是 4326 ,单位是米
你可以用这个sql检查另一个SRID
Select * from sys.spatial_reference_systems
【讨论】:
【参考方案3】:我使用的是默认 SRID 值 4326。
通过反复试验,我发现它返回的是米与英里。
如果微软能在他们的文档中更清楚地说明这一点,那就太好了。
【讨论】:
Tom 米也是使用 PostGIS 时的默认返回值,我们必须转换为英里。这似乎是地理系统中的标准。以上是关于SQL Server 空间特征:.STDistance 它返回英里还是米?的主要内容,如果未能解决你的问题,请参考以下文章