php - 在 MySQL 数据库中的纬度/经度矩形内查找项目的优雅方式?

标签 php mysql search post

我有一个 MySQL 数据库,其中每条记录都包含纬度和经度以及许多其他内容。目前这些都是 TEXT 类型,但如果有必要,我很乐意更改它。经纬度各一个变量,即

latitude:  51.258215
longitude: -0.123456

所以我想知道的是当 php 脚本接收到四个 POST 变量时获取记录列表的最快、最优雅的方法...代表矩形左上角和右下角的坐标在 map 上..?有什么方法可以真正优化速度吗?

最佳答案

MySQL 内置了一些基本的空间扩展(参见 spatial extensions)。这允许您将纬度/经度点存储为点记录,例如:

INSERT INTO store_locations (id, name, location) 
VALUES (1, 'some name', POINT(51.258215, -0.123456));

然后您可以像这样运行空间查询 - 例如使用“minimum bounding rectangle”操作:

SELECT * FROM store_locations WHERE MBRWITHIN(location, MULTIPOINT($top $left, $bottom $right))

(其中 top、left、bottom 和 right 是相关坐标)。

关于php - 在 MySQL 数据库中的纬度/经度矩形内查找项目的优雅方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4579250/

相关文章:

Javascript 数组对两个对象进行排序(菜鸟)

php - 为 capthca 创建不可读的 PHP 页面

php - 当我在 cakephp 中使用 'group' 时,分页不起作用

php - 从多个表中选择一个值

mysql - 哪种技术替换记录更有效

java - 计算字符串中的特定字符

php - 位于 div 内的 <p> 标记中的图像大于 div 大小

MySQL 语法 : WHERE and LIKE clause in one query

php - 内爆数组与电子邮件一起使用时出错

javascript - 查找时间 t 的所有数组元素