[解決済み] 2点間の距離計算(緯度、経度)
2023-01-03 19:55:30
質問
地図上の2つの位置の距離を計算しようとしています。 私のデータに格納されています。経度、緯度、X POS、Y POS。
私は以前、以下のスニペットを使用していました。
DECLARE @orig_lat DECIMAL
DECLARE @orig_lng DECIMAL
SET @orig_lat=53.381538 set @orig_lng=-1.463526
SELECT *,
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 #includeDistances
FROM #orig dest
しかし、私はこれから出てくるデータを信用していません。少し不正確な結果を出しているようです。
必要であれば、いくつかのサンプルデータ
Latitude Longitude Distance
53.429108 -2.500953 85.2981833133896
私のコードを誰か助けてくれませんか。私がすでに持っているものを修正したい場合は気にしませんが、これを達成する新しい方法があればそれは素晴らしいことです。
あなたの結果がどのような測定単位であるかを述べてください。
解答方法を教えてください。
SQL Server 2008 を使用しているため、SQL Server 2008 で使用されているデータベースから
geography
というデータ型があり、まさにこの種のデータのために設計されています。
DECLARE @source geography = 'POINT(0 51.5)'
DECLARE @target geography = 'POINT(-3 56)'
SELECT @source.STDistance(@target)
与える
----------------------
538404.100197555
(1 row(s) affected)
ロンドン(付近)からエジンバラ(付近)まで約538キロメートルであることを教えてくれる。
当然ながら、最初にやるべきことはたくさんありますが、一度知ってしまえば、独自の Haversine 計算を実装するよりもはるかに簡単で、さらに多くの機能を得ることができます。
既存のデータ構造を保持したい場合は、まだ
STDistance
を構築することによって、適切な
geography
のインスタンスを作成します。
Point
メソッドを使用しています。
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
関連
-
[解決済み] SQL Serverで実行中の合計を計算する
-
[解決済み] SQLサーバーでNULL = NULLがfalseに評価される理由
-
[解決済み] 2つの緯度経度点間の距離を計算する?(ハバーシンの公式)
-
[解決済み] SQL ServerでINSERT INTOとしてデータをエクスポートする
-
[解決済み] Entity Framework VS LINQ to SQL VS ADO.NETでストアドプロシージャを使う?[クローズド]
-
[解決済み] Selectステートメントで特定のフィールドの重複を検索する
-
[解決済み] 2つのGPS座標間の距離を計算する
-
[解決済み] Postgres でサブクエリを使用してテーブルの行を更新する
-
[解決済み] 2つの日付の間の日付を選択するSQLクエリ
-
[解決済み] 緯度経度を使って2点間の距離を計算する?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
MHAの高可用性構成とフェイルオーバー
-
windows mysql prompt access denied for user ''@'localhost' to database.
-
[解決済み] SQLの結合形式 - 入れ子になった内側join
-
[解決済み] 指定されたスキーマにテーブルが存在するかどうかを確認する方法
-
[解決済み] MySQLの「スキーマの作成」と「データベースの作成」 - 違いはあるのか?
-
[解決済み] SQL Server の DateTime データ型から日付だけを返す方法
-
[解決済み] テーブルネーミングのジレンマ:単数形と複数形の名前【非公開
-
[解決済み] SQL JOIN - WHERE句とON句の比較
-
[解決済み] "ON UPDATE CASCADE "を使用する場合について
-
[解決済み] SQL/mysql - Select distinct/UNIQUE but return all column?