Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Mysql内距离查询_Php_Mysql_Sql_Geospatial_Spatial - Fatal编程技术网

Php Mysql内距离查询

Php Mysql内距离查询,php,mysql,sql,geospatial,spatial,Php,Mysql,Sql,Geospatial,Spatial,选择权 质疑 选择*, (3959*acos(弧度($lat)) *cos(弧度(纬度)) *cos(弧度(液化天然气)-弧度(液化天然气)) +sin(弧度($lat)) *sin(弧度(纬度))作为距离 从地点 距离小于或等于英里 按距离排序 限制0,20 我有一个包含4列的数据库表: 唯一id 城市名称 纬度(纬度) 经度(lng) 我使用顶部的查询返回距离指定坐标数英里以内的位置。这似乎有效,但我不确定它有多准确。我很想知道这个查询是好还是有更好的解决方案 这看起来像是正确的大圆距

选择权

质疑

选择*,
(3959*acos(弧度($lat))
*cos(弧度(纬度))
*cos(弧度(液化天然气)-弧度(液化天然气))
+sin(弧度($lat))
*sin(弧度(纬度))作为距离
从地点
距离小于或等于英里
按距离排序
限制0,20
我有一个包含4列的数据库表:

  • 唯一id
  • 城市名称
  • 纬度(纬度)
  • 经度(lng)

我使用顶部的查询返回距离指定坐标数英里以内的位置。这似乎有效,但我不确定它有多准确。我很想知道这个查询是好还是有更好的解决方案

这看起来像是正确的大圆距离查询


您对wrt准确性有何顾虑?

谢谢您的确认!我只是担心有更好的解决办法。我读了一些关于MYSQL空间扩展的书,但我不确定是否应该实现它。如果这是你正在做的,那么扩展就太过了。你应该准备好了:)你使用的公式是球面余弦定律。请从中查看。大圆距离的另一个公式是哈弗森公式。请从中查看。两个公式都假设地球是球形的。余弦定律计算起来更快。你是在正确的轨道上。你应该考虑的是,你要处理距离几英里的距离,球体的公式是好的,对于更长的距离,你将是一个更复杂的公式,但使用这个权利的距离。
$lat = '25.7742658';
$lng = '-80.1936589';
$miles = 30;
SELECT *, 
   ( 3959 * acos( cos( radians($lat) ) 
   * cos( radians( lat ) ) 
   * cos( radians( lng ) - radians($lng) ) 
   + sin( radians($lat) ) 
   * sin( radians( lat ) ) ) ) AS distance 
FROM locations 
HAVING distance < $miles 
ORDER BY distance 
LIMIT 0, 20