2017-07-03 82 views
0

我在使用Long Lat查找sql​​ server中最近的點時遇到了麻煩。 我想通過longitued和緯度參數,然後用它來找到該地區的最近點。Sql Server空間在oracle中查找最近鄰居

還有一種方法來選擇所有具有幾何函數的表?

+0

你對前者有什麼想法?至於後者,你是否嘗試在sys.columns中尋找具有數據類型幾何的列? –

回答

0

我已經找到了解決這個問題的方法。這可能對某人有幫助。 我已經爲此代碼添加了一些優化。 @ Points.STBuffer(1)確定搜索距離,所以我只放1米,因爲我需要一個精確的長和拉,因爲我點擊它。

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;