SQL Server几何距离英里计算?

4
  • 系统:SQL Server 2008 R2
  • 有两个几何变量,SRID 4326。

STDistance 函数返回的值为度数,但我需要的是英里。同时,请想象一下在表格中对拥有1000多行的几何列执行此类计算的情况。有什么最快的解决方案吗?SQL Server 2012、2014、2016 中是否内置了任何功能来解决这个问题?

--Geometry
DECLARE @Point2m geometry = geometry::STGeomFromText('POINT(-80.23 26.2)', 4326),
@Point3m geometry = geometry::STGeomFromText('POINT(-80.229999999515712 26.193699999712408)', 4326)

SELECT @Point2m.STDistance(@Point3m) /* degrees */
GO

--Geography, for comparison
DECLARE @Point2g geography = geography::STGeomFromText('POINT(-80.23 26.2)', 4326),
@Point3g geography = geography::STGeomFromText('POINT(-80.229999999515712 26.193699999712408)', 4326)

SELECT @Point2g.STDistance(@Point3g) / 1609.344 /*meters to miles*/
GO

那么问题是什么?你尝试在数千行上运行它了吗?它不起作用,还是很慢,或者其他原因? - Bulat
需要几何类型的英里距离而不是度数。 - user5211471
看看这个答案吧,应该会有帮助:http://gis.stackexchange.com/questions/4844/stdistance-unit-in-sql-server-2008 - mwigdahl
1个回答

0

这可以用作SP的模板:

DECLARE @geostart GEOGRAPHY DECLARE @geoend GEOGRAPHY

SELECT @geostart = SELECT @geoend =

SELECT CAST(@geostart.STDistance(@geoend)/1609.344 AS DEC (8,1)) AS [Distance in Miles]

如果您想要计算表(table_a)中多行数据到另一个表(table_b)中特定地理值(key column value = 100)的英里数,您可以使用以下代码:

SELECT ,'miles'= CAST(table_a_geo.STDistance(table_b_geo)/1609.344 AS DEC (8,1)) FROM table_a JOIN table_b ON table_b_id = 100


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接