2012-05-17 2 views
4

Im ищет базу данных с широтой и долготой местоположения. Я хочу получить все местоположения в определенном радиусе.Поиск в радиусе PHP, MYSQL и Google Maps

Затем я кодирую возвращенные результаты в JSON и извлекаю данные с помощью ajax, однако я получаю неопределенную ошибку, означающую, что нет данных, возвращаемых из базы данных.

Может ли кто-нибудь увидеть, где я ошибаюсь?

Heres мой запрос

$sql="SELECT *, ACOS(SIN(RADIANS(`lat`)) * SIN(RADIANS($fLat)) + COS(RADIANS(`lat`)) 
* COS(RADIANS($fLat)) * COS(RADIANS(`lng`) - RADIANS($fLon))) * 6380 AS `distance` 
FROM `markers` 
WHERE ACOS(SIN(RADIANS(`lat`)) * SIN(RADIANS($fLat)) + COS(RADIANS(`lat`)) 
    * COS(RADIANS($fLat)) * COS(RADIANS(`lng`) - RADIANS($fLon))) * 6380 < 10 
    ORDER BY `distance`"; 


    $result = mysql_query($sql); 

    while($r = mysql_fetch_assoc($result)) $rows[] = $r; 

    echo json_encode($rows); 
+1

предложение: Попробуйте запрос без WHERE пункта (или проще ИНЕКЕ) и посмотреть, если вы может получить некоторые результаты в первую очередь. Разделите и победите, чтобы изолировать источник проблемы. глядя на расстояния, которые могут быть информативными. –

+0

Спасибо за ответ. Просто удалил предложение where и ничего не получил, никаких других идей? – lnelson92

+0

'SELECT * FROM markers' возможно? –

ответ

5

Я не очень поможет с тригонометрии или SQL, я только что видел достаточно Google отображает вопросы, чтобы указать вам на этом уроке:

https://developers.google.com/maps/articles/phpsqlsearch#findnearsql

Существует запрос на поиск пятен по расстоянию в радиусе, который вы можете попробовать, надеясь, что он сработает для вас.

Использование 3959 (в милях) или 6371 (в км)

+0

Спасибо, я уже посмотрел на этот учебник. И скопировал весь код в (изменение бит relavant) и возвращает пустой XML-документ. – lnelson92

+0

Жаль, что это не помогло. Если вы не учитываете 'расстояние <25' или увеличиваете его, скажем, тысячи, я полагаю, что он должен вернуть несколько маркеров. Если нет, это может быть несоответствие типа в базе данных? Математика может быть обработана неправильно. –

0

Попробуйте это:

$sql="SELECT * , ACOS(SIN(RADIANS('lat')) * SIN(RADIANS($fLat)) + COS(RADIANS('lat')) * COS(RADIANS($fLat)) * COS(RADIANS('lng') - RADIANS($fLon))) * 6380 AS distance FROM 'markers' 
WHERE distance < 10 
ORDER BY distance"; 

$result = mysql_query($sql); 

$rows = mysql_fetch_assoc($result)); 

echo json_encode($rows); ` 
Смежные вопросы