MSCBSC 移動(dòng)通信論壇
搜索
登錄注冊(cè)
網(wǎng)絡(luò)優(yōu)化工程師招聘專欄 4G/LTE通信工程師最新職位列表 通信實(shí)習(xí)生/應(yīng)屆生招聘職位

  • 閱讀:5995
  • 回復(fù):1
如何用SQL SERVER數(shù)據(jù)庫(kù)計(jì)算距離并像MapInfo一樣圈選數(shù)據(jù)
無(wú)不為
VIP會(huì)員
鎵嬫満鍙風(fēng)爜宸查獙璇? style=


 發(fā)短消息    關(guān)注Ta 

積分 168
帖子 51
威望 20046 個(gè)
禮品券 10 個(gè)
專家指數(shù) -87
注冊(cè) 2011-11-4
專業(yè)方向  移動(dòng)網(wǎng)絡(luò)優(yōu)化
回答問(wèn)題數(shù) 0
回答被采納數(shù) 0
回答采納率 0%
 
發(fā)表于 2021-03-31 18:40:17  只看樓主  QQ

如何用SQL SERVER數(shù)據(jù)庫(kù)計(jì)算距離并像MapInfo一樣圈選數(shù)據(jù)

在MapInfo因?yàn)榘鏅?quán)的問(wèn)題不讓使用和存在大量的經(jīng)緯度數(shù)據(jù)計(jì)算的背景下,本人提供3種方法進(jìn)行經(jīng)緯度的計(jì)算和Buffer數(shù)據(jù)圈選。(要求你有一點(diǎn)數(shù)據(jù)庫(kù)的基礎(chǔ))

準(zhǔn)備工作

準(zhǔn)備一張基礎(chǔ)數(shù)據(jù)表,表數(shù)據(jù)和表頭如下,表名:T1

T1.png

在該表數(shù)據(jù)基礎(chǔ)上面增加空間字段(這一步很重要),表名:T1_Point

SELECT [Site_Name_Chinese]

      ,[Site_Name_English]

      ,[CGI]

      ,[gNBId]

      ,[經(jīng)度]

      ,[緯度]

      ,geography::STGeomFromText('POINT('+convert(varchar(50),[經(jīng)度])+ ' '+convert(varchar(50),[緯度])+')', 4326) [經(jīng)緯度點(diǎn)]

      into [T1_POINT]

  FROM [dbo].[T1]

新表數(shù)據(jù)展示


空間字段.jpg

新表空間數(shù)據(jù)點(diǎn)展示

空間數(shù)據(jù)點(diǎn)展示.jpg

方法一(利用自定義函數(shù)計(jì)算距離)

方法1需要在sql server進(jìn)行自定義計(jì)算經(jīng)緯度函數(shù),具體函數(shù)如下:

CREATE FUNCTION [dbo].[fnGetDistance](@lon1 REAL, @lat1 REAL, @lon2 REAL, @lat2 REAL) RETURNS FLOAT

  AS

