如何让地理服务器从 MySQL 8.0 读取长纬度坐标

问题描述 投票:0回答:1

我正在尝试在 Geoserver 2.19.0 中渲染地图图层。数据存储在使用 SRID 4326 的 MySQL 8.0 数据库中。 该图层是使用前面提到的 SRID 创建的。

我从编辑图层页面放置了一些设置的片段

here

当我进入图层预览并点击打开图层

时,会显示以下异常
12 Apr 18:41:28 ERROR [geoserver.ows] -
org.geoserver.platform.ServiceException: Rendering process failed. Layers: AHS-CommonUI:map_outline
        at org.geoserver.wms.map.RenderedImageMapOutputFormat.produceMap(RenderedImageMapOutputFormat.java:660)
Caused by: java.lang.RuntimeException: java.io.IOException
        at org.geotools.data.store.ContentFeatureCollection.features(ContentFeatureCollection.java:171)

Caused by: java.sql.SQLException: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Latitude -272.812500 is out of range in function st_geomfromtext. It must be within [-90.000000, 90.000000].
        at org.geotools.jdbc.JDBCFeatureReader.runQuery(JDBCFeatureReader.java:282)
Caused by: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Latitude -272.812500 is out of range in function st_geomfromtext. It must be within [-90.000000, 90.000000].
        at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:104)

作为背景,在 MySQL 8.0 中,坐标从经度-纬度反转为纬度-经度作为标准(此处参考),如果您使用选项 axis-order= ,您仍然可以使用 long-lat 存储数据long-lat 执行函数 ST_GEOMFROMTEXT 时,但似乎 Geoserver 没有考虑到这一点。

另外,当我从 MySQL 5.6 迁移到 MySQL 8.0 时,我的问题就开始了。 在 MySQL 5.6 中,我使用此函数存储几何数据。

GEOMFROMTEXT(?, 4326)

迁移到 MySQL 8.0 后,我正在使用此功能。

ST_GEOMFROMTEXT(?, 4326, 'axis-order=long-lat')

注意:我使用选项 axis-order=long-lat 以避免更改我的其他实现。从 MySQL 8.0 开始支持上述选项

已经尝试使用最新版本的Geoserver,直到今天2.20-Nightly(之前我使用的是与MySQL 8.0不兼容的2.15.3)

作为参考,这里是用于生成图层的表定义的片段:

CREATE TABLE `map_outline` (
  `_OID_` varchar(32) NOT NULL,
  `geometry_wkt` geometry NOT NULL SRID 4326,
  PRIMARY KEY (`_OID_`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

我错过了什么吗?
我需要启用/禁用 Geoserver 中的任何配置吗?
这是一个错误吗?

mysql geoserver mysql-8.0
1个回答
0
投票

等待 GeoServer 更新,我在 SQL 视图中用

ST_SwapXY
解决了:

SELECT id, ST_SwapXY(geometry) as geom
FROM my_table

创建 SQL 视图层:

© www.soinside.com 2019 - 2024. All rights reserved.