Използвам Doctrine2 и CodeIgniter2 за моето тестово приложение. Имам таблица в моята база данни, която съхранява всички географски местоположения, които имат полета
- Име
- Географска ширина
- Географска дължина
- Създаден (клеймо)
Виждам, че операторът на sql чрез формула за хаверсинус за избор на местоположения ще изглежда така
(както е споменато в друг отговор)
SELECT id,
( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin( radians( lat ) ) ) ) AS distance
FROM markers
HAVING distance < 25
ORDER BY distance
LIMIT 0 , 20;
Сега ми е трудно да направя това с помощта на създателя на заявки за създаване. Не съм сигурен дали DQL или querybuilder дори поддържа тригонометрични функции. Също така има шансове моят db да бъде мигриран към postgre или да остане с MySql (да, това наистина е болка в гърба), тъй като това решение е извън моя контрол.
Всичко, което ми беше казано, е да използвам методите на доктрината, за да постигна това и следователно db ще стане мащабируем в бъдеще, след като мигрира към някоя от поддържаните от доктрината платформи. Знам, че това е абсурдно. Но наистина ли е възможно да се правят заявки за данни за геолокация, като се използват стойностите за географска ширина и дължина в базата данни?
За разбирането,
Ашок Сринивасан