使用将几何转换为坐标的反函数会导致混合SRID错误

时间:2016-10-05 22:50:49

标签: postgresql postgis

我正在使用带有postig扩展名的postgres。我有以下postgis功能的坐标:

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 个答案:

答案 0 :(得分: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)运算符,因为它需要相同的几何,这在转换后的浮点错误中并不常见。

更好的方法是使用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度(约10厘米)的任何内容。如果您想收集更多附近way点,请增加它。