SQL在边界之间查找值



给定由lat,lon组成的坐标,我想找到值位于边界(lat1, lat2)(lon1, lon2)之间的数据集。

这是我为解决这个问题而创建的一个fiddle,但我想知道这个问题是否没有内置函数?

如果您使用的是MySQL 5.7或更高版本,您可能需要了解空间函数。

更具体地说,MBRContains((:

MBR容器(g1,g2(

返回10,以指示CCD_ 6包含CCD_ 7的最小边界矩形。

mysql> SET @g1 = ST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))');
mysql> SET @g2 = ST_GeomFromText('Point(1 1)');
mysql> SELECT MBRContains(@g1,@g2), MBRWithin(@g2,@g1);
+----------------------+--------------------+
| MBRContains(@g1,@g2) | MBRWithin(@g2,@g1) |
+----------------------+--------------------+
|                    1 |                  1 |
+----------------------+--------------------+

为了满足您的特定需求,您可能会做一些类似的事情:

SELECT name
FROM test.FOO
WHERE MBRContains(
ST_GeomFromText(CONCAT("Polygon((", lat1, " ", lon1, ",", lat2, " ", lon1, ",", lat2, " ", lon2, ",", lat1, " ", lon2, ",", lat1, " ", lon1,"))")),
ST_GeomFromText(CONCAT("Point(", 1.2, " ", 0.2, ")"))
) = 1;

可能有一个不那么混乱的函数来制作PolygonPoint,但我不确定。

最新更新