本文共 1253 字,大约阅读时间需要 4 分钟。
PostgreSQL , PostGIS , ST_Transform , SRID , 26986
某个用户在使用PostgreSQL ST_Transform转换坐标时,遇到一个边界问题(暂时不清楚是不是BUG,因为对SRID还不算太了解),导致距离计算不准确。
下面两个4326坐标系的坐标,只相差了一点点,但是转换为26986坐标系时,出现了翻转。
postgres=# select ST_AsEWKT(ST_Transform(ST_GeomFromText('POINT(108.50000000001 22.8)', 4326), 26986)); st_asewkt ----------------------------------------------------- SRID=26986;POINT(8123333.59043839 12671815.6459695) (1 row) postgres=# select ST_AsEWKT(ST_Transform(ST_GeomFromText('POINT(108.5000000001 22.8)', 4326), 26986)); st_asewkt ------------------------------------------------------ SRID=26986;POINT(-7723333.59044452 12671815.6459593) (1 row)
使用转换后的坐标,计算距离,导致数据不准确。
解决方法,不要转换为26986坐标系统坐标
try this: postgres=# select ST_Distance(ST_GeographyFromText('SRID=4326;POINT(108.51 22.8)'), ST_GeographyFromText('SRID=4326;POINT(108.499999999999999 22.79)')); -[ RECORD 1 ]-------------------- st_distance | 1510.16913796499989 -- Geography example -- same but note units in meters - use sphere for slightly faster less accurate -- Geometry example - units in meters (SRID: 26986 Massachusetts state plane meters) (most accurate for Massachusetts)
转载地址:http://oeypl.baihongyu.com/