Геокодер - утилита, которая позволяет получить координаты здания по введенному адресу.
Работает для крупных городов России.
Для того, чтобы подключить дополнительные библиотеки к проекту, выполните команду в консоли
pip install -r requirements.txt
Программа последовательно просит пользователя ввести нужные данные. Примеры работы с программой (строки >>> - ввод пользователя)
Please enter city
>>>Екатеринбург
Enter street name
>>>40-летия Октября
Enter house number
>>>58
Your coordinates:
56.89927776666668, 60.593964488888886
Please enter city
>>>г самара
Enter street name
>>>Волжский проспект
Enter house number
>>>29
Your coordinates:
53.20553851428571, 50.110622299999996
-
Если пользователь вводит не существующий адрес, программа подскажет, что в введенных данных есть ошибка, и попросит повторить запрос.
-
Если города, в котором нужно выполнить геокодирование, нет в базе данных, то программа укажет на это.
Если в названии улицы есть число, записывайте его таким же форматом, как в названии. Если прописью - прописью, если числом - числом.
Примеры:
- Название улицы: "8 Марта" запись "8 Марта" - правильная запись "Восьмое Марта" - не правильная
- Название улицы: "Площадь 1 Пятилетки" запись "Площадь 1 Пятилетки" - правильная запись "Площаль первой Пятилетки" - не правильная
Допускаются:
- Упущения с записью числительных
- Записи "улица 22 Партсъезда", "улица 22го Партсъезда, улица 22 Партсъезда" эквивалентны.
- "40-летия Октября", "40летия Октября" также эквивалентны.
- Регистр слов
- Записи "Олимпийская набережная", "олимпийская набережная" (и другие подобные вариации с заглавными буквами) эквивалентны.
Please enter city >>>Екатеринбург Enter street name >>>ОлиМПИЙСкая НАБЕРЕЖНАя Enter house number >>>9 Your coordinates: 56.84877733999999, 60.59303112
- Записи "Олимпийская набережная", "олимпийская набережная" (и другие подобные вариации с заглавными буквами) эквивалентны.
- Наличие слов "улица", "ул.", "ул" в названии улицы
- Записи "Ирбитская 66" и "улица Ирбисткая 66" эквивалентны
- Наличие слов "гор", "гор.", "г", "Город" в названии города.
Программа постарается подсказать, что, возможно, вы имели в виду, если по запросу вашего адреса не нашлось ответа:
Please enter city
>>>Екатеринбург
Enter street name
>>>23-го Партсъезда
Enter house number
>>>20
This address was not found.
Check if the input data is correct and try again.
Maybe you mean улица 22-го Партсъезда 20?
Еще пример:
Please enter city
>>>Екатеринбург
Enter street name
>>>23 Партсъезда
Enter house number
>>>20
This address was not found.
Check if the input data is correct and try again.
Maybe you mean улица 22-го Партсъезда 20?
- geocoder.py - основной модуль для работы с проектом
- direct_geocoding.py - модуль, выполняющий прямое геокодирование
- parser_xml - модуль для парсинга .xml файла и преобразования его в базу данных Город.db
- cities.db - база данных с информацией о городах
- requirements.txt - файл с набором библиотек, которые надо подключить к проекту
При запуске программа сначала проверяет не существует ли база данных города, для которого нужно сделать геокодирование.
- Если существует, то достает нужную информацию из этой базы данных.
- Если нет, то находит координаты нужного города в cities.db, затем обращается к серверу OSM, получает ответ в виде .xml файла, парсит его и создает базу данных этого города, откуда потом будет извлекать координаты.
- cities.db - содержит 1 таблицу cities, в которой есть поля:
- регион
- название города
- координаты south, north, west, east
- Город.db - база данных какого-то города. Каждая такая DB содержит 1 таблицу ways с полями:
- id здания
- долгота
- широта
- название улицы
- номер дома
- прочая информация, переданная от OSM сервера
Каждое задание на карте представляется в виде прямоугольника, состоящего из точек по периметру. Каждая точка содержит свои долготу и широту. Поэтому общие долгота и широта для здания высчитываются, как среднее арифметическое значений всех точек.
Устройство структуры(из каких точек состоит периметр здания) передается в ответе от OSM сервера.