我正在尝试查询SQL以返回位于边界框内的点。我找到的最好的答案是这样的想法:
lng1 <= lng2 AND (lng1 <= lng AND lng <= lng2) /* both edges on same side */
OR
lng1 > lng2 AND (lng1 <= lng OR lng <= lng2) /* edges on opposite sides */
这可以在这里看到:DBfiddle
然而,我使用的是更新版本的MySQL,我将坐标存储为"点"类型。我一直在尝试了解这个新版本的MySQL(8(是否可以让我更好地选择在边界框内有点的行,但我运气不好。这种能力存在吗?
MySQL对于简单的边界框可以很容易地做到这一点,但它不支持反恶意的交叉框,所以这会很复杂。
若你们并没有任何穿越反美的盒子,你们可以简单地写出类似的表达式
ST_Intersects(
ST_MakeEnvelope(Point(lng1, lat1), Point(lng2, lat2)),
Point(lng, lat))
但是,由于在MySQL ST_MakeEnvelope中只支持笛卡尔CRS,因此您需要自己为反无菌交叉框进行编码,例如,通过构建两个框-一个从lng1到180,另一个从-180到lng2。