Как сделать пакетное геокодирование в рельсах 3 - PullRequest
1 голос
/ 30 декабря 2011

У меня есть около 100 000 записей, мне нужно найти широту и долготу. В настоящее время я использую geokit-rails для геокодирования.

То, что я сейчас делаю, - это циклический просмотр записей один за другим, чтобы найти широту и долготу. Но это очень много времени. Есть ли способ сделать это навалом? Любые методы пакетной обработки или что-то в этом роде.

Пожалуйста, помогите!

Ответы [ 2 ]

0 голосов
/ 30 декабря 2011

Я не думаю, что есть более быстрый способ сделать это.Я согласен с @Robin, может быть, вы можете сделать это небольшое улучшение, но вы не можете значительно улучшить производительность.

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

@shop = Shop.new(params[:shop])
@coordinates = []
seek_str = @shop.city + "," + @shop.address
@coordinates = Geocoding.get(seek_str)
@shop.lat = @coordinates[0][:latitude]
@shop.lng = @coordinates[0][:longitude]

Широта и долгота теперь геокодируются через город и адрес.Город и адрес записи вставляются с формой.Учтите, что это Rails 2, и, возможно, вам нужно внести некоторые изменения, чтобы это работало на Rails 3!

0 голосов
/ 30 декабря 2011

Единственное улучшение, которое я могу придумать, это использование find_each

Model.find_each :batch_size => 500 do |model|
   #geocode
end

Он будет загружать 500 объектов одновременно и проходить через них. Я не думаю, что вы можете сделать это намного лучше, даже если бы был нативный метод сделать это, я думаю, спектакли были бы такими же.

...