設定した半径でデータベースから結果を取得し、それらを地図上に配置する小さなサイトを開発しようとしています。私はGoogleマップAPIを使用して、そこからlatとlongの検索条件を取得し、これらをphpスクリプトに渡します。このスクリプトは、データベースにクエリを実行し、結果セットをJSONオブジェクトとして返します。
jsonを使用してPHPにlatとlongの両方を送信する際に小さな問題が発生しています。
私の主な問題は、データベースを検索するためのSQLが間違っているように見えることです。これは、データベース内の最初の10件の結果を取得するだけだからです。検索ポイントから半径内の最初の10件の結果を返すようにします。
これが私のajaxコードです
function showCarPark(location)
{
var lat = location.lat();
var lng = location.lng();
//alert("Lat: " +lat.toFixed(6));
//alert("Lng: " +lng.toFixed(6));
document.getElementById('carParkResults').innerHTML = "";
var criterion = document.getElementById("address").value;
var count = 0;
$.ajax({
url: 'process.php',
type: 'GET',
data: "lat=" + lat + "&lng=" + lng,
dataType: 'json',
success: function(data)
{
jQuery.each(data, function()
{
$('<p>').text("Car Park: " + data[count].name).appendTo('#carParkResults');
placeCarParks(data[count].postcode,data[count].name, data[count].street, data[count].type);
count++;
});
},
error: function(e)
{
//called when there is an error
console.log(e.message);
alert("error" + e.message);
}
});
そしてこれが私のphpスクリプトです
$rad = 20;
$lat = $_GET['lat'];
$lng = 1.4681464; //put a temporary number in as it wont pass the lng in the JSON
$sql="SELECT *, (3959 * acos(cos(radians('".$lat."')) * cos(radians(lat)) * cos( radians(long) - radians('".$lng."')) + sin(radians('".$lat."')) *
sin(radians(lat))))
AS distance
FROM carpark HAVING distance < 15 ORDER BY distance LIMIT 0 , 10";
$result = mysql_query($sql);
while($r = mysql_fetch_assoc($result)) $rows[] = $r;
echo json_encode($rows);
私のテーブルの列はlatとlongと呼ばれています。助けていただければ幸いです。