给定由lat,lon
组成的坐标,我想找到值位于边界(lat1, lat2)
和(lon1, lon2)
之间的数据集。
这是我为解决这个问题而创建的一个fiddle,但我想知道这个问题是否没有内置函数?
如果您使用的是MySQL 5.7或更高版本,您可能需要了解空间函数。
更具体地说,MBRContains((:
MBR容器(g1,g2(
返回
1
或0
,以指示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;
可能有一个不那么混乱的函数来制作Polygon
和Point
,但我不确定。