MySQL のジオメトリ型を使用して経度と緯度の距離の問題を処理する方法

MySQL のジオメトリ型を使用して経度と緯度の距離の問題を処理する方法

テーブルを作成する

テーブル `map` を作成します (
 `id` int(11) NULLではない、
 `address` varchar(255) NOT NULL DEFAULT ''
 `location` ジオメトリが NULL ではない、
 主キー (`id`)、
 空間キー `idx_location` (`location`)
)

入れる

マップ (ID、アドレス、場所) に VALUES (1、'somewhere'、ST_GeomFromText('POINT(121.366961 31.190049)') を挿入します。

ST_GeomFromText関数を使用する必要があり、POINT()には経度+空間+緯度が含まれていることに注意してください。

クエリ

1.緯度と経度を確認する

マップから、アドレス、ST_AsText(location) を location として選択します。

2. 2点間の距離を計算する

ST_Distance_Sphere(POINT(121.590347, 31.388094),location) を distance FROM map として選択します。

計算結果はメートル単位です。

POINT() 内の緯度と経度がカンマで区切られていることに注意してください。

3. 1000m以内の場所を検索し、遠いものから近いものへと並べ替える

次のようにコードをコピーします
SELECT id, address, ST_Distance_Sphere(POINT(121.590347, 31.388094),location) AS distance FROM map WHERE ST_Distance_Sphere(POINT(121.590347, 31.388094),location) < 1000 ORDER BY distance;

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Mybatis 学習ロード mysql バッチ データ追加方法
  • MySQLとRedisでセカンダリキャッシュを実装する方法の詳細な説明
  • MySQL共通インデックスとユニークインデックスの詳細な説明
  • mysql binlog (バイナリログ) を表示する方法
  • Docker が MySQL を作成する説明
  • PHP date() フォーマット MySQL 挿入 datetime メソッド
  • pymysql で SQL インジェクション問題を解決する方法
  • MySQLテーブルのフィールドと関連属性をエクスポートする手順
  • テーブルを開く際のMySQLスレッドの問題の解決方法
  • MySQL の制限パフォーマンス分析と最適化

<<:  vue $http の get および post リクエストのクロスドメイン問題を解決する

>>:  Tomcat が非同期サーブレットを実装する方法の詳細な説明

推薦する

Linux ベースの MySQL マスター スレーブ構成の全プロセスを記録する

mysql マスタースレーブ構成1. 準備ホスト: 192.168.244.128スレーブ: 192...

スライディングカルーセル効果を実現する js

この記事では、スライディングカルーセル効果を実現するためのjsの具体的なコードを参考までに共有します...

プロジェクトにおける CSS グリッドシステムの柔軟な使用方法の詳細な説明

序文CSS グリッドは通常、さまざまなフレームワークにバンドルされていますが、実際のビジネス ニーズ...

CentOS7 で Jenkins+Maven+Git 継続的インテグレーション環境を構築する方法

この記事では、Spring boot + Maven プロジェクトのデプロイメントを例に、Code ...

Vue で Alibaba のアイコンフォント ベクター アイコンを使用する方法について

インターネット上には多くのインポート方法があり、公式も3つのインポート方法を提供していますが、インポ...

jsはショッピングウェブサイトの商品の拡大鏡効果を実現します

この記事では、ショッピングサイトの商品の拡大鏡効果を実現するためのjsの具体的なコードを紹介します。...

React でインデックスをキーとして使用することが推奨されないのはなぜですか?

1. 古い仮想DOMと新しい仮想DOMを比較し、まずキーが同じかどうかを確認します。 2. 引き続...

Vueのフロントエンドシステムとフロントエンドとバックエンドの分離の詳細な説明

目次概要フロントエンド知識システムフロントエンドの3つの要素プレゼンテーション層 (CSS)動作レイ...

HTML でスクロールバーを使用する際のヒントを共有する

今日、牛南ニュースリリースシステムについて学んでいたとき、牛南先生はスクロールバーに関するいくつかの...

MySQL の基本クイックスタート知識のまとめ (マインドマップ付き)

目次序文1. データベースの基礎知識1. データベースとは何ですか? 2. データベースの分類3. ...

JavaScript で配列の最大値と最小値を実装する 6 つの方法

配列[1,8,5,4,3,9,2]が与えられた場合、配列の最大値9と最小値1を取得するアルゴリズムを...

div 要素に終了タグがないため、Web ページを開くことができません

最初は速度の問題だと思ったので、その後、すべての画像リンク リクエストをクロスサイト接続ではなくサイ...

MySQL のインデックス障害の一般的なシナリオと回避方法

序文これまでにも、一部の SQL ステートメントを不適切に使用すると MySQL インデックスが失敗...

CSS の border 属性と display 属性の使い方の簡単な分析

境界プロパティの概要borderプロパティは要素の境界を設定します。境界線の3要素は、太さ、線の種類...

MySQLの行数カウントに関する簡単な説明

各テーブルの行数をカウントするために使用される MySQL count() 関数は、誰もがよく知って...