왜 지오 코더 소스를 보지 않습니까? 기껏해야. 나는 당신이 찾고있는 클래스가 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에서 작동하지 않을 것입니다
이러한 가장 가까운 neightbour 쿼리를 효율적으로 수행하려면 데이터베이스에서 인덱싱 된 쿼리를 사용하여 데이터베이스를 지원하거나 DB에서 인덱싱 할 수 있도록 데이터를 준비해야합니다. 그러니 먼저 DB에 대해 알려주십시오. 또한 최상의 접근 방식을 선택하려면 프로젝트에 필요한 정밀도를 파악하는 것이 좋습니다. – cryo28