根据文档库中的信息,OceanBase 数据库支持空间数据类型的构造、存储和分析,并提供了相关函数如 ST_GeomFromText()
用于创建几何图形。然而,您在执行 ST_GeomFromText('POINT(112.6 23.68)', 4326)
时遇到了 [SR001][3548] Spatial reference system is empty
的错误提示,这表明当前数据库中并未定义 SRID 为 4326 的空间参考系统(WGS84)。
以下是解决此问题的步骤:
1. 确认当前 SRS 定义
您可以通过查询 information_schema.ST_SPATIAL_REFERENCE_SYSTEMS
表来确认当前数据库中已定义的空间参考系统:
SELECT * FROM information_schema.ST_SPATIAL_REFERENCE_SYSTEMS;
如果查询结果为空或未包含 SRID 为 4326 的记录,则需要手动插入 WGS84 的定义。
2. 插入 WGS84 的 SRS 定义
目前,OceanBase 社区版并未提供直接插入 SRS 的内置工具或命令,但您可以手动插入 WGS84 的定义。以下是一个示例 SQL 语句,用于插入 SRID 为 4326 的 WGS84 定义:
INSERT INTO oceanbase.__all_spatial_reference_systems (
srid,
organization,
organization_coordsys_id,
definition
) VALUES (
4326,
'EPSG',
4326,
'GEOGCS["WGS 84",DATUM["World Geodetic System 1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AXIS["Latitude",NORTH],AXIS["Longitude",EAST],AUTHORITY["EPSG","4326"]]'
);
注意:
- 上述 SQL 中的
oceanbase.__all_spatial_reference_systems
是 OceanBase 内部表,用于存储空间参考系统定义。
- 如果您的数据库版本或配置不同,可能需要调整表名或字段名称,请参考官方文档或联系技术支持确认。
3. 验证插入结果
插入完成后,再次查询 information_schema.ST_SPATIAL_REFERENCE_SYSTEMS
表,确保 SRID 为 4326 的记录已成功添加:
SELECT * FROM information_schema.ST_SPATIAL_REFERENCE_SYSTEMS WHERE SRID = 4326;
4. 测试 ST_GeomFromText
函数
最后,重新执行您的原始查询,验证是否可以正确解析 SRID 为 4326 的几何对象:
SELECT ST_GeomFromText('POINT(112.6 23.68)', 4326);
注意事项
-
权限要求:插入 SRS 定义的操作需要管理员权限,请确保当前用户具有足够的权限。
-
版本兼容性:上述方法适用于 OceanBase 社区版 v4.2.5 BP3。如果您使用的是其他版本,请参考对应版本的官方文档。
-
备份数据:在生产环境中操作内部表前,请务必做好数据备份。
如果上述方法仍无法解决问题,建议联系 OceanBase 的人工答疑团队以获取进一步支持。
详情请参考:
- 函数索引不支持的系统函数列表
- 创建几何值函数
- 使用 systemd 部署 OceanBase 数据库
- 空间构造函数
- 0001 ~ 3999
- 空间分析函数
- OB_VERSION
- 空间类型
- 空间运算函数