首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在没有ST_Intersects的情况下使用ST_MakePoint和SET_SRID

在没有ST_Intersects的情况下使用ST_MakePoint和SET_SRID
EN

Stack Overflow用户
提问于 2017-01-25 22:59:52
回答 1查看 349关注 0票数 1

我使用WHERE ST_Intersects(ST_SetSRID(ST_MakePoint($1, $2)::geography, 4326), geog)geography字段中找到一个点(在示例查询中名为geog )。

由于无法完全弄清楚*的原因,ST_SetSRID有时会引发问题,将其从查询中删除会使这些问题消失。我想从查询中删除ST_SetSRID,但找不到任何地方解释SRID ST_Intersects将使用什么。

geog的SRID为4326。ST_Intersects只是使用这个,还是假定没有坐标系,并给出与使用ST_SetSRID不同的结果?

*如果您好奇,这个问题与准备好的事务、nodejs和最小连接池有关。对于池中的一个最小连接,经过4-6次查询后,下一个查询将花费15-30秒(通常大约需要100 in )。在2分钟的连接中,在问题发生之前需要大约8-10个查询,5分钟,大约25个查询(以此类推)。我觉得我在吃疯狂的药。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-26 03:39:12

SetSRID返回一个geometry,而不是一个geography。您通常不需要为geography设置SRID,因为它假定缺省值为4326,所以我建议不要使用它(除非您有不同的椭球或其他东西)。(但如果您正在使用geometry,则ST_SRID是必需的)。

此外,相交隐式地对geometrygeography类型进行操作。取决于您是否使用了ST_SetSRID,它将选择:

  • ST_Intersects(geometry, geometry);或
  • ST_Intersects(geography, geography)

您可以通过转换每个参数显式地选择其中一个操作符:

代码语言:javascript
复制
ST_Intersects(ST_SetSRID(ST_MakePoint($1, $2), 4326)::geography, geog::geography)

(注意,我已经将第一个::geography移到了ST_SetSRID之外,因此它设置了一个SRID,然后将其转换为一个geography)。或相当于:

代码语言:javascript
复制
ST_Intersects(ST_MakePoint($1, $2)::geography, geog::geography)

至于这两个相交空间运算符的实际性能,这取决于您是否对geometrygeography类型的geog进行了索引。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41863258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档