/GeocodingService

Тестовый проект Web-сервиса геокодирования

Primary LanguageJava

Web-сервис прямого и обратного геокодирования "GeocodingService"

Небходимые ПО

  • Docker
  • Postman
  • IntelliJ IDEA (в случае необходимости)

Используемые технологии

  • Java
  • Spring Boot
  • Maven
  • Redis (для кэширования)

Интеграция внешнего API: электронный справочник карт "2GIS" (Geocoder API): https://docs.2gis.com/ru/api/search/geocoder/overview

Инструкция по запуску приложения

  1. git clone https://github.com/Meggi9/GeocodingService.git

  2. В директории проекта выполнить следующие команды:

    • Сборка проекта maven: ./mvnw package

    • Запуск приложения (в случае необходимости): java -jar target/GeocodingService-0.0.1-SNAPSHOT.jar

  3. Создание образа Docker: docker build -t geocoding-service-docker:0.1.0 .

  4. Запуск контейнера Docker: docker run -p 8080:8080 geocoding-service-docker:0.1.0 .

Инструкция по работе с приложением

  1. Для выполнения прямого геокодирования, следует выполнить следующий GET запрос:

localhost:8080/api/geocoder

При этом в тело запроса передать адрес в формате JSON:

{
  "address": "Адрес"
}
  1. Для выполнения обратного геокодирования, следует выполнить следующий GET запрос:

localhost:8080/api/geocoder

При этом в тело запроса передать координаты в формате JSON:

{
    "lat": Значение широты,
    "lon": Значение долготы
}

Результаты работы приложения

  1. Прямое геокодирование:

image

Полученный ответ (Response):

{
    "result": {
        "items": [
            {
                "building_name": "Воронежский государственный технический университет (ВГТУ)",
                "full_name": "Воронеж, Воронежский государственный технический университет (ВГТУ)",
                "purpose_name": "ВУЗ",
                "name": "Воронежский государственный технический университет (ВГТУ)",
                "address_name": "20-летия Октября, 84",
                "id": "4363497794194056",
                "type": "building",
                "point": {
                    "lat": 51.652127,
                    "lon": 39.192714
                }
            }
        ],
        "total": "1"
    }
}
  1. Обратное геокодирование:

image

Полученный ответ (Response):

{
    "result": {
        "items": [
            {
                "building_name": "Воронежский государственный технический университет (ВГТУ)",
                "full_name": "Воронеж, Воронежский государственный технический университет (ВГТУ)",
                "purpose_name": "ВУЗ",
                "name": "Воронежский государственный технический университет (ВГТУ)",
                "address_name": "20-летия Октября, 84",
                "id": "4363497794194056",
                "type": "building",
                "point": {
                    "lat": 51.652127,
                    "lon": 39.192714
                }
            },
            {
                "full_name": "Воронеж, Ленинский",
                "subtype": "district",
                "name": "Ленинский",
                "id": "4363472024371202",
                "type": "adm_div",
                "point": {
                    "lat": 51.640025,
                    "lon": 39.194786
                }
            },
            {
                "full_name": "Воронеж",
                "subtype": "city",
                "name": "Воронеж",
                "id": "4363484909273106",
                "type": "adm_div",
                "point": {
                    "lat": 51.660548,
                    "lon": 39.199775
                }
            },
            {
                "full_name": "Воронеж городской округ",
                "subtype": "district_area",
                "name": "Воронеж городской округ",
                "id": "70030076118167065",
                "type": "adm_div",
                "point": {
                    "lat": 51.61521,
                    "lon": 39.193904
                }
            },
            {
                "full_name": "Воронежская область",
                "subtype": "region",
                "name": "Воронежская область",
                "id": "1267655302447150",
                "type": "adm_div",
                "point": {
                    "lat": 51.134329,
                    "lon": 40.022274
                }
            }
        ],
        "total": "5"
    }
}
  1. Реализация кэширования (Redis): при повторном выполнении одинакового запроса время ответа значительно сокращается:
  • Первичное выполнение запроса: Снимок экрана 2022-12-15 195352

  • Повторное выполнение запроса: Снимок экрана 2022-12-15 195504