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('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坐標係統坐標
https://postgis.net/docs/manual-2.0/ST_Distance.html
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)
最後更新:2017-06-24 15:33:49