Привет всем, эта короткая статья предназначена для тех, кому нужно выяснить, как сохранить географическую точку (долготу, широту) в Postgre. Я также буду использовать экспресс в качестве http-фреймворка и Sequelize в качестве ORM.

Предварительно требования

  • Javascript
  • Базовые знания SQL
  • Базовые знания простого rest API и Express
  • Базовые знания по использованию Sequelize
  • Редактор кода, Node Js и Postgre установлены в вашей системе

Init Rest API Server + Sequelize init на сервере

Следуйте этой документации Express, чтобы создать сервер, который может обрабатывать HTTP-запросы. После этого установите sequelize-cli на свой компьютер (вы можете сделать это локально, выполнив команду npm i -g sequenceize-cli) и запустите команду sequelize-cli в папке вашего сервера с помощью sequelize init.

Postgis и миграция

Postgis — это расширитель пространственной базы данных для объектно-реляционной базы данных PostgreSQL. Он добавляет поддержку географических объектов, позволяющую выполнять запросы о местоположении в SQL. ссылка: https://postgis.net/. Или вы можете клонировать эту ветку репо для инициализации: https://github.com/dhimashary/express-sequelize-geom/tree/01.init-project

Во-первых, нам нужно добавить миграцию, чтобы добавить расширение с именем postgis.

Затем добавьте таблицу Stores, в которой есть дополнительные 2 поля, местоположение (с данными типа Geometry Point, в основном мы храним здесь широту и долготу) и имя.

Заполнение сохраняет данные

ST_GeomFromText получит текстовый параметр, мы будем использовать тип точки и ввод широты и долготы (разделенные пробелом).

Запустить настройку конфигурации

Запустите эту команду на терминале, чтобы настроить конфигурацию

sequelize db:create
sequelize db:migrate
sequelize db:seed:all

Теперь попробуем запросить данные по радиусу

Теперь мы попытаемся запросить наш сервер, мы попытаемся найти данные, которые соответствуют заданному радиусу, расстоянию и широте, долго по запросу запроса.

Наш контроллер принимает 3 запроса из запроса запроса, расстояние (с используемой единицей измерения в метрах), долгота (долгота текущего местоположения).

В этом случае ST_DWithin принимает 4 параметра, первый параметр — это текущая строка/местоположение данных, второй параметр — широта и долгота, указанные в запросе req, третий параметр — расстояние (радиус), а четвертый параметр — логическое значение. это указывает на использование сфероида в нашем запросе.

Теперь попробуйте использовать API

Запустите сервер, запустив npm run dev, и перейдите к предоставленному примеру маршрутов: https://localhost:3000/stores?distance=400&lat=107.59278847659893&long=-6.942981263106864

И все!

Теперь вы знаете, как добавить расширение postgis, создать миграцию с типом точки геометрии и заполнить данные. Полный код вы можете найти здесь.

Спасибо за прочтение !