给定一个由lat,lon
组成的坐标,我想找到一个数据集,其中的值在边界(lat1, lat2)
和(lon1, lon2)
之间.
这是我为解决这个问题而创建的fiddle,但是我想知道是否没有针对这个问题的内置函数?
给定一个由lat,lon
组成的坐标,我想找到一个数据集,其中的值在边界(lat1, lat2)
和(lon1, lon2)
之间.
这是我为解决这个问题而创建的fiddle,但是我想知道是否没有针对这个问题的内置函数?
如果你使用的是MySQL 5.7或更高版本,你可能想看看Spatial Functions.
更具体地说,MBRContains():
MBRContains(g1, g2)
返回
1
或0
以指示
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
,但我不确定.