使用反函数将几何图形转换为坐标会导致混合 SRID 错误
Using inverse function with transforming geometry into coordinates results into mixed SRID error
我正在使用带 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
可能是什么问题?
问题在错误消息中有所描述:您试图在 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
点,请增加它。
我正在使用带 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
可能是什么问题?
问题在错误消息中有所描述:您试图在 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
点,请增加它。