簡體   English   中英

如何根據用戶坐標和半徑從表中檢索數據

[英]How to retrieve data from a table, based on user coordinates and the radius

基本上,我將GET請求發送到具有用戶lat和long值(分別為$userLat, $userLong )的php文件。
在我的數據庫中,我有一個表“ Locations”,該表包含以下列:

  • 地點名稱
  • 緯度
  • LNG
  • 半徑(米)

因此,我想查詢一個位置,將用戶的坐標與所有“位置”坐標進行比較,以查看“位置”和“用戶”之間的距離是否小於該位置的半徑。 如果是這樣,請返回該位置的名稱。


查詢將是這樣的(偽代碼):

SELECT Location_Name FROM Locations where whereBetween((($ userLat,$ userLong)AND(Lat,Lng))<=半徑

您要查找的查詢是:

SELECT id, ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin( radians( lat ) ) ) ) AS distance FROM markers HAVING distance < 25 ORDER BY distance LIMIT 0 , 20;

摘自Google Map的文章

我使用與@ socca1157回答相同的查詢,但認為我可以在查詢開始時對常量3959進行一些簡短的解釋。

我的示例還獲取了用戶地址的經緯度

$address = urlencode($_GET['user-address']);

$earth_radius = 3959;
$search_radius = 100;

$ch = curl_init('https://maps.google.com/maps/api/geocode/json?address='.$address.'&sensor=false');

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$geocode = curl_exec($ch);
curl_close($ch);

$output = json_decode($geocode);

$lat = $output->results[0]->geometry->location->lat;
$lng = $output->results[0]->geometry->location->lng;


$sql = "SELECT *, ( $earth_radius * acos( cos( radians($lat) ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians($lng) ) + sin( radians($lat) ) * sin( radians( latitude ) ) ) ) AS distance FROM table WHERE isActive = 1 HAVING distance < $search_radius ORDER BY distance LIMIT 5";
$result = mysql_query($sql);

因此,例如,如果您要以公里而不是英里為單位進行搜索,則可以使用以km為單位的地球半徑,即6,371km。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM