这可以使用带有纬度/经度坐标的 PHP/MySQL 来实现。Haversine公式用于使用这些坐标确定距离。
该演示在 30 X 30 矩阵上显示距离,如您的示例,以及使用此演示在地图上显示火车站的演示。MySQL数据库结构是
id | int(11)
name | varchar(200)
lat | decimal(10,6)
lon | decimal(10,6)
使用 Haversine 公式的 SQL SELECT 语句是
$stmt = $dbh->prepare("SELECT name, lat, lng, ( 3959 * acos( cos( radians(?) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(?) ) + sin( radians(?) ) * sin( radians( lat ) ) ) ) AS distance FROM mytable ORDER BY distance LIMIT 0 , 30");
// Assign parameters
$stmt->bindParam(1,$lat);//from search location
$stmt->bindParam(2,$lng);//from search location
$stmt->bindParam(3,$lat);// duplicate of parameter 1
matix 是使用 PHP 函数从 allays 生成的
function distanceHaversine($lat1, $lon1, $lat2, $lon2) {
$deltaLat = $lat2 - $lat1 ;
$deltaLon = $lon2 - $lon1 ;
$earthRadius = 3959; // in miles 6371 in meters.
$alpha = $deltaLat/2;
$beta = $deltaLon/2;
$a = sin(deg2rad($alpha)) * sin(deg2rad($alpha)) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * sin(deg2rad($beta)) * sin(deg2rad($beta)) ;
$c = asin(min(1, sqrt($a)));
$distance = 2 * $earthRadius * $c;
$distance = round($distance, 4);
return $distance;
}