PostGIS SRID不存在的问题处理

标签

PostgreSQL , PostGIS , SRID , spatial_ref_sys


背景

GIS数据有一定的标准来表示它的数据,

The OpenGIS "Simple Features Specification for SQL" defines standard GIS object types,
the functions required to manipulate them, and a set of meta-data tables.
In order to ensure that meta-data remain consistent,
operations such as creating and removing a spatial column are carried out through special procedures defined by OpenGIS.

There are two OpenGIS meta-data tables:
SPATIAL_REF_SYS and GEOMETRY_COLUMNS.
The SPATIAL_REF_SYS table holds the numeric IDs and textual descriptions of coordinate systems used in the spatial database.

http://www.sharpgis.net/post/2007/05/05/Spatial-references2c-coordinate-systems2c-projections2c-datums2c-ellipsoids-e28093-confusing

当你使用PostGIS时,如果报这样的错误,说明SRID的信息没有写入spatial_ref_sys表,PostgreSQL无法找到合适的GIS数据表达方法。

ERROR: invalid SRID: 5514 not found in spatial_ref_sys

http://gis.stackexchange.com/questions/187770/change-srid-of-geometry-column

stackoverflow中也有类似的提问

问题

I have in my table column geom with geometry, data type of this column is geometry(Point,102067).
I want to change SRID from 102067 to 5514, but if I use this command  

select UpdateGeometrySRID('my_schema', 'table', 'geom', 5514) ;  

docs say: ERROR: invalid SRID: 5514 not found in spatial_ref_sys CONTEXT:
SQL statement "SELECT UpdateGeometrySRID('',$1,$2,$3,$4)"  

I found, that EPSG:5514 = EPSG:102067 (both is S-JTSK_Krovak_East_North),
but in second table I have EPSG:5514, and for example comand ST_Contains says: Operation on mixed SRID geometries.

回答

The error happened because EPSG:5514 is no added in spatal_ref_sys table. So you can add it using the following query.  

INSERT into spatial_ref_sys (srid, auth_name, auth_srid, proj4text, srtext) values ( 5514, 'EPSG', 5514, '+proj=krovak +lat_0=49.5 +lon_0=24.83333333333333 +alpha=30.28813972222222 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=589,76,480,0,0,0,0 +units=m +no_defs ', 'PROJCS["S-JTSK / Krovak East North",GEOGCS["S-JTSK",DATUM["System_Jednotne_Trigonometricke_Site_Katastralni",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[589,76,480,0,0,0,0],AUTHORITY["EPSG","6156"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4156"]],PROJECTION["Krovak"],PARAMETER["latitude_of_center",49.5],PARAMETER["longitude_of_center",24.83333333333333],PARAMETER["azimuth",30.28813972222222],PARAMETER["pseudo_standard_parallel_1",78.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["X",EAST],AXIS["Y",NORTH],AUTHORITY["EPSG","5514"]]');  

Source: https://epsg.io/5514  

Click on the side menu under PostGIS to see the insert query.  

Check if SRID-5514 is inserted using:  

SELECT * FROM spatial_ref_sys WHERE srid = 5514;
Once you have inserted it, you can then change the SRID of your geometry column using the code:  

SELECT UpdateGeometrySRID('your_schema', 'table', 'geom', 5514);
You can then check the change using:  

SELECT ST_SRID(geom) FROM table LIMIT 1;

解决方法也很简单,插入SRS数据即可,找到postgis对应的版本SQL。

https://raw.githubusercontent.com/greenplum-db/postgis/4fefce57cbd28e006db60070434611228294bef3/spatial_ref_sys.sql

参考

http://spatialreference.org/ref/epsg/4326/

http://gis.stackexchange.com/questions/187770/change-srid-of-geometry-column

时间: 2024-12-02 06:30:48

PostGIS SRID不存在的问题处理的相关文章

PostGIS空间数据库SRID背景知识 - 地理坐标系(球面坐标系)和投影坐标系(平面坐标系)

背景 <PostGIS 坐标转换(SRID)的边界问题引发的背景知识 - ST_Transform> 一文,介绍了使用某个坐标系时,计算国内某个点到某个点的距离出现了负数. 背景知识和坐标系有关. 什么是地理坐标系,什么是投影坐标系? 参考此文: http://www.cnblogs.com/jetz/archive/2005/03/29/127547.html 原文 1.首先理解地理坐标系(Geographic coordinate system),Geographic coordinate

PostGIS 坐标转换(SRID)的边界问题 - ST_Transform

