Простой скрипт для автоматического поиска геокоординат
Скрипт написан на Python. На вход принимает csv файл:
Курская обл.;Ль район;с. Иванчиково
Курская обл.;Суджанский район;с. Плёхово
Курская обл.;Железногорский район;с. Жидеевка
Курская обл.;Железногорский район;Новый Бузец
Курская обл.;Железногорский район;с. Старый Бузец
Владимирская обл.;Судогодский район;Аксеново
Владимирская обл.;Суодский район;Карпово
Владимирская обл.;Судогодский район;Слащево
Архангельская обл.;Котласский район;г. Сольвычегодск
На выходе будет csv файл уже с координатами. Если не удается найти координаты, то будет записано пустое значение.
Курская обл.;Ль район;с. Иванчиково;
Курская обл.;Суджанский район;с. Плёхово;51.1007804,35.3290548
Курская обл.;Железногорский район;с. Жидеевка;52.1923663,35.4500001
Курская обл.;Железногорский район;Новый Бузец;52.164154,35.484161
Курская обл.;Железногорский район;с. Старый Бузец;52.199837,35.5330842
Владимирская обл.;Судогодский район;Аксеново;56.0756071,40.761767
Владимирская обл.;Суодский район;Карпово;
Владимирская обл.;Судогодский район;Слащево;56.0697562,40.8062814
Архангельская обл.;Котласский район;г. Сольвычегодск;61.3315511,46.9311295
Вся эта штука работает с API Nominatim, поэтому конечно же нужен интернет, ну и есть вероятность каких-то лимитов.
Собственно код:
from geopy.geocoders import Nominatim
import csv
with open('test.csv', newline='', encoding='utf-8-sig') as File:
reader = csv.reader(File, delimiter=';')
data = list()
for row in reader:
loc = row
try:
geolocator = Nominatim(user_agent="my_request")
location = geolocator.geocode(loc)
point = str(location.latitude) + ',' + str(location.longitude)
except:
point = ''
row.append(point)
data.append(row)
myFile = open('out.csv', 'w')
with myFile:
writer = csv.writer(myFile, delimiter=';')
writer.writerows(data)
print("Writing complete")