BEGIN

  --距離單位(米)

  DECLARE @a_2d REAL,@e_2d REAL,@h_2d Integer,@DEG_2_RAD REAL,@RAD_2_DEG REAL 

  DECLARE @x_rads REAL,@y_rads REAL,@n_2ds REAL,@x_2d REAL,@y_2d REAL,@z_2d REAL,@x_radm REAl,@y_radm REAL,@n_2dm REAL,@x_2d_mark REAL,@y_2d_mark REAL,@z_2d_mark REAL

  DECLARE @curdistance REAL

 

  SET @a_2d = 6378137

  SET @e_2d = 0.00669438

  SET @h_2d = 15

  SET @DEG_2_RAD = 0.01745329252

  SET @RAD_2_DEG = 57.2957795129

 

    SET @x_rads = Abs(@lon1) * @DEG_2_RAD

    SET @y_rads = Abs(@lat1) * @DEG_2_RAD

   

    SET @n_2ds = @a_2d / Sqrt(1 - @e_2d * Sin(@y_rads) * Sin(@y_rads))

   

    SET @x_2d = (@n_2ds + @h_2d) * Cos(@y_rads) * Cos(@x_rads)

    SET @y_2d = (@n_2ds + @h_2d) * Cos(@y_rads) * Sin(@x_rads)

    SET @z_2d = (@n_2ds * (1 - @e_2d) + @h_2d) * Sin(@y_rads)

   

    SET @x_radm = Abs(@lon2) * @DEG_2_RAD

    SET @y_radm = Abs(@lat2) * @DEG_2_RAD

   

    SET @n_2dm = @a_2d / Sqrt(1 - @e_2d * Sin(@y_radm) * Sin(@y_radm))

   

    SET @x_2d_mark = (@n_2dm + @h_2d) * Cos(@y_radm) * Cos(@x_radm)

    SET @y_2d_mark = (@n_2dm + @h_2d) * Cos(@y_radm) * Sin(@x_radm)

    SET @z_2d_mark = (@n_2dm * (1 - @e_2d) + @h_2d) * Sin(@y_radm)

   

    SET @curdistance = (@x_2d_mark - @x_2d) * (@x_2d_mark - @x_2d) + (@y_2d_mark - @y_2d) * (@y_2d_mark - @y_2d) + (@z_2d_mark - @z_2d) * (@z_2d_mark - @z_2d)

    SET @curdistance = Sqrt(@curdistance)

 

    RETURN @curdistance

END

 

計(jì)算方法:

SELECT * ,[dbo].[fnGetDistance] (A.[經(jīng)度],A.[緯度],B.[經(jīng)度],B.[緯度]) [DIS]

  FROM [dbo].[T1] A,[dbo].[T1] B

  where [dbo].[fnGetDistance] (A.[經(jīng)度],A.[緯度],B.[經(jīng)度],B.[緯度])<=500

解釋一下:

直接像調(diào)用系統(tǒng)函數(shù)如max(),avg()一樣調(diào)用該自定義函數(shù)進(jìn)行求兩個(gè)點(diǎn)的距離。

方法二(利用空間類型數(shù)據(jù)進(jìn)行計(jì)算距離)

計(jì)算方法:

SELECT * ,A.[經(jīng)緯度點(diǎn)].STDistance(B.[經(jīng)緯度點(diǎn)]) distance

FROM [dbo].[T1_Point] A,[dbo].[T1_Point] B

where A.[經(jīng)緯度點(diǎn)].STDistance(B.[經(jīng)緯度點(diǎn)])<=500

解釋一下:

將度量該實(shí)例與調(diào)用 STDistance() 的實(shí)例之間的距離。 如果 other_geography 是一個(gè)空集,則 STDistance() 返回 null。

方法三(利用空間類型數(shù)據(jù)制造Buffer對(duì)點(diǎn)數(shù)據(jù)進(jìn)行圈選)

計(jì)算方法:

SELECT *

      ,A.[經(jīng)緯度點(diǎn)].STDistance(B.[經(jīng)緯度點(diǎn)]) distance

FROM [dbo]. [T1_Point] A,[dbo]. [T1_Point] B

where  A.[經(jīng)緯度點(diǎn)].STBuffer(500).STContains(B.[經(jīng)緯度點(diǎn)])=1

解釋一下:

STBuffergeography的緩沖區(qū),同mapinfobuffer類似,里面的500指的是500米范圍內(nèi)。

STContains()為調(diào)用 geography 實(shí)例在空間上包含傳遞給該方法的 geography 實(shí)例,則返回 1;否則,返回 0。 如果兩個(gè) geography 實(shí)例的 SRID 不同,則返回 null。

大白話就是以第一個(gè)點(diǎn)制作的buffer區(qū)域是否包含第二個(gè)里面的點(diǎn)

如何用SQL SERVER數(shù)據(jù)庫(kù)計(jì)算距離并像MapInfo一樣圈選數(shù)據(jù).docx


 

本人無(wú)不為,QQ345071917,本人愿意和大家一起共同學(xué)習(xí)。!



