これが私の問題です。場所と緯度/経度を含むSQLiteテーブルがあります。基本的に私はする必要があります:
SELECT location, HAVERSINE(lat, lon) AS distance FROM location ORDER BY distance ASC;
HAVERSINE()
は、緯度と経度の値のペアが与えられた場合に大圏距離(マイルまたはkm)を返すPHP関数です。これらのペアの1つはPHPによって提供され、もう1つのペアはテーブルで使用可能な各緯度/経度の行によって提供される必要がありlocations
ます。
SQLiteにはGeoSpatial拡張機能がないため(AFAIK SpatiaLiteは存在しますが、それでも...)、PDOメソッドのいずれかでカスタム関数を使用するのが最善の方法だと思います。
この場合は十分だと思いますがPDO::sqliteCreateFunction()
、この関数に関する私の限られた経験は、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();
PHPからのデータとテーブルデータを同時に処理するSQLiteユーザー定義関数を取得する方法を理解するのに問題があります。SQLiteUDFを理解しながらこの問題を解決するのを誰かが助けてくれれば幸いです(大きな勝利) SQLite IMOの)少し良くなりました。
前もって感謝します!