序文: 少し前に、地図関連のバックエンド プロジェクトを開発しました。このプロジェクトでは、いくつかの点線面の保存、クエリ、および分析操作が必要でした。そのため、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 をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
1. HBaseの概要1.1 HBaseとはHBase は、高い信頼性、高いパフォーマンス、列ストレ...
この記事の例では、Webメッセージボードを実装するためのjsの具体的なコードを参考までに共有していま...
まず、変更イベントは 1 つだけです。 changelevel() //値を選択選択を変更して行の値...
CentOS にはデフォルトで MariaDB がインストールされていますが、これは MySQL の...
この記事では、マーキーのシンプルな効果を実現するためのVueの具体的なコードを参考までに共有します。...
1. オブジェクトを動的に作成するJavaScript からオブジェクトを動的に作成する方法は 2 ...
この記事では、JavaScriptカルーセルの実装方法を参考までに紹介します。具体的な内容は次のとお...
Vueボタンコンポーネントのカスタムカプセル化コードは参考用です。具体的な内容は次のとおりです。ボタ...
要件: IIS 7、7.5、8.0、8.5、および ASP.NET で HTTP 応答ヘッダーを削除...
作成されたタブラベルがページの表示領域を超えると、タブラベルの距離だけ自動的にスクロールされます。ま...
MySQLの読み書き分離の落とし穴読み取りと書き込みの分離の主な目的は、メイン データベースの負荷を...
この記事では、Web ページ レイアウト デザインのいくつかの簡単な原則をまとめ、Web ページ デ...
Web デザインの理解に関しては、多くの人がまだ Web ページ制作のレベルにとどまっているようで...
OracleデータベースからエクスポートされたデータをMySqlデータベースにインポートします。 1...
CMakeをインストール sudo apt をインストール cmake この方法はインストールが簡単...