Обработка географических координат на C#

Дмитрий16 лет в сервисе
Данные заказчика будут вам доступны после подачи заявки
22.05.2013

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 и выводим в последнюю колонку выходного файла.

Заявки фрилансеров