簡體   English   中英

將 ST_Intersects 與沒有 SET_SRID 的 ST_MakePoint 一起使用

[英]Using ST_Intersects with ST_MakePoint with no SET_SRID

我正在使用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 和最小連接池有關。 對於池中的 1 個最小連接,在 4-6 次查詢后,下一次查詢將需要 15-30 秒(通常需要大約 100 毫秒)。 對於 2 分鍾的連接,在出現問題之前大約需要 8-10 次查詢,5 分鍾內大約需要 25 次查詢(以此類推)。 我覺得我正在服用瘋狂葯丸。

ST_SetSRID返回geometry ,而不是geography 您通常不需要為geography設置 SRID,因為它假定默認值為 4326,所以我建議不要使用它(除非您有不同的橢圓體或其他東西)。 (但如果您使用的是geometry ,則 ST_SRID 是必需的)。

此外, ST_Intersects隱式操作geometrygeography類型。 根據您是否使用 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)

至於兩個相交空間運算符的實際性能,這取決於您是否有geog geometrygeography類型的索引。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM