2013-02-09 43 views
0

link傳遞變量使用此查詢從谷歌到haversine公式

我試着去創建一個位置搜索,返回一組距離內的所有城鎮。 我希望人們能夠在表單中輸入城鎮,我的代碼找到城鎮名稱的lat + long,然後查詢我的數據庫以返回設置距離內的所有城鎮。

開始,我發現LAT +長的輸入位置:

$location = 'farnborough'; 

    function getlatlang($location) { 
    $geocode = file_get_contents('http://maps.google.com/maps/api/geocode/json?address='. urlencode($location) .'&sensor=false'); 
    $output= json_decode($geocode); 
    return $output->results[0]->geometry->location; 
    } 

    $objlocation = getlatlang($location); 
    $latitude = $objlocation->lat; 
    $longitude = $objlocation->lng; 

這工作得很好,我可以重複的結果和值是正確的。

然後用上面的鏈接查詢,我嘗試:

$query = "SELECT town, (3959 * acos(cos(radians($latitude)) * cos(radians(lat)) * cos(radians(lng) - radians($longitude)) + sin(radians($latitude)) * sin(radians(lat)))) AS distance FROM uk_postcode_05 HAVING distance < 25 ORDER BY distance ASC LIMIT 0 , 5"; 
    $result = mysqli_query($mysqli, $query); 
    if(!$result){echo('no result returned - query wrong'); 
    } 

但查詢不工作,並始終閃光的錯誤。我在這裏做錯了什麼?

(我的表中的列鎮,郵編,經度,緯度)

+1

它產生了什麼錯誤?你沒有具體說明。 – scones 2013-02-09 12:34:10

+0

你檢查了$ result-> error的內容嗎?在select部分中定義print_r($ result) – alexg 2013-02-09 12:44:05

回答

0

我在這裏做的假設,你已經從緯度,經度在你的表定義改變了列名緯度,經度。

而下缺乏實際的錯誤訊息,這是最好的猜測:

SELECT 
    town, 
    (
    3959 * acos(
     cos(
     radians($latitude) 
    ) * cos(
     radians(latitude) 
    ) * cos(
     radians(longitude) - radians($longitude) 
    ) + sin(
     radians($latitude) 
    ) * sin(
     radians(latitude) 
    ) 
    ) 
) AS distance 
FROM 
    uk_postcode_05 
HAVING 
    distance < 25 
ORDER BY 
    distance ASC 
LIMIT 
    0, 5 

這應該在您的查詢latlng解決這個問題,因爲在那裏不確定。

+0

這樣做,非常感謝 – rpsep2 2013-02-09 13:22:42

+0

不客氣。 – scones 2013-02-09 13:23:12

0

問題可能是您正在使用具有代替WHERE和你正在你的HAVING子句中使用的「距離」,即使它是不定義。試試這個:

SELECT town, (3959 * acos(cos(radians($latitude)) * cos(radians(lat)) * cos(radians(lng) - radians($longitude)) + sin(radians($latitude)) * sin(radians(lat)))) AS distance FROM uk_postcode_05 WHERE (3959 * acos(cos(radians($latitude)) * cos(radians(lat)) * cos(radians(lng) - radians($longitude)) + sin(radians($latitude)) * sin(radians(lat)))) < 25 ORDER BY distance ASC LIMIT 0 , 5 
+0

距離。查詢的順序是錯誤的。 – scones 2013-02-09 12:46:43

+0

@scones,你能詳細說明一下嗎? – rpsep2 2013-02-09 12:59:46

+0

請忽略關於訂單的陳述。查詢的順序很好。一直以來,因爲我用'擁有' – scones 2013-02-09 13:13:39