Геокит и рельсы 3 - PullRequest
       4

Геокит и рельсы 3

4 голосов
/ 13 августа 2010

Я использую geokit gemit и плагин с рельсами 3. Кажется, есть известная проблема с ними, которую можно увидеть здесь http://github.com/andre/geokit-rails/issues#issue/15

Теперь я попытался следовать предложенному внизу решению. Я вставил это определение функции в конец файла, чуть выше activ_as_mapable, и сразу после первого вызова, но каждый раз ничего не происходило.

Есть идеи, что еще можно сделать?

Спасибо

Ответы [ 6 ]

7 голосов
/ 12 октября 2010

Я столкнулся с подобными проблемами при обновлении моего приложения до rails 3. Я все еще использую Geokit для геокодирования, но области Active Record для запросов к базе данных на основе расстояния. Это довольно удобно, и вы по-прежнему получаете все преимущества Active Record 3. Вот пример из моей модели User:

scope :near, lambda{ |*args|
                  origin = *args.first[:origin]
                  if (origin).is_a?(Array)
                    origin_lat, origin_lng = origin
                  else
                    origin_lat, origin_lng = origin.lat, origin.lng
                  end
                  origin_lat, origin_lng = deg2rad(origin_lat), deg2rad(origin_lng)
                  within = *args.first[:within]
                  { 
                    :conditions => %(
                      (ACOS(COS(#{origin_lat})*COS(#{origin_lng})*COS(RADIANS(users.lat))*COS(RADIANS(users.lng))+
                      COS(#{origin_lat})*SIN(#{origin_lng})*COS(RADIANS(users.lat))*SIN(RADIANS(users.lng))+
                      SIN(#{origin_lat})*SIN(RADIANS(users.lat)))*3963) <= #{within}
                    ),
                    :select => %( users.*,
                      (ACOS(COS(#{origin_lat})*COS(#{origin_lng})*COS(RADIANS(users.lat))*COS(RADIANS(users.lng))+
                      COS(#{origin_lat})*SIN(#{origin_lng})*COS(RADIANS(users.lat))*SIN(RADIANS(users.lng))+
                      SIN(#{origin_lat})*SIN(RADIANS(users.lat)))*3963) AS distance
                    )
                  }
                }

Вот сообщение в блоге с более подробной информацией по теме: http://stcorbett.com/code/distance-queries-with-rails-3-without-geokit/

4 голосов
/ 20 апреля 2011

Порт jlecour для рельсов 3 должен решить все проблемы, с которыми вы столкнулись в прошлом году.

Убедитесь, что вы используете mysql или postgres, если выполняете расчеты расстояния.

3 голосов
/ 06 сентября 2011

После проблем с установкой гема geokit-rails3 на Rails 3.1 я перешел на гем геокодер .Он также имеет расчет расстояния (не забывайте s в @ your_model.nearby * s * (5)).Существует также Railscast .

1 голос
/ 06 сентября 2011

Для тех, кто все еще испытывает проблемы с геокитом, я перешел к использованию mongodb ..., в котором встроен поиск по расстоянию n ... ... 1001 *

1 голос
/ 07 декабря 2010

Вот порт геокита на рельсы 3, незавершенный через:

https://github.com/jlecour/geokit-rails3

0 голосов
/ 08 октября 2010

Привет, Амит, Не уверен, что ты уже все разобрался, но я расскажу тебе, что я сделал на всякий случай.

Я разветвил исходник andre's geokit-rails, затем клонировал его локально и добавил код этот гист в строке 34 из lib/geokit-rails/acts-as-mappable.rb, сразу после строки, которая читает module ClassMethods # :nodoc:.

Затем я передал эти изменения обратно в мой раздвоенный репозиторий на github и использовал мою вилкуустановить исходный код как плагин к моему приложению rails 3.Похоже, это сработало сразу, но убедитесь, что у вас есть строка acts_as_mappable, добавленная к любой модели, на которой вы хотите произвести расчеты расстояния, и убедитесь, что у вас есть два столбца float в этой базе данных с именем :latи :lng.

...