PostGis设置SRID(报错为org.postgresql.util.PSQLException:错误: Operation on mixed SRID geometries)

今天遇到一个问题:

org.postgresql.util.PSQLException:错误:
Operation on mixed SRID geometries

通过pgAdminIII工具看到其他表的SRID为-1,唯独报错的 表的SRID为4326,所以在网上找了找PostgreGis设置表的SRID的文章,后来找到一篇不错的文章,这里借鉴一下:
连接为:http://blog.csdn.net/cnhome/article/details/6990060(以防文件被删除,这里将重要的文字拷贝一份)

因为倒入shp时没有指定相应的SRID,会造成入库数据中SRID取值为-1。当知道了空间对象的坐标系时,如何将空间几何体修改为新的坐标系ID呢。

首先,修改geometry_columns表中对应字段的SRID为新的坐标系ID;

其次,修改beijing_highway表的定义,将enforce_dims_the_geom的定义的(st_srid(the_geom) = (-1))删除(注:此处the_geom是空间字段);

然后,更新数据内容 update table_name set the_geom = st_geomfromtext(ST_AsText(the_geom),4326)(注:此处4326为数据的坐标系ID);

最后,将enforce_dims_the_geom的定义(st_srid(the_geom) = (4326))加回去就可以变更SRID了。


如果是从一个坐标系向另外一个坐标系调整,就需要进行坐标系的变换了。这时候你可能会意识到,字段是只能增加,也就是插入。

此处可以参考别人的一篇博文,http://hi.baidu.com/jrc520/blog/item/d070d84385987c0072f05daf.html

采用postgis函数将墨卡托投影变成4326并插入空间数据库

QuanGuo=# insert into test values(1,’hahaha’,st_transform(st_geomfromtext(‘POINT
(10070507.650288 4282901.6281314)’,900913),4326));
INSERT 0 1

按着文章的步骤最后问题解决了。在这个过程中我还学到了一些东西,通过PGAdminIII工具可以看到PostgreGis库中的每一个表的Geometry字段的SRID的值也可以改变该值(表geometry_columns),但是只是改变这一个值是不起作用的,还有根据上面的步骤操作才可以。

上面的操作涉及到的sql语句为:

第一步:

通过PGAdminIII工具可以看到PostgreGis库中的每一个表的Geometry字段的SRID的值也可以改变该值(表geometry_columns),但是只是改变这一个值是不起作用的,还有根据上面的步骤操作才可以。

第二步:


alter table guanxian drop   CONSTRAINT enforce_srid_the_geom

第三步:

update guanxian set the_geom = st_geomfromtext(ST_AsText(the_geom),-1)

转载自:https://blog.csdn.net/duanmuxiao/article/details/38902071

You may also like...