You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL中ST_Contains返回结果不准确的原因排查

问题原因及解决方案

核心问题是经纬度在WKT格式中的顺序搞反了,SRID 4326(WGS84坐标系)遵循OGC规范,WKT格式里的坐标顺序是经度(X轴)在前,纬度(Y轴)在后,你在生成空间列和构造查询多边形时都弄反了顺序,导致空间查询的范围和预期的经纬度范围完全不匹配。

具体错误点

  1. latlon列生成错误
    你生成POINT的语句是:
ST_GeomFromText(concat("POINT(",latitude," ",longitude,")"), 4326)

这里把纬度放在了经度前面,不符合SRID 4326的WKT规范,导致存储的点坐标是(纬度值,经度值),相当于把地理坐标系的X/Y轴颠倒了。

  1. 查询用的POLYGON坐标顺序错误
    你构造的多边形顶点是(69 -78, 69 84, 15 84, 15 -78),同样是纬度在前、经度在后,生成的多边形范围和原查询的经纬度范围(纬度15-69,经度-78-84)完全不对应,自然无法匹配所有符合条件的点。

修正步骤

  1. 重新生成latlon列的正确值
    执行更新语句,将经纬度顺序纠正为经度 纬度:
UPDATE location 
SET latlon = ST_GeomFromText(concat("POINT(", longitude, " ", latitude, ")"), 4326);
  1. 修正空间查询的POLYGON语句
    构造对应原查询范围的正确多边形(顶点顺序为西南→东南→东北→西北→西南,闭合矩形):
SELECT * FROM location 
WHERE ST_CONTAINS(
    ST_GeomFromText('POLYGON((-78 15, 84 15, 84 69, -78 69, -78 15))', 4326), 
    latlon
);

修正后,空间查询的结果就会和原经纬度范围查询的结果一致。

内容的提问来源于stack exchange,提问作者Studio Eveline

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 14:02:44