这是loc_coordinate
表结构:
下面是代码,用于从数据库中获取最近的位置并显示存储在数据库中的地名。
<?php
include("config.php");
$lat = "3.107685";
$lon = "101.7624521";
$sql="SELECT ((ACOS(SIN($lat * PI() / 180) * SIN(lat * PI() / 180) + COS($lat * PI() / 180) * COS(lat * PI() / 180) * COS(($lon – lon) * PI() / 180)) * 180 / PI()) * 60 * 1.1515) AS 'distance' FROM loc_coordinate HAVING 'distance'<='10' ORDER BY 'distance' ASC";
$stmt =$pdo->prepare($sql);
$stmt->execute();
while($row = $stmt->fetch())
{
echo $row['place'];
}
?>
显示的错误:
致命错误:第8行的C:\ wamp \ www \ mysite \ by_coor.php
PDOException:在第8行的C:\ wamp \ www \ mysite \ by_coor.php
echo $sql
显示了这一点:
SELECT((ACOS(SIN(3.107685 * PI()/ 180)* SIN(lat * PI()/ 180)+ COS(3.107685 * PI()/ 180)* COS(纬度* PI()/ 180)* COS((101.7624521) “lon)* PI()/ 180))* 180 / PI())* 60 * 1.1515)AS'距离' FROM loc_coordinate拥有'距离'&lt; ='10'按'距离'排序ASC
我不确定为什么我收到此错误。这是我在SQL查询中提到的网站:http://zcentric.com/2010/03/11/calculate-distance-in-mysql-with-latitude-and-longitude/
答案 0 :(得分:15)
试试这个
SELECT * , (3956 * 2 * ASIN(SQRT( POWER(SIN(( $lat - LatOnTable) * pi()/180 / 2), 2) +COS( $lat * pi()/180) * COS(LatOnTable * pi()/180) * POWER(SIN(( $long - LongOnTable) * pi()/180 / 2), 2) ))) as distance
from yourTable
having distance <= 10
order by distance
将LatOnTable替换为纬度表列名称,将longOnTable替换为表格中的经度列名称。
答案 1 :(得分:0)
这对我有用:
SELECT restoran.id,restoran.restoran , (6371 * 2 * ASIN(SQRT( POWER(SIN(( -6.9831375276568055 - restoran.lat) * pi()/180 / 2), 2) +COS( -6.9831375276568055 * pi()/180) * COS(restoran.lat * pi()/180) * POWER(SIN(( 110.40925562381744 - restoran.lng) * pi()/180 / 2), 2) ))) as distance from restoran having distance <= 10 order by distance
6371
数字用于转换为km
答案 2 :(得分:0)
这是SQL语句,用于查找距给定坐标10英里半径内的最近位置。它根据该行的纬度/经度和目标纬度/经度计算距离,然后仅询问距离值小于或等于10的行,并按距离对整个查询进行排序。 要按公里而不是英里进行搜索,请将3959替换为6371 。
SELECT
id, (
3959 * acos (
cos ( radians($lat) )
* cos( radians( tableLatColName ) )
* cos( radians( tableLogColName ) - radians($long) )
+ sin ( radians($lat) )
* sin( radians( tableLatColName ) )
)
) AS distance
FROM table_name
HAVING distance <= 10
ORDER BY distance;
这是将Google Maps API v3与MySQL后端配合使用-
https://developers.google.com/maps/solutions/store-locator/clothing-store-locator#findnearsql
我正在研究相同的东西,发现了这个问题,所以只想分享一下.. :)