2013-02-09 3 views
0

, используя этот запрос от Google: linkпередавая переменный гаверсинус формулы

Im пытается создать поиск местоположения, возвращая все города в пределах заданного расстояния. Я хочу, чтобы люди могли вводить город в форму, мой код набирал lat + long названия города, а затем запрашивал мою базу данных, чтобы возвращать все города на заданном расстоянии.

, чтобы начать, я найти лат + длинный по введенному адресу:

$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

+0

Вы проверили содержимое ошибки $ result->? Сделайте print_r ($ result) – alexg

ответ

0

Я делаю предположение здесь, что вы изменили имена столбцов от лат, LNG широты, долготы в вашем определении таблицы.

И под отсутствием фактического сообщения об ошибке, это догадка:

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 

это должно решить проблему, так как в запросе lat и lng, где не определено.

+0

, это сделало это, спасибо большое – rpsep2

+0

, пожалуйста. – scones

0

Проблема может быть, что вы используете HAVING вместо 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

+0

@scones, вы можете уточнить? – rpsep2

+0

, пожалуйста, не обращайте внимания на заявление о заказе. порядок запроса в порядке. был давно, так как я использовал 'having' – scones

Смежные вопросы