В следующем SQL-запросе используется Spherical Law of Cosines для расчета расстояния между координатой и координатами в таблице.
д = экоса (син (LAT1) .sin (LAT2) + COS (LAT1) .cos (LAT2) .cos (lng2-lng1)) .R
В запросе используется SQL Math functions
require("dbinfo.php");//database parameters
¢er_lat = primaryLat;
$center_lng = primarylng;
$radius = 0.5;//500 meters
$arr = array();
//Connect to database
$dbh = new PDO("mysql:host=$host;dbname=$database", $username, $password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
try {
// Prepare statement
$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 gbstn HAVING distance < ? ORDER BY distance LIMIT 0 , 5");
// 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_OBJ);
$stmt->execute();
//Show the results
while($obj = $stmt->fetch()) {
$arr[] = $obj;
}
if (count($arr) >= 1)
{
echo '{"marker":'.json_encode($arr).'}';
}else{
echo '{"marker":[{"name":"No Results","lat":'.$center_lat.',"lng":'.$center_lng.',"distance":0}]}';
}
}
catch(PDOException $e) {
echo "I'm sorry I'm afraid you can't do that.". $e->getMessage() ;// Remove or modify after testing
file_put_contents('PDOErrors.txt',date('[Y-m-d H:i:s]').", mapSelect.php, ". $e->getMessage()."\r\n", FILE_APPEND);
}
//Close the connection
$dbh = null;
?>
Использование PDO вместо устаревших mysql_
функции.
Вам потребуется внести изменения в заявление. Также удалите эхо в блоке catch после отладки.
Выполняется какой-либо пример кода? Вы используете карты Google? Как вы получаете координаты GPS. – Edwinner
Нет карт google, на данный момент используя местоположение html5 для получения координат gps. Просто нашел это, поэтому попытаюсь изменить мой код и обновить: http://www.arubin.org/files/geo_search.pdf – Tom
Возможный дубликат [MySQL Great Circle Distance (Формула Хаверсина)] (http: // stackoverflow.com/questions/574691/mysql-great-circle-distance-haversine-formula) –