なぜジオコーダのソースを見ないのですか?それはgithub上にある。あなたが探しているクラスはstores/active_record.rb
です。明らかに、ライブラリを使用すると拡張性やその他の利点は得られませんが、必要なコードが得られます。
編集:これはあなたのオフ発射し、これを取得するために
DROP FUNCTION IF EXISTS calculateDistance;
delimiter |
CREATE FUNCTION calculateDistance (originLatitude FLOAT, originLongitude FLOAT, targetLatitude FLOAT, targetLongitude FLOAT)
returns FLOAT
deterministic
BEGIN
DECLARE radianConversion FLOAT;
DECLARE interim FLOAT;
DECLARE earthRadius FLOAT;
SET radianConversion = 180/pi() ;/*57.2957795130823;*/
SET interim = SIN(originLatitude/radianConversion) * SIN(targetLatitude/radianConversion) + COS(originLatitude/radianConversion) * COS(targetLatitude/radianConversion) * COS(targetLongitude/radianConversion - originLongitude/radianConversion);
IF interim > 1 THEN
SET interim = 1;
ELSEIF interim < -1 THEN
SET interim = -1;
END IF;
SET earthRadius = 6371.0072;
RETURN earthRadius * ACOS(interim);
END|
delimiter ;
select calculateDistance(43.6667,-79.4167,45.5000,-73.5833);
は、次に、あなたは自分のクラスにメソッドから正しい値を渡す必要が距離を計算しますMySQLでUDFを与えるだろう。明らかにこれはSqliteでは機能しません
このような最寄りのネイバーブのクエリを効率的に行うには、(インデックス付きクエリを使用して)データベースでそれらをサポートするか、またはDBにインデックスを作成できるようにデータを準備する必要があります。だから、どのDBを使用するかまず教えてください。また、最良のアプローチを選択するには、プロジェクトに必要な正確さを知っておくと良いでしょう。 – cryo28