我WHERE ST_Intersects(ST_SetSRID(ST_MakePoint($1, $2)::geography, 4326), geog)
用来在geography
字段中找到一个点(geog
在示例查询中命名)。
由于ST_SetSRID
某些原因,我无法弄清楚*,有时会引起问题,将其从查询中删除会使这些问题消失。我想ST_SetSRID
从查询中删除,但是找不到任何解释SRIDST_Intersects
将使用的内容。
geog
的SRID为4326。将ST_Intersects
使用该ID还是将不使用任何坐标系,并得出与使用时不同的结果ST_SetSRID
?
*如果您感到好奇,那么问题可能与准备好的事务,nodejs和最小连接池有关。对于池中的1个最小连接,在4-6次查询后,下一个查询将花费15-30秒(通常需要100毫秒)。对于2分钟的连接,大约需要8-10个查询才能出现问题;对于5分钟的连接,大约需要25个查询(依此类推)。我觉得我正在服用疯狂药丸。
ST_SetSRID返回a geometry
,而不是a geography
。通常,您不需要为设置SRID geography
,因为它假设默认值为4326,所以我建议不要使用它(除非您使用其他椭球或其他名称)。(但是,如果使用geometry
,则必须使用ST_SRID)。
此外,ST_Intersects隐式地对geometry
或geography
类型进行操作。根据您是否使用ST_SetSRID,它将选择以下任一项:
ST_Intersects(geometry, geometry)
; 或者ST_Intersects(geography, geography)
您可以通过强制转换每个参数来明确选择其中一个运算符:
ST_Intersects(ST_SetSRID(ST_MakePoint($1, $2), 4326)::geography, geog::geography)
(请注意,我已将第一个::geography
移到ST_SetSRID外部,因此它设置了SRID,然后将其强制转换为geography
)。或等效地:
ST_Intersects(ST_MakePoint($1, $2)::geography, geog::geography)
至于两个相交的空间运算符的实际性能,这取决于您是否在geometry
或geography
类型上都有索引geog
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句