2016-03-29 60 views
0

我正在尝试使用SQL Server 2014函数来确定地理曲面上两点之间的距离。我在表格中有三个字段(经纬度,坐标)。 [纬度]和[龙]是现有的价值观和我店使用下面的[坐标]字段地理点的坐标:SQL Server空间功能:.STDistance是否返回英里或米?

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

所以现在我有一个完整的具有地理坐标记录表预在[坐标]字段中计算。现在我想确定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返回米而不是英里?

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

+1

可能的重复[SQL Server 2008 GEOGRAPHY STDistance()value](http://stackoverflow.com/questions/3335773/sql-server-2008-geography-stdistance-value) – GSerg

+0

至于速度,我相信你想要一个[空间索引](https://msdn.microsoft.com/en-us/library/bb934196%28v=sql.120%29.aspx)([限制可能适用](https://msdn.microsoft。 COM/EN-US /库/ bb895265%28V = sql.120%29.aspx#地理))。 – GSerg

+0

我相信它是以米为单位 – mattias

回答

0

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

就性能而言,您可以索引地理栏目,继承人链接,让您走上正确的道路。

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

+0

没有回答问题。汤姆C自己发现了它。 – KeyOfJ

0

我用的4326

默认SRID值经过反复试验,我发现它返回米主场迎战英里。

这本来是很好,如果微软会作出自己的文档更清晰。

+0

汤姆米也是使用PostGIS时的默认返回值,我们必须将其转换为英里。看来这是地理系统的标准。 – KeyOfJ

相关问题