AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 242001
Accepted
newbie
newbie
Asked: 2019-07-04 08:44:39 +0800 CST2019-07-04 08:44:39 +0800 CST 2019-07-04 08:44:39 +0800 CST

Mysql 8 ST_GeomFromText 在函数 st_geomfromtext 中给出错误纬度超出范围。它必须在 [-90.000000, 90.000000] 范围内

  • 772

我正在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;

但它给了我同样的结果。

spatial mysql-8.0
  • 2 2 个回答
  • 2869 Views

2 个回答

  • Voted
  1. Best Answer
    Evan Carroll
    2019-07-04T08:52:16+08:002019-07-04T08:52:16+08:00

    那是因为在 MySQL 8 上,他们做了不可思议的事情并实现了做地理坐标的愚蠢方法(如 MySQL)。这破坏了向后兼容性。

    • 当您在 MySQL 上使用 Geometry(任何 SRID)时,除了 4326 之外,您使用的是 (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 中没有真正的地理坐标系。

    边注

    如果您有可以使用的积分,则不应为此使用 WKT Point(),并且ST_SRID(pt,SRID)

    ST_SRID(Point(3.880696482497261, 102.1893310546875), 4326)
    

    更多信息

    有关更多信息,另请参阅,

    • MySQL 是否将点数据类型存储为 LAT LNG 或 LNG LAT?
    • 14
  2. Matt The Ninja
    2022-06-30T07:35:30+08:002022-06-30T07:35:30+08:00

    允许向后兼容的最新答案是提供附加参数来强制排序。

    'axis-order=long-lat'
    

    例如

    ST_GeomFromText('POINT($lng $lat)', 4326, 'axis-order=long-lat')
    

    所以你的查询会是这样的。

    INSERT INTO
       fence 
    SET       
       fenceName='aa',
       radius=2,                   
       fenceGeometry=ST_GeomFromText('POINT(102.1893310546875 3.880696482497261)', 4326, 'axis-order=long-lat')
    
    • 0

相关问题

  • 带有排序的 MongoDB 地理空间查询 - 性能问题

  • $nearSphere 返回太多数据。我错过了什么?我错了吗?它是一个错误吗?其他人看到同样的事情吗?

  • PostgreSQL:这是因为锁(行级别)吗?

  • R-Tree 如何胜过 B-Tree 来简单检查一个点是否在矩形内

  • 如何将地理点设置为北极?[关闭]

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve