我目前有一个像这样的MySQL数据库结构(简化):
条目 标题
条目元 纬度 经度
我希望我的用户获取所有在coord + distance定义的圆圈内有lat / lng的记录(如果更容易,也可以是正方形)。我不知道从哪里开始。我被告知有一个数学方程,但不知道在哪里找到它。
我正在使用PHP / MySQL组合并想查询数据库。该数据库包含大约100.000行(到本月底将加倍)
答案 0 :(得分:0)
我目前有这个查询适用于这种情况(WordPress数据库)。祝你好运;)
答案 1 :(得分:0)
以下SQL查询使用Spherical Law of Cosines来计算表中坐标和坐标之间的距离。
d = acos(sin(φ1).sin(φ2)+ cos(φ1).cos(φ2).cos(Δλ))。R
"SELECT Id,Lat,Long,(6367 * acos( cos( radians(center_lat) )
* cos( radians( Lat ) ) * cos( radians( Long ) - radians(center_lng) )
+ sin( radians(center_lat) ) * sin( radians( Lat ) ) ) ) AS distance FROM table
HAVING distance < radius ORDER BY distance ASC LIMIT 0 , 20"
使用PDO代替已弃用的mysql_
函数尝试
// Prepare statement
$stmt = $dbh->prepare("SELECT name, lat, lng, (6367 * acos( cos( radians(?) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(?) ) + sin( radians(?) ) * sin( radians( lat ) ) ) ) AS distance FROM gbarea HAVING distance < ? ORDER BY distance ASC LIMIT 0 , 20");
// Assign parameters
$stmt->bindParam(1,$center_lat);
$stmt->bindParam(2,$center_lng);
$stmt->bindParam(3,$center_lat);
$stmt->bindParam(4,$radius);
//Execute query
$stmt->setFetchMode(PDO::FETCH_ASSOC);
while($row = $stmt->fetch()) {
echo "Name : ".$row['name'].", ";
echo "Lat : ".$row['lat'].", " ;
echo "Lng : ".$row['lng'].", ";
echo "Distance : ".$row['distance'];
echo "<br>";
}