v425-BP3 如何添加空间参考系统(SRS)

【 使用环境 】生产环境 or 测试环境
测试环境

【 OB or 其他组件 】
SQL

【 使用版本 】
v4.2.5 BP3

【问题描述】清晰明确描述问题
执行 select st_geomfromtext(‘POINT(112.6 23.68)’, 4326);
提示 [SR001][3548] Spatial reference system is empty

参考官方文档查询 information_schema.st_spatial_reference_systems 未找到 WGS84

请问应该如何插入 WGS84 的空间参考系统,用来支持 st_geomfromtext(xxx, 4326)

【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):

【SOP系列 22 】——故障诊断第一步(自助诊断和诊断信息收集)

【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手] 即可召唤小助手,欢迎试用!

根据文档库中的信息,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);

注意事项

  1. 权限要求:插入 SRS 定义的操作需要管理员权限,请确保当前用户具有足够的权限。
  2. 版本兼容性:上述方法适用于 OceanBase 社区版 v4.2.5 BP3。如果您使用的是其他版本,请参考对应版本的官方文档。
  3. 备份数据:在生产环境中操作内部表前,请务必做好数据备份。

如果上述方法仍无法解决问题,建议联系 OceanBase 的人工答疑团队以获取进一步支持。

详情请参考:

  1. 函数索引不支持的系统函数列表
  2. 创建几何值函数
  3. 使用 systemd 部署 OceanBase 数据库
  4. 空间构造函数
  5. 0001 ~ 3999
  6. 空间分析函数
  7. OB_VERSION
  8. 空间类型
  9. 空间运算函数

按照小助手的方法,有两个问题:
1、 sys 用户成功插入 WGS 84,
使用 sys用户执行
select * from oceanbase.__all_spatial_reference_systems;
和 select * from information_schema.st_spatial_reference_systems;
也都能查到


但是执行 SELECT ST_AsText(ST_GeomFromText(‘POINT(112.6 23.68)’, 4326)); 仍然报错。

2、使用租户,无论是 root 还是普通用户,都查不到 sys 插入的 WGS 84 数据

@论坛小助手

小助手在一本正经的胡说八道。。。
执行 alter system flush metadata cache 报错,提示如下:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your OceanBase version for the right syntax to use near ‘metadata cache’ at line 1

@辞霜 能帮忙看看吗?这个问题对我挺重要的

好的稍等

你好 黑屏创建的租户需要手动导入空间坐标系建议参考这篇官方文档进行创建。
https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001504585

按照官方文档,执行 alter system load module data module=gis tenant=ncs_user infile=‘etc/default_srs_data_mysql.sql’;
报错:
ERROR 1235 (0A000): module_data in cluster under version 4.2.5.0 not supported

执行 select version() 返回 5.7.25-OceanBase_CE-v4.2.5.3

用import_srs_data.py这个脚本试试
python /home/admin/oceanbase/bin/import_srs_data.py -p’$password’ -hlocalhost -P port_number -t $tenant_name -f /home/admin/oceanbase/etc/default_srs_data_mysql.sql