[英]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隱式操作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)
至於兩個相交空間運算符的實際性能,這取決於您是否有geog
geometry
或geography
類型的索引。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.