PHP/MySQL - 从实际 gps 坐标查找 500 米半径内的所有项目

标签 php mysql

我正在根据 GPS 坐标比较同一位置的价格。 所以例如我有一个带有坐标的项目:

lat: 45.815005 
lng: 15.978501

我想在我的 MySQL 数据库中搜索每个项目,例如那个地方周围500米。 (它不需要是圆形的,只需在 X 上 500 米和在 Y 上都为 500 米)。 Latlng 在我的数据库中存储为单独的列类型 float(10,6)

我知道计算精确的 lng 和 lat 并不容易,但如果我错过每个站点几米也没关系。

这是一个非常复杂的问题,但如果有任何建议可以帮助我开始,我将不胜感激。

最佳答案

考虑到半正弦公式,计算两个坐标之间的距离实际上并不那么困难。

SELECT 
  -- stuff here
  , ( 6371000 * acos( cos( radians(45.815005) ) * cos( radians( stuff.lat ) ) * cos( radians( stuff.lng ) - radians(15.978501) ) + sin( radians(45.815005) ) * sin(radians(stuff.lat)) ) ) AS distance 
FROM 
  stuff
HAVING 
  distance < 500

Referenced Answer

对原始答案的必要更改:

  1. 原始答案中提供的常量提供了英里或公里的值。我更改了此处的常量以使用米。

  2. 常量已更改为使用您的坐标。您可能希望进一步调整查询以生成这些参数而不是常量。

  3. having 的表情略有变化,以反射(reflect)您对 500 米的渴望。同样,这可能是您想要参数化的内容。

关于PHP/MySQL - 从实际 gps 坐标查找 500 米半径内的所有项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46854115/

相关文章:

php - PDO 获取循环一遍又一遍地返回相同 mysql 表列名的数组而不是数据

java - 我在 jdbc 中使用 localhost 时发现网络连接错误

javascript - ajax php 获取行值

javascript - AngularJS 在更改使用相同 Controller 的页面时执行代码

mysqlcheck with --optimize 但仅适用于 MyISAM 表

mysql - 如何合并两个查询以使结果如图所示?

php - Opencart:CSS(基于路由维护)

php - 简单的 PHP 表单 SQL 插入

javascript - 从模态表单中检索值并更新数据库 php

mysql - 即使没有用户日志条目,也检索所有用户