Запрос для получения записей на основе Радиуса в SQLite?

У меня есть этот запрос, который действительно хорошо работает в 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?

26
задан kennytm 27 June 2010 в 09:02
поделиться

1 ответ

Вы можете создать 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 - для использования в приложении для расчета расстояния с использованием широты и долготы .

15
ответ дан 28 November 2019 в 06:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: