저는 Geokit 플러그인을 사용하여 current_user와 다른 사용자 간의 거리를 계산합니다 (프로파일 모델에 실제로 저장되는 지오 코딩).Geokit 거리 계산이 이상 함
테스트 목적으로 미네소타 주 미니애폴리스와 미네소타 주 세인트 폴에 각각 한 명씩 두 명의 사용자를 만들었습니다. Geokit 보석을 사용하여 IRB 세션에서 프로필의 위도/경도 쌍을 지오 코딩했습니다.
각 프로필의 이름, 위치 및 위도/경도 쌍을 나열하도록 색인보기를 변경했습니다. 이 값은 데이터베이스의 값과 일치합니다.
색인보기를 변경하여 current_user의 lat/lng 쌍을 표시했습니다. current_user의 lat/lng 쌍이 기대와 일치하는지 확인하기 위해 각 사용자로 인증되었습니다. 그게했다. 나는 각 사용자 사이의 거리를 계산하는 ProfileController의 색인 작업에서 쿼리를 변경
def ll
#if lat and lng fields aren't empty
LatLng.new(self.lat,self.lng) if (!self.lat.nil? && !self.lng.nil?)
end
:
내가하는 LatLng 객체와 위도/LNG 필드를 반환 할 정보 모델, 이름 LL에 인스턴스 메소드를 추가 상기 CURRENT_USER : 01,232,552,456,429,545 : 마지막@profiles = Profile.find(:all,
:conditions => conditions, # set WHERE clause
:order => order_by, # set ORDER BY clause
:origin => current_user.profile.ll, # calculate distance based on current_user's location
:units => :miles # use miles
, I는 CURRENT_USER 및 개별 사용자들 사이의 거리를 표시하는 인덱스보기를 변경 (-93.2638361, 44.9799654)
A - 0.0 MI B (44.9444101, -93.0932742) - 8.7 m
: 62,156,310,173,210 I는 (-93.2638361, 44.9799654), 유저 (A)로 인증거리 계산 정확 (-93.2638361, 44.9799654)
A - 32.8 MI B (44.9444101, -93.0932742) - 41.1 MI
: I가 사용자 B (44.9444101, -93.0932742)로 인증하는 경우그러나, 거리 계산이 잘못되었습니다
나는이 '원시'위도/LNG 쌍 사이의 거리 계산을 확인 할 수 있었다 :
a = LatLng.new(44.9799654,-93.2638361)
=> #<Geokit::LatLng:0x1034af778 @lat=44.9799654, @lng=-93.2638361>
>> b = LatLng.new(44.9444101,-93.0932742)
=> #<Geokit::LatLng:0x1034aab88 @lat=44.9444101, @lng=-93.0932742>
>> a.distance_to(b)
=> 8.70261379563918
>> b.distance_to(a)
=> 8.70261379563918
나는 손실에있어이 무슨 일이 일어나고 있는지 설명 할 수 있습니다. 어떤 아이디어라도 감사 할 것입니다. 당신이 할 경우 어떻게됩니까
감사합니다. 고맙습니다! 고맙습니다! 전환 문제로 보입니다. 그러나 그것이 무엇인지 판단 할 수 있으면 저주받을 것입니다. 나는 유형 (logger.debug)과 생성 된 sql을 살펴보고 싶다. 어떻게 그렇게 할 수 있는지 말해 줄 수 있니? – craig