簡體   English   中英

使用php在距當前位置一定距離內選擇餐廳表條目

[英]select restaurant table entries within a certain distance from current location using php

我有一個數據庫表,其中包含餐廳的列表,包括餐廳的名稱,緯度和經度。 我想選擇距離我當前位置一定距離內的所有餐廳。 當前位置在php文件中確定(現在我只是使用靜態lat&lng)。 我找到了計算距離的代碼:

function findDist($lat, $lng){
    $currLat = 33.777563;
    $currLng = -84.389959;

    $currLat = deg2rad ($currLat);
    $sincurrLat = sin ($currLat);
    $lat = deg2rad ($lat);
    $currLng = deg2rad ($currLng);
    $lng = deg2rad ($lng);

    return round((7926 - 26 * $sincurrLat) * asin (min (1, 0.707106781186548 * sqrt ((1 - (sin ($lat) * $sincurrLat) - cos ($currLat) * cos ($lat) * cos ($lng - $currLng))))),4);
}  

但是如何將其合並到我的選擇查詢中? 我試過這個:

$query = "SELECT *
FROM
    eateries E
WHERE
    EXISTS
    (
        SELECT *
        FROM
            eateries_hours EH, eateries_type ET
        WHERE
            EH.eateries_id = E.id AND ET.eateries_id = E.id
            AND findDist(E.lat, E.lng) <= .5
    )";

但這當然不起作用,因為它無法識別該功能。 我可以先對緯度和經度進行單獨的查詢,計算距離,然后以某種方式將其與上述查詢結合嗎? 有任何想法嗎?

謝謝。

看一下我之前回答的問題 您可以在MySQL(或其他數據庫)中創建一個存儲函數,前提是您具有經度和緯度。

DELIMITER $$

DROP FUNCTION IF EXISTS `FindDist` $$
CREATE FUNCTION `FindDist` (lt1 DOUBLE,lg1 DOUBLE,lt2 DOUBLE,lg2 DOUBLE) RETURNS DOUBLE
DETERMINISTIC
BEGIN
    DECLARE dist,eradius DOUBLE;

    SET eradius=3963.1;
    SET dist=Acos(Cos(lt1) * Cos(lg1) * Cos(lt2) * Cos(lg2) + Cos(lt1) * Sin(lg1) * Cos(lt2) * Sin(lg2) + Sin(lt1) * Sin(lt2)) * eradius;
    RETURN dist;
END $$

DELIMITER ;

暫無
暫無

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

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