web-dev-qa-db-ja.com

SRID 4326でのST_X、ST_Yによる経度と緯度の順序

私はMySQL 8.0.15を持っていて、地理空間ロケーション関数を実験しています。 SRID 4326を「loc」列に適用しました。

原始的なPoint()以外のドキュメントでは、入力を「x、y」または「long、lat」と示唆していませんが、次のクエリを実行すると、

INSERT INTO organization 
(loc, spots, name, phone, website, account_id, category_id) 
VALUES 
(
  ST_PointFromText("POINT(-113.532000 54.733000)", 4326), 
  10,
  "Baptiste",
  " ",
  null,
  null,
  null
); 

SQLエラー(3617):Latitude -113.532000は関数st_pointfromtextの範囲外です。 [-90> +90以内である必要があります]

緯度は113度ではないので、これは完全に理にかなっています。しかし、緯度/経度のパラメータを交換すると、すべてが機能します。ただし、緯度/経度をクエリすると、結果が逆になります。

SELECT 
   *, 

    ST_Y(loc) as lat,   
    ST_X(loc) as lng 

FROM 
  organization;

これらの機能と座標がどのように機能するかについて、私は何を理解していませんか?

POINT()は実際には入力でLAT、LONを受け入れているようですが、クエリを実行するときは、Yが緯度、Xが経度であることを覚えておく必要がありますか?

TIA

2
Alex.Barylski

緯度は113度ではないので、これは完全に理にかなっています。しかし、緯度/経度のパラメータを交換すると、すべてが機能します。ただし、緯度/経度をクエリすると、結果が逆になります。

これは、MySQLとMicrosoftが地理的表現で順序を入れ替えるという非常識なことをしているためです それがEPSGが言うことです 。 OracleとPostGISではサポートされていません。 MySQLの地理的表現にはX/Yはありません。 MySQL v8 を使用して、導入することにより、完全で狂気を維持しながらこれを修正しようとしました

詳細については、チェックアウト MySQLがポイントデータタイプをLAT LNGまたはLNG LATとして格納しますか?

1
Evan Carroll