在 PostgreSQL 中注册 ST_Geometry 列

如果使用 SQL 创建包含 ST_Geometry 列的表,可注册该列以使用特定的空间参考和维数。这样,通过 SQL 插入记录的用户便不会意外插入使用不同空间参考或包含不同维数的记录。要执行此操作,请使用 sde.st_register_spatial_column 函数。使用此函数的语法如下:

SELECT st_register_spatial_column('<database_name>', '<schema_name>', 
'<table_name>', '<spatial_column_name>', <srid>, <coordinate_dimension>)

public.sde_spatial_references 表中必须存在您指定的 SRID。坐标维度表示数据仅有 x,y 坐标 (2) 还是有 x,y,z 坐标 (3)、x,y,z,m 坐标 (4) 或 x,y,m 坐标 (5)。默认情况下,如果不指定坐标维度,则数据将注册为仅有 x,y 维度。

以下步骤提供一个示例,介绍如何在 PostgreSQL 中注册 ST_Geometry 列以使用特定 SRID 和维数:

步骤:
  1. 打开命令提示符或 shell 提示符,然后登录 psql。连接到含有要注册 ST_Geometry 列的表的数据库。

    此例中,用户 horace 连接到数据库 spatdat psql spatdat horace

  2. 在 SQL 提示符处,调用 st_register_spatial_column 函数来注册表的空间列,以使用特定 SRID 和维数。

    此处,方案 cleo 中 waypoints 表的 geo 列注册为 SRID 等于 104199 和 x,y,z 维数:

    SELECT sde.st_register_spatial_column('spatdat', 'cleo', 
    'waypoints', 'geo', 104199, 3);
    

    用户 horace 对 cleo.waypoints 表必须至少有 SELECT 权限才能注册空间列。

  3. 要确认表已正确注册,可使用 st_isregistered_spatial_column 和 st_get_coord_dimension 函数返回注册信息。

    如果列已注册为指定 SRID,st_isregistered_spatial_column 函数返回 1(真)。

    SELECT sde.st_isregistered_spatial_column('spatdat', 'cleo', 
    'waypoints', 'geo', 104199);
    
    st_isregistered_spatial_column
    --------------------------------
    1
    

    st_get_coord_dimension 函数返回表可存储的坐标维度:

    SELECT sde.st_get_coord_dimension('cleo', 'waypoints', 
    'geo', 104199);
    
    st_get_coord_dimension
    --------------------------------
    xyz
    

相关主题

9/15/2013