閱讀706 返回首頁    go 阿裏雲 go 技術社區[雲棲]


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

  上一篇:go  使用PostgreSQL邏輯訂閱實現multi-master
  下一篇:go  “雲中觀世界”之二:視覺智能生態