Фрилансеры предложат решение вашей задачи уже через несколько минут!

Публикация заказа на фриланс бирже не займет много времени.

7 лет назад
Дмитрий А.
35 лет, Украина
11 лет в сервисе
Был онлайн 25 дней назад
7 лет назад

1. На входе файл mesto.csv c перечнем объектов и их координатами,
к примеру 1 строка выглядит так:
----------------------------------
«Воеводовка“;" села“;" Vojevodivka“;" Воєводівка“;" Днепропетровская область“;" Верхнеднепровский район“;" Географические координаты села Воеводовка (Днепропетровская область, Верхнеднепровский район).“;"48.56361»;"34.31889“;" Почтовый индекс села Воеводовка: 51653.“;" Средняя высота села над уровнем моря (в метрах): 119.“;"8ef6145d2f83cba3300094dbc041732d»
-------------------
т.е. название села, какие-то параметры, которые нам не важны и поле с координатами.

Есть второй файл object.csv (перечень обектов, например достопримечательности, музеи и т.п.), он может быть той же структуры.

Для каждого населенного пункта нужно найти ближайшие объекты в заданном радиусе, не более N штук (по умолчанию = 30 шт) и не далее чем на расстоянии S км от населенного пункта (по умолчанию 30 км).
При этом если указано число N=0, то ограничения по количеству нет, если S = 0, то по расстоянию ограничения нет.

В выходной файл OUT.csv нужно вывести все те строки, которые присутствуют в файле mesto.csv и в конце дописать через запятую номера объектов (номер объекта соответсвует номеру строки в файле object.csv) и через тире расстояние до объекта, далее точка с запятой и след объект и т.п., Расстояние округляем до целых, но если дробная часть близка к 0,5, тогда округляем значение так, чтобы погрешность округления оказалась не более 2% т.е. например если целое в диапазоне 1–10 окргляем до 1 знака после запятой), если целое более 10 округляем до целого либо до 0,5) Если более 20, то до целого.
Упорядочить нужно по дальности. Т.е вначале самые ближние, затем более дальние.

Нужно реализовать в виде функции с входными параметрами. Замечу, что она должна работать и в том случае если на входе оба файла совпадут. Тогда в итоге получится информация для каждого объекта в виде перечня ближайших объектов и расстояния до них.

Для тестирование будет дан файл 30000 населенных пунктов Украины, нужно вывести ближайшие населенные пункты, еще файл всех городов Украины, нужно вывести расстояния до ближайших городов, еще файл всех пгт Украины, нужно вывести расстояние до ближайших пгт. И еще файл достопримечательностей Украины, нужно вывести расстояния до ближайших населенных пунктов, пгт, городов.


Для большого количества объектов, если проверять расстояния до всех объектов, программа загнется. Поэтому
предлагаю делать таким образом. Если ограничение по расстоянию задано S>0? то Все заданные объекты заносим в массив и сортируем по одной из координат, например долготе.

Далее смотрим минимальную долготу и максимальную, вычисляем расстояние между ними по формуле. Далее то же самое делаем с широтой. Таким образом описываем все объекты в прямоугольник. После этого делим всю область на квадраты по S км. Далее для каждого населенного пункта определяем в какой квадрат он попадает. И перебираем все объекты из того же квадрата и 8 соседних квадратов. Вычисляем расстояние до каждого объекта и заносим в массив. После все проделанной работы, массив сортируем и берем N найденных объектов, если N>0 и выводим в последнюю колонку выходного файла.

Выбранный исполнитель
Константин К.
34 года, Россия
7 лет в сервисе
Был онлайн 5 лет назад
7 лет назад

$15

2 дня

Отзыв заказчика
Константин отлично справился с работой! Спасибо!!
Отзыв фрилансера
Отличный заказчик. Четкое задание, мгновенная оплата. Рекомендую!
  • Рекламное место свободно
    29 дней за $10
  • Рекламное место свободно
    29 дней за $10
  • Рекламное место свободно
    29 дней за $10
Дмитрий И.
33 года, Украина
7 лет в сервисе
Был онлайн 6 лет назад
7 лет назад
Шишка О.
31 год, Украина
7 лет в сервисе
Был онлайн 3 года назад
7 лет назад
Юрий Ш.
36 лет, Узбекистан
9 лет в сервисе
Был онлайн 9 дней назад
7 лет назад
ТОП-20 — Прикладное ПО
Константин К.
34 года, Россия
7 лет в сервисе
Был онлайн 5 лет назад
7 лет назад
Сергей И.
45 лет, Украина
15 лет в сервисе
Был онлайн 5 лет назад
7 лет назад

Другие заказы в категории «Прикладное ПО»

Здесь заказчик и фрилансеры могут обсуждать заказ до начала его выполнения.
Фрилансеры могут участвовать в обсуждении только после подачи заявки.
Здесь заказчик будет контролировать выполнение заказа и общаться с исполнителем.
Доступ к этому разделу имеют только заказчик и выбранный исполнитель.
Все материалы этого раздела закрыты от поисковых систем.