当前位置: 首页 > 工具软件 > PostGIS > 使用案例 >

postgis——SRID

常雅珺
2023-12-01

SRID,即空间引用标识符。
每个空间实例都有一个空间引用标识符 (SRID)。SRID 对应于基于特定椭圆体的空间引用系统,可用于平面球体映射或圆球映射。空间列可包含具有不同 SRID 的对象。然而,在使用 SQL Server 空间数据方法对数据执行操作时,仅可使用具有相同 SRID 的空间实例。从两个空间数据实例派生的任何空间方法的结果仅在这两个实例具有相同的 SRID(该 SRID 基于相同的用于确定实例坐标的度量单位、数据和投影)时才有效。SRID 最常见的度量单位为米或平方米。
如果两个空间实例的 SRID 不相同,则对这两个实例使用 geometry 或 geography 数据类型方法后的结果将返回 NULL。

例如:
创建两个srid不同的表:t_gis和t1

postgis=# select * from geometry_columns  where f_table_name in('t_gis','t1');           
 f_table_catalog | f_table_schema | f_table_name | f_geometry_column | coord_dimension | srid |   type   
-----------------+----------------+--------------+-------------------+-----------------+------+----------
 postgis         | public         | t_gis        | geom              |               2 | 4326 | GEOMETRY
 postgis         | public         | t1           | geom              |               2 |    0 | GEOMETRY
(2 rows)

进行关联查询:
得到的值为空。

postgis=# select * from t_gis join t1 on (t_gis.geom=t1.geom);
 name | geom | name | geom 
------+------+------+------
(0 rows)

将t1的srid改为4326:

postgis=# select updategeometrysrid('t1','geom',4326);
         updategeometrysrid          
-------------------------------------
 public.t1.geom SRID changed to 4326
(1 row)
postgis=# select * from geometry_columns  where f_table_name in('t_gis','t1');
 f_table_catalog | f_table_schema | f_table_name | f_geometry_column | coord_dimension | srid |   type   
-----------------+----------------+--------------+-------------------+-----------------+------+----------
 postgis         | public         | t_gis        | geom              |               2 | 4326 | GEOMETRY
 postgis         | public         | t1           | geom              |               2 | 4326 | GEOMETRY
(2 rows)

再进行关联查询:

postgis=# select * from t_gis join t1 on (t_gis.geom=t1.geom);
 name  |                        geom                        |  name  |                        geom                        
-------+----------------------------------------------------+--------+----------------------------------------------------
 Point | 0101000020E610000000000000000000000000000000000000 | point1 | 0101000020E610000000000000000000000000000000000000
(1 row)

需要注意,几何图形默认的srid为0,如果修改srid后再插入数据会报错:

postgis=# insert into t1 values('point2','point(1 1)');
ERROR:  Geometry SRID (0) does not match column SRID (4326)

因此插入的时候需要指定对应的srid才行:

postgis=# insert into t1 values('point2','SRID=4326;point(1 1)');     
INSERT 0 1
postgis=# select name,st_astext(geom) from t1;
  name  | st_astext  
--------+------------
 point1 | POINT(0 0)
 point2 | POINT(1 1)
(2 rows)
 类似资料: