Giter Site home page Giter Site logo

geocoder's Introduction

Geocoder


Описание

Геокодер - утилита, которая позволяет получить координаты здания по введенному адресу.

Работает для крупных городов России.


Установка зависимостей

Для того, чтобы подключить дополнительные библиотеки к проекту, выполните команду в консоли

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

Валидация данных

  • Если пользователь вводит не существующий адрес, программа подскажет, что в введенных данных есть ошибка, и попросит повторить запрос.

  • Если города, в котором нужно выполнить геокодирование, нет в базе данных, то программа укажет на это.

Форматы ввода адреса

Если в названии улицы есть число, записывайте его таким же форматом, как в названии. Если прописью - прописью, если числом - числом.

Примеры:

  1. Название улицы: "8 Марта" запись "8 Марта" - правильная запись "Восьмое Марта" - не правильная
  2. Название улицы: "Площадь 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 - файл с набором библиотек, которые надо подключить к проекту

Реализация

Запуск программы. Взаимодействие с базами данных.

При запуске программа сначала проверяет не существует ли база данных города, для которого нужно сделать геокодирование.

  1. Если существует, то достает нужную информацию из этой базы данных.
  2. Если нет, то находит координаты нужного города в cities.db, затем обращается к серверу OSM, получает ответ в виде .xml файла, парсит его и создает базу данных этого города, откуда потом будет извлекать координаты.

Устройство баз данных

  • cities.db - содержит 1 таблицу cities, в которой есть поля:
    • регион
    • название города
    • координаты south, north, west, east
  • Город.db - база данных какого-то города. Каждая такая DB содержит 1 таблицу ways с полями:
    • id здания
    • долгота
    • широта
    • название улицы
    • номер дома
    • прочая информация, переданная от OSM сервера

Как вычисляются longitude и latitude

Каждое задание на карте представляется в виде прямоугольника, состоящего из точек по периметру. Каждая точка содержит свои долготу и широту. Поэтому общие долгота и широта для здания высчитываются, как среднее арифметическое значений всех точек.

Устройство структуры(из каких точек состоит периметр здания) передается в ответе от OSM сервера.

geocoder's People

Contributors

yanikiss avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.