ここに示されているように、極に移動すると、経度 1 度の値 (km は何 km) が減少します。特定の地点 (経度と緯度) に対する経度が 1 度である現在の km を計算するためのアルゴリズムが必要です。
少し早いですがお礼を。
ここに示されているように、極に移動すると、経度 1 度の値 (km は何 km) が減少します。特定の地点 (経度と緯度) に対する経度が 1 度である現在の km を計算するためのアルゴリズムが必要です。
少し早いですがお礼を。
これは実際にはあなたが思っているより難しいですが、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 (またはそれ以上) を使用している場合は、"geography" データ型と 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° の 2 点間の距離を見つけます。
特定の地理的地点の経度と緯度の長さが何メートルであるかを計算するために、次のアルゴリズムを使用します。
-- 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 FLOAT=@ConvertionConstant*@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 FLOAT=@Distance/(@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 FLOAT=@Distance/(@MetersPerDegree/1000)
SELECT @LatitudeRangeTemp AS DegreesForGivenKM
SELECT @MetersPerDegree AS MetersPerDegreeOfLatitude
キロメートルのパラメーターが追加されました。コードは、指定されたキロメートルに等しい度数を計算します。
関数内のコードを自由に実装できます。