Привет всем, эта короткая статья предназначена для тех, кому нужно выяснить, как сохранить географическую точку (долготу, широту) в 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, создать миграцию с типом точки геометрии и заполнить данные. Полный код вы можете найти здесь.
Спасибо за прочтение !