diff --git a/backend/Dockerfile b/backend/Dockerfile new file mode 100644 index 00000000..6491edd4 --- /dev/null +++ b/backend/Dockerfile @@ -0,0 +1,14 @@ +FROM python:3.13-slim + +WORKDIR /app + +RUN python3 -m venv /venv +ENV PATH="/venv/bin:$PATH" + +COPY requirements.txt . +RUN pip install --no-cache-dir --upgrade pip && \ + pip install --no-cache-dir -r requirements.txt + +COPY . . + +CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"] \ No newline at end of file diff --git a/backend/cities.json b/backend/cities.json new file mode 100644 index 00000000..e6906d4d --- /dev/null +++ b/backend/cities.json @@ -0,0 +1,5002 @@ +[ + { + "name":"г. Новосибирск", + "lat":55.03019, + "lon":82.92043 + }, + { + "name":"г. Екатеринбург", + "lat":56.83871, + "lon":60.60549 + }, + { + "name":"г. Казань", + "lat":55.79443, + "lon":49.11152 + }, + { + "name":"г. Нижний Новгород", + "lat":56.32679, + "lon":44.0065 + }, + { + "name":"г. Челябинск", + "lat":55.16023, + "lon":61.40076 + }, + { + "name":"г. Красноярск", + "lat":56.00953, + "lon":92.85252 + }, + { + "name":"г. Самара", + "lat":53.19518, + "lon":50.10696 + }, + { + "name":"г. Уфа", + "lat":54.73486, + "lon":55.95778 + }, + { + "name":"г. Ростов-на-Дону", + "lat":47.21803, + "lon":39.69027 + }, + { + "name":"г. Омск", + "lat":54.98496, + "lon":73.36757 + }, + { + "name":"г. Краснодар", + "lat":45.03545, + "lon":38.9753 + }, + { + "name":"г. Воронеж", + "lat":51.65939, + "lon":39.19692 + }, + { + "name":"г. Пермь", + "lat":58.01027, + "lon":56.23427 + }, + { + "name":"г. Волгоград", + "lat":48.70717, + "lon":44.51702 + }, + { + "name":"г. Саратов", + "lat":51.53356, + "lon":46.03426 + }, + { + "name":"г. Тюмень", + "lat":57.15312, + "lon":65.53435 + }, + { + "name":"г. Тольятти", + "lat":53.5205, + "lon":49.3895 + }, + { + "name":"г. Барнаул", + "lat":53.34798, + "lon":83.7799 + }, + { + "name":"г. Ижевск", + "lat":56.85284, + "lon":53.21151 + }, + { + "name":"г. Махачкала", + "lat":42.9849, + "lon":47.50455 + }, + { + "name":"г. Хабаровск", + "lat":48.46481, + "lon":135.05985 + }, + { + "name":"г. Ульяновск", + "lat":54.3079, + "lon":48.37485 + }, + { + "name":"г. Иркутск", + "lat":52.28635, + "lon":104.28068 + }, + { + "name":"г. Владивосток", + "lat":43.11632, + "lon":131.8825 + }, + { + "name":"г. Ярославль", + "lat":57.62163, + "lon":39.89789 + }, + { + "name":"г. Кемерово", + "lat":55.39102, + "lon":86.04692 + }, + { + "name":"г. Томск", + "lat":56.48467, + "lon":84.94829 + }, + { + "name":"г. Набережные Челны", + "lat":55.69488, + "lon":52.32791 + }, + { + "name":"г. Ставрополь", + "lat":45.04446, + "lon":41.96913 + }, + { + "name":"г. Оренбург", + "lat":51.78753, + "lon":55.10178 + }, + { + "name":"г. Новокузнецк", + "lat":53.79435, + "lon":87.21429 + }, + { + "name":"г. Рязань", + "lat":54.62553, + "lon":39.73592 + }, + { + "name":"г. Балашиха", + "lat":55.79699, + "lon":37.9381 + }, + { + "name":"г. Пенза", + "lat":53.17539, + "lon":45.03474 + }, + { + "name":"г. Чебоксары", + "lat":56.12548, + "lon":47.37733 + }, + { + "name":"г. Липецк", + "lat":52.61014, + "lon":39.59473 + }, + { + "name":"г. Калининград", + "lat":54.70743, + "lon":20.50735 + }, + { + "name":"г. Астрахань", + "lat":46.36564, + "lon":48.05592 + }, + { + "name":"г. Тула", + "lat":54.19189, + "lon":37.61536 + }, + { + "name":"г. Киров", + "lat":58.6035, + "lon":49.66804 + }, + { + "name":"г. Сочи", + "lat":43.58552, + "lon":39.72299 + }, + { + "name":"г. Курск", + "lat":51.73038, + "lon":36.19255 + }, + { + "name":"г. Улан-Удэ", + "lat":51.83345, + "lon":107.58407 + }, + { + "name":"г. Тверь", + "lat":56.85866, + "lon":35.91183 + }, + { + "name":"г. Магнитогорск", + "lat":53.40726, + "lon":58.97918 + }, + { + "name":"г. Сургут", + "lat":61.25415, + "lon":73.39624 + }, + { + "name":"г. Брянск", + "lat":53.24201, + "lon":34.3653 + }, + { + "name":"г. Иваново", + "lat":56.99941, + "lon":40.97291 + }, + { + "name":"г. Якутск", + "lat":62.02806, + "lon":129.73249 + }, + { + "name":"г. Владимир", + "lat":56.12804, + "lon":40.4083 + }, + { + "name":"г. Симферополь", + "lat":44.94828, + "lon":34.10013 + }, + { + "name":"г. Белгород", + "lat":50.59756, + "lon":36.58584 + }, + { + "name":"г. Нижний Тагил", + "lat":57.91023, + "lon":59.98142 + }, + { + "name":"г. Калуга", + "lat":54.50602, + "lon":36.25161 + }, + { + "name":"г. Чита", + "lat":52.03388, + "lon":113.49949 + }, + { + "name":"г. Грозный", + "lat":43.31789, + "lon":45.69814 + }, + { + "name":"г. Волжский", + "lat":48.79798, + "lon":44.74626 + }, + { + "name":"город Смоленск", + "lat":54.78264, + "lon":32.04525 + }, + { + "name":"г. Подольск", + "lat":55.43896, + "lon":37.57031 + }, + { + "name":"г. Саранск", + "lat":54.18082, + "lon":45.18631 + }, + { + "name":"г. Вологда", + "lat":59.2205, + "lon":39.89152 + }, + { + "name":"г. Курган", + "lat":55.44437, + "lon":65.31621 + }, + { + "name":"г. Череповец", + "lat":59.12687, + "lon":37.90906 + }, + { + "name":"г. Орёл", + "lat":52.96719, + "lon":36.06957 + }, + { + "name":"г. Архангельск", + "lat":64.53939, + "lon":40.517 + }, + { + "name":"г. Владикавказ", + "lat":43.02055, + "lon":44.6819 + }, + { + "name":"г. Нижневартовск", + "lat":60.93974, + "lon":76.56955 + }, + { + "name":"г. Йошкар-Ола", + "lat":56.63433, + "lon":47.89992 + }, + { + "name":"г. Стерлитамак", + "lat":53.63021, + "lon":55.93173 + }, + { + "name":"г. Мурманск", + "lat":68.97066, + "lon":33.07492 + }, + { + "name":"г. Кострома", + "lat":57.768, + "lon":40.927 + }, + { + "name":"г. Новороссийск", + "lat":44.72342, + "lon":37.76869 + }, + { + "name":"г. Тамбов", + "lat":52.72116, + "lon":41.45222 + }, + { + "name":"г. Химки", + "lat":55.88885, + "lon":37.43037 + }, + { + "name":"г. Мытищи", + "lat":55.91047, + "lon":37.73639 + }, + { + "name":"г. Нальчик", + "lat":43.48464, + "lon":43.60709 + }, + { + "name":"г. Таганрог", + "lat":47.20966, + "lon":38.93525 + }, + { + "name":"г. Нижнекамск", + "lat":55.63123, + "lon":51.81447 + }, + { + "name":"г. Благовещенск", + "lat":50.29066, + "lon":127.5272 + }, + { + "name":"г. Комсомольск-на-Амуре", + "lat":50.55251, + "lon":136.98955 + }, + { + "name":"г. Петрозаводск", + "lat":61.78897, + "lon":34.35965 + }, + { + "name":"г. Королёв", + "lat":55.91619, + "lon":37.85442 + }, + { + "name":"г. Шахты", + "lat":47.70856, + "lon":40.21587 + }, + { + "name":"г. Энгельс", + "lat":51.48551, + "lon":46.1267 + }, + { + "name":"г. Великий Новгород", + "lat":58.52142, + "lon":31.27542 + }, + { + "name":"г. Люберцы", + "lat":55.6765, + "lon":37.89812 + }, + { + "name":"г. Братск", + "lat":56.15141, + "lon":101.6341 + }, + { + "name":"г. Старый Оскол", + "lat":51.29797, + "lon":37.83323 + }, + { + "name":"город Ангарск", + "lat":52.5449, + "lon":103.88845 + }, + { + "name":"г. Сыктывкар", + "lat":61.66872, + "lon":50.83568 + }, + { + "name":"г. Дзержинск", + "lat":56.23753, + "lon":43.4599 + }, + { + "name":"г. Псков", + "lat":57.81982, + "lon":28.39507 + }, + { + "name":"г. Орск", + "lat":51.2293, + "lon":58.47525 + }, + { + "name":"г. Красногорск", + "lat":55.83186, + "lon":37.32945 + }, + { + "name":"г. Армавир", + "lat":45.00114, + "lon":41.13243 + }, + { + "name":"г. Абакан", + "lat":53.72231, + "lon":91.44369 + }, + { + "name":"г. Балаково", + "lat":52.02228, + "lon":47.78278 + }, + { + "name":"г. Бийск", + "lat":52.53928, + "lon":85.21384 + }, + { + "name":"г. Южно-Сахалинск", + "lat":46.9667, + "lon":142.7213 + }, + { + "name":"г. Одинцово", + "lat":55.67903, + "lon":37.26352 + }, + { + "name":"г. Уссурийск", + "lat":43.80484, + "lon":131.93675 + }, + { + "name":"г. Прокопьевск", + "lat":53.86042, + "lon":86.71833 + }, + { + "name":"г. Рыбинск", + "lat":58.0484, + "lon":38.85848 + }, + { + "name":"г. Норильск", + "lat":69.34899, + "lon":88.20094 + }, + { + "name":"г. Волгодонск", + "lat":47.51658, + "lon":42.19846 + }, + { + "name":"г. Сызрань", + "lat":53.15572, + "lon":48.47442 + }, + { + "name":"г. Петропавловск-Камчатский", + "lat":53.03701, + "lon":158.65595 + }, + { + "name":"г. Каменск-Уральский", + "lat":56.41485, + "lon":61.91884 + }, + { + "name":"г. Новочеркасск", + "lat":47.41185, + "lon":40.10406 + }, + { + "name":"г. Альметьевск", + "lat":54.90144, + "lon":52.29712 + }, + { + "name":"г. Златоуст", + "lat":55.17142, + "lon":59.67265 + }, + { + "name":"г. Северодвинск", + "lat":64.56256, + "lon":39.81822 + }, + { + "name":"г. Хасавюрт", + "lat":43.25043, + "lon":46.58509 + }, + { + "name":"г. Керчь", + "lat":45.35613, + "lon":36.46731 + }, + { + "name":"г. Домодедово", + "lat":55.4364, + "lon":37.7666 + }, + { + "name":"г. Салават", + "lat":53.36282, + "lon":55.91544 + }, + { + "name":"г. Миасс", + "lat":55.05526, + "lon":60.07918 + }, + { + "name":"г. Копейск", + "lat":55.11674, + "lon":61.61793 + }, + { + "name":"г. Пятигорск", + "lat":44.04123, + "lon":43.06605 + }, + { + "name":"г. Электросталь", + "lat":55.78463, + "lon":38.4447 + }, + { + "name":"г. Майкоп", + "lat":44.60979, + "lon":40.10057 + }, + { + "name":"г. Находка", + "lat":42.81115, + "lon":132.88445 + }, + { + "name":"г. Березники", + "lat":59.40791, + "lon":56.80392 + }, + { + "name":"г. Коломна", + "lat":55.10269, + "lon":38.75302 + }, + { + "name":"г. Щёлково", + "lat":55.92334, + "lon":37.97839 + }, + { + "name":"г. Серпухов", + "lat":54.92262, + "lon":37.40336 + }, + { + "name":"г. Ковров", + "lat":56.35542, + "lon":41.31711 + }, + { + "name":"г. Нефтекамск", + "lat":56.08838, + "lon":54.24824 + }, + { + "name":"г. Кисловодск", + "lat":43.90527, + "lon":42.7168 + }, + { + "name":"г. Батайск", + "lat":47.13821, + "lon":39.75066 + }, + { + "name":"г. Рубцовск", + "lat":51.5013, + "lon":81.2078 + }, + { + "name":"г. Обнинск", + "lat":55.09449, + "lon":36.61216 + }, + { + "name":"г. Кызыл", + "lat":51.71906, + "lon":94.4377 + }, + { + "name":"г. Дербент", + "lat":42.05904, + "lon":48.29086 + }, + { + "name":"г. Нефтеюганск", + "lat":61.08817, + "lon":72.61634 + }, + { + "name":"г. Назрань", + "lat":43.22566, + "lon":44.76469 + }, + { + "name":"г. Каспийск", + "lat":42.89163, + "lon":47.63669 + }, + { + "name":"г. Долгопрудный", + "lat":55.9386, + "lon":37.51003 + }, + { + "name":"г. Новочебоксарск", + "lat":56.10955, + "lon":47.47916 + }, + { + "name":"г. Новомосковск", + "lat":54.01096, + "lon":38.2915 + }, + { + "name":"г. Ессентуки", + "lat":44.04447, + "lon":42.85898 + }, + { + "name":"г. Невинномысск", + "lat":44.62267, + "lon":41.94764 + }, + { + "name":"г. Октябрьский", + "lat":54.48146, + "lon":53.46548 + }, + { + "name":"г. Раменское", + "lat":55.54954, + "lon":38.27288 + }, + { + "name":"г. Первоуральск", + "lat":56.90801, + "lon":59.94299 + }, + { + "name":"г. Михайловск", + "lat":45.12975, + "lon":42.02875 + }, + { + "name":"г. Реутов", + "lat":55.75827, + "lon":37.86183 + }, + { + "name":"г. Черкесск", + "lat":44.22835, + "lon":42.04828 + }, + { + "name":"г. Жуковский", + "lat":55.59997, + "lon":38.12241 + }, + { + "name":"г. Димитровград", + "lat":54.21684, + "lon":49.62624 + }, + { + "name":"г. Пушкино", + "lat":56.01048, + "lon":37.84716 + }, + { + "name":"г. Артем", + "lat":43.35019, + "lon":132.15958 + }, + { + "name":"г. Камышин", + "lat":50.0653, + "lon":45.38454 + }, + { + "name":"г. Евпатория", + "lat":45.19063, + "lon":33.36763 + }, + { + "name":"г. Муром", + "lat":55.56315, + "lon":42.02303 + }, + { + "name":"г. Ханты-Мансийск", + "lat":61.00256, + "lon":69.01834 + }, + { + "name":"г. Новый Уренгой", + "lat":66.08399, + "lon":76.68101 + }, + { + "name":"г. Северск", + "lat":56.60323, + "lon":84.88103 + }, + { + "name":"г. Орехово-Зуево", + "lat":55.81648, + "lon":38.93681 + }, + { + "name":"г. Арзамас", + "lat":55.39463, + "lon":43.84081 + }, + { + "name":"г. Ногинск", + "lat":55.87604, + "lon":38.42318 + }, + { + "name":"г. Новошахтинск", + "lat":47.75767, + "lon":39.93645 + }, + { + "name":"г. Бердск", + "lat":54.75822, + "lon":83.10715 + }, + { + "name":"г. Элиста", + "lat":46.30821, + "lon":44.27027 + }, + { + "name":"г. Сергиев Посад", + "lat":56.30639, + "lon":38.1503 + }, + { + "name":"г. Видное", + "lat":55.55179, + "lon":37.70622 + }, + { + "name":"г. Ачинск", + "lat":56.25373, + "lon":90.4794 + }, + { + "name":"г. Тобольск", + "lat":58.20173, + "lon":68.25385 + }, + { + "name":"г. Ноябрьск", + "lat":63.19208, + "lon":75.44549 + }, + { + "name":"г. Елец", + "lat":52.61526, + "lon":38.5289 + }, + { + "name":"г. Зеленодольск", + "lat":55.84659, + "lon":48.50097 + }, + { + "name":"г. Новокуйбышевск", + "lat":53.09947, + "lon":49.94773 + }, + { + "name":"г. Воткинск", + "lat":57.05188, + "lon":53.98749 + }, + { + "name":"г. Железногорск", + "lat":52.33792, + "lon":35.35177 + }, + { + "name":"г. Междуреченск", + "lat":53.68659, + "lon":88.07028 + }, + { + "name":"г. Воскресенск", + "lat":55.30702, + "lon":38.70284 + }, + { + "name":"г. Гатчина", + "lat":59.56514, + "lon":30.12812 + }, + { + "name":"г. Серов", + "lat":59.60475, + "lon":60.57524 + }, + { + "name":"г. Саров", + "lat":54.92281, + "lon":43.3448 + }, + { + "name":"г. Ленинск-Кузнецкий", + "lat":54.66748, + "lon":86.17967 + }, + { + "name":"г. Сарапул", + "lat":56.46166, + "lon":53.80368 + }, + { + "name":"г. Магадан", + "lat":59.56819, + "lon":150.80869 + }, + { + "name":"г. Мичуринск", + "lat":52.89134, + "lon":40.51037 + }, + { + "name":"г. Соликамск", + "lat":59.64833, + "lon":56.77102 + }, + { + "name":"г. Мурино", + "lat":60.0449, + "lon":30.4573 + }, + { + "name":"г. Чехов", + "lat":55.15063, + "lon":37.45329 + }, + { + "name":"г. Клин", + "lat":56.34243, + "lon":36.72404 + }, + { + "name":"г. Бузулук", + "lat":52.78817, + "lon":52.2624 + }, + { + "name":"г. Глазов", + "lat":58.1359, + "lon":52.66349 + }, + { + "name":"г. Канск", + "lat":56.2051, + "lon":95.7052 + }, + { + "name":"г. Великие Луки", + "lat":56.3437, + "lon":30.51567 + }, + { + "name":"г. Каменск-Шахтинский", + "lat":48.32047, + "lon":40.26896 + }, + { + "name":"г. Губкин", + "lat":51.28362, + "lon":37.5348 + }, + { + "name":"г. Киселевск", + "lat":54.03833, + "lon":86.66054 + }, + { + "name":"г. Ейск", + "lat":46.71147, + "lon":38.27648 + }, + { + "name":"г. Ивантеевка", + "lat":55.97418, + "lon":37.92087 + }, + { + "name":"г. Лобня", + "lat":56.0329, + "lon":37.46148 + }, + { + "name":"г. Железногорск", + "lat":56.25288, + "lon":93.53223 + }, + { + "name":"г. Азов", + "lat":47.11221, + "lon":39.42336 + }, + { + "name":"г. Анапа", + "lat":44.8949, + "lon":37.31629 + }, + { + "name":"г. Бугульма", + "lat":54.53645, + "lon":52.78941 + }, + { + "name":"г. Московский", + "lat":55.59726, + "lon":37.35945 + }, + { + "name":"г. Геленджик", + "lat":44.56312, + "lon":38.0791 + }, + { + "name":"г. Ухта", + "lat":63.55638, + "lon":53.70138 + }, + { + "name":"г. Юрга", + "lat":55.72024, + "lon":84.88859 + }, + { + "name":"г. Усть-Илимск", + "lat":58.01891, + "lon":102.68553 + }, + { + "name":"г. Всеволожск", + "lat":60.01903, + "lon":30.64567 + }, + { + "name":"г. Новоуральск", + "lat":57.24722, + "lon":60.09554 + }, + { + "name":"г. Кузнецк", + "lat":53.11306, + "lon":46.60526 + }, + { + "name":"г. Бор", + "lat":56.35659, + "lon":44.06455 + }, + { + "name":"г. Кинешма", + "lat":57.44254, + "lon":42.16893 + }, + { + "name":"г. Озерск", + "lat":55.76321, + "lon":60.70765 + }, + { + "name":"г. Новотроицк", + "lat":51.19634, + "lon":58.30171 + }, + { + "name":"г. Кропоткин", + "lat":45.43328, + "lon":40.57289 + }, + { + "name":"г. Чайковский", + "lat":56.77807, + "lon":54.14778 + }, + { + "name":"г. Черногорск", + "lat":53.82584, + "lon":91.32595 + }, + { + "name":"г. Усолье-Сибирское", + "lat":52.75668, + "lon":103.63874 + }, + { + "name":"г. Ялта", + "lat":44.4953, + "lon":34.16635 + }, + { + "name":"г. Дубна", + "lat":56.74162, + "lon":37.17565 + }, + { + "name":"г. Балашов", + "lat":51.53883, + "lon":43.18397 + }, + { + "name":"посёлок Коммунарка", + "lat":55.57039, + "lon":37.47547 + }, + { + "name":"г. Елабуга", + "lat":55.75668, + "lon":52.0545 + }, + { + "name":"г. Новоалтайск", + "lat":53.412, + "lon":83.93098 + }, + { + "name":"г. Выборг", + "lat":60.71296, + "lon":28.73288 + }, + { + "name":"г. Егорьевск", + "lat":55.38312, + "lon":39.03589 + }, + { + "name":"г. Верхняя Пышма", + "lat":56.97589, + "lon":60.56497 + }, + { + "name":"г. Наро-Фоминск", + "lat":55.38618, + "lon":36.73448 + }, + { + "name":"г. Минеральные Воды", + "lat":44.20873, + "lon":43.13834 + }, + { + "name":"г. Троицк", + "lat":54.08433, + "lon":61.55871 + }, + { + "name":"г. Чапаевск", + "lat":52.92902, + "lon":49.86732 + }, + { + "name":"г. Минусинск", + "lat":53.71046, + "lon":91.68717 + }, + { + "name":"г. Биробиджан", + "lat":48.79462, + "lon":132.92172 + }, + { + "name":"г. Шадринск", + "lat":56.0871, + "lon":63.62972 + }, + { + "name":"г. Белово", + "lat":54.42216, + "lon":86.30374 + }, + { + "name":"г. Туймазы", + "lat":54.59994, + "lon":53.69502 + }, + { + "name":"г. Сертолово", + "lat":60.14467, + "lon":30.20957 + }, + { + "name":"г. Буйнакск", + "lat":42.82135, + "lon":47.11641 + }, + { + "name":"г. Ишим", + "lat":56.11047, + "lon":69.47972 + }, + { + "name":"г. Кирово-Чепецк", + "lat":58.556, + "lon":50.03173 + }, + { + "name":"г. Анжеро-Судженск", + "lat":56.07875, + "lon":86.02004 + }, + { + "name":"г. Феодосия", + "lat":45.03202, + "lon":35.38238 + }, + { + "name":"г. Дмитров", + "lat":56.34767, + "lon":37.52662 + }, + { + "name":"г. Сосновый Бор", + "lat":59.90422, + "lon":29.09221 + }, + { + "name":"г. Горно-Алтайск", + "lat":51.95819, + "lon":85.96035 + }, + { + "name":"г. Лыткарино", + "lat":55.57783, + "lon":37.90348 + }, + { + "name":"г. Павловский Посад", + "lat":55.78072, + "lon":38.65964 + }, + { + "name":"г. Троицк", + "lat":55.4845, + "lon":37.30675 + }, + { + "name":"г. Белорецк", + "lat":53.96763, + "lon":58.41004 + }, + { + "name":"г. Ступино", + "lat":54.88627, + "lon":38.07823 + }, + { + "name":"г. Гудермес", + "lat":43.35183, + "lon":46.10348 + }, + { + "name":"г. Ишимбай", + "lat":53.45457, + "lon":56.04401 + }, + { + "name":"г. Донской", + "lat":53.96786, + "lon":38.33723 + }, + { + "name":"г. Котельники", + "lat":55.65994, + "lon":37.86316 + }, + { + "name":"г. Кстово", + "lat":56.14321, + "lon":44.1664 + }, + { + "name":"г. Урус-Мартан", + "lat":43.12018, + "lon":45.53928 + }, + { + "name":"г. Георгиевск", + "lat":44.14794, + "lon":43.47425 + }, + { + "name":"г. Клинцы", + "lat":52.75288, + "lon":32.23378 + }, + { + "name":"г. Нягань", + "lat":62.14549, + "lon":65.39459 + }, + { + "name":"г. Славянск-на-Кубани", + "lat":45.26047, + "lon":38.12597 + }, + { + "name":"г. Кунгур", + "lat":57.42841, + "lon":56.94384 + }, + { + "name":"город Сунжа", + "lat":43.32036, + "lon":45.04778 + }, + { + "name":"г. Туапсе", + "lat":44.1104, + "lon":39.08254 + }, + { + "name":"г. Когалым", + "lat":62.26398, + "lon":74.48295 + }, + { + "name":"г. Белогорск", + "lat":50.92122, + "lon":128.47379 + }, + { + "name":"г. Лениногорск", + "lat":54.59661, + "lon":52.44333 + }, + { + "name":"город Россошь", + "lat":50.1702, + "lon":39.62265 + }, + { + "name":"г. Алексин", + "lat":54.5085, + "lon":37.04784 + }, + { + "name":"г. Кудрово", + "lat":59.90767, + "lon":30.51196 + }, + { + "name":"г. Борисоглебск", + "lat":51.36542, + "lon":42.10095 + }, + { + "name":"г. Фрязино", + "lat":55.95893, + "lon":38.04098 + }, + { + "name":"г. Гуково", + "lat":48.04503, + "lon":39.94856 + }, + { + "name":"г. Ревда", + "lat":56.79876, + "lon":59.90716 + }, + { + "name":"г. Прохладный", + "lat":43.75901, + "lon":44.01005 + }, + { + "name":"г. Березовский", + "lat":56.91365, + "lon":60.78524 + }, + { + "name":"г. Белебей", + "lat":54.10345, + "lon":54.11122 + }, + { + "name":"г. Чистополь", + "lat":55.36993, + "lon":50.62858 + }, + { + "name":"г. Заречный", + "lat":53.19619, + "lon":45.16911 + }, + { + "name":"г. Будённовск", + "lat":44.78147, + "lon":44.16495 + }, + { + "name":"г. Кумертау", + "lat":52.75647, + "lon":55.79705 + }, + { + "name":"г. Сальск", + "lat":46.47523, + "lon":41.54104 + }, + { + "name":"г. Дзержинский", + "lat":55.62411, + "lon":37.84416 + }, + { + "name":"г. Лабинск", + "lat":44.63541, + "lon":40.72442 + }, + { + "name":"г. Асбест", + "lat":57.00525, + "lon":61.45818 + }, + { + "name":"г. Искитим", + "lat":54.6267, + "lon":83.295 + }, + { + "name":"г. Павлово", + "lat":55.9651, + "lon":43.06485 + }, + { + "name":"г. Александров", + "lat":56.39188, + "lon":38.71106 + }, + { + "name":"г. Воркута", + "lat":67.49743, + "lon":64.06118 + }, + { + "name":"г. Щербинка", + "lat":55.50868, + "lon":37.56333 + }, + { + "name":"г. Сибай", + "lat":52.72046, + "lon":58.66639 + }, + { + "name":"г. Мелеуз", + "lat":52.95899, + "lon":55.92825 + }, + { + "name":"г. Котлас", + "lat":61.2529, + "lon":46.63322 + }, + { + "name":"г. Михайловка", + "lat":50.07087, + "lon":43.24011 + }, + { + "name":"г. Избербаш", + "lat":42.56521, + "lon":47.87107 + }, + { + "name":"г. Краснотурьинск", + "lat":59.76383, + "lon":60.19358 + }, + { + "name":"г. Белореченск", + "lat":44.76527, + "lon":39.87812 + }, + { + "name":"г. Ржев", + "lat":56.26292, + "lon":34.32909 + }, + { + "name":"г. Лесосибирск", + "lat":58.2217, + "lon":92.50369 + }, + { + "name":"г. Тихорецк", + "lat":45.85469, + "lon":40.12588 + }, + { + "name":"г. Тихвин", + "lat":59.64462, + "lon":33.54193 + }, + { + "name":"г. Шуя", + "lat":56.85075, + "lon":41.35162 + }, + { + "name":"г. Полевской", + "lat":56.49586, + "lon":60.23663 + }, + { + "name":"г. Щекино", + "lat":54.00217, + "lon":37.51772 + }, + { + "name":"г. Шали", + "lat":43.14874, + "lon":45.90105 + }, + { + "name":"г. Вольск", + "lat":52.04596, + "lon":47.3873 + }, + { + "name":"г. Крымск", + "lat":44.93437, + "lon":37.98549 + }, + { + "name":"пгт Яблоновский", + "lat":44.98127, + "lon":38.93636 + }, + { + "name":"г. Зеленогорск", + "lat":56.11335, + "lon":94.58894 + }, + { + "name":"г. Лиски", + "lat":50.99454, + "lon":39.51835 + }, + { + "name":"г. Черемхово", + "lat":53.12334, + "lon":103.15741 + }, + { + "name":"г. Лысьва", + "lat":58.09967, + "lon":57.80874 + }, + { + "name":"г. Нерюнгри", + "lat":56.65995, + "lon":124.72019 + }, + { + "name":"г. Волжск", + "lat":55.86232, + "lon":48.37158 + }, + { + "name":"г. Мегион", + "lat":61.03189, + "lon":76.1025 + }, + { + "name":"г. Вязьма", + "lat":55.21166, + "lon":34.29521 + }, + { + "name":"г. Тимашевск", + "lat":45.61589, + "lon":38.93515 + }, + { + "name":"г. Гусь-Хрустальный", + "lat":55.6199, + "lon":40.65782 + }, + { + "name":"г. Краснокаменск", + "lat":50.09868, + "lon":118.03412 + }, + { + "name":"г. Кириши", + "lat":59.4497, + "lon":32.0087 + }, + { + "name":"пгт Нахабино рп", + "lat":55.84038, + "lon":37.1759 + }, + { + "name":"г. Снежинск", + "lat":56.08529, + "lon":60.73251 + }, + { + "name":"г. Жигулевск", + "lat":53.40127, + "lon":49.49449 + }, + { + "name":"г. Кизляр", + "lat":43.84841, + "lon":46.72325 + }, + { + "name":"г. Кингисепп", + "lat":59.37413, + "lon":28.61122 + }, + { + "name":"г. Апатиты", + "lat":67.56773, + "lon":33.40678 + }, + { + "name":"г. Узловая", + "lat":53.9732, + "lon":38.17643 + }, + { + "name":"г. Краснокамск", + "lat":58.08207, + "lon":55.74789 + }, + { + "name":"г. Балахна", + "lat":56.49504, + "lon":43.57585 + }, + { + "name":"г. Свободный", + "lat":51.36125, + "lon":128.12203 + }, + { + "name":"г. Солнечногорск", + "lat":56.1851, + "lon":36.97763 + }, + { + "name":"г. Аксай", + "lat":47.26759, + "lon":39.87558 + }, + { + "name":"г. Лесной", + "lat":58.63492, + "lon":59.79801 + }, + { + "name":"г. Арсеньев", + "lat":44.16216, + "lon":133.26967 + }, + { + "name":"г. Салехард", + "lat":66.54937, + "lon":66.60842 + }, + { + "name":"г. Боровичи", + "lat":58.38401, + "lon":33.91767 + }, + { + "name":"г. Рассказово", + "lat":52.65381, + "lon":41.87438 + }, + { + "name":"г. Курганинск", + "lat":44.88771, + "lon":40.59146 + }, + { + "name":"г. Отрадный", + "lat":53.38013, + "lon":51.34404 + }, + { + "name":"г. Донецк", + "lat":48.33509, + "lon":39.94596 + }, + { + "name":"г. Надым", + "lat":65.52815, + "lon":72.51442 + }, + { + "name":"г. Кашира", + "lat":54.85328, + "lon":38.19042 + }, + { + "name":"г. Вышний Волочек", + "lat":57.56845, + "lon":34.54044 + }, + { + "name":"г. Чусовой", + "lat":58.29753, + "lon":57.81936 + }, + { + "name":"г. Рославль", + "lat":53.94492, + "lon":32.84794 + }, + { + "name":"г. Назарово", + "lat":56.0115, + "lon":90.41694 + }, + { + "name":"г. Выкса", + "lat":55.32063, + "lon":42.168 + }, + { + "name":"г. Саяногорск", + "lat":53.10071, + "lon":91.41228 + }, + { + "name":"г. Чебаркуль", + "lat":54.98186, + "lon":60.37743 + }, + { + "name":"г. Канаш", + "lat":55.50688, + "lon":47.49179 + }, + { + "name":"г. Можга", + "lat":56.44275, + "lon":52.21376 + }, + { + "name":"г. Бирск", + "lat":55.41564, + "lon":55.55831 + }, + { + "name":"г. Березовский", + "lat":55.66939, + "lon":86.27451 + }, + { + "name":"г. Грязи", + "lat":52.48729, + "lon":39.93312 + }, + { + "name":"г. Краснознаменск", + "lat":55.59783, + "lon":37.03953 + }, + { + "name":"г. Бугуруслан", + "lat":53.65228, + "lon":52.43261 + }, + { + "name":"г. Радужный", + "lat":62.13422, + "lon":77.45848 + }, + { + "name":"г. Ливны", + "lat":52.42864, + "lon":37.60402 + }, + { + "name":"г. Североморск", + "lat":69.07651, + "lon":33.41783 + }, + { + "name":"г. Карабулак", + "lat":43.30558, + "lon":44.90951 + }, + { + "name":"г. Рузаевка", + "lat":54.05822, + "lon":44.94908 + }, + { + "name":"г. Лангепас", + "lat":61.25371, + "lon":75.1807 + }, + { + "name":"г. Сатка", + "lat":55.0404, + "lon":59.02882 + }, + { + "name":"г. Шелехов", + "lat":52.21014, + "lon":104.09733 + }, + { + "name":"г. Куйбышев", + "lat":55.44595, + "lon":78.31111 + }, + { + "name":"г. Малоярославец", + "lat":55.01777, + "lon":36.46337 + }, + { + "name":"г. Кореновск", + "lat":45.46421, + "lon":39.45898 + }, + { + "name":"г. Большой Камень", + "lat":43.11115, + "lon":132.34795 + }, + { + "name":"станица Каневская", + "lat":46.08475, + "lon":38.97193 + }, + { + "name":"г. Аргун", + "lat":43.29179, + "lon":45.87229 + }, + { + "name":"г. Темрюк", + "lat":45.26102, + "lon":37.44555 + }, + { + "name":"г. Ярцево", + "lat":55.05655, + "lon":32.69027 + }, + { + "name":"г. Урай", + "lat":60.12972, + "lon":64.80389 + }, + { + "name":"г. Заринск", + "lat":53.70642, + "lon":84.93148 + }, + { + "name":"г. Торжок", + "lat":57.04135, + "lon":34.96021 + }, + { + "name":"г. Верхняя Салда", + "lat":58.04663, + "lon":60.55601 + }, + { + "name":"г. Лянтор", + "lat":61.63929, + "lon":72.1794 + }, + { + "name":"г. Горячий Ключ", + "lat":44.63444, + "lon":39.13553 + }, + { + "name":"г. Кимры", + "lat":56.87326, + "lon":37.3557 + }, + { + "name":"г. Мариинск", + "lat":56.21282, + "lon":87.74543 + }, + { + "name":"г. Белая Калитва", + "lat":48.17688, + "lon":40.80329 + }, + { + "name":"г. Сосновоборск", + "lat":56.12008, + "lon":93.33545 + }, + { + "name":"г. Осинники", + "lat":53.59868, + "lon":87.33713 + }, + { + "name":"г. Курчатов", + "lat":51.66054, + "lon":35.6571 + }, + { + "name":"г. Апшеронск", + "lat":44.45838, + "lon":39.73014 + }, + { + "name":"г. Пыть-Ях", + "lat":60.75865, + "lon":72.83669 + }, + { + "name":"г. Усть-Лабинск", + "lat":45.22266, + "lon":39.69293 + }, + { + "name":"г. Пугачев", + "lat":52.01595, + "lon":48.79718 + }, + { + "name":"г. Мыски", + "lat":53.71261, + "lon":87.80568 + }, + { + "name":"г. Мончегорск", + "lat":67.93865, + "lon":32.9359 + }, + { + "name":"г. Заинск", + "lat":55.2989, + "lon":52.00632 + }, + { + "name":"г. Шебекино", + "lat":50.40044, + "lon":36.88789 + }, + { + "name":"г. Тутаев", + "lat":57.86744, + "lon":39.53687 + }, + { + "name":"г. Баксан", + "lat":43.68193, + "lon":43.53449 + }, + { + "name":"г. Абинск", + "lat":44.86791, + "lon":38.1618 + }, + { + "name":"г. Кольчугино", + "lat":56.3328, + "lon":39.39127 + }, + { + "name":"г. Стрежевой", + "lat":60.73275, + "lon":77.60398 + }, + { + "name":"г. Моршанск", + "lat":53.44364, + "lon":41.81152 + }, + { + "name":"г. Советск", + "lat":55.08111, + "lon":21.88871 + }, + { + "name":"г. Ялуторовск", + "lat":56.65466, + "lon":66.31219 + }, + { + "name":"г. Новозыбков", + "lat":52.53714, + "lon":31.93574 + }, + { + "name":"г. Изобильный", + "lat":45.36844, + "lon":41.70859 + }, + { + "name":"г. Амурск", + "lat":50.23457, + "lon":136.87915 + }, + { + "name":"г. Волхов", + "lat":59.90046, + "lon":32.35207 + }, + { + "name":"г. Тулун", + "lat":54.55702, + "lon":100.57799 + }, + { + "name":"г. Луга", + "lat":58.73521, + "lon":29.84794 + }, + { + "name":"г. Сафоново", + "lat":55.12001, + "lon":33.23366 + }, + { + "name":"г. Кизилюрт", + "lat":43.20383, + "lon":46.87286 + }, + { + "name":"г. Югорск", + "lat":61.31241, + "lon":63.33649 + }, + { + "name":"г. Шатура", + "lat":55.57783, + "lon":39.54454 + }, + { + "name":"г. Ртищево", + "lat":52.26169, + "lon":43.78427 + }, + { + "name":"г. Переславль-Залесский", + "lat":56.736, + "lon":38.85437 + }, + { + "name":"г. Протвино", + "lat":54.87058, + "lon":37.21829 + }, + { + "name":"г. Южноуральск", + "lat":54.44904, + "lon":61.25817 + }, + { + "name":"г. Истра", + "lat":55.90619, + "lon":36.86006 + }, + { + "name":"г. Качканар", + "lat":58.7051, + "lon":59.48396 + }, + { + "name":"г. Красноуфимск", + "lat":56.61243, + "lon":57.76355 + }, + { + "name":"г. Коркино", + "lat":54.89039, + "lon":61.40329 + }, + { + "name":"г. Джанкой", + "lat":45.70929, + "lon":34.38837 + }, + { + "name":"г. Ирбит", + "lat":57.68381, + "lon":63.05769 + }, + { + "name":"пгт Маркова рп", + "lat":52.21111, + "lon":104.20791 + }, + { + "name":"г. Мценск", + "lat":53.27898, + "lon":36.575 + }, + { + "name":"г. Усть-Кут", + "lat":56.78088, + "lon":105.74537 + }, + { + "name":"г. Моздок", + "lat":43.74726, + "lon":44.65707 + }, + { + "name":"г. Заволжье", + "lat":56.64049, + "lon":43.38709 + }, + { + "name":"г. Кинель", + "lat":53.22093, + "lon":50.63436 + }, + { + "name":"г. Урюпинск", + "lat":50.79049, + "lon":42.0289 + }, + { + "name":"г. Реж", + "lat":57.37168, + "lon":61.38338 + }, + { + "name":"г. Алексеевка", + "lat":50.63, + "lon":38.68811 + }, + { + "name":"станица Динская", + "lat":45.23628, + "lon":39.24054 + }, + { + "name":"г. Ефремов", + "lat":53.1376, + "lon":38.11767 + }, + { + "name":"г. Малгобек", + "lat":43.5097, + "lon":44.59011 + }, + { + "name":"г. Елизово", + "lat":53.18294, + "lon":158.38843 + }, + { + "name":"г. Вязники", + "lat":56.29776, + "lon":42.26868 + }, + { + "name":"г. Алапаевск", + "lat":57.84769, + "lon":61.66958 + }, + { + "name":"г. Учалы", + "lat":54.3067, + "lon":59.41273 + }, + { + "name":"г. Черняховск", + "lat":54.6245, + "lon":21.79692 + }, + { + "name":"г. Кыштым", + "lat":55.70616, + "lon":60.55625 + }, + { + "name":"пгт Горячеводский рп", + "lat":44.02362, + "lon":43.09738 + }, + { + "name":"г. Беслан", + "lat":43.19366, + "lon":44.53379 + }, + { + "name":"Балаклава", + "lat":44.50141, + "lon":33.60004 + }, + { + "name":"г. Людиново", + "lat":53.87013, + "lon":34.43858 + }, + { + "name":"г. Звенигород", + "lat":55.72959, + "lon":36.85536 + }, + { + "name":"г. Спасск-Дальний", + "lat":44.59009, + "lon":132.81583 + }, + { + "name":"г. Светлоград", + "lat":45.32866, + "lon":42.85659 + }, + { + "name":"г. Красный Сулин", + "lat":47.8832, + "lon":40.07819 + }, + { + "name":"г. Фролово", + "lat":49.76482, + "lon":43.66494 + }, + { + "name":"г. Ахтубинск", + "lat":48.27537, + "lon":46.19053 + }, + { + "name":"г. Саянск", + "lat":54.11082, + "lon":102.18023 + }, + { + "name":"станица Ленинградская", + "lat":46.34496, + "lon":39.39078 + }, + { + "name":"г. Апрелевка", + "lat":55.52762, + "lon":37.06508 + }, + { + "name":"г. Благовещенск", + "lat":55.0498, + "lon":55.95531 + }, + { + "name":"г. Лесозаводск", + "lat":45.47801, + "lon":133.41853 + }, + { + "name":"г. Печора", + "lat":65.14869, + "lon":57.22396 + }, + { + "name":"г. Богородск", + "lat":56.102, + "lon":43.51359 + }, + { + "name":"г. Миллерово", + "lat":48.926, + "lon":40.39827 + }, + { + "name":"г. Азнакаево", + "lat":54.85975, + "lon":53.07449 + }, + { + "name":"г. Сокол", + "lat":59.47579, + "lon":40.11148 + }, + { + "name":"деревня Ватутинки", + "lat":55.49424, + "lon":37.32887 + }, + { + "name":"г. Сланцы", + "lat":59.11771, + "lon":28.08823 + }, + { + "name":"г. Коряжма", + "lat":61.28862, + "lon":47.10024 + }, + { + "name":"г. Тайшет", + "lat":55.94055, + "lon":98.00304 + }, + { + "name":"г. Ликино-Дулёво", + "lat":55.70773, + "lon":38.9578 + }, + { + "name":"г. Тосно", + "lat":59.54069, + "lon":30.87776 + }, + { + "name":"г. Мирный", + "lat":62.53626, + "lon":113.96676 + }, + { + "name":"г. Новокубанск", + "lat":45.1037, + "lon":41.04754 + }, + { + "name":"г. Нурлат", + "lat":54.4281, + "lon":50.80494 + }, + { + "name":"г. Шарыпово", + "lat":55.53913, + "lon":89.1801 + }, + { + "name":"г. Корсаков", + "lat":46.63243, + "lon":142.7995 + }, + { + "name":"г. Можайск", + "lat":55.50694, + "lon":36.02398 + }, + { + "name":"г. Партизанск", + "lat":43.15043, + "lon":133.16661 + }, + { + "name":"г. Дальнегорск", + "lat":44.55412, + "lon":135.56616 + }, + { + "name":"г. Конаково", + "lat":56.72754, + "lon":36.80135 + }, + { + "name":"г. Каменка", + "lat":53.18555, + "lon":44.04681 + }, + { + "name":"г. Гулькевичи", + "lat":45.36053, + "lon":40.69184 + }, + { + "name":"г. Новодвинск", + "lat":64.41365, + "lon":40.82068 + }, + { + "name":"г. Гай", + "lat":51.46508, + "lon":58.44364 + }, + { + "name":"г. Губкинский", + "lat":64.44564, + "lon":76.47138 + }, + { + "name":"деревня Рассказовка", + "lat":55.63179, + "lon":37.31323 + }, + { + "name":"г. Нарткала", + "lat":43.55781, + "lon":43.85761 + }, + { + "name":"г. Зеленокумск", + "lat":44.40324, + "lon":43.88412 + }, + { + "name":"пгт Приволжский рп", + "lat":51.41095, + "lon":46.04811 + }, + { + "name":"г. Валуйки", + "lat":50.21117, + "lon":38.09994 + }, + { + "name":"г. Чернушка", + "lat":56.51593, + "lon":56.07645 + }, + { + "name":"г. Тавда", + "lat":58.0435, + "lon":65.27437 + }, + { + "name":"г. Сухой Лог", + "lat":56.9075, + "lon":62.0358 + }, + { + "name":"г. Углич", + "lat":57.52246, + "lon":38.30188 + }, + { + "name":"г. Трехгорный", + "lat":54.81779, + "lon":58.44637 + }, + { + "name":"г. Камень-на-Оби", + "lat":53.79147, + "lon":81.3546 + }, + { + "name":"г. Алатырь", + "lat":54.83727, + "lon":46.53399 + }, + { + "name":"г. Кулебаки", + "lat":55.42967, + "lon":42.51246 + }, + { + "name":"г. Усинск", + "lat":65.99406, + "lon":57.55693 + }, + { + "name":"г. Острогожск", + "lat":50.86794, + "lon":39.04062 + }, + { + "name":"станица Новотитаровская", + "lat":45.23763, + "lon":38.97652 + }, + { + "name":"г. Дагестанские Огни", + "lat":42.11529, + "lon":48.19398 + }, + { + "name":"г. Алушта", + "lat":44.6764, + "lon":34.41004 + }, + { + "name":"г. Тейково", + "lat":56.85428, + "lon":40.53538 + }, + { + "name":"г. Дюртюли", + "lat":55.48481, + "lon":54.85249 + }, + { + "name":"село Иглино", + "lat":54.83447, + "lon":56.41616 + }, + { + "name":"г. Советский", + "lat":61.3707, + "lon":63.56672 + }, + { + "name":"г. Усть-Джегута", + "lat":44.08386, + "lon":41.97104 + }, + { + "name":"г. Приморско-Ахтарск", + "lat":46.05159, + "lon":38.17044 + }, + { + "name":"Фактория", + "lat":64.53939, + "lon":40.517 + }, + { + "name":"г. Кохма", + "lat":56.93251, + "lon":41.09313 + }, + { + "name":"г. Благодарный", + "lat":45.09894, + "lon":43.43062 + }, + { + "name":"село Ачхой-Мартан", + "lat":43.1872, + "lon":45.28635 + }, + { + "name":"г. Дедовск", + "lat":55.87046, + "lon":37.12445 + }, + { + "name":"г. Вичуга", + "lat":57.20449, + "lon":41.91314 + }, + { + "name":"город Нововоронеж", + "lat":51.30919, + "lon":39.21629 + }, + { + "name":"г. Зима", + "lat":53.93365, + "lon":102.0499 + }, + { + "name":"станица Кущевская", + "lat":46.56989, + "lon":39.61984 + }, + { + "name":"г. Обь", + "lat":54.99454, + "lon":82.69377 + }, + { + "name":"станица Староминская", + "lat":46.53311, + "lon":39.05357 + }, + { + "name":"пгт Томилино рп", + "lat":55.66311, + "lon":37.94992 + }, + { + "name":"г. Сердобск", + "lat":52.46978, + "lon":44.2123 + }, + { + "name":"г. Богданович", + "lat":56.77642, + "lon":62.04629 + }, + { + "name":"г. Нижнеудинск", + "lat":54.89694, + "lon":99.03141 + }, + { + "name":"г. Электрогорск", + "lat":55.87784, + "lon":38.78059 + }, + { + "name":"г. Луховицы", + "lat":54.76596, + "lon":39.27064 + }, + { + "name":"г. Вятские Поляны", + "lat":56.22852, + "lon":51.06161 + }, + { + "name":"г. Фурманов", + "lat":57.25375, + "lon":41.10547 + }, + { + "name":"г. Борзя", + "lat":50.38771, + "lon":116.52351 + }, + { + "name":"г. Богородицк", + "lat":53.77006, + "lon":38.12251 + }, + { + "name":"станица Павловская", + "lat":46.12202, + "lon":39.78142 + }, + { + "name":"г. Гусев", + "lat":54.59152, + "lon":22.19429 + }, + { + "name":"г. Муравленко", + "lat":63.79544, + "lon":74.49483 + }, + { + "name":"г. Слободской", + "lat":58.73121, + "lon":50.16698 + }, + { + "name":"г. Кандалакша", + "lat":67.15666, + "lon":32.4143 + }, + { + "name":"пгт Краснообск рп", + "lat":54.92124, + "lon":82.9912 + }, + { + "name":"пгт Дрожжино рп", + "lat":55.52773, + "lon":37.59377 + }, + { + "name":"г. Балабаново", + "lat":55.17741, + "lon":36.65684 + }, + { + "name":"г. Лосино-Петровский", + "lat":55.86957, + "lon":38.20285 + }, + { + "name":"г. Артемовский", + "lat":57.33846, + "lon":61.89459 + }, + { + "name":"г. Добрянка", + "lat":58.54259, + "lon":56.29396 + }, + { + "name":"г. Маркс", + "lat":51.71332, + "lon":46.74009 + }, + { + "name":"г. Великий Устюг", + "lat":60.76028, + "lon":46.30539 + }, + { + "name":"г. Городец", + "lat":56.64486, + "lon":43.47227 + }, + { + "name":"г. Тында", + "lat":55.15466, + "lon":124.7468 + }, + { + "name":"г. Бахчисарай", + "lat":44.7513, + "lon":33.87507 + }, + { + "name":"г. Сорочинск", + "lat":52.42665, + "lon":53.15418 + }, + { + "name":"г. Касимов", + "lat":54.93731, + "lon":41.39133 + }, + { + "name":"г. Кудымкар", + "lat":59.01684, + "lon":54.65736 + }, + { + "name":"пгт Власиха", + "lat":55.68082, + "lon":37.19024 + }, + { + "name":"пгт Разумное", + "lat":50.53361, + "lon":36.68956 + }, + { + "name":"г. Ростов", + "lat":57.20504, + "lon":39.43785 + }, + { + "name":"г. Заречный", + "lat":56.81033, + "lon":61.33803 + }, + { + "name":"г. Киров", + "lat":54.07898, + "lon":34.30763 + }, + { + "name":"город Семилуки", + "lat":51.69519, + "lon":39.0189 + }, + { + "name":"г. Славгород", + "lat":52.99941, + "lon":78.64585 + }, + { + "name":"г. Аша", + "lat":54.99058, + "lon":57.27844 + }, + { + "name":"пгт Энем", + "lat":44.9264, + "lon":38.91077 + }, + { + "name":"г. Барабинск", + "lat":55.35152, + "lon":78.34646 + }, + { + "name":"г. Еманжелинск", + "lat":54.75545, + "lon":61.32436 + }, + { + "name":"посёлок Придорожный", + "lat":53.086, + "lon":50.15872 + }, + { + "name":"пгт Иноземцево кп", + "lat":44.09709, + "lon":43.08942 + }, + { + "name":"г. Старая Русса", + "lat":57.99075, + "lon":31.35545 + }, + { + "name":"г. Дивногорск", + "lat":55.95774, + "lon":92.38013 + }, + { + "name":"г. Похвистнево", + "lat":53.64977, + "lon":52.12345 + }, + { + "name":"г. Киржач", + "lat":56.14865, + "lon":38.8636 + }, + { + "name":"г. Кушва", + "lat":58.28251, + "lon":59.76476 + }, + { + "name":"пгт Красково дп", + "lat":55.65879, + "lon":37.98855 + }, + { + "name":"г. Мирный", + "lat":62.76455, + "lon":40.33609 + }, + { + "name":"г. Кировск", + "lat":59.87523, + "lon":30.98152 + }, + { + "name":"село Экажево", + "lat":43.20829, + "lon":44.81901 + }, + { + "name":"г. Топки", + "lat":55.27652, + "lon":85.61521 + }, + { + "name":"г. Камышлов", + "lat":56.84649, + "lon":62.71203 + }, + { + "name":"г. Карталы", + "lat":53.05374, + "lon":60.64773 + }, + { + "name":"г. Заводоуковск", + "lat":56.50284, + "lon":66.55136 + }, + { + "name":"деревня Мисайлово", + "lat":55.564, + "lon":37.82558 + }, + { + "name":"деревня Путилково", + "lat":55.86525, + "lon":37.39253 + }, + { + "name":"станица Северская", + "lat":44.85624, + "lon":38.69593 + }, + { + "name":"г. Тара", + "lat":56.91593, + "lon":74.36488 + }, + { + "name":"село Засечное", + "lat":53.1059, + "lon":45.0717 + }, + { + "name":"г. Шумерля", + "lat":55.52293, + "lon":46.37529 + }, + { + "name":"г. Балтийск", + "lat":54.65139, + "lon":19.91406 + }, + { + "name":"г. Новоалександровск", + "lat":45.4933, + "lon":41.21536 + }, + { + "name":"г. Гурьевск", + "lat":54.77055, + "lon":20.60399 + }, + { + "name":"г. Котовск", + "lat":52.59234, + "lon":41.51022 + }, + { + "name":"село Кочубеевское", + "lat":44.69075, + "lon":41.82429 + }, + { + "name":"г. Майский", + "lat":43.62833, + "lon":44.05184 + }, + { + "name":"г. Кувандык", + "lat":51.47858, + "lon":57.3611 + }, + { + "name":"г. Гагарин", + "lat":55.55267, + "lon":34.99503 + }, + { + "name":"г. Красноармейск", + "lat":56.10543, + "lon":38.14084 + }, + { + "name":"г. Кимовск", + "lat":53.9698, + "lon":38.53813 + }, + { + "name":"г. Волоколамск", + "lat":56.03565, + "lon":35.95848 + }, + { + "name":"г. Петровск", + "lat":52.30947, + "lon":45.38519 + }, + { + "name":"г. Соль-Илецк", + "lat":51.16348, + "lon":54.98954 + }, + { + "name":"г. Ипатово", + "lat":45.71812, + "lon":42.89708 + }, + { + "name":"г. Костомукша", + "lat":64.58909, + "lon":30.60154 + }, + { + "name":"пгт Малаховка рп", + "lat":55.64526, + "lon":38.00424 + }, + { + "name":"г. Удомля", + "lat":57.87876, + "lon":35.01662 + }, + { + "name":"г. Янаул", + "lat":56.26491, + "lon":54.92978 + }, + { + "name":"г. Карпинск", + "lat":59.76656, + "lon":60.00121 + }, + { + "name":"г. Кондопога", + "lat":62.20599, + "lon":34.26818 + }, + { + "name":"г. Коммунар", + "lat":59.62157, + "lon":30.39355 + }, + { + "name":"г. Отрадное", + "lat":59.77265, + "lon":30.79884 + }, + { + "name":"г. Холмск", + "lat":47.04087, + "lon":142.04161 + }, + { + "name":"станица Тбилисская", + "lat":45.36445, + "lon":40.20169 + }, + { + "name":"г. Полысаево", + "lat":54.60549, + "lon":86.281 + }, + { + "name":"г. Красноперекопск", + "lat":45.95366, + "lon":33.79207 + }, + { + "name":"г. Киреевск", + "lat":53.93204, + "lon":37.92199 + }, + { + "name":"пгт Мостовской", + "lat":44.41444, + "lon":40.79029 + }, + { + "name":"г. Лабытнанги", + "lat":66.65936, + "lon":66.38818 + }, + { + "name":"село Александровское", + "lat":44.71057, + "lon":43.00495 + }, + { + "name":"город Десногорск", + "lat":54.14636, + "lon":33.28341 + }, + { + "name":"г. Алейск", + "lat":52.49225, + "lon":82.77952 + }, + { + "name":"г. Десногорск", + "lat":54.14636, + "lon":33.28341 + }, + { + "name":"г. Дятьково", + "lat":53.59581, + "lon":34.35511 + }, + { + "name":"г. Скопин", + "lat":53.82353, + "lon":39.54934 + }, + { + "name":"пгт Калининец рп", + "lat":55.55974, + "lon":36.98191 + }, + { + "name":"г. Семенов", + "lat":56.78907, + "lon":44.49029 + }, + { + "name":"пгт Ильский", + "lat":44.80455, + "lon":38.54609 + }, + { + "name":"г. Асино", + "lat":56.99081, + "lon":86.1765 + }, + { + "name":"г. Карасук", + "lat":53.73436, + "lon":78.04229 + }, + { + "name":"г. Кировск", + "lat":67.61516, + "lon":33.66366 + }, + { + "name":"станица Ессентукская", + "lat":44.02673, + "lon":42.87644 + }, + { + "name":"пгт Октябрьский рп", + "lat":55.61107, + "lon":37.97374 + }, + { + "name":"г. Знаменск", + "lat":48.58665, + "lon":45.7369 + }, + { + "name":"г. Гусиноозерск", + "lat":51.2866, + "lon":106.52298 + }, + { + "name":"пгт Пойковский", + "lat":60.99655, + "lon":71.90243 + }, + { + "name":"г. Североуральск", + "lat":60.15334, + "lon":59.95255 + }, + { + "name":"г. Бутурлиновка", + "lat":50.83128, + "lon":40.59774 + }, + { + "name":"г. Озёры", + "lat":54.85402, + "lon":38.55987 + }, + { + "name":"г. Саки", + "lat":45.13433, + "lon":33.60323 + }, + { + "name":"г. Калач-на-Дону", + "lat":48.68891, + "lon":43.53076 + }, + { + "name":"г. Унеча", + "lat":52.8462, + "lon":32.67574 + }, + { + "name":"г. Морозовск", + "lat":48.35113, + "lon":41.83078 + }, + { + "name":"г. Северобайкальск", + "lat":55.63556, + "lon":109.33616 + }, + { + "name":"г. Советская Гавань", + "lat":48.96637, + "lon":140.28521 + }, + { + "name":"станица Полтавская", + "lat":45.36544, + "lon":38.21091 + }, + { + "name":"г. Родники", + "lat":57.10248, + "lon":41.72982 + }, + { + "name":"г. Зерноград", + "lat":46.84961, + "lon":40.3129 + }, + { + "name":"пгт Северный", + "lat":50.6775, + "lon":36.56077 + }, + { + "name":"деревня Новое Девяткино", + "lat":60.0573, + "lon":30.47627 + }, + { + "name":"посёлок Тельмана", + "lat":59.72544, + "lon":30.61211 + }, + { + "name":"г. Карачаевск", + "lat":43.77318, + "lon":41.91441 + }, + { + "name":"станица Елизаветинская", + "lat":45.04843, + "lon":38.79993 + }, + { + "name":"г. Строитель", + "lat":50.78517, + "lon":36.487 + }, + { + "name":"г. Татарск", + "lat":55.21447, + "lon":75.97408 + }, + { + "name":"г. Медногорск", + "lat":51.40387, + "lon":57.58316 + }, + { + "name":"пгт Федоровский", + "lat":61.64842, + "lon":73.48865 + }, + { + "name":"г. Дальнереченск", + "lat":45.93088, + "lon":133.73168 + }, + { + "name":"пгт Афипский", + "lat":44.9034, + "lon":38.84115 + }, + { + "name":"г. Уварово", + "lat":51.98308, + "lon":42.261 + }, + { + "name":"г. Сегежа", + "lat":63.74377, + "lon":34.31267 + }, + { + "name":"г Курчалой", + "lat":43.20454, + "lon":46.08893 + }, + { + "name":"г. Нарьян-Мар", + "lat":67.63797, + "lon":53.00695 + }, + { + "name":"г. Губаха", + "lat":58.83703, + "lon":57.55448 + }, + { + "name":"г. Среднеуральск", + "lat":56.99191, + "lon":60.47712 + }, + { + "name":"г. Кубинка", + "lat":55.67903, + "lon":37.26352 + }, + { + "name":"г. Нефтекумск", + "lat":44.75453, + "lon":44.9866 + }, + { + "name":"станица Троицкая", + "lat":43.30602, + "lon":44.98939 + }, + { + "name":"пгт Свердловский рп", + "lat":55.90321, + "lon":38.13611 + }, + { + "name":"станица Отрадная", + "lat":44.39317, + "lon":41.51567 + }, + { + "name":"г. Верхний Уфалей", + "lat":56.04874, + "lon":60.23201 + }, + { + "name":"пгт Городище рп", + "lat":48.80963, + "lon":44.47617 + }, + { + "name":"г. Старая Купавна", + "lat":55.81065, + "lon":38.17562 + }, + { + "name":"г. Менделеевск", + "lat":55.89519, + "lon":52.31436 + }, + { + "name":"г. Железноводск", + "lat":44.13205, + "lon":43.03047 + }, + { + "name":"г. Голицыно", + "lat":55.61899, + "lon":36.98565 + }, + { + "name":"г. Аткарск", + "lat":51.87372, + "lon":45.00032 + }, + { + "name":"пгт Тучково рп", + "lat":55.60078, + "lon":36.47188 + }, + { + "name":"рп Чишмы", + "lat":54.58926, + "lon":55.38035 + }, + { + "name":"г. Лермонтов", + "lat":44.10533, + "lon":42.97315 + }, + { + "name":"посёлок Бугры", + "lat":60.07002, + "lon":30.39978 + }, + { + "name":"город Павловск", + "lat":50.45335, + "lon":40.13694 + }, + { + "name":"г. Тайга", + "lat":56.17239, + "lon":85.4269 + }, + { + "name":"г. Никольское", + "lat":59.70421, + "lon":30.78741 + }, + { + "name":"г. Верещагино", + "lat":58.07985, + "lon":54.65799 + }, + { + "name":"г. Сосногорск", + "lat":63.59912, + "lon":53.87624 + }, + { + "name":"г. Гурьевск", + "lat":54.28592, + "lon":85.94771 + }, + { + "name":"г. Хадыженск", + "lat":44.41225, + "lon":39.53203 + }, + { + "name":"г. Невьянск", + "lat":57.49121, + "lon":60.21832 + }, + { + "name":"г. Тырныауз", + "lat":43.3982, + "lon":42.92141 + }, + { + "name":"г. Котельниково", + "lat":47.63103, + "lon":43.13304 + }, + { + "name":"г. Таштагол", + "lat":52.75941, + "lon":87.84766 + }, + { + "name":"г. Давлеканово", + "lat":54.22269, + "lon":55.03119 + }, + { + "name":"г. Бронницы", + "lat":55.42545, + "lon":38.26416 + }, + { + "name":"г. Вилючинск", + "lat":52.93026, + "lon":158.40574 + }, + { + "name":"пгт Медведево", + "lat":56.63326, + "lon":47.80324 + }, + { + "name":"г. Калтан", + "lat":53.52108, + "lon":87.27719 + }, + { + "name":"г. Семикаракорск", + "lat":47.51779, + "lon":40.81148 + }, + { + "name":"г. Вихоревка", + "lat":56.12081, + "lon":101.17042 + }, + { + "name":"г. Лысково", + "lat":56.02626, + "lon":45.0358 + }, + { + "name":"г. Сасово", + "lat":54.3508, + "lon":41.91175 + }, + { + "name":"г. Бавлы", + "lat":54.40635, + "lon":53.24581 + }, + { + "name":"г. Железногорск-Илимский", + "lat":56.58476, + "lon":104.11424 + }, + { + "name":"г. Вельск", + "lat":61.06583, + "lon":42.10325 + }, + { + "name":"г. Алдан", + "lat":58.60954, + "lon":125.38177 + }, + { + "name":"пгт Стройкерамика", + "lat":53.27665, + "lon":50.38704 + }, + { + "name":"г. Алагир", + "lat":43.04166, + "lon":44.21978 + }, + { + "name":"пгт Ахтырский", + "lat":44.85031, + "lon":38.29983 + }, + { + "name":"г. Красноуральск", + "lat":58.34868, + "lon":60.04089 + }, + { + "name":"г. Бежецк", + "lat":57.78595, + "lon":36.69052 + }, + { + "name":"г. Усть-Катав", + "lat":54.92602, + "lon":58.15289 + }, + { + "name":"г. Оленегорск", + "lat":68.1421, + "lon":33.26693 + }, + { + "name":"г. Рошаль", + "lat":55.66321, + "lon":39.86563 + }, + { + "name":"г. Ленск", + "lat":60.72762, + "lon":114.95485 + }, + { + "name":"пгт Излучинск", + "lat":60.95307, + "lon":76.8912 + }, + { + "name":"г. Калачинск", + "lat":55.05971, + "lon":74.5655 + }, + { + "name":"г. Красноармейск", + "lat":51.02355, + "lon":45.69514 + }, + { + "name":"г. Светлый", + "lat":54.67735, + "lon":20.13567 + }, + { + "name":"г. Рыбное", + "lat":54.72563, + "lon":39.51359 + }, + { + "name":"г. Котово", + "lat":50.32058, + "lon":44.80306 + }, + { + "name":"г. Остров", + "lat":57.34521, + "lon":28.3438 + }, + { + "name":"г. Бобров", + "lat":51.09022, + "lon":40.03185 + }, + { + "name":"пгт Кольцово рп", + "lat":54.93975, + "lon":83.18923 + }, + { + "name":"село Дыгулыбгей", + "lat":43.66052, + "lon":43.53998 + }, + { + "name":"г. Колпашево", + "lat":58.31142, + "lon":82.90277 + }, + { + "name":"г. Новопавловск", + "lat":43.95737, + "lon":43.63191 + }, + { + "name":"г. Тогучин", + "lat":55.22512, + "lon":84.41036 + }, + { + "name":"г. Зарайск", + "lat":54.76247, + "lon":38.88514 + }, + { + "name":"г. Чегем", + "lat":43.56712, + "lon":43.58662 + }, + { + "name":"село Карабудахкент", + "lat":42.71017, + "lon":47.5652 + }, + { + "name":"г. Октябрьск", + "lat":53.16413, + "lon":48.6707 + }, + { + "name":"г. Армянск", + "lat":46.10589, + "lon":33.69119 + }, + { + "name":"г. Ряжск", + "lat":53.70685, + "lon":40.05214 + }, + { + "name":"г. Сысерть", + "lat":56.50053, + "lon":60.81904 + }, + { + "name":"г. Буй", + "lat":58.47339, + "lon":41.53062 + }, + { + "name":"пгт Безенчук", + "lat":52.9844, + "lon":49.43326 + }, + { + "name":"г. Исилькуль", + "lat":54.90952, + "lon":71.28152 + }, + { + "name":"г. Хотьково", + "lat":56.2516, + "lon":37.93946 + }, + { + "name":"г. Шарья", + "lat":58.376, + "lon":45.40609 + }, + { + "name":"г. Нижний Ломов", + "lat":53.53011, + "lon":43.67308 + }, + { + "name":"г. Арск", + "lat":56.09136, + "lon":49.87695 + }, + { + "name":"г. Пикалево", + "lat":59.51315, + "lon":34.1773 + }, + { + "name":"г. Оха", + "lat":53.58682, + "lon":142.94127 + }, + { + "name":"пгт Монино рп", + "lat":55.83938, + "lon":38.19539 + }, + { + "name":"г. Инта", + "lat":66.03672, + "lon":60.11536 + }, + { + "name":"г. Сергач", + "lat":55.52008, + "lon":45.48138 + }, + { + "name":"г. Бологое", + "lat":57.88555, + "lon":34.05371 + }, + { + "name":"г. Котельнич", + "lat":58.30345, + "lon":48.34759 + }, + { + "name":"г. Лебедянь", + "lat":53.01554, + "lon":39.14354 + }, + { + "name":"станица Зеленчукская", + "lat":43.86084, + "lon":41.58274 + }, + { + "name":"г. Белоярский", + "lat":63.71205, + "lon":66.67732 + }, + { + "name":"г. Агрыз", + "lat":56.52343, + "lon":52.99431 + }, + { + "name":"г. Нерехта", + "lat":57.45436, + "lon":40.5725 + }, + { + "name":"пгт Боровский рп", + "lat":57.04373, + "lon":65.722 + }, + { + "name":"г. Буинск", + "lat":54.96407, + "lon":48.29017 + }, + { + "name":"станица Выселки", + "lat":45.58011, + "lon":39.65539 + }, + { + "name":"г. Терек", + "lat":43.48379, + "lon":44.14033 + }, + { + "name":"село Новая Усмань (часть 2)", + "lat":51.64406, + "lon":39.41292 + }, + { + "name":"г. Черепаново", + "lat":54.22066, + "lon":83.37247 + }, + { + "name":"г. Тарко-Сале", + "lat":64.91174, + "lon":77.76102 + }, + { + "name":"г. Никольск", + "lat":53.71382, + "lon":46.07997 + }, + { + "name":"г. Куровское", + "lat":55.57905, + "lon":38.92084 + }, + { + "name":"г. Ковылкино", + "lat":54.03912, + "lon":43.91914 + }, + { + "name":"г. Козьмодемьянск", + "lat":56.33337, + "lon":46.54659 + }, + { + "name":"г. Данков", + "lat":53.25769, + "lon":39.14564 + }, + { + "name":"г. Фокино", + "lat":42.97076, + "lon":132.41101 + }, + { + "name":"пгт Каа-Хем", + "lat":51.69745, + "lon":94.55947 + }, + { + "name":"г. Усмань", + "lat":52.04441, + "lon":39.72638 + }, + { + "name":"посёлок Строитель", + "lat":52.6512, + "lon":41.43107 + }, + { + "name":"г. Омутнинск", + "lat":58.66989, + "lon":52.18938 + }, + { + "name":"рп Приютово", + "lat":53.89516, + "lon":53.93698 + }, + { + "name":"село Чалтырь", + "lat":47.28267, + "lon":39.49924 + }, + { + "name":"г. Пущино", + "lat":54.83518, + "lon":37.6265 + }, + { + "name":"г. Дудинка", + "lat":69.40321, + "lon":86.19091 + }, + { + "name":"поселок Трудовое", + "lat":43.30029, + "lon":132.06325 + }, + { + "name":"г. Черноголовка", + "lat":56.00999, + "lon":38.3793 + }, + { + "name":"г. Оса", + "lat":57.28897, + "lon":55.46887 + }, + { + "name":"пгт Кокошкино дп", + "lat":55.59847, + "lon":37.16763 + }, + { + "name":"пгт Промышленная", + "lat":54.91657, + "lon":85.63762 + }, + { + "name":"пгт Ленинкент", + "lat":42.97034, + "lon":47.35352 + }, + { + "name":"поселок Ойсхара", + "lat":43.26279, + "lon":46.24986 + }, + { + "name":"г. Зея", + "lat":53.73403, + "lon":127.26571 + }, + { + "name":"станица Суворовская", + "lat":44.19751, + "lon":42.64995 + }, + { + "name":"г. Зверево", + "lat":48.04342, + "lon":40.12653 + }, + { + "name":"поселок Игра", + "lat":57.54014, + "lon":53.08619 + }, + { + "name":"село Гойты", + "lat":43.16097, + "lon":45.62126 + }, + { + "name":"станица Брюховецкая", + "lat":45.80209, + "lon":38.99719 + }, + { + "name":"станица Незлобная", + "lat":44.1169, + "lon":43.40856 + }, + { + "name":"пгт Березовка", + "lat":56.03711, + "lon":93.1266 + }, + { + "name":"поселок Ува", + "lat":56.98205, + "lon":52.1873 + }, + { + "name":"г. Арамиль", + "lat":56.69155, + "lon":60.84411 + }, + { + "name":"г. Пролетарск", + "lat":46.70381, + "lon":41.7276 + }, + { + "name":"г. Ардон", + "lat":43.17559, + "lon":44.29568 + }, + { + "name":"г. Лодейное Поле", + "lat":60.73208, + "lon":33.55222 + }, + { + "name":"посёлок Саракташ", + "lat":51.7831, + "lon":56.36526 + }, + { + "name":"г. Приозерск", + "lat":61.03598, + "lon":30.11559 + }, + { + "name":"станица Холмская", + "lat":44.84813, + "lon":38.38925 + }, + { + "name":"г. Кировград", + "lat":57.42989, + "lon":60.0624 + }, + { + "name":"село Раевский", + "lat":54.06504, + "lon":54.93284 + }, + { + "name":"г. Николаевск-на-Амуре", + "lat":53.14619, + "lon":140.71106 + }, + { + "name":"г. Нелидово", + "lat":56.22339, + "lon":32.77662 + }, + { + "name":"пгт Свободы рп", + "lat":44.02483, + "lon":43.05145 + }, + { + "name":"станица Новопокровская", + "lat":45.95385, + "lon":40.70701 + }, + { + "name":"село Чигири", + "lat":50.33915, + "lon":127.50769 + }, + { + "name":"г. Харабали", + "lat":47.40892, + "lon":47.25253 + }, + { + "name":"г. Няндома", + "lat":61.66541, + "lon":40.20631 + }, + { + "name":"село Автуры", + "lat":43.16327, + "lon":46.00319 + }, + { + "name":"г. Нижняя Тура", + "lat":58.63104, + "lon":59.85202 + }, + { + "name":"г. Пласт", + "lat":54.36917, + "lon":60.81525 + }, + { + "name":"г. Новый Оскол", + "lat":50.76444, + "lon":37.86306 + }, + { + "name":"пгт Тарки", + "lat":42.9445, + "lon":47.49579 + }, + { + "name":"г. Суровикино", + "lat":48.61891, + "lon":42.85421 + }, + { + "name":"г. Боготол", + "lat":56.20987, + "lon":89.53009 + }, + { + "name":"рп Южный", + "lat":53.25133, + "lon":83.69473 + }, + { + "name":"г. Ершов", + "lat":51.35079, + "lon":48.27632 + }, + { + "name":"г. Нефтегорск", + "lat":52.79725, + "lon":51.16382 + }, + { + "name":"пгт Тальменка рп", + "lat":53.81727, + "lon":83.56917 + }, + { + "name":"г. Слюдянка", + "lat":51.6563, + "lon":103.71865 + }, + { + "name":"село Бабаюрт", + "lat":43.60112, + "lon":46.7793 + }, + { + "name":"станица Нестеровская", + "lat":43.23817, + "lon":45.04917 + }, + { + "name":"г. Электроугли", + "lat":55.71708, + "lon":38.21937 + }, + { + "name":"г. Кукмор", + "lat":56.18609, + "lon":50.89716 + }, + { + "name":"г. Кяхта", + "lat":50.34661, + "lon":106.45336 + }, + { + "name":"пгт Удельная дп", + "lat":55.63491, + "lon":38.04935 + }, + { + "name":"г. Судак", + "lat":44.85051, + "lon":34.97615 + }, + { + "name":"г. Баймак", + "lat":52.59135, + "lon":58.31118 + }, + { + "name":"пгт Линево рп", + "lat":54.45703, + "lon":83.38157 + }, + { + "name":"посёлок завода Мосрентген", + "lat":55.62095, + "lon":37.47382 + }, + { + "name":"г. Покров", + "lat":55.91672, + "lon":39.17336 + }, + { + "name":"село Высокая Гора", + "lat":55.91213, + "lon":49.31277 + }, + { + "name":"г. Стародуб", + "lat":52.58531, + "lon":32.76034 + }, + { + "name":"г. Жуковка", + "lat":53.53409, + "lon":33.73023 + }, + { + "name":"г. Шахунья", + "lat":57.67631, + "lon":46.61285 + }, + { + "name":"г. Калач", + "lat":50.42402, + "lon":41.01625 + }, + { + "name":"г. Суворов", + "lat":54.12209, + "lon":36.49035 + }, + { + "name":"посёлок ВНИИССОК", + "lat":55.65694, + "lon":37.21177 + }, + { + "name":"г. Радужный", + "lat":55.99608, + "lon":40.33222 + }, + { + "name":"г. Льгов", + "lat":51.65971, + "lon":35.26114 + }, + { + "name":"г. Енисейск", + "lat":58.44857, + "lon":92.16507 + }, + { + "name":"село Белая Глина", + "lat":46.07367, + "lon":40.87131 + }, + { + "name":"г. Карачев", + "lat":53.12969, + "lon":34.98874 + }, + { + "name":"г. Белогорск", + "lat":45.05708, + "lon":34.59994 + }, + { + "name":"г. Собинка", + "lat":55.99382, + "lon":40.01789 + }, + { + "name":"пгт Лучегорск", + "lat":46.43844, + "lon":134.28936 + }, + { + "name":"станица Медведовская", + "lat":45.44914, + "lon":39.01016 + }, + { + "name":"пгт Ванино", + "lat":49.09097, + "lon":140.25639 + }, + { + "name":"г. Талдом", + "lat":56.73086, + "lon":37.5276 + }, + { + "name":"пгт Васильево", + "lat":55.83693, + "lon":48.70403 + }, + { + "name":"г. Юрьев-Польский", + "lat":56.49369, + "lon":39.66805 + }, + { + "name":"г. Абдулино", + "lat":53.67781, + "lon":53.64734 + }, + { + "name":"станица Старощербиновская", + "lat":46.62976, + "lon":38.6674 + }, + { + "name":"г. Константиновск", + "lat":47.57734, + "lon":41.09674 + }, + { + "name":"село Бачи-Юрт", + "lat":43.22099, + "lon":46.19499 + }, + { + "name":"г. Куса", + "lat":55.33866, + "lon":59.43861 + }, + { + "name":"пгт Коченево рп", + "lat":55.01901, + "lon":82.20606 + }, + { + "name":"село Осиново", + "lat":55.8775, + "lon":48.8898 + }, + { + "name":"село Нижнее Казанище", + "lat":42.76098, + "lon":47.16163 + }, + { + "name":"г. Онега", + "lat":63.91628, + "lon":38.08052 + }, + { + "name":"г. Новомичуринск", + "lat":54.03765, + "lon":39.74668 + }, + { + "name":"г. Плавск", + "lat":53.70953, + "lon":37.28621 + }, + { + "name":"село Майма", + "lat":52.00377, + "lon":85.89626 + }, + { + "name":"село Цоци-Юрт", + "lat":43.24262, + "lon":46.00182 + }, + { + "name":"пгт Янино-1", + "lat":59.94539, + "lon":30.5612 + }, + { + "name":"деревня Сапроново", + "lat":55.52932, + "lon":37.71232 + }, + { + "name":"деревня Пыхтино", + "lat":55.62094, + "lon":37.30027 + }, + { + "name":"село Кантышево", + "lat":43.22811, + "lon":44.64842 + }, + { + "name":"г. Козельск", + "lat":54.0348, + "lon":35.78068 + }, + { + "name":"село Краснокумское", + "lat":44.17481, + "lon":43.49671 + }, + { + "name":"г. Нытва", + "lat":57.93366, + "lon":55.33559 + }, + { + "name":"г. Осташков", + "lat":57.14578, + "lon":33.11164 + }, + { + "name":"село Кинель-Черкассы", + "lat":53.46408, + "lon":51.51938 + }, + { + "name":"г. Зеленоградск", + "lat":54.95993, + "lon":20.47527 + }, + { + "name":"село Новая Усмань (часть 1)", + "lat":51.64406, + "lon":39.41292 + }, + { + "name":"пгт Шушенское", + "lat":53.33375, + "lon":91.93562 + }, + { + "name":"г. Туринск", + "lat":58.03949, + "lon":63.69818 + }, + { + "name":"г. Краснослободск", + "lat":48.70685, + "lon":44.56318 + }, + { + "name":"пгт Агинское", + "lat":51.10361, + "lon":114.53785 + }, + { + "name":"г. Нижняя Салда", + "lat":58.07491, + "lon":60.70252 + }, + { + "name":"г. Шимановск", + "lat":52.00518, + "lon":127.70059 + }, + { + "name":"село Плиево", + "lat":43.28547, + "lon":44.83594 + }, + { + "name":"станица Гостагаевская", + "lat":44.8949, + "lon":37.31629 + }, + { + "name":"г. Яровое", + "lat":52.92527, + "lon":78.57292 + }, + { + "name":"город Поворино", + "lat":51.19529, + "lon":42.24736 + }, + { + "name":"г. Бакал", + "lat":54.94067, + "lon":58.80511 + }, + { + "name":"г. Инза", + "lat":53.85493, + "lon":46.35336 + }, + { + "name":"г. Шумиха", + "lat":55.22813, + "lon":63.29018 + }, + { + "name":"пгт Шексна", + "lat":59.23611, + "lon":38.51127 + }, + { + "name":"г. Бикин", + "lat":46.81857, + "lon":134.25506 + }, + { + "name":"г. Жуков", + "lat":55.03023, + "lon":36.73934 + }, + { + "name":"г. Светлогорск", + "lat":54.94391, + "lon":20.15146 + }, + { + "name":"г. Бокситогорск", + "lat":59.47358, + "lon":33.84575 + }, + { + "name":"г. Кирсанов", + "lat":52.65066, + "lon":42.72848 + }, + { + "name":"пгт Рощино", + "lat":60.24081, + "lon":29.6288 + }, + { + "name":"г. Камызяк", + "lat":46.11065, + "lon":48.07325 + }, + { + "name":"пгт Белый Яр", + "lat":61.26056, + "lon":73.25247 + }, + { + "name":"пгт им. Воровского рп", + "lat":55.72195, + "lon":38.32769 + }, + { + "name":"г. Подпорожье", + "lat":60.91278, + "lon":34.15672 + }, + { + "name":"посёлок Дубовое", + "lat":50.53032, + "lon":36.56829 + }, + { + "name":"г. Гаврилов-Ям", + "lat":57.30915, + "lon":39.85449 + }, + { + "name":"село Нартан", + "lat":43.50542, + "lon":43.70167 + }, + { + "name":"г. Покачи", + "lat":61.74228, + "lon":75.59409 + }, + { + "name":"г. Поронайск", + "lat":49.23875, + "lon":143.10088 + }, + { + "name":"г. Руза", + "lat":55.70154, + "lon":36.19598 + }, + { + "name":"г. Мензелинск", + "lat":55.72701, + "lon":53.10052 + }, + { + "name":"деревня Куюки", + "lat":55.71284, + "lon":49.35653 + }, + { + "name":"г. Иланский", + "lat":56.23753, + "lon":96.06738 + }, + { + "name":"посёлок Орловский", + "lat":46.87445, + "lon":42.05931 + }, + { + "name":"село Каякент", + "lat":42.3863, + "lon":47.9055 + }, + { + "name":"г. Сельцо", + "lat":53.37391, + "lon":34.10601 + }, + { + "name":"станица Раевская", + "lat":44.8363, + "lon":37.54964 + }, + { + "name":"село Учкекен", + "lat":43.93904, + "lon":42.51559 + }, + { + "name":"г. Райчихинск", + "lat":49.79413, + "lon":129.41121 + }, + { + "name":"г. Ковдор", + "lat":67.56627, + "lon":30.47418 + }, + { + "name":"деревня Островцы", + "lat":55.59127, + "lon":37.99262 + }, + { + "name":"село Супсех", + "lat":44.8949, + "lon":37.31629 + }, + { + "name":"г. Кондрово", + "lat":54.79598, + "lon":35.92758 + }, + { + "name":"г. Мамадыш", + "lat":55.71509, + "lon":51.41281 + }, + { + "name":"г. Межгорье", + "lat":54.23968, + "lon":57.96127 + }, + { + "name":"посёлок Зимовники", + "lat":47.14537, + "lon":42.46766 + }, + { + "name":"пгт Емельяново", + "lat":56.16864, + "lon":92.6867 + }, + { + "name":"г. Болотное", + "lat":55.66928, + "lon":84.39066 + }, + { + "name":"г. Кизел", + "lat":59.05124, + "lon":57.64711 + }, + { + "name":"пгт Товарково", + "lat":54.67724, + "lon":35.94274 + }, + { + "name":"село Поселье", + "lat":51.80574, + "lon":107.53763 + }, + { + "name":"станица Анапская", + "lat":44.8949, + "lon":37.31629 + }, + { + "name":"пгт Семендер", + "lat":42.99118, + "lon":47.40212 + }, + { + "name":"пгт Кратово дп", + "lat":55.59739, + "lon":38.16352 + }, + { + "name":"г. Жирновск", + "lat":50.97692, + "lon":44.78579 + }, + { + "name":"посёлок Навля", + "lat":52.83011, + "lon":34.50663 + }, + { + "name":"пгт Заводской", + "lat":43.10779, + "lon":44.64537 + }, + { + "name":"г. Дегтярск", + "lat":56.7048, + "lon":60.07908 + }, + { + "name":"г. Свирск", + "lat":53.08389, + "lon":103.34137 + }, + { + "name":"пгт Сузун рп", + "lat":53.7892, + "lon":82.3161 + }, + { + "name":"г. Ясный", + "lat":51.03689, + "lon":59.87427 + }, + { + "name":"село Подстепки", + "lat":53.51793, + "lon":49.1534 + }, + { + "name":"посёлок Зональная Станция", + "lat":56.42688, + "lon":85.02278 + }, + { + "name":"станица Варениковская", + "lat":45.11985, + "lon":37.63851 + }, + { + "name":"г. Касли", + "lat":55.88698, + "lon":60.74226 + }, + { + "name":"посёлок Усть-Ордынский", + "lat":52.80522, + "lon":104.75367 + }, + { + "name":"село Гехи", + "lat":43.16061, + "lon":45.47428 + }, + { + "name":"г. Новоаннинский", + "lat":50.52957, + "lon":42.66662 + }, + { + "name":"пгт Анна", + "lat":51.48933, + "lon":40.42422 + }, + { + "name":"посёлок подсобного хозяйства \"Воскресенское\"", + "lat":55.52962, + "lon":37.44584 + }, + { + "name":"г. Нерчинск", + "lat":51.95946, + "lon":116.58531 + }, + { + "name":"село Ахты", + "lat":41.4592, + "lon":47.74953 + }, + { + "name":"г. Магас", + "lat":43.16869, + "lon":44.81311 + }, + { + "name":"г. Ясногорск", + "lat":54.47947, + "lon":37.68966 + }, + { + "name":"г. Новоузенск", + "lat":50.45512, + "lon":48.14114 + }, + { + "name":"село Катар-Юрт", + "lat":43.16888, + "lon":45.37039 + }, + { + "name":"посёлок Знамя Октября", + "lat":55.47574, + "lon":37.53836 + }, + { + "name":"пгт Запрудня рп", + "lat":56.56091, + "lon":37.43361 + }, + { + "name":"г. Бородино", + "lat":55.90535, + "lon":94.90223 + }, + { + "name":"пгт Рефтинский", + "lat":57.09065, + "lon":61.65646 + }, + { + "name":"пгт Софрино рп", + "lat":56.13541, + "lon":37.92602 + }, + { + "name":"пгт Вырица", + "lat":59.41729, + "lon":30.34694 + }, + { + "name":"г. Рыльск", + "lat":51.56814, + "lon":34.68022 + }, + { + "name":"г. Купино", + "lat":54.36612, + "lon":77.29734 + }, + { + "name":"село Хомутово", + "lat":52.46525, + "lon":104.36204 + }, + { + "name":"пгт Большие Вязёмы рп", + "lat":55.62914, + "lon":37.00537 + }, + { + "name":"г. Петровск-Забайкальский", + "lat":51.27484, + "lon":108.84681 + }, + { + "name":"г. Почеп", + "lat":52.9154, + "lon":33.47451 + }, + { + "name":"г. Палласовка", + "lat":50.0502, + "lon":46.88041 + }, + { + "name":"г. Калининск", + "lat":51.4993, + "lon":44.47109 + }, + { + "name":"г. Щигры", + "lat":51.87858, + "lon":36.89117 + }, + { + "name":"г. Барыш", + "lat":53.6534, + "lon":47.11805 + }, + { + "name":"пгт Чернянка", + "lat":50.94092, + "lon":37.80413 + }, + { + "name":"г. Сортавала", + "lat":61.70322, + "lon":30.69178 + }, + { + "name":"пгт Грибановский", + "lat":51.45645, + "lon":41.9799 + }, + { + "name":"станица Васюринская", + "lat":45.11815, + "lon":39.42164 + }, + { + "name":"г. Талица", + "lat":57.01232, + "lon":63.73206 + }, + { + "name":"г. Сухиничи", + "lat":54.09731, + "lon":35.34448 + }, + { + "name":"г. Куртамыш", + "lat":54.93695, + "lon":64.42032 + }, + { + "name":"г. Заполярный", + "lat":69.41318, + "lon":30.79856 + }, + { + "name":"посёлок Развилка", + "lat":55.59105, + "lon":37.75295 + }, + { + "name":"г. Дубовка", + "lat":49.05544, + "lon":44.82693 + }, + { + "name":"пгт Лесной Городок дп", + "lat":55.63624, + "lon":37.21261 + }, + { + "name":"г. Белокуриха", + "lat":51.99611, + "lon":84.98394 + }, + { + "name":"г. Цимлянск", + "lat":47.64779, + "lon":42.09298 + }, + { + "name":"село Кулунда", + "lat":52.56613, + "lon":78.93689 + }, + { + "name":"пгт Новый Городок", + "lat":54.30362, + "lon":86.29344 + }, + { + "name":"г. Навашино", + "lat":55.54381, + "lon":42.18877 + }, + { + "name":"г. Катав-Ивановск", + "lat":54.75207, + "lon":58.19849 + }, + { + "name":"пгт Ильинский рп", + "lat":55.62026, + "lon":38.1056 + }, + { + "name":"г. Краснозаводск", + "lat":56.44092, + "lon":38.23202 + }, + { + "name":"деревня Кондратово", + "lat":57.97607, + "lon":56.10908 + }, + { + "name":"г. Советск", + "lat":57.58414, + "lon":48.95895 + }, + { + "name":"станица Егорлыкская", + "lat":46.55325, + "lon":40.68324 + }, + { + "name":"село Кулешовка", + "lat":47.08578, + "lon":39.52707 + }, + { + "name":"пгт Селятино рп", + "lat":55.5141, + "lon":36.97984 + }, + { + "name":"г. Грязовец", + "lat":58.87588, + "lon":40.24859 + }, + { + "name":"г. Красновишерск", + "lat":60.3903, + "lon":57.05359 + }, + { + "name":"поселок Балезино", + "lat":57.98388, + "lon":53.01231 + }, + { + "name":"станица Гиагинская", + "lat":44.8848, + "lon":40.05773 + }, + { + "name":"село Алхан-Кала", + "lat":43.26244, + "lon":45.53482 + }, + { + "name":"г. Очер", + "lat":57.88525, + "lon":54.71615 + }, + { + "name":"город Богучар", + "lat":49.93528, + "lon":40.55915 + }, + { + "name":"г. Волгореченск", + "lat":57.44245, + "lon":41.15925 + }, + { + "name":"село Донское", + "lat":45.46726, + "lon":41.98978 + }, + { + "name":"г. Приволжск", + "lat":57.38072, + "lon":41.28076 + }, + { + "name":"станица Старовеличковская", + "lat":45.43297, + "lon":38.72442 + }, + { + "name":"г. Ивдель", + "lat":60.6946, + "lon":60.42453 + }, + { + "name":"г. Чудово", + "lat":59.12482, + "lon":31.68663 + }, + { + "name":"г. Красный Кут", + "lat":50.9597, + "lon":46.97119 + }, + { + "name":"г. Яранск", + "lat":57.30412, + "lon":47.8479 + }, + { + "name":"село Старые-Атаги", + "lat":43.12296, + "lon":45.74142 + }, + { + "name":"пгт Средняя Ахтуба рп", + "lat":48.71366, + "lon":44.86008 + }, + { + "name":"г. Агидель", + "lat":55.89974, + "lon":53.92214 + }, + { + "name":"посёлок Нижнесортымский", + "lat":62.44281, + "lon":71.76529 + }, + { + "name":"рп Усть-Абакан", + "lat":53.83295, + "lon":91.39434 + }, + { + "name":"село Красногвардейское", + "lat":45.84505, + "lon":41.51446 + }, + { + "name":"село Новый Хушет", + "lat":42.89934, + "lon":47.56134 + }, + { + "name":"г. Полярные Зори", + "lat":67.37382, + "lon":32.48917 + }, + { + "name":"посёлок Майский", + "lat":50.52182, + "lon":36.45444 + }, + { + "name":"г. Ужур", + "lat":55.31422, + "lon":89.83343 + }, + { + "name":"г. Шлиссельбург", + "lat":59.94431, + "lon":31.03328 + }, + { + "name":"г. Гвардейск", + "lat":54.65888, + "lon":21.05007 + }, + { + "name":"станица Калининская", + "lat":45.48558, + "lon":38.66167 + }, + { + "name":"г. Кашин", + "lat":57.36009, + "lon":37.61184 + } +] \ No newline at end of file diff --git a/backend/main.py b/backend/main.py new file mode 100644 index 00000000..00f88ac2 --- /dev/null +++ b/backend/main.py @@ -0,0 +1,27 @@ +from fastapi import FastAPI +from fastapi.middleware.cors import CORSMiddleware +import requests +import json + +app = FastAPI() + +app.add_middleware( + CORSMiddleware, + allow_origins=["*"], + allow_credentials=True, + allow_methods=["*"], + allow_headers=["*"], +) + +with open("cities.json", encoding="utf-8") as f: + cities = json.load(f) + +@app.get("/cities") +def get_cities(): + return cities + +@app.get("/weather") +def get_weather(lat: float, lon: float): + url = f"https://api.open-meteo.com/v1/forecast?latitude={lat}&longitude={lon}&daily=temperature_2m_max,precipitation_sum,wind_speed_10m_max&timezone=auto" + r = requests.get(url) + return r.json() \ No newline at end of file diff --git a/backend/requirements.txt b/backend/requirements.txt new file mode 100644 index 00000000..d25be1eb --- /dev/null +++ b/backend/requirements.txt @@ -0,0 +1,3 @@ +fastapi==0.135.3 +uvicorn==0.44.0 +requests==2.33.1 \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 00000000..6b1c06de --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,16 @@ +version: "3.8" + +services: + backend: + build: ./backend + container_name: weather_backend + ports: + - "8000:8000" + + frontend: + build: ./frontend + container_name: weather_frontend + ports: + - "8080:80" + depends_on: + - backend \ No newline at end of file diff --git a/frontend/Dockerfile b/frontend/Dockerfile new file mode 100644 index 00000000..ba7503d7 --- /dev/null +++ b/frontend/Dockerfile @@ -0,0 +1,4 @@ +FROM nginx:alpine + +COPY . /usr/share/nginx/html +COPY nginx.conf /etc/nginx/conf.d/default.conf \ No newline at end of file diff --git a/frontend/css/styles.css b/frontend/css/styles.css new file mode 100644 index 00000000..bd98af32 --- /dev/null +++ b/frontend/css/styles.css @@ -0,0 +1,61 @@ +html, +body { + margin: 0; + height: 100%; + font-family: Arial, sans-serif; +} + +#container { + display: flex; + height: 100vh; +} + +#map { + width: 100%; + height: 100%; + min-height: 400px; +} + +.item { + padding: 8px; + margin-bottom: 5px; + background: #fff; + border-radius: 5px; + cursor: pointer; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} + +.item:hover { + background: #e0e0ff; +} + +canvas { + width: 100% !important; + margin-bottom: 20px; + background: #fff; + border-radius: 5px; + padding: 10px; + box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); +} + + +#weatherPanel { + position: absolute; + top: 20px; + right: 20px; + width: 350px; + background: #fff; + padding: 10px; + border-radius: 10px; + display: none; + z-index: 1000; +} + +#closeWeather { + position: absolute; + top: 5px; + right: 8px; + cursor: pointer; + border: none; + background: none; +} \ No newline at end of file diff --git a/frontend/index.html b/frontend/index.html new file mode 100644 index 00000000..2c8490b2 --- /dev/null +++ b/frontend/index.html @@ -0,0 +1,44 @@ + + + +
+ +