MySQL ST_Within判断点在多边形内返回0,Python验证为True,求问题原因
问题根源:坐标顺序完全写反了
- MySQL的
ST_GeomFromText遵循WKT标准,坐标格式要求为经度(X) 纬度(Y),但你在定义POLYGON时,把每个顶点的纬度和经度顺序搞反了,导致多边形的实际位置和你在Google Maps中绘制的完全不符——原本的多边形应该在高纬度区域(纬度54-62,经度2-24),但错误的坐标顺序让它跑到了低纬度区域(经度54-62,纬度2-23),和目标POINT的位置完全不重叠,所以返回0是合理的。 - 你的Python代码是正确的:将每个顶点的第二个值作为经度、第一个值作为纬度,组合成
(经度, 纬度)的格式传入Polygon,因此能正确判断点是否在多边形内。
修正后的MySQL查询语句
SELECT ST_Within( ST_GeomFromText('POINT(8.34047 54.91320)', 4326), ST_GeomFromText('POLYGON((10.486242310988 62.144619879597, 2.3124141859883 54.622536815923, 23.977453248488 55.403637023919, 10.486242310988 62.144619879597))', 4326) ) AS is_point_within_polygon;
该查询会返回1(true),因为现在POLYGON的坐标顺序与Python代码、Google Maps中的绘制一致,多边形位置正确,包含目标POINT。
内容的提问来源于stack exchange,提问作者quick-brown-fox
相关产品推荐
相关产品推荐

