web-dev-qa-db-ja.com

Mysql 8 ST_GeomFromTextエラーLatitudeが関数st_geomfromtextで範囲外です。 [-90.000000、90.000000]の範囲内である必要があります

私はmysql 8で次の挿入クエリを試しています。

Insert Into fence Set       
            fenceName='aa',
            radius=2,                   
            fenceGeometry=ST_GeomFromText('POINT(102.1893310546875 3.880696482497261)', 4326)

Mysql 5.7では完全に機能しますが、ここではmysql 8でこれを取得しますerror Latitude 102.189331 is out of range in function st_geomfromtext. It must be within [-90.000000, 90.000000].

いくつかの提案に基づいて、私もこれを行いました。

ALTER TABLE fence MODIFY fenceGeometry geometry NOT NULL SRID 4326;

しかし、それでも同じ結果が得られます。

3
newbie

これは、MySQL 8で、(MySQLのように)地理座標を行うという考えられないほどの愚かな方法を実装したためです。これは後方互換性を壊しました。

  • 4326以外のMySQL(任意のSRID)でジオメトリを使用する場合、(long、lat)を使用します。これは、デカルトシステムでは(x、y)です。
  • MySQL(SRID = 4326)でGeographyを使用する場合は、(lat、long)を使用します。通常は(y、x)です。これは、英語を話す人が "経度、緯度"ではなく "緯度と経度"と言う傾向があるためです。

おもしろいことに、MySQLを所有するOracleはOracle Spatialではこれを行いません。 Oracle SpatialとPostGISは一貫して(long、lat) `です。このスイッチを解決するには、順序ではなく

_ST_GeomFromText('POINT(102.1893310546875 3.880696482497261)', 4326)
_

しかしこれは、

_ST_GeomFromText('POINT(3.880696482497261 102.1893310546875)', 4326)
_

MySQL 5.xでは、実際の地理座標系はありませんでした。

サイドノート

Point()ST_SRID(pt,SRID) を使用するだけのポイントがある場合は、これにWKTを使用しないでください。

_ST_SRID(Point(3.880696482497261, 102.1893310546875), 4326)
_

詳しくは

詳細については、

3
Evan Carroll