查看積分策略說(shuō)明
附件下載列表:
掃碼關(guān)注5G通信官方公眾號(hào),免費(fèi)領(lǐng)取以下5G精品資料
  • 1、回復(fù)“YD5GAI”免費(fèi)領(lǐng)取《中國(guó)移動(dòng):5G網(wǎng)絡(luò)AI應(yīng)用典型場(chǎng)景技術(shù)解決方案白皮書
  • 2、回復(fù)“5G6G”免費(fèi)領(lǐng)取《5G_6G毫米波測(cè)試技術(shù)白皮書-2022_03-21
  • 3、回復(fù)“YD6G”免費(fèi)領(lǐng)取《中國(guó)移動(dòng):6G至簡(jiǎn)無(wú)線接入網(wǎng)白皮書
  • 4、回復(fù)“LTBPS”免費(fèi)領(lǐng)取《《中國(guó)聯(lián)通5G終端白皮書》
  • 5、回復(fù)“ZGDX”免費(fèi)領(lǐng)取《中國(guó)電信5G NTN技術(shù)白皮書
  • 6、回復(fù)“TXSB”免費(fèi)領(lǐng)取《通信設(shè)備安裝工程施工工藝圖解
  • 7、回復(fù)“YDSL”免費(fèi)領(lǐng)取《中國(guó)移動(dòng)算力并網(wǎng)白皮書
  • 8、回復(fù)“5GX3”免費(fèi)領(lǐng)取《 R16 23501-g60 5G的系統(tǒng)架構(gòu)1
  • 對(duì)本帖內(nèi)容的看法? 我要點(diǎn)評(píng)

     
    [充值威望,立即自動(dòng)到帳] [VIP貴賓權(quán)限+威望套餐] 另有大量?jī)?yōu)惠贈(zèng)送活動(dòng),請(qǐng)光臨充值中心
    充值擁有大量的威望和最高的下載權(quán)限,下載站內(nèi)資料無(wú)憂
    無(wú)不為
    VIP會(huì)員
    鎵嬫満鍙風(fēng)爜宸查獙璇? style=


     發(fā)短消息    關(guān)注Ta 

    積分 168
    帖子 51
    威望 20046 個(gè)
    禮品券 10 個(gè)
    專家指數(shù) -87
    注冊(cè) 2011-11-4
    專業(yè)方向  移動(dòng)網(wǎng)絡(luò)優(yōu)化
    回答問(wèn)題數(shù) 0
    回答被采納數(shù) 0
    回答采納率 0%
     
    發(fā)表于 2021-04-01 08:39:08  只看樓主  QQ
    技術(shù)問(wèn)題,回答得專家指數(shù),快速升級(jí)


    QUOTE:
    原帖由 yin00jian 于 2021-3-31 18:40:17 發(fā)表
    如何用SQL SERVER數(shù)據(jù)庫(kù)計(jì)算距離并像MapInfo一樣圈選數(shù)據(jù)在MapInfo因?yàn)榘鏅?quán)的問(wèn)題不讓使用和存在大量的經(jīng)緯度數(shù)據(jù)計(jì)算的背景下,本人提供3種方法進(jìn)行經(jīng)緯度的計(jì)算和Buffer數(shù)據(jù)圈選。(要求你有一點(diǎn)數(shù)據(jù)庫(kù)的基礎(chǔ) ...

    補(bǔ)充一下空間字段展示:

    空間字段.jpg

    空間字段的點(diǎn)顯示:

    image.png

    對(duì)本帖內(nèi)容的看法? 我要點(diǎn)評(píng)

     
    [立即成為VIP會(huì)員,百萬(wàn)通信專業(yè)資料立即下載,支付寶、微信付款,簡(jiǎn)單、快速!]

    快速回復(fù)主題    
    標(biāo)題
    內(nèi)容
     上傳資料請(qǐng)點(diǎn)左側(cè)【添加附件】

    (勾選中文件為要?jiǎng)h除文件)


    當(dāng)前時(shí)區(qū) GMT+8, 現(xiàn)在時(shí)間是 2025-02-03 00:52:55
    渝ICP備11001752號(hào)  Copyright @ 2006-2016 mscbsc.com  本站統(tǒng)一服務(wù)郵箱:mscbsc@163.com

    Processed in 0.394039 second(s), 17 queries , Gzip enabled
    TOP
    清除 Cookies - 聯(lián)系我們 - 移動(dòng)通信網(wǎng) - 移動(dòng)通信論壇 - 通信招聘網(wǎng) - Archiver