Sql 服务器空间像在 oracle 中一样查找最近的邻居
Sql Server spatial Find nearest neighbour like in oracle
我在使用 Long Lat 查找 sql 服务器中的最近点时遇到了问题。
我想传递一个经度和纬度参数,然后用它来找到该区域最近的点。
还有办法 Select 所有具有几何函数的表吗?
我已经找到了解决这个问题的方法。这可能对某人有帮助。
我已经为此代码添加了一些优化。 @Points.STBuffer(1) 确定搜索距离,所以我只输入 1m,因为我需要精确的经度和纬度,因为我在点击时得到它。
ALTER PROCEDURE [dbo].[getFacilityDetailsOnClick]
-- Add the parameters for the stored procedure here
@long float,
@lat float
AS
BEGIN
DECLARE @points geometry
SET @points = geometry :: Point(@long,@lat,32651);
DECLARE @searchArea GEOMETRY;
SET @searchArea = @Points.STBuffer(1);
@tbl nvarchar(255)
SELECT @sSQL = 'SELECT FEATID, NAME , @tbl as FACILITYNAME , @facility as FACILITYID FROM (SELECT TOP 1 featid, NAME , geometry.STDistance(@pnts) as distance from '
+ QUOTENAME(@tbl) +' WHERE geometry.Filter(@searchArea) = 1 ORDER BY distance) AS tbl'
EXEC sp_executesql @sSQL , N'@pnts GEOMETRY , @searchArea GEOMETRY , @tbl nvarchar(255) , @facility int ', @Points , @searchArea , @tbl ,@facility;
我在使用 Long Lat 查找 sql 服务器中的最近点时遇到了问题。 我想传递一个经度和纬度参数,然后用它来找到该区域最近的点。
还有办法 Select 所有具有几何函数的表吗?
我已经找到了解决这个问题的方法。这可能对某人有帮助。 我已经为此代码添加了一些优化。 @Points.STBuffer(1) 确定搜索距离,所以我只输入 1m,因为我需要精确的经度和纬度,因为我在点击时得到它。
ALTER PROCEDURE [dbo].[getFacilityDetailsOnClick]
-- Add the parameters for the stored procedure here
@long float,
@lat float
AS
BEGIN
DECLARE @points geometry
SET @points = geometry :: Point(@long,@lat,32651);
DECLARE @searchArea GEOMETRY;
SET @searchArea = @Points.STBuffer(1);
@tbl nvarchar(255)
SELECT @sSQL = 'SELECT FEATID, NAME , @tbl as FACILITYNAME , @facility as FACILITYID FROM (SELECT TOP 1 featid, NAME , geometry.STDistance(@pnts) as distance from '
+ QUOTENAME(@tbl) +' WHERE geometry.Filter(@searchArea) = 1 ORDER BY distance) AS tbl'
EXEC sp_executesql @sSQL , N'@pnts GEOMETRY , @searchArea GEOMETRY , @tbl nvarchar(255) , @facility int ', @Points , @searchArea , @tbl ,@facility;