序文: 少し前に、地図関連のバックエンド プロジェクトを開発しました。このプロジェクトでは、いくつかの点線面の保存、クエリ、および分析操作が必要でした。そのため、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 をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
今日、null 値をテストしていたところ、小さな問題が見つかりました。ここに記録しました。以前にも遭...
目次ネットワーク構成を表示するネットワークインターフェース情報を表示する---ifconfigルーテ...
「.zip」形式は、Windows システムでファイルを圧縮するために使用されます。実際、「.zip...
mysql-5.7.20-winx64.zipインストール手順のないインストール パッケージ: ht...
01. コマンドの概要whatis コマンドは、システム コマンドの簡単な説明を含むいくつかの特別な...
背景tomcat によって生成された catalina.out ログ ファイルが分割されていない場合...
文書タイプDoctype は、指示を解析するためにどのバージョンの HTML を使用するかをブラウザ...
実装準備 # ファイルパスをバックアップする必要があります: /opt/apollo/logs/ac...
次のような初期コードがあると仮定します。 <!DOCTYPE html> <htm...
目次オープニングシーンv-for を使用した直接レンダリングカスタムコンポーネントで直接レンダリング...
データベースの移行は、よく遭遇する問題です。データ量が少ない場合、移行は基本的に問題になりません。実...
このプロジェクトでは MySQL を使用する必要があります。これまで Windows では常に確実に...
目次序文APPメソッドにジャンプURLスキームメタタグユニバーサルリンクさまざまな使い方URLスキー...
1 はじめにバイナリ ログは、データを持つ、またはデータを変更する可能性がある SQL ステートメン...
次の2つのファイルを結合するには、それらを結合して1.txtに結合します。 # 1.txt ジェリー...