SQL Server Geography类型:为何两个独立多边形判定相交?
问题原因分析
你遇到的问题核心在于SQL Server的geography类型对多边形的环绕方向有严格要求,错误的方向会导致多边形被解析为“地球的剩余区域”(反多边形),从而出现看似不相交却返回相交的结果。
关键细节:
- SQL Server的
geography类型遵循右手定则:对于北半球的多边形,需要使用逆时针的坐标环绕方向;如果使用顺时针方向,该多边形会被系统识别为“整个地球除当前定义区域外的所有部分”的反多边形。 - 你的
@orderBounds2变量的WKT坐标顺序是顺时针的:
坐标走向为西南→东南→东北→西北→西南,属于顺时针方向。系统会将其解析为除了这个矩形(南纬23.97至北纬38.4001、西经32.4564至东经114.338)之外的整个地球区域,自然包含了POLYGON ((-32.4564 -23.97, 114.338 -23.97, 114.338 38.4001, -32.4564 38.4001, -32.4564 -23.97))@geo所在的北纬69.2至71.10853的区域,因此STIntersects()返回1。
验证与解决方法:
- 用
STIsValid()检查多边形有效性:
方向错误的多边形会返回0,可通过SELECT @orderBounds2.STIsValid()STValidDetail()查看具体错误原因。 - 反转坐标顺序(使用
STReverse())后再调用STIntersects(),此时多边形会被正确解析为定义的矩形区域,与@geo无重叠,返回0:SELECT @orderBounds2.STReverse().STIntersects(@geo)
内容的提问来源于stack exchange,提问作者AlastairS
相关产品推荐
相关产品推荐