标签 PostgreSQL , PostGIS , ST_Transform , SRID , 26986 背景 某个用户在使用PostgreSQL ST_Transform转换坐标时,遇到一个边界问题(暂时不清楚是不是BUG,因为对SRID还不算太了解),导致距离计算不准确. 例子 下面两个4326坐标系的坐标,只相差了一点点,但是转换为26986坐标系时,出现了翻转. postgres=# select ST_AsEWKT(ST_Transform(ST_GeomFromText('POIN

Using PostGIS with QGIS

去年的一篇文章,作者看到大多数人还在使用shapefiles来存储GIS信息,觉得不够科学,为什么不将数据导入数据库,利用数据库的特性呢? 本文将介绍如何将地图数据导入PostgreSQL(假设已安装PostGIS插件),以及使用QGIS对地图数据进行编辑和查询. 首先要安装PostgreSQL以及PostGIS, 然后去找个地方下载地图数据,文中介绍OZCAM可以下载到澳大利亚西部的地图数据. 安装QGIS,打开QGIS界面,创建到PostgreSQL的连接,将地图数据导入,导入过程中要选择正

PgSQL · 功能分析 · PostGIS 在 O2O应用中的优势

最近上线了一个O2O相关的应用,用到了PostgreSQL和非常著名的插件PostGIS,该应用把PostgreSQL和PostGIS的优势在O2O领域成功的发挥了出来.O2O业务分为线上和线下两部分,线下部分业务和位置距离等密切相关,不可避免的需要保存商户位置信息,进行距离的计算,范围覆盖计算等,这部分业务简称LBS(Location Based Service),即基于地理位置信息服务.使用PostgreSQL和PostGIS实现这些业务,具有天然的优势. 空间数据库扩展 由于空间数据具有空

PostGIS 距离计算规范 - 投影 与 球 坐标系, geometry 与 geography 类型

标签 PostgreSQL , PostGIS , 球坐标 , 平面坐标 , 球面距离 , 平面距离 背景 PostGIS中有两种常用的空间类型geometry和geography,这两种数据类型有什么差异,应该如何选择? 对于GIS来说,首先是坐标系,有两种:一种是球坐标(地理坐标),另一种是平面坐标(投影坐标). 球坐标通常用于计算,平面坐标通常用于展示(也可以计算). 投影坐标是从球坐标投影后展开得来(用一个圆柱将地球包起来,把地球当成会发光的光源,投影后,将圆柱展开得到),投影的范围越大

如何建立GIS测试环境 - 将openstreetmap的样本数据导入PostgreSQL PostGIS库

如何建立GIS测试环境 - 将openstreetmap的样本数据导入PostgreSQL PostGIS库 作者 digoal 日期 2016-09-06 标签 PostgreSQL , openstreetmap , PostGIS , osm2pgsql , pbf , osm 背景 PostgreSQL在GIS领域的用户非常多,这得益于PostgreSQL的开放性,PostGIS即是使用PostgreSQL开放的索引访问.数据类型.函数,操作符等接口打造的一款功能非常强大的GIS数据管理

SRID (空间引用识别号, 坐标系)

背景 转自互联网 http://www.baike.com/wiki/srid http://www.cnblogs.com/jackdong/archive/2010/12/20/1911558.html https://en.wikipedia.org/wiki/Geographic_coordinate_system https://en.wikipedia.org/wiki/Spatial_reference_system#Identifier 地球并不是平的,也不是正圆形,而是一个非标

蜂巢的艺术与技术价值 - PostgreSQL PostGIS&#039;s hex-grid

标签 PostgreSQL , vector grid , polygon grid , square grid , Hexagon grid , 矢量网格 , 几何网格 , 线段网格 , 多边形网格 , 四边形网格 , 六边形网格 , 蜂巢 , PostGIS , 地图 , 转换 背景 人们为了更好的描述一个东西,有一种将大化小的思路,比如时钟被分为了12个区域,每个区域表示一个小时,然后每个小的区域又被划分为更小的区域表示分钟. 在GIS系统中,也有类似的思想,比如将地图划分成网格.通过编码

新零售空间数据库实践一例 - PostGIS 点面叠加视觉判断输出

标签 PostgreSQL , 点面视觉输出 , subquery , nestloop join , 空间索引 , gist 背景 在新零售.快递等行业,有大量的点数据(例如包裹位置.快递员位置.仓库位置等),同时有大量的面数据(如小区,商圈,写字楼等). 如何判断实时的正在配送的包裹落在哪个面呢?并且将之联系起来. 这个从视觉角度来思考,非常简单. 例如有一个地图,将其划分为若干个面(例如前面提到的小区). 然后有一些小点,这些是POINT数据. 我们从图上一眼就能看出每个点落在哪个小区(面