2016-10-05 21 views
0

我正在使用帶postig擴展名的postgres。我有我投入以下PostGIS的座標功能:使用反函數將幾何轉換爲座標將結果轉換爲混合的SRID錯誤

select ST_SetSRID(ST_point(18.533935546875, 48.23199134320962),4674) 

其結果是,我得到幾何類型:01010000204212000000000000B08832402D0570E4B11D4840

當我想要做反轉動作

select st_x(st_transform(way,4326)), st_y(st_transform(way,4326)) from planet_osm_point where way ='01010000204212000000000000B08832402D0570E4B11D4840' 

我得到錯誤:

ERROR: Operation on mixed SRID geometries 
********** Error ********** 
ERROR: Operation on mixed SRID geometries 
SQL state: XX000 

可能是什麼問題?

回答

1

問題是錯誤消息有所描述:你正在努力尋找相同的幾何形狀,planet_osm_point.way,但他們有不同的SRID比4674.它實際上是這樣的:

SELECT ST_SetSRID(ST_Point(0, 0), 4674) = ST_SetSRID(ST_Point(0, 0), 4326); 

所以,你會需要挑一個共同的SRID,轉變一個到另一個,即

SELECT ST_SetSRID(ST_Point(0, 0), 4674) = 
         ST_Transform(ST_SetSRID(ST_Point(0, 0), 4326), 4674); 

除了我不推薦使用=(geometry, geometry)運營商,因爲它需要相同的幾何形狀,這是不是很常見與移植後的浮點錯誤sforming。

更好的辦法是使用ST_DWithin發現錯誤距離的小幅度內的所有way幾何:

select st_x(st_transform(way,4326)), st_y(st_transform(way,4326)) 
from planet_osm_point 
where ST_DWithin(
     way, 
     ST_Transform(
      ST_SetSRID(ST_Point(18.533935546875, 48.23199134320962), 4674), 
      <way_SRID>), 
     1e-6); 

這裏,變換點入way的SRID(你從來沒有規定,所以更新<way_SRID> ),然後在距離1e-6度(約10cm)內找到任何東西。如果你想收集更多的附近way分,請增加它。