Я знаю, что с SELECT @source.STDistance(@target)
Я могу получить расстояние между двумя пространственными объектами и более сложным с чем-то вроде этого, где я могу обернуть ближайший сосед в триггере и получить значения от ближайшего соседа. Боюсь, что я, возможно, слишком усложнил это до такой степени, что не могу понять что-то столь же простое, как получить не только «имя» ближайшего соседа, но и как далеко оно? Как мне извлечь это расстояние как часть этого и написать эту ценность вместе с именем?Элементарная реализация SQL STDistance?
ALTER TRIGGER [dbo].[IMPORT_RAW_WILD_BEAR_GPS_COLLAR]
ON [dbo].[WILD_BEAR_GPS_COLLAR]
after INSERT,UPDATE NOT FOR REPLICATION
AS
BEGIN
SET NOCOUNT ON;
UPDATE p SET
SHAPE = CASE WHEN i.SHAPE IS NOT NULL
THEN p.SHAPE ELSE Geography::STPointFromText('POINT('
+ CAST(p.LON AS VARCHAR(20)) + ' '
+ CAST(p.LAT AS VARCHAR(20)) + ')', 4269) END,
LON = CASE WHEN p.SHAPE IS NULL THEN p.LON ELSE p.SHAPE.Long END,
LAT = CASE WHEN p.SHAPE IS NULL THEN p.LAT ELSE p.SHAPE.Lat END,
QuadName = COALESCE(b.name, p.QuadName),
Watershed = COALESCE(c.HUC_12_Name, p.Watershed),
County = COALESCE(d.Name, p.County),
State= COALESCE(e.Name, p.State),
NEAR_ROAD = COALESCE(k.FULLNAME, p.NEAR_ROAD),
NEAR_TRAIL = COALESCE(j.NAME, p.NEAR_TRAIL),
UNITCODE = 'WILD',
RESTRICTION = 'UNR',
UNITNAME = 'WILD',
DATUM = 'NAD83',
COORD_SYSTEM = 'GCS',
COORD_UNITS = 'dd',
UTM_ZONE = '17',
NEAR_STREAM = COALESCE(g.GNIS_Name, p.NEAR_STREAM)
ELEVATION = (SELECT pdata.getValueByLoc(1,p.SHAPE.Long,p.SHAPE.Lat) FROM [dbo].[DEM10MP])
FROM WILD_BEAR_GPS_COLLAR
AS p
INNER JOIN
inserted AS i
ON i.OBJECTID = p.OBJECTID
LEFT OUTER JOIN USGS_24K_TOPOMAP_BOUNDARIES AS b
ON b.Shape.STIntersects(i.Shape) = 1
LEFT OUTER JOIN WATERSHEDS AS c
ON c.Shape.STIntersects(i.Shape) = 1
LEFT OUTER JOIN WILD_COUNTIES AS d
ON d.Shape.STIntersects(i.Shape) = 1
LEFT OUTER JOIN WILD_States AS e
ON e.Shape.STIntersects(i.Shape) = 1
CROSS APPLY (SELECT TOP 1 GNIS_Name, shape
FROM dbo.NHDFLOWLINE WITH(index ([NHD_idx]))
WHERE NHDFLOWLINE.Shape.STDistance(i.Shape) IS NOT NULL
ORDER BY NHDFLOWLINE.Shape.STDistance(i.Shape) ASC) as g
CROSS APPLY (SELECT TOP 1 RiverOrder, shape
FROM dbo.NHDFLOWLINE WITH(index ([NHD_idx]))
WHERE NHDFLOWLINE.Shape.STDistance(i.Shape) IS NOT NULL
ORDER BY NHDFLOWLINE.Shape.STDistance(i.Shape) ASC) as h
CROSS APPLY (SELECT TOP 1 FULLNAME, shape
FROM dbo.WILD_ROADS
/****** force spatial index hint ******/
WITH(index ([WILD_ROADS_idx]))
WHERE WILD_ROADS.Shape.STDistance(i.Shape) IS NOT NULL
ORDER BY WILD_ROADS.Shape.STDistance(i.Shape) ASC) as k
CROSS APPLY (SELECT TOP 1 NAME, shape
FROM dbo.WILD_TRAILS
/****** force spatial index hint ******/
WITH(index ([WILD_TRAILS_idx]))
WHERE WILD_TRAILS.Shape.STDistance(i.Shape) IS NOT NULL
ORDER BY WILD_TRAILS.Shape.STDistance(i.Shape) ASC) as j
END;
Ваш вопрос разве ясный. Вы говорите, что уже знаете 'SELECT @ source.STDistance (@target)' –