2016-10-05 20 views
0

私はpostgresをpostig拡張子で使用しています。私は、次の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を選択し、他の1つの変換、すなわち

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

私はそれがトラン後に浮動小数点エラーで非常に一般的ではありません同じジオメトリを、必要とするため=(geometry, geometry)演算子を使用することはお勧めしません除いてsforming。ここで

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>を更新:

より良いアプローチはST_DWithinを使用してエラー距離の小さなマージン内のすべてのwayジオメトリを見つけることです)、次に1e〜6度の距離(約10cm)以内に何かを見つける。近くのway点を集めたい場合はそれを増やしてください。

関連する問題