2012-11-13 39 views
-1

如我所示here當我們移動到極點時,一度經度的值(多少公里)減少。我需要一個算法來計算給定點(經度和緯度)的一個經度的當前公里數。T-SQL根據特定座標計算1.0的經度值

提前致謝。

+0

@HighPerformanceMark這非常有幫助。爲什麼我應該開始學習會花費太多時間的東西,如果我有一個例子,我會嘗試在T-SQL中實現它。我厭惡消極意見,評論和仇恨。 – gotqn

+0

@HighPerformanceMark我會以某種方式或其他方式找到解決方案,我會在這裏發佈 - 這將爲將來節省時間尋找類似的東西,這是SO帶來的巨大好處。所以,像你這樣的評論是沒有幫助的,只能冒犯別人,迫使他放棄提問並最終回答。但畢竟這是個人選擇...... – gotqn

回答

1

爲了計算有多少米,經度和緯度的特定地理點的長度,我用下面的算法:

-- Geograpic Point Cordinates 
DECLARE @LATTIDUDE REAL=45 
DECLARE @LONGITUDE REAL=45 
DECLARE @Distance REAL=10 

-- Constants 
DECLARE @ConvertionConstant AS FLOAT=2*PI()/360 
DECLARE @MetersPerDegree AS FLOAT 

DECLARE @LattidueInRadians AS [email protected]*@LATTIDUDE 

DECLARE @LongitudeParameter1 AS FLOAT=111412.84 
DECLARE @LongitudeParameter2 AS FLOAT=-93.5 
DECLARE @LongitudeParameter3 AS FLOAT=0.118 

SET @MetersPerDegree=(@LongitudeParameter1*COS(@LattidueInRadians))+(@LongitudeParameter2*(COS(3*@LattidueInRadians)))+(@LongitudeParameter3*COS(5*@LattidueInRadians)) 
DECLARE @LongitudeRangeTemp AS [email protected]/(@MetersPerDegree/1000) 

-- Results for longitude 
SELECT @LongitudeRangeTemp AS DegreesForGivenKM 
SELECT @MetersPerDegree AS MetersPerDegreeOfLongitude 

-- Constants 
DECLARE @LatitudeParameter1 AS FLOAT=111132.92 
DECLARE @LatitudeParameter2 AS FLOAT=-559.82 
DECLARE @LatitudeParameter3 AS FLOAT=1.175 
DECLARE @LatitudeParameter4 AS FLOAT=-0.0023 

-- Results for longitude 
SET @MetersPerDegree=(@LatitudeParameter1+(@LatitudeParameter2*COS(2*@LattidueInRadians))+(@LatitudeParameter3*COS(4*@LattidueInRadians))+(@LatitudeParameter4*COS(6*@LattidueInRadians))) 
DECLARE @LatitudeRangeTemp AS [email protected]/(@MetersPerDegree/1000) 
SELECT @LatitudeRangeTemp AS DegreesForGivenKM 
SELECT @MetersPerDegree AS MetersPerDegreeOfLatitude 

另外一個參數是公里加 - 代碼將計算如何許多度數等於給定的公里數。

您可以自由地在函數中實現代碼。

1

這實際上比您想象的要難,但Google會幫助處理棘手的問題。

不過,基本上你可以使用這個一些變化:

declare @radius as float; 
declare @latitude as float; 
declare @circumference float; 

set @radius = 6378 -- in km 
set @latitude = 0 -- 0 = equator : 90 = pole 

set @circumference = 2 * pi() * @radius * cos(radians(@latitude)) 

select @circumference 
select (@circumference/360) as km 
select (@circumference/360)/1.609344 as miles 

棘手位我所提到的都是事實,地球是不是一個幾何球體,而不是完全平坦 - 但上述是非常粗略的,因爲你可以使用更精確的半徑。

編輯:

或者,如果您有SQL 2008(或以上),你可以使用 「地理」 的數據類型和STDistance()函數。

declare @p1 geography = geography::STPointFromText('POINT(1 ' + cast(@latitude as varchar(10))+')', 4326) 
declare @p2 geography = geography::STPointFromText('POINT(2 ' + cast(@latitude as varchar(10))+')', 4326) 

SELECT @p1.STDistance(@p2); -- this is in metres 

在上述例子中,發現兩個點之間的距離在相同緯度,但以1°的經度和2°的經度。

相關問題