Voici mon problème, j'ai une table SQLite avec les emplacements et les latitudes/longitudes. Fondamentalement, je dois:Calcul de la distance du grand cercle avec SQLite
SELECT location, HAVERSINE(lat, lon) AS distance FROM location ORDER BY distance ASC;
HAVERSINE()
est une fonction PHP qui doit retourner le Great-Circle Distance (en miles ou km), étant donné une paire de valeurs de latitude et de longitude. L'une de ces paires doit être fournie par PHP et l'autre paire doit être fournie par chaque ligne de latitude/longitude disponible dans le tableau locations
.
Depuis SQLite ne possède aucune extension spatiale Géo ( AFAIKSpatiaLite existe mais quand même ...) Je devine que la meilleure approche serait d'utiliser une fonction personnalisée avec l'une des méthodes AOP:
Je pense que pour ce cas PDO::sqliteCreateFunction()
serait suffisant, mais mon expérience limitée avec cette fonction peut être réduite à des cas d'utilisation similaire à celui fourni dans le Manuel PHP:
$db = new PDO('sqlite:geo.db');
function md5_and_reverse($string) { return strrev(md5($string)); }
$db->sqliteCreateFunction('md5rev', 'md5_and_reverse', 1);
$rows = $db->query('SELECT md5rev(filename) FROM files')->fetchAll();
J'ai du mal à comprendre comment puis-je obtenir un utilisateur SQLite fonction définie à traiter les données de PHP et les données de table en même temps et j'apprécierais si quelqu'un pourrait m'aider à résoudre ce problème tout en comprenant SQLite UDFs (une grande victoire de SQLite IMO) un peu mieux.
Merci d'avance!
Avez-vous avoir un moyen qui fonctionnera sans définir les fonctions personnalisées? Voir http://stackoverflow.com/questions/3126830/query-to-get-records-based-on-radius-in-sqlite – Pentium10
@ Pentium10: Non, pas un rapide au moins. Vérifiez mon autre question: http://stackoverflow.com/questions/2096385/formulas-to-calculate-geo-proximity. –