序文: 少し前に、地図関連のバックエンド プロジェクトを開発しました。このプロジェクトでは、いくつかの点線面の保存、クエリ、および分析操作が必要でした。そのため、MySQL の空間関数を徹底的に調査し、プロジェクトに適用しました。MySQL は、空間データの保存と処理のために専用の型ジオメトリ (すべての空間構造をサポート) と、さらに細分化された型 1. データ型1. MySQL空間データとは何か
![]()
2. GeoJSONとは
3. 空間データ型のフォーマット(ジオメトリをGeoJSONに変換する)
例: サンプルデータの準備 関数の適用例 1. ルテン気象観測点の情報を照会し、ジオメトリをgeojson形式に変換します。 SQLを実行します: id = 1 の場合、meteorological_point から geojson として id、point_name、ST_ASGEOJSON(point_geom) を選択します。 クエリ結果: 2. 新しいポイント情報を追加します。クライアントから送信されたポイントジオメトリ文字列は、挿入する前にST_GEOMFROMTEXT関数を使用して処理する必要があります。そうしないと、エラーが報告されます。 クライアントがポイント情報を送信する { "point_name":"新帥グループ監視ポイント", "geotext":"POINT(117.420671499 40.194914201)"} } エラー例: meteorological_point(point_name, point_geom) に値を挿入します("Xinshuai Group Monitoring Point", "POINT(117.420671499 40.194914201)") エラー 1416 - GEOMETRY フィールドに送信したデータからジオメトリ オブジェクトを取得できません 正しい挿入SQL: meteorological_point(point_name, point_geom) に値を挿入します("Xinshuai Group Monitoring Point", ST_GEOMFROMTEXT("POINT(117.420671499 40.194914201)")) 3. 新しいポイントを追加します。クライアントから送信されたポイントの形式は geojson 形式です。挿入する前に、ST_GeomFromGeoJSON 関数で処理する必要があります。 クライアントがポイント情報を送信する { "point_name":"民間爆発物会社監視ポイント", "geojson":"{"type": "ポイント", "座標": [117.410671499, 40.1549142015]}"} } SQLを挿入 meteorological_point(point_name, point_geom) に値を挿入します("Minbao Company Monitoring Point", ST_GeomFromGeoJSON("{\"type\": \"Point\", \"coordinates\": [117.410671499, 40.1549142015]}")) 空間データフォーマットの概要
2. 空間分析
1. ポイントと半径に基づいてバッファゾーンを生成する
ST_ASGEOJSON(ST_BUFFER(ST_GeomFromGeoJSON('${geojsonStr}'),${radius})) を選択します SQL 解釈
例:
パブリッククラス MercatorUtils { /** * ポイント GeoJSON をメルカトル図法に変換* * @param ポイント * @戻る */ パブリック静的JSONObject point2Mercator(JSONObject point) { JSONArray xy = point.getJSONArray(座標); JSONArray メルカトル = lngLat2Mercator(xy.getDouble(0), xy.getDouble(1)); point.put(座標、メルカトル); 戻りポイント; } /** * 緯度と経度をメルカトル図法に変換*/ パブリック静的JSONArray lngLat2Mercator(double lng, double lat) { ダブルx = lng * 20037508.342789 / 180; ダブル y = Math.log(Math.tan((90 + lat) * M_PI / 360)) / (M_PI / 180); y = y * 20037508.34789 / 180; JSONArray xy = 新しいJSONArray(); xy を追加します。 xy を追加します。 xy を返します。 } /** * メルカトル座標系データを通常の座標系に変換する*/ パブリック静的JSONObject mercatorPolygon2Lnglat(JSONObject polygon) { JSONArray 座標 = polygon.getJSONArray(COORDINATES); JSONArray xy = 座標.getJSONArray(0); JSONArray ms = 新しい JSONArray(); (int i = 0; i < xy.size(); i++) の場合 { JSON配列 p = xy.getJSONArray(i); JSONArray m = mercator2lngLat(p.getDouble(0), p.getDouble(1)); ms.add(m); } JSONArray の新しい座標 = 新しい JSONArray(); 新しい座標を追加します(ms); polygon.put(座標、新しい座標); ポリゴンを返します。 } } 変換された
まとめ: 上記では、 3. ポイントが位置する都市を特定する
ST_INTERSECTS(ST_GeomFromGeoJSON('${geoJsonStrA}'), ST_GeomFromGeoJSON('${geoJsonStrB}')) を選択します SQL 解釈: フォーマット関数を使用して 4. よく使われる空間関数 要約: これで、MySQL 空間データ ストレージと関数に関するこの記事は終了です。MySQL 空間データ ストレージと関数に関するより関連性の高いコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
序文:この知識を理解する必要がある人は、すでにプロセス間通信とスレッド間通信の基本的な理解を持ってい...
Vueドロップダウンリストの2つの実装最初の方法はv-forを使用する <el-select ...
目次Tomcat ダウンロードチュートリアルTomcat インストールチュートリアルTomcat の...
目次MySQL テーブルの断片化の原因行の断片化行内断片化空き領域の断片化MySQL で極度に断片化...
以下では、よく使われるヘッド構造と、各タグや要素の意味や使用シーンを紹介します(この記事は、Yisi...
アレイの重複排除は、通常、就職面接中に遭遇し、アレイの重複排除方法のコードを手動で記述することが求め...
MySQL には読み取りと書き込みを分離するアーキテクチャが多数あります。Baidu のそれらのほと...
find コマンドは主にディレクトリやファイルを検索するために使用され、一致のために複数のパラメータ...
1. セットアップを始める次のコード関数を簡単に紹介します。 ref 関数を使用して変数の変更を監視...
数日前、図書館はサーバー(Ubuntu 14.04)にセキュリティ上の脆弱性があり、時間通りに修復さ...
この記事では、Windows10でmysql8.0.17を置き換える具体的な手順を参考までに紹介しま...
ネットサーフィンをしていると、私の注意を引こうとする美しいグラフィックでいっぱいの Web サイトを...
従来の解決策FileReader を使用して UTF-8 形式のファイルを読み取り、ファイルの内容に...
目次1. プロジェクトフォルダ構造1. アセットフォルダ2. 図書館3. ローカル設定(ローカル) ...