基本的SQL STDistance实现?

时间:2015-08-17 22:52:27

标签: sql sql-server spatial sqlgeography

我知道使用MySlider.Value = 8我可以导出两个空间对象之间的距离,并且使用类似的东西更复杂,我可以在触发器中包裹最近邻居并从最近邻居获取值。我担心我可能会过度复杂到这一点,以至于我无法弄清楚一些简单的事情,比如不仅要获得" name"最近邻居,但它到底有多远?我如何提取该距离作为其中的一部分,并将该值与名称一起写?

SELECT @source.STDistance(@target)

2 个答案:

答案 0 :(得分:0)

Query Spatial Data for Nearest Neighbor

USE AdventureWorks2012
GO
DECLARE @g geography = 'POINT(-121.626 47.8315)';
SELECT TOP(7) SpatialLocation.ToString(), City, SpatialLocation.STDistance(@g)
FROM Person.Address
WHERE SpatialLocation.STDistance(@g) IS NOT NULL
ORDER BY SpatialLocation.STDistance(@g);

答案 1 :(得分:0)

在尝试解决另一个最近邻居问题时,我记得从old post挖出的答案:

update s 
set 
[NEAR_TRAIL] = fname,
[DIST_TRAIL] = Shape.STDistance(fshape)
from(
Select
[dbo].[GRSM_BEAR_GPS_COLLAR].*,
fnc.Name as fname,
fnc.Shape as fShape
from
[dbo].[GRSM_BEAR_GPS_COLLAR]
CROSS APPLY (SELECT TOP 1 Name, shape                   
FROM [dbo].[GRSM_TRAILS] WITH(index ([GRSM_TRAILS_idx]))                
WHERE [GRSM_TRAILS].Shape.STDistance([dbo].[GRSM_BEAR_GPS_COLLAR].Shape) IS NOT NULL
                  ORDER BY GRSM_Trails.Shape.STDistance([dbo].[GRSM_BEAR_GPS_COLLAR].Shape) ASC) fnc)s;