给定一个由lat,lon组成的坐标,我想找到一个数据集,其中的值在边界(lat1, lat2)(lon1, lon2)之间.

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

推荐答案

如果你使用的是MySQL 5.7或更高版本,你可能想看看Spatial Functions.

更具体地说,MBRContains():

MBRContains(g1, g2)

返回10以指示

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,但我不确定.

Mysql相关问答推荐

mysql使用LIKE查找二进制字段有问题

带负数的MySQL子字符串_索引

配置MySQL服务器以管理数千个表

MySQL逻辑全部

奇怪的MySQL SELECT循环;但不是\G

避免多个SQL查询的重构代码

从 MySQL WordPress Select 最后一行

如何在Mysql中使用With和Values

如何编写一个查询,计算表中每个日期的一个日期加上前 4 天的记录数?

完全匹配 IN 子句中的所有值

优化解析 5000 万行 MySQL 表的请求

基于关系的每个实体有一个真值和多个假值

从 mysql RDS 导出数据以导入 questDb

为什么 fetch 方法不能获取任何东西?(feat node.js,restAPI)

按长度过滤 varbinary 字段

从终端访问 MAMP 的 MySQL

不正确的整数(2147483647)被插入到 MySQL 中?

NodeJS/mySQL - ER_ACCESS_DENIED_ERROR 用户'root'@'localhost'的访问被拒绝(使用密码:是)

WHERE 子句中的条件顺序会影响 MySQL 性能吗?

获得上个月的第一天和最后一天的最佳方式?