N キロメートル以内のデータを検索する MySQL の簡単な例

N キロメートル以内のデータを検索する MySQL の簡単な例

地球の円周率と半径、検索ポイントの経度と緯度から、検索ポイントと検索データテーブル間の距離はNキロメートル以内となります。

1. テストテーブルを作成する

テーブル `location` を作成します (
 `id` int(10) 符号なし NOT NULL AUTO_INCREMENT,
 `name` varchar(50) NOT NULL,
 `経度` 小数点(13,10) NOT NULL,
 `緯度` 小数点(13,10) NOT NULL,
 主キー (`id`)、
 キー `long_lat_index` (`経度`,`緯度`)
)ENGINE=InnoDB デフォルト文字セット=utf8;

2. テストデータを挿入する

場所(名前、経度、緯度)の値に挿入します
(「広州東駅」、113.332264、23.156206)、
(「リン・ヘキ」、113.330611、23.147234)、
('バランスラック',113.328095,23.165376);

mysql> `location` から * を選択します。
+----+--------------+----------------+---------------+
| ID | 名前 | 経度 | 緯度 |
+----+--------------+----------------+---------------+
| 1 | 広州東駅 | 113.3322640000 | 23.1562060000 |
| 2 | リンヘキシ | 113.3306110000 | 23.1472340000 |
| 3 | バランスフレーム | 113.3280950000 | 23.1653760000 |
+----+--------------+----------------+---------------+

3. 1km以内のデータを検索する

検索ポイントの座標: タイムズスクエア113.323568, 23.146436

6370.996 kmは地球の半径です

球面上の2点間の座標距離を計算する式

C = sin(MLatA)sin(MLatB)cos(MLonA-MLonB) + cos(MLatA)cos(MLatB) 
距離 = RArccos(C)*Pi180

計算式によると、クエリステートメントは次のようになります。

`location` から * を選択 (
アコス(
sin(([#緯度#]*3.1415)/180) * sin((緯度*3.1415)/180) + 
cos(([#緯度#]*3.1415)/180) * cos((緯度*3.1415)/180) * cos(([#経度#]*3.1415)/180 - (経度*3.1415)/180)
)*6370.996
)<=1;

クエリを実行します。

mysql> `location` から * を選択します (
  -> アコス(
  -> sin((23.146436*3.1415)/180) * sin((緯度*3.1415)/180) + 
  -> cos((23.146436*3.1415)/180) * cos((緯度*3.1415)/180) * cos((113.323568*3.1415)/180 - (経度*3.1415)/180)
  -> )*6370.996
  -> )<=1;
+----+-----------+----------------+---------------+
| ID | 名前 | 経度 | 緯度 |
+----+-----------+----------------+---------------+
| 2 | リンヘキシ | 113.3306110000 | 23.1472340000 |
+----+-----------+----------------+---------------+

上記の MySQL で N キロメートル以内のデータを検索する簡単な例が、私が皆さんと共有したいことのすべてです。これが皆さんの参考になれば幸いです。また、123WORDPRESS.COM をサポートしていただければ幸いです。

<<:  Nginx 仮想ホストを構成する 3 つの方法 (ドメイン名に基づく)

>>:  異なるドメイン名への PC または携帯電話のアクセスを区別するように Nginx を構成する方法

推薦する

JavaScriptにおけるPromiseの使い方と注意点について(推奨)

1. 約束の説明Promise は、非同期操作の最終状態 (失敗または正常完了) とその結果の値を...

MySQL のストレージ エンジンの違いと比較

MyISAM ストレージエンジンMyISAM は ISAM ストレージ エンジンに基づいており、それ...

Vue の better-scroll コンポーネントを使用して水平スクロール機能を実現する

について最近、Vue を学習する過程で、基本的な知識の練習と強化を目的として、Qunar.com の...

tomcatでcatalina.outログをカットする3つの方法の詳細な説明

1. ログセグメンテーションのためのLog4j 1) log4j-1.2.17.jar、tomcat...

phpstudy から Linux への MySQL の移行に関するチュートリアル

プロジェクトの目的元のWindows環境でphpstudyを使用して構築されたMySQL 5.5.5...

Linux dirnameコマンドの具体的な使い方

01. コマンドの概要dirname - ファイル名からディレクトリ以外のサフィックスを削除しますd...

ウェブフロントエンドエンジニアにおすすめのヒント

まず、Webフロントエンドエンジニアの価値についてお話ししましょう。現在、Web製品のインタラクショ...

ウェブページを作成するために最もよく使用されるHTMLタグ

1. よく使われるHTMLタグの最適化HTML は Web 編集者にとって基本的なスキルであるべきで...

Vue プロジェクト @change 複数のパラメータを使用して複数のイベントを渡す

まず、変更イベントは 1 つだけです。 changelevel() //値を選択選択を変更して行の値...

Vueが初めて要素を取得できなかったときの解決記録

序文Vue で要素を初回取得できない問題の解決方法は、ポップアップ ウィンドウで要素を取得するために...

Dockerコンテナ内でホストDocker操作を呼び出して実行する

まず、この投稿は Docker 初心者向けです。もちろん、ベテランであれば記事中の分割線以降の操作方...

JSデータ型検出のさまざまな方法の概要

目次背景データ型を決定する方法は何ですか? 1. typeof を使用して基本データ型を決定します。...

複数の HTML ページで HTML コードをまとめて呼び出す方法

方法 1: スクリプト方式を使用する:共通ヘッダー ファイル head.js または共通フッター フ...

HTML 左、中央、右の適応レイアウト (calc css 式を使用)

最新の HTML 標準には、レイアウトを計算するために使用できる calc CSS 式があります。し...