У меня есть этот запрос, который действительно хорошо работает в MySQL
SELECT ((ACOS(SIN(12.345 * PI() / 180) * SIN(lat * PI() / 180) +
COS(12.345 * PI() / 180) * COS(lat * PI() / 180) * COS((67.89 - lon) *
PI() / 180)) * 180 / PI()) * 60 * 1.1515 * 1.609344) AS distance, poi.*
FROM poi
WHERE lang='eng'
HAVING distance<='30'
расстояние находится в Километрах, вход lat=12.345
и lon=67.89
SQLite равняется 3, и я не могу выполнить пользовательские функции с ним, как это находится на Android. У меня также нет acos () и т.д...., поскольку это не часть стандартного SQLite.
Как был бы вышеупомянутый запрос в SQLite?
Вы можете создать 4 новых столбца: sin и cos lat
и lon
. Поскольку cos (a + b) = cos a cos b - sin a sin b
, и другие проявления sin и cos, такие как SIN (12.345 * PI () / 180)
могут быть вычисленное в программе перед выполнением запроса, выражение большого «расстояния» сводится к некоторой форме P * SIN_LAT + Q * COS_LAT + ...
, которая может быть обработана SQLite3.
Кстати, см. Также Sqlite на Android: Как создать функцию sqlite dist db - для использования в приложении для расчета расстояния с использованием широты и долготы .