使用地理空间类型的边界框 MySql 中的点

Points in bounding box MySql using geospatial types

我正在尝试查询 SQL 到 return 个位于边界框内的点。我找到的最佳答案是这种想法:

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) 的这个较新版本是否可以让我有更好的方法来 select 带有边界框内点的行,但我没有任何运气。这种能力存在吗?

MySQL简单的bounding box可以很容易做到,但是不支持反子午线交叉的boxes,所以这会很复杂。

如果你没有任何盒子穿过反时序,你可以简单地写这样的表达式

ST_Intersects(
  ST_MakeEnvelope(Point(lng1, lat1), Point(lng2, lat2)), 
  Point(lng, lat))

但是由于在 MySQL ST_MakeEnvelope only supports Cartesian CRS 中,您需要自己编写反子午线交叉框的代码,例如通过构建两个盒子 - 一个从 lng1 到 180,一个从 -180 到 lng2。