我正在尝试使用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返回米而不是里程?
在相关的说明中:有人能指出我在网络上的一个例子,其中一个表格中的数千个地理点与另一个包含数千个点的表中最近的地理点相匹配吗?如果我找不到缩短过程的方法,我可以看到这个计算需要很长时间。
答案 0 :(得分:0)
返回的实际值取决于地理列的SRID(空间参考标识符) - 您在创建地理项目时设置此值。如果未指定SRID,则假定默认值为4326,这对应于WGS 84数据。
就性能而言,您可以索引地理列,这是一个链接,可以让您走上正确的道路。
https://technet.microsoft.com/en-us/library/bb964712(v=sql.105).aspx
答案 1 :(得分:0)
我使用的是默认SRID值4326。
通过反复试验,我发现它正在返回米与英里之间。
如果微软能够在文档中做得更清楚,那就太好了。
答案 2 :(得分:0)
如果您的SRID为4326,则单位为米
您可以使用此sql检查另一个SRID
Select * from sys.spatial_reference_systems