Вот реализация Java формула Haversine . Я использую это в проекте вычислить расстояние в милях между lat/longs.
public static double distFrom(double lat1, double lng1, double lat2, double lng2) {
double earthRadius = 3958.75; // miles (or 6371.0 kilometers)
double dLat = Math.toRadians(lat2-lat1);
double dLng = Math.toRadians(lng2-lng1);
double sindLat = Math.sin(dLat / 2);
double sindLng = Math.sin(dLng / 2);
double a = Math.pow(sindLat, 2) + Math.pow(sindLng, 2)
* Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2));
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
double dist = earthRadius * c;
return dist;
}
Подходящим местом являются / tasks
и lib / tasks
. Я использую / tasks
, когда задачи предназначены для работы или управления самим Gem, я использую lib / tasks
, когда задачи предназначены для загрузки пользователями Gem.
Это связано с тем, что у пользователей могут возникнуть проблемы с загрузкой файлов ruby вне папки lib
, которая автоматически добавляется к пути загрузки, когда требуется Gem.
Также я предлагаю вам использовать * .rake расширение. В настоящее время почти каждая среда IDE связывает расширение .rake
с файлами ruby, а самая продвинутая среда IDE может даже анализировать контент как сценарии rake. Расширение .rake
также является лучшим выбором для разработчиков, потому что вы можете обеспечить немедленный обзор содержимого внутри файла.
По поводу вашего второго вопроса, в настоящее время нет возможности заставить Rails загружать ваши rake-задачи, когда плагин упакован как Gem. Вам необходимо включить файл rake в свое приложение (в другой файл rake или в основной файл Rakefile) или клонировать задачи rake в свой проект.
Если вы устанавливаете плагин в папку поставщика, все *. Файлы rake
в каталогах задач и lib / tasks автоматически загружаются в область видимости Rails следующими двумя строками.
Dir["#{RAILS_ROOT}/vendor/plugins/*/tasks/**/*.rake"].sort.each { |ext| load ext }
Dir["#{RAILS_ROOT}/vendor/plugins/*/lib/tasks/**/*.rake"].sort.each { |ext| load ext }