第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

計(jì)算兩點(diǎn)之間的距離(緯度,經(jīng)度)

計(jì)算兩點(diǎn)之間的距離(緯度,經(jīng)度)

嗶嗶one 2019-10-06 13:12:50
我正在嘗試計(jì)算地圖上兩個(gè)位置之間的距離。我已經(jīng)在數(shù)據(jù)中存儲了:經(jīng)度,緯度,X POS和Y POS。我以前一直在使用以下代碼段。DECLARE @orig_lat DECIMALDECLARE @orig_lng DECIMALSET @orig_lat=53.381538 set @orig_lng=-1.463526SELECT *,    3956 * 2 * ASIN(          SQRT( POWER(SIN((@orig_lat - abs(dest.Latitude)) * pi()/180 / 2), 2)               + COS(@orig_lng * pi()/180 ) * COS(abs(dest.Latitude) * pi()/180)                * POWER(SIN((@orig_lng - dest.Longitude) * pi()/180 / 2), 2) ))           AS distance--INTO #includeDistancesFROM #orig dest但是,我不相信由此產(chǎn)生的數(shù)據(jù),它似乎給出了稍微不準(zhǔn)確的結(jié)果。一些樣本數(shù)據(jù),以備不時(shí)之需Latitude        Longitude     Distance 53.429108       -2.500953     85.2981833133896任何人都可以幫助我解決我的代碼,如果您有一種新的方法來實(shí)現(xiàn)這一點(diǎn),那我就介意您是否要解決已有的問題。請說明您的結(jié)果采用的計(jì)量單位。
查看完整描述

3 回答

?
MYYA

TA貢獻(xiàn)1868條經(jīng)驗(yàn) 獲得超4個(gè)贊

由于您使用的是SQL Server 2008,因此具有g(shù)eography可用的數(shù)據(jù)類型,該數(shù)據(jù)類型專門用于此類數(shù)據(jù):


DECLARE @source geography = 'POINT(0 51.5)'

DECLARE @target geography = 'POINT(-3 56)'


SELECT @source.STDistance(@target)


----------------------

538404.100197555


(1 row(s) affected)

告訴我們,從(倫敦附近)到(愛丁堡附近)大約538公里。


當(dāng)然,首先需要學(xué)習(xí)很多東西,但是一旦您知道它,就比實(shí)現(xiàn)自己的Haversine計(jì)算容易得多。再加上您可以獲得很多功能。


如果您想保留現(xiàn)有的數(shù)據(jù)結(jié)構(gòu),則仍然可以使用STDistance,方法是geography使用以下Point方法構(gòu)造合適的實(shí)例:


DECLARE @orig_lat DECIMAL(12, 9)

DECLARE @orig_lng DECIMAL(12, 9)

SET @orig_lat=53.381538 set @orig_lng=-1.463526


DECLARE @orig geography = geography::Point(@orig_lat, @orig_lng, 4326);


SELECT *,

    @orig.STDistance(geography::Point(dest.Latitude, dest.Longitude, 4326)) 

       AS distance

--INTO #includeDistances

FROM #orig dest


查看完整回答
反對 回復(fù) 2019-10-06
?
慕碼人8056858

TA貢獻(xiàn)1803條經(jīng)驗(yàn) 獲得超6個(gè)贊

下面的函數(shù)給出兩個(gè)地理坐標(biāo)之間的距離(以英里為單位)


create function [dbo].[fnCalcDistanceMiles] (@Lat1 decimal(8,4), @Long1 decimal(8,4), @Lat2 decimal(8,4), @Long2 decimal(8,4))

returns decimal (8,4) as

begin

declare @d decimal(28,10)

-- Convert to radians

set @Lat1 = @Lat1 / 57.2958

set @Long1 = @Long1 / 57.2958

set @Lat2 = @Lat2 / 57.2958

set @Long2 = @Long2 / 57.2958

-- Calc distance

set @d = (Sin(@Lat1) * Sin(@Lat2)) + (Cos(@Lat1) * Cos(@Lat2) * Cos(@Long2 - @Long1))

-- Convert to miles

if @d <> 0

begin

set @d = 3958.75 * Atan(Sqrt(1 - power(@d, 2)) / @d);

end

return @d

end 

下面的函數(shù)給出了兩個(gè)地理坐標(biāo)之間的距離(以千米為單位)


CREATE FUNCTION dbo.fnCalcDistanceKM(@lat1 FLOAT, @lat2 FLOAT, @lon1 FLOAT, @lon2 FLOAT)

RETURNS FLOAT 

AS

BEGIN


    RETURN ACOS(SIN(PI()*@lat1/180.0)*SIN(PI()*@lat2/180.0)+COS(PI()*@lat1/180.0)*COS(PI()*@lat2/180.0)*COS(PI()*@lon2/180.0-PI()*@lon1/180.0))*6371

END

下面的函數(shù) 使用sql server 2008中引入的Geography數(shù)據(jù)類型,以公里為單位給出兩個(gè)地理坐標(biāo)之間的距離


DECLARE @g geography;

DECLARE @h geography;

SET @g = geography::STGeomFromText('LINESTRING(-122.360 47.656, -122.343 47.656)', 4326);

SET @h = geography::STGeomFromText('POINT(-122.34900 47.65100)', 4326);

SELECT @g.STDistance(@h);

用法:


select [dbo].[fnCalcDistanceKM](13.077085,80.262675,13.065701,80.258916)


查看完整回答
反對 回復(fù) 2019-10-06
?
慕容708150

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超4個(gè)贊

Create Function [dbo].[DistanceKM] 

      @Lat1 Float(18),  

      @Lat2 Float(18), 

      @Long1 Float(18), 

      @Long2 Float(18)

)

Returns Float(18)

AS

Begin

      Declare @R Float(8); 

      Declare @dLat Float(18); 

      Declare @dLon Float(18); 

      Declare @a Float(18); 

      Declare @c Float(18); 

      Declare @d Float(18);

      Set @R =  6367.45

            --Miles 3956.55  

            --Kilometers 6367.45 

            --Feet 20890584 

            --Meters 6367450 



      Set @dLat = Radians(@lat2 - @lat1);

      Set @dLon = Radians(@long2 - @long1);

      Set @a = Sin(@dLat / 2)  

                 * Sin(@dLat / 2)  

                 + Cos(Radians(@lat1)) 

                 * Cos(Radians(@lat2))  

                 * Sin(@dLon / 2)  

                 * Sin(@dLon / 2); 

      Set @c = 2 * Asin(Min(Sqrt(@a))); 


      Set @d = @R * @c; 

      Return @d; 


End

GO

用法:


選擇dbo.DistanceKM(37.848832506474,37.848732506474,27.83935546875,27.83905546875)


輸出:


0,02849639


您可以使用帶注釋的浮點(diǎn)數(shù)更改@R參數(shù)。


查看完整回答
反對 回復(fù) 2019-10-06
  • 3 回答
  • 0 關(guān)注
  • 758 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號