-1

緯度/経度の場所でいっぱいの MySQL テーブルがあります。反対側には、座標をサーバーに送信するクライアント側の javascript/html5 ページがあります。

クライアントの座標を使用して、最寄りの場所を特定できるようにしたいと考えています。この目標を達成する最も簡単な方法は何ですか?

のようなものSELECT * FROM places AS p WHERE p.latitude NEAR '49.8330001' AND p.longitude NEAR '-119.45600';は本当にいいでしょう。

ここでいくつかの質問に遭遇しましたが、適切な回答が得られませんでした。MySQL の空間拡張と、このトリックを実行する可能性のある他のいくつかの SQL クエリについて読みましたが、実際には「簡単」とは思えなかったので、チェックアウトできるいくつかの例を使用して、より標準化された方法があると思いました。

誰でもこれらの経験がありますか?

4

4 に答える 4

2

次の PHP コードは、MySQL とPDOを使用して、ポイントに最も近い場所の座標を見つけます。

座標のJSON配列を作成します。

// Prepare statements
$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 table 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);
$stmt->execute();
$rows = array();
while($row = $stmt->fetch()) {
 $rows[] = $row;
}
echo json_encode($rows);
exit;

このマップマーカーは、このクエリを使用して生成されます

于 2013-10-09T11:40:47.487 に答える
-1

あなたが持っているポイントと配列内のデータベース内の各座標との間の距離を計算してみませんか。次に、この配列の最小値を選択します。

于 2013-10-08T20:52:03.330 に答える
-1

座標の 5% のような許容範囲を作成してから、

$latplus5percent = $lat + .5*$lat; 
$latminus5percent = $lat - .5*$lat;
WHERE p.latitude BETWEEN $latplus5percent AND $latminus5percent 

[編集: 形式]

于 2013-10-08T20:53:04.213 に答える